staging: r8188eu: delete driver
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 8 Mar 2023 13:19:34 +0000 (14:19 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Mar 2023 09:06:28 +0000 (10:06 +0100)
Now that the same hardware that the r8188eu driver supported is
supported by the real wireless driver rtl8xxxu, the r8188eu driver can
be deleted.

Also the rtl8xxxu driver supports way more devices, and is a fraction of
the overall size, making this a much better overall solution.

Thanks to the r8188eu developers and maintainers and reviewers over the
years, your work allowed Linux users to use their hardware before the
real driver was implemented properly.

Reported-by: Hans de Goede <hdegoede@redhat.com>
Cc: Phillip Potter <phil@philpotter.co.uk>
Cc: Pavel Skripkin <paskripkin@gmail.com>
Acked-by: Larry Finger <LarryFinger@lwfinger.net>
Acked-by: Hans de Goede <hdegoede@redhat.com>
Acked-by: Martin Kaiser <martin@kaiser.cx>
Tested-by: Philipp Hortmann <philipp.g.hortmann@gmail.com> # Edimax N150
Acked-by: Michael Straube <straube.linux@gmail.com>
Link: https://lore.kernel.org/r/20230308131934.380395-1-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
102 files changed:
MAINTAINERS
drivers/staging/Kconfig
drivers/staging/Makefile
drivers/staging/r8188eu/Kconfig [deleted file]
drivers/staging/r8188eu/Makefile [deleted file]
drivers/staging/r8188eu/TODO [deleted file]
drivers/staging/r8188eu/core/rtw_ap.c [deleted file]
drivers/staging/r8188eu/core/rtw_br_ext.c [deleted file]
drivers/staging/r8188eu/core/rtw_cmd.c [deleted file]
drivers/staging/r8188eu/core/rtw_efuse.c [deleted file]
drivers/staging/r8188eu/core/rtw_fw.c [deleted file]
drivers/staging/r8188eu/core/rtw_ieee80211.c [deleted file]
drivers/staging/r8188eu/core/rtw_ioctl_set.c [deleted file]
drivers/staging/r8188eu/core/rtw_iol.c [deleted file]
drivers/staging/r8188eu/core/rtw_led.c [deleted file]
drivers/staging/r8188eu/core/rtw_mlme.c [deleted file]
drivers/staging/r8188eu/core/rtw_mlme_ext.c [deleted file]
drivers/staging/r8188eu/core/rtw_p2p.c [deleted file]
drivers/staging/r8188eu/core/rtw_pwrctrl.c [deleted file]
drivers/staging/r8188eu/core/rtw_recv.c [deleted file]
drivers/staging/r8188eu/core/rtw_rf.c [deleted file]
drivers/staging/r8188eu/core/rtw_security.c [deleted file]
drivers/staging/r8188eu/core/rtw_sta_mgt.c [deleted file]
drivers/staging/r8188eu/core/rtw_wlan_util.c [deleted file]
drivers/staging/r8188eu/core/rtw_xmit.c [deleted file]
drivers/staging/r8188eu/hal/Hal8188ERateAdaptive.c [deleted file]
drivers/staging/r8188eu/hal/HalHWImg8188E_BB.c [deleted file]
drivers/staging/r8188eu/hal/HalHWImg8188E_MAC.c [deleted file]
drivers/staging/r8188eu/hal/HalHWImg8188E_RF.c [deleted file]
drivers/staging/r8188eu/hal/HalPhyRf_8188e.c [deleted file]
drivers/staging/r8188eu/hal/HalPwrSeqCmd.c [deleted file]
drivers/staging/r8188eu/hal/hal_com.c [deleted file]
drivers/staging/r8188eu/hal/hal_intf.c [deleted file]
drivers/staging/r8188eu/hal/odm.c [deleted file]
drivers/staging/r8188eu/hal/odm_HWConfig.c [deleted file]
drivers/staging/r8188eu/hal/odm_RTL8188E.c [deleted file]
drivers/staging/r8188eu/hal/rtl8188e_cmd.c [deleted file]
drivers/staging/r8188eu/hal/rtl8188e_dm.c [deleted file]
drivers/staging/r8188eu/hal/rtl8188e_hal_init.c [deleted file]
drivers/staging/r8188eu/hal/rtl8188e_phycfg.c [deleted file]
drivers/staging/r8188eu/hal/rtl8188e_rf6052.c [deleted file]
drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c [deleted file]
drivers/staging/r8188eu/hal/rtl8188eu_xmit.c [deleted file]
drivers/staging/r8188eu/hal/usb_halinit.c [deleted file]
drivers/staging/r8188eu/hal/usb_ops_linux.c [deleted file]
drivers/staging/r8188eu/include/Hal8188EPhyCfg.h [deleted file]
drivers/staging/r8188eu/include/Hal8188EPhyReg.h [deleted file]
drivers/staging/r8188eu/include/Hal8188ERateAdaptive.h [deleted file]
drivers/staging/r8188eu/include/HalHWImg8188E_BB.h [deleted file]
drivers/staging/r8188eu/include/HalHWImg8188E_MAC.h [deleted file]
drivers/staging/r8188eu/include/HalHWImg8188E_RF.h [deleted file]
drivers/staging/r8188eu/include/HalPhyRf_8188e.h [deleted file]
drivers/staging/r8188eu/include/HalPwrSeqCmd.h [deleted file]
drivers/staging/r8188eu/include/HalVerDef.h [deleted file]
drivers/staging/r8188eu/include/drv_types.h [deleted file]
drivers/staging/r8188eu/include/hal_com.h [deleted file]
drivers/staging/r8188eu/include/hal_intf.h [deleted file]
drivers/staging/r8188eu/include/ieee80211.h [deleted file]
drivers/staging/r8188eu/include/odm.h [deleted file]
drivers/staging/r8188eu/include/odm_HWConfig.h [deleted file]
drivers/staging/r8188eu/include/odm_RTL8188E.h [deleted file]
drivers/staging/r8188eu/include/odm_RegDefine11N.h [deleted file]
drivers/staging/r8188eu/include/osdep_intf.h [deleted file]
drivers/staging/r8188eu/include/osdep_service.h [deleted file]
drivers/staging/r8188eu/include/rtl8188e_cmd.h [deleted file]
drivers/staging/r8188eu/include/rtl8188e_dm.h [deleted file]
drivers/staging/r8188eu/include/rtl8188e_hal.h [deleted file]
drivers/staging/r8188eu/include/rtl8188e_recv.h [deleted file]
drivers/staging/r8188eu/include/rtl8188e_rf.h [deleted file]
drivers/staging/r8188eu/include/rtl8188e_spec.h [deleted file]
drivers/staging/r8188eu/include/rtl8188e_xmit.h [deleted file]
drivers/staging/r8188eu/include/rtw_ap.h [deleted file]
drivers/staging/r8188eu/include/rtw_br_ext.h [deleted file]
drivers/staging/r8188eu/include/rtw_cmd.h [deleted file]
drivers/staging/r8188eu/include/rtw_eeprom.h [deleted file]
drivers/staging/r8188eu/include/rtw_efuse.h [deleted file]
drivers/staging/r8188eu/include/rtw_event.h [deleted file]
drivers/staging/r8188eu/include/rtw_fw.h [deleted file]
drivers/staging/r8188eu/include/rtw_ht.h [deleted file]
drivers/staging/r8188eu/include/rtw_io.h [deleted file]
drivers/staging/r8188eu/include/rtw_ioctl.h [deleted file]
drivers/staging/r8188eu/include/rtw_ioctl_set.h [deleted file]
drivers/staging/r8188eu/include/rtw_iol.h [deleted file]
drivers/staging/r8188eu/include/rtw_led.h [deleted file]
drivers/staging/r8188eu/include/rtw_mlme.h [deleted file]
drivers/staging/r8188eu/include/rtw_mlme_ext.h [deleted file]
drivers/staging/r8188eu/include/rtw_p2p.h [deleted file]
drivers/staging/r8188eu/include/rtw_pwrctrl.h [deleted file]
drivers/staging/r8188eu/include/rtw_recv.h [deleted file]
drivers/staging/r8188eu/include/rtw_rf.h [deleted file]
drivers/staging/r8188eu/include/rtw_security.h [deleted file]
drivers/staging/r8188eu/include/rtw_xmit.h [deleted file]
drivers/staging/r8188eu/include/sta_info.h [deleted file]
drivers/staging/r8188eu/include/usb_ops.h [deleted file]
drivers/staging/r8188eu/include/usb_osintf.h [deleted file]
drivers/staging/r8188eu/include/wifi.h [deleted file]
drivers/staging/r8188eu/include/wlan_bssdef.h [deleted file]
drivers/staging/r8188eu/os_dep/ioctl_linux.c [deleted file]
drivers/staging/r8188eu/os_dep/os_intfs.c [deleted file]
drivers/staging/r8188eu/os_dep/osdep_service.c [deleted file]
drivers/staging/r8188eu/os_dep/usb_intf.c [deleted file]
drivers/staging/r8188eu/os_dep/usb_ops_linux.c [deleted file]

index 8d5bc22..93c5fa4 100644 (file)
@@ -19863,13 +19863,6 @@ S:     Maintained
 W:     http://wiki.laptop.org/go/DCON
 F:     drivers/staging/olpc_dcon/
 
-STAGING - REALTEK RTL8188EU DRIVERS
-M:     Larry Finger <Larry.Finger@lwfinger.net>
-M:     Phillip Potter <phil@philpotter.co.uk>
-R:     Pavel Skripkin <paskripkin@gmail.com>
-S:     Supported
-F:     drivers/staging/r8188eu/
-
 STAGING - REALTEK RTL8712U DRIVERS
 M:     Larry Finger <Larry.Finger@lwfinger.net>
 M:     Florian Schilhabel <florian.c.schilhabel@googlemail.com>.
index 5cfabd5..f9aef39 100644 (file)
@@ -36,8 +36,6 @@ source "drivers/staging/rtl8723bs/Kconfig"
 
 source "drivers/staging/rtl8712/Kconfig"
 
-source "drivers/staging/r8188eu/Kconfig"
-
 source "drivers/staging/rts5208/Kconfig"
 
 source "drivers/staging/octeon/Kconfig"
index f8c3aa9..ffa70dd 100644 (file)
@@ -8,7 +8,6 @@ obj-$(CONFIG_RTL8192U)          += rtl8192u/
 obj-$(CONFIG_RTL8192E)         += rtl8192e/
 obj-$(CONFIG_RTL8723BS)                += rtl8723bs/
 obj-$(CONFIG_R8712U)           += rtl8712/
-obj-$(CONFIG_R8188EU)          += r8188eu/
 obj-$(CONFIG_RTS5208)          += rts5208/
 obj-$(CONFIG_OCTEON_ETHERNET)  += octeon/
 obj-$(CONFIG_VT6655)           += vt6655/
diff --git a/drivers/staging/r8188eu/Kconfig b/drivers/staging/r8188eu/Kconfig
deleted file mode 100644 (file)
index f5fe423..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0
-config R8188EU
-       tristate "Realtek RTL8188EU Wireless LAN NIC driver"
-       depends on WLAN && USB && CFG80211
-       depends on m
-       select WIRELESS_EXT
-       select WEXT_PRIV
-       select LIB80211
-       select LIB80211_CRYPT_WEP
-       select LIB80211_CRYPT_CCMP
-       help
-       This option adds support for the Realtek RTL8188EU chipset, used in USB
-       devices such as the ASUS USB-N10 Nano. This newer driver is based on GitHub
-       sources for version v4.1.4_6773.20130222, and contains modifications for
-       newer kernel features. If built as a module, it will be called r8188eu.
-
diff --git a/drivers/staging/r8188eu/Makefile b/drivers/staging/r8188eu/Makefile
deleted file mode 100644 (file)
index fd494c2..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-
-r8188eu-y = \
-               hal/HalHWImg8188E_MAC.o \
-               hal/HalHWImg8188E_BB.o \
-               hal/HalHWImg8188E_RF.o \
-               hal/HalPhyRf_8188e.o \
-               hal/HalPwrSeqCmd.o \
-               hal/Hal8188ERateAdaptive.o \
-               hal/hal_intf.o \
-               hal/hal_com.o \
-               hal/odm.o \
-               hal/odm_HWConfig.o \
-               hal/odm_RTL8188E.o \
-               hal/rtl8188e_cmd.o \
-               hal/rtl8188e_dm.o \
-               hal/rtl8188e_hal_init.o \
-               hal/rtl8188e_phycfg.o \
-               hal/rtl8188e_rf6052.o \
-               hal/rtl8188e_rxdesc.o \
-               hal/rtl8188eu_xmit.o \
-               hal/usb_halinit.o \
-               hal/usb_ops_linux.o \
-               os_dep/ioctl_linux.o \
-               os_dep/os_intfs.o \
-               os_dep/osdep_service.o \
-               os_dep/usb_intf.o \
-               os_dep/usb_ops_linux.o \
-               core/rtw_ap.o \
-               core/rtw_br_ext.o \
-               core/rtw_cmd.o \
-               core/rtw_efuse.o \
-               core/rtw_fw.o \
-               core/rtw_ieee80211.o \
-               core/rtw_ioctl_set.o \
-               core/rtw_iol.o \
-               core/rtw_led.o \
-               core/rtw_mlme.o \
-               core/rtw_mlme_ext.o \
-               core/rtw_pwrctrl.o \
-               core/rtw_p2p.o \
-               core/rtw_recv.o \
-               core/rtw_rf.o \
-               core/rtw_security.o \
-               core/rtw_sta_mgt.o \
-               core/rtw_wlan_util.o \
-               core/rtw_xmit.o
-
-obj-$(CONFIG_R8188EU) := r8188eu.o
diff --git a/drivers/staging/r8188eu/TODO b/drivers/staging/r8188eu/TODO
deleted file mode 100644 (file)
index ab9d5d1..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-To-do list:
-
-* Correct the coding style according to Linux guidelines; please read the document
-  at https://www.kernel.org/doc/html/latest/process/coding-style.html.
-* Remove unnecessary debugging/printing macros; for those that are still needed
-  use the proper kernel API (pr_debug(), dev_dbg(), netdev_dbg()).
-* Remove dead code such as unusued functions, variables, fields, etc..
-* Use in-kernel API and remove unnecessary wrappers where possible.
-* Fix bugs due to code that sleeps in atomic context.
-* Remove the HAL layer and migrate its functionality into the relevant parts of
-  the driver.
-* Switch to use LIB80211.
-* Switch to use MAC80211.
-* Switch to use CFG80211.
-* Improve the error handling of various functions, particularly those that use
-  existing kernel APIs.
diff --git a/drivers/staging/r8188eu/core/rtw_ap.c b/drivers/staging/r8188eu/core/rtw_ap.c
deleted file mode 100644 (file)
index e0ca4b6..0000000
+++ /dev/null
@@ -1,1181 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#define _RTW_AP_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/wifi.h"
-#include "../include/ieee80211.h"
-#include "../include/rtl8188e_cmd.h"
-
-void init_mlme_ap_info(struct adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-
-       spin_lock_init(&pmlmepriv->bcn_update_lock);
-
-       /* for ACL */
-       rtw_init_queue(&pacl_list->acl_node_q);
-
-       start_ap_mode(padapter);
-}
-
-void free_mlme_ap_info(struct adapter *padapter)
-{
-       struct sta_info *psta = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pmlmepriv->update_bcn = false;
-       pmlmeext->bstart_bss = false;
-
-       rtw_sta_flush(padapter);
-
-       pmlmeinfo->state = _HW_STATE_NOLINK_;
-
-       /* free_assoc_sta_resources */
-       rtw_free_all_stainfo(padapter);
-
-       /* free bc/mc sta_info */
-       psta = rtw_get_bcmc_stainfo(padapter);
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-       rtw_free_stainfo(padapter, psta);
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-}
-
-static void update_BCNTIM(struct adapter *padapter)
-{
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork_mlmeext = &pmlmeinfo->network;
-       unsigned char *pie = pnetwork_mlmeext->IEs;
-       u8 *p, *dst_ie, *premainder_ie = NULL;
-       u8 *pbackup_remainder_ie = NULL;
-       __le16 tim_bitmap_le;
-       uint offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
-
-       /* update TIM IE */
-
-       p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, _TIM_IE_, &tim_ielen,
-                      pnetwork_mlmeext->IELength - _FIXED_IE_LENGTH_);
-       if (p && tim_ielen > 0) {
-               tim_ielen += 2;
-               premainder_ie = p + tim_ielen;
-               tim_ie_offset = (int)(p - pie);
-               remainder_ielen = pnetwork_mlmeext->IELength - tim_ie_offset - tim_ielen;
-               /* append TIM IE from dst_ie offset */
-               dst_ie = p;
-       } else {
-               tim_ielen = 0;
-
-               /* calculate head_len */
-               offset = _FIXED_IE_LENGTH_;
-               offset += pnetwork_mlmeext->Ssid.SsidLength + 2;
-
-               /*  get supported rates len */
-               p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_,
-                              &tmp_len, (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_));
-               if (p)
-                       offset += tmp_len + 2;
-
-               /* DS Parameter Set IE, len = 3 */
-               offset += 3;
-
-               premainder_ie = pie + offset;
-
-               remainder_ielen = pnetwork_mlmeext->IELength - offset - tim_ielen;
-
-               /* append TIM IE from offset */
-               dst_ie = pie + offset;
-       }
-
-       if (remainder_ielen > 0) {
-               pbackup_remainder_ie = kmalloc(remainder_ielen, GFP_ATOMIC);
-               if (pbackup_remainder_ie && premainder_ie)
-                       memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
-       }
-       *dst_ie++ = _TIM_IE_;
-
-       if ((pstapriv->tim_bitmap & 0xff00) && (pstapriv->tim_bitmap & 0x00fc))
-               tim_ielen = 5;
-       else
-               tim_ielen = 4;
-
-       *dst_ie++ = tim_ielen;
-
-       *dst_ie++ = 0;/* DTIM count */
-       *dst_ie++ = 1;/* DTIM period */
-
-       if (pstapriv->tim_bitmap & BIT(0))/* for bc/mc frames */
-               *dst_ie++ = BIT(0);/* bitmap ctrl */
-       else
-               *dst_ie++ = 0;
-
-       tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
-
-       if (tim_ielen == 4) {
-               *dst_ie++ = *(u8 *)&tim_bitmap_le;
-       } else if (tim_ielen == 5) {
-               memcpy(dst_ie, &tim_bitmap_le, 2);
-               dst_ie += 2;
-       }
-
-       /* copy remainder IE */
-       if (pbackup_remainder_ie) {
-               memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
-
-               kfree(pbackup_remainder_ie);
-       }
-       offset =  (uint)(dst_ie - pie);
-       pnetwork_mlmeext->IELength = offset + remainder_ielen;
-
-       set_tx_beacon_cmd(padapter);
-}
-
-static u8 chk_sta_is_alive(struct sta_info *psta)
-{
-       u8 ret = false;
-
-       if ((psta->sta_stats.last_rx_data_pkts + psta->sta_stats.last_rx_ctrl_pkts) ==
-           (psta->sta_stats.rx_data_pkts + psta->sta_stats.rx_ctrl_pkts))
-               ;
-       else
-               ret = true;
-
-       sta_update_last_rx_pkts(psta);
-
-       return ret;
-}
-
-void   expire_timeout_chk(struct adapter *padapter)
-{
-       struct list_head *phead, *plist;
-       u8 updated = 0;
-       struct sta_info *psta = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       u8 chk_alive_num = 0;
-       char chk_alive_list[NUM_STA];
-       int i;
-
-       spin_lock_bh(&pstapriv->auth_list_lock);
-
-       phead = &pstapriv->auth_list;
-       plist = phead->next;
-
-       /* check auth_queue */
-       while (phead != plist) {
-               psta = container_of(plist, struct sta_info, auth_list);
-               plist = plist->next;
-
-               if (psta->expire_to > 0) {
-                       psta->expire_to--;
-                       if (psta->expire_to == 0) {
-                               list_del_init(&psta->auth_list);
-                               pstapriv->auth_list_cnt--;
-
-                               spin_unlock_bh(&pstapriv->auth_list_lock);
-
-                               spin_lock_bh(&pstapriv->sta_hash_lock);
-                               rtw_free_stainfo(padapter, psta);
-                               spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-                               spin_lock_bh(&pstapriv->auth_list_lock);
-                       }
-               }
-       }
-       spin_unlock_bh(&pstapriv->auth_list_lock);
-
-       psta = NULL;
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-
-       phead = &pstapriv->asoc_list;
-       plist = phead->next;
-
-       /* check asoc_queue */
-       while (phead != plist) {
-               psta = container_of(plist, struct sta_info, asoc_list);
-               plist = plist->next;
-
-               if (chk_sta_is_alive(psta) || !psta->expire_to) {
-                       psta->expire_to = pstapriv->expire_to;
-                       psta->keep_alive_trycnt = 0;
-                       psta->under_exist_checking = 0;
-               } else {
-                       psta->expire_to--;
-               }
-
-               if (psta->expire_to <= 0) {
-                       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-                       if (padapter->registrypriv.wifi_spec == 1) {
-                               psta->expire_to = pstapriv->expire_to;
-                               continue;
-                       }
-
-                       if (psta->state & WIFI_SLEEP_STATE) {
-                               if (!(psta->state & WIFI_STA_ALIVE_CHK_STATE)) {
-                                       /* to check if alive by another methods if station is at ps mode. */
-                                       psta->expire_to = pstapriv->expire_to;
-                                       psta->state |= WIFI_STA_ALIVE_CHK_STATE;
-
-                                       /* to update bcn with tim_bitmap for this station */
-                                       pstapriv->tim_bitmap |= BIT(psta->aid);
-                                       update_beacon(padapter, _TIM_IE_, NULL, false);
-
-                                       if (!pmlmeext->active_keep_alive_check)
-                                               continue;
-                               }
-                       }
-                       if (pmlmeext->active_keep_alive_check) {
-                               int stainfo_offset;
-
-                               stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
-                               if (stainfo_offset_valid(stainfo_offset))
-                                       chk_alive_list[chk_alive_num++] = stainfo_offset;
-                               continue;
-                       }
-
-                       list_del_init(&psta->asoc_list);
-                       pstapriv->asoc_list_cnt--;
-
-                       updated = ap_free_sta(padapter, psta, true, WLAN_REASON_DEAUTH_LEAVING);
-               } else {
-                       /* TODO: Aging mechanism to digest frames in sleep_q to avoid running out of xmitframe */
-                       if (psta->sleepq_len > (NR_XMITFRAME / pstapriv->asoc_list_cnt) &&
-                           padapter->xmitpriv.free_xmitframe_cnt < (NR_XMITFRAME / pstapriv->asoc_list_cnt / 2)) {
-                               wakeup_sta_to_xmit(padapter, psta);
-                       }
-               }
-       }
-
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       if (chk_alive_num) {
-               u8 backup_oper_channel = 0;
-               struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-               /* switch to correct channel of current network  before issue keep-alive frames */
-               if (rtw_get_oper_ch(padapter) != pmlmeext->cur_channel) {
-                       backup_oper_channel = rtw_get_oper_ch(padapter);
-                       SelectChannel(padapter, pmlmeext->cur_channel);
-               }
-
-               /* issue null data to check sta alive*/
-               for (i = 0; i < chk_alive_num; i++) {
-                       int ret = _FAIL;
-
-                       psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
-
-                       if (psta->state & WIFI_SLEEP_STATE)
-                               ret = issue_nulldata(padapter, psta->hwaddr, 0, 1, 50);
-                       else
-                               ret = issue_nulldata(padapter, psta->hwaddr, 0, 3, 50);
-
-                       psta->keep_alive_trycnt++;
-                       if (ret == _SUCCESS) {
-                               psta->expire_to = pstapriv->expire_to;
-                               psta->keep_alive_trycnt = 0;
-                               continue;
-                       } else if (psta->keep_alive_trycnt <= 3) {
-                               psta->expire_to = 1;
-                               continue;
-                       }
-
-                       psta->keep_alive_trycnt = 0;
-
-                       spin_lock_bh(&pstapriv->asoc_list_lock);
-                       list_del_init(&psta->asoc_list);
-                       pstapriv->asoc_list_cnt--;
-                       updated = ap_free_sta(padapter, psta, true, WLAN_REASON_DEAUTH_LEAVING);
-                       spin_unlock_bh(&pstapriv->asoc_list_lock);
-               }
-
-               if (backup_oper_channel > 0) /* back to the original operation channel */
-                       SelectChannel(padapter, backup_oper_channel);
-       }
-
-       associated_clients_update(padapter, updated);
-}
-
-void add_RATid(struct adapter *padapter, struct sta_info *psta, u8 rssi_level)
-{
-       int i;
-       u32 init_rate = 0;
-       unsigned char sta_band = 0, raid, shortGIrate = false;
-       unsigned char limit;
-       unsigned int tx_ra_bitmap = 0;
-       struct ht_priv  *psta_ht = NULL;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_bssid_ex *pcur_network = (struct wlan_bssid_ex *)&pmlmepriv->cur_network.network;
-
-       if (psta)
-               psta_ht = &psta->htpriv;
-       else
-               return;
-
-       if (!(psta->state & _FW_LINKED))
-               return;
-
-       /* b/g mode ra_bitmap */
-       for (i = 0; i < sizeof(psta->bssrateset); i++) {
-               if (psta->bssrateset[i])
-                       tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i] & 0x7f);
-       }
-       /* n mode ra_bitmap */
-       if (psta_ht->ht_option) {
-               limit = 8; /* 1R */
-
-               for (i = 0; i < limit; i++) {
-                       if (psta_ht->ht_cap.mcs.rx_mask[i / 8] & BIT(i % 8))
-                               tx_ra_bitmap |= BIT(i + 12);
-               }
-
-               /* max short GI rate */
-               shortGIrate = psta_ht->sgi;
-       }
-
-       if (pcur_network->Configuration.DSConfig > 14) {
-               sta_band |= WIRELESS_INVALID;
-       } else {
-               if (tx_ra_bitmap & 0xffff000)
-                       sta_band |= WIRELESS_11_24N | WIRELESS_11G | WIRELESS_11B;
-               else if (tx_ra_bitmap & 0xff0)
-                       sta_band |= WIRELESS_11G | WIRELESS_11B;
-               else
-                       sta_band |= WIRELESS_11B;
-       }
-
-       psta->wireless_mode = sta_band;
-
-       raid = networktype_to_raid(sta_band);
-       init_rate = get_highest_rate_idx(tx_ra_bitmap & 0x0fffffff) & 0x3f;
-
-       if (psta->aid < NUM_STA) {
-               u8 arg = 0;
-
-               arg = psta->mac_id & 0x1f;
-
-               arg |= BIT(7);/* support entry 2~31 */
-
-               if (shortGIrate)
-                       arg |= BIT(5);
-
-               tx_ra_bitmap |= ((raid << 28) & 0xf0000000);
-
-               /* bitmap[0:27] = tx_rate_bitmap */
-               /* bitmap[28:31]= Rate Adaptive id */
-               /* arg[0:4] = macid */
-               /* arg[5] = Short GI */
-               rtl8188e_Add_RateATid(padapter, tx_ra_bitmap, arg, rssi_level);
-
-               if (shortGIrate)
-                       init_rate |= BIT(6);
-
-               /* set ra_id, init_rate */
-               psta->raid = raid;
-               psta->init_rate = init_rate;
-       }
-}
-
-void update_bmc_sta(struct adapter *padapter)
-{
-       u32 init_rate = 0;
-       unsigned char   network_type, raid;
-       int i, supportRateNum = 0;
-       unsigned int tx_ra_bitmap = 0;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_bssid_ex *pcur_network = (struct wlan_bssid_ex *)&pmlmepriv->cur_network.network;
-       struct sta_info *psta = rtw_get_bcmc_stainfo(padapter);
-
-       if (psta) {
-               psta->aid = 0;/* default set to 0 */
-               psta->mac_id = psta->aid + 1;
-
-               psta->qos_option = 0;
-               psta->htpriv.ht_option = false;
-
-               psta->ieee8021x_blocked = 0;
-
-               memset((void *)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
-
-               /* prepare for add_RATid */
-               supportRateNum = rtw_get_rateset_len((u8 *)&pcur_network->SupportedRates);
-               network_type = rtw_check_network_type((u8 *)&pcur_network->SupportedRates, supportRateNum, 1);
-
-               memcpy(psta->bssrateset, &pcur_network->SupportedRates, supportRateNum);
-               psta->bssratelen = supportRateNum;
-
-               /* b/g mode ra_bitmap */
-               for (i = 0; i < supportRateNum; i++) {
-                       if (psta->bssrateset[i])
-                               tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i] & 0x7f);
-               }
-
-               if (pcur_network->Configuration.DSConfig > 14) {
-                       network_type = WIRELESS_INVALID;
-               } else {
-                       /* force to b mode */
-                       network_type = WIRELESS_11B;
-                       tx_ra_bitmap = 0xf;
-               }
-
-               raid = networktype_to_raid(network_type);
-               init_rate = get_highest_rate_idx(tx_ra_bitmap & 0x0fffffff) & 0x3f;
-
-               /* ap mode */
-               rtl8188e_SetHalODMVar(padapter, psta, true);
-
-               {
-                       u8 arg = 0;
-
-                       arg = psta->mac_id & 0x1f;
-                       arg |= BIT(7);
-                       tx_ra_bitmap |= ((raid << 28) & 0xf0000000);
-
-                       /* bitmap[0:27] = tx_rate_bitmap */
-                       /* bitmap[28:31]= Rate Adaptive id */
-                       /* arg[0:4] = macid */
-                       /* arg[5] = Short GI */
-                       rtl8188e_Add_RateATid(padapter, tx_ra_bitmap, arg, 0);
-               }
-               /* set ra_id, init_rate */
-               psta->raid = raid;
-               psta->init_rate = init_rate;
-
-               rtw_sta_media_status_rpt(padapter, psta, 1);
-
-               spin_lock_bh(&psta->lock);
-               psta->state = _FW_LINKED;
-               spin_unlock_bh(&psta->lock);
-       }
-}
-
-/* notes: */
-/* AID: 1~MAX for sta and 0 for bc/mc in ap/adhoc mode */
-/* MAC_ID = AID+1 for sta in ap/adhoc mode */
-/* MAC_ID = 1 for bc/mc for sta/ap/adhoc */
-/* MAC_ID = 0 for bssid for sta/ap/adhoc */
-/* CAM_ID = 0~3 for default key, cmd_id = macid + 3, macid = aid+1; */
-
-void update_sta_info_apmode(struct adapter *padapter, struct sta_info *psta)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct ht_priv  *phtpriv_ap = &pmlmepriv->htpriv;
-       struct ht_priv  *phtpriv_sta = &psta->htpriv;
-       u16 sta_cap_info;
-       u16 ap_cap_info;
-
-       psta->mac_id = psta->aid + 1;
-
-       /* ap mode */
-       rtl8188e_SetHalODMVar(padapter, psta, true);
-
-       if (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)
-               psta->ieee8021x_blocked = true;
-       else
-               psta->ieee8021x_blocked = false;
-
-       /* update sta's cap */
-
-       /* ERP */
-       VCS_update(padapter, psta);
-       /* HT related cap */
-       if (phtpriv_sta->ht_option) {
-               /* check if sta supports rx ampdu */
-               phtpriv_sta->ampdu_enable = phtpriv_ap->ampdu_enable;
-               sta_cap_info = le16_to_cpu(phtpriv_sta->ht_cap.cap_info);
-               ap_cap_info = le16_to_cpu(phtpriv_ap->ht_cap.cap_info);
-
-               /* check if sta support s Short GI */
-               if ((sta_cap_info & ap_cap_info) &
-                   (IEEE80211_HT_CAP_SGI_20 | IEEE80211_HT_CAP_SGI_40))
-                       phtpriv_sta->sgi = true;
-
-               /*  bwmode */
-               if ((sta_cap_info & ap_cap_info) & IEEE80211_HT_CAP_SUP_WIDTH_20_40) {
-                       phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
-                       phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
-               }
-               psta->qos_option = true;
-       } else {
-               phtpriv_sta->ampdu_enable = false;
-               phtpriv_sta->sgi = false;
-               phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_20;
-               phtpriv_sta->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-       }
-
-       /* Rx AMPDU */
-       send_delba(padapter, 0, psta->hwaddr);/*  recipient */
-
-       /* TX AMPDU */
-       send_delba(padapter, 1, psta->hwaddr);/* originator */
-       phtpriv_sta->agg_enable_bitmap = 0x0;/* reset */
-       phtpriv_sta->candidate_tid_bitmap = 0x0;/* reset */
-
-       /* todo: init other variables */
-
-       memset((void *)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
-
-       spin_lock_bh(&psta->lock);
-       psta->state |= _FW_LINKED;
-       spin_unlock_bh(&psta->lock);
-}
-
-static void update_bcn_erpinfo_ie(struct adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
-       unsigned char *p, *ie = pnetwork->IEs;
-       u32 len = 0;
-
-       if (!pmlmeinfo->ERP_enable)
-               return;
-
-       /* parsing ERP_IE */
-       p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &len,
-                      (pnetwork->IELength - _BEACON_IE_OFFSET_));
-       if (p && len > 0) {
-               struct ndis_802_11_var_ie *pIE = (struct ndis_802_11_var_ie *)p;
-
-               if (pmlmepriv->num_sta_non_erp == 1)
-                       pIE->data[0] |= RTW_ERP_INFO_NON_ERP_PRESENT | RTW_ERP_INFO_USE_PROTECTION;
-               else
-                       pIE->data[0] &= ~(RTW_ERP_INFO_NON_ERP_PRESENT | RTW_ERP_INFO_USE_PROTECTION);
-
-               if (pmlmepriv->num_sta_no_short_preamble > 0)
-                       pIE->data[0] |= RTW_ERP_INFO_BARKER_PREAMBLE_MODE;
-               else
-                       pIE->data[0] &= ~(RTW_ERP_INFO_BARKER_PREAMBLE_MODE);
-
-               ERP_IE_handler(padapter, pIE);
-       }
-}
-
-static void update_bcn_wps_ie(struct adapter *padapter)
-{
-       u8 *pwps_ie = NULL, *pwps_ie_src;
-       u8 *premainder_ie, *pbackup_remainder_ie = NULL;
-       uint wps_ielen = 0, wps_offset, remainder_ielen;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
-       unsigned char *ie = pnetwork->IEs;
-       u32 ielen = pnetwork->IELength;
-
-       pwps_ie = rtw_get_wps_ie(ie + _FIXED_IE_LENGTH_, ielen - _FIXED_IE_LENGTH_, NULL, &wps_ielen);
-
-       if (!pwps_ie || wps_ielen == 0)
-               return;
-
-       wps_offset = (uint)(pwps_ie - ie);
-
-       premainder_ie = pwps_ie + wps_ielen;
-
-       remainder_ielen = ielen - wps_offset - wps_ielen;
-
-       if (remainder_ielen > 0) {
-               pbackup_remainder_ie = kmalloc(remainder_ielen, GFP_ATOMIC);
-               if (pbackup_remainder_ie)
-                       memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
-       }
-
-       pwps_ie_src = pmlmepriv->wps_beacon_ie;
-       if (!pwps_ie_src)
-               goto exit;
-
-       wps_ielen = (uint)pwps_ie_src[1];/* to get ie data len */
-       if ((wps_offset + wps_ielen + 2 + remainder_ielen) <= MAX_IE_SZ) {
-               memcpy(pwps_ie, pwps_ie_src, wps_ielen + 2);
-               pwps_ie += (wps_ielen + 2);
-
-               if (pbackup_remainder_ie)
-                       memcpy(pwps_ie, pbackup_remainder_ie, remainder_ielen);
-
-               /* update IELength */
-               pnetwork->IELength = wps_offset + (wps_ielen + 2) + remainder_ielen;
-       }
-
-exit:
-       kfree(pbackup_remainder_ie);
-}
-
-static void update_bcn_vendor_spec_ie(struct adapter *padapter, u8 *oui)
-{
-       if (!memcmp(WPS_OUI, oui, 4))
-               update_bcn_wps_ie(padapter);
-}
-
-void update_beacon(struct adapter *padapter, u8 ie_id, u8 *oui, u8 tx)
-{
-       struct mlme_priv *pmlmepriv;
-       struct mlme_ext_priv    *pmlmeext;
-
-       if (!padapter)
-               return;
-
-       pmlmepriv = &padapter->mlmepriv;
-       pmlmeext = &padapter->mlmeextpriv;
-
-       if (!pmlmeext->bstart_bss)
-               return;
-
-       spin_lock_bh(&pmlmepriv->bcn_update_lock);
-
-       switch (ie_id) {
-       case _TIM_IE_:
-               update_BCNTIM(padapter);
-               break;
-       case _ERPINFO_IE_:
-               update_bcn_erpinfo_ie(padapter);
-               break;
-       case _VENDOR_SPECIFIC_IE_:
-               update_bcn_vendor_spec_ie(padapter, oui);
-               break;
-       default:
-               break;
-       }
-
-       pmlmepriv->update_bcn = true;
-
-       spin_unlock_bh(&pmlmepriv->bcn_update_lock);
-
-       if (tx)
-               set_tx_beacon_cmd(padapter);
-}
-
-/* op_mode
- * Set to 0 (HT pure) under the following conditions
- *     - all STAs in the BSS are 20/40 MHz HT in 20/40 MHz BSS or
- *     - all STAs in the BSS are 20 MHz HT in 20 MHz BSS
- * Set to 1 (HT non-member protection) if there may be non-HT STAs
- *     in both the primary and the secondary channel
- * Set to 2 if only HT STAs are associated in BSS,
- *     however and at least one 20 MHz HT STA is associated
- * Set to 3 (HT mixed mode) when one or more non-HT STAs are associated
- *     (currently non-GF HT station is considered as non-HT STA also)
- */
-static int rtw_ht_operation_update(struct adapter *padapter)
-{
-       u16 cur_op_mode, new_op_mode;
-       int op_mode_changes = 0;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv  *phtpriv_ap = &pmlmepriv->htpriv;
-
-       if (pmlmepriv->htpriv.ht_option)
-               return 0;
-
-       if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT) &&
-           pmlmepriv->num_sta_ht_no_gf) {
-               pmlmepriv->ht_op_mode |=
-                       HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
-               op_mode_changes++;
-       } else if ((pmlmepriv->ht_op_mode &
-                  HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT) &&
-                  pmlmepriv->num_sta_ht_no_gf == 0) {
-               pmlmepriv->ht_op_mode &=
-                       ~HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT;
-               op_mode_changes++;
-       }
-
-       if (!(pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
-           (pmlmepriv->num_sta_no_ht || pmlmepriv->olbc_ht)) {
-               pmlmepriv->ht_op_mode |= HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
-               op_mode_changes++;
-       } else if ((pmlmepriv->ht_op_mode &
-                   HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT) &&
-                  (pmlmepriv->num_sta_no_ht == 0 && !pmlmepriv->olbc_ht)) {
-               pmlmepriv->ht_op_mode &=
-                       ~HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT;
-               op_mode_changes++;
-       }
-
-       /* Note: currently we switch to the MIXED op mode if HT non-greenfield
-        * station is associated. Probably it's a theoretical case, since
-        * it looks like all known HT STAs support greenfield.
-        */
-       new_op_mode = 0;
-       if (pmlmepriv->num_sta_no_ht ||
-           (pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT))
-               new_op_mode = OP_MODE_MIXED;
-       else if ((le16_to_cpu(phtpriv_ap->ht_cap.cap_info) &
-                 IEEE80211_HT_CAP_SUP_WIDTH_20_40) &&
-                pmlmepriv->num_sta_ht_20mhz)
-               new_op_mode = OP_MODE_20MHZ_HT_STA_ASSOCED;
-       else if (pmlmepriv->olbc_ht)
-               new_op_mode = OP_MODE_MAY_BE_LEGACY_STAS;
-       else
-               new_op_mode = OP_MODE_PURE;
-
-       cur_op_mode = pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_OP_MODE_MASK;
-       if (cur_op_mode != new_op_mode) {
-               pmlmepriv->ht_op_mode &= ~HT_INFO_OPERATION_MODE_OP_MODE_MASK;
-               pmlmepriv->ht_op_mode |= new_op_mode;
-               op_mode_changes++;
-       }
-
-       return op_mode_changes;
-}
-
-void associated_clients_update(struct adapter *padapter, u8 updated)
-{
-       /* update associated stations cap. */
-       if (updated) {
-               struct list_head *phead, *plist;
-               struct sta_info *psta = NULL;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               spin_lock_bh(&pstapriv->asoc_list_lock);
-
-               phead = &pstapriv->asoc_list;
-               plist = phead->next;
-
-               /* check asoc_queue */
-               while (phead != plist) {
-                       psta = container_of(plist, struct sta_info, asoc_list);
-
-                       plist = plist->next;
-
-                       VCS_update(padapter, psta);
-               }
-               spin_unlock_bh(&pstapriv->asoc_list_lock);
-       }
-}
-
-/* called > TSR LEVEL for USB or SDIO Interface*/
-void bss_cap_update_on_sta_join(struct adapter *padapter, struct sta_info *psta)
-{
-       u8 beacon_updated = false;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       if (!(psta->flags & WLAN_STA_SHORT_PREAMBLE)) {
-               if (!psta->no_short_preamble_set) {
-                       psta->no_short_preamble_set = 1;
-
-                       pmlmepriv->num_sta_no_short_preamble++;
-
-                       if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
-                           (pmlmepriv->num_sta_no_short_preamble == 1)) {
-                               beacon_updated = true;
-                               update_beacon(padapter, 0xFF, NULL, true);
-                       }
-               }
-       } else {
-               if (psta->no_short_preamble_set) {
-                       psta->no_short_preamble_set = 0;
-
-                       pmlmepriv->num_sta_no_short_preamble--;
-
-                       if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
-                           (pmlmepriv->num_sta_no_short_preamble == 0)) {
-                               beacon_updated = true;
-                               update_beacon(padapter, 0xFF, NULL, true);
-                       }
-               }
-       }
-
-       if (psta->flags & WLAN_STA_NONERP) {
-               if (!psta->nonerp_set) {
-                       psta->nonerp_set = 1;
-
-                       pmlmepriv->num_sta_non_erp++;
-
-                       if (pmlmepriv->num_sta_non_erp == 1) {
-                               beacon_updated = true;
-                               update_beacon(padapter, _ERPINFO_IE_, NULL, true);
-                       }
-               }
-       } else {
-               if (psta->nonerp_set) {
-                       psta->nonerp_set = 0;
-
-                       pmlmepriv->num_sta_non_erp--;
-
-                       if (pmlmepriv->num_sta_non_erp == 0) {
-                               beacon_updated = true;
-                               update_beacon(padapter, _ERPINFO_IE_, NULL, true);
-                       }
-               }
-       }
-
-       if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT)) {
-               if (!psta->no_short_slot_time_set) {
-                       psta->no_short_slot_time_set = 1;
-
-                       pmlmepriv->num_sta_no_short_slot_time++;
-
-                       if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
-                           (pmlmepriv->num_sta_no_short_slot_time == 1)) {
-                               beacon_updated = true;
-                               update_beacon(padapter, 0xFF, NULL, true);
-                       }
-               }
-       } else {
-               if (psta->no_short_slot_time_set) {
-                       psta->no_short_slot_time_set = 0;
-
-                       pmlmepriv->num_sta_no_short_slot_time--;
-
-                       if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
-                           (pmlmepriv->num_sta_no_short_slot_time == 0)) {
-                               beacon_updated = true;
-                               update_beacon(padapter, 0xFF, NULL, true);
-                       }
-               }
-       }
-
-       if (psta->flags & WLAN_STA_HT) {
-               u16 ht_capab = le16_to_cpu(psta->htpriv.ht_cap.cap_info);
-
-               if (psta->no_ht_set) {
-                       psta->no_ht_set = 0;
-                       pmlmepriv->num_sta_no_ht--;
-               }
-
-               if ((ht_capab & IEEE80211_HT_CAP_GRN_FLD) == 0) {
-                       if (!psta->no_ht_gf_set) {
-                               psta->no_ht_gf_set = 1;
-                               pmlmepriv->num_sta_ht_no_gf++;
-                       }
-               }
-
-               if ((ht_capab & IEEE80211_HT_CAP_SUP_WIDTH_20_40) == 0) {
-                       if (!psta->ht_20mhz_set) {
-                               psta->ht_20mhz_set = 1;
-                               pmlmepriv->num_sta_ht_20mhz++;
-                       }
-               }
-       } else {
-               if (!psta->no_ht_set) {
-                       psta->no_ht_set = 1;
-                       pmlmepriv->num_sta_no_ht++;
-               }
-       }
-
-       if (rtw_ht_operation_update(padapter) > 0) {
-               update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, false);
-               update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, true);
-       }
-
-       /* update associated stations cap. */
-       associated_clients_update(padapter,  beacon_updated);
-}
-
-u8 bss_cap_update_on_sta_leave(struct adapter *padapter, struct sta_info *psta)
-{
-       u8 beacon_updated = false;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       if (!psta)
-               return beacon_updated;
-
-       if (psta->no_short_preamble_set) {
-               psta->no_short_preamble_set = 0;
-               pmlmepriv->num_sta_no_short_preamble--;
-               if (pmlmeext->cur_wireless_mode > WIRELESS_11B &&
-                   pmlmepriv->num_sta_no_short_preamble == 0) {
-                       beacon_updated = true;
-                       update_beacon(padapter, 0xFF, NULL, true);
-               }
-       }
-
-       if (psta->nonerp_set) {
-               psta->nonerp_set = 0;
-               pmlmepriv->num_sta_non_erp--;
-               if (pmlmepriv->num_sta_non_erp == 0) {
-                       beacon_updated = true;
-                       update_beacon(padapter, _ERPINFO_IE_, NULL, true);
-               }
-       }
-
-       if (psta->no_short_slot_time_set) {
-               psta->no_short_slot_time_set = 0;
-               pmlmepriv->num_sta_no_short_slot_time--;
-               if (pmlmeext->cur_wireless_mode > WIRELESS_11B &&
-                   pmlmepriv->num_sta_no_short_slot_time == 0) {
-                       beacon_updated = true;
-                       update_beacon(padapter, 0xFF, NULL, true);
-               }
-       }
-
-       if (psta->no_ht_gf_set) {
-               psta->no_ht_gf_set = 0;
-               pmlmepriv->num_sta_ht_no_gf--;
-       }
-
-       if (psta->no_ht_set) {
-               psta->no_ht_set = 0;
-               pmlmepriv->num_sta_no_ht--;
-       }
-
-       if (psta->ht_20mhz_set) {
-               psta->ht_20mhz_set = 0;
-               pmlmepriv->num_sta_ht_20mhz--;
-       }
-
-       if (rtw_ht_operation_update(padapter) > 0) {
-               update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, false);
-               update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, true);
-       }
-
-       /* update associated stations cap. */
-
-       return beacon_updated;
-}
-
-void rtw_indicate_sta_assoc_event(struct adapter *padapter, struct sta_info *psta)
-{
-       union iwreq_data wrqu;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       if (!psta)
-               return;
-
-       if (psta->aid > NUM_STA)
-               return;
-
-       if (pstapriv->sta_aid[psta->aid - 1] != psta)
-               return;
-
-       wrqu.addr.sa_family = ARPHRD_ETHER;
-
-       memcpy(wrqu.addr.sa_data, psta->hwaddr, ETH_ALEN);
-
-       wireless_send_event(padapter->pnetdev, IWEVREGISTERED, &wrqu, NULL);
-}
-
-static void rtw_indicate_sta_disassoc_event(struct adapter *padapter, struct sta_info *psta)
-{
-       union iwreq_data wrqu;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       if (!psta)
-               return;
-
-       if (psta->aid > NUM_STA)
-               return;
-
-       if (pstapriv->sta_aid[psta->aid - 1] != psta)
-               return;
-
-       wrqu.addr.sa_family = ARPHRD_ETHER;
-
-       memcpy(wrqu.addr.sa_data, psta->hwaddr, ETH_ALEN);
-
-       wireless_send_event(padapter->pnetdev, IWEVEXPIRED, &wrqu, NULL);
-}
-
-u8 ap_free_sta(struct adapter *padapter, struct sta_info *psta,
-              bool active, u16 reason)
-{
-       u8 beacon_updated = false;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       if (!psta)
-               return beacon_updated;
-
-       /* tear down Rx AMPDU */
-       send_delba(padapter, 0, psta->hwaddr);/*  recipient */
-
-       /* tear down TX AMPDU */
-       send_delba(padapter, 1, psta->hwaddr);/*  originator */
-       psta->htpriv.agg_enable_bitmap = 0x0;/* reset */
-       psta->htpriv.candidate_tid_bitmap = 0x0;/* reset */
-
-       if (active)
-               issue_deauth(padapter, psta->hwaddr, reason);
-
-       /* clear cam entry / key */
-       rtw_clearstakey_cmd(padapter, (u8 *)psta, (u8)(psta->mac_id + 3), true);
-
-       spin_lock_bh(&psta->lock);
-       psta->state &= ~_FW_LINKED;
-       spin_unlock_bh(&psta->lock);
-
-       rtw_indicate_sta_disassoc_event(padapter, psta);
-
-       report_del_sta_event(padapter, psta->hwaddr, reason);
-
-       beacon_updated = bss_cap_update_on_sta_leave(padapter, psta);
-
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-       rtw_free_stainfo(padapter, psta);
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-       return beacon_updated;
-}
-
-void rtw_sta_flush(struct adapter *padapter)
-{
-       struct list_head *phead, *plist;
-       struct sta_info *psta = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-       if ((pmlmeinfo->state & 0x03) != WIFI_FW_AP_STATE)
-               return;
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-       phead = &pstapriv->asoc_list;
-       plist = phead->next;
-
-       /* free sta asoc_queue */
-       while (phead != plist) {
-               psta = container_of(plist, struct sta_info, asoc_list);
-
-               plist = plist->next;
-
-               list_del_init(&psta->asoc_list);
-               pstapriv->asoc_list_cnt--;
-
-               ap_free_sta(padapter, psta, true, WLAN_REASON_DEAUTH_LEAVING);
-       }
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       issue_deauth(padapter, bc_addr, WLAN_REASON_DEAUTH_LEAVING);
-
-       associated_clients_update(padapter, true);
-}
-
-/* called > TSR LEVEL for USB or SDIO Interface*/
-void sta_info_update(struct adapter *padapter, struct sta_info *psta)
-{
-       int flags = psta->flags;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       /* update wmm cap. */
-       if (WLAN_STA_WME & flags)
-               psta->qos_option = 1;
-       else
-               psta->qos_option = 0;
-
-       if (pmlmepriv->qospriv.qos_option == 0)
-               psta->qos_option = 0;
-
-       /* update 802.11n ht cap. */
-       if (WLAN_STA_HT & flags) {
-               psta->htpriv.ht_option = true;
-               psta->qos_option = 1;
-       } else {
-               psta->htpriv.ht_option = false;
-       }
-
-       if (!pmlmepriv->htpriv.ht_option)
-               psta->htpriv.ht_option = false;
-
-       update_sta_info_apmode(padapter, psta);
-}
-
-void start_ap_mode(struct adapter *padapter)
-{
-       int i;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-
-       pmlmepriv->update_bcn = false;
-
-       pmlmeext->bstart_bss = false;
-
-       pmlmepriv->num_sta_non_erp = 0;
-
-       pmlmepriv->num_sta_no_short_slot_time = 0;
-
-       pmlmepriv->num_sta_no_short_preamble = 0;
-
-       pmlmepriv->num_sta_ht_no_gf = 0;
-       pmlmepriv->num_sta_no_ht = 0;
-       pmlmepriv->num_sta_ht_20mhz = 0;
-
-       pmlmepriv->olbc = false;
-
-       pmlmepriv->olbc_ht = false;
-
-       pmlmepriv->ht_op_mode = 0;
-
-       for (i = 0; i < NUM_STA; i++)
-               pstapriv->sta_aid[i] = NULL;
-
-       pmlmepriv->wps_beacon_ie = NULL;
-       pmlmepriv->wps_probe_resp_ie = NULL;
-       pmlmepriv->wps_assoc_resp_ie = NULL;
-
-       pmlmepriv->p2p_beacon_ie = NULL;
-       pmlmepriv->p2p_probe_resp_ie = NULL;
-
-       /* for ACL */
-       INIT_LIST_HEAD(&pacl_list->acl_node_q.queue);
-       pacl_list->num = 0;
-       pacl_list->mode = 0;
-       for (i = 0; i < NUM_ACL; i++) {
-               INIT_LIST_HEAD(&pacl_list->aclnode[i].list);
-               pacl_list->aclnode[i].valid = false;
-       }
-}
-
-void stop_ap_mode(struct adapter *padapter)
-{
-       struct list_head *phead, *plist;
-       struct rtw_wlan_acl_node *paclnode;
-       struct sta_info *psta = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-       struct __queue *pacl_node_q = &pacl_list->acl_node_q;
-
-       pmlmepriv->update_bcn = false;
-       pmlmeext->bstart_bss = false;
-
-       /* reset and init security priv , this can refine with rtw_reset_securitypriv */
-       memset((unsigned char *)&padapter->securitypriv, 0, sizeof(struct security_priv));
-       padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
-       padapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
-
-       /* for ACL */
-       spin_lock_bh(&pacl_node_q->lock);
-       phead = get_list_head(pacl_node_q);
-       plist = phead->next;
-       while (phead != plist) {
-               paclnode = container_of(plist, struct rtw_wlan_acl_node, list);
-               plist = plist->next;
-
-               if (paclnode->valid) {
-                       paclnode->valid = false;
-
-                       list_del_init(&paclnode->list);
-
-                       pacl_list->num--;
-               }
-       }
-       spin_unlock_bh(&pacl_node_q->lock);
-
-       rtw_sta_flush(padapter);
-
-       /* free_assoc_sta_resources */
-       rtw_free_all_stainfo(padapter);
-
-       psta = rtw_get_bcmc_stainfo(padapter);
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-       rtw_free_stainfo(padapter, psta);
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-       rtw_init_bcmc_stainfo(padapter);
-
-       rtw_free_mlme_priv_ie_data(pmlmepriv);
-}
diff --git a/drivers/staging/r8188eu/core/rtw_br_ext.c b/drivers/staging/r8188eu/core/rtw_br_ext.c
deleted file mode 100644 (file)
index a7c6701..0000000
+++ /dev/null
@@ -1,658 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. i*/
-
-#define _RTW_BR_EXT_C_
-
-#include "../include/linux/if_arp.h"
-#include "../include/net/ip.h"
-#include "../include/linux/atalk.h"
-#include "../include/linux/udp.h"
-#include "../include/linux/if_pppox.h"
-
-#include "../include/drv_types.h"
-#include "../include/rtw_br_ext.h"
-#include "../include/usb_osintf.h"
-
-#ifndef csum_ipv6_magic
-#include "../include/net/ip6_checksum.h"
-#endif
-
-#include "../include/linux/ipv6.h"
-#include "../include/linux/icmpv6.h"
-#include "../include/net/ndisc.h"
-#include "../include/net/checksum.h"
-
-#define NAT25_IPV4             01
-#define NAT25_IPV6             02
-#define NAT25_IPX              03
-#define NAT25_APPLE            04
-#define NAT25_PPPOE            05
-
-#define RTL_RELAY_TAG_LEN (ETH_ALEN)
-#define TAG_HDR_LEN            4
-
-#define MAGIC_CODE             0x8186
-#define MAGIC_CODE_LEN 2
-#define WAIT_TIME_PPPOE        5       /*  waiting time for pppoe server in sec */
-
-/*-----------------------------------------------------------------
-  How database records network address:
-          0    1    2    3    4    5    6    7    8    9   10
-       |----|----|----|----|----|----|----|----|----|----|----|
-  IPv4  |type|                             |      IP addr      |
-  IPX   |type|      Net addr     |          Node addr          |
-  IPX   |type|      Net addr     |Sckt addr|
-  Apple |type| Network |node|
-  PPPoE |type|   SID   |           AC MAC            |
------------------------------------------------------------------*/
-
-/* Find a tag in pppoe frame and return the pointer */
-static unsigned char *__nat25_find_pppoe_tag(struct pppoe_hdr *ph, unsigned short type)
-{
-       unsigned char *cur_ptr, *start_ptr;
-       unsigned short tag_len, tag_type;
-
-       start_ptr = (unsigned char *)ph->tag;
-       cur_ptr = (unsigned char *)ph->tag;
-       while ((cur_ptr - start_ptr) < ntohs(ph->length)) {
-               /*  prevent un-alignment access */
-               tag_type = (unsigned short)((cur_ptr[0] << 8) + cur_ptr[1]);
-               tag_len  = (unsigned short)((cur_ptr[2] << 8) + cur_ptr[3]);
-               if (tag_type == type)
-                       return cur_ptr;
-               cur_ptr = cur_ptr + TAG_HDR_LEN + tag_len;
-       }
-       return NULL;
-}
-
-static int __nat25_add_pppoe_tag(struct sk_buff *skb, struct pppoe_tag *tag)
-{
-       struct pppoe_hdr *ph = (struct pppoe_hdr *)(skb->data + ETH_HLEN);
-       int data_len;
-
-       data_len = be16_to_cpu(tag->tag_len) + TAG_HDR_LEN;
-       if (skb_tailroom(skb) < data_len)
-               return -1;
-
-       skb_put(skb, data_len);
-       /*  have a room for new tag */
-       memmove(((unsigned char *)ph->tag + data_len), (unsigned char *)ph->tag, ntohs(ph->length));
-       ph->length = htons(ntohs(ph->length) + data_len);
-       memcpy((unsigned char *)ph->tag, tag, data_len);
-       return data_len;
-}
-
-static int skb_pull_and_merge(struct sk_buff *skb, unsigned char *src, int len)
-{
-       int tail_len;
-       unsigned long end, tail;
-
-       if ((src + len) > skb_tail_pointer(skb) || skb->len < len)
-               return -1;
-
-       tail = (unsigned long)skb_tail_pointer(skb);
-       end = (unsigned long)src + len;
-       if (tail < end)
-               return -1;
-
-       tail_len = (int)(tail - end);
-       if (tail_len > 0)
-               memmove(src, src + len, tail_len);
-
-       skb_trim(skb, skb->len - len);
-       return 0;
-}
-
-static int  __nat25_has_expired(struct nat25_network_db_entry *fdb)
-{
-       if (time_before_eq(fdb->ageing_timer, jiffies - NAT25_AGEING_TIME * HZ))
-               return 1;
-
-       return 0;
-}
-
-static void __nat25_generate_ipv4_network_addr(unsigned char *addr,
-                               unsigned int *ip_addr)
-{
-       memset(addr, 0, MAX_NETWORK_ADDR_LEN);
-
-       addr[0] = NAT25_IPV4;
-       memcpy(addr + 7, (unsigned char *)ip_addr, 4);
-}
-
-static void __nat25_generate_pppoe_network_addr(unsigned char *addr,
-                               unsigned char *ac_mac, __be16 *sid)
-{
-       memset(addr, 0, MAX_NETWORK_ADDR_LEN);
-
-       addr[0] = NAT25_PPPOE;
-       memcpy(addr + 1, (unsigned char *)sid, 2);
-       memcpy(addr + 3, (unsigned char *)ac_mac, 6);
-}
-
-static  void __nat25_generate_ipv6_network_addr(unsigned char *addr,
-                               unsigned int *ip_addr)
-{
-       memset(addr, 0, MAX_NETWORK_ADDR_LEN);
-
-       addr[0] = NAT25_IPV6;
-       memcpy(addr + 1, (unsigned char *)ip_addr, 16);
-}
-
-static unsigned char *scan_tlv(unsigned char *data, int len, unsigned char tag, unsigned char len8b)
-{
-       while (len > 0) {
-               if (*data == tag && *(data + 1) == len8b && len >= len8b * 8)
-                       return data + 2;
-
-               len -= (*(data + 1)) * 8;
-               data += (*(data + 1)) * 8;
-       }
-       return NULL;
-}
-
-static int update_nd_link_layer_addr(unsigned char *data, int len, unsigned char *replace_mac)
-{
-       struct icmp6hdr *icmphdr = (struct icmp6hdr *)data;
-       unsigned char *mac;
-
-       if (icmphdr->icmp6_type == NDISC_ROUTER_SOLICITATION) {
-               if (len >= 8) {
-                       mac = scan_tlv(&data[8], len - 8, 1, 1);
-                       if (mac) {
-                               memcpy(mac, replace_mac, 6);
-                               return 1;
-                       }
-               }
-       } else if (icmphdr->icmp6_type == NDISC_ROUTER_ADVERTISEMENT) {
-               if (len >= 16) {
-                       mac = scan_tlv(&data[16], len - 16, 1, 1);
-                       if (mac) {
-                               memcpy(mac, replace_mac, 6);
-                               return 1;
-                       }
-               }
-       } else if (icmphdr->icmp6_type == NDISC_NEIGHBOUR_SOLICITATION) {
-               if (len >= 24) {
-                       mac = scan_tlv(&data[24], len - 24, 1, 1);
-                       if (mac) {
-                               memcpy(mac, replace_mac, 6);
-                               return 1;
-                       }
-               }
-       } else if (icmphdr->icmp6_type == NDISC_NEIGHBOUR_ADVERTISEMENT) {
-               if (len >= 24) {
-                       mac = scan_tlv(&data[24], len - 24, 2, 1);
-                       if (mac) {
-                               memcpy(mac, replace_mac, 6);
-                               return 1;
-                       }
-               }
-       } else if (icmphdr->icmp6_type == NDISC_REDIRECT) {
-               if (len >= 40) {
-                       mac = scan_tlv(&data[40], len - 40, 2, 1);
-                       if (mac) {
-                               memcpy(mac, replace_mac, 6);
-                               return 1;
-                       }
-               }
-       }
-       return 0;
-}
-
-static int __nat25_network_hash(unsigned char *addr)
-{
-       if (addr[0] == NAT25_IPV4) {
-               unsigned long x;
-
-               x = addr[7] ^ addr[8] ^ addr[9] ^ addr[10];
-
-               return x & (NAT25_HASH_SIZE - 1);
-       } else if (addr[0] == NAT25_IPX) {
-               unsigned long x;
-
-               x = addr[1] ^ addr[2] ^ addr[3] ^ addr[4] ^ addr[5] ^
-                   addr[6] ^ addr[7] ^ addr[8] ^ addr[9] ^ addr[10];
-
-               return x & (NAT25_HASH_SIZE - 1);
-       } else if (addr[0] == NAT25_APPLE) {
-               unsigned long x;
-
-               x = addr[1] ^ addr[2] ^ addr[3];
-
-               return x & (NAT25_HASH_SIZE - 1);
-       } else if (addr[0] == NAT25_PPPOE) {
-               unsigned long x;
-
-               x = addr[0] ^ addr[1] ^ addr[2] ^ addr[3] ^ addr[4] ^
-                   addr[5] ^ addr[6] ^ addr[7] ^ addr[8];
-
-               return x & (NAT25_HASH_SIZE - 1);
-       } else if (addr[0] == NAT25_IPV6) {
-               unsigned long x;
-
-               x = addr[1] ^ addr[2] ^ addr[3] ^ addr[4] ^ addr[5] ^ addr[6] ^
-                   addr[7] ^ addr[8] ^ addr[9] ^ addr[10] ^ addr[11] ^ addr[12] ^
-                   addr[13] ^ addr[14] ^ addr[15] ^ addr[16];
-
-               return x & (NAT25_HASH_SIZE - 1);
-       } else {
-               unsigned long x = 0;
-               int i;
-
-               for (i = 0; i < MAX_NETWORK_ADDR_LEN; i++)
-                       x ^= addr[i];
-
-               return x & (NAT25_HASH_SIZE - 1);
-       }
-}
-
-static void __network_hash_link(struct adapter *priv,
-                               struct nat25_network_db_entry *ent, int hash)
-{
-       /*  Caller must spin_lock already! */
-       ent->next_hash = priv->nethash[hash];
-       if (ent->next_hash)
-               ent->next_hash->pprev_hash = &ent->next_hash;
-       priv->nethash[hash] = ent;
-       ent->pprev_hash = &priv->nethash[hash];
-}
-
-static void __network_hash_unlink(struct nat25_network_db_entry *ent)
-{
-       /*  Caller must spin_lock already! */
-       *ent->pprev_hash = ent->next_hash;
-       if (ent->next_hash)
-               ent->next_hash->pprev_hash = ent->pprev_hash;
-       ent->next_hash = NULL;
-       ent->pprev_hash = NULL;
-}
-
-static void __nat25_db_network_insert(struct adapter *priv,
-                               unsigned char *mac_addr, unsigned char *addr)
-{
-       struct nat25_network_db_entry *db;
-       int hash;
-
-       spin_lock_bh(&priv->br_ext_lock);
-       hash = __nat25_network_hash(addr);
-       db = priv->nethash[hash];
-       while (db) {
-               if (!memcmp(db->networkAddr, addr, MAX_NETWORK_ADDR_LEN)) {
-                       memcpy(db->macAddr, mac_addr, ETH_ALEN);
-                       db->ageing_timer = jiffies;
-                       spin_unlock_bh(&priv->br_ext_lock);
-                       return;
-               }
-               db = db->next_hash;
-       }
-       db = kmalloc(sizeof(*db), GFP_ATOMIC);
-       if (!db) {
-               spin_unlock_bh(&priv->br_ext_lock);
-               return;
-       }
-       memcpy(db->networkAddr, addr, MAX_NETWORK_ADDR_LEN);
-       memcpy(db->macAddr, mac_addr, ETH_ALEN);
-       atomic_set(&db->use_count, 1);
-       db->ageing_timer = jiffies;
-
-       __network_hash_link(priv, db, hash);
-
-       spin_unlock_bh(&priv->br_ext_lock);
-}
-
-/*
- *     NAT2.5 interface
- */
-
-void nat25_db_cleanup(struct adapter *priv)
-{
-       int i;
-
-       spin_lock_bh(&priv->br_ext_lock);
-
-       for (i = 0; i < NAT25_HASH_SIZE; i++) {
-               struct nat25_network_db_entry *f;
-
-               f = priv->nethash[i];
-               while (f) {
-                       struct nat25_network_db_entry *g;
-
-                       g = f->next_hash;
-                       if (priv->scdb_entry == f) {
-                               memset(priv->scdb_mac, 0, ETH_ALEN);
-                               memset(priv->scdb_ip, 0, 4);
-                               priv->scdb_entry = NULL;
-                       }
-                       __network_hash_unlink(f);
-                       kfree(f);
-                       f = g;
-               }
-       }
-       spin_unlock_bh(&priv->br_ext_lock);
-}
-
-void nat25_db_expire(struct adapter *priv)
-{
-       int i;
-
-       spin_lock_bh(&priv->br_ext_lock);
-
-       for (i = 0; i < NAT25_HASH_SIZE; i++) {
-               struct nat25_network_db_entry *f;
-
-               f = priv->nethash[i];
-               while (f) {
-                       struct nat25_network_db_entry *g;
-
-                       g = f->next_hash;
-                       if (__nat25_has_expired(f)) {
-                               if (atomic_dec_and_test(&f->use_count)) {
-                                       if (priv->scdb_entry == f) {
-                                               memset(priv->scdb_mac, 0, ETH_ALEN);
-                                               memset(priv->scdb_ip, 0, 4);
-                                               priv->scdb_entry = NULL;
-                                       }
-                                       __network_hash_unlink(f);
-                                       kfree(f);
-                               }
-                       }
-                       f = g;
-               }
-       }
-       spin_unlock_bh(&priv->br_ext_lock);
-}
-
-int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
-{
-       unsigned short protocol;
-       unsigned char addr[MAX_NETWORK_ADDR_LEN];
-       unsigned int tmp;
-
-       if (!skb)
-               return -1;
-
-       if ((method <= NAT25_MIN) || (method >= NAT25_MAX))
-               return -1;
-
-       protocol = be16_to_cpu(*((__be16 *)(skb->data + 2 * ETH_ALEN)));
-
-       /*---------------------------------------------------*/
-       /*                 Handle IP frame                   */
-       /*---------------------------------------------------*/
-       if (protocol == ETH_P_IP) {
-               struct iphdr *iph = (struct iphdr *)(skb->data + ETH_HLEN);
-
-               if (((unsigned char *)(iph) + (iph->ihl << 2)) >= (skb->data + ETH_HLEN + skb->len))
-                       return -1;
-
-               switch (method) {
-               case NAT25_CHECK:
-                       return -1;
-               case NAT25_INSERT:
-                       /* some multicast with source IP is all zero, maybe other case is illegal */
-                       /* in class A, B, C, host address is all zero or all one is illegal */
-                       if (iph->saddr == 0)
-                               return 0;
-                       tmp = be32_to_cpu(iph->saddr);
-                       __nat25_generate_ipv4_network_addr(addr, &tmp);
-                       /* record source IP address and , source mac address into db */
-                       __nat25_db_network_insert(priv, skb->data + ETH_ALEN, addr);
-                       return 0;
-               default:
-                       return -1;
-               }
-       } else if (protocol == ETH_P_ARP) {
-               /*---------------------------------------------------*/
-               /*                 Handle ARP frame                  */
-               /*---------------------------------------------------*/
-               struct arphdr *arp = (struct arphdr *)(skb->data + ETH_HLEN);
-               unsigned char *arp_ptr = (unsigned char *)(arp + 1);
-               unsigned int *sender;
-
-               if (arp->ar_pro != htons(ETH_P_IP))
-                       return -1;
-
-               switch (method) {
-               case NAT25_CHECK:
-                       return 0;       /*  skb_copy for all ARP frame */
-               case NAT25_INSERT:
-                       /*  change to ARP sender mac address to wlan STA address */
-                       memcpy(arp_ptr, GET_MY_HWADDR(priv), ETH_ALEN);
-                       arp_ptr += arp->ar_hln;
-                       sender = (unsigned int *)arp_ptr;
-                       __nat25_generate_ipv4_network_addr(addr, sender);
-                       __nat25_db_network_insert(priv, skb->data + ETH_ALEN, addr);
-                       return 0;
-               default:
-                       return -1;
-               }
-       } else if ((protocol == ETH_P_PPP_DISC) ||
-                  (protocol == ETH_P_PPP_SES)) {
-               /*---------------------------------------------------*/
-               /*                Handle PPPoE frame                 */
-               /*---------------------------------------------------*/
-               struct pppoe_hdr *ph = (struct pppoe_hdr *)(skb->data + ETH_HLEN);
-               __be16 *pMagic;
-
-               switch (method) {
-               case NAT25_CHECK:
-                       if (ph->sid == 0)
-                               return 0;
-                       return 1;
-               case NAT25_INSERT:
-                       if (ph->sid == 0) {     /*  Discovery phase according to tag */
-                               if (ph->code == PADI_CODE || ph->code == PADR_CODE) {
-                                       if (priv->ethBrExtInfo.addPPPoETag) {
-                                               struct pppoe_tag *tag, *pOldTag;
-                                               unsigned char tag_buf[40];
-                                               int old_tag_len = 0;
-
-                                               tag = (struct pppoe_tag *)tag_buf;
-                                               pOldTag = (struct pppoe_tag *)__nat25_find_pppoe_tag(ph, ntohs(PTT_RELAY_SID));
-                                               if (pOldTag) { /*  if SID existed, copy old value and delete it */
-                                                       old_tag_len = ntohs(pOldTag->tag_len);
-                                                       if (old_tag_len +
-                                                           TAG_HDR_LEN +
-                                                           MAGIC_CODE_LEN +
-                                                           RTL_RELAY_TAG_LEN >
-                                                           sizeof(tag_buf))
-                                                               return -1;
-
-                                                       memcpy(tag->tag_data + MAGIC_CODE_LEN + RTL_RELAY_TAG_LEN,
-                                                               pOldTag->tag_data, old_tag_len);
-
-                                                       if (skb_pull_and_merge(skb, (unsigned char *)pOldTag, TAG_HDR_LEN + old_tag_len) < 0)
-                                                               return -1;
-
-                                                       ph->length = htons(ntohs(ph->length) - TAG_HDR_LEN - old_tag_len);
-                                               }
-
-                                               tag->tag_type = PTT_RELAY_SID;
-                                               tag->tag_len = htons(MAGIC_CODE_LEN + RTL_RELAY_TAG_LEN + old_tag_len);
-
-                                               /*  insert the magic_code+client mac in relay tag */
-                                               pMagic = (__be16 *)tag->tag_data;
-                                               *pMagic = htons(MAGIC_CODE);
-                                               memcpy(tag->tag_data + MAGIC_CODE_LEN, skb->data + ETH_ALEN, ETH_ALEN);
-
-                                               /* Add relay tag */
-                                               if (__nat25_add_pppoe_tag(skb, tag) < 0)
-                                                       return -1;
-                                       } else { /*  not add relay tag */
-                                               if (priv->pppoe_connection_in_progress &&
-                                                   memcmp(skb->data + ETH_ALEN,
-                                                          priv->pppoe_addr,
-                                                          ETH_ALEN))
-                                                       return -2;
-
-                                               if (priv->pppoe_connection_in_progress == 0)
-                                                       memcpy(priv->pppoe_addr, skb->data + ETH_ALEN, ETH_ALEN);
-
-                                               priv->pppoe_connection_in_progress = WAIT_TIME_PPPOE;
-                                       }
-                               } else {
-                                       return -1;
-                               }
-                       } else {        /*  session phase */
-                               __nat25_generate_pppoe_network_addr(addr, skb->data, &ph->sid);
-
-                               __nat25_db_network_insert(priv, skb->data + ETH_ALEN, addr);
-
-                               if (!priv->ethBrExtInfo.addPPPoETag &&
-                                   priv->pppoe_connection_in_progress &&
-                                   !memcmp(skb->data + ETH_ALEN, priv->pppoe_addr, ETH_ALEN))
-                                       priv->pppoe_connection_in_progress = 0;
-                       }
-                       return 0;
-               default:
-                       return -1;
-               }
-       } else if (protocol == 0x888e) {
-               /*---------------------------------------------------*/
-               /*                 Handle EAP frame                  */
-               /*---------------------------------------------------*/
-               switch (method) {
-               case NAT25_CHECK:
-                       return -1;
-               case NAT25_INSERT:
-                       return 0;
-               default:
-                       return -1;
-               }
-       } else if ((protocol == 0xe2ae) || (protocol == 0xe2af)) {
-               /*---------------------------------------------------*/
-               /*         Handle C-Media proprietary frame          */
-               /*---------------------------------------------------*/
-               switch (method) {
-               case NAT25_CHECK:
-                       return -1;
-               case NAT25_INSERT:
-                       return 0;
-               default:
-                       return -1;
-               }
-       } else if (protocol == ETH_P_IPV6) {
-               /*------------------------------------------------*/
-               /*         Handle IPV6 frame                      */
-               /*------------------------------------------------*/
-               struct ipv6hdr *iph = (struct ipv6hdr *)(skb->data + ETH_HLEN);
-
-               if (sizeof(*iph) >= (skb->len - ETH_HLEN))
-                       return -1;
-
-               switch (method) {
-               case NAT25_CHECK:
-                       if (skb->data[0] & 1)
-                               return 0;
-                       return -1;
-               case NAT25_INSERT:
-                       if (memcmp(&iph->saddr, "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0", 16)) {
-                               __nat25_generate_ipv6_network_addr(addr, (unsigned int *)&iph->saddr);
-                               __nat25_db_network_insert(priv, skb->data + ETH_ALEN, addr);
-
-                               if (iph->nexthdr == IPPROTO_ICMPV6 &&
-                                               skb->len > (ETH_HLEN +  sizeof(*iph) + 4)) {
-                                       if (update_nd_link_layer_addr(skb->data + ETH_HLEN + sizeof(*iph),
-                                                                     skb->len - ETH_HLEN - sizeof(*iph), GET_MY_HWADDR(priv))) {
-                                               struct icmp6hdr  *hdr = (struct icmp6hdr *)(skb->data + ETH_HLEN + sizeof(*iph));
-                                               hdr->icmp6_cksum = 0;
-                                               hdr->icmp6_cksum = csum_ipv6_magic(&iph->saddr, &iph->daddr,
-                                                                               be16_to_cpu(iph->payload_len),
-                                                                               IPPROTO_ICMPV6,
-                                                                               csum_partial((__u8 *)hdr,
-                                                                               be16_to_cpu(iph->payload_len),
-                                                                               0));
-                                       }
-                               }
-                       }
-                       return 0;
-               default:
-                       return -1;
-               }
-       }
-       return -1;
-}
-
-#define SERVER_PORT                    67
-#define CLIENT_PORT                    68
-#define DHCP_MAGIC                     0x63825363
-#define BROADCAST_FLAG         0x8000
-
-struct dhcpMessage {
-       u_int8_t op;
-       u_int8_t htype;
-       u_int8_t hlen;
-       u_int8_t hops;
-       u_int32_t xid;
-       __be16 secs;
-       __be16 flags;
-       __be32 ciaddr;
-       __be32 yiaddr;
-       __be32 siaddr;
-       __be32 giaddr;
-       u_int8_t chaddr[16];
-       u_int8_t sname[64];
-       u_int8_t file[128];
-       __be32 cookie;
-       u_int8_t options[308]; /* 312 - cookie */
-};
-
-void dhcp_flag_bcast(struct adapter *priv, struct sk_buff *skb)
-{
-       if (!skb)
-               return;
-
-       if (!priv->ethBrExtInfo.dhcp_bcst_disable) {
-               __be16 protocol = *((__be16 *)(skb->data + 2 * ETH_ALEN));
-
-               if (protocol == htons(ETH_P_IP)) { /*  IP */
-                       struct iphdr *iph = (struct iphdr *)(skb->data + ETH_HLEN);
-
-                       if (iph->protocol == IPPROTO_UDP) { /*  UDP */
-                               struct udphdr *udph = (void *)iph + (iph->ihl << 2);
-
-                               if ((udph->source == htons(CLIENT_PORT)) &&
-                                   (udph->dest == htons(SERVER_PORT))) { /*  DHCP request */
-                                       struct dhcpMessage *dhcph = (void *)udph + sizeof(struct udphdr);
-                                       u32 cookie = be32_to_cpu(dhcph->cookie);
-
-                                       if (cookie == DHCP_MAGIC) { /*  match magic word */
-                                               if (!(dhcph->flags & htons(BROADCAST_FLAG))) {
-                                                       /*  if not broadcast */
-                                                       register int sum = 0;
-
-                                                       /*  or BROADCAST flag */
-                                                       dhcph->flags |= htons(BROADCAST_FLAG);
-                                                       /*  recalculate checksum */
-                                                       sum = ~(udph->check) & 0xffff;
-                                                       sum += be16_to_cpu(dhcph->flags);
-                                                       while (sum >> 16)
-                                                               sum = (sum & 0xffff) + (sum >> 16);
-                                                       udph->check = ~sum;
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-}
-
-void *scdb_findEntry(struct adapter *priv, unsigned char *ip_addr)
-{
-       unsigned char addr[MAX_NETWORK_ADDR_LEN];
-       struct nat25_network_db_entry *db;
-       int hash;
-
-       __nat25_generate_ipv4_network_addr(addr, (unsigned int *)ip_addr);
-       hash = __nat25_network_hash(addr);
-       db = priv->nethash[hash];
-       while (db) {
-               if (!memcmp(db->networkAddr, addr, MAX_NETWORK_ADDR_LEN))
-                       return (void *)db;
-
-               db = db->next_hash;
-       }
-
-       return NULL;
-}
diff --git a/drivers/staging/r8188eu/core/rtw_cmd.c b/drivers/staging/r8188eu/core/rtw_cmd.c
deleted file mode 100644 (file)
index ca9e3d4..0000000
+++ /dev/null
@@ -1,1529 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#define _RTW_CMD_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/rtw_br_ext.h"
-#include "../include/rtw_mlme_ext.h"
-#include "../include/rtl8188e_dm.h"
-
-/* Caller and the rtw_cmd_thread can protect cmd_q by spin_lock.
- * No irqsave is necessary.
- */
-
-static void c2h_wk_callback(struct work_struct *work);
-
-void rtw_free_evt_priv(struct  evt_priv *pevtpriv)
-{
-       cancel_work_sync(&pevtpriv->c2h_wk);
-       while (pevtpriv->c2h_wk_alive)
-               msleep(10);
-
-       while (!rtw_cbuf_empty(pevtpriv->c2h_queue)) {
-               void *c2h = rtw_cbuf_pop(pevtpriv->c2h_queue);
-               if (c2h && c2h != (void *)pevtpriv)
-                       kfree(c2h);
-       }
-}
-
-int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv)
-{
-       init_completion(&pcmdpriv->enqueue_cmd);
-       /* sema_init(&(pcmdpriv->cmd_done_sema), 0); */
-       init_completion(&pcmdpriv->start_cmd_thread);
-       init_completion(&pcmdpriv->stop_cmd_thread);
-
-       rtw_init_queue(&pcmdpriv->cmd_queue);
-
-       /* allocate DMA-able/Non-Page memory for cmd_buf and rsp_buf */
-
-       pcmdpriv->cmd_allocated_buf = kzalloc(MAX_CMDSZ + CMDBUFF_ALIGN_SZ,
-                                             GFP_KERNEL);
-
-       if (!pcmdpriv->cmd_allocated_buf)
-               return -ENOMEM;
-
-       pcmdpriv->cmd_buf = pcmdpriv->cmd_allocated_buf  +  CMDBUFF_ALIGN_SZ - ((size_t)(pcmdpriv->cmd_allocated_buf) & (CMDBUFF_ALIGN_SZ - 1));
-
-       pcmdpriv->rsp_allocated_buf = kzalloc(MAX_RSPSZ + 4, GFP_KERNEL);
-
-       if (!pcmdpriv->rsp_allocated_buf) {
-               kfree(pcmdpriv->cmd_allocated_buf);
-               return -ENOMEM;
-       }
-
-       pcmdpriv->rsp_buf = pcmdpriv->rsp_allocated_buf  +  4 - ((size_t)(pcmdpriv->rsp_allocated_buf) & 3);
-
-       pcmdpriv->cmd_done_cnt = 0;
-       pcmdpriv->rsp_cnt = 0;
-
-       return 0;
-}
-
-int rtw_init_evt_priv(struct evt_priv *pevtpriv)
-{
-       /* allocate DMA-able/Non-Page memory for cmd_buf and rsp_buf */
-       atomic_set(&pevtpriv->event_seq, 0);
-
-       INIT_WORK(&pevtpriv->c2h_wk, c2h_wk_callback);
-       pevtpriv->c2h_wk_alive = false;
-       pevtpriv->c2h_queue = rtw_cbuf_alloc(C2H_QUEUE_MAX_LEN + 1);
-       if (!pevtpriv->c2h_queue)
-               return -ENOMEM;
-
-       return 0;
-}
-
-void rtw_free_cmd_priv(struct  cmd_priv *pcmdpriv)
-{
-       if (pcmdpriv) {
-               kfree(pcmdpriv->cmd_allocated_buf);
-               kfree(pcmdpriv->rsp_allocated_buf);
-       }
-}
-
-static int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
-{
-       u8 bAllow = false; /* set to true to allow enqueuing cmd when hw_init_completed is false */
-
-       if (cmd_obj->cmdcode == GEN_CMD_CODE(_SetChannelPlan))
-               bAllow = true;
-
-       if ((!pcmdpriv->padapter->hw_init_completed && !bAllow) ||
-           !pcmdpriv->cmdthd_running)  /* com_thread not running */
-               return _FAIL;
-       return _SUCCESS;
-}
-
-u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
-{
-       unsigned long flags;
-       struct adapter *padapter = pcmdpriv->padapter;
-
-       if (!cmd_obj)
-               return _FAIL;
-
-       cmd_obj->padapter = padapter;
-
-       if (rtw_cmd_filter(pcmdpriv, cmd_obj) == _FAIL) {
-               rtw_free_cmd_obj(cmd_obj);
-               return _FAIL;
-       }
-
-       spin_lock_irqsave(&pcmdpriv->cmd_queue.lock, flags);
-       list_add_tail(&cmd_obj->list, &pcmdpriv->cmd_queue.queue);
-       spin_unlock_irqrestore(&pcmdpriv->cmd_queue.lock, flags);
-
-       complete(&pcmdpriv->enqueue_cmd);
-       return _SUCCESS;
-}
-
-struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv)
-{
-       struct cmd_obj *obj;
-       struct __queue *queue = &pcmdpriv->cmd_queue;
-       unsigned long flags;
-
-       spin_lock_irqsave(&queue->lock, flags);
-       if (list_empty(&queue->queue)) {
-               obj = NULL;
-       } else {
-               obj = container_of((&queue->queue)->next, struct cmd_obj, list);
-               list_del_init(&obj->list);
-       }
-
-       spin_unlock_irqrestore(&queue->lock, flags);
-
-       return obj;
-}
-
-void rtw_free_cmd_obj(struct cmd_obj *pcmd)
-{
-
-       if ((pcmd->cmdcode != _JoinBss_CMD_) && (pcmd->cmdcode != _CreateBss_CMD_)) {
-               /* free parmbuf in cmd_obj */
-               kfree(pcmd->parmbuf);
-       }
-
-       if (pcmd->rsp) {
-               if (pcmd->rspsz != 0) {
-                       /* free rsp in cmd_obj */
-                       kfree(pcmd->rsp);
-               }
-       }
-
-       /* free cmd_obj */
-       kfree(pcmd);
-
-}
-
-int rtw_cmd_thread(void *context)
-{
-       u8 ret;
-       struct cmd_obj *pcmd;
-       u8 *pcmdbuf;
-       u8 (*cmd_hdl)(struct adapter *padapter, u8 *pbuf);
-       void (*pcmd_callback)(struct adapter *dev, struct cmd_obj *pcmd);
-       struct adapter *padapter = (struct adapter *)context;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       pcmdbuf = pcmdpriv->cmd_buf;
-
-       pcmdpriv->cmdthd_running = true;
-       complete(&pcmdpriv->start_cmd_thread);
-
-       while (1) {
-               wait_for_completion(&pcmdpriv->enqueue_cmd);
-
-_next:
-               if (padapter->bDriverStopped ||
-                   padapter->bSurpriseRemoved)
-                       break;
-
-               pcmd = rtw_dequeue_cmd(pcmdpriv);
-               if (!pcmd)
-                       continue;
-
-               if (rtw_cmd_filter(pcmdpriv, pcmd) == _FAIL) {
-                       pcmd->res = H2C_DROPPED;
-                       goto post_process;
-               }
-
-               pcmd->cmdsz = round_up(pcmd->cmdsz, 4);
-
-               memcpy(pcmdbuf, pcmd->parmbuf, pcmd->cmdsz);
-
-               if (pcmd->cmdcode < ARRAY_SIZE(wlancmds)) {
-                       cmd_hdl = wlancmds[pcmd->cmdcode].h2cfuns;
-
-                       if (cmd_hdl) {
-                               ret = cmd_hdl(pcmd->padapter, pcmdbuf);
-                               pcmd->res = ret;
-                       }
-               } else {
-                       pcmd->res = H2C_PARAMETERS_ERROR;
-               }
-
-               cmd_hdl = NULL;
-
-post_process:
-
-               /* call callback function for post-processed */
-               if (pcmd->cmdcode < ARRAY_SIZE(rtw_cmd_callback)) {
-                       pcmd_callback = rtw_cmd_callback[pcmd->cmdcode].callback;
-                       if (!pcmd_callback)
-                               rtw_free_cmd_obj(pcmd);
-                       else
-                               /* todo: !!! fill rsp_buf to pcmd->rsp if (pcmd->rsp!= NULL) */
-                               pcmd_callback(pcmd->padapter, pcmd);/* need consider that free cmd_obj in rtw_cmd_callback */
-               } else {
-                       rtw_free_cmd_obj(pcmd);
-               }
-
-               flush_signals_thread();
-
-               goto _next;
-       }
-       pcmdpriv->cmdthd_running = false;
-
-       /*  free all cmd_obj resources */
-       do {
-               pcmd = rtw_dequeue_cmd(pcmdpriv);
-               if (!pcmd)
-                       break;
-
-               rtw_free_cmd_obj(pcmd);
-       } while (1);
-
-       complete(&pcmdpriv->stop_cmd_thread);
-
-       return 0;
-}
-
-/* rtw_sitesurvey_cmd(~)
- *     ### NOTE:#### (!!!!)
- *     MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock
- */
-u8 rtw_sitesurvey_cmd(struct adapter  *padapter, struct ndis_802_11_ssid *ssid, int ssid_num)
-{
-       u8 res = _FAIL;
-       struct cmd_obj          *ph2c;
-       struct sitesurvey_parm  *psurveyPara;
-       struct cmd_priv         *pcmdpriv = &padapter->cmdpriv;
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED))
-               rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_SCAN, 1);
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED))
-               p2p_ps_wk_cmd(padapter, P2P_PS_SCAN, 1);
-
-       ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-       if (!ph2c)
-               return _FAIL;
-
-       psurveyPara = kzalloc(sizeof(*psurveyPara), GFP_ATOMIC);
-       if (!psurveyPara) {
-               kfree(ph2c);
-               return _FAIL;
-       }
-
-       rtw_free_network_queue(padapter, false);
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara, GEN_CMD_CODE(_SiteSurvey));
-
-       /* psurveyPara->bsslimit = 48; */
-       psurveyPara->scan_mode = pmlmepriv->scan_mode;
-
-       /* prepare ssid list */
-       if (ssid) {
-               int i;
-               for (i = 0; i < ssid_num && i < RTW_SSID_SCAN_AMOUNT; i++) {
-                       if (ssid[i].SsidLength) {
-                               memcpy(&psurveyPara->ssid[i], &ssid[i], sizeof(struct ndis_802_11_ssid));
-                               psurveyPara->ssid_num++;
-                       }
-               }
-       }
-
-       set_fwstate(pmlmepriv, _FW_UNDER_SURVEY);
-
-       res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-       if (res == _SUCCESS) {
-               pmlmepriv->scan_start_time = jiffies;
-
-               _set_timer(&pmlmepriv->scan_to_timer, SCANNING_TIMEOUT);
-
-               rtw_led_control(padapter, LED_CTL_SITE_SURVEY);
-
-               pmlmepriv->scan_interval = SCAN_INTERVAL;/*  30*2 sec = 60sec */
-       } else {
-               _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
-       }
-
-       return res;
-}
-
-int rtw_setdatarate_cmd(struct adapter *padapter, u8 *rateset)
-{
-       struct cmd_obj *ph2c;
-       struct setdatarate_parm *pbsetdataratepara;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-       if (!ph2c)
-               return -ENOMEM;
-
-       pbsetdataratepara = kzalloc(sizeof(*pbsetdataratepara), GFP_ATOMIC);
-       if (!pbsetdataratepara) {
-               kfree(ph2c);
-               return -ENOMEM;
-       }
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, pbsetdataratepara, GEN_CMD_CODE(_SetDataRate));
-       pbsetdataratepara->mac_id = 5;
-       memcpy(pbsetdataratepara->datarates, rateset, NumRates);
-       if (rtw_enqueue_cmd(pcmdpriv, ph2c) == _FAIL)
-               return -EPERM;
-
-       return 0;
-}
-
-void rtw_getbbrfreg_cmdrsp_callback(struct adapter *padapter,  struct cmd_obj *pcmd)
-{
-
-
-       kfree(pcmd->parmbuf);
-       kfree(pcmd);
-}
-
-u8 rtw_createbss_cmd(struct adapter  *padapter)
-{
-       struct cmd_obj *pcmd;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct wlan_bssid_ex *pdev_network = &padapter->registrypriv.dev_network;
-       u8      res = _SUCCESS;
-
-       rtw_led_control(padapter, LED_CTL_START_TO_LINK);
-
-       pcmd = kzalloc(sizeof(*pcmd), GFP_ATOMIC);
-       if (!pcmd) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       INIT_LIST_HEAD(&pcmd->list);
-       pcmd->cmdcode = _CreateBss_CMD_;
-       pcmd->parmbuf = (unsigned char *)pdev_network;
-       pcmd->cmdsz = get_wlan_bssid_ex_sz((struct wlan_bssid_ex *)pdev_network);
-       pcmd->rsp = NULL;
-       pcmd->rspsz = 0;
-       pdev_network->Length = pcmd->cmdsz;
-       res = rtw_enqueue_cmd(pcmdpriv, pcmd);
-exit:
-
-       return res;
-}
-
-u8 rtw_joinbss_cmd(struct adapter  *padapter, struct wlan_network *pnetwork)
-{
-       u8      res = _SUCCESS;
-       uint    t_len = 0;
-       struct wlan_bssid_ex            *psecnetwork;
-       struct cmd_obj          *pcmd;
-       struct cmd_priv         *pcmdpriv = &padapter->cmdpriv;
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       struct qos_priv         *pqospriv = &pmlmepriv->qospriv;
-       struct security_priv    *psecuritypriv = &padapter->securitypriv;
-       struct registry_priv    *pregistrypriv = &padapter->registrypriv;
-       struct ht_priv          *phtpriv = &pmlmepriv->htpriv;
-       enum ndis_802_11_network_infra ndis_network_mode = pnetwork->network.InfrastructureMode;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       rtw_led_control(padapter, LED_CTL_START_TO_LINK);
-
-       pcmd = kzalloc(sizeof(*pcmd), GFP_ATOMIC);
-       if (!pcmd) {
-               res = _FAIL;
-               goto exit;
-       }
-       /* for IEs is fix buf size */
-       t_len = sizeof(struct wlan_bssid_ex);
-
-       /* for hidden ap to set fw_state here */
-       if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_ADHOC_STATE)) {
-               switch (ndis_network_mode) {
-               case Ndis802_11IBSS:
-                       set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
-                       break;
-               case Ndis802_11Infrastructure:
-                       set_fwstate(pmlmepriv, WIFI_STATION_STATE);
-                       break;
-               case Ndis802_11APMode:
-               case Ndis802_11AutoUnknown:
-               case Ndis802_11InfrastructureMax:
-                       break;
-               }
-       }
-
-       psecnetwork = (struct wlan_bssid_ex *)&psecuritypriv->sec_bss;
-       if (!psecnetwork) {
-               kfree(pcmd);
-               res = _FAIL;
-               goto exit;
-       }
-
-       memset(psecnetwork, 0, t_len);
-
-       memcpy(psecnetwork, &pnetwork->network, get_wlan_bssid_ex_sz(&pnetwork->network));
-
-       psecuritypriv->authenticator_ie[0] = (unsigned char)psecnetwork->IELength;
-
-       if (psecnetwork->IELength - 12 < 255)
-               memcpy(&psecuritypriv->authenticator_ie[1], &psecnetwork->IEs[12], psecnetwork->IELength - 12);
-       else
-               memcpy(&psecuritypriv->authenticator_ie[1], &psecnetwork->IEs[12], 255);
-
-       psecnetwork->IELength = 0;
-       /*  Added by Albert 2009/02/18 */
-       /*  If the driver wants to use the bssid to create the connection. */
-       /*  If not,  we have to copy the connecting AP's MAC address to it so that */
-       /*  the driver just has the bssid information for PMKIDList searching. */
-
-       if (!pmlmepriv->assoc_by_bssid)
-               memcpy(&pmlmepriv->assoc_bssid[0], &pnetwork->network.MacAddress[0], ETH_ALEN);
-
-       psecnetwork->IELength = rtw_restruct_sec_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0], pnetwork->network.IELength);
-
-       pqospriv->qos_option = 0;
-
-       if (pregistrypriv->wmm_enable) {
-               u32 tmp_len;
-
-               tmp_len = rtw_restruct_wmm_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0], pnetwork->network.IELength, psecnetwork->IELength);
-
-               if (psecnetwork->IELength != tmp_len) {
-                       psecnetwork->IELength = tmp_len;
-                       pqospriv->qos_option = 1; /* There is WMM IE in this corresp. beacon */
-               } else {
-                       pqospriv->qos_option = 0;/* There is no WMM IE in this corresp. beacon */
-               }
-       }
-
-       phtpriv->ht_option = false;
-       if (pregistrypriv->ht_enable) {
-               /*      Added by Albert 2010/06/23 */
-               /*      For the WEP mode, we will use the bg mode to do the connection to avoid some IOT issue. */
-               /*      Especially for Realtek 8192u SoftAP. */
-               if ((padapter->securitypriv.dot11PrivacyAlgrthm != _WEP40_) &&
-                   (padapter->securitypriv.dot11PrivacyAlgrthm != _WEP104_) &&
-                   (padapter->securitypriv.dot11PrivacyAlgrthm != _TKIP_)) {
-                       /* rtw_restructure_ht_ie */
-                       rtw_restructure_ht_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0],
-                                                                       pnetwork->network.IELength, &psecnetwork->IELength);
-               }
-       }
-
-       pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->network.IEs, pnetwork->network.IELength);
-
-       if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_TENDA)
-               padapter->pwrctrlpriv.smart_ps = 0;
-       else
-               padapter->pwrctrlpriv.smart_ps = padapter->registrypriv.smart_ps;
-
-       pcmd->cmdsz = get_wlan_bssid_ex_sz(psecnetwork);/* get cmdsz before endian conversion */
-
-       INIT_LIST_HEAD(&pcmd->list);
-       pcmd->cmdcode = _JoinBss_CMD_;/* GEN_CMD_CODE(_JoinBss) */
-       pcmd->parmbuf = (unsigned char *)psecnetwork;
-       pcmd->rsp = NULL;
-       pcmd->rspsz = 0;
-
-       res = rtw_enqueue_cmd(pcmdpriv, pcmd);
-
-exit:
-
-       return res;
-}
-
-u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, bool enqueue) /* for sta_mode */
-{
-       struct cmd_obj *cmdobj = NULL;
-       struct disconnect_parm *param = NULL;
-       struct cmd_priv *cmdpriv = &padapter->cmdpriv;
-       u8 res = _SUCCESS;
-
-       /* prepare cmd parameter */
-       param = kzalloc(sizeof(*param), GFP_ATOMIC);
-       if (!param) {
-               res = _FAIL;
-               goto exit;
-       }
-       param->deauth_timeout_ms = deauth_timeout_ms;
-
-       if (enqueue) {
-               /* need enqueue, prepare cmd_obj and enqueue */
-               cmdobj = kzalloc(sizeof(*cmdobj), GFP_ATOMIC);
-               if (!cmdobj) {
-                       res = _FAIL;
-                       kfree(param);
-                       goto exit;
-               }
-               init_h2fwcmd_w_parm_no_rsp(cmdobj, param, _DisConnect_CMD_);
-               res = rtw_enqueue_cmd(cmdpriv, cmdobj);
-       } else {
-               /* no need to enqueue, do the cmd hdl directly and free cmd parameter */
-               if (disconnect_hdl(padapter, (u8 *)param) != H2C_SUCCESS)
-                       res = _FAIL;
-               kfree(param);
-       }
-
-exit:
-
-       return res;
-}
-
-u8 rtw_setopmode_cmd(struct adapter  *padapter, enum ndis_802_11_network_infra networktype)
-{
-       struct  cmd_obj *ph2c;
-       struct  setopmode_parm *psetop;
-
-       struct  cmd_priv   *pcmdpriv = &padapter->cmdpriv;
-       u8      res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(*ph2c), GFP_KERNEL);
-       if (!ph2c) {
-               res = false;
-               goto exit;
-       }
-       psetop = kzalloc(sizeof(*psetop), GFP_KERNEL);
-
-       if (!psetop) {
-               kfree(ph2c);
-               res = false;
-               goto exit;
-       }
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, psetop, _SetOpMode_CMD_);
-       psetop->mode = (u8)networktype;
-
-       res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
-
-       return res;
-}
-
-u8 rtw_setstakey_cmd(struct adapter *padapter, u8 *psta, u8 unicast_key)
-{
-       struct cmd_obj *ph2c;
-       struct set_stakey_parm *psetstakey_para;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct set_stakey_rsp *psetstakey_rsp = NULL;
-
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct sta_info *sta = (struct sta_info *)psta;
-       u8      res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(*ph2c), GFP_KERNEL);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       psetstakey_para = kzalloc(sizeof(*psetstakey_para), GFP_KERNEL);
-       if (!psetstakey_para) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       psetstakey_rsp = kzalloc(sizeof(*psetstakey_rsp), GFP_KERNEL);
-       if (!psetstakey_rsp) {
-               kfree(ph2c);
-               kfree(psetstakey_para);
-               res = _FAIL;
-               goto exit;
-       }
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_);
-       ph2c->rsp = (u8 *)psetstakey_rsp;
-       ph2c->rspsz = sizeof(struct set_stakey_rsp);
-
-       memcpy(psetstakey_para->addr, sta->hwaddr, ETH_ALEN);
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
-               psetstakey_para->algorithm = (unsigned char)psecuritypriv->dot11PrivacyAlgrthm;
-       else
-               GET_ENCRY_ALGO(psecuritypriv, sta, psetstakey_para->algorithm, false);
-
-       if (unicast_key)
-               memcpy(&psetstakey_para->key, &sta->dot118021x_UncstKey, 16);
-       else
-               memcpy(&psetstakey_para->key, &psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey, 16);
-
-       /* jeff: set this because at least sw key is ready */
-       padapter->securitypriv.busetkipkey = true;
-
-       res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
-
-       return res;
-}
-
-u8 rtw_clearstakey_cmd(struct adapter *padapter, u8 *psta, u8 entry, u8 enqueue)
-{
-       struct cmd_obj *ph2c;
-       struct set_stakey_parm  *psetstakey_para;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct set_stakey_rsp *psetstakey_rsp = NULL;
-       struct sta_info *sta = (struct sta_info *)psta;
-       u8      res = _SUCCESS;
-
-       if (!enqueue) {
-               clear_cam_entry(padapter, entry);
-       } else {
-               ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-               if (!ph2c) {
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               psetstakey_para = kzalloc(sizeof(*psetstakey_para),
-                                         GFP_ATOMIC);
-               if (!psetstakey_para) {
-                       kfree(ph2c);
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               psetstakey_rsp = kzalloc(sizeof(*psetstakey_rsp),
-                                        GFP_ATOMIC);
-               if (!psetstakey_rsp) {
-                       kfree(ph2c);
-                       kfree(psetstakey_para);
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_);
-               ph2c->rsp = (u8 *)psetstakey_rsp;
-               ph2c->rspsz = sizeof(struct set_stakey_rsp);
-
-               memcpy(psetstakey_para->addr, sta->hwaddr, ETH_ALEN);
-
-               psetstakey_para->algorithm = _NO_PRIVACY_;
-
-               psetstakey_para->id = entry;
-
-               res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-       }
-exit:
-
-       return res;
-}
-
-u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr)
-{
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct cmd_obj *ph2c;
-       struct addBaReq_parm *paddbareq_parm;
-       u8      res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       paddbareq_parm = kzalloc(sizeof(*paddbareq_parm), GFP_ATOMIC);
-       if (!paddbareq_parm) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       paddbareq_parm->tid = tid;
-       memcpy(paddbareq_parm->addr, addr, ETH_ALEN);
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, paddbareq_parm, GEN_CMD_CODE(_AddBAReq));
-
-       /* rtw_enqueue_cmd(pcmdpriv, ph2c); */
-       res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
-
-       return res;
-}
-
-u8 rtw_dynamic_chk_wk_cmd(struct adapter *padapter)
-{
-       struct cmd_obj *ph2c;
-       struct drvextra_cmd_parm *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       u8      res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
-       if (!pdrvextra_cmd_parm) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm->ec_id = DYNAMIC_CHK_WK_CID;
-       pdrvextra_cmd_parm->type_size = 0;
-       pdrvextra_cmd_parm->pbuf = (u8 *)padapter;
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
-
-       /* rtw_enqueue_cmd(pcmdpriv, ph2c); */
-       res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-exit:
-
-       return res;
-}
-
-u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan)
-{
-       struct  cmd_obj *pcmdobj;
-       struct  SetChannelPlan_param *setChannelPlan_param;
-       struct  cmd_priv   *pcmdpriv = &padapter->cmdpriv;
-
-       u8      res = _SUCCESS;
-
-       /* check input parameter */
-       if (!rtw_is_channel_plan_valid(chplan)) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       /* prepare cmd parameter */
-       setChannelPlan_param = kzalloc(sizeof(*setChannelPlan_param),
-                                      GFP_KERNEL);
-       if (!setChannelPlan_param) {
-               res = _FAIL;
-               goto exit;
-       }
-       setChannelPlan_param->channel_plan = chplan;
-
-       /* need enqueue, prepare cmd_obj and enqueue */
-       pcmdobj = kzalloc(sizeof(*pcmdobj), GFP_KERNEL);
-       if (!pcmdobj) {
-               kfree(setChannelPlan_param);
-               res = _FAIL;
-               goto exit;
-       }
-
-       init_h2fwcmd_w_parm_no_rsp(pcmdobj, setChannelPlan_param, GEN_CMD_CODE(_SetChannelPlan));
-       res = rtw_enqueue_cmd(pcmdpriv, pcmdobj);
-
-       /* do something based on res... */
-       if (res == _SUCCESS)
-               padapter->mlmepriv.ChannelPlan = chplan;
-
-exit:
-
-       return res;
-}
-
-static void traffic_status_watchdog(struct adapter *padapter)
-{
-       u8      bEnterPS;
-       u8      bBusyTraffic = false, bTxBusyTraffic = false, bRxBusyTraffic = false;
-       u8      bHigherBusyTraffic = false, bHigherBusyRxTraffic = false, bHigherBusyTxTraffic = false;
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-
-       /*  */
-       /*  Determine if our traffic is busy now */
-       /*  */
-       if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-               if (pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > 100 ||
-                   pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > 100) {
-                       bBusyTraffic = true;
-
-                       if (pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > pmlmepriv->LinkDetectInfo.NumTxOkInPeriod)
-                               bRxBusyTraffic = true;
-                       else
-                               bTxBusyTraffic = true;
-               }
-
-               /*  Higher Tx/Rx data. */
-               if (pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > 4000 ||
-                   pmlmepriv->LinkDetectInfo.NumTxOkInPeriod > 4000) {
-                       bHigherBusyTraffic = true;
-
-                       if (pmlmepriv->LinkDetectInfo.NumRxOkInPeriod > pmlmepriv->LinkDetectInfo.NumTxOkInPeriod)
-                               bHigherBusyRxTraffic = true;
-                       else
-                               bHigherBusyTxTraffic = true;
-               }
-
-               /*  check traffic for  powersaving. */
-               if (((pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod + pmlmepriv->LinkDetectInfo.NumTxOkInPeriod) > 8) ||
-                   (pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod > 2))
-                       bEnterPS = false;
-               else
-                       bEnterPS = true;
-
-               /*  LeisurePS only work in infra mode. */
-               if (bEnterPS)
-                       LPS_Enter(padapter);
-               else
-                       LPS_Leave(padapter);
-       } else {
-               LPS_Leave(padapter);
-       }
-
-       pmlmepriv->LinkDetectInfo.NumRxOkInPeriod = 0;
-       pmlmepriv->LinkDetectInfo.NumTxOkInPeriod = 0;
-       pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod = 0;
-       pmlmepriv->LinkDetectInfo.bBusyTraffic = bBusyTraffic;
-       pmlmepriv->LinkDetectInfo.bTxBusyTraffic = bTxBusyTraffic;
-       pmlmepriv->LinkDetectInfo.bRxBusyTraffic = bRxBusyTraffic;
-       pmlmepriv->LinkDetectInfo.bHigherBusyTraffic = bHigherBusyTraffic;
-       pmlmepriv->LinkDetectInfo.bHigherBusyRxTraffic = bHigherBusyRxTraffic;
-       pmlmepriv->LinkDetectInfo.bHigherBusyTxTraffic = bHigherBusyTxTraffic;
-}
-
-static void rtl8188e_sreset_xmit_status_check(struct adapter *padapter)
-{
-       u32 txdma_status;
-       int res;
-
-       res = rtw_read32(padapter, REG_TXDMA_STATUS, &txdma_status);
-       if (res)
-               return;
-
-       if (txdma_status != 0x00)
-               rtw_write32(padapter, REG_TXDMA_STATUS, txdma_status);
-       /* total xmit irp = 4 */
-}
-
-static void dynamic_chk_wk_hdl(struct adapter *padapter, u8 *pbuf)
-{
-       struct mlme_priv *pmlmepriv;
-
-       padapter = (struct adapter *)pbuf;
-       pmlmepriv = &padapter->mlmepriv;
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
-               expire_timeout_chk(padapter);
-
-       rtl8188e_sreset_xmit_status_check(padapter);
-
-       linked_status_chk(padapter);
-       traffic_status_watchdog(padapter);
-
-       rtl8188e_HalDmWatchDog(padapter);
-}
-
-static void lps_ctrl_wk_hdl(struct adapter *padapter, u8 lps_ctrl_type)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       u8      mstatus;
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_STATE))
-               return;
-
-       switch (lps_ctrl_type) {
-       case LPS_CTRL_SCAN:
-               if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-                       /* connect */
-                       LPS_Leave(padapter);
-               }
-               break;
-       case LPS_CTRL_JOINBSS:
-               LPS_Leave(padapter);
-               break;
-       case LPS_CTRL_CONNECT:
-               mstatus = 1;/* connect */
-               /*  Reset LPS Setting */
-               padapter->pwrctrlpriv.LpsIdleCount = 0;
-               rtl8188e_set_FwJoinBssReport_cmd(padapter, mstatus);
-               break;
-       case LPS_CTRL_DISCONNECT:
-               mstatus = 0;/* disconnect */
-               LPS_Leave(padapter);
-               rtl8188e_set_FwJoinBssReport_cmd(padapter, mstatus);
-               break;
-       case LPS_CTRL_SPECIAL_PACKET:
-               pwrpriv->DelayLPSLastTimeStamp = jiffies;
-               LPS_Leave(padapter);
-               break;
-       case LPS_CTRL_LEAVE:
-               LPS_Leave(padapter);
-               break;
-       default:
-               break;
-       }
-
-}
-
-u8 rtw_lps_ctrl_wk_cmd(struct adapter *padapter, u8 lps_ctrl_type, u8 enqueue)
-{
-       struct cmd_obj  *ph2c;
-       struct drvextra_cmd_parm        *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       /* struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv; */
-       u8      res = _SUCCESS;
-
-       /* if (!pwrctrlpriv->bLeisurePs) */
-       /*      return res; */
-
-       if (enqueue) {
-               ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-               if (!ph2c) {
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm),
-                                            GFP_ATOMIC);
-               if (!pdrvextra_cmd_parm) {
-                       kfree(ph2c);
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               pdrvextra_cmd_parm->ec_id = LPS_CTRL_WK_CID;
-               pdrvextra_cmd_parm->type_size = lps_ctrl_type;
-               pdrvextra_cmd_parm->pbuf = NULL;
-
-               init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
-
-               res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-       } else {
-               lps_ctrl_wk_hdl(padapter, lps_ctrl_type);
-       }
-
-exit:
-
-       return res;
-}
-
-static void rpt_timer_setting_wk_hdl(struct adapter *padapter, u16 min_time)
-{
-       struct hal_data_8188e *haldata = &padapter->haldata;
-       struct odm_dm_struct *odmpriv = &haldata->odmpriv;
-
-       ODM_RA_Set_TxRPT_Time(odmpriv, min_time);
-}
-
-u8 rtw_rpt_timer_cfg_cmd(struct adapter *padapter, u16 min_time)
-{
-       struct cmd_obj          *ph2c;
-       struct drvextra_cmd_parm        *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       u8      res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm),
-                                    GFP_ATOMIC);
-       if (!pdrvextra_cmd_parm) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm->ec_id = RTP_TIMER_CFG_WK_CID;
-       pdrvextra_cmd_parm->type_size = min_time;
-       pdrvextra_cmd_parm->pbuf = NULL;
-       init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
-       res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-exit:
-
-       return res;
-}
-
-static void antenna_select_wk_hdl(struct adapter *padapter, u8 antenna)
-{
-       struct hal_data_8188e *haldata = &padapter->haldata;
-
-       /* switch current antenna to optimum antenna */
-       if (haldata->CurAntenna != antenna) {
-               ODM_UpdateRxIdleAnt_88E(&haldata->odmpriv, antenna == 2 ? MAIN_ANT : AUX_ANT);
-               haldata->CurAntenna = antenna;
-       }
-}
-
-static bool rtw_antenna_diversity(struct adapter *adapter)
-{
-       struct hal_data_8188e *haldata = &adapter->haldata;
-
-       return haldata->AntDivCfg != 0;
-}
-
-u8 rtw_antenna_select_cmd(struct adapter *padapter, u8 antenna, u8 enqueue)
-{
-       struct cmd_obj          *ph2c;
-       struct drvextra_cmd_parm        *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       u8      res = _SUCCESS;
-
-       if (!rtw_antenna_diversity(padapter))
-               return res;
-
-       if (enqueue) {
-               ph2c = kzalloc(sizeof(*ph2c), GFP_KERNEL);
-               if (!ph2c) {
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm),
-                                            GFP_KERNEL);
-               if (!pdrvextra_cmd_parm) {
-                       kfree(ph2c);
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               pdrvextra_cmd_parm->ec_id = ANT_SELECT_WK_CID;
-               pdrvextra_cmd_parm->type_size = antenna;
-               pdrvextra_cmd_parm->pbuf = NULL;
-               init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
-
-               res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-       } else {
-               antenna_select_wk_hdl(padapter, antenna);
-       }
-exit:
-
-       return res;
-}
-
-u8 p2p_protocol_wk_cmd(struct adapter *padapter, int intCmdType)
-{
-       struct cmd_obj  *ph2c;
-       struct drvextra_cmd_parm        *pdrvextra_cmd_parm;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       u8      res = _SUCCESS;
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-               return res;
-
-       ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
-       if (!pdrvextra_cmd_parm) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm->ec_id = P2P_PROTO_WK_CID;
-       pdrvextra_cmd_parm->type_size = intCmdType;     /*      As the command type. */
-       pdrvextra_cmd_parm->pbuf = NULL;                /*      Must be NULL here */
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
-
-       res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
-
-       return res;
-}
-
-u8 rtw_ps_cmd(struct adapter *padapter)
-{
-       struct cmd_obj          *ppscmd;
-       struct drvextra_cmd_parm        *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       u8      res = _SUCCESS;
-
-       ppscmd = kzalloc(sizeof(*ppscmd), GFP_ATOMIC);
-       if (!ppscmd) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
-       if (!pdrvextra_cmd_parm) {
-               kfree(ppscmd);
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm->ec_id = POWER_SAVING_CTRL_WK_CID;
-       pdrvextra_cmd_parm->pbuf = NULL;
-       init_h2fwcmd_w_parm_no_rsp(ppscmd, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
-
-       res = rtw_enqueue_cmd(pcmdpriv, ppscmd);
-
-exit:
-
-       return res;
-}
-
-static bool rtw_is_hi_queue_empty(struct adapter *adapter)
-{
-       int res;
-       u32 reg;
-
-       res = rtw_read32(adapter, REG_HGQ_INFORMATION, &reg);
-       if (res)
-               return false;
-
-       return (reg & 0x0000ff00) == 0;
-}
-
-static void rtw_chk_hi_queue_hdl(struct adapter *padapter)
-{
-       int cnt = 0;
-       struct sta_info *psta_bmc;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       psta_bmc = rtw_get_bcmc_stainfo(padapter);
-       if (!psta_bmc)
-               return;
-
-       if (psta_bmc->sleepq_len == 0) {
-               bool val = rtw_is_hi_queue_empty(padapter);
-
-               while (!val) {
-                       msleep(100);
-
-                       cnt++;
-
-                       if (cnt > 10)
-                               break;
-
-                       val = rtw_is_hi_queue_empty(padapter);
-               }
-
-               if (cnt <= 10) {
-                       pstapriv->tim_bitmap &= ~BIT(0);
-                       pstapriv->sta_dz_bitmap &= ~BIT(0);
-
-                       update_beacon(padapter, _TIM_IE_, NULL, false);
-               } else { /* re check again */
-                       rtw_chk_hi_queue_cmd(padapter);
-               }
-       }
-}
-
-void rtw_chk_hi_queue_cmd(struct adapter *padapter)
-{
-       struct cmd_obj  *ph2c;
-       struct drvextra_cmd_parm        *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-       if (!ph2c)
-               return;
-
-       pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
-       if (!pdrvextra_cmd_parm) {
-               kfree(ph2c);
-               return;
-       }
-
-       pdrvextra_cmd_parm->ec_id = CHECK_HIQ_WK_CID;
-       pdrvextra_cmd_parm->type_size = 0;
-       pdrvextra_cmd_parm->pbuf = NULL;
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
-
-       rtw_enqueue_cmd(pcmdpriv, ph2c);
-}
-
-u8 rtw_c2h_wk_cmd(struct adapter *padapter, u8 *c2h_evt)
-{
-       struct cmd_obj *ph2c;
-       struct drvextra_cmd_parm *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       u8      res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
-       if (!pdrvextra_cmd_parm) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm->ec_id = C2H_WK_CID;
-       pdrvextra_cmd_parm->type_size = c2h_evt ? 16 : 0;
-       pdrvextra_cmd_parm->pbuf = c2h_evt;
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
-
-       res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
-
-       return res;
-}
-
-/* C2H event format:
- * Field    TRIGGER      CONTENT     CMD_SEQ    CMD_LEN    CMD_ID
- * BITS     [127:120]    [119:16]    [15:8]     [7:4]      [3:0]
- */
-static s32 c2h_evt_read(struct adapter *adapter, u8 *buf)
-{
-       s32 ret = _FAIL;
-       struct c2h_evt_hdr *c2h_evt;
-       int i;
-       u8 trigger;
-
-       if (!buf)
-               goto exit;
-
-       ret = rtw_read8(adapter, REG_C2HEVT_CLEAR, &trigger);
-       if (ret)
-               return _FAIL;
-
-       if (trigger == C2H_EVT_HOST_CLOSE)
-               goto exit; /* Not ready */
-       else if (trigger != C2H_EVT_FW_CLOSE)
-               goto clear_evt; /* Not a valid value */
-
-       c2h_evt = (struct c2h_evt_hdr *)buf;
-
-       memset(c2h_evt, 0, 16);
-
-       ret = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL, buf);
-       if (ret) {
-               ret = _FAIL;
-               goto clear_evt;
-       }
-
-       ret = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + 1, buf + 1);
-       if (ret) {
-               ret = _FAIL;
-               goto clear_evt;
-       }
-       /* Read the content */
-       for (i = 0; i < c2h_evt->plen; i++) {
-               ret = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL +
-                               sizeof(*c2h_evt) + i, c2h_evt->payload + i);
-               if (ret) {
-                       ret = _FAIL;
-                       goto clear_evt;
-               }
-       }
-
-       ret = _SUCCESS;
-
-clear_evt:
-       /* Clear event to notify FW we have read the command.
-        * If this field isn't clear, the FW won't update the next
-        * command message.
-        */
-       rtw_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE);
-exit:
-       return ret;
-}
-
-static void c2h_evt_hdl(struct adapter *adapter, struct c2h_evt_hdr *c2h_evt, c2h_id_filter filter)
-{
-       u8 buf[16];
-
-       if (!c2h_evt)
-               c2h_evt_read(adapter, buf);
-}
-
-static void c2h_wk_callback(struct work_struct *work)
-{
-       struct evt_priv *evtpriv = container_of(work, struct evt_priv, c2h_wk);
-       struct adapter *adapter = container_of(evtpriv, struct adapter, evtpriv);
-       struct c2h_evt_hdr *c2h_evt;
-
-       evtpriv->c2h_wk_alive = true;
-
-       while (!rtw_cbuf_empty(evtpriv->c2h_queue)) {
-               c2h_evt = (struct c2h_evt_hdr *)rtw_cbuf_pop(evtpriv->c2h_queue);
-               if (c2h_evt) {
-                       /* This C2H event is read, clear it */
-                       rtw_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE);
-               } else {
-                       c2h_evt = kmalloc(16, GFP_KERNEL);
-                       if (c2h_evt) {
-                               /* This C2H event is not read, read & clear now */
-                               if (c2h_evt_read(adapter, (u8 *)c2h_evt) != _SUCCESS) {
-                                       kfree(c2h_evt);
-                                       continue;
-                               }
-                       } else {
-                               return;
-                       }
-               }
-
-               /* Special pointer to trigger c2h_evt_clear only */
-               if ((void *)c2h_evt == (void *)evtpriv)
-                       continue;
-
-               if (!c2h_evt_exist(c2h_evt)) {
-                       kfree(c2h_evt);
-                       continue;
-               }
-
-               /* Enqueue into cmd_thread for others */
-               rtw_c2h_wk_cmd(adapter, (u8 *)c2h_evt);
-       }
-
-       evtpriv->c2h_wk_alive = false;
-}
-
-u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
-       struct drvextra_cmd_parm *pdrvextra_cmd;
-
-       if (!pbuf)
-               return H2C_PARAMETERS_ERROR;
-
-       pdrvextra_cmd = (struct drvextra_cmd_parm *)pbuf;
-
-       switch (pdrvextra_cmd->ec_id) {
-       case DYNAMIC_CHK_WK_CID:
-               dynamic_chk_wk_hdl(padapter, pdrvextra_cmd->pbuf);
-               break;
-       case POWER_SAVING_CTRL_WK_CID:
-               rtw_ps_processor(padapter);
-               break;
-       case LPS_CTRL_WK_CID:
-               lps_ctrl_wk_hdl(padapter, (u8)pdrvextra_cmd->type_size);
-               break;
-       case RTP_TIMER_CFG_WK_CID:
-               rpt_timer_setting_wk_hdl(padapter, pdrvextra_cmd->type_size);
-               break;
-       case ANT_SELECT_WK_CID:
-               antenna_select_wk_hdl(padapter, pdrvextra_cmd->type_size);
-               break;
-       case P2P_PS_WK_CID:
-               p2p_ps_wk_hdl(padapter, pdrvextra_cmd->type_size);
-               break;
-       case P2P_PROTO_WK_CID:
-               /*      Commented by Albert 2011/07/01 */
-               /*      I used the type_size as the type command */
-               p2p_protocol_wk_hdl(padapter, pdrvextra_cmd->type_size);
-               break;
-       case CHECK_HIQ_WK_CID:
-               rtw_chk_hi_queue_hdl(padapter);
-               break;
-       case C2H_WK_CID:
-               c2h_evt_hdl(padapter, (struct c2h_evt_hdr *)pdrvextra_cmd->pbuf, NULL);
-               break;
-       default:
-               break;
-       }
-
-       if (pdrvextra_cmd->pbuf && pdrvextra_cmd->type_size > 0)
-               kfree(pdrvextra_cmd->pbuf);
-
-       return H2C_SUCCESS;
-}
-
-void rtw_survey_cmd_callback(struct adapter *padapter,  struct cmd_obj *pcmd)
-{
-       struct  mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       if (pcmd->res != H2C_SUCCESS) {
-               /* TODO: cancel timer and do timeout handler directly... */
-               _set_timer(&pmlmepriv->scan_to_timer, 1);
-       }
-
-       /*  free cmd */
-       rtw_free_cmd_obj(pcmd);
-
-}
-
-void rtw_disassoc_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd)
-{
-       struct  mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       if (pcmd->res != H2C_SUCCESS) {
-               spin_lock_bh(&pmlmepriv->lock);
-               set_fwstate(pmlmepriv, _FW_LINKED);
-               spin_unlock_bh(&pmlmepriv->lock);
-
-               return;
-       }
-
-       /* clear bridge database */
-       nat25_db_cleanup(padapter);
-
-       /*  free cmd */
-       rtw_free_cmd_obj(pcmd);
-}
-
-void rtw_joinbss_cmd_callback(struct adapter *padapter,  struct cmd_obj *pcmd)
-{
-       struct  mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       if (pcmd->res != H2C_SUCCESS) {
-               /* TODO: cancel timer and do timeout handler directly... */
-               _set_timer(&pmlmepriv->assoc_timer, 1);
-       }
-
-       rtw_free_cmd_obj(pcmd);
-}
-
-void rtw_createbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd)
-{
-       struct sta_info *psta = NULL;
-       struct wlan_network *pwlan = NULL;
-       struct  mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex *)pcmd->parmbuf;
-       struct wlan_network *tgt_network = &pmlmepriv->cur_network;
-
-       if (pcmd->res != H2C_SUCCESS)
-               _set_timer(&pmlmepriv->assoc_timer, 1);
-
-       del_timer_sync(&pmlmepriv->assoc_timer);
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               psta = rtw_get_stainfo(&padapter->stapriv, pnetwork->MacAddress);
-               if (!psta) {
-                       psta = rtw_alloc_stainfo(&padapter->stapriv, pnetwork->MacAddress);
-                       if (!psta)
-                               goto createbss_cmd_fail;
-               }
-
-               rtw_indicate_connect(padapter);
-       } else {
-
-               pwlan = rtw_alloc_network(pmlmepriv);
-               spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-               if (!pwlan) {
-                       pwlan = rtw_get_oldest_wlan_network(&pmlmepriv->scanned_queue);
-                       if (!pwlan) {
-                               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                               goto createbss_cmd_fail;
-                       }
-                       pwlan->last_scanned = jiffies;
-               } else {
-                       list_add_tail(&pwlan->list, &pmlmepriv->scanned_queue.queue);
-               }
-
-               pnetwork->Length = get_wlan_bssid_ex_sz(pnetwork);
-               memcpy(&pwlan->network, pnetwork, pnetwork->Length);
-
-               memcpy(&tgt_network->network, pnetwork, (get_wlan_bssid_ex_sz(pnetwork)));
-
-               _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-
-               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-               /*  we will set _FW_LINKED when there is one more sat to join us (rtw_stassoc_event_callback) */
-       }
-
-createbss_cmd_fail:
-
-       spin_unlock_bh(&pmlmepriv->lock);
-
-       rtw_free_cmd_obj(pcmd);
-
-}
-
-void rtw_setstaKey_cmdrsp_callback(struct adapter *padapter,  struct cmd_obj *pcmd)
-{
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct set_stakey_rsp *psetstakey_rsp = (struct set_stakey_rsp *)(pcmd->rsp);
-       struct sta_info *psta = rtw_get_stainfo(pstapriv, psetstakey_rsp->addr);
-
-       if (!psta)
-               goto exit;
-exit:
-       rtw_free_cmd_obj(pcmd);
-
-}
-
-void rtw_setassocsta_cmdrsp_callback(struct adapter *padapter,  struct cmd_obj *pcmd)
-{
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct set_assocsta_parm *passocsta_parm = (struct set_assocsta_parm *)(pcmd->parmbuf);
-       struct set_assocsta_rsp *passocsta_rsp = (struct set_assocsta_rsp *)(pcmd->rsp);
-       struct sta_info *psta = rtw_get_stainfo(pstapriv, passocsta_parm->addr);
-
-       if (!psta)
-               goto exit;
-
-       psta->aid = passocsta_rsp->cam_id;
-       psta->mac_id = passocsta_rsp->cam_id;
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (check_fwstate(pmlmepriv, WIFI_MP_STATE) && check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
-               _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-
-       set_fwstate(pmlmepriv, _FW_LINKED);
-       spin_unlock_bh(&pmlmepriv->lock);
-
-exit:
-       rtw_free_cmd_obj(pcmd);
-
-}
diff --git a/drivers/staging/r8188eu/core/rtw_efuse.c b/drivers/staging/r8188eu/core/rtw_efuse.c
deleted file mode 100644 (file)
index df9534d..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _RTW_EFUSE_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/rtw_efuse.h"
-#include "../include/rtl8188e_hal.h"
-
-/*  */
-/*     Description: */
-/*             Execute E-Fuse read byte operation. */
-/*             Referred from SD1 Richard. */
-/*  */
-/*     Assumption: */
-/*             1. Boot from E-Fuse and successfully auto-load. */
-/*             2. PASSIVE_LEVEL (USB interface) */
-/*  */
-/*     Created by Roger, 2008.10.21. */
-/*  */
-void
-ReadEFuseByte(
-               struct adapter *Adapter,
-               u16 _offset,
-               u8 *pbuf)
-{
-       u32 value32;
-       u8 readbyte;
-       u16 retry;
-       int res;
-
-       /* Write Address */
-       rtw_write8(Adapter, EFUSE_CTRL + 1, (_offset & 0xff));
-       res = rtw_read8(Adapter, EFUSE_CTRL + 2, &readbyte);
-       if (res)
-               return;
-
-       rtw_write8(Adapter, EFUSE_CTRL + 2, ((_offset >> 8) & 0x03) | (readbyte & 0xfc));
-
-       /* Write bit 32 0 */
-       res = rtw_read8(Adapter, EFUSE_CTRL + 3, &readbyte);
-       if (res)
-               return;
-
-       rtw_write8(Adapter, EFUSE_CTRL + 3, (readbyte & 0x7f));
-
-       /* Check bit 32 read-ready */
-       res = rtw_read32(Adapter, EFUSE_CTRL, &value32);
-       if (res)
-               return;
-
-       for (retry = 0; retry < 10000; retry++) {
-               res = rtw_read32(Adapter, EFUSE_CTRL, &value32);
-               if (res)
-                       continue;
-
-               if (((value32 >> 24) & 0xff) & 0x80)
-                       break;
-       }
-
-       /*  20100205 Joseph: Add delay suggested by SD1 Victor. */
-       /*  This fix the problem that Efuse read error in high temperature condition. */
-       /*  Designer says that there shall be some delay after ready bit is set, or the */
-       /*  result will always stay on last data we read. */
-       udelay(50);
-       res = rtw_read32(Adapter, EFUSE_CTRL, &value32);
-       if (res)
-               return;
-
-       *pbuf = (u8)(value32 & 0xff);
-
-       /* FIXME: return an error to caller */
-}
diff --git a/drivers/staging/r8188eu/core/rtw_fw.c b/drivers/staging/r8188eu/core/rtw_fw.c
deleted file mode 100644 (file)
index 1e4baf7..0000000
+++ /dev/null
@@ -1,335 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include <linux/firmware.h>
-#include "../include/rtw_fw.h"
-
-#define MAX_REG_BLOCK_SIZE     196
-#define FW_8188E_START_ADDRESS 0x1000
-#define MAX_PAGE_SIZE          4096
-
-#define IS_FW_HEADER_EXIST(_fwhdr)                             \
-       ((le16_to_cpu(_fwhdr->signature) & 0xFFF0) == 0x92C0 || \
-       (le16_to_cpu(_fwhdr->signature) & 0xFFF0) == 0x88C0 ||  \
-       (le16_to_cpu(_fwhdr->signature) & 0xFFF0) == 0x2300 ||  \
-       (le16_to_cpu(_fwhdr->signature) & 0xFFF0) == 0x88E0)
-
-struct rt_firmware_hdr {
-       __le16  signature;      /* 92C0: test chip; 92C,
-                                * 88C0: test chip; 88C1: MP A-cut;
-                                * 92C1: MP A-cut */
-       u8      category;       /* AP/NIC and USB/PCI */
-       u8      function;       /* Reserved for different FW function
-                                * indcation, for further use when
-                                * driver needs to download different
-                                * FW for different conditions */
-       __le16  version;        /* FW Version */
-       u8      subversion;     /* FW Subversion, default 0x00 */
-       u8      rsvd1;
-       u8      month;          /* Release time Month field */
-       u8      date;           /* Release time Date field */
-       u8      hour;           /* Release time Hour field */
-       u8      minute;         /* Release time Minute field */
-       __le16  ramcodesize;    /* The size of RAM code */
-       u8      foundry;
-       u8      rsvd2;
-       __le32  svnidx;         /* The SVN entry index */
-       __le32  rsvd3;
-       __le32  rsvd4;
-       __le32  rsvd5;
-};
-
-static_assert(sizeof(struct rt_firmware_hdr) == 32);
-
-static void fw_download_enable(struct adapter *padapter, bool enable)
-{
-       u8 tmp;
-       int res;
-
-       if (enable) {
-               /*  MCU firmware download enable. */
-               res = rtw_read8(padapter, REG_MCUFWDL, &tmp);
-               if (res)
-                       return;
-
-               rtw_write8(padapter, REG_MCUFWDL, tmp | 0x01);
-
-               /*  8051 reset */
-               res = rtw_read8(padapter, REG_MCUFWDL + 2, &tmp);
-               if (res)
-                       return;
-
-               rtw_write8(padapter, REG_MCUFWDL + 2, tmp & 0xf7);
-       } else {
-               /*  MCU firmware download disable. */
-               res = rtw_read8(padapter, REG_MCUFWDL, &tmp);
-               if (res)
-                       return;
-
-               rtw_write8(padapter, REG_MCUFWDL, tmp & 0xfe);
-
-               /*  Reserved for fw extension. */
-               rtw_write8(padapter, REG_MCUFWDL + 1, 0x00);
-       }
-}
-
-static int block_write(struct adapter *padapter, u8 *buffer, u32 size)
-{
-       int ret = _SUCCESS;
-       u32 blocks, block_size, remain;
-       u32 i, offset, addr;
-       u8 *data;
-
-       block_size = MAX_REG_BLOCK_SIZE;
-
-       blocks = size / block_size;
-       remain = size % block_size;
-
-       for (i = 0; i < blocks; i++) {
-               addr = FW_8188E_START_ADDRESS + i * block_size;
-               data = buffer + i * block_size;
-
-               if (rtw_writeN(padapter, addr, block_size, data))
-                       return _FAIL;
-       }
-
-       if (remain) {
-               offset = blocks * block_size;
-               block_size = 8;
-
-               blocks = remain / block_size;
-               remain = remain % block_size;
-
-               for (i = 0; i < blocks; i++) {
-                       addr = FW_8188E_START_ADDRESS + offset + i * block_size;
-                       data = buffer + offset + i * block_size;
-
-                       if (rtw_writeN(padapter, addr, block_size, data))
-                               return _FAIL;
-               }
-       }
-
-       if (remain) {
-               offset += blocks * block_size;
-
-               /* block size 1 */
-               blocks = remain;
-
-               for (i = 0; i < blocks; i++) {
-                       addr = FW_8188E_START_ADDRESS + offset + i;
-                       data = buffer + offset + i;
-
-                       ret = rtw_write8(padapter, addr, *data);
-                       if (ret == _FAIL)
-                               goto exit;
-               }
-       }
-
-exit:
-       return ret;
-}
-
-static int page_write(struct adapter *padapter, u32 page, u8 *buffer, u32 size)
-{
-       u8 value8;
-       u8 u8Page = (u8)(page & 0x07);
-       int res;
-
-       res = rtw_read8(padapter, REG_MCUFWDL + 2, &value8);
-       if (res)
-               return _FAIL;
-
-       value8 = (value8 & 0xF8) | u8Page;
-       rtw_write8(padapter, REG_MCUFWDL + 2, value8);
-
-       return block_write(padapter, buffer, size);
-}
-
-static int write_fw(struct adapter *padapter, u8 *buffer, u32 size)
-{
-       /*  Since we need dynamic decide method of dwonload fw, so we call this function to get chip version. */
-       /*  We can remove _ReadChipVersion from ReadpadapterInfo8192C later. */
-       int ret = _SUCCESS;
-       u32     pageNums, remainSize;
-       u32     page, offset;
-
-       pageNums = size / MAX_PAGE_SIZE;
-       remainSize = size % MAX_PAGE_SIZE;
-
-       for (page = 0; page < pageNums; page++) {
-               offset = page * MAX_PAGE_SIZE;
-               ret = page_write(padapter, page, buffer + offset, MAX_PAGE_SIZE);
-
-               if (ret == _FAIL)
-                       goto exit;
-       }
-       if (remainSize) {
-               offset = pageNums * MAX_PAGE_SIZE;
-               page = pageNums;
-               ret = page_write(padapter, page, buffer + offset, remainSize);
-
-               if (ret == _FAIL)
-                       goto exit;
-       }
-exit:
-       return ret;
-}
-
-void rtw_reset_8051(struct adapter *padapter)
-{
-       u8 val8;
-       int res;
-
-       res = rtw_read8(padapter, REG_SYS_FUNC_EN + 1, &val8);
-       if (res)
-               return;
-
-       rtw_write8(padapter, REG_SYS_FUNC_EN + 1, val8 & (~BIT(2)));
-       rtw_write8(padapter, REG_SYS_FUNC_EN + 1, val8 | (BIT(2)));
-}
-
-static int fw_free_to_go(struct adapter *padapter)
-{
-       u32     counter = 0;
-       u32     value32;
-       int res;
-
-       /*  polling CheckSum report */
-       do {
-               res = rtw_read32(padapter, REG_MCUFWDL, &value32);
-               if (res)
-                       continue;
-
-               if (value32 & FWDL_CHKSUM_RPT)
-                       break;
-       } while (counter++ < POLLING_READY_TIMEOUT_COUNT);
-
-       if (counter >= POLLING_READY_TIMEOUT_COUNT)
-               return _FAIL;
-
-       res = rtw_read32(padapter, REG_MCUFWDL, &value32);
-       if (res)
-               return _FAIL;
-
-       value32 |= MCUFWDL_RDY;
-       value32 &= ~WINTINI_RDY;
-       rtw_write32(padapter, REG_MCUFWDL, value32);
-
-       rtw_reset_8051(padapter);
-
-       /*  polling for FW ready */
-       counter = 0;
-       do {
-               res = rtw_read32(padapter, REG_MCUFWDL, &value32);
-               if (!res && value32 & WINTINI_RDY)
-                       return _SUCCESS;
-
-               udelay(5);
-       } while (counter++ < POLLING_READY_TIMEOUT_COUNT);
-
-       return _FAIL;
-}
-
-static int load_firmware(struct rt_firmware *rtfw, struct device *device)
-{
-       int ret = _SUCCESS;
-       const struct firmware *fw;
-       const char *fw_name = FW_RTL8188EU;
-       int err = request_firmware(&fw, fw_name, device);
-
-       if (err) {
-               pr_err("Request firmware failed with error 0x%x\n", err);
-               ret = _FAIL;
-               goto exit;
-       }
-       if (!fw) {
-               pr_err("Firmware %s not available\n", fw_name);
-               ret = _FAIL;
-               goto exit;
-       }
-
-       rtfw->data = kmemdup(fw->data, fw->size, GFP_KERNEL);
-       if (!rtfw->data) {
-               pr_err("Failed to allocate rtfw->data\n");
-               ret = _FAIL;
-               goto exit;
-       }
-       rtfw->size = fw->size;
-
-exit:
-       release_firmware(fw);
-       return ret;
-}
-
-int rtl8188e_firmware_download(struct adapter *padapter)
-{
-       int ret = _SUCCESS;
-       u8 reg;
-       unsigned long fwdl_timeout;
-       struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
-       struct device *device = dvobj_to_dev(dvobj);
-       struct rt_firmware_hdr *fwhdr = NULL;
-       u8 *fw_data;
-       u32 fw_size;
-
-       if (!dvobj->firmware.data)
-               ret = load_firmware(&dvobj->firmware, device);
-       if (ret == _FAIL) {
-               dvobj->firmware.data = NULL;
-               goto exit;
-       }
-       fw_data = dvobj->firmware.data;
-       fw_size = dvobj->firmware.size;
-
-       fwhdr = (struct rt_firmware_hdr *)dvobj->firmware.data;
-
-       if (IS_FW_HEADER_EXIST(fwhdr)) {
-               dev_info_once(device, "Firmware Version %d, SubVersion %d, Signature 0x%x\n",
-                             le16_to_cpu(fwhdr->version), fwhdr->subversion,
-                             le16_to_cpu(fwhdr->signature));
-
-               fw_data = fw_data + sizeof(struct rt_firmware_hdr);
-               fw_size = fw_size - sizeof(struct rt_firmware_hdr);
-       }
-
-       /*  Suggested by Filen. If 8051 is running in RAM code, driver should inform Fw to reset by itself, */
-       /*  or it will cause download Fw fail. 2010.02.01. by tynli. */
-       ret = rtw_read8(padapter, REG_MCUFWDL, &reg);
-       if (ret) {
-               ret = _FAIL;
-               goto exit;
-       }
-
-       if (reg & RAM_DL_SEL) { /* 8051 RAM code */
-               rtw_write8(padapter, REG_MCUFWDL, 0x00);
-               rtw_reset_8051(padapter);
-       }
-
-       fw_download_enable(padapter, true);
-       fwdl_timeout = jiffies + msecs_to_jiffies(500);
-       do {
-               /* reset the FWDL chksum */
-               ret = rtw_read8(padapter, REG_MCUFWDL, &reg);
-               if (ret) {
-                       ret = _FAIL;
-                       continue;
-               }
-
-               rtw_write8(padapter, REG_MCUFWDL, reg | FWDL_CHKSUM_RPT);
-
-               ret = write_fw(padapter, fw_data, fw_size);
-               if (ret == _SUCCESS)
-                       break;
-       } while (!time_after(jiffies, fwdl_timeout));
-
-       fw_download_enable(padapter, false);
-       if (ret != _SUCCESS)
-               goto exit;
-
-       ret = fw_free_to_go(padapter);
-       if (ret != _SUCCESS)
-               goto exit;
-
-exit:
-       return ret;
-}
diff --git a/drivers/staging/r8188eu/core/rtw_ieee80211.c b/drivers/staging/r8188eu/core/rtw_ieee80211.c
deleted file mode 100644 (file)
index bc8543e..0000000
+++ /dev/null
@@ -1,1150 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _IEEE80211_C
-
-#include "../include/drv_types.h"
-#include "../include/ieee80211.h"
-#include "../include/wifi.h"
-#include "../include/osdep_service.h"
-#include "../include/wlan_bssdef.h"
-#include "../include/usb_osintf.h"
-
-u8 RTW_WPA_OUI_TYPE[] = { 0x00, 0x50, 0xf2, 1 };
-u16 RTW_WPA_VERSION = 1;
-u8 WPA_AUTH_KEY_MGMT_NONE[] = { 0x00, 0x50, 0xf2, 0 };
-u8 WPA_AUTH_KEY_MGMT_UNSPEC_802_1X[] = { 0x00, 0x50, 0xf2, 1 };
-u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X[] = { 0x00, 0x50, 0xf2, 2 };
-u8 WPA_CIPHER_SUITE_NONE[] = { 0x00, 0x50, 0xf2, 0 };
-u8 WPA_CIPHER_SUITE_WEP40[] = { 0x00, 0x50, 0xf2, 1 };
-u8 WPA_CIPHER_SUITE_TKIP[] = { 0x00, 0x50, 0xf2, 2 };
-u8 WPA_CIPHER_SUITE_WRAP[] = { 0x00, 0x50, 0xf2, 3 };
-u8 WPA_CIPHER_SUITE_CCMP[] = { 0x00, 0x50, 0xf2, 4 };
-u8 WPA_CIPHER_SUITE_WEP104[] = { 0x00, 0x50, 0xf2, 5 };
-
-u16 RSN_VERSION_BSD = 1;
-u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X[] = { 0x00, 0x0f, 0xac, 1 };
-u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X[] = { 0x00, 0x0f, 0xac, 2 };
-u8 RSN_CIPHER_SUITE_NONE[] = { 0x00, 0x0f, 0xac, 0 };
-u8 RSN_CIPHER_SUITE_WEP40[] = { 0x00, 0x0f, 0xac, 1 };
-u8 RSN_CIPHER_SUITE_TKIP[] = { 0x00, 0x0f, 0xac, 2 };
-u8 RSN_CIPHER_SUITE_WRAP[] = { 0x00, 0x0f, 0xac, 3 };
-u8 RSN_CIPHER_SUITE_CCMP[] = { 0x00, 0x0f, 0xac, 4 };
-u8 RSN_CIPHER_SUITE_WEP104[] = { 0x00, 0x0f, 0xac, 5 };
-/*  */
-/*  for adhoc-master to generate ie and provide supported-rate to fw */
-/*  */
-
-static u8      WIFI_CCKRATES[] = {
-       (IEEE80211_CCK_RATE_1MB | IEEE80211_BASIC_RATE_MASK),
-       (IEEE80211_CCK_RATE_2MB | IEEE80211_BASIC_RATE_MASK),
-       (IEEE80211_CCK_RATE_5MB | IEEE80211_BASIC_RATE_MASK),
-       (IEEE80211_CCK_RATE_11MB | IEEE80211_BASIC_RATE_MASK)
-       };
-
-static u8      WIFI_OFDMRATES[] = {
-        (IEEE80211_OFDM_RATE_6MB),
-        (IEEE80211_OFDM_RATE_9MB),
-        (IEEE80211_OFDM_RATE_12MB),
-        (IEEE80211_OFDM_RATE_18MB),
-        (IEEE80211_OFDM_RATE_24MB),
-        IEEE80211_OFDM_RATE_36MB,
-        IEEE80211_OFDM_RATE_48MB,
-        IEEE80211_OFDM_RATE_54MB
-       };
-
-int rtw_get_bit_value_from_ieee_value(u8 val)
-{
-       unsigned char dot11_rate_table[] = {
-               2, 4, 11, 22, 12, 18, 24, 36, 48,
-               72, 96, 108, 0}; /*  last element must be zero!! */
-
-       int i = 0;
-       while (dot11_rate_table[i] != 0) {
-               if (dot11_rate_table[i] == val)
-                       return BIT(i);
-               i++;
-       }
-       return 0;
-}
-
-bool   rtw_is_cckrates_included(u8 *rate)
-{
-       u32     i = 0;
-
-       while (rate[i] != 0) {
-               if  ((((rate[i]) & 0x7f) == 2) || (((rate[i]) & 0x7f) == 4) ||
-                    (((rate[i]) & 0x7f) == 11)  || (((rate[i]) & 0x7f) == 22))
-                       return true;
-               i++;
-       }
-       return false;
-}
-
-bool   rtw_is_cckratesonly_included(u8 *rate)
-{
-       u32 i = 0;
-
-       while (rate[i] != 0) {
-               if  ((((rate[i]) & 0x7f) != 2) && (((rate[i]) & 0x7f) != 4) &&
-                    (((rate[i]) & 0x7f) != 11)  && (((rate[i]) & 0x7f) != 22))
-                       return false;
-               i++;
-       }
-
-       return true;
-}
-
-int rtw_check_network_type(unsigned char *rate, int ratelen, int channel)
-{
-       if (channel > 14)
-               return WIRELESS_INVALID;
-       /*  could be pure B, pure G, or B/G */
-       if (rtw_is_cckratesonly_included(rate))
-               return WIRELESS_11B;
-       else if (rtw_is_cckrates_included(rate))
-               return  WIRELESS_11BG;
-       else
-               return WIRELESS_11G;
-}
-
-u8 *rtw_set_fixed_ie(unsigned char *pbuf, unsigned int len, unsigned char *source,
-                               unsigned int *frlen)
-{
-       memcpy((void *)pbuf, (void *)source, len);
-       *frlen = *frlen + len;
-       return pbuf + len;
-}
-
-/*  rtw_set_ie will update frame length */
-u8 *rtw_set_ie
-(
-       u8 *pbuf,
-       int index,
-       uint len,
-       u8 *source,
-       uint *frlen /* frame length */
-)
-{
-
-       *pbuf = (u8)index;
-
-       *(pbuf + 1) = (u8)len;
-
-       if (len > 0)
-               memcpy((void *)(pbuf + 2), (void *)source, len);
-
-       *frlen = *frlen + (len + 2);
-
-       return pbuf + len + 2;
-}
-
-/*----------------------------------------------------------------------------
-index: the information element id index, limit is the limit for search
------------------------------------------------------------------------------*/
-u8 *rtw_get_ie(u8 *pbuf, int index, int *len, int limit)
-{
-       int tmp, i;
-       u8 *p;
-
-       if (limit < 1) {
-
-               return NULL;
-       }
-
-       p = pbuf;
-       i = 0;
-       *len = 0;
-       while (1) {
-               if (*p == index) {
-                       *len = *(p + 1);
-                       return p;
-               }
-               tmp = *(p + 1);
-               p += (tmp + 2);
-               i += (tmp + 2);
-               if (i >= limit)
-                       break;
-       }
-
-       return NULL;
-}
-
-void rtw_set_supported_rate(u8 *SupportedRates, uint mode)
-{
-
-       memset(SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX);
-
-       switch (mode) {
-       case WIRELESS_11B:
-               memcpy(SupportedRates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN);
-               break;
-       case WIRELESS_11G:
-               memcpy(SupportedRates, WIFI_OFDMRATES, IEEE80211_NUM_OFDM_RATESLEN);
-               break;
-       case WIRELESS_11BG:
-       case WIRELESS_11G_24N:
-       case WIRELESS_11_24N:
-       case WIRELESS_11BG_24N:
-               memcpy(SupportedRates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN);
-               memcpy(SupportedRates + IEEE80211_CCK_RATE_LEN, WIFI_OFDMRATES, IEEE80211_NUM_OFDM_RATESLEN);
-               break;
-       }
-
-}
-
-uint   rtw_get_rateset_len(u8  *rateset)
-{
-       uint i = 0;
-
-       while (1) {
-               if ((rateset[i]) == 0)
-                       break;
-               if (i > 12)
-                       break;
-               i++;
-       }
-
-       return i;
-}
-
-int rtw_generate_ie(struct registry_priv *pregistrypriv)
-{
-       u8      wireless_mode;
-       int     sz = 0, rateLen;
-       struct wlan_bssid_ex *pdev_network = &pregistrypriv->dev_network;
-       u8 *ie = pdev_network->IEs;
-
-       /* timestamp will be inserted by hardware */
-       sz += 8;
-       ie += sz;
-
-       /* beacon interval : 2bytes */
-       *(__le16 *)ie = cpu_to_le16((u16)pdev_network->Configuration.BeaconPeriod);/* BCN_INTERVAL; */
-       sz += 2;
-       ie += 2;
-
-       /* capability info */
-       *(u16 *)ie = 0;
-
-       *(__le16 *)ie |= cpu_to_le16(cap_IBSS);
-
-       if (pregistrypriv->preamble == PREAMBLE_SHORT)
-               *(__le16 *)ie |= cpu_to_le16(cap_ShortPremble);
-
-       if (pdev_network->Privacy)
-               *(__le16 *)ie |= cpu_to_le16(cap_Privacy);
-
-       sz += 2;
-       ie += 2;
-
-       /* SSID */
-       ie = rtw_set_ie(ie, _SSID_IE_, pdev_network->Ssid.SsidLength, pdev_network->Ssid.Ssid, &sz);
-
-       /* supported rates */
-       wireless_mode = pregistrypriv->wireless_mode;
-
-       rtw_set_supported_rate(pdev_network->SupportedRates, wireless_mode);
-
-       rateLen = rtw_get_rateset_len(pdev_network->SupportedRates);
-
-       if (rateLen > 8) {
-               ie = rtw_set_ie(ie, _SUPPORTEDRATES_IE_, 8, pdev_network->SupportedRates, &sz);
-               /* ie = rtw_set_ie(ie, _EXT_SUPPORTEDRATES_IE_, (rateLen - 8), (pdev_network->SupportedRates + 8), &sz); */
-       } else {
-               ie = rtw_set_ie(ie, _SUPPORTEDRATES_IE_, rateLen, pdev_network->SupportedRates, &sz);
-       }
-
-       /* DS parameter set */
-       ie = rtw_set_ie(ie, _DSSET_IE_, 1, (u8 *)&pdev_network->Configuration.DSConfig, &sz);
-
-       /* IBSS Parameter Set */
-
-       ie = rtw_set_ie(ie, _IBSS_PARA_IE_, 2, (u8 *)&pdev_network->Configuration.ATIMWindow, &sz);
-
-       if (rateLen > 8)
-               ie = rtw_set_ie(ie, _EXT_SUPPORTEDRATES_IE_, (rateLen - 8), (pdev_network->SupportedRates + 8), &sz);
-
-       return sz;
-}
-
-unsigned char *rtw_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit)
-{
-       int len;
-       u16 val16;
-       __le16 le_tmp;
-       unsigned char wpa_oui_type[] = {0x00, 0x50, 0xf2, 0x01};
-       u8 *pbuf = pie;
-       int limit_new = limit;
-
-       while (1) {
-               pbuf = rtw_get_ie(pbuf, _WPA_IE_ID_, &len, limit_new);
-
-               if (pbuf) {
-                       /* check if oui matches... */
-                       if (memcmp((pbuf + 2), wpa_oui_type, sizeof(wpa_oui_type)))
-                               goto check_next_ie;
-
-                       /* check version... */
-                       memcpy((u8 *)&le_tmp, (pbuf + 6), sizeof(val16));
-
-                       val16 = le16_to_cpu(le_tmp);
-                       if (val16 != 0x0001)
-                               goto check_next_ie;
-                       *wpa_ie_len = *(pbuf + 1);
-                       return pbuf;
-               }
-               *wpa_ie_len = 0;
-               return NULL;
-
-check_next_ie:
-               limit_new = limit - (pbuf - pie) - 2 - len;
-               if (limit_new <= 0)
-                       break;
-               pbuf += (2 + len);
-       }
-       *wpa_ie_len = 0;
-       return NULL;
-}
-
-unsigned char *rtw_get_wpa2_ie(unsigned char *pie, int *rsn_ie_len, int limit)
-{
-
-       return rtw_get_ie(pie, _WPA2_IE_ID_, rsn_ie_len, limit);
-}
-
-int rtw_get_wpa_cipher_suite(u8 *s)
-{
-       if (!memcmp(s, WPA_CIPHER_SUITE_NONE, WPA_SELECTOR_LEN))
-               return WPA_CIPHER_NONE;
-       if (!memcmp(s, WPA_CIPHER_SUITE_WEP40, WPA_SELECTOR_LEN))
-               return WPA_CIPHER_WEP40;
-       if (!memcmp(s, WPA_CIPHER_SUITE_TKIP, WPA_SELECTOR_LEN))
-               return WPA_CIPHER_TKIP;
-       if (!memcmp(s, WPA_CIPHER_SUITE_CCMP, WPA_SELECTOR_LEN))
-               return WPA_CIPHER_CCMP;
-       if (!memcmp(s, WPA_CIPHER_SUITE_WEP104, WPA_SELECTOR_LEN))
-               return WPA_CIPHER_WEP104;
-
-       return 0;
-}
-
-int rtw_get_wpa2_cipher_suite(u8 *s)
-{
-       if (!memcmp(s, RSN_CIPHER_SUITE_NONE, RSN_SELECTOR_LEN))
-               return WPA_CIPHER_NONE;
-       if (!memcmp(s, RSN_CIPHER_SUITE_WEP40, RSN_SELECTOR_LEN))
-               return WPA_CIPHER_WEP40;
-       if (!memcmp(s, RSN_CIPHER_SUITE_TKIP, RSN_SELECTOR_LEN))
-               return WPA_CIPHER_TKIP;
-       if (!memcmp(s, RSN_CIPHER_SUITE_CCMP, RSN_SELECTOR_LEN))
-               return WPA_CIPHER_CCMP;
-       if (!memcmp(s, RSN_CIPHER_SUITE_WEP104, RSN_SELECTOR_LEN))
-               return WPA_CIPHER_WEP104;
-
-       return 0;
-}
-
-int rtw_parse_wpa_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x)
-{
-       int i, ret = _SUCCESS;
-       int left, count;
-       u8 *pos;
-       u8 SUITE_1X[4] = {0x00, 0x50, 0xf2, 1};
-
-       if (wpa_ie_len <= 0) {
-               /* No WPA IE - fail silently */
-               return _FAIL;
-       }
-
-       if ((*wpa_ie != _WPA_IE_ID_) || (*(wpa_ie + 1) != (u8)(wpa_ie_len - 2)) ||
-           (memcmp(wpa_ie + 2, RTW_WPA_OUI_TYPE, WPA_SELECTOR_LEN)))
-               return _FAIL;
-
-       pos = wpa_ie;
-
-       pos += 8;
-       left = wpa_ie_len - 8;
-
-       /* group_cipher */
-       if (left >= WPA_SELECTOR_LEN) {
-               *group_cipher = rtw_get_wpa_cipher_suite(pos);
-               pos += WPA_SELECTOR_LEN;
-               left -= WPA_SELECTOR_LEN;
-       } else if (left > 0) {
-               return _FAIL;
-       }
-
-       /* pairwise_cipher */
-       if (left >= 2) {
-               count = get_unaligned_le16(pos);
-               pos += 2;
-               left -= 2;
-
-               if (count == 0 || left < count * WPA_SELECTOR_LEN)
-                       return _FAIL;
-
-               for (i = 0; i < count; i++) {
-                       *pairwise_cipher |= rtw_get_wpa_cipher_suite(pos);
-
-                       pos += WPA_SELECTOR_LEN;
-                       left -= WPA_SELECTOR_LEN;
-               }
-       } else if (left == 1) {
-               return _FAIL;
-       }
-
-       if (is_8021x) {
-               if (left >= 6) {
-                       pos += 2;
-                       if (!memcmp(pos, SUITE_1X, 4))
-                               *is_8021x = 1;
-               }
-       }
-
-       return ret;
-}
-
-int rtw_parse_wpa2_ie(u8 *rsn_ie, int rsn_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x)
-{
-       int i, ret = _SUCCESS;
-       int left, count;
-       u8 *pos;
-       u8 SUITE_1X[4] = {0x00, 0x0f, 0xac, 0x01};
-
-       if (rsn_ie_len <= 0) {
-               /* No RSN IE - fail silently */
-               return _FAIL;
-       }
-
-       if ((*rsn_ie != _WPA2_IE_ID_) || (*(rsn_ie + 1) != (u8)(rsn_ie_len - 2)))
-               return _FAIL;
-
-       pos = rsn_ie;
-       pos += 4;
-       left = rsn_ie_len - 4;
-
-       /* group_cipher */
-       if (left >= RSN_SELECTOR_LEN) {
-               *group_cipher = rtw_get_wpa2_cipher_suite(pos);
-
-               pos += RSN_SELECTOR_LEN;
-               left -= RSN_SELECTOR_LEN;
-
-       } else if (left > 0) {
-               return _FAIL;
-       }
-
-       /* pairwise_cipher */
-       if (left >= 2) {
-               count = get_unaligned_le16(pos);
-               pos += 2;
-               left -= 2;
-
-               if (count == 0 || left < count * RSN_SELECTOR_LEN)
-                       return _FAIL;
-
-               for (i = 0; i < count; i++) {
-                       *pairwise_cipher |= rtw_get_wpa2_cipher_suite(pos);
-
-                       pos += RSN_SELECTOR_LEN;
-                       left -= RSN_SELECTOR_LEN;
-               }
-
-       } else if (left == 1) {
-               return _FAIL;
-       }
-
-       if (is_8021x) {
-               if (left >= 6) {
-                       pos += 2;
-                       if (!memcmp(pos, SUITE_1X, 4))
-                               *is_8021x = 1;
-               }
-       }
-       return ret;
-}
-
-int rtw_get_sec_ie(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len, u8 *wpa_ie, u16 *wpa_len)
-{
-       u8 authmode;
-       u8 wpa_oui[4] = {0x0, 0x50, 0xf2, 0x01};
-       uint    cnt;
-
-       /* Search required WPA or WPA2 IE and copy to sec_ie[] */
-
-       cnt = (_TIMESTAMP_ + _BEACON_ITERVAL_ + _CAPABILITY_);
-
-       while (cnt < in_len) {
-               authmode = in_ie[cnt];
-
-               if ((authmode == _WPA_IE_ID_) && (!memcmp(&in_ie[cnt + 2], &wpa_oui[0], 4))) {
-                               if (wpa_ie)
-                                       memcpy(wpa_ie, &in_ie[cnt], in_ie[cnt + 1] + 2);
-
-                               *wpa_len = in_ie[cnt + 1] + 2;
-                               cnt += in_ie[cnt + 1] + 2;  /* get next */
-               } else {
-                       if (authmode == _WPA2_IE_ID_) {
-                               if (rsn_ie)
-                                       memcpy(rsn_ie, &in_ie[cnt], in_ie[cnt + 1] + 2);
-
-                               *rsn_len = in_ie[cnt + 1] + 2;
-                               cnt += in_ie[cnt + 1] + 2;  /* get next */
-                       } else {
-                               cnt += in_ie[cnt + 1] + 2;   /* get next */
-                       }
-               }
-       }
-
-       return *rsn_len + *wpa_len;
-}
-
-u8 rtw_is_wps_ie(u8 *ie_ptr, uint *wps_ielen)
-{
-       u8 match = false;
-       u8 eid, wps_oui[4] = {0x0, 0x50, 0xf2, 0x04};
-
-       if (!ie_ptr)
-               return match;
-
-       eid = ie_ptr[0];
-
-       if ((eid == _WPA_IE_ID_) && (!memcmp(&ie_ptr[2], wps_oui, 4))) {
-               *wps_ielen = ie_ptr[1] + 2;
-               match = true;
-       }
-       return match;
-}
-
-/**
- * rtw_get_wps_ie - Search WPS IE from a series of IEs
- * @in_ie: Address of IEs to search
- * @in_len: Length limit from in_ie
- * @wps_ie: If not NULL and WPS IE is found, WPS IE will be copied to the buf starting from wps_ie
- * @wps_ielen: If not NULL and WPS IE is found, will set to the length of the entire WPS IE
- *
- * Returns: The address of the WPS IE found, or NULL
- */
-u8 *rtw_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen)
-{
-       uint cnt;
-       u8 *wpsie_ptr = NULL;
-       u8 eid, wps_oui[4] = {0x0, 0x50, 0xf2, 0x04};
-
-       if (wps_ielen)
-               *wps_ielen = 0;
-
-       if (!in_ie || in_len <= 0)
-               return wpsie_ptr;
-
-       cnt = 0;
-
-       while (cnt < in_len) {
-               eid = in_ie[cnt];
-
-               if ((eid == _WPA_IE_ID_) && (!memcmp(&in_ie[cnt + 2], wps_oui, 4))) {
-                       wpsie_ptr = &in_ie[cnt];
-
-                       if (wps_ie)
-                               memcpy(wps_ie, &in_ie[cnt], in_ie[cnt + 1] + 2);
-
-                       if (wps_ielen)
-                               *wps_ielen = in_ie[cnt + 1] + 2;
-
-                       cnt += in_ie[cnt + 1] + 2;
-
-                       break;
-               }
-               cnt += in_ie[cnt + 1] + 2; /* goto next */
-       }
-       return wpsie_ptr;
-}
-
-/**
- * rtw_get_wps_attr - Search a specific WPS attribute from a given WPS IE
- * @wps_ie: Address of WPS IE to search
- * @wps_ielen: Length limit from wps_ie
- * @target_attr_id: The attribute ID of WPS attribute to search
- * @buf_attr: If not NULL and the WPS attribute is found, WPS attribute will be copied to the buf starting from buf_attr
- * @len_attr: If not NULL and the WPS attribute is found, will set to the length of the entire WPS attribute
- *
- * Returns: the address of the specific WPS attribute found, or NULL
- */
-u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, u8 *buf_attr, u32 *len_attr)
-{
-       u8 *attr_ptr = NULL;
-       u8 *target_attr_ptr = NULL;
-       u8 wps_oui[4] = {0x00, 0x50, 0xF2, 0x04};
-
-       if (len_attr)
-               *len_attr = 0;
-
-       if ((wps_ie[0] != _VENDOR_SPECIFIC_IE_) ||
-           (memcmp(wps_ie + 2, wps_oui, 4)))
-               return attr_ptr;
-
-       /*  6 = 1(Element ID) + 1(Length) + 4(WPS OUI) */
-       attr_ptr = wps_ie + 6; /* goto first attr */
-
-       while (attr_ptr - wps_ie < wps_ielen) {
-               /*  4 = 2(Attribute ID) + 2(Length) */
-               u16 attr_id = RTW_GET_BE16(attr_ptr);
-               u16 attr_data_len = RTW_GET_BE16(attr_ptr + 2);
-               u16 attr_len = attr_data_len + 4;
-
-               if (attr_id == target_attr_id) {
-                       target_attr_ptr = attr_ptr;
-                       if (buf_attr)
-                               memcpy(buf_attr, attr_ptr, attr_len);
-                       if (len_attr)
-                               *len_attr = attr_len;
-                       break;
-               }
-               attr_ptr += attr_len; /* goto next */
-       }
-       return target_attr_ptr;
-}
-
-/**
- * rtw_get_wps_attr_content - Search a specific WPS attribute content from a given WPS IE
- * @wps_ie: Address of WPS IE to search
- * @wps_ielen: Length limit from wps_ie
- * @target_attr_id: The attribute ID of WPS attribute to search
- * @buf_content: If not NULL and the WPS attribute is found, WPS attribute content will be copied to the buf starting from buf_content
- * @len_content: If not NULL and the WPS attribute is found, will set to the length of the WPS attribute content
- *
- * Returns: the address of the specific WPS attribute content found, or NULL
- */
-u8 *rtw_get_wps_attr_content(u8 *wps_ie, uint wps_ielen, u16 target_attr_id, u8 *buf_content, uint *len_content)
-{
-       u8 *attr_ptr;
-       u32 attr_len;
-
-       if (len_content)
-               *len_content = 0;
-
-       attr_ptr = rtw_get_wps_attr(wps_ie, wps_ielen, target_attr_id, NULL, &attr_len);
-
-       if (attr_ptr && attr_len) {
-               if (buf_content)
-                       memcpy(buf_content, attr_ptr + 4, attr_len - 4);
-
-               if (len_content)
-                       *len_content = attr_len - 4;
-
-               return attr_ptr + 4;
-       }
-
-       return NULL;
-}
-
-static int rtw_ieee802_11_parse_vendor_specific(u8 *pos, uint elen,
-                                           struct rtw_ieee802_11_elems *elems,
-                                           int show_errors)
-{
-       unsigned int oui;
-
-       /* first 3 bytes in vendor specific information element are the IEEE
-        * OUI of the vendor. The following byte is used a vendor specific
-        * sub-type. */
-       if (elen < 4)
-               return -1;
-
-       oui = RTW_GET_BE24(pos);
-       switch (oui) {
-       case OUI_MICROSOFT:
-               /* Microsoft/Wi-Fi information elements are further typed and
-                * subtyped */
-               switch (pos[3]) {
-               case 1:
-                       /* Microsoft OUI (00:50:F2) with OUI Type 1:
-                        * real WPA information element */
-                       elems->wpa_ie = pos;
-                       elems->wpa_ie_len = elen;
-                       break;
-               case WME_OUI_TYPE: /* this is a Wi-Fi WME info. element */
-                       if (elen < 5)
-                               return -1;
-                       switch (pos[4]) {
-                       case WME_OUI_SUBTYPE_INFORMATION_ELEMENT:
-                       case WME_OUI_SUBTYPE_PARAMETER_ELEMENT:
-                               elems->wme = pos;
-                               elems->wme_len = elen;
-                               break;
-                       case WME_OUI_SUBTYPE_TSPEC_ELEMENT:
-                               elems->wme_tspec = pos;
-                               elems->wme_tspec_len = elen;
-                               break;
-                       default:
-                               return -1;
-                       }
-                       break;
-               case 4:
-                       /* Wi-Fi Protected Setup (WPS) IE */
-                       elems->wps_ie = pos;
-                       elems->wps_ie_len = elen;
-                       break;
-               default:
-                       return -1;
-               }
-               break;
-
-       case OUI_BROADCOM:
-               switch (pos[3]) {
-               case VENDOR_HT_CAPAB_OUI_TYPE:
-                       elems->vendor_ht_cap = pos;
-                       elems->vendor_ht_cap_len = elen;
-                       break;
-               default:
-                       return -1;
-               }
-               break;
-       default:
-               return -1;
-       }
-       return 0;
-}
-
-/**
- * ieee802_11_parse_elems - Parse information elements in management frames
- * @start: Pointer to the start of IEs
- * @len: Length of IE buffer in octets
- * @elems: Data structure for parsed elements
- * @show_errors: Whether to show parsing errors in debug log
- * Returns: Parsing result
- */
-enum parse_res rtw_ieee802_11_parse_elems(u8 *start, uint len,
-                               struct rtw_ieee802_11_elems *elems,
-                               int show_errors)
-{
-       uint left = len;
-       u8 *pos = start;
-       int unknown = 0;
-
-       memset(elems, 0, sizeof(*elems));
-
-       while (left >= 2) {
-               u8 id, elen;
-
-               id = *pos++;
-               elen = *pos++;
-               left -= 2;
-
-               if (elen > left)
-                       return ParseFailed;
-
-               switch (id) {
-               case WLAN_EID_SSID:
-                       elems->ssid = pos;
-                       elems->ssid_len = elen;
-                       break;
-               case WLAN_EID_SUPP_RATES:
-                       elems->supp_rates = pos;
-                       elems->supp_rates_len = elen;
-                       break;
-               case WLAN_EID_FH_PARAMS:
-                       elems->fh_params = pos;
-                       elems->fh_params_len = elen;
-                       break;
-               case WLAN_EID_DS_PARAMS:
-                       elems->ds_params = pos;
-                       elems->ds_params_len = elen;
-                       break;
-               case WLAN_EID_CF_PARAMS:
-                       elems->cf_params = pos;
-                       elems->cf_params_len = elen;
-                       break;
-               case WLAN_EID_TIM:
-                       elems->tim = pos;
-                       elems->tim_len = elen;
-                       break;
-               case WLAN_EID_IBSS_PARAMS:
-                       elems->ibss_params = pos;
-                       elems->ibss_params_len = elen;
-                       break;
-               case WLAN_EID_CHALLENGE:
-                       elems->challenge = pos;
-                       elems->challenge_len = elen;
-                       break;
-               case WLAN_EID_ERP_INFO:
-                       elems->erp_info = pos;
-                       elems->erp_info_len = elen;
-                       break;
-               case WLAN_EID_EXT_SUPP_RATES:
-                       elems->ext_supp_rates = pos;
-                       elems->ext_supp_rates_len = elen;
-                       break;
-               case WLAN_EID_VENDOR_SPECIFIC:
-                       if (rtw_ieee802_11_parse_vendor_specific(pos, elen, elems, show_errors))
-                               unknown++;
-                       break;
-               case WLAN_EID_RSN:
-                       elems->rsn_ie = pos;
-                       elems->rsn_ie_len = elen;
-                       break;
-               case WLAN_EID_PWR_CAPABILITY:
-                       elems->power_cap = pos;
-                       elems->power_cap_len = elen;
-                       break;
-               case WLAN_EID_SUPPORTED_CHANNELS:
-                       elems->supp_channels = pos;
-                       elems->supp_channels_len = elen;
-                       break;
-               case WLAN_EID_MOBILITY_DOMAIN:
-                       elems->mdie = pos;
-                       elems->mdie_len = elen;
-                       break;
-               case WLAN_EID_FAST_BSS_TRANSITION:
-                       elems->ftie = pos;
-                       elems->ftie_len = elen;
-                       break;
-               case WLAN_EID_TIMEOUT_INTERVAL:
-                       elems->timeout_int = pos;
-                       elems->timeout_int_len = elen;
-                       break;
-               case WLAN_EID_HT_CAP:
-                       elems->ht_capabilities = pos;
-                       elems->ht_capabilities_len = elen;
-                       break;
-               case WLAN_EID_HT_OPERATION:
-                       elems->ht_operation = pos;
-                       elems->ht_operation_len = elen;
-                       break;
-               default:
-                       unknown++;
-                       break;
-               }
-               left -= elen;
-               pos += elen;
-       }
-       if (left)
-               return ParseFailed;
-       return unknown ? ParseUnknown : ParseOK;
-}
-
-u8 key_char2num(u8 ch)
-{
-       if ((ch >= '0') && (ch <= '9'))
-               return ch - '0';
-       else if ((ch >= 'a') && (ch <= 'f'))
-               return ch - 'a' + 10;
-       else if ((ch >= 'A') && (ch <= 'F'))
-               return ch - 'A' + 10;
-       else
-               return 0xff;
-}
-
-u8 str_2char2num(u8 hch, u8 lch)
-{
-    return (key_char2num(hch) * 10) + key_char2num(lch);
-}
-
-u8 key_2char2num(u8 hch, u8 lch)
-{
-    return (key_char2num(hch) << 4) | key_char2num(lch);
-}
-
-void rtw_macaddr_cfg(u8 *mac_addr)
-{
-       u8 mac[ETH_ALEN];
-
-       if (!mac_addr)
-               return;
-
-       if (rtw_initmac && mac_pton(rtw_initmac, mac)) {
-               /* Users specify the mac address */
-               ether_addr_copy(mac_addr, mac);
-       } else {
-               /* Use the mac address stored in the Efuse */
-               ether_addr_copy(mac, mac_addr);
-       }
-
-       if (is_broadcast_ether_addr(mac) || is_zero_ether_addr(mac))
-               eth_random_addr(mac_addr);
-}
-
-/**
- * rtw_get_p2p_ie - Search P2P IE from a series of IEs
- * @in_ie: Address of IEs to search
- * @in_len: Length limit from in_ie
- * @p2p_ie: If not NULL and P2P IE is found, P2P IE will be copied to the buf starting from p2p_ie
- * @p2p_ielen: If not NULL and P2P IE is found, will set to the length of the entire P2P IE
- *
- * Returns: The address of the P2P IE found, or NULL
- */
-u8 *rtw_get_p2p_ie(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen)
-{
-       uint cnt = 0;
-       u8 *p2p_ie_ptr;
-       u8 eid, p2p_oui[4] = {0x50, 0x6F, 0x9A, 0x09};
-
-       if (p2p_ielen)
-               *p2p_ielen = 0;
-
-       while (cnt < in_len) {
-               eid = in_ie[cnt];
-               if ((in_len < 0) || (cnt > MAX_IE_SZ)) {
-                       dump_stack();
-                       return NULL;
-               }
-               if ((eid == _VENDOR_SPECIFIC_IE_) && !memcmp(&in_ie[cnt + 2], p2p_oui, 4)) {
-                       p2p_ie_ptr = in_ie + cnt;
-
-                       if (p2p_ie)
-                               memcpy(p2p_ie, &in_ie[cnt], in_ie[cnt + 1] + 2);
-                       if (p2p_ielen)
-                               *p2p_ielen = in_ie[cnt + 1] + 2;
-                       return p2p_ie_ptr;
-               }
-               cnt += in_ie[cnt + 1] + 2; /* goto next */
-       }
-       return NULL;
-}
-
-/**
- * rtw_get_p2p_attr - Search a specific P2P attribute from a given P2P IE
- * @p2p_ie: Address of P2P IE to search
- * @p2p_ielen: Length limit from p2p_ie
- * @target_attr_id: The attribute ID of P2P attribute to search
- * @buf_attr: If not NULL and the P2P attribute is found, P2P attribute will be copied to the buf starting from buf_attr
- * @len_attr: If not NULL and the P2P attribute is found, will set to the length of the entire P2P attribute
- *
- * Returns: the address of the specific WPS attribute found, or NULL
- */
-u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id, u8 *buf_attr, u32 *len_attr)
-{
-       u8 *attr_ptr = NULL;
-       u8 *target_attr_ptr = NULL;
-       u8 p2p_oui[4] = {0x50, 0x6F, 0x9A, 0x09};
-
-       if (len_attr)
-               *len_attr = 0;
-
-       if (!p2p_ie || (p2p_ie[0] != _VENDOR_SPECIFIC_IE_) ||
-           memcmp(p2p_ie + 2, p2p_oui, 4))
-               return attr_ptr;
-
-       /*  6 = 1(Element ID) + 1(Length) + 3 (OUI) + 1(OUI Type) */
-       attr_ptr = p2p_ie + 6; /* goto first attr */
-
-       while (attr_ptr - p2p_ie < p2p_ielen) {
-               /*  3 = 1(Attribute ID) + 2(Length) */
-               u8 attr_id = *attr_ptr;
-               u16 attr_data_len = get_unaligned_le16(attr_ptr + 1);
-               u16 attr_len = attr_data_len + 3;
-
-               if (attr_id == target_attr_id) {
-                       target_attr_ptr = attr_ptr;
-
-                       if (buf_attr)
-                               memcpy(buf_attr, attr_ptr, attr_len);
-                       if (len_attr)
-                               *len_attr = attr_len;
-                       break;
-               }
-               attr_ptr += attr_len; /* goto next */
-       }
-       return target_attr_ptr;
-}
-
-/**
- * rtw_get_p2p_attr_content - Search a specific P2P attribute content from a given P2P IE
- * @p2p_ie: Address of P2P IE to search
- * @p2p_ielen: Length limit from p2p_ie
- * @target_attr_id: The attribute ID of P2P attribute to search
- * @buf_content: If not NULL and the P2P attribute is found, P2P attribute content will be copied to the buf starting from buf_content
- * @len_content: If not NULL and the P2P attribute is found, will set to the length of the P2P attribute content
- *
- * Returns: the address of the specific P2P attribute content found, or NULL
- */
-u8 *rtw_get_p2p_attr_content(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id, u8 *buf_content, uint *len_content)
-{
-       u8 *attr_ptr;
-       u32 attr_len;
-
-       if (len_content)
-               *len_content = 0;
-
-       attr_ptr = rtw_get_p2p_attr(p2p_ie, p2p_ielen, target_attr_id, NULL, &attr_len);
-
-       if (attr_ptr && attr_len) {
-               if (buf_content)
-                       memcpy(buf_content, attr_ptr + 3, attr_len - 3);
-
-               if (len_content)
-                       *len_content = attr_len - 3;
-
-               return attr_ptr + 3;
-       }
-
-       return NULL;
-}
-
-u32 rtw_set_p2p_attr_content(u8 *pbuf, u8 attr_id, u16 attr_len, u8 *pdata_attr)
-{
-       u32 a_len;
-
-       *pbuf = attr_id;
-
-       /* u16*)(pbuf + 1) = cpu_to_le16(attr_len); */
-       RTW_PUT_LE16(pbuf + 1, attr_len);
-
-       if (pdata_attr)
-               memcpy(pbuf + 3, pdata_attr, attr_len);
-
-       a_len = attr_len + 3;
-
-       return a_len;
-}
-
-static uint rtw_p2p_attr_remove(u8 *ie, uint ielen_ori, u8 attr_id)
-{
-       u8 *target_attr;
-       u32 target_attr_len;
-       uint ielen = ielen_ori;
-
-       while (1) {
-               target_attr = rtw_get_p2p_attr(ie, ielen, attr_id, NULL, &target_attr_len);
-               if (target_attr && target_attr_len) {
-                       u8 *next_attr = target_attr + target_attr_len;
-                       uint remain_len = ielen - (next_attr - ie);
-
-                       memset(target_attr, 0, target_attr_len);
-                       memcpy(target_attr, next_attr, remain_len);
-                       memset(target_attr + remain_len, 0, target_attr_len);
-                       *(ie + 1) -= target_attr_len;
-                       ielen -= target_attr_len;
-               } else {
-                       break;
-               }
-       }
-       return ielen;
-}
-
-void rtw_wlan_bssid_ex_remove_p2p_attr(struct wlan_bssid_ex *bss_ex, u8 attr_id)
-{
-       u8 *p2p_ie;
-       uint p2p_ielen, p2p_ielen_ori;
-
-       p2p_ie = rtw_get_p2p_ie(bss_ex->IEs + _FIXED_IE_LENGTH_, bss_ex->IELength - _FIXED_IE_LENGTH_, NULL, &p2p_ielen_ori);
-       if (p2p_ie) {
-               p2p_ielen = rtw_p2p_attr_remove(p2p_ie, p2p_ielen_ori, attr_id);
-               if (p2p_ielen != p2p_ielen_ori) {
-                       u8 *next_ie_ori = p2p_ie + p2p_ielen_ori;
-                       u8 *next_ie = p2p_ie + p2p_ielen;
-                       uint remain_len = bss_ex->IELength - (next_ie_ori - bss_ex->IEs);
-
-                       memcpy(next_ie, next_ie_ori, remain_len);
-                       memset(next_ie + remain_len, 0, p2p_ielen_ori - p2p_ielen);
-                       bss_ex->IELength -= p2p_ielen_ori - p2p_ielen;
-               }
-       }
-}
-
-static int rtw_get_cipher_info(struct wlan_network *pnetwork)
-{
-       u32 wpa_ielen;
-       unsigned char *pbuf;
-       int group_cipher = 0, pairwise_cipher = 0, is8021x = 0;
-       int ret = _FAIL;
-
-       pbuf = rtw_get_wpa_ie(&pnetwork->network.IEs[12], &wpa_ielen, pnetwork->network.IELength - 12);
-
-       if (pbuf && (wpa_ielen > 0)) {
-               if (rtw_parse_wpa_ie(pbuf, wpa_ielen + 2, &group_cipher, &pairwise_cipher, &is8021x) == _SUCCESS) {
-                       pnetwork->BcnInfo.pairwise_cipher = pairwise_cipher;
-                       pnetwork->BcnInfo.group_cipher = group_cipher;
-                       pnetwork->BcnInfo.is_8021x = is8021x;
-                       ret = _SUCCESS;
-               }
-       } else {
-               pbuf = rtw_get_wpa2_ie(&pnetwork->network.IEs[12], &wpa_ielen, pnetwork->network.IELength - 12);
-
-               if (pbuf && (wpa_ielen > 0)) {
-                       if (rtw_parse_wpa2_ie(pbuf, wpa_ielen + 2, &group_cipher, &pairwise_cipher, &is8021x) == _SUCCESS) {
-                               pnetwork->BcnInfo.pairwise_cipher = pairwise_cipher;
-                               pnetwork->BcnInfo.group_cipher = group_cipher;
-                               pnetwork->BcnInfo.is_8021x = is8021x;
-                               ret = _SUCCESS;
-                       }
-               }
-       }
-
-       return ret;
-}
-
-void rtw_get_bcn_info(struct wlan_network *pnetwork)
-{
-       unsigned short cap = 0;
-       u8 bencrypt = 0;
-       __le16 le_tmp;
-       u16 wpa_len = 0, rsn_len = 0;
-       struct HT_info_element *pht_info = NULL;
-       struct ieee80211_ht_cap *pht_cap = NULL;
-       unsigned int            len;
-       unsigned char           *p;
-
-       memcpy(&le_tmp, rtw_get_capability_from_ie(pnetwork->network.IEs), 2);
-       cap = le16_to_cpu(le_tmp);
-       if (cap & WLAN_CAPABILITY_PRIVACY) {
-               bencrypt = 1;
-               pnetwork->network.Privacy = 1;
-       } else {
-               pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_OPENSYS;
-       }
-       rtw_get_sec_ie(pnetwork->network.IEs, pnetwork->network.IELength, NULL, &rsn_len, NULL, &wpa_len);
-
-       if (rsn_len > 0) {
-               pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WPA2;
-       } else if (wpa_len > 0) {
-               pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WPA;
-       } else {
-               if (bencrypt)
-                       pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WEP;
-       }
-       rtw_get_cipher_info(pnetwork);
-
-       /* get bwmode and ch_offset */
-       /* parsing HT_CAP_IE */
-       p = rtw_get_ie(pnetwork->network.IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, pnetwork->network.IELength - _FIXED_IE_LENGTH_);
-       if (p && len > 0) {
-                       pht_cap = (struct ieee80211_ht_cap *)(p + 2);
-                       pnetwork->BcnInfo.ht_cap_info = le16_to_cpu(pht_cap->cap_info);
-       } else {
-                       pnetwork->BcnInfo.ht_cap_info = 0;
-       }
-       /* parsing HT_INFO_IE */
-       p = rtw_get_ie(pnetwork->network.IEs + _FIXED_IE_LENGTH_, _HT_ADD_INFO_IE_, &len, pnetwork->network.IELength - _FIXED_IE_LENGTH_);
-       if (p && len > 0) {
-                       pht_info = (struct HT_info_element *)(p + 2);
-                       pnetwork->BcnInfo.ht_info_infos_0 = pht_info->infos[0];
-       } else {
-                       pnetwork->BcnInfo.ht_info_infos_0 = 0;
-       }
-}
-
-/* show MCS rate, unit: 100Kbps */
-u16 rtw_mcs_rate(u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, unsigned char *MCS_rate)
-{
-       u16 max_rate = 0;
-
-       if (MCS_rate[0] & BIT(7))
-               max_rate = (bw_40MHz) ? ((short_GI_40) ? 1500 : 1350) : ((short_GI_20) ? 722 : 650);
-       else if (MCS_rate[0] & BIT(6))
-               max_rate = (bw_40MHz) ? ((short_GI_40) ? 1350 : 1215) : ((short_GI_20) ? 650 : 585);
-       else if (MCS_rate[0] & BIT(5))
-               max_rate = (bw_40MHz) ? ((short_GI_40) ? 1200 : 1080) : ((short_GI_20) ? 578 : 520);
-       else if (MCS_rate[0] & BIT(4))
-               max_rate = (bw_40MHz) ? ((short_GI_40) ? 900 : 810) : ((short_GI_20) ? 433 : 390);
-       else if (MCS_rate[0] & BIT(3))
-               max_rate = (bw_40MHz) ? ((short_GI_40) ? 600 : 540) : ((short_GI_20) ? 289 : 260);
-       else if (MCS_rate[0] & BIT(2))
-               max_rate = (bw_40MHz) ? ((short_GI_40) ? 450 : 405) : ((short_GI_20) ? 217 : 195);
-       else if (MCS_rate[0] & BIT(1))
-               max_rate = (bw_40MHz) ? ((short_GI_40) ? 300 : 270) : ((short_GI_20) ? 144 : 130);
-       else if (MCS_rate[0] & BIT(0))
-               max_rate = (bw_40MHz) ? ((short_GI_40) ? 150 : 135) : ((short_GI_20) ? 72 : 65);
-
-       return max_rate;
-}
diff --git a/drivers/staging/r8188eu/core/rtw_ioctl_set.c b/drivers/staging/r8188eu/core/rtw_ioctl_set.c
deleted file mode 100644 (file)
index 785c0db..0000000
+++ /dev/null
@@ -1,479 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#define _RTW_IOCTL_SET_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/rtw_ioctl_set.h"
-#include "../include/hal_intf.h"
-
-#include "../include/usb_osintf.h"
-#include "../include/usb_ops.h"
-
-u8 rtw_do_join(struct adapter *padapter)
-{
-       struct list_head *plist, *phead;
-       u8 *pibss = NULL;
-       struct  mlme_priv       *pmlmepriv = &padapter->mlmepriv;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       u8 ret = _SUCCESS;
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-       phead = get_list_head(queue);
-       plist = phead->next;
-
-       pmlmepriv->cur_network.join_res = -2;
-
-       set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
-
-       pmlmepriv->pscanned = plist;
-
-       pmlmepriv->to_join = true;
-
-       if (list_empty(&queue->queue)) {
-               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-               _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-
-               /* when set_ssid/set_bssid for rtw_do_join(), but scanning queue is empty */
-               /* we try to issue sitesurvey firstly */
-
-               if (!pmlmepriv->LinkDetectInfo.bBusyTraffic ||
-                   pmlmepriv->to_roaming > 0) {
-                       /*  submit site_survey_cmd */
-                       ret = rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1);
-                       if (ret != _SUCCESS)
-                               pmlmepriv->to_join = false;
-               } else {
-                       pmlmepriv->to_join = false;
-                       ret = _FAIL;
-               }
-
-               return ret;
-       } else {
-               int select_ret;
-
-               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-               select_ret = rtw_select_and_join_from_scanned_queue(pmlmepriv);
-               if (select_ret == _SUCCESS) {
-                       pmlmepriv->to_join = false;
-                       _set_timer(&pmlmepriv->assoc_timer, MAX_JOIN_TIMEOUT);
-               } else {
-                       if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-                               /*  submit createbss_cmd to change to a ADHOC_MASTER */
-
-                               /* pmlmepriv->lock has been acquired by caller... */
-                               struct wlan_bssid_ex    *pdev_network = &padapter->registrypriv.dev_network;
-
-                               pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE;
-
-                               pibss = padapter->registrypriv.dev_network.MacAddress;
-
-                               memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid, sizeof(struct ndis_802_11_ssid));
-
-                               rtw_update_registrypriv_dev_network(padapter);
-
-                               rtw_generate_random_ibss(pibss);
-
-                               if (rtw_createbss_cmd(padapter) != _SUCCESS)
-                                       return false;
-
-                               pmlmepriv->to_join = false;
-                       } else {
-                               /*  can't associate ; reset under-linking */
-                               _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-
-                               /* when set_ssid/set_bssid for rtw_do_join(), but there are no desired bss in scanning queue */
-                               /* we try to issue sitesurvey firstly */
-                               if (!pmlmepriv->LinkDetectInfo.bBusyTraffic ||
-                                   pmlmepriv->to_roaming > 0) {
-                                       ret = rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1);
-                                       if (ret != _SUCCESS)
-                                               pmlmepriv->to_join = false;
-                               } else {
-                                       ret = _FAIL;
-                                       pmlmepriv->to_join = false;
-                               }
-                       }
-               }
-       }
-
-       return ret;
-}
-
-u8 rtw_set_802_11_bssid(struct adapter *padapter, u8 *bssid)
-{
-       u8 status = _SUCCESS;
-       u32 cur_time = 0;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       if ((bssid[0] == 0x00 && bssid[1] == 0x00 && bssid[2] == 0x00 &&
-            bssid[3] == 0x00 && bssid[4] == 0x00 && bssid[5] == 0x00) ||
-           (bssid[0] == 0xFF && bssid[1] == 0xFF && bssid[2] == 0xFF &&
-            bssid[3] == 0xFF && bssid[4] == 0xFF && bssid[5] == 0xFF)) {
-               status = _FAIL;
-               goto exit;
-       }
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
-               goto handle_tkip_countermeasure;
-       else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
-               goto release_mlme_lock;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED | WIFI_ADHOC_MASTER_STATE)) {
-               if (!memcmp(&pmlmepriv->cur_network.network.MacAddress, bssid, ETH_ALEN)) {
-                       if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE))
-                               goto release_mlme_lock;/* it means driver is in WIFI_ADHOC_MASTER_STATE, we needn't create bss again. */
-               } else {
-                       rtw_disassoc_cmd(padapter, 0, true);
-
-                       if (check_fwstate(pmlmepriv, _FW_LINKED))
-                               rtw_indicate_disconnect(padapter);
-
-                       rtw_free_assoc_resources(padapter, 1);
-
-                       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-                               _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
-                               set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
-                       }
-               }
-       }
-
-handle_tkip_countermeasure:
-       /* should we add something here...? */
-
-       if (padapter->securitypriv.btkip_countermeasure) {
-               cur_time = jiffies;
-
-               if ((cur_time - padapter->securitypriv.btkip_countermeasure_time) > 60 * HZ) {
-                       padapter->securitypriv.btkip_countermeasure = false;
-                       padapter->securitypriv.btkip_countermeasure_time = 0;
-               } else {
-                       status = _FAIL;
-                       goto release_mlme_lock;
-               }
-       }
-
-       memcpy(&pmlmepriv->assoc_bssid, bssid, ETH_ALEN);
-       pmlmepriv->assoc_by_bssid = true;
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
-               pmlmepriv->to_join = true;
-       else
-               status = rtw_do_join(padapter);
-
-release_mlme_lock:
-       spin_unlock_bh(&pmlmepriv->lock);
-
-exit:
-       return status;
-}
-
-u8 rtw_set_802_11_ssid(struct adapter *padapter, struct ndis_802_11_ssid *ssid)
-{
-       u8 status = _SUCCESS;
-       u32 cur_time = 0;
-
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_network *pnetwork = &pmlmepriv->cur_network;
-
-       if (!padapter->hw_init_completed) {
-               status = _FAIL;
-               goto exit;
-       }
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
-               goto handle_tkip_countermeasure;
-       } else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
-               goto release_mlme_lock;
-       }
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED | WIFI_ADHOC_MASTER_STATE)) {
-               if ((pmlmepriv->assoc_ssid.SsidLength == ssid->SsidLength) &&
-                   (!memcmp(&pmlmepriv->assoc_ssid.Ssid, ssid->Ssid, ssid->SsidLength))) {
-                       if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-                               if (!rtw_is_same_ibss(padapter, pnetwork)) {
-                                       /* if in WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE, create bss or rejoin again */
-                                       rtw_disassoc_cmd(padapter, 0, true);
-
-                                       if (check_fwstate(pmlmepriv, _FW_LINKED))
-                                               rtw_indicate_disconnect(padapter);
-
-                                       rtw_free_assoc_resources(padapter, 1);
-
-                                       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-                                               _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
-                                               set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
-                                       }
-                               } else {
-                                       goto release_mlme_lock;/* it means driver is in WIFI_ADHOC_MASTER_STATE, we needn't create bss again. */
-                               }
-                       } else {
-                               rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_JOINBSS, 1);
-                       }
-               } else {
-                       rtw_disassoc_cmd(padapter, 0, true);
-
-                       if (check_fwstate(pmlmepriv, _FW_LINKED))
-                               rtw_indicate_disconnect(padapter);
-
-                       rtw_free_assoc_resources(padapter, 1);
-
-                       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-                               _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
-                               set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
-                       }
-               }
-       }
-
-handle_tkip_countermeasure:
-
-       if (padapter->securitypriv.btkip_countermeasure) {
-               cur_time = jiffies;
-
-               if ((cur_time - padapter->securitypriv.btkip_countermeasure_time) > 60 * HZ) {
-                       padapter->securitypriv.btkip_countermeasure = false;
-                       padapter->securitypriv.btkip_countermeasure_time = 0;
-               } else {
-                       status = _FAIL;
-                       goto release_mlme_lock;
-               }
-       }
-
-       memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(struct ndis_802_11_ssid));
-       pmlmepriv->assoc_by_bssid = false;
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
-               pmlmepriv->to_join = true;
-       } else {
-               status = rtw_do_join(padapter);
-       }
-
-release_mlme_lock:
-       spin_unlock_bh(&pmlmepriv->lock);
-
-exit:
-       return status;
-}
-
-u8 rtw_set_802_11_infrastructure_mode(struct adapter *padapter,
-       enum ndis_802_11_network_infra networktype)
-{
-       struct  mlme_priv       *pmlmepriv = &padapter->mlmepriv;
-       struct  wlan_network    *cur_network = &pmlmepriv->cur_network;
-       enum ndis_802_11_network_infra *pold_state = &cur_network->network.InfrastructureMode;
-
-       if (*pold_state != networktype) {
-               spin_lock_bh(&pmlmepriv->lock);
-
-               if (*pold_state == Ndis802_11APMode) {
-                       /* change to other mode from Ndis802_11APMode */
-                       cur_network->join_res = -1;
-
-                       stop_ap_mode(padapter);
-               }
-
-               if ((check_fwstate(pmlmepriv, _FW_LINKED)) ||
-                   (*pold_state == Ndis802_11IBSS))
-                       rtw_disassoc_cmd(padapter, 0, true);
-
-               if ((check_fwstate(pmlmepriv, _FW_LINKED)) ||
-                   (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)))
-                       rtw_free_assoc_resources(padapter, 1);
-
-               if ((*pold_state == Ndis802_11Infrastructure) || (*pold_state == Ndis802_11IBSS)) {
-                       if (check_fwstate(pmlmepriv, _FW_LINKED))
-                               rtw_indicate_disconnect(padapter); /* will clr Linked_state; before this function, we must have checked whether issue dis-assoc_cmd or not */
-              }
-
-               *pold_state = networktype;
-
-               _clr_fwstate_(pmlmepriv, ~WIFI_NULL_STATE);
-
-               switch (networktype) {
-               case Ndis802_11IBSS:
-                       set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
-                       break;
-               case Ndis802_11Infrastructure:
-                       set_fwstate(pmlmepriv, WIFI_STATION_STATE);
-                       break;
-               case Ndis802_11APMode:
-                       set_fwstate(pmlmepriv, WIFI_AP_STATE);
-                       break;
-               case Ndis802_11AutoUnknown:
-               case Ndis802_11InfrastructureMax:
-                       break;
-               }
-               spin_unlock_bh(&pmlmepriv->lock);
-       }
-
-       return true;
-}
-
-void rtw_set_802_11_disassociate(struct adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-               rtw_disassoc_cmd(padapter, 0, true);
-               rtw_indicate_disconnect(padapter);
-               rtw_free_assoc_resources(padapter, 1);
-               rtw_pwr_wakeup(padapter);
-       }
-
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-u8 rtw_set_802_11_bssid_list_scan(struct adapter *padapter, struct ndis_802_11_ssid *pssid, int ssid_max_num)
-{
-       struct  mlme_priv               *pmlmepriv = &padapter->mlmepriv;
-       u8      res = true;
-
-       if (!padapter) {
-               res = false;
-               goto exit;
-       }
-       if (!padapter->hw_init_completed) {
-               res = false;
-               goto exit;
-       }
-
-       if ((check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING)) ||
-           (pmlmepriv->LinkDetectInfo.bBusyTraffic)) {
-               /*  Scan or linking is in progress, do nothing. */
-               res = true;
-       } else {
-               spin_lock_bh(&pmlmepriv->lock);
-
-               res = rtw_sitesurvey_cmd(padapter, pssid, ssid_max_num);
-
-               spin_unlock_bh(&pmlmepriv->lock);
-       }
-exit:
-
-       return res;
-}
-
-u8 rtw_set_802_11_authentication_mode(struct adapter *padapter, enum ndis_802_11_auth_mode authmode)
-{
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       int res;
-       u8 ret;
-
-       psecuritypriv->ndisauthtype = authmode;
-
-       if (psecuritypriv->ndisauthtype > 3)
-               psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
-
-       res = rtw_set_auth(padapter, psecuritypriv);
-
-       if (res == _SUCCESS)
-               ret = true;
-       else
-               ret = false;
-
-       return ret;
-}
-
-u8 rtw_set_802_11_add_wep(struct adapter *padapter, struct ndis_802_11_wep *wep)
-{
-       int             keyid, res;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       u8              ret = _SUCCESS;
-
-       keyid = wep->KeyIndex & 0x3fffffff;
-
-       if (keyid >= 4) {
-               ret = false;
-               goto exit;
-       }
-
-       switch (wep->KeyLength) {
-       case 5:
-               psecuritypriv->dot11PrivacyAlgrthm = _WEP40_;
-               break;
-       case 13:
-               psecuritypriv->dot11PrivacyAlgrthm = _WEP104_;
-               break;
-       default:
-               psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
-               break;
-       }
-
-       memcpy(&psecuritypriv->dot11DefKey[keyid].skey[0], &wep->KeyMaterial, wep->KeyLength);
-
-       psecuritypriv->dot11DefKeylen[keyid] = wep->KeyLength;
-
-       psecuritypriv->dot11PrivacyKeyIndex = keyid;
-
-       res = rtw_set_key(padapter, psecuritypriv, keyid, 1);
-
-       if (res == _FAIL)
-               ret = false;
-exit:
-
-       return ret;
-}
-
-/*
-* rtw_get_cur_max_rate -
-* @adapter: pointer to struct adapter structure
-*
-* Return 0 or 100Kbps
-*/
-u16 rtw_get_cur_max_rate(struct adapter *adapter)
-{
-       int     i = 0;
-       u8      *p;
-       u16     rate = 0, max_rate = 0;
-       struct mlme_ext_priv    *pmlmeext = &adapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct registry_priv *pregistrypriv = &adapter->registrypriv;
-       struct mlme_priv        *pmlmepriv = &adapter->mlmepriv;
-       struct wlan_bssid_ex  *pcur_bss = &pmlmepriv->cur_network.network;
-       struct ieee80211_ht_cap *pht_capie;
-       u8      bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0;
-       u16     mcs_rate = 0;
-       u32     ht_ielen = 0;
-
-       if ((!check_fwstate(pmlmepriv, _FW_LINKED)) &&
-           (!check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)))
-               return 0;
-
-       if (pmlmeext->cur_wireless_mode & (WIRELESS_11_24N)) {
-               p = rtw_get_ie(&pcur_bss->IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pcur_bss->IELength - 12);
-               if (p && ht_ielen > 0) {
-                       pht_capie = (struct ieee80211_ht_cap *)(p + 2);
-
-                       memcpy(&mcs_rate, pht_capie->mcs.rx_mask, 2);
-
-                       /* cur_bwmod is updated by beacon, pmlmeinfo is updated by association response */
-                       bw_40MHz = (pmlmeext->cur_bwmode && (HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH & pmlmeinfo->HT_info.infos[0])) ? 1 : 0;
-
-                       short_GI_20 = (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & IEEE80211_HT_CAP_SGI_20) ? 1 : 0;
-                       short_GI_40 = (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & IEEE80211_HT_CAP_SGI_40) ? 1 : 0;
-
-                       max_rate = rtw_mcs_rate(bw_40MHz & (pregistrypriv->cbw40_enable),
-                                               short_GI_20,
-                                               short_GI_40,
-                                               pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate);
-               }
-       } else {
-               while ((pcur_bss->SupportedRates[i] != 0) && (pcur_bss->SupportedRates[i] != 0xFF)) {
-                       rate = pcur_bss->SupportedRates[i] & 0x7F;
-                       if (rate > max_rate)
-                               max_rate = rate;
-                       i++;
-               }
-
-               max_rate *= 5;
-       }
-
-       return max_rate;
-}
diff --git a/drivers/staging/r8188eu/core/rtw_iol.c b/drivers/staging/r8188eu/core/rtw_iol.c
deleted file mode 100644 (file)
index 31e196c..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/rtw_iol.h"
-
-struct xmit_frame      *rtw_IOL_accquire_xmit_frame(struct adapter  *adapter)
-{
-       struct xmit_frame       *xmit_frame;
-       struct xmit_buf *xmitbuf;
-       struct pkt_attrib       *pattrib;
-       struct xmit_priv        *pxmitpriv = &adapter->xmitpriv;
-
-       xmit_frame = rtw_alloc_xmitframe(pxmitpriv);
-       if (!xmit_frame)
-               return NULL;
-
-       xmitbuf = rtw_alloc_xmitbuf(pxmitpriv);
-       if (!xmitbuf) {
-               rtw_free_xmitframe(pxmitpriv, xmit_frame);
-               return NULL;
-       }
-
-       xmit_frame->frame_tag = MGNT_FRAMETAG;
-       xmit_frame->pxmitbuf = xmitbuf;
-       xmit_frame->buf_addr = xmitbuf->pbuf;
-       xmitbuf->priv_data = xmit_frame;
-
-       pattrib = &xmit_frame->attrib;
-       update_mgntframe_attrib(adapter, pattrib);
-       pattrib->qsel = 0x10;/* Beacon */
-       pattrib->subtype = WIFI_BEACON;
-       pattrib->pktlen = 0;
-       pattrib->last_txcmdsz = 0;
-
-       return xmit_frame;
-}
-
-int rtw_IOL_append_cmds(struct xmit_frame *xmit_frame, u8 *IOL_cmds, u32 cmd_len)
-{
-       struct pkt_attrib       *pattrib = &xmit_frame->attrib;
-       u16 buf_offset;
-       u32 ori_len;
-
-       buf_offset = TXDESC_OFFSET;
-       ori_len = buf_offset + pattrib->pktlen;
-
-       /* check if the io_buf can accommodate new cmds */
-       if (ori_len + cmd_len + 8 > MAX_XMITBUF_SZ)
-               return _FAIL;
-
-       memcpy(xmit_frame->buf_addr + buf_offset + pattrib->pktlen, IOL_cmds, cmd_len);
-       pattrib->pktlen += cmd_len;
-       pattrib->last_txcmdsz += cmd_len;
-
-       return _SUCCESS;
-}
-
-bool rtw_IOL_applied(struct adapter  *adapter)
-{
-       if (adapter->registrypriv.fw_iol == 1)
-               return true;
-
-       if ((adapter->registrypriv.fw_iol == 2) &&
-           (adapter_to_dvobj(adapter)->pusbdev->speed != USB_SPEED_HIGH))
-               return true;
-
-       return false;
-}
-
-int rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr, u8 value, u8 mask)
-{
-       struct ioreg_cfg cmd = {8, IOREG_CMD_WB_REG, 0x0, 0x0, 0x0};
-
-       cmd.address = cpu_to_le16(addr);
-       cmd.data = cpu_to_le32(value);
-
-       if (mask != 0xFF) {
-               cmd.length = 12;
-               cmd.mask = cpu_to_le32(mask);
-       }
-       return rtw_IOL_append_cmds(xmit_frame, (u8 *)&cmd, cmd.length);
-}
-
-int rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr, u16 value, u16 mask)
-{
-       struct ioreg_cfg cmd = {8, IOREG_CMD_WW_REG, 0x0, 0x0, 0x0};
-
-       cmd.address = cpu_to_le16(addr);
-       cmd.data = cpu_to_le32(value);
-
-       if (mask != 0xFFFF) {
-               cmd.length = 12;
-               cmd.mask =  cpu_to_le32(mask);
-       }
-       return rtw_IOL_append_cmds(xmit_frame, (u8 *)&cmd, cmd.length);
-}
-
-int rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr, u32 value, u32 mask)
-{
-       struct ioreg_cfg cmd = {8, IOREG_CMD_WD_REG, 0x0, 0x0, 0x0};
-
-       cmd.address = cpu_to_le16(addr);
-       cmd.data = cpu_to_le32(value);
-
-       if (mask != 0xFFFFFFFF) {
-               cmd.length = 12;
-               cmd.mask =  cpu_to_le32(mask);
-       }
-       return rtw_IOL_append_cmds(xmit_frame, (u8 *)&cmd, cmd.length);
-}
-
-int rtw_IOL_append_WRF_cmd(struct xmit_frame *xmit_frame, u8 rf_path, u16 addr, u32 value, u32 mask)
-{
-       struct ioreg_cfg cmd = {8, IOREG_CMD_W_RF, 0x0, 0x0, 0x0};
-
-       cmd.address = cpu_to_le16((rf_path << 8) | ((addr) & 0xFF));
-       cmd.data = cpu_to_le32(value);
-
-       if (mask != 0x000FFFFF) {
-               cmd.length = 12;
-               cmd.mask =  cpu_to_le32(mask);
-       }
-       return rtw_IOL_append_cmds(xmit_frame, (u8 *)&cmd, cmd.length);
-}
-
-int rtw_IOL_append_DELAY_US_cmd(struct xmit_frame *xmit_frame, u16 us)
-{
-       struct ioreg_cfg cmd = {4, IOREG_CMD_DELAY_US, 0x0, 0x0, 0x0};
-       cmd.address = cpu_to_le16(us);
-
-       return rtw_IOL_append_cmds(xmit_frame, (u8 *)&cmd, 4);
-}
-
-int rtw_IOL_append_DELAY_MS_cmd(struct xmit_frame *xmit_frame, u16 ms)
-{
-       struct ioreg_cfg cmd = {4, IOREG_CMD_DELAY_US, 0x0, 0x0, 0x0};
-
-       cmd.address = cpu_to_le16(ms);
-       return rtw_IOL_append_cmds(xmit_frame, (u8 *)&cmd, 4);
-}
-
-int rtw_IOL_append_END_cmd(struct xmit_frame *xmit_frame)
-{
-       struct ioreg_cfg cmd = {4, IOREG_CMD_END, cpu_to_le16(0xFFFF), cpu_to_le32(0xFF), 0x0};
-
-       return rtw_IOL_append_cmds(xmit_frame, (u8 *)&cmd, 4);
-}
-
-u8 rtw_IOL_cmd_boundary_handle(struct xmit_frame *pxmit_frame)
-{
-       u8 is_cmd_bndy = false;
-       if (((pxmit_frame->attrib.pktlen + 32) % 256) + 8 >= 256) {
-               rtw_IOL_append_END_cmd(pxmit_frame);
-               pxmit_frame->attrib.pktlen = ((((pxmit_frame->attrib.pktlen + 32) / 256) + 1) * 256);
-
-               pxmit_frame->attrib.last_txcmdsz = pxmit_frame->attrib.pktlen;
-               is_cmd_bndy = true;
-       }
-       return is_cmd_bndy;
-}
diff --git a/drivers/staging/r8188eu/core/rtw_led.c b/drivers/staging/r8188eu/core/rtw_led.c
deleted file mode 100644 (file)
index 48725ce..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#include "../include/drv_types.h"
-#include "../include/rtw_led.h"
-#include "../include/rtl8188e_spec.h"
-
-#define LED_BLINK_NO_LINK_INTVL                        msecs_to_jiffies(1000)
-#define LED_BLINK_LINK_INTVL                   msecs_to_jiffies(500)
-#define LED_BLINK_SCAN_INTVL                   msecs_to_jiffies(180)
-#define LED_BLINK_FASTER_INTVL                 msecs_to_jiffies(50)
-#define LED_BLINK_WPS_SUCESS_INTVL             msecs_to_jiffies(5000)
-
-#define IS_LED_WPS_BLINKING(l) \
-       ((l)->CurrLedState == LED_BLINK_WPS || \
-       (l)->CurrLedState == LED_BLINK_WPS_STOP || \
-       (l)->bLedWPSBlinkInProgress)
-
-static void ResetLedStatus(struct led_priv *pLed)
-{
-       pLed->CurrLedState = RTW_LED_OFF; /*  Current LED state. */
-       pLed->bLedOn = false; /*  true if LED is ON, false if LED is OFF. */
-
-       pLed->bLedBlinkInProgress = false; /*  true if it is blinking, false o.w.. */
-       pLed->bLedWPSBlinkInProgress = false;
-
-       pLed->BlinkTimes = 0; /*  Number of times to toggle led state for blinking. */
-
-       pLed->bLedScanBlinkInProgress = false;
-}
-
-static void SwLedOn(struct led_priv *pLed)
-{
-       struct adapter *padapter = container_of(pLed, struct adapter, ledpriv);
-
-       if (padapter->bDriverStopped)
-               return;
-
-       if (rtw_write8(padapter, REG_LEDCFG2, BIT(5)) != _SUCCESS)
-               return;
-
-       pLed->bLedOn = true;
-}
-
-static void SwLedOff(struct led_priv *pLed)
-{
-       struct adapter *padapter = container_of(pLed, struct adapter, ledpriv);
-
-       if (padapter->bDriverStopped)
-               return;
-
-       if (rtw_write8(padapter, REG_LEDCFG2, BIT(5) | BIT(3)) != _SUCCESS)
-               return;
-
-       pLed->bLedOn = false;
-}
-
-static void blink_work(struct work_struct *work)
-{
-       struct delayed_work *dwork = to_delayed_work(work);
-       struct led_priv *pLed = container_of(dwork, struct led_priv, blink_work);
-       struct adapter *padapter = container_of(pLed, struct adapter, ledpriv);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       if (padapter->pwrctrlpriv.rf_pwrstate != rf_on) {
-               SwLedOff(pLed);
-               ResetLedStatus(pLed);
-               return;
-       }
-
-       if (pLed->bLedOn)
-               SwLedOff(pLed);
-       else
-               SwLedOn(pLed);
-
-       switch (pLed->CurrLedState) {
-       case LED_BLINK_SLOWLY:
-               schedule_delayed_work(&pLed->blink_work, LED_BLINK_NO_LINK_INTVL);
-               break;
-       case LED_BLINK_NORMAL:
-               schedule_delayed_work(&pLed->blink_work, LED_BLINK_LINK_INTVL);
-               break;
-       case LED_BLINK_SCAN:
-       case LED_BLINK_TXRX:
-               pLed->BlinkTimes--;
-               if (pLed->BlinkTimes == 0) {
-                       if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-                               pLed->CurrLedState = LED_BLINK_NORMAL;
-                               schedule_delayed_work(&pLed->blink_work, LED_BLINK_LINK_INTVL);
-                       } else {
-                               pLed->CurrLedState = LED_BLINK_SLOWLY;
-                               schedule_delayed_work(&pLed->blink_work, LED_BLINK_NO_LINK_INTVL);
-                       }
-                       pLed->bLedBlinkInProgress = false;
-                       pLed->bLedScanBlinkInProgress = false;
-               } else {
-                       schedule_delayed_work(&pLed->blink_work,
-                                             pLed->CurrLedState == LED_BLINK_SCAN ?
-                                             LED_BLINK_SCAN_INTVL : LED_BLINK_FASTER_INTVL);
-               }
-               break;
-       case LED_BLINK_WPS:
-               schedule_delayed_work(&pLed->blink_work, LED_BLINK_SCAN_INTVL);
-               break;
-       case LED_BLINK_WPS_STOP:        /* WPS success */
-               if (!pLed->bLedOn) {
-                       pLed->CurrLedState = LED_BLINK_NORMAL;
-                       schedule_delayed_work(&pLed->blink_work, LED_BLINK_LINK_INTVL);
-
-                       pLed->bLedWPSBlinkInProgress = false;
-               } else {
-                       schedule_delayed_work(&pLed->blink_work, LED_BLINK_WPS_SUCESS_INTVL);
-               }
-               break;
-       default:
-               break;
-       }
-}
-
-void rtl8188eu_InitSwLeds(struct adapter *padapter)
-{
-       struct led_priv *pledpriv = &padapter->ledpriv;
-
-       ResetLedStatus(pledpriv);
-       INIT_DELAYED_WORK(&pledpriv->blink_work, blink_work);
-}
-
-void rtl8188eu_DeInitSwLeds(struct adapter *padapter)
-{
-       struct led_priv *ledpriv = &padapter->ledpriv;
-
-       cancel_delayed_work_sync(&ledpriv->blink_work);
-       ResetLedStatus(ledpriv);
-       SwLedOff(ledpriv);
-}
-
-void rtw_led_control(struct adapter *padapter, enum LED_CTL_MODE LedAction)
-{
-       struct led_priv *pLed = &padapter->ledpriv;
-       struct registry_priv *registry_par;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       if (!padapter->hw_init_completed)
-               return;
-
-       if (!pLed->bRegUseLed)
-               return;
-
-       registry_par = &padapter->registrypriv;
-       if (!registry_par->led_enable)
-               return;
-
-       switch (LedAction) {
-       case LED_CTL_START_TO_LINK:
-       case LED_CTL_NO_LINK:
-               if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
-                       return;
-
-               cancel_delayed_work(&pLed->blink_work);
-
-               pLed->bLedBlinkInProgress = false;
-
-               pLed->CurrLedState = LED_BLINK_SLOWLY;
-               schedule_delayed_work(&pLed->blink_work, LED_BLINK_NO_LINK_INTVL);
-               break;
-       case LED_CTL_LINK:
-               if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
-                       return;
-
-               cancel_delayed_work(&pLed->blink_work);
-
-               pLed->bLedBlinkInProgress = false;
-
-               pLed->CurrLedState = LED_BLINK_NORMAL;
-               schedule_delayed_work(&pLed->blink_work, LED_BLINK_LINK_INTVL);
-               break;
-       case LED_CTL_SITE_SURVEY:
-               if ((pmlmepriv->LinkDetectInfo.bBusyTraffic) && (check_fwstate(pmlmepriv, _FW_LINKED)))
-                       return;
-
-               if (pLed->bLedScanBlinkInProgress)
-                       return;
-
-               if (IS_LED_WPS_BLINKING(pLed))
-                       return;
-
-               cancel_delayed_work(&pLed->blink_work);
-
-               pLed->bLedBlinkInProgress = false;
-               pLed->bLedScanBlinkInProgress = true;
-
-               pLed->CurrLedState = LED_BLINK_SCAN;
-               pLed->BlinkTimes = 24;
-               schedule_delayed_work(&pLed->blink_work, LED_BLINK_SCAN_INTVL);
-               break;
-       case LED_CTL_TX:
-       case LED_CTL_RX:
-               if (pLed->bLedBlinkInProgress)
-                       return;
-
-               if (pLed->CurrLedState == LED_BLINK_SCAN || IS_LED_WPS_BLINKING(pLed))
-                       return;
-
-               cancel_delayed_work(&pLed->blink_work);
-
-               pLed->bLedBlinkInProgress = true;
-
-               pLed->CurrLedState = LED_BLINK_TXRX;
-               pLed->BlinkTimes = 2;
-               schedule_delayed_work(&pLed->blink_work, LED_BLINK_FASTER_INTVL);
-               break;
-       case LED_CTL_START_WPS: /* wait until xinpin finish */
-               if (pLed->bLedWPSBlinkInProgress)
-                       return;
-
-               cancel_delayed_work(&pLed->blink_work);
-
-               pLed->bLedBlinkInProgress = false;
-               pLed->bLedScanBlinkInProgress = false;
-               pLed->bLedWPSBlinkInProgress = true;
-               pLed->CurrLedState = LED_BLINK_WPS;
-               schedule_delayed_work(&pLed->blink_work, LED_BLINK_SCAN_INTVL);
-               break;
-       case LED_CTL_STOP_WPS:
-               cancel_delayed_work(&pLed->blink_work);
-
-               pLed->bLedBlinkInProgress = false;
-               pLed->bLedScanBlinkInProgress = false;
-               pLed->bLedWPSBlinkInProgress = true;
-
-               pLed->CurrLedState = LED_BLINK_WPS_STOP;
-               if (pLed->bLedOn) {
-                       schedule_delayed_work(&pLed->blink_work, LED_BLINK_WPS_SUCESS_INTVL);
-               } else {
-                       schedule_delayed_work(&pLed->blink_work, 0);
-               }
-               break;
-       case LED_CTL_STOP_WPS_FAIL:
-               cancel_delayed_work(&pLed->blink_work);
-               pLed->bLedWPSBlinkInProgress = false;
-               pLed->CurrLedState = LED_BLINK_SLOWLY;
-               schedule_delayed_work(&pLed->blink_work, LED_BLINK_NO_LINK_INTVL);
-               break;
-       case LED_CTL_POWER_OFF:
-               pLed->CurrLedState = RTW_LED_OFF;
-               pLed->bLedBlinkInProgress = false;
-               pLed->bLedWPSBlinkInProgress = false;
-               pLed->bLedScanBlinkInProgress = false;
-               cancel_delayed_work(&pLed->blink_work);
-               SwLedOff(pLed);
-               break;
-       default:
-               break;
-       }
-}
diff --git a/drivers/staging/r8188eu/core/rtw_mlme.c b/drivers/staging/r8188eu/core/rtw_mlme.c
deleted file mode 100644 (file)
index fb7d0e1..0000000
+++ /dev/null
@@ -1,2067 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _RTW_MLME_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/hal_intf.h"
-#include "../include/sta_info.h"
-#include "../include/wifi.h"
-#include "../include/wlan_bssdef.h"
-#include "../include/rtw_ioctl_set.h"
-#include "../include/usb_osintf.h"
-#include "../include/rtl8188e_dm.h"
-
-extern unsigned char   MCS_rate_1R[16];
-
-void rtw_set_roaming(struct adapter *adapter, u8 to_roaming)
-{
-       if (to_roaming == 0)
-               adapter->mlmepriv.to_join = false;
-       adapter->mlmepriv.to_roaming = to_roaming;
-}
-
-u8 rtw_to_roaming(struct adapter *adapter)
-{
-       return adapter->mlmepriv.to_roaming;
-}
-
-static void rtw_free_mlme_ie_data(u8 **ppie, u32 *plen)
-{
-       kfree(*ppie);
-       *plen = 0;
-       *ppie = NULL;
-}
-
-void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv)
-{
-       kfree(pmlmepriv->assoc_req);
-       rtw_free_mlme_ie_data(&pmlmepriv->wps_beacon_ie, &pmlmepriv->wps_beacon_ie_len);
-       rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_req_ie, &pmlmepriv->wps_probe_req_ie_len);
-       rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_resp_ie, &pmlmepriv->wps_probe_resp_ie_len);
-       rtw_free_mlme_ie_data(&pmlmepriv->wps_assoc_resp_ie, &pmlmepriv->wps_assoc_resp_ie_len);
-
-       rtw_free_mlme_ie_data(&pmlmepriv->p2p_beacon_ie, &pmlmepriv->p2p_beacon_ie_len);
-       rtw_free_mlme_ie_data(&pmlmepriv->p2p_probe_req_ie, &pmlmepriv->p2p_probe_req_ie_len);
-       rtw_free_mlme_ie_data(&pmlmepriv->p2p_probe_resp_ie, &pmlmepriv->p2p_probe_resp_ie_len);
-       rtw_free_mlme_ie_data(&pmlmepriv->p2p_go_probe_resp_ie, &pmlmepriv->p2p_go_probe_resp_ie_len);
-       rtw_free_mlme_ie_data(&pmlmepriv->p2p_assoc_req_ie, &pmlmepriv->p2p_assoc_req_ie_len);
-}
-
-void _rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, u8 isfreeall)
-{
-       u32 curr_time, delta_time;
-       u32 lifetime = SCANQUEUE_LIFETIME;
-       struct __queue *free_queue = &pmlmepriv->free_bss_pool;
-
-       if (!pnetwork)
-               return;
-
-       if (pnetwork->fixed)
-               return;
-       curr_time = jiffies;
-       if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) ||
-           (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)))
-               lifetime = 1;
-       if (!isfreeall) {
-               delta_time = (curr_time - pnetwork->last_scanned) / HZ;
-               if (delta_time < lifetime)/*  unit:sec */
-                       return;
-       }
-       spin_lock_bh(&free_queue->lock);
-       list_del_init(&pnetwork->list);
-       list_add_tail(&pnetwork->list, &free_queue->queue);
-       pmlmepriv->num_of_scanned--;
-       spin_unlock_bh(&free_queue->lock);
-}
-
-/*
-       return the wlan_network with the matching addr
-
-       Shall be called under atomic context... to avoid possible racing condition...
-*/
-struct wlan_network *_rtw_find_network(struct __queue *scanned_queue, u8 *addr)
-{
-       struct list_head *phead, *plist;
-       struct  wlan_network *pnetwork = NULL;
-       u8 zero_addr[ETH_ALEN] = {0, 0, 0, 0, 0, 0};
-
-       if (!memcmp(zero_addr, addr, ETH_ALEN)) {
-               pnetwork = NULL;
-               goto exit;
-       }
-       phead = get_list_head(scanned_queue);
-       plist = phead->next;
-
-       while (plist != phead) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-               if (!memcmp(addr, pnetwork->network.MacAddress, ETH_ALEN))
-                       break;
-               plist = plist->next;
-       }
-       if (plist == phead)
-               pnetwork = NULL;
-exit:
-
-       return pnetwork;
-}
-
-void _rtw_free_network_queue(struct adapter *padapter, u8 isfreeall)
-{
-       struct list_head *phead, *plist;
-       struct wlan_network *pnetwork;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct __queue *scanned_queue = &pmlmepriv->scanned_queue;
-
-       spin_lock_bh(&scanned_queue->lock);
-
-       phead = get_list_head(scanned_queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-
-               plist = plist->next;
-
-               _rtw_free_network(pmlmepriv, pnetwork, isfreeall);
-       }
-       spin_unlock_bh(&scanned_queue->lock);
-
-}
-
-int rtw_if_up(struct adapter *padapter)
-{
-       int res;
-
-       if (padapter->bDriverStopped || padapter->bSurpriseRemoved ||
-           !check_fwstate(&padapter->mlmepriv, _FW_LINKED))
-               res = false;
-       else
-               res =  true;
-
-       return res;
-}
-
-void rtw_generate_random_ibss(u8 *pibss)
-{
-       u32     curtime = jiffies;
-
-       pibss[0] = 0x02;  /* in ad-hoc mode bit1 must set to 1 */
-       pibss[1] = 0x11;
-       pibss[2] = 0x87;
-       pibss[3] = (u8)(curtime & 0xff);/* p[0]; */
-       pibss[4] = (u8)((curtime >> 8) & 0xff);/* p[1]; */
-       pibss[5] = (u8)((curtime >> 16) & 0xff);/* p[2]; */
-}
-
-u8 *rtw_get_capability_from_ie(u8 *ie)
-{
-       return ie + 8 + 2;
-}
-
-u16 rtw_get_capability(struct wlan_bssid_ex *bss)
-{
-       __le16  val;
-
-       memcpy((u8 *)&val, rtw_get_capability_from_ie(bss->IEs), 2);
-
-       return le16_to_cpu(val);
-}
-
-u8 *rtw_get_beacon_interval_from_ie(u8 *ie)
-{
-       return ie + 8;
-}
-
-static void rtw_join_timeout_handler(struct timer_list *t)
-{
-       struct adapter *adapter = from_timer(adapter, t, mlmepriv.assoc_timer);
-
-       _rtw_join_timeout_handler(adapter);
-}
-
-static void _rtw_scan_timeout_handler(struct timer_list *t)
-{
-       struct adapter *adapter = from_timer(adapter, t, mlmepriv.scan_to_timer);
-
-       rtw_scan_timeout_handler(adapter);
-}
-
-static void _dynamic_check_timer_handlder(struct timer_list *t)
-{
-       struct adapter *adapter = from_timer(adapter, t, mlmepriv.dynamic_chk_timer);
-
-       rtw_dynamic_check_timer_handlder(adapter);
-       _set_timer(&adapter->mlmepriv.dynamic_chk_timer, 2000);
-}
-
-static void rtw_init_mlme_timer(struct adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       timer_setup(&pmlmepriv->assoc_timer, rtw_join_timeout_handler, 0);
-       timer_setup(&pmlmepriv->scan_to_timer, _rtw_scan_timeout_handler, 0);
-       timer_setup(&pmlmepriv->dynamic_chk_timer, _dynamic_check_timer_handlder, 0);
-}
-
-int rtw_init_mlme_priv(struct adapter *padapter)/* struct      mlme_priv *pmlmepriv) */
-{
-       int     i;
-       u8      *pbuf;
-       struct wlan_network     *pnetwork;
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-
-       /*  We don't need to memset padapter->XXX to zero, because adapter is allocated by vzalloc(). */
-
-       pmlmepriv->nic_hdl = (u8 *)padapter;
-
-       pmlmepriv->pscanned = NULL;
-       pmlmepriv->fw_state = 0;
-       pmlmepriv->cur_network.network.InfrastructureMode = Ndis802_11AutoUnknown;
-       pmlmepriv->scan_mode = SCAN_ACTIVE;/*  1: active, 0: pasive. Maybe someday we should rename this varable to "active_mode" (Jeff) */
-
-       spin_lock_init(&pmlmepriv->lock);
-       rtw_init_queue(&pmlmepriv->free_bss_pool);
-       rtw_init_queue(&pmlmepriv->scanned_queue);
-
-       set_scanned_network_val(pmlmepriv, 0);
-
-       memset(&pmlmepriv->assoc_ssid, 0, sizeof(struct ndis_802_11_ssid));
-
-       pbuf = vzalloc(MAX_BSS_CNT * (sizeof(struct wlan_network)));
-
-       if (!pbuf)
-               return -ENOMEM;
-
-       pmlmepriv->free_bss_buf = pbuf;
-
-       pnetwork = (struct wlan_network *)pbuf;
-
-       for (i = 0; i < MAX_BSS_CNT; i++) {
-               INIT_LIST_HEAD(&pnetwork->list);
-
-               list_add_tail(&pnetwork->list, &pmlmepriv->free_bss_pool.queue);
-
-               pnetwork++;
-       }
-
-       /* allocate DMA-able/Non-Page memory for cmd_buf and rsp_buf */
-
-       rtw_init_mlme_timer(padapter);
-
-       return 0;
-}
-
-void rtw_free_mlme_priv(struct mlme_priv *pmlmepriv)
-{
-       rtw_free_mlme_priv_ie_data(pmlmepriv);
-       vfree(pmlmepriv->free_bss_buf);
-}
-
-struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv)
-{
-       struct  wlan_network    *pnetwork;
-       struct __queue *free_queue = &pmlmepriv->free_bss_pool;
-       struct list_head *plist = NULL;
-
-       spin_lock_bh(&free_queue->lock);
-
-       if (list_empty(&free_queue->queue)) {
-               pnetwork = NULL;
-               goto exit;
-       }
-       plist = (&free_queue->queue)->next;
-
-       pnetwork = container_of(plist, struct wlan_network, list);
-
-       list_del_init(&pnetwork->list);
-
-       pnetwork->network_type = 0;
-       pnetwork->fixed = false;
-       pnetwork->last_scanned = jiffies;
-       pnetwork->aid = 0;
-       pnetwork->join_res = 0;
-
-       pmlmepriv->num_of_scanned++;
-
-exit:
-       spin_unlock_bh(&free_queue->lock);
-
-       return pnetwork;
-}
-
-static void rtw_free_network_nolock(struct mlme_priv *pmlmepriv,
-                                   struct wlan_network *pnetwork)
-{
-       struct __queue *free_queue = &pmlmepriv->free_bss_pool;
-
-       if (!pnetwork)
-               return;
-       if (pnetwork->fixed)
-               return;
-       list_del_init(&pnetwork->list);
-       list_add_tail(&pnetwork->list, get_list_head(free_queue));
-       pmlmepriv->num_of_scanned--;
-}
-
-void rtw_free_network_queue(struct adapter *dev, u8 isfreeall)
-{
-
-       _rtw_free_network_queue(dev, isfreeall);
-
-}
-
-/*
-       return the wlan_network with the matching addr
-
-       Shall be called under atomic context... to avoid possible racing condition...
-*/
-struct wlan_network *rtw_find_network(struct __queue *scanned_queue, u8 *addr)
-{
-       struct  wlan_network *pnetwork = _rtw_find_network(scanned_queue, addr);
-
-       return pnetwork;
-}
-
-int rtw_is_same_ibss(struct adapter *adapter, struct wlan_network *pnetwork)
-{
-       int ret = true;
-       struct security_priv *psecuritypriv = &adapter->securitypriv;
-
-       if ((psecuritypriv->dot11PrivacyAlgrthm != _NO_PRIVACY_) &&
-           (pnetwork->network.Privacy == 0))
-               ret = false;
-       else if ((psecuritypriv->dot11PrivacyAlgrthm == _NO_PRIVACY_) &&
-                (pnetwork->network.Privacy == 1))
-               ret = false;
-       else
-               ret = true;
-       return ret;
-}
-
-static int is_same_ess(struct wlan_bssid_ex *a, struct wlan_bssid_ex *b)
-{
-       return (a->Ssid.SsidLength == b->Ssid.SsidLength) &&
-              !memcmp(a->Ssid.Ssid, b->Ssid.Ssid, a->Ssid.SsidLength);
-}
-
-int is_same_network(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst)
-{
-       u16 s_cap, d_cap;
-       __le16 le_scap, le_dcap;
-
-       memcpy((u8 *)&le_scap, rtw_get_capability_from_ie(src->IEs), 2);
-       memcpy((u8 *)&le_dcap, rtw_get_capability_from_ie(dst->IEs), 2);
-
-       s_cap = le16_to_cpu(le_scap);
-       d_cap = le16_to_cpu(le_dcap);
-
-       return ((src->Ssid.SsidLength == dst->Ssid.SsidLength) &&
-               ((!memcmp(src->MacAddress, dst->MacAddress, ETH_ALEN))) &&
-               ((!memcmp(src->Ssid.Ssid, dst->Ssid.Ssid, src->Ssid.SsidLength))) &&
-               ((s_cap & WLAN_CAPABILITY_IBSS) ==
-               (d_cap & WLAN_CAPABILITY_IBSS)) &&
-               ((s_cap & WLAN_CAPABILITY_BSS) ==
-               (d_cap & WLAN_CAPABILITY_BSS)));
-}
-
-struct wlan_network    *rtw_get_oldest_wlan_network(struct __queue *scanned_queue)
-{
-       struct list_head *plist, *phead;
-       struct  wlan_network    *pwlan = NULL;
-       struct  wlan_network    *oldest = NULL;
-
-       phead = get_list_head(scanned_queue);
-
-       plist = phead->next;
-
-       while (1) {
-               if (phead == plist)
-                       break;
-
-               pwlan = container_of(plist, struct wlan_network, list);
-
-               if (!pwlan->fixed) {
-                       if (!oldest || time_after(oldest->last_scanned, pwlan->last_scanned))
-                               oldest = pwlan;
-               }
-
-               plist = plist->next;
-       }
-
-       return oldest;
-}
-
-void update_network(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src,
-       struct adapter *padapter, bool update_ie)
-{
-       long rssi_ori = dst->Rssi;
-       u8 sq_smp = src->PhyInfo.SignalQuality;
-       u8 ss_final;
-       u8 sq_final;
-       long rssi_final;
-
-       AntDivCompare8188E(padapter, dst, src); /* this will update src.Rssi, need consider again */
-
-       /* The rule below is 1/5 for sample value, 4/5 for history value */
-       if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) && is_same_network(&padapter->mlmepriv.cur_network.network, src)) {
-               /* Take the recvpriv's value for the connected AP*/
-               ss_final = padapter->recvpriv.signal_strength;
-               sq_final = padapter->recvpriv.signal_qual;
-               /* the rssi value here is undecorated, and will be used for antenna diversity */
-               if (sq_smp != 101) /* from the right channel */
-                       rssi_final = dst->Rssi; //(src->Rssi+dst->Rssi*4)/5;
-               else
-                       rssi_final = rssi_ori;
-       } else {
-//             if (sq_smp != 101) { /* from the right channel */
-                       ss_final = (u32)dst->PhyInfo.SignalStrength; //((u32)(src->PhyInfo.SignalStrength)+(u32)(dst->PhyInfo.SignalStrength)*4)/5;
-                       sq_final = (u32)dst->PhyInfo.SignalQuality; //((u32)(src->PhyInfo.SignalQuality)+(u32)(dst->PhyInfo.SignalQuality)*4)/5;
-                       rssi_final = dst->Rssi; //(src->Rssi+dst->Rssi*4)/5;
-//             } else {
-//                     /* bss info not receiving from the right channel, use the original RX signal infos */
-//                     ss_final = dst->PhyInfo.SignalStrength;
-//                     sq_final = dst->PhyInfo.SignalQuality;
-//                     rssi_final = dst->Rssi;
-//             }
-       }
-       if (update_ie) {
-               dst->Reserved[0] = src->Reserved[0];
-               dst->Reserved[1] = src->Reserved[1];
-               memcpy((u8 *)dst, (u8 *)src, get_wlan_bssid_ex_sz(src));
-       }
-       dst->PhyInfo.SignalStrength = ss_final;
-       dst->PhyInfo.SignalQuality = sq_final;
-       dst->Rssi = rssi_final;
-
-}
-
-static void update_current_network(struct adapter *adapter, struct wlan_bssid_ex *pnetwork)
-{
-       struct  mlme_priv       *pmlmepriv = &adapter->mlmepriv;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED) &&
-           is_same_network(&pmlmepriv->cur_network.network, pnetwork)) {
-               update_network(&pmlmepriv->cur_network.network, pnetwork, adapter, true);
-       }
-
-}
-
-u8 rtw_current_antenna(struct adapter *adapter)
-{
-       struct hal_data_8188e *haldata = &adapter->haldata;
-
-       return haldata->CurAntenna;
-}
-
-/*
-Caller must hold pmlmepriv->lock first.
-*/
-void rtw_update_scanned_network(struct adapter *adapter, struct wlan_bssid_ex *target)
-{
-       struct list_head *plist, *phead;
-       u32     bssid_ex_sz;
-       struct mlme_priv        *pmlmepriv = &adapter->mlmepriv;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       struct wlan_network     *pnetwork = NULL;
-       struct wlan_network     *oldest = NULL;
-
-       spin_lock_bh(&queue->lock);
-       phead = get_list_head(queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               pnetwork        = container_of(plist, struct wlan_network, list);
-
-               if (is_same_network(&pnetwork->network, target))
-                       break;
-               if ((oldest == ((struct wlan_network *)0)) ||
-                   time_after(oldest->last_scanned, pnetwork->last_scanned))
-                       oldest = pnetwork;
-               plist = plist->next;
-       }
-       /* If we didn't find a match, then get a new network slot to initialize
-        * with this beacon's information */
-       if (phead == plist) {
-               if (list_empty(&pmlmepriv->free_bss_pool.queue)) {
-                       /* If there are no more slots, expire the oldest */
-                       pnetwork = oldest;
-
-                       target->PhyInfo.Optimum_antenna = rtw_current_antenna(adapter);
-
-                       memcpy(&pnetwork->network, target,  get_wlan_bssid_ex_sz(target));
-                       /*  variable initialize */
-                       pnetwork->fixed = false;
-                       pnetwork->last_scanned = jiffies;
-
-                       pnetwork->network_type = 0;
-                       pnetwork->aid = 0;
-                       pnetwork->join_res = 0;
-
-                       /* bss info not receiving from the right channel */
-                       if (pnetwork->network.PhyInfo.SignalQuality == 101)
-                               pnetwork->network.PhyInfo.SignalQuality = 0;
-               } else {
-                       /* Otherwise just pull from the free list */
-
-                       pnetwork = rtw_alloc_network(pmlmepriv); /*  will update scan_time */
-
-                       if (!pnetwork)
-                               goto exit;
-
-                       bssid_ex_sz = get_wlan_bssid_ex_sz(target);
-                       target->Length = bssid_ex_sz;
-                       target->PhyInfo.Optimum_antenna = rtw_current_antenna(adapter);
-                       memcpy(&pnetwork->network, target, bssid_ex_sz);
-
-                       pnetwork->last_scanned = jiffies;
-
-                       /* bss info not receiving from the right channel */
-                       if (pnetwork->network.PhyInfo.SignalQuality == 101)
-                               pnetwork->network.PhyInfo.SignalQuality = 0;
-                       list_add_tail(&pnetwork->list, &queue->queue);
-               }
-       } else {
-               /* we have an entry and we are going to update it. But this entry may
-                * be already expired. In this case we do the same as we found a new
-                * net and call the new_net handler
-                */
-               bool update_ie = true;
-
-               pnetwork->last_scanned = jiffies;
-
-               /* target.Reserved[0]== 1, means that scanned network is a bcn frame. */
-               /* probe resp(3) > beacon(1) > probe req(2) */
-               if ((target->Reserved[0] != 2) &&
-                   (target->Reserved[0] >= pnetwork->network.Reserved[0]))
-                       update_ie = true;
-               else
-                       update_ie = false;
-               update_network(&pnetwork->network, target, adapter, update_ie);
-       }
-
-exit:
-       spin_unlock_bh(&queue->lock);
-
-}
-
-static void rtw_add_network(struct adapter *adapter,
-                           struct wlan_bssid_ex *pnetwork)
-{
-
-       rtw_wlan_bssid_ex_remove_p2p_attr(pnetwork, P2P_ATTR_GROUP_INFO);
-       update_current_network(adapter, pnetwork);
-       rtw_update_scanned_network(adapter, pnetwork);
-
-}
-
-/* select the desired network based on the capability of the (i)bss. */
-/*  check items:       (1) security */
-/*                     (2) network_type */
-/*                     (3) WMM */
-/*                     (4) HT */
-/*                     (5) others */
-static bool rtw_is_desired_network(struct adapter *adapter, struct wlan_network *pnetwork)
-{
-       struct security_priv *psecuritypriv = &adapter->securitypriv;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       u32 desired_encmode;
-       u32 privacy;
-
-       /* u8 wps_ie[512]; */
-       uint wps_ielen;
-
-       int bselected = true;
-
-       desired_encmode = psecuritypriv->ndisencryptstatus;
-       privacy = pnetwork->network.Privacy;
-
-       if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) {
-               if (rtw_get_wps_ie(pnetwork->network.IEs + _FIXED_IE_LENGTH_, pnetwork->network.IELength - _FIXED_IE_LENGTH_, NULL, &wps_ielen))
-                       return true;
-               else
-                       return false;
-       }
-       if (adapter->registrypriv.wifi_spec == 1) { /* for  correct flow of 8021X  to do.... */
-               u8 *p = NULL;
-               uint ie_len = 0;
-
-               if ((desired_encmode == Ndis802_11EncryptionDisabled) && (privacy != 0))
-                       bselected = false;
-               if (psecuritypriv->ndisauthtype == Ndis802_11AuthModeWPA2PSK) {
-                       p = rtw_get_ie(pnetwork->network.IEs + _BEACON_IE_OFFSET_,
-                                      _RSN_IE_2_, &ie_len,
-                                      (pnetwork->network.IELength -
-                                      _BEACON_IE_OFFSET_));
-                       if (p && ie_len > 0)
-                               bselected = true;
-                       else
-                               bselected = false;
-               }
-       }
-
-       if ((desired_encmode != Ndis802_11EncryptionDisabled) && (privacy == 0))
-               bselected = false;
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-               if (pnetwork->network.InfrastructureMode != pmlmepriv->cur_network.network.InfrastructureMode)
-                       bselected = false;
-       }
-
-       return bselected;
-}
-
-void rtw_survey_event_callback(struct adapter  *adapter, u8 *pbuf)
-{
-       u32 len;
-       struct wlan_bssid_ex *pnetwork;
-       struct  mlme_priv       *pmlmepriv = &adapter->mlmepriv;
-
-       pnetwork = (struct wlan_bssid_ex *)pbuf;
-
-       len = get_wlan_bssid_ex_sz(pnetwork);
-       if (len > (sizeof(struct wlan_bssid_ex)))
-               return;
-       spin_lock_bh(&pmlmepriv->lock);
-
-       /*  update IBSS_network 's timestamp */
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-               if (!memcmp(&pmlmepriv->cur_network.network.MacAddress, pnetwork->MacAddress, ETH_ALEN)) {
-                       struct wlan_network *ibss_wlan = NULL;
-
-                       memcpy(pmlmepriv->cur_network.network.IEs, pnetwork->IEs, 8);
-                       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-                       ibss_wlan = rtw_find_network(&pmlmepriv->scanned_queue,  pnetwork->MacAddress);
-                       if (ibss_wlan) {
-                               memcpy(ibss_wlan->network.IEs, pnetwork->IEs, 8);
-                               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                               goto exit;
-                       }
-                       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-               }
-       }
-
-       /*  lock pmlmepriv->lock when you accessing network_q */
-       if (!check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
-               if (pnetwork->Ssid.Ssid[0] == 0)
-                       pnetwork->Ssid.SsidLength = 0;
-               rtw_add_network(adapter, pnetwork);
-       }
-
-exit:
-
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-static void rtw_xmit_schedule(struct adapter *padapter)
-{
-       struct xmit_priv *pxmitpriv;
-
-       if (!padapter)
-               return;
-
-       pxmitpriv = &padapter->xmitpriv;
-
-       spin_lock_bh(&pxmitpriv->lock);
-
-       if (rtw_txframes_pending(padapter))
-               tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
-
-       spin_unlock_bh(&pxmitpriv->lock);
-}
-
-void rtw_surveydone_event_callback(struct adapter      *adapter, u8 *pbuf)
-{
-       struct  mlme_priv *pmlmepriv = &adapter->mlmepriv;
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       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;
-       }
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
-               _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
-
-       spin_unlock_bh(&pmlmepriv->lock);
-
-       del_timer_sync(&pmlmepriv->scan_to_timer);
-
-       spin_lock_bh(&pmlmepriv->lock);
-       rtw_set_signal_stat_timer(&adapter->recvpriv);
-
-       if (pmlmepriv->to_join) {
-               if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-                       if (!check_fwstate(pmlmepriv, _FW_LINKED)) {
-                               set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
-
-                               if (rtw_select_and_join_from_scanned_queue(pmlmepriv) == _SUCCESS) {
-                                       _set_timer(&pmlmepriv->assoc_timer, MAX_JOIN_TIMEOUT);
-                               } else {
-                                       struct wlan_bssid_ex    *pdev_network = &adapter->registrypriv.dev_network;
-                                       u8 *pibss = adapter->registrypriv.dev_network.MacAddress;
-
-                                       _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
-
-                                       memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid, sizeof(struct ndis_802_11_ssid));
-
-                                       rtw_update_registrypriv_dev_network(adapter);
-                                       rtw_generate_random_ibss(pibss);
-
-                                       pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE;
-
-                                       rtw_createbss_cmd(adapter);
-                                       pmlmepriv->to_join = false;
-                               }
-                       }
-               } else {
-                       int s_ret;
-                       set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
-                       pmlmepriv->to_join = false;
-                       s_ret = rtw_select_and_join_from_scanned_queue(pmlmepriv);
-                       if (s_ret == _SUCCESS) {
-                               _set_timer(&pmlmepriv->assoc_timer, MAX_JOIN_TIMEOUT);
-                       } else {
-                               if (rtw_to_roaming(adapter) != 0) {
-                                       if (--pmlmepriv->to_roaming == 0 ||
-                                           rtw_sitesurvey_cmd(adapter, &pmlmepriv->assoc_ssid, 1) != _SUCCESS) {
-                                               rtw_set_roaming(adapter, 0);
-                                               rtw_free_assoc_resources(adapter, 1);
-                                               rtw_indicate_disconnect(adapter);
-                                       } else {
-                                               pmlmepriv->to_join = true;
-                                       }
-                               } else {
-                                       rtw_indicate_disconnect(adapter);
-                               }
-                               _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-                       }
-               }
-       }
-
-       indicate_wx_scan_complete_event(adapter);
-
-       spin_unlock_bh(&pmlmepriv->lock);
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED))
-               p2p_ps_wk_cmd(adapter, P2P_PS_SCAN_DONE, 0);
-
-       rtw_xmit_schedule(adapter);
-}
-
-static void free_scanqueue(struct      mlme_priv *pmlmepriv)
-{
-       struct __queue *free_queue = &pmlmepriv->free_bss_pool;
-       struct __queue *scan_queue = &pmlmepriv->scanned_queue;
-       struct list_head *plist, *phead, *ptemp;
-
-       spin_lock_bh(&scan_queue->lock);
-       spin_lock_bh(&free_queue->lock);
-
-       phead = get_list_head(scan_queue);
-       plist = phead->next;
-
-       while (plist != phead) {
-               ptemp = plist->next;
-               list_del_init(plist);
-               list_add_tail(plist, &free_queue->queue);
-               plist = ptemp;
-               pmlmepriv->num_of_scanned--;
-       }
-
-       spin_unlock_bh(&free_queue->lock);
-       spin_unlock_bh(&scan_queue->lock);
-}
-
-/*
-*rtw_free_assoc_resources: the caller has to lock pmlmepriv->lock
-*/
-void rtw_free_assoc_resources(struct adapter *adapter, int lock_scanned_queue)
-{
-       struct wlan_network *pwlan = NULL;
-       struct  mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct  sta_priv *pstapriv = &adapter->stapriv;
-       struct wlan_network *tgt_network = &pmlmepriv->cur_network;
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_AP_STATE)) {
-               struct sta_info *psta;
-
-               psta = rtw_get_stainfo(&adapter->stapriv, tgt_network->network.MacAddress);
-
-               spin_lock_bh(&pstapriv->sta_hash_lock);
-               rtw_free_stainfo(adapter,  psta);
-               spin_unlock_bh(&pstapriv->sta_hash_lock);
-       }
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE | WIFI_AP_STATE)) {
-               struct sta_info *psta;
-
-               rtw_free_all_stainfo(adapter);
-
-               psta = rtw_get_bcmc_stainfo(adapter);
-               spin_lock_bh(&pstapriv->sta_hash_lock);
-               rtw_free_stainfo(adapter, psta);
-               spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-               rtw_init_bcmc_stainfo(adapter);
-       }
-
-       if (lock_scanned_queue)
-               spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-       pwlan = rtw_find_network(&pmlmepriv->scanned_queue, tgt_network->network.MacAddress);
-       if (pwlan)
-               pwlan->fixed = false;
-
-       if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) && (adapter->stapriv.asoc_sta_count == 1)))
-               rtw_free_network_nolock(pmlmepriv, pwlan);
-
-       if (lock_scanned_queue)
-               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-       pmlmepriv->key_mask = 0;
-
-}
-
-static struct rt_pmkid_list backup_pmkid[NUM_PMKID_CACHE];
-
-static void rtw_reset_securitypriv(struct adapter *adapter)
-{
-       u8 backup_index;
-       u8 backup_counter;
-       u32 backup_time;
-
-       if (adapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) {
-               /* 802.1x */
-               /*  We have to backup the PMK information for WiFi PMK Caching test item. */
-               /*  Backup the btkip_countermeasure information. */
-               /*  When the countermeasure is trigger, the driver have to disconnect with AP for 60 seconds. */
-               memcpy(&backup_pmkid[0], &adapter->securitypriv.PMKIDList[0], sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE);
-               backup_index = adapter->securitypriv.PMKIDIndex;
-               backup_counter = adapter->securitypriv.btkip_countermeasure;
-               backup_time = adapter->securitypriv.btkip_countermeasure_time;
-               memset((unsigned char *)&adapter->securitypriv, 0, sizeof(struct security_priv));
-
-               /*  Restore the PMK information to securitypriv structure for the following connection. */
-               memcpy(&adapter->securitypriv.PMKIDList[0],
-                           &backup_pmkid[0],
-                           sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE);
-               adapter->securitypriv.PMKIDIndex = backup_index;
-               adapter->securitypriv.btkip_countermeasure = backup_counter;
-               adapter->securitypriv.btkip_countermeasure_time = backup_time;
-               adapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
-               adapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
-       } else {
-               /* reset values in securitypriv */
-               struct security_priv *psec_priv = &adapter->securitypriv;
-
-               psec_priv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;  /* open system */
-               psec_priv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
-               psec_priv->dot11PrivacyKeyIndex = 0;
-               psec_priv->dot118021XGrpPrivacy = _NO_PRIVACY_;
-               psec_priv->dot118021XGrpKeyid = 1;
-               psec_priv->ndisauthtype = Ndis802_11AuthModeOpen;
-               psec_priv->ndisencryptstatus = Ndis802_11WEPDisabled;
-       }
-}
-
-/*
-*rtw_indicate_connect: the caller has to lock pmlmepriv->lock
-*/
-void rtw_indicate_connect(struct adapter *padapter)
-{
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-
-       pmlmepriv->to_join = false;
-
-       if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED)) {
-               set_fwstate(pmlmepriv, _FW_LINKED);
-
-               rtw_led_control(padapter, LED_CTL_LINK);
-
-               rtw_indicate_wx_assoc_event(padapter);
-               netif_carrier_on(padapter->pnetdev);
-               if (padapter->pid[2] != 0)
-                       rtw_signal_process(padapter->pid[2], SIGALRM);
-       }
-
-       pmlmepriv->to_roaming = 0;
-}
-
-/*
-*rtw_indicate_disconnect: the caller has to lock pmlmepriv->lock
-*/
-void rtw_indicate_disconnect(struct adapter *padapter)
-{
-       struct  mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING | WIFI_UNDER_WPS);
-
-       if (pmlmepriv->to_roaming > 0)
-               _clr_fwstate_(pmlmepriv, _FW_LINKED);
-
-       if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) ||
-           (pmlmepriv->to_roaming <= 0)) {
-               /*  Do it first for tx broadcast pkt after disconnection issue! */
-               netif_carrier_off(padapter->pnetdev);
-
-               rtw_indicate_wx_disassoc_event(padapter);
-               rtw_reset_securitypriv(padapter);
-
-               _clr_fwstate_(pmlmepriv, _FW_LINKED);
-               rtw_led_control(padapter, LED_CTL_NO_LINK);
-       }
-       p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
-
-       rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 1);
-
-}
-
-inline void rtw_indicate_scan_done(struct adapter *padapter)
-{
-       indicate_wx_scan_complete_event(padapter);
-}
-
-static struct sta_info *rtw_joinbss_update_stainfo(struct adapter *padapter, struct wlan_network *pnetwork)
-{
-       int i;
-       struct sta_info *bmc_sta, *psta = NULL;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       psta = rtw_get_stainfo(pstapriv, pnetwork->network.MacAddress);
-       if (!psta)
-               psta = rtw_alloc_stainfo(pstapriv, pnetwork->network.MacAddress);
-
-       if (psta) { /* update ptarget_sta */
-               psta->aid  = pnetwork->join_res;
-               psta->mac_id = 0;
-               /* sta mode */
-               rtl8188e_SetHalODMVar(padapter, psta, true);
-               /* security related */
-               if (padapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) {
-                       padapter->securitypriv.binstallGrpkey = false;
-                       padapter->securitypriv.busetkipkey = false;
-                       padapter->securitypriv.bgrpkey_handshake = false;
-                       psta->ieee8021x_blocked = true;
-                       psta->dot118021XPrivacy = padapter->securitypriv.dot11PrivacyAlgrthm;
-                       memset((u8 *)&psta->dot118021x_UncstKey, 0, sizeof(union Keytype));
-                       memset((u8 *)&psta->dot11tkiprxmickey, 0, sizeof(union Keytype));
-                       memset((u8 *)&psta->dot11tkiptxmickey, 0, sizeof(union Keytype));
-                       memset((u8 *)&psta->dot11txpn, 0, sizeof(union pn48));
-                       memset((u8 *)&psta->dot11rxpn, 0, sizeof(union pn48));
-               }
-               /*      When doing the WPS, the wps_ie_len won't equal to 0 */
-               /*      And the Wi-Fi driver shouldn't allow the data packet to be transmitted. */
-               if (padapter->securitypriv.wps_ie_len != 0) {
-                       psta->ieee8021x_blocked = true;
-                       padapter->securitypriv.wps_ie_len = 0;
-               }
-               /* for A-MPDU Rx reordering buffer control for bmc_sta & sta_info */
-               /* if A-MPDU Rx is enabled, resetting  rx_ordering_ctrl wstart_b(indicate_seq) to default value = 0xffff */
-               /* todo: check if AP can send A-MPDU packets */
-               for (i = 0; i < 16; i++) {
-                       /* preorder_ctrl = &precvpriv->recvreorder_ctrl[i]; */
-                       preorder_ctrl = &psta->recvreorder_ctrl[i];
-                       preorder_ctrl->enable = false;
-                       preorder_ctrl->indicate_seq = 0xffff;
-                       preorder_ctrl->wend_b = 0xffff;
-                       preorder_ctrl->wsize_b = 64;/* max_ampdu_sz; ex. 32(kbytes) -> wsize_b = 32 */
-               }
-               bmc_sta = rtw_get_bcmc_stainfo(padapter);
-               if (bmc_sta) {
-                       for (i = 0; i < 16; i++) {
-                               /* preorder_ctrl = &precvpriv->recvreorder_ctrl[i]; */
-                               preorder_ctrl = &bmc_sta->recvreorder_ctrl[i];
-                               preorder_ctrl->enable = false;
-                               preorder_ctrl->indicate_seq = 0xffff;
-                               preorder_ctrl->wend_b = 0xffff;
-                               preorder_ctrl->wsize_b = 64;/* max_ampdu_sz; ex. 32(kbytes) -> wsize_b = 32 */
-                       }
-               }
-               /* misc. */
-               update_sta_info(padapter, psta);
-       }
-       return psta;
-}
-
-/* pnetwork: returns from rtw_joinbss_event_callback */
-/* ptarget_wlan: found from scanned_queue */
-static void rtw_joinbss_update_network(struct adapter *padapter, struct wlan_network *ptarget_wlan, struct wlan_network  *pnetwork)
-{
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_network  *cur_network = &pmlmepriv->cur_network;
-
-       /*  why not use ptarget_wlan?? */
-       memcpy(&cur_network->network, &pnetwork->network, pnetwork->network.Length);
-       /*  some IEs in pnetwork is wrong, so we should use ptarget_wlan IEs */
-       cur_network->network.IELength = ptarget_wlan->network.IELength;
-       memcpy(&cur_network->network.IEs[0], &ptarget_wlan->network.IEs[0], MAX_IE_SZ);
-
-       cur_network->aid = pnetwork->join_res;
-
-       rtw_set_signal_stat_timer(&padapter->recvpriv);
-       padapter->recvpriv.signal_strength = ptarget_wlan->network.PhyInfo.SignalStrength;
-       padapter->recvpriv.signal_qual = ptarget_wlan->network.PhyInfo.SignalQuality;
-       /* the ptarget_wlan->network.Rssi is raw data, we use ptarget_wlan->network.PhyInfo.SignalStrength instead (has scaled) */
-       padapter->recvpriv.rssi = translate_percentage_to_dbm(ptarget_wlan->network.PhyInfo.SignalStrength);
-       rtw_set_signal_stat_timer(&padapter->recvpriv);
-
-       /* update fw_state will clr _FW_UNDER_LINKING here indirectly */
-       switch (pnetwork->network.InfrastructureMode) {
-       case Ndis802_11Infrastructure:
-               if (pmlmepriv->fw_state & WIFI_UNDER_WPS)
-                       pmlmepriv->fw_state = WIFI_STATION_STATE | WIFI_UNDER_WPS;
-               else
-                       pmlmepriv->fw_state = WIFI_STATION_STATE;
-               break;
-       case Ndis802_11IBSS:
-               pmlmepriv->fw_state = WIFI_ADHOC_STATE;
-               break;
-       default:
-               pmlmepriv->fw_state = WIFI_NULL_STATE;
-               break;
-       }
-
-       rtw_update_ht_cap(padapter, cur_network->network.IEs, cur_network->network.IELength);
-}
-
-/* Notes: the function could be > passive_level (the same context as Rx tasklet) */
-/* pnetwork: returns from rtw_joinbss_event_callback */
-/* ptarget_wlan: found from scanned_queue */
-/* if join_res > 0, for (fw_state == WIFI_STATION_STATE), we check if  "ptarget_sta" & "ptarget_wlan" exist. */
-/* if join_res > 0, for (fw_state == WIFI_ADHOC_STATE), we only check if "ptarget_wlan" exist. */
-/* if join_res > 0, update "cur_network->network" from "pnetwork->network" if (ptarget_wlan != NULL). */
-
-void rtw_joinbss_event_prehandle(struct adapter *adapter, u8 *pbuf)
-{
-       struct sta_info *ptarget_sta = NULL, *pcur_sta = NULL;
-       struct  sta_priv *pstapriv = &adapter->stapriv;
-       struct  mlme_priv       *pmlmepriv = &adapter->mlmepriv;
-       struct wlan_network     *pnetwork       = (struct wlan_network *)pbuf;
-       struct wlan_network     *cur_network = &pmlmepriv->cur_network;
-       struct wlan_network     *pcur_wlan = NULL, *ptarget_wlan = NULL;
-       unsigned int            the_same_macaddr = false;
-
-       the_same_macaddr = !memcmp(pnetwork->network.MacAddress, cur_network->network.MacAddress, ETH_ALEN);
-
-       pnetwork->network.Length = get_wlan_bssid_ex_sz(&pnetwork->network);
-       if (pnetwork->network.Length > sizeof(struct wlan_bssid_ex))
-               return;
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (pnetwork->join_res > 0) {
-               spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-               if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
-                       /* s1. find ptarget_wlan */
-                       if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-                               if (the_same_macaddr) {
-                                       ptarget_wlan = rtw_find_network(&pmlmepriv->scanned_queue, cur_network->network.MacAddress);
-                               } else {
-                                       pcur_wlan = rtw_find_network(&pmlmepriv->scanned_queue, cur_network->network.MacAddress);
-                                       if (pcur_wlan)
-                                               pcur_wlan->fixed = false;
-
-                                       pcur_sta = rtw_get_stainfo(pstapriv, cur_network->network.MacAddress);
-                                       if (pcur_sta) {
-                                               spin_lock_bh(&pstapriv->sta_hash_lock);
-                                               rtw_free_stainfo(adapter,  pcur_sta);
-                                               spin_unlock_bh(&pstapriv->sta_hash_lock);
-                                       }
-
-                                       ptarget_wlan = rtw_find_network(&pmlmepriv->scanned_queue, pnetwork->network.MacAddress);
-                                       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-                                               if (ptarget_wlan)
-                                                       ptarget_wlan->fixed = true;
-                                       }
-                               }
-                       } else {
-                               ptarget_wlan = rtw_find_network(&pmlmepriv->scanned_queue, pnetwork->network.MacAddress);
-                               if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-                                       if (ptarget_wlan)
-                                               ptarget_wlan->fixed = true;
-                               }
-                       }
-
-                       /* s2. update cur_network */
-                       if (ptarget_wlan) {
-                               rtw_joinbss_update_network(adapter, ptarget_wlan, pnetwork);
-                       } else {
-                               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                               goto ignore_joinbss_callback;
-                       }
-
-                       /* s3. find ptarget_sta & update ptarget_sta after update cur_network only for station mode */
-                       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-                               ptarget_sta = rtw_joinbss_update_stainfo(adapter, pnetwork);
-                               if (!ptarget_sta) {
-                                       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                                       goto ignore_joinbss_callback;
-                               }
-                       }
-
-                       /* s4. indicate connect */
-                       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-                               pmlmepriv->cur_network_scanned = ptarget_wlan;
-                               rtw_indicate_connect(adapter);
-                       }
-
-                       spin_unlock_bh(&pmlmepriv->lock);
-                       /* s5. Cancel assoc_timer */
-                       del_timer_sync(&pmlmepriv->assoc_timer);
-                       spin_lock_bh(&pmlmepriv->lock);
-               } else {
-                       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                       goto ignore_joinbss_callback;
-               }
-
-               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       } else if (pnetwork->join_res == -4) {
-               rtw_reset_securitypriv(adapter);
-               _set_timer(&pmlmepriv->assoc_timer, 1);
-
-               if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
-                       _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-       } else { /* if join_res < 0 (join fails), then try again */
-               _set_timer(&pmlmepriv->assoc_timer, 1);
-               _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-       }
-
-ignore_joinbss_callback:
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-void rtw_joinbss_event_callback(struct adapter *adapter, u8 *pbuf)
-{
-       struct wlan_network     *pnetwork       = (struct wlan_network *)pbuf;
-
-       mlmeext_joinbss_event_callback(adapter, pnetwork->join_res);
-
-       rtw_xmit_schedule(adapter);
-}
-
-void rtw_set_max_rpt_macid(struct adapter *adapter, u8 macid)
-{
-       rtw_write8(adapter, REG_TX_RPT_CTRL + 1, macid + 1);
-}
-
-static u8 search_max_mac_id(struct adapter *padapter)
-{
-       u8 mac_id;
-       u8 aid;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               for (aid = (pstapriv->max_num_sta); aid > 0; aid--) {
-                       if (pstapriv->sta_aid[aid - 1])
-                               break;
-               }
-               mac_id = aid + 1;
-       } else {
-               /* adhoc  id =  31~2 */
-               for (mac_id = (NUM_STA - 1); mac_id >= IBSS_START_MAC_ID; mac_id--) {
-                       if (pmlmeinfo->FW_sta_info[mac_id].status == 1)
-                               break;
-               }
-       }
-       return mac_id;
-}
-
-/* FOR AP , AD-HOC mode */
-void rtw_sta_media_status_rpt(struct adapter *adapter, struct sta_info *psta,
-                             u32 mstatus)
-{
-       u16 media_status_rpt;
-       u8 macid;
-
-       if (!psta)
-               return;
-
-       macid = search_max_mac_id(adapter);
-       rtw_set_max_rpt_macid(adapter, macid);
-
-       /* MACID|OPMODE:1 connect */
-       media_status_rpt = (u16)((psta->mac_id << 8) | mstatus);
-       rtl8188e_set_FwMediaStatus_cmd(adapter, media_status_rpt);
-}
-
-void rtw_stassoc_event_callback(struct adapter *adapter, u8 *pbuf)
-{
-       struct sta_info *psta;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct stassoc_event    *pstassoc = (struct stassoc_event *)pbuf;
-       struct wlan_network     *cur_network = &pmlmepriv->cur_network;
-       struct wlan_network     *ptarget_wlan = NULL;
-
-       if (!rtw_access_ctrl(adapter, pstassoc->macaddr))
-               return;
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               psta = rtw_get_stainfo(&adapter->stapriv, pstassoc->macaddr);
-               if (psta)
-                       rtw_indicate_sta_assoc_event(adapter, psta);
-               return;
-       }
-       /* for AD-HOC mode */
-       psta = rtw_get_stainfo(&adapter->stapriv, pstassoc->macaddr);
-       if (psta)
-               /* the sta have been in sta_info_queue => do nothing */
-               return; /* between drv has received this event before and  fw have not yet to set key to CAM_ENTRY) */
-       psta = rtw_alloc_stainfo(&adapter->stapriv, pstassoc->macaddr);
-       if (!psta)
-               return;
-       /* to do: init sta_info variable */
-       psta->qos_option = 0;
-       psta->mac_id = (uint)pstassoc->cam_id;
-
-       /* for ad-hoc mode */
-       rtl8188e_SetHalODMVar(adapter, psta, true);
-       rtw_sta_media_status_rpt(adapter, psta, 1);
-       if (adapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)
-               psta->dot118021XPrivacy = adapter->securitypriv.dot11PrivacyAlgrthm;
-       psta->ieee8021x_blocked = false;
-       spin_lock_bh(&pmlmepriv->lock);
-       if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) ||
-           (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE))) {
-               if (adapter->stapriv.asoc_sta_count == 2) {
-                       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-                       ptarget_wlan = rtw_find_network(&pmlmepriv->scanned_queue, cur_network->network.MacAddress);
-                       pmlmepriv->cur_network_scanned = ptarget_wlan;
-                       if (ptarget_wlan)
-                               ptarget_wlan->fixed = true;
-                       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                       /*  a sta + bc/mc_stainfo (not Ibss_stainfo) */
-                       rtw_indicate_connect(adapter);
-               }
-       }
-       spin_unlock_bh(&pmlmepriv->lock);
-       mlmeext_sta_add_event_callback(adapter, psta);
-}
-
-void rtw_stadel_event_callback(struct adapter *adapter, u8 *pbuf)
-{
-       int mac_id = -1;
-       struct sta_info *psta;
-       struct wlan_network *pwlan = NULL;
-       struct wlan_bssid_ex *pdev_network = NULL;
-       u8 *pibss = NULL;
-       struct  mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct  stadel_event *pstadel = (struct stadel_event *)pbuf;
-       struct  sta_priv *pstapriv = &adapter->stapriv;
-       struct wlan_network *tgt_network = &pmlmepriv->cur_network;
-
-       psta = rtw_get_stainfo(&adapter->stapriv, pstadel->macaddr);
-       if (psta)
-               mac_id = psta->mac_id;
-       else
-               mac_id = pstadel->mac_id;
-
-       if (mac_id >= 0) {
-               u16 media_status;
-               media_status = (mac_id << 8) | 0; /*   MACID|OPMODE:0 means disconnect */
-               /* for STA, AP, ADHOC mode, report disconnect stauts to FW */
-               rtl8188e_set_FwMediaStatus_cmd(adapter, media_status);
-       }
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
-               return;
-
-       mlmeext_sta_del_event_callback(adapter);
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-               if (adapter->registrypriv.wifi_spec == 1)
-                       rtw_set_roaming(adapter, 0); /* don't roam */
-               else if (rtw_to_roaming(adapter) > 0)
-                       pmlmepriv->to_roaming--; /* this stadel_event is caused by roaming, decrease to_roaming */
-               else if (rtw_to_roaming(adapter) == 0)
-                       rtw_set_roaming(adapter,
-                                       adapter->registrypriv.max_roaming_times);
-
-               if (*((unsigned short *)(pstadel->rsvd)) != WLAN_REASON_EXPIRATION_CHK)
-                       rtw_set_roaming(adapter, 0); /* don't roam */
-
-               rtw_free_uc_swdec_pending_queue(adapter);
-
-               rtw_free_assoc_resources(adapter, 1);
-               rtw_indicate_disconnect(adapter);
-               spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-               /*  remove the network entry in scanned_queue */
-               pwlan = rtw_find_network(&pmlmepriv->scanned_queue, tgt_network->network.MacAddress);
-               if (pwlan) {
-                       pwlan->fixed = false;
-                       rtw_free_network_nolock(pmlmepriv, pwlan);
-               }
-               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-               _rtw_roaming(adapter, tgt_network);
-       }
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-               spin_lock_bh(&pstapriv->sta_hash_lock);
-               rtw_free_stainfo(adapter,  psta);
-               spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-               if (adapter->stapriv.asoc_sta_count == 1) { /* a sta + bc/mc_stainfo (not Ibss_stainfo) */
-                       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-                       /* free old ibss network */
-                       pwlan = rtw_find_network(&pmlmepriv->scanned_queue, tgt_network->network.MacAddress);
-                       if (pwlan) {
-                               pwlan->fixed = false;
-                               rtw_free_network_nolock(pmlmepriv, pwlan);
-                       }
-                       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                       /* re-create ibss */
-                       pdev_network = &adapter->registrypriv.dev_network;
-                       pibss = adapter->registrypriv.dev_network.MacAddress;
-
-                       memcpy(pdev_network, &tgt_network->network, get_wlan_bssid_ex_sz(&tgt_network->network));
-
-                       memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid, sizeof(struct ndis_802_11_ssid));
-
-                       rtw_update_registrypriv_dev_network(adapter);
-
-                       rtw_generate_random_ibss(pibss);
-
-                       if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-                               set_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
-                               _clr_fwstate_(pmlmepriv, WIFI_ADHOC_STATE);
-                       }
-
-                       rtw_createbss_cmd(adapter);
-               }
-       }
-       spin_unlock_bh(&pmlmepriv->lock);
-
-}
-
-/*
-* _rtw_join_timeout_handler - Timeout/failure handler for CMD JoinBss
-* @adapter: pointer to struct adapter structure
-*/
-void _rtw_join_timeout_handler (struct adapter *adapter)
-{
-       struct  mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       int do_join_r;
-
-       if (adapter->bDriverStopped || adapter->bSurpriseRemoved)
-               return;
-
-       spin_lock_irq(&pmlmepriv->lock);
-
-       if (rtw_to_roaming(adapter) > 0) { /* join timeout caused by roaming */
-               while (1) {
-                       pmlmepriv->to_roaming--;
-                       if (rtw_to_roaming(adapter) != 0) { /* try another */
-                               do_join_r = rtw_do_join(adapter);
-                               if (do_join_r != _SUCCESS)
-                                       continue;
-                               break;
-                       } else {
-                               rtw_indicate_disconnect(adapter);
-                               break;
-                       }
-               }
-       } else {
-               rtw_indicate_disconnect(adapter);
-               free_scanqueue(pmlmepriv);/*  */
-       }
-       spin_unlock_irq(&pmlmepriv->lock);
-
-}
-
-/*
-* rtw_scan_timeout_handler - Timeout/Failure handler for CMD SiteSurvey
-* @adapter: pointer to struct adapter structure
-*/
-void rtw_scan_timeout_handler (struct adapter *adapter)
-{
-       struct  mlme_priv *pmlmepriv = &adapter->mlmepriv;
-
-       spin_lock_bh(&pmlmepriv->lock);
-       _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
-       spin_unlock_bh(&pmlmepriv->lock);
-       rtw_indicate_scan_done(adapter);
-}
-
-static void rtw_auto_scan_handler(struct adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       /* auto site survey per 60sec */
-       if (pmlmepriv->scan_interval > 0) {
-               pmlmepriv->scan_interval--;
-               if (pmlmepriv->scan_interval == 0) {
-                       rtw_set_802_11_bssid_list_scan(padapter, NULL, 0);
-                       pmlmepriv->scan_interval = SCAN_INTERVAL;/*  30*2 sec = 60sec */
-               }
-       }
-}
-
-void rtw_dynamic_check_timer_handlder(struct adapter *adapter)
-{
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct registry_priv *pregistrypriv = &adapter->registrypriv;
-
-       if (!adapter)
-               return;
-       if (!adapter->hw_init_completed)
-               return;
-       if ((adapter->bDriverStopped) || (adapter->bSurpriseRemoved))
-               return;
-       if (adapter->net_closed)
-               return;
-       rtw_dynamic_chk_wk_cmd(adapter);
-
-       if (pregistrypriv->wifi_spec == 1) {
-               struct wifidirect_info *pwdinfo = &adapter->wdinfo;
-               if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) {
-                       /* auto site survey */
-                       rtw_auto_scan_handler(adapter);
-               }
-       }
-
-       rcu_read_lock();
-
-       if (rcu_dereference(adapter->pnetdev->rx_handler_data) &&
-           check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_ADHOC_STATE)) {
-               /*  expire NAT2.5 entry */
-               nat25_db_expire(adapter);
-
-               if (adapter->pppoe_connection_in_progress > 0)
-                       adapter->pppoe_connection_in_progress--;
-
-               /*  due to rtw_dynamic_check_timer_handlder() is called every 2 seconds */
-               if (adapter->pppoe_connection_in_progress > 0)
-                       adapter->pppoe_connection_in_progress--;
-       }
-
-       rcu_read_unlock();
-}
-
-#define RTW_SCAN_RESULT_EXPIRE 2000
-
-/*
-* Select a new join candidate from the original @param candidate and @param competitor
-* @return true: candidate is updated
-* @return false: candidate is not updated
-*/
-static int rtw_check_join_candidate(struct mlme_priv *pmlmepriv
-       , struct wlan_network **candidate, struct wlan_network *competitor)
-{
-       int updated = false;
-       struct adapter *adapter = container_of(pmlmepriv, struct adapter, mlmepriv);
-       unsigned long scan_res_expire;
-
-       /* check bssid, if needed */
-       if (pmlmepriv->assoc_by_bssid) {
-               if (memcmp(competitor->network.MacAddress, pmlmepriv->assoc_bssid, ETH_ALEN))
-                       goto exit;
-       }
-
-       /* check ssid, if needed */
-       if (pmlmepriv->assoc_ssid.SsidLength) {
-               if (competitor->network.Ssid.SsidLength != pmlmepriv->assoc_ssid.SsidLength ||
-                   memcmp(competitor->network.Ssid.Ssid, pmlmepriv->assoc_ssid.Ssid, pmlmepriv->assoc_ssid.SsidLength))
-                       goto exit;
-       }
-
-       if (!rtw_is_desired_network(adapter, competitor))
-               goto exit;
-
-       scan_res_expire = competitor->last_scanned + msecs_to_jiffies(RTW_SCAN_RESULT_EXPIRE);
-       if (rtw_to_roaming(adapter) > 0) {
-               if (time_after(jiffies, scan_res_expire) ||
-                   !is_same_ess(&competitor->network, &pmlmepriv->cur_network.network))
-                       goto exit;
-       }
-
-       if (!*candidate || (*candidate)->network.Rssi < competitor->network.Rssi) {
-               *candidate = competitor;
-               updated = true;
-       }
-
-exit:
-       return updated;
-}
-
-/*
-Calling context:
-The caller of the sub-routine will be in critical section...
-The caller must hold the following spinlock
-pmlmepriv->lock
-*/
-
-int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv)
-{
-       int ret;
-       struct list_head *phead;
-       struct adapter *adapter;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       struct  wlan_network    *pnetwork = NULL;
-       struct  wlan_network    *candidate = NULL;
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-       phead = get_list_head(queue);
-       adapter = (struct adapter *)pmlmepriv->nic_hdl;
-       pmlmepriv->pscanned = phead->next;
-       while (phead != pmlmepriv->pscanned) {
-               pnetwork = container_of(pmlmepriv->pscanned, struct wlan_network, list);
-               pmlmepriv->pscanned = pmlmepriv->pscanned->next;
-               rtw_check_join_candidate(pmlmepriv, &candidate, pnetwork);
-       }
-       if (!candidate) {
-               ret = _FAIL;
-               goto exit;
-       }
-
-       /*  check for situation of  _FW_LINKED */
-       if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-               rtw_disassoc_cmd(adapter, 0, true);
-               rtw_indicate_disconnect(adapter);
-               rtw_free_assoc_resources(adapter, 0);
-       }
-
-       ret = rtw_joinbss_cmd(adapter, candidate);
-
-exit:
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       return ret;
-}
-
-int rtw_set_auth(struct adapter *adapter, struct security_priv *psecuritypriv)
-{
-       struct  cmd_obj *pcmd;
-       struct  setauth_parm *psetauthparm;
-       struct  cmd_priv *pcmdpriv = &adapter->cmdpriv;
-       int             res = _SUCCESS;
-
-       pcmd = kzalloc(sizeof(*pcmd), GFP_KERNEL);
-       if (!pcmd) {
-               res = _FAIL;  /* try again */
-               goto exit;
-       }
-
-       psetauthparm = kzalloc(sizeof(*psetauthparm), GFP_KERNEL);
-       if (!psetauthparm) {
-               kfree(pcmd);
-               res = _FAIL;
-               goto exit;
-       }
-       psetauthparm->mode = (unsigned char)psecuritypriv->dot11AuthAlgrthm;
-       pcmd->cmdcode = _SetAuth_CMD_;
-       pcmd->parmbuf = (unsigned char *)psetauthparm;
-       pcmd->cmdsz =  (sizeof(struct setauth_parm));
-       pcmd->rsp = NULL;
-       pcmd->rspsz = 0;
-       INIT_LIST_HEAD(&pcmd->list);
-       res = rtw_enqueue_cmd(pcmdpriv, pcmd);
-exit:
-
-       return res;
-}
-
-int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv, int keyid, u8 set_tx)
-{
-       u8      keylen;
-       struct cmd_obj          *pcmd;
-       struct setkey_parm      *psetkeyparm;
-       struct cmd_priv         *pcmdpriv = &adapter->cmdpriv;
-       struct mlme_priv                *pmlmepriv = &adapter->mlmepriv;
-       int     res = _SUCCESS;
-
-       pcmd = kzalloc(sizeof(*pcmd), GFP_KERNEL);
-       if (!pcmd) {
-               res = _FAIL;  /* try again */
-               goto exit;
-       }
-       psetkeyparm = kzalloc(sizeof(*psetkeyparm), GFP_KERNEL);
-       if (!psetkeyparm) {
-               kfree(pcmd);
-               res = _FAIL;
-               goto exit;
-       }
-
-       if (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)
-               psetkeyparm->algorithm = (unsigned char)psecuritypriv->dot118021XGrpPrivacy;
-       else
-               psetkeyparm->algorithm = (u8)psecuritypriv->dot11PrivacyAlgrthm;
-       psetkeyparm->keyid = (u8)keyid;/* 0~3 */
-       psetkeyparm->set_tx = set_tx;
-       pmlmepriv->key_mask |= BIT(psetkeyparm->keyid);
-
-       switch (psetkeyparm->algorithm) {
-       case _WEP40_:
-               keylen = 5;
-               memcpy(&psetkeyparm->key[0], &psecuritypriv->dot11DefKey[keyid].skey[0], keylen);
-               break;
-       case _WEP104_:
-               keylen = 13;
-               memcpy(&psetkeyparm->key[0], &psecuritypriv->dot11DefKey[keyid].skey[0], keylen);
-               break;
-       case _TKIP_:
-               keylen = 16;
-               memcpy(&psetkeyparm->key, &psecuritypriv->dot118021XGrpKey[keyid], keylen);
-               psetkeyparm->grpkey = 1;
-               break;
-       case _AES_:
-               keylen = 16;
-               memcpy(&psetkeyparm->key, &psecuritypriv->dot118021XGrpKey[keyid], keylen);
-               psetkeyparm->grpkey = 1;
-               break;
-       default:
-               kfree(psetkeyparm);
-               kfree(pcmd);
-               res = _FAIL;
-               goto exit;
-       }
-       pcmd->cmdcode = _SetKey_CMD_;
-       pcmd->parmbuf = (u8 *)psetkeyparm;
-       pcmd->cmdsz =  (sizeof(struct setkey_parm));
-       pcmd->rsp = NULL;
-       pcmd->rspsz = 0;
-       INIT_LIST_HEAD(&pcmd->list);
-       res = rtw_enqueue_cmd(pcmdpriv, pcmd);
-exit:
-       return res;
-}
-
-/* adjust IEs for rtw_joinbss_cmd in WMM */
-int rtw_restruct_wmm_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_len, uint initial_out_len)
-{
-       unsigned        int ielength = 0;
-       unsigned int i, j;
-
-       i = 12; /* after the fixed IE */
-       while (i < in_len) {
-               ielength = initial_out_len;
-
-               if (in_ie[i] == 0xDD && in_ie[i + 2] == 0x00 && in_ie[i + 3] == 0x50  && in_ie[i + 4] == 0xF2 && in_ie[i + 5] == 0x02 && i + 5 < in_len) {
-                       /* WMM element ID and OUI */
-                       /* Append WMM IE to the last index of out_ie */
-
-                       for (j = i; j < i + 9; j++) {
-                               out_ie[ielength] = in_ie[j];
-                               ielength++;
-                       }
-                       out_ie[initial_out_len + 1] = 0x07;
-                       out_ie[initial_out_len + 6] = 0x00;
-                       out_ie[initial_out_len + 8] = 0x00;
-                       break;
-               }
-               i += (in_ie[i + 1] + 2); /*  to the next IE element */
-       }
-       return ielength;
-}
-
-/*  */
-/*  Search by BSSID, */
-/*  Return Value: */
-/*             -1              :if there is no pre-auth key in the  table */
-/*             >= 0            :if there is pre-auth key, and   return the entry id */
-/*  */
-/*  */
-
-static int SecIsInPMKIDList(struct adapter *Adapter, u8 *bssid)
-{
-       struct security_priv *p = &Adapter->securitypriv;
-       int i;
-
-       for (i = 0; i < NUM_PMKID_CACHE; i++)
-               if (p->PMKIDList[i].bUsed && !memcmp(p->PMKIDList[i].Bssid, bssid, ETH_ALEN))
-                       return i;
-       return -1;
-}
-
-/*  */
-/*  Check the RSN IE length */
-/*  If the RSN IE length <= 20, the RSN IE didn't include the PMKID information */
-/*  0-11th element in the array are the fixed IE */
-/*  12th element in the array is the IE */
-/*  13th element in the array is the IE length */
-/*  */
-
-static int rtw_append_pmkid(struct adapter *Adapter, int iEntry, u8 *ie, uint ie_len)
-{
-       struct security_priv *psecuritypriv = &Adapter->securitypriv;
-
-       if (ie[13] <= 20) {
-               /*  The RSN IE didn't include the PMK ID, append the PMK information */
-               ie[ie_len] = 1;
-               ie_len++;
-               ie[ie_len] = 0; /* PMKID count = 0x0100 */
-               ie_len++;
-               memcpy(&ie[ie_len], &psecuritypriv->PMKIDList[iEntry].PMKID, 16);
-
-               ie_len += 16;
-               ie[13] += 18;/* PMKID length = 2+16 */
-       }
-       return ie_len;
-}
-
-static void rtw_report_sec_ie(struct adapter *adapter, u8 authmode, u8 *sec_ie)
-{
-       uint len;
-       u8 *buff, *p, i;
-       union iwreq_data wrqu;
-
-       buff = NULL;
-       if (authmode == _WPA_IE_ID_) {
-               buff = kzalloc(IW_CUSTOM_MAX, GFP_ATOMIC);
-               if (!buff)
-                       return;
-               p = buff;
-               p += sprintf(p, "ASSOCINFO(ReqIEs =");
-               len = sec_ie[1] + 2;
-               len =  (len < IW_CUSTOM_MAX) ? len : IW_CUSTOM_MAX;
-               for (i = 0; i < len; i++)
-                       p += sprintf(p, "%02x", sec_ie[i]);
-               p += sprintf(p, ")");
-               memset(&wrqu, 0, sizeof(wrqu));
-               wrqu.data.length = p - buff;
-               wrqu.data.length = (wrqu.data.length < IW_CUSTOM_MAX) ?
-                                  wrqu.data.length : IW_CUSTOM_MAX;
-               wireless_send_event(adapter->pnetdev, IWEVCUSTOM, &wrqu, buff);
-               kfree(buff);
-       }
-}
-
-int rtw_restruct_sec_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_len)
-{
-       u8 authmode = 0;
-       uint    ielength;
-       int iEntry;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct security_priv *psecuritypriv = &adapter->securitypriv;
-       uint    ndisauthmode = psecuritypriv->ndisauthtype;
-
-       /* copy fixed ie only */
-       memcpy(out_ie, in_ie, 12);
-       ielength = 12;
-       if ((ndisauthmode == Ndis802_11AuthModeWPA) ||
-           (ndisauthmode == Ndis802_11AuthModeWPAPSK))
-                       authmode = _WPA_IE_ID_;
-       if ((ndisauthmode == Ndis802_11AuthModeWPA2) ||
-           (ndisauthmode == Ndis802_11AuthModeWPA2PSK))
-               authmode = _WPA2_IE_ID_;
-
-       if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) {
-               memcpy(out_ie + ielength, psecuritypriv->wps_ie, psecuritypriv->wps_ie_len);
-
-               ielength += psecuritypriv->wps_ie_len;
-       } else if ((authmode == _WPA_IE_ID_) || (authmode == _WPA2_IE_ID_)) {
-               /* copy RSN or SSN */
-               memcpy(&out_ie[ielength], &psecuritypriv->supplicant_ie[0], psecuritypriv->supplicant_ie[1] + 2);
-               ielength += psecuritypriv->supplicant_ie[1] + 2;
-               rtw_report_sec_ie(adapter, authmode, psecuritypriv->supplicant_ie);
-       }
-
-       iEntry = SecIsInPMKIDList(adapter, pmlmepriv->assoc_bssid);
-       if (iEntry < 0) {
-               return ielength;
-       } else {
-               if (authmode == _WPA2_IE_ID_)
-                       ielength = rtw_append_pmkid(adapter, iEntry, out_ie, ielength);
-       }
-
-       return ielength;
-}
-
-void rtw_init_registrypriv_dev_network(struct adapter *adapter)
-{
-       struct registry_priv *pregistrypriv = &adapter->registrypriv;
-       struct eeprom_priv *peepriv = &adapter->eeprompriv;
-       struct wlan_bssid_ex    *pdev_network = &pregistrypriv->dev_network;
-       u8 *myhwaddr = myid(peepriv);
-
-       memcpy(pdev_network->MacAddress, myhwaddr, ETH_ALEN);
-
-       memcpy(&pdev_network->Ssid, &pregistrypriv->ssid, sizeof(struct ndis_802_11_ssid));
-
-       pdev_network->Configuration.Length = sizeof(struct ndis_802_11_config);
-       pdev_network->Configuration.BeaconPeriod = 100;
-       pdev_network->Configuration.FHConfig.Length = 0;
-       pdev_network->Configuration.FHConfig.HopPattern = 0;
-       pdev_network->Configuration.FHConfig.HopSet = 0;
-       pdev_network->Configuration.FHConfig.DwellTime = 0;
-
-}
-
-void rtw_update_registrypriv_dev_network(struct adapter *adapter)
-{
-       int sz = 0;
-       struct registry_priv *pregistrypriv = &adapter->registrypriv;
-       struct wlan_bssid_ex    *pdev_network = &pregistrypriv->dev_network;
-       struct  security_priv *psecuritypriv = &adapter->securitypriv;
-       struct  wlan_network    *cur_network = &adapter->mlmepriv.cur_network;
-
-       pdev_network->Privacy = (psecuritypriv->dot11PrivacyAlgrthm > 0 ? 1 : 0); /*  adhoc no 802.1x */
-
-       pdev_network->Rssi = 0;
-
-       pdev_network->Configuration.DSConfig = (pregistrypriv->channel);
-
-       if (cur_network->network.InfrastructureMode == Ndis802_11IBSS)
-               pdev_network->Configuration.ATIMWindow = (0);
-
-       pdev_network->InfrastructureMode = (cur_network->network.InfrastructureMode);
-
-       /*  1. Supported rates */
-       /*  2. IE */
-
-       sz = rtw_generate_ie(pregistrypriv);
-       pdev_network->IELength = sz;
-       pdev_network->Length = get_wlan_bssid_ex_sz((struct wlan_bssid_ex  *)pdev_network);
-
-       /* notes: translate IELength & Length after assign the Length to cmdsz in createbss_cmd(); */
-       /* pdev_network->IELength = cpu_to_le32(sz); */
-
-}
-
-static void rtw_set_threshold(struct adapter *adapter)
-{
-       struct mlme_priv *mlmepriv = &adapter->mlmepriv;
-       struct ht_priv *htpriv = &mlmepriv->htpriv;
-
-       if (htpriv->ht_option && adapter->registrypriv.wifi_spec != 1) {
-               /* validate usb rx aggregation, use init value. */
-               rtw_write8(adapter, REG_RXDMA_AGG_PG_TH, USB_RXAGG_PAGE_COUNT);
-       } else {
-               /* invalidate usb rx aggregation */
-               rtw_write8(adapter, REG_RXDMA_AGG_PG_TH, 1);
-       }
-}
-
-/* the function is at passive_level */
-void rtw_joinbss_reset(struct adapter *padapter)
-{
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv          *phtpriv = &pmlmepriv->htpriv;
-
-       /* todo: if you want to do something io/reg/hw setting before join_bss, please add code here */
-       pmlmepriv->num_FortyMHzIntolerant = 0;
-
-       pmlmepriv->num_sta_no_ht = 0;
-
-       phtpriv->ampdu_enable = false;/* reset to disabled */
-
-       rtw_set_threshold(padapter);
-}
-
-/* the function is >= passive_level */
-unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len)
-{
-       u32 ielen, out_len;
-       unsigned char *p;
-       struct ieee80211_ht_cap ht_capie;
-       unsigned char WMM_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00};
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       struct qos_priv         *pqospriv = &pmlmepriv->qospriv;
-       struct ht_priv          *phtpriv = &pmlmepriv->htpriv;
-
-       phtpriv->ht_option = false;
-
-       p = rtw_get_ie(in_ie + 12, _HT_CAPABILITY_IE_, &ielen, in_len - 12);
-
-       if (p && ielen > 0) {
-               if (pqospriv->qos_option == 0) {
-                       out_len = *pout_len;
-                       rtw_set_ie(out_ie + out_len, _VENDOR_SPECIFIC_IE_,
-                                  _WMM_IE_Length_, WMM_IE, pout_len);
-
-                       pqospriv->qos_option = 1;
-               }
-
-               out_len = *pout_len;
-
-               memset(&ht_capie, 0, sizeof(struct ieee80211_ht_cap));
-
-               ht_capie.cap_info = cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
-                                               IEEE80211_HT_CAP_SGI_20 |
-                                               IEEE80211_HT_CAP_SGI_40 |
-                                               IEEE80211_HT_CAP_TX_STBC |
-                                               IEEE80211_HT_CAP_DSSSCCK40);
-
-               /*
-               AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
-               AMPDU_para [4:2]:Min MPDU Start Spacing
-               */
-
-               ht_capie.ampdu_params_info = (MAX_AMPDU_FACTOR_64K & 0x03);
-
-               if (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)
-                       ht_capie.ampdu_params_info |= (IEEE80211_HT_AMPDU_PARM_DENSITY & (0x07 << 2));
-               else
-                       ht_capie.ampdu_params_info |= (IEEE80211_HT_AMPDU_PARM_DENSITY & 0x00);
-
-               rtw_set_ie(out_ie + out_len, _HT_CAPABILITY_IE_,
-                          sizeof(struct ieee80211_ht_cap), (unsigned char *)&ht_capie, pout_len);
-
-               phtpriv->ht_option = true;
-
-               p = rtw_get_ie(in_ie + 12, _HT_ADD_INFO_IE_, &ielen, in_len - 12);
-               if (p && (ielen == sizeof(struct ieee80211_ht_addt_info))) {
-                       out_len = *pout_len;
-                       rtw_set_ie(out_ie + out_len, _HT_ADD_INFO_IE_, ielen, p + 2, pout_len);
-               }
-       }
-       return phtpriv->ht_option;
-}
-
-/* the function is > passive_level (in critical_section) */
-void rtw_update_ht_cap(struct adapter *padapter, u8 *pie, uint ie_len)
-{
-       u8 *p, max_ampdu_sz;
-       int len;
-       struct ieee80211_ht_cap *pht_capie;
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv          *phtpriv = &pmlmepriv->htpriv;
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (!phtpriv->ht_option)
-               return;
-
-       if ((!pmlmeinfo->HT_info_enable) || (!pmlmeinfo->HT_caps_enable))
-               return;
-
-       /* maybe needs check if ap supports rx ampdu. */
-       if ((!phtpriv->ampdu_enable) && (pregistrypriv->ampdu_enable == 1)) {
-               if (pregistrypriv->wifi_spec == 1)
-                       phtpriv->ampdu_enable = false;
-               else
-                       phtpriv->ampdu_enable = true;
-       } else if (pregistrypriv->ampdu_enable == 2) {
-               phtpriv->ampdu_enable = true;
-       }
-
-       /* check Max Rx A-MPDU Size */
-       len = 0;
-       p = rtw_get_ie(pie + sizeof(struct ndis_802_11_fixed_ie), _HT_CAPABILITY_IE_, &len, ie_len - sizeof(struct ndis_802_11_fixed_ie));
-       if (p && len > 0) {
-               pht_capie = (struct ieee80211_ht_cap *)(p + 2);
-               max_ampdu_sz = (pht_capie->ampdu_params_info & IEEE80211_HT_AMPDU_PARM_FACTOR);
-               max_ampdu_sz = 1 << (max_ampdu_sz + 3); /*  max_ampdu_sz (kbytes); */
-               phtpriv->rx_ampdu_maxlen = max_ampdu_sz;
-       }
-       len = 0;
-       p = rtw_get_ie(pie + sizeof(struct ndis_802_11_fixed_ie), _HT_ADD_INFO_IE_, &len, ie_len - sizeof(struct ndis_802_11_fixed_ie));
-
-       /* update cur_bwmode & cur_ch_offset */
-       if ((pregistrypriv->cbw40_enable) &&
-           (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & BIT(1)) &&
-           (pmlmeinfo->HT_info.infos[0] & BIT(2))) {
-               int i;
-
-               /* update the MCS rates */
-               for (i = 0; i < 16; i++)
-                       pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
-
-               /* switch to the 40M Hz mode according to the AP */
-               pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
-               switch ((pmlmeinfo->HT_info.infos[0] & 0x3)) {
-               case HT_EXTCHNL_OFFSET_UPPER:
-                       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
-                       break;
-               case HT_EXTCHNL_OFFSET_LOWER:
-                       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
-                       break;
-               default:
-                       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-                       break;
-               }
-       }
-
-       /*  Config SM Power Save setting */
-       pmlmeinfo->SM_PS = (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & 0x0C) >> 2;
-
-       /*  Config current HT Protection mode. */
-       pmlmeinfo->HT_protection = pmlmeinfo->HT_info.infos[1] & 0x3;
-}
-
-void rtw_issue_addbareq_cmd(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
-       u8 issued;
-       int priority;
-       struct sta_info *psta = NULL;
-       struct ht_priv  *phtpriv;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-
-       if (is_multicast_ether_addr(pattrib->ra) ||
-           padapter->mlmepriv.LinkDetectInfo.NumTxOkInPeriod < 100)
-               return;
-
-       priority = pattrib->priority;
-
-       if (pattrib->psta)
-               psta = pattrib->psta;
-       else
-               psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
-
-       if (!psta)
-               return;
-
-       phtpriv = &psta->htpriv;
-
-       if ((phtpriv->ht_option) && (phtpriv->ampdu_enable)) {
-               issued = (phtpriv->agg_enable_bitmap >> priority) & 0x1;
-               issued |= (phtpriv->candidate_tid_bitmap >> priority) & 0x1;
-
-               if (issued == 0) {
-                       psta->htpriv.candidate_tid_bitmap |= BIT((u8)priority);
-                       rtw_addbareq_cmd(padapter, (u8)priority, pattrib->ra);
-               }
-       }
-}
-
-void rtw_roaming(struct adapter *padapter, struct wlan_network *tgt_network)
-{
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-
-       spin_lock_bh(&pmlmepriv->lock);
-       _rtw_roaming(padapter, tgt_network);
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-void _rtw_roaming(struct adapter *padapter, struct wlan_network *tgt_network)
-{
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       int do_join_r;
-
-       struct wlan_network *pnetwork;
-
-       if (tgt_network)
-               pnetwork = tgt_network;
-       else
-               pnetwork = &pmlmepriv->cur_network;
-
-       if (rtw_to_roaming(padapter) > 0) {
-               memcpy(&pmlmepriv->assoc_ssid, &pnetwork->network.Ssid, sizeof(struct ndis_802_11_ssid));
-
-               pmlmepriv->assoc_by_bssid = false;
-
-               while (1) {
-                       do_join_r = rtw_do_join(padapter);
-                       if (do_join_r == _SUCCESS) {
-                               break;
-                       } else {
-                               pmlmepriv->to_roaming--;
-
-                               if (pmlmepriv->to_roaming > 0) {
-                                       continue;
-                               } else {
-                                       rtw_indicate_disconnect(padapter);
-                                       break;
-                               }
-                       }
-               }
-       }
-}
diff --git a/drivers/staging/r8188eu/core/rtw_mlme_ext.c b/drivers/staging/r8188eu/core/rtw_mlme_ext.c
deleted file mode 100644 (file)
index dc181e4..0000000
+++ /dev/null
@@ -1,7817 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#define _RTW_MLME_EXT_C_
-
-#include <linux/ieee80211.h>
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/wifi.h"
-#include "../include/rtw_mlme_ext.h"
-#include "../include/wlan_bssdef.h"
-#include "../include/rtl8188e_xmit.h"
-#include "../include/rtl8188e_dm.h"
-
-static u8 null_addr[ETH_ALEN] = {0, 0, 0, 0, 0, 0};
-
-/**************************************************
-OUI definitions for the vendor specific IE
-***************************************************/
-unsigned char  RTW_WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01};
-unsigned char WMM_OUI[] = {0x00, 0x50, 0xf2, 0x02};
-unsigned char  WPS_OUI[] = {0x00, 0x50, 0xf2, 0x04};
-unsigned char  P2P_OUI[] = {0x50, 0x6F, 0x9A, 0x09};
-unsigned char  WFD_OUI[] = {0x50, 0x6F, 0x9A, 0x0A};
-
-unsigned char  WMM_INFO_OUI[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01};
-unsigned char  WMM_PARA_OUI[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
-
-unsigned char WPA_TKIP_CIPHER[4] = {0x00, 0x50, 0xf2, 0x02};
-unsigned char RSN_TKIP_CIPHER[4] = {0x00, 0x0f, 0xac, 0x02};
-
-extern unsigned char REALTEK_96B_IE[];
-
-/********************************************************
-MCS rate definitions
-*********************************************************/
-unsigned char  MCS_rate_1R[16] = {0xff, 0x00, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
-
-/********************************************************
-ChannelPlan definitions
-*********************************************************/
-static struct rt_channel_plan RTW_ChannelPlan2G[RT_CHANNEL_DOMAIN_2G_MAX] = {
-       {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13},              /*  0x00, RT_CHANNEL_DOMAIN_2G_WORLD , Passive scan CH 12, 13 */
-       {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13},              /*  0x01, RT_CHANNEL_DOMAIN_2G_ETSI1 */
-       {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, 11},                      /*  0x02, RT_CHANNEL_DOMAIN_2G_FCC1 */
-       {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, 14},  /*  0x03, RT_CHANNEL_DOMAIN_2G_MIKK1 */
-       {{10, 11, 12, 13}, 4},                                  /*  0x04, RT_CHANNEL_DOMAIN_2G_ETSI2 */
-       {{}, 0},                                                                        /*  0x05, RT_CHANNEL_DOMAIN_2G_NULL */
-};
-
-static struct rt_channel_plan_map      RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = {
-       /*  0x00 ~ 0x1F , Old Define ===== */
-       {0x02}, /* 0x00, RT_CHANNEL_DOMAIN_FCC */
-       {0x02}, /* 0x01, RT_CHANNEL_DOMAIN_IC */
-       {0x01}, /* 0x02, RT_CHANNEL_DOMAIN_ETSI */
-       {0x01}, /* 0x03, RT_CHANNEL_DOMAIN_SPAIN */
-       {0x01}, /* 0x04, RT_CHANNEL_DOMAIN_FRANCE */
-       {0x03}, /* 0x05, RT_CHANNEL_DOMAIN_MKK */
-       {0x03}, /* 0x06, RT_CHANNEL_DOMAIN_MKK1 */
-       {0x01}, /* 0x07, RT_CHANNEL_DOMAIN_ISRAEL */
-       {0x03}, /* 0x08, RT_CHANNEL_DOMAIN_TELEC */
-       {0x03}, /* 0x09, RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN */
-       {0x00}, /* 0x0A, RT_CHANNEL_DOMAIN_WORLD_WIDE_13 */
-       {0x02}, /* 0x0B, RT_CHANNEL_DOMAIN_TAIWAN */
-       {0x01}, /* 0x0C, RT_CHANNEL_DOMAIN_CHINA */
-       {0x02}, /* 0x0D, RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO */
-       {0x02}, /* 0x0E, RT_CHANNEL_DOMAIN_KOREA */
-       {0x02}, /* 0x0F, RT_CHANNEL_DOMAIN_TURKEY */
-       {0x01}, /* 0x10, RT_CHANNEL_DOMAIN_JAPAN */
-       {0x02}, /* 0x11, RT_CHANNEL_DOMAIN_FCC_NO_DFS */
-       {0x01}, /* 0x12, RT_CHANNEL_DOMAIN_JAPAN_NO_DFS */
-       {0x00}, /* 0x13 */
-       {0x02}, /* 0x14, RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS */
-       {0x00}, /* 0x15, RT_CHANNEL_DOMAIN_ETSI_NO_DFS */
-       {0x00}, /* 0x16, RT_CHANNEL_DOMAIN_KOREA_NO_DFS */
-       {0x03}, /* 0x17, RT_CHANNEL_DOMAIN_JAPAN_NO_DFS */
-       {0x05}, /* 0x18, RT_CHANNEL_DOMAIN_PAKISTAN_NO_DFS */
-       {0x02}, /* 0x19, RT_CHANNEL_DOMAIN_TAIWAN2_NO_DFS */
-       {0x00}, /* 0x1A, */
-       {0x00}, /* 0x1B, */
-       {0x00}, /* 0x1C, */
-       {0x00}, /* 0x1D, */
-       {0x00}, /* 0x1E, */
-       {0x00}, /* 0x1F, */
-       /*  0x20 ~ 0x7F , New Define ===== */
-       {0x00}, /* 0x20, RT_CHANNEL_DOMAIN_WORLD_NULL */
-       {0x01}, /* 0x21, RT_CHANNEL_DOMAIN_ETSI1_NULL */
-       {0x02}, /* 0x22, RT_CHANNEL_DOMAIN_FCC1_NULL */
-       {0x03}, /* 0x23, RT_CHANNEL_DOMAIN_MKK1_NULL */
-       {0x04}, /* 0x24, RT_CHANNEL_DOMAIN_ETSI2_NULL */
-       {0x02}, /* 0x25, RT_CHANNEL_DOMAIN_FCC1_FCC1 */
-       {0x00}, /* 0x26, RT_CHANNEL_DOMAIN_WORLD_ETSI1 */
-       {0x03}, /* 0x27, RT_CHANNEL_DOMAIN_MKK1_MKK1 */
-       {0x00}, /* 0x28, RT_CHANNEL_DOMAIN_WORLD_KCC1 */
-       {0x00}, /* 0x29, RT_CHANNEL_DOMAIN_WORLD_FCC2 */
-       {0x00}, /* 0x2A, */
-       {0x00}, /* 0x2B, */
-       {0x00}, /* 0x2C, */
-       {0x00}, /* 0x2D, */
-       {0x00}, /* 0x2E, */
-       {0x00}, /* 0x2F, */
-       {0x00}, /* 0x30, RT_CHANNEL_DOMAIN_WORLD_FCC3 */
-       {0x00}, /* 0x31, RT_CHANNEL_DOMAIN_WORLD_FCC4 */
-       {0x00}, /* 0x32, RT_CHANNEL_DOMAIN_WORLD_FCC5 */
-       {0x00}, /* 0x33, RT_CHANNEL_DOMAIN_WORLD_FCC6 */
-       {0x02}, /* 0x34, RT_CHANNEL_DOMAIN_FCC1_FCC7 */
-       {0x00}, /* 0x35, RT_CHANNEL_DOMAIN_WORLD_ETSI2 */
-       {0x00}, /* 0x36, RT_CHANNEL_DOMAIN_WORLD_ETSI3 */
-       {0x03}, /* 0x37, RT_CHANNEL_DOMAIN_MKK1_MKK2 */
-       {0x03}, /* 0x38, RT_CHANNEL_DOMAIN_MKK1_MKK3 */
-       {0x02}, /* 0x39, RT_CHANNEL_DOMAIN_FCC1_NCC1 */
-       {0x00}, /* 0x3A, */
-       {0x00}, /* 0x3B, */
-       {0x00}, /* 0x3C, */
-       {0x00}, /* 0x3D, */
-       {0x00}, /* 0x3E, */
-       {0x00}, /* 0x3F, */
-       {0x02}, /* 0x40, RT_CHANNEL_DOMAIN_FCC1_NCC2 */
-       {0x03}, /* 0x41, RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN_2G */
-};
-
-static struct rt_channel_plan_map RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = {0x03}; /* use the combination for max channel numbers */
-
-/*
- * Search the @param channel_num in given @param channel_set
- * @ch_set: the given channel set
- * @ch: the given channel number
- *
- * return the index of channel_num in channel_set, -1 if not found
- */
-int rtw_ch_set_search_ch(struct rt_channel_info *ch_set, const u32 ch)
-{
-       int i;
-       for (i = 0; ch_set[i].ChannelNum != 0; i++) {
-               if (ch == ch_set[i].ChannelNum)
-                       break;
-       }
-
-       if (i >= ch_set[i].ChannelNum)
-               return -1;
-       return i;
-}
-
-/****************************************************************************
-
-Following are the initialization functions for WiFi MLME
-
-*****************************************************************************/
-
-int init_hw_mlme_ext(struct adapter *padapter)
-{
-       struct  mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-       return _SUCCESS;
-}
-
-static void init_mlme_ext_priv_value(struct adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       unsigned char   mixed_datarate[NumRates] = {
-               _1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_,
-               _9M_RATE_, _12M_RATE_, _18M_RATE_, _24M_RATE_, _36M_RATE_,
-                _48M_RATE_, _54M_RATE_, 0xff
-       };
-       unsigned char   mixed_basicrate[NumRates] = {
-               _1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_,
-               _12M_RATE_, _24M_RATE_, 0xff,
-       };
-
-       atomic_set(&pmlmeext->event_seq, 0);
-       pmlmeext->mgnt_seq = 0;/* reset to zero when disconnect at client mode */
-
-       pmlmeext->cur_channel = padapter->registrypriv.channel;
-       pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
-       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-       pmlmeext->retry = 0;
-
-       pmlmeext->cur_wireless_mode = padapter->registrypriv.wireless_mode;
-
-       memcpy(pmlmeext->datarate, mixed_datarate, NumRates);
-       memcpy(pmlmeext->basicrate, mixed_basicrate, NumRates);
-
-       pmlmeext->tx_rate = IEEE80211_CCK_RATE_1MB;
-
-       pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
-       pmlmeext->sitesurvey_res.channel_idx = 0;
-       pmlmeext->sitesurvey_res.bss_cnt = 0;
-       pmlmeext->scan_abort = false;
-
-       pmlmeinfo->state = WIFI_FW_NULL_STATE;
-       pmlmeinfo->reauth_count = 0;
-       pmlmeinfo->reassoc_count = 0;
-       pmlmeinfo->link_count = 0;
-       pmlmeinfo->auth_seq = 0;
-       pmlmeinfo->auth_algo = dot11AuthAlgrthm_Open;
-       pmlmeinfo->key_index = 0;
-       pmlmeinfo->iv = 0;
-
-       pmlmeinfo->enc_algo = _NO_PRIVACY_;
-       pmlmeinfo->authModeToggle = 0;
-
-       memset(pmlmeinfo->chg_txt, 0, 128);
-
-       pmlmeinfo->slotTime = SHORT_SLOT_TIME;
-       pmlmeinfo->preamble_mode = PREAMBLE_AUTO;
-
-       pmlmeinfo->dialogToken = 0;
-
-       pmlmeext->action_public_rxseq = 0xffff;
-       pmlmeext->action_public_dialog_token = 0xff;
-}
-
-static int has_channel(struct rt_channel_info *channel_set,
-                                          u8 chanset_size,
-                                          u8 chan)
-{
-       int i;
-
-       for (i = 0; i < chanset_size; i++) {
-               if (channel_set[i].ChannelNum == chan)
-                       return 1;
-       }
-       return 0;
-}
-
-static void init_channel_list(struct adapter *padapter, struct rt_channel_info *channel_set,
-                                                         u8 chanset_size,
-                                                         struct p2p_channels *channel_list)
-{
-       struct p2p_oper_class_map op_class[] = {
-               { IEEE80211G,  81,   1,  13,  1, BW20 },
-               { IEEE80211G,  82,  14,  14,  1, BW20 },
-               { -1, 0, 0, 0, 0, BW20 }
-       };
-
-       int cla, op;
-
-       cla = 0;
-
-       for (op = 0; op_class[op].op_class; op++) {
-               u8 ch;
-               struct p2p_oper_class_map *o = &op_class[op];
-               struct p2p_reg_class *reg = NULL;
-
-               for (ch = o->min_chan; ch <= o->max_chan; ch += o->inc) {
-                       if (!has_channel(channel_set, chanset_size, ch)) {
-                               continue;
-                       }
-
-                       if ((padapter->registrypriv.ht_enable == 0) && (o->inc == 8))
-                               continue;
-
-                       if (((padapter->registrypriv.cbw40_enable & BIT(1)) == 0) &&
-                           ((o->bw == BW40MINUS) || (o->bw == BW40PLUS)))
-                               continue;
-
-                       if (!reg) {
-                               reg = &channel_list->reg_class[cla];
-                               cla++;
-                               reg->reg_class = o->op_class;
-                               reg->channels = 0;
-                       }
-                       reg->channel[reg->channels] = ch;
-                       reg->channels++;
-               }
-       }
-       channel_list->reg_classes = cla;
-}
-
-static u8 init_channel_set(struct adapter *padapter, u8 ChannelPlan, struct rt_channel_info *channel_set)
-{
-       u8 index, chanset_size = 0;
-       u8 b2_4GBand = false;
-       u8 Index2G = 0;
-
-       memset(channel_set, 0, sizeof(struct rt_channel_info) * MAX_CHANNEL_NUM);
-
-       if (ChannelPlan >= RT_CHANNEL_DOMAIN_MAX && ChannelPlan != RT_CHANNEL_DOMAIN_REALTEK_DEFINE)
-               return chanset_size;
-
-       if (padapter->registrypriv.wireless_mode & WIRELESS_11G) {
-               b2_4GBand = true;
-               if (ChannelPlan == RT_CHANNEL_DOMAIN_REALTEK_DEFINE)
-                       Index2G = RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE.Index2G;
-               else
-                       Index2G = RTW_ChannelPlanMap[ChannelPlan].Index2G;
-       }
-
-       if (b2_4GBand) {
-               for (index = 0; index < RTW_ChannelPlan2G[Index2G].Len; index++) {
-                       channel_set[chanset_size].ChannelNum = RTW_ChannelPlan2G[Index2G].Channel[index];
-
-                       if ((ChannelPlan == RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN) ||/* Channel 1~11 is active, and 12~14 is passive */
-                           (ChannelPlan == RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN_2G)) {
-                               if (channel_set[chanset_size].ChannelNum >= 1 && channel_set[chanset_size].ChannelNum <= 11)
-                                       channel_set[chanset_size].ScanType = SCAN_ACTIVE;
-                               else if ((channel_set[chanset_size].ChannelNum  >= 12 && channel_set[chanset_size].ChannelNum  <= 14))
-                                       channel_set[chanset_size].ScanType  = SCAN_PASSIVE;
-                       } else if (ChannelPlan == RT_CHANNEL_DOMAIN_WORLD_WIDE_13 ||
-                                  Index2G == RT_CHANNEL_DOMAIN_2G_WORLD) {/*  channel 12~13, passive scan */
-                               if (channel_set[chanset_size].ChannelNum <= 11)
-                                       channel_set[chanset_size].ScanType = SCAN_ACTIVE;
-                               else
-                                       channel_set[chanset_size].ScanType = SCAN_PASSIVE;
-                       } else {
-                               channel_set[chanset_size].ScanType = SCAN_ACTIVE;
-                       }
-
-                       chanset_size++;
-               }
-       }
-       return chanset_size;
-}
-
-static void _survey_timer_hdl(struct timer_list *t)
-{
-       struct adapter *padapter = from_timer(padapter, t, mlmeextpriv.survey_timer);
-
-       survey_timer_hdl(padapter);
-}
-
-static void _link_timer_hdl(struct timer_list *t)
-{
-       struct adapter *padapter = from_timer(padapter, t, mlmeextpriv.link_timer);
-
-       link_timer_hdl(padapter);
-}
-
-static void init_mlme_ext_timer(struct adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       timer_setup(&pmlmeext->survey_timer, _survey_timer_hdl, 0);
-       timer_setup(&pmlmeext->link_timer, _link_timer_hdl, 0);
-}
-
-void init_mlme_ext_priv(struct adapter *padapter)
-{
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pmlmeext->padapter = padapter;
-
-       init_mlme_ext_priv_value(padapter);
-       pmlmeinfo->bAcceptAddbaReq = pregistrypriv->bAcceptAddbaReq;
-
-       init_mlme_ext_timer(padapter);
-
-       init_mlme_ap_info(padapter);
-
-       pmlmeext->max_chan_nums = init_channel_set(padapter, pmlmepriv->ChannelPlan, pmlmeext->channel_set);
-       init_channel_list(padapter, pmlmeext->channel_set, pmlmeext->max_chan_nums, &pmlmeext->channel_list);
-
-       pmlmeext->chan_scan_time = SURVEY_TO;
-       pmlmeext->mlmeext_init = true;
-
-       pmlmeext->active_keep_alive_check = true;
-}
-
-void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext)
-{
-       struct adapter *padapter = pmlmeext->padapter;
-
-       if (!padapter)
-               return;
-
-       if (padapter->bDriverStopped) {
-               _cancel_timer_ex(&pmlmeext->survey_timer);
-               _cancel_timer_ex(&pmlmeext->link_timer);
-               /* _cancel_timer_ex(&pmlmeext->ADDBA_timer); */
-       }
-}
-
-static u32 p2p_listen_state_process(struct adapter *padapter, unsigned char *da)
-{
-       bool response = true;
-
-       /*      do nothing if the device name is empty */
-       if (!padapter->wdinfo.device_name_len)
-               response = false;
-
-       if (response)
-               issue_probersp_p2p(padapter, da);
-
-       return _SUCCESS;
-}
-
-static void correct_TSF(struct adapter *padapter)
-{
-       u8 reg;
-       int res;
-       u64 tsf;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       tsf = pmlmeext->TSFValue - do_div(pmlmeext->TSFValue,
-                                         pmlmeinfo->bcn_interval * 1024) - 1024; /* us */
-
-       if (((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) ||
-           ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE))
-               rtw_stop_tx_beacon(padapter);
-
-       /* disable related TSF function */
-       res = rtw_read8(padapter, REG_BCN_CTRL, &reg);
-       if (res)
-               return;
-
-       rtw_write8(padapter, REG_BCN_CTRL, reg & (~BIT(3)));
-
-       rtw_write32(padapter, REG_TSFTR, tsf);
-       rtw_write32(padapter, REG_TSFTR + 4, tsf >> 32);
-
-       /* enable related TSF function */
-       res = rtw_read8(padapter, REG_BCN_CTRL, &reg);
-       if (res)
-               return;
-
-       rtw_write8(padapter, REG_BCN_CTRL, reg | BIT(3));
-
-       if (((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) ||
-           ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE))
-               rtw_resume_tx_beacon(padapter);
-}
-
-/****************************************************************************
-
-Following are the callback functions for each subtype of the management frames
-
-*****************************************************************************/
-
-static void OnProbeReq(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       unsigned int    ielen;
-       unsigned char   *p;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur = &pmlmeinfo->network;
-       u8 *pframe = precv_frame->rx_data;
-       uint len = precv_frame->len;
-       u8 is_valid_p2p_probereq = false;
-
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) &&
-           !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE) &&
-           !rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT) &&
-           !rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH) &&
-           !rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN)) {
-               /*      mcs_rate = 0 -> CCK 1M rate */
-               /*      mcs_rate = 1 -> CCK 2M rate */
-               /*      mcs_rate = 2 -> CCK 5.5M rate */
-               /*      mcs_rate = 3 -> CCK 11M rate */
-               /*      In the P2P mode, the driver should not support the CCK rate */
-
-               /*      Commented by Kurt 2012/10/16 */
-               /*      IOT issue: Google Nexus7 use 1M rate to send p2p_probe_req after GO nego completed and Nexus7 is client */
-               is_valid_p2p_probereq = process_probe_req_p2p_ie(pwdinfo, pframe, len);
-               if (is_valid_p2p_probereq) {
-                       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE)) {
-                               /*  FIXME */
-                               report_survey_event(padapter, precv_frame);
-                               p2p_listen_state_process(padapter,  get_sa(pframe));
-
-                               return;
-                       }
-               }
-       }
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
-               return;
-
-       if (!check_fwstate(pmlmepriv, _FW_LINKED) &&
-           !check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE | WIFI_AP_STATE))
-               return;
-
-       p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, _SSID_IE_, (int *)&ielen,
-                       len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_);
-
-       /* check (wildcard) SSID */
-       if (p) {
-               if (is_valid_p2p_probereq)
-                       goto _issue_probersp;
-
-               if ((ielen != 0 && memcmp((void *)(p + 2), (void *)cur->Ssid.Ssid, cur->Ssid.SsidLength)) ||
-                   (ielen == 0 && pmlmeinfo->hidden_ssid_mode))
-                       return;
-
-_issue_probersp:
-
-               if (check_fwstate(pmlmepriv, _FW_LINKED) &&
-                   (pmlmepriv->cur_network.join_res ||
-                   check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)))
-                       issue_probersp(padapter, get_sa(pframe), is_valid_p2p_probereq);
-       }
-}
-
-static void OnProbeRsp(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-       u8 *pframe = precv_frame->rx_data;
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ)) {
-               if (pwdinfo->tx_prov_disc_info.benable) {
-                       if (!memcmp(pwdinfo->tx_prov_disc_info.peerIFAddr, GetAddr2Ptr(pframe), ETH_ALEN)) {
-                               if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT)) {
-                                       pwdinfo->tx_prov_disc_info.benable = false;
-                                       issue_p2p_provision_request(padapter,
-                                                                   pwdinfo->tx_prov_disc_info.ssid.Ssid,
-                                                                   pwdinfo->tx_prov_disc_info.ssid.SsidLength,
-                                                                   pwdinfo->tx_prov_disc_info.peerDevAddr);
-                               } else if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-                                       pwdinfo->tx_prov_disc_info.benable = false;
-                                       issue_p2p_provision_request(padapter, NULL, 0,
-                                                                   pwdinfo->tx_prov_disc_info.peerDevAddr);
-                               }
-                       }
-               }
-               return;
-       } else if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING)) {
-               if (pwdinfo->nego_req_info.benable) {
-                       if (!memcmp(pwdinfo->nego_req_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN)) {
-                               pwdinfo->nego_req_info.benable = false;
-                               issue_p2p_GO_request(padapter, pwdinfo->nego_req_info.peerDevAddr);
-                       }
-               }
-       } else if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ)) {
-               if (pwdinfo->invitereq_info.benable) {
-                       if (!memcmp(pwdinfo->invitereq_info.peer_macaddr, GetAddr2Ptr(pframe), ETH_ALEN)) {
-                               pwdinfo->invitereq_info.benable = false;
-                               issue_p2p_invitation_request(padapter, pwdinfo->invitereq_info.peer_macaddr);
-                       }
-               }
-       }
-       if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
-               report_survey_event(padapter, precv_frame);
-               return;
-       }
-}
-
-static void OnBeacon(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)precv_frame->rx_data;
-       int cam_idx;
-       struct sta_info *psta;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       u8 *pframe = precv_frame->rx_data;
-       uint len = precv_frame->len;
-       struct wlan_bssid_ex *pbss;
-       u8 *ie_ptr;
-       u32 ie_len;
-
-       ie_ptr = (u8 *)&mgmt->u.beacon.variable;
-       if (precv_frame->len < offsetof(struct ieee80211_mgmt, u.beacon.variable))
-               return;
-       ie_len = precv_frame->len - offsetof(struct ieee80211_mgmt, u.beacon.variable);
-
-       if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
-               report_survey_event(padapter, precv_frame);
-               return;
-       }
-
-       if (memcmp(mgmt->bssid, get_my_bssid(&pmlmeinfo->network), ETH_ALEN))
-               return;
-
-       if (pmlmeinfo->state & WIFI_FW_AUTH_NULL) {
-               /* we should update current network before auth, or some IE is wrong */
-               pbss = kmalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC);
-               if (!pbss)
-                       return;
-
-               if (collect_bss_info(padapter, precv_frame, pbss) == _SUCCESS) {
-                       update_network(&pmlmepriv->cur_network.network, pbss, padapter, true);
-                       rtw_get_bcn_info(&pmlmepriv->cur_network);
-               }
-               kfree(pbss);
-
-               /* check the vendor of the assoc AP */
-               pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pframe + sizeof(struct ieee80211_hdr_3addr), len - sizeof(struct ieee80211_hdr_3addr));
-
-               pmlmeext->TSFValue = le64_to_cpu(mgmt->u.beacon.timestamp);
-
-               /* start auth */
-               start_clnt_auth(padapter);
-
-               return;
-       }
-
-       if (((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE) && (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)) {
-               psta = rtw_get_stainfo(pstapriv, mgmt->sa);
-               if (!psta)
-                       return;
-
-               if (rtw_check_bcn_info(padapter, pframe, len) != _SUCCESS) {
-                       receive_disconnect(padapter, pmlmeinfo->network.MacAddress, 0);
-                       return;
-               }
-               /* update WMM, ERP in the beacon */
-               /* todo: the timer is used instead of the number of the beacon received */
-               if ((sta_rx_pkts(psta) & 0xf) == 0)
-                       update_beacon_info(padapter, ie_ptr, ie_len, psta);
-               process_p2p_ps_ie(padapter, ie_ptr, ie_len);
-       } else if ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) {
-               psta = rtw_get_stainfo(pstapriv, mgmt->sa);
-               if (psta) {
-                       /* update WMM, ERP in the beacon */
-                       /* todo: the timer is used instead of the number of the beacon received */
-                       if ((sta_rx_pkts(psta) & 0xf) == 0)
-                               update_beacon_info(padapter, ie_ptr, ie_len, psta);
-               } else {
-                       /* allocate a new CAM entry for IBSS station */
-                       cam_idx = allocate_fw_sta_entry(padapter);
-                       if (cam_idx == NUM_STA)
-                               return;
-
-                       /* get supported rate */
-                       if (update_sta_support_rate(padapter, ie_ptr, ie_len, cam_idx) == _FAIL) {
-                               pmlmeinfo->FW_sta_info[cam_idx].status = 0;
-                               return;
-                       }
-
-                       pmlmeext->TSFValue = le64_to_cpu(mgmt->u.beacon.timestamp);
-
-                       report_add_sta_event(padapter, mgmt->sa, cam_idx);
-               }
-       }
-}
-
-static void OnAuth(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       unsigned int    auth_mode, ie_len;
-       u16 seq;
-       unsigned char   *sa, *p;
-       u16 algorithm;
-       int     status;
-       static struct sta_info stat;
-       struct  sta_info        *pstat = NULL;
-       struct  sta_priv *pstapriv = &padapter->stapriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       u8 *pframe = precv_frame->rx_data;
-       uint len = precv_frame->len;
-
-       if ((pmlmeinfo->state & 0x03) != WIFI_FW_AP_STATE)
-               return;
-
-       sa = GetAddr2Ptr(pframe);
-
-       auth_mode = psecuritypriv->dot11AuthAlgrthm;
-       seq = le16_to_cpu(*(__le16 *)((size_t)pframe + WLAN_HDR_A3_LEN + 2));
-       algorithm = le16_to_cpu(*(__le16 *)((size_t)pframe + WLAN_HDR_A3_LEN));
-
-       if (auth_mode == 2 && psecuritypriv->dot11PrivacyAlgrthm != _WEP40_ &&
-           psecuritypriv->dot11PrivacyAlgrthm != _WEP104_)
-               auth_mode = 0;
-
-       if ((algorithm > 0 && auth_mode == 0) ||        /*  rx a shared-key auth but shared not enabled */
-           (algorithm == 0 && auth_mode == 1)) {       /*  rx a open-system auth but shared-key is enabled */
-
-               status = _STATS_NO_SUPP_ALG_;
-
-               goto auth_fail;
-       }
-
-       if (!rtw_access_ctrl(padapter, sa)) {
-               status = _STATS_UNABLE_HANDLE_STA_;
-               goto auth_fail;
-       }
-
-       pstat = rtw_get_stainfo(pstapriv, sa);
-       if (!pstat) {
-               /*  allocate a new one */
-               pstat = rtw_alloc_stainfo(pstapriv, sa);
-               if (!pstat) {
-                       status = _STATS_UNABLE_HANDLE_STA_;
-                       goto auth_fail;
-               }
-
-               pstat->state = WIFI_FW_AUTH_NULL;
-               pstat->auth_seq = 0;
-       } else {
-               spin_lock_bh(&pstapriv->asoc_list_lock);
-               if (!list_empty(&pstat->asoc_list)) {
-                       list_del_init(&pstat->asoc_list);
-                       pstapriv->asoc_list_cnt--;
-               }
-               spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-               if (seq == 1) {
-                       /* TODO: STA re_auth and auth timeout */
-               }
-       }
-
-       spin_lock_bh(&pstapriv->auth_list_lock);
-       if (list_empty(&pstat->auth_list)) {
-               list_add_tail(&pstat->auth_list, &pstapriv->auth_list);
-               pstapriv->auth_list_cnt++;
-       }
-       spin_unlock_bh(&pstapriv->auth_list_lock);
-
-       if (pstat->auth_seq == 0)
-               pstat->expire_to = pstapriv->auth_to;
-
-       if ((pstat->auth_seq + 1) != seq) {
-               status = _STATS_OUT_OF_AUTH_SEQ_;
-               goto auth_fail;
-       }
-
-       if (algorithm == 0 && (auth_mode == 0 || auth_mode == 2)) {
-               if (seq == 1) {
-                       pstat->state &= ~WIFI_FW_AUTH_NULL;
-                       pstat->state |= WIFI_FW_AUTH_SUCCESS;
-                       pstat->expire_to = pstapriv->assoc_to;
-                       pstat->authalg = algorithm;
-               } else {
-                       status = _STATS_OUT_OF_AUTH_SEQ_;
-                       goto auth_fail;
-               }
-       } else { /*  shared system or auto authentication */
-               if (seq == 1) {
-                       /* prepare for the challenging txt... */
-
-                       pstat->state &= ~WIFI_FW_AUTH_NULL;
-                       pstat->state |= WIFI_FW_AUTH_STATE;
-                       pstat->authalg = algorithm;
-                       pstat->auth_seq = 2;
-               } else if (seq == 3) {
-                       /* checking for challenging txt... */
-
-                       p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + 4 + _AUTH_IE_OFFSET_, _CHLGETXT_IE_, (int *)&ie_len,
-                                       len - WLAN_HDR_A3_LEN - _AUTH_IE_OFFSET_ - 4);
-
-                       if (!p || ie_len <= 0) {
-                               status = _STATS_CHALLENGE_FAIL_;
-                               goto auth_fail;
-                       }
-
-                       if (!memcmp((void *)(p + 2), pstat->chg_txt, 128)) {
-                               pstat->state &= (~WIFI_FW_AUTH_STATE);
-                               pstat->state |= WIFI_FW_AUTH_SUCCESS;
-                               /*  challenging txt is correct... */
-                               pstat->expire_to =  pstapriv->assoc_to;
-                       } else {
-                               status = _STATS_CHALLENGE_FAIL_;
-                               goto auth_fail;
-                       }
-               } else {
-                       status = _STATS_OUT_OF_AUTH_SEQ_;
-                       goto auth_fail;
-               }
-       }
-
-       /*  Now, we are going to issue_auth... */
-       pstat->auth_seq = seq + 1;
-
-       issue_auth(padapter, pstat, (unsigned short)(_STATS_SUCCESSFUL_));
-
-       if (pstat->state & WIFI_FW_AUTH_SUCCESS)
-               pstat->auth_seq = 0;
-
-       return;
-
-auth_fail:
-
-       if (pstat)
-               rtw_free_stainfo(padapter, pstat);
-
-       pstat = &stat;
-       memset((char *)pstat, '\0', sizeof(stat));
-       pstat->auth_seq = 2;
-       memcpy(pstat->hwaddr, sa, 6);
-
-       issue_auth(padapter, pstat, (unsigned short)status);
-}
-
-static void OnAuthClient(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       unsigned int    seq, len, status, offset;
-       unsigned char   *p;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)precv_frame->rx_data;
-       u8 *pframe = precv_frame->rx_data;
-       uint pkt_len = precv_frame->len;
-
-       /* check A1 matches or not */
-       if (memcmp(myid(&padapter->eeprompriv), ieee80211_get_DA(hdr), ETH_ALEN))
-               return;
-
-       if (!(pmlmeinfo->state & WIFI_FW_AUTH_STATE))
-               return;
-
-       offset = ieee80211_has_protected(hdr->frame_control) ? 4 : 0;
-
-       seq     = le16_to_cpu(*(__le16 *)((size_t)pframe + WLAN_HDR_A3_LEN + offset + 2));
-       status  = le16_to_cpu(*(__le16 *)((size_t)pframe + WLAN_HDR_A3_LEN + offset + 4));
-
-       if (status != 0) {
-               if (status == 13) { /*  pmlmeinfo->auth_algo == dot11AuthAlgrthm_Auto) */
-                       if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared)
-                               pmlmeinfo->auth_algo = dot11AuthAlgrthm_Open;
-                       else
-                               pmlmeinfo->auth_algo = dot11AuthAlgrthm_Shared;
-               }
-
-               set_link_timer(pmlmeext, 1);
-               return;
-       }
-
-       if (seq == 2) {
-               if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared) {
-                        /*  legendary shared system */
-                       p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _AUTH_IE_OFFSET_, _CHLGETXT_IE_, (int *)&len,
-                               pkt_len - WLAN_HDR_A3_LEN - _AUTH_IE_OFFSET_);
-
-                       if (!p)
-                               return;
-
-                       memcpy((void *)(pmlmeinfo->chg_txt), (void *)(p + 2), len);
-                       pmlmeinfo->auth_seq = 3;
-                       issue_auth(padapter, NULL, 0);
-                       set_link_timer(pmlmeext, REAUTH_TO);
-
-                       return;
-               } else {
-                       /*  open system */
-                       start_clnt_assoc(padapter);
-               }
-       } else if (seq == 4) {
-               if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared)
-                       start_clnt_assoc(padapter);
-       }
-}
-
-static void UpdateBrateTbl(u8 *mbrate)
-{
-       u8 i;
-       u8 rate;
-
-       /*  1M, 2M, 5.5M, 11M, 6M, 12M, 24M are mandatory. */
-       for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
-               rate = mbrate[i] & 0x7f;
-               switch (rate) {
-               case IEEE80211_CCK_RATE_1MB:
-               case IEEE80211_CCK_RATE_2MB:
-               case IEEE80211_CCK_RATE_5MB:
-               case IEEE80211_CCK_RATE_11MB:
-               case IEEE80211_OFDM_RATE_6MB:
-               case IEEE80211_OFDM_RATE_12MB:
-               case IEEE80211_OFDM_RATE_24MB:
-                       mbrate[i] |= IEEE80211_BASIC_RATE_MASK;
-                       break;
-               }
-       }
-}
-
-static void UpdateBrateTblForSoftAP(u8 *bssrateset, u32 bssratelen)
-{
-       u8 i;
-       u8 rate;
-
-       for (i = 0; i < bssratelen; i++) {
-               rate = bssrateset[i] & 0x7f;
-               switch (rate) {
-               case IEEE80211_CCK_RATE_1MB:
-               case IEEE80211_CCK_RATE_2MB:
-               case IEEE80211_CCK_RATE_5MB:
-               case IEEE80211_CCK_RATE_11MB:
-                       bssrateset[i] |= IEEE80211_BASIC_RATE_MASK;
-                       break;
-               }
-       }
-}
-
-static void OnAssocReq(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       u16 capab_info;
-       struct rtw_ieee802_11_elems elems;
-       struct sta_info *pstat;
-       unsigned char           *p, *pos, *wpa_ie;
-       unsigned char WMM_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01};
-       int             i, ie_len, wpa_ie_len, left;
-       unsigned char           supportRate[16];
-       int                                     supportRateNum;
-       unsigned short          status = _STATS_SUCCESSFUL_;
-       unsigned short          frame_type, ie_offset = 0;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur = &pmlmeinfo->network;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       u8 *pframe = precv_frame->rx_data;
-       uint pkt_len = precv_frame->len;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-       u8 p2p_status_code = P2P_STATUS_SUCCESS;
-       u8 *p2pie;
-       u32 p2pielen = 0;
-
-       if ((pmlmeinfo->state & 0x03) != WIFI_FW_AP_STATE)
-               return;
-
-       frame_type = GetFrameSubType(pframe);
-       if (frame_type == WIFI_ASSOCREQ)
-               ie_offset = _ASOCREQ_IE_OFFSET_;
-       else /*  WIFI_REASSOCREQ */
-               ie_offset = _REASOCREQ_IE_OFFSET_;
-
-       if (pkt_len < IEEE80211_3ADDR_LEN + ie_offset)
-               return;
-
-       pstat = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
-       if (pstat == (struct sta_info *)NULL) {
-               status = _RSON_CLS2_;
-               goto asoc_class2_error;
-       }
-
-       capab_info = get_unaligned_le16(pframe + WLAN_HDR_A3_LEN);
-
-       left = pkt_len - (IEEE80211_3ADDR_LEN + ie_offset);
-       pos = pframe + (IEEE80211_3ADDR_LEN + ie_offset);
-
-       /*  check if this stat has been successfully authenticated/assocated */
-       if (!((pstat->state) & WIFI_FW_AUTH_SUCCESS)) {
-               if (!((pstat->state) & WIFI_FW_ASSOC_SUCCESS)) {
-                       status = _RSON_CLS2_;
-                       goto asoc_class2_error;
-               } else {
-                       pstat->state &= (~WIFI_FW_ASSOC_SUCCESS);
-                       pstat->state |= WIFI_FW_ASSOC_STATE;
-               }
-       } else {
-               pstat->state &= (~WIFI_FW_AUTH_SUCCESS);
-               pstat->state |= WIFI_FW_ASSOC_STATE;
-       }
-       pstat->capability = capab_info;
-       /* now parse all ieee802_11 ie to point to elems */
-       if (rtw_ieee802_11_parse_elems(pos, left, &elems, 1) == ParseFailed ||
-           !elems.ssid) {
-               status = _STATS_FAILURE_;
-               goto OnAssocReqFail;
-       }
-
-       /*  now we should check all the fields... */
-       /*  checking SSID */
-       p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + ie_offset, _SSID_IE_, &ie_len,
-               pkt_len - WLAN_HDR_A3_LEN - ie_offset);
-       if (!p)
-               status = _STATS_FAILURE_;
-
-       if (ie_len == 0) { /*  broadcast ssid, however it is not allowed in assocreq */
-               status = _STATS_FAILURE_;
-       } else {
-               /*  check if ssid match */
-               if (memcmp((void *)(p + 2), cur->Ssid.Ssid, cur->Ssid.SsidLength))
-                       status = _STATS_FAILURE_;
-
-               if (ie_len != cur->Ssid.SsidLength)
-                       status = _STATS_FAILURE_;
-       }
-
-       if (status != _STATS_SUCCESSFUL_)
-               goto OnAssocReqFail;
-
-       /*  check if the supported rate is ok */
-       p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + ie_offset, _SUPPORTEDRATES_IE_, &ie_len, pkt_len - WLAN_HDR_A3_LEN - ie_offset);
-       if (!p) {
-               /*  use our own rate set as statoin used */
-               /* memcpy(supportRate, AP_BSSRATE, AP_BSSRATE_LEN); */
-               /* supportRateNum = AP_BSSRATE_LEN; */
-
-               status = _STATS_FAILURE_;
-               goto OnAssocReqFail;
-       } else {
-               memcpy(supportRate, p + 2, ie_len);
-               supportRateNum = ie_len;
-
-               p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + ie_offset, _EXT_SUPPORTEDRATES_IE_, &ie_len,
-                               pkt_len - WLAN_HDR_A3_LEN - ie_offset);
-               if (p) {
-                       if (supportRateNum <= sizeof(supportRate)) {
-                               memcpy(supportRate + supportRateNum, p + 2, ie_len);
-                               supportRateNum += ie_len;
-                       }
-               }
-       }
-
-       /* todo: mask supportRate between AP & STA -> move to update raid */
-       /* get_matched_rate(pmlmeext, supportRate, &supportRateNum, 0); */
-
-       /* update station supportRate */
-       pstat->bssratelen = supportRateNum;
-       memcpy(pstat->bssrateset, supportRate, supportRateNum);
-       UpdateBrateTblForSoftAP(pstat->bssrateset, pstat->bssratelen);
-
-       /* check RSN/WPA/WPS */
-       pstat->dot8021xalg = 0;
-       pstat->wpa_psk = 0;
-       pstat->wpa_group_cipher = 0;
-       pstat->wpa2_group_cipher = 0;
-       pstat->wpa_pairwise_cipher = 0;
-       pstat->wpa2_pairwise_cipher = 0;
-       memset(pstat->wpa_ie, 0, sizeof(pstat->wpa_ie));
-       if ((psecuritypriv->wpa_psk & BIT(1)) && elems.rsn_ie) {
-               int group_cipher = 0, pairwise_cipher = 0;
-
-               wpa_ie = elems.rsn_ie;
-               wpa_ie_len = elems.rsn_ie_len;
-
-               if (rtw_parse_wpa2_ie(wpa_ie - 2, wpa_ie_len + 2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) {
-                       pstat->dot8021xalg = 1;/* psk,  todo:802.1x */
-                       pstat->wpa_psk |= BIT(1);
-
-                       pstat->wpa2_group_cipher = group_cipher & psecuritypriv->wpa2_group_cipher;
-                       pstat->wpa2_pairwise_cipher = pairwise_cipher & psecuritypriv->wpa2_pairwise_cipher;
-
-                       if (!pstat->wpa2_group_cipher)
-                               status = WLAN_STATUS_GROUP_CIPHER_NOT_VALID;
-
-                       if (!pstat->wpa2_pairwise_cipher)
-                               status = WLAN_STATUS_PAIRWISE_CIPHER_NOT_VALID;
-               } else {
-                       status = WLAN_STATUS_INVALID_IE;
-               }
-       } else if ((psecuritypriv->wpa_psk & BIT(0)) && elems.wpa_ie) {
-               int group_cipher = 0, pairwise_cipher = 0;
-
-               wpa_ie = elems.wpa_ie;
-               wpa_ie_len = elems.wpa_ie_len;
-
-               if (rtw_parse_wpa_ie(wpa_ie - 2, wpa_ie_len + 2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) {
-                       pstat->dot8021xalg = 1;/* psk,  todo:802.1x */
-                       pstat->wpa_psk |= BIT(0);
-
-                       pstat->wpa_group_cipher = group_cipher & psecuritypriv->wpa_group_cipher;
-                       pstat->wpa_pairwise_cipher = pairwise_cipher & psecuritypriv->wpa_pairwise_cipher;
-
-                       if (!pstat->wpa_group_cipher)
-                               status = WLAN_STATUS_GROUP_CIPHER_NOT_VALID;
-
-                       if (!pstat->wpa_pairwise_cipher)
-                               status = WLAN_STATUS_PAIRWISE_CIPHER_NOT_VALID;
-               } else {
-                       status = WLAN_STATUS_INVALID_IE;
-               }
-       } else {
-               wpa_ie = NULL;
-               wpa_ie_len = 0;
-       }
-
-       if (status != _STATS_SUCCESSFUL_)
-               goto OnAssocReqFail;
-
-       pstat->flags &= ~(WLAN_STA_WPS | WLAN_STA_MAYBE_WPS);
-       if (!wpa_ie) {
-               if (elems.wps_ie)
-                       pstat->flags |= WLAN_STA_WPS;
-                       /* wpabuf_free(sta->wps_ie); */
-                       /* sta->wps_ie = wpabuf_alloc_copy(elems.wps_ie + 4, */
-                       /*                              elems.wps_ie_len - 4); */
-               else
-                       pstat->flags |= WLAN_STA_MAYBE_WPS;
-
-               /*  AP support WPA/RSN, and sta is going to do WPS, but AP is not ready */
-               /*  that the selected registrar of AP is _FLASE */
-               if ((psecuritypriv->wpa_psk > 0) && (pstat->flags & (WLAN_STA_WPS | WLAN_STA_MAYBE_WPS))) {
-                       if (pmlmepriv->wps_beacon_ie) {
-                               u8 selected_registrar = 0;
-
-                               rtw_get_wps_attr_content(pmlmepriv->wps_beacon_ie, pmlmepriv->wps_beacon_ie_len, WPS_ATTR_SELECTED_REGISTRAR, &selected_registrar, NULL);
-
-                               if (!selected_registrar) {
-
-                                       status = _STATS_UNABLE_HANDLE_STA_;
-
-                                       goto OnAssocReqFail;
-                               }
-                       }
-               }
-       } else {
-               int copy_len;
-
-               if (psecuritypriv->wpa_psk == 0) {
-
-                       status = WLAN_STATUS_INVALID_IE;
-
-                       goto OnAssocReqFail;
-               }
-
-               if (elems.wps_ie) {
-                       pstat->flags |= WLAN_STA_WPS;
-                       copy_len = 0;
-               } else {
-                       copy_len = ((wpa_ie_len + 2) > sizeof(pstat->wpa_ie)) ? (sizeof(pstat->wpa_ie)) : (wpa_ie_len + 2);
-               }
-               if (copy_len > 0)
-                       memcpy(pstat->wpa_ie, wpa_ie - 2, copy_len);
-       }
-       /*  check if there is WMM IE & support WWM-PS */
-       pstat->flags &= ~WLAN_STA_WME;
-       pstat->qos_option = 0;
-       pstat->qos_info = 0;
-       pstat->has_legacy_ac = true;
-       pstat->uapsd_vo = 0;
-       pstat->uapsd_vi = 0;
-       pstat->uapsd_be = 0;
-       pstat->uapsd_bk = 0;
-       if (pmlmepriv->qospriv.qos_option) {
-               p = pframe + WLAN_HDR_A3_LEN + ie_offset; ie_len = 0;
-               for (;;) {
-                       p = rtw_get_ie(p, _VENDOR_SPECIFIC_IE_, &ie_len, pkt_len - WLAN_HDR_A3_LEN - ie_offset);
-                       if (p) {
-                               if (!memcmp(p + 2, WMM_IE, 6)) {
-                                       pstat->flags |= WLAN_STA_WME;
-
-                                       pstat->qos_option = 1;
-                                       pstat->qos_info = *(p + 8);
-
-                                       pstat->max_sp_len = (pstat->qos_info >> 5) & 0x3;
-
-                                       if ((pstat->qos_info & 0xf) != 0xf)
-                                               pstat->has_legacy_ac = true;
-                                       else
-                                               pstat->has_legacy_ac = false;
-
-                                       if (pstat->qos_info & 0xf) {
-                                               if (pstat->qos_info & BIT(0))
-                                                       pstat->uapsd_vo = BIT(0) | BIT(1);
-                                               else
-                                                       pstat->uapsd_vo = 0;
-
-                                               if (pstat->qos_info & BIT(1))
-                                                       pstat->uapsd_vi = BIT(0) | BIT(1);
-                                               else
-                                                       pstat->uapsd_vi = 0;
-
-                                               if (pstat->qos_info & BIT(2))
-                                                       pstat->uapsd_bk = BIT(0) | BIT(1);
-                                               else
-                                                       pstat->uapsd_bk = 0;
-
-                                               if (pstat->qos_info & BIT(3))
-                                                       pstat->uapsd_be = BIT(0) | BIT(1);
-                                               else
-                                                       pstat->uapsd_be = 0;
-                                       }
-                                       break;
-                               }
-                       } else {
-                               break;
-                       }
-                       p = p + ie_len + 2;
-               }
-       }
-
-       /* save HT capabilities in the sta object */
-       memset(&pstat->htpriv.ht_cap, 0, sizeof(struct ieee80211_ht_cap));
-       if (elems.ht_capabilities && elems.ht_capabilities_len >= sizeof(struct ieee80211_ht_cap)) {
-               pstat->flags |= WLAN_STA_HT;
-
-               pstat->flags |= WLAN_STA_WME;
-
-               memcpy(&pstat->htpriv.ht_cap, elems.ht_capabilities, sizeof(struct ieee80211_ht_cap));
-       } else {
-               pstat->flags &= ~WLAN_STA_HT;
-       }
-       if ((!pmlmepriv->htpriv.ht_option) && (pstat->flags & WLAN_STA_HT)) {
-               status = _STATS_FAILURE_;
-               goto OnAssocReqFail;
-       }
-
-       pstat->flags |= WLAN_STA_NONERP;
-       for (i = 0; i < pstat->bssratelen; i++) {
-               if ((pstat->bssrateset[i] & 0x7f) > 22) {
-                       pstat->flags &= ~WLAN_STA_NONERP;
-                       break;
-               }
-       }
-
-       if (pstat->capability & WLAN_CAPABILITY_SHORT_PREAMBLE)
-               pstat->flags |= WLAN_STA_SHORT_PREAMBLE;
-       else
-               pstat->flags &= ~WLAN_STA_SHORT_PREAMBLE;
-
-       if (status != _STATS_SUCCESSFUL_)
-               goto OnAssocReqFail;
-
-       pstat->is_p2p_device = false;
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-               p2pie = rtw_get_p2p_ie(pframe + WLAN_HDR_A3_LEN + ie_offset, pkt_len - WLAN_HDR_A3_LEN - ie_offset, NULL, &p2pielen);
-               if (p2pie) {
-                       pstat->is_p2p_device = true;
-                       p2p_status_code = (u8)process_assoc_req_p2p_ie(pwdinfo, pframe, pkt_len, pstat);
-                       if (p2p_status_code > 0) {
-                               pstat->p2p_status_code = p2p_status_code;
-                               status = _STATS_CAP_FAIL_;
-                               goto OnAssocReqFail;
-                       }
-               }
-       }
-       pstat->p2p_status_code = p2p_status_code;
-
-       /* TODO: identify_proprietary_vendor_ie(); */
-       /*  Realtek proprietary IE */
-       /*  identify if this is Broadcom sta */
-       /*  identify if this is ralink sta */
-       /*  Customer proprietary IE */
-
-       /* get a unique AID */
-       if (pstat->aid == 0) {
-               for (pstat->aid = 1; pstat->aid <= NUM_STA; pstat->aid++)
-                       if (!pstapriv->sta_aid[pstat->aid - 1])
-                               break;
-
-               /* if (pstat->aid > NUM_STA) { */
-               if (pstat->aid > pstapriv->max_num_sta) {
-                       pstat->aid = 0;
-
-                       status = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA;
-
-                       goto OnAssocReqFail;
-               } else {
-                       pstapriv->sta_aid[pstat->aid - 1] = pstat;
-               }
-       }
-
-       pstat->state &= (~WIFI_FW_ASSOC_STATE);
-       pstat->state |= WIFI_FW_ASSOC_SUCCESS;
-
-       spin_lock_bh(&pstapriv->auth_list_lock);
-       if (!list_empty(&pstat->auth_list)) {
-               list_del_init(&pstat->auth_list);
-               pstapriv->auth_list_cnt--;
-       }
-       spin_unlock_bh(&pstapriv->auth_list_lock);
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-       if (list_empty(&pstat->asoc_list)) {
-               pstat->expire_to = pstapriv->expire_to;
-               list_add_tail(&pstat->asoc_list, &pstapriv->asoc_list);
-               pstapriv->asoc_list_cnt++;
-       }
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       /*  now the station is qualified to join our BSS... */
-       if (pstat && (pstat->state & WIFI_FW_ASSOC_SUCCESS) && (status == _STATS_SUCCESSFUL_)) {
-               /* 1 bss_cap_update & sta_info_update */
-               bss_cap_update_on_sta_join(padapter, pstat);
-               sta_info_update(padapter, pstat);
-
-               /* issue assoc rsp before notify station join event. */
-               if (frame_type == WIFI_ASSOCREQ)
-                       issue_asocrsp(padapter, status, pstat, WIFI_ASSOCRSP);
-               else
-                       issue_asocrsp(padapter, status, pstat, WIFI_REASSOCRSP);
-
-               /* 2 - report to upper layer */
-               rtw_indicate_sta_assoc_event(padapter, pstat);
-
-               /* 3-(1) report sta add event */
-               report_add_sta_event(padapter, pstat->hwaddr, pstat->aid);
-       }
-
-       return;
-
-asoc_class2_error:
-
-       issue_deauth(padapter, (void *)GetAddr2Ptr(pframe), status);
-
-       return;
-
-OnAssocReqFail:
-
-       pstat->aid = 0;
-       if (frame_type == WIFI_ASSOCREQ)
-               issue_asocrsp(padapter, status, pstat, WIFI_ASSOCRSP);
-       else
-               issue_asocrsp(padapter, status, pstat, WIFI_REASSOCRSP);
-
-       return;
-}
-
-static void OnAssocRsp(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)precv_frame->rx_data;
-       uint i;
-       int res;
-       struct ndis_802_11_var_ie *pIE;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       /* struct wlan_bssid_ex *cur_network = &(pmlmeinfo->network); */
-       u8 *pframe = precv_frame->rx_data;
-       uint pkt_len = precv_frame->len;
-
-       /* check A1 matches or not */
-       if (memcmp(myid(&padapter->eeprompriv), mgmt->da, ETH_ALEN))
-               return;
-
-       if (!(pmlmeinfo->state & (WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE)))
-               return;
-
-       if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)
-               return;
-
-       _cancel_timer_ex(&pmlmeext->link_timer);
-
-       if (le16_to_cpu(mgmt->u.assoc_resp.status_code) > 0) {
-               pmlmeinfo->state = WIFI_FW_NULL_STATE;
-               res = -4;
-               goto report_assoc_result;
-       }
-
-       pmlmeinfo->capability = le16_to_cpu(mgmt->u.assoc_resp.capab_info);
-
-       /* set slot time */
-       pmlmeinfo->slotTime = (pmlmeinfo->capability & BIT(10)) ? 9 : 20;
-
-       pmlmeinfo->aid = le16_to_cpu(mgmt->u.assoc_resp.aid) & 0x3fff;
-       res = pmlmeinfo->aid;
-
-       /* following are moved to join event callback function */
-       /* to handle HT, WMM, rate adaptive, update MAC reg */
-       /* for not to handle the synchronous IO in the tasklet */
-       for (i = offsetof(struct ieee80211_mgmt, u.assoc_resp.variable); i < pkt_len;) {
-               pIE = (struct ndis_802_11_var_ie *)(pframe + i);
-
-               switch (pIE->ElementID) {
-               case _VENDOR_SPECIFIC_IE_:
-                       if (!memcmp(pIE->data, WMM_PARA_OUI, 6))        /* WMM */
-                               WMM_param_handler(padapter, pIE);
-                       break;
-               case _HT_CAPABILITY_IE_:        /* HT caps */
-                       HT_caps_handler(padapter, pIE);
-                       break;
-               case _HT_EXTRA_INFO_IE_:        /* HT info */
-                       HT_info_handler(padapter, pIE);
-                       break;
-               case _ERPINFO_IE_:
-                       ERP_IE_handler(padapter, pIE);
-                       break;
-               default:
-                       break;
-               }
-
-               i += (pIE->Length + 2);
-       }
-
-       pmlmeinfo->state &= (~WIFI_FW_ASSOC_STATE);
-       pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
-
-       /* Update Basic Rate Table for spec, 2010-12-28 , by thomas */
-       UpdateBrateTbl(pmlmeinfo->network.SupportedRates);
-
-report_assoc_result:
-       report_join_res(padapter, res);
-}
-
-static void OnDeAuth(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)precv_frame->rx_data;
-       unsigned short  reason;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       if (memcmp(mgmt->bssid, get_my_bssid(&pmlmeinfo->network), ETH_ALEN))
-               return;
-
-       if (pwdinfo->rx_invitereq_info.scan_op_ch_only) {
-               _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey);
-               _set_timer(&pwdinfo->reset_ch_sitesurvey, 10);
-       }
-
-       reason = le16_to_cpu(mgmt->u.disassoc.reason_code);
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               struct sta_info *psta;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-               u8 updated = 0;
-
-               psta = rtw_get_stainfo(pstapriv, mgmt->sa);
-               if (!psta)
-                       return;
-
-               spin_lock_bh(&pstapriv->asoc_list_lock);
-               if (!list_empty(&psta->asoc_list)) {
-                       list_del_init(&psta->asoc_list);
-                       pstapriv->asoc_list_cnt--;
-                       updated = ap_free_sta(padapter, psta, false, reason);
-               }
-               spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-               associated_clients_update(padapter, updated);
-       } else {
-               bool ignore_received_deauth = false;
-
-               /* Before sending the auth frame to start the STA/GC mode connection with AP/GO,
-                *      we will send the deauth first.
-                *      However, the Win8.1 with BRCM Wi-Fi will send the deauth with reason code 6 to us after receieving our deauth.
-                *      Added the following code to avoid this case.
-                */
-               if (pmlmeinfo->state & (WIFI_FW_AUTH_STATE | WIFI_FW_ASSOC_STATE)) {
-                       if (reason == WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA) {
-                               ignore_received_deauth = true;
-                       } else if (reason == WLAN_REASON_PREV_AUTH_NOT_VALID) {
-                               // TODO: 802.11r
-                               ignore_received_deauth = true;
-                       }
-               }
-
-               if (!ignore_received_deauth)
-                       receive_disconnect(padapter, mgmt->bssid, reason);
-
-               pmlmepriv->LinkDetectInfo.bBusyTraffic = false;
-       }
-}
-
-static void OnDisassoc(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)precv_frame->rx_data;
-       u16 reason;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-       struct sta_info *psta;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       u8 updated = 0;
-
-       if (memcmp(mgmt->bssid, get_my_bssid(&pmlmeinfo->network), ETH_ALEN))
-               return;
-
-       if (pwdinfo->rx_invitereq_info.scan_op_ch_only) {
-               _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey);
-               _set_timer(&pwdinfo->reset_ch_sitesurvey, 10);
-       }
-
-       reason = le16_to_cpu(mgmt->u.disassoc.reason_code);
-
-       if (!check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               receive_disconnect(padapter, mgmt->bssid, reason);
-               pmlmepriv->LinkDetectInfo.bBusyTraffic = false;
-               return;
-       }
-
-       psta = rtw_get_stainfo(pstapriv, mgmt->sa);
-       if (!psta)
-               return;
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-       if (!list_empty(&psta->asoc_list)) {
-               list_del_init(&psta->asoc_list);
-               pstapriv->asoc_list_cnt--;
-               updated = ap_free_sta(padapter, psta, false, reason);
-       }
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       associated_clients_update(padapter, updated);
-}
-
-static void OnAction_back(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)precv_frame->rx_data;
-       struct sta_info *psta = NULL;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       unsigned short  tid;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       if ((pmlmeinfo->state & 0x03) != WIFI_FW_AP_STATE)
-               if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS))
-                       return;
-
-       psta = rtw_get_stainfo(pstapriv, mgmt->sa);
-       if (!psta)
-               return;
-
-       if (!pmlmeinfo->HT_enable)
-               return;
-       /* All union members start with an action code, it's ok to use addba_req. */
-       switch (mgmt->u.action.u.addba_req.action_code) {
-       case WLAN_ACTION_ADDBA_REQ:
-               tid = u16_get_bits(le16_to_cpu(mgmt->u.action.u.addba_req.capab),
-                                  IEEE80211_ADDBA_PARAM_TID_MASK);
-               preorder_ctrl = &psta->recvreorder_ctrl[tid];
-               preorder_ctrl->indicate_seq = 0xffff;
-               preorder_ctrl->enable = pmlmeinfo->bAcceptAddbaReq;
-               issue_action_BA(padapter, mgmt->sa, WLAN_ACTION_ADDBA_RESP,
-                               pmlmeinfo->bAcceptAddbaReq ?
-                                       WLAN_STATUS_SUCCESS : WLAN_STATUS_REQUEST_DECLINED, mgmt);
-               break;
-       case WLAN_ACTION_ADDBA_RESP:
-               tid = u16_get_bits(le16_to_cpu(mgmt->u.action.u.addba_resp.capab),
-                                  IEEE80211_ADDBA_PARAM_TID_MASK);
-               if (mgmt->u.action.u.addba_resp.status == 0) {  /* successful */
-                       psta->htpriv.agg_enable_bitmap |= BIT(tid);
-                       psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
-               } else {
-                       psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
-               }
-               break;
-       case WLAN_ACTION_DELBA:
-               tid = u16_get_bits(le16_to_cpu(mgmt->u.action.u.delba.params),
-                                  IEEE80211_DELBA_PARAM_TID_MASK);
-               if (u16_get_bits(le16_to_cpu(mgmt->u.action.u.delba.params),
-                                IEEE80211_DELBA_PARAM_INITIATOR_MASK) == WLAN_BACK_RECIPIENT) {
-                       psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
-                       psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
-               } else {
-                       preorder_ctrl =  &psta->recvreorder_ctrl[tid];
-                       preorder_ctrl->enable = false;
-                       preorder_ctrl->indicate_seq = 0xffff;
-               }
-               /* todo: how to notify the host while receiving DELETE BA */
-               break;
-       default:
-               break;
-       }
-}
-
-static int get_reg_classes_full_count(struct p2p_channels *channel_list)
-{
-       int cnt = 0;
-       int i;
-
-       for (i = 0; i < channel_list->reg_classes; i++) {
-               cnt += channel_list->reg_class[i].channels;
-       }
-
-       return cnt;
-}
-
-void issue_p2p_GO_request(struct adapter *padapter, u8 *raddr)
-{
-       unsigned char category = WLAN_CATEGORY_PUBLIC;
-       u8 action = P2P_PUB_ACTION_ACTION;
-       __be32 p2poui = cpu_to_be32(P2POUI);
-       u8 oui_subtype = P2P_GO_NEGO_REQ;
-       u8 wpsie[255] = { 0x00 }, p2pie[255] = { 0x00 };
-       u8 wpsielen = 0, p2pielen = 0;
-       u16 len_channellist_attr = 0;
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, myid(&padapter->eeprompriv), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&p2poui, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &oui_subtype, &pattrib->pktlen);
-       pwdinfo->negotiation_dialog_token = 1;  /*      Initialize the dialog value */
-       pframe = rtw_set_fixed_ie(pframe, 1, &pwdinfo->negotiation_dialog_token, &pattrib->pktlen);
-
-       /*      WPS Section */
-       wpsielen = 0;
-       /*      WPS OUI */
-       *(__be32 *)(wpsie) = cpu_to_be32(WPSOUI);
-       wpsielen += 4;
-
-       /*      WPS version */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_VER1);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001);
-       wpsielen += 2;
-
-       /*      Value: */
-       wpsie[wpsielen++] = WPS_VERSION_1;      /*      Version 1.0 */
-
-       /*      Device Password ID */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_DEVICE_PWID);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002);
-       wpsielen += 2;
-
-       /*      Value: */
-
-       if (pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_PEER_DISPLAY_PIN)
-               *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_USER_SPEC);
-       else if (pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_SELF_DISPLAY_PIN)
-               *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_REGISTRAR_SPEC);
-       else if (pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_PBC)
-               *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_PBC);
-
-       wpsielen += 2;
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen);
-
-       /*      P2P IE Section. */
-
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /*      Commented by Albert 20110306 */
-       /*      According to the P2P Specification, the group negotiation request frame should contain 9 P2P attributes */
-       /*      1. P2P Capability */
-       /*      2. Group Owner Intent */
-       /*      3. Configuration Timeout */
-       /*      4. Listen Channel */
-       /*      5. Extended Listen Timing */
-       /*      6. Intended P2P Interface Address */
-       /*      7. Channel List */
-       /*      8. P2P Device Info */
-       /*      9. Operating Channel */
-
-       /*      P2P Capability */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CAPABILITY;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Device Capability Bitmap, 1 byte */
-       p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT;
-
-       /*      Group Capability Bitmap, 1 byte */
-       if (pwdinfo->persistent_supported)
-               p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP;
-       else
-               p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN;
-
-       /*      Group Owner Intent */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_GO_INTENT;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0001);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Todo the tie breaker bit. */
-       p2pie[p2pielen++] = ((pwdinfo->intent << 1) | BIT(0));
-
-       /*      Configuration Timeout */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CONF_TIMEOUT;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002);
-       p2pielen += 2;
-
-       /*      Value: */
-       p2pie[p2pielen++] = 200;        /*      2 seconds needed to be the P2P GO */
-       p2pie[p2pielen++] = 200;        /*      2 seconds needed to be the P2P Client */
-
-       /*      Listen Channel */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_LISTEN_CH;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Country String */
-       p2pie[p2pielen++] = 'X';
-       p2pie[p2pielen++] = 'X';
-
-       /*      The third byte should be set to 0x04. */
-       /*      Described in the "Operating Channel Attribute" section. */
-       p2pie[p2pielen++] = 0x04;
-
-       /*      Operating Class */
-       p2pie[p2pielen++] = 0x51;       /*      Copy from SD7 */
-
-       /*      Channel Number */
-       p2pie[p2pielen++] = pwdinfo->listen_channel;    /*      listening channel number */
-
-       /*      Extended Listen Timing ATTR */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_EX_LISTEN_TIMING;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0004);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Availability Period */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF);
-       p2pielen += 2;
-
-       /*      Availability Interval */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF);
-       p2pielen += 2;
-
-       /*      Intended P2P Interface Address */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_INTENTED_IF_ADDR;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN);
-       p2pielen += 2;
-
-       /*      Value: */
-       memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN);
-       p2pielen += ETH_ALEN;
-
-       /*      Channel List */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CH_LIST;
-
-       /*  Length: */
-       /*  Country String(3) */
-       /*  + (Operating Class (1) + Number of Channels(1)) * Operation Classes (?) */
-       /*  + number of channels in all classes */
-       len_channellist_attr = 3
-          + (1 + 1) * (u16)(pmlmeext->channel_list.reg_classes)
-          + get_reg_classes_full_count(&pmlmeext->channel_list);
-
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(len_channellist_attr);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Country String */
-       p2pie[p2pielen++] = 'X';
-       p2pie[p2pielen++] = 'X';
-
-       /*      The third byte should be set to 0x04. */
-       /*      Described in the "Operating Channel Attribute" section. */
-       p2pie[p2pielen++] = 0x04;
-
-       /*      Channel Entry List */
-
-       {
-               int i, j;
-               for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
-                       /*      Operating Class */
-                       p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
-
-                       /*      Number of Channels */
-                       p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
-
-                       /*      Channel List */
-                       for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
-                               p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
-                       }
-               }
-       }
-
-       /*      Device Info */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO;
-
-       /*      Length: */
-       /*      21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */
-       /*      + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      P2P Device Address */
-       memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN);
-       p2pielen += ETH_ALEN;
-
-       /*      Config Method */
-       /*      This field should be big endian. Noted by P2P specification. */
-
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->supported_wps_cm);
-
-       p2pielen += 2;
-
-       /*      Primary Device Type */
-       /*      Category ID */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA);
-       p2pielen += 2;
-
-       /*      OUI */
-       *(__be32 *)(p2pie + p2pielen) = cpu_to_be32(WPSOUI);
-       p2pielen += 4;
-
-       /*      Sub Category ID */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER);
-       p2pielen += 2;
-
-       /*      Number of Secondary Device Types */
-       p2pie[p2pielen++] = 0x00;       /*      No Secondary Device Type List */
-
-       /*      Device Name */
-       /*      Type: */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME);
-       p2pielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len);
-       p2pielen += 2;
-
-       /*      Value: */
-       memcpy(p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len);
-       p2pielen += pwdinfo->device_name_len;
-
-       /*      Operating Channel */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Country String */
-       p2pie[p2pielen++] = 'X';
-       p2pie[p2pielen++] = 'X';
-
-       /*      The third byte should be set to 0x04. */
-       /*      Described in the "Operating Channel Attribute" section. */
-       p2pie[p2pielen++] = 0x04;
-
-       /*      Operating Class */
-       p2pie[p2pielen++] = 0x51;
-
-       /*      Channel Number */
-       p2pie[p2pielen++] = pwdinfo->operating_channel; /*      operating channel number */
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-static void issue_p2p_GO_response(struct adapter *padapter, u8 *raddr, u8 *frame_body, uint len, u8 result)
-{
-       unsigned char category = WLAN_CATEGORY_PUBLIC;
-       u8 action = P2P_PUB_ACTION_ACTION;
-       __be32                  p2poui = cpu_to_be32(P2POUI);
-       u8 oui_subtype = P2P_GO_NEGO_RESP;
-       u8 wpsie[255] = { 0x00 }, p2pie[255] = { 0x00 };
-       u8 p2pielen = 0;
-       uint                    wpsielen = 0;
-       u16 wps_devicepassword_id = 0x0000;
-       __be16                  be_tmp;
-       uint                    wps_devicepassword_id_len = 0;
-       u16 len_channellist_attr = 0;
-
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, myid(&padapter->eeprompriv), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&p2poui, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &oui_subtype, &pattrib->pktlen);
-       pwdinfo->negotiation_dialog_token = frame_body[7];      /*      The Dialog Token of provisioning discovery request frame. */
-       pframe = rtw_set_fixed_ie(pframe, 1, &pwdinfo->negotiation_dialog_token, &pattrib->pktlen);
-
-       /*      Commented by Albert 20110328 */
-       /*      Try to get the device password ID from the WPS IE of group negotiation request frame */
-       /*      WiFi Direct test plan 5.1.15 */
-       rtw_get_wps_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, wpsie, &wpsielen);
-       rtw_get_wps_attr_content(wpsie, wpsielen, WPS_ATTR_DEVICE_PWID, (u8 *)&be_tmp, &wps_devicepassword_id_len);
-       wps_devicepassword_id = be16_to_cpu(be_tmp);
-
-       memset(wpsie, 0x00, 255);
-       wpsielen = 0;
-
-       /*      WPS Section */
-       wpsielen = 0;
-       /*      WPS OUI */
-       *(__be32 *)(wpsie) = cpu_to_be32(WPSOUI);
-       wpsielen += 4;
-
-       /*      WPS version */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_VER1);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001);
-       wpsielen += 2;
-
-       /*      Value: */
-       wpsie[wpsielen++] = WPS_VERSION_1;      /*      Version 1.0 */
-
-       /*      Device Password ID */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_DEVICE_PWID);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002);
-       wpsielen += 2;
-
-       /*      Value: */
-       if (wps_devicepassword_id == WPS_DPID_USER_SPEC)
-               *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_REGISTRAR_SPEC);
-       else if (wps_devicepassword_id == WPS_DPID_REGISTRAR_SPEC)
-               *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_USER_SPEC);
-       else
-               *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_PBC);
-       wpsielen += 2;
-
-       /*      Commented by Kurt 20120113 */
-       /*      If some device wants to do p2p handshake without sending prov_disc_req */
-       /*      We have to get peer_req_cm from here. */
-       if (!memcmp(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "000", 3)) {
-               if (wps_devicepassword_id == WPS_DPID_USER_SPEC)
-                       memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "dis", 3);
-               else if (wps_devicepassword_id == WPS_DPID_REGISTRAR_SPEC)
-                       memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pad", 3);
-               else
-                       memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pbc", 3);
-       }
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen);
-
-       /*      P2P IE Section. */
-
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /*      Commented by Albert 20100908 */
-       /*      According to the P2P Specification, the group negotiation response frame should contain 9 P2P attributes */
-       /*      1. Status */
-       /*      2. P2P Capability */
-       /*      3. Group Owner Intent */
-       /*      4. Configuration Timeout */
-       /*      5. Operating Channel */
-       /*      6. Intended P2P Interface Address */
-       /*      7. Channel List */
-       /*      8. Device Info */
-       /*      9. Group ID     (Only GO) */
-
-       /*      ToDo: */
-
-       /*      P2P Status */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_STATUS;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0001);
-       p2pielen += 2;
-
-       /*      Value: */
-       p2pie[p2pielen++] = result;
-
-       /*      P2P Capability */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CAPABILITY;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Device Capability Bitmap, 1 byte */
-
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT)) {
-               /*      Commented by Albert 2011/03/08 */
-               /*      According to the P2P specification */
-               /*      if the sending device will be client, the P2P Capability should be reserved of group negotiation response frame */
-               p2pie[p2pielen++] = 0;
-       } else {
-               /*      Be group owner or meet the error case */
-               p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT;
-       }
-
-       /*      Group Capability Bitmap, 1 byte */
-       if (pwdinfo->persistent_supported) {
-               p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP;
-       } else {
-               p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN;
-       }
-
-       /*      Group Owner Intent */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_GO_INTENT;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0001);
-       p2pielen += 2;
-
-       /*      Value: */
-       if (pwdinfo->peer_intent & 0x01) {
-               /*      Peer's tie breaker bit is 1, our tie breaker bit should be 0 */
-               p2pie[p2pielen++] = (pwdinfo->intent << 1);
-       } else {
-               /*      Peer's tie breaker bit is 0, our tie breaker bit should be 1 */
-               p2pie[p2pielen++] = ((pwdinfo->intent << 1) | BIT(0));
-       }
-
-       /*      Configuration Timeout */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CONF_TIMEOUT;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002);
-       p2pielen += 2;
-
-       /*      Value: */
-       p2pie[p2pielen++] = 200;        /*      2 seconds needed to be the P2P GO */
-       p2pie[p2pielen++] = 200;        /*      2 seconds needed to be the P2P Client */
-
-       /*      Operating Channel */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Country String */
-       p2pie[p2pielen++] = 'X';
-       p2pie[p2pielen++] = 'X';
-
-       /*      The third byte should be set to 0x04. */
-       /*      Described in the "Operating Channel Attribute" section. */
-       p2pie[p2pielen++] = 0x04;
-
-       /*      Operating Class */
-       p2pie[p2pielen++] = 0x51;
-
-       /*      Channel Number */
-       p2pie[p2pielen++] = pwdinfo->operating_channel; /*      operating channel number */
-
-       /*      Intended P2P Interface Address */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_INTENTED_IF_ADDR;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN);
-       p2pielen += 2;
-
-       /*      Value: */
-       memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN);
-       p2pielen += ETH_ALEN;
-
-       /*      Channel List */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CH_LIST;
-
-       /*  Country String(3) */
-       /*  + (Operating Class (1) + Number of Channels(1)) * Operation Classes (?) */
-       /*  + number of channels in all classes */
-       len_channellist_attr = 3
-          + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes
-          + get_reg_classes_full_count(&pmlmeext->channel_list);
-
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(len_channellist_attr);
-
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Country String */
-       p2pie[p2pielen++] = 'X';
-       p2pie[p2pielen++] = 'X';
-
-       /*      The third byte should be set to 0x04. */
-       /*      Described in the "Operating Channel Attribute" section. */
-       p2pie[p2pielen++] = 0x04;
-
-       /*      Channel Entry List */
-
-       {
-               int i, j;
-               for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
-                       /*      Operating Class */
-                       p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
-
-                       /*      Number of Channels */
-                       p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
-
-                       /*      Channel List */
-                       for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
-                               p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
-                       }
-               }
-       }
-
-       /*      Device Info */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO;
-
-       /*      Length: */
-       /*      21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */
-       /*      + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      P2P Device Address */
-       memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN);
-       p2pielen += ETH_ALEN;
-
-       /*      Config Method */
-       /*      This field should be big endian. Noted by P2P specification. */
-
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->supported_wps_cm);
-
-       p2pielen += 2;
-
-       /*      Primary Device Type */
-       /*      Category ID */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA);
-       p2pielen += 2;
-
-       /*      OUI */
-       *(__be32 *)(p2pie + p2pielen) = cpu_to_be32(WPSOUI);
-       p2pielen += 4;
-
-       /*      Sub Category ID */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER);
-       p2pielen += 2;
-
-       /*      Number of Secondary Device Types */
-       p2pie[p2pielen++] = 0x00;       /*      No Secondary Device Type List */
-
-       /*      Device Name */
-       /*      Type: */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME);
-       p2pielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len);
-       p2pielen += 2;
-
-       /*      Value: */
-       memcpy(p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len);
-       p2pielen += pwdinfo->device_name_len;
-
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-               /*      Group ID Attribute */
-               /*      Type: */
-               p2pie[p2pielen++] = P2P_ATTR_GROUP_ID;
-
-               /*      Length: */
-               *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN + pwdinfo->nego_ssidlen);
-               p2pielen += 2;
-
-               /*      Value: */
-               /*      p2P Device Address */
-               memcpy(p2pie + p2pielen, pwdinfo->device_addr, ETH_ALEN);
-               p2pielen += ETH_ALEN;
-
-               /*      SSID */
-               memcpy(p2pie + p2pielen, pwdinfo->nego_ssid, pwdinfo->nego_ssidlen);
-               p2pielen += pwdinfo->nego_ssidlen;
-       }
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-static void issue_p2p_GO_confirm(struct adapter *padapter, u8 *raddr, u8 result)
-{
-       unsigned char category = WLAN_CATEGORY_PUBLIC;
-       u8 action = P2P_PUB_ACTION_ACTION;
-       __be32                  p2poui = cpu_to_be32(P2POUI);
-       u8 oui_subtype = P2P_GO_NEGO_CONF;
-       u8 p2pie[255] = { 0x00 };
-       u8 p2pielen = 0;
-
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, myid(&padapter->eeprompriv), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&p2poui, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &oui_subtype, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &pwdinfo->negotiation_dialog_token, &pattrib->pktlen);
-
-       /*      P2P IE Section. */
-
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /*      Commented by Albert 20110306 */
-       /*      According to the P2P Specification, the group negotiation request frame should contain 5 P2P attributes */
-       /*      1. Status */
-       /*      2. P2P Capability */
-       /*      3. Operating Channel */
-       /*      4. Channel List */
-       /*      5. Group ID     (if this WiFi is GO) */
-
-       /*      P2P Status */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_STATUS;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0001);
-       p2pielen += 2;
-
-       /*      Value: */
-       p2pie[p2pielen++] = result;
-
-       /*      P2P Capability */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CAPABILITY;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Device Capability Bitmap, 1 byte */
-       p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT;
-
-       /*      Group Capability Bitmap, 1 byte */
-       if (pwdinfo->persistent_supported)
-               p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN | P2P_GRPCAP_PERSISTENT_GROUP;
-       else
-               p2pie[p2pielen++] = P2P_GRPCAP_CROSS_CONN;
-
-       /*      Operating Channel */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Country String */
-       p2pie[p2pielen++] = 'X';
-       p2pie[p2pielen++] = 'X';
-
-       /*      The third byte should be set to 0x04. */
-       /*      Described in the "Operating Channel Attribute" section. */
-       p2pie[p2pielen++] = 0x04;
-
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT)) {
-               /*      Operating Class */
-               p2pie[p2pielen++] = 0x51;
-               p2pie[p2pielen++] = pwdinfo->peer_operating_ch;
-       } else {
-               /*      Operating Class */
-               p2pie[p2pielen++] = 0x51;
-
-               /*      Channel Number */
-               p2pie[p2pielen++] = pwdinfo->operating_channel;         /*      Use the listen channel as the operating channel */
-       }
-
-       /*      Channel List */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CH_LIST;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(pwdinfo->channel_list_attr_len);
-       p2pielen += 2;
-
-       /*      Value: */
-       memcpy(p2pie + p2pielen, pwdinfo->channel_list_attr, pwdinfo->channel_list_attr_len);
-       p2pielen += pwdinfo->channel_list_attr_len;
-
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-               /*      Group ID Attribute */
-               /*      Type: */
-               p2pie[p2pielen++] = P2P_ATTR_GROUP_ID;
-
-               /*      Length: */
-               *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN + pwdinfo->nego_ssidlen);
-               p2pielen += 2;
-
-               /*      Value: */
-               /*      p2P Device Address */
-               memcpy(p2pie + p2pielen, pwdinfo->device_addr, ETH_ALEN);
-               p2pielen += ETH_ALEN;
-
-               /*      SSID */
-               memcpy(p2pie + p2pielen, pwdinfo->nego_ssid, pwdinfo->nego_ssidlen);
-               p2pielen += pwdinfo->nego_ssidlen;
-       }
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen);
-       pattrib->last_txcmdsz = pattrib->pktlen;
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-void issue_p2p_invitation_request(struct adapter *padapter, u8 *raddr)
-{
-       unsigned char category = WLAN_CATEGORY_PUBLIC;
-       u8 action = P2P_PUB_ACTION_ACTION;
-       __be32                  p2poui = cpu_to_be32(P2POUI);
-       u8 oui_subtype = P2P_INVIT_REQ;
-       u8 p2pie[255] = { 0x00 };
-       u8 p2pielen = 0;
-       u8 dialogToken = 3;
-       u16 len_channellist_attr = 0;
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, raddr,  ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&p2poui, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &oui_subtype, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &dialogToken, &pattrib->pktlen);
-
-       /*      P2P IE Section. */
-
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /*      Commented by Albert 20101011 */
-       /*      According to the P2P Specification, the P2P Invitation request frame should contain 7 P2P attributes */
-       /*      1. Configuration Timeout */
-       /*      2. Invitation Flags */
-       /*      3. Operating Channel    (Only GO) */
-       /*      4. P2P Group BSSID      (Should be included if I am the GO) */
-       /*      5. Channel List */
-       /*      6. P2P Group ID */
-       /*      7. P2P Device Info */
-
-       /*      Configuration Timeout */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CONF_TIMEOUT;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002);
-       p2pielen += 2;
-
-       /*      Value: */
-       p2pie[p2pielen++] = 200;        /*      2 seconds needed to be the P2P GO */
-       p2pie[p2pielen++] = 200;        /*      2 seconds needed to be the P2P Client */
-
-       /*      Invitation Flags */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_INVITATION_FLAGS;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0001);
-       p2pielen += 2;
-
-       /*      Value: */
-       p2pie[p2pielen++] = P2P_INVITATION_FLAGS_PERSISTENT;
-
-       /*      Operating Channel */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Country String */
-       p2pie[p2pielen++] = 'X';
-       p2pie[p2pielen++] = 'X';
-
-       /*      The third byte should be set to 0x04. */
-       /*      Described in the "Operating Channel Attribute" section. */
-       p2pie[p2pielen++] = 0x04;
-
-       /*      Operating Class */
-       p2pie[p2pielen++] = 0x51;
-
-       /*      Channel Number */
-       p2pie[p2pielen++] = pwdinfo->invitereq_info.operating_ch;       /*      operating channel number */
-
-       if (!memcmp(myid(&padapter->eeprompriv), pwdinfo->invitereq_info.go_bssid, ETH_ALEN)) {
-               /*      P2P Group BSSID */
-               /*      Type: */
-               p2pie[p2pielen++] = P2P_ATTR_GROUP_BSSID;
-
-               /*      Length: */
-               *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN);
-               p2pielen += 2;
-
-               /*      Value: */
-               /*      P2P Device Address for GO */
-               memcpy(p2pie + p2pielen, pwdinfo->invitereq_info.go_bssid, ETH_ALEN);
-               p2pielen += ETH_ALEN;
-       }
-
-       /*      Channel List */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CH_LIST;
-
-       /*      Length: */
-       /*  Country String(3) */
-       /*  + (Operating Class (1) + Number of Channels(1)) * Operation Classes (?) */
-       /*  + number of channels in all classes */
-       len_channellist_attr = 3
-          + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes
-          + get_reg_classes_full_count(&pmlmeext->channel_list);
-
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(len_channellist_attr);
-
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Country String */
-       p2pie[p2pielen++] = 'X';
-       p2pie[p2pielen++] = 'X';
-
-       /*      The third byte should be set to 0x04. */
-       /*      Described in the "Operating Channel Attribute" section. */
-       p2pie[p2pielen++] = 0x04;
-
-       /*      Channel Entry List */
-       {
-               int i, j;
-               for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
-                       /*      Operating Class */
-                       p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
-
-                       /*      Number of Channels */
-                       p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
-
-                       /*      Channel List */
-                       for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
-                               p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
-                       }
-               }
-       }
-
-       /*      P2P Group ID */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_GROUP_ID;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(6 + pwdinfo->invitereq_info.ssidlen);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      P2P Device Address for GO */
-       memcpy(p2pie + p2pielen, pwdinfo->invitereq_info.go_bssid, ETH_ALEN);
-       p2pielen += ETH_ALEN;
-
-       /*      SSID */
-       memcpy(p2pie + p2pielen, pwdinfo->invitereq_info.go_ssid, pwdinfo->invitereq_info.ssidlen);
-       p2pielen += pwdinfo->invitereq_info.ssidlen;
-
-       /*      Device Info */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO;
-
-       /*      Length: */
-       /*      21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */
-       /*      + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      P2P Device Address */
-       memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN);
-       p2pielen += ETH_ALEN;
-
-       /*      Config Method */
-       /*      This field should be big endian. Noted by P2P specification. */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_DISPLAY);
-       p2pielen += 2;
-
-       /*      Primary Device Type */
-       /*      Category ID */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA);
-       p2pielen += 2;
-
-       /*      OUI */
-       *(__be32 *)(p2pie + p2pielen) = cpu_to_be32(WPSOUI);
-       p2pielen  += 4;
-
-       /*      Sub Category ID */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER);
-       p2pielen += 2;
-
-       /*      Number of Secondary Device Types */
-       p2pie[p2pielen++] = 0x00;       /*      No Secondary Device Type List */
-
-       /*      Device Name */
-       /*      Type: */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME);
-       p2pielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len);
-       p2pielen += 2;
-
-       /*      Value: */
-       memcpy(p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len);
-       p2pielen += pwdinfo->device_name_len;
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-void issue_p2p_invitation_response(struct adapter *padapter, u8 *raddr, u8 dialogToken, u8 status_code)
-{
-       unsigned char category = WLAN_CATEGORY_PUBLIC;
-       u8 action = P2P_PUB_ACTION_ACTION;
-       __be32                  p2poui = cpu_to_be32(P2POUI);
-       u8 oui_subtype = P2P_INVIT_RESP;
-       u8 p2pie[255] = { 0x00 };
-       u8 p2pielen = 0;
-       u16 len_channellist_attr = 0;
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, raddr,  ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&p2poui, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &oui_subtype, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &dialogToken, &pattrib->pktlen);
-
-       /*      P2P IE Section. */
-
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /*      Commented by Albert 20101005 */
-       /*      According to the P2P Specification, the P2P Invitation response frame should contain 5 P2P attributes */
-       /*      1. Status */
-       /*      2. Configuration Timeout */
-       /*      3. Operating Channel    (Only GO) */
-       /*      4. P2P Group BSSID      (Only GO) */
-       /*      5. Channel List */
-
-       /*      P2P Status */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_STATUS;
-
-       /*      Length: */
-       *(__le16  *)(p2pie + p2pielen) = cpu_to_le16(0x0001);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      When status code is P2P_STATUS_FAIL_INFO_UNAVAILABLE. */
-       /*      Sent the event receiving the P2P Invitation Req frame to DMP UI. */
-       /*      DMP had to compare the MAC address to find out the profile. */
-       /*      So, the WiFi driver will send the P2P_STATUS_FAIL_INFO_UNAVAILABLE to NB. */
-       /*      If the UI found the corresponding profile, the WiFi driver sends the P2P Invitation Req */
-       /*      to NB to rebuild the persistent group. */
-       p2pie[p2pielen++] = status_code;
-
-       /*      Configuration Timeout */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CONF_TIMEOUT;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002);
-       p2pielen += 2;
-
-       /*      Value: */
-       p2pie[p2pielen++] = 200;        /*      2 seconds needed to be the P2P GO */
-       p2pie[p2pielen++] = 200;        /*      2 seconds needed to be the P2P Client */
-
-       if (status_code == P2P_STATUS_SUCCESS) {
-               if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-                       /*      The P2P Invitation request frame asks this Wi-Fi device to be the P2P GO */
-                       /*      In this case, the P2P Invitation response frame should carry the two more P2P attributes. */
-                       /*      First one is operating channel attribute. */
-                       /*      Second one is P2P Group BSSID attribute. */
-
-                       /*      Operating Channel */
-                       /*      Type: */
-                       p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH;
-
-                       /*      Length: */
-                       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005);
-                       p2pielen += 2;
-
-                       /*      Value: */
-                       /*      Country String */
-                       p2pie[p2pielen++] = 'X';
-                       p2pie[p2pielen++] = 'X';
-
-                       /*      The third byte should be set to 0x04. */
-                       /*      Described in the "Operating Channel Attribute" section. */
-                       p2pie[p2pielen++] = 0x04;
-
-                       /*      Operating Class */
-                       p2pie[p2pielen++] = 0x51;       /*      Copy from SD7 */
-
-                       /*      Channel Number */
-                       p2pie[p2pielen++] = pwdinfo->operating_channel; /*      operating channel number */
-
-                       /*      P2P Group BSSID */
-                       /*      Type: */
-                       p2pie[p2pielen++] = P2P_ATTR_GROUP_BSSID;
-
-                       /*      Length: */
-                       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(ETH_ALEN);
-                       p2pielen += 2;
-
-                       /*      Value: */
-                       /*      P2P Device Address for GO */
-                       memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN);
-                       p2pielen += ETH_ALEN;
-               }
-
-               /*      Channel List */
-               /*      Type: */
-               p2pie[p2pielen++] = P2P_ATTR_CH_LIST;
-
-               /*      Length: */
-               /*  Country String(3) */
-               /*  + (Operating Class (1) + Number of Channels(1)) * Operation Classes (?) */
-               /*  + number of channels in all classes */
-               len_channellist_attr = 3
-                       + (1 + 1) * (u16)pmlmeext->channel_list.reg_classes
-                       + get_reg_classes_full_count(&pmlmeext->channel_list);
-
-               *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(len_channellist_attr);
-               p2pielen += 2;
-
-               /*      Value: */
-               /*      Country String */
-               p2pie[p2pielen++] = 'X';
-               p2pie[p2pielen++] = 'X';
-
-               /*      The third byte should be set to 0x04. */
-               /*      Described in the "Operating Channel Attribute" section. */
-               p2pie[p2pielen++] = 0x04;
-
-               /*      Channel Entry List */
-               {
-                       int i, j;
-                       for (j = 0; j < pmlmeext->channel_list.reg_classes; j++) {
-                               /*      Operating Class */
-                               p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].reg_class;
-
-                               /*      Number of Channels */
-                               p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channels;
-
-                               /*      Channel List */
-                               for (i = 0; i < pmlmeext->channel_list.reg_class[j].channels; i++) {
-                                       p2pie[p2pielen++] = pmlmeext->channel_list.reg_class[j].channel[i];
-                               }
-                       }
-               }
-       }
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-void issue_p2p_provision_request(struct adapter *padapter, u8 *pssid, u8 ussidlen, u8 *pdev_raddr)
-{
-       unsigned char category = WLAN_CATEGORY_PUBLIC;
-       u8 action = P2P_PUB_ACTION_ACTION;
-       u8 dialogToken = 1;
-       u8 oui_subtype = P2P_PROVISION_DISC_REQ;
-       u8 wpsie[100] = { 0x00 };
-       u8 wpsielen = 0;
-       __be32 p2poui = cpu_to_be32(P2POUI);
-       u32                     p2pielen = 0;
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, pdev_raddr, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, pdev_raddr, ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&p2poui, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &oui_subtype, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &dialogToken, &pattrib->pktlen);
-
-       p2pielen = build_prov_disc_request_p2p_ie(pwdinfo, pframe, pssid, ussidlen, pdev_raddr);
-
-       pframe += p2pielen;
-       pattrib->pktlen += p2pielen;
-
-       wpsielen = 0;
-       /*      WPS OUI */
-       *(__be32 *)(wpsie) = cpu_to_be32(WPSOUI);
-       wpsielen += 4;
-
-       /*      WPS version */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_VER1);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001);
-       wpsielen += 2;
-
-       /*      Value: */
-       wpsie[wpsielen++] = WPS_VERSION_1;      /*      Version 1.0 */
-
-       /*      Config Method */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_CONF_METHOD);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002);
-       wpsielen += 2;
-
-       /*      Value: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(pwdinfo->tx_prov_disc_info.wps_config_method_request);
-       wpsielen += 2;
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-static u8 is_matched_in_profilelist(u8 *peermacaddr, struct profile_info *profileinfo)
-{
-       u8 i, match_result = 0;
-
-       for (i = 0; i < P2P_MAX_PERSISTENT_GROUP_NUM; i++, profileinfo++) {
-               if (!memcmp(peermacaddr, profileinfo->peermac, ETH_ALEN)) {
-                       match_result = 1;
-                       break;
-               }
-       }
-       return match_result;
-}
-
-void issue_probersp_p2p(struct adapter *padapter, unsigned char *da)
-{
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       unsigned char                                   *mac;
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       u16 beacon_interval = 100;
-       u16 capInfo = 0;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-       u8 wpsie[255] = { 0x00 };
-       u32                                     wpsielen = 0, p2pielen = 0;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       mac = myid(&padapter->eeprompriv);
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-       memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
-
-       /*      Use the device address for BSSID field. */
-       memcpy(pwlanhdr->addr3, mac, ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(fctrl, WIFI_PROBERSP);
-
-       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = pattrib->hdrlen;
-       pframe += pattrib->hdrlen;
-
-       /* timestamp will be inserted by hardware */
-       pframe += 8;
-       pattrib->pktlen += 8;
-
-       /*  beacon interval: 2 bytes */
-       memcpy(pframe, (unsigned char *)&beacon_interval, 2);
-       pframe += 2;
-       pattrib->pktlen += 2;
-
-       /*      capability info: 2 bytes */
-       /*      ESS and IBSS bits must be 0 (defined in the 3.1.2.1.1 of WiFi Direct Spec) */
-       capInfo |= cap_ShortPremble;
-       capInfo |= cap_ShortSlot;
-
-       memcpy(pframe, (unsigned char *)&capInfo, 2);
-       pframe += 2;
-       pattrib->pktlen += 2;
-
-       /*  SSID */
-       pframe = rtw_set_ie(pframe, _SSID_IE_, 7, pwdinfo->p2p_wildcard_ssid, &pattrib->pktlen);
-
-       /*  supported rates... */
-       /*      Use the OFDM rate in the P2P probe response frame. (6(B), 9(B), 12, 18, 24, 36, 48, 54) */
-       pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pwdinfo->support_rate, &pattrib->pktlen);
-
-       /*  DS parameter set */
-       pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&pwdinfo->listen_channel, &pattrib->pktlen);
-
-       /*      Todo: WPS IE */
-       /*      Noted by Albert 20100907 */
-       /*      According to the WPS specification, all the WPS attribute is presented by Big Endian. */
-
-       wpsielen = 0;
-       /*      WPS OUI */
-       *(__be32 *)(wpsie) = cpu_to_be32(WPSOUI);
-       wpsielen += 4;
-
-       /*      WPS version */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_VER1);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001);
-       wpsielen += 2;
-
-       /*      Value: */
-       wpsie[wpsielen++] = WPS_VERSION_1;      /*      Version 1.0 */
-
-       /*      WiFi Simple Config State */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_SIMPLE_CONF_STATE);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001);
-       wpsielen += 2;
-
-       /*      Value: */
-       wpsie[wpsielen++] = WPS_WSC_STATE_NOT_CONFIG;   /*      Not Configured. */
-
-       /*      Response Type */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_RESP_TYPE);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001);
-       wpsielen += 2;
-
-       /*      Value: */
-       wpsie[wpsielen++] = WPS_RESPONSE_TYPE_8021X;
-
-       /*      UUID-E */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_UUID_E);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0010);
-       wpsielen += 2;
-
-       /*      Value: */
-       memcpy(wpsie + wpsielen, myid(&padapter->eeprompriv), ETH_ALEN);
-       wpsielen += 0x10;
-
-       /*      Manufacturer */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_MANUFACTURER);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0007);
-       wpsielen += 2;
-
-       /*      Value: */
-       memcpy(wpsie + wpsielen, "Realtek", 7);
-       wpsielen += 7;
-
-       /*      Model Name */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_MODEL_NAME);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0006);
-       wpsielen += 2;
-
-       /*      Value: */
-       memcpy(wpsie + wpsielen, "8188EU", 6);
-       wpsielen += 6;
-
-       /*      Model Number */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_MODEL_NUMBER);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001);
-       wpsielen += 2;
-
-       /*      Value: */
-       wpsie[wpsielen++] = 0x31;               /*      character 1 */
-
-       /*      Serial Number */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_SERIAL_NUMBER);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(ETH_ALEN);
-       wpsielen += 2;
-
-       /*      Value: */
-       memcpy(wpsie + wpsielen, "123456", ETH_ALEN);
-       wpsielen += ETH_ALEN;
-
-       /*      Primary Device Type */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_PRIMARY_DEV_TYPE);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0008);
-       wpsielen += 2;
-
-       /*      Value: */
-       /*      Category ID */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA);
-       wpsielen += 2;
-
-       /*      OUI */
-       *(__be32 *)(wpsie + wpsielen) = cpu_to_be32(WPSOUI);
-       wpsielen += 4;
-
-       /*      Sub Category ID */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER);
-       wpsielen += 2;
-
-       /*      Device Name */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(pwdinfo->device_name_len);
-       wpsielen += 2;
-
-       /*      Value: */
-       if (pwdinfo->device_name_len) {
-               memcpy(wpsie + wpsielen, pwdinfo->device_name, pwdinfo->device_name_len);
-               wpsielen += pwdinfo->device_name_len;
-       }
-
-       /*      Config Method */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_CONF_METHOD);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002);
-       wpsielen += 2;
-
-       /*      Value: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(pwdinfo->supported_wps_cm);
-       wpsielen += 2;
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen);
-
-       p2pielen = build_probe_resp_p2p_ie(pwdinfo, pframe);
-       pframe += p2pielen;
-       pattrib->pktlen += p2pielen;
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-inline void issue_probereq_p2p(struct adapter *padapter)
-{
-       struct xmit_frame               *pmgntframe;
-       struct pkt_attrib               *pattrib;
-       unsigned char                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       unsigned char                   *mac;
-       struct xmit_priv                *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-       u8 wpsie[255] = { 0x00 }, p2pie[255] = { 0x00 };
-       u16 wpsielen = 0, p2pielen = 0;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       mac = myid(&padapter->eeprompriv);
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       if ((pwdinfo->p2p_info.scan_op_ch_only) || (pwdinfo->rx_invitereq_info.scan_op_ch_only)) {
-               /*      This two flags will be set when this is only the P2P client mode. */
-               memcpy(pwlanhdr->addr1, pwdinfo->p2p_peer_interface_addr, ETH_ALEN);
-               memcpy(pwlanhdr->addr3, pwdinfo->p2p_peer_interface_addr, ETH_ALEN);
-       } else {
-               /*      broadcast probe request frame */
-               eth_broadcast_addr(pwlanhdr->addr1);
-               eth_broadcast_addr(pwlanhdr->addr3);
-       }
-
-       memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_PROBEREQ);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ))
-               pframe = rtw_set_ie(pframe, _SSID_IE_, pwdinfo->tx_prov_disc_info.ssid.SsidLength, pwdinfo->tx_prov_disc_info.ssid.Ssid, &pattrib->pktlen);
-       else
-               pframe = rtw_set_ie(pframe, _SSID_IE_, P2P_WILDCARD_SSID_LEN, pwdinfo->p2p_wildcard_ssid, &pattrib->pktlen);
-
-       /*      Use the OFDM rate in the P2P probe request frame. (6(B), 9(B), 12(B), 24(B), 36, 48, 54) */
-       pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pwdinfo->support_rate, &pattrib->pktlen);
-
-       /*      WPS IE */
-       /*      Noted by Albert 20110221 */
-       /*      According to the WPS specification, all the WPS attribute is presented by Big Endian. */
-
-       wpsielen = 0;
-       /*      WPS OUI */
-       *(__be32 *)(wpsie) = cpu_to_be32(WPSOUI);
-       wpsielen += 4;
-
-       /*      WPS version */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_VER1);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0001);
-       wpsielen += 2;
-
-       /*      Value: */
-       wpsie[wpsielen++] = WPS_VERSION_1;      /*      Version 1.0 */
-
-       if (!pmlmepriv->wps_probe_req_ie) {
-               /*      UUID-E */
-               /*      Type: */
-               *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_UUID_E);
-               wpsielen += 2;
-
-               /*      Length: */
-               *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0010);
-               wpsielen += 2;
-
-               /*      Value: */
-               memcpy(wpsie + wpsielen, myid(&padapter->eeprompriv), ETH_ALEN);
-               wpsielen += 0x10;
-
-               /*      Config Method */
-               /*      Type: */
-               *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_CONF_METHOD);
-               wpsielen += 2;
-
-               /*      Length: */
-               *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002);
-               wpsielen += 2;
-
-               /*      Value: */
-               *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(pwdinfo->supported_wps_cm);
-               wpsielen += 2;
-       }
-
-       /*      Device Name */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(pwdinfo->device_name_len);
-       wpsielen += 2;
-
-       /*      Value: */
-       memcpy(wpsie + wpsielen, pwdinfo->device_name, pwdinfo->device_name_len);
-       wpsielen += pwdinfo->device_name_len;
-
-       /*      Primary Device Type */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_PRIMARY_DEV_TYPE);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0008);
-       wpsielen += 2;
-
-       /*      Value: */
-       /*      Category ID */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_PDT_CID_RTK_WIDI);
-       wpsielen += 2;
-
-       /*      OUI */
-       *(__be32 *)(wpsie + wpsielen) = cpu_to_be32(WPSOUI);
-       wpsielen += 4;
-
-       /*      Sub Category ID */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_PDT_SCID_RTK_DMP);
-       wpsielen += 2;
-
-       /*      Device Password ID */
-       /*      Type: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_ATTR_DEVICE_PWID);
-       wpsielen += 2;
-
-       /*      Length: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(0x0002);
-       wpsielen += 2;
-
-       /*      Value: */
-       *(__be16 *)(wpsie + wpsielen) = cpu_to_be16(WPS_DPID_REGISTRAR_SPEC);   /*      Registrar-specified */
-       wpsielen += 2;
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen);
-
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /*      Commented by Albert 20110221 */
-       /*      According to the P2P Specification, the probe request frame should contain 5 P2P attributes */
-       /*      1. P2P Capability */
-       /*      2. P2P Device ID if this probe request wants to find the specific P2P device */
-       /*      3. Listen Channel */
-       /*      4. Extended Listen Timing */
-       /*      5. Operating Channel if this WiFi is working as the group owner now */
-
-       /*      P2P Capability */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CAPABILITY;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Device Capability Bitmap, 1 byte */
-       p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT;
-
-       /*      Group Capability Bitmap, 1 byte */
-       if (pwdinfo->persistent_supported)
-               p2pie[p2pielen++] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
-       else
-               p2pie[p2pielen++] = DMP_P2P_GRPCAP_SUPPORT;
-
-       /*      Listen Channel */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_LISTEN_CH;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Country String */
-       p2pie[p2pielen++] = 'X';
-       p2pie[p2pielen++] = 'X';
-
-       /*      The third byte should be set to 0x04. */
-       /*      Described in the "Operating Channel Attribute" section. */
-       p2pie[p2pielen++] = 0x04;
-
-       /*      Operating Class */
-       p2pie[p2pielen++] = 0x51;       /*      Copy from SD7 */
-
-       /*      Channel Number */
-       p2pie[p2pielen++] = pwdinfo->listen_channel;    /*      listen channel */
-
-       /*      Extended Listen Timing */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_EX_LISTEN_TIMING;
-
-       /*      Length: */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0004);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Availability Period */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF);
-       p2pielen += 2;
-
-       /*      Availability Interval */
-       *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF);
-       p2pielen += 2;
-
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-               /*      Operating Channel (if this WiFi is working as the group owner now) */
-               /*      Type: */
-               p2pie[p2pielen++] = P2P_ATTR_OPERATING_CH;
-
-               /*      Length: */
-               *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0005);
-               p2pielen += 2;
-
-               /*      Value: */
-               /*      Country String */
-               p2pie[p2pielen++] = 'X';
-               p2pie[p2pielen++] = 'X';
-
-               /*      The third byte should be set to 0x04. */
-               /*      Described in the "Operating Channel Attribute" section. */
-               p2pie[p2pielen++] = 0x04;
-
-               /*      Operating Class */
-               p2pie[p2pielen++] = 0x51;       /*      Copy from SD7 */
-
-               /*      Channel Number */
-               p2pie[p2pielen++] = pwdinfo->operating_channel; /*      operating channel number */
-       }
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen);
-
-       if (pmlmepriv->wps_probe_req_ie) {
-               /* WPS IE */
-               memcpy(pframe, pmlmepriv->wps_probe_req_ie, pmlmepriv->wps_probe_req_ie_len);
-               pattrib->pktlen += pmlmepriv->wps_probe_req_ie_len;
-               pframe += pmlmepriv->wps_probe_req_ie_len;
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-static s32 rtw_action_public_decache(struct recv_frame *recv_frame, u8 token)
-{
-       struct adapter *adapter = recv_frame->adapter;
-       struct mlme_ext_priv *mlmeext = &adapter->mlmeextpriv;
-       u8 *frame = recv_frame->rx_data;
-       u16 seq_ctrl = ((recv_frame->attrib.seq_num & 0xffff) << 4) |
-               (recv_frame->attrib.frag_num & 0xf);
-
-       if (GetRetry(frame)) {
-               if ((seq_ctrl == mlmeext->action_public_rxseq) &&
-                   (token == mlmeext->action_public_dialog_token))
-                       return _FAIL;
-       }
-
-       mlmeext->action_public_rxseq = seq_ctrl;
-       mlmeext->action_public_dialog_token = token;
-       return _SUCCESS;
-}
-
-static unsigned int on_action_public_p2p(struct recv_frame *precv_frame)
-{
-       u8 *pframe = precv_frame->rx_data;
-       u8 *frame_body;
-       u8 dialogToken = 0;
-       struct adapter *padapter = precv_frame->adapter;
-       uint len = precv_frame->len;
-       u8 *p2p_ie;
-       u32     p2p_ielen;
-       struct  wifidirect_info *pwdinfo = &padapter->wdinfo;
-       u8      result = P2P_STATUS_SUCCESS;
-       u8      empty_addr[ETH_ALEN] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
-
-       frame_body = (unsigned char *)(pframe + sizeof(struct ieee80211_hdr_3addr));
-
-       dialogToken = frame_body[7];
-
-       if (rtw_action_public_decache(precv_frame, dialogToken) == _FAIL)
-               return _FAIL;
-
-       _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey);
-       /*      Do nothing if the driver doesn't enable the P2P function. */
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))
-               return _SUCCESS;
-
-       len -= sizeof(struct ieee80211_hdr_3addr);
-
-       switch (frame_body[6]) { /* OUI Subtype */
-       case P2P_GO_NEGO_REQ:
-               memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info));
-
-               if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ))
-                       rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
-
-               if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL)) {
-                       /*      Commented by Albert 20110526 */
-                       /*      In this case, this means the previous nego fail doesn't be reset yet. */
-                       _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer);
-                       /*      Restore the previous p2p state */
-                       rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
-               }
-
-               /*      Commented by Kurt 20110902 */
-               /* Add if statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered. */
-               if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING))
-                       rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
-
-               /*      Commented by Kurt 20120113 */
-               /*      Get peer_dev_addr here if peer doesn't issue prov_disc frame. */
-               if (!memcmp(pwdinfo->rx_prov_disc_info.peerDevAddr, empty_addr, ETH_ALEN))
-                       memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN);
-
-               result = process_p2p_group_negotation_req(pwdinfo, frame_body, len);
-               issue_p2p_GO_response(padapter, GetAddr2Ptr(pframe), frame_body, len, result);
-
-               /*      Commented by Albert 20110718 */
-               /*      No matter negotiating or negotiation failure, the driver should set up the restore P2P state timer. */
-               _set_timer(&pwdinfo->restore_p2p_state_timer, 5000);
-               break;
-       case P2P_GO_NEGO_RESP:
-               if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING)) {
-                       /*      Commented by Albert 20110425 */
-                       /*      The restore timer is enabled when issuing the nego request frame of rtw_p2p_connect function. */
-                       _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer);
-                       pwdinfo->nego_req_info.benable = false;
-                       result = process_p2p_group_negotation_resp(pwdinfo, frame_body, len);
-                       issue_p2p_GO_confirm(pwdinfo->padapter, GetAddr2Ptr(pframe), result);
-                       if (result == P2P_STATUS_SUCCESS) {
-                               if (rtw_p2p_role(pwdinfo) == P2P_ROLE_CLIENT) {
-                                       pwdinfo->p2p_info.operation_ch[0] = pwdinfo->peer_operating_ch;
-                                       pwdinfo->p2p_info.scan_op_ch_only = 1;
-                                       _set_timer(&pwdinfo->reset_ch_sitesurvey2, P2P_RESET_SCAN_CH);
-                               }
-                       }
-                       /*      Reset the dialog token for group negotiation frames. */
-                       pwdinfo->negotiation_dialog_token = 1;
-                       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
-                               _set_timer(&pwdinfo->restore_p2p_state_timer, 5000);
-               }
-               break;
-       case P2P_GO_NEGO_CONF:
-               result = process_p2p_group_negotation_confirm(pwdinfo, frame_body, len);
-               if (result == P2P_STATUS_SUCCESS) {
-                       if (rtw_p2p_role(pwdinfo) == P2P_ROLE_CLIENT) {
-                               pwdinfo->p2p_info.operation_ch[0] = pwdinfo->peer_operating_ch;
-                               pwdinfo->p2p_info.scan_op_ch_only = 1;
-                               _set_timer(&pwdinfo->reset_ch_sitesurvey2, P2P_RESET_SCAN_CH);
-                       }
-               }
-               break;
-       case P2P_INVIT_REQ:
-               /*      Added by Albert 2010/10/05 */
-               /*      Received the P2P Invite Request frame. */
-
-               p2p_ie = rtw_get_p2p_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen);
-               if (p2p_ie) {
-                       /*      Parse the necessary information from the P2P Invitation Request frame. */
-                       /*      For example: The MAC address of sending this P2P Invitation Request frame. */
-                       u32     attr_contentlen = 0;
-                       u8      status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
-                       struct group_id_info group_id;
-                       u8      invitation_flag = 0;
-
-                       rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INVITATION_FLAGS, &invitation_flag, &attr_contentlen);
-                       if (attr_contentlen) {
-                               rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_BSSID, pwdinfo->p2p_peer_interface_addr, &attr_contentlen);
-                               /*      Commented by Albert 20120510 */
-                               /*      Copy to the pwdinfo->p2p_peer_interface_addr. */
-                               /*      So that the WFD UI (or Sigma) can get the peer interface address by using the following command. */
-                               /*      #> iwpriv wlan0 p2p_get peer_ifa */
-                               /*      After having the peer interface address, the sigma can find the correct conf file for wpa_supplicant. */
-
-                               if (invitation_flag & P2P_INVITATION_FLAGS_PERSISTENT) {
-                                       /*      Re-invoke the persistent group. */
-
-                                       memset(&group_id, 0x00, sizeof(struct group_id_info));
-                                       rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, (u8 *)&group_id, &attr_contentlen);
-                                       if (attr_contentlen) {
-                                               if (!memcmp(group_id.go_device_addr, myid(&padapter->eeprompriv), ETH_ALEN)) {
-                                                       /*      The p2p device sending this p2p invitation request wants this Wi-Fi device to be the persistent GO. */
-                                                       rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_GO);
-                                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
-                                                       status_code = P2P_STATUS_SUCCESS;
-                                               } else {
-                                                       /*      The p2p device sending this p2p invitation request wants to be the persistent GO. */
-                                                       if (is_matched_in_profilelist(pwdinfo->p2p_peer_interface_addr, &pwdinfo->profileinfo[0])) {
-                                                               u8 operatingch_info[5] = { 0x00 };
-                                                               if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen)) {
-                                                                       if (rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, (u32)operatingch_info[4])) {
-                                                                               /*      The operating channel is acceptable for this device. */
-                                                                               pwdinfo->rx_invitereq_info.operation_ch[0] = operatingch_info[4];
-                                                                               pwdinfo->rx_invitereq_info.scan_op_ch_only = 1;
-                                                                               _set_timer(&pwdinfo->reset_ch_sitesurvey, P2P_RESET_SCAN_CH);
-                                                                               rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_MATCH);
-                                                                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-                                                                               status_code = P2P_STATUS_SUCCESS;
-                                                                       } else {
-                                                                               /*      The operating channel isn't supported by this device. */
-                                                                               rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH);
-                                                                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-                                                                               status_code = P2P_STATUS_FAIL_NO_COMMON_CH;
-                                                                               _set_timer(&pwdinfo->restore_p2p_state_timer, 3000);
-                                                                       }
-                                                               } else {
-                                                                       /*      Commented by Albert 20121130 */
-                                                                       /*      Intel will use the different P2P IE to store the operating channel information */
-                                                                       /*      Workaround for Intel WiDi 3.5 */
-                                                                       rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_MATCH);
-                                                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-                                                                       status_code = P2P_STATUS_SUCCESS;
-                                                               }
-                                                       } else {
-                                                               rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH);
-                                                               status_code = P2P_STATUS_FAIL_UNKNOWN_P2PGROUP;
-                                                       }
-                                               }
-                                       } else {
-                                               status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
-                                       }
-                               } else {
-                                       /*      Received the invitation to join a P2P group. */
-
-                                       memset(&group_id, 0x00, sizeof(struct group_id_info));
-                                       rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, (u8 *)&group_id, &attr_contentlen);
-                                       if (attr_contentlen) {
-                                               if (!memcmp(group_id.go_device_addr, myid(&padapter->eeprompriv), ETH_ALEN)) {
-                                                       /*      In this case, the GO can't be myself. */
-                                                       rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_DISMATCH);
-                                                       status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
-                                               } else {
-                                                       /*      The p2p device sending this p2p invitation request wants to join an existing P2P group */
-                                                       /*      Commented by Albert 2012/06/28 */
-                                                       /*      In this case, this Wi-Fi device should use the iwpriv command to get the peer device address. */
-                                                       /*      The peer device address should be the destination address for the provisioning discovery request. */
-                                                       /*      Then, this Wi-Fi device should use the iwpriv command to get the peer interface address. */
-                                                       /*      The peer interface address should be the address for WPS mac address */
-                                                       memcpy(pwdinfo->p2p_peer_device_addr, group_id.go_device_addr, ETH_ALEN);
-                                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-                                                       rtw_p2p_set_state(pwdinfo, P2P_STATE_RECV_INVITE_REQ_JOIN);
-                                                       status_code = P2P_STATUS_SUCCESS;
-                                               }
-                                       } else {
-                                               status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
-                                       }
-                               }
-                       } else {
-                               status_code = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
-                       }
-
-                       pwdinfo->inviteresp_info.token = frame_body[7];
-                       issue_p2p_invitation_response(padapter, GetAddr2Ptr(pframe), pwdinfo->inviteresp_info.token, status_code);
-               }
-               break;
-       case P2P_INVIT_RESP: {
-               u8      attr_content = 0x00;
-               u32     attr_contentlen = 0;
-
-               _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer);
-               p2p_ie = rtw_get_p2p_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen);
-               if (p2p_ie) {
-                       rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen);
-
-                       if (attr_contentlen == 1) {
-                               pwdinfo->invitereq_info.benable = false;
-
-                               if (attr_content == P2P_STATUS_SUCCESS) {
-                                       if (!memcmp(pwdinfo->invitereq_info.go_bssid, myid(&padapter->eeprompriv), ETH_ALEN)) {
-                                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
-                                       } else {
-                                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-                                       }
-                                       rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INVITE_RESP_OK);
-                               } else {
-                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-                                       rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL);
-                               }
-                       } else {
-                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-                               rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL);
-                       }
-               } else {
-                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-                       rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL);
-               }
-
-               if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_INVITE_RESP_FAIL))
-                       _set_timer(&pwdinfo->restore_p2p_state_timer, 5000);
-               break;
-       }
-       case P2P_DEVDISC_REQ:
-               process_p2p_devdisc_req(pwdinfo, pframe, len);
-               break;
-       case P2P_DEVDISC_RESP:
-               process_p2p_devdisc_resp(pwdinfo, pframe, len);
-               break;
-       case P2P_PROVISION_DISC_REQ:
-               process_p2p_provdisc_req(pwdinfo, pframe, len);
-               memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN);
-
-               /* 20110902 Kurt */
-               /* Add the following statement to avoid receiving duplicate prov disc req. such that pre_p2p_state would be covered. */
-               if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ))
-                       rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
-
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_REQ);
-               _set_timer(&pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT);
-               break;
-       case P2P_PROVISION_DISC_RESP:
-               /*      Commented by Albert 20110707 */
-               /*      Should we check the pwdinfo->tx_prov_disc_info.bsent flag here?? */
-               /*      Commented by Albert 20110426 */
-               /*      The restore timer is enabled when issuing the provisioing request frame in rtw_p2p_prov_disc function. */
-               _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer);
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_PROVISION_DIS_RSP);
-               process_p2p_provdisc_resp(pwdinfo, pframe);
-               _set_timer(&pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT);
-               break;
-       }
-
-       return _SUCCESS;
-}
-
-static void on_action_public(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)precv_frame->rx_data;
-       u8 *frame_body = (u8 *)&mgmt->u;
-
-       /* All members of the action enum start with action_code. */
-       if (mgmt->u.action.u.s1g.action_code == WLAN_PUB_ACTION_VENDOR_SPECIFIC) {
-               if (!memcmp(frame_body + 2, P2P_OUI, 4))
-                       on_action_public_p2p(precv_frame);
-       } else {
-               rtw_action_public_decache(precv_frame, frame_body[2]);
-       }
-}
-
-static void OnAction_p2p(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       u8 *frame_body;
-       u8 OUI_Subtype;
-       u8 *pframe = precv_frame->rx_data;
-       uint len = precv_frame->len;
-       struct  wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       frame_body = (unsigned char *)(pframe + sizeof(struct ieee80211_hdr_3addr));
-
-       if (be32_to_cpu(*((__be32 *)(frame_body + 1))) != P2POUI)
-               return;
-
-       len -= sizeof(struct ieee80211_hdr_3addr);
-       OUI_Subtype = frame_body[5];
-
-       if (OUI_Subtype == P2P_PRESENCE_REQUEST)
-               process_p2p_presence_req(pwdinfo, pframe, len);
-}
-
-static void OnAction(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)precv_frame->rx_data;
-
-       if (!ether_addr_equal(myid(&padapter->eeprompriv), mgmt->da))
-               return;
-
-       switch (mgmt->u.action.category) {
-       case WLAN_CATEGORY_BACK:
-               OnAction_back(padapter, precv_frame);
-               break;
-       case WLAN_CATEGORY_PUBLIC:
-               on_action_public(padapter, precv_frame);
-               break;
-       case RTW_WLAN_CATEGORY_P2P:
-               OnAction_p2p(padapter, precv_frame);
-               break;
-       }
-}
-
-struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv)
-{
-       struct xmit_frame                       *pmgntframe;
-       struct xmit_buf                         *pxmitbuf;
-
-       pmgntframe = rtw_alloc_xmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return NULL;
-
-       pxmitbuf = rtw_alloc_xmitbuf_ext(pxmitpriv);
-       if (!pxmitbuf) {
-               rtw_free_xmitframe(pxmitpriv, pmgntframe);
-               return NULL;
-       }
-       pmgntframe->frame_tag = MGNT_FRAMETAG;
-       pmgntframe->pxmitbuf = pxmitbuf;
-       pmgntframe->buf_addr = pxmitbuf->pbuf;
-       pxmitbuf->priv_data = pmgntframe;
-       return pmgntframe;
-}
-
-void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       mlme_handler mlme_sta_tbl[] = {
-               OnAssocReq,
-               OnAssocRsp,
-               OnAssocReq,
-               OnAssocRsp,
-               OnProbeReq,
-               OnProbeRsp,
-               NULL,
-               NULL,
-               OnBeacon,
-               NULL,
-               OnDisassoc,
-               OnAuthClient,
-               OnDeAuth,
-               OnAction,
-       };
-       int index;
-       mlme_handler fct;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)precv_frame->rx_data;
-       struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, hdr->addr2);
-
-       if (!ieee80211_is_mgmt(hdr->frame_control))
-               return;
-
-       /* receive the frames that ra(a1) is my address or ra(a1) is bc address. */
-       if (memcmp(hdr->addr1, myid(&padapter->eeprompriv), ETH_ALEN) &&
-           !is_broadcast_ether_addr(hdr->addr1))
-               return;
-
-       index = (le16_to_cpu(hdr->frame_control) & IEEE80211_FCTL_STYPE) >> 4;
-       if (index >= ARRAY_SIZE(mlme_sta_tbl))
-               return;
-       fct = mlme_sta_tbl[index];
-
-       if (psta) {
-               if (ieee80211_has_retry(hdr->frame_control)) {
-                       if (precv_frame->attrib.seq_num == psta->RxMgmtFrameSeqNum)
-                               /* drop the duplicate management frame */
-                               return;
-               }
-               psta->RxMgmtFrameSeqNum = precv_frame->attrib.seq_num;
-       }
-
-       if (ieee80211_is_auth(hdr->frame_control)) {
-               if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
-                       fct = OnAuth;
-               else
-                       fct = OnAuthClient;
-       }
-
-       if (fct)
-               fct(padapter, precv_frame);
-}
-
-/****************************************************************************
-
-Following are some TX functions for WiFi MLME
-
-*****************************************************************************/
-
-void update_mgnt_tx_rate(struct adapter *padapter, u8 rate)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-
-       pmlmeext->tx_rate = rate;
-}
-
-void update_mgntframe_attrib(struct adapter *padapter, struct pkt_attrib *pattrib)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-
-       memset((u8 *)(pattrib), 0, sizeof(struct pkt_attrib));
-
-       pattrib->hdrlen = 24;
-       pattrib->nr_frags = 1;
-       pattrib->priority = 7;
-       pattrib->mac_id = 0;
-       pattrib->qsel = 0x12;
-
-       pattrib->pktlen = 0;
-
-       if (pmlmeext->cur_wireless_mode & WIRELESS_11B)
-               pattrib->raid = 6;/* b mode */
-       else
-               pattrib->raid = 5;/* a/g mode */
-
-       pattrib->encrypt = _NO_PRIVACY_;
-       pattrib->bswenc = false;
-
-       pattrib->qos_en = false;
-       pattrib->ht_en = false;
-       pattrib->bwmode = HT_CHANNEL_WIDTH_20;
-       pattrib->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-       pattrib->sgi = false;
-
-       pattrib->seqnum = pmlmeext->mgnt_seq;
-
-       pattrib->retry_ctrl = true;
-}
-
-void dump_mgntframe(struct adapter *padapter, struct xmit_frame *pmgntframe)
-{
-       rtl8188eu_mgnt_xmit(padapter, pmgntframe);
-}
-
-s32 dump_mgntframe_and_wait(struct adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms)
-{
-       s32 ret = _FAIL;
-       struct xmit_buf *pxmitbuf = pmgntframe->pxmitbuf;
-       struct submit_ctx sctx;
-
-       if (padapter->bSurpriseRemoved || padapter->bDriverStopped)
-               return ret;
-
-       rtw_sctx_init(&sctx, timeout_ms);
-       pxmitbuf->sctx = &sctx;
-
-       ret = rtl8188eu_mgnt_xmit(padapter, pmgntframe);
-
-       if (ret == _SUCCESS)
-               ret = rtw_sctx_wait(&sctx);
-
-       return ret;
-}
-
-s32 dump_mgntframe_and_wait_ack(struct adapter *padapter, struct xmit_frame *pmgntframe)
-{
-       s32 ret = _FAIL;
-       u32 timeout_ms = 500;/*   500ms */
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-
-       mutex_lock(&pxmitpriv->ack_tx_mutex);
-       pxmitpriv->ack_tx = true;
-
-       pmgntframe->ack_report = 1;
-       if (rtl8188eu_mgnt_xmit(padapter, pmgntframe) == _SUCCESS) {
-               ret = rtw_ack_tx_wait(pxmitpriv, timeout_ms);
-       }
-
-       pxmitpriv->ack_tx = false;
-       mutex_unlock(&pxmitpriv->ack_tx_mutex);
-
-       return ret;
-}
-
-static int update_hidden_ssid(u8 *ies, u32 ies_len, u8 hidden_ssid_mode)
-{
-       u8 *ssid_ie;
-       int ssid_len_ori;
-       int len_diff = 0;
-
-       ssid_ie = rtw_get_ie(ies,  WLAN_EID_SSID, &ssid_len_ori, ies_len);
-
-       if (ssid_ie && ssid_len_ori > 0) {
-               switch (hidden_ssid_mode) {
-               case 1: {
-                       u8 *next_ie = ssid_ie + 2 + ssid_len_ori;
-                       u32 remain_len = 0;
-
-                       remain_len = ies_len - (next_ie - ies);
-
-                       ssid_ie[1] = 0;
-                       memcpy(ssid_ie + 2, next_ie, remain_len);
-                       len_diff -= ssid_len_ori;
-
-                       break;
-               }
-               case 2:
-                       memset(&ssid_ie[2], 0, ssid_len_ori);
-                       break;
-               default:
-                       break;
-               }
-       }
-
-       return len_diff;
-}
-
-void issue_beacon(struct adapter *padapter, int timeout_ms)
-{
-       struct xmit_frame       *pmgntframe;
-       struct pkt_attrib       *pattrib;
-       unsigned char   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       unsigned int    rate_len;
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex            *cur_network = &pmlmeinfo->network;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-       spin_lock_bh(&pmlmepriv->bcn_update_lock);
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-       pattrib->qsel = 0x10;
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       eth_broadcast_addr(pwlanhdr->addr1);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
-       /* pmlmeext->mgnt_seq++; */
-       SetFrameSubType(pframe, WIFI_BEACON);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) {
-               /*  for P2P : Primary Device Type & Device Name */
-               u32 wpsielen = 0, insert_len = 0;
-               u8 *wpsie = NULL;
-               wpsie = rtw_get_wps_ie(cur_network->IEs + _FIXED_IE_LENGTH_, cur_network->IELength - _FIXED_IE_LENGTH_, NULL, &wpsielen);
-
-               if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && wpsie && wpsielen > 0) {
-                       uint wps_offset, remainder_ielen;
-                       u8 *premainder_ie, *pframe_wscie;
-
-                       wps_offset = (uint)(wpsie - cur_network->IEs);
-                       premainder_ie = wpsie + wpsielen;
-                       remainder_ielen = cur_network->IELength - wps_offset - wpsielen;
-                       pframe_wscie = pframe + wps_offset;
-                       memcpy(pframe, cur_network->IEs, wps_offset + wpsielen);
-                       pframe += (wps_offset + wpsielen);
-                       pattrib->pktlen += (wps_offset + wpsielen);
-
-                       /* now pframe is end of wsc ie, insert Primary Device Type & Device Name */
-                       /*      Primary Device Type */
-                       /*      Type: */
-                       *(__be16 *)(pframe + insert_len) = cpu_to_be16(WPS_ATTR_PRIMARY_DEV_TYPE);
-                       insert_len += 2;
-
-                       /*      Length: */
-                       *(__be16 *)(pframe + insert_len) = cpu_to_be16(0x0008);
-                       insert_len += 2;
-
-                       /*      Value: */
-                       /*      Category ID */
-                       *(__be16 *)(pframe + insert_len) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA);
-                       insert_len += 2;
-
-                       /*      OUI */
-                       *(__be32 *)(pframe + insert_len) = cpu_to_be32(WPSOUI);
-                       insert_len += 4;
-
-                       /*      Sub Category ID */
-                       *(__be16 *)(pframe + insert_len) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER);
-                       insert_len += 2;
-
-                       /*      Device Name */
-                       /*      Type: */
-                       *(__be16 *)(pframe + insert_len) = cpu_to_be16(WPS_ATTR_DEVICE_NAME);
-                       insert_len += 2;
-
-                       /*      Length: */
-                       *(__be16 *)(pframe + insert_len) = cpu_to_be16(pwdinfo->device_name_len);
-                       insert_len += 2;
-
-                       /*      Value: */
-                       memcpy(pframe + insert_len, pwdinfo->device_name, pwdinfo->device_name_len);
-                       insert_len += pwdinfo->device_name_len;
-
-                       /* update wsc ie length */
-                       *(pframe_wscie + 1) = (wpsielen - 2) + insert_len;
-
-                       /* pframe move to end */
-                       pframe += insert_len;
-                       pattrib->pktlen += insert_len;
-
-                       /* copy remainder_ie to pframe */
-                       memcpy(pframe, premainder_ie, remainder_ielen);
-                       pframe += remainder_ielen;
-                       pattrib->pktlen += remainder_ielen;
-               } else {
-                       int len_diff;
-                       memcpy(pframe, cur_network->IEs, cur_network->IELength);
-                       len_diff = update_hidden_ssid(
-                               pframe + _BEACON_IE_OFFSET_
-                               , cur_network->IELength - _BEACON_IE_OFFSET_
-                               , pmlmeinfo->hidden_ssid_mode
-                       );
-                       pframe += (cur_network->IELength + len_diff);
-                       pattrib->pktlen += (cur_network->IELength + len_diff);
-               }
-
-               {
-                       u8 *wps_ie;
-                       uint wps_ielen;
-                       u8 sr = 0;
-                       wps_ie = rtw_get_wps_ie(pmgntframe->buf_addr + TXDESC_OFFSET + sizeof(struct ieee80211_hdr_3addr) + _BEACON_IE_OFFSET_,
-                               pattrib->pktlen - sizeof(struct ieee80211_hdr_3addr) - _BEACON_IE_OFFSET_, NULL, &wps_ielen);
-                       if (wps_ie && wps_ielen > 0)
-                               rtw_get_wps_attr_content(wps_ie,  wps_ielen, WPS_ATTR_SELECTED_REGISTRAR, (u8 *)(&sr), NULL);
-                       if (sr != 0)
-                               set_fwstate(pmlmepriv, WIFI_UNDER_WPS);
-                       else
-                               _clr_fwstate_(pmlmepriv, WIFI_UNDER_WPS);
-               }
-
-               if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-                       u32 len;
-                       len = build_beacon_p2p_ie(pwdinfo, pframe);
-
-                       pframe += len;
-                       pattrib->pktlen += len;
-               }
-
-               goto _issue_bcn;
-       }
-
-       /* below for ad-hoc mode */
-
-       /* timestamp will be inserted by hardware */
-       pframe += 8;
-       pattrib->pktlen += 8;
-
-       /*  beacon interval: 2 bytes */
-
-       memcpy(pframe, (unsigned char *)(rtw_get_beacon_interval_from_ie(cur_network->IEs)), 2);
-
-       pframe += 2;
-       pattrib->pktlen += 2;
-
-       /*  capability info: 2 bytes */
-
-       memcpy(pframe, (unsigned char *)(rtw_get_capability_from_ie(cur_network->IEs)), 2);
-
-       pframe += 2;
-       pattrib->pktlen += 2;
-
-       /*  SSID */
-       pframe = rtw_set_ie(pframe, _SSID_IE_, cur_network->Ssid.SsidLength, cur_network->Ssid.Ssid, &pattrib->pktlen);
-
-       /*  supported rates... */
-       rate_len = rtw_get_rateset_len(cur_network->SupportedRates);
-       pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, ((rate_len > 8) ? 8 : rate_len), cur_network->SupportedRates, &pattrib->pktlen);
-
-       /*  DS parameter set */
-       pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&cur_network->Configuration.DSConfig, &pattrib->pktlen);
-
-       {
-               u8 erpinfo = 0;
-               u32 ATIMWindow;
-               /*  IBSS Parameter Set... */
-               ATIMWindow = 0;
-               pframe = rtw_set_ie(pframe, _IBSS_PARA_IE_, 2, (unsigned char *)(&ATIMWindow), &pattrib->pktlen);
-
-               /* ERP IE */
-               pframe = rtw_set_ie(pframe, _ERPINFO_IE_, 1, &erpinfo, &pattrib->pktlen);
-       }
-
-       /*  EXTERNDED SUPPORTED RATE */
-       if (rate_len > 8)
-               pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, (rate_len - 8), (cur_network->SupportedRates + 8), &pattrib->pktlen);
-       /* todo:HT for adhoc */
-_issue_bcn:
-
-       pmlmepriv->update_bcn = false;
-
-       spin_unlock_bh(&pmlmepriv->bcn_update_lock);
-
-       if ((pattrib->pktlen + TXDESC_SIZE) > 512)
-               return;
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       if (timeout_ms > 0)
-               dump_mgntframe_and_wait(padapter, pmgntframe, timeout_ms);
-       else
-               dump_mgntframe(padapter, pmgntframe);
-}
-
-void issue_probersp(struct adapter *padapter, unsigned char *da, u8 is_valid_p2p_probereq)
-{
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       unsigned char                                   *mac, *bssid;
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-       u8 *pwps_ie;
-       uint wps_ielen;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex            *cur_network = &pmlmeinfo->network;
-       unsigned int    rate_len;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       mac = myid(&padapter->eeprompriv);
-       bssid = cur_network->MacAddress;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-       memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
-       memcpy(pwlanhdr->addr3, bssid, ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(fctrl, WIFI_PROBERSP);
-
-       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = pattrib->hdrlen;
-       pframe += pattrib->hdrlen;
-
-       if (cur_network->IELength > MAX_IE_SZ)
-               return;
-
-       if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) {
-               pwps_ie = rtw_get_wps_ie(cur_network->IEs + _FIXED_IE_LENGTH_, cur_network->IELength - _FIXED_IE_LENGTH_, NULL, &wps_ielen);
-
-               /* inerset & update wps_probe_resp_ie */
-               if (pmlmepriv->wps_probe_resp_ie && pwps_ie && wps_ielen > 0) {
-                       uint wps_offset, remainder_ielen;
-                       u8 *premainder_ie;
-
-                       wps_offset = (uint)(pwps_ie - cur_network->IEs);
-
-                       premainder_ie = pwps_ie + wps_ielen;
-
-                       remainder_ielen = cur_network->IELength - wps_offset - wps_ielen;
-
-                       memcpy(pframe, cur_network->IEs, wps_offset);
-                       pframe += wps_offset;
-                       pattrib->pktlen += wps_offset;
-
-                       wps_ielen = (uint)pmlmepriv->wps_probe_resp_ie[1];/* to get ie data len */
-                       if ((wps_offset + wps_ielen + 2) <= MAX_IE_SZ) {
-                               memcpy(pframe, pmlmepriv->wps_probe_resp_ie, wps_ielen + 2);
-                               pframe += wps_ielen + 2;
-                               pattrib->pktlen += wps_ielen + 2;
-                       }
-
-                       if ((wps_offset + wps_ielen + 2 + remainder_ielen) <= MAX_IE_SZ) {
-                               memcpy(pframe, premainder_ie, remainder_ielen);
-                               pframe += remainder_ielen;
-                               pattrib->pktlen += remainder_ielen;
-                       }
-               } else {
-                       memcpy(pframe, cur_network->IEs, cur_network->IELength);
-                       pframe += cur_network->IELength;
-                       pattrib->pktlen += cur_network->IELength;
-               }
-       } else {
-               /* timestamp will be inserted by hardware */
-               pframe += 8;
-               pattrib->pktlen += 8;
-
-               /*  beacon interval: 2 bytes */
-
-               memcpy(pframe, (unsigned char *)(rtw_get_beacon_interval_from_ie(cur_network->IEs)), 2);
-
-               pframe += 2;
-               pattrib->pktlen += 2;
-
-               /*  capability info: 2 bytes */
-
-               memcpy(pframe, (unsigned char *)(rtw_get_capability_from_ie(cur_network->IEs)), 2);
-
-               pframe += 2;
-               pattrib->pktlen += 2;
-
-               /* below for ad-hoc mode */
-
-               /*  SSID */
-               pframe = rtw_set_ie(pframe, _SSID_IE_, cur_network->Ssid.SsidLength, cur_network->Ssid.Ssid, &pattrib->pktlen);
-
-               /*  supported rates... */
-               rate_len = rtw_get_rateset_len(cur_network->SupportedRates);
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, ((rate_len > 8) ? 8 : rate_len), cur_network->SupportedRates, &pattrib->pktlen);
-
-               /*  DS parameter set */
-               pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&cur_network->Configuration.DSConfig, &pattrib->pktlen);
-
-               if ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) {
-                       u8 erpinfo = 0;
-                       u32 ATIMWindow;
-                       /*  IBSS Parameter Set... */
-                       /* ATIMWindow = cur->Configuration.ATIMWindow; */
-                       ATIMWindow = 0;
-                       pframe = rtw_set_ie(pframe, _IBSS_PARA_IE_, 2, (unsigned char *)(&ATIMWindow), &pattrib->pktlen);
-
-                       /* ERP IE */
-                       pframe = rtw_set_ie(pframe, _ERPINFO_IE_, 1, &erpinfo, &pattrib->pktlen);
-               }
-
-               /*  EXTERNDED SUPPORTED RATE */
-               if (rate_len > 8)
-                       pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, (rate_len - 8), (cur_network->SupportedRates + 8), &pattrib->pktlen);
-               /* todo:HT for adhoc */
-       }
-
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && is_valid_p2p_probereq) {
-               u32 len;
-               len = build_probe_resp_p2p_ie(pwdinfo, pframe);
-
-               pframe += len;
-               pattrib->pktlen += len;
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-static int _issue_probereq(struct adapter *padapter, struct ndis_802_11_ssid *pssid, u8 *da, int wait_ack)
-{
-       int ret = _FAIL;
-       struct xmit_frame               *pmgntframe;
-       struct pkt_attrib               *pattrib;
-       unsigned char                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       unsigned char                   *mac;
-       unsigned char                   bssrate[NumRates];
-       struct xmit_priv                *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       int     bssrate_len = 0;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               goto exit;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       mac = myid(&padapter->eeprompriv);
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       if (da) {
-               /*      unicast probe request frame */
-               memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-               memcpy(pwlanhdr->addr3, da, ETH_ALEN);
-       } else {
-               /*      broadcast probe request frame */
-               eth_broadcast_addr(pwlanhdr->addr1);
-               eth_broadcast_addr(pwlanhdr->addr3);
-       }
-
-       memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_PROBEREQ);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       if (pssid)
-               pframe = rtw_set_ie(pframe, _SSID_IE_, pssid->SsidLength, pssid->Ssid, &pattrib->pktlen);
-       else
-               pframe = rtw_set_ie(pframe, _SSID_IE_, 0, NULL, &pattrib->pktlen);
-
-       get_rate_set(padapter, bssrate, &bssrate_len);
-
-       if (bssrate_len > 8) {
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, bssrate, &pattrib->pktlen);
-               pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, bssrate_len - 8, bssrate + 8, &pattrib->pktlen);
-       } else {
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, bssrate_len, bssrate, &pattrib->pktlen);
-       }
-
-       /* add wps_ie for wps2.0 */
-       if (pmlmepriv->wps_probe_req_ie_len > 0 && pmlmepriv->wps_probe_req_ie) {
-               memcpy(pframe, pmlmepriv->wps_probe_req_ie, pmlmepriv->wps_probe_req_ie_len);
-               pframe += pmlmepriv->wps_probe_req_ie_len;
-               pattrib->pktlen += pmlmepriv->wps_probe_req_ie_len;
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       if (wait_ack) {
-               ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
-       } else {
-               dump_mgntframe(padapter, pmgntframe);
-               ret = _SUCCESS;
-       }
-
-exit:
-       return ret;
-}
-
-inline void issue_probereq(struct adapter *padapter, struct ndis_802_11_ssid *pssid, u8 *da)
-{
-       _issue_probereq(padapter, pssid, da, false);
-}
-
-void issue_probereq_ex(struct adapter *padapter, struct ndis_802_11_ssid *pssid, u8 *da)
-{
-       int i;
-
-       for (i = 0; i < 3; i++) {
-               if (_issue_probereq(padapter, pssid, da, true) == _FAIL)
-                       msleep(1);
-               else
-                       break;
-       }
-}
-
-/*  if psta == NULL, indicate we are station (client) now... */
-void issue_auth(struct adapter *padapter, struct sta_info *psta, unsigned short status)
-{
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       unsigned int val32;
-       u16 val16;
-       __le16 le_val16;
-       int use_shared_key = 0;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_AUTH);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       if (psta) {/*  for AP mode */
-               memcpy(pwlanhdr->addr1, psta->hwaddr, ETH_ALEN);
-               memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-               memcpy(pwlanhdr->addr3, myid(&padapter->eeprompriv), ETH_ALEN);
-
-               /*  setting auth algo number */
-               val16 = (u16)psta->authalg;
-
-               if (status != _STATS_SUCCESSFUL_)
-                       val16 = 0;
-
-               if (val16) {
-                       le_val16 = cpu_to_le16(val16);
-                       use_shared_key = 1;
-               } else {
-                       le_val16 = 0;
-               }
-
-               pframe = rtw_set_fixed_ie(pframe, _AUTH_ALGM_NUM_, (unsigned char *)&le_val16, &pattrib->pktlen);
-
-               /*  setting auth seq number */
-               val16 = (u16)psta->auth_seq;
-               le_val16 = cpu_to_le16(val16);
-               pframe = rtw_set_fixed_ie(pframe, _AUTH_SEQ_NUM_, (unsigned char *)&le_val16, &pattrib->pktlen);
-
-               /*  setting status code... */
-               val16 = status;
-               le_val16 = cpu_to_le16(val16);
-               pframe = rtw_set_fixed_ie(pframe, _STATUS_CODE_, (unsigned char *)&le_val16, &pattrib->pktlen);
-
-               /*  added challenging text... */
-               if ((psta->auth_seq == 2) && (psta->state & WIFI_FW_AUTH_STATE) && (use_shared_key == 1))
-                       pframe = rtw_set_ie(pframe, _CHLGETXT_IE_, 128, psta->chg_txt, &pattrib->pktlen);
-       } else {
-               __le32 le_tmp32;
-               __le16 le_tmp16;
-               memcpy(pwlanhdr->addr1, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-               memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-               memcpy(pwlanhdr->addr3, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-
-               /*  setting auth algo number */
-               val16 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared) ? 1 : 0;/*  0:OPEN System, 1:Shared key */
-               if (val16)
-                       use_shared_key = 1;
-
-               /* setting IV for auth seq #3 */
-               if ((pmlmeinfo->auth_seq == 3) && (pmlmeinfo->state & WIFI_FW_AUTH_STATE) && (use_shared_key == 1)) {
-                       val32 = ((pmlmeinfo->iv++) | (pmlmeinfo->key_index << 30));
-                       le_tmp32 = cpu_to_le32(val32);
-                       pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&le_tmp32, &pattrib->pktlen);
-
-                       pattrib->iv_len = 4;
-               }
-
-               le_tmp16 = cpu_to_le16(val16);
-               pframe = rtw_set_fixed_ie(pframe, _AUTH_ALGM_NUM_, (unsigned char *)&le_tmp16, &pattrib->pktlen);
-
-               /*  setting auth seq number */
-               val16 = pmlmeinfo->auth_seq;
-               le_tmp16 = cpu_to_le16(val16);
-               pframe = rtw_set_fixed_ie(pframe, _AUTH_SEQ_NUM_, (unsigned char *)&le_tmp16, &pattrib->pktlen);
-
-               /*  setting status code... */
-               le_tmp16 = cpu_to_le16(status);
-               pframe = rtw_set_fixed_ie(pframe, _STATUS_CODE_, (unsigned char *)&le_tmp16, &pattrib->pktlen);
-
-               /*  then checking to see if sending challenging text... */
-               if ((pmlmeinfo->auth_seq == 3) && (pmlmeinfo->state & WIFI_FW_AUTH_STATE) && (use_shared_key == 1)) {
-                       pframe = rtw_set_ie(pframe, _CHLGETXT_IE_, 128, pmlmeinfo->chg_txt, &pattrib->pktlen);
-
-                       SetPrivacy(fctrl);
-
-                       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
-
-                       pattrib->encrypt = _WEP40_;
-
-                       pattrib->icv_len = 4;
-
-                       pattrib->pktlen += pattrib->icv_len;
-               }
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       rtw_wep_encrypt(padapter, pmgntframe);
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-void issue_asocrsp(struct adapter *padapter, unsigned short status, struct sta_info *pstat, int pkt_type)
-{
-       struct xmit_frame       *pmgntframe;
-       struct ieee80211_hdr *pwlanhdr;
-       struct pkt_attrib *pattrib;
-       unsigned char   *pbuf, *pframe;
-       unsigned short val;
-       __le16 *fctrl;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
-       u8 *ie = pnetwork->IEs;
-       __le16 lestatus, leval;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy((void *)GetAddr1Ptr(pwlanhdr), pstat->hwaddr, ETH_ALEN);
-       memcpy((void *)GetAddr2Ptr(pwlanhdr), myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy((void *)GetAddr3Ptr(pwlanhdr), get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       if ((pkt_type == WIFI_ASSOCRSP) || (pkt_type == WIFI_REASSOCRSP))
-               SetFrameSubType(pwlanhdr, pkt_type);
-       else
-               return;
-
-       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen += pattrib->hdrlen;
-       pframe += pattrib->hdrlen;
-
-       /* capability */
-       val = *(unsigned short *)rtw_get_capability_from_ie(ie);
-
-       pframe = rtw_set_fixed_ie(pframe, _CAPABILITY_, (unsigned char *)&val, &pattrib->pktlen);
-
-       lestatus = cpu_to_le16(status);
-       pframe = rtw_set_fixed_ie(pframe, _STATUS_CODE_, (unsigned char *)&lestatus, &pattrib->pktlen);
-
-       leval = cpu_to_le16(pstat->aid | BIT(14) | BIT(15));
-       pframe = rtw_set_fixed_ie(pframe, _ASOC_ID_, (unsigned char *)&leval, &pattrib->pktlen);
-
-       if (pstat->bssratelen <= 8) {
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, pstat->bssratelen, pstat->bssrateset, &pattrib->pktlen);
-       } else {
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, pstat->bssrateset, &pattrib->pktlen);
-               pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, pstat->bssratelen - 8, pstat->bssrateset + 8, &pattrib->pktlen);
-       }
-
-       if ((pstat->flags & WLAN_STA_HT) && (pmlmepriv->htpriv.ht_option)) {
-               uint ie_len = 0;
-
-               /* FILL HT CAP INFO IE */
-               pbuf = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_CAPABILITY_IE_, &ie_len, (pnetwork->IELength - _BEACON_IE_OFFSET_));
-               if (pbuf && ie_len > 0) {
-                       memcpy(pframe, pbuf, ie_len + 2);
-                       pframe += (ie_len + 2);
-                       pattrib->pktlen += (ie_len + 2);
-               }
-
-               /* FILL HT ADD INFO IE */
-               pbuf = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_ADD_INFO_IE_, &ie_len, (pnetwork->IELength - _BEACON_IE_OFFSET_));
-               if (pbuf && ie_len > 0) {
-                       memcpy(pframe, pbuf, ie_len + 2);
-                       pframe += (ie_len + 2);
-                       pattrib->pktlen += (ie_len + 2);
-               }
-       }
-
-       /* FILL WMM IE */
-       if ((pstat->flags & WLAN_STA_WME) && (pmlmepriv->qospriv.qos_option)) {
-               uint ie_len = 0;
-               unsigned char WMM_PARA_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
-
-               for (pbuf = ie + _BEACON_IE_OFFSET_;; pbuf += (ie_len + 2)) {
-                       pbuf = rtw_get_ie(pbuf, _VENDOR_SPECIFIC_IE_, &ie_len, (pnetwork->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
-                       if (pbuf && !memcmp(pbuf + 2, WMM_PARA_IE, 6)) {
-                               memcpy(pframe, pbuf, ie_len + 2);
-                               pframe += (ie_len + 2);
-                               pattrib->pktlen += (ie_len + 2);
-                               break;
-                       }
-
-                       if (!pbuf || ie_len == 0)
-                               break;
-               }
-       }
-
-       if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_REALTEK)
-               pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 6, REALTEK_96B_IE, &pattrib->pktlen);
-
-       /* add WPS IE ie for wps 2.0 */
-       if (pmlmepriv->wps_assoc_resp_ie && pmlmepriv->wps_assoc_resp_ie_len > 0) {
-               memcpy(pframe, pmlmepriv->wps_assoc_resp_ie, pmlmepriv->wps_assoc_resp_ie_len);
-
-               pframe += pmlmepriv->wps_assoc_resp_ie_len;
-               pattrib->pktlen += pmlmepriv->wps_assoc_resp_ie_len;
-       }
-
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO) && (pstat->is_p2p_device)) {
-               u32 len;
-
-               len = build_assoc_resp_p2p_ie(pwdinfo, pframe, pstat->p2p_status_code);
-
-               pframe += len;
-               pattrib->pktlen += len;
-       }
-       pattrib->last_txcmdsz = pattrib->pktlen;
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-void issue_assocreq(struct adapter *padapter)
-{
-       int ret = _FAIL;
-       struct xmit_frame       *pmgntframe;
-       struct pkt_attrib       *pattrib;
-       unsigned char           *pframe, *p;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       __le16          le_tmp;
-       unsigned int    i, j, ie_len, index = 0;
-       unsigned char bssrate[NumRates], sta_bssrate[NumRates];
-       struct ndis_802_11_var_ie *pIE;
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       struct xmit_priv                *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       int     bssrate_len = 0, sta_bssrate_len = 0;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-       u8 p2pie[255] = { 0x00 };
-       u16 p2pielen = 0;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               goto exit;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-       memcpy(pwlanhdr->addr1, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ASSOCREQ);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       /* caps */
-
-       memcpy(pframe, rtw_get_capability_from_ie(pmlmeinfo->network.IEs), 2);
-
-       pframe += 2;
-       pattrib->pktlen += 2;
-
-       /* listen interval */
-       /* todo: listen interval for power saving */
-       le_tmp = cpu_to_le16(3);
-       memcpy(pframe, (unsigned char *)&le_tmp, 2);
-       pframe += 2;
-       pattrib->pktlen += 2;
-
-       /* SSID */
-       pframe = rtw_set_ie(pframe, _SSID_IE_,  pmlmeinfo->network.Ssid.SsidLength, pmlmeinfo->network.Ssid.Ssid, &pattrib->pktlen);
-
-       /* supported rate & extended supported rate */
-
-       /*  Check if the AP's supported rates are also supported by STA. */
-       get_rate_set(padapter, sta_bssrate, &sta_bssrate_len);
-
-       if (pmlmeext->cur_channel == 14)/*  for JAPAN, channel 14 can only uses B Mode(CCK) */
-               sta_bssrate_len = 4;
-
-       for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
-               if (pmlmeinfo->network.SupportedRates[i] == 0)
-                       break;
-
-               /*  Check if the AP's supported rates are also supported by STA. */
-               for (j = 0; j < sta_bssrate_len; j++) {
-                        /*  Avoid the proprietary data rate (22Mbps) of Handlink WSG-4000 AP */
-                       if ((pmlmeinfo->network.SupportedRates[i] | IEEE80211_BASIC_RATE_MASK)
-                                       == (sta_bssrate[j] | IEEE80211_BASIC_RATE_MASK))
-                               break;
-               }
-
-               if (j != sta_bssrate_len)
-                       /*  the rate is supported by STA */
-                       bssrate[index++] = pmlmeinfo->network.SupportedRates[i];
-       }
-
-       bssrate_len = index;
-
-       if (bssrate_len == 0) {
-               rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
-               rtw_free_xmitframe(pxmitpriv, pmgntframe);
-               goto exit; /* don't connect to AP if no joint supported rate */
-       }
-
-       if (bssrate_len > 8) {
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, 8, bssrate, &pattrib->pktlen);
-               pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, bssrate_len - 8, bssrate + 8, &pattrib->pktlen);
-       } else {
-               pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, bssrate_len, bssrate, &pattrib->pktlen);
-       }
-
-       /* RSN */
-       p = rtw_get_ie((pmlmeinfo->network.IEs + sizeof(struct ndis_802_11_fixed_ie)), _RSN_IE_2_, &ie_len, (pmlmeinfo->network.IELength - sizeof(struct ndis_802_11_fixed_ie)));
-       if (p)
-               pframe = rtw_set_ie(pframe, _RSN_IE_2_, ie_len, p + 2, &pattrib->pktlen);
-
-       /* HT caps */
-       if (padapter->mlmepriv.htpriv.ht_option) {
-               p = rtw_get_ie((pmlmeinfo->network.IEs + sizeof(struct ndis_802_11_fixed_ie)), _HT_CAPABILITY_IE_, &ie_len, (pmlmeinfo->network.IELength - sizeof(struct ndis_802_11_fixed_ie)));
-               if (p && !is_ap_in_tkip(padapter)) {
-                       memcpy(&pmlmeinfo->HT_caps, p + 2, sizeof(struct HT_caps_element));
-
-                       /* to disable 40M Hz support while gd_bw_40MHz_en = 0 */
-                       if (pregpriv->cbw40_enable == 0)
-                               pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info &= cpu_to_le16(~(BIT(6) | BIT(1)));
-                       else
-                               pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(BIT(1));
-
-                       /* todo: disable SM power save mode */
-                       pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x000c);
-
-                       if (pregpriv->rx_stbc)
-                               pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);/* RX STBC One spatial stream */
-                       memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_1R, 16);
-
-                       pframe = rtw_set_ie(pframe, _HT_CAPABILITY_IE_, ie_len, (u8 *)(&pmlmeinfo->HT_caps), &pattrib->pktlen);
-               }
-       }
-
-       /* vendor specific IE, such as WPA, WMM, WPS */
-       for (i = sizeof(struct ndis_802_11_fixed_ie); i < pmlmeinfo->network.IELength;) {
-               pIE = (struct ndis_802_11_var_ie *)(pmlmeinfo->network.IEs + i);
-
-               switch (pIE->ElementID) {
-               case _VENDOR_SPECIFIC_IE_:
-                       if ((!memcmp(pIE->data, RTW_WPA_OUI, 4)) ||
-                           (!memcmp(pIE->data, WMM_OUI, 4)) ||
-                           (!memcmp(pIE->data, WPS_OUI, 4))) {
-                               if (!padapter->registrypriv.wifi_spec) {
-                                       /* Commented by Kurt 20110629 */
-                                       /* In some older APs, WPS handshake */
-                                       /* would be fail if we append vendor extension information to AP */
-                                       if (!memcmp(pIE->data, WPS_OUI, 4))
-                                               pIE->Length = 14;
-                               }
-                               pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, pIE->Length, pIE->data, &pattrib->pktlen);
-                       }
-                       break;
-               default:
-                       break;
-               }
-               i += (pIE->Length + 2);
-       }
-
-       if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_REALTEK)
-               pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, 6, REALTEK_96B_IE, &pattrib->pktlen);
-
-       if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE)) {
-               /*      Should add the P2P IE in the association request frame. */
-               /*      P2P OUI */
-
-               p2pielen = 0;
-               p2pie[p2pielen++] = 0x50;
-               p2pie[p2pielen++] = 0x6F;
-               p2pie[p2pielen++] = 0x9A;
-               p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-               /*      Commented by Albert 20101109 */
-               /*      According to the P2P Specification, the association request frame should contain 3 P2P attributes */
-               /*      1. P2P Capability */
-               /*      2. Extended Listen Timing */
-               /*      3. Device Info */
-               /*      Commented by Albert 20110516 */
-               /*      4. P2P Interface */
-
-               /*      P2P Capability */
-               /*      Type: */
-               p2pie[p2pielen++] = P2P_ATTR_CAPABILITY;
-
-               /*      Length: */
-               *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0002);
-               p2pielen += 2;
-
-               /*      Value: */
-               /*      Device Capability Bitmap, 1 byte */
-               p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT;
-
-               /*      Group Capability Bitmap, 1 byte */
-               if (pwdinfo->persistent_supported)
-                       p2pie[p2pielen++] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
-               else
-                       p2pie[p2pielen++] = DMP_P2P_GRPCAP_SUPPORT;
-
-               /*      Extended Listen Timing */
-               /*      Type: */
-               p2pie[p2pielen++] = P2P_ATTR_EX_LISTEN_TIMING;
-
-               /*      Length: */
-               *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x0004);
-               p2pielen += 2;
-
-               /*      Value: */
-               /*      Availability Period */
-               *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF);
-               p2pielen += 2;
-
-               /*      Availability Interval */
-               *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0xFFFF);
-               p2pielen += 2;
-
-               /*      Device Info */
-               /*      Type: */
-               p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO;
-
-               /*      Length: */
-               /*      21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */
-               /*      + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */
-               *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len);
-               p2pielen += 2;
-
-               /*      Value: */
-               /*      P2P Device Address */
-               memcpy(p2pie + p2pielen, myid(&padapter->eeprompriv), ETH_ALEN);
-               p2pielen += ETH_ALEN;
-
-               /*      Config Method */
-               /*      This field should be big endian. Noted by P2P specification. */
-               if ((pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_PEER_DISPLAY_PIN) ||
-                   (pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_SELF_DISPLAY_PIN))
-                       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_DISPLAY);
-               else
-                       *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_PBC);
-
-               p2pielen += 2;
-
-               /*      Primary Device Type */
-               /*      Category ID */
-               *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA);
-               p2pielen += 2;
-
-               /*      OUI */
-               *(__be32 *)(p2pie + p2pielen) = cpu_to_be32(WPSOUI);
-               p2pielen += 4;
-
-               /*      Sub Category ID */
-               *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER);
-               p2pielen += 2;
-
-               /*      Number of Secondary Device Types */
-               p2pie[p2pielen++] = 0x00;       /*      No Secondary Device Type List */
-
-               /*      Device Name */
-               /*      Type: */
-               *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME);
-               p2pielen += 2;
-
-               /*      Length: */
-               *(__be16 *)(p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len);
-               p2pielen += 2;
-
-               /*      Value: */
-               memcpy(p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len);
-               p2pielen += pwdinfo->device_name_len;
-
-               /*      P2P Interface */
-               /*      Type: */
-               p2pie[p2pielen++] = P2P_ATTR_INTERFACE;
-
-               /*      Length: */
-               *(__le16 *)(p2pie + p2pielen) = cpu_to_le16(0x000D);
-               p2pielen += 2;
-
-               /*      Value: */
-               memcpy(p2pie + p2pielen, pwdinfo->device_addr, ETH_ALEN);       /*      P2P Device Address */
-               p2pielen += ETH_ALEN;
-
-               p2pie[p2pielen++] = 1;  /*      P2P Interface Address Count */
-
-               memcpy(p2pie + p2pielen, pwdinfo->device_addr, ETH_ALEN);       /*      P2P Interface Address List */
-               p2pielen += ETH_ALEN;
-
-               pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &pattrib->pktlen);
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-       dump_mgntframe(padapter, pmgntframe);
-
-       ret = _SUCCESS;
-
-exit:
-       if (ret == _SUCCESS)
-               rtw_buf_update(&pmlmepriv->assoc_req, &pmlmepriv->assoc_req_len, (u8 *)pwlanhdr, pattrib->pktlen);
-       else
-               kfree(pmlmepriv->assoc_req);
-}
-
-/* when wait_ack is true, this function should be called at process context */
-static int _issue_nulldata(struct adapter *padapter, unsigned char *da, unsigned int power_mode, int wait_ack)
-{
-       int ret = _FAIL;
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct xmit_priv        *pxmitpriv;
-       struct mlme_ext_priv    *pmlmeext;
-       struct mlme_ext_info    *pmlmeinfo;
-
-       if (!padapter)
-               goto exit;
-
-       pxmitpriv = &padapter->xmitpriv;
-       pmlmeext = &padapter->mlmeextpriv;
-       pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               goto exit;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-       pattrib->retry_ctrl = false;
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)
-               SetFrDs(fctrl);
-       else if ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE)
-               SetToDs(fctrl);
-
-       if (power_mode)
-               SetPwrMgt(fctrl);
-
-       memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_DATA_NULL);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       if (wait_ack) {
-               ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
-       } else {
-               dump_mgntframe(padapter, pmgntframe);
-               ret = _SUCCESS;
-       }
-
-exit:
-       return ret;
-}
-
-/* when wait_ms > 0, this function should be called at process context */
-/* da == NULL for station mode */
-int issue_nulldata(struct adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms)
-{
-       int ret;
-       int i = 0;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       /* da == NULL, assume it's null data for sta to ap*/
-       if (!da)
-               da = get_my_bssid(&pmlmeinfo->network);
-
-       do {
-               ret = _issue_nulldata(padapter, da, power_mode, wait_ms > 0);
-
-               i++;
-
-               if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
-                       break;
-
-               if (i < try_cnt && wait_ms > 0 && ret == _FAIL)
-                       msleep(wait_ms);
-       } while ((i < try_cnt) && ((ret == _FAIL) || (wait_ms == 0)));
-
-       if (ret != _FAIL) {
-               ret = _SUCCESS;
-               goto exit;
-       }
-exit:
-       return ret;
-}
-
-/* when wait_ack is true, this function should be called at process context */
-static int _issue_qos_nulldata(struct adapter *padapter, unsigned char *da, u16 tid, int wait_ack)
-{
-       int ret = _FAIL;
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       unsigned short *qc;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               goto exit;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       pattrib->hdrlen += 2;
-       pattrib->qos_en = true;
-       pattrib->eosp = 1;
-       pattrib->ack_policy = 0;
-       pattrib->mdata = 0;
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)
-               SetFrDs(fctrl);
-       else if ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE)
-               SetToDs(fctrl);
-
-       qc = (unsigned short *)(pframe + pattrib->hdrlen - 2);
-
-       SetPriority(qc, tid);
-
-       SetEOSP(qc, pattrib->eosp);
-
-       SetAckpolicy(qc, pattrib->ack_policy);
-
-       memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_QOS_DATA_NULL);
-
-       pframe += sizeof(struct ieee80211_qos_hdr);
-       pattrib->pktlen = sizeof(struct ieee80211_qos_hdr);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       if (wait_ack) {
-               ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
-       } else {
-               dump_mgntframe(padapter, pmgntframe);
-               ret = _SUCCESS;
-       }
-
-exit:
-       return ret;
-}
-
-/* when wait_ms > 0 , this function should be called at process context */
-/* da == NULL for station mode */
-int issue_qos_nulldata(struct adapter *padapter, unsigned char *da, u16 tid, int try_cnt, int wait_ms)
-{
-       int ret;
-       int i = 0;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       /* da == NULL, assume it's null data for sta to ap*/
-       if (!da)
-               da = get_my_bssid(&pmlmeinfo->network);
-
-       do {
-               ret = _issue_qos_nulldata(padapter, da, tid, wait_ms > 0);
-
-               i++;
-
-               if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
-                       break;
-
-               if (i < try_cnt && wait_ms > 0 && ret == _FAIL)
-                       msleep(wait_ms);
-       } while ((i < try_cnt) && ((ret == _FAIL) || (wait_ms == 0)));
-
-       if (ret != _FAIL) {
-               ret = _SUCCESS;
-               goto exit;
-       }
-exit:
-       return ret;
-}
-
-static int _issue_deauth(struct adapter *padapter, unsigned char *da, unsigned short reason, u8 wait_ack)
-{
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       int ret = _FAIL;
-       __le16 le_tmp;
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       if (!(rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) && (pwdinfo->rx_invitereq_info.scan_op_ch_only)) {
-               _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey);
-               _set_timer(&pwdinfo->reset_ch_sitesurvey, 10);
-       }
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               goto exit;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-       pattrib->retry_ctrl = false;
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_DEAUTH);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       le_tmp = cpu_to_le16(reason);
-       pframe = rtw_set_fixed_ie(pframe, _RSON_CODE_, (unsigned char *)&le_tmp, &pattrib->pktlen);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       if (wait_ack) {
-               ret = dump_mgntframe_and_wait_ack(padapter, pmgntframe);
-       } else {
-               dump_mgntframe(padapter, pmgntframe);
-               ret = _SUCCESS;
-       }
-
-exit:
-       return ret;
-}
-
-int issue_deauth(struct adapter *padapter, unsigned char *da, unsigned short reason)
-{
-       return _issue_deauth(padapter, da, reason, false);
-}
-
-int issue_deauth_ex(struct adapter *padapter, u8 *da, unsigned short reason, int try_cnt,
-       int wait_ms)
-{
-       int ret;
-       int i = 0;
-
-       do {
-               ret = _issue_deauth(padapter, da, reason, wait_ms > 0);
-
-               i++;
-
-               if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
-                       break;
-
-               if (i < try_cnt && wait_ms > 0 && ret == _FAIL)
-                       msleep(wait_ms);
-       } while ((i < try_cnt) && ((ret == _FAIL) || (wait_ms == 0)));
-
-       if (ret != _FAIL) {
-               ret = _SUCCESS;
-               goto exit;
-       }
-exit:
-       return ret;
-}
-
-void issue_action_BA(struct adapter *padapter, unsigned char *raddr, u8 action,
-                    u16 status, struct ieee80211_mgmt *mgmt_req)
-{
-       u16 start_seq;
-       u16 BA_starting_seqctrl = 0;
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sta_info *psta;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct registry_priv *pregpriv = &padapter->registrypriv;
-       struct ieee80211_mgmt *mgmt;
-       u16 capab, params;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       mgmt = (struct ieee80211_mgmt *)(pmgntframe->buf_addr + TXDESC_OFFSET);
-
-       mgmt->frame_control = cpu_to_le16(IEEE80211_STYPE_ACTION | IEEE80211_FTYPE_MGMT);
-
-       memcpy(mgmt->da, raddr, ETH_ALEN);
-       memcpy(mgmt->sa, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(mgmt->bssid, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-
-       mgmt->seq_ctrl = cpu_to_le16(pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-
-       mgmt->u.action.category = WLAN_CATEGORY_BACK;
-
-       switch (action) {
-       case WLAN_ACTION_ADDBA_REQ:
-               mgmt->u.action.u.addba_req.action_code = WLAN_ACTION_ADDBA_REQ;
-               do {
-                       pmlmeinfo->dialogToken++;
-               } while (pmlmeinfo->dialogToken == 0);
-               mgmt->u.action.u.addba_req.dialog_token = pmlmeinfo->dialogToken;
-
-               /* immediate ack & 64 buffer size */
-               capab = u16_encode_bits(64, IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK);
-               capab |= u16_encode_bits(1, IEEE80211_ADDBA_PARAM_POLICY_MASK);
-               capab |= u16_encode_bits(status, IEEE80211_ADDBA_PARAM_TID_MASK);
-               mgmt->u.action.u.addba_req.capab = cpu_to_le16(capab);
-
-               mgmt->u.action.u.addba_req.timeout = cpu_to_le16(5000); /* 5 ms */
-
-               psta = rtw_get_stainfo(pstapriv, raddr);
-               if (psta) {
-                       start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07] & 0xfff) + 1;
-
-                       psta->BA_starting_seqctrl[status & 0x07] = start_seq;
-
-                       BA_starting_seqctrl = start_seq << 4;
-               }
-               mgmt->u.action.u.addba_req.start_seq_num = cpu_to_le16(BA_starting_seqctrl);
-
-               pattrib->pktlen = offsetofend(struct ieee80211_mgmt,
-                                             u.action.u.addba_req.start_seq_num);
-               break;
-       case WLAN_ACTION_ADDBA_RESP:
-               mgmt->u.action.u.addba_resp.action_code = WLAN_ACTION_ADDBA_RESP;
-               mgmt->u.action.u.addba_resp.dialog_token = mgmt_req->u.action.u.addba_req.dialog_token;
-               mgmt->u.action.u.addba_resp.status = cpu_to_le16(status);
-               capab = le16_to_cpu(mgmt_req->u.action.u.addba_req.capab) & 0x3f;
-               capab |= u16_encode_bits(64, IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK);
-               capab |= u16_encode_bits(pregpriv->ampdu_amsdu, IEEE80211_ADDBA_PARAM_AMSDU_MASK);
-               mgmt->u.action.u.addba_req.capab = cpu_to_le16(capab);
-               mgmt->u.action.u.addba_resp.timeout = mgmt_req->u.action.u.addba_req.timeout;
-               pattrib->pktlen = offsetofend(struct ieee80211_mgmt, u.action.u.addba_resp.timeout);
-               break;
-       case WLAN_ACTION_DELBA:
-               mgmt->u.action.u.delba.action_code = WLAN_ACTION_DELBA;
-               mgmt->u.action.u.delba.params = cpu_to_le16((status & 0x1F) << 3);
-               params = u16_encode_bits((status & 0x1), IEEE80211_DELBA_PARAM_INITIATOR_MASK);
-               params |= u16_encode_bits((status >> 1) & 0xF, IEEE80211_DELBA_PARAM_TID_MASK);
-               mgmt->u.action.u.delba.params = cpu_to_le16(params);
-               mgmt->u.action.u.delba.reason_code = cpu_to_le16(WLAN_STATUS_REQUEST_DECLINED);
-               pattrib->pktlen = offsetofend(struct ieee80211_mgmt, u.action.u.delba.reason_code);
-               break;
-       default:
-               break;
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-static void issue_action_BSSCoexistPacket(struct adapter *padapter)
-{
-       struct list_head *plist, *phead;
-       unsigned char category, action;
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                           *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct  wlan_network    *pnetwork = NULL;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       u8 InfoContent[16] = {0};
-       u8 ICS[8][15];
-       if ((pmlmepriv->num_FortyMHzIntolerant == 0) || (pmlmepriv->num_sta_no_ht == 0))
-               return;
-
-       if (pmlmeinfo->bwmode_updated)
-               return;
-
-       category = WLAN_CATEGORY_PUBLIC;
-       action = ACT_PUBLIC_BSSCOEXIST;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
-
-       /*  */
-       if (pmlmepriv->num_FortyMHzIntolerant > 0) {
-               u8 iedata = 0;
-
-               iedata |= BIT(2);/* 20 MHz BSS Width Request */
-
-               pframe = rtw_set_ie(pframe, EID_BSSCoexistence,  1, &iedata, &pattrib->pktlen);
-       }
-
-       /*  */
-       memset(ICS, 0, sizeof(ICS));
-       if (pmlmepriv->num_sta_no_ht > 0) {
-               int i;
-
-               spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-               phead = get_list_head(queue);
-               plist = phead->next;
-
-               while (phead != plist) {
-                       int len;
-                       u8 *p;
-                       struct wlan_bssid_ex *pbss_network;
-
-                       pnetwork = container_of(plist, struct wlan_network, list);
-
-                       plist = plist->next;
-
-                       pbss_network = (struct wlan_bssid_ex *)&pnetwork->network;
-
-                       p = rtw_get_ie(pbss_network->IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, pbss_network->IELength - _FIXED_IE_LENGTH_);
-                       if (!p || len == 0) { /* non-HT */
-                               if ((pbss_network->Configuration.DSConfig <= 0) || (pbss_network->Configuration.DSConfig > 14))
-                                       continue;
-
-                               ICS[0][pbss_network->Configuration.DSConfig] = 1;
-
-                               if (ICS[0][0] == 0)
-                                       ICS[0][0] = 1;
-                       }
-               }
-               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-               for (i = 0; i < 8; i++) {
-                       if (ICS[i][0] == 1) {
-                               int j, k = 0;
-
-                               InfoContent[k] = i;
-                               /* SET_BSS_INTOLERANT_ELE_REG_CLASS(InfoContent, i); */
-                               k++;
-
-                               for (j = 1; j <= 14; j++) {
-                                       if (ICS[i][j] == 1) {
-                                               if (k < 16) {
-                                                       InfoContent[k] = j; /* channel number */
-                                                       /* SET_BSS_INTOLERANT_ELE_CHANNEL(InfoContent+k, j); */
-                                                       k++;
-                                               }
-                                       }
-                               }
-
-                               pframe = rtw_set_ie(pframe, EID_BSSIntolerantChlReport, k, InfoContent, &pattrib->pktlen);
-                       }
-               }
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-unsigned int send_delba(struct adapter *padapter, u8 initiator, u8 *addr)
-{
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info *psta = NULL;
-       /* struct recv_reorder_ctrl *preorder_ctrl; */
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       u16 tid;
-
-       if ((pmlmeinfo->state & 0x03) != WIFI_FW_AP_STATE)
-               if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS))
-                       return _SUCCESS;
-
-       psta = rtw_get_stainfo(pstapriv, addr);
-       if (!psta)
-               return _SUCCESS;
-
-       if (initiator == 0) { /*  recipient */
-               for (tid = 0; tid < MAXTID; tid++) {
-                       if (psta->recvreorder_ctrl[tid].enable) {
-                               issue_action_BA(padapter, addr, WLAN_ACTION_DELBA,
-                                               (((tid << 1) | initiator) & 0x1F), NULL);
-                               psta->recvreorder_ctrl[tid].enable = false;
-                               psta->recvreorder_ctrl[tid].indicate_seq = 0xffff;
-                       }
-               }
-       } else if (initiator == 1) { /*  originator */
-               for (tid = 0; tid < MAXTID; tid++) {
-                       if (psta->htpriv.agg_enable_bitmap & BIT(tid)) {
-                               issue_action_BA(padapter, addr, WLAN_ACTION_DELBA,
-                                               (((tid << 1) | initiator) & 0x1F), NULL);
-                               psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
-                               psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
-                       }
-               }
-       }
-
-       return _SUCCESS;
-}
-
-unsigned int send_beacon(struct adapter *padapter)
-{
-       bool bxmitok = false;
-       int     issue = 0;
-       int poll = 0;
-
-       clear_beacon_valid_bit(padapter);
-
-       do {
-               issue_beacon(padapter, 100);
-               issue++;
-               do {
-                       yield();
-                       bxmitok = get_beacon_valid_bit(padapter);
-                       poll++;
-               } while ((poll % 10) != 0 && !bxmitok && !padapter->bSurpriseRemoved && !padapter->bDriverStopped);
-       } while (!bxmitok && issue < 100 && !padapter->bSurpriseRemoved && !padapter->bDriverStopped);
-
-       if (padapter->bSurpriseRemoved || padapter->bDriverStopped || !bxmitok)
-               return _FAIL;
-
-       return _SUCCESS;
-}
-
-bool get_beacon_valid_bit(struct adapter *adapter)
-{
-       int res;
-       u8 reg;
-
-       res = rtw_read8(adapter, REG_TDECTRL + 2, &reg);
-       if (res)
-               return false;
-
-       /* BIT(16) of REG_TDECTRL = BIT(0) of REG_TDECTRL+2 */
-       return BIT(0) & reg;
-}
-
-void clear_beacon_valid_bit(struct adapter *adapter)
-{
-       int res;
-       u8 reg;
-
-       res = rtw_read8(adapter, REG_TDECTRL + 2, &reg);
-       if (res)
-               return;
-
-       /* BIT(16) of REG_TDECTRL = BIT(0) of REG_TDECTRL+2, write 1 to clear, Clear by sw */
-       rtw_write8(adapter, REG_TDECTRL + 2, reg | BIT(0));
-}
-
-void rtw_resume_tx_beacon(struct adapter *adapt)
-{
-       struct hal_data_8188e *haldata = &adapt->haldata;
-
-       /*  2010.03.01. Marked by tynli. No need to call workitem beacause we record the value */
-       /*  which should be read from register to a global variable. */
-
-       rtw_write8(adapt, REG_FWHW_TXQ_CTRL + 2, (haldata->RegFwHwTxQCtrl) | BIT(6));
-       haldata->RegFwHwTxQCtrl |= BIT(6);
-       rtw_write8(adapt, REG_TBTT_PROHIBIT + 1, 0xff);
-       haldata->RegReg542 |= BIT(0);
-       rtw_write8(adapt, REG_TBTT_PROHIBIT + 2, haldata->RegReg542);
-}
-
-void rtw_stop_tx_beacon(struct adapter *adapt)
-{
-       struct hal_data_8188e *haldata = &adapt->haldata;
-
-       /*  2010.03.01. Marked by tynli. No need to call workitem beacause we record the value */
-       /*  which should be read from register to a global variable. */
-
-       rtw_write8(adapt, REG_FWHW_TXQ_CTRL + 2, (haldata->RegFwHwTxQCtrl) & (~BIT(6)));
-       haldata->RegFwHwTxQCtrl &= (~BIT(6));
-       rtw_write8(adapt, REG_TBTT_PROHIBIT + 1, 0x64);
-       haldata->RegReg542 &= ~(BIT(0));
-       rtw_write8(adapt, REG_TBTT_PROHIBIT + 2, haldata->RegReg542);
-
-        /* todo: CheckFwRsvdPageContent(Adapter);  2010.06.23. Added by tynli. */
-}
-
-static void rtw_set_opmode(struct adapter *adapter, u8 mode)
-{
-       u8 val8;
-       int res;
-
-       /*  disable Port0 TSF update */
-       res = rtw_read8(adapter, REG_BCN_CTRL, &val8);
-       if (res)
-               return;
-
-       rtw_write8(adapter, REG_BCN_CTRL, val8 | BIT(4));
-
-       /*  set net_type */
-       res = rtw_read8(adapter, MSR, &val8);
-       if (res)
-               return;
-
-       val8 &= 0x0c;
-       val8 |= mode;
-       rtw_write8(adapter, MSR, val8);
-
-       if ((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_)) {
-               rtw_stop_tx_beacon(adapter);
-
-               rtw_write8(adapter, REG_BCN_CTRL, 0x19);/* disable atim wnd */
-       } else if (mode == _HW_STATE_ADHOC_) {
-               rtw_resume_tx_beacon(adapter);
-               rtw_write8(adapter, REG_BCN_CTRL, 0x1a);
-       } else if (mode == _HW_STATE_AP_) {
-               rtw_resume_tx_beacon(adapter);
-
-               rtw_write8(adapter, REG_BCN_CTRL, 0x12);
-
-               /* Set RCR */
-               rtw_write32(adapter, REG_RCR, 0x7000208e);/* CBSSID_DATA must set to 0,reject ICV_ERR packet */
-               /* enable to rx data frame */
-               rtw_write16(adapter, REG_RXFLTMAP2, 0xFFFF);
-               /* enable to rx ps-poll */
-               rtw_write16(adapter, REG_RXFLTMAP1, 0x0400);
-
-               /* Beacon Control related register for first time */
-               rtw_write8(adapter, REG_BCNDMATIM, 0x02); /*  2ms */
-
-               rtw_write8(adapter, REG_ATIMWND, 0x0a); /*  10ms */
-               rtw_write16(adapter, REG_BCNTCFG, 0x00);
-               rtw_write16(adapter, REG_TBTT_PROHIBIT, 0xff04);
-               rtw_write16(adapter, REG_TSFTR_SYN_OFFSET, 0x7fff);/*  +32767 (~32ms) */
-
-               /* reset TSF */
-               rtw_write8(adapter, REG_DUAL_TSF_RST, BIT(0));
-
-               /* BIT(3) - If set 0, hw will clr bcnq when tx becon ok/fail or port 0 */
-               res = rtw_read8(adapter, REG_MBID_NUM, &val8);
-               if (res)
-                       return;
-
-               rtw_write8(adapter, REG_MBID_NUM, val8 | BIT(3) | BIT(4));
-
-               /* enable BCN0 Function for if1 */
-               /* don't enable update TSF0 for if1 (due to TSF update when beacon/probe rsp are received) */
-               rtw_write8(adapter, REG_BCN_CTRL, (DIS_TSF_UDT0_NORMAL_CHIP | EN_BCN_FUNCTION | BIT(1)));
-
-               /* dis BCN1 ATIM  WND if if2 is station */
-               res = rtw_read8(adapter, REG_BCN_CTRL_1, &val8);
-               if (res)
-                       return;
-
-               rtw_write8(adapter, REG_BCN_CTRL_1, val8 | BIT(0));
-       }
-}
-
-/****************************************************************************
-
-Following are some utility functions for WiFi MLME
-
-*****************************************************************************/
-
-static void rtw_set_initial_gain(struct adapter *adapter, u8 gain)
-{
-       struct hal_data_8188e *haldata = &adapter->haldata;
-       struct odm_dm_struct *odmpriv = &haldata->odmpriv;
-       struct rtw_dig *digtable = &odmpriv->DM_DigTable;
-
-       if (gain == 0xff) {
-               /* restore rx gain */
-               ODM_Write_DIG(odmpriv, digtable->BackupIGValue);
-       } else {
-               digtable->BackupIGValue = digtable->CurIGValue;
-               ODM_Write_DIG(odmpriv, gain);
-       }
-}
-
-void rtw_mlme_under_site_survey(struct adapter *adapter)
-{
-       /* config RCR to receive different BSSID & not to receive data frame */
-
-       int res;
-       u8 reg;
-       u32 v;
-
-       res = rtw_read32(adapter, REG_RCR, &v);
-       if (res)
-               return;
-
-       v &= ~(RCR_CBSSID_BCN);
-       rtw_write32(adapter, REG_RCR, v);
-       /* reject all data frame */
-       rtw_write16(adapter, REG_RXFLTMAP2, 0x00);
-
-       /* disable update TSF */
-       res = rtw_read8(adapter, REG_BCN_CTRL, &reg);
-       if (res)
-               return;
-
-       rtw_write8(adapter, REG_BCN_CTRL, reg | BIT(4));
-}
-
-void rtw_mlme_site_survey_done(struct adapter *adapter)
-{
-       struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       u32 reg32;
-       int res;
-       u8 reg;
-
-       if ((r8188eu_is_client_associated_to_ap(adapter)) ||
-           ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE)) {
-               /* enable to rx data frame */
-               rtw_write16(adapter, REG_RXFLTMAP2, 0xFFFF);
-
-               /* enable update TSF */
-               res = rtw_read8(adapter, REG_BCN_CTRL, &reg);
-               if (res)
-                       return;
-
-               rtw_write8(adapter, REG_BCN_CTRL, reg & (~BIT(4)));
-       } else if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) {
-               rtw_write16(adapter, REG_RXFLTMAP2, 0xFFFF);
-               /* enable update TSF */
-               res = rtw_read8(adapter, REG_BCN_CTRL, &reg);
-               if (res)
-                       return;
-
-               rtw_write8(adapter, REG_BCN_CTRL, reg & (~BIT(4)));
-       }
-
-       res = rtw_read32(adapter, REG_RCR, &reg32);
-       if (res)
-               return;
-
-       rtw_write32(adapter, REG_RCR, reg32 | RCR_CBSSID_BCN);
-}
-
-void site_survey(struct adapter *padapter)
-{
-       unsigned char survey_channel = 0;
-       enum rt_scan_type ScanType = SCAN_PASSIVE;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       if ((pwdinfo->rx_invitereq_info.scan_op_ch_only) || (pwdinfo->p2p_info.scan_op_ch_only)) {
-               if (pwdinfo->rx_invitereq_info.scan_op_ch_only) {
-                       survey_channel = pwdinfo->rx_invitereq_info.operation_ch[pmlmeext->sitesurvey_res.channel_idx];
-               } else {
-                       survey_channel = pwdinfo->p2p_info.operation_ch[pmlmeext->sitesurvey_res.channel_idx];
-               }
-               ScanType = SCAN_ACTIVE;
-       } else if (rtw_p2p_findphase_ex_is_social(pwdinfo)) {
-               /*      Commented by Albert 2011/06/03 */
-               /*      The driver is in the find phase, it should go through the social channel. */
-               int ch_set_idx;
-               survey_channel = pwdinfo->social_chan[pmlmeext->sitesurvey_res.channel_idx];
-               ch_set_idx = rtw_ch_set_search_ch(pmlmeext->channel_set, survey_channel);
-               if (ch_set_idx >= 0)
-                       ScanType = pmlmeext->channel_set[ch_set_idx].ScanType;
-               else
-                       ScanType = SCAN_ACTIVE;
-       } else {
-               struct rtw_ieee80211_channel *ch;
-               if (pmlmeext->sitesurvey_res.channel_idx < pmlmeext->sitesurvey_res.ch_num) {
-                       ch = &pmlmeext->sitesurvey_res.ch[pmlmeext->sitesurvey_res.channel_idx];
-                       survey_channel = ch->hw_value;
-                       ScanType = (ch->flags & RTW_IEEE80211_CHAN_PASSIVE_SCAN) ? SCAN_PASSIVE : SCAN_ACTIVE;
-               }
-       }
-
-       if (survey_channel != 0) {
-               if (pmlmeext->sitesurvey_res.channel_idx == 0)
-                       set_channel_bwmode(padapter, survey_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-               else
-                       SelectChannel(padapter, survey_channel);
-
-               if (ScanType == SCAN_ACTIVE) { /* obey the channel plan setting... */
-                       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) ||
-                           rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH)) {
-                               issue_probereq_p2p(padapter);
-                               issue_probereq_p2p(padapter);
-                               issue_probereq_p2p(padapter);
-                       } else {
-                               int i;
-                               for (i = 0; i < RTW_SSID_SCAN_AMOUNT; i++) {
-                                       if (pmlmeext->sitesurvey_res.ssid[i].SsidLength) {
-                                               /* todo: to issue two probe req??? */
-                                               issue_probereq(padapter, &pmlmeext->sitesurvey_res.ssid[i], NULL);
-                                               /* msleep(SURVEY_TO>>1); */
-                                               issue_probereq(padapter, &pmlmeext->sitesurvey_res.ssid[i], NULL);
-                                       }
-                               }
-
-                               if (pmlmeext->sitesurvey_res.scan_mode == SCAN_ACTIVE) {
-                                       /* todo: to issue two probe req??? */
-                                       issue_probereq(padapter, NULL, NULL);
-                                       /* msleep(SURVEY_TO>>1); */
-                                       issue_probereq(padapter, NULL, NULL);
-                               }
-                       }
-               }
-
-               set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
-       } else {
-               /*      channel number is 0 or this channel is not valid. */
-               if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH)) {
-                       if ((pwdinfo->rx_invitereq_info.scan_op_ch_only) || (pwdinfo->p2p_info.scan_op_ch_only)) {
-                               /*      Set the find_phase_state_exchange_cnt to P2P_FINDPHASE_EX_CNT. */
-                               /*      This will let the following flow to run the scanning end. */
-                               rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_MAX);
-                       }
-               }
-
-               if (rtw_p2p_findphase_ex_is_needed(pwdinfo)) {
-                       /*      Set the P2P State to the listen state of find phase and set the current channel to the listen channel */
-                       set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-                       rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_LISTEN);
-                       pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
-
-                       /* restore RX GAIN */
-                       rtw_set_initial_gain(padapter, 0xff);
-                       /* turn on dynamic functions */
-                       Restore_DM_Func_Flag(padapter);
-                       /* Switch_DM_Func(padapter, DYNAMIC_FUNC_DIG|DYNAMIC_FUNC_HP|DYNAMIC_FUNC_SS, true); */
-
-                       _set_timer(&pwdinfo->find_phase_timer, (u32)((u32)(pwdinfo->listen_dwell) * 100));
-               } else {
-                       /*  20100721:Interrupt scan operation here. */
-                       /*  For SW antenna diversity before link, it needs to switch to another antenna and scan again. */
-                       /*  It compares the scan result and selects a better one to do connection. */
-                       if (AntDivBeforeLink8188E(padapter)) {
-                               pmlmeext->sitesurvey_res.bss_cnt = 0;
-                               pmlmeext->sitesurvey_res.channel_idx = -1;
-                               pmlmeext->chan_scan_time = SURVEY_TO / 2;
-                               set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
-                               return;
-                       }
-                       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_SCAN) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH))
-                               rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
-                       rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
-
-                       pmlmeext->sitesurvey_res.state = SCAN_COMPLETE;
-
-                       /* switch back to the original channel */
-
-                       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN))
-                               set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-                       else
-                               set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-                       /* config MSR */
-                       Set_MSR(padapter, (pmlmeinfo->state & 0x3));
-
-                       /* restore RX GAIN */
-                       rtw_set_initial_gain(padapter, 0xff);
-                       /* turn on dynamic functions */
-                       Restore_DM_Func_Flag(padapter);
-                       /* Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, true); */
-
-                       if (r8188eu_is_client_associated_to_ap(padapter))
-                               issue_nulldata(padapter, NULL, 0, 3, 500);
-
-                       rtw_mlme_site_survey_done(padapter);
-
-                       report_surveydone_event(padapter);
-
-                       pmlmeext->chan_scan_time = SURVEY_TO;
-                       pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
-
-                       issue_action_BSSCoexistPacket(padapter);
-                       issue_action_BSSCoexistPacket(padapter);
-                       issue_action_BSSCoexistPacket(padapter);
-               }
-       }
-}
-
-/* collect bss info from Beacon and Probe request/response frames. */
-u8 collect_bss_info(struct adapter *padapter, struct recv_frame *precv_frame, struct wlan_bssid_ex *bssid)
-{
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)precv_frame->rx_data;
-       int     i;
-       u32     len;
-       u8 *p;
-       u16 val16;
-       u8 *pframe = precv_frame->rx_data;
-       u32     packet_len = precv_frame->len;
-       u8 ie_offset;
-       struct registry_priv    *pregistrypriv = &padapter->registrypriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       __le32 le32_tmp;
-
-       len = packet_len - sizeof(struct ieee80211_hdr_3addr);
-
-       if (len > MAX_IE_SZ)
-               return _FAIL;
-
-       memset(bssid, 0, sizeof(struct wlan_bssid_ex));
-
-       if (ieee80211_is_beacon(mgmt->frame_control)) {
-               bssid->Reserved[0] = 1;
-               ie_offset = _BEACON_IE_OFFSET_;
-       } else if (ieee80211_is_probe_req(mgmt->frame_control)) {
-               ie_offset = _PROBEREQ_IE_OFFSET_;
-               bssid->Reserved[0] = 2;
-       } else if (ieee80211_is_probe_resp(mgmt->frame_control)) {
-               ie_offset = _PROBERSP_IE_OFFSET_;
-               bssid->Reserved[0] = 3;
-       } else {
-               bssid->Reserved[0] = 0;
-               ie_offset = _FIXED_IE_LENGTH_;
-       }
-
-       bssid->Length = sizeof(struct wlan_bssid_ex) - MAX_IE_SZ + len;
-
-       /* below is to copy the information element */
-       bssid->IELength = len;
-       memcpy(bssid->IEs, (pframe + sizeof(struct ieee80211_hdr_3addr)), bssid->IELength);
-
-       /* get the signal strength */
-       bssid->Rssi = precv_frame->attrib.phy_info.recvpower; /*  in dBM.raw data */
-       bssid->PhyInfo.SignalQuality = precv_frame->attrib.phy_info.SignalQuality;/* in percentage */
-       bssid->PhyInfo.SignalStrength = precv_frame->attrib.phy_info.SignalStrength;/* in percentage */
-       bssid->PhyInfo.Optimum_antenna = rtw_current_antenna(padapter);
-
-       /*  checking SSID */
-       p = rtw_get_ie(bssid->IEs + ie_offset, _SSID_IE_, &len, bssid->IELength - ie_offset);
-       if (!p)
-               return _FAIL;
-
-       if (*(p + 1)) {
-               if (len > NDIS_802_11_LENGTH_SSID)
-                       return _FAIL;
-               memcpy(bssid->Ssid.Ssid, (p + 2), *(p + 1));
-               bssid->Ssid.SsidLength = *(p + 1);
-       } else {
-               bssid->Ssid.SsidLength = 0;
-       }
-
-       memset(bssid->SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX);
-
-       /* checking rate info... */
-       i = 0;
-       p = rtw_get_ie(bssid->IEs + ie_offset, _SUPPORTEDRATES_IE_, &len, bssid->IELength - ie_offset);
-       if (p) {
-               if (len > NDIS_802_11_LENGTH_RATES_EX)
-                       return _FAIL;
-               memcpy(bssid->SupportedRates, (p + 2), len);
-               i = len;
-       }
-
-       p = rtw_get_ie(bssid->IEs + ie_offset, _EXT_SUPPORTEDRATES_IE_, &len, bssid->IELength - ie_offset);
-       if (p) {
-               if (len > (NDIS_802_11_LENGTH_RATES_EX - i))
-                       return _FAIL;
-               memcpy(bssid->SupportedRates + i, (p + 2), len);
-       }
-
-       if (bssid->IELength < 12)
-               return _FAIL;
-
-       /*  Checking for DSConfig */
-       p = rtw_get_ie(bssid->IEs + ie_offset, _DSSET_IE_, &len, bssid->IELength - ie_offset);
-
-       bssid->Configuration.DSConfig = 0;
-       bssid->Configuration.Length = 0;
-
-       if (p) {
-               bssid->Configuration.DSConfig = *(p + 2);
-       } else {/*  In 5G, some ap do not have DSSET IE */
-               /*  checking HT info for channel */
-               p = rtw_get_ie(bssid->IEs + ie_offset, _HT_ADD_INFO_IE_, &len, bssid->IELength - ie_offset);
-               if (p) {
-                       struct HT_info_element *HT_info = (struct HT_info_element *)(p + 2);
-                       bssid->Configuration.DSConfig = HT_info->primary_channel;
-               } else { /*  use current channel */
-                       bssid->Configuration.DSConfig = rtw_get_oper_ch(padapter);
-               }
-       }
-
-       memcpy(&le32_tmp, rtw_get_beacon_interval_from_ie(bssid->IEs), 2);
-       bssid->Configuration.BeaconPeriod = le32_to_cpu(le32_tmp);
-
-       val16 = rtw_get_capability((struct wlan_bssid_ex *)bssid);
-
-       if (val16 & BIT(0)) {
-               bssid->InfrastructureMode = Ndis802_11Infrastructure;
-               memcpy(bssid->MacAddress, GetAddr2Ptr(pframe), ETH_ALEN);
-       } else {
-               bssid->InfrastructureMode = Ndis802_11IBSS;
-               memcpy(bssid->MacAddress, GetAddr3Ptr(pframe), ETH_ALEN);
-       }
-
-       if (val16 & BIT(4))
-               bssid->Privacy = 1;
-       else
-               bssid->Privacy = 0;
-
-       bssid->Configuration.ATIMWindow = 0;
-
-       /* 20/40 BSS Coexistence check */
-       if ((pregistrypriv->wifi_spec == 1) && (!pmlmeinfo->bwmode_updated)) {
-               struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-               p = rtw_get_ie(bssid->IEs + ie_offset, _HT_CAPABILITY_IE_, &len, bssid->IELength - ie_offset);
-               if (p && len > 0) {
-                       struct HT_caps_element  *pHT_caps;
-                       pHT_caps = (struct HT_caps_element *)(p + 2);
-
-                       if (le16_to_cpu(pHT_caps->u.HT_cap_element.HT_caps_info) & BIT(14))
-                               pmlmepriv->num_FortyMHzIntolerant++;
-               } else {
-                       pmlmepriv->num_sta_no_ht++;
-               }
-       }
-
-       /*  mark bss info receiving from nearby channel as SignalQuality 101 */
-       if (bssid->Configuration.DSConfig != rtw_get_oper_ch(padapter))
-               bssid->PhyInfo.SignalQuality = 101;
-       return _SUCCESS;
-}
-
-static void rtw_set_bssid(struct adapter *adapter, u8 *bssid)
-{
-       int i;
-
-       for (i = 0; i < ETH_ALEN; i++)
-               rtw_write8(adapter, REG_BSSID + i, bssid[i]);
-}
-
-static void mlme_join(struct adapter *adapter, int type)
-{
-       struct mlme_priv *mlmepriv = &adapter->mlmepriv;
-       u8 retry_limit = 0x30, reg;
-       u32 reg32;
-       int res;
-
-       switch (type) {
-       case 0:
-               /* prepare to join */
-               /* enable to rx data frame, accept all data frame */
-               rtw_write16(adapter, REG_RXFLTMAP2, 0xFFFF);
-
-               res = rtw_read32(adapter, REG_RCR, &reg32);
-               if (res)
-                       return;
-
-               rtw_write32(adapter, REG_RCR,
-                           reg32 | RCR_CBSSID_DATA | RCR_CBSSID_BCN);
-
-               if (check_fwstate(mlmepriv, WIFI_STATION_STATE)) {
-                       retry_limit = 48;
-               } else {
-                       /* ad-hoc mode */
-                       retry_limit = 0x7;
-               }
-               break;
-       case 1:
-               /* joinbss_event call back when join res < 0 */
-               rtw_write16(adapter, REG_RXFLTMAP2, 0x00);
-               break;
-       case 2:
-               /* sta add event call back */
-               /* enable update TSF */
-               res = rtw_read8(adapter, REG_BCN_CTRL, &reg);
-               if (res)
-                       return;
-
-               rtw_write8(adapter, REG_BCN_CTRL, reg & (~BIT(4)));
-
-               if (check_fwstate(mlmepriv, WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE))
-                       retry_limit = 0x7;
-               break;
-       default:
-               break;
-       }
-
-       rtw_write16(adapter, REG_RL,
-                   retry_limit << RETRY_LIMIT_SHORT_SHIFT | retry_limit << RETRY_LIMIT_LONG_SHIFT);
-}
-
-void start_create_ibss(struct adapter *padapter)
-{
-       unsigned short  caps;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex *)(&pmlmeinfo->network);
-       pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
-       pmlmeinfo->bcn_interval = get_beacon_interval(pnetwork);
-
-       /* update wireless mode */
-       update_wireless_mode(padapter);
-
-       /* update capability */
-       caps = rtw_get_capability((struct wlan_bssid_ex *)pnetwork);
-       update_capinfo(padapter, caps);
-       if (caps & cap_IBSS) {/* adhoc master */
-               rtw_write8(padapter, REG_SECCFG, 0xcf);
-
-               /* switch channel */
-               /* SelectChannel(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE); */
-               set_channel_bwmode(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-
-               beacon_timing_control(padapter);
-
-               /* set msr to WIFI_FW_ADHOC_STATE */
-               pmlmeinfo->state = WIFI_FW_ADHOC_STATE;
-               Set_MSR(padapter, (pmlmeinfo->state & 0x3));
-
-               /* issue beacon */
-               if (send_beacon(padapter) == _FAIL) {
-                       report_join_res(padapter, -1);
-                       pmlmeinfo->state = WIFI_FW_NULL_STATE;
-               } else {
-                       rtw_set_bssid(padapter, padapter->registrypriv.dev_network.MacAddress);
-                       mlme_join(padapter, 0);
-
-                       report_join_res(padapter, 1);
-                       pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
-                       rtw_indicate_connect(padapter);
-               }
-       } else {
-               return;
-       }
-       /* update bc/mc sta_info */
-       update_bmc_sta(padapter);
-}
-
-void start_clnt_join(struct adapter *padapter)
-{
-       unsigned short  caps;
-       u8 val8;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex *)(&pmlmeinfo->network);
-       int beacon_timeout;
-
-       pmlmeext->cur_channel = (u8)pnetwork->Configuration.DSConfig;
-       pmlmeinfo->bcn_interval = get_beacon_interval(pnetwork);
-
-       /* update wireless mode */
-       update_wireless_mode(padapter);
-
-       /* update capability */
-       caps = rtw_get_capability((struct wlan_bssid_ex *)pnetwork);
-       update_capinfo(padapter, caps);
-       if (caps & cap_ESS) {
-               Set_MSR(padapter, WIFI_FW_STATION_STATE);
-
-               val8 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X) ? 0xcc : 0xcf;
-
-               rtw_write8(padapter, REG_SECCFG, val8);
-
-               /* switch channel */
-               set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-               /* here wait for receiving the beacon to start auth */
-               /* and enable a timer */
-               beacon_timeout = decide_wait_for_beacon_timeout(pmlmeinfo->bcn_interval);
-               set_link_timer(pmlmeext, beacon_timeout);
-               _set_timer(&padapter->mlmepriv.assoc_timer,
-                          (REAUTH_TO * REAUTH_LIMIT) + (REASSOC_TO * REASSOC_LIMIT) + beacon_timeout);
-
-               pmlmeinfo->state = WIFI_FW_AUTH_NULL | WIFI_FW_STATION_STATE;
-       } else if (caps & cap_IBSS) { /* adhoc client */
-               Set_MSR(padapter, WIFI_FW_ADHOC_STATE);
-
-               rtw_write8(padapter, REG_SECCFG, 0xcf);
-
-               /* switch channel */
-               set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-               beacon_timing_control(padapter);
-
-               pmlmeinfo->state = WIFI_FW_ADHOC_STATE;
-
-               report_join_res(padapter, 1);
-       } else {
-               return;
-       }
-}
-
-void start_clnt_auth(struct adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       _cancel_timer_ex(&pmlmeext->link_timer);
-
-       pmlmeinfo->state &= (~WIFI_FW_AUTH_NULL);
-       pmlmeinfo->state |= WIFI_FW_AUTH_STATE;
-
-       pmlmeinfo->auth_seq = 1;
-       pmlmeinfo->reauth_count = 0;
-       pmlmeinfo->reassoc_count = 0;
-       pmlmeinfo->link_count = 0;
-       pmlmeext->retry = 0;
-
-       /*  Because of AP's not receiving deauth before */
-       /*  AP may: 1)not response auth or 2)deauth us after link is complete */
-       /*  issue deauth before issuing auth to deal with the situation */
-       /*      Commented by Albert 2012/07/21 */
-       /*      For the Win8 P2P connection, it will be hard to have a successful connection if this Wi-Fi doesn't connect to it. */
-       issue_deauth(padapter, (&pmlmeinfo->network)->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
-
-       issue_auth(padapter, NULL, 0);
-
-       set_link_timer(pmlmeext, REAUTH_TO);
-}
-
-void start_clnt_assoc(struct adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       _cancel_timer_ex(&pmlmeext->link_timer);
-
-       pmlmeinfo->state &= (~(WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE));
-       pmlmeinfo->state |= (WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE);
-
-       issue_assocreq(padapter);
-
-       set_link_timer(pmlmeext, REASSOC_TO);
-}
-
-void receive_disconnect(struct adapter *padapter, unsigned char *MacAddr, unsigned short reason)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       /* check A3 */
-       if (!(!memcmp(MacAddr, get_my_bssid(&pmlmeinfo->network), ETH_ALEN)))
-               return;
-
-       if ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE) {
-               if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) {
-                       pmlmeinfo->state = WIFI_FW_NULL_STATE;
-                       report_del_sta_event(padapter, MacAddr, reason);
-               } else if (pmlmeinfo->state & WIFI_FW_LINKING_STATE) {
-                       pmlmeinfo->state = WIFI_FW_NULL_STATE;
-                       report_join_res(padapter, -2);
-               }
-       }
-}
-
-static void process_80211d(struct adapter *padapter, struct wlan_bssid_ex *bssid)
-{
-       struct registry_priv *pregistrypriv;
-       struct mlme_ext_priv *pmlmeext;
-       struct rt_channel_info *chplan_new;
-       u8 channel;
-       u8 i;
-
-       pregistrypriv = &padapter->registrypriv;
-       pmlmeext = &padapter->mlmeextpriv;
-
-       /*  Adjust channel plan by AP Country IE */
-       if (pregistrypriv->enable80211d &&
-           (!pmlmeext->update_channel_plan_by_ap_done)) {
-               u8 *ie, *p;
-               u32 len;
-               struct rt_channel_plan chplan_ap;
-               struct rt_channel_info chplan_sta[MAX_CHANNEL_NUM];
-               u8 country[4];
-               u8 fcn; /*  first channel number */
-               u8 noc; /*  number of channel */
-               u8 j, k;
-
-               ie = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _COUNTRY_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
-               if (!ie)
-                       return;
-               if (len < 6)
-                       return;
-               ie += 2;
-               p = ie;
-               ie += len;
-
-               memset(country, 0, 4);
-               memcpy(country, p, 3);
-               p += 3;
-
-               i = 0;
-               while ((ie - p) >= 3) {
-                       fcn = *(p++);
-                       noc = *(p++);
-                       p++;
-
-                       for (j = 0; j < noc; j++) {
-                               channel = fcn + j;
-                               chplan_ap.Channel[i++] = channel;
-                       }
-               }
-               chplan_ap.Len = i;
-
-               memcpy(chplan_sta, pmlmeext->channel_set, sizeof(chplan_sta));
-
-               memset(pmlmeext->channel_set, 0, sizeof(pmlmeext->channel_set));
-               chplan_new = pmlmeext->channel_set;
-
-               i = 0;
-               j = 0;
-               k = 0;
-               if (pregistrypriv->wireless_mode & WIRELESS_11G) {
-                       do {
-                               if ((i == MAX_CHANNEL_NUM) ||
-                                   (chplan_sta[i].ChannelNum == 0))
-                                       break;
-
-                               if (j == chplan_ap.Len)
-                                       break;
-
-                               if (chplan_sta[i].ChannelNum == chplan_ap.Channel[j]) {
-                                       chplan_new[k].ChannelNum = chplan_ap.Channel[j];
-                                       chplan_new[k].ScanType = SCAN_ACTIVE;
-                                       i++;
-                                       j++;
-                                       k++;
-                               } else if (chplan_sta[i].ChannelNum < chplan_ap.Channel[j]) {
-                                       chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
-                                       chplan_new[k].ScanType = SCAN_PASSIVE;
-                                       i++;
-                                       k++;
-                               } else if (chplan_sta[i].ChannelNum > chplan_ap.Channel[j]) {
-                                       chplan_new[k].ChannelNum = chplan_ap.Channel[j];
-                                       chplan_new[k].ScanType = SCAN_ACTIVE;
-                                       j++;
-                                       k++;
-                               }
-                       } while (1);
-
-                       /*  change AP not support channel to Passive scan */
-                       while ((i < MAX_CHANNEL_NUM) &&
-                              (chplan_sta[i].ChannelNum != 0) &&
-                              (chplan_sta[i].ChannelNum <= 14)) {
-                               chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
-                               chplan_new[k].ScanType = SCAN_PASSIVE;
-                               i++;
-                               k++;
-                       }
-
-                       /*  add channel AP supported */
-                       while ((j < chplan_ap.Len) && (chplan_ap.Channel[j] <= 14)) {
-                               chplan_new[k].ChannelNum = chplan_ap.Channel[j];
-                               chplan_new[k].ScanType = SCAN_ACTIVE;
-                               j++;
-                               k++;
-                       }
-               } else {
-                       /*  keep original STA 2.4G channel plan */
-                       while ((i < MAX_CHANNEL_NUM) &&
-                              (chplan_sta[i].ChannelNum != 0) &&
-                              (chplan_sta[i].ChannelNum <= 14)) {
-                               chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
-                               chplan_new[k].ScanType = chplan_sta[i].ScanType;
-                               i++;
-                               k++;
-                       }
-
-                       /*  skip AP 2.4G channel plan */
-                       while ((j < chplan_ap.Len) && (chplan_ap.Channel[j] <= 14))
-                               j++;
-               }
-
-               /*  keep original STA 5G channel plan */
-               while ((i < MAX_CHANNEL_NUM) && (chplan_sta[i].ChannelNum != 0)) {
-                       chplan_new[k].ChannelNum = chplan_sta[i].ChannelNum;
-                       chplan_new[k].ScanType = chplan_sta[i].ScanType;
-                       i++;
-                       k++;
-               }
-
-               pmlmeext->update_channel_plan_by_ap_done = 1;
-       }
-
-       /*  If channel is used by AP, set channel scan type to active */
-       channel = bssid->Configuration.DSConfig;
-       chplan_new = pmlmeext->channel_set;
-       i = 0;
-       while ((i < MAX_CHANNEL_NUM) && (chplan_new[i].ChannelNum != 0)) {
-               if (chplan_new[i].ChannelNum == channel) {
-                       if (chplan_new[i].ScanType == SCAN_PASSIVE)
-                               chplan_new[i].ScanType = SCAN_ACTIVE;
-                       break;
-               }
-               i++;
-       }
-}
-
-/****************************************************************************
-
-Following are the functions to report events
-
-*****************************************************************************/
-
-void report_survey_event(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct cmd_obj *pcmd_obj;
-       u8 *pevtcmd;
-       u32 cmdsz;
-       struct survey_event     *psurvey_evt;
-       struct C2HEvent_Header *pc2h_evt_hdr;
-       struct mlme_ext_priv *pmlmeext;
-       struct cmd_priv *pcmdpriv;
-       /* u8 *pframe = precv_frame->rx_data; */
-       /* uint len = precv_frame->len; */
-
-       if (!padapter)
-               return;
-
-       pmlmeext = &padapter->mlmeextpriv;
-       pcmdpriv = &padapter->cmdpriv;
-
-       pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_ATOMIC);
-       if (!pcmd_obj)
-               return;
-
-       cmdsz = (sizeof(struct survey_event) + sizeof(struct C2HEvent_Header));
-       pevtcmd = kzalloc(cmdsz, GFP_ATOMIC);
-       if (!pevtcmd) {
-               kfree(pcmd_obj);
-               return;
-       }
-
-       INIT_LIST_HEAD(&pcmd_obj->list);
-
-       pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
-       pcmd_obj->cmdsz = cmdsz;
-       pcmd_obj->parmbuf = pevtcmd;
-
-       pcmd_obj->rsp = NULL;
-       pcmd_obj->rspsz  = 0;
-
-       pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd);
-       pc2h_evt_hdr->len = sizeof(struct survey_event);
-       pc2h_evt_hdr->ID = GEN_EVT_CODE(_Survey);
-       pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
-
-       psurvey_evt = (struct survey_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
-
-       if (collect_bss_info(padapter, precv_frame, (struct wlan_bssid_ex *)&psurvey_evt->bss) == _FAIL) {
-               kfree(pcmd_obj);
-               kfree(pevtcmd);
-               return;
-       }
-
-       process_80211d(padapter, &psurvey_evt->bss);
-
-       rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
-
-       pmlmeext->sitesurvey_res.bss_cnt++;
-}
-
-void report_surveydone_event(struct adapter *padapter)
-{
-       struct cmd_obj *pcmd_obj;
-       u8 *pevtcmd;
-       u32 cmdsz;
-       struct surveydone_event *psurveydone_evt;
-       struct C2HEvent_Header  *pc2h_evt_hdr;
-       struct mlme_ext_priv            *pmlmeext = &padapter->mlmeextpriv;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_KERNEL);
-       if (!pcmd_obj)
-               return;
-
-       cmdsz = (sizeof(struct surveydone_event) + sizeof(struct C2HEvent_Header));
-       pevtcmd = kzalloc(cmdsz, GFP_KERNEL);
-       if (!pevtcmd) {
-               kfree(pcmd_obj);
-               return;
-       }
-
-       INIT_LIST_HEAD(&pcmd_obj->list);
-
-       pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
-       pcmd_obj->cmdsz = cmdsz;
-       pcmd_obj->parmbuf = pevtcmd;
-
-       pcmd_obj->rsp = NULL;
-       pcmd_obj->rspsz  = 0;
-
-       pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd);
-       pc2h_evt_hdr->len = sizeof(struct surveydone_event);
-       pc2h_evt_hdr->ID = GEN_EVT_CODE(_SurveyDone);
-       pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
-
-       psurveydone_evt = (struct surveydone_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
-       psurveydone_evt->bss_cnt = pmlmeext->sitesurvey_res.bss_cnt;
-
-       rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
-}
-
-void report_join_res(struct adapter *padapter, int res)
-{
-       struct cmd_obj *pcmd_obj;
-       u8 *pevtcmd;
-       u32 cmdsz;
-       struct joinbss_event            *pjoinbss_evt;
-       struct C2HEvent_Header  *pc2h_evt_hdr;
-       struct mlme_ext_priv            *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_ATOMIC);
-       if (!pcmd_obj)
-               return;
-
-       cmdsz = (sizeof(struct joinbss_event) + sizeof(struct C2HEvent_Header));
-       pevtcmd = kzalloc(cmdsz, GFP_ATOMIC);
-       if (!pevtcmd) {
-               kfree(pcmd_obj);
-               return;
-       }
-
-       INIT_LIST_HEAD(&pcmd_obj->list);
-
-       pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
-       pcmd_obj->cmdsz = cmdsz;
-       pcmd_obj->parmbuf = pevtcmd;
-
-       pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd);
-       pc2h_evt_hdr->len = sizeof(struct joinbss_event);
-       pc2h_evt_hdr->ID = GEN_EVT_CODE(_JoinBss);
-       pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
-
-       pjoinbss_evt = (struct joinbss_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
-       memcpy((unsigned char *)(&pjoinbss_evt->network.network), &pmlmeinfo->network, sizeof(struct wlan_bssid_ex));
-       pjoinbss_evt->network.join_res  = res;
-       pjoinbss_evt->network.aid = res;
-
-       rtw_joinbss_event_prehandle(padapter, (u8 *)&pjoinbss_evt->network);
-
-       rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
-}
-
-void report_del_sta_event(struct adapter *padapter, unsigned char *MacAddr, unsigned short reason)
-{
-       struct cmd_obj *pcmd_obj;
-       u8 *pevtcmd;
-       u32 cmdsz;
-       struct sta_info *psta;
-       int     mac_id;
-       struct stadel_event                     *pdel_sta_evt;
-       struct C2HEvent_Header  *pc2h_evt_hdr;
-       struct mlme_ext_priv            *pmlmeext = &padapter->mlmeextpriv;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_ATOMIC);
-       if (!pcmd_obj)
-               return;
-
-       cmdsz = (sizeof(struct stadel_event) + sizeof(struct C2HEvent_Header));
-       pevtcmd = kzalloc(cmdsz, GFP_ATOMIC);
-       if (!pevtcmd) {
-               kfree(pcmd_obj);
-               return;
-       }
-
-       INIT_LIST_HEAD(&pcmd_obj->list);
-
-       pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
-       pcmd_obj->cmdsz = cmdsz;
-       pcmd_obj->parmbuf = pevtcmd;
-
-       pcmd_obj->rsp = NULL;
-       pcmd_obj->rspsz  = 0;
-
-       pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd);
-       pc2h_evt_hdr->len = sizeof(struct stadel_event);
-       pc2h_evt_hdr->ID = GEN_EVT_CODE(_DelSTA);
-       pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
-
-       pdel_sta_evt = (struct stadel_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
-       memcpy((unsigned char *)(&pdel_sta_evt->macaddr), MacAddr, ETH_ALEN);
-       memcpy((unsigned char *)(pdel_sta_evt->rsvd), (unsigned char *)(&reason), 2);
-
-       psta = rtw_get_stainfo(&padapter->stapriv, MacAddr);
-       if (psta)
-               mac_id = (int)psta->mac_id;
-       else
-               mac_id = (-1);
-
-       pdel_sta_evt->mac_id = mac_id;
-
-       rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
-}
-
-void report_add_sta_event(struct adapter *padapter, unsigned char *MacAddr, int cam_idx)
-{
-       struct cmd_obj *pcmd_obj;
-       u8 *pevtcmd;
-       u32 cmdsz;
-       struct stassoc_event            *padd_sta_evt;
-       struct C2HEvent_Header  *pc2h_evt_hdr;
-       struct mlme_ext_priv            *pmlmeext = &padapter->mlmeextpriv;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       pcmd_obj = kzalloc(sizeof(*pcmd_obj), GFP_KERNEL);
-       if (!pcmd_obj)
-               return;
-
-       cmdsz = (sizeof(struct stassoc_event) + sizeof(struct C2HEvent_Header));
-       pevtcmd = kzalloc(cmdsz, GFP_KERNEL);
-       if (!pevtcmd) {
-               kfree(pcmd_obj);
-               return;
-       }
-
-       INIT_LIST_HEAD(&pcmd_obj->list);
-
-       pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
-       pcmd_obj->cmdsz = cmdsz;
-       pcmd_obj->parmbuf = pevtcmd;
-
-       pcmd_obj->rsp = NULL;
-       pcmd_obj->rspsz  = 0;
-
-       pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd);
-       pc2h_evt_hdr->len = sizeof(struct stassoc_event);
-       pc2h_evt_hdr->ID = GEN_EVT_CODE(_AddSTA);
-       pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
-
-       padd_sta_evt = (struct stassoc_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
-       memcpy((unsigned char *)(&padd_sta_evt->macaddr), MacAddr, ETH_ALEN);
-       padd_sta_evt->cam_id = cam_idx;
-
-       rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
-}
-
-/****************************************************************************
-
-Following are the event callback functions
-
-*****************************************************************************/
-
-/* for sta/adhoc mode */
-void update_sta_info(struct adapter *padapter, struct sta_info *psta)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       /* ERP */
-       VCS_update(padapter, psta);
-
-       /* HT */
-       if (pmlmepriv->htpriv.ht_option) {
-               psta->htpriv.ht_option = true;
-
-               psta->htpriv.ampdu_enable = pmlmepriv->htpriv.ampdu_enable;
-
-               if (support_short_GI(padapter, &pmlmeinfo->HT_caps))
-                       psta->htpriv.sgi = true;
-
-               psta->qos_option = true;
-       } else {
-               psta->htpriv.ht_option = false;
-
-               psta->htpriv.ampdu_enable = false;
-
-               psta->htpriv.sgi = false;
-               psta->qos_option = false;
-       }
-       psta->htpriv.bwmode = pmlmeext->cur_bwmode;
-       psta->htpriv.ch_offset = pmlmeext->cur_ch_offset;
-
-       psta->htpriv.agg_enable_bitmap = 0x0;/* reset */
-       psta->htpriv.candidate_tid_bitmap = 0x0;/* reset */
-
-       /* QoS */
-       if (pmlmepriv->qospriv.qos_option)
-               psta->qos_option = true;
-
-       psta->state = _FW_LINKED;
-}
-
-static void rtw_reset_dm_func_flag(struct adapter *adapter)
-{
-       struct hal_data_8188e *haldata = &adapter->haldata;
-       struct dm_priv *dmpriv = &haldata->dmpriv;
-       struct odm_dm_struct *odmpriv = &haldata->odmpriv;
-
-       odmpriv->SupportAbility = dmpriv->InitODMFlag;
-}
-
-static void rtw_clear_dm_func_flag(struct adapter *adapter)
-{
-       struct hal_data_8188e *haldata = &adapter->haldata;
-       struct odm_dm_struct *odmpriv = &haldata->odmpriv;
-
-       odmpriv->SupportAbility = 0;
-}
-
-void mlmeext_joinbss_event_callback(struct adapter *padapter, int join_res)
-{
-       struct sta_info         *psta, *psta_bmc;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
-       struct sta_priv         *pstapriv = &padapter->stapriv;
-       u16 media_status;
-
-       if (join_res < 0) {
-               mlme_join(padapter, 1);
-               rtw_set_bssid(padapter, null_addr);
-
-               /* restore to initial setting. */
-               update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
-
-               return;
-       }
-
-       if ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) {
-               /* for bc/mc */
-               psta_bmc = rtw_get_bcmc_stainfo(padapter);
-               if (psta_bmc) {
-                       pmlmeinfo->FW_sta_info[psta_bmc->mac_id].psta = psta_bmc;
-                       update_bmc_sta_support_rate(padapter, psta_bmc->mac_id);
-                       Update_RA_Entry(padapter, psta_bmc->mac_id);
-               }
-       }
-
-       /* turn on dynamic functions */
-       rtw_reset_dm_func_flag(padapter);
-
-       /*  update IOT-releated issue */
-       update_IOT_info(padapter);
-
-       rtw_set_basic_rate(padapter, cur_network->SupportedRates);
-
-       /* BCN interval */
-       rtw_write16(padapter, REG_BCN_INTERVAL, pmlmeinfo->bcn_interval);
-
-       /* update capability */
-       update_capinfo(padapter, pmlmeinfo->capability);
-
-       /* WMM, Update EDCA param */
-       WMMOnAssocRsp(padapter);
-
-       /* HT */
-       HTOnAssocRsp(padapter);
-
-       set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-       psta = rtw_get_stainfo(pstapriv, cur_network->MacAddress);
-       if (psta) { /* only for infra. mode */
-               pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
-
-               psta->wireless_mode = pmlmeext->cur_wireless_mode;
-
-               /* set per sta rate after updating HT cap. */
-               set_sta_rate(padapter, psta);
-               rtw_set_max_rpt_macid(padapter, psta->mac_id);
-
-               media_status = (psta->mac_id << 8) | 1; /*   MACID|OPMODE: 1 means connect */
-               rtl8188e_set_FwMediaStatus_cmd(padapter, media_status);
-       }
-
-       mlme_join(padapter, 2);
-
-       if ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE) {
-               /*  correcting TSF */
-               correct_TSF(padapter);
-       }
-       rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_CONNECT, 0);
-}
-
-void mlmeext_sta_add_event_callback(struct adapter *padapter, struct sta_info *psta)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) {
-               if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) {/* adhoc master or sta_count>1 */
-                       /* nothing to do */
-               } else { /* adhoc client */
-                       /*  correcting TSF */
-                       correct_TSF(padapter);
-
-                       /* start beacon */
-                       if (send_beacon(padapter) == _FAIL) {
-                               pmlmeinfo->FW_sta_info[psta->mac_id].status = 0;
-                               pmlmeinfo->state ^= WIFI_FW_ADHOC_STATE;
-                               return;
-                       }
-                       pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
-               }
-               mlme_join(padapter, 2);
-       }
-
-       pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
-
-       /* rate radaptive */
-       Update_RA_Entry(padapter, psta->mac_id);
-
-       /* update adhoc sta_info */
-       update_sta_info(padapter, psta);
-}
-
-static void mlme_disconnect(struct adapter *adapter)
-{
-       int res;
-       u8 reg;
-
-       /* Set RCR to not to receive data frame when NO LINK state */
-       /* reject all data frames */
-       rtw_write16(adapter, REG_RXFLTMAP2, 0x00);
-
-       /* reset TSF */
-       rtw_write8(adapter, REG_DUAL_TSF_RST, (BIT(0) | BIT(1)));
-
-       /* disable update TSF */
-
-       res = rtw_read8(adapter, REG_BCN_CTRL, &reg);
-       if (res)
-               return;
-
-       rtw_write8(adapter, REG_BCN_CTRL, reg | BIT(4));
-}
-
-void mlmeext_sta_del_event_callback(struct adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (r8188eu_is_client_associated_to_ap(padapter) || r8188eu_is_ibss_empty(padapter)) {
-               mlme_disconnect(padapter);
-               rtw_set_bssid(padapter, null_addr);
-
-               /* restore to initial setting. */
-               update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
-
-               /* switch to the 20M Hz mode after disconnect */
-               pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
-               pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
-               /* SelectChannel(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset); */
-               set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-               flush_all_cam_entry(padapter);
-
-               pmlmeinfo->state = WIFI_FW_NULL_STATE;
-
-               /* set MSR to no link state -> infra. mode */
-               Set_MSR(padapter, _HW_STATE_STATION_);
-
-               _cancel_timer_ex(&pmlmeext->link_timer);
-       }
-}
-
-/****************************************************************************
-
-Following are the functions for the timer handlers
-
-*****************************************************************************/
-static u8 chk_ap_is_alive(struct sta_info *psta)
-{
-       u8 ret = false;
-
-       if ((sta_rx_data_pkts(psta) == sta_last_rx_data_pkts(psta)) &&
-           sta_rx_beacon_pkts(psta) == sta_last_rx_beacon_pkts(psta) &&
-           sta_rx_probersp_pkts(psta) == sta_last_rx_probersp_pkts(psta))
-               ret = false;
-       else
-               ret = true;
-
-       sta_update_last_rx_pkts(psta);
-
-       return ret;
-}
-
-static int rtl8188e_sreset_linked_status_check(struct adapter *padapter)
-{
-       u32 rx_dma_status;
-       int res;
-       u8 reg;
-
-       res = rtw_read32(padapter, REG_RXDMA_STATUS, &rx_dma_status);
-       if (res)
-               return res;
-
-       if (rx_dma_status != 0x00)
-               rtw_write32(padapter, REG_RXDMA_STATUS, rx_dma_status);
-
-       return rtw_read8(padapter, REG_FMETHR, &reg);
-}
-
-void linked_status_chk(struct adapter *padapter)
-{
-       u32     i;
-       struct sta_info         *psta;
-       struct xmit_priv                *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sta_priv         *pstapriv = &padapter->stapriv;
-
-       rtl8188e_sreset_linked_status_check(padapter);
-
-       if (r8188eu_is_client_associated_to_ap(padapter)) {
-               /* linked infrastructure client mode */
-
-               int tx_chk = _SUCCESS, rx_chk = _SUCCESS;
-               int rx_chk_limit;
-
-               rx_chk_limit = 4;
-               psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress);
-               if (psta) {
-                       bool is_p2p_enable = false;
-                       is_p2p_enable = !rtw_p2p_chk_state(&padapter->wdinfo, P2P_STATE_NONE);
-
-                       if (!chk_ap_is_alive(psta))
-                               rx_chk = _FAIL;
-
-                       if (pxmitpriv->last_tx_pkts == pxmitpriv->tx_pkts)
-                               tx_chk = _FAIL;
-
-                       if (pmlmeext->active_keep_alive_check && (rx_chk == _FAIL || tx_chk == _FAIL)) {
-                               u8 backup_oper_channel = 0;
-
-                               /* switch to correct channel of current network  before issue keep-alive frames */
-                               if (rtw_get_oper_ch(padapter) != pmlmeext->cur_channel) {
-                                       backup_oper_channel = rtw_get_oper_ch(padapter);
-                                       SelectChannel(padapter, pmlmeext->cur_channel);
-                               }
-
-                               if (rx_chk != _SUCCESS)
-                                       issue_probereq_ex(padapter, &pmlmeinfo->network.Ssid, psta->hwaddr);
-
-                               if ((tx_chk != _SUCCESS && pmlmeinfo->link_count++ == 0xf) || rx_chk != _SUCCESS) {
-                                       tx_chk = issue_nulldata(padapter, psta->hwaddr, 0, 3, 1);
-                                       /* if tx acked and p2p disabled, set rx_chk _SUCCESS to reset retry count */
-                                       if (tx_chk == _SUCCESS && !is_p2p_enable)
-                                               rx_chk = _SUCCESS;
-                               }
-
-                               /* back to the original operation channel */
-                               if (backup_oper_channel > 0)
-                                       SelectChannel(padapter, backup_oper_channel);
-                       } else {
-                               if (rx_chk != _SUCCESS) {
-                                       if (pmlmeext->retry == 0) {
-                                               issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
-                                               issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
-                                               issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
-                                       }
-                               }
-
-                               if (tx_chk != _SUCCESS && pmlmeinfo->link_count++ == 0xf) {
-                                       tx_chk = issue_nulldata(padapter, NULL, 0, 1, 0);
-                               }
-                       }
-
-                       if (rx_chk == _FAIL) {
-                               pmlmeext->retry++;
-                               if (pmlmeext->retry > rx_chk_limit) {
-                                       receive_disconnect(padapter, pmlmeinfo->network.MacAddress,
-                                                          WLAN_REASON_EXPIRATION_CHK);
-                                       return;
-                               }
-                       } else {
-                               pmlmeext->retry = 0;
-                       }
-
-                       if (tx_chk == _FAIL) {
-                               pmlmeinfo->link_count &= 0xf;
-                       } else {
-                               pxmitpriv->last_tx_pkts = pxmitpriv->tx_pkts;
-                               pmlmeinfo->link_count = 0;
-                       }
-               } /* end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.MacAddress)) != NULL) */
-       } else if (r8188eu_is_client_associated_to_ibss(padapter)) {
-               /* linked IBSS mode */
-               /* for each assoc list entry to check the rx pkt counter */
-               for (i = IBSS_START_MAC_ID; i < NUM_STA; i++) {
-                       if (pmlmeinfo->FW_sta_info[i].status == 1) {
-                               psta = pmlmeinfo->FW_sta_info[i].psta;
-
-                               if (psta == NULL)
-                                       continue;
-                               if (pmlmeinfo->FW_sta_info[i].rx_pkt == sta_rx_pkts(psta)) {
-                                       if (pmlmeinfo->FW_sta_info[i].retry < 3) {
-                                               pmlmeinfo->FW_sta_info[i].retry++;
-                                       } else {
-                                               pmlmeinfo->FW_sta_info[i].retry = 0;
-                                               pmlmeinfo->FW_sta_info[i].status = 0;
-                                               report_del_sta_event(padapter, psta->hwaddr
-                                                       , 65535/*  indicate disconnect caused by no rx */
-                                       );
-                                       }
-                               } else {
-                                       pmlmeinfo->FW_sta_info[i].retry = 0;
-                                       pmlmeinfo->FW_sta_info[i].rx_pkt = (u32)sta_rx_pkts(psta);
-                               }
-                       }
-               }
-       }
-}
-
-void survey_timer_hdl(struct adapter *padapter)
-{
-       struct cmd_obj  *ph2c;
-       struct sitesurvey_parm  *psurveyPara;
-       struct cmd_priv                                 *pcmdpriv = &padapter->cmdpriv;
-       struct mlme_ext_priv            *pmlmeext = &padapter->mlmeextpriv;
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       /* issue rtw_sitesurvey_cmd */
-       if (pmlmeext->sitesurvey_res.state > SCAN_START) {
-               if (pmlmeext->sitesurvey_res.state ==  SCAN_PROCESS)
-                       pmlmeext->sitesurvey_res.channel_idx++;
-
-               if (pmlmeext->scan_abort) {
-                       if (!rtw_p2p_chk_state(&padapter->wdinfo, P2P_STATE_NONE)) {
-                               rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_MAX);
-                               pmlmeext->sitesurvey_res.channel_idx = 3;
-                       } else {
-                               pmlmeext->sitesurvey_res.channel_idx = pmlmeext->sitesurvey_res.ch_num;
-                       }
-
-                       pmlmeext->scan_abort = false;/* reset */
-               }
-
-               ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-               if (!ph2c)
-                       goto exit_survey_timer_hdl;
-
-               psurveyPara = kzalloc(sizeof(*psurveyPara), GFP_ATOMIC);
-               if (!psurveyPara) {
-                       kfree(ph2c);
-                       goto exit_survey_timer_hdl;
-               }
-
-               init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara, GEN_CMD_CODE(_SiteSurvey));
-               rtw_enqueue_cmd(pcmdpriv, ph2c);
-       }
-
-exit_survey_timer_hdl:
-       return;
-}
-
-void link_timer_hdl(struct adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pmlmeinfo->state & WIFI_FW_AUTH_NULL) {
-               pmlmeinfo->state = WIFI_FW_NULL_STATE;
-               report_join_res(padapter, -3);
-       } else if (pmlmeinfo->state & WIFI_FW_AUTH_STATE) {
-               /* re-auth timer */
-               if (++pmlmeinfo->reauth_count > REAUTH_LIMIT) {
-                       pmlmeinfo->state = 0;
-                       report_join_res(padapter, -1);
-                       return;
-               }
-
-               pmlmeinfo->auth_seq = 1;
-               issue_auth(padapter, NULL, 0);
-               set_link_timer(pmlmeext, REAUTH_TO);
-       } else if (pmlmeinfo->state & WIFI_FW_ASSOC_STATE) {
-               /* re-assoc timer */
-               if (++pmlmeinfo->reassoc_count > REASSOC_LIMIT) {
-                       pmlmeinfo->state = WIFI_FW_NULL_STATE;
-                       report_join_res(padapter, -2);
-                       return;
-               }
-
-               issue_assocreq(padapter);
-               set_link_timer(pmlmeext, REASSOC_TO);
-       }
-}
-
-void addba_timer_hdl(struct sta_info *psta)
-{
-       struct ht_priv  *phtpriv;
-
-       if (!psta)
-               return;
-
-       phtpriv = &psta->htpriv;
-
-       if ((phtpriv->ht_option) && (phtpriv->ampdu_enable)) {
-               if (phtpriv->candidate_tid_bitmap)
-                       phtpriv->candidate_tid_bitmap = 0x0;
-       }
-}
-
-u8 NULL_hdl(struct adapter *padapter, u8 *pbuf)
-{
-       return H2C_SUCCESS;
-}
-
-u8 setopmode_hdl(struct adapter *padapter, u8 *pbuf)
-{
-       u8 type;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct setopmode_parm *psetop = (struct setopmode_parm *)pbuf;
-
-       if (psetop->mode == Ndis802_11APMode) {
-               pmlmeinfo->state = WIFI_FW_AP_STATE;
-               type = _HW_STATE_AP_;
-       } else if (psetop->mode == Ndis802_11Infrastructure) {
-               pmlmeinfo->state &= ~(BIT(0) | BIT(1));/*  clear state */
-               pmlmeinfo->state |= WIFI_FW_STATION_STATE;/* set to     STATION_STATE */
-               type = _HW_STATE_STATION_;
-       } else if (psetop->mode == Ndis802_11IBSS) {
-               type = _HW_STATE_ADHOC_;
-       } else {
-               type = _HW_STATE_NOLINK_;
-       }
-
-       rtw_set_opmode(padapter, type);
-
-       return H2C_SUCCESS;
-}
-
-u8 createbss_hdl(struct adapter *padapter, u8 *pbuf)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex *)(&pmlmeinfo->network);
-       struct joinbss_parm *pparm = (struct joinbss_parm *)pbuf;
-       /* u32  initialgain; */
-
-       if (pparm->network.InfrastructureMode == Ndis802_11APMode) {
-               if (pmlmeinfo->state == WIFI_FW_AP_STATE) {
-                       /* todo: */
-                       return H2C_SUCCESS;
-               }
-       }
-
-       /* below is for ad-hoc master */
-       if (pparm->network.InfrastructureMode == Ndis802_11IBSS) {
-               rtw_joinbss_reset(padapter);
-
-               pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
-               pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-               pmlmeinfo->ERP_enable = 0;
-               pmlmeinfo->WMM_enable = 0;
-               pmlmeinfo->HT_enable = 0;
-               pmlmeinfo->HT_caps_enable = 0;
-               pmlmeinfo->HT_info_enable = 0;
-               pmlmeinfo->agg_enable_bitmap = 0;
-               pmlmeinfo->candidate_tid_bitmap = 0;
-
-               /* disable dynamic functions, such as high power, DIG */
-               Save_DM_Func_Flag(padapter);
-               rtw_clear_dm_func_flag(padapter);
-
-               /* cancel link timer */
-               _cancel_timer_ex(&pmlmeext->link_timer);
-
-               /* clear CAM */
-               flush_all_cam_entry(padapter);
-
-               memcpy(pnetwork, pbuf, offsetof(struct wlan_bssid_ex, IELength));
-               pnetwork->IELength = ((struct wlan_bssid_ex *)pbuf)->IELength;
-
-               if (pnetwork->IELength > MAX_IE_SZ)/* Check pbuf->IELength */
-                       return H2C_PARAMETERS_ERROR;
-
-               memcpy(pnetwork->IEs, ((struct wlan_bssid_ex *)pbuf)->IEs, pnetwork->IELength);
-
-               start_create_ibss(padapter);
-       }
-
-       return H2C_SUCCESS;
-}
-
-u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf)
-{
-       struct ndis_802_11_var_ie *pIE;
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex *)(&pmlmeinfo->network);
-       struct joinbss_parm     *pparm = (struct joinbss_parm *)pbuf;
-       u32 i;
-
-       /* check already connecting to AP or not */
-       if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) {
-               if (pmlmeinfo->state & WIFI_FW_STATION_STATE)
-                       issue_deauth_ex(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING, 5, 100);
-
-               pmlmeinfo->state = WIFI_FW_NULL_STATE;
-
-               /* clear CAM */
-               flush_all_cam_entry(padapter);
-
-               _cancel_timer_ex(&pmlmeext->link_timer);
-
-               /* set MSR to nolink -> infra. mode */
-               Set_MSR(padapter, _HW_STATE_STATION_);
-
-               mlme_disconnect(padapter);
-       }
-
-       rtw_antenna_select_cmd(padapter, pparm->network.PhyInfo.Optimum_antenna, false);
-
-       rtw_joinbss_reset(padapter);
-
-       pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
-       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-       pmlmeinfo->ERP_enable = 0;
-       pmlmeinfo->WMM_enable = 0;
-       pmlmeinfo->HT_enable = 0;
-       pmlmeinfo->HT_caps_enable = 0;
-       pmlmeinfo->HT_info_enable = 0;
-       pmlmeinfo->agg_enable_bitmap = 0;
-       pmlmeinfo->candidate_tid_bitmap = 0;
-       pmlmeinfo->bwmode_updated = false;
-
-       memcpy(pnetwork, pbuf, offsetof(struct wlan_bssid_ex, IELength));
-       pnetwork->IELength = ((struct wlan_bssid_ex *)pbuf)->IELength;
-
-       if (pnetwork->IELength > MAX_IE_SZ)/* Check pbuf->IELength */
-               return H2C_PARAMETERS_ERROR;
-
-       memcpy(pnetwork->IEs, ((struct wlan_bssid_ex *)pbuf)->IEs, pnetwork->IELength);
-
-       /* Check AP vendor to move rtw_joinbss_cmd() */
-
-       for (i = sizeof(struct ndis_802_11_fixed_ie); i < pnetwork->IELength;) {
-               pIE = (struct ndis_802_11_var_ie *)(pnetwork->IEs + i);
-
-               switch (pIE->ElementID) {
-               case _VENDOR_SPECIFIC_IE_:/* Get WMM IE. */
-                       if (!memcmp(pIE->data, WMM_OUI, 4))
-                               pmlmeinfo->WMM_enable = 1;
-                       break;
-               case _HT_CAPABILITY_IE_:        /* Get HT Cap IE. */
-                       pmlmeinfo->HT_caps_enable = 1;
-                       break;
-               case _HT_EXTRA_INFO_IE_:        /* Get HT Info IE. */
-                       pmlmeinfo->HT_info_enable = 1;
-
-                       /* spec case only for cisco's ap because cisco's ap issue assoc rsp using mcs rate @40MHz or @20MHz */
-                       {
-                               struct HT_info_element *pht_info = (struct HT_info_element *)(pIE->data);
-
-                               if ((pregpriv->cbw40_enable) &&  (pht_info->infos[0] & BIT(2))) {
-                                       /* switch to the 40M Hz mode according to the AP */
-                                       pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
-                                       switch (pht_info->infos[0] & 0x3) {
-                                       case 1:
-                                               pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
-                                               break;
-                                       case 3:
-                                               pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
-                                               break;
-                                       default:
-                                               pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-                                               break;
-                                       }
-                               }
-                       }
-                       break;
-               default:
-                       break;
-               }
-
-               i += (pIE->Length + 2);
-       }
-       /* disable dynamic functions, such as high power, DIG */
-
-       /* config the initial gain under linking, need to write the BB registers */
-
-       rtw_set_bssid(padapter, pmlmeinfo->network.MacAddress);
-       mlme_join(padapter, 0);
-
-       /* cancel link timer */
-       _cancel_timer_ex(&pmlmeext->link_timer);
-
-       start_clnt_join(padapter);
-
-       return H2C_SUCCESS;
-}
-
-u8 disconnect_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
-       struct disconnect_parm *param = (struct disconnect_parm *)pbuf;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex *)(&pmlmeinfo->network);
-       u8 val8;
-       int res;
-
-       if (r8188eu_is_client_associated_to_ap(padapter))
-               issue_deauth_ex(padapter, pnetwork->MacAddress, WLAN_REASON_DEAUTH_LEAVING, param->deauth_timeout_ms / 100, 100);
-
-       mlme_disconnect(padapter);
-       rtw_set_bssid(padapter, null_addr);
-
-       /* restore to initial setting. */
-       update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
-
-       if (((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)) {
-               /* Stop BCN */
-               res = rtw_read8(padapter, REG_BCN_CTRL, &val8);
-               if (res)
-                       return H2C_DROPPED;
-
-               rtw_write8(padapter, REG_BCN_CTRL, val8 & (~(EN_BCN_FUNCTION | EN_TXBCN_RPT)));
-       }
-
-       /* set MSR to no link state -> infra. mode */
-       Set_MSR(padapter, _HW_STATE_STATION_);
-
-       pmlmeinfo->state = WIFI_FW_NULL_STATE;
-
-       /* switch to the 20M Hz mode after disconnect */
-       pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
-       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
-       set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-       flush_all_cam_entry(padapter);
-
-       _cancel_timer_ex(&pmlmeext->link_timer);
-
-       rtw_free_uc_swdec_pending_queue(padapter);
-
-       return  H2C_SUCCESS;
-}
-
-static int rtw_scan_ch_decision(struct adapter *padapter, struct rtw_ieee80211_channel *out,
-       u32 out_num, struct rtw_ieee80211_channel *in, u32 in_num)
-{
-       int i, j;
-       int set_idx;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-
-       /* clear out first */
-       memset(out, 0, sizeof(struct rtw_ieee80211_channel) * out_num);
-
-       /* acquire channels from in */
-       j = 0;
-       for (i = 0; i < in_num; i++) {
-               set_idx = rtw_ch_set_search_ch(pmlmeext->channel_set, in[i].hw_value);
-               if (in[i].hw_value && !(in[i].flags & RTW_IEEE80211_CHAN_DISABLED) &&
-                   set_idx >= 0) {
-                       memcpy(&out[j], &in[i], sizeof(struct rtw_ieee80211_channel));
-
-                       if (pmlmeext->channel_set[set_idx].ScanType == SCAN_PASSIVE)
-                               out[j].flags &= RTW_IEEE80211_CHAN_PASSIVE_SCAN;
-
-                       j++;
-               }
-               if (j >= out_num)
-                       break;
-       }
-
-       /* if out is empty, use channel_set as default */
-       if (j == 0) {
-               for (i = 0; i < pmlmeext->max_chan_nums; i++) {
-                       out[i].hw_value = pmlmeext->channel_set[i].ChannelNum;
-
-                       if (pmlmeext->channel_set[i].ScanType == SCAN_PASSIVE)
-                               out[i].flags &= RTW_IEEE80211_CHAN_PASSIVE_SCAN;
-
-                       j++;
-               }
-       }
-
-       return j;
-}
-
-u8 sitesurvey_cmd_hdl(struct adapter *padapter, u8 *pbuf)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct sitesurvey_parm  *pparm = (struct sitesurvey_parm *)pbuf;
-       u8 bdelayscan = false;
-       u32     i;
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       if (pmlmeext->sitesurvey_res.state == SCAN_DISABLE) {
-               /* for first time sitesurvey_cmd */
-
-               pmlmeext->sitesurvey_res.state = SCAN_START;
-               pmlmeext->sitesurvey_res.bss_cnt = 0;
-               pmlmeext->sitesurvey_res.channel_idx = 0;
-
-               for (i = 0; i < RTW_SSID_SCAN_AMOUNT; i++) {
-                       if (pparm->ssid[i].SsidLength) {
-                               memcpy(pmlmeext->sitesurvey_res.ssid[i].Ssid, pparm->ssid[i].Ssid, IW_ESSID_MAX_SIZE);
-                               pmlmeext->sitesurvey_res.ssid[i].SsidLength = pparm->ssid[i].SsidLength;
-                       } else {
-                               pmlmeext->sitesurvey_res.ssid[i].SsidLength = 0;
-                       }
-               }
-
-               pmlmeext->sitesurvey_res.ch_num = rtw_scan_ch_decision(padapter
-                       , pmlmeext->sitesurvey_res.ch, RTW_CHANNEL_SCAN_AMOUNT
-                       , pparm->ch, pparm->ch_num
-       );
-
-               pmlmeext->sitesurvey_res.scan_mode = pparm->scan_mode;
-
-               /* issue null data if associating to the AP */
-               if (r8188eu_is_client_associated_to_ap(padapter)) {
-                       pmlmeext->sitesurvey_res.state = SCAN_TXNULL;
-
-                       issue_nulldata(padapter, NULL, 1, 3, 500);
-
-                       bdelayscan = true;
-               }
-               if (bdelayscan) {
-                       /* delay 50ms to protect nulldata(1). */
-                       set_survey_timer(pmlmeext, 50);
-                       return H2C_SUCCESS;
-               }
-       }
-
-       if ((pmlmeext->sitesurvey_res.state == SCAN_START) || (pmlmeext->sitesurvey_res.state == SCAN_TXNULL)) {
-               /* disable dynamic functions, such as high power, DIG */
-               Save_DM_Func_Flag(padapter);
-               rtw_clear_dm_func_flag(padapter);
-
-               /* config the initial gain under scanning, need to write the BB registers */
-               if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-                       rtw_set_initial_gain(padapter, 0x1e);
-               else
-                       rtw_set_initial_gain(padapter, 0x28);
-
-
-               /* set MSR to no link state */
-               Set_MSR(padapter, _HW_STATE_NOLINK_);
-
-               rtw_mlme_under_site_survey(padapter);
-
-               pmlmeext->sitesurvey_res.state = SCAN_PROCESS;
-       }
-
-       site_survey(padapter);
-
-       return H2C_SUCCESS;
-}
-
-u8 setauth_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
-       struct setauth_parm             *pparm = (struct setauth_parm *)pbuf;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pparm->mode < 4)
-               pmlmeinfo->auth_algo = pparm->mode;
-       return  H2C_SUCCESS;
-}
-
-u8 setkey_hdl(struct adapter *padapter, u8 *pbuf)
-{
-       unsigned short                          ctrl;
-       struct setkey_parm              *pparm = (struct setkey_parm *)pbuf;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       unsigned char                                   null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
-       /* main tx key for wep. */
-       if (pparm->set_tx)
-               pmlmeinfo->key_index = pparm->keyid;
-
-       /* write cam */
-       ctrl = BIT(15) | ((pparm->algorithm) << 2) | pparm->keyid;
-
-       write_cam(padapter, pparm->keyid, ctrl, null_sta, pparm->key);
-
-       return H2C_SUCCESS;
-}
-
-u8 set_stakey_hdl(struct adapter *padapter, u8 *pbuf)
-{
-       u16 ctrl = 0;
-       u8 cam_id;/* cam_entry */
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct set_stakey_parm  *pparm = (struct set_stakey_parm *)pbuf;
-
-       /* cam_entry: */
-       /* 0~3 for default key */
-
-       /* for concurrent mode (ap+sta): */
-       /* default key is disable, using sw encrypt/decrypt */
-       /* cam_entry = 4 for sta mode (macid = 0) */
-       /* cam_entry(macid+3) = 5 ~ N for ap mode (aid = 1~N, macid = 2 ~N) */
-
-       /* for concurrent mode (sta+sta): */
-       /* default key is disable, using sw encrypt/decrypt */
-       /* cam_entry = 4 mapping to macid = 0 */
-       /* cam_entry = 5 mapping to macid = 2 */
-
-       cam_id = 4;
-
-       if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) {
-               struct sta_info *psta;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               if (pparm->algorithm == _NO_PRIVACY_)   /*  clear cam entry */ {
-                       clear_cam_entry(padapter, pparm->id);
-                       return H2C_SUCCESS_RSP;
-               }
-
-               psta = rtw_get_stainfo(pstapriv, pparm->addr);
-               if (psta) {
-                       ctrl = (BIT(15) | ((pparm->algorithm) << 2));
-
-                       if ((psta->mac_id < 1) || (psta->mac_id > (NUM_STA - 4)))
-                               return H2C_REJECTED;
-
-                       cam_id = (psta->mac_id + 3);/* 0~3 for default key, cmd_id = macid + 3, macid = aid+1; */
-
-                       write_cam(padapter, cam_id, ctrl, pparm->addr, pparm->key);
-
-                       return H2C_SUCCESS_RSP;
-               } else {
-                       return H2C_REJECTED;
-               }
-       }
-
-       /* below for sta mode */
-
-       if (pparm->algorithm == _NO_PRIVACY_) { /*  clear cam entry */
-               clear_cam_entry(padapter, pparm->id);
-               return H2C_SUCCESS;
-       }
-       ctrl = BIT(15) | ((pparm->algorithm) << 2);
-       write_cam(padapter, cam_id, ctrl, pparm->addr, pparm->key);
-       pmlmeinfo->enc_algo = pparm->algorithm;
-       return H2C_SUCCESS;
-}
-
-u8 add_ba_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
-       struct addBaReq_parm    *pparm = (struct addBaReq_parm *)pbuf;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, pparm->addr);
-
-       if (!psta)
-               return  H2C_SUCCESS;
-
-       if (((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && (pmlmeinfo->HT_enable)) ||
-           ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)) {
-               issue_action_BA(padapter, pparm->addr, WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid, NULL);
-               _set_timer(&psta->addba_retry_timer, ADDBA_TO);
-       } else {
-               psta->htpriv.candidate_tid_bitmap &= ~BIT(pparm->tid);
-       }
-       return  H2C_SUCCESS;
-}
-
-u8 set_tx_beacon_cmd(struct adapter *padapter)
-{
-       struct cmd_obj  *ph2c;
-       struct Tx_Beacon_param  *ptxBeacon_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       u8 res = _SUCCESS;
-       int len_diff = 0;
-
-       ph2c = kzalloc(sizeof(*ph2c), GFP_ATOMIC);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       ptxBeacon_parm = kzalloc(sizeof(*ptxBeacon_parm), GFP_ATOMIC);
-       if (!ptxBeacon_parm) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       memcpy(&ptxBeacon_parm->network, &pmlmeinfo->network, sizeof(struct wlan_bssid_ex));
-
-       len_diff = update_hidden_ssid(ptxBeacon_parm->network.IEs + _BEACON_IE_OFFSET_,
-                                     ptxBeacon_parm->network.IELength - _BEACON_IE_OFFSET_,
-                                     pmlmeinfo->hidden_ssid_mode);
-       ptxBeacon_parm->network.IELength += len_diff;
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, ptxBeacon_parm, GEN_CMD_CODE(_TX_Beacon));
-
-       res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
-
-       return res;
-}
-
-u8 mlme_evt_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
-       u8 evt_code;
-       u16 evt_sz;
-       uint    *peventbuf;
-       void (*event_callback)(struct adapter *dev, u8 *pbuf);
-       struct evt_priv *pevt_priv = &padapter->evtpriv;
-
-       peventbuf = (uint *)pbuf;
-       evt_sz = (u16)(*peventbuf & 0xffff);
-       evt_code = (u8)((*peventbuf >> 16) & 0xff);
-
-       /*  checking if event code is valid */
-       if (evt_code >= MAX_C2HEVT)
-               goto _abort_event_;
-
-       /*  checking if event size match the event parm size */
-       if ((wlanevents[evt_code].parmsize != 0) &&
-           (wlanevents[evt_code].parmsize != evt_sz))
-               goto _abort_event_;
-
-       atomic_inc(&pevt_priv->event_seq);
-
-       peventbuf += 2;
-
-       if (peventbuf) {
-               event_callback = wlanevents[evt_code].event_callback;
-               event_callback(padapter, (u8 *)peventbuf);
-       }
-
-_abort_event_:
-       return H2C_SUCCESS;
-}
-
-u8 h2c_msg_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
-       if (!pbuf)
-               return H2C_PARAMETERS_ERROR;
-
-       return H2C_SUCCESS;
-}
-
-u8 tx_beacon_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
-       if (send_beacon(padapter) == _FAIL) {
-               return H2C_PARAMETERS_ERROR;
-       } else {
-               /* tx bc/mc frames after update TIM */
-               struct sta_info *psta_bmc;
-               struct list_head *xmitframe_plist, *xmitframe_phead;
-               struct xmit_frame *pxmitframe = NULL;
-               struct sta_priv  *pstapriv = &padapter->stapriv;
-
-               /* for BC/MC Frames */
-               psta_bmc = rtw_get_bcmc_stainfo(padapter);
-               if (!psta_bmc)
-                       return H2C_SUCCESS;
-
-               if ((pstapriv->tim_bitmap & BIT(0)) && (psta_bmc->sleepq_len > 0)) {
-                       msleep(10);/*  10ms, ATIM(HIQ) Windows */
-                       spin_lock_bh(&psta_bmc->sleep_q.lock);
-
-                       xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
-                       xmitframe_plist = xmitframe_phead->next;
-
-                       while (xmitframe_phead != xmitframe_plist) {
-                               pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list);
-
-                               xmitframe_plist = xmitframe_plist->next;
-
-                               list_del_init(&pxmitframe->list);
-
-                               psta_bmc->sleepq_len--;
-                               if (psta_bmc->sleepq_len > 0)
-                                       pxmitframe->attrib.mdata = 1;
-                               else
-                                       pxmitframe->attrib.mdata = 0;
-
-                               pxmitframe->attrib.triggered = 1;
-
-                               pxmitframe->attrib.qsel = 0x11;/* HIQ */
-
-                               spin_unlock_bh(&psta_bmc->sleep_q.lock);
-                               if (rtl8188eu_hal_xmit(padapter, pxmitframe))
-                                       rtw_xmit_complete(padapter, pxmitframe);
-                               spin_lock_bh(&psta_bmc->sleep_q.lock);
-                       }
-                       spin_unlock_bh(&psta_bmc->sleep_q.lock);
-               }
-       }
-       return H2C_SUCCESS;
-}
-
-u8 set_ch_hdl(struct adapter *padapter, u8 *pbuf)
-{
-       struct set_ch_parm *set_ch_parm;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-
-       if (!pbuf)
-               return H2C_PARAMETERS_ERROR;
-
-       set_ch_parm = (struct set_ch_parm *)pbuf;
-
-       pmlmeext->cur_channel = set_ch_parm->ch;
-       pmlmeext->cur_ch_offset = set_ch_parm->ch_offset;
-       pmlmeext->cur_bwmode = set_ch_parm->bw;
-
-       set_channel_bwmode(padapter, set_ch_parm->ch, set_ch_parm->ch_offset, set_ch_parm->bw);
-
-       return  H2C_SUCCESS;
-}
-
-u8 set_chplan_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
-       struct SetChannelPlan_param *setChannelPlan_param;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-
-       if (!pbuf)
-               return H2C_PARAMETERS_ERROR;
-
-       setChannelPlan_param = (struct SetChannelPlan_param *)pbuf;
-
-       pmlmeext->max_chan_nums = init_channel_set(padapter, setChannelPlan_param->channel_plan, pmlmeext->channel_set);
-       init_channel_list(padapter, pmlmeext->channel_set, pmlmeext->max_chan_nums, &pmlmeext->channel_list);
-
-       return  H2C_SUCCESS;
-}
-
-u8 led_blink_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
-       if (!pbuf)
-               return H2C_PARAMETERS_ERROR;
-       return  H2C_SUCCESS;
-}
-
-u8 set_csa_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
-       return  H2C_REJECTED;
-}
-
-/*  TDLS_WRCR          : write RCR DATA BIT */
-/*  TDLS_SD_PTI                : issue peer traffic indication */
-/*  TDLS_CS_OFF                : go back to the channel linked with AP, terminating channel switch procedure */
-/*  TDLS_INIT_CH_SEN   : init channel sensing, receive all data and mgnt frame */
-/*  TDLS_DONE_CH_SEN: channel sensing and report candidate channel */
-/*  TDLS_OFF_CH                : first time set channel to off channel */
-/*  TDLS_BASE_CH               : go back tp the channel linked with AP when set base channel as target channel */
-/*  TDLS_P_OFF_CH      : periodically go to off channel */
-/*  TDLS_P_BASE_CH     : periodically go back to base channel */
-/*  TDLS_RS_RCR                : restore RCR */
-/*  TDLS_CKALV_PH1     : check alive timer phase1 */
-/*  TDLS_CKALV_PH2     : check alive timer phase2 */
-/*  TDLS_FREE_STA      : free tdls sta */
-u8 tdls_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
-       return H2C_REJECTED;
-}
diff --git a/drivers/staging/r8188eu/core/rtw_p2p.c b/drivers/staging/r8188eu/core/rtw_p2p.c
deleted file mode 100644 (file)
index 93d3c9c..0000000
+++ /dev/null
@@ -1,1918 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _RTW_P2P_C_
-
-#include "../include/drv_types.h"
-#include "../include/rtw_p2p.h"
-#include "../include/wifi.h"
-
-static int rtw_p2p_is_channel_list_ok(u8 desired_ch, u8 *ch_list, u8 ch_cnt)
-{
-       int found = 0, i = 0;
-
-       for (i = 0; i < ch_cnt; i++) {
-               if (ch_list[i] == desired_ch) {
-                       found = 1;
-                       break;
-               }
-       }
-       return found;
-}
-
-static u32 go_add_group_info_attr(struct wifidirect_info *pwdinfo, u8 *pbuf)
-{
-       struct list_head *phead, *plist;
-       u32 len = 0;
-       u16 attr_len = 0;
-       u8 tmplen, *pdata_attr, *pstart, *pcur;
-       struct sta_info *psta = NULL;
-       struct adapter *padapter = pwdinfo->padapter;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       pdata_attr = kzalloc(MAX_P2P_IE_LEN, GFP_KERNEL);
-
-       pstart = pdata_attr;
-       pcur = pdata_attr;
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-       phead = &pstapriv->asoc_list;
-       plist = phead->next;
-
-       /* look up sta asoc_queue */
-       while (phead != plist) {
-               psta = container_of(plist, struct sta_info, asoc_list);
-
-               plist = plist->next;
-
-               if (psta->is_p2p_device) {
-                       tmplen = 0;
-
-                       pcur++;
-
-                       /* P2P device address */
-                       memcpy(pcur, psta->dev_addr, ETH_ALEN);
-                       pcur += ETH_ALEN;
-
-                       /* P2P interface address */
-                       memcpy(pcur, psta->hwaddr, ETH_ALEN);
-                       pcur += ETH_ALEN;
-
-                       *pcur = psta->dev_cap;
-                       pcur++;
-
-                       /* u16*)(pcur) = cpu_to_be16(psta->config_methods); */
-                       RTW_PUT_BE16(pcur, psta->config_methods);
-                       pcur += 2;
-
-                       memcpy(pcur, psta->primary_dev_type, 8);
-                       pcur += 8;
-
-                       *pcur = psta->num_of_secdev_type;
-                       pcur++;
-
-                       memcpy(pcur, psta->secdev_types_list, psta->num_of_secdev_type * 8);
-                       pcur += psta->num_of_secdev_type * 8;
-
-                       if (psta->dev_name_len > 0) {
-                               /* u16*)(pcur) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); */
-                               RTW_PUT_BE16(pcur, WPS_ATTR_DEVICE_NAME);
-                               pcur += 2;
-
-                               /* u16*)(pcur) = cpu_to_be16(psta->dev_name_len); */
-                               RTW_PUT_BE16(pcur, psta->dev_name_len);
-                               pcur += 2;
-
-                               memcpy(pcur, psta->dev_name, psta->dev_name_len);
-                               pcur += psta->dev_name_len;
-                       }
-
-                       tmplen = (u8)(pcur - pstart);
-
-                       *pstart = (tmplen - 1);
-
-                       attr_len += tmplen;
-
-                       /* pstart += tmplen; */
-                       pstart = pcur;
-               }
-       }
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       if (attr_len > 0)
-               len = rtw_set_p2p_attr_content(pbuf, P2P_ATTR_GROUP_INFO, attr_len, pdata_attr);
-
-       kfree(pdata_attr);
-       return len;
-}
-
-static void issue_group_disc_req(struct wifidirect_info *pwdinfo, u8 *da)
-{
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct adapter *padapter = pwdinfo->padapter;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       unsigned char category = RTW_WLAN_CATEGORY_P2P;/* P2P action frame */
-       __be32  p2poui = cpu_to_be32(P2POUI);
-       u8      oui_subtype = P2P_GO_DISC_REQUEST;
-       u8      dialogToken = 0;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, pwdinfo->interface_addr, ETH_ALEN);
-       memcpy(pwlanhdr->addr3, pwdinfo->interface_addr, ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       /* Build P2P action frame header */
-       pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&p2poui, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &oui_subtype, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &dialogToken, &pattrib->pktlen);
-
-       /* there is no IE in this P2P action frame */
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-static void issue_p2p_devdisc_resp(struct wifidirect_info *pwdinfo, u8 *da, u8 status, u8 dialogToken)
-{
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct adapter *padapter = pwdinfo->padapter;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       unsigned char category = WLAN_CATEGORY_PUBLIC;
-       u8                      action = P2P_PUB_ACTION_ACTION;
-       __be32                  p2poui = cpu_to_be32(P2POUI);
-       u8                      oui_subtype = P2P_DEVDISC_RESP;
-       u8 p2pie[8] = { 0x00 };
-       u32 p2pielen = 0;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, pwdinfo->device_addr, ETH_ALEN);
-       memcpy(pwlanhdr->addr3, pwdinfo->device_addr, ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       /* Build P2P public action frame header */
-       pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&p2poui, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &oui_subtype, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &dialogToken, &pattrib->pktlen);
-
-       /* Build P2P IE */
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /*  P2P_ATTR_STATUS */
-       p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_STATUS, 1, &status);
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, p2pie, &pattrib->pktlen);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-static void issue_p2p_provision_resp(struct wifidirect_info *pwdinfo, u8 *raddr, u8 *frame_body, u16 config_method)
-{
-       struct adapter *padapter = pwdinfo->padapter;
-       unsigned char category = WLAN_CATEGORY_PUBLIC;
-       u8                      action = P2P_PUB_ACTION_ACTION;
-       u8                      dialogToken = frame_body[7];    /*      The Dialog Token of provisioning discovery request frame. */
-       __be32                  p2poui = cpu_to_be32(P2POUI);
-       u8                      oui_subtype = P2P_PROVISION_DISC_RESP;
-       u8                      wpsie[100] = { 0x00 };
-       u8                      wpsielen = 0;
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, myid(&padapter->eeprompriv), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &action, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&p2poui, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &oui_subtype, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &dialogToken, &pattrib->pktlen);
-
-       wpsielen = 0;
-       /*      WPS OUI */
-       RTW_PUT_BE32(wpsie, WPSOUI);
-       wpsielen += 4;
-
-       /*      Config Method */
-       /*      Type: */
-       RTW_PUT_BE16(wpsie + wpsielen, WPS_ATTR_CONF_METHOD);
-       wpsielen += 2;
-
-       /*      Length: */
-       RTW_PUT_BE16(wpsie + wpsielen, 0x0002);
-       wpsielen += 2;
-
-       /*      Value: */
-       RTW_PUT_BE16(wpsie + wpsielen, config_method);
-       wpsielen += 2;
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, wpsielen, (unsigned char *)wpsie, &pattrib->pktlen);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-static void issue_p2p_presence_resp(struct wifidirect_info *pwdinfo, u8 *da, u8 status, u8 dialogToken)
-{
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                                   *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       struct adapter *padapter = pwdinfo->padapter;
-       struct xmit_priv                        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       unsigned char category = RTW_WLAN_CATEGORY_P2P;/* P2P action frame */
-       __be32  p2poui = cpu_to_be32(P2POUI);
-       u8      oui_subtype = P2P_PRESENCE_RESPONSE;
-       u8 p2pie[MAX_P2P_IE_LEN] = { 0x00 };
-       u8 noa_attr_content[32] = { 0x00 };
-       u32 p2pielen = 0;
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, da, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, pwdinfo->interface_addr, ETH_ALEN);
-       memcpy(pwlanhdr->addr3, pwdinfo->interface_addr, ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       /* Build P2P action frame header */
-       pframe = rtw_set_fixed_ie(pframe, 1, &category, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 4, (unsigned char *)&p2poui, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &oui_subtype, &pattrib->pktlen);
-       pframe = rtw_set_fixed_ie(pframe, 1, &dialogToken, &pattrib->pktlen);
-
-       /* Add P2P IE header */
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /* Add Status attribute in P2P IE */
-       p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_STATUS, 1, &status);
-
-       /* Add NoA attribute in P2P IE */
-       noa_attr_content[0] = 0x1;/* index */
-       noa_attr_content[1] = 0x0;/* CTWindow and OppPS Parameters */
-
-       /* todo: Notice of Absence Descriptor(s) */
-
-       p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_NOA, 2, noa_attr_content);
-
-       pframe = rtw_set_ie(pframe, _VENDOR_SPECIFIC_IE_, p2pielen, p2pie, &pattrib->pktlen);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
-u32 build_beacon_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
-{
-       u8 p2pie[MAX_P2P_IE_LEN] = { 0x00 };
-       u16 capability = 0;
-       u32 len = 0, p2pielen = 0;
-       __le16 le_tmp;
-
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /*      According to the P2P Specification, the beacon frame should contain 3 P2P attributes */
-       /*      1. P2P Capability */
-       /*      2. P2P Device ID */
-       /*      3. Notice of Absence (NOA) */
-
-       /*      P2P Capability ATTR */
-       /*      Type: */
-       /*      Length: */
-       /*      Value: */
-       /*      Device Capability Bitmap, 1 byte */
-       /*      Be able to participate in additional P2P Groups and */
-       /*      support the P2P Invitation Procedure */
-       /*      Group Capability Bitmap, 1 byte */
-       capability = P2P_DEVCAP_INVITATION_PROC | P2P_DEVCAP_CLIENT_DISCOVERABILITY;
-       capability |=  ((P2P_GRPCAP_GO | P2P_GRPCAP_INTRABSS) << 8);
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
-               capability |= (P2P_GRPCAP_GROUP_FORMATION << 8);
-
-       le_tmp = cpu_to_le16(capability);
-       p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_CAPABILITY, 2, (u8 *)&le_tmp);
-
-       /*  P2P Device ID ATTR */
-       p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_DEVICE_ID, ETH_ALEN, pwdinfo->device_addr);
-
-       /*  Notice of Absence ATTR */
-       /*      Type: */
-       /*      Length: */
-       /*      Value: */
-
-       pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &len);
-       return len;
-}
-
-u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf)
-{
-       u8 p2pie[MAX_P2P_IE_LEN] = { 0x00 };
-       u32 len = 0, p2pielen = 0;
-
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /*      Commented by Albert 20100907 */
-       /*      According to the P2P Specification, the probe response frame should contain 5 P2P attributes */
-       /*      1. P2P Capability */
-       /*      2. Extended Listen Timing */
-       /*      3. Notice of Absence (NOA)      (Only GO needs this) */
-       /*      4. Device Info */
-       /*      5. Group Info   (Only GO need this) */
-
-       /*      P2P Capability ATTR */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CAPABILITY;
-
-       /*      Length: */
-       /* u16*) (p2pie + p2pielen) = cpu_to_le16(0x0002); */
-       RTW_PUT_LE16(p2pie + p2pielen, 0x0002);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Device Capability Bitmap, 1 byte */
-       p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT;
-
-       /*      Group Capability Bitmap, 1 byte */
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-               p2pie[p2pielen] = (P2P_GRPCAP_GO | P2P_GRPCAP_INTRABSS);
-
-               if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
-                       p2pie[p2pielen] |= P2P_GRPCAP_GROUP_FORMATION;
-
-               p2pielen++;
-       } else if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE)) {
-               /*      Group Capability Bitmap, 1 byte */
-               if (pwdinfo->persistent_supported)
-                       p2pie[p2pielen++] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
-               else
-                       p2pie[p2pielen++] = DMP_P2P_GRPCAP_SUPPORT;
-       }
-
-       /*      Extended Listen Timing ATTR */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_EX_LISTEN_TIMING;
-
-       /*      Length: */
-       /* u16*) (p2pie + p2pielen) = cpu_to_le16(0x0004); */
-       RTW_PUT_LE16(p2pie + p2pielen, 0x0004);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Availability Period */
-       /* u16*) (p2pie + p2pielen) = cpu_to_le16(0xFFFF); */
-       RTW_PUT_LE16(p2pie + p2pielen, 0xFFFF);
-       p2pielen += 2;
-
-       /*      Availability Interval */
-       /* u16*) (p2pie + p2pielen) = cpu_to_le16(0xFFFF); */
-       RTW_PUT_LE16(p2pie + p2pielen, 0xFFFF);
-       p2pielen += 2;
-
-       /*  Notice of Absence ATTR */
-       /*      Type: */
-       /*      Length: */
-       /*      Value: */
-
-       /*      Device Info ATTR */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO;
-
-       /*      Length: */
-       /*      21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */
-       /*      + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */
-       /* u16*) (p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); */
-       RTW_PUT_LE16(p2pie + p2pielen, 21 + pwdinfo->device_name_len);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      P2P Device Address */
-       memcpy(p2pie + p2pielen, pwdinfo->device_addr, ETH_ALEN);
-       p2pielen += ETH_ALEN;
-
-       /*      Config Method */
-       /*      This field should be big endian. Noted by P2P specification. */
-       /* u16*) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->supported_wps_cm); */
-       RTW_PUT_BE16(p2pie + p2pielen, pwdinfo->supported_wps_cm);
-       p2pielen += 2;
-
-       /*      Primary Device Type */
-       /*      Category ID */
-       /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); */
-       RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_MULIT_MEDIA);
-       p2pielen += 2;
-
-       /*      OUI */
-       /* u32*) (p2pie + p2pielen) = cpu_to_be32(WPSOUI); */
-       RTW_PUT_BE32(p2pie + p2pielen, WPSOUI);
-       p2pielen += 4;
-
-       /*      Sub Category ID */
-       /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); */
-       RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_MEDIA_SERVER);
-       p2pielen += 2;
-
-       /*      Number of Secondary Device Types */
-       p2pie[p2pielen++] = 0x00;       /*      No Secondary Device Type List */
-
-       /*      Device Name */
-       /*      Type: */
-       /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); */
-       RTW_PUT_BE16(p2pie + p2pielen, WPS_ATTR_DEVICE_NAME);
-       p2pielen += 2;
-
-       /*      Length: */
-       /* u16*) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); */
-       RTW_PUT_BE16(p2pie + p2pielen, pwdinfo->device_name_len);
-       p2pielen += 2;
-
-       /*      Value: */
-       memcpy(p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len);
-       p2pielen += pwdinfo->device_name_len;
-
-       /*  Group Info ATTR */
-       /*      Type: */
-       /*      Length: */
-       /*      Value: */
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
-               p2pielen += go_add_group_info_attr(pwdinfo, p2pie + p2pielen);
-
-       pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &len);
-
-       return len;
-}
-
-u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 *pssid, u8 ussidlen, u8 *pdev_raddr)
-{
-       u8 p2pie[MAX_P2P_IE_LEN] = { 0x00 };
-       u32 len = 0, p2pielen = 0;
-
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /*      Commented by Albert 20110301 */
-       /*      According to the P2P Specification, the provision discovery request frame should contain 3 P2P attributes */
-       /*      1. P2P Capability */
-       /*      2. Device Info */
-       /*      3. Group ID (When joining an operating P2P Group) */
-
-       /*      P2P Capability ATTR */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_CAPABILITY;
-
-       /*      Length: */
-       /* u16*) (p2pie + p2pielen) = cpu_to_le16(0x0002); */
-       RTW_PUT_LE16(p2pie + p2pielen, 0x0002);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      Device Capability Bitmap, 1 byte */
-       p2pie[p2pielen++] = DMP_P2P_DEVCAP_SUPPORT;
-
-       /*      Group Capability Bitmap, 1 byte */
-       if (pwdinfo->persistent_supported)
-               p2pie[p2pielen++] = P2P_GRPCAP_PERSISTENT_GROUP | DMP_P2P_GRPCAP_SUPPORT;
-       else
-               p2pie[p2pielen++] = DMP_P2P_GRPCAP_SUPPORT;
-
-       /*      Device Info ATTR */
-       /*      Type: */
-       p2pie[p2pielen++] = P2P_ATTR_DEVICE_INFO;
-
-       /*      Length: */
-       /*      21 -> P2P Device Address (6bytes) + Config Methods (2bytes) + Primary Device Type (8bytes) */
-       /*      + NumofSecondDevType (1byte) + WPS Device Name ID field (2bytes) + WPS Device Name Len field (2bytes) */
-       /* u16*) (p2pie + p2pielen) = cpu_to_le16(21 + pwdinfo->device_name_len); */
-       RTW_PUT_LE16(p2pie + p2pielen, 21 + pwdinfo->device_name_len);
-       p2pielen += 2;
-
-       /*      Value: */
-       /*      P2P Device Address */
-       memcpy(p2pie + p2pielen, pwdinfo->device_addr, ETH_ALEN);
-       p2pielen += ETH_ALEN;
-
-       /*      Config Method */
-       /*      This field should be big endian. Noted by P2P specification. */
-       if (pwdinfo->ui_got_wps_info == P2P_GOT_WPSINFO_PBC) {
-               /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_PBC); */
-               RTW_PUT_BE16(p2pie + p2pielen, WPS_CONFIG_METHOD_PBC);
-       } else {
-               /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_CONFIG_METHOD_DISPLAY); */
-               RTW_PUT_BE16(p2pie + p2pielen, WPS_CONFIG_METHOD_DISPLAY);
-       }
-
-       p2pielen += 2;
-
-       /*      Primary Device Type */
-       /*      Category ID */
-       /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_CID_MULIT_MEDIA); */
-       RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_CID_MULIT_MEDIA);
-       p2pielen += 2;
-
-       /*      OUI */
-       /* u32*) (p2pie + p2pielen) = cpu_to_be32(WPSOUI); */
-       RTW_PUT_BE32(p2pie + p2pielen, WPSOUI);
-       p2pielen += 4;
-
-       /*      Sub Category ID */
-       /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_PDT_SCID_MEDIA_SERVER); */
-       RTW_PUT_BE16(p2pie + p2pielen, WPS_PDT_SCID_MEDIA_SERVER);
-       p2pielen += 2;
-
-       /*      Number of Secondary Device Types */
-       p2pie[p2pielen++] = 0x00;       /*      No Secondary Device Type List */
-
-       /*      Device Name */
-       /*      Type: */
-       /* u16*) (p2pie + p2pielen) = cpu_to_be16(WPS_ATTR_DEVICE_NAME); */
-       RTW_PUT_BE16(p2pie + p2pielen, WPS_ATTR_DEVICE_NAME);
-       p2pielen += 2;
-
-       /*      Length: */
-       /* u16*) (p2pie + p2pielen) = cpu_to_be16(pwdinfo->device_name_len); */
-       RTW_PUT_BE16(p2pie + p2pielen, pwdinfo->device_name_len);
-       p2pielen += 2;
-
-       /*      Value: */
-       memcpy(p2pie + p2pielen, pwdinfo->device_name, pwdinfo->device_name_len);
-       p2pielen += pwdinfo->device_name_len;
-
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT)) {
-               /*      Added by Albert 2011/05/19 */
-               /*      In this case, the pdev_raddr is the device address of the group owner. */
-
-               /*      P2P Group ID ATTR */
-               /*      Type: */
-               p2pie[p2pielen++] = P2P_ATTR_GROUP_ID;
-
-               /*      Length: */
-               /* u16*) (p2pie + p2pielen) = cpu_to_le16(ETH_ALEN + ussidlen); */
-               RTW_PUT_LE16(p2pie + p2pielen, ETH_ALEN + ussidlen);
-               p2pielen += 2;
-
-               /*      Value: */
-               memcpy(p2pie + p2pielen, pdev_raddr, ETH_ALEN);
-               p2pielen += ETH_ALEN;
-
-               memcpy(p2pie + p2pielen, pssid, ussidlen);
-               p2pielen += ussidlen;
-       }
-
-       pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &len);
-
-       return len;
-}
-
-u32 build_assoc_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf, u8 status_code)
-{
-       u8 p2pie[MAX_P2P_IE_LEN] = { 0x00 };
-       u32 len = 0, p2pielen = 0;
-
-       /*      P2P OUI */
-       p2pielen = 0;
-       p2pie[p2pielen++] = 0x50;
-       p2pie[p2pielen++] = 0x6F;
-       p2pie[p2pielen++] = 0x9A;
-       p2pie[p2pielen++] = 0x09;       /*      WFA P2P v1.0 */
-
-       /*  According to the P2P Specification, the Association response frame should contain 2 P2P attributes */
-       /*      1. Status */
-       /*      2. Extended Listen Timing (optional) */
-
-       /*      Status ATTR */
-       p2pielen += rtw_set_p2p_attr_content(&p2pie[p2pielen], P2P_ATTR_STATUS, 1, &status_code);
-
-       /*  Extended Listen Timing ATTR */
-       /*      Type: */
-       /*      Length: */
-       /*      Value: */
-
-       pbuf = rtw_set_ie(pbuf, _VENDOR_SPECIFIC_IE_, p2pielen, (unsigned char *)p2pie, &len);
-
-       return len;
-}
-
-u32 process_probe_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint len)
-{
-       u8 *p;
-       u32 ret = false;
-       u8 *p2pie;
-       u32     p2pielen = 0;
-       int ssid_len = 0, rate_cnt = 0;
-
-       p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, _SUPPORTEDRATES_IE_, (int *)&rate_cnt,
-                       len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_);
-
-       if (rate_cnt <= 4) {
-               int i, g_rate = 0;
-
-               for (i = 0; i < rate_cnt; i++) {
-                       if (((*(p + 2 + i) & 0xff) != 0x02) &&
-                           ((*(p + 2 + i) & 0xff) != 0x04) &&
-                           ((*(p + 2 + i) & 0xff) != 0x0B) &&
-                           ((*(p + 2 + i) & 0xff) != 0x16))
-                               g_rate = 1;
-               }
-
-               if (g_rate == 0) {
-                       /*      There is no OFDM rate included in SupportedRates IE of this probe request frame */
-                       /*      The driver should response this probe request. */
-                       return ret;
-               }
-       } else {
-               /*      rate_cnt > 4 means the SupportRates IE contains the OFDM rate because the count of CCK rates are 4. */
-               /*      We should proceed the following check for this probe request. */
-       }
-
-       /*      Added comments by Albert 20100906 */
-       /*      There are several items we should check here. */
-       /*      1. This probe request frame must contain the P2P IE. (Done) */
-       /*      2. This probe request frame must contain the wildcard SSID. (Done) */
-       /*      3. Wildcard BSSID. (Todo) */
-       /*      4. Destination Address. (Done in mgt_dispatcher function) */
-       /*      5. Requested Device Type in WSC IE. (Todo) */
-       /*      6. Device ID attribute in P2P IE. (Todo) */
-
-       p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, _SSID_IE_, (int *)&ssid_len,
-                       len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_);
-
-       ssid_len &= 0xff;       /*      Just last 1 byte is valid for ssid len of the probe request */
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-               p2pie = rtw_get_p2p_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, len - WLAN_HDR_A3_LEN - _PROBEREQ_IE_OFFSET_, NULL, &p2pielen);
-               if (p2pie) {
-                       if (p && !memcmp((void *)(p + 2), (void *)pwdinfo->p2p_wildcard_ssid, 7)) {
-                               /* todo: */
-                               /* Check Requested Device Type attributes in WSC IE. */
-                               /* Check Device ID attribute in P2P IE */
-
-                               ret = true;
-                       } else if (p && ssid_len == 0) {
-                               ret = true;
-                       }
-               } else {
-                       /* non -p2p device */
-               }
-       }
-
-       return ret;
-}
-
-u32 process_assoc_req_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pframe, uint len, struct sta_info *psta)
-{
-       u8 status_code = P2P_STATUS_SUCCESS;
-       u8 *pbuf, *pattr_content = NULL;
-       u32 attr_contentlen = 0;
-       u16 cap_attr = 0;
-       unsigned short  frame_type, ie_offset = 0;
-       u8 *ies;
-       u32 ies_len;
-       u8 *p2p_ie;
-       u32     p2p_ielen = 0;
-       __be16 be_tmp;
-       __le16 le_tmp;
-
-       if (!rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO))
-               return P2P_STATUS_FAIL_REQUEST_UNABLE;
-
-       frame_type = GetFrameSubType(pframe);
-       if (frame_type == WIFI_ASSOCREQ)
-               ie_offset = _ASOCREQ_IE_OFFSET_;
-       else /*  WIFI_REASSOCREQ */
-               ie_offset = _REASOCREQ_IE_OFFSET_;
-
-       ies = pframe + WLAN_HDR_A3_LEN + ie_offset;
-       ies_len = len - WLAN_HDR_A3_LEN - ie_offset;
-
-       p2p_ie = rtw_get_p2p_ie(ies, ies_len, NULL, &p2p_ielen);
-
-       if (!p2p_ie)
-               status_code =  P2P_STATUS_FAIL_INVALID_PARAM;
-
-       while (p2p_ie) {
-               /* Check P2P Capability ATTR */
-               if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CAPABILITY, (u8 *)&le_tmp, (uint *)&attr_contentlen)) {
-                       cap_attr = le16_to_cpu(le_tmp);
-                       psta->dev_cap = cap_attr & 0xff;
-               }
-
-               /* Check Extended Listen Timing ATTR */
-
-               /* Check P2P Device Info ATTR */
-               if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_INFO, NULL, (uint *)&attr_contentlen)) {
-                       pattr_content = kzalloc(attr_contentlen, GFP_KERNEL);
-                       pbuf = pattr_content;
-                       if (pattr_content) {
-                               u8 num_of_secdev_type;
-                               u16 dev_name_len;
-
-                               rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_INFO, pattr_content, (uint *)&attr_contentlen);
-
-                               memcpy(psta->dev_addr,  pattr_content, ETH_ALEN);/* P2P Device Address */
-
-                               pattr_content += ETH_ALEN;
-
-                               memcpy(&be_tmp, pattr_content, 2);/* Config Methods */
-                               psta->config_methods = be16_to_cpu(be_tmp);
-
-                               pattr_content += 2;
-
-                               memcpy(psta->primary_dev_type, pattr_content, 8);
-
-                               pattr_content += 8;
-
-                               num_of_secdev_type = *pattr_content;
-                               pattr_content += 1;
-
-                               if (num_of_secdev_type == 0) {
-                                       psta->num_of_secdev_type = 0;
-                               } else {
-                                       u32 len;
-
-                                       psta->num_of_secdev_type = num_of_secdev_type;
-
-                                       len = (sizeof(psta->secdev_types_list) < (num_of_secdev_type * 8)) ?
-                                             (sizeof(psta->secdev_types_list)) : (num_of_secdev_type * 8);
-
-                                       memcpy(psta->secdev_types_list, pattr_content, len);
-
-                                       pattr_content += (num_of_secdev_type * 8);
-                               }
-
-                               psta->dev_name_len = 0;
-                               if (be16_to_cpu(*(__be16 *)pattr_content) == WPS_ATTR_DEVICE_NAME) {
-                                       dev_name_len = be16_to_cpu(*(__be16 *)(pattr_content + 2));
-
-                                       psta->dev_name_len = (sizeof(psta->dev_name) < dev_name_len) ? sizeof(psta->dev_name) : dev_name_len;
-
-                                       memcpy(psta->dev_name, pattr_content + 4, psta->dev_name_len);
-                               }
-                               kfree(pbuf);
-                       }
-               }
-
-               /* Get the next P2P IE */
-               p2p_ie = rtw_get_p2p_ie(p2p_ie + p2p_ielen, ies_len - (p2p_ie - ies + p2p_ielen), NULL, &p2p_ielen);
-       }
-
-       return status_code;
-}
-
-u32 process_p2p_devdisc_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint len)
-{
-       u8 *frame_body;
-       u8 status, dialogToken;
-       struct sta_info *psta = NULL;
-       struct adapter *padapter = pwdinfo->padapter;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       u8 *p2p_ie;
-       u32     p2p_ielen = 0;
-
-       frame_body = (unsigned char *)(pframe + sizeof(struct ieee80211_hdr_3addr));
-
-       dialogToken = frame_body[7];
-       status = P2P_STATUS_FAIL_UNKNOWN_P2PGROUP;
-
-       p2p_ie = rtw_get_p2p_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &p2p_ielen);
-       if (p2p_ie) {
-               u8 groupid[38] = { 0x00 };
-               u8 dev_addr[ETH_ALEN] = { 0x00 };
-               u32     attr_contentlen = 0;
-
-               if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen)) {
-                       if (!memcmp(pwdinfo->device_addr, groupid, ETH_ALEN) &&
-                           !memcmp(pwdinfo->p2p_group_ssid, groupid + ETH_ALEN, pwdinfo->p2p_group_ssid_len)) {
-                               attr_contentlen = 0;
-                               if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_DEVICE_ID, dev_addr, &attr_contentlen)) {
-                                       struct list_head *phead, *plist;
-
-                                       spin_lock_bh(&pstapriv->asoc_list_lock);
-                                       phead = &pstapriv->asoc_list;
-                                       plist = phead->next;
-
-                                       /* look up sta asoc_queue */
-                                       while (phead != plist) {
-                                               psta = container_of(plist, struct sta_info, asoc_list);
-
-                                               plist = plist->next;
-
-                                               if (psta->is_p2p_device && (psta->dev_cap & P2P_DEVCAP_CLIENT_DISCOVERABILITY) &&
-                                                   !memcmp(psta->dev_addr, dev_addr, ETH_ALEN)) {
-                                                       /* issue GO Discoverability Request */
-                                                       issue_group_disc_req(pwdinfo, psta->hwaddr);
-                                                       status = P2P_STATUS_SUCCESS;
-                                                       break;
-                                               } else {
-                                                       status = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
-                                               }
-                                       }
-                                       spin_unlock_bh(&pstapriv->asoc_list_lock);
-                               } else {
-                                       status = P2P_STATUS_FAIL_INVALID_PARAM;
-                               }
-                       } else {
-                               status = P2P_STATUS_FAIL_INVALID_PARAM;
-                       }
-               }
-       }
-
-       /* issue Device Discoverability Response */
-       issue_p2p_devdisc_resp(pwdinfo, GetAddr2Ptr(pframe), status, dialogToken);
-
-       return status == P2P_STATUS_SUCCESS;
-}
-
-u32 process_p2p_devdisc_resp(struct wifidirect_info *pwdinfo, u8 *pframe, uint len)
-{
-       return true;
-}
-
-u8 process_p2p_provdisc_req(struct wifidirect_info *pwdinfo,  u8 *pframe, uint len)
-{
-       u8 *frame_body;
-       u8 *wpsie;
-       uint    wps_ielen = 0, attr_contentlen = 0;
-       u16     uconfig_method = 0;
-       __be16 be_tmp;
-
-       frame_body = (pframe + sizeof(struct ieee80211_hdr_3addr));
-
-       wpsie = rtw_get_wps_ie(frame_body + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen);
-       if (wpsie) {
-               if (rtw_get_wps_attr_content(wpsie, wps_ielen, WPS_ATTR_CONF_METHOD, (u8 *)&be_tmp, &attr_contentlen)) {
-                       uconfig_method = be16_to_cpu(be_tmp);
-                       switch (uconfig_method) {
-                       case WPS_CM_DISPLYA:
-                               memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "dis", 3);
-                               break;
-                       case WPS_CM_LABEL:
-                               memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "lab", 3);
-                               break;
-                       case WPS_CM_PUSH_BUTTON:
-                               memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pbc", 3);
-                               break;
-                       case WPS_CM_KEYPAD:
-                               memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pad", 3);
-                               break;
-                       }
-                       issue_p2p_provision_resp(pwdinfo, GetAddr2Ptr(pframe), frame_body, uconfig_method);
-               }
-       }
-       return true;
-}
-
-u8 process_p2p_provdisc_resp(struct wifidirect_info *pwdinfo,  u8 *pframe)
-{
-       return true;
-}
-
-static u8 rtw_p2p_get_peer_ch_list(struct wifidirect_info *pwdinfo, u8 *ch_content, u8 ch_cnt, u8 *peer_ch_list)
-{
-       u8 i = 0, j = 0;
-       u8 temp = 0;
-       u8 ch_no = 0;
-       ch_content += 3;
-       ch_cnt -= 3;
-
-       while (ch_cnt > 0) {
-               ch_content += 1;
-               ch_cnt -= 1;
-               temp = *ch_content;
-               for (i = 0 ; i < temp ; i++, j++)
-                       peer_ch_list[j] = *(ch_content + 1 + i);
-               ch_content += (temp + 1);
-               ch_cnt -= (temp + 1);
-               ch_no += temp;
-       }
-
-       return ch_no;
-}
-
-static u8 rtw_p2p_ch_inclusion(struct mlme_ext_priv *pmlmeext, u8 *peer_ch_list, u8 peer_ch_num, u8 *ch_list_inclusioned)
-{
-       int     i = 0, j = 0, temp = 0;
-       u8 ch_no = 0;
-
-       for (i = 0; i < peer_ch_num; i++) {
-               for (j = temp; j < pmlmeext->max_chan_nums; j++) {
-                       if (*(peer_ch_list + i) == pmlmeext->channel_set[j].ChannelNum) {
-                               ch_list_inclusioned[ch_no++] = *(peer_ch_list + i);
-                               temp = j;
-                               break;
-                       }
-               }
-       }
-
-       return ch_no;
-}
-
-u8 process_p2p_group_negotation_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint len)
-{
-       struct adapter *padapter = pwdinfo->padapter;
-       u8      result = P2P_STATUS_SUCCESS;
-       u32     p2p_ielen = 0, wps_ielen = 0;
-       u8 *ies;
-       u32 ies_len;
-       u8 *p2p_ie;
-       u8 *wpsie;
-       u16             wps_devicepassword_id = 0x0000;
-       uint    wps_devicepassword_id_len = 0;
-       __be16 be_tmp;
-
-       wpsie = rtw_get_wps_ie(pframe + _PUBLIC_ACTION_IE_OFFSET_, len - _PUBLIC_ACTION_IE_OFFSET_, NULL, &wps_ielen);
-       if (wpsie) {
-               /*      Commented by Kurt 20120113 */
-               /*      If some device wants to do p2p handshake without sending prov_disc_req */
-               /*      We have to get peer_req_cm from here. */
-               if (!memcmp(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "000", 3)) {
-                       rtw_get_wps_attr_content(wpsie, wps_ielen, WPS_ATTR_DEVICE_PWID, (u8 *)&be_tmp, &wps_devicepassword_id_len);
-                       wps_devicepassword_id = be16_to_cpu(be_tmp);
-
-                       if (wps_devicepassword_id == WPS_DPID_USER_SPEC)
-                               memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "dis", 3);
-                       else if (wps_devicepassword_id == WPS_DPID_REGISTRAR_SPEC)
-                               memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pad", 3);
-                       else
-                               memcpy(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, "pbc", 3);
-               }
-       } else {
-               result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM;
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
-               return result;
-       }
-
-       if (pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO) {
-               result = P2P_STATUS_FAIL_INFO_UNAVAILABLE;
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_TX_INFOR_NOREADY);
-               return result;
-       }
-
-       ies = pframe + _PUBLIC_ACTION_IE_OFFSET_;
-       ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
-
-       p2p_ie = rtw_get_p2p_ie(ies, ies_len, NULL, &p2p_ielen);
-
-       if (!p2p_ie) {
-               result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM;
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
-       }
-
-       while (p2p_ie) {
-               u8      attr_content = 0x00;
-               u32     attr_contentlen = 0;
-               u8      ch_content[50] = { 0x00 };
-               uint    ch_cnt = 0;
-               u8      peer_ch_list[50] = { 0x00 };
-               u8      peer_ch_num = 0;
-               u8      ch_list_inclusioned[50] = { 0x00 };
-               u8      ch_num_inclusioned = 0;
-
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING);
-
-               if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT, &attr_content, &attr_contentlen)) {
-                       pwdinfo->peer_intent = attr_content;    /*      include both intent and tie breaker values. */
-
-                       if (pwdinfo->intent == (pwdinfo->peer_intent >> 1)) {
-                               /*      Try to match the tie breaker value */
-                               if (pwdinfo->intent == P2P_MAX_INTENT) {
-                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-                                       result = P2P_STATUS_FAIL_BOTH_GOINTENT_15;
-                               } else {
-                                       if (attr_content & 0x01)
-                                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-                                       else
-                                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
-                               }
-                       } else if (pwdinfo->intent > (pwdinfo->peer_intent >> 1)) {
-                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
-                       } else {
-                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-                       }
-
-                       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-                               /*      Store the group id information. */
-                               memcpy(pwdinfo->groupid_info.go_device_addr, pwdinfo->device_addr, ETH_ALEN);
-                               memcpy(pwdinfo->groupid_info.ssid, pwdinfo->nego_ssid, pwdinfo->nego_ssidlen);
-                       }
-               }
-
-               attr_contentlen = 0;
-               if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INTENTED_IF_ADDR, pwdinfo->p2p_peer_interface_addr, &attr_contentlen)) {
-                       if (attr_contentlen != ETH_ALEN)
-                               memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN);
-               }
-
-               if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, ch_content, &ch_cnt)) {
-                       peer_ch_num = rtw_p2p_get_peer_ch_list(pwdinfo, ch_content, ch_cnt, peer_ch_list);
-                       ch_num_inclusioned = rtw_p2p_ch_inclusion(&padapter->mlmeextpriv, peer_ch_list, peer_ch_num, ch_list_inclusioned);
-
-                       if (ch_num_inclusioned == 0) {
-                               result = P2P_STATUS_FAIL_NO_COMMON_CH;
-                               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
-                               break;
-                       }
-
-                       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-                               if (!rtw_p2p_is_channel_list_ok(pwdinfo->operating_channel,
-                                   ch_list_inclusioned, ch_num_inclusioned)) {
-                                       u8 operatingch_info[5] = { 0x00 }, peer_operating_ch = 0;
-                                       attr_contentlen = 0;
-
-                                       if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen))
-                                               peer_operating_ch = operatingch_info[4];
-
-                                       if (rtw_p2p_is_channel_list_ok(peer_operating_ch,
-                                                                      ch_list_inclusioned,
-                                                                      ch_num_inclusioned))
-                                               /**
-                                                *      Change our operating channel as peer's for compatibility.
-                                                */
-                                               pwdinfo->operating_channel = peer_operating_ch;
-                                       else
-                                               /*  Take first channel of ch_list_inclusioned as operating channel */
-                                               pwdinfo->operating_channel = ch_list_inclusioned[0];
-                               }
-                       }
-               }
-
-               /* Get the next P2P IE */
-               p2p_ie = rtw_get_p2p_ie(p2p_ie + p2p_ielen, ies_len - (p2p_ie - ies + p2p_ielen), NULL, &p2p_ielen);
-       }
-       return result;
-}
-
-u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo, u8 *pframe, uint len)
-{
-       struct adapter *padapter = pwdinfo->padapter;
-       u8      result = P2P_STATUS_SUCCESS;
-       u32     p2p_ielen, wps_ielen;
-       u8 *ies;
-       u32 ies_len;
-       u8 *p2p_ie;
-
-       ies = pframe + _PUBLIC_ACTION_IE_OFFSET_;
-       ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
-
-       /*      Be able to know which one is the P2P GO and which one is P2P client. */
-
-       if (!rtw_get_wps_ie(ies, ies_len, NULL, &wps_ielen)) {
-               result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM;
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
-       }
-
-       p2p_ie = rtw_get_p2p_ie(ies, ies_len, NULL, &p2p_ielen);
-       if (!p2p_ie) {
-               rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
-               result = P2P_STATUS_FAIL_INCOMPATIBLE_PARAM;
-       } else {
-               u8      attr_content = 0x00;
-               u32     attr_contentlen = 0;
-               u8      operatingch_info[5] = { 0x00 };
-               u8      groupid[38];
-               u8      peer_ch_list[50] = { 0x00 };
-               u8      peer_ch_num = 0;
-               u8      ch_list_inclusioned[50] = { 0x00 };
-               u8      ch_num_inclusioned = 0;
-
-               while (p2p_ie) {        /*      Found the P2P IE. */
-                       rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen);
-                       if (attr_contentlen == 1) {
-                               if (attr_content == P2P_STATUS_SUCCESS) {
-                                       /*      Do nothing. */
-                               } else {
-                                       if (attr_content == P2P_STATUS_FAIL_INFO_UNAVAILABLE) {
-                                               rtw_p2p_set_state(pwdinfo, P2P_STATE_RX_INFOR_NOREADY);
-                                       } else {
-                                               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
-                                       }
-                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-                                       result = attr_content;
-                                       break;
-                               }
-                       }
-
-                       /*      Try to get the peer's interface address */
-                       attr_contentlen = 0;
-                       if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_INTENTED_IF_ADDR, pwdinfo->p2p_peer_interface_addr, &attr_contentlen)) {
-                               if (attr_contentlen != ETH_ALEN)
-                                       memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN);
-                       }
-
-                       /*      Try to get the peer's intent and tie breaker value. */
-                       attr_content = 0x00;
-                       attr_contentlen = 0;
-                       if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GO_INTENT, &attr_content, &attr_contentlen)) {
-                               pwdinfo->peer_intent = attr_content;    /*      include both intent and tie breaker values. */
-
-                               if (pwdinfo->intent == (pwdinfo->peer_intent >> 1)) {
-                                       /*      Try to match the tie breaker value */
-                                       if (pwdinfo->intent == P2P_MAX_INTENT) {
-                                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-                                               result = P2P_STATUS_FAIL_BOTH_GOINTENT_15;
-                                               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
-                                       } else {
-                                               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
-                                               rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
-                                               if (attr_content & 0x01)
-                                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-                                               else
-                                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
-                                       }
-                               } else if (pwdinfo->intent > (pwdinfo->peer_intent >> 1)) {
-                                       rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
-                                       rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
-                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
-                               } else {
-                                       rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
-                                       rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
-                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-                               }
-
-                               if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-                                       /*      Store the group id information. */
-                                       memcpy(pwdinfo->groupid_info.go_device_addr, pwdinfo->device_addr, ETH_ALEN);
-                                       memcpy(pwdinfo->groupid_info.ssid, pwdinfo->nego_ssid, pwdinfo->nego_ssidlen);
-                               }
-                       }
-
-                       /*      Try to get the operation channel information */
-
-                       attr_contentlen = 0;
-                       if (rtw_get_p2p_attr_content(p2p_ie,
-                                                    p2p_ielen,
-                                                    P2P_ATTR_OPERATING_CH,
-                                                    operatingch_info,
-                                                    &attr_contentlen))
-                               pwdinfo->peer_operating_ch = operatingch_info[4];
-
-                       /*      Try to get the channel list information */
-                       if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_CH_LIST, pwdinfo->channel_list_attr, &pwdinfo->channel_list_attr_len)) {
-
-                               peer_ch_num = rtw_p2p_get_peer_ch_list(pwdinfo, pwdinfo->channel_list_attr, pwdinfo->channel_list_attr_len, peer_ch_list);
-                               ch_num_inclusioned = rtw_p2p_ch_inclusion(&padapter->mlmeextpriv, peer_ch_list, peer_ch_num, ch_list_inclusioned);
-
-                               if (ch_num_inclusioned == 0) {
-                                       result = P2P_STATUS_FAIL_NO_COMMON_CH;
-                                       rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
-                                       break;
-                               }
-
-                               if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-                                       if (!rtw_p2p_is_channel_list_ok(pwdinfo->operating_channel,
-                                           ch_list_inclusioned, ch_num_inclusioned)) {
-                                               u8 operatingch_info[5] = { 0x00 }, peer_operating_ch = 0;
-                                               attr_contentlen = 0;
-
-                                               if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_OPERATING_CH, operatingch_info, &attr_contentlen))
-                                                       peer_operating_ch = operatingch_info[4];
-
-                                               if (rtw_p2p_is_channel_list_ok(peer_operating_ch,
-                                                   ch_list_inclusioned, ch_num_inclusioned))
-                                                       /**
-                                                        *      Change our operating channel as peer's for compatibility.
-                                                        */
-                                                       pwdinfo->operating_channel = peer_operating_ch;
-                                               else
-                                                       /*  Take first channel of ch_list_inclusioned as operating channel */
-                                                       pwdinfo->operating_channel = ch_list_inclusioned[0];
-                                       }
-                               }
-                       }
-
-                       /*      Try to get the group id information if peer is GO */
-                       attr_contentlen = 0;
-                       memset(groupid, 0x00, 38);
-                       if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen)) {
-                               memcpy(pwdinfo->groupid_info.go_device_addr, &groupid[0], ETH_ALEN);
-                               memcpy(pwdinfo->groupid_info.ssid, &groupid[6], attr_contentlen - ETH_ALEN);
-                       }
-
-                       /* Get the next P2P IE */
-                       p2p_ie = rtw_get_p2p_ie(p2p_ie + p2p_ielen, ies_len - (p2p_ie - ies + p2p_ielen), NULL, &p2p_ielen);
-               }
-       }
-       return result;
-}
-
-u8 process_p2p_group_negotation_confirm(struct wifidirect_info *pwdinfo, u8 *pframe, uint len)
-{
-       u8 *ies;
-       u32 ies_len;
-       u8 *p2p_ie;
-       u32     p2p_ielen = 0;
-       u8      result = P2P_STATUS_SUCCESS;
-       ies = pframe + _PUBLIC_ACTION_IE_OFFSET_;
-       ies_len = len - _PUBLIC_ACTION_IE_OFFSET_;
-
-       p2p_ie = rtw_get_p2p_ie(ies, ies_len, NULL, &p2p_ielen);
-       while (p2p_ie) {        /*      Found the P2P IE. */
-               u8      attr_content = 0x00, operatingch_info[5] = { 0x00 };
-               u8      groupid[38] = { 0x00 };
-               u32     attr_contentlen = 0;
-
-               pwdinfo->negotiation_dialog_token = 1;
-               rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_STATUS, &attr_content, &attr_contentlen);
-               if (attr_contentlen == 1) {
-                       result = attr_content;
-
-                       if (attr_content == P2P_STATUS_SUCCESS) {
-                               del_timer_sync(&pwdinfo->restore_p2p_state_timer);
-
-                               /*      Commented by Albert 20100911 */
-                               /*      Todo: Need to handle the case which both Intents are the same. */
-                               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
-                               rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
-                               if ((pwdinfo->intent) > (pwdinfo->peer_intent >> 1)) {
-                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
-                               } else if ((pwdinfo->intent) < (pwdinfo->peer_intent >> 1)) {
-                                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-                               } else {
-                                       /*      Have to compare the Tie Breaker */
-                                       if (pwdinfo->peer_intent & 0x01)
-                                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-                                       else
-                                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
-                               }
-                       } else {
-                               rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-                               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_FAIL);
-                               break;
-                       }
-               }
-
-               /*      Try to get the group id information */
-               attr_contentlen = 0;
-               memset(groupid, 0x00, 38);
-               if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_GROUP_ID, groupid, &attr_contentlen)) {
-                       memcpy(pwdinfo->groupid_info.go_device_addr, &groupid[0], ETH_ALEN);
-                       memcpy(pwdinfo->groupid_info.ssid, &groupid[6], attr_contentlen - ETH_ALEN);
-               }
-
-               attr_contentlen = 0;
-               if (rtw_get_p2p_attr_content(p2p_ie,
-                                            p2p_ielen,
-                                            P2P_ATTR_OPERATING_CH,
-                                            operatingch_info,
-                                            &attr_contentlen))
-                       pwdinfo->peer_operating_ch = operatingch_info[4];
-
-               /* Get the next P2P IE */
-               p2p_ie = rtw_get_p2p_ie(p2p_ie + p2p_ielen, ies_len - (p2p_ie - ies + p2p_ielen), NULL, &p2p_ielen);
-       }
-       return result;
-}
-
-u8 process_p2p_presence_req(struct wifidirect_info *pwdinfo, u8 *pframe, uint len)
-{
-       u8 *frame_body;
-       u8 dialogToken = 0;
-       u8 status = P2P_STATUS_SUCCESS;
-
-       frame_body = (unsigned char *)(pframe + sizeof(struct ieee80211_hdr_3addr));
-
-       dialogToken = frame_body[6];
-
-       /* todo: check NoA attribute */
-
-       issue_p2p_presence_resp(pwdinfo, GetAddr2Ptr(pframe), status, dialogToken);
-
-       return true;
-}
-
-static void find_phase_handler(struct adapter *padapter)
-{
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-       struct ndis_802_11_ssid ssid;
-
-       memset((unsigned char *)&ssid, 0, sizeof(struct ndis_802_11_ssid));
-       memcpy(ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN);
-       ssid.SsidLength = P2P_WILDCARD_SSID_LEN;
-
-       rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
-
-       spin_lock_bh(&pmlmepriv->lock);
-       spin_unlock_bh(&pmlmepriv->lock);
-
-}
-
-void p2p_concurrent_handler(struct adapter *padapter);
-
-static void restore_p2p_state_handler(struct adapter *padapter)
-{
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING) || rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_FAIL))
-               rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-       rtw_p2p_set_state(pwdinfo, rtw_p2p_pre_state(pwdinfo));
-
-       if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE)) {
-               /*      In the P2P client mode, the driver should not switch back to its listen channel */
-               /*      because this P2P client should stay at the operating channel of P2P GO. */
-               set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-       }
-
-}
-
-static void pre_tx_invitereq_handler(struct adapter *padapter)
-{
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       set_channel_bwmode(padapter, pwdinfo->invitereq_info.peer_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-       rtw_mlme_under_site_survey(padapter);
-       issue_probereq_p2p(padapter);
-       _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT);
-
-}
-
-static void pre_tx_provdisc_handler(struct adapter *padapter)
-{
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       set_channel_bwmode(padapter, pwdinfo->tx_prov_disc_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-       rtw_mlme_under_site_survey(padapter);
-       issue_probereq_p2p(padapter);
-       _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT);
-
-}
-
-static void pre_tx_negoreq_handler(struct adapter *padapter)
-{
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       set_channel_bwmode(padapter, pwdinfo->nego_req_info.peer_channel_num[0], HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-       rtw_mlme_under_site_survey(padapter);
-       issue_probereq_p2p(padapter);
-       _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT);
-
-}
-
-void p2p_protocol_wk_hdl(struct adapter *padapter, int intCmdType)
-{
-
-       switch (intCmdType) {
-       case P2P_FIND_PHASE_WK:
-               find_phase_handler(padapter);
-               break;
-       case P2P_RESTORE_STATE_WK:
-               restore_p2p_state_handler(padapter);
-               break;
-       case P2P_PRE_TX_PROVDISC_PROCESS_WK:
-               pre_tx_provdisc_handler(padapter);
-               break;
-       case P2P_PRE_TX_INVITEREQ_PROCESS_WK:
-               pre_tx_invitereq_handler(padapter);
-               break;
-       case P2P_PRE_TX_NEGOREQ_PROCESS_WK:
-               pre_tx_negoreq_handler(padapter);
-               break;
-       }
-
-}
-
-void process_p2p_ps_ie(struct adapter *padapter, u8 *IEs, u32 IELength)
-{
-       u8 *p2p_ie;
-       u32     p2p_ielen = 0;
-       u8      noa_attr[MAX_P2P_IE_LEN] = { 0x00 };/*  NoA length should be n*(13) + 2 */
-       u32     attr_contentlen = 0;
-
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-       u8      find_p2p = false, find_p2p_ps = false;
-       u8      noa_offset, noa_num, noa_index;
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-               return;
-
-       p2p_ie = rtw_get_p2p_ie(IEs, IELength, NULL, &p2p_ielen);
-
-       while (p2p_ie) {
-               find_p2p = true;
-               /*  Get Notice of Absence IE. */
-               if (rtw_get_p2p_attr_content(p2p_ie, p2p_ielen, P2P_ATTR_NOA, noa_attr, &attr_contentlen)) {
-                       find_p2p_ps = true;
-                       noa_index = noa_attr[0];
-
-                       if ((pwdinfo->p2p_ps_mode == P2P_PS_NONE) ||
-                           (noa_index != pwdinfo->noa_index)) { /*  if index change, driver should reconfigure related setting. */
-                               pwdinfo->noa_index = noa_index;
-                               pwdinfo->opp_ps = noa_attr[1] >> 7;
-                               pwdinfo->ctwindow = noa_attr[1] & 0x7F;
-
-                               noa_offset = 2;
-                               noa_num = 0;
-                               /*  NoA length should be n*(13) + 2 */
-                               if (attr_contentlen > 2) {
-                                       while (noa_offset < attr_contentlen) {
-                                               /* memcpy(&wifidirect_info->noa_count[noa_num], &noa_attr[noa_offset], 1); */
-                                               pwdinfo->noa_count[noa_num] = noa_attr[noa_offset];
-                                               noa_offset += 1;
-
-                                               memcpy(&pwdinfo->noa_duration[noa_num], &noa_attr[noa_offset], 4);
-                                               noa_offset += 4;
-
-                                               memcpy(&pwdinfo->noa_interval[noa_num], &noa_attr[noa_offset], 4);
-                                               noa_offset += 4;
-
-                                               memcpy(&pwdinfo->noa_start_time[noa_num], &noa_attr[noa_offset], 4);
-                                               noa_offset += 4;
-
-                                               noa_num++;
-                                       }
-                               }
-                               pwdinfo->noa_num = noa_num;
-
-                               if (pwdinfo->opp_ps == 1) {
-                                       pwdinfo->p2p_ps_mode = P2P_PS_CTWINDOW;
-                                       /*  driver should wait LPS for entering CTWindow */
-                                       if (padapter->pwrctrlpriv.bFwCurrentInPSMode)
-                                               p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1);
-                               } else if (pwdinfo->noa_num > 0) {
-                                       pwdinfo->p2p_ps_mode = P2P_PS_NOA;
-                                       p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 1);
-                               } else if (pwdinfo->p2p_ps_mode > P2P_PS_NONE) {
-                                       p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
-                               }
-                       }
-
-                       break; /*  find target, just break. */
-               }
-
-               /* Get the next P2P IE */
-               p2p_ie = rtw_get_p2p_ie(p2p_ie + p2p_ielen, IELength - (p2p_ie - IEs + p2p_ielen), NULL, &p2p_ielen);
-       }
-
-       if (find_p2p) {
-               if ((pwdinfo->p2p_ps_mode > P2P_PS_NONE) && !find_p2p_ps)
-                       p2p_ps_wk_cmd(padapter, P2P_PS_DISABLE, 1);
-       }
-
-}
-
-void p2p_ps_wk_hdl(struct adapter *padapter, u8 p2p_ps_state)
-{
-       struct pwrctrl_priv             *pwrpriv = &padapter->pwrctrlpriv;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       /*  Pre action for p2p state */
-       switch (p2p_ps_state) {
-       case P2P_PS_DISABLE:
-               pwdinfo->p2p_ps_state = p2p_ps_state;
-
-               rtl8188e_set_p2p_ps_offload_cmd(padapter, p2p_ps_state);
-
-               pwdinfo->noa_index = 0;
-               pwdinfo->ctwindow = 0;
-               pwdinfo->opp_ps = 0;
-               pwdinfo->noa_num = 0;
-               pwdinfo->p2p_ps_mode = P2P_PS_NONE;
-               if (padapter->pwrctrlpriv.bFwCurrentInPSMode) {
-                       if (pwrpriv->smart_ps == 0) {
-                               pwrpriv->smart_ps = 2;
-                               rtw_set_firmware_ps_mode(padapter, pwrpriv->pwr_mode);
-                       }
-               }
-               break;
-       case P2P_PS_ENABLE:
-               if (pwdinfo->p2p_ps_mode > P2P_PS_NONE) {
-                       pwdinfo->p2p_ps_state = p2p_ps_state;
-
-                       if (pwdinfo->ctwindow > 0) {
-                               if (pwrpriv->smart_ps != 0) {
-                                       pwrpriv->smart_ps = 0;
-                                       rtw_set_firmware_ps_mode(padapter, pwrpriv->pwr_mode);
-                               }
-                       }
-                       rtl8188e_set_p2p_ps_offload_cmd(padapter, p2p_ps_state);
-               }
-               break;
-       case P2P_PS_SCAN:
-       case P2P_PS_SCAN_DONE:
-       case P2P_PS_ALLSTASLEEP:
-               if (pwdinfo->p2p_ps_mode > P2P_PS_NONE) {
-                       pwdinfo->p2p_ps_state = p2p_ps_state;
-                       rtl8188e_set_p2p_ps_offload_cmd(padapter, p2p_ps_state);
-               }
-               break;
-       default:
-               break;
-       }
-
-}
-
-u8 p2p_ps_wk_cmd(struct adapter *padapter, u8 p2p_ps_state, u8 enqueue)
-{
-       struct cmd_obj  *ph2c;
-       struct drvextra_cmd_parm        *pdrvextra_cmd_parm;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       u8      res = _SUCCESS;
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-               return res;
-
-       if (enqueue) {
-               ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-               if (!ph2c) {
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm), GFP_ATOMIC);
-               if (!pdrvextra_cmd_parm) {
-                       kfree(ph2c);
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               pdrvextra_cmd_parm->ec_id = P2P_PS_WK_CID;
-               pdrvextra_cmd_parm->type_size = p2p_ps_state;
-               pdrvextra_cmd_parm->pbuf = NULL;
-
-               init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
-
-               res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-       } else {
-               p2p_ps_wk_hdl(padapter, p2p_ps_state);
-       }
-
-exit:
-
-       return res;
-}
-
-static void reset_ch_sitesurvey_timer_process(struct timer_list *t)
-{
-       struct adapter *adapter = from_timer(adapter, t, pwrctrlpriv.pwr_state_check_timer);
-       struct  wifidirect_info         *pwdinfo = &adapter->wdinfo;
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-               return;
-
-       /*      Reset the operation channel information */
-       pwdinfo->rx_invitereq_info.operation_ch[0] = 0;
-       pwdinfo->rx_invitereq_info.scan_op_ch_only = 0;
-}
-
-static void reset_ch_sitesurvey_timer_process2(struct timer_list *t)
-{
-       struct adapter *adapter = from_timer(adapter, t, pwrctrlpriv.pwr_state_check_timer);
-       struct  wifidirect_info         *pwdinfo = &adapter->wdinfo;
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-               return;
-
-       /*      Reset the operation channel information */
-       pwdinfo->p2p_info.operation_ch[0] = 0;
-       pwdinfo->p2p_info.scan_op_ch_only = 0;
-}
-
-static void restore_p2p_state_timer_process(struct timer_list *t)
-{
-       struct adapter *adapter = from_timer(adapter, t, wdinfo.restore_p2p_state_timer);
-       struct  wifidirect_info         *pwdinfo = &adapter->wdinfo;
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-               return;
-
-       p2p_protocol_wk_cmd(adapter, P2P_RESTORE_STATE_WK);
-}
-
-static void pre_tx_scan_timer_process(struct timer_list *t)
-{
-       struct adapter *adapter = from_timer(adapter, t, wdinfo.pre_tx_scan_timer);
-       struct  wifidirect_info *pwdinfo = &adapter->wdinfo;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-               return;
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ)) {
-               if (pwdinfo->tx_prov_disc_info.benable) {       /*      the provision discovery request frame is trigger to send or not */
-                       p2p_protocol_wk_cmd(adapter, P2P_PRE_TX_PROVDISC_PROCESS_WK);
-                       /* issue_probereq_p2p(adapter); */
-                       /* _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT); */
-               }
-       } else if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_ING)) {
-               if (pwdinfo->nego_req_info.benable)
-                       p2p_protocol_wk_cmd(adapter, P2P_PRE_TX_NEGOREQ_PROCESS_WK);
-       } else if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_TX_INVITE_REQ)) {
-               if (pwdinfo->invitereq_info.benable)
-                       p2p_protocol_wk_cmd(adapter, P2P_PRE_TX_INVITEREQ_PROCESS_WK);
-       }
-
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-static void find_phase_timer_process(struct timer_list *t)
-{
-       struct adapter *adapter = from_timer(adapter, t, wdinfo.find_phase_timer);
-       struct  wifidirect_info         *pwdinfo = &adapter->wdinfo;
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-               return;
-
-       adapter->wdinfo.find_phase_state_exchange_cnt++;
-
-       p2p_protocol_wk_cmd(adapter, P2P_FIND_PHASE_WK);
-}
-
-void reset_global_wifidirect_info(struct adapter *padapter)
-{
-       struct wifidirect_info  *pwdinfo;
-
-       pwdinfo = &padapter->wdinfo;
-       pwdinfo->persistent_supported = 0;
-       pwdinfo->session_available = true;
-}
-
-void rtw_init_wifidirect_timers(struct adapter *padapter)
-{
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       timer_setup(&pwdinfo->find_phase_timer, find_phase_timer_process, 0);
-       timer_setup(&pwdinfo->restore_p2p_state_timer, restore_p2p_state_timer_process, 0);
-       timer_setup(&pwdinfo->pre_tx_scan_timer, pre_tx_scan_timer_process, 0);
-       timer_setup(&pwdinfo->reset_ch_sitesurvey, reset_ch_sitesurvey_timer_process, 0);
-       timer_setup(&pwdinfo->reset_ch_sitesurvey2, reset_ch_sitesurvey_timer_process2, 0);
-}
-
-void rtw_init_wifidirect_addrs(struct adapter *padapter, u8 *dev_addr, u8 *iface_addr)
-{
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       /*init device&interface address */
-       if (dev_addr)
-               memcpy(pwdinfo->device_addr, dev_addr, ETH_ALEN);
-       if (iface_addr)
-               memcpy(pwdinfo->interface_addr, iface_addr, ETH_ALEN);
-}
-
-void init_wifidirect_info(struct adapter *padapter, enum P2P_ROLE role)
-{
-       struct wifidirect_info  *pwdinfo;
-
-       pwdinfo = &padapter->wdinfo;
-       pwdinfo->padapter = padapter;
-
-       /*      1, 6, 11 are the social channel defined in the WiFi Direct specification. */
-       pwdinfo->social_chan[0] = 1;
-       pwdinfo->social_chan[1] = 6;
-       pwdinfo->social_chan[2] = 11;
-       pwdinfo->social_chan[3] = 0;    /*      channel 0 for scanning ending in site survey function. */
-
-       /*      Use the channel 11 as the listen channel */
-       pwdinfo->listen_channel = 11;
-
-       if (role == P2P_ROLE_DEVICE) {
-               rtw_p2p_set_role(pwdinfo, P2P_ROLE_DEVICE);
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
-               pwdinfo->intent = 1;
-               rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_LISTEN);
-       } else if (role == P2P_ROLE_CLIENT) {
-               rtw_p2p_set_role(pwdinfo, P2P_ROLE_CLIENT);
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
-               pwdinfo->intent = 1;
-               rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
-       } else if (role == P2P_ROLE_GO) {
-               rtw_p2p_set_role(pwdinfo, P2P_ROLE_GO);
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_OK);
-               pwdinfo->intent = 15;
-               rtw_p2p_set_pre_state(pwdinfo, P2P_STATE_GONEGO_OK);
-       }
-
-/*     Use the OFDM rate in the P2P probe response frame. (6(B), 9(B), 12, 18, 24, 36, 48, 54) */
-       pwdinfo->support_rate[0] = 0x8c;        /*      6(B) */
-       pwdinfo->support_rate[1] = 0x92;        /*      9(B) */
-       pwdinfo->support_rate[2] = 0x18;        /*      12 */
-       pwdinfo->support_rate[3] = 0x24;        /*      18 */
-       pwdinfo->support_rate[4] = 0x30;        /*      24 */
-       pwdinfo->support_rate[5] = 0x48;        /*      36 */
-       pwdinfo->support_rate[6] = 0x60;        /*      48 */
-       pwdinfo->support_rate[7] = 0x6c;        /*      54 */
-
-       memcpy(pwdinfo->p2p_wildcard_ssid, "DIRECT-", 7);
-
-       memset(pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN);
-       pwdinfo->device_name_len = 0;
-
-       memset(&pwdinfo->invitereq_info, 0x00, sizeof(struct tx_invite_req_info));
-       pwdinfo->invitereq_info.token = 3;      /*      Token used for P2P invitation request frame. */
-
-       memset(&pwdinfo->inviteresp_info, 0x00, sizeof(struct tx_invite_resp_info));
-       pwdinfo->inviteresp_info.token = 0;
-
-       pwdinfo->profileindex = 0;
-       memset(&pwdinfo->profileinfo[0], 0x00, sizeof(struct profile_info) * P2P_MAX_PERSISTENT_GROUP_NUM);
-
-       rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);
-
-       pwdinfo->listen_dwell = (u8)((jiffies % 3) + 1);
-
-       memset(&pwdinfo->tx_prov_disc_info, 0x00, sizeof(struct tx_provdisc_req_info));
-       pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_NONE;
-
-       memset(&pwdinfo->nego_req_info, 0x00, sizeof(struct tx_nego_req_info));
-
-       pwdinfo->device_password_id_for_nego = WPS_DPID_PBC;
-       pwdinfo->negotiation_dialog_token = 1;
-
-       memset(pwdinfo->nego_ssid, 0x00, WLAN_SSID_MAXLEN);
-       pwdinfo->nego_ssidlen = 0;
-
-       pwdinfo->ui_got_wps_info = P2P_NO_WPSINFO;
-       pwdinfo->supported_wps_cm = WPS_CONFIG_METHOD_DISPLAY | WPS_CONFIG_METHOD_PBC | WPS_CONFIG_METHOD_KEYPAD;
-       pwdinfo->channel_list_attr_len = 0;
-       memset(pwdinfo->channel_list_attr, 0x00, 100);
-
-       memset(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, 0x00, 4);
-       memset(pwdinfo->rx_prov_disc_info.strconfig_method_desc_of_prov_disc_req, '0', 3);
-       memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info));
-       memset(pwdinfo->p2p_peer_interface_addr, 0x00, ETH_ALEN);
-       memset(pwdinfo->p2p_peer_device_addr, 0x00, ETH_ALEN);
-
-       pwdinfo->rx_invitereq_info.operation_ch[0] = 0;
-       pwdinfo->rx_invitereq_info.operation_ch[1] = 0; /*      Used to indicate the scan end in site survey function */
-       pwdinfo->rx_invitereq_info.scan_op_ch_only = 0;
-       pwdinfo->p2p_info.operation_ch[0] = 0;
-       pwdinfo->p2p_info.operation_ch[1] = 0;                  /*      Used to indicate the scan end in site survey function */
-       pwdinfo->p2p_info.scan_op_ch_only = 0;
-}
-
-int rtw_p2p_enable(struct adapter *padapter, enum P2P_ROLE role)
-{
-       int ret;
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       if (role == P2P_ROLE_DEVICE || role == P2P_ROLE_CLIENT || role == P2P_ROLE_GO) {
-               /* leave IPS/Autosuspend */
-               ret = rtw_pwr_wakeup(padapter);
-               if (ret)
-                       return ret;
-
-               /*      Added by Albert 2011/03/22 */
-               /*      In the P2P mode, the driver should not support the b mode. */
-               /*      So, the Tx packet shouldn't use the CCK rate */
-               update_tx_basic_rate(padapter, (WIRELESS_11G | WIRELESS_11_24N));
-
-               /* Enable P2P function */
-               init_wifidirect_info(padapter, role);
-
-       } else if (role == P2P_ROLE_DISABLE) {
-               ret = rtw_pwr_wakeup(padapter);
-               if (ret)
-                       return ret;
-
-               /* Disable P2P function */
-               if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) {
-                       _cancel_timer_ex(&pwdinfo->find_phase_timer);
-                       _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer);
-                       _cancel_timer_ex(&pwdinfo->pre_tx_scan_timer);
-                       _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey);
-                       _cancel_timer_ex(&pwdinfo->reset_ch_sitesurvey2);
-                       rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
-                       rtw_p2p_set_role(pwdinfo, P2P_ROLE_DISABLE);
-                       memset(&pwdinfo->rx_prov_disc_info, 0x00, sizeof(struct rx_provdisc_req_info));
-               }
-
-               /* Restore to initial setting. */
-               update_tx_basic_rate(padapter, padapter->registrypriv.wireless_mode);
-       }
-
-       return 0;
-}
diff --git a/drivers/staging/r8188eu/core/rtw_pwrctrl.c b/drivers/staging/r8188eu/core/rtw_pwrctrl.c
deleted file mode 100644 (file)
index 051cdcb..0000000
+++ /dev/null
@@ -1,445 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#define _RTW_PWRCTRL_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/osdep_intf.h"
-#include "../include/linux/usb.h"
-
-static void ips_enter(struct adapter *padapter)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       struct xmit_priv *pxmit_priv = &padapter->xmitpriv;
-
-       if (pxmit_priv->free_xmitbuf_cnt != NR_XMITBUFF ||
-           pxmit_priv->free_xmit_extbuf_cnt != NR_XMIT_EXTBUFF)
-               return;
-
-       mutex_lock(&pwrpriv->lock);
-
-       pwrpriv->bips_processing = true;
-
-       /*  syn ips_mode with request */
-       pwrpriv->ips_mode = pwrpriv->ips_mode_req;
-
-       pwrpriv->ips_enter_cnts++;
-       pwrpriv->bpower_saving = true;
-
-       if (pwrpriv->ips_mode == IPS_LEVEL_2)
-               pwrpriv->bkeepfwalive = true;
-
-       rtw_ips_pwr_down(padapter);
-       pwrpriv->rf_pwrstate = rf_off;
-
-       pwrpriv->bips_processing = false;
-
-       mutex_unlock(&pwrpriv->lock);
-}
-
-static int ips_leave(struct adapter *padapter)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       int result = _SUCCESS;
-       int keyid;
-
-       mutex_lock(&pwrpriv->lock);
-
-       if ((pwrpriv->rf_pwrstate == rf_off) && (!pwrpriv->bips_processing)) {
-               pwrpriv->bips_processing = true;
-               pwrpriv->ips_leave_cnts++;
-
-               result = rtw_ips_pwr_up(padapter);
-               if (result == _SUCCESS) {
-                       pwrpriv->rf_pwrstate = rf_on;
-               }
-
-               if ((psecuritypriv->dot11PrivacyAlgrthm == _WEP40_) || (psecuritypriv->dot11PrivacyAlgrthm == _WEP104_)) {
-                       set_channel_bwmode(padapter, padapter->mlmeextpriv.cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-                       for (keyid = 0; keyid < 4; keyid++) {
-                               if (pmlmepriv->key_mask & BIT(keyid)) {
-                                       if (keyid == psecuritypriv->dot11PrivacyKeyIndex)
-                                               result = rtw_set_key(padapter, psecuritypriv, keyid, 1);
-                                       else
-                                               result = rtw_set_key(padapter, psecuritypriv, keyid, 0);
-                               }
-                       }
-               }
-
-               pwrpriv->bips_processing = false;
-
-               pwrpriv->bkeepfwalive = false;
-               pwrpriv->bpower_saving = false;
-       }
-
-       mutex_unlock(&pwrpriv->lock);
-
-       return result;
-}
-
-static bool rtw_pwr_unassociated_idle(struct adapter *adapter)
-{
-       struct adapter *buddy = adapter->pbuddy_adapter;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct wifidirect_info  *pwdinfo = &adapter->wdinfo;
-       bool ret = false;
-
-       if (time_after_eq(adapter->pwrctrlpriv.ips_deny_time, jiffies))
-               goto exit;
-
-       if (check_fwstate(pmlmepriv, WIFI_ASOC_STATE | WIFI_SITE_MONITOR) ||
-           check_fwstate(pmlmepriv, WIFI_UNDER_LINKING | WIFI_UNDER_WPS) ||
-           check_fwstate(pmlmepriv, WIFI_UNDER_WPS) ||
-           check_fwstate(pmlmepriv, WIFI_AP_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE) ||
-           !rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-               goto exit;
-
-       /* consider buddy, if exist */
-       if (buddy) {
-               struct mlme_priv *b_pmlmepriv = &buddy->mlmepriv;
-               struct wifidirect_info *b_pwdinfo = &buddy->wdinfo;
-
-               if (check_fwstate(b_pmlmepriv, WIFI_ASOC_STATE | WIFI_SITE_MONITOR) ||
-                   check_fwstate(b_pmlmepriv, WIFI_UNDER_LINKING | WIFI_UNDER_WPS) ||
-                   check_fwstate(b_pmlmepriv, WIFI_AP_STATE) ||
-                   check_fwstate(b_pmlmepriv, WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE) ||
-                   !rtw_p2p_chk_state(b_pwdinfo, P2P_STATE_NONE))
-                       goto exit;
-       }
-       ret = true;
-
-exit:
-       return ret;
-}
-
-void rtw_ps_processor(struct adapter *padapter)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-       pwrpriv->ps_processing = true;
-
-       if (pwrpriv->bips_processing)
-               goto exit;
-
-       if (pwrpriv->ips_mode_req == IPS_NONE)
-               goto exit;
-
-       if (!rtw_pwr_unassociated_idle(padapter))
-               goto exit;
-
-       if (pwrpriv->rf_pwrstate == rf_on)
-               ips_enter(padapter);
-
-exit:
-       rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
-       pwrpriv->ps_processing = false;
-}
-
-static void pwr_state_check_handler(struct timer_list *t)
-{
-       struct adapter *padapter =
-               from_timer(padapter, t,
-                          pwrctrlpriv.pwr_state_check_timer);
-       rtw_ps_cmd(padapter);
-}
-
-static bool PS_RDY_CHECK(struct adapter *padapter)
-{
-       u32 curr_time, delta_time;
-       struct pwrctrl_priv     *pwrpriv = &padapter->pwrctrlpriv;
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-
-       curr_time = jiffies;
-       delta_time = curr_time - pwrpriv->DelayLPSLastTimeStamp;
-
-       if (delta_time < LPS_DELAY_TIME)
-               return false;
-
-       if (!check_fwstate(pmlmepriv, _FW_LINKED) ||
-           check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) ||
-           check_fwstate(pmlmepriv, WIFI_AP_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_STATE))
-               return false;
-       if (pwrpriv->bInSuspend)
-               return false;
-       if (padapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X &&
-           !padapter->securitypriv.binstallGrpkey)
-               return false;
-       return true;
-}
-
-void rtw_set_firmware_ps_mode(struct adapter *adapter, u8 mode)
-{
-       struct hal_data_8188e *haldata = &adapter->haldata;
-       struct odm_dm_struct *odmpriv = &haldata->odmpriv;
-
-       /* Force leave RF low power mode for 1T1R to prevent
-        * conflicting setting in firmware power saving sequence.
-        */
-       if (mode != PS_MODE_ACTIVE)
-               ODM_RF_Saving(odmpriv, true);
-       rtl8188e_set_FwPwrMode_cmd(adapter, mode);
-}
-
-void rtw_set_ps_mode(struct adapter *padapter, u8 ps_mode, u8 smart_ps, u8 bcn_ant_mode)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       struct wifidirect_info  *pwdinfo = &padapter->wdinfo;
-
-       if (ps_mode > PM_Card_Disable)
-               return;
-
-       if (pwrpriv->pwr_mode == ps_mode) {
-               if (ps_mode == PS_MODE_ACTIVE)
-                       return;
-
-               if ((pwrpriv->smart_ps == smart_ps) &&
-                   (pwrpriv->bcn_ant_mode == bcn_ant_mode))
-                       return;
-       }
-
-       if (ps_mode == PS_MODE_ACTIVE) {
-               if (pwdinfo->opp_ps == 0) {
-                       pwrpriv->pwr_mode = ps_mode;
-                       rtw_set_firmware_ps_mode(padapter, ps_mode);
-                       pwrpriv->bFwCurrentInPSMode = false;
-               }
-       } else {
-               if (PS_RDY_CHECK(padapter)) {
-                       pwrpriv->bFwCurrentInPSMode = true;
-                       pwrpriv->pwr_mode = ps_mode;
-                       pwrpriv->smart_ps = smart_ps;
-                       pwrpriv->bcn_ant_mode = bcn_ant_mode;
-                       rtw_set_firmware_ps_mode(padapter, ps_mode);
-
-                       /*  Set CTWindow after LPS */
-                       if (pwdinfo->opp_ps == 1)
-                               p2p_ps_wk_cmd(padapter, P2P_PS_ENABLE, 0);
-               }
-       }
-}
-
-static bool lps_rf_on(struct adapter *adapter)
-{
-       int res;
-       u32 reg;
-
-       /* When we halt NIC, we should check if FW LPS is leave. */
-       if (adapter->pwrctrlpriv.rf_pwrstate == rf_off) {
-               /*  If it is in HW/SW Radio OFF or IPS state, we do not check Fw LPS Leave, */
-               /*  because Fw is unload. */
-               return true;
-       }
-
-       res = rtw_read32(adapter, REG_RCR, &reg);
-       if (res)
-               return false;
-
-       if (reg & 0x00070000)
-               return false;
-
-       return true;
-}
-
-/*
- * Return:
- *     0:      Leave OK
- *     -1:     Timeout
- *     -2:     Other error
- */
-static s32 LPS_RF_ON_check(struct adapter *padapter, u32 delay_ms)
-{
-       unsigned long timeout = jiffies + msecs_to_jiffies(delay_ms);
-       s32 err = 0;
-
-       while (1) {
-               if (lps_rf_on(padapter))
-                       break;
-
-               if (padapter->bSurpriseRemoved) {
-                       err = -2;
-                       break;
-               }
-
-               if (time_after(jiffies, timeout)) {
-                       err = -1;
-                       break;
-               }
-               mdelay(1);
-       }
-
-       return err;
-}
-
-/*  */
-/*     Description: */
-/*             Enter the leisure power save mode. */
-/*  */
-void LPS_Enter(struct adapter *padapter)
-{
-       struct pwrctrl_priv     *pwrpriv = &padapter->pwrctrlpriv;
-
-       if (!PS_RDY_CHECK(padapter))
-               return;
-
-       if (pwrpriv->bLeisurePs) {
-               /*  Idle for a while if we connect to AP a while ago. */
-               if (pwrpriv->LpsIdleCount >= 2) { /*   4 Sec */
-                       if (pwrpriv->pwr_mode == PS_MODE_ACTIVE) {
-                               pwrpriv->bpower_saving = true;
-                               /* For Tenda W311R IOT issue */
-                               rtw_set_ps_mode(padapter, pwrpriv->power_mgnt,
-                                               pwrpriv->smart_ps, 0x40);
-                       }
-               } else {
-                       pwrpriv->LpsIdleCount++;
-               }
-       }
-
-}
-
-#define LPS_LEAVE_TIMEOUT_MS 100
-
-/*     Description: */
-/*             Leave the leisure power save mode. */
-void LPS_Leave(struct adapter *padapter)
-{
-       struct pwrctrl_priv     *pwrpriv = &padapter->pwrctrlpriv;
-
-       if (pwrpriv->bLeisurePs) {
-               if (pwrpriv->pwr_mode != PS_MODE_ACTIVE) {
-                       rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0x40);
-
-                       if (pwrpriv->pwr_mode == PS_MODE_ACTIVE)
-                               LPS_RF_ON_check(padapter, LPS_LEAVE_TIMEOUT_MS);
-               }
-       }
-
-       pwrpriv->bpower_saving = false;
-
-}
-
-/*  */
-/*  Description: Leave all power save mode: LPS, FwLPS, IPS if needed. */
-/*  Move code to function by tynli. 2010.03.26. */
-/*  */
-void LeaveAllPowerSaveMode(struct adapter *Adapter)
-{
-       struct mlme_priv        *pmlmepriv = &Adapter->mlmepriv;
-       u8      enqueue = 0;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED)) { /* connect */
-               p2p_ps_wk_cmd(Adapter, P2P_PS_DISABLE, enqueue);
-
-               rtw_lps_ctrl_wk_cmd(Adapter, LPS_CTRL_LEAVE, enqueue);
-       }
-
-}
-
-void rtw_init_pwrctrl_priv(struct adapter *padapter)
-{
-       struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
-
-       mutex_init(&pwrctrlpriv->lock);
-       pwrctrlpriv->rf_pwrstate = rf_on;
-       pwrctrlpriv->ips_enter_cnts = 0;
-       pwrctrlpriv->ips_leave_cnts = 0;
-       pwrctrlpriv->bips_processing = false;
-
-       pwrctrlpriv->ips_mode = padapter->registrypriv.ips_mode;
-       pwrctrlpriv->ips_mode_req = padapter->registrypriv.ips_mode;
-
-       pwrctrlpriv->pwr_state_check_interval = RTW_PWR_STATE_CHK_INTERVAL;
-       pwrctrlpriv->bInSuspend = false;
-       pwrctrlpriv->bkeepfwalive = false;
-
-       pwrctrlpriv->LpsIdleCount = 0;
-       pwrctrlpriv->power_mgnt = padapter->registrypriv.power_mgnt;/*  PS_MODE_MIN; */
-       pwrctrlpriv->bLeisurePs = pwrctrlpriv->power_mgnt != PS_MODE_ACTIVE;
-
-       pwrctrlpriv->bFwCurrentInPSMode = false;
-
-       pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE;
-       pwrctrlpriv->smart_ps = padapter->registrypriv.smart_ps;
-       pwrctrlpriv->bcn_ant_mode = 0;
-
-       timer_setup(&pwrctrlpriv->pwr_state_check_timer, pwr_state_check_handler, 0);
-}
-
-/* Wake the NIC up from: 1)IPS 2)USB autosuspend */
-int rtw_pwr_wakeup(struct adapter *padapter)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       unsigned long timeout = jiffies + msecs_to_jiffies(3000);
-       unsigned long deny_time;
-       int ret;
-
-       while (pwrpriv->ps_processing && time_before(jiffies, timeout))
-               msleep(10);
-
-       /* I think this should be check in IPS, LPS, autosuspend functions... */
-       /* Below goto is a success path taken for already linked devices */
-       ret = 0;
-       if (check_fwstate(pmlmepriv, _FW_LINKED))
-               goto exit;
-
-       if (pwrpriv->rf_pwrstate == rf_off && ips_leave(padapter) == _FAIL) {
-               ret = -ENOMEM;
-               goto exit;
-       }
-
-       if (padapter->bDriverStopped || !padapter->bup || !padapter->hw_init_completed) {
-               ret = -EBUSY;
-               goto exit;
-       }
-
-exit:
-       deny_time = jiffies + msecs_to_jiffies(RTW_PWR_STATE_CHK_INTERVAL);
-       if (time_before(pwrpriv->ips_deny_time, deny_time))
-               pwrpriv->ips_deny_time = deny_time;
-       return ret;
-}
-
-int rtw_pm_set_lps(struct adapter *padapter, u8 mode)
-{
-       int     ret = 0;
-       struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
-
-       if (mode < PS_MODE_NUM) {
-               if (pwrctrlpriv->power_mgnt != mode) {
-                       if (mode == PS_MODE_ACTIVE)
-                               LeaveAllPowerSaveMode(padapter);
-                       else
-                               pwrctrlpriv->LpsIdleCount = 2;
-                       pwrctrlpriv->power_mgnt = mode;
-                       pwrctrlpriv->bLeisurePs = pwrctrlpriv->power_mgnt != PS_MODE_ACTIVE;
-               }
-       } else {
-               ret = -EINVAL;
-       }
-
-       return ret;
-}
-
-int rtw_pm_set_ips(struct adapter *padapter, u8 mode)
-{
-       struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
-
-       if (mode == IPS_NORMAL || mode == IPS_LEVEL_2) {
-               rtw_ips_mode_req(pwrctrlpriv, mode);
-               return 0;
-       } else if (mode == IPS_NONE) {
-               rtw_ips_mode_req(pwrctrlpriv, mode);
-               if ((padapter->bSurpriseRemoved == 0) && rtw_pwr_wakeup(padapter))
-                       return -EFAULT;
-       } else {
-               return -EINVAL;
-       }
-       return 0;
-}
diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c
deleted file mode 100644 (file)
index fc7568c..0000000
+++ /dev/null
@@ -1,2010 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#define _RTW_RECV_C_
-
-#include <linux/ieee80211.h>
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/usb_ops.h"
-#include "../include/wifi.h"
-#include "../include/rtl8188e_recv.h"
-
-static u8 SNAP_ETH_TYPE_IPX[2] = {0x81, 0x37};
-static u8 SNAP_ETH_TYPE_APPLETALK_AARP[2] = {0x80, 0xf3};
-
-/* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */
-static u8 rtw_bridge_tunnel_header[] = {
-       0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8
-};
-
-static u8 rtw_rfc1042_header[] = {
-       0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00
-};
-
-static void rtw_signal_stat_timer_hdl(struct timer_list *t);
-
-void _rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv)
-{
-
-       memset((u8 *)psta_recvpriv, 0, sizeof(struct sta_recv_priv));
-
-       spin_lock_init(&psta_recvpriv->lock);
-
-       rtw_init_queue(&psta_recvpriv->defrag_q);
-
-}
-
-static int rtl8188eu_init_recv_priv(struct adapter *padapter)
-{
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-       int i, err = 0;
-       struct recv_buf *precvbuf;
-
-       tasklet_init(&precvpriv->recv_tasklet,
-                    rtl8188eu_recv_tasklet,
-                    (unsigned long)padapter);
-
-       /* init recv_buf */
-       rtw_init_queue(&precvpriv->free_recv_buf_queue);
-
-       precvpriv->pallocated_recv_buf = kzalloc(NR_RECVBUFF * sizeof(struct recv_buf) + 4,
-                                                GFP_KERNEL);
-       if (!precvpriv->pallocated_recv_buf)
-               return -ENOMEM;
-
-       precvpriv->precv_buf = (u8 *)ALIGN((size_t)(precvpriv->pallocated_recv_buf), 4);
-
-       precvbuf = (struct recv_buf *)precvpriv->precv_buf;
-
-       for (i = 0; i < NR_RECVBUFF; i++) {
-               precvbuf->pskb = NULL;
-               precvbuf->reuse = false;
-               precvbuf->purb = usb_alloc_urb(0, GFP_KERNEL);
-               if (!precvbuf->purb) {
-                       err = -ENOMEM;
-                       break;
-               }
-               precvbuf->adapter = padapter;
-               precvbuf++;
-       }
-       precvpriv->free_recv_buf_queue_cnt = NR_RECVBUFF;
-       skb_queue_head_init(&precvpriv->rx_skb_queue);
-       {
-               int i;
-               size_t tmpaddr = 0;
-               size_t alignment = 0;
-               struct sk_buff *pskb = NULL;
-
-               skb_queue_head_init(&precvpriv->free_recv_skb_queue);
-
-               for (i = 0; i < NR_PREALLOC_RECV_SKB; i++) {
-                       pskb = __netdev_alloc_skb(padapter->pnetdev,
-                                                 MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_KERNEL);
-                       if (pskb) {
-                               pskb->dev = padapter->pnetdev;
-                               tmpaddr = (size_t)pskb->data;
-                               alignment = tmpaddr & (RECVBUFF_ALIGN_SZ - 1);
-                               skb_reserve(pskb, (RECVBUFF_ALIGN_SZ - alignment));
-
-                               skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
-                       }
-                       pskb = NULL;
-               }
-       }
-
-       return err;
-}
-
-int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter)
-{
-       int i;
-       struct recv_frame *precvframe;
-       int err;
-
-       spin_lock_init(&precvpriv->lock);
-
-       rtw_init_queue(&precvpriv->free_recv_queue);
-       rtw_init_queue(&precvpriv->recv_pending_queue);
-       rtw_init_queue(&precvpriv->uc_swdec_pending_queue);
-
-       precvpriv->adapter = padapter;
-
-       precvpriv->free_recvframe_cnt = NR_RECVFRAME;
-
-       precvpriv->pallocated_frame_buf = vzalloc(NR_RECVFRAME * sizeof(struct recv_frame) + RXFRAME_ALIGN_SZ);
-       if (!precvpriv->pallocated_frame_buf)
-               return -ENOMEM;
-
-       precvpriv->precv_frame_buf = (u8 *)ALIGN((size_t)(precvpriv->pallocated_frame_buf), RXFRAME_ALIGN_SZ);
-
-       precvframe = (struct recv_frame *)precvpriv->precv_frame_buf;
-
-       for (i = 0; i < NR_RECVFRAME; i++) {
-               INIT_LIST_HEAD(&precvframe->list);
-
-               list_add_tail(&precvframe->list, &precvpriv->free_recv_queue.queue);
-
-               precvframe->pkt = NULL;
-
-               precvframe->len = 0;
-
-               precvframe->adapter = padapter;
-               precvframe++;
-       }
-       precvpriv->rx_pending_cnt = 1;
-
-       err = rtl8188eu_init_recv_priv(padapter);
-
-       timer_setup(&precvpriv->signal_stat_timer, rtw_signal_stat_timer_hdl, 0);
-       precvpriv->signal_stat_sampling_interval = 1000; /* ms */
-
-       rtw_set_signal_stat_timer(precvpriv);
-
-       return err;
-}
-
-static void rtl8188eu_free_recv_priv(struct adapter *padapter)
-{
-       int i;
-       struct recv_buf *precvbuf;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-
-       precvbuf = (struct recv_buf *)precvpriv->precv_buf;
-
-       for (i = 0; i < NR_RECVBUFF; i++) {
-               usb_free_urb(precvbuf->purb);
-               precvbuf++;
-       }
-
-       kfree(precvpriv->pallocated_recv_buf);
-
-       skb_queue_purge(&precvpriv->rx_skb_queue);
-
-       skb_queue_purge(&precvpriv->free_recv_skb_queue);
-}
-
-void _rtw_free_recv_priv(struct recv_priv *precvpriv)
-{
-       struct adapter  *padapter = precvpriv->adapter;
-
-       rtw_free_uc_swdec_pending_queue(padapter);
-
-       vfree(precvpriv->pallocated_frame_buf);
-
-       rtl8188eu_free_recv_priv(padapter);
-       _cancel_timer_ex(&precvpriv->signal_stat_timer);
-}
-
-struct recv_frame *_rtw_alloc_recvframe(struct __queue *pfree_recv_queue)
-{
-       struct recv_frame *hdr;
-       struct list_head *plist, *phead;
-       struct adapter *padapter;
-       struct recv_priv *precvpriv;
-
-       if (list_empty(&pfree_recv_queue->queue)) {
-               hdr = NULL;
-       } else {
-               phead = get_list_head(pfree_recv_queue);
-
-               plist = phead->next;
-
-               hdr = container_of(plist, struct recv_frame, list);
-
-               list_del_init(&hdr->list);
-               padapter = hdr->adapter;
-               if (padapter) {
-                       precvpriv = &padapter->recvpriv;
-                       if (pfree_recv_queue == &precvpriv->free_recv_queue)
-                               precvpriv->free_recvframe_cnt--;
-               }
-       }
-
-       return (struct recv_frame *)hdr;
-}
-
-struct recv_frame *rtw_alloc_recvframe(struct __queue *pfree_recv_queue)
-{
-       struct recv_frame  *precvframe;
-
-       spin_lock_bh(&pfree_recv_queue->lock);
-
-       precvframe = _rtw_alloc_recvframe(pfree_recv_queue);
-
-       spin_unlock_bh(&pfree_recv_queue->lock);
-
-       return precvframe;
-}
-
-int rtw_free_recvframe(struct recv_frame *precvframe, struct __queue *pfree_recv_queue)
-{
-       struct adapter *padapter;
-       struct recv_priv *precvpriv;
-
-       if (!precvframe)
-               return _FAIL;
-       padapter = precvframe->adapter;
-       precvpriv = &padapter->recvpriv;
-       if (precvframe->pkt) {
-               dev_kfree_skb_any(precvframe->pkt);/* free skb by driver */
-               precvframe->pkt = NULL;
-       }
-
-       spin_lock_bh(&pfree_recv_queue->lock);
-
-       list_del_init(&precvframe->list);
-
-       precvframe->len = 0;
-
-       list_add_tail(&precvframe->list, get_list_head(pfree_recv_queue));
-
-       if (padapter && (pfree_recv_queue == &precvpriv->free_recv_queue))
-               precvpriv->free_recvframe_cnt++;
-
-       spin_unlock_bh(&pfree_recv_queue->lock);
-
-       return _SUCCESS;
-}
-
-int _rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue)
-{
-       struct adapter *padapter = precvframe->adapter;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-
-       list_del_init(&precvframe->list);
-       list_add_tail(&precvframe->list, get_list_head(queue));
-
-       if (padapter) {
-               if (queue == &precvpriv->free_recv_queue)
-                       precvpriv->free_recvframe_cnt++;
-       }
-
-       return _SUCCESS;
-}
-
-int rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue)
-{
-       int ret;
-
-       spin_lock_bh(&queue->lock);
-       ret = _rtw_enqueue_recvframe(precvframe, queue);
-       spin_unlock_bh(&queue->lock);
-
-       return ret;
-}
-
-/*
- * caller : defrag ; recvframe_chk_defrag in recv_thread  (passive)
- * pframequeue: defrag_queue : will be accessed in recv_thread  (passive)
- *
- * using spinlock to protect
- *
- */
-
-void rtw_free_recvframe_queue(struct __queue *pframequeue,  struct __queue *pfree_recv_queue)
-{
-       struct recv_frame *hdr;
-       struct list_head *plist, *phead;
-
-       spin_lock(&pframequeue->lock);
-
-       phead = get_list_head(pframequeue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               hdr = container_of(plist, struct recv_frame, list);
-
-               plist = plist->next;
-
-               rtw_free_recvframe((struct recv_frame *)hdr, pfree_recv_queue);
-       }
-
-       spin_unlock(&pframequeue->lock);
-
-}
-
-u32 rtw_free_uc_swdec_pending_queue(struct adapter *adapter)
-{
-       u32 cnt = 0;
-       struct recv_frame *pending_frame;
-
-       while ((pending_frame = rtw_alloc_recvframe(&adapter->recvpriv.uc_swdec_pending_queue))) {
-               rtw_free_recvframe(pending_frame, &adapter->recvpriv.free_recv_queue);
-               cnt++;
-       }
-
-       return cnt;
-}
-
-static void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup)
-{
-       union iwreq_data wrqu;
-       struct iw_michaelmicfailure ev;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       u32 cur_time = 0;
-
-       if (psecuritypriv->last_mic_err_time == 0) {
-               psecuritypriv->last_mic_err_time = jiffies;
-       } else {
-               cur_time = jiffies;
-
-               if (cur_time - psecuritypriv->last_mic_err_time < 60 * HZ) {
-                       psecuritypriv->btkip_countermeasure = true;
-                       psecuritypriv->last_mic_err_time = 0;
-                       psecuritypriv->btkip_countermeasure_time = cur_time;
-               } else {
-                       psecuritypriv->last_mic_err_time = jiffies;
-               }
-       }
-
-       memset(&ev, 0x00, sizeof(ev));
-       if (bgroup)
-               ev.flags |= IW_MICFAILURE_GROUP;
-       else
-               ev.flags |= IW_MICFAILURE_PAIRWISE;
-
-       ev.src_addr.sa_family = ARPHRD_ETHER;
-       memcpy(ev.src_addr.sa_data, &pmlmepriv->assoc_bssid[0], ETH_ALEN);
-       memset(&wrqu, 0x00, sizeof(wrqu));
-       wrqu.data.length = sizeof(ev);
-       wireless_send_event(padapter->pnetdev, IWEVMICHAELMICFAILURE,
-                           &wrqu, (char *)&ev);
-}
-
-static int recvframe_chkmic(struct adapter *adapter,  struct recv_frame *precvframe)
-{
-       int     i, res = _SUCCESS;
-       u32     datalen;
-       u8      miccode[8];
-       u8      bmic_err = false, brpt_micerror = true;
-       u8      *pframe, *payload, *pframemic;
-       u8      *mickey;
-       struct  sta_info                *stainfo;
-       struct  rx_pkt_attrib   *prxattrib = &precvframe->attrib;
-       struct  security_priv   *psecuritypriv = &adapter->securitypriv;
-
-       struct mlme_ext_priv    *pmlmeext = &adapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       stainfo = rtw_get_stainfo(&adapter->stapriv, &prxattrib->ta[0]);
-
-       if (prxattrib->encrypt == _TKIP_) {
-               /* calculate mic code */
-               if (stainfo) {
-                       if (is_multicast_ether_addr(prxattrib->ra)) {
-                               mickey = &psecuritypriv->dot118021XGrprxmickey[prxattrib->key_index].skey[0];
-
-                               if (!psecuritypriv) {
-                                       res = _FAIL;
-                                       goto exit;
-                               }
-                       } else {
-                               mickey = &stainfo->dot11tkiprxmickey.skey[0];
-                       }
-
-                       datalen = precvframe->len - prxattrib->hdrlen - prxattrib->iv_len - prxattrib->icv_len - 8;/* icv_len included the mic code */
-                       pframe = precvframe->rx_data;
-                       payload = pframe + prxattrib->hdrlen + prxattrib->iv_len;
-
-                       rtw_seccalctkipmic(mickey, pframe, payload, datalen, &miccode[0],
-                                          (unsigned char)prxattrib->priority); /* care the length of the data */
-
-                       pframemic = payload + datalen;
-
-                       bmic_err = false;
-
-                       for (i = 0; i < 8; i++) {
-                               if (miccode[i] != *(pframemic + i))
-                                       bmic_err = true;
-                       }
-
-                       if (bmic_err) {
-                               /*  double check key_index for some timing issue , */
-                               /*  cannot compare with psecuritypriv->dot118021XGrpKeyid also cause timing issue */
-                               if (is_multicast_ether_addr(prxattrib->ra) && prxattrib->key_index != pmlmeinfo->key_index)
-                                       brpt_micerror = false;
-
-                               if ((prxattrib->bdecrypted) && (brpt_micerror))
-                                       rtw_handle_tkip_mic_err(adapter, (u8)is_multicast_ether_addr(prxattrib->ra));
-
-                               res = _FAIL;
-                       } else {
-                               /* mic checked ok */
-                               if (!psecuritypriv->bcheck_grpkey && is_multicast_ether_addr(prxattrib->ra))
-                                       psecuritypriv->bcheck_grpkey = true;
-                       }
-               }
-
-               recvframe_pull_tail(precvframe, 8);
-       }
-
-exit:
-
-       return res;
-}
-
-/* decrypt and set the ivlen, icvlen of the recv_frame */
-static struct recv_frame *decryptor(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct rx_pkt_attrib *prxattrib = &precv_frame->attrib;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct recv_frame *return_packet = precv_frame;
-       u32      res = _SUCCESS;
-
-       if (prxattrib->encrypt > 0) {
-               u8 *iv = precv_frame->rx_data + prxattrib->hdrlen;
-
-               prxattrib->key_index = (((iv[3]) >> 6) & 0x3);
-
-               if (prxattrib->key_index > WEP_KEYS) {
-                       switch (prxattrib->encrypt) {
-                       case _WEP40_:
-                       case _WEP104_:
-                               prxattrib->key_index = psecuritypriv->dot11PrivacyKeyIndex;
-                               break;
-                       case _TKIP_:
-                       case _AES_:
-                       default:
-                               prxattrib->key_index = psecuritypriv->dot118021XGrpKeyid;
-                               break;
-                       }
-               }
-       }
-
-       if ((prxattrib->encrypt > 0) && ((prxattrib->bdecrypted == 0) || (psecuritypriv->sw_decrypt))) {
-               psecuritypriv->hw_decrypted = false;
-
-               switch (prxattrib->encrypt) {
-               case _WEP40_:
-               case _WEP104_:
-                       rtw_wep_decrypt(padapter, precv_frame);
-                       break;
-               case _TKIP_:
-                       res = rtw_tkip_decrypt(padapter, precv_frame);
-                       break;
-               case _AES_:
-                       res = rtw_aes_decrypt(padapter, precv_frame);
-                       break;
-               default:
-                       break;
-               }
-       } else if (prxattrib->bdecrypted == 1 && prxattrib->encrypt > 0 &&
-                  (psecuritypriv->busetkipkey == 1 || prxattrib->encrypt != _TKIP_))
-                       psecuritypriv->hw_decrypted = true;
-
-       if (res == _FAIL) {
-               rtw_free_recvframe(return_packet, &padapter->recvpriv.free_recv_queue);
-               return_packet = NULL;
-       } else {
-               prxattrib->bdecrypted = true;
-       }
-
-       return return_packet;
-}
-
-/* set the security information in the recv_frame */
-static struct recv_frame *portctrl(struct adapter *adapter, struct recv_frame *precv_frame)
-{
-       u8   *psta_addr, *ptr;
-       uint  auth_alg;
-       struct recv_frame *pfhdr;
-       struct sta_info *psta;
-       struct sta_priv *pstapriv;
-       struct recv_frame *prtnframe;
-       u16 ether_type = 0;
-       u16  eapol_type = 0x888e;/* for Funia BD's WPA issue */
-       struct rx_pkt_attrib *pattrib;
-       __be16 be_tmp;
-
-       pstapriv = &adapter->stapriv;
-
-       auth_alg = adapter->securitypriv.dot11AuthAlgrthm;
-
-       ptr = precv_frame->rx_data;
-       pfhdr = precv_frame;
-       pattrib = &pfhdr->attrib;
-       psta_addr = pattrib->ta;
-
-       prtnframe = NULL;
-
-       psta = rtw_get_stainfo(pstapriv, psta_addr);
-
-       if (auth_alg == 2) {
-               if (psta && psta->ieee8021x_blocked) {
-                       /* blocked */
-                       /* only accept EAPOL frame */
-                       prtnframe = precv_frame;
-
-                       /* get ether_type */
-                       ptr = ptr + pfhdr->attrib.hdrlen + pfhdr->attrib.iv_len + LLC_HEADER_SIZE;
-                       memcpy(&be_tmp, ptr, 2);
-                       ether_type = ntohs(be_tmp);
-
-                       if (ether_type == eapol_type) {
-                               prtnframe = precv_frame;
-                       } else {
-                               /* free this frame */
-                               rtw_free_recvframe(precv_frame, &adapter->recvpriv.free_recv_queue);
-                               prtnframe = NULL;
-                       }
-               } else {
-                       /* allowed */
-                       /* check decryption status, and decrypt the frame if needed */
-                       prtnframe = precv_frame;
-               }
-       } else {
-               prtnframe = precv_frame;
-       }
-
-       return prtnframe;
-}
-
-static int recv_decache(struct recv_frame *precv_frame, u8 bretry, struct stainfo_rxcache *prxcache)
-{
-       int tid = precv_frame->attrib.priority;
-
-       u16 seq_ctrl = ((precv_frame->attrib.seq_num & 0xffff) << 4) |
-               (precv_frame->attrib.frag_num & 0xf);
-
-       if (tid > 15)
-               return _FAIL;
-
-       if (1) {/* if (bretry) */
-               if (seq_ctrl == prxcache->tid_rxseq[tid])
-                       return _FAIL;
-       }
-
-       prxcache->tid_rxseq[tid] = seq_ctrl;
-
-       return _SUCCESS;
-}
-
-static void process_pwrbit_data(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       unsigned char pwrbit;
-       u8 *ptr = precv_frame->rx_data;
-       struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info *psta = NULL;
-
-       psta = rtw_get_stainfo(pstapriv, pattrib->src);
-
-       pwrbit = GetPwrMgt(ptr);
-
-       if (psta) {
-               if (pwrbit) {
-                       if (!(psta->state & WIFI_SLEEP_STATE))
-                               stop_sta_xmit(padapter, psta);
-               } else {
-                       if (psta->state & WIFI_SLEEP_STATE)
-                               wakeup_sta_to_xmit(padapter, psta);
-               }
-       }
-}
-
-static void process_wmmps_data(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info *psta = NULL;
-
-       psta = rtw_get_stainfo(pstapriv, pattrib->src);
-
-       if (!psta)
-               return;
-
-       if (!psta->qos_option)
-               return;
-
-       if (!(psta->qos_info & 0xf))
-               return;
-
-       if (psta->state & WIFI_SLEEP_STATE) {
-               u8 wmmps_ac = 0;
-
-               switch (pattrib->priority) {
-               case 1:
-               case 2:
-                       wmmps_ac = psta->uapsd_bk & BIT(1);
-                       break;
-               case 4:
-               case 5:
-                       wmmps_ac = psta->uapsd_vi & BIT(1);
-                       break;
-               case 6:
-               case 7:
-                       wmmps_ac = psta->uapsd_vo & BIT(1);
-                       break;
-               case 0:
-               case 3:
-               default:
-                       wmmps_ac = psta->uapsd_be & BIT(1);
-                       break;
-               }
-
-               if (wmmps_ac) {
-                       if (psta->sleepq_ac_len > 0) {
-                               /* process received triggered frame */
-                               xmit_delivery_enabled_frames(padapter, psta);
-                       } else {
-                               /* issue one qos null frame with More data bit = 0 and the EOSP bit set (= 1) */
-                               issue_qos_nulldata(padapter, psta->hwaddr, (u16)pattrib->priority, 0, 0);
-                       }
-               }
-       }
-}
-
-static void count_rx_stats(struct adapter *padapter, struct recv_frame *prframe, struct sta_info *sta)
-{
-       int     sz;
-       struct sta_info         *psta = NULL;
-       struct stainfo_stats    *pstats = NULL;
-       struct rx_pkt_attrib    *pattrib = &prframe->attrib;
-       struct recv_priv        *precvpriv = &padapter->recvpriv;
-
-       sz = get_recvframe_len(prframe);
-       precvpriv->rx_bytes += sz;
-
-       padapter->mlmepriv.LinkDetectInfo.NumRxOkInPeriod++;
-
-       if (!is_broadcast_ether_addr(pattrib->dst) && !is_multicast_ether_addr(pattrib->dst))
-               padapter->mlmepriv.LinkDetectInfo.NumRxUnicastOkInPeriod++;
-
-       if (sta)
-               psta = sta;
-       else
-               psta = prframe->psta;
-
-       if (psta) {
-               pstats = &psta->sta_stats;
-
-               pstats->rx_data_pkts++;
-               pstats->rx_bytes += sz;
-       }
-}
-
-static int sta2sta_data_frame(struct adapter *adapter,
-                             struct recv_frame *precv_frame, struct sta_info **psta)
-{
-       int ret = _SUCCESS;
-       struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-       struct  sta_priv *pstapriv = &adapter->stapriv;
-       struct  mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       u8 *mybssid  = get_bssid(pmlmepriv);
-       u8 *myhwaddr = myid(&adapter->eeprompriv);
-       u8 *sta_addr = NULL;
-       bool bmcast = is_multicast_ether_addr(pattrib->dst);
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-               /*  filter packets that SA is myself or multicast or broadcast */
-               if (!memcmp(myhwaddr, pattrib->src, ETH_ALEN)) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               if ((memcmp(myhwaddr, pattrib->dst, ETH_ALEN)) && (!bmcast)) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               if (!memcmp(pattrib->bssid, "\x0\x0\x0\x0\x0\x0", ETH_ALEN) ||
-                   !memcmp(mybssid, "\x0\x0\x0\x0\x0\x0", ETH_ALEN) ||
-                   memcmp(pattrib->bssid, mybssid, ETH_ALEN)) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               sta_addr = pattrib->src;
-       } else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-               /*  For Station mode, sa and bssid should always be BSSID, and DA is my mac-address */
-               if (memcmp(pattrib->bssid, pattrib->src, ETH_ALEN)) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-               sta_addr = pattrib->bssid;
-       } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               if (bmcast) {
-                       /*  For AP mode, if DA == MCAST, then BSSID should be also MCAST */
-                       if (!is_multicast_ether_addr(pattrib->bssid)) {
-                                       ret = _FAIL;
-                                       goto exit;
-                       }
-               } else { /*  not mc-frame */
-                       /*  For AP mode, if DA is non-MCAST, then it must be BSSID, and bssid == BSSID */
-                       if (memcmp(pattrib->bssid, pattrib->dst, ETH_ALEN)) {
-                               ret = _FAIL;
-                               goto exit;
-                       }
-
-                       sta_addr = pattrib->src;
-               }
-       } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) {
-               sta_addr = mybssid;
-       } else {
-               ret  = _FAIL;
-       }
-
-       if (bmcast)
-               *psta = rtw_get_bcmc_stainfo(adapter);
-       else
-               *psta = rtw_get_stainfo(pstapriv, sta_addr); /*  get ap_info */
-
-       if (!*psta)
-               goto exit;
-
-exit:
-
-       return ret;
-}
-
-static int ap2sta_data_frame(
-       struct adapter *adapter,
-       struct recv_frame *precv_frame,
-       struct sta_info **psta)
-{
-       u8 *ptr = precv_frame->rx_data;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)precv_frame->rx_data;
-       struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-       int ret = _SUCCESS;
-       struct  sta_priv *pstapriv = &adapter->stapriv;
-       struct  mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       u8 *mybssid  = get_bssid(pmlmepriv);
-       u8 *myhwaddr = myid(&adapter->eeprompriv);
-       bool bmcast = is_multicast_ether_addr(pattrib->dst);
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) &&
-           (check_fwstate(pmlmepriv, _FW_LINKED) ||
-            check_fwstate(pmlmepriv, _FW_UNDER_LINKING))) {
-               /*  filter packets that SA is myself or multicast or broadcast */
-               if (!memcmp(myhwaddr, pattrib->src, ETH_ALEN)) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               /*  da should be for me */
-               if ((memcmp(myhwaddr, pattrib->dst, ETH_ALEN)) && (!bmcast)) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               /*  check BSSID */
-               if (is_zero_ether_addr(pattrib->bssid) || is_zero_ether_addr(mybssid) ||
-                   (memcmp(pattrib->bssid, mybssid, ETH_ALEN))) {
-                       if (!bmcast)
-                               issue_deauth(adapter, pattrib->bssid, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
-
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               if (bmcast)
-                       *psta = rtw_get_bcmc_stainfo(adapter);
-               else
-                       *psta = rtw_get_stainfo(pstapriv, pattrib->bssid); /*  get ap_info */
-
-               if (!*psta) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               if (ieee80211_is_nullfunc(hdr->frame_control)) {
-                       /* We count the nullfunc frame, but we'll not pass it on to higher layers. */
-                       count_rx_stats(adapter, precv_frame, *psta);
-                       ret = RTW_RX_HANDLED;
-                       goto exit;
-               }
-       } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE) &&
-                  check_fwstate(pmlmepriv, _FW_LINKED)) {
-               memcpy(pattrib->src, GetAddr2Ptr(ptr), ETH_ALEN);
-
-               memcpy(pattrib->bssid,  mybssid, ETH_ALEN);
-
-               *psta = rtw_get_stainfo(pstapriv, pattrib->bssid); /*  get sta_info */
-               if (!*psta) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-       } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               /* Special case */
-               ret = RTW_RX_HANDLED;
-               goto exit;
-       } else {
-               if (!memcmp(myhwaddr, pattrib->dst, ETH_ALEN) && (!bmcast)) {
-                       *psta = rtw_get_stainfo(pstapriv, pattrib->bssid); /*  get sta_info */
-                       if (!*psta)
-                               issue_deauth(adapter, pattrib->bssid, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
-               }
-
-               ret = _FAIL;
-       }
-
-exit:
-
-       return ret;
-}
-
-static int sta2ap_data_frame(struct adapter *adapter,
-                            struct recv_frame *precv_frame,
-                            struct sta_info **psta)
-{
-       struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-       struct  sta_priv *pstapriv = &adapter->stapriv;
-       struct  mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       u8 *ptr = precv_frame->rx_data;
-       __le16 fc = *(__le16 *)ptr;
-       unsigned char *mybssid  = get_bssid(pmlmepriv);
-       int ret = _SUCCESS;
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               /* For AP mode, RA = BSSID, TX = STA(SRC_ADDR), A3 = DST_ADDR */
-               if (memcmp(pattrib->bssid, mybssid, ETH_ALEN)) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               *psta = rtw_get_stainfo(pstapriv, pattrib->src);
-               if (!*psta) {
-                       issue_deauth(adapter, pattrib->src, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
-
-                       ret = RTW_RX_HANDLED;
-                       goto exit;
-               }
-
-               process_pwrbit_data(adapter, precv_frame);
-
-               if (ieee80211_is_data_qos(fc))
-                       process_wmmps_data(adapter, precv_frame);
-
-               if (GetFrameSubType(ptr) & BIT(6)) {
-                       /* No data, will not indicate to upper layer, temporily count it here */
-                       count_rx_stats(adapter, precv_frame, *psta);
-                       ret = RTW_RX_HANDLED;
-                       goto exit;
-               }
-       } else {
-               u8 *myhwaddr = myid(&adapter->eeprompriv);
-
-               if (memcmp(pattrib->ra, myhwaddr, ETH_ALEN)) {
-                       ret = RTW_RX_HANDLED;
-                       goto exit;
-               }
-               issue_deauth(adapter, pattrib->src, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
-               ret = RTW_RX_HANDLED;
-               goto exit;
-       }
-
-exit:
-
-       return ret;
-}
-
-static void validate_recv_ctrl_frame(struct adapter *padapter,
-                                    struct recv_frame *precv_frame)
-{
-       struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)precv_frame->rx_data;
-       struct ieee80211_pspoll *pspoll = (struct ieee80211_pspoll *)hdr;
-       u8 wmmps_ac;
-       struct sta_info *psta;
-
-       /* receive the frames that ra(a1) is my address */
-       if (memcmp(hdr->addr1, myid(&padapter->eeprompriv), ETH_ALEN))
-               return;
-
-       /* only handle ps-poll */
-       if (!ieee80211_is_pspoll(hdr->frame_control))
-               return;
-
-       psta = rtw_get_stainfo(pstapriv, hdr->addr2);
-       if (!psta || psta->aid != (le16_to_cpu(pspoll->aid) & 0x3FFF))
-               return;
-
-       /* for rx pkt statistics */
-       psta->sta_stats.rx_ctrl_pkts++;
-
-       switch (pattrib->priority) {
-       case 1:
-       case 2:
-               wmmps_ac = psta->uapsd_bk & BIT(0);
-               break;
-       case 4:
-       case 5:
-               wmmps_ac = psta->uapsd_vi & BIT(0);
-               break;
-       case 6:
-       case 7:
-               wmmps_ac = psta->uapsd_vo & BIT(0);
-               break;
-       case 0:
-       case 3:
-       default:
-               wmmps_ac = psta->uapsd_be & BIT(0);
-               break;
-       }
-
-       if (wmmps_ac)
-               return;
-
-       if (psta->state & WIFI_STA_ALIVE_CHK_STATE) {
-               psta->expire_to = pstapriv->expire_to;
-               psta->state ^= WIFI_STA_ALIVE_CHK_STATE;
-       }
-
-       if ((psta->state & WIFI_SLEEP_STATE) && (pstapriv->sta_dz_bitmap & BIT(psta->aid))) {
-               struct list_head *xmitframe_plist, *xmitframe_phead;
-               struct xmit_frame *pxmitframe = NULL;
-               struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-               spin_lock_bh(&pxmitpriv->lock);
-
-               xmitframe_phead = get_list_head(&psta->sleep_q);
-               xmitframe_plist = xmitframe_phead->next;
-
-               if (xmitframe_phead != xmitframe_plist) {
-                       pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list);
-
-                       xmitframe_plist = xmitframe_plist->next;
-
-                       list_del_init(&pxmitframe->list);
-
-                       psta->sleepq_len--;
-
-                       if (psta->sleepq_len > 0)
-                               pxmitframe->attrib.mdata = 1;
-                       else
-                               pxmitframe->attrib.mdata = 0;
-
-                       pxmitframe->attrib.triggered = 1;
-
-                       if (psta->sleepq_len == 0) {
-                               pstapriv->tim_bitmap &= ~BIT(psta->aid);
-
-                               /* update BCN for TIM IE */
-                               /* update_BCNTIM(padapter); */
-                               update_beacon(padapter, _TIM_IE_, NULL, false);
-                       }
-               } else {
-                       if (pstapriv->tim_bitmap & BIT(psta->aid)) {
-                               if (psta->sleepq_len == 0)
-                                       /* issue nulldata with More data bit = 0 to indicate we have no buffered packets */
-                                       issue_nulldata(padapter, psta->hwaddr, 0, 0, 0);
-                               else
-                                       psta->sleepq_len = 0;
-
-                               pstapriv->tim_bitmap &= ~BIT(psta->aid);
-
-                               /* update BCN for TIM IE */
-                               /* update_BCNTIM(padapter); */
-                               update_beacon(padapter, _TIM_IE_, NULL, false);
-                       }
-               }
-               spin_unlock_bh(&pxmitpriv->lock);
-       }
-}
-
-struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, struct recv_frame *precv_frame);
-
-static void validate_recv_mgnt_frame(struct adapter *padapter,
-                                    struct recv_frame *precv_frame)
-{
-       struct sta_info *psta;
-       struct ieee80211_hdr *hdr;
-
-       precv_frame = recvframe_chk_defrag(padapter, precv_frame);
-       if (!precv_frame)
-               return;
-
-       hdr = (struct ieee80211_hdr *)precv_frame->rx_data;
-       psta = rtw_get_stainfo(&padapter->stapriv, hdr->addr2);
-       if (psta) {
-               psta->sta_stats.rx_mgnt_pkts++;
-               if (ieee80211_is_beacon(hdr->frame_control))
-                       psta->sta_stats.rx_beacon_pkts++;
-               else if (ieee80211_is_probe_req(hdr->frame_control))
-                       psta->sta_stats.rx_probereq_pkts++;
-               else if (ieee80211_is_probe_resp(hdr->frame_control)) {
-                       if (!memcmp(padapter->eeprompriv.mac_addr, hdr->addr1, ETH_ALEN))
-                               psta->sta_stats.rx_probersp_pkts++;
-                       else if (is_broadcast_mac_addr(hdr->addr1) || is_multicast_mac_addr(hdr->addr1))
-                               psta->sta_stats.rx_probersp_bm_pkts++;
-                       else
-                               psta->sta_stats.rx_probersp_uo_pkts++;
-               }
-       }
-
-       mgt_dispatcher(padapter, precv_frame);
-}
-
-static int validate_recv_data_frame(struct adapter *adapter,
-                                   struct recv_frame *precv_frame)
-{
-       struct sta_info *psta = NULL;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)precv_frame->rx_data;
-       struct rx_pkt_attrib    *pattrib = &precv_frame->attrib;
-       struct security_priv    *psecuritypriv = &adapter->securitypriv;
-       int ret;
-
-       memcpy(pattrib->dst, ieee80211_get_DA(hdr), ETH_ALEN);
-       memcpy(pattrib->src, ieee80211_get_SA(hdr), ETH_ALEN);
-
-       /* address4 is used only if both to_ds and from_ds are set */
-       if (ieee80211_has_a4(hdr->frame_control))
-               return _FAIL;
-
-       memcpy(pattrib->ra, hdr->addr1, ETH_ALEN);
-       memcpy(pattrib->ta, hdr->addr2, ETH_ALEN);
-
-       if (ieee80211_has_fromds(hdr->frame_control)) {
-               memcpy(pattrib->bssid, hdr->addr2, ETH_ALEN);
-               ret = ap2sta_data_frame(adapter, precv_frame, &psta);
-       } else if (ieee80211_has_tods(hdr->frame_control)) {
-               memcpy(pattrib->bssid, hdr->addr1, ETH_ALEN);
-               ret = sta2ap_data_frame(adapter, precv_frame, &psta);
-       } else {
-               memcpy(pattrib->bssid, hdr->addr3, ETH_ALEN);
-               ret = sta2sta_data_frame(adapter, precv_frame, &psta);
-       }
-
-       if (ret == _FAIL || ret == RTW_RX_HANDLED)
-               return ret;
-
-       if (!psta)
-               return _FAIL;
-
-       precv_frame->psta = psta;
-
-       pattrib->amsdu = 0;
-       pattrib->ack_policy = 0;
-       /* parsing QC field */
-       if (pattrib->qos) {
-               struct ieee80211_qos_hdr *qos_hdr = (struct ieee80211_qos_hdr *)hdr;
-
-               pattrib->priority = ieee80211_get_tid(hdr);
-               pattrib->ack_policy = GetAckpolicy(&qos_hdr->qos_ctrl);
-               pattrib->amsdu = GetAMsdu(&qos_hdr->qos_ctrl);
-               pattrib->hdrlen = sizeof(*qos_hdr);
-
-               if (pattrib->priority != 0 && pattrib->priority != 3)
-                       adapter->recvpriv.bIsAnyNonBEPkts = true;
-       } else {
-               pattrib->priority = 0;
-               pattrib->hdrlen = 24;
-       }
-
-       if (pattrib->order)/* HT-CTRL 11n */
-               pattrib->hdrlen += 4;
-
-       precv_frame->preorder_ctrl = &psta->recvreorder_ctrl[pattrib->priority];
-
-       /*  decache, drop duplicate recv packets */
-       if (recv_decache(precv_frame, ieee80211_has_retry(hdr->frame_control),
-                        &psta->sta_recvpriv.rxcache) == _FAIL)
-               return _FAIL;
-
-       if (pattrib->privacy) {
-               GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, is_multicast_ether_addr(pattrib->ra));
-
-               SET_ICE_IV_LEN(pattrib->iv_len, pattrib->icv_len, pattrib->encrypt);
-       } else {
-               pattrib->encrypt = 0;
-               pattrib->iv_len = 0;
-               pattrib->icv_len = 0;
-       }
-
-       return _SUCCESS;
-}
-
-static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv_frame)
-{
-       /* shall check frame subtype, to / from ds, da, bssid */
-
-       /* then call check if rx seq/frag. duplicated. */
-
-       int retval = _FAIL;
-       struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)precv_frame->rx_data;
-       struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
-
-       if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
-               int ch_set_idx = rtw_ch_set_search_ch(pmlmeext->channel_set, rtw_get_oper_ch(adapter));
-
-               if (ch_set_idx >= 0)
-                       pmlmeext->channel_set[ch_set_idx].rx_count++;
-       }
-
-       if ((hdr->frame_control & cpu_to_le16(IEEE80211_FCTL_VERS)) != 0)
-               return _FAIL;
-
-       pattrib->frag_num = le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG;
-       pattrib->seq_num = IEEE80211_SEQ_TO_SN(le16_to_cpu(hdr->seq_ctrl));
-
-       pattrib->pw_save = ieee80211_has_pm(hdr->frame_control);
-       pattrib->mfrag = ieee80211_has_morefrags(hdr->frame_control);
-       pattrib->mdata = ieee80211_has_moredata(hdr->frame_control);
-       pattrib->privacy = ieee80211_has_protected(hdr->frame_control);
-       pattrib->order = ieee80211_has_order(hdr->frame_control);
-
-       /* We return _SUCCESS only for data frames. */
-       if (ieee80211_is_mgmt(hdr->frame_control))
-               validate_recv_mgnt_frame(adapter, precv_frame);
-       else if (ieee80211_is_ctl(hdr->frame_control))
-               validate_recv_ctrl_frame(adapter, precv_frame);
-       else if (ieee80211_is_data(hdr->frame_control)) {
-               rtw_led_control(adapter, LED_CTL_RX);
-               pattrib->qos = ieee80211_is_data_qos(hdr->frame_control);
-               retval = validate_recv_data_frame(adapter, precv_frame);
-               if (retval == _FAIL) {
-                       struct recv_priv *precvpriv = &adapter->recvpriv;
-
-                       precvpriv->rx_drop++;
-               }
-       }
-
-       return retval;
-}
-
-/* remove the wlanhdr and add the eth_hdr */
-
-static int wlanhdr_to_ethhdr(struct recv_frame *precvframe)
-{
-       int     rmv_len;
-       u16     eth_type, len;
-       __be16 be_tmp;
-       u8      bsnaphdr;
-       u8      *psnap_type;
-       struct ieee80211_snap_hdr       *psnap;
-
-       int ret = _SUCCESS;
-       struct adapter                  *adapter = precvframe->adapter;
-       struct mlme_priv        *pmlmepriv = &adapter->mlmepriv;
-
-       u8      *ptr = precvframe->rx_data; /*  point to frame_ctrl field */
-       struct rx_pkt_attrib *pattrib = &precvframe->attrib;
-
-       if (pattrib->encrypt)
-               recvframe_pull_tail(precvframe, pattrib->icv_len);
-
-       psnap = (struct ieee80211_snap_hdr *)(ptr + pattrib->hdrlen + pattrib->iv_len);
-       psnap_type = ptr + pattrib->hdrlen + pattrib->iv_len + SNAP_SIZE;
-       /* convert hdr + possible LLC headers into Ethernet header */
-       if ((!memcmp(psnap, rtw_rfc1042_header, SNAP_SIZE) &&
-            memcmp(psnap_type, SNAP_ETH_TYPE_IPX, 2) &&
-           memcmp(psnap_type, SNAP_ETH_TYPE_APPLETALK_AARP, 2)) ||
-           !memcmp(psnap, rtw_bridge_tunnel_header, SNAP_SIZE)) {
-               /* remove RFC1042 or Bridge-Tunnel encapsulation and replace EtherType */
-               bsnaphdr = true;
-       } else {
-               /* Leave Ethernet header part of hdr and full payload */
-               bsnaphdr = false;
-       }
-
-       rmv_len = pattrib->hdrlen + pattrib->iv_len + (bsnaphdr ? SNAP_SIZE : 0);
-       len = precvframe->len - rmv_len;
-
-       memcpy(&be_tmp, ptr + rmv_len, 2);
-       eth_type = ntohs(be_tmp); /* pattrib->ether_type */
-       pattrib->eth_type = eth_type;
-
-       if ((check_fwstate(pmlmepriv, WIFI_MP_STATE))) {
-               ptr += rmv_len;
-               *ptr = 0x87;
-               *(ptr + 1) = 0x12;
-
-               eth_type = 0x8712;
-               /*  append rx status for mp test packets */
-               ptr = recvframe_pull(precvframe, (rmv_len - sizeof(struct ethhdr) + 2) - 24);
-               if (!ptr)
-                       return _FAIL;
-               memcpy(ptr, get_rxmem(precvframe), 24);
-               ptr += 24;
-       } else {
-               ptr = recvframe_pull(precvframe, (rmv_len - sizeof(struct ethhdr) + (bsnaphdr ? 2 : 0)));
-               if (!ptr)
-                       return _FAIL;
-       }
-
-       memcpy(ptr, pattrib->dst, ETH_ALEN);
-       memcpy(ptr + ETH_ALEN, pattrib->src, ETH_ALEN);
-
-       if (!bsnaphdr) {
-               be_tmp = htons(len);
-               memcpy(ptr + 12, &be_tmp, 2);
-       }
-
-       return ret;
-}
-
-/* perform defrag */
-static struct recv_frame *recvframe_defrag(struct adapter *adapter, struct __queue *defrag_q)
-{
-       struct list_head *plist, *phead;
-       u8 wlanhdr_offset;
-       u8      curfragnum;
-       struct recv_frame *pfhdr, *pnfhdr;
-       struct recv_frame *prframe, *pnextrframe;
-       struct __queue *pfree_recv_queue;
-
-       curfragnum = 0;
-       pfree_recv_queue = &adapter->recvpriv.free_recv_queue;
-
-       phead = get_list_head(defrag_q);
-       plist = phead->next;
-       pfhdr = container_of(plist, struct recv_frame, list);
-       prframe = (struct recv_frame *)pfhdr;
-       list_del_init(&prframe->list);
-
-       if (curfragnum != pfhdr->attrib.frag_num) {
-               /* the first fragment number must be 0 */
-               /* free the whole queue */
-               rtw_free_recvframe(prframe, pfree_recv_queue);
-               rtw_free_recvframe_queue(defrag_q, pfree_recv_queue);
-
-               return NULL;
-       }
-
-       curfragnum++;
-
-       plist = get_list_head(defrag_q);
-       plist = phead->next;
-       pfhdr = container_of(plist, struct recv_frame, list);
-       prframe = (struct recv_frame *)pfhdr;
-       list_del_init(&prframe->list);
-
-       plist = plist->next;
-
-       while (phead != plist) {
-               pnfhdr = container_of(plist, struct recv_frame, list);
-               pnextrframe = (struct recv_frame *)pnfhdr;
-
-               /* check the fragment sequence  (2nd ~n fragment frame) */
-
-               if (curfragnum != pnfhdr->attrib.frag_num) {
-                       /* the fragment number must be increasing  (after decache) */
-                       /* release the defrag_q & prframe */
-                       rtw_free_recvframe(prframe, pfree_recv_queue);
-                       rtw_free_recvframe_queue(defrag_q, pfree_recv_queue);
-                       return NULL;
-               }
-
-               curfragnum++;
-
-               /* copy the 2nd~n fragment frame's payload to the first fragment */
-               /* get the 2nd~last fragment frame's payload */
-
-               wlanhdr_offset = pnfhdr->attrib.hdrlen + pnfhdr->attrib.iv_len;
-
-               recvframe_pull(pnextrframe, wlanhdr_offset);
-
-               /* append  to first fragment frame's tail (if privacy frame, pull the ICV) */
-               recvframe_pull_tail(prframe, pfhdr->attrib.icv_len);
-
-               /* memcpy */
-               memcpy(pfhdr->rx_tail, pnfhdr->rx_data, pnfhdr->len);
-
-               recvframe_put(prframe, pnfhdr->len);
-
-               pfhdr->attrib.icv_len = pnfhdr->attrib.icv_len;
-               plist = plist->next;
-       }
-
-       /* free the defrag_q queue and return the prframe */
-       rtw_free_recvframe_queue(defrag_q, pfree_recv_queue);
-
-       return prframe;
-}
-
-/* check if need to defrag, if needed queue the frame to defrag_q */
-struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       u8      ismfrag;
-       u8      fragnum;
-       u8      *psta_addr;
-       struct recv_frame *pfhdr;
-       struct sta_info *psta;
-       struct sta_priv *pstapriv;
-       struct list_head *phead;
-       struct recv_frame *prtnframe = NULL;
-       struct __queue *pfree_recv_queue, *pdefrag_q;
-
-       pstapriv = &padapter->stapriv;
-
-       pfhdr = precv_frame;
-
-       pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
-
-       /* need to define struct of wlan header frame ctrl */
-       ismfrag = pfhdr->attrib.mfrag;
-       fragnum = pfhdr->attrib.frag_num;
-
-       psta_addr = pfhdr->attrib.ta;
-       psta = rtw_get_stainfo(pstapriv, psta_addr);
-       if (!psta) {
-               __le16 fc = *(__le16 *)pfhdr->rx_data;
-
-               if (ieee80211_is_data(fc)) {
-                       psta = rtw_get_bcmc_stainfo(padapter);
-                       pdefrag_q = &psta->sta_recvpriv.defrag_q;
-               } else {
-                       pdefrag_q = NULL;
-               }
-       } else {
-               pdefrag_q = &psta->sta_recvpriv.defrag_q;
-       }
-
-       if ((ismfrag == 0) && (fragnum == 0))
-               prtnframe = precv_frame;/* isn't a fragment frame */
-
-       if (ismfrag == 1) {
-               /* 0~(n-1) fragment frame */
-               /* enqueue to defraf_g */
-               if (pdefrag_q) {
-                       if (fragnum == 0) {
-                               /* the first fragment */
-                               if (!list_empty(&pdefrag_q->queue)) {
-                                       /* free current defrag_q */
-                                       rtw_free_recvframe_queue(pdefrag_q, pfree_recv_queue);
-                               }
-                       }
-
-                       /* Then enqueue the 0~(n-1) fragment into the defrag_q */
-
-                       phead = get_list_head(pdefrag_q);
-                       list_add_tail(&pfhdr->list, phead);
-
-                       prtnframe = NULL;
-               } else {
-                       /* can't find this ta's defrag_queue, so free this recv_frame */
-                       if (precv_frame && pfree_recv_queue)
-                               rtw_free_recvframe(precv_frame, pfree_recv_queue);
-                       prtnframe = NULL;
-               }
-       }
-
-       if ((ismfrag == 0) && (fragnum != 0)) {
-               /* the last fragment frame */
-               /* enqueue the last fragment */
-               if (pdefrag_q) {
-                       phead = get_list_head(pdefrag_q);
-                       list_add_tail(&pfhdr->list, phead);
-
-                       /* call recvframe_defrag to defrag */
-                       precv_frame = recvframe_defrag(padapter, pdefrag_q);
-                       prtnframe = precv_frame;
-               } else {
-                       /* can't find this ta's defrag_queue, so free this recv_frame */
-                       if (precv_frame && pfree_recv_queue)
-                               rtw_free_recvframe(precv_frame, pfree_recv_queue);
-                       prtnframe = NULL;
-               }
-       }
-
-       if (prtnframe && prtnframe->attrib.privacy) {
-               /* after defrag we must check tkip mic code */
-               if (recvframe_chkmic(padapter,  prtnframe) == _FAIL) {
-                       if (precv_frame && pfree_recv_queue)
-                               rtw_free_recvframe(prtnframe, pfree_recv_queue);
-                       prtnframe = NULL;
-               }
-       }
-
-       return prtnframe;
-}
-
-static int amsdu_to_msdu(struct adapter *padapter, struct recv_frame *prframe)
-{
-       int     a_len, padding_len;
-       u16     eth_type, nSubframe_Length;
-       u8      nr_subframes, i;
-       unsigned char *pdata;
-       struct rx_pkt_attrib *pattrib;
-       struct sk_buff *sub_skb, *subframes[MAX_SUBFRAME_COUNT];
-
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-       struct __queue *pfree_recv_queue = &precvpriv->free_recv_queue;
-
-       nr_subframes = 0;
-
-       pattrib = &prframe->attrib;
-
-       recvframe_pull(prframe, prframe->attrib.hdrlen);
-
-       if (prframe->attrib.iv_len > 0)
-               recvframe_pull(prframe, prframe->attrib.iv_len);
-
-       a_len = prframe->len;
-
-       pdata = prframe->rx_data;
-
-       while (a_len > ETH_HLEN) {
-               /* Offset 12 denote 2 mac address */
-               nSubframe_Length = RTW_GET_BE16(pdata + 12);
-
-               if (a_len < ETH_HLEN + nSubframe_Length)
-                       goto exit;
-
-               /* move the data point to data content */
-               pdata += ETH_HLEN;
-               a_len -= ETH_HLEN;
-
-               /* Allocate new skb for releasing to upper layer */
-               sub_skb = dev_alloc_skb(nSubframe_Length + 12);
-               if (sub_skb) {
-                       skb_reserve(sub_skb, 12);
-                       skb_put_data(sub_skb, pdata, nSubframe_Length);
-               } else {
-                       sub_skb = skb_clone(prframe->pkt, GFP_ATOMIC);
-                       if (sub_skb) {
-                               sub_skb->data = pdata;
-                               sub_skb->len = nSubframe_Length;
-                               skb_set_tail_pointer(sub_skb, nSubframe_Length);
-                       } else {
-                               break;
-                       }
-               }
-
-               subframes[nr_subframes++] = sub_skb;
-
-               if (nr_subframes >= MAX_SUBFRAME_COUNT)
-                       break;
-
-               pdata += nSubframe_Length;
-               a_len -= nSubframe_Length;
-               if (a_len != 0) {
-                       padding_len = 4 - ((nSubframe_Length + ETH_HLEN) & (4 - 1));
-                       if (padding_len == 4)
-                               padding_len = 0;
-
-                       if (a_len < padding_len)
-                               goto exit;
-
-                       pdata += padding_len;
-                       a_len -= padding_len;
-               }
-       }
-
-       for (i = 0; i < nr_subframes; i++) {
-               sub_skb = subframes[i];
-               /* convert hdr + possible LLC headers into Ethernet header */
-               eth_type = RTW_GET_BE16(&sub_skb->data[6]);
-               if (sub_skb->len >= 8 &&
-                   ((!memcmp(sub_skb->data, rtw_rfc1042_header, SNAP_SIZE) &&
-                         eth_type != ETH_P_AARP && eth_type != ETH_P_IPX) ||
-                        !memcmp(sub_skb->data, rtw_bridge_tunnel_header, SNAP_SIZE))) {
-                       /* remove RFC1042 or Bridge-Tunnel encapsulation and replace EtherType */
-                       skb_pull(sub_skb, SNAP_SIZE);
-                       memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->src, ETH_ALEN);
-                       memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->dst, ETH_ALEN);
-               } else {
-                       __be16 len;
-                       /* Leave Ethernet header part of hdr and full payload */
-                       len = htons(sub_skb->len);
-                       memcpy(skb_push(sub_skb, 2), &len, 2);
-                       memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->src, ETH_ALEN);
-                       memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->dst, ETH_ALEN);
-               }
-
-               /* Indicate the packets to upper layer */
-                       /*  Insert NAT2.5 RX here! */
-               sub_skb->protocol = eth_type_trans(sub_skb, padapter->pnetdev);
-               sub_skb->dev = padapter->pnetdev;
-
-               sub_skb->ip_summed = CHECKSUM_NONE;
-
-               netif_rx(sub_skb);
-       }
-
-exit:
-
-       prframe->len = 0;
-       rtw_free_recvframe(prframe, pfree_recv_queue);/* free this recv_frame */
-
-       return _SUCCESS;
-}
-
-static bool check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_num)
-{
-       u8      wsize = preorder_ctrl->wsize_b;
-       u16     wend = (preorder_ctrl->indicate_seq + wsize - 1) & 0xFFF;/*  4096; */
-
-       /*  Rx Reorder initialize condition. */
-       if (preorder_ctrl->indicate_seq == 0xFFFF)
-               preorder_ctrl->indicate_seq = seq_num;
-
-       /*  Drop out the packet which SeqNum is smaller than WinStart */
-       if (SN_LESS(seq_num, preorder_ctrl->indicate_seq))
-               return false;
-
-       /*  */
-       /*  Sliding window manipulation. Conditions includes: */
-       /*  1. Incoming SeqNum is equal to WinStart =>Window shift 1 */
-       /*  2. Incoming SeqNum is larger than the WinEnd => Window shift N */
-       /*  */
-       if (SN_EQUAL(seq_num, preorder_ctrl->indicate_seq)) {
-               preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) & 0xFFF;
-       } else if (SN_LESS(wend, seq_num)) {
-               if (seq_num >= (wsize - 1))
-                       preorder_ctrl->indicate_seq = seq_num + 1 - wsize;
-               else
-                       preorder_ctrl->indicate_seq = 0xFFF - (wsize - (seq_num + 1)) + 1;
-       }
-
-       return true;
-}
-
-static bool enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, struct recv_frame *prframe)
-{
-       struct rx_pkt_attrib *pattrib = &prframe->attrib;
-       struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-       struct list_head *phead, *plist;
-       struct recv_frame *hdr;
-       struct rx_pkt_attrib *pnextattrib;
-
-       phead = get_list_head(ppending_recvframe_queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               hdr = container_of(plist, struct recv_frame, list);
-               pnextattrib = &hdr->attrib;
-
-               if (SN_LESS(pnextattrib->seq_num, pattrib->seq_num))
-                       plist = plist->next;
-               else if (SN_EQUAL(pnextattrib->seq_num, pattrib->seq_num))
-                       return false;
-               else
-                       break;
-       }
-
-       list_del_init(&prframe->list);
-
-       list_add_tail(&prframe->list, plist);
-       return true;
-}
-
-static int rtw_recv_indicatepkt(struct adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct recv_priv *precvpriv;
-       struct __queue *pfree_recv_queue;
-       struct sk_buff *skb;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       precvpriv = &padapter->recvpriv;
-       pfree_recv_queue = &precvpriv->free_recv_queue;
-
-       skb = precv_frame->pkt;
-       if (!skb)
-               goto _recv_indicatepkt_drop;
-
-       skb->data = precv_frame->rx_data;
-
-       skb_set_tail_pointer(skb, precv_frame->len);
-
-       skb->len = precv_frame->len;
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               struct sk_buff *pskb2 = NULL;
-               struct sta_info *psta = NULL;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-               struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-               bool bmcast = is_multicast_ether_addr(pattrib->dst);
-
-               if (memcmp(pattrib->dst, myid(&padapter->eeprompriv), ETH_ALEN)) {
-                       if (bmcast) {
-                               psta = rtw_get_bcmc_stainfo(padapter);
-                               pskb2 = skb_clone(skb, GFP_ATOMIC);
-                       } else {
-                               psta = rtw_get_stainfo(pstapriv, pattrib->dst);
-                       }
-
-                       if (psta) {
-                               struct net_device *pnetdev;
-
-                               pnetdev = (struct net_device *)padapter->pnetdev;
-                               skb->dev = pnetdev;
-                               skb_set_queue_mapping(skb, rtw_recv_select_queue(skb));
-
-                               rtw_xmit_entry(skb, pnetdev);
-
-                               if (bmcast)
-                                       skb = pskb2;
-                               else
-                                       goto _recv_indicatepkt_end;
-                       }
-               }
-       }
-
-       rcu_read_lock();
-       rcu_dereference(padapter->pnetdev->rx_handler_data);
-       rcu_read_unlock();
-
-       skb->ip_summed = CHECKSUM_NONE;
-       skb->dev = padapter->pnetdev;
-       skb->protocol = eth_type_trans(skb, padapter->pnetdev);
-
-       netif_rx(skb);
-
-_recv_indicatepkt_end:
-
-       /*  pointers to NULL before rtw_free_recvframe() */
-       precv_frame->pkt = NULL;
-
-       rtw_free_recvframe(precv_frame, pfree_recv_queue);
-
-       return _SUCCESS;
-
-_recv_indicatepkt_drop:
-
-       /* enqueue back to free_recv_queue */
-       rtw_free_recvframe(precv_frame, pfree_recv_queue);
-
-       return _FAIL;
-}
-
-static bool recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced)
-{
-       struct list_head *phead, *plist;
-       struct recv_frame *prframe;
-       struct rx_pkt_attrib *pattrib;
-       int bPktInBuf = false;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-       struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-
-       phead =         get_list_head(ppending_recvframe_queue);
-       plist = phead->next;
-
-       /*  Handling some condition for forced indicate case. */
-       if (bforced) {
-               if (list_empty(phead))
-                       return true;
-
-               prframe = container_of(plist, struct recv_frame, list);
-               pattrib = &prframe->attrib;
-               preorder_ctrl->indicate_seq = pattrib->seq_num;
-       }
-
-       /*  Prepare indication list and indication. */
-       /*  Check if there is any packet need indicate. */
-       while (!list_empty(phead)) {
-               prframe = container_of(plist, struct recv_frame, list);
-               pattrib = &prframe->attrib;
-
-               if (!SN_LESS(preorder_ctrl->indicate_seq, pattrib->seq_num)) {
-                       plist = plist->next;
-                       list_del_init(&prframe->list);
-
-                       if (SN_EQUAL(preorder_ctrl->indicate_seq, pattrib->seq_num))
-                               preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) & 0xFFF;
-
-                       /* Set this as a lock to make sure that only one thread is indicating packet. */
-
-                       /* indicate this recv_frame */
-                       if (!pattrib->amsdu) {
-                               if ((!padapter->bDriverStopped) &&
-                                   (!padapter->bSurpriseRemoved))
-                                       rtw_recv_indicatepkt(padapter, prframe);/* indicate this recv_frame */
-                       } else if (pattrib->amsdu == 1) {
-                               if (amsdu_to_msdu(padapter, prframe) != _SUCCESS)
-                                       rtw_free_recvframe(prframe, &precvpriv->free_recv_queue);
-                       } else {
-                               /* error condition; */
-                       }
-
-                       /* Update local variables. */
-                       bPktInBuf = false;
-               } else {
-                       bPktInBuf = true;
-                       break;
-               }
-       }
-       return bPktInBuf;
-}
-
-static int recv_indicatepkt_reorder(struct adapter *padapter, struct recv_frame *prframe)
-{
-       int retval = _SUCCESS;
-       struct rx_pkt_attrib *pattrib = &prframe->attrib;
-       struct recv_reorder_ctrl *preorder_ctrl = prframe->preorder_ctrl;
-       struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-
-       if (!pattrib->amsdu) {
-               /* s1. */
-               wlanhdr_to_ethhdr(prframe);
-
-               if (!pattrib->qos) {
-                       if (!padapter->bDriverStopped &&
-                           !padapter->bSurpriseRemoved) {
-                               rtw_recv_indicatepkt(padapter, prframe);
-                               return _SUCCESS;
-                       }
-
-                       return _FAIL;
-               }
-
-               if (!preorder_ctrl->enable) {
-                       /* indicate this recv_frame */
-                       preorder_ctrl->indicate_seq = pattrib->seq_num;
-                       rtw_recv_indicatepkt(padapter, prframe);
-
-                       preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) % 4096;
-                       return _SUCCESS;
-               }
-       } else if (pattrib->amsdu == 1) { /* temp filter -> means didn't support A-MSDUs in a A-MPDU */
-               if (!preorder_ctrl->enable) {
-                       preorder_ctrl->indicate_seq = pattrib->seq_num;
-                       retval = amsdu_to_msdu(padapter, prframe);
-
-                       preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) % 4096;
-                       return retval;
-               }
-       }
-
-       spin_lock_bh(&ppending_recvframe_queue->lock);
-
-       /* s2. check if winstart_b(indicate_seq) needs to been updated */
-       if (!check_indicate_seq(preorder_ctrl, pattrib->seq_num))
-               goto _err_exit;
-
-       /* s3. Insert all packet into Reorder Queue to maintain its ordering. */
-       if (!enqueue_reorder_recvframe(preorder_ctrl, prframe))
-               goto _err_exit;
-
-       /* s4. */
-       /*  Indication process. */
-       /*  After Packet dropping and Sliding Window shifting as above, we can now just indicate the packets */
-       /*  with the SeqNum smaller than latest WinStart and buffer other packets. */
-       /*  */
-       /*  For Rx Reorder condition: */
-       /*  1. All packets with SeqNum smaller than WinStart => Indicate */
-       /*  2. All packets with SeqNum larger than or equal to WinStart => Buffer it. */
-       /*  */
-
-       /* recv_indicatepkts_in_order(padapter, preorder_ctrl, true); */
-       if (recv_indicatepkts_in_order(padapter, preorder_ctrl, false)) {
-               _set_timer(&preorder_ctrl->reordering_ctrl_timer, REORDER_WAIT_TIME);
-               spin_unlock_bh(&ppending_recvframe_queue->lock);
-       } else {
-               spin_unlock_bh(&ppending_recvframe_queue->lock);
-               _cancel_timer_ex(&preorder_ctrl->reordering_ctrl_timer);
-       }
-
-       return _SUCCESS;
-
-_err_exit:
-
-       spin_unlock_bh(&ppending_recvframe_queue->lock);
-
-       return _FAIL;
-}
-
-void rtw_reordering_ctrl_timeout_handler(void *pcontext)
-{
-       struct recv_reorder_ctrl *preorder_ctrl = (struct recv_reorder_ctrl *)pcontext;
-       struct adapter *padapter = preorder_ctrl->padapter;
-       struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-
-       if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
-               return;
-
-       spin_lock_bh(&ppending_recvframe_queue->lock);
-
-       if (recv_indicatepkts_in_order(padapter, preorder_ctrl, true))
-               _set_timer(&preorder_ctrl->reordering_ctrl_timer, REORDER_WAIT_TIME);
-
-       spin_unlock_bh(&ppending_recvframe_queue->lock);
-}
-
-static int process_recv_indicatepkts(struct adapter *padapter, struct recv_frame *prframe)
-{
-       int retval = _SUCCESS;
-       /* struct recv_priv *precvpriv = &padapter->recvpriv; */
-       /* struct rx_pkt_attrib *pattrib = &prframe->attrib; */
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv  *phtpriv = &pmlmepriv->htpriv;
-
-       if (phtpriv->ht_option) {  /* B/G/N Mode */
-               /* prframe->preorder_ctrl = &precvpriv->recvreorder_ctrl[pattrib->priority]; */
-
-               if (recv_indicatepkt_reorder(padapter, prframe) != _SUCCESS) {
-                       /*  including perform A-MPDU Rx Ordering Buffer Control */
-                       if ((!padapter->bDriverStopped) &&
-                           (!padapter->bSurpriseRemoved)) {
-                               retval = _FAIL;
-                               return retval;
-                       }
-               }
-       } else { /* B/G mode */
-               retval = wlanhdr_to_ethhdr(prframe);
-               if (retval != _SUCCESS)
-                       return retval;
-
-               if ((!padapter->bDriverStopped) &&
-                   (!padapter->bSurpriseRemoved)) {
-                       /* indicate this recv_frame */
-                       rtw_recv_indicatepkt(padapter, prframe);
-               } else {
-                       retval = _FAIL;
-                       return retval;
-               }
-       }
-
-       return retval;
-}
-
-static int recv_func_prehandle(struct adapter *padapter, struct recv_frame *rframe)
-{
-       int ret = _SUCCESS;
-       struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
-
-       /* check the frame crtl field and decache */
-       ret = validate_recv_frame(padapter, rframe);
-       if (ret != _SUCCESS)
-               rtw_free_recvframe(rframe, pfree_recv_queue);/* free this recv_frame */
-
-       return ret;
-}
-
-static int recv_func_posthandle(struct adapter *padapter, struct recv_frame *prframe)
-{
-       int ret = _SUCCESS;
-       struct recv_frame *orig_prframe = prframe;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-       struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
-
-       /*  DATA FRAME */
-       rtw_led_control(padapter, LED_CTL_RX);
-
-       prframe = decryptor(padapter, prframe);
-       if (!prframe) {
-               ret = _FAIL;
-               goto _recv_data_drop;
-       }
-
-       prframe = recvframe_chk_defrag(padapter, prframe);
-       if (!prframe)
-               goto _recv_data_drop;
-
-       prframe = portctrl(padapter, prframe);
-       if (!prframe) {
-               ret = _FAIL;
-               goto _recv_data_drop;
-       }
-
-       count_rx_stats(padapter, prframe, NULL);
-
-       ret = process_recv_indicatepkts(padapter, prframe);
-       if (ret != _SUCCESS) {
-               rtw_free_recvframe(orig_prframe, pfree_recv_queue);/* free this recv_frame */
-               goto _recv_data_drop;
-       }
-       return ret;
-
-_recv_data_drop:
-       precvpriv->rx_drop++;
-       return ret;
-}
-
-static int recv_func(struct adapter *padapter, struct recv_frame *rframe)
-{
-       int ret;
-       struct rx_pkt_attrib *prxattrib = &rframe->attrib;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_priv *mlmepriv = &padapter->mlmepriv;
-       struct recv_priv *recvpriv = &padapter->recvpriv;
-
-       /* check if need to handle uc_swdec_pending_queue*/
-       if (check_fwstate(mlmepriv, WIFI_STATION_STATE) &&
-           psecuritypriv->busetkipkey) {
-               struct recv_frame *pending_frame;
-
-               while ((pending_frame = rtw_alloc_recvframe(&padapter->recvpriv.uc_swdec_pending_queue)))
-                       recv_func_posthandle(padapter, pending_frame);
-       }
-
-       ret = recv_func_prehandle(padapter, rframe);
-
-       if (ret == _SUCCESS) {
-               /* check if need to enqueue into uc_swdec_pending_queue*/
-               if (check_fwstate(mlmepriv, WIFI_STATION_STATE) &&
-                   !is_multicast_ether_addr(prxattrib->ra) && prxattrib->encrypt > 0 &&
-                   (prxattrib->bdecrypted == 0 || psecuritypriv->sw_decrypt) &&
-                    psecuritypriv->ndisauthtype == Ndis802_11AuthModeWPAPSK &&
-                    !psecuritypriv->busetkipkey) {
-                       rtw_enqueue_recvframe(rframe, &padapter->recvpriv.uc_swdec_pending_queue);
-                       if (recvpriv->free_recvframe_cnt < NR_RECVFRAME / 4) {
-                               /*
-                                * to prevent from recvframe starvation,
-                                * get recvframe from uc_swdec_pending_queue to
-                                * free_recvframe_cnt
-                                */
-                               rframe = rtw_alloc_recvframe(&padapter->recvpriv.uc_swdec_pending_queue);
-                               if (rframe)
-                                       goto do_posthandle;
-                       }
-                       goto exit;
-               }
-do_posthandle:
-               ret = recv_func_posthandle(padapter, rframe);
-       }
-
-exit:
-       return ret;
-}
-
-s32 rtw_recv_entry(struct recv_frame *precvframe)
-{
-       struct adapter *padapter;
-       struct recv_priv *precvpriv;
-       s32 ret = _SUCCESS;
-
-       padapter = precvframe->adapter;
-
-       precvpriv = &padapter->recvpriv;
-
-       ret = recv_func(padapter, precvframe);
-       if (ret == _FAIL)
-               goto _recv_entry_drop;
-
-       precvpriv->rx_pkts++;
-
-       return ret;
-
-_recv_entry_drop:
-
-       return ret;
-}
-
-static void rtw_signal_stat_timer_hdl(struct timer_list *t)
-{
-       struct adapter *adapter = from_timer(adapter, t, recvpriv.signal_stat_timer);
-       struct recv_priv *recvpriv = &adapter->recvpriv;
-
-       u32 tmp_s, tmp_q;
-       u8 avg_signal_strength = 0;
-       u8 avg_signal_qual = 0;
-       u8 _alpha = 3; /*  this value is based on converging_constant = 5000 and sampling_interval = 1000 */
-
-       if (adapter->recvpriv.is_signal_dbg) {
-               /* update the user specific value, signal_strength_dbg, to signal_strength, rssi */
-               adapter->recvpriv.signal_strength = adapter->recvpriv.signal_strength_dbg;
-               adapter->recvpriv.rssi = (s8)translate_percentage_to_dbm((u8)adapter->recvpriv.signal_strength_dbg);
-       } else {
-               if (recvpriv->signal_strength_data.update_req == 0) {/*  update_req is clear, means we got rx */
-                       avg_signal_strength = recvpriv->signal_strength_data.avg_val;
-                       /*  after avg_vals are acquired, we can re-stat the signal values */
-                       recvpriv->signal_strength_data.update_req = 1;
-               }
-
-               if (recvpriv->signal_qual_data.update_req == 0) {/*  update_req is clear, means we got rx */
-                       avg_signal_qual = recvpriv->signal_qual_data.avg_val;
-                       /*  after avg_vals are acquired, we can re-stat the signal values */
-                       recvpriv->signal_qual_data.update_req = 1;
-               }
-
-               /* update value of signal_strength, rssi, signal_qual */
-               if (!check_fwstate(&adapter->mlmepriv, _FW_UNDER_SURVEY)) {
-                       tmp_s = (avg_signal_strength + (_alpha - 1) * recvpriv->signal_strength);
-                       if (tmp_s % _alpha)
-                               tmp_s = tmp_s / _alpha + 1;
-                       else
-                               tmp_s = tmp_s / _alpha;
-                       if (tmp_s > 100)
-                               tmp_s = 100;
-
-                       tmp_q = (avg_signal_qual + (_alpha - 1) * recvpriv->signal_qual);
-                       if (tmp_q % _alpha)
-                               tmp_q = tmp_q / _alpha + 1;
-                       else
-                               tmp_q = tmp_q / _alpha;
-                       if (tmp_q > 100)
-                               tmp_q = 100;
-
-                       recvpriv->signal_strength = tmp_s;
-                       recvpriv->rssi = (s8)translate_percentage_to_dbm(tmp_s);
-                       recvpriv->signal_qual = tmp_q;
-               }
-       }
-       rtw_set_signal_stat_timer(recvpriv);
-}
diff --git a/drivers/staging/r8188eu/core/rtw_rf.c b/drivers/staging/r8188eu/core/rtw_rf.c
deleted file mode 100644 (file)
index 2d2f0fc..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/drv_types.h"
-
-static const u32 ch_freq_map[] = {
-       2412,
-       2417,
-       2422,
-       2427,
-       2432,
-       2437,
-       2442,
-       2447,
-       2452,
-       2457,
-       2462,
-       2467,
-       2472,
-       2484
-};
-
-u32 rtw_ch2freq(u32 channel)
-{
-       if (channel == 0 || channel > ARRAY_SIZE(ch_freq_map))
-               return 2412;
-
-       return ch_freq_map[channel - 1];
-}
diff --git a/drivers/staging/r8188eu/core/rtw_security.c b/drivers/staging/r8188eu/core/rtw_security.c
deleted file mode 100644 (file)
index 780019c..0000000
+++ /dev/null
@@ -1,1374 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define  _RTW_SECURITY_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/wifi.h"
-#include "../include/osdep_intf.h"
-
-/* WEP related ===== */
-
-/*
-       Need to consider the fragment  situation
-*/
-void rtw_wep_encrypt(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{      /*  exclude ICV */
-       union {
-               __le32 f0;
-               u8 f1[4];
-       } crc;
-
-       int     curfragnum, length;
-       u32     keylength;
-
-       u8      *pframe, *payload, *iv;    /* wepkey */
-       u8      wepkey[16];
-       u8   hw_hdr_offset = 0;
-       struct  pkt_attrib       *pattrib = &pxmitframe->attrib;
-       struct  security_priv   *psecuritypriv = &padapter->securitypriv;
-       struct  xmit_priv               *pxmitpriv = &padapter->xmitpriv;
-       struct arc4_ctx *ctx = &psecuritypriv->xmit_arc4_ctx;
-
-       if (!pxmitframe->buf_addr)
-               return;
-
-       hw_hdr_offset = TXDESC_SIZE + pxmitframe->pkt_offset * PACKET_OFFSET_SZ;
-       pframe = pxmitframe->buf_addr + hw_hdr_offset;
-
-       /* start to encrypt each fragment */
-       if ((pattrib->encrypt == _WEP40_) || (pattrib->encrypt == _WEP104_)) {
-               keylength = psecuritypriv->dot11DefKeylen[psecuritypriv->dot11PrivacyKeyIndex];
-
-               for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {
-                       iv = pframe + pattrib->hdrlen;
-                       memcpy(&wepkey[0], iv, 3);
-                       memcpy(&wepkey[3], &psecuritypriv->dot11DefKey[psecuritypriv->dot11PrivacyKeyIndex].skey[0], keylength);
-                       payload = pframe + pattrib->iv_len + pattrib->hdrlen;
-
-                       if ((curfragnum + 1) == pattrib->nr_frags) {    /* the last fragment */
-                               length = pattrib->last_txcmdsz - pattrib->hdrlen - pattrib->iv_len - pattrib->icv_len;
-
-                               crc.f0 = cpu_to_le32(~crc32_le(~0, payload, length));
-
-                               arc4_setkey(ctx, wepkey, 3 + keylength);
-                               arc4_crypt(ctx, payload, payload, length);
-                               arc4_crypt(ctx, payload + length, crc.f1, 4);
-                       } else {
-                               length = pxmitpriv->frag_len - pattrib->hdrlen - pattrib->iv_len - pattrib->icv_len;
-                               crc.f0 = cpu_to_le32(~crc32_le(~0, payload, length));
-                               arc4_setkey(ctx, wepkey, 3 + keylength);
-                               arc4_crypt(ctx, payload, payload, length);
-                               arc4_crypt(ctx, payload + length, crc.f1, 4);
-
-                               pframe += pxmitpriv->frag_len;
-                               pframe = PTR_ALIGN(pframe, 4);
-                       }
-               }
-       }
-
-}
-
-void rtw_wep_decrypt(struct adapter *padapter, struct recv_frame *precvframe)
-{
-       /*  exclude ICV */
-       int     length;
-       u32     keylength;
-       u8      *pframe, *payload, *iv, wepkey[16];
-       u8       keyindex;
-       struct  rx_pkt_attrib    *prxattrib = &precvframe->attrib;
-       struct  security_priv   *psecuritypriv = &padapter->securitypriv;
-       struct arc4_ctx *ctx = &psecuritypriv->recv_arc4_ctx;
-
-       pframe = precvframe->rx_data;
-
-       /* start to decrypt recvframe */
-       if ((prxattrib->encrypt == _WEP40_) || (prxattrib->encrypt == _WEP104_)) {
-               iv = pframe + prxattrib->hdrlen;
-               keyindex = prxattrib->key_index;
-               keylength = psecuritypriv->dot11DefKeylen[keyindex];
-               memcpy(&wepkey[0], iv, 3);
-               memcpy(&wepkey[3], &psecuritypriv->dot11DefKey[keyindex].skey[0], keylength);
-               length = precvframe->len - prxattrib->hdrlen - prxattrib->iv_len;
-
-               payload = pframe + prxattrib->iv_len + prxattrib->hdrlen;
-
-               /* decrypt payload include icv */
-               arc4_setkey(ctx, wepkey, 3 + keylength);
-               arc4_crypt(ctx, payload, payload, length);
-       }
-}
-
-/* 3           ===== TKIP related ===== */
-
-static u32 secmicgetuint32(u8 *p)
-/*  Convert from Byte[] to Us3232 in a portable way */
-{
-       s32 i;
-       u32 res = 0;
-
-       for (i = 0; i < 4; i++)
-               res |= ((u32)(*p++)) << (8 * i);
-
-       return res;
-}
-
-static void secmicputuint32(u8 *p, u32 val)
-/*  Convert from Us3232 to Byte[] in a portable way */
-{
-       long i;
-
-       for (i = 0; i < 4; i++) {
-               *p++ = (u8)(val & 0xff);
-               val >>= 8;
-       }
-
-}
-
-static void secmicclear(struct mic_data *pmicdata)
-{
-/*  Reset the state to the empty message. */
-
-       pmicdata->L = pmicdata->K0;
-       pmicdata->R = pmicdata->K1;
-       pmicdata->nBytesInM = 0;
-       pmicdata->M = 0;
-
-}
-
-void rtw_secmicsetkey(struct mic_data *pmicdata, u8 *key)
-{
-       /*  Set the key */
-
-       pmicdata->K0 = secmicgetuint32(key);
-       pmicdata->K1 = secmicgetuint32(key + 4);
-       /*  and reset the message */
-       secmicclear(pmicdata);
-
-}
-
-void rtw_secmicappendbyte(struct mic_data *pmicdata, u8 b)
-{
-
-       /*  Append the byte to our word-sized buffer */
-       pmicdata->M |= ((unsigned long)b) << (8 * pmicdata->nBytesInM);
-       pmicdata->nBytesInM++;
-       /*  Process the word if it is full. */
-       if (pmicdata->nBytesInM >= 4) {
-               pmicdata->L ^= pmicdata->M;
-               pmicdata->R ^= ROL32(pmicdata->L, 17);
-               pmicdata->L += pmicdata->R;
-               pmicdata->R ^= ((pmicdata->L & 0xff00ff00) >> 8) | ((pmicdata->L & 0x00ff00ff) << 8);
-               pmicdata->L += pmicdata->R;
-               pmicdata->R ^= ROL32(pmicdata->L, 3);
-               pmicdata->L += pmicdata->R;
-               pmicdata->R ^= ROR32(pmicdata->L, 2);
-               pmicdata->L += pmicdata->R;
-               /*  Clear the buffer */
-               pmicdata->M = 0;
-               pmicdata->nBytesInM = 0;
-       }
-
-}
-
-void rtw_secmicappend(struct mic_data *pmicdata, u8 *src, u32 nbytes)
-{
-
-       /*  This is simple */
-       while (nbytes > 0) {
-               rtw_secmicappendbyte(pmicdata, *src++);
-               nbytes--;
-       }
-
-}
-
-void rtw_secgetmic(struct mic_data *pmicdata, u8 *dst)
-{
-
-       /*  Append the minimum padding */
-       rtw_secmicappendbyte(pmicdata, 0x5a);
-       rtw_secmicappendbyte(pmicdata, 0);
-       rtw_secmicappendbyte(pmicdata, 0);
-       rtw_secmicappendbyte(pmicdata, 0);
-       rtw_secmicappendbyte(pmicdata, 0);
-       /*  and then zeroes until the length is a multiple of 4 */
-       while (pmicdata->nBytesInM != 0)
-               rtw_secmicappendbyte(pmicdata, 0);
-       /*  The appendByte function has already computed the result. */
-       secmicputuint32(dst, pmicdata->L);
-       secmicputuint32(dst + 4, pmicdata->R);
-       /*  Reset to the empty message. */
-       secmicclear(pmicdata);
-
-}
-
-void rtw_seccalctkipmic(u8 *key, u8 *header, u8 *data, u32 data_len, u8 *mic_code, u8 pri)
-{
-       struct mic_data micdata;
-       u8 priority[4] = {0x0, 0x0, 0x0, 0x0};
-
-       rtw_secmicsetkey(&micdata, key);
-       priority[0] = pri;
-
-       /* Michael MIC pseudo header: DA, SA, 3 x 0, Priority */
-       if (header[1] & 1) {   /* ToDS == 1 */
-               rtw_secmicappend(&micdata, &header[16], 6);  /* DA */
-               if (header[1] & 2)  /* From Ds == 1 */
-                       rtw_secmicappend(&micdata, &header[24], 6);
-               else
-                       rtw_secmicappend(&micdata, &header[10], 6);
-       } else {        /* ToDS == 0 */
-               rtw_secmicappend(&micdata, &header[4], 6);   /* DA */
-               if (header[1] & 2)  /* From Ds == 1 */
-                       rtw_secmicappend(&micdata, &header[16], 6);
-               else
-                       rtw_secmicappend(&micdata, &header[10], 6);
-       }
-       rtw_secmicappend(&micdata, &priority[0], 4);
-
-       rtw_secmicappend(&micdata, data, data_len);
-
-       rtw_secgetmic(&micdata, mic_code);
-
-}
-
-/* macros for extraction/creation of unsigned char/unsigned short values  */
-#define RotR1(v16)   ((((v16) >> 1) & 0x7FFF) ^ (((v16) & 1) << 15))
-#define   Lo8(v16)   ((u8)((v16)       & 0x00FF))
-#define   Hi8(v16)   ((u8)(((v16) >> 8) & 0x00FF))
-#define  Lo16(v32)   ((u16)((v32)       & 0xFFFF))
-#define  Hi16(v32)   ((u16)(((v32) >> 16) & 0xFFFF))
-#define  Mk16(hi, lo) ((lo) ^ (((u16)(hi)) << 8))
-
-/* select the Nth 16-bit word of the temporal key unsigned char array TK[]   */
-#define  TK16(N)     Mk16(tk[2 * (N) + 1], tk[2 * (N)])
-
-/* S-box lookup: 16 bits --> 16 bits */
-#define _S_(v16)     (Sbox1[0][Lo8(v16)] ^ Sbox1[1][Hi8(v16)])
-
-/* fixed algorithm "parameters" */
-#define PHASE1_LOOP_CNT   8    /* this needs to be "big enough"     */
-#define TA_SIZE           6    /*  48-bit transmitter address       */
-#define TK_SIZE          16    /* 128-bit temporal key       */
-#define P1K_SIZE        10    /*  80-bit Phase1 key            */
-#define RC4_KEY_SIZE     16    /* 128-bit RC4KEY (104 bits unknown) */
-
-/* 2-unsigned char by 2-unsigned char subset of the full AES S-box table */
-static const unsigned short Sbox1[2][256] = {  /* Sbox for hash (can be in ROM)     */
-{
-   0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154,
-   0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A,
-   0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B,
-   0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B,
-   0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F,
-   0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F,
-   0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5,
-   0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0x7FCD, 0xEA9F,
-   0x121B, 0x1D9E, 0x5874, 0x342E, 0x362D, 0xDCB2, 0xB4EE, 0x5BFB,
-   0xA4F6, 0x764D, 0xB761, 0x7DCE, 0x527B, 0xDD3E, 0x5E71, 0x1397,
-   0xA6F5, 0xB968, 0x0000, 0xC12C, 0x4060, 0xE31F, 0x79C8, 0xB6ED,
-   0xD4BE, 0x8D46, 0x67D9, 0x724B, 0x94DE, 0x98D4, 0xB0E8, 0x854A,
-   0xBB6B, 0xC52A, 0x4FE5, 0xED16, 0x86C5, 0x9AD7, 0x6655, 0x1194,
-   0x8ACF, 0xE910, 0x0406, 0xFE81, 0xA0F0, 0x7844, 0x25BA, 0x4BE3,
-   0xA2F3, 0x5DFE, 0x80C0, 0x058A, 0x3FAD, 0x21BC, 0x7048, 0xF104,
-   0x63DF, 0x77C1, 0xAF75, 0x4263, 0x2030, 0xE51A, 0xFD0E, 0xBF6D,
-   0x814C, 0x1814, 0x2635, 0xC32F, 0xBEE1, 0x35A2, 0x88CC, 0x2E39,
-   0x9357, 0x55F2, 0xFC82, 0x7A47, 0xC8AC, 0xBAE7, 0x322B, 0xE695,
-   0xC0A0, 0x1998, 0x9ED1, 0xA37F, 0x4466, 0x547E, 0x3BAB, 0x0B83,
-   0x8CCA, 0xC729, 0x6BD3, 0x283C, 0xA779, 0xBCE2, 0x161D, 0xAD76,
-   0xDB3B, 0x6456, 0x744E, 0x141E, 0x92DB, 0x0C0A, 0x486C, 0xB8E4,
-   0x9F5D, 0xBD6E, 0x43EF, 0xC4A6, 0x39A8, 0x31A4, 0xD337, 0xF28B,
-   0xD532, 0x8B43, 0x6E59, 0xDAB7, 0x018C, 0xB164, 0x9CD2, 0x49E0,
-   0xD8B4, 0xACFA, 0xF307, 0xCF25, 0xCAAF, 0xF48E, 0x47E9, 0x1018,
-   0x6FD5, 0xF088, 0x4A6F, 0x5C72, 0x3824, 0x57F1, 0x73C7, 0x9751,
-   0xCB23, 0xA17C, 0xE89C, 0x3E21, 0x96DD, 0x61DC, 0x0D86, 0x0F85,
-   0xE090, 0x7C42, 0x71C4, 0xCCAA, 0x90D8, 0x0605, 0xF701, 0x1C12,
-   0xC2A3, 0x6A5F, 0xAEF9, 0x69D0, 0x1791, 0x9958, 0x3A27, 0x27B9,
-   0xD938, 0xEB13, 0x2BB3, 0x2233, 0xD2BB, 0xA970, 0x0789, 0x33A7,
-   0x2DB6, 0x3C22, 0x1592, 0xC920, 0x8749, 0xAAFF, 0x5078, 0xA57A,
-   0x038F, 0x59F8, 0x0980, 0x1A17, 0x65DA, 0xD731, 0x84C6, 0xD0B8,
-   0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A,
-  },
-
-  {  /* second half of table is unsigned char-reversed version of first! */
-   0xA5C6, 0x84F8, 0x99EE, 0x8DF6, 0x0DFF, 0xBDD6, 0xB1DE, 0x5491,
-   0x5060, 0x0302, 0xA9CE, 0x7D56, 0x19E7, 0x62B5, 0xE64D, 0x9AEC,
-   0x458F, 0x9D1F, 0x4089, 0x87FA, 0x15EF, 0xEBB2, 0xC98E, 0x0BFB,
-   0xEC41, 0x67B3, 0xFD5F, 0xEA45, 0xBF23, 0xF753, 0x96E4, 0x5B9B,
-   0xC275, 0x1CE1, 0xAE3D, 0x6A4C, 0x5A6C, 0x417E, 0x02F5, 0x4F83,
-   0x5C68, 0xF451, 0x34D1, 0x08F9, 0x93E2, 0x73AB, 0x5362, 0x3F2A,
-   0x0C08, 0x5295, 0x6546, 0x5E9D, 0x2830, 0xA137, 0x0F0A, 0xB52F,
-   0x090E, 0x3624, 0x9B1B, 0x3DDF, 0x26CD, 0x694E, 0xCD7F, 0x9FEA,
-   0x1B12, 0x9E1D, 0x7458, 0x2E34, 0x2D36, 0xB2DC, 0xEEB4, 0xFB5B,
-   0xF6A4, 0x4D76, 0x61B7, 0xCE7D, 0x7B52, 0x3EDD, 0x715E, 0x9713,
-   0xF5A6, 0x68B9, 0x0000, 0x2CC1, 0x6040, 0x1FE3, 0xC879, 0xEDB6,
-   0xBED4, 0x468D, 0xD967, 0x4B72, 0xDE94, 0xD498, 0xE8B0, 0x4A85,
-   0x6BBB, 0x2AC5, 0xE54F, 0x16ED, 0xC586, 0xD79A, 0x5566, 0x9411,
-   0xCF8A, 0x10E9, 0x0604, 0x81FE, 0xF0A0, 0x4478, 0xBA25, 0xE34B,
-   0xF3A2, 0xFE5D, 0xC080, 0x8A05, 0xAD3F, 0xBC21, 0x4870, 0x04F1,
-   0xDF63, 0xC177, 0x75AF, 0x6342, 0x3020, 0x1AE5, 0x0EFD, 0x6DBF,
-   0x4C81, 0x1418, 0x3526, 0x2FC3, 0xE1BE, 0xA235, 0xCC88, 0x392E,
-   0x5793, 0xF255, 0x82FC, 0x477A, 0xACC8, 0xE7BA, 0x2B32, 0x95E6,
-   0xA0C0, 0x9819, 0xD19E, 0x7FA3, 0x6644, 0x7E54, 0xAB3B, 0x830B,
-   0xCA8C, 0x29C7, 0xD36B, 0x3C28, 0x79A7, 0xE2BC, 0x1D16, 0x76AD,
-   0x3BDB, 0x5664, 0x4E74, 0x1E14, 0xDB92, 0x0A0C, 0x6C48, 0xE4B8,
-   0x5D9F, 0x6EBD, 0xEF43, 0xA6C4, 0xA839, 0xA431, 0x37D3, 0x8BF2,
-   0x32D5, 0x438B, 0x596E, 0xB7DA, 0x8C01, 0x64B1, 0xD29C, 0xE049,
-   0xB4D8, 0xFAAC, 0x07F3, 0x25CF, 0xAFCA, 0x8EF4, 0xE947, 0x1810,
-   0xD56F, 0x88F0, 0x6F4A, 0x725C, 0x2438, 0xF157, 0xC773, 0x5197,
-   0x23CB, 0x7CA1, 0x9CE8, 0x213E, 0xDD96, 0xDC61, 0x860D, 0x850F,
-   0x90E0, 0x427C, 0xC471, 0xAACC, 0xD890, 0x0506, 0x01F7, 0x121C,
-   0xA3C2, 0x5F6A, 0xF9AE, 0xD069, 0x9117, 0x5899, 0x273A, 0xB927,
-   0x38D9, 0x13EB, 0xB32B, 0x3322, 0xBBD2, 0x70A9, 0x8907, 0xA733,
-   0xB62D, 0x223C, 0x9215, 0x20C9, 0x4987, 0xFFAA, 0x7850, 0x7AA5,
-   0x8F03, 0xF859, 0x8009, 0x171A, 0xDA65, 0x31D7, 0xC684, 0xB8D0,
-   0xC382, 0xB029, 0x775A, 0x111E, 0xCB7B, 0xFCA8, 0xD66D, 0x3A2C,
-  }
-};
-
- /*
-**********************************************************************
-* Routine: Phase 1 -- generate P1K, given TA, TK, IV32
-*
-* Inputs:
-*     tk[]      = temporal key                  [128 bits]
-*     ta[]      = transmitter's MAC address        [ 48 bits]
-*     iv32      = upper 32 bits of IV            [ 32 bits]
-* Output:
-*     p1k[]     = Phase 1 key                    [ 80 bits]
-*
-* Note:
-*     This function only needs to be called every 2**16 packets,
-*     although in theory it could be called every packet.
-*
-**********************************************************************
-*/
-static void phase1(u16 *p1k, const u8 *tk, const u8 *ta, u32 iv32)
-{
-       int  i;
-
-       /* Initialize the 80 bits of P1K[] from IV32 and TA[0..5]     */
-       p1k[0]      = Lo16(iv32);
-       p1k[1]      = Hi16(iv32);
-       p1k[2]      = Mk16(ta[1], ta[0]); /* use TA[] as little-endian */
-       p1k[3]      = Mk16(ta[3], ta[2]);
-       p1k[4]      = Mk16(ta[5], ta[4]);
-
-       /* Now compute an unbalanced Feistel cipher with 80-bit block */
-       /* size on the 80-bit block P1K[], using the 128-bit key TK[] */
-       for (i = 0; i < PHASE1_LOOP_CNT; i++) { /* Each add operation here is mod 2**16 */
-               p1k[0] += _S_(p1k[4] ^ TK16((i & 1) + 0));
-               p1k[1] += _S_(p1k[0] ^ TK16((i & 1) + 2));
-               p1k[2] += _S_(p1k[1] ^ TK16((i & 1) + 4));
-               p1k[3] += _S_(p1k[2] ^ TK16((i & 1) + 6));
-               p1k[4] += _S_(p1k[3] ^ TK16((i & 1) + 0));
-               p1k[4] +=  (unsigned short)i;   /* avoid "slide attacks" */
-       }
-
-}
-
-/*
-**********************************************************************
-* Routine: Phase 2 -- generate RC4KEY, given TK, P1K, IV16
-*
-* Inputs:
-*     tk[]      = Temporal key                  [128 bits]
-*     p1k[]     = Phase 1 output key              [ 80 bits]
-*     iv16      = low 16 bits of IV counter        [ 16 bits]
-* Output:
-*     rc4key[]  = the key used to encrypt the packet   [128 bits]
-*
-* Note:
-*     The value {TA, IV32, IV16} for Phase1/Phase2 must be unique
-*     across all packets using the same key TK value. Then, for a
-*     given value of TK[], this TKIP48 construction guarantees that
-*     the final RC4KEY value is unique across all packets.
-*
-* Suggested implementation optimization: if PPK[] is "overlaid"
-*     appropriately on RC4KEY[], there is no need for the final
-*     for loop below that copies the PPK[] result into RC4KEY[].
-*
-**********************************************************************
-*/
-static void phase2(u8 *rc4key, const u8 *tk, const u16 *p1k, u16 iv16)
-{
-       int  i;
-       u16 PPK[6];                     /* temporary key for mixing    */
-
-       /* Note: all adds in the PPK[] equations below are mod 2**16     */
-       for (i = 0; i < 5; i++)
-               PPK[i] = p1k[i];        /* first, copy P1K to PPK      */
-       PPK[5]  =  p1k[4] + iv16;       /* next,  add in IV16     */
-
-       /* Bijective non-linear mixing of the 96 bits of PPK[0..5]         */
-       PPK[0] +=    _S_(PPK[5] ^ TK16(0));   /* Mix key in each "round"     */
-       PPK[1] +=    _S_(PPK[0] ^ TK16(1));
-       PPK[2] +=    _S_(PPK[1] ^ TK16(2));
-       PPK[3] +=    _S_(PPK[2] ^ TK16(3));
-       PPK[4] +=    _S_(PPK[3] ^ TK16(4));
-       PPK[5] +=    _S_(PPK[4] ^ TK16(5));   /* Total # S-box lookups == 6  */
-
-       /* Final sweep: bijective, "linear". Rotates kill LSB correlations   */
-       PPK[0] +=  RotR1(PPK[5] ^ TK16(6));
-       PPK[1] +=  RotR1(PPK[0] ^ TK16(7));   /* Use all of TK[] in Phase2   */
-       PPK[2] +=  RotR1(PPK[1]);
-       PPK[3] +=  RotR1(PPK[2]);
-       PPK[4] +=  RotR1(PPK[3]);
-       PPK[5] +=  RotR1(PPK[4]);
-       /* Note: At this point, for a given key TK[0..15], the 96-bit output */
-       /*       value PPK[0..5] is guaranteed to be unique, as a function   */
-       /*       of the 96-bit "input" value   {TA, IV32, IV16}. That is, P1K  */
-       /*       is now a keyed permutation of {TA, IV32, IV16}.               */
-
-       /* Set RC4KEY[0..3], which includes "cleartext" portion of RC4 key   */
-       rc4key[0] = Hi8(iv16);          /* RC4KEY[0..2] is the WEP IV  */
-       rc4key[1] = (Hi8(iv16) | 0x20) & 0x7F; /* Help avoid weak (FMS) keys  */
-       rc4key[2] = Lo8(iv16);
-       rc4key[3] = Lo8((PPK[5] ^ TK16(0)) >> 1);
-
-       /* Copy 96 bits of PPK[0..5] to RC4KEY[4..15]  (little-endian)       */
-       for (i = 0; i < 6; i++) {
-               rc4key[4 + 2 * i] = Lo8(PPK[i]);
-               rc4key[5 + 2 * i] = Hi8(PPK[i]);
-       }
-
-}
-
-/* The hlen isn't include the IV */
-u32 rtw_tkip_encrypt(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{                                                                                                                                      /*  exclude ICV */
-       u16     pnl;
-       u32     pnh;
-       u8      rc4key[16];
-       u8   ttkey[16];
-       union {
-               __le32 f0;
-               u8 f1[4];
-       } crc;
-       u8   hw_hdr_offset = 0;
-       int                     curfragnum, length;
-
-       u8      *pframe, *payload, *iv, *prwskey;
-       union pn48 dot11txpn;
-       struct  sta_info                *stainfo;
-       struct  pkt_attrib       *pattrib = &pxmitframe->attrib;
-       struct  security_priv   *psecuritypriv = &padapter->securitypriv;
-       struct  xmit_priv               *pxmitpriv = &padapter->xmitpriv;
-       struct arc4_ctx *ctx = &psecuritypriv->xmit_arc4_ctx;
-       u32     res = _SUCCESS;
-
-       if (!pxmitframe->buf_addr)
-               return _FAIL;
-
-       hw_hdr_offset = TXDESC_SIZE + pxmitframe->pkt_offset * PACKET_OFFSET_SZ;
-       pframe = pxmitframe->buf_addr + hw_hdr_offset;
-
-       /* 4 start to encrypt each fragment */
-       if (pattrib->encrypt == _TKIP_) {
-               if (pattrib->psta)
-                       stainfo = pattrib->psta;
-               else
-                       stainfo = rtw_get_stainfo(&padapter->stapriv, &pattrib->ra[0]);
-
-               if (stainfo) {
-                       if (is_multicast_ether_addr(pattrib->ra))
-                               prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
-                       else
-                               prwskey = &stainfo->dot118021x_UncstKey.skey[0];
-
-                       for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {
-                               iv = pframe + pattrib->hdrlen;
-                               payload = pframe + pattrib->iv_len + pattrib->hdrlen;
-
-                               GET_TKIP_PN(iv, dot11txpn);
-
-                               pnl = (u16)(dot11txpn.val);
-                               pnh = (u32)(dot11txpn.val >> 16);
-                               phase1((u16 *)&ttkey[0], prwskey, &pattrib->ta[0], pnh);
-                               phase2(&rc4key[0], prwskey, (u16 *)&ttkey[0], pnl);
-
-                               if ((curfragnum + 1) == pattrib->nr_frags) {    /* 4 the last fragment */
-                                       length = pattrib->last_txcmdsz - pattrib->hdrlen - pattrib->iv_len - pattrib->icv_len;
-                                       crc.f0 = cpu_to_le32(~crc32_le(~0, payload, length));
-
-                                       arc4_setkey(ctx, rc4key, 16);
-                                       arc4_crypt(ctx, payload, payload, length);
-                                       arc4_crypt(ctx, payload + length, crc.f1, 4);
-                               } else {
-                                       length = pxmitpriv->frag_len - pattrib->hdrlen - pattrib->iv_len - pattrib->icv_len;
-                                       crc.f0 = cpu_to_le32(~crc32_le(~0, payload, length));
-
-                                       arc4_setkey(ctx, rc4key, 16);
-                                       arc4_crypt(ctx, payload, payload, length);
-                                       arc4_crypt(ctx, payload + length, crc.f1, 4);
-
-                                       pframe += pxmitpriv->frag_len;
-                                       pframe = PTR_ALIGN(pframe, 4);
-                               }
-                       }
-               } else {
-                       res = _FAIL;
-               }
-       }
-
-       return res;
-}
-
-/* The hlen isn't include the IV */
-u32 rtw_tkip_decrypt(struct adapter *padapter, struct recv_frame *precvframe)
-{                                                                                                                                      /*  exclude ICV */
-       u16 pnl;
-       u32 pnh;
-       u8   rc4key[16];
-       u8   ttkey[16];
-       union {
-               __le32 f0;
-               u8 f1[4];
-       } crc;
-       int                     length;
-
-       u8      *pframe, *payload, *iv, *prwskey;
-       union pn48 dot11txpn;
-       struct  sta_info                *stainfo;
-       struct  rx_pkt_attrib    *prxattrib = &precvframe->attrib;
-       struct  security_priv   *psecuritypriv = &padapter->securitypriv;
-       struct arc4_ctx *ctx = &psecuritypriv->recv_arc4_ctx;
-       u32             res = _SUCCESS;
-
-       pframe = precvframe->rx_data;
-
-       /* 4 start to decrypt recvframe */
-       if (prxattrib->encrypt == _TKIP_) {
-               stainfo = rtw_get_stainfo(&padapter->stapriv, &prxattrib->ta[0]);
-               if (stainfo) {
-                       if (is_multicast_ether_addr(prxattrib->ra)) {
-                               if (!psecuritypriv->binstallGrpkey) {
-                                       res = _FAIL;
-                                       goto exit;
-                               }
-                               prwskey = psecuritypriv->dot118021XGrpKey[prxattrib->key_index].skey;
-                       } else {
-                               prwskey = &stainfo->dot118021x_UncstKey.skey[0];
-                       }
-
-                       iv = pframe + prxattrib->hdrlen;
-                       payload = pframe + prxattrib->iv_len + prxattrib->hdrlen;
-                       length = precvframe->len - prxattrib->hdrlen - prxattrib->iv_len;
-
-                       GET_TKIP_PN(iv, dot11txpn);
-
-                       pnl = (u16)(dot11txpn.val);
-                       pnh = (u32)(dot11txpn.val >> 16);
-
-                       phase1((u16 *)&ttkey[0], prwskey, &prxattrib->ta[0], pnh);
-                       phase2(&rc4key[0], prwskey, (unsigned short *)&ttkey[0], pnl);
-
-                       /* 4 decrypt payload include icv */
-
-                       arc4_setkey(ctx, rc4key, 16);
-                       arc4_crypt(ctx, payload, payload, length);
-
-                       crc.f0 = cpu_to_le32(~crc32_le(~0, payload, length));
-
-                       if (crc.f1[3] != payload[length - 1] ||
-                           crc.f1[2] != payload[length - 2] ||
-                           crc.f1[1] != payload[length - 3] ||
-                           crc.f1[0] != payload[length - 4])
-                               res = _FAIL;
-               } else {
-                       res = _FAIL;
-               }
-       }
-
-exit:
-       return res;
-}
-
-/* 3                   ===== AES related ===== */
-
-#define MAX_MSG_SIZE   2048
-/*****************************/
-/******** SBOX Table *********/
-/*****************************/
-
-static  u8 sbox_table[256] = {
-       0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
-       0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
-       0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
-       0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
-       0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
-       0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
-       0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
-       0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
-       0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
-       0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
-       0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
-       0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
-       0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
-       0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
-       0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
-       0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
-       0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
-       0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
-       0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
-       0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
-       0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
-       0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
-       0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
-       0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
-       0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
-       0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
-       0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
-       0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
-       0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
-       0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
-       0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
-       0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
-};
-
-/*****************************/
-/**** Function Prototypes ****/
-/*****************************/
-
-static void bitwise_xor(u8 *ina, u8 *inb, u8 *out);
-static void construct_mic_iv(u8 *mic_header1, int qc_exists, int a4_exists, u8 *mpdu, uint payload_length, u8 *pn_vector);
-static void construct_mic_header1(u8 *mic_header1, int header_length, u8 *mpdu);
-static void construct_mic_header2(u8 *mic_header2, u8 *mpdu, int a4_exists, int qc_exists);
-static void construct_ctr_preload(u8 *ctr_preload, int a4_exists, int qc_exists, u8 *mpdu, u8 *pn_vector, int c);
-static void xor_128(u8 *a, u8 *b, u8 *out);
-static void xor_32(u8 *a, u8 *b, u8 *out);
-static u8 sbox(u8 a);
-static void next_key(u8 *key, int round);
-static void byte_sub(u8 *in, u8 *out);
-static void shift_row(u8 *in, u8 *out);
-static void mix_column(u8 *in, u8 *out);
-static void aes128k128d(u8 *key, u8 *data, u8 *ciphertext);
-
-/****************************************/
-/* aes128k128d()                       */
-/* Performs a 128 bit AES encrypt with  */
-/* 128 bit data.                       */
-/****************************************/
-static void xor_128(u8 *a, u8 *b, u8 *out)
-{
-       int i;
-
-       for (i = 0; i < 16; i++)
-               out[i] = a[i] ^ b[i];
-
-}
-
-static void xor_32(u8 *a, u8 *b, u8 *out)
-{
-       int i;
-
-       for (i = 0; i < 4; i++)
-               out[i] = a[i] ^ b[i];
-
-}
-
-static u8 sbox(u8 a)
-{
-       return sbox_table[(int)a];
-}
-
-static void next_key(u8 *key, int round)
-{
-       u8 rcon;
-       u8 sbox_key[4];
-       u8 rcon_table[12] = {
-               0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-               0x1b, 0x36, 0x36, 0x36
-       };
-
-       sbox_key[0] = sbox(key[13]);
-       sbox_key[1] = sbox(key[14]);
-       sbox_key[2] = sbox(key[15]);
-       sbox_key[3] = sbox(key[12]);
-
-       rcon = rcon_table[round];
-
-       xor_32(&key[0], sbox_key, &key[0]);
-       key[0] = key[0] ^ rcon;
-
-       xor_32(&key[4], &key[0], &key[4]);
-       xor_32(&key[8], &key[4], &key[8]);
-       xor_32(&key[12], &key[8], &key[12]);
-
-}
-
-static void byte_sub(u8 *in, u8 *out)
-{
-       int i;
-
-       for (i = 0; i < 16; i++)
-               out[i] = sbox(in[i]);
-
-}
-
-static void shift_row(u8 *in, u8 *out)
-{
-
-       out[0] =  in[0];
-       out[1] =  in[5];
-       out[2] =  in[10];
-       out[3] =  in[15];
-       out[4] =  in[4];
-       out[5] =  in[9];
-       out[6] =  in[14];
-       out[7] =  in[3];
-       out[8] =  in[8];
-       out[9] =  in[13];
-       out[10] = in[2];
-       out[11] = in[7];
-       out[12] = in[12];
-       out[13] = in[1];
-       out[14] = in[6];
-       out[15] = in[11];
-
-}
-
-static void mix_column(u8 *in, u8 *out)
-{
-       int i;
-       u8 add1b[4];
-       u8 add1bf7[4];
-       u8 rotl[4];
-       u8 swap_halfs[4];
-       u8 andf7[4];
-       u8 rotr[4];
-       u8 temp[4];
-       u8 tempb[4];
-
-       for (i = 0 ; i < 4; i++) {
-               if ((in[i] & 0x80) == 0x80)
-                       add1b[i] = 0x1b;
-               else
-                       add1b[i] = 0x00;
-       }
-
-       swap_halfs[0] = in[2];    /* Swap halves */
-       swap_halfs[1] = in[3];
-       swap_halfs[2] = in[0];
-       swap_halfs[3] = in[1];
-
-       rotl[0] = in[3];        /* Rotate left 8 bits */
-       rotl[1] = in[0];
-       rotl[2] = in[1];
-       rotl[3] = in[2];
-
-       andf7[0] = in[0] & 0x7f;
-       andf7[1] = in[1] & 0x7f;
-       andf7[2] = in[2] & 0x7f;
-       andf7[3] = in[3] & 0x7f;
-
-       for (i = 3; i > 0; i--) {    /* logical shift left 1 bit */
-               andf7[i] = andf7[i] << 1;
-               if ((andf7[i - 1] & 0x80) == 0x80)
-                       andf7[i] = (andf7[i] | 0x01);
-       }
-       andf7[0] = andf7[0] << 1;
-       andf7[0] = andf7[0] & 0xfe;
-
-       xor_32(add1b, andf7, add1bf7);
-
-       xor_32(in, add1bf7, rotr);
-
-       temp[0] = rotr[0];       /* Rotate right 8 bits */
-       rotr[0] = rotr[1];
-       rotr[1] = rotr[2];
-       rotr[2] = rotr[3];
-       rotr[3] = temp[0];
-
-       xor_32(add1bf7, rotr, temp);
-       xor_32(swap_halfs, rotl, tempb);
-       xor_32(temp, tempb, out);
-
-}
-
-static void aes128k128d(u8 *key, u8 *data, u8 *ciphertext)
-{
-       int round;
-       int i;
-       u8 intermediatea[16];
-       u8 intermediateb[16];
-       u8 round_key[16];
-
-       for (i = 0; i < 16; i++)
-               round_key[i] = key[i];
-       for (round = 0; round < 11; round++) {
-               if (round == 0) {
-                       xor_128(round_key, data, ciphertext);
-                       next_key(round_key, round);
-               } else if (round == 10) {
-                       byte_sub(ciphertext, intermediatea);
-                       shift_row(intermediatea, intermediateb);
-                       xor_128(intermediateb, round_key, ciphertext);
-               } else {    /* 1 - 9 */
-                       byte_sub(ciphertext, intermediatea);
-                       shift_row(intermediatea, intermediateb);
-                       mix_column(&intermediateb[0], &intermediatea[0]);
-                       mix_column(&intermediateb[4], &intermediatea[4]);
-                       mix_column(&intermediateb[8], &intermediatea[8]);
-                       mix_column(&intermediateb[12], &intermediatea[12]);
-                       xor_128(intermediatea, round_key, ciphertext);
-                       next_key(round_key, round);
-               }
-       }
-
-}
-
-/************************************************/
-/* construct_mic_iv()                     */
-/* Builds the MIC IV from header fields and PN  */
-/************************************************/
-static void construct_mic_iv(u8 *mic_iv, int qc_exists, int a4_exists, u8 *mpdu,
-                            uint payload_length, u8 *pn_vector)
-{
-       int i;
-
-       mic_iv[0] = 0x59;
-       if (qc_exists && a4_exists)
-               mic_iv[1] = mpdu[30] & 0x0f;    /* QoS_TC          */
-       if (qc_exists && !a4_exists)
-               mic_iv[1] = mpdu[24] & 0x0f;    /* mute bits 7-4    */
-       if (!qc_exists)
-               mic_iv[1] = 0x00;
-       for (i = 2; i < 8; i++)
-               mic_iv[i] = mpdu[i + 8];        /* mic_iv[2:7] = A2[0:5] = mpdu[10:15] */
-       for (i = 8; i < 14; i++)
-               mic_iv[i] = pn_vector[13 - i];  /* mic_iv[8:13] = PN[5:0] */
-       mic_iv[14] = (unsigned char)(payload_length / 256);
-       mic_iv[15] = (unsigned char)(payload_length % 256);
-
-}
-
-/************************************************/
-/* construct_mic_header1()                   */
-/* Builds the first MIC header block from       */
-/* header fields.                             */
-/************************************************/
-static void construct_mic_header1(u8 *mic_header1, int header_length, u8 *mpdu)
-{
-
-       mic_header1[0] = (u8)((header_length - 2) / 256);
-       mic_header1[1] = (u8)((header_length - 2) % 256);
-       mic_header1[2] = mpdu[0] & 0xcf;    /* Mute CF poll & CF ack bits */
-       mic_header1[3] = mpdu[1] & 0xc7;    /* Mute retry, more data and pwr mgt bits */
-       mic_header1[4] = mpdu[4];       /* A1 */
-       mic_header1[5] = mpdu[5];
-       mic_header1[6] = mpdu[6];
-       mic_header1[7] = mpdu[7];
-       mic_header1[8] = mpdu[8];
-       mic_header1[9] = mpdu[9];
-       mic_header1[10] = mpdu[10];     /* A2 */
-       mic_header1[11] = mpdu[11];
-       mic_header1[12] = mpdu[12];
-       mic_header1[13] = mpdu[13];
-       mic_header1[14] = mpdu[14];
-       mic_header1[15] = mpdu[15];
-
-}
-
-/************************************************/
-/* construct_mic_header2()                   */
-/* Builds the last MIC header block from       */
-/* header fields.                             */
-/************************************************/
-static void construct_mic_header2(u8 *mic_header2, u8 *mpdu, int a4_exists, int qc_exists)
-{
-       int i;
-
-       for (i = 0; i < 16; i++)
-               mic_header2[i] = 0x00;
-
-       mic_header2[0] = mpdu[16];    /* A3 */
-       mic_header2[1] = mpdu[17];
-       mic_header2[2] = mpdu[18];
-       mic_header2[3] = mpdu[19];
-       mic_header2[4] = mpdu[20];
-       mic_header2[5] = mpdu[21];
-
-       mic_header2[6] = 0x00;
-       mic_header2[7] = 0x00; /* mpdu[23]; */
-
-       if (!qc_exists && a4_exists) {
-               for (i = 0; i < 6; i++)
-                       mic_header2[8 + i] = mpdu[24 + i];   /* A4 */
-       }
-
-       if (qc_exists && !a4_exists) {
-               mic_header2[8] = mpdu[24] & 0x0f; /* mute bits 15 - 4 */
-               mic_header2[9] = mpdu[25] & 0x00;
-       }
-
-       if (qc_exists && a4_exists) {
-               for (i = 0; i < 6; i++)
-                       mic_header2[8 + i] = mpdu[24 + i];   /* A4 */
-
-               mic_header2[14] = mpdu[30] & 0x0f;
-               mic_header2[15] = mpdu[31] & 0x00;
-       }
-
-}
-
-/************************************************/
-/* construct_mic_header2()                   */
-/* Builds the last MIC header block from       */
-/* header fields.                             */
-/************************************************/
-static void construct_ctr_preload(u8 *ctr_preload, int a4_exists, int qc_exists, u8 *mpdu, u8 *pn_vector, int c)
-{
-       int i;
-
-       for (i = 0; i < 16; i++)
-               ctr_preload[i] = 0x00;
-       i = 0;
-
-       ctr_preload[0] = 0x01;                            /* flag */
-       if (qc_exists && a4_exists)
-               ctr_preload[1] = mpdu[30] & 0x0f;   /* QoC_Control */
-       if (qc_exists && !a4_exists)
-               ctr_preload[1] = mpdu[24] & 0x0f;
-
-       for (i = 2; i < 8; i++)
-               ctr_preload[i] = mpdu[i + 8];                  /* ctr_preload[2:7] = A2[0:5] = mpdu[10:15] */
-       for (i = 8; i < 14; i++)
-               ctr_preload[i] =    pn_vector[13 - i];    /* ctr_preload[8:13] = PN[5:0] */
-       ctr_preload[14] =  (unsigned char)(c / 256); /* Ctr */
-       ctr_preload[15] =  (unsigned char)(c % 256);
-
-}
-
-/************************************/
-/* bitwise_xor()                   */
-/* A 128 bit, bitwise exclusive or  */
-/************************************/
-static void bitwise_xor(u8 *ina, u8 *inb, u8 *out)
-{
-       int i;
-
-       for (i = 0; i < 16; i++)
-               out[i] = ina[i] ^ inb[i];
-
-}
-
-static void aes_cipher(u8 *key, uint hdrlen, u8 *pframe, uint plen)
-{
-       uint    qc_exists, a4_exists, i, j, payload_remainder,
-               num_blocks, payload_index;
-
-       u8 pn_vector[6];
-       u8 mic_iv[16];
-       u8 mic_header1[16];
-       u8 mic_header2[16];
-       u8 ctr_preload[16];
-
-       /* Intermediate Buffers */
-       u8 chain_buffer[16];
-       u8 aes_out[16];
-       u8 padded_buffer[16];
-       u8 mic[8];
-       uint    frtype  = GetFrameType(pframe);
-       uint    frsubtype  = GetFrameSubType(pframe);
-
-       frsubtype = frsubtype >> 4;
-
-       memset((void *)mic_iv, 0, 16);
-       memset((void *)mic_header1, 0, 16);
-       memset((void *)mic_header2, 0, 16);
-       memset((void *)ctr_preload, 0, 16);
-       memset((void *)chain_buffer, 0, 16);
-       memset((void *)aes_out, 0, 16);
-       memset((void *)padded_buffer, 0, 16);
-
-       if ((hdrlen == WLAN_HDR_A3_LEN) || (hdrlen ==  WLAN_HDR_A3_QOS_LEN))
-               a4_exists = 0;
-       else
-               a4_exists = 1;
-
-       if ((frtype == WIFI_DATA_CFACK) || (frtype == WIFI_DATA_CFPOLL) || (frtype == WIFI_DATA_CFACKPOLL)) {
-               qc_exists = 1;
-               if (hdrlen !=  WLAN_HDR_A3_QOS_LEN)
-                       hdrlen += 2;
-       } else if ((frsubtype == 0x08) || (frsubtype == 0x09) || (frsubtype == 0x0a) || (frsubtype == 0x0b)) {
-               if (hdrlen !=  WLAN_HDR_A3_QOS_LEN)
-                       hdrlen += 2;
-               qc_exists = 1;
-       } else {
-               qc_exists = 0;
-       }
-
-       pn_vector[0] = pframe[hdrlen];
-       pn_vector[1] = pframe[hdrlen + 1];
-       pn_vector[2] = pframe[hdrlen + 4];
-       pn_vector[3] = pframe[hdrlen + 5];
-       pn_vector[4] = pframe[hdrlen + 6];
-       pn_vector[5] = pframe[hdrlen + 7];
-
-       construct_mic_iv(mic_iv, qc_exists, a4_exists, pframe, plen, pn_vector);
-
-       construct_mic_header1(mic_header1, hdrlen, pframe);
-       construct_mic_header2(mic_header2, pframe, a4_exists, qc_exists);
-
-       payload_remainder = plen % 16;
-       num_blocks = plen / 16;
-
-       /* Find start of payload */
-       payload_index = (hdrlen + 8);
-
-       /* Calculate MIC */
-       aes128k128d(key, mic_iv, aes_out);
-       bitwise_xor(aes_out, mic_header1, chain_buffer);
-       aes128k128d(key, chain_buffer, aes_out);
-       bitwise_xor(aes_out, mic_header2, chain_buffer);
-       aes128k128d(key, chain_buffer, aes_out);
-
-       for (i = 0; i < num_blocks; i++) {
-               bitwise_xor(aes_out, &pframe[payload_index], chain_buffer);/* bitwise_xor(aes_out, &message[payload_index], chain_buffer); */
-
-               payload_index += 16;
-               aes128k128d(key, chain_buffer, aes_out);
-       }
-
-       /* Add on the final payload block if it needs padding */
-       if (payload_remainder > 0) {
-               for (j = 0; j < 16; j++)
-                       padded_buffer[j] = 0x00;
-               for (j = 0; j < payload_remainder; j++)
-                       padded_buffer[j] = pframe[payload_index++];/* padded_buffer[j] = message[payload_index++]; */
-               bitwise_xor(aes_out, padded_buffer, chain_buffer);
-               aes128k128d(key, chain_buffer, aes_out);
-       }
-
-       for (j = 0; j < 8; j++)
-               mic[j] = aes_out[j];
-
-       /* Insert MIC into payload */
-       for (j = 0; j < 8; j++)
-               pframe[payload_index + j] = mic[j]; /* message[payload_index+j] = mic[j]; */
-
-       payload_index = hdrlen + 8;
-       for (i = 0; i < num_blocks; i++) {
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists, pframe, pn_vector, i + 1);
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, &pframe[payload_index], chain_buffer);
-               for (j = 0; j < 16; j++)
-                       pframe[payload_index++] = chain_buffer[j];
-       }
-
-       if (payload_remainder > 0) {    /* If there is a short final block, then pad it,*/
-                                       /* encrypt it and copy the unpadded part back   */
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists, pframe, pn_vector, num_blocks + 1);
-
-               for (j = 0; j < 16; j++)
-                       padded_buffer[j] = 0x00;
-               for (j = 0; j < payload_remainder; j++)
-                       padded_buffer[j] = pframe[payload_index + j];
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, padded_buffer, chain_buffer);
-               for (j = 0; j < payload_remainder; j++)
-                       pframe[payload_index++] = chain_buffer[j];
-       }
-       /* Encrypt the MIC */
-       construct_ctr_preload(ctr_preload, a4_exists, qc_exists, pframe, pn_vector, 0);
-
-       for (j = 0; j < 16; j++)
-               padded_buffer[j] = 0x00;
-       for (j = 0; j < 8; j++)
-               padded_buffer[j] = pframe[j + hdrlen + 8 + plen];
-
-       aes128k128d(key, ctr_preload, aes_out);
-       bitwise_xor(aes_out, padded_buffer, chain_buffer);
-       for (j = 0; j < 8; j++)
-               pframe[payload_index++] = chain_buffer[j];
-}
-
-u32 rtw_aes_encrypt(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{      /*  exclude ICV */
-
-       /*static*/
-/*     unsigned char   message[MAX_MSG_SIZE]; */
-
-       /* Intermediate Buffers */
-       int     curfragnum, length;
-       u8      *pframe, *prwskey;      /*  *payload,*iv */
-       u8   hw_hdr_offset = 0;
-       struct  sta_info                *stainfo;
-       struct  pkt_attrib       *pattrib = &pxmitframe->attrib;
-       struct  security_priv   *psecuritypriv = &padapter->securitypriv;
-       struct  xmit_priv               *pxmitpriv = &padapter->xmitpriv;
-
-/*     uint    offset = 0; */
-       u32 res = _SUCCESS;
-
-       if (!pxmitframe->buf_addr)
-               return _FAIL;
-
-       hw_hdr_offset = TXDESC_SIZE + pxmitframe->pkt_offset * PACKET_OFFSET_SZ;
-       pframe = pxmitframe->buf_addr + hw_hdr_offset;
-
-       /* 4 start to encrypt each fragment */
-       if (pattrib->encrypt == _AES_) {
-               if (pattrib->psta)
-                       stainfo = pattrib->psta;
-               else
-                       stainfo = rtw_get_stainfo(&padapter->stapriv, &pattrib->ra[0]);
-
-               if (stainfo) {
-                       if (is_multicast_ether_addr(pattrib->ra))
-                               prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
-                       else
-                               prwskey = &stainfo->dot118021x_UncstKey.skey[0];
-                       for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {
-                               if ((curfragnum + 1) == pattrib->nr_frags) {    /* 4 the last fragment */
-                                       length = pattrib->last_txcmdsz - pattrib->hdrlen - pattrib->iv_len - pattrib->icv_len;
-
-                                       aes_cipher(prwskey, pattrib->hdrlen, pframe, length);
-                               } else {
-                                       length = pxmitpriv->frag_len - pattrib->hdrlen - pattrib->iv_len - pattrib->icv_len;
-
-                                       aes_cipher(prwskey, pattrib->hdrlen, pframe, length);
-                                       pframe += pxmitpriv->frag_len;
-                                       pframe = PTR_ALIGN(pframe, 4);
-                               }
-                       }
-               } else {
-                       res = _FAIL;
-               }
-       }
-
-       return res;
-}
-
-static int aes_decipher(u8 *key, uint hdrlen,
-                       u8 *pframe, uint plen)
-{
-       static u8       message[MAX_MSG_SIZE];
-       uint    qc_exists, a4_exists, i, j, payload_remainder,
-                       num_blocks, payload_index;
-       int res = _SUCCESS;
-       u8 pn_vector[6];
-       u8 mic_iv[16];
-       u8 mic_header1[16];
-       u8 mic_header2[16];
-       u8 ctr_preload[16];
-
-       /* Intermediate Buffers */
-       u8 chain_buffer[16];
-       u8 aes_out[16];
-       u8 padded_buffer[16];
-       u8 mic[8];
-
-/*     uint    offset = 0; */
-       uint    frtype  = GetFrameType(pframe);
-       uint    frsubtype  = GetFrameSubType(pframe);
-
-       frsubtype = frsubtype >> 4;
-
-       memset((void *)mic_iv, 0, 16);
-       memset((void *)mic_header1, 0, 16);
-       memset((void *)mic_header2, 0, 16);
-       memset((void *)ctr_preload, 0, 16);
-       memset((void *)chain_buffer, 0, 16);
-       memset((void *)aes_out, 0, 16);
-       memset((void *)padded_buffer, 0, 16);
-
-       /* start to decrypt the payload */
-
-       num_blocks = (plen - 8) / 16; /* plen including llc, payload_length and mic) */
-
-       payload_remainder = (plen - 8) % 16;
-
-       pn_vector[0]  = pframe[hdrlen];
-       pn_vector[1]  = pframe[hdrlen + 1];
-       pn_vector[2]  = pframe[hdrlen + 4];
-       pn_vector[3]  = pframe[hdrlen + 5];
-       pn_vector[4]  = pframe[hdrlen + 6];
-       pn_vector[5]  = pframe[hdrlen + 7];
-
-       if ((hdrlen == WLAN_HDR_A3_LEN) || (hdrlen ==  WLAN_HDR_A3_QOS_LEN))
-               a4_exists = 0;
-       else
-               a4_exists = 1;
-
-       if ((frtype == WIFI_DATA_CFACK) || (frtype == WIFI_DATA_CFPOLL) ||
-           (frtype == WIFI_DATA_CFACKPOLL)) {
-                       qc_exists = 1;
-                       if (hdrlen !=  WLAN_HDR_A3_QOS_LEN)
-                               hdrlen += 2;
-       } else if ((frsubtype == 0x08) || (frsubtype == 0x09) ||
-                  (frsubtype == 0x0a) || (frsubtype == 0x0b)) {
-               if (hdrlen !=  WLAN_HDR_A3_QOS_LEN)
-                       hdrlen += 2;
-               qc_exists = 1;
-       } else {
-               qc_exists = 0;
-       }
-
-       /*  now, decrypt pframe with hdrlen offset and plen long */
-
-       payload_index = hdrlen + 8; /*  8 is for extiv */
-
-       for (i = 0; i < num_blocks; i++) {
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists, pframe, pn_vector, i + 1);
-
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, &pframe[payload_index], chain_buffer);
-
-               for (j = 0; j < 16; j++)
-                        pframe[payload_index++] = chain_buffer[j];
-       }
-
-       if (payload_remainder > 0) {    /* If there is a short final block, then pad it,*/
-                                       /* encrypt it and copy the unpadded part back   */
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists, pframe, pn_vector, num_blocks + 1);
-
-               for (j = 0; j < 16; j++)
-                       padded_buffer[j] = 0x00;
-               for (j = 0; j < payload_remainder; j++)
-                       padded_buffer[j] = pframe[payload_index + j];
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, padded_buffer, chain_buffer);
-               for (j = 0; j < payload_remainder; j++)
-                       pframe[payload_index++] = chain_buffer[j];
-       }
-
-       /* start to calculate the mic */
-       if ((hdrlen + plen + 8) <= MAX_MSG_SIZE)
-               memcpy(message, pframe, (hdrlen + plen + 8)); /* 8 is for ext iv len */
-
-       pn_vector[0] = pframe[hdrlen];
-       pn_vector[1] = pframe[hdrlen + 1];
-       pn_vector[2] = pframe[hdrlen + 4];
-       pn_vector[3] = pframe[hdrlen + 5];
-       pn_vector[4] = pframe[hdrlen + 6];
-       pn_vector[5] = pframe[hdrlen + 7];
-       construct_mic_iv(mic_iv, qc_exists, a4_exists, message, plen - 8, pn_vector);
-
-       construct_mic_header1(mic_header1, hdrlen, message);
-       construct_mic_header2(mic_header2, message, a4_exists, qc_exists);
-
-       payload_remainder = (plen - 8) % 16;
-       num_blocks = (plen - 8) / 16;
-
-       /* Find start of payload */
-       payload_index = (hdrlen + 8);
-
-       /* Calculate MIC */
-       aes128k128d(key, mic_iv, aes_out);
-       bitwise_xor(aes_out, mic_header1, chain_buffer);
-       aes128k128d(key, chain_buffer, aes_out);
-       bitwise_xor(aes_out, mic_header2, chain_buffer);
-       aes128k128d(key, chain_buffer, aes_out);
-
-       for (i = 0; i < num_blocks; i++) {
-               bitwise_xor(aes_out, &message[payload_index], chain_buffer);
-
-               payload_index += 16;
-               aes128k128d(key, chain_buffer, aes_out);
-       }
-
-       /* Add on the final payload block if it needs padding */
-       if (payload_remainder > 0) {
-               for (j = 0; j < 16; j++)
-                       padded_buffer[j] = 0x00;
-               for (j = 0; j < payload_remainder; j++)
-                       padded_buffer[j] = message[payload_index++];
-               bitwise_xor(aes_out, padded_buffer, chain_buffer);
-               aes128k128d(key, chain_buffer, aes_out);
-       }
-
-       for (j = 0 ; j < 8; j++)
-               mic[j] = aes_out[j];
-
-       /* Insert MIC into payload */
-       for (j = 0; j < 8; j++)
-               message[payload_index + j] = mic[j];
-
-       payload_index = hdrlen + 8;
-       for (i = 0; i < num_blocks; i++) {
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists, message, pn_vector, i + 1);
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, &message[payload_index], chain_buffer);
-               for (j = 0; j < 16; j++)
-                       message[payload_index++] = chain_buffer[j];
-       }
-
-       if (payload_remainder > 0) { /* If there is a short final block, then pad it,*/
-               /* encrypt it and copy the unpadded part back   */
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists, message, pn_vector, num_blocks + 1);
-
-               for (j = 0; j < 16; j++)
-                       padded_buffer[j] = 0x00;
-               for (j = 0; j < payload_remainder; j++)
-                       padded_buffer[j] = message[payload_index + j];
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, padded_buffer, chain_buffer);
-               for (j = 0; j < payload_remainder; j++)
-                       message[payload_index++] = chain_buffer[j];
-       }
-
-       /* Encrypt the MIC */
-       construct_ctr_preload(ctr_preload, a4_exists, qc_exists, message, pn_vector, 0);
-
-       for (j = 0; j < 16; j++)
-               padded_buffer[j] = 0x00;
-       for (j = 0; j < 8; j++)
-               padded_buffer[j] = message[j + hdrlen + 8 + plen - 8];
-
-       aes128k128d(key, ctr_preload, aes_out);
-       bitwise_xor(aes_out, padded_buffer, chain_buffer);
-       for (j = 0; j < 8; j++)
-               message[payload_index++] = chain_buffer[j];
-
-       /* compare the mic */
-       for (i = 0; i < 8; i++) {
-               if (pframe[hdrlen + 8 + plen - 8 + i] != message[hdrlen + 8 + plen - 8 + i])
-                       res = _FAIL;
-       }
-
-       return res;
-}
-
-u32 rtw_aes_decrypt(struct adapter *padapter, struct recv_frame *precvframe)
-{      /*  exclude ICV */
-       /* Intermediate Buffers */
-       int             length;
-       u8      *pframe, *prwskey;      /*  *payload,*iv */
-       struct  sta_info                *stainfo;
-       struct  rx_pkt_attrib    *prxattrib = &precvframe->attrib;
-       struct  security_priv   *psecuritypriv = &padapter->securitypriv;
-       u32     res = _SUCCESS;
-
-       pframe = precvframe->rx_data;
-
-       /* 4 start to encrypt each fragment */
-       if (prxattrib->encrypt == _AES_) {
-               stainfo = rtw_get_stainfo(&padapter->stapriv, &prxattrib->ta[0]);
-               if (stainfo) {
-                       if (is_multicast_ether_addr(prxattrib->ra)) {
-                               /* in concurrent we should use sw descrypt in group key, so we remove this message */
-                               if (!psecuritypriv->binstallGrpkey) {
-                                       res = _FAIL;
-                                       goto exit;
-                               }
-                               prwskey = psecuritypriv->dot118021XGrpKey[prxattrib->key_index].skey;
-                               if (psecuritypriv->dot118021XGrpKeyid != prxattrib->key_index) {
-                                       res = _FAIL;
-                                       goto exit;
-                               }
-                       } else {
-                               prwskey = &stainfo->dot118021x_UncstKey.skey[0];
-                       }
-                       length = precvframe->len - prxattrib->hdrlen - prxattrib->iv_len;
-                       res = aes_decipher(prwskey, prxattrib->hdrlen, pframe, length);
-               } else {
-                       res = _FAIL;
-               }
-       }
-
-exit:
-       return res;
-}
diff --git a/drivers/staging/r8188eu/core/rtw_sta_mgt.c b/drivers/staging/r8188eu/core/rtw_sta_mgt.c
deleted file mode 100644 (file)
index e1ae185..0000000
+++ /dev/null
@@ -1,490 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _RTW_STA_MGT_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/sta_info.h"
-
-static void _rtw_init_stainfo(struct sta_info *psta)
-{
-
-       memset((u8 *)psta, 0, sizeof(struct sta_info));
-
-       spin_lock_init(&psta->lock);
-       INIT_LIST_HEAD(&psta->list);
-       INIT_LIST_HEAD(&psta->hash_list);
-       rtw_init_queue(&psta->sleep_q);
-       psta->sleepq_len = 0;
-
-       _rtw_init_sta_xmit_priv(&psta->sta_xmitpriv);
-       _rtw_init_sta_recv_priv(&psta->sta_recvpriv);
-
-       INIT_LIST_HEAD(&psta->asoc_list);
-
-       INIT_LIST_HEAD(&psta->auth_list);
-
-       psta->expire_to = 0;
-
-       psta->flags = 0;
-
-       psta->capability = 0;
-
-       psta->bpairwise_key_installed = false;
-
-       psta->nonerp_set = 0;
-       psta->no_short_slot_time_set = 0;
-       psta->no_short_preamble_set = 0;
-       psta->no_ht_gf_set = 0;
-       psta->no_ht_set = 0;
-       psta->ht_20mhz_set = 0;
-
-       psta->under_exist_checking = 0;
-
-       psta->keep_alive_trycnt = 0;
-}
-
-int _rtw_init_sta_priv(struct sta_priv *pstapriv)
-{
-       struct sta_info *psta;
-       s32 i;
-
-       pstapriv->pallocated_stainfo_buf = vzalloc(sizeof(struct sta_info) * NUM_STA + 4);
-
-       if (!pstapriv->pallocated_stainfo_buf)
-               return -ENOMEM;
-
-       pstapriv->pstainfo_buf = pstapriv->pallocated_stainfo_buf + 4 -
-               ((size_t)(pstapriv->pallocated_stainfo_buf) & 3);
-
-       rtw_init_queue(&pstapriv->free_sta_queue);
-
-       spin_lock_init(&pstapriv->sta_hash_lock);
-
-       pstapriv->asoc_sta_count = 0;
-       rtw_init_queue(&pstapriv->sleep_q);
-       rtw_init_queue(&pstapriv->wakeup_q);
-
-       psta = (struct sta_info *)(pstapriv->pstainfo_buf);
-
-       for (i = 0; i < NUM_STA; i++) {
-               _rtw_init_stainfo(psta);
-
-               INIT_LIST_HEAD(&pstapriv->sta_hash[i]);
-
-               list_add_tail(&psta->list, get_list_head(&pstapriv->free_sta_queue));
-
-               psta++;
-       }
-
-       pstapriv->sta_dz_bitmap = 0;
-       pstapriv->tim_bitmap = 0;
-
-       INIT_LIST_HEAD(&pstapriv->asoc_list);
-       INIT_LIST_HEAD(&pstapriv->auth_list);
-       spin_lock_init(&pstapriv->asoc_list_lock);
-       spin_lock_init(&pstapriv->auth_list_lock);
-       pstapriv->asoc_list_cnt = 0;
-       pstapriv->auth_list_cnt = 0;
-
-       pstapriv->auth_to = 3; /*  3*2 = 6 sec */
-       pstapriv->assoc_to = 3;
-       pstapriv->expire_to = 3; /*  3*2 = 6 sec */
-       pstapriv->max_num_sta = NUM_STA;
-
-       return 0;
-}
-
-inline int rtw_stainfo_offset(struct sta_priv *stapriv, struct sta_info *sta)
-{
-       return (((u8 *)sta) - stapriv->pstainfo_buf) / sizeof(struct sta_info);
-}
-
-inline struct sta_info *rtw_get_stainfo_by_offset(struct sta_priv *stapriv, int offset)
-{
-       return (struct sta_info *)(stapriv->pstainfo_buf + offset * sizeof(struct sta_info));
-}
-
-void _rtw_free_sta_priv(struct sta_priv *pstapriv)
-{
-       struct list_head *phead, *plist;
-       struct sta_info *psta = NULL;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       int     index;
-
-       if (pstapriv) {
-               /*      delete all reordering_ctrl_timer                */
-               spin_lock_bh(&pstapriv->sta_hash_lock);
-               for (index = 0; index < NUM_STA; index++) {
-                       phead = &pstapriv->sta_hash[index];
-                       plist = phead->next;
-
-                       while (phead != plist) {
-                               int i;
-                               psta = container_of(plist, struct sta_info, hash_list);
-                               plist = plist->next;
-
-                               for (i = 0; i < 16; i++) {
-                                       preorder_ctrl = &psta->recvreorder_ctrl[i];
-                                       _cancel_timer_ex(&preorder_ctrl->reordering_ctrl_timer);
-                               }
-                       }
-               }
-               spin_unlock_bh(&pstapriv->sta_hash_lock);
-               /*===============================*/
-
-               vfree(pstapriv->pallocated_stainfo_buf);
-       }
-}
-
-static void _rtw_reordering_ctrl_timeout_handler(struct timer_list *t)
-{
-       struct recv_reorder_ctrl *preorder_ctrl;
-
-       preorder_ctrl = from_timer(preorder_ctrl, t, reordering_ctrl_timer);
-       rtw_reordering_ctrl_timeout_handler(preorder_ctrl);
-}
-
-static void rtw_init_recv_timer(struct recv_reorder_ctrl *preorder_ctrl)
-{
-       timer_setup(&preorder_ctrl->reordering_ctrl_timer, _rtw_reordering_ctrl_timeout_handler, 0);
-}
-
-static void _addba_timer_hdl(struct timer_list *t)
-{
-       struct sta_info *psta = from_timer(psta, t, addba_retry_timer);
-
-       addba_timer_hdl(psta);
-}
-
-static void init_addba_retry_timer(struct adapter *padapter, struct sta_info *psta)
-{
-       timer_setup(&psta->addba_retry_timer, _addba_timer_hdl, 0);
-}
-
-struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr)
-{
-       s32     index;
-       struct list_head *phash_list;
-       struct sta_info *psta;
-       struct __queue *pfree_sta_queue;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       int i = 0;
-       u16  wRxSeqInitialValue = 0xffff;
-
-       pfree_sta_queue = &pstapriv->free_sta_queue;
-
-       spin_lock_bh(&pfree_sta_queue->lock);
-
-       if (list_empty(&pfree_sta_queue->queue)) {
-               spin_unlock_bh(&pfree_sta_queue->lock);
-               psta = NULL;
-       } else {
-               psta = container_of((&pfree_sta_queue->queue)->next, struct sta_info, list);
-               list_del_init(&psta->list);
-               spin_unlock_bh(&pfree_sta_queue->lock);
-               _rtw_init_stainfo(psta);
-               memcpy(psta->hwaddr, hwaddr, ETH_ALEN);
-               index = wifi_mac_hash(hwaddr);
-               if (index >= NUM_STA) {
-                       psta = NULL;
-                       goto exit;
-               }
-               phash_list = &pstapriv->sta_hash[index];
-
-               spin_lock_bh(&pstapriv->sta_hash_lock);
-
-               list_add_tail(&psta->hash_list, phash_list);
-
-               pstapriv->asoc_sta_count++;
-
-               spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-/*  Commented by Albert 2009/08/13 */
-/*  For the SMC router, the sequence number of first packet of WPS handshake will be 0. */
-/*  In this case, this packet will be dropped by recv_decache function if we use the 0x00 as the default value for tid_rxseq variable. */
-/*  So, we initialize the tid_rxseq variable as the 0xffff. */
-
-               for (i = 0; i < 16; i++)
-                       memcpy(&psta->sta_recvpriv.rxcache.tid_rxseq[i], &wRxSeqInitialValue, 2);
-
-               init_addba_retry_timer(pstapriv->padapter, psta);
-
-               /* for A-MPDU Rx reordering buffer control */
-               for (i = 0; i < 16; i++) {
-                       preorder_ctrl = &psta->recvreorder_ctrl[i];
-
-                       preorder_ctrl->padapter = pstapriv->padapter;
-
-                       preorder_ctrl->enable = false;
-
-                       preorder_ctrl->indicate_seq = 0xffff;
-                       preorder_ctrl->wend_b = 0xffff;
-                       preorder_ctrl->wsize_b = 64;/* 64; */
-
-                       rtw_init_queue(&preorder_ctrl->pending_recvframe_queue);
-
-                       rtw_init_recv_timer(preorder_ctrl);
-               }
-
-               /* init for DM */
-               psta->rssi_stat.UndecoratedSmoothedPWDB = (-1);
-               psta->rssi_stat.UndecoratedSmoothedCCK = (-1);
-
-               /* init for the sequence number of received management frame */
-               psta->RxMgmtFrameSeqNum = 0xffff;
-       }
-
-exit:
-
-       return psta;
-}
-
-/*  using pstapriv->sta_hash_lock to protect */
-void rtw_free_stainfo(struct adapter *padapter, struct sta_info *psta)
-{
-       int i;
-       struct __queue *pfree_sta_queue;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       struct  sta_xmit_priv   *pstaxmitpriv;
-       struct  xmit_priv       *pxmitpriv = &padapter->xmitpriv;
-       struct  sta_priv *pstapriv = &padapter->stapriv;
-
-       if (!psta)
-               return;
-
-       pfree_sta_queue = &pstapriv->free_sta_queue;
-
-       pstaxmitpriv = &psta->sta_xmitpriv;
-
-       spin_lock_bh(&pxmitpriv->lock);
-
-       rtw_free_xmitframe_list(pxmitpriv, get_list_head(&psta->sleep_q));
-       psta->sleepq_len = 0;
-
-       rtw_free_xmitframe_list(pxmitpriv, &pstaxmitpriv->vo_q.sta_pending);
-
-       list_del_init(&pstaxmitpriv->vo_q.tx_pending);
-
-       rtw_free_xmitframe_list(pxmitpriv, &pstaxmitpriv->vi_q.sta_pending);
-
-       list_del_init(&pstaxmitpriv->vi_q.tx_pending);
-
-       rtw_free_xmitframe_list(pxmitpriv, &pstaxmitpriv->bk_q.sta_pending);
-
-       list_del_init(&pstaxmitpriv->bk_q.tx_pending);
-
-       rtw_free_xmitframe_list(pxmitpriv, &pstaxmitpriv->be_q.sta_pending);
-
-       list_del_init(&pstaxmitpriv->be_q.tx_pending);
-
-       spin_unlock_bh(&pxmitpriv->lock);
-
-       list_del_init(&psta->hash_list);
-       pstapriv->asoc_sta_count--;
-
-       /*  re-init sta_info; 20061114 */
-       _rtw_init_sta_xmit_priv(&psta->sta_xmitpriv);
-       _rtw_init_sta_recv_priv(&psta->sta_recvpriv);
-
-       _cancel_timer_ex(&psta->addba_retry_timer);
-
-       /* for A-MPDU Rx reordering buffer control, cancel reordering_ctrl_timer */
-       for (i = 0; i < 16 ; i++) {
-               struct list_head *phead, *plist;
-               struct recv_frame *prframe;
-               struct __queue *ppending_recvframe_queue;
-               struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
-
-               preorder_ctrl = &psta->recvreorder_ctrl[i];
-
-               _cancel_timer_ex(&preorder_ctrl->reordering_ctrl_timer);
-
-               ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-
-               spin_lock_bh(&ppending_recvframe_queue->lock);
-
-               phead =         get_list_head(ppending_recvframe_queue);
-               plist = phead->next;
-
-               while (!list_empty(phead)) {
-                       prframe = container_of(plist, struct recv_frame, list);
-
-                       plist = plist->next;
-
-                       list_del_init(&prframe->list);
-
-                       rtw_free_recvframe(prframe, pfree_recv_queue);
-               }
-
-               spin_unlock_bh(&ppending_recvframe_queue->lock);
-       }
-
-       if (!(psta->state & WIFI_AP_STATE))
-               rtl8188e_SetHalODMVar(padapter, psta, false);
-
-       spin_lock_bh(&pstapriv->auth_list_lock);
-       if (!list_empty(&psta->auth_list)) {
-               list_del_init(&psta->auth_list);
-               pstapriv->auth_list_cnt--;
-       }
-       spin_unlock_bh(&pstapriv->auth_list_lock);
-
-       psta->expire_to = 0;
-
-       psta->sleepq_ac_len = 0;
-       psta->qos_info = 0;
-
-       psta->max_sp_len = 0;
-       psta->uapsd_bk = 0;
-       psta->uapsd_be = 0;
-       psta->uapsd_vi = 0;
-       psta->uapsd_vo = 0;
-       psta->has_legacy_ac = 0;
-
-       pstapriv->sta_dz_bitmap &= ~BIT(psta->aid);
-       pstapriv->tim_bitmap &= ~BIT(psta->aid);
-
-       if ((psta->aid > 0) && (pstapriv->sta_aid[psta->aid - 1] == psta)) {
-               pstapriv->sta_aid[psta->aid - 1] = NULL;
-               psta->aid = 0;
-       }
-
-       psta->under_exist_checking = 0;
-
-       spin_lock_bh(&pfree_sta_queue->lock);
-       list_add_tail(&psta->list, get_list_head(pfree_sta_queue));
-       spin_unlock_bh(&pfree_sta_queue->lock);
-}
-
-/*  free all stainfo which in sta_hash[all] */
-void rtw_free_all_stainfo(struct adapter *padapter)
-{
-       struct list_head *plist, *phead;
-       s32     index;
-       struct sta_info *psta = NULL;
-       struct  sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info *pbcmc_stainfo = rtw_get_bcmc_stainfo(padapter);
-
-       if (pstapriv->asoc_sta_count == 1)
-               return;
-
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-
-       for (index = 0; index < NUM_STA; index++) {
-               phead = &pstapriv->sta_hash[index];
-               plist = phead->next;
-
-               while (phead != plist) {
-                       psta = container_of(plist, struct sta_info, hash_list);
-
-                       plist = plist->next;
-
-                       if (pbcmc_stainfo != psta)
-                               rtw_free_stainfo(padapter, psta);
-               }
-       }
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-}
-
-/* any station allocated can be searched by hash list */
-struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr)
-{
-       struct sta_info *ploop, *psta = NULL;
-       u32     index;
-       u8 *addr;
-       u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-       if (!hwaddr)
-               return NULL;
-
-       if (is_multicast_ether_addr(hwaddr))
-               addr = bc_addr;
-       else
-               addr = hwaddr;
-
-       index = wifi_mac_hash(addr);
-
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-
-       list_for_each_entry(ploop, &pstapriv->sta_hash[index], hash_list) {
-               if (!memcmp(ploop->hwaddr, addr, ETH_ALEN)) {
-                       psta = ploop;
-                       break;
-               }
-       }
-
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-       return psta;
-}
-
-u32 rtw_init_bcmc_stainfo(struct adapter *padapter)
-{
-       struct sta_info         *psta;
-       u32 res = _SUCCESS;
-       unsigned char bcast_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-       struct  sta_priv *pstapriv = &padapter->stapriv;
-
-       psta = rtw_alloc_stainfo(pstapriv, bcast_addr);
-
-       if (!psta) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       /*  default broadcast & multicast use macid 1 */
-       psta->mac_id = 1;
-
-exit:
-
-       return res;
-}
-
-struct sta_info *rtw_get_bcmc_stainfo(struct adapter *padapter)
-{
-       struct sta_info         *psta;
-       struct sta_priv         *pstapriv = &padapter->stapriv;
-       u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-       psta = rtw_get_stainfo(pstapriv, bc_addr);
-
-       return psta;
-}
-
-u8 rtw_access_ctrl(struct adapter *padapter, u8 *mac_addr)
-{
-       u8 res = true;
-       struct list_head *plist, *phead;
-       struct rtw_wlan_acl_node *paclnode;
-       u8 match = false;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-       struct __queue *pacl_node_q = &pacl_list->acl_node_q;
-
-       spin_lock_bh(&pacl_node_q->lock);
-       phead = get_list_head(pacl_node_q);
-       plist = phead->next;
-       while (phead != plist) {
-               paclnode = container_of(plist, struct rtw_wlan_acl_node, list);
-               plist = plist->next;
-
-               if (!memcmp(paclnode->addr, mac_addr, ETH_ALEN)) {
-                       if (paclnode->valid) {
-                               match = true;
-                               break;
-                       }
-               }
-       }
-       spin_unlock_bh(&pacl_node_q->lock);
-
-       if (pacl_list->mode == 1)/* accept unless in deny list */
-               res = !match;
-       else if (pacl_list->mode == 2)/* deny unless in accept list */
-               res = match;
-       else
-               res = true;
-
-       return res;
-}
diff --git a/drivers/staging/r8188eu/core/rtw_wlan_util.c b/drivers/staging/r8188eu/core/rtw_wlan_util.c
deleted file mode 100644 (file)
index f1ebb53..0000000
+++ /dev/null
@@ -1,1551 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#define _RTW_WLAN_UTIL_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/wifi.h"
-
-static unsigned char ARTHEROS_OUI1[] = {0x00, 0x03, 0x7f};
-static unsigned char ARTHEROS_OUI2[] = {0x00, 0x13, 0x74};
-
-static unsigned char BROADCOM_OUI1[] = {0x00, 0x10, 0x18};
-static unsigned char BROADCOM_OUI2[] = {0x00, 0x0a, 0xf7};
-
-static unsigned char CISCO_OUI[] = {0x00, 0x40, 0x96};
-static unsigned char MARVELL_OUI[] = {0x00, 0x50, 0x43};
-static unsigned char RALINK_OUI[] = {0x00, 0x0c, 0x43};
-static unsigned char REALTEK_OUI[] = {0x00, 0xe0, 0x4c};
-static unsigned char AIRGOCAP_OUI[] = {0x00, 0x0a, 0xf5};
-static unsigned char EPIGRAM_OUI[] = {0x00, 0x90, 0x4c};
-
-unsigned char REALTEK_96B_IE[] = {0x00, 0xe0, 0x4c, 0x02, 0x01, 0x20};
-
-#define R2T_PHY_DELAY  (0)
-
-/* define WAIT_FOR_BCN_TO_M    (3000) */
-#define WAIT_FOR_BCN_TO_MIN    (6000)
-#define WAIT_FOR_BCN_TO_MAX    (20000)
-
-static u8 rtw_basic_rate_cck[4] = {
-       IEEE80211_CCK_RATE_1MB | IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_2MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_CCK_RATE_5MB | IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_11MB | IEEE80211_BASIC_RATE_MASK
-};
-
-static u8 rtw_basic_rate_ofdm[3] = {
-       IEEE80211_OFDM_RATE_6MB | IEEE80211_BASIC_RATE_MASK, IEEE80211_OFDM_RATE_12MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_OFDM_RATE_24MB | IEEE80211_BASIC_RATE_MASK
-};
-
-static u8 rtw_basic_rate_mix[7] = {
-       IEEE80211_CCK_RATE_1MB | IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_2MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_CCK_RATE_5MB | IEEE80211_BASIC_RATE_MASK, IEEE80211_CCK_RATE_11MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_OFDM_RATE_6MB | IEEE80211_BASIC_RATE_MASK, IEEE80211_OFDM_RATE_12MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_OFDM_RATE_24MB | IEEE80211_BASIC_RATE_MASK
-};
-
-bool cckrates_included(unsigned char *rate, int ratelen)
-{
-       int     i;
-
-       for (i = 0; i < ratelen; i++) {
-               if  ((((rate[i]) & 0x7f) == 2)  || (((rate[i]) & 0x7f) == 4) ||
-                    (((rate[i]) & 0x7f) == 11)  || (((rate[i]) & 0x7f) == 22))
-                       return true;
-       }
-       return false;
-}
-
-bool cckratesonly_included(unsigned char *rate, int ratelen)
-{
-       int     i;
-
-       for (i = 0; i < ratelen; i++) {
-               if ((((rate[i]) & 0x7f) != 2) && (((rate[i]) & 0x7f) != 4) &&
-                   (((rate[i]) & 0x7f) != 11)  && (((rate[i]) & 0x7f) != 22))
-                       return false;
-       }
-
-       return true;
-}
-
-unsigned char networktype_to_raid(unsigned char network_type)
-{
-       unsigned char raid;
-
-       switch (network_type) {
-       case WIRELESS_11B:
-               raid = RATR_INX_WIRELESS_B;
-               break;
-       case WIRELESS_11G:
-               raid = RATR_INX_WIRELESS_G;
-               break;
-       case WIRELESS_11BG:
-               raid = RATR_INX_WIRELESS_GB;
-               break;
-       case WIRELESS_11_24N:
-               raid = RATR_INX_WIRELESS_N;
-               break;
-       case WIRELESS_11G_24N:
-               raid = RATR_INX_WIRELESS_NG;
-               break;
-       case WIRELESS_11BG_24N:
-               raid = RATR_INX_WIRELESS_NGB;
-               break;
-       default:
-               raid = RATR_INX_WIRELESS_GB;
-               break;
-       }
-       return raid;
-}
-
-u8 judge_network_type(struct adapter *padapter, unsigned char *rate, int ratelen)
-{
-       u8 network_type = 0;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pmlmeext->cur_channel > 14) {
-               network_type |= WIRELESS_INVALID;
-       } else {
-               if (pmlmeinfo->HT_enable)
-                       network_type = WIRELESS_11_24N;
-
-               if (cckratesonly_included(rate, ratelen))
-                       network_type |= WIRELESS_11B;
-               else if (cckrates_included(rate, ratelen))
-                       network_type |= WIRELESS_11BG;
-               else
-                       network_type |= WIRELESS_11G;
-       }
-       return  network_type;
-}
-
-static unsigned char ratetbl_val_2wifirate(unsigned char rate)
-{
-       unsigned char val = 0;
-
-       switch (rate & 0x7f) {
-       case 0:
-               val = IEEE80211_CCK_RATE_1MB;
-               break;
-       case 1:
-               val = IEEE80211_CCK_RATE_2MB;
-               break;
-       case 2:
-               val = IEEE80211_CCK_RATE_5MB;
-               break;
-       case 3:
-               val = IEEE80211_CCK_RATE_11MB;
-               break;
-       case 4:
-               val = IEEE80211_OFDM_RATE_6MB;
-               break;
-       case 5:
-               val = IEEE80211_OFDM_RATE_9MB;
-               break;
-       case 6:
-               val = IEEE80211_OFDM_RATE_12MB;
-               break;
-       case 7:
-               val = IEEE80211_OFDM_RATE_18MB;
-               break;
-       case 8:
-               val = IEEE80211_OFDM_RATE_24MB;
-               break;
-       case 9:
-               val = IEEE80211_OFDM_RATE_36MB;
-               break;
-       case 10:
-               val = IEEE80211_OFDM_RATE_48MB;
-               break;
-       case 11:
-               val = IEEE80211_OFDM_RATE_54MB;
-               break;
-       }
-       return val;
-}
-
-static bool is_basicrate(struct adapter *padapter, unsigned char rate)
-{
-       int i;
-       unsigned char val;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       for (i = 0; i < NumRates; i++) {
-               val = pmlmeext->basicrate[i];
-
-               if ((val != 0xff) && (val != 0xfe)) {
-                       if (rate == ratetbl_val_2wifirate(val))
-                               return true;
-               }
-       }
-       return false;
-}
-
-static unsigned int ratetbl2rateset(struct adapter *padapter, unsigned char *rateset)
-{
-       int i;
-       unsigned char rate;
-       unsigned int    len = 0;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       for (i = 0; i < NumRates; i++) {
-               rate = pmlmeext->datarate[i];
-
-               switch (rate) {
-               case 0xff:
-                       return len;
-               case 0xfe:
-                       continue;
-               default:
-                       rate = ratetbl_val_2wifirate(rate);
-
-                       if (is_basicrate(padapter, rate))
-                               rate |= IEEE80211_BASIC_RATE_MASK;
-
-                       rateset[len] = rate;
-                       len++;
-                       break;
-               }
-       }
-       return len;
-}
-
-void get_rate_set(struct adapter *padapter, unsigned char *pbssrate, int *bssrate_len)
-{
-       unsigned char supportedrates[NumRates];
-
-       memset(supportedrates, 0, NumRates);
-       *bssrate_len = ratetbl2rateset(padapter, supportedrates);
-       memcpy(pbssrate, supportedrates, *bssrate_len);
-}
-
-void Save_DM_Func_Flag(struct adapter *padapter)
-{
-       struct hal_data_8188e *haldata = &padapter->haldata;
-       struct odm_dm_struct *odmpriv = &haldata->odmpriv;
-
-       odmpriv->BK_SupportAbility = odmpriv->SupportAbility;
-}
-
-void Restore_DM_Func_Flag(struct adapter *padapter)
-{
-       struct hal_data_8188e *haldata = &padapter->haldata;
-       struct odm_dm_struct *odmpriv = &haldata->odmpriv;
-
-       odmpriv->SupportAbility = odmpriv->BK_SupportAbility;
-}
-
-void Set_MSR(struct adapter *padapter, u8 type)
-{
-       u8 val8;
-       int res;
-
-       res = rtw_read8(padapter, MSR, &val8);
-       if (res)
-               return;
-
-       val8 &= 0x0c;
-       val8 |= type;
-       rtw_write8(padapter, MSR, val8);
-}
-
-inline u8 rtw_get_oper_ch(struct adapter *adapter)
-{
-       return adapter->mlmeextpriv.oper_channel;
-}
-
-inline void rtw_set_oper_ch(struct adapter *adapter, u8 ch)
-{
-       adapter->mlmeextpriv.oper_channel = ch;
-}
-
-inline void rtw_set_oper_bw(struct adapter *adapter, u8 bw)
-{
-       adapter->mlmeextpriv.oper_bwmode = bw;
-}
-
-inline void rtw_set_oper_choffset(struct adapter *adapter, u8 offset)
-{
-       adapter->mlmeextpriv.oper_ch_offset = offset;
-}
-
-void SelectChannel(struct adapter *padapter, unsigned char channel)
-{
-       /* saved channel info */
-       rtw_set_oper_ch(padapter, channel);
-       PHY_SwChnl8188E(padapter, channel);
-}
-
-void SetBWMode(struct adapter *padapter, unsigned short bwmode,
-              unsigned char channel_offset)
-{
-       /* saved bw info */
-       rtw_set_oper_bw(padapter, bwmode);
-       rtw_set_oper_choffset(padapter, channel_offset);
-
-       PHY_SetBWMode8188E(padapter, (enum ht_channel_width)bwmode, channel_offset);
-}
-
-void set_channel_bwmode(struct adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode)
-{
-       u8 center_ch;
-
-       if ((bwmode == HT_CHANNEL_WIDTH_20) ||
-           (channel_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)) {
-               /* SelectChannel(padapter, channel); */
-               center_ch = channel;
-       } else {
-               /* switch to the proper channel */
-               if (channel_offset == HAL_PRIME_CHNL_OFFSET_LOWER) {
-                       /* SelectChannel(padapter, channel + 2); */
-                       center_ch = channel + 2;
-               } else {
-                       /* SelectChannel(padapter, channel - 2); */
-                       center_ch = channel - 2;
-               }
-       }
-
-       /* set Channel */
-       /* saved channel/bw info */
-       rtw_set_oper_ch(padapter, channel);
-       rtw_set_oper_bw(padapter, bwmode);
-       rtw_set_oper_choffset(padapter, channel_offset);
-
-       PHY_SwChnl8188E(padapter, center_ch); /*  set center channel */
-       SetBWMode(padapter, bwmode, channel_offset);
-}
-
-__inline u8 *get_my_bssid(struct wlan_bssid_ex *pnetwork)
-{
-       return pnetwork->MacAddress;
-}
-
-u16 get_beacon_interval(struct wlan_bssid_ex *bss)
-{
-       __le16 val;
-       memcpy((unsigned char *)&val, rtw_get_beacon_interval_from_ie(bss->IEs), 2);
-
-       return le16_to_cpu(val);
-}
-
-bool r8188eu_is_client_associated_to_ap(struct adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext;
-       struct mlme_ext_info    *pmlmeinfo;
-
-       if (!padapter)
-               return false;
-
-       pmlmeext = &padapter->mlmeextpriv;
-       pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if ((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE))
-               return true;
-
-       return false;
-}
-
-bool r8188eu_is_client_associated_to_ibss(struct adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if ((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE))
-               return true;
-
-       return false;
-}
-
-bool r8188eu_is_ibss_empty(struct adapter *padapter)
-{
-       unsigned int i;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       for (i = IBSS_START_MAC_ID; i < NUM_STA; i++) {
-               if (pmlmeinfo->FW_sta_info[i].status == 1)
-                       return false;
-       }
-       return true;
-}
-
-unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval)
-{
-       if ((bcn_interval << 2) < WAIT_FOR_BCN_TO_MIN)
-               return WAIT_FOR_BCN_TO_MIN;
-       else if ((bcn_interval << 2) > WAIT_FOR_BCN_TO_MAX)
-               return WAIT_FOR_BCN_TO_MAX;
-       else
-               return bcn_interval << 2;
-}
-
-void invalidate_cam_all(struct adapter *padapter)
-{
-       rtw_write32(padapter, RWCAM, BIT(31) | BIT(30));
-}
-
-void write_cam(struct adapter *padapter, u8 entry, u16 ctrl, u8 *mac, u8 *key)
-{
-       unsigned int    i, val, addr;
-       int j;
-       u32     cam_val[2];
-
-       addr = entry << 3;
-
-       for (j = 5; j >= 0; j--) {
-               switch (j) {
-               case 0:
-                       val = (ctrl | (mac[0] << 16) | (mac[1] << 24));
-                       break;
-               case 1:
-                       val = (mac[2] | (mac[3] << 8) | (mac[4] << 16) | (mac[5] << 24));
-                       break;
-               default:
-                       i = (j - 2) << 2;
-                       val = (key[i] | (key[i + 1] << 8) | (key[i + 2] << 16) | (key[i + 3] << 24));
-                       break;
-               }
-
-               cam_val[0] = val;
-               cam_val[1] = addr + (unsigned int)j;
-
-               rtw_write32(padapter, WCAMI, cam_val[0]);
-               rtw_write32(padapter, RWCAM, CAM_POLLINIG | CAM_WRITE | cam_val[1]);
-       }
-}
-
-void clear_cam_entry(struct adapter *padapter, u8 entry)
-{
-       unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-       unsigned char null_key[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                                   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
-       write_cam(padapter, entry, 0, null_sta, null_key);
-}
-
-int allocate_fw_sta_entry(struct adapter *padapter)
-{
-       unsigned int mac_id;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       for (mac_id = IBSS_START_MAC_ID; mac_id < NUM_STA; mac_id++) {
-               if (pmlmeinfo->FW_sta_info[mac_id].status == 0) {
-                       pmlmeinfo->FW_sta_info[mac_id].status = 1;
-                       pmlmeinfo->FW_sta_info[mac_id].retry = 0;
-                       break;
-               }
-       }
-
-       return mac_id;
-}
-
-void flush_all_cam_entry(struct adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       rtw_write32(padapter, RWCAM, BIT(31) | BIT(30));
-
-       memset((u8 *)(pmlmeinfo->FW_sta_info), 0, sizeof(pmlmeinfo->FW_sta_info));
-}
-
-int WMM_param_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE)
-{
-       /* struct registry_priv *pregpriv = &padapter->registrypriv; */
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pmlmepriv->qospriv.qos_option == 0) {
-               pmlmeinfo->WMM_enable = 0;
-               return _FAIL;
-       }
-
-       pmlmeinfo->WMM_enable = 1;
-       memcpy(&pmlmeinfo->WMM_param, pIE->data + 6, sizeof(struct WMM_para_element));
-       return true;
-}
-
-static void set_acm_ctrl(struct adapter *adapter, u8 acm_mask)
-{
-       u8 acmctrl;
-       int res = rtw_read8(adapter, REG_ACMHWCTRL, &acmctrl);
-
-       if (res)
-               return;
-
-       if (acm_mask > 1)
-               acmctrl = acmctrl | 0x1;
-
-       if (acm_mask & BIT(3))
-               acmctrl |= ACMHW_VOQEN;
-       else
-               acmctrl &= (~ACMHW_VOQEN);
-
-       if (acm_mask & BIT(2))
-               acmctrl |= ACMHW_VIQEN;
-       else
-               acmctrl &= (~ACMHW_VIQEN);
-
-       if (acm_mask & BIT(1))
-               acmctrl |= ACMHW_BEQEN;
-       else
-               acmctrl &= (~ACMHW_BEQEN);
-
-       rtw_write8(adapter, REG_ACMHWCTRL, acmctrl);
-}
-
-void WMMOnAssocRsp(struct adapter *padapter)
-{
-       u8      ACI, ACM, AIFS, ECWMin, ECWMax, aSifsTime;
-       u8      acm_mask;
-       u16     TXOP;
-       u32     acParm, i;
-       u32     edca[4], inx[4];
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct xmit_priv                *pxmitpriv = &padapter->xmitpriv;
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       struct hal_data_8188e *haldata = &padapter->haldata;
-
-       if (pmlmeinfo->WMM_enable == 0) {
-               padapter->mlmepriv.acm_mask = 0;
-               return;
-       }
-
-       acm_mask = 0;
-
-       if (pmlmeext->cur_wireless_mode == WIRELESS_11B)
-               aSifsTime = 10;
-       else
-               aSifsTime = 16;
-
-       for (i = 0; i < 4; i++) {
-               ACI = (pmlmeinfo->WMM_param.ac_param[i].ACI_AIFSN >> 5) & 0x03;
-               ACM = (pmlmeinfo->WMM_param.ac_param[i].ACI_AIFSN >> 4) & 0x01;
-
-               /* AIFS = AIFSN * slot time + SIFS - r2t phy delay */
-               AIFS = (pmlmeinfo->WMM_param.ac_param[i].ACI_AIFSN & 0x0f) * pmlmeinfo->slotTime + aSifsTime;
-
-               ECWMin = (pmlmeinfo->WMM_param.ac_param[i].CW & 0x0f);
-               ECWMax = (pmlmeinfo->WMM_param.ac_param[i].CW & 0xf0) >> 4;
-               TXOP = le16_to_cpu(pmlmeinfo->WMM_param.ac_param[i].TXOP_limit);
-
-               acParm = AIFS | (ECWMin << 8) | (ECWMax << 12) | (TXOP << 16);
-
-               switch (ACI) {
-               case 0x0:
-                       haldata->AcParam_BE = acParm;
-                       rtw_write32(padapter, REG_EDCA_BE_PARAM, acParm);
-                       acm_mask |= (ACM ? BIT(1) : 0);
-                       edca[XMIT_BE_QUEUE] = acParm;
-                       break;
-               case 0x1:
-                       rtw_write32(padapter, REG_EDCA_BK_PARAM, acParm);
-                       edca[XMIT_BK_QUEUE] = acParm;
-                       break;
-               case 0x2:
-                       rtw_write32(padapter, REG_EDCA_VI_PARAM, acParm);
-                       acm_mask |= (ACM ? BIT(2) : 0);
-                       edca[XMIT_VI_QUEUE] = acParm;
-                       break;
-               case 0x3:
-                       rtw_write32(padapter, REG_EDCA_VO_PARAM, acParm);
-                       acm_mask |= (ACM ? BIT(3) : 0);
-                       edca[XMIT_VO_QUEUE] = acParm;
-                       break;
-               }
-       }
-
-       if (padapter->registrypriv.acm_method == 1)
-               set_acm_ctrl(padapter, acm_mask);
-       else
-               padapter->mlmepriv.acm_mask = acm_mask;
-
-       inx[0] = 0; inx[1] = 1; inx[2] = 2; inx[3] = 3;
-
-       if (pregpriv->wifi_spec == 1) {
-               u32 j, change_inx = false;
-
-               /* entry indx: 0->vo, 1->vi, 2->be, 3->bk. */
-               for (i = 0; i < 4; i++) {
-                       for (j = i + 1; j < 4; j++) {
-                               /* compare CW and AIFS */
-                               if ((edca[j] & 0xFFFF) < (edca[i] & 0xFFFF)) {
-                                       change_inx = true;
-                               } else if ((edca[j] & 0xFFFF) == (edca[i] & 0xFFFF)) {
-                                       /* compare TXOP */
-                                       if ((edca[j] >> 16) > (edca[i] >> 16))
-                                               change_inx = true;
-                               }
-
-                               if (change_inx) {
-                                       swap(edca[i], edca[j]);
-                                       swap(inx[i], inx[j]);
-
-                                       change_inx = false;
-                               }
-                       }
-               }
-       }
-
-       for (i = 0; i < 4; i++)
-               pxmitpriv->wmm_para_seq[i] = inx[i];
-}
-
-static void bwmode_update_check(struct adapter *padapter, struct ndis_802_11_var_ie *pIE)
-{
-       unsigned char    new_bwmode;
-       unsigned char  new_ch_offset;
-       struct HT_info_element   *pHT_info;
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       struct ht_priv                  *phtpriv = &pmlmepriv->htpriv;
-
-       if (!pIE)
-               return;
-
-       if (!phtpriv)
-               return;
-
-       if (pIE->Length > sizeof(struct HT_info_element))
-               return;
-
-       pHT_info = (struct HT_info_element *)pIE->data;
-
-       if ((pHT_info->infos[0] & BIT(2)) && pregistrypriv->cbw40_enable) {
-               new_bwmode = HT_CHANNEL_WIDTH_40;
-
-               switch (pHT_info->infos[0] & 0x3) {
-               case 1:
-                       new_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
-                       break;
-               case 3:
-                       new_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
-                       break;
-               default:
-                       new_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-                       break;
-               }
-       } else {
-               new_bwmode = HT_CHANNEL_WIDTH_20;
-               new_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-       }
-
-       if ((new_bwmode != pmlmeext->cur_bwmode) ||
-           (new_ch_offset != pmlmeext->cur_ch_offset)) {
-               pmlmeinfo->bwmode_updated = true;
-
-               pmlmeext->cur_bwmode = new_bwmode;
-               pmlmeext->cur_ch_offset = new_ch_offset;
-
-               /* update HT info also */
-               HT_info_handler(padapter, pIE);
-       } else {
-               pmlmeinfo->bwmode_updated = false;
-       }
-
-       if (pmlmeinfo->bwmode_updated) {
-               struct sta_info *psta;
-               struct wlan_bssid_ex    *cur_network = &pmlmeinfo->network;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               /* set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode); */
-
-               /* update ap's stainfo */
-               psta = rtw_get_stainfo(pstapriv, cur_network->MacAddress);
-               if (psta) {
-                       struct ht_priv  *phtpriv_sta = &psta->htpriv;
-
-                       if (phtpriv_sta->ht_option) {
-                               /*  bwmode */
-                               phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
-                               phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
-                       } else {
-                               phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_20;
-                               phtpriv_sta->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-                       }
-               }
-       }
-}
-
-void HT_caps_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE)
-{
-       unsigned int    i;
-       u8      max_AMPDU_len, min_MPDU_spacing;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv                  *phtpriv = &pmlmepriv->htpriv;
-
-       if (!pIE)
-               return;
-
-       if (!phtpriv->ht_option)
-               return;
-
-       pmlmeinfo->HT_caps_enable = 1;
-
-       for (i = 0; i < (pIE->Length); i++) {
-               if (i != 2) {
-                       /*      Got the endian issue here. */
-                       pmlmeinfo->HT_caps.u.HT_cap[i] &= (pIE->data[i]);
-               } else {
-                       /* modify from  fw by Thomas 2010/11/17 */
-                       max_AMPDU_len = min(pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x3,
-                                           pIE->data[i] & 0x3);
-
-                       min_MPDU_spacing = max(pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c,
-                                              pIE->data[i] & 0x1c);
-
-                       pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para = max_AMPDU_len | min_MPDU_spacing;
-               }
-       }
-
-       /* update the MCS rates */
-       for (i = 0; i < 16; i++)
-               pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
-}
-
-void HT_info_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv                  *phtpriv = &pmlmepriv->htpriv;
-
-       if (!pIE)
-               return;
-
-       if (!phtpriv->ht_option)
-               return;
-
-       if (pIE->Length > sizeof(struct HT_info_element))
-               return;
-
-       pmlmeinfo->HT_info_enable = 1;
-       memcpy(&pmlmeinfo->HT_info, pIE->data, pIE->Length);
-}
-
-static void set_min_ampdu_spacing(struct adapter *adapter, u8 spacing)
-{
-       u8 sec_spacing;
-       int res;
-
-       if (spacing <= 7) {
-               switch (adapter->securitypriv.dot11PrivacyAlgrthm) {
-               case _NO_PRIVACY_:
-               case _AES_:
-                       sec_spacing = 0;
-                       break;
-               case _WEP40_:
-               case _WEP104_:
-               case _TKIP_:
-               case _TKIP_WTMIC_:
-                       sec_spacing = 6;
-                       break;
-               default:
-                       sec_spacing = 7;
-                       break;
-               }
-
-               if (spacing < sec_spacing)
-                       spacing = sec_spacing;
-
-               res = rtw_read8(adapter, REG_AMPDU_MIN_SPACE, &sec_spacing);
-               if (res)
-                       return;
-
-               rtw_write8(adapter, REG_AMPDU_MIN_SPACE,
-                          (sec_spacing & 0xf8) | spacing);
-       }
-}
-
-static void set_ampdu_factor(struct adapter *adapter, u8 factor)
-{
-       u8 RegToSet_Normal[4] = {0x41, 0xa8, 0x72, 0xb9};
-       u8 FactorToSet;
-       u8 *pRegToSet;
-       u8 index = 0;
-
-       pRegToSet = RegToSet_Normal; /*  0xb972a841; */
-       FactorToSet = factor;
-       if (FactorToSet <= 3) {
-               FactorToSet = (1 << (FactorToSet + 2));
-               if (FactorToSet > 0xf)
-                       FactorToSet = 0xf;
-
-               for (index = 0; index < 4; index++) {
-                       if ((pRegToSet[index] & 0xf0) > (FactorToSet << 4))
-                               pRegToSet[index] = (pRegToSet[index] & 0x0f) | (FactorToSet << 4);
-
-                       if ((pRegToSet[index] & 0x0f) > FactorToSet)
-                               pRegToSet[index] = (pRegToSet[index] & 0xf0) | (FactorToSet);
-
-                       rtw_write8(adapter, (REG_AGGLEN_LMT + index), pRegToSet[index]);
-               }
-       }
-}
-
-void HTOnAssocRsp(struct adapter *padapter)
-{
-       unsigned char           max_AMPDU_len;
-       unsigned char           min_MPDU_spacing;
-       /* struct registry_priv  *pregpriv = &padapter->registrypriv; */
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if ((pmlmeinfo->HT_info_enable) && (pmlmeinfo->HT_caps_enable)) {
-               pmlmeinfo->HT_enable = 1;
-       } else {
-               pmlmeinfo->HT_enable = 0;
-               return;
-       }
-
-       /* handle A-MPDU parameter field */
-       /*
-               AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
-               AMPDU_para [4:2]:Min MPDU Start Spacing
-       */
-       max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03;
-
-       min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2;
-
-       set_min_ampdu_spacing(padapter, min_MPDU_spacing);
-
-       set_ampdu_factor(padapter, max_AMPDU_len);
-}
-
-void ERP_IE_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pIE->Length > 1)
-               return;
-
-       pmlmeinfo->ERP_enable = 1;
-       memcpy(&pmlmeinfo->ERP_IE, pIE->data, pIE->Length);
-}
-
-void VCS_update(struct adapter *padapter, struct sta_info *psta)
-{
-       struct registry_priv     *pregpriv = &padapter->registrypriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       switch (pregpriv->vrtl_carrier_sense) { /* 0:off 1:on 2:auto */
-       case 0: /* off */
-               psta->rtsen = 0;
-               psta->cts2self = 0;
-               break;
-       case 1: /* on */
-               if (pregpriv->vcs_type == 1) { /* 1:RTS/CTS 2:CTS to self */
-                       psta->rtsen = 1;
-                       psta->cts2self = 0;
-               } else {
-                       psta->rtsen = 0;
-                       psta->cts2self = 1;
-               }
-               break;
-       case 2: /* auto */
-       default:
-               if ((pmlmeinfo->ERP_enable) && (pmlmeinfo->ERP_IE & BIT(1))) {
-                       if (pregpriv->vcs_type == 1) {
-                               psta->rtsen = 1;
-                               psta->cts2self = 0;
-                       } else {
-                               psta->rtsen = 0;
-                               psta->cts2self = 1;
-                       }
-               } else {
-                       psta->rtsen = 0;
-                       psta->cts2self = 0;
-               }
-               break;
-       }
-}
-
-int rtw_check_bcn_info(struct adapter  *Adapter, u8 *pframe, u32 packet_len)
-{
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)pframe;
-       unsigned int            len;
-       unsigned char           *p;
-       unsigned short  val16;
-       struct wlan_network *cur_network = &Adapter->mlmepriv.cur_network;
-       /* u8 wpa_ie[255], rsn_ie[255]; */
-       u16 wpa_len = 0, rsn_len = 0;
-       u8 encryp_protocol = 0;
-       struct wlan_bssid_ex *bssid;
-       int group_cipher = 0, pairwise_cipher = 0, is_8021x = 0;
-       unsigned char *pbuf;
-       u32 wpa_ielen = 0;
-       u8 *pbssid = GetAddr3Ptr(pframe);
-       u32 hidden_ssid = 0;
-       struct HT_info_element *pht_info = NULL;
-       struct ieee80211_ht_cap *pht_cap = NULL;
-       u32 bcn_channel;
-       unsigned short  ht_cap_info;
-       unsigned char   ht_info_infos_0;
-
-       if (!r8188eu_is_client_associated_to_ap(Adapter))
-               return true;
-
-       len = packet_len - sizeof(struct ieee80211_hdr_3addr);
-
-       if (len > MAX_IE_SZ)
-               return _FAIL;
-
-       if (memcmp(cur_network->network.MacAddress, pbssid, 6))
-               return true;
-
-       bssid = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC);
-       if (!bssid)
-               return _FAIL;
-
-       if (ieee80211_is_beacon(mgmt->frame_control))
-               bssid->Reserved[0] = 1;
-
-       bssid->Length = sizeof(struct wlan_bssid_ex) - MAX_IE_SZ + len;
-
-       /* below is to copy the information element */
-       bssid->IELength = len;
-       memcpy(bssid->IEs, (pframe + sizeof(struct ieee80211_hdr_3addr)), bssid->IELength);
-
-       /* check bw and channel offset */
-       /* parsing HT_CAP_IE */
-       p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
-       if (p && len > 0) {
-               pht_cap = (struct ieee80211_ht_cap *)(p + 2);
-               ht_cap_info = le16_to_cpu(pht_cap->cap_info);
-       } else {
-               ht_cap_info = 0;
-       }
-       /* parsing HT_INFO_IE */
-       p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _HT_ADD_INFO_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
-       if (p && len > 0) {
-                       pht_info = (struct HT_info_element *)(p + 2);
-                       ht_info_infos_0 = pht_info->infos[0];
-       } else {
-                       ht_info_infos_0 = 0;
-       }
-       if (ht_cap_info != cur_network->BcnInfo.ht_cap_info ||
-           ((ht_info_infos_0 & 0x03) != (cur_network->BcnInfo.ht_info_infos_0 & 0x03))) {
-                       /* bcn_info_update */
-                       cur_network->BcnInfo.ht_cap_info = ht_cap_info;
-                       cur_network->BcnInfo.ht_info_infos_0 = ht_info_infos_0;
-                       /* to do : need to check that whether modify related register of BB or not */
-                       /* goto _mismatch; */
-       }
-
-       /* Checking for channel */
-       p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _DSSET_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
-       if (p) {
-                       bcn_channel = *(p + 2);
-       } else {/* In 5G, some ap do not have DSSET IE checking HT info for channel */
-                       p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _HT_ADD_INFO_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
-                       if (pht_info)
-                               bcn_channel = pht_info->primary_channel;
-                       else /* we don't find channel IE, so don't check it */
-                               bcn_channel = Adapter->mlmeextpriv.cur_channel;
-       }
-       if (bcn_channel != Adapter->mlmeextpriv.cur_channel)
-               goto _mismatch;
-
-       /* checking SSID */
-       p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _SSID_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
-       if (!p)
-               hidden_ssid = true;
-       else
-               hidden_ssid = false;
-
-       if (p && (!hidden_ssid && (*(p + 1)))) {
-               memcpy(bssid->Ssid.Ssid, (p + 2), *(p + 1));
-               bssid->Ssid.SsidLength = *(p + 1);
-       } else {
-               bssid->Ssid.SsidLength = 0;
-               bssid->Ssid.Ssid[0] = '\0';
-       }
-
-       if (memcmp(bssid->Ssid.Ssid, cur_network->network.Ssid.Ssid, 32) ||
-           bssid->Ssid.SsidLength != cur_network->network.Ssid.SsidLength) {
-               /* not hidden ssid */
-               if (bssid->Ssid.Ssid[0] != '\0' && bssid->Ssid.SsidLength != 0)
-                       goto _mismatch;
-       }
-
-       /* check encryption info */
-       val16 = rtw_get_capability((struct wlan_bssid_ex *)bssid);
-
-       if (val16 & BIT(4))
-               bssid->Privacy = 1;
-       else
-               bssid->Privacy = 0;
-
-       if (cur_network->network.Privacy != bssid->Privacy)
-               goto _mismatch;
-
-       rtw_get_sec_ie(bssid->IEs, bssid->IELength, NULL, &rsn_len, NULL, &wpa_len);
-
-       if (rsn_len > 0) {
-               encryp_protocol = ENCRYP_PROTOCOL_WPA2;
-       } else if (wpa_len > 0) {
-               encryp_protocol = ENCRYP_PROTOCOL_WPA;
-       } else {
-               if (bssid->Privacy)
-                       encryp_protocol = ENCRYP_PROTOCOL_WEP;
-       }
-
-       if (cur_network->BcnInfo.encryp_protocol != encryp_protocol)
-               goto _mismatch;
-
-       if (encryp_protocol == ENCRYP_PROTOCOL_WPA || encryp_protocol == ENCRYP_PROTOCOL_WPA2) {
-               pbuf = rtw_get_wpa_ie(&bssid->IEs[12], &wpa_ielen, bssid->IELength - 12);
-               if (pbuf && (wpa_ielen > 0)) {
-                       rtw_parse_wpa_ie(pbuf, wpa_ielen + 2, &group_cipher, &pairwise_cipher, &is_8021x);
-               } else {
-                       pbuf = rtw_get_wpa2_ie(&bssid->IEs[12], &wpa_ielen, bssid->IELength - 12);
-
-                       if (pbuf && (wpa_ielen > 0))
-                               rtw_parse_wpa2_ie(pbuf, wpa_ielen + 2, &group_cipher, &pairwise_cipher, &is_8021x);
-               }
-
-               if (pairwise_cipher != cur_network->BcnInfo.pairwise_cipher ||
-                   group_cipher != cur_network->BcnInfo.group_cipher)
-                       goto _mismatch;
-
-               if (is_8021x != cur_network->BcnInfo.is_8021x)
-                       goto _mismatch;
-       }
-
-       kfree(bssid);
-
-       return _SUCCESS;
-
-_mismatch:
-       kfree(bssid);
-
-       return _FAIL;
-}
-
-void update_beacon_info(struct adapter *padapter, u8 *ie_ptr, uint ie_len, struct sta_info *psta)
-{
-       unsigned int i;
-       struct ndis_802_11_var_ie *pIE;
-
-       for (i = 0; i < ie_len;) {
-               pIE = (struct ndis_802_11_var_ie *)(ie_ptr + i);
-
-               switch (pIE->ElementID) {
-               case _HT_EXTRA_INFO_IE_:        /* HT info */
-                       /* HT_info_handler(padapter, pIE); */
-                       bwmode_update_check(padapter, pIE);
-                       break;
-               case _ERPINFO_IE_:
-                       ERP_IE_handler(padapter, pIE);
-                       VCS_update(padapter, psta);
-                       break;
-               default:
-                       break;
-               }
-
-               i += (pIE->Length + 2);
-       }
-}
-
-bool is_ap_in_tkip(struct adapter *padapter)
-{
-       u32 i;
-       struct ndis_802_11_var_ie *pIE;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex            *cur_network = &pmlmeinfo->network;
-
-       if (rtw_get_capability((struct wlan_bssid_ex *)cur_network) & WLAN_CAPABILITY_PRIVACY) {
-               for (i = sizeof(struct ndis_802_11_fixed_ie); i < pmlmeinfo->network.IELength;) {
-                       pIE = (struct ndis_802_11_var_ie *)(pmlmeinfo->network.IEs + i);
-
-                       switch (pIE->ElementID) {
-                       case _VENDOR_SPECIFIC_IE_:
-                               if ((!memcmp(pIE->data, RTW_WPA_OUI, 4)) && (!memcmp((pIE->data + 12), WPA_TKIP_CIPHER, 4)))
-                                       return true;
-                               break;
-                       case _RSN_IE_2_:
-                               if (!memcmp((pIE->data + 8), RSN_TKIP_CIPHER, 4))
-                                       return true;
-                               break;
-                       default:
-                               break;
-                       }
-
-                       i += (pIE->Length + 2);
-               }
-               return false;
-       } else {
-               return false;
-       }
-}
-
-int wifirate2_ratetbl_inx(unsigned char rate)
-{
-       int     inx = 0;
-       rate = rate & 0x7f;
-
-       switch (rate) {
-       case 54 * 2:
-               inx = 11;
-               break;
-       case 48 * 2:
-               inx = 10;
-               break;
-       case 36 * 2:
-               inx = 9;
-               break;
-       case 24 * 2:
-               inx = 8;
-               break;
-       case 18 * 2:
-               inx = 7;
-               break;
-       case 12 * 2:
-               inx = 6;
-               break;
-       case 9 * 2:
-               inx = 5;
-               break;
-       case 6 * 2:
-               inx = 4;
-               break;
-       case 11 * 2:
-               inx = 3;
-               break;
-       case 11:
-               inx = 2;
-               break;
-       case 2 * 2:
-               inx = 1;
-               break;
-       case 1 * 2:
-               inx = 0;
-               break;
-       }
-       return inx;
-}
-
-unsigned int update_basic_rate(unsigned char *ptn, unsigned int ptn_sz)
-{
-       unsigned int i, num_of_rate;
-       unsigned int mask = 0;
-
-       num_of_rate = (ptn_sz > NumRates) ? NumRates : ptn_sz;
-
-       for (i = 0; i < num_of_rate; i++) {
-               if ((*(ptn + i)) & 0x80)
-                       mask |= 0x1 << wifirate2_ratetbl_inx(*(ptn + i));
-       }
-       return mask;
-}
-
-unsigned int update_supported_rate(unsigned char *ptn, unsigned int ptn_sz)
-{
-       unsigned int i, num_of_rate;
-       unsigned int mask = 0;
-
-       num_of_rate = (ptn_sz > NumRates) ? NumRates : ptn_sz;
-
-       for (i = 0; i < num_of_rate; i++)
-               mask |= 0x1 << wifirate2_ratetbl_inx(*(ptn + i));
-       return mask;
-}
-
-unsigned int update_MSC_rate(struct HT_caps_element *pHT_caps)
-{
-       unsigned int mask = 0;
-
-       mask = ((pHT_caps->u.HT_cap_element.MCS_rate[0] << 12) | (pHT_caps->u.HT_cap_element.MCS_rate[1] << 20));
-
-       return mask;
-}
-
-int support_short_GI(struct adapter *padapter, struct HT_caps_element *pHT_caps)
-{
-       unsigned char                                   bit_offset;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (!(pmlmeinfo->HT_enable))
-               return _FAIL;
-
-       if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_RALINK)
-               return _FAIL;
-
-       bit_offset = (pmlmeext->cur_bwmode & HT_CHANNEL_WIDTH_40) ? 6 : 5;
-
-       if (__le16_to_cpu(pHT_caps->u.HT_cap_element.HT_caps_info) & (0x1 << bit_offset))
-               return _SUCCESS;
-       else
-               return _FAIL;
-}
-
-unsigned char get_highest_rate_idx(u32 mask)
-{
-       int i;
-       unsigned char rate_idx = 0;
-
-       for (i = 27; i >= 0; i--) {
-               if (mask & BIT(i)) {
-                       rate_idx = i;
-                       break;
-               }
-       }
-       return rate_idx;
-}
-
-void Update_RA_Entry(struct adapter *padapter, u32 mac_id)
-{
-       rtw_hal_update_ra_mask(padapter, mac_id, 0);
-}
-
-static void enable_rate_adaptive(struct adapter *padapter, u32 mac_id)
-{
-       Update_RA_Entry(padapter, mac_id);
-}
-
-void set_sta_rate(struct adapter *padapter, struct sta_info *psta)
-{
-       /* rate adaptive */
-       enable_rate_adaptive(padapter, psta->mac_id);
-}
-
-void rtw_set_basic_rate(struct adapter *adapter, u8 *rates)
-{
-       u16 BrateCfg = 0;
-       u8 RateIndex = 0;
-       int res;
-       u8 reg;
-
-       /*  2007.01.16, by Emily */
-       /*  Select RRSR (in Legacy-OFDM and CCK) */
-       /*  For 8190, we select only 24M, 12M, 6M, 11M, 5.5M, 2M, and 1M from the Basic rate. */
-       /*  We do not use other rates. */
-       HalSetBrateCfg(adapter, rates, &BrateCfg);
-
-       /* 2011.03.30 add by Luke Lee */
-       /* CCK 2M ACK should be disabled for some BCM and Atheros AP IOT */
-       /* because CCK 2M has poor TXEVM */
-       /* CCK 5.5M & 11M ACK should be enabled for better performance */
-
-       BrateCfg = (BrateCfg | 0xd) & 0x15d;
-
-       BrateCfg |= 0x01; /*  default enable 1M ACK rate */
-       /*  Set RRSR rate table. */
-       rtw_write8(adapter, REG_RRSR, BrateCfg & 0xff);
-       rtw_write8(adapter, REG_RRSR + 1, (BrateCfg >> 8) & 0xff);
-       res = rtw_read8(adapter, REG_RRSR + 2, &reg);
-       if (res)
-               return;
-
-       rtw_write8(adapter, REG_RRSR + 2, reg & 0xf0);
-
-       /*  Set RTS initial rate */
-       while (BrateCfg > 0x1) {
-               BrateCfg = (BrateCfg >> 1);
-               RateIndex++;
-       }
-       /*  Ziv - Check */
-       rtw_write8(adapter, REG_INIRTS_RATE_SEL, RateIndex);
-}
-
-/*  Update RRSR and Rate for USERATE */
-void update_tx_basic_rate(struct adapter *padapter, u8 wirelessmode)
-{
-       unsigned char supported_rates[NDIS_802_11_LENGTH_RATES_EX];
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       /*      Added by Albert 2011/03/22 */
-       /*      In the P2P mode, the driver should not support the b mode. */
-       /*      So, the Tx packet shouldn't use the CCK rate */
-       if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
-               return;
-       memset(supported_rates, 0, NDIS_802_11_LENGTH_RATES_EX);
-
-       if ((wirelessmode & WIRELESS_11B) && (wirelessmode == WIRELESS_11B))
-               memcpy(supported_rates, rtw_basic_rate_cck, 4);
-       else if (wirelessmode & WIRELESS_11B)
-               memcpy(supported_rates, rtw_basic_rate_mix, 7);
-       else
-               memcpy(supported_rates, rtw_basic_rate_ofdm, 3);
-
-       if (wirelessmode & WIRELESS_11B)
-               update_mgnt_tx_rate(padapter, IEEE80211_CCK_RATE_1MB);
-       else
-               update_mgnt_tx_rate(padapter, IEEE80211_OFDM_RATE_6MB);
-
-       rtw_set_basic_rate(padapter, supported_rates);
-}
-
-unsigned char check_assoc_AP(u8 *pframe, uint len)
-{
-       unsigned int i;
-       struct ndis_802_11_var_ie *pIE;
-       u8      epigram_vendor_flag;
-       u8      ralink_vendor_flag;
-       epigram_vendor_flag = 0;
-       ralink_vendor_flag = 0;
-
-       for (i = sizeof(struct ndis_802_11_fixed_ie); i < len;) {
-               pIE = (struct ndis_802_11_var_ie *)(pframe + i);
-
-               switch (pIE->ElementID) {
-               case _VENDOR_SPECIFIC_IE_:
-                       if ((!memcmp(pIE->data, ARTHEROS_OUI1, 3)) ||
-                           (!memcmp(pIE->data, ARTHEROS_OUI2, 3))) {
-                               return HT_IOT_PEER_ATHEROS;
-                       } else if ((!memcmp(pIE->data, BROADCOM_OUI1, 3)) ||
-                                  (!memcmp(pIE->data, BROADCOM_OUI2, 3))) {
-                               return HT_IOT_PEER_BROADCOM;
-                       } else if (!memcmp(pIE->data, MARVELL_OUI, 3)) {
-                               return HT_IOT_PEER_MARVELL;
-                       } else if (!memcmp(pIE->data, RALINK_OUI, 3)) {
-                               if (!ralink_vendor_flag) {
-                                       ralink_vendor_flag = 1;
-                               } else {
-                                       return HT_IOT_PEER_RALINK;
-                               }
-                       } else if (!memcmp(pIE->data, CISCO_OUI, 3)) {
-                               return HT_IOT_PEER_CISCO;
-                       } else if (!memcmp(pIE->data, REALTEK_OUI, 3)) {
-                               return HT_IOT_PEER_REALTEK;
-                       } else if (!memcmp(pIE->data, AIRGOCAP_OUI, 3)) {
-                               return HT_IOT_PEER_AIRGO;
-                       } else if (!memcmp(pIE->data, EPIGRAM_OUI, 3)) {
-                               epigram_vendor_flag = 1;
-                               if (ralink_vendor_flag)
-                                       return HT_IOT_PEER_TENDA;
-                       } else {
-                               break;
-                       }
-                       break;
-
-               default:
-                       break;
-               }
-               i += (pIE->Length + 2);
-       }
-
-       if (ralink_vendor_flag && !epigram_vendor_flag)
-               return HT_IOT_PEER_RALINK;
-       else if (ralink_vendor_flag && epigram_vendor_flag)
-               return HT_IOT_PEER_TENDA;
-       else
-               return HT_IOT_PEER_UNKNOWN;
-}
-
-void update_IOT_info(struct adapter *padapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       switch (pmlmeinfo->assoc_AP_vendor) {
-       case HT_IOT_PEER_MARVELL:
-               pmlmeinfo->turboMode_cts2self = 1;
-               pmlmeinfo->turboMode_rtsen = 0;
-               break;
-       case HT_IOT_PEER_RALINK:
-               pmlmeinfo->turboMode_cts2self = 0;
-               pmlmeinfo->turboMode_rtsen = 1;
-               break;
-       case HT_IOT_PEER_REALTEK:
-               /* rtw_write16(padapter, 0x4cc, 0xffff); */
-               /* rtw_write16(padapter, 0x546, 0x01c0); */
-               break;
-       default:
-               pmlmeinfo->turboMode_cts2self = 0;
-               pmlmeinfo->turboMode_rtsen = 1;
-               break;
-       }
-}
-
-static void set_ack_preamble(struct adapter *adapter, bool short_preamble)
-{
-       struct hal_data_8188e *haldata = &adapter->haldata;
-       u8 val8;
-
-       /*  Joseph marked out for Netgear 3500 TKIP channel 7 issue.(Temporarily) */
-       val8 = haldata->nCur40MhzPrimeSC << 5;
-       if (short_preamble)
-               val8 |= 0x80;
-
-       rtw_write8(adapter, REG_RRSR + 2, val8);
-};
-
-static void set_slot_time(struct adapter *adapter, u8 slot_time)
-{
-       u8 u1bAIFS, aSifsTime;
-       struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       rtw_write8(adapter, REG_SLOT, slot_time);
-
-       if (pmlmeinfo->WMM_enable == 0) {
-               if (pmlmeext->cur_wireless_mode == WIRELESS_11B)
-                       aSifsTime = 10;
-               else
-                       aSifsTime = 16;
-
-               u1bAIFS = aSifsTime + (2 * pmlmeinfo->slotTime);
-
-               /*  <Roger_EXP> Temporary removed, 2008.06.20. */
-               rtw_write8(adapter, REG_EDCA_VO_PARAM, u1bAIFS);
-               rtw_write8(adapter, REG_EDCA_VI_PARAM, u1bAIFS);
-               rtw_write8(adapter, REG_EDCA_BE_PARAM, u1bAIFS);
-               rtw_write8(adapter, REG_EDCA_BK_PARAM, u1bAIFS);
-       }
-}
-
-void update_capinfo(struct adapter *Adapter, u16 updateCap)
-{
-       struct mlme_ext_priv    *pmlmeext = &Adapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       /*  Check preamble mode, 2005.01.06, by rcnjko. */
-       /*  Mark to update preamble value forever, 2008.03.18 by lanhsin */
-
-       if (updateCap & cShortPreamble) { /*  Short Preamble */
-               if (pmlmeinfo->preamble_mode != PREAMBLE_SHORT) { /*  PREAMBLE_LONG or PREAMBLE_AUTO */
-                       pmlmeinfo->preamble_mode = PREAMBLE_SHORT;
-                       set_ack_preamble(Adapter, true);
-               }
-       } else { /*  Long Preamble */
-               if (pmlmeinfo->preamble_mode != PREAMBLE_LONG) {  /*  PREAMBLE_SHORT or PREAMBLE_AUTO */
-                       pmlmeinfo->preamble_mode = PREAMBLE_LONG;
-                       set_ack_preamble(Adapter, false);
-               }
-       }
-
-       if (updateCap & cIBSS) {
-               /* Filen: See 802.11-2007 p.91 */
-               pmlmeinfo->slotTime = NON_SHORT_SLOT_TIME;
-       } else { /* Filen: See 802.11-2007 p.90 */
-               if (pmlmeext->cur_wireless_mode & (WIRELESS_11G | WIRELESS_11_24N)) {
-                       if (updateCap & cShortSlotTime) { /*  Short Slot Time */
-                               if (pmlmeinfo->slotTime != SHORT_SLOT_TIME)
-                                       pmlmeinfo->slotTime = SHORT_SLOT_TIME;
-                       } else { /*  Long Slot Time */
-                               if (pmlmeinfo->slotTime != NON_SHORT_SLOT_TIME)
-                                       pmlmeinfo->slotTime = NON_SHORT_SLOT_TIME;
-                       }
-               } else {
-                       /* B Mode */
-                       pmlmeinfo->slotTime = NON_SHORT_SLOT_TIME;
-               }
-       }
-
-       set_slot_time(Adapter, pmlmeinfo->slotTime);
-}
-
-void update_wireless_mode(struct adapter *padapter)
-{
-       int ratelen, network_type = 0;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex    *cur_network = &pmlmeinfo->network;
-       unsigned char           *rate = cur_network->SupportedRates;
-
-       ratelen = rtw_get_rateset_len(cur_network->SupportedRates);
-
-       if ((pmlmeinfo->HT_info_enable) && (pmlmeinfo->HT_caps_enable))
-               pmlmeinfo->HT_enable = 1;
-
-       if (pmlmeext->cur_channel > 14) {
-               network_type |= WIRELESS_INVALID;
-       } else {
-               if (pmlmeinfo->HT_enable)
-                       network_type = WIRELESS_11_24N;
-
-               if (cckratesonly_included(rate, ratelen))
-                       network_type |= WIRELESS_11B;
-               else if (cckrates_included(rate, ratelen))
-                       network_type |= WIRELESS_11BG;
-               else
-                       network_type |= WIRELESS_11G;
-       }
-
-       pmlmeext->cur_wireless_mode = network_type & padapter->registrypriv.wireless_mode;
-
-       /* RESP_SIFS for CCK */
-       rtw_write8(padapter, REG_R2T_SIFS, 0x08);
-       rtw_write8(padapter, REG_R2T_SIFS + 1, 0x08);
-       /* RESP_SIFS for OFDM */
-       rtw_write8(padapter, REG_T2T_SIFS, 0x0a);
-       rtw_write8(padapter, REG_T2T_SIFS + 1, 0x0a);
-
-       if (pmlmeext->cur_wireless_mode & WIRELESS_11B)
-               update_mgnt_tx_rate(padapter, IEEE80211_CCK_RATE_1MB);
-        else
-               update_mgnt_tx_rate(padapter, IEEE80211_OFDM_RATE_6MB);
-}
-
-void update_bmc_sta_support_rate(struct adapter *padapter, u32 mac_id)
-{
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pmlmeext->cur_wireless_mode & WIRELESS_11B) {
-               /*  Only B, B/G, and B/G/N AP could use CCK rate */
-               memcpy((pmlmeinfo->FW_sta_info[mac_id].SupportedRates), rtw_basic_rate_cck, 4);
-       } else {
-               memcpy((pmlmeinfo->FW_sta_info[mac_id].SupportedRates), rtw_basic_rate_ofdm, 3);
-       }
-}
-
-int update_sta_support_rate(struct adapter *padapter, u8 *pvar_ie, uint var_ie_len, int cam_idx)
-{
-       unsigned int    ie_len;
-       struct ndis_802_11_var_ie *pIE;
-       int     supportRateNum = 0;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pIE = (struct ndis_802_11_var_ie *)rtw_get_ie(pvar_ie, _SUPPORTEDRATES_IE_, &ie_len, var_ie_len);
-       if (!pIE)
-               return _FAIL;
-
-       memcpy(pmlmeinfo->FW_sta_info[cam_idx].SupportedRates, pIE->data, ie_len);
-       supportRateNum = ie_len;
-
-       pIE = (struct ndis_802_11_var_ie *)rtw_get_ie(pvar_ie, _EXT_SUPPORTEDRATES_IE_, &ie_len, var_ie_len);
-       if (pIE)
-               memcpy((pmlmeinfo->FW_sta_info[cam_idx].SupportedRates + supportRateNum), pIE->data, ie_len);
-
-       return _SUCCESS;
-}
-
-void beacon_timing_control(struct adapter *padapter)
-{
-       SetBeaconRelatedRegisters8188EUsb(padapter);
-}
-
-static struct adapter *pbuddy_padapter;
-
-void rtw_handle_dualmac(struct adapter *adapter, bool init)
-{
-       if (init) {
-               if (!pbuddy_padapter) {
-                       pbuddy_padapter = adapter;
-               } else {
-                       adapter->pbuddy_adapter = pbuddy_padapter;
-                       pbuddy_padapter->pbuddy_adapter = adapter;
-                       /*  clear global value */
-                       pbuddy_padapter = NULL;
-               }
-       } else {
-               pbuddy_padapter = NULL;
-       }
-}
diff --git a/drivers/staging/r8188eu/core/rtw_xmit.c b/drivers/staging/r8188eu/core/rtw_xmit.c
deleted file mode 100644 (file)
index df88b3e..0000000
+++ /dev/null
@@ -1,2179 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#define _RTW_XMIT_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/wifi.h"
-#include "../include/osdep_intf.h"
-#include "../include/usb_ops.h"
-#include "../include/usb_osintf.h"
-#include "../include/rtl8188e_xmit.h"
-
-static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 };
-static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 };
-
-static void _init_txservq(struct tx_servq *ptxservq)
-{
-       INIT_LIST_HEAD(&ptxservq->tx_pending);
-       INIT_LIST_HEAD(&ptxservq->sta_pending);
-       ptxservq->qcnt = 0;
-}
-
-void   _rtw_init_sta_xmit_priv(struct sta_xmit_priv *psta_xmitpriv)
-{
-       memset((unsigned char *)psta_xmitpriv, 0, sizeof(struct sta_xmit_priv));
-       spin_lock_init(&psta_xmitpriv->lock);
-       _init_txservq(&psta_xmitpriv->be_q);
-       _init_txservq(&psta_xmitpriv->bk_q);
-       _init_txservq(&psta_xmitpriv->vi_q);
-       _init_txservq(&psta_xmitpriv->vo_q);
-}
-
-static int rtw_xmit_resource_alloc(struct adapter *padapter, struct xmit_buf *pxmitbuf,
-                                  u32 alloc_sz)
-{
-       pxmitbuf->pallocated_buf = kzalloc(alloc_sz, GFP_KERNEL);
-       if (!pxmitbuf->pallocated_buf)
-               return -ENOMEM;
-
-       pxmitbuf->pbuf = (u8 *)ALIGN((size_t)(pxmitbuf->pallocated_buf), XMITBUF_ALIGN_SZ);
-
-       pxmitbuf->pxmit_urb = usb_alloc_urb(0, GFP_KERNEL);
-       if (!pxmitbuf->pxmit_urb) {
-               kfree(pxmitbuf->pallocated_buf);
-               return -ENOMEM;
-       }
-
-       return 0;
-}
-
-static void rtw_xmit_resource_free(struct adapter *padapter, struct xmit_buf *pxmitbuf,
-                                  u32 free_sz)
-{
-       usb_free_urb(pxmitbuf->pxmit_urb);
-       kfree(pxmitbuf->pallocated_buf);
-}
-
-int _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter)
-{
-       int i;
-       struct xmit_buf *pxmitbuf;
-       struct xmit_frame *pxframe;
-       u32 max_xmit_extbuf_size = MAX_XMIT_EXTBUF_SZ;
-       u32 num_xmit_extbuf = NR_XMIT_EXTBUFF;
-
-       /*  We don't need to memset padapter->XXX to zero, because adapter is allocated by vzalloc(). */
-
-       spin_lock_init(&pxmitpriv->lock);
-
-       /*
-        * Please insert all the queue initializaiton using rtw_init_queue below
-        */
-
-       pxmitpriv->adapter = padapter;
-
-       INIT_LIST_HEAD(&pxmitpriv->be_pending);
-       INIT_LIST_HEAD(&pxmitpriv->bk_pending);
-       INIT_LIST_HEAD(&pxmitpriv->vi_pending);
-       INIT_LIST_HEAD(&pxmitpriv->vo_pending);
-
-       rtw_init_queue(&pxmitpriv->free_xmit_queue);
-
-       /*
-        * Please allocate memory with the sz = (struct xmit_frame) * NR_XMITFRAME,
-        * and initialize free_xmit_frame below.
-        * Please also apply  free_txobj to link_up all the xmit_frames...
-        */
-
-       pxmitpriv->pallocated_frame_buf = vzalloc(NR_XMITFRAME * sizeof(struct xmit_frame) + 4);
-
-       if (!pxmitpriv->pallocated_frame_buf) {
-               pxmitpriv->pxmit_frame_buf = NULL;
-               goto exit;
-       }
-       pxmitpriv->pxmit_frame_buf = (u8 *)ALIGN((size_t)(pxmitpriv->pallocated_frame_buf), 4);
-       /* pxmitpriv->pxmit_frame_buf = pxmitpriv->pallocated_frame_buf + 4 - */
-       /*                                              ((size_t) (pxmitpriv->pallocated_frame_buf) &3); */
-
-       pxframe = (struct xmit_frame *)pxmitpriv->pxmit_frame_buf;
-
-       for (i = 0; i < NR_XMITFRAME; i++) {
-               INIT_LIST_HEAD(&pxframe->list);
-
-               pxframe->padapter = padapter;
-               pxframe->frame_tag = NULL_FRAMETAG;
-
-               pxframe->pkt = NULL;
-
-               pxframe->buf_addr = NULL;
-               pxframe->pxmitbuf = NULL;
-
-               list_add_tail(&pxframe->list, &pxmitpriv->free_xmit_queue.queue);
-
-               pxframe++;
-       }
-
-       pxmitpriv->free_xmitframe_cnt = NR_XMITFRAME;
-
-       pxmitpriv->frag_len = MAX_FRAG_THRESHOLD;
-
-       /* init xmit_buf */
-       rtw_init_queue(&pxmitpriv->free_xmitbuf_queue);
-       rtw_init_queue(&pxmitpriv->pending_xmitbuf_queue);
-
-       pxmitpriv->pallocated_xmitbuf = vzalloc(NR_XMITBUFF * sizeof(struct xmit_buf) + 4);
-
-       if (!pxmitpriv->pallocated_xmitbuf)
-               goto free_frame_buf;
-
-       pxmitpriv->pxmitbuf = (u8 *)ALIGN((size_t)(pxmitpriv->pallocated_xmitbuf), 4);
-       /* pxmitpriv->pxmitbuf = pxmitpriv->pallocated_xmitbuf + 4 - */
-       /*                                              ((size_t) (pxmitpriv->pallocated_xmitbuf) &3); */
-
-       pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmitbuf;
-
-       for (i = 0; i < NR_XMITBUFF; i++) {
-               INIT_LIST_HEAD(&pxmitbuf->list);
-
-               pxmitbuf->priv_data = NULL;
-               pxmitbuf->padapter = padapter;
-               pxmitbuf->ext_tag = false;
-
-               /* Tx buf allocation may fail sometimes, so sleep and retry. */
-               if (rtw_xmit_resource_alloc(padapter, pxmitbuf, (MAX_XMITBUF_SZ + XMITBUF_ALIGN_SZ))) {
-                       msleep(10);
-                       if (rtw_xmit_resource_alloc(padapter, pxmitbuf, (MAX_XMITBUF_SZ + XMITBUF_ALIGN_SZ)))
-                               goto free_xmitbuf;
-               }
-
-               pxmitbuf->high_queue = false;
-
-               list_add_tail(&pxmitbuf->list, &pxmitpriv->free_xmitbuf_queue.queue);
-               pxmitbuf++;
-       }
-
-       pxmitpriv->free_xmitbuf_cnt = NR_XMITBUFF;
-
-       /*  Init xmit extension buff */
-       rtw_init_queue(&pxmitpriv->free_xmit_extbuf_queue);
-
-       pxmitpriv->pallocated_xmit_extbuf = vzalloc(num_xmit_extbuf * sizeof(struct xmit_buf) + 4);
-
-       if (!pxmitpriv->pallocated_xmit_extbuf)
-               goto free_xmitbuf;
-
-       pxmitpriv->pxmit_extbuf = (u8 *)ALIGN((size_t)(pxmitpriv->pallocated_xmit_extbuf), 4);
-
-       pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmit_extbuf;
-
-       for (i = 0; i < num_xmit_extbuf; i++) {
-               INIT_LIST_HEAD(&pxmitbuf->list);
-
-               pxmitbuf->priv_data = NULL;
-               pxmitbuf->padapter = padapter;
-               pxmitbuf->ext_tag = true;
-
-               if (rtw_xmit_resource_alloc(padapter, pxmitbuf, max_xmit_extbuf_size + XMITBUF_ALIGN_SZ))
-                       goto free_xmit_extbuf;
-
-               list_add_tail(&pxmitbuf->list, &pxmitpriv->free_xmit_extbuf_queue.queue);
-               pxmitbuf++;
-       }
-
-       pxmitpriv->free_xmit_extbuf_cnt = num_xmit_extbuf;
-
-       if (rtw_alloc_hwxmits(padapter))
-               goto free_xmit_extbuf;
-
-       for (i = 0; i < 4; i++)
-               pxmitpriv->wmm_para_seq[i] = i;
-
-       pxmitpriv->ack_tx = false;
-       mutex_init(&pxmitpriv->ack_tx_mutex);
-       rtw_sctx_init(&pxmitpriv->ack_tx_ops, 0);
-
-       tasklet_init(&pxmitpriv->xmit_tasklet, rtl8188eu_xmit_tasklet, (unsigned long)padapter);
-
-       return 0;
-
-free_xmit_extbuf:
-       pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmit_extbuf;
-       while (i--) {
-               rtw_xmit_resource_free(padapter, pxmitbuf, (max_xmit_extbuf_size + XMITBUF_ALIGN_SZ));
-               pxmitbuf++;
-       }
-       vfree(pxmitpriv->pallocated_xmit_extbuf);
-       i = NR_XMITBUFF;
-free_xmitbuf:
-       pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmitbuf;
-       while (i--) {
-               rtw_xmit_resource_free(padapter, pxmitbuf, (MAX_XMITBUF_SZ + XMITBUF_ALIGN_SZ));
-               pxmitbuf++;
-       }
-       vfree(pxmitpriv->pallocated_xmitbuf);
-free_frame_buf:
-       vfree(pxmitpriv->pallocated_frame_buf);
-exit:
-       return -ENOMEM;
-}
-
-static void rtw_pkt_complete(struct adapter *padapter, struct sk_buff *pkt)
-{
-       u16 queue;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       queue = skb_get_queue_mapping(pkt);
-       if (padapter->registrypriv.wifi_spec) {
-               if (__netif_subqueue_stopped(padapter->pnetdev, queue) &&
-                   (pxmitpriv->hwxmits[queue].accnt < WMM_XMIT_THRESHOLD))
-                       netif_wake_subqueue(padapter->pnetdev, queue);
-       } else {
-               if (__netif_subqueue_stopped(padapter->pnetdev, queue))
-                       netif_wake_subqueue(padapter->pnetdev, queue);
-       }
-
-       dev_kfree_skb_any(pkt);
-}
-
-void rtw_xmit_complete(struct adapter *padapter, struct xmit_frame *pxframe)
-{
-       if (pxframe->pkt)
-               rtw_pkt_complete(padapter, pxframe->pkt);
-       pxframe->pkt = NULL;
-}
-
-void _rtw_free_xmit_priv(struct xmit_priv *pxmitpriv)
-{
-       int i;
-       struct adapter *padapter = pxmitpriv->adapter;
-       struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitpriv->pxmit_frame_buf;
-       struct xmit_buf *pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmitbuf;
-       u32 max_xmit_extbuf_size = MAX_XMIT_EXTBUF_SZ;
-       u32 num_xmit_extbuf = NR_XMIT_EXTBUFF;
-
-       if (!pxmitpriv->pxmit_frame_buf)
-               return;
-
-       for (i = 0; i < NR_XMITFRAME; i++) {
-               rtw_xmit_complete(padapter, pxmitframe);
-
-               pxmitframe++;
-       }
-
-       for (i = 0; i < NR_XMITBUFF; i++) {
-               rtw_xmit_resource_free(padapter, pxmitbuf, (MAX_XMITBUF_SZ + XMITBUF_ALIGN_SZ));
-               pxmitbuf++;
-       }
-
-       vfree(pxmitpriv->pallocated_frame_buf);
-
-       vfree(pxmitpriv->pallocated_xmitbuf);
-
-       pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmit_extbuf;
-       for (i = 0; i < num_xmit_extbuf; i++) {
-               rtw_xmit_resource_free(padapter, pxmitbuf, (max_xmit_extbuf_size + XMITBUF_ALIGN_SZ));
-               pxmitbuf++;
-       }
-
-       vfree(pxmitpriv->pallocated_xmit_extbuf);
-
-       kfree(pxmitpriv->hwxmits);
-
-       mutex_destroy(&pxmitpriv->ack_tx_mutex);
-}
-
-static void update_attrib_vcs_info(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
-       u32     sz;
-       struct pkt_attrib       *pattrib = &pxmitframe->attrib;
-       struct sta_info *psta = pattrib->psta;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pattrib->nr_frags != 1)
-               sz = padapter->xmitpriv.frag_len;
-       else /* no frag */
-               sz = pattrib->last_txcmdsz;
-
-       /*  (1) RTS_Threshold is compared to the MPDU, not MSDU. */
-       /*  (2) If there are more than one frag in  this MSDU, only the first frag uses protection frame. */
-       /*              Other fragments are protected by previous fragment. */
-       /*              So we only need to check the length of first fragment. */
-       if (pmlmeext->cur_wireless_mode < WIRELESS_11_24N  || padapter->registrypriv.wifi_spec) {
-               if (sz > padapter->registrypriv.rts_thresh) {
-                       pattrib->vcs_mode = RTS_CTS;
-               } else {
-                       if (psta->rtsen)
-                               pattrib->vcs_mode = RTS_CTS;
-                       else if (psta->cts2self)
-                               pattrib->vcs_mode = CTS_TO_SELF;
-                       else
-                               pattrib->vcs_mode = NONE_VCS;
-               }
-       } else {
-               while (true) {
-                       /* IOT action */
-                       if ((pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_ATHEROS) && pattrib->ampdu_en &&
-                           (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)) {
-                               pattrib->vcs_mode = CTS_TO_SELF;
-                               break;
-                       }
-
-                       /* check ERP protection */
-                       if (psta->rtsen || psta->cts2self) {
-                               if (psta->rtsen)
-                                       pattrib->vcs_mode = RTS_CTS;
-                               else if (psta->cts2self)
-                                       pattrib->vcs_mode = CTS_TO_SELF;
-
-                               break;
-                       }
-
-                       /* check HT op mode */
-                       if (pattrib->ht_en) {
-                               u8 htopmode = pmlmeinfo->HT_protection;
-
-                               if ((pmlmeext->cur_bwmode && (htopmode == 2 || htopmode == 3)) ||
-                                   (!pmlmeext->cur_bwmode && htopmode == 3)) {
-                                       pattrib->vcs_mode = RTS_CTS;
-                                       break;
-                               }
-                       }
-
-                       /* check rts */
-                       if (sz > padapter->registrypriv.rts_thresh) {
-                               pattrib->vcs_mode = RTS_CTS;
-                               break;
-                       }
-
-                       /* to do list: check MIMO power save condition. */
-
-                       /* check AMPDU aggregation for TXOP */
-                       if (pattrib->ampdu_en) {
-                               pattrib->vcs_mode = RTS_CTS;
-                               break;
-                       }
-
-                       pattrib->vcs_mode = NONE_VCS;
-                       break;
-               }
-       }
-}
-
-static void update_attrib_phy_info(struct pkt_attrib *pattrib, struct sta_info *psta)
-{
-       /*if (psta->rtsen)
-               pattrib->vcs_mode = RTS_CTS;
-       else if (psta->cts2self)
-               pattrib->vcs_mode = CTS_TO_SELF;
-       else
-               pattrib->vcs_mode = NONE_VCS;*/
-
-       pattrib->mdata = 0;
-       pattrib->eosp = 0;
-       pattrib->triggered = 0;
-
-       /* qos_en, ht_en, init rate, , bw, ch_offset, sgi */
-       pattrib->qos_en = psta->qos_option;
-
-       pattrib->raid = psta->raid;
-       pattrib->ht_en = psta->htpriv.ht_option;
-       pattrib->bwmode = psta->htpriv.bwmode;
-       pattrib->ch_offset = psta->htpriv.ch_offset;
-       pattrib->sgi = psta->htpriv.sgi;
-       pattrib->ampdu_en = false;
-       pattrib->retry_ctrl = false;
-}
-
-u8     qos_acm(u8 acm_mask, u8 priority)
-{
-       u8      change_priority = priority;
-
-       switch (priority) {
-       case 0:
-       case 3:
-               if (acm_mask & BIT(1))
-                       change_priority = 1;
-               break;
-       case 1:
-       case 2:
-               break;
-       case 4:
-       case 5:
-               if (acm_mask & BIT(2))
-                       change_priority = 0;
-               break;
-       case 6:
-       case 7:
-               if (acm_mask & BIT(3))
-                       change_priority = 5;
-               break;
-       default:
-               break;
-       }
-
-       return change_priority;
-}
-
-static void rtw_open_pktfile(struct sk_buff *pktptr, struct pkt_file *pfile)
-{
-       if (!pktptr) {
-               pr_err("8188eu: pktptr is NULL\n");
-               return;
-       }
-       if (!pfile) {
-               pr_err("8188eu: pfile is NULL\n");
-               return;
-       }
-       pfile->pkt = pktptr;
-       pfile->cur_addr = pktptr->data;
-       pfile->buf_start = pktptr->data;
-       pfile->pkt_len = pktptr->len;
-       pfile->buf_len = pktptr->len;
-
-       pfile->cur_buffer = pfile->buf_start;
-}
-
-static uint rtw_remainder_len(struct pkt_file *pfile)
-{
-       return pfile->buf_len - ((size_t)(pfile->cur_addr) -
-              (size_t)(pfile->buf_start));
-}
-
-static uint rtw_pktfile_read(struct pkt_file *pfile, u8 *rmem, uint rlen)
-{
-       uint len;
-
-       len = min(rtw_remainder_len(pfile), rlen);
-
-       if (rmem)
-               skb_copy_bits(pfile->pkt, pfile->buf_len - pfile->pkt_len, rmem, len);
-
-       pfile->cur_addr += len;
-       pfile->pkt_len -= len;
-
-       return len;
-}
-
-static void set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib)
-{
-       struct ethhdr etherhdr;
-       struct iphdr ip_hdr;
-       s32 user_prio = 0;
-
-       rtw_open_pktfile(ppktfile->pkt, ppktfile);
-       rtw_pktfile_read(ppktfile, (unsigned char *)&etherhdr, ETH_HLEN);
-
-       /*  get user_prio from IP hdr */
-       if (pattrib->ether_type == 0x0800) {
-               rtw_pktfile_read(ppktfile, (u8 *)&ip_hdr, sizeof(ip_hdr));
-/*             user_prio = (ntohs(ip_hdr.tos) >> 5) & 0x3; */
-               user_prio = ip_hdr.tos >> 5;
-       } else if (pattrib->ether_type == 0x888e) {
-               /*  "When priority processing of data frames is supported, */
-               /*  a STA's SME should send EAPOL-Key frames at the highest priority." */
-               user_prio = 7;
-       }
-
-       pattrib->priority = user_prio;
-       pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN;
-       pattrib->subtype = IEEE80211_STYPE_QOS_DATA | IEEE80211_FTYPE_DATA;
-}
-
-static s32 update_attrib(struct adapter *padapter, struct sk_buff *pkt, struct pkt_attrib *pattrib)
-{
-       struct pkt_file pktfile;
-       struct sta_info *psta = NULL;
-       struct ethhdr etherhdr;
-
-       bool bmcast;
-       struct sta_priv         *pstapriv = &padapter->stapriv;
-       struct security_priv    *psecuritypriv = &padapter->securitypriv;
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       struct qos_priv         *pqospriv = &pmlmepriv->qospriv;
-       int res = _SUCCESS;
-
-
-
-       rtw_open_pktfile(pkt, &pktfile);
-       rtw_pktfile_read(&pktfile, (u8 *)&etherhdr, ETH_HLEN);
-
-       pattrib->ether_type = ntohs(etherhdr.h_proto);
-
-       memcpy(pattrib->dst, &etherhdr.h_dest, ETH_ALEN);
-       memcpy(pattrib->src, &etherhdr.h_source, ETH_ALEN);
-
-       pattrib->pctrl = 0;
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-               memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
-               memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-       } else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-               memcpy(pattrib->ra, get_bssid(pmlmepriv), ETH_ALEN);
-               memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-       } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
-               memcpy(pattrib->ta, get_bssid(pmlmepriv), ETH_ALEN);
-       }
-
-       pattrib->pktlen = pktfile.pkt_len;
-
-       if (pattrib->ether_type == ETH_P_IP) {
-               /*  The following is for DHCP and ARP packet, we use cck1M to tx these packets and let LPS awake some time */
-               /*  to prevent DHCP protocol fail */
-               u8 tmp[24];
-
-               rtw_pktfile_read(&pktfile, &tmp[0], 24);
-               pattrib->dhcp_pkt = 0;
-               if (pktfile.pkt_len > 282) {/* MINIMUM_DHCP_PACKET_SIZE) { */
-                       if (((tmp[21] == 68) && (tmp[23] == 67)) ||
-                           ((tmp[21] == 67) && (tmp[23] == 68))) {
-                               /*  68 : UDP BOOTP client */
-                               /*  67 : UDP BOOTP server */
-                               /*  Use low rate to send DHCP packet. */
-                               pattrib->dhcp_pkt = 1;
-                       }
-               }
-       }
-
-       /*  If EAPOL , ARP , OR DHCP packet, driver must be in active mode. */
-       if ((pattrib->ether_type == 0x0806) || (pattrib->ether_type == 0x888e) || (pattrib->dhcp_pkt == 1))
-               rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_SPECIAL_PACKET, 1);
-
-       bmcast = is_multicast_ether_addr(pattrib->ra);
-
-       /*  get sta_info */
-       if (bmcast) {
-               psta = rtw_get_bcmc_stainfo(padapter);
-       } else {
-               psta = rtw_get_stainfo(pstapriv, pattrib->ra);
-               if (!psta) { /*  if we cannot get psta => drrp the pkt */
-                       res = _FAIL;
-                       goto exit;
-               } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE) && !(psta->state & _FW_LINKED)) {
-                       res = _FAIL;
-                       goto exit;
-               }
-       }
-
-       if (psta) {
-               pattrib->mac_id = psta->mac_id;
-               pattrib->psta = psta;
-       } else {
-               /*  if we cannot get psta => drop the pkt */
-               res = _FAIL;
-               goto exit;
-       }
-
-       pattrib->ack_policy = 0;
-       /*  get ether_hdr_len */
-       pattrib->pkt_hdrlen = ETH_HLEN;/* pattrib->ether_type == 0x8100) ? (14 + 4): 14; vlan tag */
-
-       pattrib->hdrlen = WLAN_HDR_A3_LEN;
-       pattrib->subtype = IEEE80211_FTYPE_DATA;
-       pattrib->priority = 0;
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE | WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE)) {
-               if (psta->qos_option)
-                       set_qos(&pktfile, pattrib);
-       } else {
-               if (pqospriv->qos_option) {
-                       set_qos(&pktfile, pattrib);
-
-                       if (pmlmepriv->acm_mask != 0)
-                               pattrib->priority = qos_acm(pmlmepriv->acm_mask, pattrib->priority);
-               }
-       }
-
-       if (psta->ieee8021x_blocked) {
-               pattrib->encrypt = 0;
-
-               if ((pattrib->ether_type != 0x888e) && !check_fwstate(pmlmepriv, WIFI_MP_STATE)) {
-                       res = _FAIL;
-                       goto exit;
-               }
-       } else {
-               GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, bmcast);
-
-               switch (psecuritypriv->dot11AuthAlgrthm) {
-               case dot11AuthAlgrthm_Open:
-               case dot11AuthAlgrthm_Shared:
-               case dot11AuthAlgrthm_Auto:
-                       pattrib->key_idx = (u8)psecuritypriv->dot11PrivacyKeyIndex;
-                       break;
-               case dot11AuthAlgrthm_8021X:
-                       if (bmcast)
-                               pattrib->key_idx = (u8)psecuritypriv->dot118021XGrpKeyid;
-                       else
-                               pattrib->key_idx = 0;
-                       break;
-               default:
-                       pattrib->key_idx = 0;
-                       break;
-               }
-       }
-
-       switch (pattrib->encrypt) {
-       case _WEP40_:
-       case _WEP104_:
-               pattrib->iv_len = 4;
-               pattrib->icv_len = 4;
-               break;
-       case _TKIP_:
-               pattrib->iv_len = 8;
-               pattrib->icv_len = 4;
-
-               if (padapter->securitypriv.busetkipkey == _FAIL) {
-                       res = _FAIL;
-                       goto exit;
-               }
-               break;
-       case _AES_:
-               pattrib->iv_len = 8;
-               pattrib->icv_len = 8;
-               break;
-       default:
-               pattrib->iv_len = 0;
-               pattrib->icv_len = 0;
-               break;
-       }
-
-       if (pattrib->encrypt &&
-           (padapter->securitypriv.sw_encrypt || !psecuritypriv->hw_decrypted))
-               pattrib->bswenc = true;
-       else
-               pattrib->bswenc = false;
-
-       update_attrib_phy_info(pattrib, psta);
-
-exit:
-
-       return res;
-}
-
-static s32 xmitframe_addmic(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
-       int curfragnum, length;
-       u8      *pframe, *payload, mic[8];
-       struct  mic_data micdata;
-       struct  sta_info *stainfo;
-       struct  pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct  security_priv   *psecuritypriv = &padapter->securitypriv;
-       struct  xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       u8 priority[4] = {0x0, 0x0, 0x0, 0x0};
-       u8 hw_hdr_offset = 0;
-
-       if (pattrib->psta)
-               stainfo = pattrib->psta;
-       else
-               stainfo = rtw_get_stainfo(&padapter->stapriv, &pattrib->ra[0]);
-
-       hw_hdr_offset = TXDESC_SIZE + (pxmitframe->pkt_offset * PACKET_OFFSET_SZ);
-
-       if (pattrib->encrypt == _TKIP_) {/* if (psecuritypriv->dot11PrivacyAlgrthm == _TKIP_PRIVACY_) */
-               /* encode mic code */
-               if (stainfo) {
-                       u8 null_key[16] = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-                                          0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
-                                          0x0, 0x0};
-
-                       pframe = pxmitframe->buf_addr + hw_hdr_offset;
-
-                       if (is_multicast_ether_addr(pattrib->ra)) {
-                               if (!memcmp(psecuritypriv->dot118021XGrptxmickey[psecuritypriv->dot118021XGrpKeyid].skey, null_key, 16))
-                                       return _FAIL;
-                               /* start to calculate the mic code */
-                               rtw_secmicsetkey(&micdata, psecuritypriv->dot118021XGrptxmickey[psecuritypriv->dot118021XGrpKeyid].skey);
-                       } else {
-                               if (!memcmp(&stainfo->dot11tkiptxmickey.skey[0], null_key, 16)) {
-                                       /* msleep(10); */
-                                       return _FAIL;
-                               }
-                               /* start to calculate the mic code */
-                               rtw_secmicsetkey(&micdata, &stainfo->dot11tkiptxmickey.skey[0]);
-                       }
-
-                       if (pframe[1] & 1) {   /* ToDS == 1 */
-                               rtw_secmicappend(&micdata, &pframe[16], 6);  /* DA */
-                               if (pframe[1] & 2)  /* From Ds == 1 */
-                                       rtw_secmicappend(&micdata, &pframe[24], 6);
-                               else
-                                       rtw_secmicappend(&micdata, &pframe[10], 6);
-                       } else {        /* ToDS == 0 */
-                               rtw_secmicappend(&micdata, &pframe[4], 6);   /* DA */
-                               if (pframe[1] & 2)  /* From Ds == 1 */
-                                       rtw_secmicappend(&micdata, &pframe[16], 6);
-                               else
-                                       rtw_secmicappend(&micdata, &pframe[10], 6);
-                       }
-
-                       if (pattrib->qos_en)
-                               priority[0] = (u8)pxmitframe->attrib.priority;
-
-                       rtw_secmicappend(&micdata, &priority[0], 4);
-
-                       payload = pframe;
-
-                       for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {
-                               payload = PTR_ALIGN(payload, 4);
-
-                               payload = payload + pattrib->hdrlen + pattrib->iv_len;
-                               if ((curfragnum + 1) == pattrib->nr_frags) {
-                                       length = pattrib->last_txcmdsz - pattrib->hdrlen - pattrib->iv_len - ((pattrib->bswenc) ? pattrib->icv_len : 0);
-                                       rtw_secmicappend(&micdata, payload, length);
-                                       payload = payload + length;
-                               } else {
-                                       length = pxmitpriv->frag_len - pattrib->hdrlen - pattrib->iv_len - ((pattrib->bswenc) ? pattrib->icv_len : 0);
-                                       rtw_secmicappend(&micdata, payload, length);
-                                       payload = payload + length + pattrib->icv_len;
-                               }
-                       }
-                       rtw_secgetmic(&micdata, &mic[0]);
-                       /* add mic code  and add the mic code length in last_txcmdsz */
-
-                       memcpy(payload, &mic[0], 8);
-                       pattrib->last_txcmdsz += 8;
-
-                       payload = payload - pattrib->last_txcmdsz + 8;
-               }
-       }
-
-       return _SUCCESS;
-}
-
-static void xmitframe_swencrypt(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
-       struct  pkt_attrib       *pattrib = &pxmitframe->attrib;
-
-       if (!pattrib->bswenc)
-               return;
-
-       switch (pattrib->encrypt) {
-       case _WEP40_:
-       case _WEP104_:
-               rtw_wep_encrypt(padapter, pxmitframe);
-               break;
-       case _TKIP_:
-               rtw_tkip_encrypt(padapter, pxmitframe);
-               break;
-       case _AES_:
-               rtw_aes_encrypt(padapter, pxmitframe);
-               break;
-       default:
-               break;
-       }
-}
-
-s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattrib)
-{
-       u16 *qc;
-
-       struct ieee80211_hdr *pwlanhdr = (struct ieee80211_hdr *)hdr;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct qos_priv *pqospriv = &pmlmepriv->qospriv;
-       bool qos_option;
-       __le16 *fctrl = &pwlanhdr->frame_control;
-
-       struct sta_info *psta;
-
-       if (pattrib->psta)
-               psta = pattrib->psta;
-       else if (is_multicast_ether_addr(pattrib->ra))
-               psta = rtw_get_bcmc_stainfo(padapter);
-       else
-               psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
-
-       memset(hdr, 0, WLANHDR_OFFSET);
-
-       SetFrameSubType(fctrl, pattrib->subtype);
-
-       if (!(pattrib->subtype & IEEE80211_FTYPE_DATA))
-               return _SUCCESS;
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-               /* to_ds = 1, fr_ds = 0; */
-               /* Data transfer to AP */
-               SetToDs(fctrl);
-               memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
-               memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
-               memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
-               qos_option = pqospriv->qos_option;
-       } else if (check_fwstate(pmlmepriv,  WIFI_AP_STATE)) {
-               /* to_ds = 0, fr_ds = 1; */
-               SetFrDs(fctrl);
-               memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
-               memcpy(pwlanhdr->addr2, get_bssid(pmlmepriv), ETH_ALEN);
-               memcpy(pwlanhdr->addr3, pattrib->src, ETH_ALEN);
-               qos_option = psta->qos_option;
-       } else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
-                  check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-               memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
-               memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
-               memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv), ETH_ALEN);
-               qos_option = psta->qos_option;
-       } else {
-               return _FAIL;
-       }
-
-       if (pattrib->mdata)
-               SetMData(fctrl);
-
-       if (pattrib->encrypt)
-               SetPrivacy(fctrl);
-
-       if (qos_option) {
-               qc = (unsigned short *)(hdr + pattrib->hdrlen - 2);
-
-               if (pattrib->priority)
-                       SetPriority(qc, pattrib->priority);
-
-               SetEOSP(qc, pattrib->eosp);
-
-               SetAckpolicy(qc, pattrib->ack_policy);
-       }
-
-       /* TODO: fill HT Control Field */
-
-       /* Update Seq Num will be handled by f/w */
-       if (psta) {
-               psta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
-               psta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
-
-               pattrib->seqnum = psta->sta_xmitpriv.txseq_tid[pattrib->priority];
-
-               SetSeqNum(hdr, pattrib->seqnum);
-
-               /* check if enable ampdu */
-               if (pattrib->ht_en && psta->htpriv.ampdu_enable) {
-                       if (psta->htpriv.agg_enable_bitmap & BIT(pattrib->priority))
-                               pattrib->ampdu_en = true;
-               }
-
-               /* re-check if enable ampdu by BA_starting_seqctrl */
-               if (pattrib->ampdu_en) {
-                       u16 tx_seq;
-
-                       tx_seq = psta->BA_starting_seqctrl[pattrib->priority & 0x0f];
-
-                       /* check BA_starting_seqctrl */
-                       if (SN_LESS(pattrib->seqnum, tx_seq)) {
-                               pattrib->ampdu_en = false;/* AGG BK */
-                       } else if (SN_EQUAL(pattrib->seqnum, tx_seq)) {
-                               psta->BA_starting_seqctrl[pattrib->priority & 0x0f] = (tx_seq + 1) & 0xfff;
-
-                               pattrib->ampdu_en = true;/* AGG EN */
-                       } else {
-                               psta->BA_starting_seqctrl[pattrib->priority & 0x0f] = (pattrib->seqnum + 1) & 0xfff;
-                               pattrib->ampdu_en = true;/* AGG EN */
-                       }
-               }
-       }
-
-       return _SUCCESS;
-}
-
-s32 rtw_txframes_pending(struct adapter *padapter)
-{
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       return (!list_empty(&pxmitpriv->be_pending) ||
-               !list_empty(&pxmitpriv->bk_pending) ||
-               !list_empty(&pxmitpriv->vi_pending) ||
-               !list_empty(&pxmitpriv->vo_pending));
-}
-
-s32 rtw_txframes_sta_ac_pending(struct adapter *padapter, struct pkt_attrib *pattrib)
-{
-       struct sta_info *psta;
-       struct tx_servq *ptxservq;
-       int priority = pattrib->priority;
-
-       psta = pattrib->psta;
-
-       switch (priority) {
-       case 1:
-       case 2:
-               ptxservq = &psta->sta_xmitpriv.bk_q;
-               break;
-       case 4:
-       case 5:
-               ptxservq = &psta->sta_xmitpriv.vi_q;
-               break;
-       case 6:
-       case 7:
-               ptxservq = &psta->sta_xmitpriv.vo_q;
-               break;
-       case 0:
-       case 3:
-       default:
-               ptxservq = &psta->sta_xmitpriv.be_q;
-               break;
-       }
-
-       if (ptxservq)
-               return ptxservq->qcnt;
-       return 0;
-}
-
-/*
- * This sub-routine will perform all the following:
- *
- * 1. remove 802.3 header.
- * 2. create wlan_header, based on the info in pxmitframe
- * 3. append sta's iv/ext-iv
- * 4. append LLC
- * 5. move frag chunk from pframe to pxmitframe->mem
- * 6. apply sw-encrypt, if necessary.
- */
-s32 rtw_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, struct xmit_frame *pxmitframe)
-{
-       struct pkt_file pktfile;
-       s32 frg_inx, frg_len, mpdu_len, llc_sz, mem_sz;
-       u8 *pframe, *mem_start;
-       u8 hw_hdr_offset;
-       struct sta_info         *psta;
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-       struct pkt_attrib       *pattrib = &pxmitframe->attrib;
-       u8 *pbuf_start;
-       bool bmcst = is_multicast_ether_addr(pattrib->ra);
-       s32 res = _SUCCESS;
-
-       if (!pkt)
-               return _FAIL;
-
-       psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
-
-       if (!psta)
-               return _FAIL;
-
-       if (!pxmitframe->buf_addr)
-               return _FAIL;
-
-       pbuf_start = pxmitframe->buf_addr;
-
-       hw_hdr_offset =  TXDESC_SIZE + (pxmitframe->pkt_offset * PACKET_OFFSET_SZ);
-
-       mem_start = pbuf_start +        hw_hdr_offset;
-
-       if (rtw_make_wlanhdr(padapter, mem_start, pattrib) == _FAIL) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       rtw_open_pktfile(pkt, &pktfile);
-       rtw_pktfile_read(&pktfile, NULL, pattrib->pkt_hdrlen);
-
-       frg_inx = 0;
-       frg_len = pxmitpriv->frag_len - 4;/* 2346-4 = 2342 */
-
-       while (1) {
-               llc_sz = 0;
-
-               mpdu_len = frg_len;
-
-               pframe = mem_start;
-
-               SetMFrag(mem_start);
-
-               pframe += pattrib->hdrlen;
-               mpdu_len -= pattrib->hdrlen;
-
-               /* adding icv, if necessary... */
-               if (pattrib->iv_len) {
-                       switch (pattrib->encrypt) {
-                       case _WEP40_:
-                       case _WEP104_:
-                               WEP_IV(pattrib->iv, psta->dot11txpn, pattrib->key_idx);
-                               break;
-                       case _TKIP_:
-                               if (bmcst)
-                                       TKIP_IV(pattrib->iv, psta->dot11txpn, pattrib->key_idx);
-                               else
-                                       TKIP_IV(pattrib->iv, psta->dot11txpn, 0);
-                               break;
-                       case _AES_:
-                               if (bmcst)
-                                       AES_IV(pattrib->iv, psta->dot11txpn, pattrib->key_idx);
-                               else
-                                       AES_IV(pattrib->iv, psta->dot11txpn, 0);
-                               break;
-                       }
-
-                       memcpy(pframe, pattrib->iv, pattrib->iv_len);
-
-                       pframe += pattrib->iv_len;
-
-                       mpdu_len -= pattrib->iv_len;
-               }
-
-               if (frg_inx == 0) {
-                       llc_sz = rtw_put_snap(pframe, pattrib->ether_type);
-                       pframe += llc_sz;
-                       mpdu_len -= llc_sz;
-               }
-
-               if ((pattrib->icv_len > 0) && (pattrib->bswenc))
-                       mpdu_len -= pattrib->icv_len;
-
-               if (bmcst) {
-                       /*  don't do fragment to broadcast/multicast packets */
-                       mem_sz = rtw_pktfile_read(&pktfile, pframe, pattrib->pktlen);
-               } else {
-                       mem_sz = rtw_pktfile_read(&pktfile, pframe, mpdu_len);
-               }
-
-               pframe += mem_sz;
-
-               if ((pattrib->icv_len > 0) && (pattrib->bswenc)) {
-                       memcpy(pframe, pattrib->icv, pattrib->icv_len);
-                       pframe += pattrib->icv_len;
-               }
-
-               frg_inx++;
-
-               if (bmcst || pktfile.pkt_len == 0) {
-                       pattrib->nr_frags = frg_inx;
-
-                       pattrib->last_txcmdsz = pattrib->hdrlen + pattrib->iv_len + ((pattrib->nr_frags == 1) ? llc_sz : 0) +
-                                               ((pattrib->bswenc) ? pattrib->icv_len : 0) + mem_sz;
-
-                       ClearMFrag(mem_start);
-
-                       break;
-               }
-
-               mem_start = PTR_ALIGN(pframe, 4) + hw_hdr_offset;
-               memcpy(mem_start, pbuf_start + hw_hdr_offset, pattrib->hdrlen);
-       }
-
-       if (xmitframe_addmic(padapter, pxmitframe) == _FAIL) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       xmitframe_swencrypt(padapter, pxmitframe);
-
-       if (!bmcst)
-               update_attrib_vcs_info(padapter, pxmitframe);
-       else
-               pattrib->vcs_mode = NONE_VCS;
-
-exit:
-
-       return res;
-}
-
-/* Logical Link Control(LLC) SubNetwork Attachment Point(SNAP) header
- * IEEE LLC/SNAP header contains 8 octets
- * First 3 octets comprise the LLC portion
- * SNAP portion, 5 octets, is divided into two fields:
- *     Organizationally Unique Identifier(OUI), 3 octets,
- *     type, defined by that organization, 2 octets.
- */
-s32 rtw_put_snap(u8 *data, u16 h_proto)
-{
-       struct ieee80211_snap_hdr *snap;
-       u8 *oui;
-
-       snap = (struct ieee80211_snap_hdr *)data;
-       snap->dsap = 0xaa;
-       snap->ssap = 0xaa;
-       snap->ctrl = 0x03;
-
-       if (h_proto == 0x8137 || h_proto == 0x80f3)
-               oui = P802_1H_OUI;
-       else
-               oui = RFC1042_OUI;
-
-       snap->oui[0] = oui[0];
-       snap->oui[1] = oui[1];
-       snap->oui[2] = oui[2];
-
-       *(__be16 *)(data + SNAP_SIZE) = htons(h_proto);
-
-       return SNAP_SIZE + sizeof(u16);
-}
-
-void rtw_count_tx_stats(struct adapter *padapter, struct xmit_frame *pxmitframe, int sz)
-{
-       struct sta_info *psta = NULL;
-       struct stainfo_stats *pstats = NULL;
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-
-       if ((pxmitframe->frame_tag & 0x0f) == DATA_FRAMETAG) {
-               pxmitpriv->tx_bytes += sz;
-               pmlmepriv->LinkDetectInfo.NumTxOkInPeriod += pxmitframe->agg_num;
-
-               psta = pxmitframe->attrib.psta;
-               if (psta) {
-                       pstats = &psta->sta_stats;
-                       pstats->tx_pkts += pxmitframe->agg_num;
-                       pstats->tx_bytes += sz;
-               }
-       }
-}
-
-struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv)
-{
-       struct xmit_buf *pxmitbuf =  NULL;
-       struct list_head *plist, *phead;
-       struct __queue *pfree_queue = &pxmitpriv->free_xmit_extbuf_queue;
-       unsigned long flags;
-
-       spin_lock_irqsave(&pfree_queue->lock, flags);
-
-       if (list_empty(&pfree_queue->queue)) {
-               pxmitbuf = NULL;
-       } else {
-               phead = get_list_head(pfree_queue);
-
-               plist = phead->next;
-
-               pxmitbuf = container_of(plist, struct xmit_buf, list);
-
-               list_del_init(&pxmitbuf->list);
-       }
-
-       if (pxmitbuf) {
-               pxmitpriv->free_xmit_extbuf_cnt--;
-
-               pxmitbuf->priv_data = NULL;
-               /* pxmitbuf->ext_tag = true; */
-
-               if (pxmitbuf->sctx)
-                       rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_ALLOC);
-       }
-
-       spin_unlock_irqrestore(&pfree_queue->lock, flags);
-
-       return pxmitbuf;
-}
-
-s32 rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf)
-{
-       struct __queue *pfree_queue = &pxmitpriv->free_xmit_extbuf_queue;
-       unsigned long flags;
-
-       if (!pxmitbuf)
-               return _FAIL;
-
-       spin_lock_irqsave(&pfree_queue->lock, flags);
-
-       list_del_init(&pxmitbuf->list);
-
-       list_add_tail(&pxmitbuf->list, get_list_head(pfree_queue));
-       pxmitpriv->free_xmit_extbuf_cnt++;
-
-       spin_unlock_irqrestore(&pfree_queue->lock, flags);
-
-       return _SUCCESS;
-}
-
-struct xmit_buf *rtw_alloc_xmitbuf(struct xmit_priv *pxmitpriv)
-{
-       struct xmit_buf *pxmitbuf =  NULL;
-       struct list_head *plist, *phead;
-       struct __queue *pfree_xmitbuf_queue = &pxmitpriv->free_xmitbuf_queue;
-       unsigned long flags;
-
-       spin_lock_irqsave(&pfree_xmitbuf_queue->lock, flags);
-
-       if (list_empty(&pfree_xmitbuf_queue->queue)) {
-               pxmitbuf = NULL;
-       } else {
-               phead = get_list_head(pfree_xmitbuf_queue);
-
-               plist = phead->next;
-
-               pxmitbuf = container_of(plist, struct xmit_buf, list);
-
-               list_del_init(&pxmitbuf->list);
-       }
-
-       if (pxmitbuf) {
-               pxmitpriv->free_xmitbuf_cnt--;
-               pxmitbuf->priv_data = NULL;
-               if (pxmitbuf->sctx)
-                       rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_ALLOC);
-       }
-       spin_unlock_irqrestore(&pfree_xmitbuf_queue->lock, flags);
-
-       return pxmitbuf;
-}
-
-s32 rtw_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf)
-{
-       struct __queue *pfree_xmitbuf_queue = &pxmitpriv->free_xmitbuf_queue;
-       unsigned long flags;
-
-       if (!pxmitbuf)
-               return _FAIL;
-
-       if (pxmitbuf->sctx)
-               rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_FREE);
-
-       if (pxmitbuf->ext_tag) {
-               rtw_free_xmitbuf_ext(pxmitpriv, pxmitbuf);
-       } else {
-               spin_lock_irqsave(&pfree_xmitbuf_queue->lock, flags);
-
-               list_del_init(&pxmitbuf->list);
-
-               list_add_tail(&pxmitbuf->list, get_list_head(pfree_xmitbuf_queue));
-
-               pxmitpriv->free_xmitbuf_cnt++;
-               spin_unlock_irqrestore(&pfree_xmitbuf_queue->lock, flags);
-       }
-
-       return _SUCCESS;
-}
-
-/*
- * Calling context:
- * 1. OS_TXENTRY
- * 2. RXENTRY (rx_thread or RX_ISR/RX_CallBack)
- *
- * If we turn on USE_RXTHREAD, then, no need for critical section.
- * Otherwise, we must use _enter/_exit critical to protect free_xmit_queue...
- *
- * Must be very very cautious...
- */
-struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv)/* _queue *pfree_xmit_queue) */
-{
-       /*
-        * Please remember to use all the osdep_service api,
-        * and lock/unlock or _enter/_exit critical to protect
-        * pfree_xmit_queue
-        */
-
-       struct xmit_frame *pxframe = NULL;
-       struct list_head *plist, *phead;
-       struct __queue *pfree_xmit_queue = &pxmitpriv->free_xmit_queue;
-
-       spin_lock_bh(&pfree_xmit_queue->lock);
-
-       if (list_empty(&pfree_xmit_queue->queue))
-               goto out;
-
-       phead = get_list_head(pfree_xmit_queue);
-       plist = phead->next;
-       pxframe = container_of(plist, struct xmit_frame, list);
-       list_del_init(&pxframe->list);
-
-       pxmitpriv->free_xmitframe_cnt--;
-
-       pxframe->buf_addr = NULL;
-       pxframe->pxmitbuf = NULL;
-
-       memset(&pxframe->attrib, 0, sizeof(struct pkt_attrib));
-       /* pxframe->attrib.psta = NULL; */
-
-       pxframe->frame_tag = DATA_FRAMETAG;
-
-       pxframe->pkt = NULL;
-       pxframe->pkt_offset = 1;/* default use pkt_offset to fill tx desc */
-
-       pxframe->agg_num = 1;
-       pxframe->ack_report = 0;
-
-out:
-       spin_unlock_bh(&pfree_xmit_queue->lock);
-       return pxframe;
-}
-
-s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe)
-{
-       struct __queue *pfree_xmit_queue = &pxmitpriv->free_xmit_queue;
-       struct adapter *padapter = pxmitpriv->adapter;
-       struct sk_buff *pndis_pkt = NULL;
-
-       if (!pxmitframe)
-               goto exit;
-
-       spin_lock_bh(&pfree_xmit_queue->lock);
-
-       list_del_init(&pxmitframe->list);
-
-       if (pxmitframe->pkt) {
-               pndis_pkt = pxmitframe->pkt;
-               pxmitframe->pkt = NULL;
-       }
-
-       list_add_tail(&pxmitframe->list, get_list_head(pfree_xmit_queue));
-
-       pxmitpriv->free_xmitframe_cnt++;
-
-       spin_unlock_bh(&pfree_xmit_queue->lock);
-
-       if (pndis_pkt)
-               rtw_pkt_complete(padapter, pndis_pkt);
-
-exit:
-
-       return _SUCCESS;
-}
-
-void rtw_free_xmitframe_list(struct xmit_priv *pxmitpriv, struct list_head *xframe_list)
-{
-       struct  xmit_frame *pxmitframe, *tmp_xmitframe;
-
-       list_for_each_entry_safe(pxmitframe, tmp_xmitframe, xframe_list, list)
-               rtw_free_xmitframe(pxmitpriv, pxmitframe);
-}
-
-struct xmit_frame *rtw_dequeue_xframe(struct xmit_priv *pxmitpriv, struct hw_xmit *phwxmit_i)
-{
-       struct hw_xmit *phwxmit;
-       struct tx_servq *ptxservq, *tmp_txservq;
-       struct list_head *xframe_list;
-       struct xmit_frame *pxmitframe = NULL;
-       struct adapter *padapter = pxmitpriv->adapter;
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       int i, inx[] = { 0, 1, 2, 3 };
-
-       if (pregpriv->wifi_spec == 1) {
-               for (i = 0; i < ARRAY_SIZE(inx); i++)
-                       inx[i] = pxmitpriv->wmm_para_seq[i];
-       }
-
-       spin_lock_bh(&pxmitpriv->lock);
-
-       for (i = 0; i < HWXMIT_ENTRY; i++) {
-               phwxmit = phwxmit_i + inx[i];
-               list_for_each_entry_safe(ptxservq, tmp_txservq, phwxmit->sta_list, tx_pending) {
-                       xframe_list = &ptxservq->sta_pending;
-                       if (list_empty(xframe_list))
-                               continue;
-
-                       pxmitframe = container_of(xframe_list->next, struct xmit_frame, list);
-                       list_del_init(&pxmitframe->list);
-
-                       phwxmit->accnt--;
-                       ptxservq->qcnt--;
-
-                       /* Remove sta node when there are no pending packets. */
-                       if (list_empty(xframe_list))
-                               list_del_init(&ptxservq->tx_pending);
-
-                       goto exit;
-               }
-       }
-exit:
-       spin_unlock_bh(&pxmitpriv->lock);
-
-       return pxmitframe;
-}
-
-struct tx_servq *rtw_get_sta_pending(struct adapter *padapter, struct sta_info *psta, int up, u8 *ac)
-{
-       struct tx_servq *ptxservq;
-
-       switch (up) {
-       case 1:
-       case 2:
-               ptxservq = &psta->sta_xmitpriv.bk_q;
-               *(ac) = 3;
-               break;
-       case 4:
-       case 5:
-               ptxservq = &psta->sta_xmitpriv.vi_q;
-               *(ac) = 1;
-               break;
-       case 6:
-       case 7:
-               ptxservq = &psta->sta_xmitpriv.vo_q;
-               *(ac) = 0;
-               break;
-       case 0:
-       case 3:
-       default:
-               ptxservq = &psta->sta_xmitpriv.be_q;
-               *(ac) = 2;
-       break;
-       }
-
-       return ptxservq;
-}
-
-/*
- * Will enqueue pxmitframe to the proper queue,
- * and indicate it to xx_pending list.....
- */
-s32 rtw_xmit_classifier(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
-       u8      ac_index;
-       struct sta_info *psta;
-       struct tx_servq *ptxservq;
-       struct pkt_attrib       *pattrib = &pxmitframe->attrib;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct hw_xmit  *phwxmits =  padapter->xmitpriv.hwxmits;
-       int res = _SUCCESS;
-
-       if (pattrib->psta)
-               psta = pattrib->psta;
-       else
-               psta = rtw_get_stainfo(pstapriv, pattrib->ra);
-
-       if (!psta) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index));
-
-       if (list_empty(&ptxservq->tx_pending))
-               list_add_tail(&ptxservq->tx_pending, phwxmits[ac_index].sta_list);
-
-       list_add_tail(&pxmitframe->list, &ptxservq->sta_pending);
-       ptxservq->qcnt++;
-       phwxmits[ac_index].accnt++;
-exit:
-
-       return res;
-}
-
-int rtw_alloc_hwxmits(struct adapter *padapter)
-{
-       struct hw_xmit *hwxmits;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       pxmitpriv->hwxmits = kcalloc(HWXMIT_ENTRY, sizeof(struct hw_xmit), GFP_KERNEL);
-       if (!pxmitpriv->hwxmits)
-               return -ENOMEM;
-
-       hwxmits = pxmitpriv->hwxmits;
-
-       hwxmits[0].sta_list = &pxmitpriv->vo_pending;
-       hwxmits[1].sta_list = &pxmitpriv->vi_pending;
-       hwxmits[2].sta_list = &pxmitpriv->be_pending;
-       hwxmits[3].sta_list = &pxmitpriv->bk_pending;
-
-       return 0;
-}
-
-static int rtw_br_client_tx(struct adapter *padapter, struct sk_buff **pskb)
-{
-       struct sk_buff *skb = *pskb;
-       int res, is_vlan_tag = 0, i, do_nat25 = 1;
-       unsigned short vlan_hdr = 0;
-       void *br_port = NULL;
-
-       rcu_read_lock();
-       br_port = rcu_dereference(padapter->pnetdev->rx_handler_data);
-       rcu_read_unlock();
-       spin_lock_bh(&padapter->br_ext_lock);
-       if (!(skb->data[0] & 1) && br_port &&
-           memcmp(skb->data + ETH_ALEN, padapter->br_mac, ETH_ALEN) &&
-           *((__be16 *)(skb->data + ETH_ALEN * 2)) != htons(ETH_P_8021Q) &&
-           *((__be16 *)(skb->data + ETH_ALEN * 2)) == htons(ETH_P_IP) &&
-           !memcmp(padapter->scdb_mac, skb->data + ETH_ALEN, ETH_ALEN) && padapter->scdb_entry) {
-               memcpy(skb->data + ETH_ALEN, GET_MY_HWADDR(padapter), ETH_ALEN);
-               padapter->scdb_entry->ageing_timer = jiffies;
-               spin_unlock_bh(&padapter->br_ext_lock);
-       } else {
-               if (*((__be16 *)(skb->data + ETH_ALEN * 2)) == htons(ETH_P_8021Q)) {
-                       is_vlan_tag = 1;
-                       vlan_hdr = *((unsigned short *)(skb->data + ETH_ALEN * 2 + 2));
-                       for (i = 0; i < 6; i++)
-                               *((unsigned short *)(skb->data + ETH_ALEN * 2 + 2 - i * 2)) = *((unsigned short *)(skb->data + ETH_ALEN * 2 - 2 - i * 2));
-                       skb_pull(skb, 4);
-               }
-               if (!memcmp(skb->data + ETH_ALEN, padapter->br_mac, ETH_ALEN) &&
-                   (*((__be16 *)(skb->data + ETH_ALEN * 2)) == htons(ETH_P_IP)))
-                       memcpy(padapter->br_ip, skb->data + WLAN_ETHHDR_LEN + 12, 4);
-
-               if (*((__be16 *)(skb->data + ETH_ALEN * 2)) == htons(ETH_P_IP)) {
-                       if (memcmp(padapter->scdb_mac, skb->data + ETH_ALEN, ETH_ALEN)) {
-                               padapter->scdb_entry = (struct nat25_network_db_entry *)scdb_findEntry(padapter,
-                                                       skb->data + WLAN_ETHHDR_LEN + 12);
-                               if (padapter->scdb_entry) {
-                                       memcpy(padapter->scdb_mac, skb->data + ETH_ALEN, ETH_ALEN);
-                                       memcpy(padapter->scdb_ip, skb->data + WLAN_ETHHDR_LEN + 12, 4);
-                                       padapter->scdb_entry->ageing_timer = jiffies;
-                                       do_nat25 = 0;
-                               }
-                       } else {
-                               if (padapter->scdb_entry) {
-                                       padapter->scdb_entry->ageing_timer = jiffies;
-                                       do_nat25 = 0;
-                               } else {
-                                       memset(padapter->scdb_mac, 0, ETH_ALEN);
-                                       memset(padapter->scdb_ip, 0, 4);
-                               }
-                       }
-               }
-               spin_unlock_bh(&padapter->br_ext_lock);
-               if (do_nat25) {
-                       if (nat25_db_handle(padapter, skb, NAT25_CHECK) == 0) {
-                               struct sk_buff *newskb;
-
-                               if (is_vlan_tag) {
-                                       skb_push(skb, 4);
-                                       for (i = 0; i < 6; i++)
-                                               *((unsigned short *)(skb->data + i * 2)) = *((unsigned short *)(skb->data + 4 + i * 2));
-                                       *((__be16 *)(skb->data + ETH_ALEN * 2)) = htons(ETH_P_8021Q);
-                                       *((unsigned short *)(skb->data + ETH_ALEN * 2 + 2)) = vlan_hdr;
-                               }
-
-                               newskb = skb_copy(skb, GFP_ATOMIC);
-                               if (!newskb)
-                                       return -1;
-                               dev_kfree_skb_any(skb);
-
-                               *pskb = skb = newskb;
-                               if (is_vlan_tag) {
-                                       vlan_hdr = *((unsigned short *)(skb->data + ETH_ALEN * 2 + 2));
-                                       for (i = 0; i < 6; i++)
-                                               *((unsigned short *)(skb->data + ETH_ALEN * 2 + 2 - i * 2)) = *((unsigned short *)(skb->data + ETH_ALEN * 2 - 2 - i * 2));
-                                       skb_pull(skb, 4);
-                               }
-                       }
-
-                       res = skb_linearize(skb);
-                       if (res < 0)
-                               return -1;
-
-                       res = nat25_db_handle(padapter, skb, NAT25_INSERT);
-                       if (res < 0) {
-                               if (res == -2)
-                                       return -1;
-
-                               return 0;
-                       }
-               }
-
-               memcpy(skb->data + ETH_ALEN, GET_MY_HWADDR(padapter), ETH_ALEN);
-
-               dhcp_flag_bcast(padapter, skb);
-
-               if (is_vlan_tag) {
-                       skb_push(skb, 4);
-                       for (i = 0; i < 6; i++)
-                               *((unsigned short *)(skb->data + i * 2)) = *((unsigned short *)(skb->data + 4 + i * 2));
-                       *((__be16 *)(skb->data + ETH_ALEN * 2)) = htons(ETH_P_8021Q);
-                       *((unsigned short *)(skb->data + ETH_ALEN * 2 + 2)) = vlan_hdr;
-               }
-       }
-
-       /*  check if SA is equal to our MAC */
-       if (memcmp(skb->data + ETH_ALEN, GET_MY_HWADDR(padapter), ETH_ALEN))
-               return -1;
-
-       return 0;
-}
-
-u32 rtw_get_ff_hwaddr(struct xmit_frame *pxmitframe)
-{
-       u32 addr;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-
-       switch (pattrib->qsel) {
-       case 0:
-       case 3:
-               addr = BE_QUEUE_INX;
-               break;
-       case 1:
-       case 2:
-               addr = BK_QUEUE_INX;
-               break;
-       case 4:
-       case 5:
-               addr = VI_QUEUE_INX;
-               break;
-       case 6:
-       case 7:
-               addr = VO_QUEUE_INX;
-               break;
-       case 0x10:
-               addr = BCN_QUEUE_INX;
-               break;
-       case 0x11:/* BC/MC in PS (HIQ) */
-               addr = HIGH_QUEUE_INX;
-               break;
-       case 0x12:
-       default:
-               addr = MGT_QUEUE_INX;
-               break;
-       }
-
-       return addr;
-}
-
-/*
- * The main transmit(tx) entry
- *
- * Return
- *     1       enqueue
- *     0       success, hardware will handle this xmit frame(packet)
- *     <0      fail
- */
-s32 rtw_xmit(struct adapter *padapter, struct sk_buff **ppkt)
-{
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct xmit_frame *pxmitframe = NULL;
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       s32 res;
-
-       pxmitframe = rtw_alloc_xmitframe(pxmitpriv);
-       if (!pxmitframe)
-               return -1;
-
-       if (rcu_access_pointer(padapter->pnetdev->rx_handler_data) &&
-           check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_ADHOC_STATE)) {
-               res = rtw_br_client_tx(padapter, ppkt);
-               if (res == -1) {
-                       rtw_free_xmitframe(pxmitpriv, pxmitframe);
-                       return -1;
-               }
-       }
-
-       res = update_attrib(padapter, *ppkt, &pxmitframe->attrib);
-
-       if (res == _FAIL) {
-               rtw_free_xmitframe(pxmitpriv, pxmitframe);
-               return -1;
-       }
-       pxmitframe->pkt = *ppkt;
-
-       rtw_led_control(padapter, LED_CTL_TX);
-
-       pxmitframe->attrib.qsel = pxmitframe->attrib.priority;
-
-       spin_lock_bh(&pxmitpriv->lock);
-       if (xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe)) {
-               spin_unlock_bh(&pxmitpriv->lock);
-               return 1;
-       }
-       spin_unlock_bh(&pxmitpriv->lock);
-
-       if (!rtl8188eu_hal_xmit(padapter, pxmitframe))
-               return 1;
-
-       return 0;
-}
-
-int xmitframe_enqueue_for_sleeping_sta(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
-       int ret = false;
-       struct sta_info *psta = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       bool bmcst = is_multicast_ether_addr(pattrib->ra);
-
-       if (!check_fwstate(pmlmepriv, WIFI_AP_STATE))
-               return ret;
-
-       if (pattrib->psta)
-               psta = pattrib->psta;
-       else
-               psta = rtw_get_stainfo(pstapriv, pattrib->ra);
-
-       if (!psta)
-               return ret;
-
-       if (pattrib->triggered == 1) {
-               if (bmcst)
-                       pattrib->qsel = 0x11;/* HIQ */
-               return ret;
-       }
-
-       if (bmcst) {
-               spin_lock_bh(&psta->sleep_q.lock);
-
-               if (pstapriv->sta_dz_bitmap) {/* if any one sta is in ps mode */
-                       list_del_init(&pxmitframe->list);
-
-                       list_add_tail(&pxmitframe->list, get_list_head(&psta->sleep_q));
-
-                       psta->sleepq_len++;
-
-                       pstapriv->tim_bitmap |= BIT(0);/*  */
-                       pstapriv->sta_dz_bitmap |= BIT(0);
-                       /* tx bc/mc packets after update bcn */
-                       update_beacon(padapter, _TIM_IE_, NULL, false);
-
-                       ret = true;
-               }
-
-               spin_unlock_bh(&psta->sleep_q.lock);
-
-               return ret;
-       }
-
-       spin_lock_bh(&psta->sleep_q.lock);
-
-       if (psta->state & WIFI_SLEEP_STATE) {
-               u8 wmmps_ac = 0;
-
-               if (pstapriv->sta_dz_bitmap & BIT(psta->aid)) {
-                       list_del_init(&pxmitframe->list);
-
-                       list_add_tail(&pxmitframe->list, get_list_head(&psta->sleep_q));
-
-                       psta->sleepq_len++;
-
-                       switch (pattrib->priority) {
-                       case 1:
-                       case 2:
-                               wmmps_ac = psta->uapsd_bk & BIT(0);
-                               break;
-                       case 4:
-                       case 5:
-                               wmmps_ac = psta->uapsd_vi & BIT(0);
-                               break;
-                       case 6:
-                       case 7:
-                               wmmps_ac = psta->uapsd_vo & BIT(0);
-                               break;
-                       case 0:
-                       case 3:
-                       default:
-                               wmmps_ac = psta->uapsd_be & BIT(0);
-                               break;
-                       }
-
-                       if (wmmps_ac)
-                               psta->sleepq_ac_len++;
-
-                       if (((psta->has_legacy_ac) && (!wmmps_ac)) ||
-                           ((!psta->has_legacy_ac) && (wmmps_ac))) {
-                               pstapriv->tim_bitmap |= BIT(psta->aid);
-
-                               if (psta->sleepq_len == 1) {
-                                       /* update BCN for TIM IE */
-                                       update_beacon(padapter, _TIM_IE_, NULL, false);
-                               }
-                       }
-                       ret = true;
-               }
-       }
-
-       spin_unlock_bh(&psta->sleep_q.lock);
-
-       return ret;
-}
-
-static void dequeue_xmitframes_to_sleeping_queue(struct adapter *padapter, struct sta_info *psta, struct list_head *phead)
-{
-       struct list_head *plist;
-       u8      ac_index;
-       struct tx_servq *ptxservq;
-       struct pkt_attrib       *pattrib;
-       struct xmit_frame       *pxmitframe;
-       struct hw_xmit *phwxmits =  padapter->xmitpriv.hwxmits;
-
-       plist = phead->next;
-
-       while (phead != plist) {
-               pxmitframe = container_of(plist, struct xmit_frame, list);
-
-               plist = plist->next;
-
-               xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe);
-
-               pattrib = &pxmitframe->attrib;
-
-               ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index));
-
-               ptxservq->qcnt--;
-               phwxmits[ac_index].accnt--;
-       }
-}
-
-void stop_sta_xmit(struct adapter *padapter, struct sta_info *psta)
-{
-       struct sta_info *psta_bmc;
-       struct sta_xmit_priv *pstaxmitpriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       pstaxmitpriv = &psta->sta_xmitpriv;
-
-       /* for BC/MC Frames */
-       psta_bmc = rtw_get_bcmc_stainfo(padapter);
-
-       spin_lock_bh(&pxmitpriv->lock);
-
-       psta->state |= WIFI_SLEEP_STATE;
-
-       pstapriv->sta_dz_bitmap |= BIT(psta->aid);
-
-       dequeue_xmitframes_to_sleeping_queue(padapter, psta, &pstaxmitpriv->vo_q.sta_pending);
-       list_del_init(&pstaxmitpriv->vo_q.tx_pending);
-
-       dequeue_xmitframes_to_sleeping_queue(padapter, psta, &pstaxmitpriv->vi_q.sta_pending);
-       list_del_init(&pstaxmitpriv->vi_q.tx_pending);
-
-       dequeue_xmitframes_to_sleeping_queue(padapter, psta, &pstaxmitpriv->be_q.sta_pending);
-       list_del_init(&pstaxmitpriv->be_q.tx_pending);
-
-       dequeue_xmitframes_to_sleeping_queue(padapter, psta, &pstaxmitpriv->bk_q.sta_pending);
-       list_del_init(&pstaxmitpriv->bk_q.tx_pending);
-
-       /* for BC/MC Frames */
-       pstaxmitpriv = &psta_bmc->sta_xmitpriv;
-       dequeue_xmitframes_to_sleeping_queue(padapter, psta_bmc, &pstaxmitpriv->be_q.sta_pending);
-       list_del_init(&pstaxmitpriv->be_q.tx_pending);
-
-       spin_unlock_bh(&pxmitpriv->lock);
-}
-
-void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta)
-{
-       u8 update_mask = 0, wmmps_ac = 0;
-       struct sta_info *psta_bmc;
-       struct list_head *xmitframe_plist, *xmitframe_phead;
-       struct xmit_frame *pxmitframe = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       spin_lock_bh(&psta->sleep_q.lock);
-
-       xmitframe_phead = get_list_head(&psta->sleep_q);
-       xmitframe_plist = xmitframe_phead->next;
-
-       while (xmitframe_phead != xmitframe_plist) {
-               pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list);
-
-               xmitframe_plist = xmitframe_plist->next;
-
-               list_del_init(&pxmitframe->list);
-
-               switch (pxmitframe->attrib.priority) {
-               case 1:
-               case 2:
-                       wmmps_ac = psta->uapsd_bk & BIT(1);
-                       break;
-               case 4:
-               case 5:
-                       wmmps_ac = psta->uapsd_vi & BIT(1);
-                       break;
-               case 6:
-               case 7:
-                       wmmps_ac = psta->uapsd_vo & BIT(1);
-                       break;
-               case 0:
-               case 3:
-               default:
-                       wmmps_ac = psta->uapsd_be & BIT(1);
-                       break;
-               }
-
-               psta->sleepq_len--;
-               if (psta->sleepq_len > 0)
-                       pxmitframe->attrib.mdata = 1;
-               else
-                       pxmitframe->attrib.mdata = 0;
-
-               if (wmmps_ac) {
-                       psta->sleepq_ac_len--;
-                       if (psta->sleepq_ac_len > 0) {
-                               pxmitframe->attrib.mdata = 1;
-                               pxmitframe->attrib.eosp = 0;
-                       } else {
-                               pxmitframe->attrib.mdata = 0;
-                               pxmitframe->attrib.eosp = 1;
-                       }
-               }
-
-               pxmitframe->attrib.triggered = 1;
-
-               spin_unlock_bh(&psta->sleep_q.lock);
-               if (rtl8188eu_hal_xmit(padapter, pxmitframe))
-                       rtw_xmit_complete(padapter, pxmitframe);
-               spin_lock_bh(&psta->sleep_q.lock);
-       }
-
-       if (psta->sleepq_len == 0) {
-               pstapriv->tim_bitmap &= ~BIT(psta->aid);
-
-               update_mask = BIT(0);
-
-               if (psta->state & WIFI_SLEEP_STATE)
-                       psta->state ^= WIFI_SLEEP_STATE;
-
-               if (psta->state & WIFI_STA_ALIVE_CHK_STATE) {
-                       psta->expire_to = pstapriv->expire_to;
-                       psta->state ^= WIFI_STA_ALIVE_CHK_STATE;
-               }
-
-               pstapriv->sta_dz_bitmap &= ~BIT(psta->aid);
-       }
-
-       spin_unlock_bh(&psta->sleep_q.lock);
-
-       /* for BC/MC Frames */
-       psta_bmc = rtw_get_bcmc_stainfo(padapter);
-       if (!psta_bmc)
-               return;
-
-       if ((pstapriv->sta_dz_bitmap & 0xfffe) == 0x0) { /* no any sta in ps mode */
-               spin_lock_bh(&psta_bmc->sleep_q.lock);
-
-               xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
-               xmitframe_plist = xmitframe_phead->next;
-
-               while (xmitframe_phead != xmitframe_plist) {
-                       pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list);
-
-                       xmitframe_plist = xmitframe_plist->next;
-
-                       list_del_init(&pxmitframe->list);
-
-                       psta_bmc->sleepq_len--;
-                       if (psta_bmc->sleepq_len > 0)
-                               pxmitframe->attrib.mdata = 1;
-                       else
-                               pxmitframe->attrib.mdata = 0;
-
-                       pxmitframe->attrib.triggered = 1;
-
-                       spin_unlock_bh(&psta_bmc->sleep_q.lock);
-                       if (rtl8188eu_hal_xmit(padapter, pxmitframe))
-                               rtw_xmit_complete(padapter, pxmitframe);
-                       spin_lock_bh(&psta_bmc->sleep_q.lock);
-               }
-
-               if (psta_bmc->sleepq_len == 0) {
-                       pstapriv->tim_bitmap &= ~BIT(0);
-                       pstapriv->sta_dz_bitmap &= ~BIT(0);
-
-                       update_mask |= BIT(1);
-               }
-
-               spin_unlock_bh(&psta_bmc->sleep_q.lock);
-       }
-
-       if (update_mask)
-               update_beacon(padapter, _TIM_IE_, NULL, false);
-}
-
-void xmit_delivery_enabled_frames(struct adapter *padapter, struct sta_info *psta)
-{
-       u8 wmmps_ac = 0;
-       struct list_head *xmitframe_plist, *xmitframe_phead;
-       struct xmit_frame *pxmitframe = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       spin_lock_bh(&psta->sleep_q.lock);
-
-       xmitframe_phead = get_list_head(&psta->sleep_q);
-       xmitframe_plist = xmitframe_phead->next;
-
-       while (xmitframe_phead != xmitframe_plist) {
-               pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list);
-
-               xmitframe_plist = xmitframe_plist->next;
-
-               switch (pxmitframe->attrib.priority) {
-               case 1:
-               case 2:
-                       wmmps_ac = psta->uapsd_bk & BIT(1);
-                       break;
-               case 4:
-               case 5:
-                       wmmps_ac = psta->uapsd_vi & BIT(1);
-                       break;
-               case 6:
-               case 7:
-                       wmmps_ac = psta->uapsd_vo & BIT(1);
-                       break;
-               case 0:
-               case 3:
-               default:
-                       wmmps_ac = psta->uapsd_be & BIT(1);
-                       break;
-               }
-
-               if (!wmmps_ac)
-                       continue;
-
-               list_del_init(&pxmitframe->list);
-
-               psta->sleepq_len--;
-               psta->sleepq_ac_len--;
-
-               if (psta->sleepq_ac_len > 0) {
-                       pxmitframe->attrib.mdata = 1;
-                       pxmitframe->attrib.eosp = 0;
-               } else {
-                       pxmitframe->attrib.mdata = 0;
-                       pxmitframe->attrib.eosp = 1;
-               }
-
-               pxmitframe->attrib.triggered = 1;
-
-               if (rtl8188eu_hal_xmit(padapter, pxmitframe))
-                       rtw_xmit_complete(padapter, pxmitframe);
-
-               if ((psta->sleepq_ac_len == 0) && (!psta->has_legacy_ac) && (wmmps_ac)) {
-                       pstapriv->tim_bitmap &= ~BIT(psta->aid);
-
-                       /* update BCN for TIM IE */
-                       update_beacon(padapter, _TIM_IE_, NULL, false);
-               }
-       }
-
-       spin_unlock_bh(&psta->sleep_q.lock);
-}
-
-void rtw_sctx_init(struct submit_ctx *sctx, int timeout_ms)
-{
-       sctx->timeout_ms = timeout_ms;
-       sctx->submit_time = jiffies;
-       init_completion(&sctx->done);
-       sctx->status = RTW_SCTX_SUBMITTED;
-}
-
-int rtw_sctx_wait(struct submit_ctx *sctx)
-{
-       int ret = _FAIL;
-       unsigned long expire;
-       int status = 0;
-
-       expire = sctx->timeout_ms ? msecs_to_jiffies(sctx->timeout_ms) : MAX_SCHEDULE_TIMEOUT;
-       if (!wait_for_completion_timeout(&sctx->done, expire))
-               /* timeout, do something?? */
-               status = RTW_SCTX_DONE_TIMEOUT;
-       else
-               status = sctx->status;
-
-       if (status == RTW_SCTX_DONE_SUCCESS)
-               ret = _SUCCESS;
-
-       return ret;
-}
-
-void rtw_sctx_done_err(struct submit_ctx **sctx, int status)
-{
-       if (*sctx) {
-               (*sctx)->status = status;
-               complete(&((*sctx)->done));
-               *sctx = NULL;
-       }
-}
-
-int rtw_ack_tx_wait(struct xmit_priv *pxmitpriv, u32 timeout_ms)
-{
-       struct submit_ctx *pack_tx_ops = &pxmitpriv->ack_tx_ops;
-
-       pack_tx_ops->submit_time = jiffies;
-       pack_tx_ops->timeout_ms = timeout_ms;
-       pack_tx_ops->status = RTW_SCTX_SUBMITTED;
-
-       return rtw_sctx_wait(pack_tx_ops);
-}
-
-void rtw_ack_tx_done(struct xmit_priv *pxmitpriv, int status)
-{
-       struct submit_ctx *pack_tx_ops = &pxmitpriv->ack_tx_ops;
-
-       if (pxmitpriv->ack_tx)
-               rtw_sctx_done_err(&pack_tx_ops, status);
-}
-
-static void rtw_check_xmit_resource(struct adapter *padapter, struct sk_buff *pkt)
-{
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       u16 queue;
-
-       queue = skb_get_queue_mapping(pkt);
-       if (padapter->registrypriv.wifi_spec) {
-               /* No free space for Tx, tx_worker is too slow */
-               if (pxmitpriv->hwxmits[queue].accnt > WMM_XMIT_THRESHOLD)
-                       netif_stop_subqueue(padapter->pnetdev, queue);
-       } else {
-               if (pxmitpriv->free_xmitframe_cnt <= 4) {
-                       if (!netif_tx_queue_stopped(netdev_get_tx_queue(padapter->pnetdev, queue)))
-                               netif_stop_subqueue(padapter->pnetdev, queue);
-               }
-       }
-}
-
-static int rtw_mlcst2unicst(struct adapter *padapter, struct sk_buff *skb)
-{
-       struct  sta_priv *pstapriv = &padapter->stapriv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct list_head *phead, *plist;
-       struct sk_buff *newskb;
-       struct sta_info *psta = NULL;
-       s32 res;
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-       phead = &pstapriv->asoc_list;
-       plist = phead->next;
-
-       /* free sta asoc_queue */
-       while (phead != plist) {
-               psta = container_of(plist, struct sta_info, asoc_list);
-
-               plist = plist->next;
-
-               /* avoid   come from STA1 and send back STA1 */
-               if (!memcmp(psta->hwaddr, &skb->data[6], 6))
-                       continue;
-
-               newskb = skb_copy(skb, GFP_ATOMIC);
-
-               if (newskb) {
-                       memcpy(newskb->data, psta->hwaddr, 6);
-                       res = rtw_xmit(padapter, &newskb);
-                       if (res < 0) {
-                               pxmitpriv->tx_drop++;
-                               dev_kfree_skb_any(newskb);
-                       } else {
-                               pxmitpriv->tx_pkts++;
-                       }
-               } else {
-                       pxmitpriv->tx_drop++;
-
-                       spin_unlock_bh(&pstapriv->asoc_list_lock);
-                       return false;   /*  Caller shall tx this multicast frame via normal way. */
-               }
-       }
-
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-       dev_kfree_skb_any(skb);
-       return true;
-}
-
-netdev_tx_t rtw_xmit_entry(struct sk_buff *pkt, struct net_device *pnetdev)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       s32 res = 0;
-
-       if (!rtw_if_up(padapter))
-               goto drop_packet;
-
-       rtw_check_xmit_resource(padapter, pkt);
-
-       if (!rtw_mc2u_disable && check_fwstate(pmlmepriv, WIFI_AP_STATE) &&
-           (IP_MCAST_MAC(pkt->data) || ICMPV6_MCAST_MAC(pkt->data)) &&
-           (padapter->registrypriv.wifi_spec == 0)) {
-               if (pxmitpriv->free_xmitframe_cnt > (NR_XMITFRAME / 4)) {
-                       res = rtw_mlcst2unicst(padapter, pkt);
-                       if (res)
-                               goto exit;
-               }
-       }
-
-       res = rtw_xmit(padapter, &pkt);
-       if (res < 0)
-               goto drop_packet;
-
-       pxmitpriv->tx_pkts++;
-       goto exit;
-
-drop_packet:
-       pxmitpriv->tx_drop++;
-       dev_kfree_skb_any(pkt);
-
-exit:
-       return NETDEV_TX_OK;
-}
diff --git a/drivers/staging/r8188eu/hal/Hal8188ERateAdaptive.c b/drivers/staging/r8188eu/hal/Hal8188ERateAdaptive.c
deleted file mode 100644 (file)
index 1e04de3..0000000
+++ /dev/null
@@ -1,654 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright (c) Realtek Semiconductor Corp. */
-
-#include "../include/drv_types.h"
-
-static u8 RETRY_PENALTY[PERENTRY][RETRYSIZE + 1] = {
-               {5, 4, 3, 2, 0, 3},      /* 92 , idx = 0 */
-               {6, 5, 4, 3, 0, 4},      /* 86 , idx = 1 */
-               {6, 5, 4, 2, 0, 4},      /* 81 , idx = 2 */
-               {8, 7, 6, 4, 0, 6},      /* 75 , idx = 3 */
-               {10, 9, 8, 6, 0, 8},     /* 71  , idx = 4 */
-               {10, 9, 8, 4, 0, 8},     /* 66  , idx = 5 */
-               {10, 9, 8, 2, 0, 8},     /* 62  , idx = 6 */
-               {10, 9, 8, 0, 0, 8},     /* 59  , idx = 7 */
-               {18, 17, 16, 8, 0, 16},  /* 53 , idx = 8 */
-               {26, 25, 24, 16, 0, 24}, /* 50  , idx = 9 */
-               {34, 33, 32, 24, 0, 32}, /* 47  , idx = 0x0a */
-               {34, 31, 28, 20, 0, 32}, /* 43  , idx = 0x0b */
-               {34, 31, 27, 18, 0, 32}, /* 40 , idx = 0x0c */
-               {34, 31, 26, 16, 0, 32}, /* 37 , idx = 0x0d */
-               {34, 30, 22, 16, 0, 32}, /* 32 , idx = 0x0e */
-               {34, 30, 24, 16, 0, 32}, /* 26 , idx = 0x0f */
-               {49, 46, 40, 16, 0, 48}, /* 20  , idx = 0x10 */
-               {49, 45, 32, 0, 0, 48},  /* 17 , idx = 0x11 */
-               {49, 45, 22, 18, 0, 48}, /* 15  , idx = 0x12 */
-               {49, 40, 24, 16, 0, 48}, /* 12  , idx = 0x13 */
-               {49, 32, 18, 12, 0, 48}, /* 9 , idx = 0x14 */
-               {49, 22, 18, 14, 0, 48}, /* 6 , idx = 0x15 */
-               {49, 16, 16, 0, 0, 48}
-       }; /* 3, idx = 0x16 */
-
-static u8 PT_PENALTY[RETRYSIZE + 1] = {34, 31, 30, 24, 0, 32};
-
-/*  wilson modify */
-static u8 RETRY_PENALTY_IDX[2][RATESIZE] = {
-               {4, 4, 4, 5, 4, 4, 5, 7, 7, 7, 8, 0x0a,        /*  SS>TH */
-               4, 4, 4, 4, 6, 0x0a, 0x0b, 0x0d,
-               5, 5, 7, 7, 8, 0x0b, 0x0d, 0x0f},                          /*  0329 R01 */
-               {0x0a, 0x0a, 0x0b, 0x0c, 0x0a,
-               0x0a, 0x0b, 0x0c, 0x0d, 0x10, 0x13, 0x14,          /*  SS<TH */
-               0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x11, 0x13, 0x15,
-               9, 9, 9, 9, 0x0c, 0x0e, 0x11, 0x13}
-       };
-
-static u8 RETRY_PENALTY_UP_IDX[RATESIZE] = {
-               0x0c, 0x0d, 0x0d, 0x0f, 0x0d, 0x0e,
-               0x0f, 0x0f, 0x10, 0x12, 0x13, 0x14,            /*  SS>TH */
-               0x0f, 0x10, 0x10, 0x12, 0x12, 0x13, 0x14, 0x15,
-               0x11, 0x11, 0x12, 0x13, 0x13, 0x13, 0x14, 0x15};
-
-static u8 RSSI_THRESHOLD[RATESIZE] = {
-               0, 0, 0, 0,
-               0, 0, 0, 0, 0, 0x24, 0x26, 0x2a,
-               0x18, 0x1a, 0x1d, 0x1f, 0x21, 0x27, 0x29, 0x2a,
-               0, 0, 0, 0x1f, 0x23, 0x28, 0x2a, 0x2c};
-
-static u16 N_THRESHOLD_HIGH[RATESIZE] = {
-               4, 4, 8, 16,
-               24, 36, 48, 72, 96, 144, 192, 216,
-               60, 80, 100, 160, 240, 400, 560, 640,
-               300, 320, 480, 720, 1000, 1200, 1600, 2000};
-static u16 N_THRESHOLD_LOW[RATESIZE] = {
-               2, 2, 4, 8,
-               12, 18, 24, 36, 48, 72, 96, 108,
-               30, 40, 50, 80, 120, 200, 280, 320,
-               150, 160, 240, 360, 500, 600, 800, 1000};
-
-static u8 DROPING_NECESSARY[RATESIZE] = {
-               1, 1, 1, 1,
-               1, 2, 3, 4, 5, 6, 7, 8,
-               1, 2, 3, 4, 5, 6, 7, 8,
-               5, 6, 7, 8, 9, 10, 11, 12};
-
-static u8 PendingForRateUpFail[5] = {2, 10, 24, 40, 60};
-static u16 DynamicTxRPTTiming[6] = {
-       0x186a, 0x30d4, 0x493e, 0x61a8, 0x7a12, 0x927c}; /*  200ms-1200ms */
-
-/*  End Rate adaptive parameters */
-
-static void odm_SetTxRPTTiming_8188E(
-               struct odm_dm_struct *dm_odm,
-               struct odm_ra_info *pRaInfo,
-               u8 extend
-       )
-{
-       u8 idx = 0;
-
-       for (idx = 0; idx < 5; idx++)
-               if (DynamicTxRPTTiming[idx] == pRaInfo->RptTime)
-                       break;
-
-       if (extend == 0) { /*  back to default timing */
-               idx = 0;  /* 200ms */
-       } else if (extend == 1) {/*  increase the timing */
-               idx += 1;
-               if (idx > 5)
-                       idx = 5;
-       } else if (extend == 2) {/*  decrease the timing */
-               if (idx != 0)
-                       idx -= 1;
-       }
-       pRaInfo->RptTime = DynamicTxRPTTiming[idx];
-}
-
-static int odm_RateDown_8188E(struct odm_dm_struct *dm_odm, struct odm_ra_info *pRaInfo)
-{
-       u8 RateID, LowestRate, HighestRate;
-       u8 i;
-
-       if (NULL == pRaInfo)
-               return -1;
-       RateID = pRaInfo->PreRate;
-       LowestRate = pRaInfo->LowestRate;
-       HighestRate = pRaInfo->HighestRate;
-
-       if (RateID > HighestRate) {
-               RateID = HighestRate;
-       } else if (pRaInfo->RateSGI) {
-               pRaInfo->RateSGI = 0;
-       } else if (RateID > LowestRate) {
-               if (RateID > 0) {
-                       for (i = RateID - 1; i > LowestRate; i--) {
-                               if (pRaInfo->RAUseRate & BIT(i)) {
-                                       RateID = i;
-                                       goto RateDownFinish;
-                               }
-                       }
-               }
-       } else if (RateID <= LowestRate) {
-               RateID = LowestRate;
-       }
-RateDownFinish:
-       if (pRaInfo->RAWaitingCounter == 1) {
-               pRaInfo->RAWaitingCounter += 1;
-               pRaInfo->RAPendingCounter += 1;
-       } else if (pRaInfo->RAWaitingCounter == 0) {
-               ;
-       } else {
-               pRaInfo->RAWaitingCounter = 0;
-               pRaInfo->RAPendingCounter = 0;
-       }
-
-       if (pRaInfo->RAPendingCounter >= 4)
-               pRaInfo->RAPendingCounter = 4;
-
-       pRaInfo->DecisionRate = RateID;
-       odm_SetTxRPTTiming_8188E(dm_odm, pRaInfo, 2);
-       return 0;
-}
-
-static int odm_RateUp_8188E(
-               struct odm_dm_struct *dm_odm,
-               struct odm_ra_info *pRaInfo
-       )
-{
-       u8 RateID, HighestRate;
-       u8 i;
-
-       if (NULL == pRaInfo)
-               return -1;
-       RateID = pRaInfo->PreRate;
-       HighestRate = pRaInfo->HighestRate;
-       if (pRaInfo->RAWaitingCounter == 1) {
-               pRaInfo->RAWaitingCounter = 0;
-               pRaInfo->RAPendingCounter = 0;
-       } else if (pRaInfo->RAWaitingCounter > 1) {
-               pRaInfo->PreRssiStaRA = pRaInfo->RssiStaRA;
-               goto RateUpfinish;
-       }
-       odm_SetTxRPTTiming_8188E(dm_odm, pRaInfo, 0);
-
-       if (RateID < HighestRate) {
-               for (i = RateID + 1; i <= HighestRate; i++) {
-                       if (pRaInfo->RAUseRate & BIT(i)) {
-                               RateID = i;
-                               goto RateUpfinish;
-                       }
-               }
-       } else if (RateID == HighestRate) {
-               if (pRaInfo->SGIEnable && (pRaInfo->RateSGI != 1))
-                       pRaInfo->RateSGI = 1;
-               else if ((pRaInfo->SGIEnable) != 1)
-                       pRaInfo->RateSGI = 0;
-       } else {
-               RateID = HighestRate;
-       }
-RateUpfinish:
-       if (pRaInfo->RAWaitingCounter == (4 + PendingForRateUpFail[pRaInfo->RAPendingCounter]))
-               pRaInfo->RAWaitingCounter = 0;
-       else
-               pRaInfo->RAWaitingCounter++;
-
-       pRaInfo->DecisionRate = RateID;
-       return 0;
-}
-
-static void odm_ResetRaCounter_8188E(struct odm_ra_info *pRaInfo)
-{
-       u8 RateID;
-
-       RateID = pRaInfo->DecisionRate;
-       pRaInfo->NscUp = (N_THRESHOLD_HIGH[RateID] + N_THRESHOLD_LOW[RateID]) >> 1;
-       pRaInfo->NscDown = (N_THRESHOLD_HIGH[RateID] + N_THRESHOLD_LOW[RateID]) >> 1;
-}
-
-static void odm_RateDecision_8188E(struct odm_dm_struct *dm_odm,
-               struct odm_ra_info *pRaInfo
-       )
-{
-       u8 RateID = 0, RtyPtID = 0, PenaltyID1 = 0, PenaltyID2 = 0;
-       /* u32 pool_retry; */
-       static u8 DynamicTxRPTTimingCounter;
-
-       if (pRaInfo->Active && (pRaInfo->TOTAL > 0)) { /*  STA used and data packet exits */
-               if ((pRaInfo->RssiStaRA < (pRaInfo->PreRssiStaRA - 3)) ||
-                   (pRaInfo->RssiStaRA > (pRaInfo->PreRssiStaRA + 3))) {
-                       pRaInfo->RAWaitingCounter = 0;
-                       pRaInfo->RAPendingCounter = 0;
-               }
-               /*  Start RA decision */
-               if (pRaInfo->PreRate > pRaInfo->HighestRate)
-                       RateID = pRaInfo->HighestRate;
-               else
-                       RateID = pRaInfo->PreRate;
-               if (pRaInfo->RssiStaRA > RSSI_THRESHOLD[RateID])
-                       RtyPtID = 0;
-               else
-                       RtyPtID = 1;
-               PenaltyID1 = RETRY_PENALTY_IDX[RtyPtID][RateID]; /* TODO by page */
-
-               pRaInfo->NscDown += pRaInfo->RTY[0] * RETRY_PENALTY[PenaltyID1][0];
-               pRaInfo->NscDown += pRaInfo->RTY[1] * RETRY_PENALTY[PenaltyID1][1];
-               pRaInfo->NscDown += pRaInfo->RTY[2] * RETRY_PENALTY[PenaltyID1][2];
-               pRaInfo->NscDown += pRaInfo->RTY[3] * RETRY_PENALTY[PenaltyID1][3];
-               pRaInfo->NscDown += pRaInfo->RTY[4] * RETRY_PENALTY[PenaltyID1][4];
-               if (pRaInfo->NscDown > (pRaInfo->TOTAL * RETRY_PENALTY[PenaltyID1][5]))
-                       pRaInfo->NscDown -= pRaInfo->TOTAL * RETRY_PENALTY[PenaltyID1][5];
-               else
-                       pRaInfo->NscDown = 0;
-
-               /*  rate up */
-               PenaltyID2 = RETRY_PENALTY_UP_IDX[RateID];
-               pRaInfo->NscUp += pRaInfo->RTY[0] * RETRY_PENALTY[PenaltyID2][0];
-               pRaInfo->NscUp += pRaInfo->RTY[1] * RETRY_PENALTY[PenaltyID2][1];
-               pRaInfo->NscUp += pRaInfo->RTY[2] * RETRY_PENALTY[PenaltyID2][2];
-               pRaInfo->NscUp += pRaInfo->RTY[3] * RETRY_PENALTY[PenaltyID2][3];
-               pRaInfo->NscUp += pRaInfo->RTY[4] * RETRY_PENALTY[PenaltyID2][4];
-               if (pRaInfo->NscUp > (pRaInfo->TOTAL * RETRY_PENALTY[PenaltyID2][5]))
-                       pRaInfo->NscUp -= pRaInfo->TOTAL * RETRY_PENALTY[PenaltyID2][5];
-               else
-                       pRaInfo->NscUp = 0;
-
-               if ((pRaInfo->NscDown < N_THRESHOLD_LOW[RateID]) ||
-                   (pRaInfo->DROP > DROPING_NECESSARY[RateID]))
-                       odm_RateDown_8188E(dm_odm, pRaInfo);
-               else if (pRaInfo->NscUp > N_THRESHOLD_HIGH[RateID])
-                       odm_RateUp_8188E(dm_odm, pRaInfo);
-
-               if (pRaInfo->DecisionRate > pRaInfo->HighestRate)
-                       pRaInfo->DecisionRate = pRaInfo->HighestRate;
-
-               if ((pRaInfo->DecisionRate) == (pRaInfo->PreRate))
-                       DynamicTxRPTTimingCounter += 1;
-               else
-                       DynamicTxRPTTimingCounter = 0;
-
-               if (DynamicTxRPTTimingCounter >= 4) {
-                       odm_SetTxRPTTiming_8188E(dm_odm, pRaInfo, 1);
-                       DynamicTxRPTTimingCounter = 0;
-               }
-
-               pRaInfo->PreRate = pRaInfo->DecisionRate;  /* YJ, add, 120120 */
-
-               odm_ResetRaCounter_8188E(pRaInfo);
-       }
-}
-
-static int odm_ARFBRefresh_8188E(struct odm_dm_struct *dm_odm, struct odm_ra_info *pRaInfo)
-{  /*  Wilson 2011/10/26 */
-       u32 MaskFromReg;
-       s8 i;
-       int res;
-
-       switch (pRaInfo->RateID) {
-       case RATR_INX_WIRELESS_NGB:
-               pRaInfo->RAUseRate = (pRaInfo->RateMask) & 0x0f8ff015;
-               break;
-       case RATR_INX_WIRELESS_NG:
-               pRaInfo->RAUseRate = (pRaInfo->RateMask) & 0x0f8ff010;
-               break;
-       case RATR_INX_WIRELESS_NB:
-               pRaInfo->RAUseRate = (pRaInfo->RateMask) & 0x0f8ff005;
-               break;
-       case RATR_INX_WIRELESS_N:
-               pRaInfo->RAUseRate = (pRaInfo->RateMask) & 0x0f8ff000;
-               break;
-       case RATR_INX_WIRELESS_GB:
-               pRaInfo->RAUseRate = (pRaInfo->RateMask) & 0x00000ff5;
-               break;
-       case RATR_INX_WIRELESS_G:
-               pRaInfo->RAUseRate = (pRaInfo->RateMask) & 0x00000ff0;
-               break;
-       case RATR_INX_WIRELESS_B:
-               pRaInfo->RAUseRate = (pRaInfo->RateMask) & 0x0000000d;
-               break;
-       case 12:
-               res = rtw_read32(dm_odm->Adapter, REG_ARFR0, &MaskFromReg);
-               if (res)
-                       return res;
-
-               pRaInfo->RAUseRate = (pRaInfo->RateMask) & MaskFromReg;
-               break;
-       case 13:
-               res = rtw_read32(dm_odm->Adapter, REG_ARFR1, &MaskFromReg);
-               if (res)
-                       return res;
-
-               pRaInfo->RAUseRate = (pRaInfo->RateMask) & MaskFromReg;
-               break;
-       case 14:
-               res = rtw_read32(dm_odm->Adapter, REG_ARFR2, &MaskFromReg);
-               if (res)
-                       return res;
-
-               pRaInfo->RAUseRate = (pRaInfo->RateMask) & MaskFromReg;
-               break;
-       case 15:
-               res = rtw_read32(dm_odm->Adapter, REG_ARFR3, &MaskFromReg);
-               if (res)
-                       return res;
-
-               pRaInfo->RAUseRate = (pRaInfo->RateMask) & MaskFromReg;
-               break;
-       default:
-               pRaInfo->RAUseRate = (pRaInfo->RateMask);
-               break;
-       }
-       /*  Highest rate */
-       if (pRaInfo->RAUseRate) {
-               for (i = RATESIZE; i >= 0; i--) {
-                       if ((pRaInfo->RAUseRate) & BIT(i)) {
-                               pRaInfo->HighestRate = i;
-                               break;
-                       }
-               }
-       } else {
-               pRaInfo->HighestRate = 0;
-       }
-       /*  Lowest rate */
-       if (pRaInfo->RAUseRate) {
-               for (i = 0; i < RATESIZE; i++) {
-                       if ((pRaInfo->RAUseRate) & BIT(i)) {
-                               pRaInfo->LowestRate = i;
-                               break;
-                       }
-               }
-       } else {
-               pRaInfo->LowestRate = 0;
-       }
-       if (pRaInfo->HighestRate > 0x13)
-               pRaInfo->PTModeSS = 3;
-       else if (pRaInfo->HighestRate > 0x0b)
-               pRaInfo->PTModeSS = 2;
-       else if (pRaInfo->HighestRate > 0x03)
-               pRaInfo->PTModeSS = 1;
-       else
-               pRaInfo->PTModeSS = 0;
-
-       if (pRaInfo->DecisionRate > pRaInfo->HighestRate)
-               pRaInfo->DecisionRate = pRaInfo->HighestRate;
-
-       return 0;
-}
-
-static void odm_PTTryState_8188E(struct odm_ra_info *pRaInfo)
-{
-       pRaInfo->PTTryState = 0;
-       switch (pRaInfo->PTModeSS) {
-       case 3:
-               if (pRaInfo->DecisionRate >= 0x19)
-                       pRaInfo->PTTryState = 1;
-               break;
-       case 2:
-               if (pRaInfo->DecisionRate >= 0x11)
-                       pRaInfo->PTTryState = 1;
-               break;
-       case 1:
-               if (pRaInfo->DecisionRate >= 0x0a)
-                       pRaInfo->PTTryState = 1;
-               break;
-       case 0:
-               if (pRaInfo->DecisionRate >= 0x03)
-                       pRaInfo->PTTryState = 1;
-               break;
-       default:
-               pRaInfo->PTTryState = 0;
-               break;
-       }
-
-       if (pRaInfo->RssiStaRA < 48) {
-               pRaInfo->PTStage = 0;
-       } else if (pRaInfo->PTTryState == 1) {
-               if ((pRaInfo->PTStopCount >= 10) ||
-                   (pRaInfo->PTPreRssi > pRaInfo->RssiStaRA + 5) ||
-                   (pRaInfo->PTPreRssi < pRaInfo->RssiStaRA - 5) ||
-                   (pRaInfo->DecisionRate != pRaInfo->PTPreRate)) {
-                       if (pRaInfo->PTStage == 0)
-                               pRaInfo->PTStage = 1;
-                       else if (pRaInfo->PTStage == 1)
-                               pRaInfo->PTStage = 3;
-                       else
-                               pRaInfo->PTStage = 5;
-
-                       pRaInfo->PTPreRssi = pRaInfo->RssiStaRA;
-                       pRaInfo->PTStopCount = 0;
-               } else {
-                       pRaInfo->RAstage = 0;
-                       pRaInfo->PTStopCount++;
-               }
-       } else {
-               pRaInfo->PTStage = 0;
-               pRaInfo->RAstage = 0;
-       }
-       pRaInfo->PTPreRate = pRaInfo->DecisionRate;
-}
-
-static void odm_PTDecision_8188E(struct odm_ra_info *pRaInfo)
-{
-       u8 j;
-       u8 temp_stage;
-       u32 numsc;
-       u32 num_total;
-       u8 stage_id;
-
-       numsc  = 0;
-       num_total = pRaInfo->TOTAL * PT_PENALTY[5];
-       for (j = 0; j <= 4; j++) {
-               numsc += pRaInfo->RTY[j] * PT_PENALTY[j];
-               if (numsc > num_total)
-                       break;
-       }
-
-       j = j >> 1;
-       temp_stage = (pRaInfo->PTStage + 1) >> 1;
-       if (temp_stage > j)
-               stage_id = temp_stage - j;
-       else
-               stage_id = 0;
-
-       pRaInfo->PTSmoothFactor = (pRaInfo->PTSmoothFactor >> 1) + (pRaInfo->PTSmoothFactor >> 2) + stage_id * 16 + 2;
-       if (pRaInfo->PTSmoothFactor > 192)
-               pRaInfo->PTSmoothFactor = 192;
-       stage_id = pRaInfo->PTSmoothFactor >> 6;
-       temp_stage = stage_id * 2;
-       if (temp_stage != 0)
-               temp_stage -= 1;
-       if (pRaInfo->DROP > 3)
-               temp_stage = 0;
-       pRaInfo->PTStage = temp_stage;
-}
-
-static void
-odm_RATxRPTTimerSetting(
-               struct odm_dm_struct *dm_odm,
-               u16 minRptTime
-)
-{
-       if (dm_odm->CurrminRptTime != minRptTime) {
-               rtw_rpt_timer_cfg_cmd(dm_odm->Adapter, minRptTime);
-               dm_odm->CurrminRptTime = minRptTime;
-       }
-}
-
-int ODM_RAInfo_Init(struct odm_dm_struct *dm_odm, u8 macid)
-{
-       struct odm_ra_info *pRaInfo = &dm_odm->RAInfo[macid];
-       u8 WirelessMode = 0xFF; /* invalid value */
-       u8 max_rate_idx = 0x13; /* MCS7 */
-       if (dm_odm->pWirelessMode)
-               WirelessMode = *dm_odm->pWirelessMode;
-
-       if (WirelessMode != 0xFF) {
-               if (WirelessMode & ODM_WM_N24G)
-                       max_rate_idx = 0x13;
-               else if (WirelessMode & ODM_WM_G)
-                       max_rate_idx = 0x0b;
-               else if (WirelessMode & ODM_WM_B)
-                       max_rate_idx = 0x03;
-       }
-
-       pRaInfo->DecisionRate = max_rate_idx;
-       pRaInfo->PreRate = max_rate_idx;
-       pRaInfo->HighestRate = max_rate_idx;
-       pRaInfo->LowestRate = 0;
-       pRaInfo->RateID = 0;
-       pRaInfo->RateMask = 0xffffffff;
-       pRaInfo->RssiStaRA = 0;
-       pRaInfo->PreRssiStaRA = 0;
-       pRaInfo->SGIEnable = 0;
-       pRaInfo->RAUseRate = 0xffffffff;
-       pRaInfo->NscDown = (N_THRESHOLD_HIGH[0x13] + N_THRESHOLD_LOW[0x13]) / 2;
-       pRaInfo->NscUp = (N_THRESHOLD_HIGH[0x13] + N_THRESHOLD_LOW[0x13]) / 2;
-       pRaInfo->RateSGI = 0;
-       pRaInfo->Active = 1;    /* Active is not used at present. by page, 110819 */
-       pRaInfo->RptTime = 0x927c;
-       pRaInfo->DROP = 0;
-       pRaInfo->RTY[0] = 0;
-       pRaInfo->RTY[1] = 0;
-       pRaInfo->RTY[2] = 0;
-       pRaInfo->RTY[3] = 0;
-       pRaInfo->RTY[4] = 0;
-       pRaInfo->TOTAL = 0;
-       pRaInfo->RAWaitingCounter = 0;
-       pRaInfo->RAPendingCounter = 0;
-       pRaInfo->PTActive = 1;   /*  Active when this STA is use */
-       pRaInfo->PTTryState = 0;
-       pRaInfo->PTStage = 5; /*  Need to fill into HW_PWR_STATUS */
-       pRaInfo->PTSmoothFactor = 192;
-       pRaInfo->PTStopCount = 0;
-       pRaInfo->PTPreRate = 0;
-       pRaInfo->PTPreRssi = 0;
-       pRaInfo->PTModeSS = 0;
-       pRaInfo->RAstage = 0;
-       return 0;
-}
-
-int ODM_RAInfo_Init_all(struct odm_dm_struct *dm_odm)
-{
-       u8 macid = 0;
-
-       dm_odm->CurrminRptTime = 0;
-
-       for (macid = 0; macid < ODM_ASSOCIATE_ENTRY_NUM; macid++)
-               ODM_RAInfo_Init(dm_odm, macid);
-
-       return 0;
-}
-
-u8 ODM_RA_GetShortGI_8188E(struct odm_dm_struct *dm_odm, u8 macid)
-{
-       if ((NULL == dm_odm) || (macid >= ODM_ASSOCIATE_ENTRY_NUM))
-               return 0;
-       return dm_odm->RAInfo[macid].RateSGI;
-}
-
-u8 ODM_RA_GetDecisionRate_8188E(struct odm_dm_struct *dm_odm, u8 macid)
-{
-       u8 DecisionRate = 0;
-
-       if ((NULL == dm_odm) || (macid >= ODM_ASSOCIATE_ENTRY_NUM))
-               return 0;
-       DecisionRate = (dm_odm->RAInfo[macid].DecisionRate);
-       return DecisionRate;
-}
-
-u8 ODM_RA_GetHwPwrStatus_8188E(struct odm_dm_struct *dm_odm, u8 macid)
-{
-       u8 PTStage = 5;
-
-       if ((NULL == dm_odm) || (macid >= ODM_ASSOCIATE_ENTRY_NUM))
-               return 0;
-       PTStage = (dm_odm->RAInfo[macid].PTStage);
-       return PTStage;
-}
-
-void ODM_RA_UpdateRateInfo_8188E(struct odm_dm_struct *dm_odm, u8 macid, u8 RateID, u32 RateMask, u8 SGIEnable)
-{
-       struct odm_ra_info *pRaInfo = NULL;
-
-       if ((NULL == dm_odm) || (macid >= ODM_ASSOCIATE_ENTRY_NUM))
-               return;
-
-       pRaInfo = &dm_odm->RAInfo[macid];
-       pRaInfo->RateID = RateID;
-       pRaInfo->RateMask = RateMask;
-       pRaInfo->SGIEnable = SGIEnable;
-       odm_ARFBRefresh_8188E(dm_odm, pRaInfo);
-}
-
-void ODM_RA_SetRSSI_8188E(struct odm_dm_struct *dm_odm, u8 macid, u8 Rssi)
-{
-       struct odm_ra_info *pRaInfo = NULL;
-
-       if ((NULL == dm_odm) || (macid >= ODM_ASSOCIATE_ENTRY_NUM))
-               return;
-
-       pRaInfo = &dm_odm->RAInfo[macid];
-       pRaInfo->RssiStaRA = Rssi;
-}
-
-void ODM_RA_Set_TxRPT_Time(struct odm_dm_struct *dm_odm, u16 minRptTime)
-{
-       rtw_write16(dm_odm->Adapter, REG_TX_RPT_TIME, minRptTime);
-}
-
-void ODM_RA_TxRPT2Handle_8188E(struct odm_dm_struct *dm_odm, u8 *TxRPT_Buf, u16 TxRPT_Len, u32 macid_entry0, u32 macid_entry1)
-{
-       struct odm_ra_info *pRAInfo = NULL;
-       u8 MacId = 0;
-       u8 *pBuffer = NULL;
-       u32 valid = 0, ItemNum = 0;
-       u16 minRptTime = 0x927c;
-
-       ItemNum = TxRPT_Len >> 3;
-       pBuffer = TxRPT_Buf;
-
-       do {
-               if (MacId >= ODM_ASSOCIATE_ENTRY_NUM)
-                       valid = 0;
-               else if (MacId >= 32)
-                       valid = (1 << (MacId - 32)) & macid_entry1;
-               else
-                       valid = (1 << MacId) & macid_entry0;
-
-               pRAInfo = &dm_odm->RAInfo[MacId];
-               if (valid) {
-                       pRAInfo->RTY[0] = le16_to_cpup((__le16 *)pBuffer);
-                       pRAInfo->RTY[1] = pBuffer[2];
-                       pRAInfo->RTY[2] = pBuffer[3];
-                       pRAInfo->RTY[3] = pBuffer[4];
-                       pRAInfo->RTY[4] = pBuffer[5];
-                       pRAInfo->DROP = pBuffer[6];
-                       pRAInfo->TOTAL = pRAInfo->RTY[0] + pRAInfo->RTY[1] +
-                                        pRAInfo->RTY[2] + pRAInfo->RTY[3] +
-                                        pRAInfo->RTY[4] + pRAInfo->DROP;
-                       if (pRAInfo->TOTAL != 0) {
-                               if (pRAInfo->PTActive) {
-                                       if (pRAInfo->RAstage < 5)
-                                               odm_RateDecision_8188E(dm_odm, pRAInfo);
-                                       else if (pRAInfo->RAstage == 5) /*  Power training try state */
-                                               odm_PTTryState_8188E(pRAInfo);
-                                       else /*  RAstage == 6 */
-                                               odm_PTDecision_8188E(pRAInfo);
-
-                                       /*  Stage_RA counter */
-                                       if (pRAInfo->RAstage <= 5)
-                                               pRAInfo->RAstage++;
-                                       else
-                                               pRAInfo->RAstage = 0;
-                               } else {
-                                       odm_RateDecision_8188E(dm_odm, pRAInfo);
-                               }
-                       }
-               }
-
-               if (minRptTime > pRAInfo->RptTime)
-                       minRptTime = pRAInfo->RptTime;
-
-               pBuffer += TX_RPT2_ITEM_SIZE;
-               MacId++;
-       } while (MacId < ItemNum);
-
-       odm_RATxRPTTimerSetting(dm_odm, minRptTime);
-}
diff --git a/drivers/staging/r8188eu/hal/HalHWImg8188E_BB.c b/drivers/staging/r8188eu/hal/HalHWImg8188E_BB.c
deleted file mode 100644 (file)
index 23b7205..0000000
+++ /dev/null
@@ -1,733 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/rtw_iol.h"
-
-#define read_next_pair(array, v1, v2, i)               \
-        do {                                           \
-                i += 2;                                \
-                v1 = array[i];                         \
-                v2 = array[i + 1];                     \
-        } while (0)
-
-static bool CheckCondition(const u32  condition, const u32  hex)
-{
-       u32 _interface = (hex & 0x0000FF00) >> 8;
-       u32 _platform  = (hex & 0x00FF0000) >> 16;
-       u32 cond = condition;
-
-       if (condition == 0xCDCDCDCD)
-               return true;
-
-       cond = condition & 0x0000FF00;
-       cond = cond >> 8;
-       if ((_interface & cond) == 0 && cond != 0x07)
-               return false;
-
-       cond = condition & 0x00FF0000;
-       cond = cond >> 16;
-       if ((_platform & cond) == 0 && cond != 0x0F)
-               return false;
-       return true;
-}
-
-/******************************************************************************
-*                           AGC_TAB_1T.TXT
-******************************************************************************/
-
-static u32 array_agc_tab_1t_8188e[] = {
-               0xC78, 0xFB000001,
-               0xC78, 0xFB010001,
-               0xC78, 0xFB020001,
-               0xC78, 0xFB030001,
-               0xC78, 0xFB040001,
-               0xC78, 0xFB050001,
-               0xC78, 0xFA060001,
-               0xC78, 0xF9070001,
-               0xC78, 0xF8080001,
-               0xC78, 0xF7090001,
-               0xC78, 0xF60A0001,
-               0xC78, 0xF50B0001,
-               0xC78, 0xF40C0001,
-               0xC78, 0xF30D0001,
-               0xC78, 0xF20E0001,
-               0xC78, 0xF10F0001,
-               0xC78, 0xF0100001,
-               0xC78, 0xEF110001,
-               0xC78, 0xEE120001,
-               0xC78, 0xED130001,
-               0xC78, 0xEC140001,
-               0xC78, 0xEB150001,
-               0xC78, 0xEA160001,
-               0xC78, 0xE9170001,
-               0xC78, 0xE8180001,
-               0xC78, 0xE7190001,
-               0xC78, 0xE61A0001,
-               0xC78, 0xE51B0001,
-               0xC78, 0xE41C0001,
-               0xC78, 0xE31D0001,
-               0xC78, 0xE21E0001,
-               0xC78, 0xE11F0001,
-               0xC78, 0x8A200001,
-               0xC78, 0x89210001,
-               0xC78, 0x88220001,
-               0xC78, 0x87230001,
-               0xC78, 0x86240001,
-               0xC78, 0x85250001,
-               0xC78, 0x84260001,
-               0xC78, 0x83270001,
-               0xC78, 0x82280001,
-               0xC78, 0x6B290001,
-               0xC78, 0x6A2A0001,
-               0xC78, 0x692B0001,
-               0xC78, 0x682C0001,
-               0xC78, 0x672D0001,
-               0xC78, 0x662E0001,
-               0xC78, 0x652F0001,
-               0xC78, 0x64300001,
-               0xC78, 0x63310001,
-               0xC78, 0x62320001,
-               0xC78, 0x61330001,
-               0xC78, 0x46340001,
-               0xC78, 0x45350001,
-               0xC78, 0x44360001,
-               0xC78, 0x43370001,
-               0xC78, 0x42380001,
-               0xC78, 0x41390001,
-               0xC78, 0x403A0001,
-               0xC78, 0x403B0001,
-               0xC78, 0x403C0001,
-               0xC78, 0x403D0001,
-               0xC78, 0x403E0001,
-               0xC78, 0x403F0001,
-               0xC78, 0xFB400001,
-               0xC78, 0xFB410001,
-               0xC78, 0xFB420001,
-               0xC78, 0xFB430001,
-               0xC78, 0xFB440001,
-               0xC78, 0xFB450001,
-               0xC78, 0xFB460001,
-               0xC78, 0xFB470001,
-               0xC78, 0xFB480001,
-               0xC78, 0xFA490001,
-               0xC78, 0xF94A0001,
-               0xC78, 0xF84B0001,
-               0xC78, 0xF74C0001,
-               0xC78, 0xF64D0001,
-               0xC78, 0xF54E0001,
-               0xC78, 0xF44F0001,
-               0xC78, 0xF3500001,
-               0xC78, 0xF2510001,
-               0xC78, 0xF1520001,
-               0xC78, 0xF0530001,
-               0xC78, 0xEF540001,
-               0xC78, 0xEE550001,
-               0xC78, 0xED560001,
-               0xC78, 0xEC570001,
-               0xC78, 0xEB580001,
-               0xC78, 0xEA590001,
-               0xC78, 0xE95A0001,
-               0xC78, 0xE85B0001,
-               0xC78, 0xE75C0001,
-               0xC78, 0xE65D0001,
-               0xC78, 0xE55E0001,
-               0xC78, 0xE45F0001,
-               0xC78, 0xE3600001,
-               0xC78, 0xE2610001,
-               0xC78, 0xC3620001,
-               0xC78, 0xC2630001,
-               0xC78, 0xC1640001,
-               0xC78, 0x8B650001,
-               0xC78, 0x8A660001,
-               0xC78, 0x89670001,
-               0xC78, 0x88680001,
-               0xC78, 0x87690001,
-               0xC78, 0x866A0001,
-               0xC78, 0x856B0001,
-               0xC78, 0x846C0001,
-               0xC78, 0x676D0001,
-               0xC78, 0x666E0001,
-               0xC78, 0x656F0001,
-               0xC78, 0x64700001,
-               0xC78, 0x63710001,
-               0xC78, 0x62720001,
-               0xC78, 0x61730001,
-               0xC78, 0x60740001,
-               0xC78, 0x46750001,
-               0xC78, 0x45760001,
-               0xC78, 0x44770001,
-               0xC78, 0x43780001,
-               0xC78, 0x42790001,
-               0xC78, 0x417A0001,
-               0xC78, 0x407B0001,
-               0xC78, 0x407C0001,
-               0xC78, 0x407D0001,
-               0xC78, 0x407E0001,
-               0xC78, 0x407F0001,
-};
-
-static void odm_ConfigBB_AGC_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Bitmask, u32 Data)
-{
-       rtl8188e_PHY_SetBBReg(pDM_Odm->Adapter, Addr, Bitmask, Data);
-       /*  Add 1us delay between BB/RF register setting. */
-       udelay(1);
-}
-
-int ODM_ReadAndConfig_AGC_TAB_1T_8188E(struct odm_dm_struct *dm_odm)
-{
-       u32     hex         = 0;
-       u32     i           = 0;
-       u32     arraylen    = ARRAY_SIZE(array_agc_tab_1t_8188e);
-       u32    *array       = array_agc_tab_1t_8188e;
-       bool            biol = false;
-       struct adapter *adapter =  dm_odm->Adapter;
-       struct xmit_frame *pxmit_frame = NULL;
-       u8 bndy_cnt = 1;
-
-       hex += ODM_ITRF_USB << 8;
-       hex += ODM_CE << 16;
-       hex += 0xFF000000;
-       biol = rtw_IOL_applied(adapter);
-
-       if (biol) {
-               pxmit_frame = rtw_IOL_accquire_xmit_frame(adapter);
-               if (!pxmit_frame) {
-                       pr_info("rtw_IOL_accquire_xmit_frame failed\n");
-                       return -ENOMEM;
-               }
-       }
-
-       for (i = 0; i < arraylen; i += 2) {
-               u32 v1 = array[i];
-               u32 v2 = array[i + 1];
-
-               /*  This (offset, data) pair meets the condition. */
-               if (v1 < 0xCDCDCDCD) {
-                       if (biol) {
-                               if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
-                                       bndy_cnt++;
-                               rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
-                       } else {
-                               odm_ConfigBB_AGC_8188E(dm_odm, v1, bMaskDWord, v2);
-                       }
-                       continue;
-               } else {
-                       /*  This line is the start line of branch. */
-                       if (!CheckCondition(array[i], hex)) {
-                               /*  Discard the following (offset, data) pairs. */
-                               read_next_pair(array, v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < arraylen - 2)
-                                       read_next_pair(array, v1, v2, i);
-                               i -= 2; /*  prevent from for-loop += 2 */
-                       } else { /*  Configure matched pairs and skip to end of if-else. */
-                               read_next_pair(array, v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < arraylen - 2) {
-                                       if (biol) {
-                                               if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
-                                                       bndy_cnt++;
-                                               rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
-                                       } else {
-                                               odm_ConfigBB_AGC_8188E(dm_odm, v1, bMaskDWord, v2);
-                                       }
-                                       read_next_pair(array, v1, v2, i);
-                               }
-
-                               while (v2 != 0xDEAD && i < arraylen - 2)
-                                       read_next_pair(array, v1, v2, i);
-                       }
-               }
-       }
-       if (biol) {
-               if (!rtl8188e_IOL_exec_cmds_sync(dm_odm->Adapter, pxmit_frame, 1000, bndy_cnt)) {
-                       printk("~~~ %s IOL_exec_cmds Failed !!!\n", __func__);
-                       return -1;
-               }
-       }
-       return 0;
-}
-
-/******************************************************************************
-*                           PHY_REG_1T.TXT
-******************************************************************************/
-
-static u32 array_phy_reg_1t_8188e[] = {
-               0x800, 0x80040000,
-               0x804, 0x00000003,
-               0x808, 0x0000FC00,
-               0x80C, 0x0000000A,
-               0x810, 0x10001331,
-               0x814, 0x020C3D10,
-               0x818, 0x02200385,
-               0x81C, 0x00000000,
-               0x820, 0x01000100,
-               0x824, 0x00390204,
-               0x828, 0x00000000,
-               0x82C, 0x00000000,
-               0x830, 0x00000000,
-               0x834, 0x00000000,
-               0x838, 0x00000000,
-               0x83C, 0x00000000,
-               0x840, 0x00010000,
-               0x844, 0x00000000,
-               0x848, 0x00000000,
-               0x84C, 0x00000000,
-               0x850, 0x00000000,
-               0x854, 0x00000000,
-               0x858, 0x569A11A9,
-               0x85C, 0x01000014,
-               0x860, 0x66F60110,
-               0x864, 0x061F0649,
-               0x868, 0x00000000,
-               0x86C, 0x27272700,
-               0x870, 0x07000760,
-               0x874, 0x25004000,
-               0x878, 0x00000808,
-               0x87C, 0x00000000,
-               0x880, 0xB0000C1C,
-               0x884, 0x00000001,
-               0x888, 0x00000000,
-               0x88C, 0xCCC000C0,
-               0x890, 0x00000800,
-               0x894, 0xFFFFFFFE,
-               0x898, 0x40302010,
-               0x89C, 0x00706050,
-               0x900, 0x00000000,
-               0x904, 0x00000023,
-               0x908, 0x00000000,
-               0x90C, 0x81121111,
-               0x910, 0x00000002,
-               0x914, 0x00000201,
-               0xA00, 0x00D047C8,
-               0xA04, 0x80FF000C,
-               0xA08, 0x8C838300,
-               0xA0C, 0x2E7F120F,
-               0xA10, 0x9500BB78,
-               0xA14, 0x1114D028,
-               0xA18, 0x00881117,
-               0xA1C, 0x89140F00,
-               0xA20, 0x1A1B0000,
-               0xA24, 0x090E1317,
-               0xA28, 0x00000204,
-               0xA2C, 0x00D30000,
-               0xA70, 0x101FBF00,
-               0xA74, 0x00000007,
-               0xA78, 0x00000900,
-               0xA7C, 0x225B0606,
-               0xA80, 0x218075B1,
-               0xB2C, 0x80000000,
-               0xC00, 0x48071D40,
-               0xC04, 0x03A05611,
-               0xC08, 0x000000E4,
-               0xC0C, 0x6C6C6C6C,
-               0xC10, 0x08800000,
-               0xC14, 0x40000100,
-               0xC18, 0x08800000,
-               0xC1C, 0x40000100,
-               0xC20, 0x00000000,
-               0xC24, 0x00000000,
-               0xC28, 0x00000000,
-               0xC2C, 0x00000000,
-               0xC30, 0x69E9AC47,
-               0xC34, 0x469652AF,
-               0xC38, 0x49795994,
-               0xC3C, 0x0A97971C,
-               0xC40, 0x1F7C403F,
-               0xC44, 0x000100B7,
-               0xC48, 0xEC020107,
-               0xC4C, 0x007F037F,
-               0xC50, 0x69553420,
-               0xC54, 0x43BC0094,
-               0xC58, 0x00013169,
-               0xC5C, 0x00250492,
-               0xC60, 0x00000000,
-               0xC64, 0x7112848B,
-               0xC68, 0x47C00BFF,
-               0xC6C, 0x00000036,
-               0xC70, 0x2C7F000D,
-               0xC74, 0x020610DB,
-               0xC78, 0x0000001F,
-               0xC7C, 0x00B91612,
-               0xC80, 0x390000E4,
-               0xC84, 0x20F60000,
-               0xC88, 0x40000100,
-               0xC8C, 0x20200000,
-               0xC90, 0x00091521,
-               0xC94, 0x00000000,
-               0xC98, 0x00121820,
-               0xC9C, 0x00007F7F,
-               0xCA0, 0x00000000,
-               0xCA4, 0x000300A0,
-               0xCA8, 0x00000000,
-               0xCAC, 0x00000000,
-               0xCB0, 0x00000000,
-               0xCB4, 0x00000000,
-               0xCB8, 0x00000000,
-               0xCBC, 0x28000000,
-               0xCC0, 0x00000000,
-               0xCC4, 0x00000000,
-               0xCC8, 0x00000000,
-               0xCCC, 0x00000000,
-               0xCD0, 0x00000000,
-               0xCD4, 0x00000000,
-               0xCD8, 0x64B22427,
-               0xCDC, 0x00766932,
-               0xCE0, 0x00222222,
-               0xCE4, 0x00000000,
-               0xCE8, 0x37644302,
-               0xCEC, 0x2F97D40C,
-               0xD00, 0x00000740,
-               0xD04, 0x00020401,
-               0xD08, 0x0000907F,
-               0xD0C, 0x20010201,
-               0xD10, 0xA0633333,
-               0xD14, 0x3333BC43,
-               0xD18, 0x7A8F5B6F,
-               0xD2C, 0xCC979975,
-               0xD30, 0x00000000,
-               0xD34, 0x80608000,
-               0xD38, 0x00000000,
-               0xD3C, 0x00127353,
-               0xD40, 0x00000000,
-               0xD44, 0x00000000,
-               0xD48, 0x00000000,
-               0xD4C, 0x00000000,
-               0xD50, 0x6437140A,
-               0xD54, 0x00000000,
-               0xD58, 0x00000282,
-               0xD5C, 0x30032064,
-               0xD60, 0x4653DE68,
-               0xD64, 0x04518A3C,
-               0xD68, 0x00002101,
-               0xD6C, 0x2A201C16,
-               0xD70, 0x1812362E,
-               0xD74, 0x322C2220,
-               0xD78, 0x000E3C24,
-               0xE00, 0x2D2D2D2D,
-               0xE04, 0x2D2D2D2D,
-               0xE08, 0x0390272D,
-               0xE10, 0x2D2D2D2D,
-               0xE14, 0x2D2D2D2D,
-               0xE18, 0x2D2D2D2D,
-               0xE1C, 0x2D2D2D2D,
-               0xE28, 0x00000000,
-               0xE30, 0x1000DC1F,
-               0xE34, 0x10008C1F,
-               0xE38, 0x02140102,
-               0xE3C, 0x681604C2,
-               0xE40, 0x01007C00,
-               0xE44, 0x01004800,
-               0xE48, 0xFB000000,
-               0xE4C, 0x000028D1,
-               0xE50, 0x1000DC1F,
-               0xE54, 0x10008C1F,
-               0xE58, 0x02140102,
-               0xE5C, 0x28160D05,
-               0xE60, 0x00000008,
-               0xE68, 0x001B25A4,
-               0xE6C, 0x00C00014,
-               0xE70, 0x00C00014,
-               0xE74, 0x01000014,
-               0xE78, 0x01000014,
-               0xE7C, 0x01000014,
-               0xE80, 0x01000014,
-               0xE84, 0x00C00014,
-               0xE88, 0x01000014,
-               0xE8C, 0x00C00014,
-               0xED0, 0x00C00014,
-               0xED4, 0x00C00014,
-               0xED8, 0x00C00014,
-               0xEDC, 0x00000014,
-               0xEE0, 0x00000014,
-               0xEEC, 0x01C00014,
-               0xF14, 0x00000003,
-               0xF4C, 0x00000000,
-               0xF00, 0x00000300,
-};
-
-static void odm_ConfigBB_PHY_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Bitmask, u32 Data)
-{
-       if (Addr == 0xfe) {
-               msleep(50);
-       } else if (Addr == 0xfd) {
-               mdelay(5);
-       } else if (Addr == 0xfc) {
-               mdelay(1);
-       } else if (Addr == 0xfb) {
-               udelay(50);
-       } else if (Addr == 0xfa) {
-               udelay(5);
-       } else if (Addr == 0xf9) {
-               udelay(1);
-       } else {
-               if (Addr == 0xa24)
-                       pDM_Odm->RFCalibrateInfo.RegA24 = Data;
-               rtl8188e_PHY_SetBBReg(pDM_Odm->Adapter, Addr, Bitmask, Data);
-
-               /*  Add 1us delay between BB/RF register setting. */
-               udelay(1);
-       }
-}
-
-int ODM_ReadAndConfig_PHY_REG_1T_8188E(struct odm_dm_struct *dm_odm)
-{
-       u32     hex         = 0;
-       u32     i           = 0;
-       u32     arraylen    = ARRAY_SIZE(array_phy_reg_1t_8188e);
-       u32    *array       = array_phy_reg_1t_8188e;
-       bool    biol = false;
-       struct adapter *adapter =  dm_odm->Adapter;
-       struct xmit_frame *pxmit_frame = NULL;
-       u8 bndy_cnt = 1;
-       hex += ODM_ITRF_USB << 8;
-       hex += ODM_CE << 16;
-       hex += 0xFF000000;
-       biol = rtw_IOL_applied(adapter);
-
-       if (biol) {
-               pxmit_frame = rtw_IOL_accquire_xmit_frame(adapter);
-               if (!pxmit_frame) {
-                       pr_info("rtw_IOL_accquire_xmit_frame failed\n");
-                       return -ENOMEM;
-               }
-       }
-
-       for (i = 0; i < arraylen; i += 2) {
-               u32 v1 = array[i];
-               u32 v2 = array[i + 1];
-
-               /*  This (offset, data) pair meets the condition. */
-               if (v1 < 0xCDCDCDCD) {
-                       if (biol) {
-                               if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
-                                       bndy_cnt++;
-                               if (v1 == 0xfe) {
-                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 50);
-                               } else if (v1 == 0xfd) {
-                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 5);
-                               } else if (v1 == 0xfc) {
-                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 1);
-                               } else if (v1 == 0xfb) {
-                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 50);
-                               } else if (v1 == 0xfa) {
-                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 5);
-                               } else if (v1 == 0xf9) {
-                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 1);
-                               } else {
-                                       if (v1 == 0xa24)
-                                               dm_odm->RFCalibrateInfo.RegA24 = v2;
-                                       rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
-                               }
-                       } else {
-                               odm_ConfigBB_PHY_8188E(dm_odm, v1, bMaskDWord, v2);
-                       }
-                       continue;
-               } else { /*  This line is the start line of branch. */
-                       if (!CheckCondition(array[i], hex)) {
-                               /*  Discard the following (offset, data) pairs. */
-                               read_next_pair(array, v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < arraylen - 2)
-                                       read_next_pair(array, v1, v2, i);
-                               i -= 2; /*  prevent from for-loop += 2 */
-                       } else { /*  Configure matched pairs and skip to end of if-else. */
-                               read_next_pair(array, v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < arraylen - 2) {
-                                       if (biol) {
-                                               if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
-                                                       bndy_cnt++;
-                                               if (v1 == 0xfe) {
-                                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 50);
-                                               } else if (v1 == 0xfd) {
-                                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 5);
-                                               } else if (v1 == 0xfc) {
-                                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 1);
-                                               } else if (v1 == 0xfb) {
-                                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 50);
-                                               } else if (v1 == 0xfa) {
-                                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 5);
-                                               } else if (v1 == 0xf9) {
-                                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 1);
-                                               } else {
-                                                       if (v1 == 0xa24)
-                                                               dm_odm->RFCalibrateInfo.RegA24 = v2;
-
-                                                       rtw_IOL_append_WD_cmd(pxmit_frame, (u16)v1, v2, bMaskDWord);
-                                               }
-                                       } else {
-                                               odm_ConfigBB_PHY_8188E(dm_odm, v1, bMaskDWord, v2);
-                                       }
-                                       read_next_pair(array, v1, v2, i);
-                               }
-
-                               while (v2 != 0xDEAD && i < arraylen - 2)
-                                       read_next_pair(array, v1, v2, i);
-                       }
-               }
-       }
-       if (biol) {
-               if (!rtl8188e_IOL_exec_cmds_sync(dm_odm->Adapter, pxmit_frame, 1000, bndy_cnt)) {
-                       pr_info("~~~ IOL Config %s Failed !!!\n", __func__);
-                       return -1;
-               }
-       }
-       return 0;
-}
-
-/******************************************************************************
-*                           PHY_REG_PG.TXT
-******************************************************************************/
-
-static u32 array_phy_reg_pg_8188e[] = {
-               0xE00, 0xFFFFFFFF, 0x06070809,
-               0xE04, 0xFFFFFFFF, 0x02020405,
-               0xE08, 0x0000FF00, 0x00000006,
-               0x86C, 0xFFFFFF00, 0x00020400,
-               0xE10, 0xFFFFFFFF, 0x08090A0B,
-               0xE14, 0xFFFFFFFF, 0x01030607,
-               0xE18, 0xFFFFFFFF, 0x08090A0B,
-               0xE1C, 0xFFFFFFFF, 0x01030607,
-               0xE00, 0xFFFFFFFF, 0x00000000,
-               0xE04, 0xFFFFFFFF, 0x00000000,
-               0xE08, 0x0000FF00, 0x00000000,
-               0x86C, 0xFFFFFF00, 0x00000000,
-               0xE10, 0xFFFFFFFF, 0x00000000,
-               0xE14, 0xFFFFFFFF, 0x00000000,
-               0xE18, 0xFFFFFFFF, 0x00000000,
-               0xE1C, 0xFFFFFFFF, 0x00000000,
-               0xE00, 0xFFFFFFFF, 0x02020202,
-               0xE04, 0xFFFFFFFF, 0x00020202,
-               0xE08, 0x0000FF00, 0x00000000,
-               0x86C, 0xFFFFFF00, 0x00000000,
-               0xE10, 0xFFFFFFFF, 0x04040404,
-               0xE14, 0xFFFFFFFF, 0x00020404,
-               0xE18, 0xFFFFFFFF, 0x00000000,
-               0xE1C, 0xFFFFFFFF, 0x00000000,
-               0xE00, 0xFFFFFFFF, 0x02020202,
-               0xE04, 0xFFFFFFFF, 0x00020202,
-               0xE08, 0x0000FF00, 0x00000000,
-               0x86C, 0xFFFFFF00, 0x00000000,
-               0xE10, 0xFFFFFFFF, 0x04040404,
-               0xE14, 0xFFFFFFFF, 0x00020404,
-               0xE18, 0xFFFFFFFF, 0x00000000,
-               0xE1C, 0xFFFFFFFF, 0x00000000,
-               0xE00, 0xFFFFFFFF, 0x00000000,
-               0xE04, 0xFFFFFFFF, 0x00000000,
-               0xE08, 0x0000FF00, 0x00000000,
-               0x86C, 0xFFFFFF00, 0x00000000,
-               0xE10, 0xFFFFFFFF, 0x00000000,
-               0xE14, 0xFFFFFFFF, 0x00000000,
-               0xE18, 0xFFFFFFFF, 0x00000000,
-               0xE1C, 0xFFFFFFFF, 0x00000000,
-               0xE00, 0xFFFFFFFF, 0x02020202,
-               0xE04, 0xFFFFFFFF, 0x00020202,
-               0xE08, 0x0000FF00, 0x00000000,
-               0x86C, 0xFFFFFF00, 0x00000000,
-               0xE10, 0xFFFFFFFF, 0x04040404,
-               0xE14, 0xFFFFFFFF, 0x00020404,
-               0xE18, 0xFFFFFFFF, 0x00000000,
-               0xE1C, 0xFFFFFFFF, 0x00000000,
-               0xE00, 0xFFFFFFFF, 0x00000000,
-               0xE04, 0xFFFFFFFF, 0x00000000,
-               0xE08, 0x0000FF00, 0x00000000,
-               0x86C, 0xFFFFFF00, 0x00000000,
-               0xE10, 0xFFFFFFFF, 0x00000000,
-               0xE14, 0xFFFFFFFF, 0x00000000,
-               0xE18, 0xFFFFFFFF, 0x00000000,
-               0xE1C, 0xFFFFFFFF, 0x00000000,
-               0xE00, 0xFFFFFFFF, 0x00000000,
-               0xE04, 0xFFFFFFFF, 0x00000000,
-               0xE08, 0x0000FF00, 0x00000000,
-               0x86C, 0xFFFFFF00, 0x00000000,
-               0xE10, 0xFFFFFFFF, 0x00000000,
-               0xE14, 0xFFFFFFFF, 0x00000000,
-               0xE18, 0xFFFFFFFF, 0x00000000,
-               0xE1C, 0xFFFFFFFF, 0x00000000,
-               0xE00, 0xFFFFFFFF, 0x00000000,
-               0xE04, 0xFFFFFFFF, 0x00000000,
-               0xE08, 0x0000FF00, 0x00000000,
-               0x86C, 0xFFFFFF00, 0x00000000,
-               0xE10, 0xFFFFFFFF, 0x00000000,
-               0xE14, 0xFFFFFFFF, 0x00000000,
-               0xE18, 0xFFFFFFFF, 0x00000000,
-               0xE1C, 0xFFFFFFFF, 0x00000000,
-               0xE00, 0xFFFFFFFF, 0x00000000,
-               0xE04, 0xFFFFFFFF, 0x00000000,
-               0xE08, 0x0000FF00, 0x00000000,
-               0x86C, 0xFFFFFF00, 0x00000000,
-               0xE10, 0xFFFFFFFF, 0x00000000,
-               0xE14, 0xFFFFFFFF, 0x00000000,
-               0xE18, 0xFFFFFFFF, 0x00000000,
-               0xE1C, 0xFFFFFFFF, 0x00000000,
-               0xE00, 0xFFFFFFFF, 0x00000000,
-               0xE04, 0xFFFFFFFF, 0x00000000,
-               0xE08, 0x0000FF00, 0x00000000,
-               0x86C, 0xFFFFFF00, 0x00000000,
-               0xE10, 0xFFFFFFFF, 0x00000000,
-               0xE14, 0xFFFFFFFF, 0x00000000,
-               0xE18, 0xFFFFFFFF, 0x00000000,
-               0xE1C, 0xFFFFFFFF, 0x00000000,
-
-};
-
-static void odm_ConfigBB_PHY_REG_PG_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Bitmask,
-                                         u32 Data)
-{
-       if (Addr == 0xfe)
-               msleep(50);
-       else if (Addr == 0xfd)
-               mdelay(5);
-       else if (Addr == 0xfc)
-               mdelay(1);
-       else if (Addr == 0xfb)
-               udelay(50);
-       else if (Addr == 0xfa)
-               udelay(5);
-       else if (Addr == 0xf9)
-               udelay(1);
-       else
-               storePwrIndexDiffRateOffset(pDM_Odm->Adapter, Addr, Bitmask, Data);
-}
-
-void ODM_ReadAndConfig_PHY_REG_PG_8188E(struct odm_dm_struct *dm_odm)
-{
-       u32  hex;
-       u32  i           = 0;
-       u32  arraylen    = ARRAY_SIZE(array_phy_reg_pg_8188e);
-       u32 *array       = array_phy_reg_pg_8188e;
-
-       hex = ODM_ITRF_USB << 8;
-       hex += (ODM_CE << 16) + 0xFF000000;
-
-       for (i = 0; i < arraylen; i += 3) {
-               u32 v1 = array[i];
-               u32 v2 = array[i + 1];
-               u32 v3 = array[i + 2];
-
-               /*  this line is a line of pure_body */
-               if (v1 < 0xCDCDCDCD) {
-                       odm_ConfigBB_PHY_REG_PG_8188E(dm_odm, v1, v2, v3);
-                       continue;
-               } else { /*  this line is the start of branch */
-                       if (!CheckCondition(array[i], hex)) {
-                               /*  don't need the hw_body */
-                               i += 2; /*  skip the pair of expression */
-                               v1 = array[i];
-                               v2 = array[i + 1];
-                               v3 = array[i + 2];
-                               while (v2 != 0xDEAD) {
-                                       i += 3;
-                                       v1 = array[i];
-                                       v2 = array[i + 1];
-                                       v3 = array[i + 1];
-                               }
-                       }
-               }
-       }
-}
diff --git a/drivers/staging/r8188eu/hal/HalHWImg8188E_MAC.c b/drivers/staging/r8188eu/hal/HalHWImg8188E_MAC.c
deleted file mode 100644 (file)
index da71867..0000000
+++ /dev/null
@@ -1,212 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/rtw_iol.h"
-
-static bool Checkcondition(const u32  condition, const u32  hex)
-{
-       u32 _board     = (hex & 0x000000FF);
-       u32 _interface = (hex & 0x0000FF00) >> 8;
-       u32 _platform  = (hex & 0x00FF0000) >> 16;
-       u32 cond = condition;
-
-       if (condition == 0xCDCDCDCD)
-               return true;
-
-       cond = condition & 0x000000FF;
-       if ((_board == cond) && cond != 0x00)
-               return false;
-
-       cond = condition & 0x0000FF00;
-       cond = cond >> 8;
-       if ((_interface & cond) == 0 && cond != 0x07)
-               return false;
-
-       cond = condition & 0x00FF0000;
-       cond = cond >> 16;
-       if ((_platform & cond) == 0 && cond != 0x0F)
-               return false;
-       return true;
-}
-
-/******************************************************************************
-*                           MAC_REG.TXT
-******************************************************************************/
-
-static u32 array_MAC_REG_8188E[] = {
-               0x026, 0x00000041,
-               0x027, 0x00000035,
-               0x428, 0x0000000A,
-               0x429, 0x00000010,
-               0x430, 0x00000000,
-               0x431, 0x00000001,
-               0x432, 0x00000002,
-               0x433, 0x00000004,
-               0x434, 0x00000005,
-               0x435, 0x00000006,
-               0x436, 0x00000007,
-               0x437, 0x00000008,
-               0x438, 0x00000000,
-               0x439, 0x00000000,
-               0x43A, 0x00000001,
-               0x43B, 0x00000002,
-               0x43C, 0x00000004,
-               0x43D, 0x00000005,
-               0x43E, 0x00000006,
-               0x43F, 0x00000007,
-               0x440, 0x0000005D,
-               0x441, 0x00000001,
-               0x442, 0x00000000,
-               0x444, 0x00000015,
-               0x445, 0x000000F0,
-               0x446, 0x0000000F,
-               0x447, 0x00000000,
-               0x458, 0x00000041,
-               0x459, 0x000000A8,
-               0x45A, 0x00000072,
-               0x45B, 0x000000B9,
-               0x460, 0x00000066,
-               0x461, 0x00000066,
-               0x480, 0x00000008,
-               0x4C8, 0x000000FF,
-               0x4C9, 0x00000008,
-               0x4CC, 0x000000FF,
-               0x4CD, 0x000000FF,
-               0x4CE, 0x00000001,
-               0x4D3, 0x00000001,
-               0x500, 0x00000026,
-               0x501, 0x000000A2,
-               0x502, 0x0000002F,
-               0x503, 0x00000000,
-               0x504, 0x00000028,
-               0x505, 0x000000A3,
-               0x506, 0x0000005E,
-               0x507, 0x00000000,
-               0x508, 0x0000002B,
-               0x509, 0x000000A4,
-               0x50A, 0x0000005E,
-               0x50B, 0x00000000,
-               0x50C, 0x0000004F,
-               0x50D, 0x000000A4,
-               0x50E, 0x00000000,
-               0x50F, 0x00000000,
-               0x512, 0x0000001C,
-               0x514, 0x0000000A,
-               0x516, 0x0000000A,
-               0x525, 0x0000004F,
-               0x550, 0x00000010,
-               0x551, 0x00000010,
-               0x559, 0x00000002,
-               0x55D, 0x000000FF,
-               0x605, 0x00000030,
-               0x608, 0x0000000E,
-               0x609, 0x0000002A,
-               0x620, 0x000000FF,
-               0x621, 0x000000FF,
-               0x622, 0x000000FF,
-               0x623, 0x000000FF,
-               0x624, 0x000000FF,
-               0x625, 0x000000FF,
-               0x626, 0x000000FF,
-               0x627, 0x000000FF,
-               0x652, 0x00000020,
-               0x63C, 0x0000000A,
-               0x63D, 0x0000000A,
-               0x63E, 0x0000000E,
-               0x63F, 0x0000000E,
-               0x640, 0x00000040,
-               0x66E, 0x00000005,
-               0x700, 0x00000021,
-               0x701, 0x00000043,
-               0x702, 0x00000065,
-               0x703, 0x00000087,
-               0x708, 0x00000021,
-               0x709, 0x00000043,
-               0x70A, 0x00000065,
-               0x70B, 0x00000087,
-};
-
-static void odm_ConfigMAC_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u8 Data)
-{
-       rtw_write8(pDM_Odm->Adapter, Addr, Data);
-}
-
-int ODM_ReadAndConfig_MAC_REG_8188E(struct odm_dm_struct *dm_odm)
-{
-       #define READ_NEXT_PAIR(v1, v2, i) do { i += 2; v1 = array[i]; v2 = array[i + 1]; } while (0)
-
-       u32     hex         = 0;
-       u32     i;
-       u32     array_len    = ARRAY_SIZE(array_MAC_REG_8188E);
-       u32    *array       = array_MAC_REG_8188E;
-       bool    biol = false;
-
-       struct adapter *adapt =  dm_odm->Adapter;
-       struct xmit_frame       *pxmit_frame = NULL;
-       u8 bndy_cnt = 1;
-       hex += ODM_ITRF_USB << 8;
-       hex += ODM_CE << 16;
-       hex += 0xFF000000;
-
-       biol = rtw_IOL_applied(adapt);
-
-       if (biol) {
-               pxmit_frame = rtw_IOL_accquire_xmit_frame(adapt);
-               if (!pxmit_frame) {
-                       pr_info("rtw_IOL_accquire_xmit_frame failed\n");
-                       return -ENOMEM;
-               }
-       }
-
-       for (i = 0; i < array_len; i += 2) {
-               u32 v1 = array[i];
-               u32 v2 = array[i + 1];
-
-               /*  This (offset, data) pair meets the condition. */
-               if (v1 < 0xCDCDCDCD) {
-                               if (biol) {
-                                       if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
-                                               bndy_cnt++;
-                                       rtw_IOL_append_WB_cmd(pxmit_frame, (u16)v1, (u8)v2, 0xFF);
-                               } else {
-                                       odm_ConfigMAC_8188E(dm_odm, v1, (u8)v2);
-                               }
-                               continue;
-               } else { /*  This line is the start line of branch. */
-                       if (!Checkcondition(array[i], hex)) {
-                               /*  Discard the following (offset, data) pairs. */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < array_len - 2) {
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               }
-                               i -= 2; /*  prevent from for-loop += 2 */
-                       } else { /*  Configure matched pairs and skip to end of if-else. */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < array_len - 2) {
-                                       if (biol) {
-                                               if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
-                                                       bndy_cnt++;
-                                               rtw_IOL_append_WB_cmd(pxmit_frame, (u16)v1, (u8)v2, 0xFF);
-                                       } else {
-                                               odm_ConfigMAC_8188E(dm_odm, v1, (u8)v2);
-                                       }
-
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               }
-                               while (v2 != 0xDEAD && i < array_len - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                       }
-               }
-       }
-       if (biol) {
-               if (!rtl8188e_IOL_exec_cmds_sync(dm_odm->Adapter, pxmit_frame, 1000, bndy_cnt)) {
-                       pr_info("~~~ MAC IOL_exec_cmds Failed !!!\n");
-                       return -1;
-               }
-       }
-       return 0;
-}
diff --git a/drivers/staging/r8188eu/hal/HalHWImg8188E_RF.c b/drivers/staging/r8188eu/hal/HalHWImg8188E_RF.c
deleted file mode 100644 (file)
index a4c3d3d..0000000
+++ /dev/null
@@ -1,269 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/rtw_iol.h"
-
-static bool CheckCondition(const u32  Condition, const u32  Hex)
-{
-       u32 _interface = (Hex & 0x0000FF00) >> 8;
-       u32 _platform  = (Hex & 0x00FF0000) >> 16;
-       u32 cond = Condition;
-
-       if (Condition == 0xCDCDCDCD)
-               return true;
-
-       cond = Condition & 0x0000FF00;
-       cond = cond >> 8;
-       if ((_interface & cond) == 0 && cond != 0x07)
-               return false;
-
-       cond = Condition & 0x00FF0000;
-       cond = cond >> 16;
-       if ((_platform & cond) == 0 && cond != 0x0F)
-               return false;
-       return true;
-}
-
-/******************************************************************************
-*                           RadioA_1T.TXT
-******************************************************************************/
-
-static u32 Array_RadioA_1T_8188E[] = {
-               0x000, 0x00030000,
-               0x008, 0x00084000,
-               0x018, 0x00000407,
-               0x019, 0x00000012,
-               0x01E, 0x00080009,
-               0x01F, 0x00000880,
-               0x02F, 0x0001A060,
-               0x03F, 0x00000000,
-               0x042, 0x000060C0,
-               0x057, 0x000D0000,
-               0x058, 0x000BE180,
-               0x067, 0x00001552,
-               0x083, 0x00000000,
-               0x0B0, 0x000FF8FC,
-               0x0B1, 0x00054400,
-               0x0B2, 0x000CCC19,
-               0x0B4, 0x00043003,
-               0x0B6, 0x0004953E,
-               0x0B7, 0x0001C718,
-               0x0B8, 0x000060FF,
-               0x0B9, 0x00080001,
-               0x0BA, 0x00040000,
-               0x0BB, 0x00000400,
-               0x0BF, 0x000C0000,
-               0x0C2, 0x00002400,
-               0x0C3, 0x00000009,
-               0x0C4, 0x00040C91,
-               0x0C5, 0x00099999,
-               0x0C6, 0x000000A3,
-               0x0C7, 0x00088820,
-               0x0C8, 0x00076C06,
-               0x0C9, 0x00000000,
-               0x0CA, 0x00080000,
-               0x0DF, 0x00000180,
-               0x0EF, 0x000001A0,
-               0x051, 0x0006B27D,
-               0xFF0F041F, 0xABCD,
-               0x052, 0x0007E4DD,
-               0xCDCDCDCD, 0xCDCD,
-               0x052, 0x0007E49D,
-               0xFF0F041F, 0xDEAD,
-               0x053, 0x00000073,
-               0x056, 0x00051FF3,
-               0x035, 0x00000086,
-               0x035, 0x00000186,
-               0x035, 0x00000286,
-               0x036, 0x00001C25,
-               0x036, 0x00009C25,
-               0x036, 0x00011C25,
-               0x036, 0x00019C25,
-               0x0B6, 0x00048538,
-               0x018, 0x00000C07,
-               0x05A, 0x0004BD00,
-               0x019, 0x000739D0,
-               0x034, 0x0000ADF3,
-               0x034, 0x00009DF0,
-               0x034, 0x00008DED,
-               0x034, 0x00007DEA,
-               0x034, 0x00006DE7,
-               0x034, 0x000054EE,
-               0x034, 0x000044EB,
-               0x034, 0x000034E8,
-               0x034, 0x0000246B,
-               0x034, 0x00001468,
-               0x034, 0x0000006D,
-               0x000, 0x00030159,
-               0x084, 0x00068200,
-               0x086, 0x000000CE,
-               0x087, 0x00048A00,
-               0x08E, 0x00065540,
-               0x08F, 0x00088000,
-               0x0EF, 0x000020A0,
-               0x03B, 0x000F02B0,
-               0x03B, 0x000EF7B0,
-               0x03B, 0x000D4FB0,
-               0x03B, 0x000CF060,
-               0x03B, 0x000B0090,
-               0x03B, 0x000A0080,
-               0x03B, 0x00090080,
-               0x03B, 0x0008F780,
-               0x03B, 0x000722B0,
-               0x03B, 0x0006F7B0,
-               0x03B, 0x00054FB0,
-               0x03B, 0x0004F060,
-               0x03B, 0x00030090,
-               0x03B, 0x00020080,
-               0x03B, 0x00010080,
-               0x03B, 0x0000F780,
-               0x0EF, 0x000000A0,
-               0x000, 0x00010159,
-               0x018, 0x0000F407,
-               0xFFE, 0x00000000,
-               0xFFE, 0x00000000,
-               0x01F, 0x00080003,
-               0xFFE, 0x00000000,
-               0xFFE, 0x00000000,
-               0x01E, 0x00000001,
-               0x01F, 0x00080000,
-               0x000, 0x00033E60,
-};
-
-static void odm_ConfigRFReg_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr,
-                                 u32 Data, u32 RegAddr)
-{
-       if (Addr == 0xffe) {
-               msleep(50);
-       } else if (Addr == 0xfd) {
-               mdelay(5);
-       } else if (Addr == 0xfc) {
-               mdelay(1);
-       } else if (Addr == 0xfb) {
-               udelay(50);
-       } else if (Addr == 0xfa) {
-               udelay(5);
-       } else if (Addr == 0xf9) {
-               udelay(1);
-       } else {
-               rtl8188e_PHY_SetRFReg(pDM_Odm->Adapter, RegAddr, bRFRegOffsetMask, Data);
-               /*  Add 1us delay between BB/RF register setting. */
-               udelay(1);
-       }
-}
-
-static void odm_ConfigRF_RadioA_8188E(struct odm_dm_struct *pDM_Odm, u32 Addr, u32 Data)
-{
-       u32  content = 0x1000; /*  RF_Content: radioa_txt */
-       u32 maskforPhySet = (u32)(content & 0xE000);
-
-       odm_ConfigRFReg_8188E(pDM_Odm, Addr, Data, Addr | maskforPhySet);
-}
-
-int ODM_ReadAndConfig_RadioA_1T_8188E(struct odm_dm_struct *pDM_Odm)
-{
-       #define READ_NEXT_PAIR(v1, v2, i) do    \
-                { i += 2; v1 = Array[i];       \
-                v2 = Array[i + 1]; } while (0)
-
-       u32     hex         = 0;
-       u32     i           = 0;
-       u32     ArrayLen    = ARRAY_SIZE(Array_RadioA_1T_8188E);
-       u32    *Array       = Array_RadioA_1T_8188E;
-       bool            biol = false;
-       struct adapter *Adapter =  pDM_Odm->Adapter;
-       struct xmit_frame *pxmit_frame = NULL;
-       u8 bndy_cnt = 1;
-
-       hex += ODM_ITRF_USB << 8;
-       hex += ODM_CE << 16;
-       hex += 0xFF000000;
-       biol = rtw_IOL_applied(Adapter);
-
-       if (biol) {
-               pxmit_frame = rtw_IOL_accquire_xmit_frame(Adapter);
-               if (!pxmit_frame) {
-                       pr_info("rtw_IOL_accquire_xmit_frame failed\n");
-                       return -ENOMEM;
-               }
-       }
-
-       for (i = 0; i < ArrayLen; i += 2) {
-               u32 v1 = Array[i];
-               u32 v2 = Array[i + 1];
-
-               /*  This (offset, data) pair meets the condition. */
-               if (v1 < 0xCDCDCDCD) {
-                       if (biol) {
-                               if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
-                                       bndy_cnt++;
-
-                               if (v1 == 0xffe)
-                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 50);
-                               else if (v1 == 0xfd)
-                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 5);
-                               else if (v1 == 0xfc)
-                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 1);
-                               else if (v1 == 0xfb)
-                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 50);
-                               else if (v1 == 0xfa)
-                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 5);
-                               else if (v1 == 0xf9)
-                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 1);
-                               else
-                                       rtw_IOL_append_WRF_cmd(pxmit_frame, RF_PATH_A, (u16)v1, v2, bRFRegOffsetMask);
-                       } else {
-                               odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
-                       }
-                       continue;
-               } else { /*  This line is the start line of branch. */
-                       if (!CheckCondition(Array[i], hex)) {
-                               /*  Discard the following (offset, data) pairs. */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               i -= 2; /*  prevent from for-loop += 2 */
-                       } else { /*  Configure matched pairs and skip to end of if-else. */
-                       READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2) {
-                                       if (biol) {
-                                               if (rtw_IOL_cmd_boundary_handle(pxmit_frame))
-                                                       bndy_cnt++;
-
-                                               if (v1 == 0xffe)
-                                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 50);
-                                               else if (v1 == 0xfd)
-                                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 5);
-                                               else if (v1 == 0xfc)
-                                                       rtw_IOL_append_DELAY_MS_cmd(pxmit_frame, 1);
-                                               else if (v1 == 0xfb)
-                                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 50);
-                                               else if (v1 == 0xfa)
-                                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 5);
-                                               else if (v1 == 0xf9)
-                                                       rtw_IOL_append_DELAY_US_cmd(pxmit_frame, 1);
-                                               else
-                                                       rtw_IOL_append_WRF_cmd(pxmit_frame, RF_PATH_A, (u16)v1, v2, bRFRegOffsetMask);
-                                       } else {
-                                               odm_ConfigRF_RadioA_8188E(pDM_Odm, v1, v2);
-                                       }
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               }
-
-                               while (v2 != 0xDEAD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                       }
-               }
-       }
-       if (biol) {
-               if (!rtl8188e_IOL_exec_cmds_sync(pDM_Odm->Adapter, pxmit_frame, 1000, bndy_cnt)) {
-                       pr_info("~~~ IOL Config %s Failed !!!\n", __func__);
-                       return -1;
-               }
-       }
-       return 0;
-}
diff --git a/drivers/staging/r8188eu/hal/HalPhyRf_8188e.c b/drivers/staging/r8188eu/hal/HalPhyRf_8188e.c
deleted file mode 100644 (file)
index 26e710e..0000000
+++ /dev/null
@@ -1,900 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/drv_types.h"
-
-/*---------------------------Define Local Constant---------------------------*/
-/*  2010/04/25 MH Define the max tx power tracking tx agc power. */
-#define                ODM_TXPWRTRACK_MAX_IDX_88E              6
-
-/*---------------------------Define Local Constant---------------------------*/
-
-/* 3============================================================ */
-/* 3 Tx Power Tracking */
-/* 3============================================================ */
-/*-----------------------------------------------------------------------------
- * Function:   ODM_TxPwrTrackAdjust88E()
- *
- * Overview:   88E we can not write 0xc80/c94/c4c/ 0xa2x. Instead of write TX agc.
- *                             No matter OFDM & CCK use the same method.
- *
- * Input:              NONE
- *
- * Output:             NONE
- *
- * Return:             NONE
- *
- * Revised History:
- *     When            Who             Remark
- *     04/23/2012      MHC             Create Version 0.
- *     04/23/2012      MHC             Adjust TX agc directly not throughput BB digital.
- *
- *---------------------------------------------------------------------------*/
-void ODM_TxPwrTrackAdjust88E(struct odm_dm_struct *dm_odm, u8 Type,/*  0 = OFDM, 1 = CCK */
-       u8 *pDirection,                 /*  1 = +(increase) 2 = -(decrease) */
-       u32 *pOutWriteVal               /*  Tx tracking CCK/OFDM BB swing index adjust */
-       )
-{
-       u8 pwr_value = 0;
-       /*  Tx power tracking BB swing table. */
-       /*  The base index = 12. +((12-n)/2)dB 13~?? = decrease tx pwr by -((n-12)/2)dB */
-       if (Type == 0) {                /*  For OFDM afjust */
-               if (dm_odm->BbSwingIdxOfdm <= dm_odm->BbSwingIdxOfdmBase) {
-                       *pDirection     = 1;
-                       pwr_value               = (dm_odm->BbSwingIdxOfdmBase - dm_odm->BbSwingIdxOfdm);
-               } else {
-                       *pDirection     = 2;
-                       pwr_value               = (dm_odm->BbSwingIdxOfdm - dm_odm->BbSwingIdxOfdmBase);
-               }
-       } else if (Type == 1) { /*  For CCK adjust. */
-               if (dm_odm->BbSwingIdxCck <= dm_odm->BbSwingIdxCckBase) {
-                       *pDirection     = 1;
-                       pwr_value               = (dm_odm->BbSwingIdxCckBase - dm_odm->BbSwingIdxCck);
-               } else {
-                       *pDirection     = 2;
-                       pwr_value               = (dm_odm->BbSwingIdxCck - dm_odm->BbSwingIdxCckBase);
-               }
-       }
-
-       /*  */
-       /*  2012/04/25 MH According to Ed/Luke.Lees estimate for EVM the max tx power tracking */
-       /*  need to be less than 6 power index for 88E. */
-       /*  */
-       if (pwr_value >= ODM_TXPWRTRACK_MAX_IDX_88E && *pDirection == 1)
-               pwr_value = ODM_TXPWRTRACK_MAX_IDX_88E;
-
-       *pOutWriteVal = pwr_value | (pwr_value << 8) | (pwr_value << 16) | (pwr_value << 24);
-}      /*  ODM_TxPwrTrackAdjust88E */
-
-/*-----------------------------------------------------------------------------
- * Function:   odm_TxPwrTrackSetPwr88E()
- *
- * Overview:   88E change all channel tx power according to flag.
- *                             OFDM & CCK are all different.
- *
- * Input:              NONE
- *
- * Output:             NONE
- *
- * Return:             NONE
- *
- * Revised History:
- *     When            Who             Remark
- *     04/23/2012      MHC             Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-static void odm_TxPwrTrackSetPwr88E(struct odm_dm_struct *dm_odm)
-{
-       if (dm_odm->BbSwingFlagOfdm || dm_odm->BbSwingFlagCck) {
-               PHY_SetTxPowerLevel8188E(dm_odm->Adapter, *dm_odm->pChannel);
-               dm_odm->BbSwingFlagOfdm = false;
-               dm_odm->BbSwingFlagCck  = false;
-       }
-}      /*  odm_TxPwrTrackSetPwr88E */
-
-/* 091212 chiyokolin */
-void
-odm_TXPowerTrackingCallback_ThermalMeter_8188E(
-       struct adapter *Adapter
-       )
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       u8 ThermalValue = 0, delta, delta_LCK, delta_IQK, offset;
-       u8 ThermalValue_AVG_count = 0;
-       u32 ThermalValue_AVG = 0;
-       s32 ele_D, TempCCk;
-       s8 OFDM_index, CCK_index = 0;
-       s8 OFDM_index_old = 0, CCK_index_old = 0;
-       u32 i = 0, j = 0;
-
-       u8 OFDM_min_index = 6; /* OFDM BB Swing should be less than +3.0dB, which is required by Arthur */
-       s8 OFDM_index_mapping[2][index_mapping_NUM_88E] = {
-               {0, 0, 2, 3, 4, 4,              /* 2.4G, decrease power */
-               5, 6, 7, 7, 8, 9,
-               10, 10, 11}, /*  For lower temperature, 20120220 updated on 20120220. */
-               {0, 0, -1, -2, -3, -4,          /* 2.4G, increase power */
-               -4, -4, -4, -5, -7, -8,
-               -9, -9, -10},
-       };
-       u8 Thermal_mapping[2][index_mapping_NUM_88E] = {
-               {0, 2, 4, 6, 8, 10,             /* 2.4G, decrease power */
-               12, 14, 16, 18, 20, 22,
-               24, 26, 27},
-               {0, 2, 4, 6, 8, 10,             /* 2.4G,, increase power */
-               12, 14, 16, 18, 20, 22,
-               25, 25, 25},
-       };
-       struct odm_dm_struct *dm_odm = &pHalData->odmpriv;
-
-       /*  2012/04/25 MH Add for tx power tracking to set tx power in tx agc for 88E. */
-       odm_TxPwrTrackSetPwr88E(dm_odm);
-
-       /*  <Kordan> RFCalibrateInfo.RegA24 will be initialized when ODM HW configuring, but MP configures with para files. */
-       dm_odm->RFCalibrateInfo.RegA24 = 0x090e1317;
-
-       ThermalValue = (u8)rtl8188e_PHY_QueryRFReg(Adapter, RF_T_METER_88E, 0xfc00); /* 0x42: RF Reg[15:10] 88E */
-
-       if (ThermalValue) {
-               /* Query OFDM path A default setting */
-               ele_D = rtl8188e_PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, bMaskDWord) & bMaskOFDM_D;
-               for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) {     /* find the index */
-                       if (ele_D == (OFDMSwingTable[i] & bMaskOFDM_D)) {
-                               OFDM_index_old = (u8)i;
-                               dm_odm->BbSwingIdxOfdmBase = (u8)i;
-                               break;
-                       }
-               }
-
-               /* Query CCK default setting From 0xa24 */
-               TempCCk = dm_odm->RFCalibrateInfo.RegA24;
-
-               for (i = 0; i < CCK_TABLE_SIZE; i++) {
-                       if (memcmp((void *)&TempCCk, (void *)&cck_swing_table[i][2], 4)) {
-                               CCK_index_old = (u8)i;
-                               dm_odm->BbSwingIdxCckBase = (u8)i;
-                               break;
-                       }
-               }
-
-               if (!dm_odm->RFCalibrateInfo.ThermalValue) {
-                       dm_odm->RFCalibrateInfo.ThermalValue = pHalData->EEPROMThermalMeter;
-                       dm_odm->RFCalibrateInfo.ThermalValue_LCK = ThermalValue;
-                       dm_odm->RFCalibrateInfo.ThermalValue_IQK = ThermalValue;
-
-                       dm_odm->RFCalibrateInfo.OFDM_index = OFDM_index_old;
-                       dm_odm->RFCalibrateInfo.CCK_index = CCK_index_old;
-               }
-
-               /* calculate average thermal meter */
-               dm_odm->RFCalibrateInfo.ThermalValue_AVG[dm_odm->RFCalibrateInfo.ThermalValue_AVG_index] = ThermalValue;
-               dm_odm->RFCalibrateInfo.ThermalValue_AVG_index++;
-               if (dm_odm->RFCalibrateInfo.ThermalValue_AVG_index == AVG_THERMAL_NUM_88E)
-                       dm_odm->RFCalibrateInfo.ThermalValue_AVG_index = 0;
-
-               for (i = 0; i < AVG_THERMAL_NUM_88E; i++) {
-                       if (dm_odm->RFCalibrateInfo.ThermalValue_AVG[i]) {
-                               ThermalValue_AVG += dm_odm->RFCalibrateInfo.ThermalValue_AVG[i];
-                               ThermalValue_AVG_count++;
-                       }
-               }
-
-               if (ThermalValue_AVG_count)
-                       ThermalValue = (u8)(ThermalValue_AVG / ThermalValue_AVG_count);
-
-               if (dm_odm->RFCalibrateInfo.bReloadtxpowerindex) {
-                       delta = ThermalValue > pHalData->EEPROMThermalMeter ?
-                               (ThermalValue - pHalData->EEPROMThermalMeter) :
-                               (pHalData->EEPROMThermalMeter - ThermalValue);
-                       dm_odm->RFCalibrateInfo.bReloadtxpowerindex = false;
-                       dm_odm->RFCalibrateInfo.bDoneTxpower = false;
-               } else if (dm_odm->RFCalibrateInfo.bDoneTxpower) {
-                       delta = (ThermalValue > dm_odm->RFCalibrateInfo.ThermalValue) ?
-                               (ThermalValue - dm_odm->RFCalibrateInfo.ThermalValue) :
-                               (dm_odm->RFCalibrateInfo.ThermalValue - ThermalValue);
-               } else {
-                       delta = ThermalValue > pHalData->EEPROMThermalMeter ?
-                               (ThermalValue - pHalData->EEPROMThermalMeter) :
-                               (pHalData->EEPROMThermalMeter - ThermalValue);
-               }
-               delta_LCK = (ThermalValue > dm_odm->RFCalibrateInfo.ThermalValue_LCK) ?
-                           (ThermalValue - dm_odm->RFCalibrateInfo.ThermalValue_LCK) :
-                           (dm_odm->RFCalibrateInfo.ThermalValue_LCK - ThermalValue);
-               delta_IQK = (ThermalValue > dm_odm->RFCalibrateInfo.ThermalValue_IQK) ?
-                           (ThermalValue - dm_odm->RFCalibrateInfo.ThermalValue_IQK) :
-                           (dm_odm->RFCalibrateInfo.ThermalValue_IQK - ThermalValue);
-
-               if ((delta_LCK >= 8)) { /*  Delta temperature is equal to or larger than 20 centigrade. */
-                       dm_odm->RFCalibrateInfo.ThermalValue_LCK = ThermalValue;
-                       PHY_LCCalibrate_8188E(Adapter);
-               }
-
-               if (delta > 0 && dm_odm->RFCalibrateInfo.TxPowerTrackControl) {
-                       delta = ThermalValue > pHalData->EEPROMThermalMeter ?
-                               (ThermalValue - pHalData->EEPROMThermalMeter) :
-                               (pHalData->EEPROMThermalMeter - ThermalValue);
-                       /* calculate new OFDM / CCK offset */
-                       if (ThermalValue > pHalData->EEPROMThermalMeter)
-                               j = 1;
-                       else
-                               j = 0;
-                       for (offset = 0; offset < index_mapping_NUM_88E; offset++) {
-                               if (delta < Thermal_mapping[j][offset]) {
-                                       if (offset != 0)
-                                               offset--;
-                                       break;
-                               }
-                       }
-                       if (offset >= index_mapping_NUM_88E)
-                               offset = index_mapping_NUM_88E - 1;
-                       OFDM_index = dm_odm->RFCalibrateInfo.OFDM_index + OFDM_index_mapping[j][offset];
-                       CCK_index = dm_odm->RFCalibrateInfo.CCK_index + OFDM_index_mapping[j][offset];
-
-                       if (OFDM_index > OFDM_TABLE_SIZE_92D - 1)
-                               OFDM_index = OFDM_TABLE_SIZE_92D - 1;
-                       else if (OFDM_index < OFDM_min_index)
-                               OFDM_index = OFDM_min_index;
-
-                       if (CCK_index > CCK_TABLE_SIZE - 1)
-                               CCK_index = CCK_TABLE_SIZE - 1;
-                       else if (CCK_index < 0)
-                               CCK_index = 0;
-
-                       /* 2 temporarily remove bNOPG */
-                       /* Config by SwingTable */
-                       if (dm_odm->RFCalibrateInfo.TxPowerTrackControl) {
-                               dm_odm->RFCalibrateInfo.bDoneTxpower = true;
-
-                               /*  Revse TX power table. */
-                               dm_odm->BbSwingIdxOfdm          = (u8)OFDM_index;
-                               dm_odm->BbSwingIdxCck           = (u8)CCK_index;
-
-                               if (dm_odm->BbSwingIdxOfdmCurrent != dm_odm->BbSwingIdxOfdm) {
-                                       dm_odm->BbSwingIdxOfdmCurrent = dm_odm->BbSwingIdxOfdm;
-                                       dm_odm->BbSwingFlagOfdm = true;
-                               }
-
-                               if (dm_odm->BbSwingIdxCckCurrent != dm_odm->BbSwingIdxCck) {
-                                       dm_odm->BbSwingIdxCckCurrent = dm_odm->BbSwingIdxCck;
-                                       dm_odm->BbSwingFlagCck = true;
-                               }
-                       }
-               }
-
-               if (delta_IQK >= 8) { /*  Delta temperature is equal to or larger than 20 centigrade. */
-                       dm_odm->RFCalibrateInfo.ThermalValue_IQK = ThermalValue;
-                       PHY_IQCalibrate_8188E(Adapter, false);
-               }
-               /* update thermal meter value */
-               if (dm_odm->RFCalibrateInfo.TxPowerTrackControl)
-                       dm_odm->RFCalibrateInfo.ThermalValue = ThermalValue;
-       }
-}
-
-/* 1 7.        IQK */
-#define MAX_TOLERANCE          5
-#define IQK_DELAY_TIME         1               /* ms */
-
-static u8 /* bit0 = 1 => Tx OK, bit1 = 1 => Rx OK */
-phy_PathA_IQK_8188E(struct adapter *adapt)
-{
-       u32 regeac, regE94, regE9C;
-       u8 result = 0x00;
-
-       /* 1 Tx IQK */
-       /* path-A IQK setting */
-       rtl8188e_PHY_SetBBReg(adapt, rTx_IQK_Tone_A, bMaskDWord, 0x10008c1c);
-       rtl8188e_PHY_SetBBReg(adapt, rRx_IQK_Tone_A, bMaskDWord, 0x30008c1c);
-       rtl8188e_PHY_SetBBReg(adapt, rTx_IQK_PI_A, bMaskDWord, 0x8214032a);
-       rtl8188e_PHY_SetBBReg(adapt, rRx_IQK_PI_A, bMaskDWord, 0x28160000);
-
-       /* LO calibration setting */
-       rtl8188e_PHY_SetBBReg(adapt, rIQK_AGC_Rsp, bMaskDWord, 0x00462911);
-
-       /* One shot, path A LOK & IQK */
-       rtl8188e_PHY_SetBBReg(adapt, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
-       rtl8188e_PHY_SetBBReg(adapt, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-
-       /*  delay x ms */
-       /* PlatformStallExecution(IQK_DELAY_TIME_88E*1000); */
-       mdelay(IQK_DELAY_TIME_88E);
-
-       /*  Check failed */
-       regeac = rtl8188e_PHY_QueryBBReg(adapt, rRx_Power_After_IQK_A_2, bMaskDWord);
-       regE94 = rtl8188e_PHY_QueryBBReg(adapt, rTx_Power_Before_IQK_A, bMaskDWord);
-       regE9C = rtl8188e_PHY_QueryBBReg(adapt, rTx_Power_After_IQK_A, bMaskDWord);
-
-       if (!(regeac & BIT(28)) &&
-           (((regE94 & 0x03FF0000) >> 16) != 0x142) &&
-           (((regE9C & 0x03FF0000) >> 16) != 0x42))
-               result |= 0x01;
-       return result;
-}
-
-static u8 /* bit0 = 1 => Tx OK, bit1 = 1 => Rx OK */
-phy_PathA_RxIQK(struct adapter *adapt)
-{
-       u32 regeac, regE94, regE9C, regEA4, u4tmp;
-       u8 result = 0x00;
-
-       /* 1 Get TXIMR setting */
-       /* modify RXIQK mode table */
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_IQK, bMaskDWord, 0x00000000);
-       rtl8188e_PHY_SetRFReg(adapt, RF_WE_LUT, bRFRegOffsetMask, 0x800a0);
-       rtl8188e_PHY_SetRFReg(adapt, RF_RCK_OS, bRFRegOffsetMask, 0x30000);
-       rtl8188e_PHY_SetRFReg(adapt, RF_TXPA_G1, bRFRegOffsetMask, 0x0000f);
-       rtl8188e_PHY_SetRFReg(adapt, RF_TXPA_G2, bRFRegOffsetMask, 0xf117B);
-
-       /* PA,PAD off */
-       rtl8188e_PHY_SetRFReg(adapt, 0xdf, bRFRegOffsetMask, 0x980);
-       rtl8188e_PHY_SetRFReg(adapt, 0x56, bRFRegOffsetMask, 0x51000);
-
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_IQK, bMaskDWord, 0x80800000);
-
-       /* IQK setting */
-       rtl8188e_PHY_SetBBReg(adapt, rTx_IQK, bMaskDWord, 0x01007c00);
-       rtl8188e_PHY_SetBBReg(adapt, rRx_IQK, bMaskDWord, 0x81004800);
-
-       /* path-A IQK setting */
-       rtl8188e_PHY_SetBBReg(adapt, rTx_IQK_Tone_A, bMaskDWord, 0x10008c1c);
-       rtl8188e_PHY_SetBBReg(adapt, rRx_IQK_Tone_A, bMaskDWord, 0x30008c1c);
-       rtl8188e_PHY_SetBBReg(adapt, rTx_IQK_PI_A, bMaskDWord, 0x82160c1f);
-       rtl8188e_PHY_SetBBReg(adapt, rRx_IQK_PI_A, bMaskDWord, 0x28160000);
-
-       /* LO calibration setting */
-       rtl8188e_PHY_SetBBReg(adapt, rIQK_AGC_Rsp, bMaskDWord, 0x0046a911);
-
-       /* One shot, path A LOK & IQK */
-       rtl8188e_PHY_SetBBReg(adapt, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
-       rtl8188e_PHY_SetBBReg(adapt, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-
-       /*  delay x ms */
-       mdelay(IQK_DELAY_TIME_88E);
-
-       /*  Check failed */
-       regeac = rtl8188e_PHY_QueryBBReg(adapt, rRx_Power_After_IQK_A_2, bMaskDWord);
-       regE94 = rtl8188e_PHY_QueryBBReg(adapt, rTx_Power_Before_IQK_A, bMaskDWord);
-       regE9C = rtl8188e_PHY_QueryBBReg(adapt, rTx_Power_After_IQK_A, bMaskDWord);
-
-       if (!(regeac & BIT(28)) &&
-           (((regE94 & 0x03FF0000) >> 16) != 0x142) &&
-           (((regE9C & 0x03FF0000) >> 16) != 0x42))
-               result |= 0x01;
-       else                                                    /* if Tx not OK, ignore Rx */
-               return result;
-
-       u4tmp = 0x80007C00 | (regE94 & 0x3FF0000)  | ((regE9C & 0x3FF0000) >> 16);
-       rtl8188e_PHY_SetBBReg(adapt, rTx_IQK, bMaskDWord, u4tmp);
-
-       /* 1 RX IQK */
-       /* modify RXIQK mode table */
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_IQK, bMaskDWord, 0x00000000);
-       rtl8188e_PHY_SetRFReg(adapt, RF_WE_LUT, bRFRegOffsetMask, 0x800a0);
-       rtl8188e_PHY_SetRFReg(adapt, RF_RCK_OS, bRFRegOffsetMask, 0x30000);
-       rtl8188e_PHY_SetRFReg(adapt, RF_TXPA_G1, bRFRegOffsetMask, 0x0000f);
-       rtl8188e_PHY_SetRFReg(adapt, RF_TXPA_G2, bRFRegOffsetMask, 0xf7ffa);
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_IQK, bMaskDWord, 0x80800000);
-
-       /* IQK setting */
-       rtl8188e_PHY_SetBBReg(adapt, rRx_IQK, bMaskDWord, 0x01004800);
-
-       /* path-A IQK setting */
-       rtl8188e_PHY_SetBBReg(adapt, rTx_IQK_Tone_A, bMaskDWord, 0x38008c1c);
-       rtl8188e_PHY_SetBBReg(adapt, rRx_IQK_Tone_A, bMaskDWord, 0x18008c1c);
-       rtl8188e_PHY_SetBBReg(adapt, rTx_IQK_PI_A, bMaskDWord, 0x82160c05);
-       rtl8188e_PHY_SetBBReg(adapt, rRx_IQK_PI_A, bMaskDWord, 0x28160c1f);
-
-       /* LO calibration setting */
-       rtl8188e_PHY_SetBBReg(adapt, rIQK_AGC_Rsp, bMaskDWord, 0x0046a911);
-
-       /* One shot, path A LOK & IQK */
-       rtl8188e_PHY_SetBBReg(adapt, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
-       rtl8188e_PHY_SetBBReg(adapt, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-
-       /*  delay x ms */
-       /* PlatformStallExecution(IQK_DELAY_TIME_88E*1000); */
-       mdelay(IQK_DELAY_TIME_88E);
-
-       /*  Check failed */
-       regeac = rtl8188e_PHY_QueryBBReg(adapt, rRx_Power_After_IQK_A_2, bMaskDWord);
-       regE94 = rtl8188e_PHY_QueryBBReg(adapt, rTx_Power_Before_IQK_A, bMaskDWord);
-       regE9C = rtl8188e_PHY_QueryBBReg(adapt, rTx_Power_After_IQK_A, bMaskDWord);
-       regEA4 = rtl8188e_PHY_QueryBBReg(adapt, rRx_Power_Before_IQK_A_2, bMaskDWord);
-
-       /* reload RF 0xdf */
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_IQK, bMaskDWord, 0x00000000);
-       rtl8188e_PHY_SetRFReg(adapt, 0xdf, bRFRegOffsetMask, 0x180);
-
-       if (!(regeac & BIT(27)) &&              /* if Tx is OK, check whether Rx is OK */
-           (((regEA4 & 0x03FF0000) >> 16) != 0x132) &&
-           (((regeac & 0x03FF0000) >> 16) != 0x36))
-               result |= 0x02;
-
-       return result;
-}
-
-static void patha_fill_iqk(struct adapter *adapt, bool iqkok, s32 result[][8], u8 final_candidate, bool txonly)
-{
-       u32 Oldval_0, X, TX0_A, reg;
-       s32 Y, TX0_C;
-
-       if (final_candidate == 0xFF) {
-               return;
-       } else if (iqkok) {
-               Oldval_0 = (rtl8188e_PHY_QueryBBReg(adapt, rOFDM0_XATxIQImbalance, bMaskDWord) >> 22) & 0x3FF;
-
-               X = result[final_candidate][0];
-               if ((X & 0x00000200) != 0)
-                       X = X | 0xFFFFFC00;
-               TX0_A = (X * Oldval_0) >> 8;
-               rtl8188e_PHY_SetBBReg(adapt, rOFDM0_XATxIQImbalance, 0x3FF, TX0_A);
-
-               rtl8188e_PHY_SetBBReg(adapt, rOFDM0_ECCAThreshold, BIT(31), ((X * Oldval_0 >> 7) & 0x1));
-
-               Y = result[final_candidate][1];
-               if ((Y & 0x00000200) != 0)
-                       Y = Y | 0xFFFFFC00;
-
-               TX0_C = (Y * Oldval_0) >> 8;
-               rtl8188e_PHY_SetBBReg(adapt, rOFDM0_XCTxAFE, 0xF0000000, ((TX0_C & 0x3C0) >> 6));
-               rtl8188e_PHY_SetBBReg(adapt, rOFDM0_XATxIQImbalance, 0x003F0000, (TX0_C & 0x3F));
-
-               rtl8188e_PHY_SetBBReg(adapt, rOFDM0_ECCAThreshold, BIT(29), ((Y * Oldval_0 >> 7) & 0x1));
-
-               if (txonly)
-                       return;
-
-               reg = result[final_candidate][2];
-               rtl8188e_PHY_SetBBReg(adapt, rOFDM0_XARxIQImbalance, 0x3FF, reg);
-
-               reg = result[final_candidate][3] & 0x3F;
-               rtl8188e_PHY_SetBBReg(adapt, rOFDM0_XARxIQImbalance, 0xFC00, reg);
-
-               reg = (result[final_candidate][3] >> 6) & 0xF;
-               rtl8188e_PHY_SetBBReg(adapt, rOFDM0_RxIQExtAnta, 0xF0000000, reg);
-       }
-}
-
-void _PHY_SaveADDARegisters(struct adapter *adapt, u32 *ADDAReg, u32 *ADDABackup, u32 RegisterNum)
-{
-       u32 i;
-
-       for (i = 0; i < RegisterNum; i++) {
-               ADDABackup[i] = rtl8188e_PHY_QueryBBReg(adapt, ADDAReg[i], bMaskDWord);
-       }
-}
-
-/* FIXME: return an error to caller */
-static void _PHY_SaveMACRegisters(
-               struct adapter *adapt,
-               u32 *MACReg,
-               u32 *MACBackup
-       )
-{
-       u32 i;
-       int res;
-
-       for (i = 0; i < (IQK_MAC_REG_NUM - 1); i++) {
-               u8 reg;
-
-               res = rtw_read8(adapt, MACReg[i], &reg);
-               if (res)
-                       return;
-
-               MACBackup[i] = reg;
-       }
-
-       res = rtw_read32(adapt, MACReg[i], MACBackup + i);
-       (void)res;
-}
-
-static void reload_adda_reg(struct adapter *adapt, u32 *ADDAReg, u32 *ADDABackup, u32 RegiesterNum)
-{
-       u32 i;
-
-       for (i = 0; i < RegiesterNum; i++)
-               rtl8188e_PHY_SetBBReg(adapt, ADDAReg[i], bMaskDWord, ADDABackup[i]);
-}
-
-static void
-_PHY_ReloadMACRegisters(
-               struct adapter *adapt,
-               u32 *MACReg,
-               u32 *MACBackup
-       )
-{
-       u32 i;
-
-       for (i = 0; i < (IQK_MAC_REG_NUM - 1); i++)
-               rtw_write8(adapt, MACReg[i], (u8)MACBackup[i]);
-
-       rtw_write32(adapt, MACReg[i], MACBackup[i]);
-}
-
-static void
-_PHY_PathADDAOn(
-               struct adapter *adapt,
-               u32 *ADDAReg)
-{
-       u32 i;
-
-       rtl8188e_PHY_SetBBReg(adapt, ADDAReg[0], bMaskDWord, 0x0b1b25a0);
-
-       for (i = 1; i < IQK_ADDA_REG_NUM; i++)
-               rtl8188e_PHY_SetBBReg(adapt, ADDAReg[i], bMaskDWord, 0x0bdb25a0);
-}
-
-void
-_PHY_MACSettingCalibration(
-               struct adapter *adapt,
-               u32 *MACReg,
-               u32 *MACBackup
-       )
-{
-       u32 i = 0;
-
-       rtw_write8(adapt, MACReg[i], 0x3F);
-
-       for (i = 1; i < (IQK_MAC_REG_NUM - 1); i++)
-               rtw_write8(adapt, MACReg[i], (u8)(MACBackup[i] & (~BIT(3))));
-
-       rtw_write8(adapt, MACReg[i], (u8)(MACBackup[i] & (~BIT(5))));
-}
-
-static void _PHY_PIModeSwitch(
-               struct adapter *adapt,
-               bool PIMode
-       )
-{
-       u32 mode;
-
-       mode = PIMode ? 0x01000100 : 0x01000000;
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_XA_HSSIParameter1, bMaskDWord, mode);
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_XB_HSSIParameter1, bMaskDWord, mode);
-}
-
-static bool phy_SimularityCompare_8188E(
-               struct adapter *adapt,
-               s32 resulta[][8],
-               u8  c1,
-               u8  c2
-       )
-{
-       u32 i, j, diff, sim_bitmap, bound = 0;
-       u8 final_candidate[2] = {0xFF, 0xFF};   /* for path A and path B */
-       bool result = true;
-       s32 tmp1 = 0, tmp2 = 0;
-
-       bound = 4;
-       sim_bitmap = 0;
-
-       for (i = 0; i < bound; i++) {
-               if ((i == 1) || (i == 3) || (i == 5) || (i == 7)) {
-                       if ((resulta[c1][i] & 0x00000200) != 0)
-                               tmp1 = resulta[c1][i] | 0xFFFFFC00;
-                       else
-                               tmp1 = resulta[c1][i];
-
-                       if ((resulta[c2][i] & 0x00000200) != 0)
-                               tmp2 = resulta[c2][i] | 0xFFFFFC00;
-                       else
-                               tmp2 = resulta[c2][i];
-               } else {
-                       tmp1 = resulta[c1][i];
-                       tmp2 = resulta[c2][i];
-               }
-
-               diff = abs(tmp1 - tmp2);
-
-               if (diff > MAX_TOLERANCE) {
-                       if ((i == 2 || i == 6) && !sim_bitmap) {
-                               if (resulta[c1][i] + resulta[c1][i + 1] == 0)
-                                       final_candidate[(i / 4)] = c2;
-                               else if (resulta[c2][i] + resulta[c2][i + 1] == 0)
-                                       final_candidate[(i / 4)] = c1;
-                               else
-                                       sim_bitmap = sim_bitmap | (1 << i);
-                       } else {
-                               sim_bitmap = sim_bitmap | (1 << i);
-                       }
-               }
-       }
-
-       if (sim_bitmap == 0) {
-               for (i = 0; i < (bound / 4); i++) {
-                       if (final_candidate[i] != 0xFF) {
-                               for (j = i * 4; j < (i + 1) * 4 - 2; j++)
-                                       resulta[3][j] = resulta[final_candidate[i]][j];
-                               result = false;
-                       }
-               }
-               return result;
-       } else {
-               if (!(sim_bitmap & 0x03)) {                /* path A TX OK */
-                       for (i = 0; i < 2; i++)
-                               resulta[3][i] = resulta[c1][i];
-               }
-               if (!(sim_bitmap & 0x0c)) {                /* path A RX OK */
-                       for (i = 2; i < 4; i++)
-                               resulta[3][i] = resulta[c1][i];
-               }
-
-               if (!(sim_bitmap & 0x30)) { /* path B TX OK */
-                       for (i = 4; i < 6; i++)
-                               resulta[3][i] = resulta[c1][i];
-               }
-
-               if (!(sim_bitmap & 0xc0)) { /* path B RX OK */
-                       for (i = 6; i < 8; i++)
-                               resulta[3][i] = resulta[c1][i];
-               }
-               return false;
-       }
-}
-
-static void phy_IQCalibrate_8188E(struct adapter *adapt, s32 result[][8], u8 t)
-{
-       struct hal_data_8188e *pHalData = &adapt->haldata;
-       struct odm_dm_struct *dm_odm = &pHalData->odmpriv;
-       u32 i;
-       u8 PathAOK;
-       u32 ADDA_REG[IQK_ADDA_REG_NUM] = {
-                                               rFPGA0_XCD_SwitchControl, rBlue_Tooth,
-                                               rRx_Wait_CCA,   rTx_CCK_RFON,
-                                               rTx_CCK_BBON, rTx_OFDM_RFON,
-                                               rTx_OFDM_BBON, rTx_To_Rx,
-                                               rTx_To_Tx,      rRx_CCK,
-                                               rRx_OFDM,       rRx_Wait_RIFS,
-                                               rRx_TO_Rx,      rStandby,
-                                               rSleep,                         rPMPD_ANAEN };
-       u32 IQK_MAC_REG[IQK_MAC_REG_NUM] = {
-                                               REG_TXPAUSE,    REG_BCN_CTRL,
-                                               REG_BCN_CTRL_1, REG_GPIO_MUXCFG};
-
-       /* since 92C & 92D have the different define in IQK_BB_REG */
-       u32 IQK_BB_REG_92C[IQK_BB_REG_NUM] = {
-                                                       rOFDM0_TRxPathEnable,   rOFDM0_TRMuxPar,
-                                                       rFPGA0_XCD_RFInterfaceSW, rConfig_AntA, rConfig_AntB,
-                                                       rFPGA0_XAB_RFInterfaceSW, rFPGA0_XA_RFInterfaceOE,
-                                                       rFPGA0_XB_RFInterfaceOE, rFPGA0_RFMOD
-                                                       };
-       u32 retryCount = 2;
-       /*  Note: IQ calibration must be performed after loading */
-       /*              PHY_REG.txt , and radio_a, radio_b.txt */
-
-       if (t == 0) {
-               /*  Save ADDA parameters, turn Path A ADDA on */
-               _PHY_SaveADDARegisters(adapt, ADDA_REG, dm_odm->RFCalibrateInfo.ADDA_backup, IQK_ADDA_REG_NUM);
-               _PHY_SaveMACRegisters(adapt, IQK_MAC_REG, dm_odm->RFCalibrateInfo.IQK_MAC_backup);
-               _PHY_SaveADDARegisters(adapt, IQK_BB_REG_92C, dm_odm->RFCalibrateInfo.IQK_BB_backup, IQK_BB_REG_NUM);
-       }
-
-       _PHY_PathADDAOn(adapt, ADDA_REG);
-       if (t == 0)
-               dm_odm->RFCalibrateInfo.bRfPiEnable = (u8)rtl8188e_PHY_QueryBBReg(adapt, rFPGA0_XA_HSSIParameter1, BIT(8));
-
-       if (!dm_odm->RFCalibrateInfo.bRfPiEnable) {
-               /*  Switch BB to PI mode to do IQ Calibration. */
-               _PHY_PIModeSwitch(adapt, true);
-       }
-
-       /* BB setting */
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_RFMOD, BIT(24), 0x00);
-       rtl8188e_PHY_SetBBReg(adapt, rOFDM0_TRxPathEnable, bMaskDWord, 0x03a05600);
-       rtl8188e_PHY_SetBBReg(adapt, rOFDM0_TRMuxPar, bMaskDWord, 0x000800e4);
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, 0x22204000);
-
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_XAB_RFInterfaceSW, BIT(10), 0x01);
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_XAB_RFInterfaceSW, BIT(26), 0x01);
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_XA_RFInterfaceOE, BIT(10), 0x00);
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_XB_RFInterfaceOE, BIT(10), 0x00);
-
-       /* MAC settings */
-       _PHY_MACSettingCalibration(adapt, IQK_MAC_REG, dm_odm->RFCalibrateInfo.IQK_MAC_backup);
-
-       /* Page B init */
-       /* AP or IQK */
-       rtl8188e_PHY_SetBBReg(adapt, rConfig_AntA, bMaskDWord, 0x0f600000);
-
-
-       /*  IQ calibration setting */
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_IQK, bMaskDWord, 0x80800000);
-       rtl8188e_PHY_SetBBReg(adapt, rTx_IQK, bMaskDWord, 0x01007c00);
-       rtl8188e_PHY_SetBBReg(adapt, rRx_IQK, bMaskDWord, 0x81004800);
-
-       for (i = 0; i < retryCount; i++) {
-               PathAOK = phy_PathA_IQK_8188E(adapt);
-               if (PathAOK == 0x01) {
-                       result[t][0] = (rtl8188e_PHY_QueryBBReg(adapt, rTx_Power_Before_IQK_A, bMaskDWord) & 0x3FF0000) >> 16;
-                       result[t][1] = (rtl8188e_PHY_QueryBBReg(adapt, rTx_Power_After_IQK_A, bMaskDWord) & 0x3FF0000) >> 16;
-                       break;
-               }
-       }
-
-       for (i = 0; i < retryCount; i++) {
-               PathAOK = phy_PathA_RxIQK(adapt);
-               if (PathAOK == 0x03) {
-                       result[t][2] = (rtl8188e_PHY_QueryBBReg(adapt, rRx_Power_Before_IQK_A_2, bMaskDWord) & 0x3FF0000) >> 16;
-                       result[t][3] = (rtl8188e_PHY_QueryBBReg(adapt, rRx_Power_After_IQK_A_2, bMaskDWord) & 0x3FF0000) >> 16;
-                       break;
-               }
-       }
-
-       /* Back to BB mode, load original value */
-       rtl8188e_PHY_SetBBReg(adapt, rFPGA0_IQK, bMaskDWord, 0);
-
-       if (t != 0) {
-               if (!dm_odm->RFCalibrateInfo.bRfPiEnable) {
-                       /*  Switch back BB to SI mode after finish IQ Calibration. */
-                       _PHY_PIModeSwitch(adapt, false);
-               }
-
-               /*  Reload ADDA power saving parameters */
-               reload_adda_reg(adapt, ADDA_REG, dm_odm->RFCalibrateInfo.ADDA_backup, IQK_ADDA_REG_NUM);
-
-               /*  Reload MAC parameters */
-               _PHY_ReloadMACRegisters(adapt, IQK_MAC_REG, dm_odm->RFCalibrateInfo.IQK_MAC_backup);
-
-               reload_adda_reg(adapt, IQK_BB_REG_92C, dm_odm->RFCalibrateInfo.IQK_BB_backup, IQK_BB_REG_NUM);
-
-               /*  Restore RX initial gain */
-               rtl8188e_PHY_SetBBReg(adapt, rFPGA0_XA_LSSIParameter, bMaskDWord, 0x00032ed3);
-
-               /* load 0xe30 IQC default value */
-               rtl8188e_PHY_SetBBReg(adapt, rTx_IQK_Tone_A, bMaskDWord, 0x01008c00);
-               rtl8188e_PHY_SetBBReg(adapt, rRx_IQK_Tone_A, bMaskDWord, 0x01008c00);
-       }
-}
-
-static void phy_LCCalibrate_8188E(struct adapter *adapt)
-{
-       u8 tmpreg;
-       u32 RF_Amode = 0, LC_Cal;
-       int res;
-
-       /* Check continuous TX and Packet TX */
-       res = rtw_read8(adapt, 0xd03, &tmpreg);
-       if (res)
-               return;
-
-       if ((tmpreg & 0x70) != 0)                       /* Deal with contisuous TX case */
-               rtw_write8(adapt, 0xd03, tmpreg & 0x8F);        /* disable all continuous TX */
-       else                                                    /*  Deal with Packet TX case */
-               rtw_write8(adapt, REG_TXPAUSE, 0xFF);           /*  block all queues */
-
-       if ((tmpreg & 0x70) != 0) {
-               /* 1. Read original RF mode */
-               /* Path-A */
-               RF_Amode = rtl8188e_PHY_QueryRFReg(adapt, RF_AC, bMask12Bits);
-
-               /* 2. Set RF mode = standby mode */
-               /* Path-A */
-               rtl8188e_PHY_SetRFReg(adapt, RF_AC, bMask12Bits, (RF_Amode & 0x8FFFF) | 0x10000);
-       }
-
-       /* 3. Read RF reg18 */
-       LC_Cal = rtl8188e_PHY_QueryRFReg(adapt, RF_CHNLBW, bMask12Bits);
-
-       /* 4. Set LC calibration begin  bit15 */
-       rtl8188e_PHY_SetRFReg(adapt, RF_CHNLBW, bMask12Bits, LC_Cal | 0x08000);
-
-       msleep(100);
-
-       /* Restore original situation */
-       if ((tmpreg & 0x70) != 0) {
-               /* Deal with continuous TX case */
-               /* Path-A */
-               rtw_write8(adapt, 0xd03, tmpreg);
-               rtl8188e_PHY_SetRFReg(adapt, RF_AC, bMask12Bits, RF_Amode);
-       } else {
-               /*  Deal with Packet TX case */
-               rtw_write8(adapt, REG_TXPAUSE, 0x00);
-       }
-}
-
-void PHY_IQCalibrate_8188E(struct adapter *adapt, bool recovery)
-{
-       struct hal_data_8188e *pHalData = &adapt->haldata;
-       struct odm_dm_struct *dm_odm = &pHalData->odmpriv;
-       s32 result[4][8];       /* last is final result */
-       u8 i, final_candidate;
-       bool pathaok;
-       s32 RegE94, RegE9C, RegEA4, RegEB4, RegEBC;
-       bool is12simular, is13simular, is23simular;
-       u32 IQK_BB_REG_92C[IQK_BB_REG_NUM] = {
-               rOFDM0_XARxIQImbalance, rOFDM0_XBRxIQImbalance,
-               rOFDM0_ECCAThreshold, rOFDM0_AGCRSSITable,
-               rOFDM0_XATxIQImbalance, rOFDM0_XBTxIQImbalance,
-               rOFDM0_XCTxAFE, rOFDM0_XDTxAFE,
-               rOFDM0_RxIQExtAnta};
-
-       if (recovery) {
-               reload_adda_reg(adapt, IQK_BB_REG_92C, dm_odm->RFCalibrateInfo.IQK_BB_backup_recover, 9);
-               return;
-       }
-
-       for (i = 0; i < 8; i++) {
-               result[0][i] = 0;
-               result[1][i] = 0;
-               result[2][i] = 0;
-               if ((i == 0) || (i == 2) || (i == 4)  || (i == 6))
-                       result[3][i] = 0x100;
-               else
-                       result[3][i] = 0;
-       }
-       final_candidate = 0xff;
-       pathaok = false;
-       is12simular = false;
-       is23simular = false;
-       is13simular = false;
-
-       for (i = 0; i < 3; i++) {
-               phy_IQCalibrate_8188E(adapt, result, i);
-
-               if (i == 1) {
-                       is12simular = phy_SimularityCompare_8188E(adapt, result, 0, 1);
-                       if (is12simular) {
-                               final_candidate = 0;
-                               break;
-                       }
-               }
-
-               if (i == 2) {
-                       is13simular = phy_SimularityCompare_8188E(adapt, result, 0, 2);
-                       if (is13simular) {
-                               final_candidate = 0;
-
-                               break;
-                       }
-                       is23simular = phy_SimularityCompare_8188E(adapt, result, 1, 2);
-                       if (is23simular) {
-                               final_candidate = 1;
-                       } else {
-                               final_candidate = 3;
-                       }
-               }
-       }
-
-       for (i = 0; i < 4; i++) {
-               RegE94 = result[i][0];
-               RegE9C = result[i][1];
-               RegEA4 = result[i][2];
-               RegEB4 = result[i][4];
-               RegEBC = result[i][5];
-       }
-
-       if (final_candidate != 0xff) {
-               RegE94 = result[final_candidate][0];
-               RegE9C = result[final_candidate][1];
-               RegEA4 = result[final_candidate][2];
-               RegEB4 = result[final_candidate][4];
-               RegEBC = result[final_candidate][5];
-               dm_odm->RFCalibrateInfo.RegE94 = RegE94;
-               dm_odm->RFCalibrateInfo.RegE9C = RegE9C;
-               dm_odm->RFCalibrateInfo.RegEB4 = RegEB4;
-               dm_odm->RFCalibrateInfo.RegEBC = RegEBC;
-               pathaok = true;
-       } else {
-               dm_odm->RFCalibrateInfo.RegE94 = 0x100;
-               dm_odm->RFCalibrateInfo.RegEB4 = 0x100; /* X default value */
-               dm_odm->RFCalibrateInfo.RegE9C = 0x0;
-               dm_odm->RFCalibrateInfo.RegEBC = 0x0;   /* Y default value */
-       }
-       if (RegE94 != 0)
-               patha_fill_iqk(adapt, pathaok, result, final_candidate, (RegEA4 == 0));
-
-       _PHY_SaveADDARegisters(adapt, IQK_BB_REG_92C, dm_odm->RFCalibrateInfo.IQK_BB_backup_recover, 9);
-}
-
-void PHY_LCCalibrate_8188E(struct adapter *adapt)
-{
-       u32 timeout = 2000, timecount = 0;
-       struct hal_data_8188e *pHalData = &adapt->haldata;
-       struct odm_dm_struct *dm_odm = &pHalData->odmpriv;
-
-       while (*dm_odm->pbScanInProcess && timecount < timeout) {
-               mdelay(50);
-               timecount += 50;
-       }
-
-       phy_LCCalibrate_8188E(adapt);
-}
diff --git a/drivers/staging/r8188eu/hal/HalPwrSeqCmd.c b/drivers/staging/r8188eu/hal/HalPwrSeqCmd.c
deleted file mode 100644 (file)
index 6c0b136..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/HalPwrSeqCmd.h"
-
-#define PWR_CMD_WRITE                  0x01
-     /*  offset: the read register offset */
-     /*  msk: the mask of the write bits */
-     /*  value: write value */
-     /*  note: driver shall implement this cmd by read & msk after write */
-
-#define PWR_CMD_POLLING                        0x02
-     /*  offset: the read register offset */
-     /*  msk: the mask of the polled value */
-     /*  value: the value to be polled, masked by the msd field. */
-     /*  note: driver shall implement this cmd by */
-     /*  do{ */
-     /*  if ( (Read(offset) & msk) == (value & msk) ) */
-     /*  break; */
-     /*  } while (not timeout); */
-
-#define PWR_CMD_DELAY                  0x03
-     /*  offset: the value to delay (in us) */
-     /*  msk: N/A */
-     /*  value: N/A */
-
-struct wl_pwr_cfg {
-       u16 offset;
-       u8 cmd:4;
-       u8 msk;
-       u8 value;
-};
-
-#define GET_PWR_CFG_OFFSET(__PWR_CMD)          __PWR_CMD.offset
-#define GET_PWR_CFG_CMD(__PWR_CMD)             __PWR_CMD.cmd
-#define GET_PWR_CFG_MASK(__PWR_CMD)            __PWR_CMD.msk
-#define GET_PWR_CFG_VALUE(__PWR_CMD)           __PWR_CMD.value
-
-static struct wl_pwr_cfg rtl8188E_power_on_flow[] = {
-       { 0x0006, PWR_CMD_POLLING, BIT(1), BIT(1) },
-       { 0x0002, PWR_CMD_WRITE, BIT(0) | BIT(1), 0 }, /* reset BB */
-       { 0x0026, PWR_CMD_WRITE, BIT(7), BIT(7) }, /* schmitt trigger */
-       { 0x0005, PWR_CMD_WRITE, BIT(7), 0 }, /* disable HWPDN (control by DRV)*/
-       { 0x0005, PWR_CMD_WRITE, BIT(4) | BIT(3), 0 }, /* disable WL suspend*/
-       { 0x0005, PWR_CMD_WRITE, BIT(0), BIT(0) },
-       { 0x0005, PWR_CMD_POLLING, BIT(0), 0 },
-       { 0x0023, PWR_CMD_WRITE, BIT(4), 0 },
-};
-
-static struct wl_pwr_cfg rtl8188E_card_disable_flow[] = {
-       { 0x001F, PWR_CMD_WRITE, 0xFF, 0 }, /* turn off RF */
-       { 0x0023, PWR_CMD_WRITE, BIT(4), BIT(4) }, /* LDO Sleep mode */
-       { 0x0005, PWR_CMD_WRITE, BIT(1), BIT(1) }, /* turn off MAC by HW state machine */
-       { 0x0005, PWR_CMD_POLLING, BIT(1), 0 },
-       { 0x0026, PWR_CMD_WRITE, BIT(7), BIT(7) }, /* schmitt trigger */
-       { 0x0005, PWR_CMD_WRITE, BIT(3) | BIT(4), BIT(3) }, /* enable WL suspend */
-       { 0x0007, PWR_CMD_WRITE, 0xFF, 0 }, /* enable bandgap mbias in suspend */
-       { 0x0041, PWR_CMD_WRITE, BIT(4), 0 }, /* Clear SIC_EN register */
-       { 0xfe10, PWR_CMD_WRITE, BIT(4), BIT(4) }, /* Set USB suspend enable local register */
-};
-
-/* This is used by driver for LPSRadioOff Procedure, not for FW LPS Step */
-static struct wl_pwr_cfg rtl8188E_enter_lps_flow[] = {
-       { 0x0522, PWR_CMD_WRITE, 0xFF, 0x7F },/* Tx Pause */
-       { 0x05F8, PWR_CMD_POLLING, 0xFF, 0 }, /* Should be zero if no packet is transmitted */
-       { 0x05F9, PWR_CMD_POLLING, 0xFF, 0 }, /* Should be zero if no packet is transmitted */
-       { 0x05FA, PWR_CMD_POLLING, 0xFF, 0 }, /* Should be zero if no packet is transmitted */
-       { 0x05FB, PWR_CMD_POLLING, 0xFF, 0 }, /* Should be zero if no packet is transmitted */
-       { 0x0002, PWR_CMD_WRITE, BIT(0), 0 }, /* CCK and OFDM are disabled, clocks are gated */
-       { 0x0002, PWR_CMD_DELAY, 0, 0 },
-       { 0x0100, PWR_CMD_WRITE, 0xFF, 0x3F }, /* Reset MAC TRX */
-       { 0x0101, PWR_CMD_WRITE, BIT(1), 0 }, /* check if removed later */
-       { 0x0553, PWR_CMD_WRITE, BIT(5), BIT(5) }, /* Respond TxOK to scheduler */
-};
-
-u8 HalPwrSeqCmdParsing(struct adapter *padapter, enum r8188eu_pwr_seq seq)
-{
-       struct wl_pwr_cfg pwrcfgcmd = {0};
-       struct wl_pwr_cfg *pwrseqcmd;
-       u8 poll_bit = false;
-       u8 idx, num_steps;
-       u8 value = 0;
-       u32 offset = 0;
-       u32 poll_count = 0; /*  polling autoload done. */
-       u32 max_poll_count = 5000;
-       int res;
-
-       switch (seq) {
-       case PWR_ON_FLOW:
-               pwrseqcmd = rtl8188E_power_on_flow;
-               num_steps = ARRAY_SIZE(rtl8188E_power_on_flow);
-               break;
-       case DISABLE_FLOW:
-               pwrseqcmd = rtl8188E_card_disable_flow;
-               num_steps = ARRAY_SIZE(rtl8188E_card_disable_flow);
-               break;
-       case LPS_ENTER_FLOW:
-               pwrseqcmd = rtl8188E_enter_lps_flow;
-               num_steps = ARRAY_SIZE(rtl8188E_enter_lps_flow);
-               break;
-       default:
-               return false;
-       }
-
-       for (idx = 0; idx < num_steps; idx++) {
-               pwrcfgcmd = pwrseqcmd[idx];
-
-               switch (GET_PWR_CFG_CMD(pwrcfgcmd)) {
-               case PWR_CMD_WRITE:
-                       offset = GET_PWR_CFG_OFFSET(pwrcfgcmd);
-
-                       /*  Read the value from system register */
-                       res = rtw_read8(padapter, offset, &value);
-                       if (res)
-                               return false;
-
-                       value &= ~(GET_PWR_CFG_MASK(pwrcfgcmd));
-                       value |= (GET_PWR_CFG_VALUE(pwrcfgcmd) & GET_PWR_CFG_MASK(pwrcfgcmd));
-
-                       /*  Write the value back to system register */
-                       rtw_write8(padapter, offset, value);
-                       break;
-               case PWR_CMD_POLLING:
-                       poll_bit = false;
-                       offset = GET_PWR_CFG_OFFSET(pwrcfgcmd);
-                       do {
-                               res = rtw_read8(padapter, offset, &value);
-                               if (res)
-                                       return false;
-
-                               value &= GET_PWR_CFG_MASK(pwrcfgcmd);
-                               if (value == (GET_PWR_CFG_VALUE(pwrcfgcmd) & GET_PWR_CFG_MASK(pwrcfgcmd)))
-                                       poll_bit = true;
-                               else
-                                       udelay(10);
-
-                               if (poll_count++ > max_poll_count)
-                                       return false;
-                       } while (!poll_bit);
-                       break;
-               case PWR_CMD_DELAY:
-                       udelay(GET_PWR_CFG_OFFSET(pwrcfgcmd));
-                       break;
-               default:
-                       break;
-               }
-       }
-       return true;
-}
diff --git a/drivers/staging/r8188eu/hal/hal_com.c b/drivers/staging/r8188eu/hal/hal_com.c
deleted file mode 100644 (file)
index 33967eb..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-
-#include "../include/hal_intf.h"
-#include "../include/hal_com.h"
-#include "../include/rtl8188e_hal.h"
-
-#define _HAL_INIT_C_
-
-#define        CHAN_PLAN_HW    0x80
-
-u8 /* return the final channel plan decision */
-hal_com_get_channel_plan(struct adapter *padapter, u8 hw_channel_plan,
-                        u8 sw_channel_plan, u8 def_channel_plan,
-                        bool load_fail)
-{
-       u8 sw_cfg;
-       u8 chnlplan;
-
-       sw_cfg = true;
-       if (!load_fail) {
-               if (!rtw_is_channel_plan_valid(sw_channel_plan))
-                       sw_cfg = false;
-               if (hw_channel_plan & CHAN_PLAN_HW)
-                       sw_cfg = false;
-       }
-
-       if (sw_cfg)
-               chnlplan = sw_channel_plan;
-       else
-               chnlplan = hw_channel_plan & (~CHAN_PLAN_HW);
-
-       if (!rtw_is_channel_plan_valid(chnlplan))
-               chnlplan = def_channel_plan;
-
-       return chnlplan;
-}
-
-u8 MRateToHwRate(u8 rate)
-{
-       u8 ret = DESC_RATE1M;
-
-       switch (rate) {
-               /*  CCK and OFDM non-HT rates */
-       case IEEE80211_CCK_RATE_1MB:
-               ret = DESC_RATE1M;
-               break;
-       case IEEE80211_CCK_RATE_2MB:
-               ret = DESC_RATE2M;
-               break;
-       case IEEE80211_CCK_RATE_5MB:
-               ret = DESC_RATE5_5M;
-               break;
-       case IEEE80211_CCK_RATE_11MB:
-               ret = DESC_RATE11M;
-               break;
-       case IEEE80211_OFDM_RATE_6MB:
-               ret = DESC_RATE6M;
-               break;
-       case IEEE80211_OFDM_RATE_9MB:
-               ret = DESC_RATE9M;
-               break;
-       case IEEE80211_OFDM_RATE_12MB:
-               ret = DESC_RATE12M;
-               break;
-       case IEEE80211_OFDM_RATE_18MB:
-               ret = DESC_RATE18M;
-               break;
-       case IEEE80211_OFDM_RATE_24MB:
-               ret = DESC_RATE24M;
-               break;
-       case IEEE80211_OFDM_RATE_36MB:
-               ret = DESC_RATE36M;
-               break;
-       case IEEE80211_OFDM_RATE_48MB:
-               ret = DESC_RATE48M;
-               break;
-       case IEEE80211_OFDM_RATE_54MB:
-               ret = DESC_RATE54M;
-               break;
-       default:
-               break;
-       }
-       return ret;
-}
-
-void HalSetBrateCfg(struct adapter *adapt, u8 *brates, u16 *rate_cfg)
-{
-       u8 i, is_brate, brate;
-
-       for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
-               is_brate = brates[i] & IEEE80211_BASIC_RATE_MASK;
-               brate = brates[i] & 0x7f;
-
-               if (is_brate) {
-                       switch (brate) {
-                       case IEEE80211_CCK_RATE_1MB:
-                               *rate_cfg |= RATE_1M;
-                               break;
-                       case IEEE80211_CCK_RATE_2MB:
-                               *rate_cfg |= RATE_2M;
-                               break;
-                       case IEEE80211_CCK_RATE_5MB:
-                               *rate_cfg |= RATE_5_5M;
-                               break;
-                       case IEEE80211_CCK_RATE_11MB:
-                               *rate_cfg |= RATE_11M;
-                               break;
-                       case IEEE80211_OFDM_RATE_6MB:
-                               *rate_cfg |= RATE_6M;
-                               break;
-                       case IEEE80211_OFDM_RATE_9MB:
-                               *rate_cfg |= RATE_9M;
-                               break;
-                       case IEEE80211_OFDM_RATE_12MB:
-                               *rate_cfg |= RATE_12M;
-                               break;
-                       case IEEE80211_OFDM_RATE_18MB:
-                               *rate_cfg |= RATE_18M;
-                               break;
-                       case IEEE80211_OFDM_RATE_24MB:
-                               *rate_cfg |= RATE_24M;
-                               break;
-                       case IEEE80211_OFDM_RATE_36MB:
-                               *rate_cfg |= RATE_36M;
-                               break;
-                       case IEEE80211_OFDM_RATE_48MB:
-                               *rate_cfg |= RATE_48M;
-                               break;
-                       case IEEE80211_OFDM_RATE_54MB:
-                               *rate_cfg |= RATE_54M;
-                               break;
-                       }
-               }
-       }
-}
diff --git a/drivers/staging/r8188eu/hal/hal_intf.c b/drivers/staging/r8188eu/hal/hal_intf.c
deleted file mode 100644 (file)
index 13790e3..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#define _HAL_INTF_C_
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/hal_intf.h"
-
-uint rtw_hal_init(struct adapter *adapt)
-{
-       adapt->hw_init_completed = false;
-
-       if (rtl8188eu_hal_init(adapt) != _SUCCESS)
-               return _FAIL;
-
-       adapt->hw_init_completed = true;
-
-       if (adapt->registrypriv.notch_filter == 1)
-               hal_notch_filter_8188e(adapt, 1);
-
-       return _SUCCESS;
-}
-
-uint rtw_hal_deinit(struct adapter *adapt)
-{
-       uint    status = _SUCCESS;
-
-       status = rtl8188eu_hal_deinit(adapt);
-
-       if (status == _SUCCESS)
-               adapt->hw_init_completed = false;
-
-       return status;
-}
-
-void rtw_hal_update_ra_mask(struct adapter *adapt, u32 mac_id, u8 rssi_level)
-{
-       struct mlme_priv *pmlmepriv = &adapt->mlmepriv;
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               struct sta_info *psta = NULL;
-               struct sta_priv *pstapriv = &adapt->stapriv;
-               if (mac_id >= 2)
-                       psta = pstapriv->sta_aid[(mac_id - 1) - 1];
-               if (psta)
-                       add_RATid(adapt, psta, 0);/* todo: based on rssi_level*/
-       } else {
-               UpdateHalRAMask8188EUsb(adapt, mac_id, rssi_level);
-       }
-}
diff --git a/drivers/staging/r8188eu/hal/odm.c b/drivers/staging/r8188eu/hal/odm.c
deleted file mode 100644 (file)
index 94f9b12..0000000
+++ /dev/null
@@ -1,821 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/drv_types.h"
-
-/* avoid to warn in FreeBSD ==> To DO modify */
-static u32 EDCAParam[HT_IOT_PEER_MAX][3] = {
-       /*  UL                  DL */
-       {0x5ea42b, 0x5ea42b, 0x5ea42b}, /* 0:unknown AP */
-       {0xa44f, 0x5ea44f, 0x5e431c}, /*  1:realtek AP */
-       {0x5ea42b, 0x5ea42b, 0x5ea42b}, /*  2:unknown AP => realtek_92SE */
-       {0x5ea32b, 0x5ea42b, 0x5e4322}, /*  3:broadcom AP */
-       {0x5ea422, 0x00a44f, 0x00a44f}, /*  4:ralink AP */
-       {0x5ea322, 0x00a630, 0x00a44f}, /*  5:atheros AP */
-       {0x5e4322, 0x5e4322, 0x5e4322},/*  6:cisco AP */
-       {0x5ea44f, 0x00a44f, 0x5ea42b}, /*  8:marvell AP */
-       {0x5ea42b, 0x5ea42b, 0x5ea42b}, /*  10:unknown AP=> 92U AP */
-       {0x5ea42b, 0xa630, 0x5e431c}, /*  11:airgocap AP */
-};
-
-/*  Global var */
-u32 OFDMSwingTable[OFDM_TABLE_SIZE_92D] = {
-       0x7f8001fe, /*  0, +6.0dB */
-       0x788001e2, /*  1, +5.5dB */
-       0x71c001c7, /*  2, +5.0dB */
-       0x6b8001ae, /*  3, +4.5dB */
-       0x65400195, /*  4, +4.0dB */
-       0x5fc0017f, /*  5, +3.5dB */
-       0x5a400169, /*  6, +3.0dB */
-       0x55400155, /*  7, +2.5dB */
-       0x50800142, /*  8, +2.0dB */
-       0x4c000130, /*  9, +1.5dB */
-       0x47c0011f, /*  10, +1.0dB */
-       0x43c0010f, /*  11, +0.5dB */
-       0x40000100, /*  12, +0dB */
-       0x3c8000f2, /*  13, -0.5dB */
-       0x390000e4, /*  14, -1.0dB */
-       0x35c000d7, /*  15, -1.5dB */
-       0x32c000cb, /*  16, -2.0dB */
-       0x300000c0, /*  17, -2.5dB */
-       0x2d4000b5, /*  18, -3.0dB */
-       0x2ac000ab, /*  19, -3.5dB */
-       0x288000a2, /*  20, -4.0dB */
-       0x26000098, /*  21, -4.5dB */
-       0x24000090, /*  22, -5.0dB */
-       0x22000088, /*  23, -5.5dB */
-       0x20000080, /*  24, -6.0dB */
-       0x1e400079, /*  25, -6.5dB */
-       0x1c800072, /*  26, -7.0dB */
-       0x1b00006c, /*  27. -7.5dB */
-       0x19800066, /*  28, -8.0dB */
-       0x18000060, /*  29, -8.5dB */
-       0x16c0005b, /*  30, -9.0dB */
-       0x15800056, /*  31, -9.5dB */
-       0x14400051, /*  32, -10.0dB */
-       0x1300004c, /*  33, -10.5dB */
-       0x12000048, /*  34, -11.0dB */
-       0x11000044, /*  35, -11.5dB */
-       0x10000040, /*  36, -12.0dB */
-       0x0f00003c,/*  37, -12.5dB */
-       0x0e400039,/*  38, -13.0dB */
-       0x0d800036,/*  39, -13.5dB */
-       0x0cc00033,/*  40, -14.0dB */
-       0x0c000030,/*  41, -14.5dB */
-       0x0b40002d,/*  42, -15.0dB */
-};
-
-u8 cck_swing_table[CCK_TABLE_SIZE][8] = {
-       {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, /*  0, +0dB */
-       {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /*  1, -0.5dB */
-       {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /*  2, -1.0dB */
-       {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /*  3, -1.5dB */
-       {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /*  4, -2.0dB */
-       {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /*  5, -2.5dB */
-       {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /*  6, -3.0dB */
-       {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /*  7, -3.5dB */
-       {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /*  8, -4.0dB */
-       {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /*  9, -4.5dB */
-       {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /*  10, -5.0dB */
-       {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /*  11, -5.5dB */
-       {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, /*  12, -6.0dB */
-       {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /*  13, -6.5dB */
-       {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /*  14, -7.0dB */
-       {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /*  15, -7.5dB */
-       {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /*  16, -8.0dB */
-       {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /*  17, -8.5dB */
-       {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /*  18, -9.0dB */
-       {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /*  19, -9.5dB */
-       {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /*  20, -10.0dB */
-       {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /*  21, -10.5dB */
-       {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /*  22, -11.0dB */
-       {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /*  23, -11.5dB */
-       {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /*  24, -12.0dB */
-       {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /*  25, -12.5dB */
-       {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /*  26, -13.0dB */
-       {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /*  27, -13.5dB */
-       {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /*  28, -14.0dB */
-       {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /*  29, -14.5dB */
-       {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /*  30, -15.0dB */
-       {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /*  31, -15.5dB */
-       {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}        /*  32, -16.0dB */
-};
-
-#define                RxDefaultAnt1           0x65a9
-#define        RxDefaultAnt2           0x569a
-
-static void odm_DIGInit(struct odm_dm_struct *pDM_Odm)
-{
-       struct rtw_dig *pDM_DigTable = &pDM_Odm->DM_DigTable;
-       struct adapter *adapter = pDM_Odm->Adapter;
-
-       pDM_DigTable->CurIGValue = (u8)rtl8188e_PHY_QueryBBReg(adapter, ODM_REG_IGI_A_11N, ODM_BIT_IGI_11N);
-       pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;
-       pDM_DigTable->rx_gain_range_min = DM_DIG_MIN_NIC;
-       pDM_DigTable->CurCCK_CCAThres = 0x83;
-       pDM_DigTable->ForbiddenIGI = DM_DIG_MIN_NIC;
-       pDM_DigTable->LargeFAHit = 0;
-       pDM_DigTable->Recover_cnt = 0;
-       pDM_DigTable->DIG_Dynamic_MIN_0 = DM_DIG_MIN_NIC;
-       pDM_DigTable->bMediaConnect_0 = false;
-
-       /* To Initialize pDM_Odm->bDMInitialGainEnable == false to avoid DIG error */
-       pDM_Odm->bDMInitialGainEnable = true;
-}
-
-static void odm_DIG(struct odm_dm_struct *pDM_Odm)
-{
-       struct rtw_dig *pDM_DigTable = &pDM_Odm->DM_DigTable;
-       struct false_alarm_stats *pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;
-       u8 DIG_Dynamic_MIN;
-       u8 DIG_MaxOfMin;
-       bool FirstConnect, FirstDisConnect;
-       u8 dm_dig_max, dm_dig_min;
-       u8 CurrentIGI = pDM_DigTable->CurIGValue;
-
-       if (*pDM_Odm->pbScanInProcess)
-               return;
-
-       /* add by Neil Chen to avoid PSD is processing */
-       if (!pDM_Odm->bDMInitialGainEnable)
-               return;
-
-       DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_0;
-       FirstConnect = (pDM_Odm->bLinked) && (!pDM_DigTable->bMediaConnect_0);
-       FirstDisConnect = (!pDM_Odm->bLinked) && (pDM_DigTable->bMediaConnect_0);
-
-       /* 1 Boundary Decision */
-       dm_dig_max = DM_DIG_MAX_NIC;
-       dm_dig_min = DM_DIG_MIN_NIC;
-       DIG_MaxOfMin = DM_DIG_MAX_AP;
-
-       if (pDM_Odm->bLinked) {
-               /* 2 8723A Series, offset need to be 10 */
-               /* 2 Modify DIG upper bound */
-               if ((pDM_Odm->RSSI_Min + 20) > dm_dig_max)
-                       pDM_DigTable->rx_gain_range_max = dm_dig_max;
-               else if ((pDM_Odm->RSSI_Min + 20) < dm_dig_min)
-                       pDM_DigTable->rx_gain_range_max = dm_dig_min;
-               else
-                       pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + 20;
-               /* 2 Modify DIG lower bound */
-               if (pDM_Odm->bOneEntryOnly) {
-                       if (pDM_Odm->RSSI_Min < dm_dig_min)
-                               DIG_Dynamic_MIN = dm_dig_min;
-                       else if (pDM_Odm->RSSI_Min > DIG_MaxOfMin)
-                               DIG_Dynamic_MIN = DIG_MaxOfMin;
-                       else
-                               DIG_Dynamic_MIN = pDM_Odm->RSSI_Min;
-               } else if (pDM_Odm->SupportAbility & ODM_BB_ANT_DIV) {
-                       /* 1 Lower Bound for 88E AntDiv */
-                       if (pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)
-                               DIG_Dynamic_MIN = (u8)pDM_DigTable->AntDiv_RSSI_max;
-               } else {
-                       DIG_Dynamic_MIN = dm_dig_min;
-               }
-       } else {
-               pDM_DigTable->rx_gain_range_max = dm_dig_max;
-               DIG_Dynamic_MIN = dm_dig_min;
-       }
-
-       /* 1 Modify DIG lower bound, deal with abnormally large false alarm */
-       if (pFalseAlmCnt->Cnt_all > 10000) {
-               if (pDM_DigTable->LargeFAHit != 3)
-                       pDM_DigTable->LargeFAHit++;
-               if (pDM_DigTable->ForbiddenIGI < CurrentIGI) {
-                       pDM_DigTable->ForbiddenIGI = CurrentIGI;
-                       pDM_DigTable->LargeFAHit = 1;
-               }
-
-               if (pDM_DigTable->LargeFAHit >= 3) {
-                       if ((pDM_DigTable->ForbiddenIGI + 1) > pDM_DigTable->rx_gain_range_max)
-                               pDM_DigTable->rx_gain_range_min = pDM_DigTable->rx_gain_range_max;
-                       else
-                               pDM_DigTable->rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 1);
-                       pDM_DigTable->Recover_cnt = 3600; /* 3600=2hr */
-               }
-
-       } else {
-               /* Recovery mechanism for IGI lower bound */
-               if (pDM_DigTable->Recover_cnt != 0) {
-                       pDM_DigTable->Recover_cnt--;
-               } else {
-                       if (pDM_DigTable->LargeFAHit < 3) {
-                               if ((pDM_DigTable->ForbiddenIGI - 1) < DIG_Dynamic_MIN) { /* DM_DIG_MIN) */
-                                       pDM_DigTable->ForbiddenIGI = DIG_Dynamic_MIN; /* DM_DIG_MIN; */
-                                       pDM_DigTable->rx_gain_range_min = DIG_Dynamic_MIN; /* DM_DIG_MIN; */
-                               } else {
-                                       pDM_DigTable->ForbiddenIGI--;
-                                       pDM_DigTable->rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 1);
-                               }
-                       } else {
-                               pDM_DigTable->LargeFAHit = 0;
-                       }
-               }
-       }
-
-       /* 1 Adjust initial gain by false alarm */
-       if (pDM_Odm->bLinked) {
-               if (FirstConnect) {
-                       CurrentIGI = pDM_Odm->RSSI_Min;
-               } else {
-                       if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH2)
-                               CurrentIGI = CurrentIGI + 4;/* pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+2; */
-                       else if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH1)
-                               CurrentIGI = CurrentIGI + 2;/* pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+1; */
-                       else if (pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH0)
-                               CurrentIGI = CurrentIGI - 2;/* pDM_DigTable->CurIGValue =pDM_DigTable->PreIGValue-1; */
-               }
-       } else {
-               if (FirstDisConnect) {
-                       CurrentIGI = pDM_DigTable->rx_gain_range_min;
-               } else {
-                       /* 2012.03.30 LukeLee: enable DIG before link but with very high thresholds */
-                       if (pFalseAlmCnt->Cnt_all > 10000)
-                               CurrentIGI = CurrentIGI + 2;/* pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+2; */
-                       else if (pFalseAlmCnt->Cnt_all > 8000)
-                               CurrentIGI = CurrentIGI + 1;/* pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+1; */
-                       else if (pFalseAlmCnt->Cnt_all < 500)
-                               CurrentIGI = CurrentIGI - 1;/* pDM_DigTable->CurIGValue =pDM_DigTable->PreIGValue-1; */
-               }
-       }
-       /* 1 Check initial gain by upper/lower bound */
-       if (CurrentIGI > pDM_DigTable->rx_gain_range_max)
-               CurrentIGI = pDM_DigTable->rx_gain_range_max;
-       if (CurrentIGI < pDM_DigTable->rx_gain_range_min)
-               CurrentIGI = pDM_DigTable->rx_gain_range_min;
-
-       /* 2 High power RSSI threshold */
-
-       ODM_Write_DIG(pDM_Odm, CurrentIGI);/* ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue); */
-       pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;
-       pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;
-}
-
-static void odm_CommonInfoSelfInit(struct odm_dm_struct *pDM_Odm)
-{
-       struct adapter *adapter = pDM_Odm->Adapter;
-
-       pDM_Odm->bCckHighPower = (bool)rtl8188e_PHY_QueryBBReg(adapter, 0x824, BIT(9));
-       pDM_Odm->RFPathRxEnable = (u8)rtl8188e_PHY_QueryBBReg(adapter, 0xc04, 0x0F);
-}
-
-static void odm_CommonInfoSelfUpdate(struct odm_dm_struct *pDM_Odm)
-{
-       u8 EntryCnt = 0;
-       u8 i;
-       struct sta_info *pEntry;
-
-       if (*pDM_Odm->pBandWidth == HT_CHANNEL_WIDTH_40) {
-               if (*pDM_Odm->pSecChOffset == 1)
-                       pDM_Odm->ControlChannel = *pDM_Odm->pChannel - 2;
-               else if (*pDM_Odm->pSecChOffset == 2)
-                       pDM_Odm->ControlChannel = *pDM_Odm->pChannel + 2;
-       } else {
-               pDM_Odm->ControlChannel = *pDM_Odm->pChannel;
-       }
-
-       for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {
-               pEntry = pDM_Odm->pODM_StaInfo[i];
-               if (IS_STA_VALID(pEntry))
-                       EntryCnt++;
-       }
-       if (EntryCnt == 1)
-               pDM_Odm->bOneEntryOnly = true;
-       else
-               pDM_Odm->bOneEntryOnly = false;
-}
-
-static void odm_RateAdaptiveMaskInit(struct odm_dm_struct *pDM_Odm)
-{
-       struct odm_rate_adapt *pOdmRA = &pDM_Odm->RateAdaptive;
-
-       pOdmRA->RATRState = DM_RATR_STA_INIT;
-       pOdmRA->HighRSSIThresh = 50;
-       pOdmRA->LowRSSIThresh = 20;
-}
-
-static void odm_RefreshRateAdaptiveMask(struct odm_dm_struct *pDM_Odm)
-{
-       u8 i;
-       struct adapter *pAdapter = pDM_Odm->Adapter;
-
-       if (pAdapter->bDriverStopped)
-               return;
-
-       for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {
-               struct sta_info *pstat = pDM_Odm->pODM_StaInfo[i];
-
-               if (IS_STA_VALID(pstat)) {
-                       if (ODM_RAStateCheck(pDM_Odm, pstat->rssi_stat.UndecoratedSmoothedPWDB, false, &pstat->rssi_level))
-                               rtw_hal_update_ra_mask(pAdapter, i, pstat->rssi_level);
-               }
-       }
-}
-
-static void odm_DynamicBBPowerSavingInit(struct odm_dm_struct *pDM_Odm)
-{
-       struct rtl_ps *pDM_PSTable = &pDM_Odm->DM_PSTable;
-
-       pDM_PSTable->pre_rf_state = RF_MAX;
-       pDM_PSTable->cur_rf_state = RF_MAX;
-       pDM_PSTable->initialize = 0;
-}
-
-static void odm_FalseAlarmCounterStatistics(struct odm_dm_struct *pDM_Odm)
-{
-       u32 ret_value;
-       struct false_alarm_stats *FalseAlmCnt = &pDM_Odm->FalseAlmCnt;
-       struct adapter *adapter = pDM_Odm->Adapter;
-
-       /* hold ofdm counter */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_OFDM_FA_HOLDC_11N, BIT(31), 1); /* hold page C counter */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_OFDM_FA_RSTD_11N, BIT(31), 1); /* hold page D counter */
-
-       ret_value = rtl8188e_PHY_QueryBBReg(adapter, ODM_REG_OFDM_FA_TYPE1_11N, bMaskDWord);
-       FalseAlmCnt->Cnt_Fast_Fsync = (ret_value & 0xffff);
-       FalseAlmCnt->Cnt_SB_Search_fail = ((ret_value & 0xffff0000) >> 16);
-       ret_value = rtl8188e_PHY_QueryBBReg(adapter, ODM_REG_OFDM_FA_TYPE2_11N, bMaskDWord);
-       FalseAlmCnt->Cnt_OFDM_CCA = (ret_value & 0xffff);
-       FalseAlmCnt->Cnt_Parity_Fail = ((ret_value & 0xffff0000) >> 16);
-       ret_value = rtl8188e_PHY_QueryBBReg(adapter, ODM_REG_OFDM_FA_TYPE3_11N, bMaskDWord);
-       FalseAlmCnt->Cnt_Rate_Illegal = (ret_value & 0xffff);
-       FalseAlmCnt->Cnt_Crc8_fail = ((ret_value & 0xffff0000) >> 16);
-       ret_value = rtl8188e_PHY_QueryBBReg(adapter, ODM_REG_OFDM_FA_TYPE4_11N, bMaskDWord);
-       FalseAlmCnt->Cnt_Mcs_fail = (ret_value & 0xffff);
-
-       FalseAlmCnt->Cnt_Ofdm_fail = FalseAlmCnt->Cnt_Parity_Fail + FalseAlmCnt->Cnt_Rate_Illegal +
-                                    FalseAlmCnt->Cnt_Crc8_fail + FalseAlmCnt->Cnt_Mcs_fail +
-                                    FalseAlmCnt->Cnt_Fast_Fsync + FalseAlmCnt->Cnt_SB_Search_fail;
-
-       ret_value = rtl8188e_PHY_QueryBBReg(adapter, ODM_REG_SC_CNT_11N, bMaskDWord);
-       FalseAlmCnt->Cnt_BW_LSC = (ret_value & 0xffff);
-       FalseAlmCnt->Cnt_BW_USC = ((ret_value & 0xffff0000) >> 16);
-
-       /* hold cck counter */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_CCK_FA_RST_11N, BIT(12), 1);
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_CCK_FA_RST_11N, BIT(14), 1);
-
-       ret_value = rtl8188e_PHY_QueryBBReg(adapter, ODM_REG_CCK_FA_LSB_11N, bMaskByte0);
-       FalseAlmCnt->Cnt_Cck_fail = ret_value;
-       ret_value = rtl8188e_PHY_QueryBBReg(adapter, ODM_REG_CCK_FA_MSB_11N, bMaskByte3);
-       FalseAlmCnt->Cnt_Cck_fail +=  (ret_value & 0xff) << 8;
-
-       ret_value = rtl8188e_PHY_QueryBBReg(adapter, ODM_REG_CCK_CCA_CNT_11N, bMaskDWord);
-       FalseAlmCnt->Cnt_CCK_CCA = ((ret_value & 0xFF) << 8) | ((ret_value & 0xFF00) >> 8);
-
-       FalseAlmCnt->Cnt_all = (FalseAlmCnt->Cnt_Fast_Fsync +
-                               FalseAlmCnt->Cnt_SB_Search_fail +
-                               FalseAlmCnt->Cnt_Parity_Fail +
-                               FalseAlmCnt->Cnt_Rate_Illegal +
-                               FalseAlmCnt->Cnt_Crc8_fail +
-                               FalseAlmCnt->Cnt_Mcs_fail +
-                               FalseAlmCnt->Cnt_Cck_fail);
-
-       FalseAlmCnt->Cnt_CCA_all = FalseAlmCnt->Cnt_OFDM_CCA + FalseAlmCnt->Cnt_CCK_CCA;
-}
-
-static void odm_CCKPacketDetectionThresh(struct odm_dm_struct *pDM_Odm)
-{
-       u8 CurCCK_CCAThres;
-       struct false_alarm_stats *FalseAlmCnt = &pDM_Odm->FalseAlmCnt;
-
-       if (pDM_Odm->bLinked) {
-               if (pDM_Odm->RSSI_Min > 25) {
-                       CurCCK_CCAThres = 0xcd;
-               } else if ((pDM_Odm->RSSI_Min <= 25) && (pDM_Odm->RSSI_Min > 10)) {
-                       CurCCK_CCAThres = 0x83;
-               } else {
-                       if (FalseAlmCnt->Cnt_Cck_fail > 1000)
-                               CurCCK_CCAThres = 0x83;
-                       else
-                               CurCCK_CCAThres = 0x40;
-               }
-       } else {
-               if (FalseAlmCnt->Cnt_Cck_fail > 1000)
-                       CurCCK_CCAThres = 0x83;
-               else
-                       CurCCK_CCAThres = 0x40;
-       }
-       ODM_Write_CCK_CCA_Thres(pDM_Odm, CurCCK_CCAThres);
-}
-
-static void FindMinimumRSSI(struct adapter *pAdapter)
-{
-       struct hal_data_8188e *pHalData = &pAdapter->haldata;
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       struct mlme_priv        *pmlmepriv = &pAdapter->mlmepriv;
-
-       /* 1 1.Determine the minimum RSSI */
-       if (!check_fwstate(pmlmepriv, _FW_LINKED) &&
-           pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0)
-               pdmpriv->MinUndecoratedPWDBForDM = 0;
-
-       pdmpriv->MinUndecoratedPWDBForDM = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-}
-
-static void odm_RSSIMonitorCheck(struct odm_dm_struct *pDM_Odm)
-{
-       struct adapter *Adapter = pDM_Odm->Adapter;
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       int     i;
-       int     tmpEntryMaxPWDB = 0, tmpEntryMinPWDB = 0xff;
-       u8      sta_cnt = 0;
-       u32 PWDB_rssi[NUM_STA] = {0};/* 0~15]:MACID, [16~31]:PWDB_rssi */
-       struct sta_info *psta;
-
-       if (!(pDM_Odm->SupportAbility & ODM_BB_RSSI_MONITOR))
-               return;
-
-       if (!check_fwstate(&Adapter->mlmepriv, _FW_LINKED))
-               return;
-
-       for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {
-               psta = pDM_Odm->pODM_StaInfo[i];
-               if (IS_STA_VALID(psta) &&
-                   (psta->state & WIFI_ASOC_STATE) &&
-                   !is_broadcast_ether_addr(psta->hwaddr) &&
-                   memcmp(psta->hwaddr, myid(&Adapter->eeprompriv), ETH_ALEN)) {
-                       if (psta->rssi_stat.UndecoratedSmoothedPWDB < tmpEntryMinPWDB)
-                               tmpEntryMinPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;
-
-                       if (psta->rssi_stat.UndecoratedSmoothedPWDB > tmpEntryMaxPWDB)
-                               tmpEntryMaxPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;
-                       if (psta->rssi_stat.UndecoratedSmoothedPWDB != (-1))
-                               PWDB_rssi[sta_cnt++] = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB << 16));
-               }
-       }
-
-       for (i = 0; i < sta_cnt; i++) {
-               if (PWDB_rssi[i] != (0)) {
-                       if (pHalData->fw_ractrl) {
-                               /*  Report every sta's RSSI to FW */
-                       } else {
-                               ODM_RA_SetRSSI_8188E(
-                               &pHalData->odmpriv, (PWDB_rssi[i] & 0xFF), (u8)((PWDB_rssi[i] >> 16) & 0xFF));
-                       }
-               }
-       }
-
-       if (tmpEntryMinPWDB != 0xff) /*  If associated entry is found */
-               pdmpriv->EntryMinUndecoratedSmoothedPWDB = tmpEntryMinPWDB;
-       else
-               pdmpriv->EntryMinUndecoratedSmoothedPWDB = 0;
-
-       FindMinimumRSSI(Adapter);
-       pHalData->odmpriv.RSSI_Min = pdmpriv->MinUndecoratedPWDBForDM;
-}
-
-static void odm_TXPowerTrackingThermalMeterInit(struct odm_dm_struct *pDM_Odm)
-{
-       pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = true;
-}
-
-static void odm_InitHybridAntDiv(struct odm_dm_struct *pDM_Odm)
-{
-       if (!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))
-               return;
-
-       ODM_AntennaDiversityInit_88E(pDM_Odm);
-}
-
-static void odm_HwAntDiv(struct odm_dm_struct *pDM_Odm)
-{
-       if (!(pDM_Odm->SupportAbility & ODM_BB_ANT_DIV))
-               return;
-
-       ODM_AntennaDiversity_88E(pDM_Odm);
-}
-
-static void ODM_EdcaTurboInit(struct odm_dm_struct *pDM_Odm)
-{
-       struct adapter *Adapter = pDM_Odm->Adapter;
-       pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = false;
-       pDM_Odm->DM_EDCA_Table.bIsCurRDLState = false;
-       Adapter->recvpriv.bIsAnyNonBEPkts = false;
-}
-
-static void odm_EdcaTurboCheck(struct odm_dm_struct *pDM_Odm)
-{
-       struct adapter *Adapter = pDM_Odm->Adapter;
-       u32     trafficIndex;
-       u32     edca_param;
-       u64     cur_tx_bytes = 0;
-       u64     cur_rx_bytes = 0;
-       u8      bbtchange = false;
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       struct xmit_priv                *pxmitpriv = &Adapter->xmitpriv;
-       struct recv_priv                *precvpriv = &Adapter->recvpriv;
-       struct registry_priv    *pregpriv = &Adapter->registrypriv;
-       struct mlme_ext_priv    *pmlmeext = &Adapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pregpriv->wifi_spec == 1)
-               goto dm_CheckEdcaTurbo_EXIT;
-
-       if (pmlmeinfo->assoc_AP_vendor >=  HT_IOT_PEER_MAX)
-               goto dm_CheckEdcaTurbo_EXIT;
-
-       /*  Check if the status needs to be changed. */
-       if ((bbtchange) || (!precvpriv->bIsAnyNonBEPkts)) {
-               cur_tx_bytes = pxmitpriv->tx_bytes - pxmitpriv->last_tx_bytes;
-               cur_rx_bytes = precvpriv->rx_bytes - precvpriv->last_rx_bytes;
-
-               /* traffic, TX or RX */
-               if ((pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_RALINK) ||
-                   (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_ATHEROS)) {
-                       if (cur_tx_bytes > (cur_rx_bytes << 2)) {
-                               /*  Uplink TP is present. */
-                               trafficIndex = UP_LINK;
-                       } else {
-                               /*  Balance TP is present. */
-                               trafficIndex = DOWN_LINK;
-                       }
-               } else {
-                       if (cur_rx_bytes > (cur_tx_bytes << 2)) {
-                               /*  Downlink TP is present. */
-                               trafficIndex = DOWN_LINK;
-                       } else {
-                               /*  Balance TP is present. */
-                               trafficIndex = UP_LINK;
-                       }
-               }
-
-               if ((pDM_Odm->DM_EDCA_Table.prv_traffic_idx != trafficIndex) || (!pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA)) {
-                       if ((pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_CISCO) && (pmlmeext->cur_wireless_mode & WIRELESS_11_24N))
-                               edca_param = EDCAParam[pmlmeinfo->assoc_AP_vendor][trafficIndex];
-                       else
-                               edca_param = EDCAParam[HT_IOT_PEER_UNKNOWN][trafficIndex];
-
-                       rtw_write32(Adapter, REG_EDCA_BE_PARAM, edca_param);
-
-                       pDM_Odm->DM_EDCA_Table.prv_traffic_idx = trafficIndex;
-               }
-
-               pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = true;
-       } else {
-               /*  Turn Off EDCA turbo here. */
-               /*  Restore original EDCA according to the declaration of AP. */
-               if (pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA) {
-                       rtw_write32(Adapter, REG_EDCA_BE_PARAM, pHalData->AcParam_BE);
-                       pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = false;
-               }
-       }
-
-dm_CheckEdcaTurbo_EXIT:
-       /*  Set variables for next time. */
-       precvpriv->bIsAnyNonBEPkts = false;
-       pxmitpriv->last_tx_bytes = pxmitpriv->tx_bytes;
-       precvpriv->last_rx_bytes = precvpriv->rx_bytes;
-}
-
-/*  2011/09/21 MH Add to describe different team necessary resource allocate?? */
-void ODM_DMInit(struct odm_dm_struct *pDM_Odm)
-{
-       /* 2012.05.03 Luke: For all IC series */
-       odm_CommonInfoSelfInit(pDM_Odm);
-       odm_DIGInit(pDM_Odm);
-       odm_RateAdaptiveMaskInit(pDM_Odm);
-
-       odm_DynamicBBPowerSavingInit(pDM_Odm);
-       odm_TXPowerTrackingThermalMeterInit(pDM_Odm);
-       ODM_EdcaTurboInit(pDM_Odm);
-       ODM_RAInfo_Init_all(pDM_Odm);
-       if ((pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV)   ||
-           (pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV) ||
-           (pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV))
-               odm_InitHybridAntDiv(pDM_Odm);
-}
-
-/*  2011/09/20 MH This is the entry pointer for all team to execute HW out source DM. */
-/*  You can not add any dummy function here, be care, you can only use DM structure */
-/*  to perform any new ODM_DM. */
-void ODM_DMWatchdog(struct odm_dm_struct *pDM_Odm)
-{
-       /* 2012.05.03 Luke: For all IC series */
-       odm_CommonInfoSelfUpdate(pDM_Odm);
-       odm_FalseAlarmCounterStatistics(pDM_Odm);
-       odm_RSSIMonitorCheck(pDM_Odm);
-
-       odm_DIG(pDM_Odm);
-       odm_CCKPacketDetectionThresh(pDM_Odm);
-
-       if (*pDM_Odm->pbPowerSaving)
-               return;
-
-       odm_RefreshRateAdaptiveMask(pDM_Odm);
-
-       if ((pDM_Odm->AntDivType ==  CG_TRX_HW_ANTDIV)  ||
-           (pDM_Odm->AntDivType == CGCS_RX_HW_ANTDIV)  ||
-           (pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV))
-               odm_HwAntDiv(pDM_Odm);
-
-       ODM_TXPowerTrackingCheck(pDM_Odm);
-       odm_EdcaTurboCheck(pDM_Odm);
-}
-
-/*  Init /.. Fixed HW value. Only init time. */
-void ODM_CmnInfoInit(struct odm_dm_struct *pDM_Odm, enum odm_common_info_def CmnInfo, u32 Value)
-{
-       /*  This section is used for init value */
-       switch  (CmnInfo) {
-       /*  Fixed ODM value. */
-       case    ODM_CMNINFO_MP_TEST_CHIP:
-               pDM_Odm->bIsMPChip = (u8)Value;
-               break;
-       case    ODM_CMNINFO_RF_ANTENNA_TYPE:
-               pDM_Odm->AntDivType = (u8)Value;
-               break;
-       default:
-               /* do nothing */
-               break;
-       }
-
-       /*  Tx power tracking BB swing table. */
-       /*  The base index = 12. +((12-n)/2)dB 13~?? = decrease tx pwr by -((n-12)/2)dB */
-       pDM_Odm->BbSwingIdxOfdm                 = 12; /*  Set defalut value as index 12. */
-       pDM_Odm->BbSwingIdxOfdmCurrent  = 12;
-       pDM_Odm->BbSwingFlagOfdm                = false;
-}
-
-void ODM_Write_DIG(struct odm_dm_struct *pDM_Odm, u8 CurrentIGI)
-{
-       struct rtw_dig *pDM_DigTable = &pDM_Odm->DM_DigTable;
-       struct adapter *adapter = pDM_Odm->Adapter;
-
-       if (pDM_DigTable->CurIGValue != CurrentIGI) {
-               rtl8188e_PHY_SetBBReg(adapter, ODM_REG_IGI_A_11N, ODM_BIT_IGI_11N, CurrentIGI);
-               pDM_DigTable->CurIGValue = CurrentIGI;
-       }
-}
-
-void ODM_Write_CCK_CCA_Thres(struct odm_dm_struct *pDM_Odm, u8 CurCCK_CCAThres)
-{
-       struct rtw_dig *pDM_DigTable = &pDM_Odm->DM_DigTable;
-
-       if (pDM_DigTable->CurCCK_CCAThres != CurCCK_CCAThres)           /* modify by Guo.Mingzhi 2012-01-03 */
-               rtw_write8(pDM_Odm->Adapter, ODM_REG_CCK_CCA_11N, CurCCK_CCAThres);
-       pDM_DigTable->CurCCK_CCAThres = CurCCK_CCAThres;
-}
-
-void ODM_RF_Saving(struct odm_dm_struct *pDM_Odm, u8 bForceInNormal)
-{
-       struct rtl_ps *pDM_PSTable = &pDM_Odm->DM_PSTable;
-       struct adapter *adapter = pDM_Odm->Adapter;
-       u8 Rssi_Up_bound = 30;
-       u8 Rssi_Low_bound = 25;
-
-       if (pDM_PSTable->initialize == 0) {
-               pDM_PSTable->reg_874 = (rtl8188e_PHY_QueryBBReg(adapter, 0x874, bMaskDWord) & 0x1CC000) >> 14;
-               pDM_PSTable->reg_c70 = (rtl8188e_PHY_QueryBBReg(adapter, 0xc70, bMaskDWord) & BIT(3)) >> 3;
-               pDM_PSTable->reg_85c = (rtl8188e_PHY_QueryBBReg(adapter, 0x85c, bMaskDWord) & 0xFF000000) >> 24;
-               pDM_PSTable->reg_a74 = (rtl8188e_PHY_QueryBBReg(adapter, 0xa74, bMaskDWord) & 0xF000) >> 12;
-               pDM_PSTable->initialize = 1;
-       }
-
-       if (!bForceInNormal) {
-               if (pDM_Odm->RSSI_Min != 0xFF) {
-                       if (pDM_PSTable->pre_rf_state == RF_Normal) {
-                               if (pDM_Odm->RSSI_Min >= Rssi_Up_bound)
-                                       pDM_PSTable->cur_rf_state = RF_Save;
-                               else
-                                       pDM_PSTable->cur_rf_state = RF_Normal;
-                       } else {
-                               if (pDM_Odm->RSSI_Min <= Rssi_Low_bound)
-                                       pDM_PSTable->cur_rf_state = RF_Normal;
-                               else
-                                       pDM_PSTable->cur_rf_state = RF_Save;
-                       }
-               } else {
-                       pDM_PSTable->cur_rf_state = RF_MAX;
-               }
-       } else {
-               pDM_PSTable->cur_rf_state = RF_Normal;
-       }
-
-       if (pDM_PSTable->pre_rf_state != pDM_PSTable->cur_rf_state) {
-               if (pDM_PSTable->cur_rf_state == RF_Save) {
-                       rtl8188e_PHY_SetBBReg(adapter, 0x874, 0x1C0000, 0x2); /* Reg874[20:18]=3'b010 */
-                       rtl8188e_PHY_SetBBReg(adapter, 0xc70, BIT(3), 0); /* RegC70[3]=1'b0 */
-                       rtl8188e_PHY_SetBBReg(adapter, 0x85c, 0xFF000000, 0x63); /* Reg85C[31:24]=0x63 */
-                       rtl8188e_PHY_SetBBReg(adapter, 0x874, 0xC000, 0x2); /* Reg874[15:14]=2'b10 */
-                       rtl8188e_PHY_SetBBReg(adapter, 0xa74, 0xF000, 0x3); /* RegA75[7:4]=0x3 */
-                       rtl8188e_PHY_SetBBReg(adapter, 0x818, BIT(28), 0x0); /* Reg818[28]=1'b0 */
-                       rtl8188e_PHY_SetBBReg(adapter, 0x818, BIT(28), 0x1); /* Reg818[28]=1'b1 */
-               } else {
-                       rtl8188e_PHY_SetBBReg(adapter, 0x874, 0x1CC000, pDM_PSTable->reg_874);
-                       rtl8188e_PHY_SetBBReg(adapter, 0xc70, BIT(3), pDM_PSTable->reg_c70);
-                       rtl8188e_PHY_SetBBReg(adapter, 0x85c, 0xFF000000, pDM_PSTable->reg_85c);
-                       rtl8188e_PHY_SetBBReg(adapter, 0xa74, 0xF000, pDM_PSTable->reg_a74);
-                       rtl8188e_PHY_SetBBReg(adapter, 0x818, BIT(28), 0x0);
-               }
-               pDM_PSTable->pre_rf_state = pDM_PSTable->cur_rf_state;
-       }
-}
-
-u32 ODM_Get_Rate_Bitmap(struct odm_dm_struct *pDM_Odm, u32 macid, u32 ra_mask, u8 rssi_level)
-{
-       struct sta_info *pEntry;
-       u32 rate_bitmap = 0x0fffffff;
-       u8 WirelessMode;
-
-       pEntry = pDM_Odm->pODM_StaInfo[macid];
-       if (!IS_STA_VALID(pEntry))
-               return ra_mask;
-
-       WirelessMode = pEntry->wireless_mode;
-
-       switch (WirelessMode) {
-       case ODM_WM_B:
-               if (ra_mask & 0x0000000c)               /* 11M or 5.5M enable */
-                       rate_bitmap = 0x0000000d;
-               else
-                       rate_bitmap = 0x0000000f;
-               break;
-       case (ODM_WM_B | ODM_WM_G):
-               if (rssi_level == DM_RATR_STA_HIGH)
-                       rate_bitmap = 0x00000f00;
-               else if (rssi_level == DM_RATR_STA_MIDDLE)
-                       rate_bitmap = 0x00000ff0;
-               else
-                       rate_bitmap = 0x00000ff5;
-               break;
-       case (ODM_WM_B | ODM_WM_G | ODM_WM_N24G):
-               if (rssi_level == DM_RATR_STA_HIGH) {
-                       rate_bitmap = 0x000f0000;
-               } else if (rssi_level == DM_RATR_STA_MIDDLE) {
-                       rate_bitmap = 0x000ff000;
-               } else {
-                       if (*pDM_Odm->pBandWidth == HT_CHANNEL_WIDTH_40)
-                               rate_bitmap = 0x000ff015;
-                       else
-                               rate_bitmap = 0x000ff005;
-               }
-               break;
-       default:
-               /* case WIRELESS_11_24N: */
-               rate_bitmap = 0x0fffffff;
-               break;
-       }
-
-       return rate_bitmap;
-}
-
-/*  Return Value: bool */
-/*  - true: RATRState is changed. */
-bool ODM_RAStateCheck(struct odm_dm_struct *pDM_Odm, s32 RSSI, bool bForceUpdate, u8 *pRATRState)
-{
-       struct odm_rate_adapt *pRA = &pDM_Odm->RateAdaptive;
-       const u8 GoUpGap = 5;
-       u8 HighRSSIThreshForRA = pRA->HighRSSIThresh;
-       u8 LowRSSIThreshForRA = pRA->LowRSSIThresh;
-       u8 RATRState;
-
-       /*  Threshold Adjustment: */
-       /*  when RSSI state trends to go up one or two levels, make sure RSSI is high enough. */
-       /*  Here GoUpGap is added to solve the boundary's level alternation issue. */
-       switch (*pRATRState) {
-       case DM_RATR_STA_INIT:
-       case DM_RATR_STA_HIGH:
-               break;
-       case DM_RATR_STA_MIDDLE:
-               HighRSSIThreshForRA += GoUpGap;
-               break;
-       case DM_RATR_STA_LOW:
-               HighRSSIThreshForRA += GoUpGap;
-               LowRSSIThreshForRA += GoUpGap;
-               break;
-       default:
-               break;
-       }
-
-       /*  Decide RATRState by RSSI. */
-       if (RSSI > HighRSSIThreshForRA)
-               RATRState = DM_RATR_STA_HIGH;
-       else if (RSSI > LowRSSIThreshForRA)
-               RATRState = DM_RATR_STA_MIDDLE;
-       else
-               RATRState = DM_RATR_STA_LOW;
-
-       if (*pRATRState != RATRState || bForceUpdate) {
-               *pRATRState = RATRState;
-               return true;
-       }
-       return false;
-}
-
-void ODM_TXPowerTrackingCheck(struct odm_dm_struct *pDM_Odm)
-{
-       struct adapter *Adapter = pDM_Odm->Adapter;
-
-       if (!pDM_Odm->RFCalibrateInfo.TM_Trigger) {             /* at least delay 1 sec */
-               rtl8188e_PHY_SetRFReg(Adapter, RF_T_METER_88E, BIT(17) | BIT(16), 0x03);
-
-               pDM_Odm->RFCalibrateInfo.TM_Trigger = 1;
-               return;
-       } else {
-               odm_TXPowerTrackingCallback_ThermalMeter_8188E(Adapter);
-               pDM_Odm->RFCalibrateInfo.TM_Trigger = 0;
-       }
-}
diff --git a/drivers/staging/r8188eu/hal/odm_HWConfig.c b/drivers/staging/r8188eu/hal/odm_HWConfig.c
deleted file mode 100644 (file)
index 38f357e..0000000
+++ /dev/null
@@ -1,349 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/drv_types.h"
-
-static u8 odm_query_rxpwrpercentage(s8 antpower)
-{
-       if ((antpower <= -100) || (antpower >= 20))
-               return 0;
-       else if (antpower >= 0)
-               return 100;
-       else
-               return 100 + antpower;
-}
-
-static s32 odm_signal_scale_mapping(struct odm_dm_struct *dm_odm, s32 currsig)
-{
-       s32 retsig;
-
-       if (currsig >= 51 && currsig <= 100)
-               retsig = 100;
-       else if (currsig >= 41 && currsig <= 50)
-               retsig = 80 + ((currsig - 40) * 2);
-       else if (currsig >= 31 && currsig <= 40)
-               retsig = 66 + (currsig - 30);
-       else if (currsig >= 21 && currsig <= 30)
-               retsig = 54 + (currsig - 20);
-       else if (currsig >= 10 && currsig <= 20)
-               retsig = 42 + (((currsig - 10) * 2) / 3);
-       else if (currsig >= 5 && currsig <= 9)
-               retsig = 22 + (((currsig - 5) * 3) / 2);
-       else if (currsig >= 1 && currsig <= 4)
-               retsig = 6 + (((currsig - 1) * 3) / 2);
-       else
-               retsig = currsig;
-
-       return retsig;
-}
-
-static u8 odm_evm_db_to_percentage(s8 value)
-{
-       /*  -33dB~0dB to 0%~99% */
-       s8 ret_val = clamp(-value, 0, 33) * 3;
-
-       if (ret_val == 99)
-               ret_val = 100;
-
-       return ret_val;
-}
-
-static void odm_RxPhyStatus92CSeries_Parsing(struct odm_dm_struct *dm_odm,
-                       struct phy_info *pPhyInfo,
-                       u8 *pPhyStatus,
-                       struct odm_per_pkt_info *pPktinfo,
-                       struct adapter *adapt)
-{
-       u8 i, Max_spatial_stream;
-       s8 rx_pwr[4], rx_pwr_all = 0;
-       u8 EVM, PWDB_ALL = 0;
-       u8 RSSI, total_rssi = 0;
-       u8 isCCKrate = 0;
-       u8 rf_rx_num = 0;
-       u8 cck_highpwr = 0;
-       u8 LNA_idx, VGA_idx;
-
-       struct phy_status_rpt *pPhyStaRpt = (struct phy_status_rpt *)pPhyStatus;
-
-       isCCKrate = pPktinfo->Rate >= DESC92C_RATE1M && pPktinfo->Rate <= DESC92C_RATE11M;
-
-       if (isCCKrate) {
-               u8 cck_agc_rpt;
-
-               /*  (1)Hardware does not provide RSSI for CCK */
-               /*  (2)PWDB, Average PWDB calculated by hardware (for rate adaptive) */
-
-               cck_highpwr = dm_odm->bCckHighPower;
-
-               cck_agc_rpt =  pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a;
-
-               /* 2011.11.28 LukeLee: 88E use different LNA & VGA gain table */
-               /* The RSSI formula should be modified according to the gain table */
-               /* In 88E, cck_highpwr is always set to 1 */
-               LNA_idx = ((cck_agc_rpt & 0xE0) >> 5);
-               VGA_idx = (cck_agc_rpt & 0x1F);
-               switch (LNA_idx) {
-               case 7:
-                       if (VGA_idx <= 27)
-                               rx_pwr_all = -100 + 2 * (27 - VGA_idx); /* VGA_idx = 27~2 */
-                       else
-                               rx_pwr_all = -100;
-                       break;
-               case 6:
-                       rx_pwr_all = -48 + 2 * (2 - VGA_idx); /* VGA_idx = 2~0 */
-                       break;
-               case 5:
-                       rx_pwr_all = -42 + 2 * (7 - VGA_idx); /* VGA_idx = 7~5 */
-                       break;
-               case 4:
-                       rx_pwr_all = -36 + 2 * (7 - VGA_idx); /* VGA_idx = 7~4 */
-                       break;
-               case 3:
-                       rx_pwr_all = -24 + 2 * (7 - VGA_idx); /* VGA_idx = 7~0 */
-                       break;
-               case 2:
-                       if (cck_highpwr)
-                               rx_pwr_all = -12 + 2 * (5 - VGA_idx); /* VGA_idx = 5~0 */
-                       else
-                               rx_pwr_all = -6 + 2 * (5 - VGA_idx);
-                       break;
-               case 1:
-                               rx_pwr_all = 8 - 2 * VGA_idx;
-                       break;
-               case 0:
-                               rx_pwr_all = 14 - 2 * VGA_idx;
-                       break;
-               default:
-                       break;
-               }
-               rx_pwr_all += 6;
-               PWDB_ALL = odm_query_rxpwrpercentage(rx_pwr_all);
-               if (!cck_highpwr) {
-                       if (PWDB_ALL >= 80)
-                               PWDB_ALL = ((PWDB_ALL - 80) << 1) + ((PWDB_ALL - 80) >> 1) + 80;
-                       else if ((PWDB_ALL <= 78) && (PWDB_ALL >= 20))
-                               PWDB_ALL += 3;
-                       if (PWDB_ALL > 100)
-                               PWDB_ALL = 100;
-               }
-
-               pPhyInfo->RxPWDBAll = PWDB_ALL;
-               pPhyInfo->recvpower = rx_pwr_all;
-               /*  (3) Get Signal Quality (EVM) */
-               if (pPktinfo->bPacketMatchBSSID) {
-                       u8 SQ, SQ_rpt;
-
-                       if (pPhyInfo->RxPWDBAll > 40) {
-                               SQ = 100;
-                       } else {
-                               SQ_rpt = pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all;
-
-                               if (SQ_rpt > 64)
-                                       SQ = 0;
-                               else if (SQ_rpt < 20)
-                                       SQ = 100;
-                               else
-                                       SQ = ((64 - SQ_rpt) * 100) / 44;
-                       }
-                       pPhyInfo->SignalQuality = SQ;
-               }
-       } else { /* is OFDM rate */
-               /*  (1)Get RSSI for HT rate */
-
-               for (i = RF_PATH_A; i < RF_PATH_MAX; i++) {
-                       /*  2008/01/30 MH we will judge RF RX path now. */
-                       if (dm_odm->RFPathRxEnable & BIT(i))
-                               rf_rx_num++;
-
-                       rx_pwr[i] = ((pPhyStaRpt->path_agc[i].gain & 0x3F) * 2) - 110;
-                       if (i == RF_PATH_A)
-                               adapt->signal_strength = rx_pwr[i];
-
-                       pPhyInfo->RxPwr[i] = rx_pwr[i];
-
-                       /* Translate DBM to percentage. */
-                       RSSI = odm_query_rxpwrpercentage(rx_pwr[i]);
-                       total_rssi += RSSI;
-
-                       pPhyInfo->RxMIMOSignalStrength[i] = (u8)RSSI;
-
-                       /* Get Rx snr value in DB */
-                       dm_odm->PhyDbgInfo.RxSNRdB[i] = (s32)(pPhyStaRpt->path_rxsnr[i] / 2);
-               }
-               /*  (2)PWDB, Average PWDB calculated by hardware (for rate adaptive) */
-               rx_pwr_all = (((pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all) >> 1) & 0x7f) - 110;
-
-               PWDB_ALL = odm_query_rxpwrpercentage(rx_pwr_all);
-
-               pPhyInfo->RxPWDBAll = PWDB_ALL;
-               pPhyInfo->RxPower = rx_pwr_all;
-               pPhyInfo->recvpower = rx_pwr_all;
-
-               /*  (3)EVM of HT rate */
-               if (pPktinfo->Rate >= DESC92C_RATEMCS8 && pPktinfo->Rate <= DESC92C_RATEMCS15)
-                       Max_spatial_stream = 2; /* both spatial stream make sense */
-               else
-                       Max_spatial_stream = 1; /* only spatial stream 1 makes sense */
-
-               for (i = 0; i < Max_spatial_stream; i++) {
-                       /*  Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment */
-                       /*  fill most significant bit to "zero" when doing shifting operation which may change a negative */
-                       /*  value to positive one, then the dbm value (which is supposed to be negative)  is not correct anymore. */
-                       EVM = odm_evm_db_to_percentage((pPhyStaRpt->stream_rxevm[i]));  /* dbm */
-
-                       if (pPktinfo->bPacketMatchBSSID) {
-                               if (i == RF_PATH_A) /*  Fill value in RFD, Get the first spatial stream only */
-                                       pPhyInfo->SignalQuality = (u8)(EVM & 0xff);
-                       }
-               }
-       }
-       /* UI BSS List signal strength(in percentage), make it good looking, from 0~100. */
-       /* It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp(). */
-       if (isCCKrate) {
-               pPhyInfo->SignalStrength = (u8)(odm_signal_scale_mapping(dm_odm, PWDB_ALL));/* PWDB_ALL; */
-       } else {
-               if (rf_rx_num != 0)
-                       pPhyInfo->SignalStrength = (u8)(odm_signal_scale_mapping(dm_odm, total_rssi /= rf_rx_num));
-       }
-
-       /* For 88E HW Antenna Diversity */
-       dm_odm->DM_FatTable.antsel_rx_keep_0 = pPhyStaRpt->ant_sel;
-       dm_odm->DM_FatTable.antsel_rx_keep_1 = pPhyStaRpt->ant_sel_b;
-       dm_odm->DM_FatTable.antsel_rx_keep_2 = pPhyStaRpt->antsel_rx_keep_2;
-}
-
-static void odm_Process_RSSIForDM(struct odm_dm_struct *dm_odm,
-                                 struct phy_info *pPhyInfo,
-                                 struct odm_per_pkt_info *pPktinfo)
-{
-       s32 UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK;
-       s32 UndecoratedSmoothedOFDM, RSSI_Ave;
-       u8 isCCKrate = 0;
-       u8 RSSI_max, RSSI_min, i;
-       u32 OFDM_pkt = 0;
-       u32 Weighting = 0;
-       struct sta_info *pEntry;
-       u8 antsel_tr_mux;
-       struct fast_ant_train *pDM_FatTable = &dm_odm->DM_FatTable;
-
-       if (pPktinfo->StationID == 0xFF)
-               return;
-       pEntry = dm_odm->pODM_StaInfo[pPktinfo->StationID];
-       if (!IS_STA_VALID(pEntry))
-               return;
-       if ((!pPktinfo->bPacketMatchBSSID))
-               return;
-
-       isCCKrate = pPktinfo->Rate >= DESC92C_RATE1M && pPktinfo->Rate <= DESC92C_RATE11M;
-
-       /* Smart Antenna Debug Message------------------  */
-       if ((dm_odm->AntDivType == CG_TRX_HW_ANTDIV) || (dm_odm->AntDivType == CGCS_RX_HW_ANTDIV)) {
-               if (pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon) {
-                       antsel_tr_mux = (pDM_FatTable->antsel_rx_keep_2 << 2) |
-                                       (pDM_FatTable->antsel_rx_keep_1 << 1) | pDM_FatTable->antsel_rx_keep_0;
-                       ODM_AntselStatistics_88E(dm_odm, antsel_tr_mux, pPktinfo->StationID, pPhyInfo->RxPWDBAll);
-               }
-       }
-
-       /* Smart Antenna Debug Message------------------ */
-
-       UndecoratedSmoothedCCK =  pEntry->rssi_stat.UndecoratedSmoothedCCK;
-       UndecoratedSmoothedOFDM = pEntry->rssi_stat.UndecoratedSmoothedOFDM;
-       UndecoratedSmoothedPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;
-
-       if (pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon) {
-               if (!isCCKrate) { /* ofdm rate */
-                       if (pPhyInfo->RxMIMOSignalStrength[RF_PATH_B] == 0) {
-                               RSSI_Ave = pPhyInfo->RxMIMOSignalStrength[RF_PATH_A];
-                       } else {
-                               if (pPhyInfo->RxMIMOSignalStrength[RF_PATH_A] > pPhyInfo->RxMIMOSignalStrength[RF_PATH_B]) {
-                                       RSSI_max = pPhyInfo->RxMIMOSignalStrength[RF_PATH_A];
-                                       RSSI_min = pPhyInfo->RxMIMOSignalStrength[RF_PATH_B];
-                               } else {
-                                       RSSI_max = pPhyInfo->RxMIMOSignalStrength[RF_PATH_B];
-                                       RSSI_min = pPhyInfo->RxMIMOSignalStrength[RF_PATH_A];
-                               }
-                               if ((RSSI_max - RSSI_min) < 3)
-                                       RSSI_Ave = RSSI_max;
-                               else if ((RSSI_max - RSSI_min) < 6)
-                                       RSSI_Ave = RSSI_max - 1;
-                               else if ((RSSI_max - RSSI_min) < 10)
-                                       RSSI_Ave = RSSI_max - 2;
-                               else
-                                       RSSI_Ave = RSSI_max - 3;
-                       }
-
-                       /* 1 Process OFDM RSSI */
-                       if (UndecoratedSmoothedOFDM <= 0) {     /*  initialize */
-                               UndecoratedSmoothedOFDM = pPhyInfo->RxPWDBAll;
-                       } else {
-                               if (pPhyInfo->RxPWDBAll > (u32)UndecoratedSmoothedOFDM) {
-                                       UndecoratedSmoothedOFDM =
-                                                       (((UndecoratedSmoothedOFDM) * (Rx_Smooth_Factor - 1)) +
-                                                       (RSSI_Ave)) / (Rx_Smooth_Factor);
-                                       UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM + 1;
-                               } else {
-                                       UndecoratedSmoothedOFDM =
-                                                       (((UndecoratedSmoothedOFDM) * (Rx_Smooth_Factor - 1)) +
-                                                       (RSSI_Ave)) / (Rx_Smooth_Factor);
-                               }
-                       }
-
-                       pEntry->rssi_stat.PacketMap = (pEntry->rssi_stat.PacketMap << 1) | BIT(0);
-
-               } else {
-                       RSSI_Ave = pPhyInfo->RxPWDBAll;
-
-                       /* 1 Process CCK RSSI */
-                       if (UndecoratedSmoothedCCK <= 0) {      /*  initialize */
-                               UndecoratedSmoothedCCK = pPhyInfo->RxPWDBAll;
-                       } else {
-                               if (pPhyInfo->RxPWDBAll > (u32)UndecoratedSmoothedCCK) {
-                                       UndecoratedSmoothedCCK =
-                                                       ((UndecoratedSmoothedCCK * (Rx_Smooth_Factor - 1)) +
-                                                       pPhyInfo->RxPWDBAll) / Rx_Smooth_Factor;
-                                       UndecoratedSmoothedCCK = UndecoratedSmoothedCCK + 1;
-                               } else {
-                                       UndecoratedSmoothedCCK =
-                                                       ((UndecoratedSmoothedCCK * (Rx_Smooth_Factor - 1)) +
-                                                       pPhyInfo->RxPWDBAll) / Rx_Smooth_Factor;
-                               }
-                       }
-                       pEntry->rssi_stat.PacketMap = pEntry->rssi_stat.PacketMap << 1;
-               }
-               /* 2011.07.28 LukeLee: modified to prevent unstable CCK RSSI */
-               if (pEntry->rssi_stat.ValidBit >= 64)
-                       pEntry->rssi_stat.ValidBit = 64;
-               else
-                       pEntry->rssi_stat.ValidBit++;
-
-               for (i = 0; i < pEntry->rssi_stat.ValidBit; i++)
-                       OFDM_pkt += (u8)(pEntry->rssi_stat.PacketMap >> i) & BIT(0);
-
-               if (pEntry->rssi_stat.ValidBit == 64) {
-                       Weighting = ((OFDM_pkt << 4) > 64) ? 64 : (OFDM_pkt << 4);
-                       UndecoratedSmoothedPWDB = (Weighting * UndecoratedSmoothedOFDM + (64 - Weighting) * UndecoratedSmoothedCCK) >> 6;
-               } else {
-                       if (pEntry->rssi_stat.ValidBit != 0)
-                               UndecoratedSmoothedPWDB = (OFDM_pkt * UndecoratedSmoothedOFDM +
-                                                         (pEntry->rssi_stat.ValidBit - OFDM_pkt) *
-                                                         UndecoratedSmoothedCCK) / pEntry->rssi_stat.ValidBit;
-                       else
-                               UndecoratedSmoothedPWDB = 0;
-               }
-               pEntry->rssi_stat.UndecoratedSmoothedCCK = UndecoratedSmoothedCCK;
-               pEntry->rssi_stat.UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM;
-               pEntry->rssi_stat.UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB;
-       }
-}
-
-/*  Endianness before calling this API */
-void ODM_PhyStatusQuery(struct odm_dm_struct *dm_odm,
-                       struct phy_info *pPhyInfo,
-                       u8 *pPhyStatus,
-                       struct odm_per_pkt_info *pPktinfo,
-                       struct adapter *adapt)
-{
-       odm_RxPhyStatus92CSeries_Parsing(dm_odm, pPhyInfo, pPhyStatus, pPktinfo, adapt);
-       odm_Process_RSSIForDM(dm_odm, pPhyInfo, pPktinfo);
-}
diff --git a/drivers/staging/r8188eu/hal/odm_RTL8188E.c b/drivers/staging/r8188eu/hal/odm_RTL8188E.c
deleted file mode 100644 (file)
index f3f4074..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/drv_types.h"
-
-static void odm_RX_HWAntDivInit(struct odm_dm_struct *dm_odm)
-{
-       struct adapter *adapter = dm_odm->Adapter;
-       u32     value32;
-
-       /* MAC Setting */
-       value32 = rtl8188e_PHY_QueryBBReg(adapter, ODM_REG_ANTSEL_PIN_11N, bMaskDWord);
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_ANTSEL_PIN_11N, bMaskDWord, value32 | (BIT(23) | BIT(25))); /* Reg4C[25]=1, Reg4C[23]=1 for pin output */
-       /* Pin Settings */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_PIN_CTRL_11N, BIT(9) | BIT(8), 0);/* Reg870[8]=1'b0, Reg870[9]=1'b0      antsel antselb by HW */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_RX_ANT_CTRL_11N, BIT(10), 0);    /* Reg864[10]=1'b0      antsel2 by HW */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_LNA_SWITCH_11N, BIT(22), 1);     /* Regb2c[22]=1'b0      disable CS/CG switch */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_LNA_SWITCH_11N, BIT(31), 1);     /* Regb2c[31]=1'b1      output at CG only */
-       /* OFDM Settings */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_ANTDIV_PARA1_11N, bMaskDWord, 0x000000a0);
-       /* CCK Settings */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_BB_PWR_SAV4_11N, BIT(7), 1); /* Fix CCK PHY status report issue */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_CCK_ANTDIV_PARA2_11N, BIT(4), 1); /* CCK complete HW AntDiv within 64 samples */
-       ODM_UpdateRxIdleAnt_88E(dm_odm, MAIN_ANT);
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_ANT_MAPPING1_11N, 0xFFFF, 0x0201);       /* antenna mapping table */
-}
-
-static void odm_TRX_HWAntDivInit(struct odm_dm_struct *dm_odm)
-{
-       struct adapter *adapter = dm_odm->Adapter;
-       u32     value32;
-
-       /* MAC Setting */
-       value32 = rtl8188e_PHY_QueryBBReg(adapter, ODM_REG_ANTSEL_PIN_11N, bMaskDWord);
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_ANTSEL_PIN_11N, bMaskDWord, value32 | (BIT(23) | BIT(25))); /* Reg4C[25]=1, Reg4C[23]=1 for pin output */
-       /* Pin Settings */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_PIN_CTRL_11N, BIT(9) | BIT(8), 0);/* Reg870[8]=1'b0, Reg870[9]=1'b0              antsel antselb by HW */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_RX_ANT_CTRL_11N, BIT(10), 0);    /* Reg864[10]=1'b0      antsel2 by HW */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_LNA_SWITCH_11N, BIT(22), 0);     /* Regb2c[22]=1'b0      disable CS/CG switch */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_LNA_SWITCH_11N, BIT(31), 1);     /* Regb2c[31]=1'b1      output at CG only */
-       /* OFDM Settings */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_ANTDIV_PARA1_11N, bMaskDWord, 0x000000a0);
-       /* CCK Settings */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_BB_PWR_SAV4_11N, BIT(7), 1); /* Fix CCK PHY status report issue */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_CCK_ANTDIV_PARA2_11N, BIT(4), 1); /* CCK complete HW AntDiv within 64 samples */
-       /* Tx Settings */
-       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_TX_ANT_CTRL_11N, BIT(21), 0); /* Reg80c[21]=1'b0         from TX Reg */
-       ODM_UpdateRxIdleAnt_88E(dm_odm, MAIN_ANT);
-
-       /* antenna mapping table */
-       if (!dm_odm->bIsMPChip) { /* testchip */
-               rtl8188e_PHY_SetBBReg(adapter, ODM_REG_RX_DEFUALT_A_11N, BIT(10) | BIT(9) | BIT(8), 1); /* Reg858[10:8]=3'b001 */
-               rtl8188e_PHY_SetBBReg(adapter, ODM_REG_RX_DEFUALT_A_11N, BIT(13) | BIT(12) | BIT(11), 2);       /* Reg858[13:11]=3'b010 */
-       } else { /* MPchip */
-               rtl8188e_PHY_SetBBReg(adapter, ODM_REG_ANT_MAPPING1_11N, bMaskDWord, 0x0201);   /* Reg914=3'b010, Reg915=3'b001 */
-       }
-}
-
-static void odm_FastAntTrainingInit(struct odm_dm_struct *dm_odm)
-{
-       struct adapter *adapter = dm_odm->Adapter;
-       u32     value32;
-
-       /* MAC Setting */
-       value32 = rtl8188e_PHY_QueryBBReg(adapter, 0x4c, bMaskDWord);
-       rtl8188e_PHY_SetBBReg(adapter, 0x4c, bMaskDWord, value32 | (BIT(23) | BIT(25))); /* Reg4C[25]=1, Reg4C[23]=1 for pin output */
-       value32 = rtl8188e_PHY_QueryBBReg(adapter,  0x7B4, bMaskDWord);
-       rtl8188e_PHY_SetBBReg(adapter, 0x7b4, bMaskDWord, value32 | (BIT(16) | BIT(17))); /* Reg7B4[16]=1 enable antenna training, Reg7B4[17]=1 enable A2 match */
-
-       /* Match MAC ADDR */
-       rtl8188e_PHY_SetBBReg(adapter, 0x7b4, 0xFFFF, 0);
-       rtl8188e_PHY_SetBBReg(adapter, 0x7b0, bMaskDWord, 0);
-
-       rtl8188e_PHY_SetBBReg(adapter, 0x870, BIT(9) | BIT(8), 0);/* Reg870[8]=1'b0, Reg870[9]=1'b0             antsel antselb by HW */
-       rtl8188e_PHY_SetBBReg(adapter, 0x864, BIT(10), 0);      /* Reg864[10]=1'b0      antsel2 by HW */
-       rtl8188e_PHY_SetBBReg(adapter, 0xb2c, BIT(22), 0);      /* Regb2c[22]=1'b0      disable CS/CG switch */
-       rtl8188e_PHY_SetBBReg(adapter, 0xb2c, BIT(31), 1);      /* Regb2c[31]=1'b1      output at CG only */
-       rtl8188e_PHY_SetBBReg(adapter, 0xca4, bMaskDWord, 0x000000a0);
-
-       if (!dm_odm->bIsMPChip) { /* testchip */
-               rtl8188e_PHY_SetBBReg(adapter, 0x858, BIT(10) | BIT(9) | BIT(8), 1);    /* Reg858[10:8]=3'b001 */
-               rtl8188e_PHY_SetBBReg(adapter, 0x858, BIT(13) | BIT(12) | BIT(11), 2);  /* Reg858[13:11]=3'b010 */
-       } else { /* MPchip */
-               rtl8188e_PHY_SetBBReg(adapter, 0x914, bMaskByte0, 1);
-               rtl8188e_PHY_SetBBReg(adapter, 0x914, bMaskByte1, 2);
-       }
-
-       /* Default Ant Setting when no fast training */
-       rtl8188e_PHY_SetBBReg(adapter, 0x80c, BIT(21), 1); /* Reg80c[21]=1'b1           from TX Info */
-       rtl8188e_PHY_SetBBReg(adapter, 0x864, BIT(5) | BIT(4) | BIT(3), 0);     /* Default RX */
-       rtl8188e_PHY_SetBBReg(adapter, 0x864, BIT(8) | BIT(7) | BIT(6), 1);     /* Optional RX */
-
-       /* Enter Training state */
-       rtl8188e_PHY_SetBBReg(adapter, 0x864, BIT(2) | BIT(1) | BIT(0), 1);
-       rtl8188e_PHY_SetBBReg(adapter, 0xc50, BIT(7), 1);       /* RegC50[7]=1'b1               enable HW AntDiv */
-}
-
-void ODM_AntennaDiversityInit_88E(struct odm_dm_struct *dm_odm)
-{
-       if (dm_odm->AntDivType == CGCS_RX_HW_ANTDIV)
-               odm_RX_HWAntDivInit(dm_odm);
-       else if (dm_odm->AntDivType == CG_TRX_HW_ANTDIV)
-               odm_TRX_HWAntDivInit(dm_odm);
-       else if (dm_odm->AntDivType == CG_TRX_SMART_ANTDIV)
-               odm_FastAntTrainingInit(dm_odm);
-}
-
-void ODM_UpdateRxIdleAnt_88E(struct odm_dm_struct *dm_odm, u8 Ant)
-{
-       struct fast_ant_train *dm_fat_tbl = &dm_odm->DM_FatTable;
-       struct adapter *adapter = dm_odm->Adapter;
-       u32     DefaultAnt, OptionalAnt;
-
-       if (dm_fat_tbl->RxIdleAnt != Ant) {
-               if (Ant == MAIN_ANT) {
-                       DefaultAnt = (dm_odm->AntDivType == CG_TRX_HW_ANTDIV) ? MAIN_ANT_CG_TRX : MAIN_ANT_CGCS_RX;
-                       OptionalAnt = (dm_odm->AntDivType == CG_TRX_HW_ANTDIV) ? AUX_ANT_CG_TRX : AUX_ANT_CGCS_RX;
-               } else {
-                       DefaultAnt = (dm_odm->AntDivType == CG_TRX_HW_ANTDIV) ? AUX_ANT_CG_TRX : AUX_ANT_CGCS_RX;
-                       OptionalAnt = (dm_odm->AntDivType == CG_TRX_HW_ANTDIV) ? MAIN_ANT_CG_TRX : MAIN_ANT_CGCS_RX;
-               }
-
-               if (dm_odm->AntDivType == CG_TRX_HW_ANTDIV) {
-                       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_RX_ANT_CTRL_11N, BIT(5) | BIT(4) | BIT(3), DefaultAnt);  /* Default RX */
-                       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_RX_ANT_CTRL_11N, BIT(8) | BIT(7) | BIT(6), OptionalAnt);         /* Optional RX */
-                       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_ANTSEL_CTRL_11N, BIT(14) | BIT(13) | BIT(12), DefaultAnt);       /* Default TX */
-                       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_RESP_TX_11N, BIT(6) | BIT(7), DefaultAnt);       /* Resp Tx */
-               } else if (dm_odm->AntDivType == CGCS_RX_HW_ANTDIV) {
-                       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_RX_ANT_CTRL_11N, BIT(5) | BIT(4) | BIT(3), DefaultAnt);  /* Default RX */
-                       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_RX_ANT_CTRL_11N, BIT(8) | BIT(7) | BIT(6), OptionalAnt);         /* Optional RX */
-               }
-       }
-       dm_fat_tbl->RxIdleAnt = Ant;
-       if (Ant != MAIN_ANT)
-               pr_info("RxIdleAnt=AUX_ANT\n");
-}
-
-static void odm_UpdateTxAnt_88E(struct odm_dm_struct *dm_odm, u8 Ant, u32 MacId)
-{
-       struct fast_ant_train *dm_fat_tbl = &dm_odm->DM_FatTable;
-       u8      TargetAnt;
-
-       if (Ant == MAIN_ANT)
-               TargetAnt = MAIN_ANT_CG_TRX;
-       else
-               TargetAnt = AUX_ANT_CG_TRX;
-       dm_fat_tbl->antsel_a[MacId] = TargetAnt & BIT(0);
-       dm_fat_tbl->antsel_b[MacId] = (TargetAnt & BIT(1)) >> 1;
-       dm_fat_tbl->antsel_c[MacId] = (TargetAnt & BIT(2)) >> 2;
-}
-
-void ODM_SetTxAntByTxInfo_88E(struct odm_dm_struct *dm_odm, u8 *pDesc, u8 macId)
-{
-       struct fast_ant_train *dm_fat_tbl = &dm_odm->DM_FatTable;
-
-       if ((dm_odm->AntDivType == CG_TRX_HW_ANTDIV) || (dm_odm->AntDivType == CG_TRX_SMART_ANTDIV)) {
-               SET_TX_DESC_ANTSEL_A_88E(pDesc, dm_fat_tbl->antsel_a[macId]);
-               SET_TX_DESC_ANTSEL_B_88E(pDesc, dm_fat_tbl->antsel_b[macId]);
-               SET_TX_DESC_ANTSEL_C_88E(pDesc, dm_fat_tbl->antsel_c[macId]);
-       }
-}
-
-void ODM_AntselStatistics_88E(struct odm_dm_struct *dm_odm, u8 antsel_tr_mux, u32 MacId, u8 RxPWDBAll)
-{
-       struct fast_ant_train *dm_fat_tbl = &dm_odm->DM_FatTable;
-       if (dm_odm->AntDivType == CG_TRX_HW_ANTDIV) {
-               if (antsel_tr_mux == MAIN_ANT_CG_TRX) {
-                       dm_fat_tbl->MainAnt_Sum[MacId] += RxPWDBAll;
-                       dm_fat_tbl->MainAnt_Cnt[MacId]++;
-               } else {
-                       dm_fat_tbl->AuxAnt_Sum[MacId] += RxPWDBAll;
-                       dm_fat_tbl->AuxAnt_Cnt[MacId]++;
-               }
-       } else if (dm_odm->AntDivType == CGCS_RX_HW_ANTDIV) {
-               if (antsel_tr_mux == MAIN_ANT_CGCS_RX) {
-                       dm_fat_tbl->MainAnt_Sum[MacId] += RxPWDBAll;
-                       dm_fat_tbl->MainAnt_Cnt[MacId]++;
-               } else {
-                       dm_fat_tbl->AuxAnt_Sum[MacId] += RxPWDBAll;
-                       dm_fat_tbl->AuxAnt_Cnt[MacId]++;
-               }
-       }
-}
-
-static void odm_HWAntDiv(struct odm_dm_struct *dm_odm)
-{
-       u32     i, MinRSSI = 0xFF, AntDivMaxRSSI = 0, MaxRSSI = 0, LocalMinRSSI, LocalMaxRSSI;
-       u32     Main_RSSI, Aux_RSSI;
-       u8      RxIdleAnt = 0, TargetAnt = 7;
-       struct fast_ant_train *dm_fat_tbl = &dm_odm->DM_FatTable;
-       struct rtw_dig *pDM_DigTable = &dm_odm->DM_DigTable;
-       struct sta_info *pEntry;
-
-       for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {
-               pEntry = dm_odm->pODM_StaInfo[i];
-               if (IS_STA_VALID(pEntry)) {
-                       /* 2 Calculate RSSI per Antenna */
-                       Main_RSSI = (dm_fat_tbl->MainAnt_Cnt[i] != 0) ? (dm_fat_tbl->MainAnt_Sum[i] / dm_fat_tbl->MainAnt_Cnt[i]) : 0;
-                       Aux_RSSI = (dm_fat_tbl->AuxAnt_Cnt[i] != 0) ? (dm_fat_tbl->AuxAnt_Sum[i] / dm_fat_tbl->AuxAnt_Cnt[i]) : 0;
-                       TargetAnt = (Main_RSSI >= Aux_RSSI) ? MAIN_ANT : AUX_ANT;
-                       /* 2 Select MaxRSSI for DIG */
-                       LocalMaxRSSI = max(Main_RSSI, Aux_RSSI);
-                       if ((LocalMaxRSSI > AntDivMaxRSSI) && (LocalMaxRSSI < 40))
-                               AntDivMaxRSSI = LocalMaxRSSI;
-                       if (LocalMaxRSSI > MaxRSSI)
-                               MaxRSSI = LocalMaxRSSI;
-
-                       /* 2 Select RX Idle Antenna */
-                       if ((dm_fat_tbl->RxIdleAnt == MAIN_ANT) && (Main_RSSI == 0))
-                               Main_RSSI = Aux_RSSI;
-                       else if ((dm_fat_tbl->RxIdleAnt == AUX_ANT) && (Aux_RSSI == 0))
-                               Aux_RSSI = Main_RSSI;
-
-                       LocalMinRSSI = min(Main_RSSI, Aux_RSSI);
-                       if (LocalMinRSSI < MinRSSI) {
-                               MinRSSI = LocalMinRSSI;
-                               RxIdleAnt = TargetAnt;
-                       }
-                       /* 2 Select TRX Antenna */
-                       if (dm_odm->AntDivType == CG_TRX_HW_ANTDIV)
-                               odm_UpdateTxAnt_88E(dm_odm, TargetAnt, i);
-               }
-               dm_fat_tbl->MainAnt_Sum[i] = 0;
-               dm_fat_tbl->AuxAnt_Sum[i] = 0;
-               dm_fat_tbl->MainAnt_Cnt[i] = 0;
-               dm_fat_tbl->AuxAnt_Cnt[i] = 0;
-       }
-
-       /* 2 Set RX Idle Antenna */
-       ODM_UpdateRxIdleAnt_88E(dm_odm, RxIdleAnt);
-
-       pDM_DigTable->AntDiv_RSSI_max = AntDivMaxRSSI;
-       pDM_DigTable->RSSI_max = MaxRSSI;
-}
-
-void ODM_AntennaDiversity_88E(struct odm_dm_struct *dm_odm)
-{
-       struct fast_ant_train *dm_fat_tbl = &dm_odm->DM_FatTable;
-       struct adapter *adapter = dm_odm->Adapter;
-
-       if (!(dm_odm->SupportAbility & ODM_BB_ANT_DIV))
-               return;
-       if (!dm_odm->bLinked) {
-               if (dm_fat_tbl->bBecomeLinked) {
-                       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_IGI_A_11N, BIT(7), 0);   /* RegC50[7]=1'b1               enable HW AntDiv */
-                       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_CCK_ANTDIV_PARA1_11N, BIT(15), 0); /* Enable CCK AntDiv */
-                       if (dm_odm->AntDivType == CG_TRX_HW_ANTDIV)
-                               rtl8188e_PHY_SetBBReg(adapter, ODM_REG_TX_ANT_CTRL_11N, BIT(21), 0); /* Reg80c[21]=1'b0         from TX Reg */
-                       dm_fat_tbl->bBecomeLinked = dm_odm->bLinked;
-               }
-               return;
-       } else {
-               if (!dm_fat_tbl->bBecomeLinked) {
-                       /* Because HW AntDiv is disabled before Link, we enable HW AntDiv after link */
-                       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_IGI_A_11N, BIT(7), 1);   /* RegC50[7]=1'b1               enable HW AntDiv */
-                       rtl8188e_PHY_SetBBReg(adapter, ODM_REG_CCK_ANTDIV_PARA1_11N, BIT(15), 1); /* Enable CCK AntDiv */
-                       if (dm_odm->AntDivType == CG_TRX_HW_ANTDIV)
-                               rtl8188e_PHY_SetBBReg(adapter, ODM_REG_TX_ANT_CTRL_11N, BIT(21), 1); /* Reg80c[21]=1'b1         from TX Info */
-                       dm_fat_tbl->bBecomeLinked = dm_odm->bLinked;
-               }
-       }
-       if ((dm_odm->AntDivType == CG_TRX_HW_ANTDIV) || (dm_odm->AntDivType == CGCS_RX_HW_ANTDIV))
-               odm_HWAntDiv(dm_odm);
-}
diff --git a/drivers/staging/r8188eu/hal/rtl8188e_cmd.c b/drivers/staging/r8188eu/hal/rtl8188e_cmd.c
deleted file mode 100644 (file)
index 788904d..0000000
+++ /dev/null
@@ -1,694 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _RTL8188E_CMD_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/rtw_ioctl_set.h"
-
-#include "../include/rtl8188e_hal.h"
-
-#define RTL88E_MAX_H2C_BOX_NUMS                4
-#define RTL88E_MAX_CMD_LEN             7
-#define RTL88E_MESSAGE_BOX_SIZE                4
-#define RTL88E_EX_MESSAGE_BOX_SIZE     4
-
-static u8 _is_fw_read_cmd_down(struct adapter *adapt, u8 msgbox_num)
-{
-       u8 read_down = false, reg;
-       int     retry_cnts = 100;
-       int res;
-
-       u8 valid;
-
-       do {
-               res = rtw_read8(adapt, REG_HMETFR, &reg);
-               if (res)
-                       continue;
-
-               valid = reg & BIT(msgbox_num);
-               if (0 == valid)
-                       read_down = true;
-       } while ((!read_down) && (retry_cnts--));
-
-       return read_down;
-}
-
-/*****************************************
-* H2C Msg format :
-* 0x1DF - 0x1D0
-*| 31 - 8      | 7-5    4 - 0  |
-*| h2c_msg     |Class_ID CMD_ID        |
-*
-* Extend 0x1FF - 0x1F0
-*|31 - 0         |
-*|ext_msg|
-******************************************/
-static s32 FillH2CCmd_88E(struct adapter *adapt, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer)
-{
-       u8 bcmd_down = false;
-       s32 retry_cnts = 100;
-       u8 h2c_box_num;
-       u32 msgbox_addr;
-       u32 msgbox_ex_addr;
-       struct hal_data_8188e *haldata = &adapt->haldata;
-       u8 cmd_idx, ext_cmd_len;
-       u32 h2c_cmd = 0;
-       u32 h2c_cmd_ex = 0;
-
-       if (!adapt->bFWReady)
-               return _FAIL;
-
-       if (!pCmdBuffer || CmdLen > RTL88E_MAX_CMD_LEN || adapt->bSurpriseRemoved)
-               return _FAIL;
-
-       /* pay attention to if  race condition happened in  H2C cmd setting. */
-       do {
-               h2c_box_num = haldata->LastHMEBoxNum;
-
-               if (!_is_fw_read_cmd_down(adapt, h2c_box_num))
-                       return _FAIL;
-
-               *(u8 *)(&h2c_cmd) = ElementID;
-
-               if (CmdLen <= 3) {
-                       memcpy((u8 *)(&h2c_cmd) + 1, pCmdBuffer, CmdLen);
-               } else {
-                       memcpy((u8 *)(&h2c_cmd) + 1, pCmdBuffer, 3);
-                       ext_cmd_len = CmdLen - 3;
-                       memcpy((u8 *)(&h2c_cmd_ex), pCmdBuffer + 3, ext_cmd_len);
-
-                       /* Write Ext command */
-                       msgbox_ex_addr = REG_HMEBOX_EXT_0 + (h2c_box_num * RTL88E_EX_MESSAGE_BOX_SIZE);
-                       for (cmd_idx = 0; cmd_idx < ext_cmd_len; cmd_idx++) {
-                               rtw_write8(adapt, msgbox_ex_addr + cmd_idx, *((u8 *)(&h2c_cmd_ex) + cmd_idx));
-                       }
-               }
-               /*  Write command */
-               msgbox_addr = REG_HMEBOX_0 + (h2c_box_num * RTL88E_MESSAGE_BOX_SIZE);
-               for (cmd_idx = 0; cmd_idx < RTL88E_MESSAGE_BOX_SIZE; cmd_idx++) {
-                       rtw_write8(adapt, msgbox_addr + cmd_idx, *((u8 *)(&h2c_cmd) + cmd_idx));
-               }
-               bcmd_down = true;
-
-               haldata->LastHMEBoxNum = (h2c_box_num + 1) % RTL88E_MAX_H2C_BOX_NUMS;
-
-       } while ((!bcmd_down) && (retry_cnts--));
-
-       return _SUCCESS;
-}
-
-u8 rtl8188e_set_raid_cmd(struct adapter *adapt, u32 mask)
-{
-       u8 buf[3];
-       u8 res = _SUCCESS;
-       struct hal_data_8188e *haldata = &adapt->haldata;
-
-       if (haldata->fw_ractrl) {
-               __le32 lmask;
-
-               memset(buf, 0, 3);
-               lmask = cpu_to_le32(mask);
-               memcpy(buf, &lmask, 3);
-
-               FillH2CCmd_88E(adapt, H2C_DM_MACID_CFG, 3, buf);
-       } else {
-               res = _FAIL;
-       }
-
-       return res;
-}
-
-/* bitmap[0:27] = tx_rate_bitmap */
-/* bitmap[28:31]= Rate Adaptive id */
-/* arg[0:4] = macid */
-/* arg[5] = Short GI */
-void rtl8188e_Add_RateATid(struct adapter *pAdapter, u32 bitmap, u8 arg, u8 rssi_level)
-{
-       struct hal_data_8188e *haldata = &pAdapter->haldata;
-
-       u8 macid, raid, short_gi_rate = false;
-
-       macid = arg & 0x1f;
-
-       raid = (bitmap >> 28) & 0x0f;
-       bitmap &= 0x0fffffff;
-
-       if (rssi_level != DM_RATR_STA_INIT)
-               bitmap = ODM_Get_Rate_Bitmap(&haldata->odmpriv, macid, bitmap, rssi_level);
-
-       bitmap |= ((raid << 28) & 0xf0000000);
-
-       short_gi_rate = (arg & BIT(5)) ? true : false;
-
-       raid = (bitmap >> 28) & 0x0f;
-
-       bitmap &= 0x0fffffff;
-
-       ODM_RA_UpdateRateInfo_8188E(&haldata->odmpriv, macid, raid, bitmap, short_gi_rate);
-}
-
-void rtl8188e_set_FwPwrMode_cmd(struct adapter *adapt, u8 Mode)
-{
-       struct setpwrmode_parm H2CSetPwrMode;
-       struct pwrctrl_priv *pwrpriv = &adapt->pwrctrlpriv;
-       u8 RLBM = 0; /*  0:Min, 1:Max, 2:User define */
-
-       switch (Mode) {
-       case PS_MODE_ACTIVE:
-               H2CSetPwrMode.Mode = 0;
-               break;
-       case PS_MODE_MIN:
-               H2CSetPwrMode.Mode = 1;
-               break;
-       case PS_MODE_MAX:
-               RLBM = 1;
-               H2CSetPwrMode.Mode = 1;
-               break;
-       case PS_MODE_DTIM:
-               RLBM = 2;
-               H2CSetPwrMode.Mode = 1;
-               break;
-       case PS_MODE_UAPSD_WMM:
-               H2CSetPwrMode.Mode = 2;
-               break;
-       default:
-               H2CSetPwrMode.Mode = 0;
-               break;
-       }
-
-       H2CSetPwrMode.SmartPS_RLBM = (((pwrpriv->smart_ps << 4) & 0xf0) | (RLBM & 0x0f));
-
-       H2CSetPwrMode.AwakeInterval = 1;
-
-       H2CSetPwrMode.bAllQueueUAPSD = adapt->registrypriv.uapsd_enable;
-
-       if (Mode > 0)
-               H2CSetPwrMode.PwrState = 0x00;/*  AllON(0x0C), RFON(0x04), RFOFF(0x00) */
-       else
-               H2CSetPwrMode.PwrState = 0x0C;/*  AllON(0x0C), RFON(0x04), RFOFF(0x00) */
-
-       FillH2CCmd_88E(adapt, H2C_PS_PWR_MODE, sizeof(H2CSetPwrMode), (u8 *)&H2CSetPwrMode);
-
-}
-
-void rtl8188e_set_FwMediaStatus_cmd(struct adapter *adapt, u16 mstatus_rpt)
-{
-       __le16 mst_rpt = cpu_to_le16(mstatus_rpt);
-
-       FillH2CCmd_88E(adapt, H2C_COM_MEDIA_STATUS_RPT, sizeof(mst_rpt), (u8 *)&mst_rpt);
-}
-
-static void ConstructBeacon(struct adapter *adapt, u8 *pframe, u32 *pLength)
-{
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       u32 rate_len, pktlen;
-       struct mlme_ext_priv *pmlmeext = &adapt->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex            *cur_network = &pmlmeinfo->network;
-
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-
-       eth_broadcast_addr(pwlanhdr->addr1);
-       memcpy(pwlanhdr->addr2, myid(&adapt->eeprompriv), ETH_ALEN);
-       memcpy(pwlanhdr->addr3, get_my_bssid(cur_network), ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
-       SetFrameSubType(pframe, WIFI_BEACON);
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       /* timestamp will be inserted by hardware */
-       pframe += 8;
-       pktlen += 8;
-
-       /*  beacon interval: 2 bytes */
-       memcpy(pframe, (unsigned char *)(rtw_get_beacon_interval_from_ie(cur_network->IEs)), 2);
-
-       pframe += 2;
-       pktlen += 2;
-
-       /*  capability info: 2 bytes */
-       memcpy(pframe, (unsigned char *)(rtw_get_capability_from_ie(cur_network->IEs)), 2);
-
-       pframe += 2;
-       pktlen += 2;
-
-       if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) {
-               pktlen += cur_network->IELength - sizeof(struct ndis_802_11_fixed_ie);
-               memcpy(pframe, cur_network->IEs + sizeof(struct ndis_802_11_fixed_ie), pktlen);
-
-               goto _ConstructBeacon;
-       }
-
-       /* below for ad-hoc mode */
-
-       /*  SSID */
-       pframe = rtw_set_ie(pframe, _SSID_IE_, cur_network->Ssid.SsidLength, cur_network->Ssid.Ssid, &pktlen);
-
-       /*  supported rates... */
-       rate_len = rtw_get_rateset_len(cur_network->SupportedRates);
-       pframe = rtw_set_ie(pframe, _SUPPORTEDRATES_IE_, ((rate_len > 8) ? 8 : rate_len), cur_network->SupportedRates, &pktlen);
-
-       /*  DS parameter set */
-       pframe = rtw_set_ie(pframe, _DSSET_IE_, 1, (unsigned char *)&cur_network->Configuration.DSConfig, &pktlen);
-
-       if ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) {
-               u32 ATIMWindow;
-               /*  IBSS Parameter Set... */
-               ATIMWindow = 0;
-               pframe = rtw_set_ie(pframe, _IBSS_PARA_IE_, 2, (unsigned char *)(&ATIMWindow), &pktlen);
-       }
-
-       /* todo: ERP IE */
-
-       /*  EXTERNDED SUPPORTED RATE */
-       if (rate_len > 8)
-               pframe = rtw_set_ie(pframe, _EXT_SUPPORTEDRATES_IE_, (rate_len - 8), (cur_network->SupportedRates + 8), &pktlen);
-
-       /* todo:HT for adhoc */
-
-_ConstructBeacon:
-
-       if ((pktlen + TXDESC_SIZE) > 512)
-               return;
-
-       *pLength = pktlen;
-}
-
-static void ConstructPSPoll(struct adapter *adapt, u8 *pframe, u32 *pLength)
-{
-       struct ieee80211_hdr *pwlanhdr;
-       struct mlme_ext_priv *pmlmeext = &adapt->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       __le16 *fctrl;
-
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       /*  Frame control. */
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-       SetPwrMgt(fctrl);
-       SetFrameSubType(pframe, WIFI_PSPOLL);
-
-       /*  AID. */
-       SetDuration(pframe, (pmlmeinfo->aid | 0xc000));
-
-       /*  BSSID. */
-       memcpy(pwlanhdr->addr1, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-
-       /*  TA. */
-       memcpy(pwlanhdr->addr2, myid(&adapt->eeprompriv), ETH_ALEN);
-
-       *pLength = 16;
-}
-
-static void ConstructNullFunctionData(struct adapter *adapt, u8 *pframe,
-       u32 *pLength,
-       u8 *StaAddr,
-       u8 bQoS,
-       u8 AC,
-       u8 bEosp,
-       u8 bForcePowerSave)
-{
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       u32 pktlen;
-       struct mlme_priv *pmlmepriv = &adapt->mlmepriv;
-       struct wlan_network             *cur_network = &pmlmepriv->cur_network;
-       struct mlme_ext_priv *pmlmeext = &adapt->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-       if (bForcePowerSave)
-               SetPwrMgt(fctrl);
-
-       switch (cur_network->network.InfrastructureMode) {
-       case Ndis802_11Infrastructure:
-               SetToDs(fctrl);
-               memcpy(pwlanhdr->addr1, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-               memcpy(pwlanhdr->addr2, myid(&adapt->eeprompriv), ETH_ALEN);
-               memcpy(pwlanhdr->addr3, StaAddr, ETH_ALEN);
-               break;
-       case Ndis802_11APMode:
-               SetFrDs(fctrl);
-               memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
-               memcpy(pwlanhdr->addr2, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-               memcpy(pwlanhdr->addr3, myid(&adapt->eeprompriv), ETH_ALEN);
-               break;
-       case Ndis802_11IBSS:
-       default:
-               memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
-               memcpy(pwlanhdr->addr2, myid(&adapt->eeprompriv), ETH_ALEN);
-               memcpy(pwlanhdr->addr3, get_my_bssid(&pmlmeinfo->network), ETH_ALEN);
-               break;
-       }
-
-       SetSeqNum(pwlanhdr, 0);
-
-       if (bQoS) {
-               struct ieee80211_qos_hdr *pwlanqoshdr;
-
-               SetFrameSubType(pframe, WIFI_QOS_DATA_NULL);
-
-               pwlanqoshdr = (struct ieee80211_qos_hdr *)pframe;
-               SetPriority(&pwlanqoshdr->qos_ctrl, AC);
-               SetEOSP(&pwlanqoshdr->qos_ctrl, bEosp);
-
-               pktlen = sizeof(struct ieee80211_qos_hdr);
-       } else {
-               SetFrameSubType(pframe, WIFI_DATA_NULL);
-
-               pktlen = sizeof(struct ieee80211_qos_hdr);
-       }
-
-       *pLength = pktlen;
-}
-
-static void ConstructProbeRsp(struct adapter *adapt, u8 *pframe, u32 *pLength, u8 *StaAddr, bool bHideSSID)
-{
-       struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
-       u8 *mac, *bssid;
-       u32 pktlen;
-       struct mlme_ext_priv *pmlmeext = &adapt->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex    *cur_network = &pmlmeinfo->network;
-
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       mac = myid(&adapt->eeprompriv);
-       bssid = cur_network->MacAddress;
-
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
-       memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
-       memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
-       memcpy(pwlanhdr->addr3, bssid, ETH_ALEN);
-
-       SetSeqNum(pwlanhdr, 0);
-       SetFrameSubType(fctrl, WIFI_PROBERSP);
-
-       pktlen = sizeof(struct ieee80211_hdr_3addr);
-       pframe += pktlen;
-
-       if (cur_network->IELength > MAX_IE_SZ)
-               return;
-
-       memcpy(pframe, cur_network->IEs, cur_network->IELength);
-       pframe += cur_network->IELength;
-       pktlen += cur_network->IELength;
-
-       *pLength = pktlen;
-}
-
-/*  To check if reserved page content is destroyed by beacon because beacon is too large. */
-/*  2010.06.23. Added by tynli. */
-void CheckFwRsvdPageContent(struct adapter *Adapter)
-{
-}
-
-/*  */
-/*  Description: Fill the reserved packets that FW will use to RSVD page. */
-/*                     Now we just send 4 types packet to rsvd page. */
-/*                     (1)Beacon, (2)Ps-poll, (3)Null data, (4)ProbeRsp. */
-/*     Input: */
-/*         bDLFinished - false: At the first time we will send all the packets as a large packet to Hw, */
-/*                                             so we need to set the packet length to total length. */
-/*                           true: At the second time, we should send the first packet (default:beacon) */
-/*                                             to Hw again and set the length in descriptor to the real beacon length. */
-/*  2009.10.15 by tynli. */
-static void SetFwRsvdPagePkt(struct adapter *adapt, bool bDLFinished)
-{
-       struct xmit_frame       *pmgntframe;
-       struct pkt_attrib       *pattrib;
-       struct xmit_priv *pxmitpriv;
-       struct mlme_ext_priv *pmlmeext;
-       struct mlme_ext_info    *pmlmeinfo;
-       u32 BeaconLength = 0, ProbeRspLength = 0, PSPollLength;
-       u32 NullDataLength, QosNullLength;
-       u8 *ReservedPagePacket;
-       u8 PageNum, PageNeed, TxDescLen;
-       u16 BufIndex;
-       u32 TotalPacketLen;
-       struct rsvdpage_loc RsvdPageLoc;
-
-       ReservedPagePacket = kzalloc(1000, GFP_KERNEL);
-       if (!ReservedPagePacket)
-               return;
-
-       pxmitpriv = &adapt->xmitpriv;
-       pmlmeext = &adapt->mlmeextpriv;
-       pmlmeinfo = &pmlmeext->mlmext_info;
-
-       TxDescLen = TXDESC_SIZE;
-       PageNum = 0;
-
-       /* 3 (1) beacon * 2 pages */
-       BufIndex = TXDESC_OFFSET;
-       ConstructBeacon(adapt, &ReservedPagePacket[BufIndex], &BeaconLength);
-
-       /*  When we count the first page size, we need to reserve description size for the RSVD */
-       /*  packet, it will be filled in front of the packet in TXPKTBUF. */
-       PageNeed = (u8)PageNum_128(TxDescLen + BeaconLength);
-       /*  To reserved 2 pages for beacon buffer. 2010.06.24. */
-       if (PageNeed == 1)
-               PageNeed += 1;
-       PageNum += PageNeed;
-
-       BufIndex += PageNeed * 128;
-
-       /* 3 (2) ps-poll *1 page */
-       RsvdPageLoc.LocPsPoll = PageNum;
-       ConstructPSPoll(adapt, &ReservedPagePacket[BufIndex], &PSPollLength);
-       rtl8188e_fill_fake_txdesc(adapt, &ReservedPagePacket[BufIndex - TxDescLen], PSPollLength, true, false);
-
-       PageNeed = (u8)PageNum_128(TxDescLen + PSPollLength);
-       PageNum += PageNeed;
-
-       BufIndex += PageNeed * 128;
-
-       /* 3 (3) null data * 1 page */
-       RsvdPageLoc.LocNullData = PageNum;
-       ConstructNullFunctionData(adapt, &ReservedPagePacket[BufIndex], &NullDataLength, get_my_bssid(&pmlmeinfo->network), false, 0, 0, false);
-       rtl8188e_fill_fake_txdesc(adapt, &ReservedPagePacket[BufIndex - TxDescLen], NullDataLength, false, false);
-
-       PageNeed = (u8)PageNum_128(TxDescLen + NullDataLength);
-       PageNum += PageNeed;
-
-       BufIndex += PageNeed * 128;
-
-       /* 3 (4) probe response * 1page */
-       RsvdPageLoc.LocProbeRsp = PageNum;
-       ConstructProbeRsp(adapt, &ReservedPagePacket[BufIndex], &ProbeRspLength, get_my_bssid(&pmlmeinfo->network), false);
-       rtl8188e_fill_fake_txdesc(adapt, &ReservedPagePacket[BufIndex - TxDescLen], ProbeRspLength, false, false);
-
-       PageNeed = (u8)PageNum_128(TxDescLen + ProbeRspLength);
-       PageNum += PageNeed;
-
-       BufIndex += PageNeed * 128;
-
-       /* 3 (5) Qos null data */
-       RsvdPageLoc.LocQosNull = PageNum;
-       ConstructNullFunctionData(adapt, &ReservedPagePacket[BufIndex],
-                                 &QosNullLength, get_my_bssid(&pmlmeinfo->network), true, 0, 0, false);
-       rtl8188e_fill_fake_txdesc(adapt, &ReservedPagePacket[BufIndex - TxDescLen], QosNullLength, false, false);
-
-       PageNeed = (u8)PageNum_128(TxDescLen + QosNullLength);
-       PageNum += PageNeed;
-
-       TotalPacketLen = BufIndex + QosNullLength;
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (!pmgntframe)
-               goto exit;
-
-       /*  update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(adapt, pattrib);
-       pattrib->qsel = 0x10;
-       pattrib->last_txcmdsz = TotalPacketLen - TXDESC_OFFSET;
-       pattrib->pktlen = pattrib->last_txcmdsz;
-       memcpy(pmgntframe->buf_addr, ReservedPagePacket, TotalPacketLen);
-
-       rtl8188eu_mgnt_xmit(adapt, pmgntframe);
-
-       FillH2CCmd_88E(adapt, H2C_COM_RSVD_PAGE, sizeof(RsvdPageLoc), (u8 *)&RsvdPageLoc);
-
-exit:
-       kfree(ReservedPagePacket);
-}
-
-void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *adapt, u8 mstatus)
-{
-       struct hal_data_8188e *haldata = &adapt->haldata;
-       struct mlme_ext_priv *pmlmeext = &adapt->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       bool    bSendBeacon = false;
-       bool    bcn_valid = false;
-       u8 DLBcnCount = 0;
-       u32 poll = 0;
-       u8 reg;
-       int res;
-
-       if (mstatus == 1) {
-               /*  We should set AID, correct TSF, HW seq enable before set JoinBssReport to Fw in 88/92C. */
-               /*  Suggested by filen. Added by tynli. */
-               rtw_write16(adapt, REG_BCN_PSR_RPT, (0xC000 | pmlmeinfo->aid));
-               /*  Do not set TSF again here or vWiFi beacon DMA INT will not work. */
-
-               /* Set REG_CR bit 8. DMA beacon by SW. */
-               haldata->RegCR_1 |= BIT(0);
-               rtw_write8(adapt,  REG_CR + 1, haldata->RegCR_1);
-
-               /*  Disable Hw protection for a time which revserd for Hw sending beacon. */
-               /*  Fix download reserved page packet fail that access collision with the protection time. */
-               /*  2010.05.11. Added by tynli. */
-               res = rtw_read8(adapt, REG_BCN_CTRL, &reg);
-               if (res)
-                       return;
-
-               rtw_write8(adapt, REG_BCN_CTRL, reg & (~BIT(3)));
-
-               res = rtw_read8(adapt, REG_BCN_CTRL, &reg);
-               if (res)
-                       return;
-
-               rtw_write8(adapt, REG_BCN_CTRL, reg | BIT(4));
-
-               if (haldata->RegFwHwTxQCtrl & BIT(6))
-                       bSendBeacon = true;
-
-               /*  Set FWHW_TXQ_CTRL 0x422[6]=0 to tell Hw the packet is not a real beacon frame. */
-               rtw_write8(adapt, REG_FWHW_TXQ_CTRL + 2, (haldata->RegFwHwTxQCtrl & (~BIT(6))));
-               haldata->RegFwHwTxQCtrl &= (~BIT(6));
-
-               clear_beacon_valid_bit(adapt);
-               DLBcnCount = 0;
-               poll = 0;
-               do {
-                       /*  download rsvd page. */
-                       SetFwRsvdPagePkt(adapt, false);
-                       DLBcnCount++;
-                       do {
-                               yield();
-                               /* mdelay(10); */
-                               /*  check rsvd page download OK. */
-                               bcn_valid = get_beacon_valid_bit(adapt);
-                               poll++;
-                       } while (!bcn_valid && (poll % 10) != 0 && !adapt->bSurpriseRemoved && !adapt->bDriverStopped);
-               } while (!bcn_valid && DLBcnCount <= 100 && !adapt->bSurpriseRemoved && !adapt->bDriverStopped);
-
-               /*  */
-               /*  We just can send the reserved page twice during the time that Tx thread is stopped (e.g. pnpsetpower) */
-               /*  because we need to free the Tx BCN Desc which is used by the first reserved page packet. */
-               /*  At run time, we cannot get the Tx Desc until it is released in TxHandleInterrupt() so we will return */
-               /*  the beacon TCB in the following code. 2011.11.23. by tynli. */
-               /*  */
-
-               /*  Enable Bcn */
-               res = rtw_read8(adapt, REG_BCN_CTRL, &reg);
-               if (res)
-                       return;
-
-               rtw_write8(adapt, REG_BCN_CTRL, reg | BIT(3));
-
-               res = rtw_read8(adapt, REG_BCN_CTRL, &reg);
-               if (res)
-                       return;
-
-               rtw_write8(adapt, REG_BCN_CTRL, reg & (~BIT(4)));
-
-               /*  To make sure that if there exists an adapter which would like to send beacon. */
-               /*  If exists, the origianl value of 0x422[6] will be 1, we should check this to */
-               /*  prevent from setting 0x422[6] to 0 after download reserved page, or it will cause */
-               /*  the beacon cannot be sent by HW. */
-               /*  2010.06.23. Added by tynli. */
-               if (bSendBeacon) {
-                       rtw_write8(adapt, REG_FWHW_TXQ_CTRL + 2, (haldata->RegFwHwTxQCtrl | BIT(6)));
-                       haldata->RegFwHwTxQCtrl |= BIT(6);
-               }
-
-               /*  Update RSVD page location H2C to Fw. */
-               if (bcn_valid)
-                       clear_beacon_valid_bit(adapt);
-
-               /*  Do not enable HW DMA BCN or it will cause Pcie interface hang by timing issue. 2011.11.24. by tynli. */
-               /*  Clear CR[8] or beacon packet will not be send to TxBuf anymore. */
-               haldata->RegCR_1 &= (~BIT(0));
-               rtw_write8(adapt,  REG_CR + 1, haldata->RegCR_1);
-       }
-
-}
-
-void rtl8188e_set_p2p_ps_offload_cmd(struct adapter *adapt, u8 p2p_ps_state)
-{
-       struct hal_data_8188e *haldata = &adapt->haldata;
-       struct wifidirect_info  *pwdinfo = &adapt->wdinfo;
-       struct P2P_PS_Offload_t *p2p_ps_offload = &haldata->p2p_ps_offload;
-       u8 i;
-
-       switch (p2p_ps_state) {
-       case P2P_PS_DISABLE:
-               memset(p2p_ps_offload, 0, 1);
-               break;
-       case P2P_PS_ENABLE:
-               /*  update CTWindow value. */
-               if (pwdinfo->ctwindow > 0) {
-                       p2p_ps_offload->CTWindow_En = 1;
-                       rtw_write8(adapt, REG_P2P_CTWIN, pwdinfo->ctwindow);
-               }
-
-               /*  hw only support 2 set of NoA */
-               for (i = 0; i < pwdinfo->noa_num; i++) {
-                       /*  To control the register setting for which NOA */
-                       rtw_write8(adapt, REG_NOA_DESC_SEL, (i << 4));
-                       if (i == 0)
-                               p2p_ps_offload->NoA0_En = 1;
-                       else
-                               p2p_ps_offload->NoA1_En = 1;
-
-                       /*  config P2P NoA Descriptor Register */
-                       rtw_write32(adapt, REG_NOA_DESC_DURATION, pwdinfo->noa_duration[i]);
-                       rtw_write32(adapt, REG_NOA_DESC_INTERVAL, pwdinfo->noa_interval[i]);
-                       rtw_write32(adapt, REG_NOA_DESC_START, pwdinfo->noa_start_time[i]);
-                       rtw_write8(adapt, REG_NOA_DESC_COUNT, pwdinfo->noa_count[i]);
-               }
-
-               if ((pwdinfo->opp_ps == 1) || (pwdinfo->noa_num > 0)) {
-                       /*  rst p2p circuit */
-                       rtw_write8(adapt, REG_DUAL_TSF_RST, BIT(4));
-
-                       p2p_ps_offload->Offload_En = 1;
-
-                       if (pwdinfo->role == P2P_ROLE_GO) {
-                               p2p_ps_offload->role = 1;
-                               p2p_ps_offload->AllStaSleep = 0;
-                       } else {
-                               p2p_ps_offload->role = 0;
-                       }
-
-                       p2p_ps_offload->discovery = 0;
-               }
-               break;
-       case P2P_PS_SCAN:
-               p2p_ps_offload->discovery = 1;
-               break;
-       case P2P_PS_SCAN_DONE:
-               p2p_ps_offload->discovery = 0;
-               pwdinfo->p2p_ps_state = P2P_PS_ENABLE;
-               break;
-       default:
-               break;
-       }
-
-       FillH2CCmd_88E(adapt, H2C_PS_P2P_OFFLOAD, 1, (u8 *)p2p_ps_offload);
-}
diff --git a/drivers/staging/r8188eu/hal/rtl8188e_dm.c b/drivers/staging/r8188eu/hal/rtl8188e_dm.c
deleted file mode 100644 (file)
index 0399872..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-/*  This file is for 92CE/92CU dynamic mechanism only */
-#define _RTL8188E_DM_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/rtl8188e_hal.h"
-
-/*  Initialize GPIO setting registers */
-static void dm_InitGPIOSetting(struct adapter *Adapter)
-{
-       u8      tmp1byte;
-       int res;
-
-       res = rtw_read8(Adapter, REG_GPIO_MUXCFG, &tmp1byte);
-       if (res)
-               return;
-
-       tmp1byte &= (GPIOSEL_GPIO | ~GPIOSEL_ENBT);
-
-       rtw_write8(Adapter, REG_GPIO_MUXCFG, tmp1byte);
-}
-
-/*  */
-/*  functions */
-/*  */
-static void Update_ODM_ComInfo_88E(struct adapter *Adapter)
-{
-       struct mlme_ext_priv    *pmlmeext = &Adapter->mlmeextpriv;
-       struct mlme_priv        *pmlmepriv = &Adapter->mlmepriv;
-       struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv;
-       struct hal_data_8188e *hal_data = &Adapter->haldata;
-       struct odm_dm_struct *dm_odm = &hal_data->odmpriv;
-       struct dm_priv  *pdmpriv = &hal_data->dmpriv;
-       int i;
-
-       pdmpriv->InitODMFlag = ODM_BB_RSSI_MONITOR;
-       if (hal_data->AntDivCfg)
-               pdmpriv->InitODMFlag |= ODM_BB_ANT_DIV;
-
-       dm_odm->SupportAbility = pdmpriv->InitODMFlag;
-
-       dm_odm->pWirelessMode = &pmlmeext->cur_wireless_mode;
-       dm_odm->pSecChOffset = &hal_data->nCur40MhzPrimeSC;
-       dm_odm->pBandWidth = &hal_data->CurrentChannelBW;
-       dm_odm->pChannel = &hal_data->CurrentChannel;
-       dm_odm->pbScanInProcess = &pmlmepriv->bScanInProcess;
-       dm_odm->pbPowerSaving = &pwrctrlpriv->bpower_saving;
-
-       ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_RF_ANTENNA_TYPE, hal_data->TRxAntDivType);
-
-       for (i = 0; i < NUM_STA; i++)
-               dm_odm->pODM_StaInfo[i] = NULL;
-}
-
-void rtl8188e_InitHalDm(struct adapter *Adapter)
-{
-       struct hal_data_8188e *hal_data = &Adapter->haldata;
-       struct odm_dm_struct *dm_odm = &hal_data->odmpriv;
-
-       dm_InitGPIOSetting(Adapter);
-       Update_ODM_ComInfo_88E(Adapter);
-       ODM_DMInit(dm_odm);
-}
-
-void rtl8188e_HalDmWatchDog(struct adapter *Adapter)
-{
-       u8 hw_init_completed = Adapter->hw_init_completed;
-       struct hal_data_8188e *hal_data = &Adapter->haldata;
-       struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
-       u8 bLinked = false;
-
-       if (!hw_init_completed)
-               return;
-
-       if ((check_fwstate(pmlmepriv, WIFI_AP_STATE)) ||
-           (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE))) {
-               if (Adapter->stapriv.asoc_sta_count > 2)
-                       bLinked = true;
-       } else {/* Station mode */
-               if (check_fwstate(pmlmepriv, _FW_LINKED))
-                       bLinked = true;
-       }
-
-       hal_data->odmpriv.bLinked = bLinked;
-       ODM_DMWatchdog(&hal_data->odmpriv);
-}
-
-void rtl8188e_init_dm_priv(struct adapter *Adapter)
-{
-       struct hal_data_8188e *hal_data = &Adapter->haldata;
-       struct dm_priv  *pdmpriv = &hal_data->dmpriv;
-       struct odm_dm_struct *dm_odm = &hal_data->odmpriv;
-
-       memset(pdmpriv, 0, sizeof(struct dm_priv));
-       memset(dm_odm, 0, sizeof(*dm_odm));
-
-       dm_odm->Adapter = Adapter;
-       ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_MP_TEST_CHIP, IS_NORMAL_CHIP(hal_data->VersionID));
-       ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_RF_ANTENNA_TYPE, hal_data->TRxAntDivType);
-}
-
-/*  Add new function to reset the state of antenna diversity before link. */
-/*  Compare RSSI for deciding antenna */
-void AntDivCompare8188E(struct adapter *Adapter, struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src)
-{
-       struct hal_data_8188e *hal_data = &Adapter->haldata;
-
-       if (0 != hal_data->AntDivCfg) {
-               /* select optimum_antenna for before linked =>For antenna diversity */
-               if (dst->Rssi >=  src->Rssi) {/* keep org parameter */
-                       src->Rssi = dst->Rssi;
-                       src->PhyInfo.Optimum_antenna = dst->PhyInfo.Optimum_antenna;
-               }
-       }
-}
-
-/*  Add new function to reset the state of antenna diversity before link. */
-u8 AntDivBeforeLink8188E(struct adapter *Adapter)
-{
-       struct hal_data_8188e *hal_data = &Adapter->haldata;
-       struct odm_dm_struct *dm_odm = &hal_data->odmpriv;
-       struct sw_ant_switch *dm_swat_tbl = &dm_odm->DM_SWAT_Table;
-       struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
-
-       /*  Condition that does not need to use antenna diversity. */
-       if (hal_data->AntDivCfg == 0)
-               return false;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED))
-               return false;
-
-       if (dm_swat_tbl->SWAS_NoLink_State == 0) {
-               /* switch channel */
-               dm_swat_tbl->SWAS_NoLink_State = 1;
-               dm_swat_tbl->CurAntenna = (dm_swat_tbl->CurAntenna == Antenna_A) ? Antenna_B : Antenna_A;
-
-               rtw_antenna_select_cmd(Adapter, dm_swat_tbl->CurAntenna, false);
-               return true;
-       } else {
-               dm_swat_tbl->SWAS_NoLink_State = 0;
-               return false;
-       }
-}
diff --git a/drivers/staging/r8188eu/hal/rtl8188e_hal_init.c b/drivers/staging/r8188eu/hal/rtl8188e_hal_init.c
deleted file mode 100644 (file)
index 73855bc..0000000
+++ /dev/null
@@ -1,922 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _HAL_INIT_C_
-
-#include "../include/drv_types.h"
-#include "../include/rtw_efuse.h"
-#include "../include/rtl8188e_hal.h"
-#include "../include/rtw_iol.h"
-#include "../include/usb_ops.h"
-#include "../include/rtw_fw.h"
-
-static void iol_mode_enable(struct adapter *padapter, u8 enable)
-{
-       u8 reg_0xf0 = 0;
-       int res;
-
-       if (enable) {
-               /* Enable initial offload */
-               res = rtw_read8(padapter, REG_SYS_CFG, &reg_0xf0);
-               if (res)
-                       return;
-
-               rtw_write8(padapter, REG_SYS_CFG, reg_0xf0 | SW_OFFLOAD_EN);
-
-               if (!padapter->bFWReady)
-                       rtw_reset_8051(padapter);
-
-       } else {
-               /* disable initial offload */
-               res = rtw_read8(padapter, REG_SYS_CFG, &reg_0xf0);
-               if (res)
-                       return;
-
-               rtw_write8(padapter, REG_SYS_CFG, reg_0xf0 & ~SW_OFFLOAD_EN);
-       }
-}
-
-static s32 iol_execute(struct adapter *padapter, u8 control)
-{
-       s32 status = _FAIL;
-       u8 reg_0x88 = 0;
-       unsigned long timeout;
-       int res;
-
-       control = control & 0x0f;
-       res = rtw_read8(padapter, REG_HMEBOX_E0, &reg_0x88);
-       if (res)
-               return _FAIL;
-
-       rtw_write8(padapter, REG_HMEBOX_E0,  reg_0x88 | control);
-
-       timeout = jiffies + msecs_to_jiffies(1000);
-
-       do {
-               res = rtw_read8(padapter, REG_HMEBOX_E0, &reg_0x88);
-               if (res)
-                       continue;
-
-               if (!(reg_0x88 & control))
-                       break;
-
-       } while (time_before(jiffies, timeout));
-
-       res = rtw_read8(padapter, REG_HMEBOX_E0, &reg_0x88);
-       if (res)
-               return _FAIL;
-
-       status = (reg_0x88 & control) ? _FAIL : _SUCCESS;
-       if (reg_0x88 & control << 4)
-               status = _FAIL;
-       return status;
-}
-
-static s32 iol_InitLLTTable(struct adapter *padapter, u8 txpktbuf_bndy)
-{
-       s32 rst = _SUCCESS;
-       iol_mode_enable(padapter, 1);
-       rtw_write8(padapter, REG_TDECTRL + 1, txpktbuf_bndy);
-       rst = iol_execute(padapter, CMD_INIT_LLT);
-       iol_mode_enable(padapter, 0);
-       return rst;
-}
-
-static void
-efuse_phymap_to_logical(u8 *phymap, u16 _size_byte, u8  *pbuf)
-{
-       u8 *efuseTbl = NULL;
-       u8 rtemp8;
-       u16     eFuse_Addr = 0;
-       u8 offset, wren;
-       u16     i, j;
-       u16     **eFuseWord = NULL;
-       u8 u1temp = 0;
-
-       efuseTbl = kzalloc(EFUSE_MAP_LEN_88E, GFP_KERNEL);
-       if (!efuseTbl)
-               goto exit;
-
-       eFuseWord = rtw_malloc2d(EFUSE_MAX_SECTION_88E, EFUSE_MAX_WORD_UNIT, sizeof(u16));
-       if (!eFuseWord)
-               goto exit;
-
-       /*  0. Refresh efuse init map as all oxFF. */
-       for (i = 0; i < EFUSE_MAX_SECTION_88E; i++)
-               for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++)
-                       eFuseWord[i][j] = 0xFFFF;
-
-       /*  */
-       /*  1. Read the first byte to check if efuse is empty!!! */
-       /*  */
-       /*  */
-       rtemp8 = *(phymap + eFuse_Addr);
-       if (rtemp8 != 0xFF) {
-               eFuse_Addr++;
-       } else {
-               goto exit;
-       }
-
-       /*  */
-       /*  2. Read real efuse content. Filter PG header and every section data. */
-       /*  */
-       while ((rtemp8 != 0xFF) && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) {
-               /*  Check PG header for section num. */
-               if ((rtemp8 & 0x1F) == 0x0F) {          /* extended header */
-                       u1temp = ((rtemp8 & 0xE0) >> 5);
-                       rtemp8 = *(phymap + eFuse_Addr);
-                       if ((rtemp8 & 0x0F) == 0x0F) {
-                               eFuse_Addr++;
-                               rtemp8 = *(phymap + eFuse_Addr);
-
-                               if (rtemp8 != 0xFF && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E))
-                                       eFuse_Addr++;
-                               continue;
-                       } else {
-                               offset = ((rtemp8 & 0xF0) >> 1) | u1temp;
-                               wren = (rtemp8 & 0x0F);
-                               eFuse_Addr++;
-                       }
-               } else {
-                       offset = ((rtemp8 >> 4) & 0x0f);
-                       wren = (rtemp8 & 0x0f);
-               }
-
-               if (offset < EFUSE_MAX_SECTION_88E) {
-                       /*  Get word enable value from PG header */
-                       for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {
-                               /*  Check word enable condition in the section */
-                               if (!(wren & 0x01)) {
-                                       rtemp8 = *(phymap + eFuse_Addr);
-                                       eFuse_Addr++;
-                                       eFuseWord[offset][i] = (rtemp8 & 0xff);
-                                       if (eFuse_Addr >= EFUSE_REAL_CONTENT_LEN_88E)
-                                               break;
-                                       rtemp8 = *(phymap + eFuse_Addr);
-                                       eFuse_Addr++;
-                                       eFuseWord[offset][i] |= (((u16)rtemp8 << 8) & 0xff00);
-
-                                       if (eFuse_Addr >= EFUSE_REAL_CONTENT_LEN_88E)
-                                               break;
-                               }
-                               wren >>= 1;
-                       }
-               }
-               /*  Read next PG header */
-               rtemp8 = *(phymap + eFuse_Addr);
-
-               if (rtemp8 != 0xFF && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) {
-                       eFuse_Addr++;
-               }
-       }
-
-       /*  */
-       /*  3. Collect 16 sections and 4 word unit into Efuse map. */
-       /*  */
-       for (i = 0; i < EFUSE_MAX_SECTION_88E; i++) {
-               for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++) {
-                       efuseTbl[(i * 8) + (j * 2)] = (eFuseWord[i][j] & 0xff);
-                       efuseTbl[(i * 8) + ((j * 2) + 1)] = ((eFuseWord[i][j] >> 8) & 0xff);
-               }
-       }
-
-       /*  */
-       /*  4. Copy from Efuse map to output pointer memory!!! */
-       /*  */
-       memcpy(pbuf, efuseTbl, _size_byte);
-
-exit:
-       kfree(efuseTbl);
-       kfree(eFuseWord);
-}
-
-/* FIXME: add error handling in callers */
-static int efuse_read_phymap_from_txpktbuf(
-       struct adapter  *adapter,
-       u8 *content,    /* buffer to store efuse physical map */
-       u16 *size       /* for efuse content: the max byte to read. will update to byte read */
-       )
-{
-       unsigned long timeout;
-       __le32 lo32 = 0, hi32 = 0;
-       u16 len = 0, count = 0;
-       int i = 0, res;
-       u16 limit = *size;
-       u8 reg;
-       u8 *pos = content;
-       u32 reg32;
-
-       rtw_write8(adapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT);
-
-       while (1) {
-               rtw_write16(adapter, REG_PKTBUF_DBG_ADDR, i);
-
-               rtw_write8(adapter, REG_TXPKTBUF_DBG, 0);
-               timeout = jiffies + msecs_to_jiffies(1000);
-               do {
-                       res = rtw_read8(adapter, REG_TXPKTBUF_DBG, &reg);
-                       if (res)
-                               continue;
-
-                       if (reg)
-                               break;
-
-                       msleep(1);
-               } while (time_before(jiffies, timeout));
-
-               /* data from EEPROM needs to be in LE */
-               res = rtw_read32(adapter, REG_PKTBUF_DBG_DATA_L, &reg32);
-               if (res)
-                       return res;
-
-               lo32 = cpu_to_le32(reg32);
-
-               res = rtw_read32(adapter, REG_PKTBUF_DBG_DATA_H, &reg32);
-               if (res)
-                       return res;
-
-               hi32 = cpu_to_le32(reg32);
-
-               if (i == 0) {
-                       u16 reg;
-
-                       /* Although lenc is only used in a debug statement,
-                        * do not remove it as the rtw_read16() call consumes
-                        * 2 bytes from the EEPROM source.
-                        */
-                       res = rtw_read16(adapter, REG_PKTBUF_DBG_DATA_L, &reg);
-                       if (res)
-                               return res;
-
-                       len = le32_to_cpu(lo32) & 0x0000ffff;
-
-                       limit = (len - 2 < limit) ? len - 2 : limit;
-
-                       memcpy(pos, ((u8 *)&lo32) + 2, (limit >= count + 2) ? 2 : limit - count);
-                       count += (limit >= count + 2) ? 2 : limit - count;
-                       pos = content + count;
-               } else {
-                       memcpy(pos, ((u8 *)&lo32), (limit >= count + 4) ? 4 : limit - count);
-                       count += (limit >= count + 4) ? 4 : limit - count;
-                       pos = content + count;
-               }
-
-               if (limit > count && len - 2 > count) {
-                       memcpy(pos, (u8 *)&hi32, (limit >= count + 4) ? 4 : limit - count);
-                       count += (limit >= count + 4) ? 4 : limit - count;
-                       pos = content + count;
-               }
-
-               if (limit <= count || len - 2 <= count)
-                       break;
-               i++;
-       }
-       rtw_write8(adapter, REG_PKT_BUFF_ACCESS_CTRL, DISABLE_TRXPKT_BUF_ACCESS);
-       *size = count;
-
-       return 0;
-}
-
-static s32 iol_read_efuse(struct adapter *padapter, u16 size_byte, u8 *logical_map)
-{
-       s32 status = _FAIL;
-       u8 physical_map[512];
-       u16 size = 512;
-
-       rtw_write8(padapter, REG_TDECTRL + 1, 0);
-       memset(physical_map, 0xFF, 512);
-       rtw_write8(padapter, REG_PKT_BUFF_ACCESS_CTRL, TXPKT_BUF_SELECT);
-       status = iol_execute(padapter, CMD_READ_EFUSE_MAP);
-       if (status == _SUCCESS)
-               efuse_read_phymap_from_txpktbuf(padapter, physical_map, &size);
-       efuse_phymap_to_logical(physical_map, size_byte, logical_map);
-       return status;
-}
-
-s32 rtl8188e_iol_efuse_patch(struct adapter *padapter)
-{
-       s32     result = _SUCCESS;
-
-       if (rtw_IOL_applied(padapter)) {
-               iol_mode_enable(padapter, 1);
-               result = iol_execute(padapter, CMD_READ_EFUSE_MAP);
-               if (result == _SUCCESS)
-                       result = iol_execute(padapter, CMD_EFUSE_PATCH);
-
-               iol_mode_enable(padapter, 0);
-       }
-       return result;
-}
-
-static s32 iol_ioconfig(struct adapter *padapter, u8 iocfg_bndy)
-{
-       s32 rst = _SUCCESS;
-
-       rtw_write8(padapter, REG_TDECTRL + 1, iocfg_bndy);
-       rst = iol_execute(padapter, CMD_IOCONFIG);
-       return rst;
-}
-
-int rtl8188e_IOL_exec_cmds_sync(struct adapter *adapter, struct xmit_frame *xmit_frame, u32 max_wating_ms, u32 bndy_cnt)
-{
-       struct pkt_attrib *pattrib = &xmit_frame->attrib;
-       u8 i;
-       int ret = _FAIL;
-
-       if (rtw_IOL_append_END_cmd(xmit_frame) != _SUCCESS)
-               goto exit;
-       if (rtw_usb_bulk_size_boundary(adapter, TXDESC_SIZE + pattrib->last_txcmdsz)) {
-               if (rtw_IOL_append_END_cmd(xmit_frame) != _SUCCESS)
-                       goto exit;
-       }
-
-       dump_mgntframe_and_wait(adapter, xmit_frame, max_wating_ms);
-
-       iol_mode_enable(adapter, 1);
-       for (i = 0; i < bndy_cnt; i++) {
-               u8 page_no = 0;
-               page_no = i * 2;
-               ret = iol_ioconfig(adapter, page_no);
-               if (ret != _SUCCESS)
-                       break;
-       }
-       iol_mode_enable(adapter, 0);
-exit:
-       /* restore BCN_HEAD */
-       rtw_write8(adapter, REG_TDECTRL + 1, 0);
-       return ret;
-}
-
-void rtl8188e_EfusePowerSwitch(struct adapter *pAdapter, u8 PwrState)
-{
-       u16     tmpV16;
-       int res;
-
-       if (PwrState) {
-               rtw_write8(pAdapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON);
-
-               /*  1.2V Power: From VDDON with Power Cut(0x0000h[15]), default valid */
-               res = rtw_read16(pAdapter, REG_SYS_ISO_CTRL, &tmpV16);
-               if (res)
-                       return;
-
-               if (!(tmpV16 & PWC_EV12V)) {
-                       tmpV16 |= PWC_EV12V;
-                       rtw_write16(pAdapter, REG_SYS_ISO_CTRL, tmpV16);
-               }
-               /*  Reset: 0x0000h[28], default valid */
-               res = rtw_read16(pAdapter, REG_SYS_FUNC_EN, &tmpV16);
-               if (res)
-                       return;
-
-               if (!(tmpV16 & FEN_ELDR)) {
-                       tmpV16 |= FEN_ELDR;
-                       rtw_write16(pAdapter, REG_SYS_FUNC_EN, tmpV16);
-               }
-
-               /*  Clock: Gated(0x0008h[5]) 8M(0x0008h[1]) clock from ANA, default valid */
-               res = rtw_read16(pAdapter, REG_SYS_CLKR, &tmpV16);
-               if (res)
-                       return;
-
-               if ((!(tmpV16 & LOADER_CLK_EN))  || (!(tmpV16 & ANA8M))) {
-                       tmpV16 |= (LOADER_CLK_EN | ANA8M);
-                       rtw_write16(pAdapter, REG_SYS_CLKR, tmpV16);
-               }
-       } else {
-               rtw_write8(pAdapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_OFF);
-       }
-}
-
-static void Hal_EfuseReadEFuse88E(struct adapter *Adapter,
-       u16                     _offset,
-       u16                     _size_byte,
-       u8 *pbuf)
-{
-       u8 *efuseTbl = NULL;
-       u8 rtemp8[1];
-       u16     eFuse_Addr = 0;
-       u8 offset, wren;
-       u16     i, j;
-       u16     **eFuseWord = NULL;
-       u16     efuse_utilized = 0;
-       u8 u1temp = 0;
-
-       /*  */
-       /*  Do NOT excess total size of EFuse table. Added by Roger, 2008.11.10. */
-       /*  */
-       if ((_offset + _size_byte) > EFUSE_MAP_LEN_88E) /*  total E-Fuse table is 512bytes */
-               goto exit;
-
-       efuseTbl = kzalloc(EFUSE_MAP_LEN_88E, GFP_KERNEL);
-       if (!efuseTbl)
-               goto exit;
-
-       eFuseWord = rtw_malloc2d(EFUSE_MAX_SECTION_88E, EFUSE_MAX_WORD_UNIT, sizeof(u16));
-       if (!eFuseWord)
-               goto exit;
-
-       /*  0. Refresh efuse init map as all oxFF. */
-       for (i = 0; i < EFUSE_MAX_SECTION_88E; i++)
-               for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++)
-                       eFuseWord[i][j] = 0xFFFF;
-
-       /*  */
-       /*  1. Read the first byte to check if efuse is empty!!! */
-       /*  */
-       /*  */
-       ReadEFuseByte(Adapter, eFuse_Addr, rtemp8);
-       if (*rtemp8 != 0xFF) {
-               efuse_utilized++;
-               eFuse_Addr++;
-       } else {
-               goto exit;
-       }
-
-       /*  */
-       /*  2. Read real efuse content. Filter PG header and every section data. */
-       /*  */
-       while ((*rtemp8 != 0xFF) && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) {
-               /*  Check PG header for section num. */
-               if ((*rtemp8 & 0x1F) == 0x0F) {         /* extended header */
-                       u1temp = ((*rtemp8 & 0xE0) >> 5);
-
-                       ReadEFuseByte(Adapter, eFuse_Addr, rtemp8);
-
-                       if ((*rtemp8 & 0x0F) == 0x0F) {
-                               eFuse_Addr++;
-                               ReadEFuseByte(Adapter, eFuse_Addr, rtemp8);
-
-                               if (*rtemp8 != 0xFF && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E))
-                                       eFuse_Addr++;
-                               continue;
-                       } else {
-                               offset = ((*rtemp8 & 0xF0) >> 1) | u1temp;
-                               wren = (*rtemp8 & 0x0F);
-                               eFuse_Addr++;
-                       }
-               } else {
-                       offset = ((*rtemp8 >> 4) & 0x0f);
-                       wren = (*rtemp8 & 0x0f);
-               }
-
-               if (offset < EFUSE_MAX_SECTION_88E) {
-                       /*  Get word enable value from PG header */
-
-                       for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {
-                               /*  Check word enable condition in the section */
-                               if (!(wren & 0x01)) {
-                                       ReadEFuseByte(Adapter, eFuse_Addr, rtemp8);
-                                       eFuse_Addr++;
-                                       efuse_utilized++;
-                                       eFuseWord[offset][i] = (*rtemp8 & 0xff);
-                                       if (eFuse_Addr >= EFUSE_REAL_CONTENT_LEN_88E)
-                                               break;
-                                       ReadEFuseByte(Adapter, eFuse_Addr, rtemp8);
-                                       eFuse_Addr++;
-                                       efuse_utilized++;
-                                       eFuseWord[offset][i] |= (((u16)*rtemp8 << 8) & 0xff00);
-                                       if (eFuse_Addr >= EFUSE_REAL_CONTENT_LEN_88E)
-                                               break;
-                               }
-                               wren >>= 1;
-                       }
-               }
-
-               /*  Read next PG header */
-               ReadEFuseByte(Adapter, eFuse_Addr, rtemp8);
-
-               if (*rtemp8 != 0xFF && (eFuse_Addr < EFUSE_REAL_CONTENT_LEN_88E)) {
-                       efuse_utilized++;
-                       eFuse_Addr++;
-               }
-       }
-
-       /*  3. Collect 16 sections and 4 word unit into Efuse map. */
-       for (i = 0; i < EFUSE_MAX_SECTION_88E; i++) {
-               for (j = 0; j < EFUSE_MAX_WORD_UNIT; j++) {
-                       efuseTbl[(i * 8) + (j * 2)] = (eFuseWord[i][j] & 0xff);
-                       efuseTbl[(i * 8) + ((j * 2) + 1)] = ((eFuseWord[i][j] >> 8) & 0xff);
-               }
-       }
-
-       /*  4. Copy from Efuse map to output pointer memory!!! */
-       for (i = 0; i < _size_byte; i++)
-               pbuf[i] = efuseTbl[_offset + i];
-
-exit:
-       kfree(efuseTbl);
-       kfree(eFuseWord);
-}
-
-void rtl8188e_ReadEFuse(struct adapter *Adapter, u16 _size_byte, u8 *pbuf)
-{
-       int ret = _FAIL;
-       if (rtw_IOL_applied(Adapter)) {
-               rtl8188eu_InitPowerOn(Adapter);
-
-               iol_mode_enable(Adapter, 1);
-               ret = iol_read_efuse(Adapter, _size_byte, pbuf);
-               iol_mode_enable(Adapter, 0);
-
-               if (_SUCCESS == ret)
-                       return;
-       }
-
-       Hal_EfuseReadEFuse88E(Adapter, 0, _size_byte, pbuf);
-}
-
-static void dump_chip_info(struct adapter *adapter, struct HAL_VERSION chip_vers)
-{
-       struct net_device *netdev = adapter->pnetdev;
-       char *cut = NULL;
-       char buf[25];
-
-       switch (chip_vers.CUTVersion) {
-       case A_CUT_VERSION:
-               cut = "A_CUT";
-               break;
-       case B_CUT_VERSION:
-               cut = "B_CUT";
-               break;
-       case C_CUT_VERSION:
-               cut = "C_CUT";
-               break;
-       case D_CUT_VERSION:
-               cut = "D_CUT";
-               break;
-       case E_CUT_VERSION:
-               cut = "E_CUT";
-               break;
-       default:
-               snprintf(buf, sizeof(buf), "UNKNOWN_CUT(%d)", chip_vers.CUTVersion);
-               cut = buf;
-               break;
-       }
-
-       netdev_dbg(netdev, "Chip Version Info: CHIP_8188E_%s_%s_%s_1T1R_RomVer(%d)\n",
-                  IS_NORMAL_CHIP(chip_vers) ? "Normal_Chip" : "Test_Chip",
-                  IS_CHIP_VENDOR_TSMC(chip_vers) ? "TSMC" : "UMC",
-                  cut, 0);
-}
-
-void rtl8188e_read_chip_version(struct adapter *padapter)
-{
-       u32                             value32;
-       struct HAL_VERSION              ChipVersion;
-       struct hal_data_8188e *pHalData = &padapter->haldata;
-       int res;
-
-       res = rtw_read32(padapter, REG_SYS_CFG, &value32);
-       if (res)
-               return;
-
-       ChipVersion.ChipType = ((value32 & RTL_ID) ? TEST_CHIP : NORMAL_CHIP);
-
-       ChipVersion.VendorType = ((value32 & VENDOR_ID) ? CHIP_VENDOR_UMC : CHIP_VENDOR_TSMC);
-       ChipVersion.CUTVersion = (value32 & CHIP_VER_RTL_MASK) >> CHIP_VER_RTL_SHIFT; /*  IC version (CUT) */
-
-       dump_chip_info(padapter, ChipVersion);
-
-       pHalData->VersionID = ChipVersion;
-}
-
-void rtl8188e_SetHalODMVar(struct adapter *Adapter, void *pValue1, bool bSet)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       struct odm_dm_struct *podmpriv = &pHalData->odmpriv;
-       struct sta_info *psta = (struct sta_info *)pValue1;
-
-       if (bSet) {
-               podmpriv->pODM_StaInfo[psta->mac_id] = psta;
-               ODM_RAInfo_Init(podmpriv, psta->mac_id);
-       } else {
-               podmpriv->pODM_StaInfo[psta->mac_id] = NULL;
-       }
-}
-
-void hal_notch_filter_8188e(struct adapter *adapter, bool enable)
-{
-       int res;
-       u8 reg;
-
-       res = rtw_read8(adapter, rOFDM0_RxDSP + 1, &reg);
-       if (res)
-               return;
-
-       if (enable)
-               rtw_write8(adapter, rOFDM0_RxDSP + 1, reg | BIT(1));
-       else
-               rtw_write8(adapter, rOFDM0_RxDSP + 1, reg & ~BIT(1));
-}
-
-/*  */
-/*  */
-/*  LLT R/W/Init function */
-/*  */
-/*  */
-static s32 _LLTWrite(struct adapter *padapter, u32 address, u32 data)
-{
-       s32     count;
-       u32     value = _LLT_INIT_ADDR(address) | _LLT_INIT_DATA(data) | _LLT_OP(_LLT_WRITE_ACCESS);
-       u16     LLTReg = REG_LLT_INIT;
-       int res;
-
-       rtw_write32(padapter, LLTReg, value);
-
-       /* polling */
-       for (count = 0; count <= POLLING_LLT_THRESHOLD; count++) {
-               res = rtw_read32(padapter, LLTReg, &value);
-               if (res)
-                       continue;
-
-               if (_LLT_NO_ACTIVE == _LLT_OP_VALUE(value))
-                       break;
-       }
-
-       return count > POLLING_LLT_THRESHOLD ? _FAIL : _SUCCESS;
-}
-
-s32 InitLLTTable(struct adapter *padapter, u8 txpktbuf_bndy)
-{
-       s32     status = _FAIL;
-       u32     i;
-       u32     Last_Entry_Of_TxPktBuf = LAST_ENTRY_OF_TX_PKT_BUFFER;/*  176, 22k */
-
-       if (rtw_IOL_applied(padapter)) {
-               status = iol_InitLLTTable(padapter, txpktbuf_bndy);
-       } else {
-               for (i = 0; i < (txpktbuf_bndy - 1); i++) {
-                       status = _LLTWrite(padapter, i, i + 1);
-                       if (_SUCCESS != status)
-                               return status;
-               }
-
-               /*  end of list */
-               status = _LLTWrite(padapter, (txpktbuf_bndy - 1), 0xFF);
-               if (_SUCCESS != status)
-                       return status;
-
-               /*  Make the other pages as ring buffer */
-               /*  This ring buffer is used as beacon buffer if we config this MAC as two MAC transfer. */
-               /*  Otherwise used as local loopback buffer. */
-               for (i = txpktbuf_bndy; i < Last_Entry_Of_TxPktBuf; i++) {
-                       status = _LLTWrite(padapter, i, (i + 1));
-                       if (_SUCCESS != status)
-                               return status;
-               }
-
-               /*  Let last entry point to the start entry of ring buffer */
-               status = _LLTWrite(padapter, Last_Entry_Of_TxPktBuf, txpktbuf_bndy);
-               if (_SUCCESS != status) {
-                       return status;
-               }
-       }
-
-       return status;
-}
-
-void Hal_EfuseParseIDCode88E(struct adapter *padapter, u8 *hwinfo)
-{
-       struct eeprom_priv *pEEPROM = &padapter->eeprompriv;
-       struct net_device *netdev = padapter->pnetdev;
-       u16                     EEPROMId;
-
-       /*  Check 0x8129 again for making sure autoload status!! */
-       EEPROMId = le16_to_cpu(*((__le16 *)hwinfo));
-       if (EEPROMId != RTL_EEPROM_ID) {
-               pr_err("EEPROM ID(%#x) is invalid!!\n", EEPROMId);
-               pEEPROM->bautoload_fail_flag = true;
-       } else {
-               pEEPROM->bautoload_fail_flag = false;
-       }
-
-       netdev_dbg(netdev, "EEPROM ID = 0x%04x\n", EEPROMId);
-}
-
-static void Hal_ReadPowerValueFromPROM_8188E(struct txpowerinfo24g *pwrInfo24G, u8 *PROMContent, bool AutoLoadFail)
-{
-       u32 rfPath, eeAddr = EEPROM_TX_PWR_INX_88E, group, TxCount = 0;
-
-       memset(pwrInfo24G, 0, sizeof(struct txpowerinfo24g));
-
-       if (AutoLoadFail) {
-               for (rfPath = 0; rfPath < RF_PATH_MAX; rfPath++) {
-                       /* 2.4G default value */
-                       for (group = 0; group < MAX_CHNL_GROUP_24G; group++) {
-                               pwrInfo24G->IndexCCK_Base[rfPath][group] =      EEPROM_DEFAULT_24G_INDEX;
-                               pwrInfo24G->IndexBW40_Base[rfPath][group] =     EEPROM_DEFAULT_24G_INDEX;
-                       }
-                       for (TxCount = 0; TxCount < MAX_TX_COUNT; TxCount++) {
-                               if (TxCount == 0) {
-                                       pwrInfo24G->BW20_Diff[rfPath][0] = EEPROM_DEFAULT_24G_HT20_DIFF;
-                                       pwrInfo24G->OFDM_Diff[rfPath][0] = EEPROM_DEFAULT_24G_OFDM_DIFF;
-                               } else {
-                                       pwrInfo24G->BW20_Diff[rfPath][TxCount] = EEPROM_DEFAULT_DIFF;
-                                       pwrInfo24G->BW40_Diff[rfPath][TxCount] = EEPROM_DEFAULT_DIFF;
-                                       pwrInfo24G->CCK_Diff[rfPath][TxCount] = EEPROM_DEFAULT_DIFF;
-                                       pwrInfo24G->OFDM_Diff[rfPath][TxCount] = EEPROM_DEFAULT_DIFF;
-                               }
-                       }
-               }
-               return;
-       }
-
-       for (rfPath = 0; rfPath < RF_PATH_MAX; rfPath++) {
-               /* 2.4G default value */
-               for (group = 0; group < MAX_CHNL_GROUP_24G; group++) {
-                       pwrInfo24G->IndexCCK_Base[rfPath][group] =      PROMContent[eeAddr++];
-                       if (pwrInfo24G->IndexCCK_Base[rfPath][group] == 0xFF)
-                               pwrInfo24G->IndexCCK_Base[rfPath][group] = EEPROM_DEFAULT_24G_INDEX;
-               }
-               for (group = 0; group < MAX_CHNL_GROUP_24G - 1; group++) {
-                       pwrInfo24G->IndexBW40_Base[rfPath][group] =     PROMContent[eeAddr++];
-                       if (pwrInfo24G->IndexBW40_Base[rfPath][group] == 0xFF)
-                               pwrInfo24G->IndexBW40_Base[rfPath][group] =     EEPROM_DEFAULT_24G_INDEX;
-               }
-               for (TxCount = 0; TxCount < MAX_TX_COUNT; TxCount++) {
-                       if (TxCount == 0) {
-                               pwrInfo24G->BW40_Diff[rfPath][TxCount] = 0;
-                               if (PROMContent[eeAddr] == 0xFF) {
-                                       pwrInfo24G->BW20_Diff[rfPath][TxCount] = EEPROM_DEFAULT_24G_HT20_DIFF;
-                               } else {
-                                       pwrInfo24G->BW20_Diff[rfPath][TxCount] = (PROMContent[eeAddr] & 0xf0) >> 4;
-                                       if (pwrInfo24G->BW20_Diff[rfPath][TxCount] & BIT(3))            /* 4bit sign number to 8 bit sign number */
-                                               pwrInfo24G->BW20_Diff[rfPath][TxCount] |= 0xF0;
-                               }
-
-                               if (PROMContent[eeAddr] == 0xFF) {
-                                       pwrInfo24G->OFDM_Diff[rfPath][TxCount] =        EEPROM_DEFAULT_24G_OFDM_DIFF;
-                               } else {
-                                       pwrInfo24G->OFDM_Diff[rfPath][TxCount] =        (PROMContent[eeAddr] & 0x0f);
-                                       if (pwrInfo24G->OFDM_Diff[rfPath][TxCount] & BIT(3))            /* 4bit sign number to 8 bit sign number */
-                                               pwrInfo24G->OFDM_Diff[rfPath][TxCount] |= 0xF0;
-                               }
-                               pwrInfo24G->CCK_Diff[rfPath][TxCount] = 0;
-                               eeAddr++;
-                       } else {
-                               if (PROMContent[eeAddr] == 0xFF) {
-                                       pwrInfo24G->BW40_Diff[rfPath][TxCount] =        EEPROM_DEFAULT_DIFF;
-                               } else {
-                                       pwrInfo24G->BW40_Diff[rfPath][TxCount] =        (PROMContent[eeAddr] & 0xf0) >> 4;
-                                       if (pwrInfo24G->BW40_Diff[rfPath][TxCount] & BIT(3))            /* 4bit sign number to 8 bit sign number */
-                                               pwrInfo24G->BW40_Diff[rfPath][TxCount] |= 0xF0;
-                               }
-
-                               if (PROMContent[eeAddr] == 0xFF) {
-                                       pwrInfo24G->BW20_Diff[rfPath][TxCount] =        EEPROM_DEFAULT_DIFF;
-                               } else {
-                                       pwrInfo24G->BW20_Diff[rfPath][TxCount] =        (PROMContent[eeAddr] & 0x0f);
-                                       if (pwrInfo24G->BW20_Diff[rfPath][TxCount] & BIT(3))            /* 4bit sign number to 8 bit sign number */
-                                               pwrInfo24G->BW20_Diff[rfPath][TxCount] |= 0xF0;
-                               }
-                               eeAddr++;
-
-                               if (PROMContent[eeAddr] == 0xFF) {
-                                       pwrInfo24G->OFDM_Diff[rfPath][TxCount] = EEPROM_DEFAULT_DIFF;
-                               } else {
-                                       pwrInfo24G->OFDM_Diff[rfPath][TxCount] =        (PROMContent[eeAddr] & 0xf0) >> 4;
-                                       if (pwrInfo24G->OFDM_Diff[rfPath][TxCount] & BIT(3))            /* 4bit sign number to 8 bit sign number */
-                                               pwrInfo24G->OFDM_Diff[rfPath][TxCount] |= 0xF0;
-                               }
-
-                               if (PROMContent[eeAddr] == 0xFF) {
-                                       pwrInfo24G->CCK_Diff[rfPath][TxCount] = EEPROM_DEFAULT_DIFF;
-                               } else {
-                                       pwrInfo24G->CCK_Diff[rfPath][TxCount] = (PROMContent[eeAddr] & 0x0f);
-                                       if (pwrInfo24G->CCK_Diff[rfPath][TxCount] & BIT(3))             /* 4bit sign number to 8 bit sign number */
-                                               pwrInfo24G->CCK_Diff[rfPath][TxCount] |= 0xF0;
-                               }
-                               eeAddr++;
-                       }
-               }
-       }
-}
-
-static void hal_get_chnl_group_88e(u8 chnl, u8 *group)
-{
-       if (chnl < 3)                   /*  Channel 1-2 */
-               *group = 0;
-       else if (chnl < 6)              /*  Channel 3-5 */
-               *group = 1;
-       else if (chnl < 9)              /*  Channel 6-8 */
-               *group = 2;
-       else if (chnl < 12)             /*  Channel 9-11 */
-               *group = 3;
-       else if (chnl < 14)             /*  Channel 12-13 */
-               *group = 4;
-       else if (chnl == 14)            /*  Channel 14 */
-               *group = 5;
-}
-
-void Hal_ReadPowerSavingMode88E(struct adapter *padapter, u8 *hwinfo, bool AutoLoadFail)
-{
-       if (AutoLoadFail)
-               padapter->pwrctrlpriv.bSupportRemoteWakeup = false;
-       else
-               /* hw power down mode selection , 0:rf-off / 1:power down */
-
-               /*  decide hw if support remote wakeup function */
-               /*  if hw supported, 8051 (SIE) will generate WeakUP signal(D+/D- toggle) when autoresume */
-               padapter->pwrctrlpriv.bSupportRemoteWakeup = (hwinfo[EEPROM_USB_OPTIONAL_FUNCTION0] & BIT(1)) ? true : false;
-}
-
-void Hal_ReadTxPowerInfo88E(struct adapter *padapter, u8 *PROMContent, bool AutoLoadFail)
-{
-       struct hal_data_8188e *pHalData = &padapter->haldata;
-       struct txpowerinfo24g pwrInfo24G;
-       u8 ch, group;
-       u8 TxCount;
-
-       Hal_ReadPowerValueFromPROM_8188E(&pwrInfo24G, PROMContent, AutoLoadFail);
-
-       for (ch = 0; ch < CHANNEL_MAX_NUMBER; ch++) {
-               hal_get_chnl_group_88e(ch, &group);
-
-               pHalData->Index24G_CCK_Base[ch] = pwrInfo24G.IndexCCK_Base[0][group];
-               if (ch == 14)
-                       pHalData->Index24G_BW40_Base[ch] = pwrInfo24G.IndexBW40_Base[0][4];
-               else
-                       pHalData->Index24G_BW40_Base[ch] = pwrInfo24G.IndexBW40_Base[0][group];
-       }
-       for (TxCount = 0; TxCount < MAX_TX_COUNT; TxCount++) {
-               pHalData->OFDM_24G_Diff[TxCount] = pwrInfo24G.OFDM_Diff[0][TxCount];
-               pHalData->BW20_24G_Diff[TxCount] = pwrInfo24G.BW20_Diff[0][TxCount];
-       }
-
-       /*  2010/10/19 MH Add Regulator recognize for CU. */
-       if (!AutoLoadFail) {
-               pHalData->EEPROMRegulatory = (PROMContent[EEPROM_RF_BOARD_OPTION_88E] & 0x7);   /* bit0~2 */
-               if (PROMContent[EEPROM_RF_BOARD_OPTION_88E] == 0xFF)
-                       pHalData->EEPROMRegulatory = (EEPROM_DEFAULT_BOARD_OPTION & 0x7);       /* bit0~2 */
-       } else {
-               pHalData->EEPROMRegulatory = 0;
-       }
-}
-
-void Hal_EfuseParseXtal_8188E(struct adapter *pAdapter, u8 *hwinfo, bool AutoLoadFail)
-{
-       struct hal_data_8188e *pHalData = &pAdapter->haldata;
-
-       if (!AutoLoadFail) {
-               pHalData->CrystalCap = hwinfo[EEPROM_XTAL_88E];
-               if (pHalData->CrystalCap == 0xFF)
-                       pHalData->CrystalCap = EEPROM_Default_CrystalCap_88E;
-       } else {
-               pHalData->CrystalCap = EEPROM_Default_CrystalCap_88E;
-       }
-}
-
-void rtl8188e_EfuseParseChnlPlan(struct adapter *padapter, u8 *hwinfo, bool AutoLoadFail)
-{
-       padapter->mlmepriv.ChannelPlan =
-                hal_com_get_channel_plan(padapter,
-                                         hwinfo ? hwinfo[EEPROM_ChannelPlan_88E] : 0xFF,
-                                         padapter->registrypriv.channel_plan,
-                                         RT_CHANNEL_DOMAIN_WORLD_WIDE_13, AutoLoadFail);
-}
-
-void Hal_ReadAntennaDiversity88E(struct adapter *pAdapter, u8 *PROMContent, bool AutoLoadFail)
-{
-       struct hal_data_8188e *pHalData = &pAdapter->haldata;
-       struct registry_priv    *registry_par = &pAdapter->registrypriv;
-
-       if (!AutoLoadFail) {
-               /*  Antenna Diversity setting. */
-               if (registry_par->antdiv_cfg == 2) { /*  2:By EFUSE */
-                       pHalData->AntDivCfg = (PROMContent[EEPROM_RF_BOARD_OPTION_88E] & 0x18) >> 3;
-                       if (PROMContent[EEPROM_RF_BOARD_OPTION_88E] == 0xFF)
-                               pHalData->AntDivCfg = (EEPROM_DEFAULT_BOARD_OPTION & 0x18) >> 3;
-               } else {
-                       pHalData->AntDivCfg = registry_par->antdiv_cfg;  /*  0:OFF , 1:ON, 2:By EFUSE */
-               }
-
-               if (registry_par->antdiv_type == 0) {
-                       /* If TRxAntDivType is AUTO in advanced setting, use EFUSE value instead. */
-                       pHalData->TRxAntDivType = PROMContent[EEPROM_RF_ANTENNA_OPT_88E];
-                       if (pHalData->TRxAntDivType == 0xFF)
-                               pHalData->TRxAntDivType = CG_TRX_HW_ANTDIV; /*  For 88EE, 1Tx and 1RxCG are fixed.(1Ant, Tx and RxCG are both on aux port) */
-               } else {
-                       pHalData->TRxAntDivType = registry_par->antdiv_type;
-               }
-
-               if (pHalData->TRxAntDivType == CG_TRX_HW_ANTDIV || pHalData->TRxAntDivType == CGCS_RX_HW_ANTDIV)
-                       pHalData->AntDivCfg = 1; /*  0xC1[3] is ignored. */
-       } else {
-               pHalData->AntDivCfg = 0;
-       }
-}
-
-void Hal_ReadThermalMeter_88E(struct adapter *Adapter, u8 *PROMContent, bool AutoloadFail)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-
-       /*  ThermalMeter from EEPROM */
-       if (!AutoloadFail)
-               pHalData->EEPROMThermalMeter = PROMContent[EEPROM_THERMAL_METER_88E];
-       else
-               pHalData->EEPROMThermalMeter = EEPROM_Default_ThermalMeter_88E;
-
-       if (pHalData->EEPROMThermalMeter == 0xff || AutoloadFail)
-               pHalData->EEPROMThermalMeter = EEPROM_Default_ThermalMeter_88E;
-}
diff --git a/drivers/staging/r8188eu/hal/rtl8188e_phycfg.c b/drivers/staging/r8188eu/hal/rtl8188e_phycfg.c
deleted file mode 100644 (file)
index f4edf4a..0000000
+++ /dev/null
@@ -1,705 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _RTL8188E_PHYCFG_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/rtw_iol.h"
-#include "../include/rtl8188e_hal.h"
-
-/*  */
-/*  1. BB register R/W API */
-/*  */
-
-/* Get shifted position of the bit mask */
-static u32 phy_calculate_bit_shift(u32 bitmask)
-{
-       u32 i = ffs(bitmask);
-
-       return i ? i - 1 : 32;
-}
-
-/**
-* Function:    PHY_QueryBBReg
-*
-* Overview:    Read "sepcific bits" from BB register
-*
-* Input:
-*                      struct adapter *Adapter,
-*                      u32                     RegAddr,        The target address to be readback
-*                      u32                     BitMask         The target bit position in the target address
-*                                                              to be readback
-* Output:      None
-* Return:              u32                     Data            The readback register value
-* Note:                This function is equal to "GetRegSetting" in PHY programming guide
-*/
-u32
-rtl8188e_PHY_QueryBBReg(
-               struct adapter *Adapter,
-               u32 RegAddr,
-               u32 BitMask
-       )
-{
-       u32 ReturnValue = 0, OriginalValue, BitShift;
-       int res;
-
-       res = rtw_read32(Adapter, RegAddr, &OriginalValue);
-       if (res)
-               return 0;
-
-       BitShift = phy_calculate_bit_shift(BitMask);
-       ReturnValue = (OriginalValue & BitMask) >> BitShift;
-       return ReturnValue;
-}
-
-/**
-* Function:    PHY_SetBBReg
-*
-* Overview:    Write "Specific bits" to BB register (page 8~)
-*
-* Input:
-*                      struct adapter *Adapter,
-*                      u32                     RegAddr,        The target address to be modified
-*                      u32                     BitMask         The target bit position in the target address
-*                                                                      to be modified
-*                      u32                     Data            The new register value in the target bit position
-*                                                                      of the target address
-*
-* Output:      None
-* Return:              None
-* Note:                This function is equal to "PutRegSetting" in PHY programming guide
-*/
-
-void rtl8188e_PHY_SetBBReg(struct adapter *Adapter, u32 RegAddr, u32 BitMask, u32 Data)
-{
-       u32 OriginalValue, BitShift;
-       int res;
-
-       if (BitMask != bMaskDWord) { /* if not "double word" write */
-               res = rtw_read32(Adapter, RegAddr, &OriginalValue);
-               if (res)
-                       return;
-
-               BitShift = phy_calculate_bit_shift(BitMask);
-               Data = ((OriginalValue & (~BitMask)) | (Data << BitShift));
-       }
-
-       rtw_write32(Adapter, RegAddr, Data);
-}
-
-/*  */
-/*  2. RF register R/W API */
-/*  */
-/**
-* Function:    phy_RFSerialRead
-*
-* Overview:    Read register from RF chips
-*
-* Input:
-*                      struct adapter *Adapter,
-*                      u32                     Offset,         The target address to be read
-*
-* Output:      None
-* Return:              u32                     reback value
-* Note:                Threre are three types of serial operations:
-*                      1. Software serial write
-*                      2. Hardware LSSI-Low Speed Serial Interface
-*                      3. Hardware HSSI-High speed
-*                      serial write. Driver need to implement (1) and (2).
-*                      This function is equal to the combination of RF_ReadReg() and  RFLSSIRead()
-*/
-static u32
-phy_RFSerialRead(
-               struct adapter *Adapter,
-               u32 Offset
-       )
-{
-       u32 retValue = 0;
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       struct bb_reg_def *pPhyReg = &pHalData->PHYRegDef;
-       u32 NewOffset;
-       u32 tmplong, tmplong2;
-       u8      RfPiEnable = 0;
-       /*  */
-       /*  Make sure RF register offset is correct */
-       /*  */
-       Offset &= 0xff;
-
-       /*  */
-       /*  Switch page for 8256 RF IC */
-       /*  */
-       NewOffset = Offset;
-
-       /*  For 92S LSSI Read RFLSSIRead */
-       /*  For RF A/B write 0x824/82c(does not work in the future) */
-       /*  We must use 0x824 for RF A and B to execute read trigger */
-       tmplong = rtl8188e_PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord);
-       tmplong2 = tmplong;
-
-       tmplong2 = (tmplong2 & (~bLSSIReadAddress)) | (NewOffset << 23) | bLSSIReadEdge;        /* T65 RF */
-
-       rtl8188e_PHY_SetBBReg(Adapter, rFPGA0_XA_HSSIParameter2, bMaskDWord, tmplong & (~bLSSIReadEdge));
-       udelay(10);/*  PlatformStallExecution(10); */
-
-       rtl8188e_PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, bMaskDWord, tmplong2);
-       udelay(100);/* PlatformStallExecution(100); */
-
-       udelay(10);/* PlatformStallExecution(10); */
-
-       RfPiEnable = (u8)rtl8188e_PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter1, BIT(8));
-
-       if (RfPiEnable) {       /*  Read from BBreg8b8, 12 bits for 8190, 20bits for T65 RF */
-               retValue = rtl8188e_PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBackPi, bLSSIReadBackData);
-       } else {        /* Read from BBreg8a0, 12 bits for 8190, 20 bits for T65 RF */
-               retValue = rtl8188e_PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBack, bLSSIReadBackData);
-       }
-       return retValue;
-}
-
-/**
-* Function:    phy_RFSerialWrite
-*
-* Overview:    Write data to RF register (page 8~)
-*
-* Input:
-*                      struct adapter *Adapter,
-*                      enum rf_radio_path eRFPath,     Radio path of A/B/C/D
-*                      u32                     Offset,         The target address to be read
-*                      u32                     Data            The new register Data in the target bit position
-*                                                                      of the target to be read
-*
-* Output:      None
-* Return:              None
-* Note:                Threre are three types of serial operations:
-*                      1. Software serial write
-*                      2. Hardware LSSI-Low Speed Serial Interface
-*                      3. Hardware HSSI-High speed
-*                      serial write. Driver need to implement (1) and (2).
-*                      This function is equal to the combination of RF_ReadReg() and  RFLSSIRead()
- *
- * Note:                 For RF8256 only
- *                      The total count of RTL8256(Zebra4) register is around 36 bit it only employs
- *                      4-bit RF address. RTL8256 uses "register mode control bit" (Reg00[12], Reg00[10])
- *                      to access register address bigger than 0xf. See "Appendix-4 in PHY Configuration
- *                      programming guide" for more details.
- *                      Thus, we define a sub-finction for RTL8526 register address conversion
- *                    ===========================================================
- *                      Register Mode          RegCTL[1]               RegCTL[0]               Note
- *                                                             (Reg00[12])             (Reg00[10])
- *                    ===========================================================
- *                      Reg_Mode0                              0                               x                       Reg 0 ~15(0x0 ~ 0xf)
- *                    ------------------------------------------------------------------
- *                      Reg_Mode1                              1                               0                       Reg 16 ~30(0x1 ~ 0xf)
- *                    ------------------------------------------------------------------
- *                      Reg_Mode2                              1                               1                       Reg 31 ~ 45(0x1 ~ 0xf)
- *                    ------------------------------------------------------------------
- *
- *     2008/09/02      MH      Add 92S RF definition
- *
- *
- *
-*/
-static void
-phy_RFSerialWrite(
-               struct adapter *Adapter,
-               u32 Offset,
-               u32 Data
-       )
-{
-       u32 DataAndAddr = 0;
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       struct bb_reg_def *pPhyReg = &pHalData->PHYRegDef;
-       u32 NewOffset;
-
-       /*  2009/06/17 MH We can not execute IO for power save or other accident mode. */
-
-       Offset &= 0xff;
-
-       /*  */
-       /*  Switch page for 8256 RF IC */
-       /*  */
-       NewOffset = Offset;
-
-       /*  */
-       /*  Put write addr in [5:0]  and write data in [31:16] */
-       /*  */
-       DataAndAddr = ((NewOffset << 20) | (Data & 0x000fffff)) & 0x0fffffff;   /*  T65 RF */
-
-       /*  */
-       /*  Write Operation */
-       /*  */
-       rtl8188e_PHY_SetBBReg(Adapter, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);
-}
-
-/**
-* Function:    PHY_QueryRFReg
-*
-* Overview:    Query "Specific bits" to RF register (page 8~)
-*
-* Input:
-*                      struct adapter *Adapter,
-*                      u32                     RegAddr,        The target address to be read
-*                      u32                     BitMask         The target bit position in the target address
-*                                                                      to be read
-*
-* Output:      None
-* Return:              u32                     Readback value
-* Note:                This function is equal to "GetRFRegSetting" in PHY programming guide
-*/
-u32 rtl8188e_PHY_QueryRFReg(struct adapter *Adapter, u32 RegAddr, u32 BitMask)
-{
-       u32 Original_Value, Readback_Value, BitShift;
-
-       Original_Value = phy_RFSerialRead(Adapter, RegAddr);
-
-       BitShift =  phy_calculate_bit_shift(BitMask);
-       Readback_Value = (Original_Value & BitMask) >> BitShift;
-       return Readback_Value;
-}
-
-/**
-* Function:    PHY_SetRFReg
-*
-* Overview:    Write "Specific bits" to RF register (page 8~)
-*
-* Input:
-*                      struct adapter *Adapter,
-*                      u32                     RegAddr,        The target address to be modified
-*                      u32                     BitMask         The target bit position in the target address
-*                                                                      to be modified
-*                      u32                     Data            The new register Data in the target bit position
-*                                                                      of the target address
-*
-* Output:      None
-* Return:              None
-* Note:                This function is equal to "PutRFRegSetting" in PHY programming guide
-*/
-void
-rtl8188e_PHY_SetRFReg(
-               struct adapter *Adapter,
-               u32 RegAddr,
-               u32 BitMask,
-               u32 Data
-       )
-{
-       u32 Original_Value, BitShift;
-
-       /*  RF data is 12 bits only */
-       if (BitMask != bRFRegOffsetMask) {
-               Original_Value = phy_RFSerialRead(Adapter, RegAddr);
-               BitShift =  phy_calculate_bit_shift(BitMask);
-               Data = ((Original_Value & (~BitMask)) | (Data << BitShift));
-       }
-
-       phy_RFSerialWrite(Adapter, RegAddr, Data);
-}
-
-/*  */
-/*  3. Initial MAC/BB/RF config by reading MAC/BB/RF txt. */
-/*  */
-
-/*-----------------------------------------------------------------------------
- * Function:    PHY_MACConfig8192C
- *
- * Overview:   Condig MAC by header file or parameter file.
- *
- * Input:       NONE
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Revised History:
- *  When               Who             Remark
- *  08/12/2008 MHC             Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-int PHY_MACConfig8188E(struct adapter *Adapter)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       int err;
-
-       /*  */
-       /*  Config MAC */
-       /*  */
-       err = ODM_ReadAndConfig_MAC_REG_8188E(&pHalData->odmpriv);
-
-       /*  2010.07.13 AMPDU aggregation number B */
-       rtw_write16(Adapter, REG_MAX_AGGR_NUM, MAX_AGGR_NUM);
-
-       return err;
-}
-
-/**
-* Function:    phy_InitBBRFRegisterDefinition
-*
-* Overview:    Initialize Register definition offset for Radio Path A/B/C/D
-*
-* Input:
-*                      struct adapter *Adapter,
-*
-* Output:      None
-* Return:              None
-* Note:                The initialization value is constant and it should never be changes
-*/
-static void
-phy_InitBBRFRegisterDefinition(
-               struct adapter *Adapter
-)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-
-       /*  RF Interface Sowrtware Control */
-       pHalData->PHYRegDef.rfintfs = rFPGA0_XAB_RFInterfaceSW; /*  16 LSBs if read 32-bit from 0x870 */
-
-       /*  RF Interface Readback Value */
-       pHalData->PHYRegDef.rfintfi = rFPGA0_XAB_RFInterfaceRB; /*  16 LSBs if read 32-bit from 0x8E0 */
-
-       /*  RF Interface Output (and Enable) */
-       pHalData->PHYRegDef.rfintfo = rFPGA0_XA_RFInterfaceOE; /*  16 LSBs if read 32-bit from 0x860 */
-
-       /*  RF Interface (Output and)  Enable */
-       pHalData->PHYRegDef.rfintfe = rFPGA0_XA_RFInterfaceOE; /*  16 MSBs if read 32-bit from 0x860 (16-bit for 0x862) */
-
-       /* Addr of LSSI. Write RF register by driver */
-       pHalData->PHYRegDef.rf3wireOffset = rFPGA0_XA_LSSIParameter; /* LSSI Parameter */
-
-       /*  RF parameter */
-       pHalData->PHYRegDef.rfLSSI_Select = rFPGA0_XAB_RFParameter;  /* BB Band Select */
-
-       /*  Tx AGC Gain Stage (same for all path. Should we remove this?) */
-       pHalData->PHYRegDef.rfTxGainStage = rFPGA0_TxGainStage; /* Tx gain stage */
-
-       /*  Transceiver A~D HSSI Parameter-1 */
-       pHalData->PHYRegDef.rfHSSIPara1 = rFPGA0_XA_HSSIParameter1;  /* wire control parameter1 */
-
-       /*  Transceiver A~D HSSI Parameter-2 */
-       pHalData->PHYRegDef.rfHSSIPara2 = rFPGA0_XA_HSSIParameter2;  /* wire control parameter2 */
-
-       /*  RF switch Control */
-       pHalData->PHYRegDef.rfSwitchControl = rFPGA0_XAB_SwitchControl; /* TR/Ant switch control */
-
-       /*  AGC control 1 */
-       pHalData->PHYRegDef.rfAGCControl1 = rOFDM0_XAAGCCore1;
-
-       /*  AGC control 2 */
-       pHalData->PHYRegDef.rfAGCControl2 = rOFDM0_XAAGCCore2;
-
-       /*  RX AFE control 1 */
-       pHalData->PHYRegDef.rfRxIQImbalance = rOFDM0_XARxIQImbalance;
-
-       /*  RX AFE control 1 */
-       pHalData->PHYRegDef.rfRxAFE = rOFDM0_XARxAFE;
-
-       /*  Tx AFE control 1 */
-       pHalData->PHYRegDef.rfTxIQImbalance = rOFDM0_XATxIQImbalance;
-
-       /*  Tx AFE control 2 */
-       pHalData->PHYRegDef.rfTxAFE = rOFDM0_XATxAFE;
-
-       /*  Transceiver LSSI Readback SI mode */
-       pHalData->PHYRegDef.rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
-
-       /*  Transceiver LSSI Readback PI mode */
-       pHalData->PHYRegDef.rfLSSIReadBackPi = TransceiverA_HSPI_Readback;
-}
-
-void storePwrIndexDiffRateOffset(struct adapter *Adapter, u32 RegAddr, u32 BitMask, u32 Data)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-
-       if (RegAddr == rTxAGC_A_Rate18_06)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][0] = Data;
-       if (RegAddr == rTxAGC_A_Rate54_24)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][1] = Data;
-       if (RegAddr == rTxAGC_A_CCK1_Mcs32)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][6] = Data;
-       if (RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0xffffff00)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][7] = Data;
-       if (RegAddr == rTxAGC_A_Mcs03_Mcs00)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][2] = Data;
-       if (RegAddr == rTxAGC_A_Mcs07_Mcs04)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][3] = Data;
-       if (RegAddr == rTxAGC_A_Mcs11_Mcs08)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][4] = Data;
-       if (RegAddr == rTxAGC_A_Mcs15_Mcs12) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][5] = Data;
-               pHalData->pwrGroupCnt++;
-       }
-       if (RegAddr == rTxAGC_B_Rate18_06)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][8] = Data;
-       if (RegAddr == rTxAGC_B_Rate54_24)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][9] = Data;
-       if (RegAddr == rTxAGC_B_CCK1_55_Mcs32)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][14] = Data;
-       if (RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0x000000ff)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][15] = Data;
-       if (RegAddr == rTxAGC_B_Mcs03_Mcs00)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][10] = Data;
-       if (RegAddr == rTxAGC_B_Mcs07_Mcs04)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][11] = Data;
-       if (RegAddr == rTxAGC_B_Mcs11_Mcs08)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][12] = Data;
-       if (RegAddr == rTxAGC_B_Mcs15_Mcs12)
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][13] = Data;
-}
-
-static int phy_BB8188E_Config_ParaFile(struct adapter *Adapter)
-{
-       struct eeprom_priv *pEEPROM = &Adapter->eeprompriv;
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       int err;
-
-       /*  */
-       /*  1. Read PHY_REG.TXT BB INIT!! */
-       /*  We will separate as 88C / 92C according to chip version */
-       /*  */
-       err = ODM_ReadAndConfig_PHY_REG_1T_8188E(&pHalData->odmpriv);
-       if (err)
-               return err;
-
-       /*  2. If EEPROM or EFUSE autoload OK, We must config by PHY_REG_PG.txt */
-       if (!pEEPROM->bautoload_fail_flag) {
-               pHalData->pwrGroupCnt = 0;
-               ODM_ReadAndConfig_PHY_REG_PG_8188E(&pHalData->odmpriv);
-       }
-
-       /*  3. BB AGC table Initialization */
-       err = ODM_ReadAndConfig_AGC_TAB_1T_8188E(&pHalData->odmpriv);
-       if (err)
-               return err;
-
-       return 0;
-}
-
-int
-PHY_BBConfig8188E(
-               struct adapter *Adapter
-       )
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       u16 RegVal;
-       u8 CrystalCap;
-       int err;
-
-       phy_InitBBRFRegisterDefinition(Adapter);
-
-       /*  Enable BB and RF */
-       err = rtw_read16(Adapter, REG_SYS_FUNC_EN, &RegVal);
-       if (err)
-               return err;
-
-       rtw_write16(Adapter, REG_SYS_FUNC_EN, (u16)(RegVal | BIT(13) | BIT(0) | BIT(1)));
-
-       /*  20090923 Joseph: Advised by Steven and Jenyu. Power sequence before init RF. */
-
-       rtw_write8(Adapter, REG_RF_CTRL, RF_EN | RF_RSTB | RF_SDMRSTB);
-
-       rtw_write8(Adapter, REG_SYS_FUNC_EN, FEN_USBA | FEN_USBD | FEN_BB_GLB_RSTn | FEN_BBRSTB);
-
-       /*  Config BB and AGC */
-       err = phy_BB8188E_Config_ParaFile(Adapter);
-
-       /*  write 0x24[16:11] = 0x24[22:17] = CrystalCap */
-       CrystalCap = pHalData->CrystalCap & 0x3F;
-       rtl8188e_PHY_SetBBReg(Adapter, REG_AFE_XTAL_CTRL, 0x7ff800, (CrystalCap | (CrystalCap << 6)));
-
-       return err;
-}
-
-static void getTxPowerIndex88E(struct adapter *Adapter, u8 channel, u8 *cckPowerLevel,
-                              u8 *ofdmPowerLevel, u8 *BW20PowerLevel,
-                              u8 *BW40PowerLevel)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       u8 index = (channel - 1);
-
-       /*  1. CCK */
-       cckPowerLevel[RF_PATH_A] = pHalData->Index24G_CCK_Base[index];
-       /* 2. OFDM */
-       ofdmPowerLevel[RF_PATH_A] = pHalData->Index24G_BW40_Base[index] +
-               pHalData->OFDM_24G_Diff[RF_PATH_A];
-       /*  1. BW20 */
-       BW20PowerLevel[RF_PATH_A] = pHalData->Index24G_BW40_Base[index] +
-               pHalData->BW20_24G_Diff[RF_PATH_A];
-       /* 2. BW40 */
-       BW40PowerLevel[RF_PATH_A] = pHalData->Index24G_BW40_Base[index];
-}
-
-/*-----------------------------------------------------------------------------
- * Function:    SetTxPowerLevel8190()
- *
- * Overview:    This function is export to "HalCommon" moudule
- *                     We must consider RF path later!!!!!!!
- *
- * Input:       struct adapter *Adapter
- *                     u8              channel
- *
- * Output:      NONE
- *
- * Return:      NONE
- *     2008/11/04      MHC             We remove EEPROM_93C56.
- *                                             We need to move CCX relative code to independet file.
- *     2009/01/21      MHC             Support new EEPROM format from SD3 requirement.
- *
- *---------------------------------------------------------------------------*/
-void
-PHY_SetTxPowerLevel8188E(
-               struct adapter *Adapter,
-               u8 channel
-       )
-{
-       u8 cckPowerLevel[MAX_TX_COUNT] = {0};
-       u8 ofdmPowerLevel[MAX_TX_COUNT] = {0};/*  [0]:RF-A, [1]:RF-B */
-       u8 BW20PowerLevel[MAX_TX_COUNT] = {0};
-       u8 BW40PowerLevel[MAX_TX_COUNT] = {0};
-
-       getTxPowerIndex88E(Adapter, channel, &cckPowerLevel[0], &ofdmPowerLevel[0], &BW20PowerLevel[0], &BW40PowerLevel[0]);
-
-       rtl8188e_PHY_RF6052SetCckTxPower(Adapter, &cckPowerLevel[0]);
-       rtl8188e_PHY_RF6052SetOFDMTxPower(Adapter, &ofdmPowerLevel[0], &BW20PowerLevel[0], &BW40PowerLevel[0], channel);
-}
-
-/*-----------------------------------------------------------------------------
- * Function:    PHY_SetBWModeCallback8192C()
- *
- * Overview:    Timer callback function for SetSetBWMode
- *
- * Input:              PRT_TIMER               pTimer
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Note:               (1) We do not take j mode into consideration now
- *                     (2) Will two workitem of "switch channel" and "switch channel bandwidth" run
- *                          concurrently?
- *---------------------------------------------------------------------------*/
-static void
-_PHY_SetBWMode92C(
-               struct adapter *Adapter
-)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       u8 regBwOpMode;
-       u8 regRRSR_RSC;
-       int res;
-
-       if (Adapter->bDriverStopped)
-               return;
-
-       /* 3 */
-       /* 3<1>Set MAC register */
-       /* 3 */
-
-       res = rtw_read8(Adapter, REG_BWOPMODE, &regBwOpMode);
-       if (res)
-               return;
-
-       res = rtw_read8(Adapter, REG_RRSR + 2, &regRRSR_RSC);
-       if (res)
-               return;
-
-       switch (pHalData->CurrentChannelBW) {
-       case HT_CHANNEL_WIDTH_20:
-               regBwOpMode |= BW_OPMODE_20MHZ;
-               /*  2007/02/07 Mark by Emily because we have not verify whether this register works */
-               rtw_write8(Adapter, REG_BWOPMODE, regBwOpMode);
-               break;
-       case HT_CHANNEL_WIDTH_40:
-               regBwOpMode &= ~BW_OPMODE_20MHZ;
-               /*  2007/02/07 Mark by Emily because we have not verify whether this register works */
-               rtw_write8(Adapter, REG_BWOPMODE, regBwOpMode);
-               regRRSR_RSC = (regRRSR_RSC & 0x90) | (pHalData->nCur40MhzPrimeSC << 5);
-               rtw_write8(Adapter, REG_RRSR + 2, regRRSR_RSC);
-               break;
-       default:
-               break;
-       }
-
-       /* 3  */
-       /* 3 <2>Set PHY related register */
-       /* 3 */
-       switch (pHalData->CurrentChannelBW) {
-       /* 20 MHz channel*/
-       case HT_CHANNEL_WIDTH_20:
-               rtl8188e_PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bRFMOD, 0x0);
-               rtl8188e_PHY_SetBBReg(Adapter, rFPGA1_RFMOD, bRFMOD, 0x0);
-               break;
-       /* 40 MHz channel*/
-       case HT_CHANNEL_WIDTH_40:
-               rtl8188e_PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bRFMOD, 0x1);
-               rtl8188e_PHY_SetBBReg(Adapter, rFPGA1_RFMOD, bRFMOD, 0x1);
-               /*  Set Control channel to upper or lower. These settings are required only for 40MHz */
-               rtl8188e_PHY_SetBBReg(Adapter, rCCK0_System, bCCKSideBand, (pHalData->nCur40MhzPrimeSC >> 1));
-               rtl8188e_PHY_SetBBReg(Adapter, rOFDM1_LSTF, 0xC00, pHalData->nCur40MhzPrimeSC);
-               rtl8188e_PHY_SetBBReg(Adapter, 0x818, (BIT(26) | BIT(27)),
-                            (pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER) ? 2 : 1);
-               break;
-       default:
-               break;
-       }
-       /* Skip over setting of J-mode in BB register here. Default value is "None J mode". Emily 20070315 */
-
-       rtl8188e_PHY_RF6052SetBandwidth(Adapter, pHalData->CurrentChannelBW);
-}
-
- /*-----------------------------------------------------------------------------
- * Function:   SetBWMode8190Pci()
- *
- * Overview:  This function is export to "HalCommon" moudule
- *
- * Input:              struct adapter *Adapter
- *                     enum ht_channel_width Bandwidth 20M or 40M
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Note:               We do not take j mode into consideration now
- *---------------------------------------------------------------------------*/
-void PHY_SetBWMode8188E(struct adapter *Adapter, enum ht_channel_width Bandwidth,      /*  20M or 40M */
-                       unsigned char   Offset)         /*  Upper, Lower, or Don't care */
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       enum ht_channel_width tmpBW = pHalData->CurrentChannelBW;
-
-       pHalData->CurrentChannelBW = Bandwidth;
-
-       pHalData->nCur40MhzPrimeSC = Offset;
-
-       if ((!Adapter->bDriverStopped) && (!Adapter->bSurpriseRemoved))
-               _PHY_SetBWMode92C(Adapter);
-       else
-               pHalData->CurrentChannelBW = tmpBW;
-}
-
-static void _PHY_SwChnl8192C(struct adapter *Adapter, u8 channel)
-{
-       u32 param1, param2;
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-
-       /* s1. pre common command - CmdID_SetTxPowerLevel */
-       PHY_SetTxPowerLevel8188E(Adapter, channel);
-
-       /* s2. RF dependent command - CmdID_RF_WriteReg, param1=RF_CHNLBW, param2=channel */
-       param1 = RF_CHNLBW;
-       param2 = channel;
-       pHalData->RfRegChnlVal = ((pHalData->RfRegChnlVal & 0xfffffc00) | param2);
-       rtl8188e_PHY_SetRFReg(Adapter, param1, bRFRegOffsetMask, pHalData->RfRegChnlVal);
-}
-
-void PHY_SwChnl8188E(struct adapter *Adapter, u8 channel)
-{
-       /*  Call after initialization */
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-
-       if (channel == 0)
-               channel = 1;
-
-       if ((!Adapter->bDriverStopped) && (!Adapter->bSurpriseRemoved)) {
-               pHalData->CurrentChannel = channel;
-               _PHY_SwChnl8192C(Adapter, channel);
-       }
-}
diff --git a/drivers/staging/r8188eu/hal/rtl8188e_rf6052.c b/drivers/staging/r8188eu/hal/rtl8188e_rf6052.c
deleted file mode 100644 (file)
index 1988fb6..0000000
+++ /dev/null
@@ -1,405 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-/******************************************************************************
- *
- *
- * Module:     rtl8192c_rf6052.c       ( Source C File)
- *
- * Note:       Provide RF 6052 series relative API.
- *
- * Function:
- *
- * Export:
- *
- * Abbrev:
- *
- * History:
- * Data                        Who             Remark
- *
- * 09/25/2008  MHC             Create initial version.
- * 11/05/2008  MHC             Add API for tw power setting.
- *
- *
-******************************************************************************/
-
-#define _RTL8188E_RF6052_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/rtl8188e_hal.h"
-
-/*-----------------------------------------------------------------------------
- * Function:    PHY_RF6052SetBandwidth()
- *
- * Overview:    This function is called by SetBWModeCallback8190Pci() only
- *
- * Input:       struct adapter *Adapter
- *                     WIRELESS_BANDWIDTH_E    Bandwidth       20M or 40M
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Note:               For RF type 0222D
- *---------------------------------------------------------------------------*/
-void rtl8188e_PHY_RF6052SetBandwidth(struct adapter *Adapter,
-                                    enum ht_channel_width Bandwidth)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-
-       switch (Bandwidth) {
-       case HT_CHANNEL_WIDTH_20:
-               pHalData->RfRegChnlVal = ((pHalData->RfRegChnlVal & 0xfffff3ff) | BIT(10) | BIT(11));
-               rtl8188e_PHY_SetRFReg(Adapter, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal);
-               break;
-       case HT_CHANNEL_WIDTH_40:
-               pHalData->RfRegChnlVal = ((pHalData->RfRegChnlVal & 0xfffff3ff) | BIT(10));
-               rtl8188e_PHY_SetRFReg(Adapter, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal);
-               break;
-       default:
-               break;
-       }
-}
-
-/*-----------------------------------------------------------------------------
- * Function:   PHY_RF6052SetCckTxPower
- *
- * Overview:
- *
- * Input:       NONE
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Revised History:
- * When                        Who             Remark
- * 11/05/2008  MHC             Simulate 8192series..
- *
- *---------------------------------------------------------------------------*/
-
-void
-rtl8188e_PHY_RF6052SetCckTxPower(
-               struct adapter *Adapter,
-               u8 *pPowerlevel)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
-       u32 TxAGC[2] = {0, 0}, tmpval = 0, pwrtrac_value;
-       u8 idx1, idx2;
-       u8 *ptr;
-       u8 direction;
-
-       if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
-               TxAGC[RF_PATH_A] = 0x3f3f3f3f;
-               TxAGC[RF_PATH_B] = 0x3f3f3f3f;
-
-               for (idx1 = RF_PATH_A; idx1 <= RF_PATH_B; idx1++) {
-                       TxAGC[idx1] =
-                               pPowerlevel[idx1] | (pPowerlevel[idx1] << 8) |
-                               (pPowerlevel[idx1] << 16) | (pPowerlevel[idx1] << 24);
-               }
-       } else {
-               for (idx1 = RF_PATH_A; idx1 <= RF_PATH_B; idx1++) {
-                       TxAGC[idx1] =
-                               pPowerlevel[idx1] | (pPowerlevel[idx1] << 8) |
-                               (pPowerlevel[idx1] << 16) | (pPowerlevel[idx1] << 24);
-               }
-               if (pHalData->EEPROMRegulatory == 0) {
-                       tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][6]) +
-                                       (pHalData->MCSTxPowerLevelOriginalOffset[0][7] << 8);
-                       TxAGC[RF_PATH_A] += tmpval;
-
-                       tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][14]) +
-                                       (pHalData->MCSTxPowerLevelOriginalOffset[0][15] << 24);
-                       TxAGC[RF_PATH_B] += tmpval;
-               }
-       }
-       for (idx1 = RF_PATH_A; idx1 <= RF_PATH_B; idx1++) {
-               ptr = (u8 *)(&TxAGC[idx1]);
-               for (idx2 = 0; idx2 < 4; idx2++) {
-                       if (*ptr > RF6052_MAX_TX_PWR)
-                               *ptr = RF6052_MAX_TX_PWR;
-                       ptr++;
-               }
-       }
-       ODM_TxPwrTrackAdjust88E(&pHalData->odmpriv, 1, &direction, &pwrtrac_value);
-
-       if (direction == 1) {
-               /*  Increase TX power */
-               TxAGC[0] += pwrtrac_value;
-               TxAGC[1] += pwrtrac_value;
-       } else if (direction == 2) {
-               /*  Decrease TX power */
-               TxAGC[0] -=  pwrtrac_value;
-               TxAGC[1] -=  pwrtrac_value;
-       }
-
-       /*  rf-A cck tx power */
-       tmpval = TxAGC[RF_PATH_A] & 0xff;
-       rtl8188e_PHY_SetBBReg(Adapter, rTxAGC_A_CCK1_Mcs32, bMaskByte1, tmpval);
-       tmpval = TxAGC[RF_PATH_A] >> 8;
-       rtl8188e_PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
-
-       /*  rf-B cck tx power */
-       tmpval = TxAGC[RF_PATH_B] >> 24;
-       rtl8188e_PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte0, tmpval);
-       tmpval = TxAGC[RF_PATH_B] & 0x00ffffff;
-       rtl8188e_PHY_SetBBReg(Adapter, rTxAGC_B_CCK1_55_Mcs32, 0xffffff00, tmpval);
-}      /* PHY_RF6052SetCckTxPower */
-
-/*  */
-/*  powerbase0 for OFDM rates */
-/*  powerbase1 for HT MCS rates */
-/*  */
-static void getpowerbase88e(struct adapter *Adapter, u8 *pPowerLevelOFDM,
-                           u8 *pPowerLevelBW20, u8 *pPowerLevelBW40, u8 Channel, u32 *OfdmBase, u32 *MCSBase)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       u32 powerBase0, powerBase1;
-       u8 i;
-
-       for (i = 0; i < 2; i++) {
-               powerBase0 = pPowerLevelOFDM[i];
-
-               powerBase0 = (powerBase0 << 24) | (powerBase0 << 16) | (powerBase0 << 8) | powerBase0;
-               *(OfdmBase + i) = powerBase0;
-       }
-
-       /* Check HT20 to HT40 diff */
-       if (pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_20)
-               powerBase1 = pPowerLevelBW20[0];
-       else
-               powerBase1 = pPowerLevelBW40[0];
-       powerBase1 = (powerBase1 << 24) | (powerBase1 << 16) | (powerBase1 << 8) | powerBase1;
-       *MCSBase = powerBase1;
-}
-
-static void get_rx_power_val_by_reg(struct adapter *Adapter, u8 Channel,
-                                   u8 index, u32 *powerBase0, u32 *powerBase1,
-                                   u32 *pOutWriteVal)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       u8      i, chnlGroup = 0, pwr_diff_limit[4], customer_pwr_limit;
-       s8      pwr_diff = 0;
-       u32     writeVal, customer_limit, rf;
-       u8      Regulatory = pHalData->EEPROMRegulatory;
-
-       /*  Index 0 & 1= legacy OFDM, 2-5=HT_MCS rate */
-
-       for (rf = 0; rf < 2; rf++) {
-               switch (Regulatory) {
-               case 0: /*  Realtek better performance */
-                               /*  increase power diff defined by Realtek for large power */
-                       chnlGroup = 0;
-                       writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index + (rf ? 8 : 0)] +
-                               ((index < 2) ? powerBase0[rf] : powerBase1[rf]);
-                       break;
-               case 1: /*  Realtek regulatory */
-                       /*  increase power diff defined by Realtek for regulatory */
-                       if (pHalData->pwrGroupCnt == 1)
-                               chnlGroup = 0;
-                       if (pHalData->pwrGroupCnt >= MAX_PG_GROUP) {
-                               if (Channel < 3)                        /*  Channel 1-2 */
-                                       chnlGroup = 0;
-                               else if (Channel < 6)           /*  Channel 3-5 */
-                                       chnlGroup = 1;
-                               else     if (Channel < 9)               /*  Channel 6-8 */
-                                       chnlGroup = 2;
-                               else if (Channel < 12)          /*  Channel 9-11 */
-                                       chnlGroup = 3;
-                               else if (Channel < 14)          /*  Channel 12-13 */
-                                       chnlGroup = 4;
-                               else if (Channel == 14)         /*  Channel 14 */
-                                       chnlGroup = 5;
-                       }
-                       writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index + (rf ? 8 : 0)] +
-                                       ((index < 2) ? powerBase0[rf] : powerBase1[rf]);
-                       break;
-               case 2: /*  Better regulatory */
-                               /*  don't increase any power diff */
-                       writeVal = ((index < 2) ? powerBase0[rf] : powerBase1[rf]);
-                       break;
-               case 3: /*  Customer defined power diff. */
-                               /*  increase power diff defined by customer. */
-                       chnlGroup = 0;
-
-                       if (index < 2)
-                               pwr_diff = pHalData->TxPwrLegacyHtDiff[rf][Channel - 1];
-                       else if (pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_20)
-                               pwr_diff = pHalData->TxPwrHt20Diff[rf][Channel - 1];
-
-                       if (pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_40)
-                               customer_pwr_limit = pHalData->PwrGroupHT40[rf][Channel - 1];
-                       else
-                               customer_pwr_limit = pHalData->PwrGroupHT20[rf][Channel - 1];
-
-                       if (pwr_diff >= customer_pwr_limit)
-                               pwr_diff = 0;
-                       else
-                               pwr_diff = customer_pwr_limit - pwr_diff;
-
-                       for (i = 0; i < 4; i++) {
-                               pwr_diff_limit[i] = (u8)((pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index + (rf ? 8 : 0)] & (0x7f << (i * 8))) >> (i * 8));
-
-                               if (pwr_diff_limit[i] > pwr_diff)
-                                       pwr_diff_limit[i] = pwr_diff;
-                       }
-                       customer_limit = (pwr_diff_limit[3] << 24) | (pwr_diff_limit[2] << 16) |
-                                        (pwr_diff_limit[1] << 8) | (pwr_diff_limit[0]);
-                       writeVal = customer_limit + ((index < 2) ? powerBase0[rf] : powerBase1[rf]);
-                       break;
-               default:
-                       chnlGroup = 0;
-                       writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index + (rf ? 8 : 0)] +
-                                       ((index < 2) ? powerBase0[rf] : powerBase1[rf]);
-                       break;
-               }
-
-               *(pOutWriteVal + rf) = writeVal;
-       }
-}
-static void writeOFDMPowerReg88E(struct adapter *Adapter, u8 index, u32 *pValue)
-{
-       u16 regoffset_a[6] = {
-               rTxAGC_A_Rate18_06, rTxAGC_A_Rate54_24,
-               rTxAGC_A_Mcs03_Mcs00, rTxAGC_A_Mcs07_Mcs04,
-               rTxAGC_A_Mcs11_Mcs08, rTxAGC_A_Mcs15_Mcs12};
-       u16 regoffset_b[6] = {
-               rTxAGC_B_Rate18_06, rTxAGC_B_Rate54_24,
-               rTxAGC_B_Mcs03_Mcs00, rTxAGC_B_Mcs07_Mcs04,
-               rTxAGC_B_Mcs11_Mcs08, rTxAGC_B_Mcs15_Mcs12};
-       u8 i, rf, pwr_val[4];
-       u32 writeVal;
-       u16 regoffset;
-
-       for (rf = 0; rf < 2; rf++) {
-               writeVal = pValue[rf];
-               for (i = 0; i < 4; i++) {
-                       pwr_val[i] = (u8)((writeVal & (0x7f << (i * 8))) >> (i * 8));
-                       if (pwr_val[i]  > RF6052_MAX_TX_PWR)
-                               pwr_val[i]  = RF6052_MAX_TX_PWR;
-               }
-               writeVal = (pwr_val[3] << 24) | (pwr_val[2] << 16) | (pwr_val[1] << 8) | pwr_val[0];
-
-               if (rf == 0)
-                       regoffset = regoffset_a[index];
-               else
-                       regoffset = regoffset_b[index];
-
-               rtl8188e_PHY_SetBBReg(Adapter, regoffset, bMaskDWord, writeVal);
-
-               /*  201005115 Joseph: Set Tx Power diff for Tx power training mechanism. */
-               if (regoffset == rTxAGC_A_Mcs07_Mcs04 || regoffset == rTxAGC_B_Mcs07_Mcs04) {
-                       writeVal = pwr_val[3];
-                       if (regoffset == rTxAGC_A_Mcs15_Mcs12 || regoffset == rTxAGC_A_Mcs07_Mcs04)
-                               regoffset = 0xc90;
-                       if (regoffset == rTxAGC_B_Mcs15_Mcs12 || regoffset == rTxAGC_B_Mcs07_Mcs04)
-                               regoffset = 0xc98;
-                       for (i = 0; i < 3; i++) {
-                               if (i != 2)
-                                       writeVal = (writeVal > 8) ? (writeVal - 8) : 0;
-                               else
-                                       writeVal = (writeVal > 6) ? (writeVal - 6) : 0;
-                               rtw_write8(Adapter, (u32)(regoffset + i), (u8)writeVal);
-                       }
-               }
-       }
-}
-
-/*-----------------------------------------------------------------------------
- * Function:   PHY_RF6052SetOFDMTxPower
- *
- * Overview:   For legacy and HY OFDM, we must read EEPROM TX power index for
- *                     different channel and read original value in TX power register area from
- *                     0xe00. We increase offset and original value to be correct tx pwr.
- *
- * Input:       NONE
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Revised History:
- * When                        Who             Remark
- * 11/05/2008  MHC             Simulate 8192 series method.
- * 01/06/2009  MHC             1. Prevent Path B tx power overflow or underflow dure to
- *                                             A/B pwr difference or legacy/HT pwr diff.
- *                                             2. We concern with path B legacy/HT OFDM difference.
- * 01/22/2009  MHC             Support new EPRO format from SD3.
- *
- *---------------------------------------------------------------------------*/
-
-void
-rtl8188e_PHY_RF6052SetOFDMTxPower(
-               struct adapter *Adapter,
-               u8 *pPowerLevelOFDM,
-               u8 *pPowerLevelBW20,
-               u8 *pPowerLevelBW40,
-               u8 Channel)
-{
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       u32 writeVal[2], powerBase0[2], powerBase1[2], pwrtrac_value;
-       u8 direction;
-       u8 index = 0;
-
-       getpowerbase88e(Adapter, pPowerLevelOFDM, pPowerLevelBW20, pPowerLevelBW40, Channel, &powerBase0[0], &powerBase1[0]);
-
-       /*  2012/04/23 MH According to power tracking value, we need to revise OFDM tx power. */
-       /*  This is ued to fix unstable power tracking mode. */
-       ODM_TxPwrTrackAdjust88E(&pHalData->odmpriv, 0, &direction, &pwrtrac_value);
-
-       for (index = 0; index < 6; index++) {
-               get_rx_power_val_by_reg(Adapter, Channel, index,
-                                       &powerBase0[0], &powerBase1[0],
-                                       &writeVal[0]);
-
-               if (direction == 1) {
-                       writeVal[0] += pwrtrac_value;
-                       writeVal[1] += pwrtrac_value;
-               } else if (direction == 2) {
-                       writeVal[0] -= pwrtrac_value;
-                       writeVal[1] -= pwrtrac_value;
-               }
-               writeOFDMPowerReg88E(Adapter, index, &writeVal[0]);
-       }
-}
-
-int phy_RF6052_Config_ParaFile(struct adapter *Adapter)
-{
-       struct bb_reg_def *pPhyReg;
-       struct hal_data_8188e *pHalData = &Adapter->haldata;
-       u32 u4RegValue = 0;
-       int err;
-
-       /* Initialize RF */
-
-       pPhyReg = &pHalData->PHYRegDef;
-
-       /*----Store original RFENV control type----*/
-       u4RegValue = rtl8188e_PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV);
-
-       /*----Set RF_ENV enable----*/
-       rtl8188e_PHY_SetBBReg(Adapter, pPhyReg->rfintfe, bRFSI_RFENV << 16, 0x1);
-       udelay(1);/* PlatformStallExecution(1); */
-
-       /*----Set RF_ENV output high----*/
-       rtl8188e_PHY_SetBBReg(Adapter, pPhyReg->rfintfo, bRFSI_RFENV, 0x1);
-       udelay(1);/* PlatformStallExecution(1); */
-
-       /* Set bit number of Address and Data for RF register */
-       rtl8188e_PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireAddressLength, 0x0); /*  Set 1 to 4 bits for 8255 */
-       udelay(1);/* PlatformStallExecution(1); */
-
-       rtl8188e_PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireDataLength, 0x0);    /*  Set 0 to 12  bits for 8255 */
-       udelay(1);/* PlatformStallExecution(1); */
-
-       /*----Initialize RF fom connfiguration file----*/
-       err = ODM_ReadAndConfig_RadioA_1T_8188E(&pHalData->odmpriv);
-
-       /*----Restore RFENV control type----*/;
-       rtl8188e_PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue);
-
-       return err;
-}
diff --git a/drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c b/drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c
deleted file mode 100644 (file)
index d1ac296..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _RTL8188E_REDESC_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/rtl8188e_hal.h"
-
-static void process_rssi(struct adapter *padapter, struct recv_frame *prframe)
-{
-       struct rx_pkt_attrib *pattrib = &prframe->attrib;
-       struct signal_stat *signal_stat = &padapter->recvpriv.signal_strength_data;
-
-       if (signal_stat->update_req) {
-               signal_stat->total_num = 0;
-               signal_stat->total_val = 0;
-               signal_stat->update_req = 0;
-       }
-
-       signal_stat->total_num++;
-       signal_stat->total_val  += pattrib->phy_info.SignalStrength;
-       signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
-} /*  Process_UI_RSSI_8192C */
-
-static void process_link_qual(struct adapter *padapter, struct recv_frame *prframe)
-{
-       struct rx_pkt_attrib *pattrib;
-       struct signal_stat *signal_stat;
-
-       if (!prframe || !padapter)
-               return;
-
-       pattrib = &prframe->attrib;
-       signal_stat = &padapter->recvpriv.signal_qual_data;
-
-       if (signal_stat->update_req) {
-               signal_stat->total_num = 0;
-               signal_stat->total_val = 0;
-               signal_stat->update_req = 0;
-       }
-
-       signal_stat->total_num++;
-       signal_stat->total_val  += pattrib->phy_info.SignalQuality;
-       signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
-}
-
-static void rtl8188e_process_phy_info(struct adapter *padapter, void *prframe)
-{
-       struct recv_frame *precvframe = (struct recv_frame *)prframe;
-
-       /*  Check RSSI */
-       process_rssi(padapter, precvframe);
-       /*  Check EVM */
-       process_link_qual(padapter,  precvframe);
-}
-
-void update_recvframe_attrib_88e(struct recv_frame *precvframe, struct recv_stat *prxstat)
-{
-       struct rx_pkt_attrib *pattrib = &precvframe->attrib;
-       memset(pattrib, 0, sizeof(struct rx_pkt_attrib));
-
-       pattrib->crc_err = (le32_to_cpu(prxstat->rxdw0) >> 14) & 0x1;
-
-       pattrib->pkt_rpt_type = (le32_to_cpu(prxstat->rxdw3) >> 14) & 0x3;
-
-       if (pattrib->pkt_rpt_type == NORMAL_RX) {
-               pattrib->pkt_len = le32_to_cpu(prxstat->rxdw0) & 0x00003fff;
-               pattrib->icv_err = (le32_to_cpu(prxstat->rxdw0) >> 15) & 0x1;
-               pattrib->drvinfo_sz = ((le32_to_cpu(prxstat->rxdw0) >> 16) & 0xf) * 8;
-               pattrib->encrypt = (u8)((le32_to_cpu(prxstat->rxdw0) >> 20) & 0x7);
-               pattrib->qos = (le32_to_cpu(prxstat->rxdw0) >> 23) & 0x1;
-               pattrib->shift_sz = (le32_to_cpu(prxstat->rxdw0) >> 24) & 0x3;
-               pattrib->physt = (le32_to_cpu(prxstat->rxdw0) >> 26) & 0x1;
-               pattrib->bdecrypted = (le32_to_cpu(prxstat->rxdw0) & BIT(27)) ? 0 : 1;
-
-               pattrib->priority = (le32_to_cpu(prxstat->rxdw1) >> 8) & 0xf;
-               pattrib->amsdu = (le32_to_cpu(prxstat->rxdw1) >> 13) & 0x1;
-               pattrib->mdata = (le32_to_cpu(prxstat->rxdw1) >> 26) & 0x1;
-               pattrib->mfrag = (le32_to_cpu(prxstat->rxdw1) >> 27) & 0x1;
-
-               pattrib->seq_num = le32_to_cpu(prxstat->rxdw2) & 0x00000fff;
-               pattrib->frag_num = (le32_to_cpu(prxstat->rxdw2) >> 12) & 0xf;
-
-               pattrib->mcs_rate = le32_to_cpu(prxstat->rxdw3) & 0x3f;
-               pattrib->rxht = (le32_to_cpu(prxstat->rxdw3) >> 6) & 0x1;
-
-       } else if (pattrib->pkt_rpt_type == TX_REPORT1) { /* CCX */
-               pattrib->pkt_len = TX_RPT1_PKT_LEN;
-       } else if (pattrib->pkt_rpt_type == TX_REPORT2) {
-               pattrib->pkt_len = le32_to_cpu(prxstat->rxdw0) & 0x3FF;
-
-               pattrib->MacIDValidEntry[0] = le32_to_cpu(prxstat->rxdw4);
-               pattrib->MacIDValidEntry[1] = le32_to_cpu(prxstat->rxdw5);
-
-       } else if (pattrib->pkt_rpt_type == HIS_REPORT) {
-               pattrib->pkt_len = le32_to_cpu(prxstat->rxdw0) & 0x00003fff;
-       }
-}
-
-/*
- * Notice:
- *     Before calling this function,
- *     precvframe->rx_data should be ready!
- */
-void update_recvframe_phyinfo_88e(struct recv_frame *precvframe, struct phy_stat *pphy_status)
-{
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)precvframe->rx_data;
-       struct adapter *padapter = precvframe->adapter;
-       struct rx_pkt_attrib *pattrib = &precvframe->attrib;
-       struct hal_data_8188e *pHalData = &padapter->haldata;
-       struct phy_info *pPHYInfo  = &pattrib->phy_info;
-       u8 *wlanhdr = precvframe->rx_data;
-       struct odm_per_pkt_info pkt_info;
-       u8 *sa = NULL;
-       struct sta_priv *pstapriv;
-       struct sta_info *psta;
-
-       pkt_info.bPacketMatchBSSID = ((!ieee80211_is_ctl(hdr->frame_control)) &&
-               !pattrib->icv_err && !pattrib->crc_err &&
-               !memcmp(get_hdr_bssid(wlanhdr),
-                get_bssid(&padapter->mlmepriv), ETH_ALEN));
-
-       pkt_info.bPacketToSelf = pkt_info.bPacketMatchBSSID &&
-                                ether_addr_equal(ieee80211_get_DA(hdr),
-                                                 myid(&padapter->eeprompriv));
-
-       pkt_info.bPacketBeacon = pkt_info.bPacketMatchBSSID &&
-                                ieee80211_is_beacon(hdr->frame_control);
-       if (pkt_info.bPacketBeacon) {
-               if (check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE))
-                       sa = padapter->mlmepriv.cur_network.network.MacAddress;
-               /* to do Ad-hoc */
-       } else {
-               sa = ieee80211_get_SA(hdr);
-       }
-
-       pstapriv = &padapter->stapriv;
-       pkt_info.StationID = 0xFF;
-       psta = rtw_get_stainfo(pstapriv, sa);
-       if (psta)
-               pkt_info.StationID = psta->mac_id;
-       pkt_info.Rate = pattrib->mcs_rate;
-
-       ODM_PhyStatusQuery(&pHalData->odmpriv, pPHYInfo, (u8 *)pphy_status, &(pkt_info), padapter);
-
-       precvframe->psta = NULL;
-       if (pkt_info.bPacketMatchBSSID &&
-           (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE))) {
-               if (psta) {
-                       precvframe->psta = psta;
-                       rtl8188e_process_phy_info(padapter, precvframe);
-               }
-       } else if (pkt_info.bPacketToSelf || pkt_info.bPacketBeacon) {
-               if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE)) {
-                       if (psta)
-                               precvframe->psta = psta;
-               }
-               rtl8188e_process_phy_info(padapter, precvframe);
-       }
-}
diff --git a/drivers/staging/r8188eu/hal/rtl8188eu_xmit.c b/drivers/staging/r8188eu/hal/rtl8188eu_xmit.c
deleted file mode 100644 (file)
index 3ffab49..0000000
+++ /dev/null
@@ -1,627 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _RTL8188E_XMIT_C_
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/wifi.h"
-#include "../include/osdep_intf.h"
-#include "../include/usb_ops.h"
-#include "../include/rtl8188e_hal.h"
-
-static void rtl8188eu_cal_txdesc_chksum(struct tx_desc *ptxdesc)
-{
-       u16     *usptr = (u16 *)ptxdesc;
-       u32 count = 16;         /*  (32 bytes / 2 bytes per XOR) => 16 times */
-       u32 index;
-       u16 checksum = 0;
-
-       /* Clear first */
-       ptxdesc->txdw7 &= cpu_to_le32(0xffff0000);
-
-       for (index = 0; index < count; index++)
-               checksum = checksum ^ le16_to_cpu(*(__le16 *)(usptr + index));
-       ptxdesc->txdw7 |= cpu_to_le32(0x0000ffff & checksum);
-}
-
-/*  Description: In normal chip, we should send some packet to Hw which will be used by Fw */
-/*                     in FW LPS mode. The function is to fill the Tx descriptor of this packets, then */
-/*                     Fw can tell Hw to send these packet derectly. */
-void rtl8188e_fill_fake_txdesc(struct adapter *adapt, u8 *desc, u32 BufferLen, u8  ispspoll, u8  is_btqosnull)
-{
-       struct tx_desc *ptxdesc;
-
-       /*  Clear all status */
-       ptxdesc = (struct tx_desc *)desc;
-       memset(desc, 0, TXDESC_SIZE);
-
-       /* offset 0 */
-       ptxdesc->txdw0 |= cpu_to_le32(OWN | FSG | LSG); /* own, bFirstSeg, bLastSeg; */
-
-       ptxdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE + OFFSET_SZ) << OFFSET_SHT) & 0x00ff0000); /* 32 bytes for TX Desc */
-
-       ptxdesc->txdw0 |= cpu_to_le32(BufferLen & 0x0000ffff); /*  Buffer size + command header */
-
-       /* offset 4 */
-       ptxdesc->txdw1 |= cpu_to_le32((QSLT_MGNT << QSEL_SHT) & 0x00001f00); /*  Fixed queue of Mgnt queue */
-
-       /* Set NAVUSEHDR to prevent Ps-poll AId filed to be changed to error vlaue by Hw. */
-       if (ispspoll) {
-               ptxdesc->txdw1 |= cpu_to_le32(NAVUSEHDR);
-       } else {
-               ptxdesc->txdw4 |= cpu_to_le32(BIT(7)); /*  Hw set sequence number */
-               ptxdesc->txdw3 |= cpu_to_le32((8 << 28)); /* set bit3 to 1. Suugested by TimChen. 2009.12.29. */
-       }
-
-       if (is_btqosnull)
-               ptxdesc->txdw2 |= cpu_to_le32(BIT(23)); /*  BT NULL */
-
-       /* offset 16 */
-       ptxdesc->txdw4 |= cpu_to_le32(BIT(8));/* driver uses rate */
-
-       /*  USB interface drop packet if the checksum of descriptor isn't correct. */
-       /*  Using this checksum can let hardware recovery from packet bulk out error (e.g. Cancel URC, Bulk out error.). */
-       rtl8188eu_cal_txdesc_chksum(ptxdesc);
-}
-
-static void fill_txdesc_sectype(struct pkt_attrib *pattrib, struct tx_desc *ptxdesc)
-{
-       if ((pattrib->encrypt > 0) && !pattrib->bswenc) {
-               switch (pattrib->encrypt) {
-               /* SEC_TYPE : 0:NO_ENC,1:WEP40/TKIP,2:WAPI,3:AES */
-               case _WEP40_:
-               case _WEP104_:
-                       ptxdesc->txdw1 |= cpu_to_le32((0x01 << SEC_TYPE_SHT) & 0x00c00000);
-                       ptxdesc->txdw2 |= cpu_to_le32(0x7 << AMPDU_DENSITY_SHT);
-                       break;
-               case _TKIP_:
-               case _TKIP_WTMIC_:
-                       ptxdesc->txdw1 |= cpu_to_le32((0x01 << SEC_TYPE_SHT) & 0x00c00000);
-                       ptxdesc->txdw2 |= cpu_to_le32(0x7 << AMPDU_DENSITY_SHT);
-                       break;
-               case _AES_:
-                       ptxdesc->txdw1 |= cpu_to_le32((0x03 << SEC_TYPE_SHT) & 0x00c00000);
-                       ptxdesc->txdw2 |= cpu_to_le32(0x7 << AMPDU_DENSITY_SHT);
-                       break;
-               case _NO_PRIVACY_:
-               default:
-                       break;
-               }
-       }
-}
-
-static void fill_txdesc_vcs(struct pkt_attrib *pattrib, __le32 *pdw)
-{
-       switch (pattrib->vcs_mode) {
-       case RTS_CTS:
-               *pdw |= cpu_to_le32(RTS_EN);
-               break;
-       case CTS_TO_SELF:
-               *pdw |= cpu_to_le32(CTS_2_SELF);
-               break;
-       case NONE_VCS:
-       default:
-               break;
-       }
-       if (pattrib->vcs_mode) {
-               *pdw |= cpu_to_le32(HW_RTS_EN);
-               /*  Set RTS BW */
-               if (pattrib->ht_en) {
-                       *pdw |= (pattrib->bwmode & HT_CHANNEL_WIDTH_40) ? cpu_to_le32(BIT(27)) : 0;
-
-                       if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
-                               *pdw |= cpu_to_le32((0x01 << 28) & 0x30000000);
-                       else if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
-                               *pdw |= cpu_to_le32((0x02 << 28) & 0x30000000);
-                       else if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
-                               *pdw |= 0;
-                       else
-                               *pdw |= cpu_to_le32((0x03 << 28) & 0x30000000);
-               }
-       }
-}
-
-static void fill_txdesc_phy(struct pkt_attrib *pattrib, __le32 *pdw)
-{
-       if (pattrib->ht_en) {
-               *pdw |= (pattrib->bwmode & HT_CHANNEL_WIDTH_40) ? cpu_to_le32(BIT(25)) : 0;
-
-               if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
-                       *pdw |= cpu_to_le32((0x01 << DATA_SC_SHT) & 0x003f0000);
-               else if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
-                       *pdw |= cpu_to_le32((0x02 << DATA_SC_SHT) & 0x003f0000);
-               else if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
-                       *pdw |= 0;
-               else
-                       *pdw |= cpu_to_le32((0x03 << DATA_SC_SHT) & 0x003f0000);
-       }
-}
-
-static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
-{
-       uint    qsel;
-       u8 data_rate, pwr_status, offset;
-       struct adapter          *adapt = pxmitframe->padapter;
-       struct pkt_attrib       *pattrib = &pxmitframe->attrib;
-       struct hal_data_8188e *haldata = &adapt->haldata;
-       struct tx_desc  *ptxdesc = (struct tx_desc *)pmem;
-       struct mlme_ext_priv    *pmlmeext = &adapt->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       memset(ptxdesc, 0, sizeof(struct tx_desc));
-
-       /* 4 offset 0 */
-       ptxdesc->txdw0 |= cpu_to_le32(OWN | FSG | LSG);
-       ptxdesc->txdw0 |= cpu_to_le32(sz & 0x0000ffff);/* update TXPKTSIZE */
-
-       offset = TXDESC_SIZE + OFFSET_SZ;
-
-       ptxdesc->txdw0 |= cpu_to_le32(((offset) << OFFSET_SHT) & 0x00ff0000);/* 32 bytes for TX Desc */
-
-       if (is_multicast_ether_addr(pattrib->ra))
-               ptxdesc->txdw0 |= cpu_to_le32(BMC);
-
-       /*  pkt_offset, unit:8 bytes padding */
-       if (pxmitframe->pkt_offset > 0)
-               ptxdesc->txdw1 |= cpu_to_le32((pxmitframe->pkt_offset << 26) & 0x7c000000);
-
-       /* driver uses rate */
-       ptxdesc->txdw4 |= cpu_to_le32(USERATE);/* rate control always by driver */
-
-       if ((pxmitframe->frame_tag & 0x0f) == DATA_FRAMETAG) {
-               /* offset 4 */
-               ptxdesc->txdw1 |= cpu_to_le32(pattrib->mac_id & 0x3F);
-
-               qsel = (uint)(pattrib->qsel & 0x0000001f);
-               ptxdesc->txdw1 |= cpu_to_le32((qsel << QSEL_SHT) & 0x00001f00);
-
-               ptxdesc->txdw1 |= cpu_to_le32((pattrib->raid << RATE_ID_SHT) & 0x000F0000);
-
-               fill_txdesc_sectype(pattrib, ptxdesc);
-
-               if (pattrib->ampdu_en) {
-                       ptxdesc->txdw2 |= cpu_to_le32(AGG_EN);/* AGG EN */
-                       ptxdesc->txdw6 = cpu_to_le32(0x6666f800);
-               } else {
-                       ptxdesc->txdw2 |= cpu_to_le32(AGG_BK);/* AGG BK */
-               }
-
-               /* offset 8 */
-
-               /* offset 12 */
-               ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum << SEQ_SHT) & 0x0FFF0000);
-
-               /* offset 16 , offset 20 */
-               if (pattrib->qos_en)
-                       ptxdesc->txdw4 |= cpu_to_le32(QOS);/* QoS */
-
-               /* offset 20 */
-               if (pxmitframe->agg_num > 1)
-                       ptxdesc->txdw5 |= cpu_to_le32((pxmitframe->agg_num << USB_TXAGG_NUM_SHT) & 0xFF000000);
-
-               if ((pattrib->ether_type != 0x888e) &&
-                   (pattrib->ether_type != 0x0806) &&
-                   (pattrib->ether_type != 0x88b4) &&
-                   (pattrib->dhcp_pkt != 1)) {
-                       /* Non EAP & ARP & DHCP type data packet */
-
-                       fill_txdesc_vcs(pattrib, &ptxdesc->txdw4);
-                       fill_txdesc_phy(pattrib, &ptxdesc->txdw4);
-
-                       ptxdesc->txdw4 |= cpu_to_le32(0x00000008);/* RTS Rate=24M */
-                       ptxdesc->txdw5 |= cpu_to_le32(0x0001ff00);/* DATA/RTS  Rate FB LMT */
-
-                       if (pattrib->ht_en) {
-                               if (ODM_RA_GetShortGI_8188E(&haldata->odmpriv, pattrib->mac_id))
-                                       ptxdesc->txdw5 |= cpu_to_le32(SGI);/* SGI */
-                       }
-                       data_rate = ODM_RA_GetDecisionRate_8188E(&haldata->odmpriv, pattrib->mac_id);
-                       ptxdesc->txdw5 |= cpu_to_le32(data_rate & 0x3F);
-                       pwr_status = ODM_RA_GetHwPwrStatus_8188E(&haldata->odmpriv, pattrib->mac_id);
-                       ptxdesc->txdw4 |= cpu_to_le32((pwr_status & 0x7) << PWR_STATUS_SHT);
-               } else {
-                       /*  EAP data packet and ARP packet and DHCP. */
-                       /*  Use the 1M data rate to send the EAP/ARP packet. */
-                       /*  This will maybe make the handshake smooth. */
-                       ptxdesc->txdw2 |= cpu_to_le32(AGG_BK);/* AGG BK */
-                       if (pmlmeinfo->preamble_mode == PREAMBLE_SHORT)
-                               ptxdesc->txdw4 |= cpu_to_le32(BIT(24));/*  DATA_SHORT */
-                       ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate(pmlmeext->tx_rate));
-               }
-       } else if ((pxmitframe->frame_tag & 0x0f) == MGNT_FRAMETAG) {
-               /* offset 4 */
-               ptxdesc->txdw1 |= cpu_to_le32(pattrib->mac_id & 0x3f);
-
-               qsel = (uint)(pattrib->qsel & 0x0000001f);
-               ptxdesc->txdw1 |= cpu_to_le32((qsel << QSEL_SHT) & 0x00001f00);
-
-               ptxdesc->txdw1 |= cpu_to_le32((pattrib->raid << RATE_ID_SHT) & 0x000f0000);
-
-               /* offset 8 */
-               /* CCX-TXRPT ack for xmit mgmt frames. */
-               if (pxmitframe->ack_report)
-                       ptxdesc->txdw2 |= cpu_to_le32(BIT(19));
-
-               /* offset 12 */
-               ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum << SEQ_SHT) & 0x0FFF0000);
-
-               /* offset 20 */
-               ptxdesc->txdw5 |= cpu_to_le32(RTY_LMT_EN);/* retry limit enable */
-               if (pattrib->retry_ctrl)
-                       ptxdesc->txdw5 |= cpu_to_le32(0x00180000);/* retry limit = 6 */
-               else
-                       ptxdesc->txdw5 |= cpu_to_le32(0x00300000);/* retry limit = 12 */
-
-               ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate(pmlmeext->tx_rate));
-       } else if ((pxmitframe->frame_tag & 0x0f) != TXAGG_FRAMETAG) {
-               /* offset 4 */
-               ptxdesc->txdw1 |= cpu_to_le32((4) & 0x3f);/* CAM_ID(MAC_ID) */
-
-               ptxdesc->txdw1 |= cpu_to_le32((6 << RATE_ID_SHT) & 0x000f0000);/* raid */
-
-               /* offset 8 */
-
-               /* offset 12 */
-               ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum << SEQ_SHT) & 0x0fff0000);
-
-               /* offset 20 */
-               ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate(pmlmeext->tx_rate));
-       }
-
-       /*  2009.11.05. tynli_test. Suggested by SD4 Filen for FW LPS. */
-       /*  (1) The sequence number of each non-Qos frame / broadcast / multicast / */
-       /*  mgnt frame should be controlled by Hw because Fw will also send null data */
-       /*  which we cannot control when Fw LPS enable. */
-       /*  --> default enable non-Qos data sequense number. 2010.06.23. by tynli. */
-       /*  (2) Enable HW SEQ control for beacon packet, because we use Hw beacon. */
-       /*  (3) Use HW Qos SEQ to control the seq num of Ext port non-Qos packets. */
-       /*  2010.06.23. Added by tynli. */
-       if (!pattrib->qos_en) {
-               ptxdesc->txdw3 |= cpu_to_le32(EN_HWSEQ); /*  Hw set sequence number */
-               ptxdesc->txdw4 |= cpu_to_le32(HW_SSN);  /*  Hw set sequence number */
-       }
-
-       ODM_SetTxAntByTxInfo_88E(&haldata->odmpriv, pmem, pattrib->mac_id);
-
-       rtl8188eu_cal_txdesc_chksum(ptxdesc);
-       return 0;
-}
-
-/* for non-agg data frame or  management frame */
-static s32 rtw_dump_xframe(struct adapter *adapt, struct xmit_frame *pxmitframe)
-{
-       s32 ret = _SUCCESS;
-       s32 inner_ret = _SUCCESS;
-       int t, sz, w_sz, pull = 0;
-       u8 *mem_addr;
-       u32 ff_hwaddr;
-       struct xmit_buf *pxmitbuf = pxmitframe->pxmitbuf;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct xmit_priv *pxmitpriv = &adapt->xmitpriv;
-       struct security_priv *psecuritypriv = &adapt->securitypriv;
-       if ((pxmitframe->frame_tag == DATA_FRAMETAG) &&
-           (pxmitframe->attrib.ether_type != 0x0806) &&
-           (pxmitframe->attrib.ether_type != 0x888e) &&
-           (pxmitframe->attrib.ether_type != 0x88b4) &&
-           (pxmitframe->attrib.dhcp_pkt != 1))
-               rtw_issue_addbareq_cmd(adapt, pxmitframe);
-       mem_addr = pxmitframe->buf_addr;
-
-       for (t = 0; t < pattrib->nr_frags; t++) {
-               if (inner_ret != _SUCCESS && ret == _SUCCESS)
-                       ret = _FAIL;
-
-               if (t != (pattrib->nr_frags - 1)) {
-                       sz = pxmitpriv->frag_len;
-                       sz = sz - 4 - (psecuritypriv->sw_encrypt ? 0 : pattrib->icv_len);
-               } else {
-                       /* no frag */
-                       sz = pattrib->last_txcmdsz;
-               }
-
-               pull = update_txdesc(pxmitframe, mem_addr, sz);
-
-               if (pull) {
-                       mem_addr += PACKET_OFFSET_SZ; /* pull txdesc head */
-                       pxmitframe->buf_addr = mem_addr;
-                       w_sz = sz + TXDESC_SIZE;
-               } else {
-                       w_sz = sz + TXDESC_SIZE + PACKET_OFFSET_SZ;
-               }
-               ff_hwaddr = rtw_get_ff_hwaddr(pxmitframe);
-
-               inner_ret = rtw_write_port(adapt, ff_hwaddr, w_sz, (unsigned char *)pxmitbuf);
-
-               rtw_count_tx_stats(adapt, pxmitframe, sz);
-
-               mem_addr += w_sz;
-
-               mem_addr = PTR_ALIGN(mem_addr, 4);
-       }
-
-       rtw_free_xmitframe(pxmitpriv, pxmitframe);
-
-       if  (ret != _SUCCESS)
-               rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_UNKNOWN);
-
-       return ret;
-}
-
-static u32 xmitframe_need_length(struct xmit_frame *pxmitframe)
-{
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-
-       u32 len = 0;
-
-       /*  no consider fragement */
-       len = pattrib->hdrlen + pattrib->iv_len +
-               SNAP_SIZE + sizeof(u16) +
-               pattrib->pktlen +
-               ((pattrib->bswenc) ? pattrib->icv_len : 0);
-
-       if (pattrib->encrypt == _TKIP_)
-               len += 8;
-
-       return len;
-}
-
-bool rtl8188eu_xmitframe_complete(struct adapter *adapt)
-{
-       struct xmit_priv *pxmitpriv = &adapt->xmitpriv;
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(adapt);
-       struct xmit_frame *pxmitframe = NULL;
-       struct xmit_frame *pfirstframe = NULL;
-       struct xmit_buf *pxmitbuf;
-
-       /*  aggregate variable */
-       struct hw_xmit *phwxmit;
-       struct sta_info *psta = NULL;
-       struct tx_servq *ptxservq = NULL;
-       struct list_head *xmitframe_plist = NULL, *xmitframe_phead = NULL;
-
-       u32 pbuf;       /*  next pkt address */
-       u32 pbuf_tail;  /*  last pkt tail */
-       u32 len;        /*  packet length, except TXDESC_SIZE and PKT_OFFSET */
-
-       u32 bulksize;
-       u8 desc_cnt;
-       u32 bulkptr;
-
-       /*  dump frame variable */
-       u32 ff_hwaddr;
-
-       if (pdvobjpriv->pusbdev->speed == USB_SPEED_HIGH)
-               bulksize = USB_HIGH_SPEED_BULK_SIZE;
-       else
-               bulksize = USB_FULL_SPEED_BULK_SIZE;
-
-       pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv);
-       if (!pxmitbuf)
-               return false;
-
-       pxmitframe = rtw_dequeue_xframe(pxmitpriv, pxmitpriv->hwxmits);
-       if (!pxmitframe) {
-               /*  no more xmit frame, release xmit buffer */
-               rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
-               return false;
-       }
-
-       pxmitframe->pxmitbuf = pxmitbuf;
-       pxmitframe->buf_addr = pxmitbuf->pbuf;
-       pxmitbuf->priv_data = pxmitframe;
-
-       pxmitframe->agg_num = 1; /*  alloc xmitframe should assign to 1. */
-       pxmitframe->pkt_offset = 1; /*  first frame of aggregation, reserve offset */
-
-       rtw_xmitframe_coalesce(adapt, pxmitframe->pkt, pxmitframe);
-
-       /*  always return ndis_packet after rtw_xmitframe_coalesce */
-       rtw_xmit_complete(adapt, pxmitframe);
-
-       /* 3 2. aggregate same priority and same DA(AP or STA) frames */
-       pfirstframe = pxmitframe;
-       len = xmitframe_need_length(pfirstframe) + TXDESC_SIZE + (pfirstframe->pkt_offset * PACKET_OFFSET_SZ);
-       pbuf_tail = len;
-       pbuf = round_up(pbuf_tail, 8);
-
-       /*  check pkt amount in one bulk */
-       desc_cnt = 0;
-       bulkptr = bulksize;
-       if (pbuf < bulkptr) {
-               desc_cnt++;
-       } else {
-               desc_cnt = 0;
-               bulkptr = ((pbuf / bulksize) + 1) * bulksize; /*  round to next bulksize */
-       }
-
-       /*  dequeue same priority packet from station tx queue */
-       psta = pfirstframe->attrib.psta;
-       switch (pfirstframe->attrib.priority) {
-       case 1:
-       case 2:
-               ptxservq = &psta->sta_xmitpriv.bk_q;
-               phwxmit = pxmitpriv->hwxmits + 3;
-               break;
-       case 4:
-       case 5:
-               ptxservq = &psta->sta_xmitpriv.vi_q;
-               phwxmit = pxmitpriv->hwxmits + 1;
-               break;
-       case 6:
-       case 7:
-               ptxservq = &psta->sta_xmitpriv.vo_q;
-               phwxmit = pxmitpriv->hwxmits;
-               break;
-       case 0:
-       case 3:
-       default:
-               ptxservq = &psta->sta_xmitpriv.be_q;
-               phwxmit = pxmitpriv->hwxmits + 2;
-               break;
-       }
-       spin_lock_bh(&pxmitpriv->lock);
-
-       xmitframe_phead = &ptxservq->sta_pending;
-       xmitframe_plist = xmitframe_phead->next;
-
-       while (xmitframe_phead != xmitframe_plist) {
-               pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list);
-               xmitframe_plist = xmitframe_plist->next;
-
-               pxmitframe->agg_num = 0; /*  not first frame of aggregation */
-               pxmitframe->pkt_offset = 0; /*  not first frame of aggregation, no need to reserve offset */
-
-               len = xmitframe_need_length(pxmitframe) + TXDESC_SIZE + (pxmitframe->pkt_offset * PACKET_OFFSET_SZ);
-
-               if (pbuf + len > MAX_XMITBUF_SZ) {
-                       pxmitframe->agg_num = 1;
-                       pxmitframe->pkt_offset = 1;
-                       break;
-               }
-               list_del_init(&pxmitframe->list);
-               ptxservq->qcnt--;
-               phwxmit->accnt--;
-
-               pxmitframe->buf_addr = pxmitbuf->pbuf + pbuf;
-
-               rtw_xmitframe_coalesce(adapt, pxmitframe->pkt, pxmitframe);
-               /*  always return ndis_packet after rtw_xmitframe_coalesce */
-               rtw_xmit_complete(adapt, pxmitframe);
-
-               /*  (len - TXDESC_SIZE) == pxmitframe->attrib.last_txcmdsz */
-               update_txdesc(pxmitframe, pxmitframe->buf_addr, pxmitframe->attrib.last_txcmdsz);
-
-               /*  don't need xmitframe any more */
-               rtw_free_xmitframe(pxmitpriv, pxmitframe);
-
-               /*  handle pointer and stop condition */
-               pbuf_tail = pbuf + len;
-               pbuf = round_up(pbuf_tail, 8);
-
-               pfirstframe->agg_num++;
-               if (MAX_TX_AGG_PACKET_NUMBER == pfirstframe->agg_num)
-                       break;
-
-               if (pbuf < bulkptr) {
-                       desc_cnt++;
-                       if (desc_cnt == USB_TXAGG_DESC_NUM)
-                               break;
-               } else {
-                       desc_cnt = 0;
-                       bulkptr = ((pbuf / bulksize) + 1) * bulksize;
-               }
-       } /* end while (aggregate same priority and same DA(AP or STA) frames) */
-
-       if (list_empty(&ptxservq->sta_pending))
-               list_del_init(&ptxservq->tx_pending);
-
-       spin_unlock_bh(&pxmitpriv->lock);
-       if ((pfirstframe->attrib.ether_type != 0x0806) &&
-           (pfirstframe->attrib.ether_type != 0x888e) &&
-           (pfirstframe->attrib.ether_type != 0x88b4) &&
-           (pfirstframe->attrib.dhcp_pkt != 1))
-               rtw_issue_addbareq_cmd(adapt, pfirstframe);
-       /* 3 3. update first frame txdesc */
-       if ((pbuf_tail % bulksize) == 0) {
-               /*  remove pkt_offset */
-               pbuf_tail -= PACKET_OFFSET_SZ;
-               pfirstframe->buf_addr += PACKET_OFFSET_SZ;
-               pfirstframe->pkt_offset--;
-       }
-
-       update_txdesc(pfirstframe, pfirstframe->buf_addr, pfirstframe->attrib.last_txcmdsz);
-
-       /* 3 4. write xmit buffer to USB FIFO */
-       ff_hwaddr = rtw_get_ff_hwaddr(pfirstframe);
-       rtw_write_port(adapt, ff_hwaddr, pbuf_tail, (u8 *)pxmitbuf);
-
-       /* 3 5. update statisitc */
-       pbuf_tail -= (pfirstframe->agg_num * TXDESC_SIZE);
-       pbuf_tail -= (pfirstframe->pkt_offset * PACKET_OFFSET_SZ);
-
-       rtw_count_tx_stats(adapt, pfirstframe, pbuf_tail);
-
-       rtw_free_xmitframe(pxmitpriv, pfirstframe);
-
-       return true;
-}
-
-static s32 xmitframe_direct(struct adapter *adapt, struct xmit_frame *pxmitframe)
-{
-       s32 res = _SUCCESS;
-
-       res = rtw_xmitframe_coalesce(adapt, pxmitframe->pkt, pxmitframe);
-       if (res == _SUCCESS)
-               rtw_dump_xframe(adapt, pxmitframe);
-
-       return res;
-}
-
-/*
- * Return
- *     true    dump packet directly
- *     false   enqueue packet
- */
-static s32 pre_xmitframe(struct adapter *adapt, struct xmit_frame *pxmitframe)
-{
-       s32 res;
-       struct xmit_buf *pxmitbuf = NULL;
-       struct xmit_priv *pxmitpriv = &adapt->xmitpriv;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct mlme_priv *pmlmepriv = &adapt->mlmepriv;
-
-       spin_lock_bh(&pxmitpriv->lock);
-
-       if (rtw_txframes_sta_ac_pending(adapt, pattrib) > 0)
-               goto enqueue;
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING))
-               goto enqueue;
-
-       pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv);
-       if (!pxmitbuf)
-               goto enqueue;
-
-       spin_unlock_bh(&pxmitpriv->lock);
-
-       pxmitframe->pxmitbuf = pxmitbuf;
-       pxmitframe->buf_addr = pxmitbuf->pbuf;
-       pxmitbuf->priv_data = pxmitframe;
-
-       if (xmitframe_direct(adapt, pxmitframe) != _SUCCESS) {
-               rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
-               rtw_free_xmitframe(pxmitpriv, pxmitframe);
-       }
-
-       return true;
-
-enqueue:
-       res = rtw_xmit_classifier(adapt, pxmitframe);
-       spin_unlock_bh(&pxmitpriv->lock);
-
-       if (res != _SUCCESS) {
-               rtw_free_xmitframe(pxmitpriv, pxmitframe);
-
-               /*  Trick, make the statistics correct */
-               pxmitpriv->tx_pkts--;
-               pxmitpriv->tx_drop++;
-               return true;
-       }
-
-       return false;
-}
-
-s32 rtl8188eu_mgnt_xmit(struct adapter *adapt, struct xmit_frame *pmgntframe)
-{
-       return rtw_dump_xframe(adapt, pmgntframe);
-}
-
-/*
- * Return
- *     true    dump packet directly ok
- *     false   temporary can't transmit packets to hardware
- */
-s32 rtl8188eu_hal_xmit(struct adapter *adapt, struct xmit_frame *pxmitframe)
-{
-       return pre_xmitframe(adapt, pxmitframe);
-}
diff --git a/drivers/staging/r8188eu/hal/usb_halinit.c b/drivers/staging/r8188eu/hal/usb_halinit.c
deleted file mode 100644 (file)
index a1051ac..0000000
+++ /dev/null
@@ -1,1069 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _HCI_HAL_INIT_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/rtw_efuse.h"
-#include "../include/rtw_fw.h"
-#include "../include/rtl8188e_hal.h"
-#include "../include/rtw_iol.h"
-#include "../include/usb_ops.h"
-#include "../include/usb_osintf.h"
-#include "../include/HalPwrSeqCmd.h"
-
-static void one_out_pipe(struct adapter *adapter)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(adapter);
-
-       pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
-       pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0];/* VI */
-       pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[0];/* BE */
-       pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[0];/* BK */
-}
-
-static void two_out_pipe(struct adapter *adapter, bool wifi_cfg)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(adapter);
-
-       /* 0:H, 1:L */
-
-       pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0];/* VI */
-       pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[1];/* BE */
-
-       if (wifi_cfg) {
-               pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[1];/* VO */
-               pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[0];/* BK */
-       } else {
-               pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
-               pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[1];/* BK */
-       }
-}
-
-static void three_out_pipe(struct adapter *adapter, bool wifi_cfg)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(adapter);
-
-       /* 0:H, 1:N, 2:L */
-
-       pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
-       pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[1];/* VI */
-       pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[2];/* BE */
-
-       pdvobjpriv->Queue2Pipe[3] = wifi_cfg ?
-               pdvobjpriv->RtOutPipe[1] : pdvobjpriv->RtOutPipe[2];/* BK */
-}
-
-int rtl8188eu_interface_configure(struct adapter *adapt)
-{
-       struct registry_priv *pregistrypriv = &adapt->registrypriv;
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(adapt);
-       struct hal_data_8188e *haldata = &adapt->haldata;
-       bool wifi_cfg = pregistrypriv->wifi_spec;
-
-       pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];/* BCN */
-       pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];/* MGT */
-       pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];/* HIGH */
-       pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];/* TXCMD */
-
-       switch (pdvobjpriv->RtNumOutPipes) {
-       case 3:
-               haldata->out_ep_extra_queues = TX_SELE_LQ | TX_SELE_NQ;
-               three_out_pipe(adapt, wifi_cfg);
-               break;
-       case 2:
-               haldata->out_ep_extra_queues = TX_SELE_NQ;
-               two_out_pipe(adapt, wifi_cfg);
-               break;
-       case 1:
-               one_out_pipe(adapt);
-               break;
-       default:
-               return -ENXIO;
-       }
-
-       return 0;
-}
-
-u32 rtl8188eu_InitPowerOn(struct adapter *adapt)
-{
-       u16 value16;
-       int res;
-
-       /*  HW Power on sequence */
-       struct hal_data_8188e *haldata = &adapt->haldata;
-       if (haldata->bMacPwrCtrlOn)
-               return _SUCCESS;
-
-       if (!HalPwrSeqCmdParsing(adapt, PWR_ON_FLOW))
-               return _FAIL;
-
-       /*  Enable MAC DMA/WMAC/SCHEDULE/SEC block */
-       /*  Set CR bit10 to enable 32k calibration. Suggested by SD1 Gimmy. Added by tynli. 2011.08.31. */
-       rtw_write16(adapt, REG_CR, 0x00);  /* suggseted by zhouzhou, by page, 20111230 */
-
-               /*  Enable MAC DMA/WMAC/SCHEDULE/SEC block */
-       res = rtw_read16(adapt, REG_CR, &value16);
-       if (res)
-               return _FAIL;
-
-       value16 |= (HCI_TXDMA_EN | HCI_RXDMA_EN | TXDMA_EN | RXDMA_EN
-                               | PROTOCOL_EN | SCHEDULE_EN | ENSEC | CALTMR_EN);
-       /*  for SDIO - Set CR bit10 to enable 32k calibration. Suggested by SD1 Gimmy. Added by tynli. 2011.08.31. */
-
-       rtw_write16(adapt, REG_CR, value16);
-       haldata->bMacPwrCtrlOn = true;
-
-       return _SUCCESS;
-}
-
-/*  Shall USB interface init this? */
-static void _InitInterrupt(struct adapter *Adapter)
-{
-       u32 imr, imr_ex;
-       u8  usb_opt;
-       int res;
-
-       /* HISR write one to clear */
-       rtw_write32(Adapter, REG_HISR_88E, 0xFFFFFFFF);
-       /*  HIMR - */
-       imr = IMR_PSTIMEOUT_88E | IMR_TBDER_88E | IMR_CPWM_88E | IMR_CPWM2_88E;
-       rtw_write32(Adapter, REG_HIMR_88E, imr);
-
-       imr_ex = IMR_TXERR_88E | IMR_RXERR_88E | IMR_TXFOVW_88E | IMR_RXFOVW_88E;
-       rtw_write32(Adapter, REG_HIMRE_88E, imr_ex);
-
-       /*  REG_USB_SPECIAL_OPTION - BIT(4) */
-       /*  0; Use interrupt endpoint to upload interrupt pkt */
-       /*  1; Use bulk endpoint to upload interrupt pkt, */
-       res = rtw_read8(Adapter, REG_USB_SPECIAL_OPTION, &usb_opt);
-       if (res)
-               return;
-
-       if (adapter_to_dvobj(Adapter)->pusbdev->speed == USB_SPEED_HIGH)
-               usb_opt = usb_opt | (INT_BULK_SEL);
-       else
-               usb_opt = usb_opt & (~INT_BULK_SEL);
-
-       rtw_write8(Adapter, REG_USB_SPECIAL_OPTION, usb_opt);
-}
-
-static void _InitQueueReservedPage(struct adapter *Adapter)
-{
-       struct hal_data_8188e *haldata = &Adapter->haldata;
-       struct registry_priv    *pregistrypriv = &Adapter->registrypriv;
-       u8 numLQ = 0;
-       u8 numNQ = 0;
-       u8 numPubQ;
-
-       if (pregistrypriv->wifi_spec) {
-               if (haldata->out_ep_extra_queues & TX_SELE_LQ)
-                       numLQ = 0x1C;
-
-               /*  NOTE: This step shall be proceed before writing REG_RQPN. */
-               if (haldata->out_ep_extra_queues & TX_SELE_NQ)
-                       numNQ = 0x1C;
-
-               rtw_write8(Adapter, REG_RQPN_NPQ, numNQ);
-
-               numPubQ = 0xA8 - NUM_HQ - numLQ - numNQ;
-
-               /*  TX DMA */
-               rtw_write32(Adapter, REG_RQPN, LD_RQPN | numPubQ << 16 | numLQ << 8 | NUM_HQ);
-       } else {
-               rtw_write16(Adapter, REG_RQPN_NPQ, 0x0000);/* Just follow MP Team,??? Georgia 03/28 */
-               rtw_write16(Adapter, REG_RQPN_NPQ, 0x0d);
-               rtw_write32(Adapter, REG_RQPN, 0x808E000d);/* reserve 7 page for LPS */
-       }
-}
-
-static void _InitTxBufferBoundary(struct adapter *Adapter, u8 txpktbuf_bndy)
-{
-       rtw_write8(Adapter, REG_TXPKTBUF_BCNQ_BDNY, txpktbuf_bndy);
-       rtw_write8(Adapter, REG_TXPKTBUF_MGQ_BDNY, txpktbuf_bndy);
-       rtw_write8(Adapter, REG_TXPKTBUF_WMAC_LBK_BF_HD, txpktbuf_bndy);
-       rtw_write8(Adapter, REG_TRXFF_BNDY, txpktbuf_bndy);
-       rtw_write8(Adapter, REG_TDECTRL + 1, txpktbuf_bndy);
-}
-
-static void _InitPageBoundary(struct adapter *Adapter)
-{
-       /*  RX Page Boundary */
-       /*  */
-       u16 rxff_bndy = MAX_RX_DMA_BUFFER_SIZE_88E - 1;
-
-       rtw_write16(Adapter, (REG_TRXFF_BNDY + 2), rxff_bndy);
-}
-
-static void _InitNormalChipRegPriority(struct adapter *Adapter, u16 beQ,
-                                      u16 bkQ, u16 viQ, u16 voQ, u16 mgtQ,
-                                      u16 hiQ)
-{
-       u16 value16;
-       int res;
-
-       res = rtw_read16(Adapter, REG_TRXDMA_CTRL, &value16);
-       if (res)
-               return;
-
-       value16 &= 0x7;
-
-       value16 |= _TXDMA_BEQ_MAP(beQ)  | _TXDMA_BKQ_MAP(bkQ) |
-                  _TXDMA_VIQ_MAP(viQ)  | _TXDMA_VOQ_MAP(voQ) |
-                  _TXDMA_MGQ_MAP(mgtQ) | _TXDMA_HIQ_MAP(hiQ);
-
-       rtw_write16(Adapter, REG_TRXDMA_CTRL, value16);
-}
-
-static void _InitNormalChipTwoOutEpPriority(struct adapter *Adapter)
-{
-       struct registry_priv *pregistrypriv = &Adapter->registrypriv;
-       u16 bkQ, voQ;
-
-       if (!pregistrypriv->wifi_spec) {
-               bkQ     = QUEUE_NORMAL;
-               voQ     = QUEUE_HIGH;
-       } else {/* for WMM ,CONFIG_OUT_EP_WIFI_MODE */
-               bkQ     = QUEUE_HIGH;
-               voQ     = QUEUE_NORMAL;
-       }
-       _InitNormalChipRegPriority(Adapter, QUEUE_NORMAL, bkQ, QUEUE_HIGH,
-                                  voQ, QUEUE_HIGH, QUEUE_HIGH);
-}
-
-static void _InitNormalChipThreeOutEpPriority(struct adapter *Adapter)
-{
-       struct registry_priv *pregistrypriv = &Adapter->registrypriv;
-       u16 beQ, bkQ, viQ, voQ, mgtQ, hiQ;
-
-       if (!pregistrypriv->wifi_spec) {/*  typical setting */
-               beQ     = QUEUE_LOW;
-               bkQ     = QUEUE_LOW;
-               viQ     = QUEUE_NORMAL;
-               voQ     = QUEUE_HIGH;
-               mgtQ    = QUEUE_HIGH;
-               hiQ     = QUEUE_HIGH;
-       } else {/*  for WMM */
-               beQ     = QUEUE_LOW;
-               bkQ     = QUEUE_NORMAL;
-               viQ     = QUEUE_NORMAL;
-               voQ     = QUEUE_HIGH;
-               mgtQ    = QUEUE_HIGH;
-               hiQ     = QUEUE_HIGH;
-       }
-       _InitNormalChipRegPriority(Adapter, beQ, bkQ, viQ, voQ, mgtQ, hiQ);
-}
-
-static void _InitQueuePriority(struct adapter *Adapter)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(Adapter);
-
-       switch (pdvobjpriv->RtNumOutPipes) {
-       case 1:
-               _InitNormalChipRegPriority(Adapter, QUEUE_HIGH, QUEUE_HIGH, QUEUE_HIGH,
-                                          QUEUE_HIGH, QUEUE_HIGH, QUEUE_HIGH);
-               break;
-       case 2:
-               _InitNormalChipTwoOutEpPriority(Adapter);
-               break;
-       case 3:
-               _InitNormalChipThreeOutEpPriority(Adapter);
-               break;
-       default:
-               break;
-       }
-}
-
-static void _InitNetworkType(struct adapter *Adapter)
-{
-       u32 value32;
-       int res;
-
-       res = rtw_read32(Adapter, REG_CR, &value32);
-       if (res)
-               return;
-
-       /*  TODO: use the other function to set network type */
-       value32 = (value32 & ~MASK_NETTYPE) | _NETTYPE(NT_LINK_AP);
-
-       rtw_write32(Adapter, REG_CR, value32);
-}
-
-static void _InitTransferPageSize(struct adapter *Adapter)
-{
-       /*  Tx page size is always 128. */
-
-       u8 value8;
-       value8 = _PSRX(PBP_128) | _PSTX(PBP_128);
-       rtw_write8(Adapter, REG_PBP, value8);
-}
-
-static void _InitDriverInfoSize(struct adapter *Adapter, u8 drvInfoSize)
-{
-       rtw_write8(Adapter, REG_RX_DRVINFO_SZ, drvInfoSize);
-}
-
-static void _InitWMACSetting(struct adapter *Adapter)
-{
-       u32 receive_config = RCR_AAP | RCR_APM | RCR_AM | RCR_AB |
-                            RCR_CBSSID_DATA | RCR_CBSSID_BCN |
-                            RCR_APP_ICV | RCR_AMF | RCR_HTC_LOC_CTRL |
-                            RCR_APP_MIC | RCR_APP_PHYSTS;
-
-       /*  some REG_RCR will be modified later by phy_ConfigMACWithHeaderFile() */
-       rtw_write32(Adapter, REG_RCR, receive_config);
-
-       /*  Accept all multicast address */
-       rtw_write32(Adapter, REG_MAR, 0xFFFFFFFF);
-       rtw_write32(Adapter, REG_MAR + 4, 0xFFFFFFFF);
-}
-
-static void _InitAdaptiveCtrl(struct adapter *Adapter)
-{
-       u16 value16;
-       u32 value32;
-       int res;
-
-       /*  Response Rate Set */
-       res = rtw_read32(Adapter, REG_RRSR, &value32);
-       if (res)
-               return;
-
-       value32 &= ~RATE_BITMAP_ALL;
-       value32 |= RATE_RRSR_CCK_ONLY_1M;
-       rtw_write32(Adapter, REG_RRSR, value32);
-
-       /*  CF-END Threshold */
-
-       /*  SIFS (used in NAV) */
-       value16 = _SPEC_SIFS_CCK(0x10) | _SPEC_SIFS_OFDM(0x10);
-       rtw_write16(Adapter, REG_SPEC_SIFS, value16);
-
-       /*  Retry Limit */
-       value16 = _LRL(0x30) | _SRL(0x30);
-       rtw_write16(Adapter, REG_RL, value16);
-}
-
-static void _InitEDCA(struct adapter *Adapter)
-{
-       /*  Set Spec SIFS (used in NAV) */
-       rtw_write16(Adapter, REG_SPEC_SIFS, 0x100a);
-       rtw_write16(Adapter, REG_MAC_SPEC_SIFS, 0x100a);
-
-       /*  Set SIFS for CCK */
-       rtw_write16(Adapter, REG_SIFS_CTX, 0x100a);
-
-       /*  Set SIFS for OFDM */
-       rtw_write16(Adapter, REG_SIFS_TRX, 0x100a);
-
-       /*  TXOP */
-       rtw_write32(Adapter, REG_EDCA_BE_PARAM, 0x005EA42B);
-       rtw_write32(Adapter, REG_EDCA_BK_PARAM, 0x0000A44F);
-       rtw_write32(Adapter, REG_EDCA_VI_PARAM, 0x005EA324);
-       rtw_write32(Adapter, REG_EDCA_VO_PARAM, 0x002FA226);
-}
-
-static void _InitRetryFunction(struct adapter *Adapter)
-{
-       u8 value8;
-       int res;
-
-       res = rtw_read8(Adapter, REG_FWHW_TXQ_CTRL, &value8);
-       if (res)
-               return;
-
-       value8 |= EN_AMPDU_RTY_NEW;
-       rtw_write8(Adapter, REG_FWHW_TXQ_CTRL, value8);
-
-       /*  Set ACK timeout */
-       rtw_write8(Adapter, REG_ACKTO, 0x40);
-}
-
-/*-----------------------------------------------------------------------------
- * Function:   usb_AggSettingTxUpdate()
- *
- * Overview:   Separate TX/RX parameters update independent for TP detection and
- *                     dynamic TX/RX aggreagtion parameters update.
- *
- * Input:                      struct adapter *
- *
- * Output/Return:      NONE
- *
- * Revised History:
- *     When            Who             Remark
- *     12/10/2010      MHC             Separate to smaller function.
- *
- *---------------------------------------------------------------------------*/
-static void usb_AggSettingTxUpdate(struct adapter *Adapter)
-{
-       u32 value32;
-       int res;
-
-       if (Adapter->registrypriv.wifi_spec)
-               return;
-
-       res = rtw_read32(Adapter, REG_TDECTRL, &value32);
-       if (res)
-               return;
-
-       value32 = value32 & ~(BLK_DESC_NUM_MASK << BLK_DESC_NUM_SHIFT);
-       value32 |= ((USB_TXAGG_DESC_NUM & BLK_DESC_NUM_MASK) << BLK_DESC_NUM_SHIFT);
-
-       rtw_write32(Adapter, REG_TDECTRL, value32);
-}
-
-/*-----------------------------------------------------------------------------
- * Function:   usb_AggSettingRxUpdate()
- *
- * Overview:   Separate TX/RX parameters update independent for TP detection and
- *                     dynamic TX/RX aggreagtion parameters update.
- *
- * Input:                      struct adapter *
- *
- * Output/Return:      NONE
- *
- * Revised History:
- *     When            Who             Remark
- *     12/10/2010      MHC             Separate to smaller function.
- *
- *---------------------------------------------------------------------------*/
-static void
-usb_AggSettingRxUpdate(
-               struct adapter *Adapter
-       )
-{
-       u8 valueDMA;
-       u8 valueUSB;
-       int res;
-
-       res = rtw_read8(Adapter, REG_TRXDMA_CTRL, &valueDMA);
-       if (res)
-               return;
-
-       res = rtw_read8(Adapter, REG_USB_SPECIAL_OPTION, &valueUSB);
-       if (res)
-               return;
-
-       valueDMA |= RXDMA_AGG_EN;
-       valueUSB &= ~USB_AGG_EN;
-
-       rtw_write8(Adapter, REG_TRXDMA_CTRL, valueDMA);
-       rtw_write8(Adapter, REG_USB_SPECIAL_OPTION, valueUSB);
-
-       rtw_write8(Adapter, REG_RXDMA_AGG_PG_TH, USB_RXAGG_PAGE_COUNT);
-       rtw_write8(Adapter, REG_RXDMA_AGG_PG_TH + 1, USB_RXAGG_PAGE_TIMEOUT);
-}
-
-static void InitUsbAggregationSetting(struct adapter *Adapter)
-{
-       /*  Tx aggregation setting */
-       usb_AggSettingTxUpdate(Adapter);
-
-       /*  Rx aggregation setting */
-       usb_AggSettingRxUpdate(Adapter);
-}
-
-/* FIXME: add error handling in callers */
-static int _InitBeaconParameters(struct adapter *Adapter)
-{
-       struct hal_data_8188e *haldata = &Adapter->haldata;
-       int res;
-
-       rtw_write16(Adapter, REG_BCN_CTRL, 0x1010);
-
-       /*  TODO: Remove these magic number */
-       rtw_write16(Adapter, REG_TBTT_PROHIBIT, 0x6404);/*  ms */
-       rtw_write8(Adapter, REG_DRVERLYINT, DRIVER_EARLY_INT_TIME);/*  5ms */
-       rtw_write8(Adapter, REG_BCNDMATIM, BCN_DMA_ATIME_INT_TIME); /*  2ms */
-
-       /*  Suggested by designer timchen. Change beacon AIFS to the largest number */
-       /*  beacause test chip does not contension before sending beacon. by tynli. 2009.11.03 */
-       rtw_write16(Adapter, REG_BCNTCFG, 0x660F);
-
-       res = rtw_read8(Adapter, REG_FWHW_TXQ_CTRL + 2, &haldata->RegFwHwTxQCtrl);
-       if (res)
-               return res;
-
-       res = rtw_read8(Adapter, REG_TBTT_PROHIBIT + 2, &haldata->RegReg542);
-       if (res)
-               return res;
-
-       res = rtw_read8(Adapter, REG_CR + 1, &haldata->RegCR_1);
-       if (res)
-               return res;
-
-       return 0;
-}
-
-static void _BeaconFunctionEnable(struct adapter *Adapter)
-{
-       rtw_write8(Adapter, REG_BCN_CTRL, (BIT(4) | BIT(3) | BIT(1)));
-
-       rtw_write8(Adapter, REG_RD_CTRL + 1, 0x6F);
-}
-
-/*  Set CCK and OFDM Block "ON" */
-static void _BBTurnOnBlock(struct adapter *Adapter)
-{
-       rtl8188e_PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bCCKEn, 0x1);
-       rtl8188e_PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bOFDMEn, 0x1);
-}
-
-static void _InitAntenna_Selection(struct adapter *Adapter)
-{
-       struct hal_data_8188e *haldata = &Adapter->haldata;
-       int res;
-       u32 reg;
-
-       if (haldata->AntDivCfg == 0)
-               return;
-
-       res = rtw_read32(Adapter, REG_LEDCFG0, &reg);
-       if (res)
-               return;
-
-       rtw_write32(Adapter, REG_LEDCFG0, reg | BIT(23));
-       rtl8188e_PHY_SetBBReg(Adapter, rFPGA0_XAB_RFParameter, BIT(13), 0x01);
-
-       if (rtl8188e_PHY_QueryBBReg(Adapter, rFPGA0_XA_RFInterfaceOE, 0x300) == Antenna_A)
-               haldata->CurAntenna = Antenna_A;
-       else
-               haldata->CurAntenna = Antenna_B;
-}
-
-static void hw_var_set_macaddr(struct adapter *Adapter, u8 *val)
-{
-       u8 idx = 0;
-       u32 reg_macid;
-
-       reg_macid = REG_MACID;
-
-       for (idx = 0; idx < 6; idx++)
-               rtw_write8(Adapter, (reg_macid + idx), val[idx]);
-}
-
-u32 rtl8188eu_hal_init(struct adapter *Adapter)
-{
-       u8 value8 = 0;
-       u16  value16;
-       u32 status = _SUCCESS;
-       int res;
-       struct hal_data_8188e *haldata = &Adapter->haldata;
-       struct pwrctrl_priv             *pwrctrlpriv = &Adapter->pwrctrlpriv;
-       struct registry_priv    *pregistrypriv = &Adapter->registrypriv;
-       u32 reg;
-
-       if (Adapter->pwrctrlpriv.bkeepfwalive) {
-               if (haldata->odmpriv.RFCalibrateInfo.bIQKInitialized) {
-                       PHY_IQCalibrate_8188E(Adapter, true);
-               } else {
-                       PHY_IQCalibrate_8188E(Adapter, false);
-                       haldata->odmpriv.RFCalibrateInfo.bIQKInitialized = true;
-               }
-
-               ODM_TXPowerTrackingCheck(&haldata->odmpriv);
-               PHY_LCCalibrate_8188E(Adapter);
-
-               goto exit;
-       }
-
-       status = rtl8188eu_InitPowerOn(Adapter);
-       if (status == _FAIL)
-               goto exit;
-
-       /*  Save target channel */
-       haldata->CurrentChannel = 6;/* default set to 6 */
-
-       /*  2010/08/09 MH We need to check if we need to turnon or off RF after detecting */
-       /*  HW GPIO pin. Before PHY_RFConfig8192C. */
-       /*  2010/08/26 MH If Efuse does not support sective suspend then disable the function. */
-
-       _InitQueueReservedPage(Adapter);
-       _InitQueuePriority(Adapter);
-       _InitPageBoundary(Adapter);
-       _InitTransferPageSize(Adapter);
-
-       _InitTxBufferBoundary(Adapter, 0);
-
-       status = rtl8188e_firmware_download(Adapter);
-
-       if (status != _SUCCESS) {
-               Adapter->bFWReady = false;
-               haldata->fw_ractrl = false;
-               return status;
-       } else {
-               Adapter->bFWReady = true;
-               haldata->fw_ractrl = false;
-       }
-       /* Initialize firmware vars */
-       Adapter->pwrctrlpriv.bFwCurrentInPSMode = false;
-       haldata->LastHMEBoxNum = 0;
-
-       if (PHY_MACConfig8188E(Adapter))
-               return _FAIL;
-
-       /*  */
-       /* d. Initialize BB related configurations. */
-       /*  */
-       if (PHY_BBConfig8188E(Adapter))
-               return _FAIL;
-
-       if (phy_RF6052_Config_ParaFile(Adapter))
-               return _FAIL;
-
-       status = rtl8188e_iol_efuse_patch(Adapter);
-       if (status == _FAIL)
-               goto exit;
-
-       _InitTxBufferBoundary(Adapter, TX_PAGE_BOUNDARY_88E);
-
-       status =  InitLLTTable(Adapter, TX_PAGE_BOUNDARY_88E);
-       if (status == _FAIL)
-               goto exit;
-
-       /*  Get Rx PHY status in order to report RSSI and others. */
-       _InitDriverInfoSize(Adapter, DRVINFO_SZ);
-
-       _InitInterrupt(Adapter);
-       hw_var_set_macaddr(Adapter, Adapter->eeprompriv.mac_addr);
-       _InitNetworkType(Adapter);/* set msr */
-       _InitWMACSetting(Adapter);
-       _InitAdaptiveCtrl(Adapter);
-       _InitEDCA(Adapter);
-       _InitRetryFunction(Adapter);
-       InitUsbAggregationSetting(Adapter);
-       _InitBeaconParameters(Adapter);
-
-       /*  */
-       /*  Init CR MACTXEN, MACRXEN after setting RxFF boundary REG_TRXFF_BNDY to patch */
-       /*  Hw bug which Hw initials RxFF boundary size to a value which is larger than the real Rx buffer size in 88E. */
-       /*  */
-       /*  Enable MACTXEN/MACRXEN block */
-       res = rtw_read16(Adapter, REG_CR, &value16);
-       if (res)
-               return _FAIL;
-
-       value16 |= (MACTXEN | MACRXEN);
-       rtw_write8(Adapter, REG_CR, value16);
-
-       /* Enable TX Report */
-       /* Enable Tx Report Timer */
-       res = rtw_read8(Adapter, REG_TX_RPT_CTRL, &value8);
-       if (res)
-               return _FAIL;
-
-       rtw_write8(Adapter,  REG_TX_RPT_CTRL, (value8 | BIT(1) | BIT(0)));
-       /* Set MAX RPT MACID */
-       rtw_write8(Adapter,  REG_TX_RPT_CTRL + 1, 2);/* FOR sta mode ,0: bc/mc ,1:AP */
-       /* Tx RPT Timer. Unit: 32us */
-       rtw_write16(Adapter, REG_TX_RPT_TIME, 0xCdf0);
-
-       rtw_write8(Adapter, REG_EARLY_MODE_CONTROL, 0);
-
-       rtw_write16(Adapter, REG_PKT_VO_VI_LIFE_TIME, 0x0400);  /*  unit: 256us. 256ms */
-       rtw_write16(Adapter, REG_PKT_BE_BK_LIFE_TIME, 0x0400);  /*  unit: 256us. 256ms */
-
-       /* Keep RfRegChnlVal for later use. */
-       haldata->RfRegChnlVal = rtl8188e_PHY_QueryRFReg(Adapter, RF_CHNLBW, bRFRegOffsetMask);
-
-       _BBTurnOnBlock(Adapter);
-
-       invalidate_cam_all(Adapter);
-
-       /*  2010/12/17 MH We need to set TX power according to EFUSE content at first. */
-       PHY_SetTxPowerLevel8188E(Adapter, haldata->CurrentChannel);
-
-/*  Move by Neo for USB SS to below setp */
-/* _RfPowerSave(Adapter); */
-
-       _InitAntenna_Selection(Adapter);
-
-       /*  */
-       /*  Disable BAR, suggested by Scott */
-       /*  2010.04.09 add by hpfan */
-       /*  */
-       rtw_write32(Adapter, REG_BAR_MODE_CTRL, 0x0201ffff);
-
-       /*  HW SEQ CTRL */
-       /* set 0x0 to 0xFF by tynli. Default enable HW SEQ NUM. */
-       rtw_write8(Adapter, REG_HWSEQ_CTRL, 0xFF);
-
-       if (pregistrypriv->wifi_spec)
-               rtw_write16(Adapter, REG_FAST_EDCA_CTRL, 0);
-
-       /* Nav limit , suggest by scott */
-       rtw_write8(Adapter, 0x652, 0x0);
-
-       rtl8188e_InitHalDm(Adapter);
-
-       /*  2010/08/11 MH Merge from 8192SE for Minicard init. We need to confirm current radio status */
-       /*  and then decide to enable RF or not.!!!??? For Selective suspend mode. We may not */
-       /*  call initstruct adapter. May cause some problem?? */
-       /*  Fix the bug that Hw/Sw radio off before S3/S4, the RF off action will not be executed */
-       /*  in MgntActSet_RF_State() after wake up, because the value of haldata->eRFPowerState */
-       /*  is the same as eRfOff, we should change it to eRfOn after we config RF parameters. */
-       /*  Added by tynli. 2010.03.30. */
-       pwrctrlpriv->rf_pwrstate = rf_on;
-
-       /*  enable Tx report. */
-       rtw_write8(Adapter,  REG_FWHW_TXQ_CTRL + 1, 0x0F);
-
-       /*  Suggested by SD1 pisa. Added by tynli. 2011.10.21. */
-       rtw_write8(Adapter, REG_EARLY_MODE_CONTROL + 3, 0x01);/* Pretx_en, for WEP/TKIP SEC */
-
-       /* tynli_test_tx_report. */
-       rtw_write16(Adapter, REG_TX_RPT_TIME, 0x3DF0);
-
-       /* enable tx DMA to drop the redundate data of packet */
-       res = rtw_read16(Adapter, REG_TXDMA_OFFSET_CHK, &value16);
-       if (res)
-               return _FAIL;
-
-       rtw_write16(Adapter, REG_TXDMA_OFFSET_CHK, (value16 | DROP_DATA_EN));
-
-       /*  2010/08/26 MH Merge from 8192CE. */
-       if (pwrctrlpriv->rf_pwrstate == rf_on) {
-               if (haldata->odmpriv.RFCalibrateInfo.bIQKInitialized) {
-                       PHY_IQCalibrate_8188E(Adapter, true);
-               } else {
-                       PHY_IQCalibrate_8188E(Adapter, false);
-                       haldata->odmpriv.RFCalibrateInfo.bIQKInitialized = true;
-               }
-
-               ODM_TXPowerTrackingCheck(&haldata->odmpriv);
-
-               PHY_LCCalibrate_8188E(Adapter);
-       }
-
-/*     _InitPABias(Adapter); */
-       rtw_write8(Adapter, REG_USB_HRPWM, 0);
-
-       /* ack for xmit mgmt frames. */
-       res = rtw_read32(Adapter, REG_FWHW_TXQ_CTRL, &reg);
-       if (res)
-               return _FAIL;
-
-       rtw_write32(Adapter, REG_FWHW_TXQ_CTRL, reg | BIT(12));
-
-exit:
-       return status;
-}
-
-static void CardDisableRTL8188EU(struct adapter *Adapter)
-{
-       u8 val8;
-       struct hal_data_8188e *haldata = &Adapter->haldata;
-       int res;
-
-       /* Stop Tx Report Timer. 0x4EC[Bit1]=b'0 */
-       res = rtw_read8(Adapter, REG_TX_RPT_CTRL, &val8);
-       if (res)
-               return;
-
-       rtw_write8(Adapter, REG_TX_RPT_CTRL, val8 & (~BIT(1)));
-
-       /*  stop rx */
-       rtw_write8(Adapter, REG_CR, 0x0);
-
-       /*  Run LPS WL RFOFF flow */
-       HalPwrSeqCmdParsing(Adapter, LPS_ENTER_FLOW);
-
-       /*  2. 0x1F[7:0] = 0            turn off RF */
-
-       res = rtw_read8(Adapter, REG_MCUFWDL, &val8);
-       if (res)
-               return;
-
-       if ((val8 & RAM_DL_SEL) && Adapter->bFWReady) { /* 8051 RAM code */
-               /*  Reset MCU 0x2[10]=0. */
-               res = rtw_read8(Adapter, REG_SYS_FUNC_EN + 1, &val8);
-               if (res)
-                       return;
-
-               val8 &= ~BIT(2);        /*  0x2[10], FEN_CPUEN */
-               rtw_write8(Adapter, REG_SYS_FUNC_EN + 1, val8);
-       }
-
-       /*  reset MCU ready status */
-       rtw_write8(Adapter, REG_MCUFWDL, 0);
-
-       /* YJ,add,111212 */
-       /* Disable 32k */
-       res = rtw_read8(Adapter, REG_32K_CTRL, &val8);
-       if (res)
-               return;
-
-       rtw_write8(Adapter, REG_32K_CTRL, val8 & (~BIT(0)));
-
-       /*  Card disable power action flow */
-       HalPwrSeqCmdParsing(Adapter, DISABLE_FLOW);
-
-       /*  Reset MCU IO Wrapper */
-       res = rtw_read8(Adapter, REG_RSV_CTRL + 1, &val8);
-       if (res)
-               return;
-
-       rtw_write8(Adapter, REG_RSV_CTRL + 1, (val8 & (~BIT(3))));
-
-       res = rtw_read8(Adapter, REG_RSV_CTRL + 1, &val8);
-       if (res)
-               return;
-
-       rtw_write8(Adapter, REG_RSV_CTRL + 1, val8 | BIT(3));
-
-       /* YJ,test add, 111207. For Power Consumption. */
-       res = rtw_read8(Adapter, GPIO_IN, &val8);
-       if (res)
-               return;
-
-       rtw_write8(Adapter, GPIO_OUT, val8);
-       rtw_write8(Adapter, GPIO_IO_SEL, 0xFF);/* Reg0x46 */
-
-       res = rtw_read8(Adapter, REG_GPIO_IO_SEL, &val8);
-       if (res)
-               return;
-
-       rtw_write8(Adapter, REG_GPIO_IO_SEL, (val8 << 4));
-       res = rtw_read8(Adapter, REG_GPIO_IO_SEL + 1, &val8);
-       if (res)
-               return;
-
-       rtw_write8(Adapter, REG_GPIO_IO_SEL + 1, val8 | 0x0F);/* Reg0x43 */
-       rtw_write32(Adapter, REG_BB_PAD_CTRL, 0x00080808);/* set LNA ,TRSW,EX_PA Pin to output mode */
-       haldata->bMacPwrCtrlOn = false;
-       Adapter->bFWReady = false;
-}
-
-u32 rtl8188eu_hal_deinit(struct adapter *Adapter)
-{
-       rtw_write32(Adapter, REG_HIMR_88E, IMR_DISABLED_88E);
-       rtw_write32(Adapter, REG_HIMRE_88E, IMR_DISABLED_88E);
-
-       if (!Adapter->pwrctrlpriv.bkeepfwalive) {
-               if (Adapter->hw_init_completed) {
-                       CardDisableRTL8188EU(Adapter);
-               }
-       }
-       return _SUCCESS;
- }
-
-int rtl8188eu_inirp_init(struct adapter *Adapter)
-{
-       u8 i;
-       struct recv_buf *precvbuf;
-       struct recv_priv *precvpriv = &Adapter->recvpriv;
-       int ret;
-
-       /* issue Rx irp to receive data */
-       precvbuf = (struct recv_buf *)precvpriv->precv_buf;
-       for (i = 0; i < NR_RECVBUFF; i++) {
-               ret = rtw_read_port(Adapter, precvbuf);
-               if (ret)
-                       return ret;
-
-               precvbuf++;
-               precvpriv->free_recv_buf_queue_cnt--;
-       }
-
-       return 0;
-}
-
-/*  */
-/*  */
-/*     EEPROM/EFUSE Content Parsing */
-/*  */
-/*  */
-
-static void Hal_EfuseParseMACAddr_8188EU(struct adapter *adapt, u8 *hwinfo, bool AutoLoadFail)
-{
-       struct eeprom_priv *eeprom = &adapt->eeprompriv;
-
-       if (AutoLoadFail) {
-               eth_random_addr(eeprom->mac_addr);
-       } else {
-               /* Read Permanent MAC address */
-               memcpy(eeprom->mac_addr, &hwinfo[EEPROM_MAC_ADDR_88EU], ETH_ALEN);
-       }
-}
-
-int ReadAdapterInfo8188EU(struct adapter *Adapter)
-{
-       struct eeprom_priv *eeprom = &Adapter->eeprompriv;
-       struct led_priv *ledpriv = &Adapter->ledpriv;
-       u8 *efuse_buf;
-       u8 eeValue;
-       int res;
-
-       /* check system boot selection */
-       res = rtw_read8(Adapter, REG_9346CR, &eeValue);
-       if (res)
-               return res;
-
-       eeprom->bautoload_fail_flag     = !(eeValue & EEPROM_EN);
-
-       efuse_buf = kmalloc(EFUSE_MAP_LEN_88E, GFP_KERNEL);
-       if (!efuse_buf)
-               return -ENOMEM;
-       memset(efuse_buf, 0xFF, EFUSE_MAP_LEN_88E);
-
-       if (!(eeValue & BOOT_FROM_EEPROM) && !eeprom->bautoload_fail_flag) {
-               rtl8188e_EfusePowerSwitch(Adapter, true);
-               rtl8188e_ReadEFuse(Adapter, EFUSE_MAP_LEN_88E, efuse_buf);
-               rtl8188e_EfusePowerSwitch(Adapter, false);
-       }
-
-       /* parse the eeprom/efuse content */
-       Hal_EfuseParseIDCode88E(Adapter, efuse_buf);
-       Hal_EfuseParseMACAddr_8188EU(Adapter, efuse_buf, eeprom->bautoload_fail_flag);
-
-       Hal_ReadPowerSavingMode88E(Adapter, efuse_buf, eeprom->bautoload_fail_flag);
-       Hal_ReadTxPowerInfo88E(Adapter, efuse_buf, eeprom->bautoload_fail_flag);
-       rtl8188e_EfuseParseChnlPlan(Adapter, efuse_buf, eeprom->bautoload_fail_flag);
-       Hal_EfuseParseXtal_8188E(Adapter, efuse_buf, eeprom->bautoload_fail_flag);
-       Hal_ReadAntennaDiversity88E(Adapter, efuse_buf, eeprom->bautoload_fail_flag);
-       Hal_ReadThermalMeter_88E(Adapter, efuse_buf, eeprom->bautoload_fail_flag);
-
-       ledpriv->bRegUseLed = true;
-       kfree(efuse_buf);
-       return 0;
-}
-
-void UpdateHalRAMask8188EUsb(struct adapter *adapt, u32 mac_id, u8 rssi_level)
-{
-       u8 init_rate = 0;
-       u8 networkType, raid;
-       u32 mask, rate_bitmap;
-       u8 shortGIrate = false;
-       int     supportRateNum = 0;
-       struct sta_info *psta;
-       struct hal_data_8188e *haldata = &adapt->haldata;
-       struct mlme_ext_priv    *pmlmeext = &adapt->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex    *cur_network = &pmlmeinfo->network;
-
-       if (mac_id >= NUM_STA) /* CAM_SIZE */
-               return;
-       psta = pmlmeinfo->FW_sta_info[mac_id].psta;
-       if (!psta)
-               return;
-       switch (mac_id) {
-       case 0:/*  for infra mode */
-               supportRateNum = rtw_get_rateset_len(cur_network->SupportedRates);
-               networkType = judge_network_type(adapt, cur_network->SupportedRates, supportRateNum) & 0xf;
-               raid = networktype_to_raid(networkType);
-               mask = update_supported_rate(cur_network->SupportedRates, supportRateNum);
-               mask |= (pmlmeinfo->HT_enable) ? update_MSC_rate(&pmlmeinfo->HT_caps) : 0;
-               if (support_short_GI(adapt, &pmlmeinfo->HT_caps))
-                       shortGIrate = true;
-               break;
-       case 1:/* for broadcast/multicast */
-               supportRateNum = rtw_get_rateset_len(pmlmeinfo->FW_sta_info[mac_id].SupportedRates);
-               if (pmlmeext->cur_wireless_mode & WIRELESS_11B)
-                       networkType = WIRELESS_11B;
-               else
-                       networkType = WIRELESS_11G;
-               raid = networktype_to_raid(networkType);
-               mask = update_basic_rate(cur_network->SupportedRates, supportRateNum);
-               break;
-       default: /* for each sta in IBSS */
-               supportRateNum = rtw_get_rateset_len(pmlmeinfo->FW_sta_info[mac_id].SupportedRates);
-               networkType = judge_network_type(adapt, pmlmeinfo->FW_sta_info[mac_id].SupportedRates, supportRateNum) & 0xf;
-               raid = networktype_to_raid(networkType);
-               mask = update_supported_rate(cur_network->SupportedRates, supportRateNum);
-
-               /* todo: support HT in IBSS */
-               break;
-       }
-
-       rate_bitmap = 0x0fffffff;
-       rate_bitmap = ODM_Get_Rate_Bitmap(&haldata->odmpriv, mac_id, mask, rssi_level);
-
-       mask &= rate_bitmap;
-
-       init_rate = get_highest_rate_idx(mask) & 0x3f;
-
-       if (haldata->fw_ractrl) {
-               mask |= ((raid << 28) & 0xf0000000);
-               psta->ra_mask = mask;
-               mask |= ((raid << 28) & 0xf0000000);
-
-               /* to do ,for 8188E-SMIC */
-               rtl8188e_set_raid_cmd(adapt, mask);
-       } else {
-               ODM_RA_UpdateRateInfo_8188E(&haldata->odmpriv,
-                               mac_id,
-                               raid,
-                               mask,
-                               shortGIrate
-                               );
-       }
-       /* set ra_id */
-       psta->raid = raid;
-       psta->init_rate = init_rate;
-}
-
-void SetBeaconRelatedRegisters8188EUsb(struct adapter *adapt)
-{
-       u32 value32;
-       struct mlme_ext_priv    *pmlmeext = &adapt->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       u32 bcn_ctrl_reg                        = REG_BCN_CTRL;
-       int res;
-       u8 reg;
-       /* reset TSF, enable update TSF, correcting TSF On Beacon */
-
-       /* BCN interval */
-       rtw_write16(adapt, REG_BCN_INTERVAL, pmlmeinfo->bcn_interval);
-       rtw_write8(adapt, REG_ATIMWND, 0x02);/*  2ms */
-
-       _InitBeaconParameters(adapt);
-
-       rtw_write8(adapt, REG_SLOT, 0x09);
-
-       res = rtw_read32(adapt, REG_TCR, &value32);
-       if (res)
-               return;
-
-       value32 &= ~TSFRST;
-       rtw_write32(adapt,  REG_TCR, value32);
-
-       value32 |= TSFRST;
-       rtw_write32(adapt, REG_TCR, value32);
-
-       /*  NOTE: Fix test chip's bug (about contention windows's randomness) */
-       rtw_write8(adapt,  REG_RXTSF_OFFSET_CCK, 0x50);
-       rtw_write8(adapt, REG_RXTSF_OFFSET_OFDM, 0x50);
-
-       _BeaconFunctionEnable(adapt);
-
-       rtw_resume_tx_beacon(adapt);
-
-       res = rtw_read8(adapt, bcn_ctrl_reg, &reg);
-       if (res)
-               return;
-
-       rtw_write8(adapt, bcn_ctrl_reg, reg | BIT(1));
-}
-
-void rtl8188eu_init_default_value(struct adapter *adapt)
-{
-       struct hal_data_8188e *haldata = &adapt->haldata;
-       struct pwrctrl_priv *pwrctrlpriv;
-       u8 i;
-
-       pwrctrlpriv = &adapt->pwrctrlpriv;
-
-       /* init default value */
-       haldata->fw_ractrl = false;
-       if (!pwrctrlpriv->bkeepfwalive)
-               haldata->LastHMEBoxNum = 0;
-
-       /* init dm default value */
-       haldata->odmpriv.RFCalibrateInfo.bIQKInitialized = false;
-       haldata->odmpriv.RFCalibrateInfo.TM_Trigger = 0;/* for IQK */
-       haldata->pwrGroupCnt = 0;
-       haldata->odmpriv.RFCalibrateInfo.ThermalValue_HP_index = 0;
-       for (i = 0; i < HP_THERMAL_NUM; i++)
-               haldata->odmpriv.RFCalibrateInfo.ThermalValue_HP[i] = 0;
-}
diff --git a/drivers/staging/r8188eu/hal/usb_ops_linux.c b/drivers/staging/r8188eu/hal/usb_ops_linux.c
deleted file mode 100644 (file)
index 9611b19..0000000
+++ /dev/null
@@ -1,476 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/osdep_intf.h"
-#include "../include/usb_ops.h"
-#include "../include/rtl8188e_hal.h"
-
-#define VENDOR_CMD_MAX_DATA_LEN        254
-
-#define RTW_USB_CONTROL_MSG_TIMEOUT    500/* ms */
-
-static int usb_read(struct adapter *adapt, u16 value, void *data, u8 size)
-{
-       struct dvobj_priv *dvobjpriv = adapter_to_dvobj(adapt);
-       struct usb_device *udev = dvobjpriv->pusbdev;
-       int status;
-       u8 io_buf[4];
-
-       if (adapt->bSurpriseRemoved)
-               return -EPERM;
-
-       status = usb_control_msg_recv(udev, 0, REALTEK_USB_VENQT_CMD_REQ,
-                                     REALTEK_USB_VENQT_READ, value,
-                                     REALTEK_USB_VENQT_CMD_IDX, io_buf,
-                                     size, RTW_USB_CONTROL_MSG_TIMEOUT,
-                                     GFP_KERNEL);
-
-       if (status == -ESHUTDOWN ||
-           status == -ENODEV ||
-           status == -ENOENT) {
-               /*
-                * device or controller has been disabled due to
-                * some problem that could not be worked around,
-                * device or bus doesn’t exist, endpoint does not
-                * exist or is not enabled.
-                */
-               adapt->bSurpriseRemoved = true;
-               return status;
-       }
-
-       if (status < 0) {
-               if (rtw_inc_and_chk_continual_urb_error(dvobjpriv))
-                       adapt->bSurpriseRemoved = true;
-
-               return status;
-       }
-
-       rtw_reset_continual_urb_error(dvobjpriv);
-       memcpy(data, io_buf, size);
-
-       return status;
-}
-
-static int usb_write(struct adapter *adapt, u16 value, void *data, u8 size)
-{
-       struct dvobj_priv *dvobjpriv = adapter_to_dvobj(adapt);
-       struct usb_device *udev = dvobjpriv->pusbdev;
-       int status;
-       u8 io_buf[VENDOR_CMD_MAX_DATA_LEN];
-
-       if (adapt->bSurpriseRemoved)
-               return -EPERM;
-
-       memcpy(io_buf, data, size);
-       status = usb_control_msg_send(udev, 0, REALTEK_USB_VENQT_CMD_REQ,
-                                     REALTEK_USB_VENQT_WRITE, value,
-                                     REALTEK_USB_VENQT_CMD_IDX, io_buf,
-                                     size, RTW_USB_CONTROL_MSG_TIMEOUT,
-                                     GFP_KERNEL);
-
-       if (status == -ESHUTDOWN ||
-           status == -ENODEV ||
-           status == -ENOENT) {
-               /*
-                * device or controller has been disabled due to
-                * some problem that could not be worked around,
-                * device or bus doesn’t exist, endpoint does not
-                * exist or is not enabled.
-                */
-               adapt->bSurpriseRemoved = true;
-               return status;
-       }
-
-       if (status < 0) {
-               if (rtw_inc_and_chk_continual_urb_error(dvobjpriv))
-                       adapt->bSurpriseRemoved = true;
-
-               return status;
-       }
-
-       rtw_reset_continual_urb_error(dvobjpriv);
-
-       return status;
-}
-
-int __must_check rtw_read8(struct adapter *adapter, u32 addr, u8 *data)
-{
-       u16 value = addr & 0xffff;
-
-       return usb_read(adapter, value, data, 1);
-}
-
-int __must_check rtw_read16(struct adapter *adapter, u32 addr, u16 *data)
-{
-       u16 value = addr & 0xffff;
-       __le16 le_data;
-       int res;
-
-       res = usb_read(adapter, value, &le_data, 2);
-       if (res)
-               return res;
-
-       *data = le16_to_cpu(le_data);
-
-       return 0;
-}
-
-int __must_check rtw_read32(struct adapter *adapter, u32 addr, u32 *data)
-{
-       u16 value = addr & 0xffff;
-       __le32 le_data;
-       int res;
-
-       res = usb_read(adapter, value, &le_data, 4);
-       if (res)
-               return res;
-
-       *data = le32_to_cpu(le_data);
-
-       return 0;
-}
-
-int rtw_write8(struct adapter *adapter, u32 addr, u8 val)
-{
-       u16 value = addr & 0xffff;
-       int ret;
-
-       ret = usb_write(adapter, value, &val, 1);
-
-       return RTW_STATUS_CODE(ret);
-}
-
-int rtw_write16(struct adapter *adapter, u32 addr, u16 val)
-{
-       u16 value = addr & 0xffff;
-       __le16 data = cpu_to_le16(val);
-       int ret;
-
-       ret = usb_write(adapter, value, &data, 2);
-
-       return RTW_STATUS_CODE(ret);
-}
-
-int rtw_write32(struct adapter *adapter, u32 addr, u32 val)
-{
-       u16 value = addr & 0xffff;
-       __le32 data = cpu_to_le32(val);
-       int ret;
-
-       ret = usb_write(adapter, value, &data, 4);
-
-       return RTW_STATUS_CODE(ret);
-}
-
-int rtw_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *data)
-{
-       u16 value = addr & 0xffff;
-
-       if (length > VENDOR_CMD_MAX_DATA_LEN)
-               return -EINVAL;
-
-       return usb_write(adapter, value, data, length);
-}
-
-static void handle_txrpt_ccx_88e(struct adapter *adapter, u8 *buf)
-{
-       struct txrpt_ccx_88e *txrpt_ccx = (struct txrpt_ccx_88e *)buf;
-
-       if (txrpt_ccx->int_ccx) {
-               if (txrpt_ccx->pkt_ok)
-                       rtw_ack_tx_done(&adapter->xmitpriv,
-                                       RTW_SCTX_DONE_SUCCESS);
-               else
-                       rtw_ack_tx_done(&adapter->xmitpriv,
-                                       RTW_SCTX_DONE_CCX_PKT_FAIL);
-       }
-}
-
-static int recvbuf2recvframe(struct adapter *adapt, struct sk_buff *pskb)
-{
-       u8      *pbuf;
-       u8      shift_sz = 0;
-       u16     pkt_cnt;
-       u32     pkt_offset, skb_len, alloc_sz;
-       s32     transfer_len;
-       struct recv_stat        *prxstat;
-       struct phy_stat *pphy_status = NULL;
-       struct sk_buff *pkt_copy = NULL;
-       struct recv_frame       *precvframe = NULL;
-       struct rx_pkt_attrib    *pattrib = NULL;
-       struct hal_data_8188e *haldata = &adapt->haldata;
-       struct recv_priv        *precvpriv = &adapt->recvpriv;
-       struct __queue *pfree_recv_queue = &precvpriv->free_recv_queue;
-
-       transfer_len = (s32)pskb->len;
-       pbuf = pskb->data;
-
-       prxstat = (struct recv_stat *)pbuf;
-       pkt_cnt = (le32_to_cpu(prxstat->rxdw2) >> 16) & 0xff;
-
-       do {
-               prxstat = (struct recv_stat *)pbuf;
-
-               precvframe = rtw_alloc_recvframe(pfree_recv_queue);
-               if (!precvframe)
-                       goto _exit_recvbuf2recvframe;
-
-               INIT_LIST_HEAD(&precvframe->list);
-               precvframe->precvbuf = NULL;    /* can't access the precvbuf for new arch. */
-               precvframe->len = 0;
-
-               update_recvframe_attrib_88e(precvframe, prxstat);
-
-               pattrib = &precvframe->attrib;
-
-               if ((pattrib->crc_err) || (pattrib->icv_err)) {
-                       rtw_free_recvframe(precvframe, pfree_recv_queue);
-                       goto _exit_recvbuf2recvframe;
-               }
-
-               if ((pattrib->physt) && (pattrib->pkt_rpt_type == NORMAL_RX))
-                       pphy_status = (struct phy_stat *)(pbuf + RXDESC_OFFSET);
-
-               pkt_offset = RXDESC_SIZE + pattrib->drvinfo_sz + pattrib->shift_sz + pattrib->pkt_len;
-
-               if ((pattrib->pkt_len <= 0) || (pkt_offset > transfer_len)) {
-                       rtw_free_recvframe(precvframe, pfree_recv_queue);
-                       goto _exit_recvbuf2recvframe;
-               }
-
-               /*      Modified by Albert 20101213 */
-               /*      For 8 bytes IP header alignment. */
-               if (pattrib->qos)       /*      Qos data, wireless lan header length is 26 */
-                       shift_sz = 6;
-               else
-                       shift_sz = 0;
-
-               skb_len = pattrib->pkt_len;
-
-               /*  for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet. */
-               /*  modify alloc_sz for recvive crc error packet by thomas 2011-06-02 */
-               if ((pattrib->mfrag == 1) && (pattrib->frag_num == 0)) {
-                       if (skb_len <= 1650)
-                               alloc_sz = 1664;
-                       else
-                               alloc_sz = skb_len + 14;
-               } else {
-                       alloc_sz = skb_len;
-                       /*      6 is for IP header 8 bytes alignment in QoS packet case. */
-                       /*      8 is for skb->data 4 bytes alignment. */
-                       alloc_sz += 14;
-               }
-
-               pkt_copy = netdev_alloc_skb(adapt->pnetdev, alloc_sz);
-               if (pkt_copy) {
-                       precvframe->pkt = pkt_copy;
-                       precvframe->rx_head = pkt_copy->data;
-                       precvframe->rx_end = pkt_copy->data + alloc_sz;
-                       skb_reserve(pkt_copy, 8 - ((size_t)(pkt_copy->data) & 7));/* force pkt_copy->data at 8-byte alignment address */
-                       skb_reserve(pkt_copy, shift_sz);/* force ip_hdr at 8-byte alignment address according to shift_sz. */
-                       memcpy(pkt_copy->data, (pbuf + pattrib->drvinfo_sz + RXDESC_SIZE), skb_len);
-                       precvframe->rx_tail = pkt_copy->data;
-                       precvframe->rx_data = pkt_copy->data;
-               } else {
-                       if ((pattrib->mfrag == 1) && (pattrib->frag_num == 0)) {
-                               rtw_free_recvframe(precvframe, pfree_recv_queue);
-                               goto _exit_recvbuf2recvframe;
-                       }
-                       precvframe->pkt = skb_clone(pskb, GFP_ATOMIC);
-                       if (precvframe->pkt) {
-                               precvframe->rx_tail = pbuf + pattrib->drvinfo_sz + RXDESC_SIZE;
-                               precvframe->rx_head = precvframe->rx_tail;
-                               precvframe->rx_data = precvframe->rx_tail;
-                               precvframe->rx_end =  pbuf + pattrib->drvinfo_sz + RXDESC_SIZE + alloc_sz;
-                       } else {
-                               rtw_free_recvframe(precvframe, pfree_recv_queue);
-                               goto _exit_recvbuf2recvframe;
-                       }
-               }
-
-               recvframe_put(precvframe, skb_len);
-
-               pkt_offset = (u16)round_up(pkt_offset, 128);
-
-               if (pattrib->pkt_rpt_type == NORMAL_RX) { /* Normal rx packet */
-                       if (pattrib->physt)
-                               update_recvframe_phyinfo_88e(precvframe, (struct phy_stat *)pphy_status);
-                       rtw_recv_entry(precvframe);
-               } else {
-                       /* enqueue recvframe to txrtp queue */
-                       if (pattrib->pkt_rpt_type == TX_REPORT1) {
-                               /* CCX-TXRPT ack for xmit mgmt frames. */
-                               handle_txrpt_ccx_88e(adapt, precvframe->rx_data);
-                       } else if (pattrib->pkt_rpt_type == TX_REPORT2) {
-                               ODM_RA_TxRPT2Handle_8188E(
-                                                       &haldata->odmpriv,
-                                                       precvframe->rx_data,
-                                                       pattrib->pkt_len,
-                                                       pattrib->MacIDValidEntry[0],
-                                                       pattrib->MacIDValidEntry[1]
-                                                       );
-                       }
-                       rtw_free_recvframe(precvframe, pfree_recv_queue);
-               }
-               pkt_cnt--;
-               transfer_len -= pkt_offset;
-               pbuf += pkt_offset;
-               precvframe = NULL;
-               pkt_copy = NULL;
-
-               if (transfer_len > 0 && pkt_cnt == 0)
-                       pkt_cnt = (le32_to_cpu(prxstat->rxdw2) >> 16) & 0xff;
-
-       } while ((transfer_len > 0) && (pkt_cnt > 0));
-
-_exit_recvbuf2recvframe:
-
-       return _SUCCESS;
-}
-
-void rtl8188eu_recv_tasklet(unsigned long priv)
-{
-       struct sk_buff *pskb;
-       struct adapter *adapt = (struct adapter *)priv;
-       struct recv_priv *precvpriv = &adapt->recvpriv;
-
-       while (NULL != (pskb = skb_dequeue(&precvpriv->rx_skb_queue))) {
-               if ((adapt->bDriverStopped) || (adapt->bSurpriseRemoved)) {
-                       dev_kfree_skb_any(pskb);
-                       break;
-               }
-               recvbuf2recvframe(adapt, pskb);
-               skb_reset_tail_pointer(pskb);
-               pskb->len = 0;
-               skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
-       }
-}
-
-static void usb_read_port_complete(struct urb *purb)
-{
-       struct recv_buf *precvbuf = (struct recv_buf *)purb->context;
-       struct adapter  *adapt = (struct adapter *)precvbuf->adapter;
-       struct recv_priv *precvpriv = &adapt->recvpriv;
-
-       precvpriv->rx_pending_cnt--;
-
-       if (adapt->bSurpriseRemoved || adapt->bDriverStopped || adapt->bReadPortCancel) {
-               precvbuf->reuse = true;
-               return;
-       }
-
-       if (purb->status == 0) { /* SUCCESS */
-               if ((purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE)) {
-                       precvbuf->reuse = true;
-                       rtw_read_port(adapt, precvbuf);
-               } else {
-                       rtw_reset_continual_urb_error(adapter_to_dvobj(adapt));
-
-                       skb_put(precvbuf->pskb, purb->actual_length);
-                       skb_queue_tail(&precvpriv->rx_skb_queue, precvbuf->pskb);
-
-                       if (skb_queue_len(&precvpriv->rx_skb_queue) <= 1)
-                               tasklet_schedule(&precvpriv->recv_tasklet);
-
-                       precvbuf->pskb = NULL;
-                       precvbuf->reuse = false;
-                       rtw_read_port(adapt, precvbuf);
-               }
-       } else {
-               skb_put(precvbuf->pskb, purb->actual_length);
-               precvbuf->pskb = NULL;
-
-               if (rtw_inc_and_chk_continual_urb_error(adapter_to_dvobj(adapt)))
-                       adapt->bSurpriseRemoved = true;
-
-               switch (purb->status) {
-               case -EINVAL:
-               case -EPIPE:
-               case -ENODEV:
-               case -ESHUTDOWN:
-               case -ENOENT:
-                       adapt->bDriverStopped = true;
-                       break;
-               case -EPROTO:
-               case -EOVERFLOW:
-                       precvbuf->reuse = true;
-                       rtw_read_port(adapt, precvbuf);
-                       break;
-               case -EINPROGRESS:
-                       break;
-               default:
-                       break;
-               }
-       }
-}
-
-int rtw_read_port(struct adapter *adapter, struct recv_buf *precvbuf)
-{
-       struct urb *purb = NULL;
-       struct dvobj_priv       *pdvobj = adapter_to_dvobj(adapter);
-       struct recv_priv        *precvpriv = &adapter->recvpriv;
-       struct usb_device       *pusbd = pdvobj->pusbdev;
-       int err;
-       unsigned int pipe;
-       size_t tmpaddr = 0;
-       size_t alignment = 0;
-
-       if (adapter->bDriverStopped || adapter->bSurpriseRemoved)
-               return -EPERM;
-
-       if (!precvbuf)
-               return -ENOMEM;
-
-       if (!precvbuf->reuse || !precvbuf->pskb) {
-               precvbuf->pskb = skb_dequeue(&precvpriv->free_recv_skb_queue);
-               if (precvbuf->pskb)
-                       precvbuf->reuse = true;
-       }
-
-       /* re-assign for linux based on skb */
-       if (!precvbuf->reuse || !precvbuf->pskb) {
-               precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
-               if (!precvbuf->pskb)
-                       return -ENOMEM;
-
-               tmpaddr = (size_t)precvbuf->pskb->data;
-               alignment = tmpaddr & (RECVBUFF_ALIGN_SZ - 1);
-               skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment));
-       } else { /* reuse skb */
-               precvbuf->reuse = false;
-       }
-
-       precvpriv->rx_pending_cnt++;
-
-       purb = precvbuf->purb;
-
-       /* translate DMA FIFO addr to pipehandle */
-       pipe = usb_rcvbulkpipe(pusbd, pdvobj->RtInPipe);
-
-       usb_fill_bulk_urb(purb, pusbd, pipe,
-                         precvbuf->pskb->data,
-                         MAX_RECVBUF_SZ,
-                         usb_read_port_complete,
-                         precvbuf);/* context is precvbuf */
-
-       err = usb_submit_urb(purb, GFP_ATOMIC);
-       if ((err) && (err != (-EPERM)))
-               return err;
-
-       return 0;
-}
-
-void rtl8188eu_xmit_tasklet(unsigned long priv)
-{
-       struct adapter *adapt = (struct adapter *)priv;
-
-       if (check_fwstate(&adapt->mlmepriv, _FW_UNDER_SURVEY))
-               return;
-
-       do {
-               if (adapt->bDriverStopped || adapt->bSurpriseRemoved || adapt->bWritePortCancel)
-                       break;
-       } while (rtl8188eu_xmitframe_complete(adapt));
-}
diff --git a/drivers/staging/r8188eu/include/Hal8188EPhyCfg.h b/drivers/staging/r8188eu/include/Hal8188EPhyCfg.h
deleted file mode 100644 (file)
index 4a0b782..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __INC_HAL8188EPHYCFG_H__
-#define __INC_HAL8188EPHYCFG_H__
-
-#define MAX_AGGR_NUM                   0x07
-
-enum rf_radio_path {
-       RF_PATH_A = 0,                  /* Radio Path A */
-       RF_PATH_B = 1,                  /* Radio Path B */
-};
-
-#define MAX_PG_GROUP 13
-
-#define        RF_PATH_MAX                     3
-#define                MAX_TX_COUNT            4 /* path numbers */
-
-#define CHANNEL_MAX_NUMBER             14      /*  14 is the max chnl number */
-#define MAX_CHNL_GROUP_24G             6       /*  ch1~2, ch3~5, ch6~8,
-                                                *ch9~11, ch12~13, CH 14
-                                                * total three groups */
-
-struct bb_reg_def {
-       u32 rfintfs;            /*  set software control: */
-                               /*      0x870~0x877[8 bytes] */
-       u32 rfintfi;            /*  readback data: */
-                               /*      0x8e0~0x8e7[8 bytes] */
-       u32 rfintfo;            /*  output data: */
-                               /*      0x860~0x86f [16 bytes] */
-       u32 rfintfe;            /*  output enable: */
-                               /*      0x860~0x86f [16 bytes] */
-       u32 rf3wireOffset;      /*  LSSI data: */
-                               /*      0x840~0x84f [16 bytes] */
-       u32 rfLSSI_Select;      /*  BB Band Select: */
-                               /*      0x878~0x87f [8 bytes] */
-       u32 rfTxGainStage;      /*  Tx gain stage: */
-                               /*      0x80c~0x80f [4 bytes] */
-       u32 rfHSSIPara1;        /*  wire parameter control1 : */
-                               /*      0x820~0x823,0x828~0x82b,
-                                *      0x830~0x833, 0x838~0x83b [16 bytes] */
-       u32 rfHSSIPara2;        /*  wire parameter control2 : */
-                               /*      0x824~0x827,0x82c~0x82f, 0x834~0x837,
-                                *      0x83c~0x83f [16 bytes] */
-       u32 rfSwitchControl;    /* Tx Rx antenna control : */
-                               /*      0x858~0x85f [16 bytes] */
-       u32 rfAGCControl1;      /* AGC parameter control1 : */
-                               /*      0xc50~0xc53,0xc58~0xc5b, 0xc60~0xc63,
-                                * 0xc68~0xc6b [16 bytes] */
-       u32 rfAGCControl2;      /* AGC parameter control2 : */
-                               /*      0xc54~0xc57,0xc5c~0xc5f, 0xc64~0xc67,
-                                *      0xc6c~0xc6f [16 bytes] */
-       u32 rfRxIQImbalance;    /* OFDM Rx IQ imbalance matrix : */
-                               /*      0xc14~0xc17,0xc1c~0xc1f, 0xc24~0xc27,
-                                *      0xc2c~0xc2f [16 bytes] */
-       u32 rfRxAFE;            /* Rx IQ DC ofset and Rx digital filter,
-                                * Rx DC notch filter : */
-                               /*      0xc10~0xc13,0xc18~0xc1b, 0xc20~0xc23,
-                                *      0xc28~0xc2b [16 bytes] */
-       u32 rfTxIQImbalance;    /* OFDM Tx IQ imbalance matrix */
-                               /*      0xc80~0xc83,0xc88~0xc8b, 0xc90~0xc93,
-                                *       0xc98~0xc9b [16 bytes] */
-       u32 rfTxAFE;            /* Tx IQ DC Offset and Tx DFIR type */
-                               /*      0xc84~0xc87,0xc8c~0xc8f, 0xc94~0xc97,
-                                *      0xc9c~0xc9f [16 bytes] */
-       u32 rfLSSIReadBack;     /* LSSI RF readback data SI mode */
-                               /*      0x8a0~0x8af [16 bytes] */
-       u32 rfLSSIReadBackPi;   /* LSSI RF readback data PI mode 0x8b8-8bc for
-                                * Path A and B */
-};
-
-/*  BB and RF register read/write */
-u32 rtl8188e_PHY_QueryBBReg(struct adapter *adapter, u32 regaddr, u32 mask);
-void rtl8188e_PHY_SetBBReg(struct adapter *Adapter, u32 RegAddr,
-                          u32 mask, u32 data);
-u32 rtl8188e_PHY_QueryRFReg(struct adapter *adapter, u32 regaddr, u32 mask);
-void rtl8188e_PHY_SetRFReg(struct adapter *adapter, u32 regaddr, u32 mask, u32 data);
-
-/*  Initialization related function */
-/* MAC/BB/RF HAL config */
-int PHY_MACConfig8188E(struct adapter *adapter);
-int PHY_BBConfig8188E(struct adapter *adapter);
-
-/*  BB TX Power R/W */
-void PHY_SetTxPowerLevel8188E(struct adapter *adapter, u8 channel);
-
-/*  Switch bandwidth for 8192S */
-void PHY_SetBWMode8188E(struct adapter *adapter,
-                       enum ht_channel_width chnlwidth, unsigned char offset);
-
-/*  channel switch related funciton */
-void PHY_SwChnl8188E(struct adapter *adapter, u8 channel);
-
-void storePwrIndexDiffRateOffset(struct adapter *adapter, u32 regaddr,
-                                u32 mask, u32 data);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/Hal8188EPhyReg.h b/drivers/staging/r8188eu/include/Hal8188EPhyReg.h
deleted file mode 100644 (file)
index da2329b..0000000
+++ /dev/null
@@ -1,1072 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __INC_HAL8188EPHYREG_H__
-#define __INC_HAL8188EPHYREG_H__
-/*--------------------------Define Parameters-------------------------------*/
-/*  */
-/*  BB-PHY register PMAC 0x100 PHY 0x800 - 0xEFF */
-/*  1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF */
-/*  2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00 */
-/*  3. RF register 0x00-2E */
-/*  4. Bit Mask for BB/RF register */
-/*  5. Other definition for BB/RF R/W */
-/*  */
-
-/*  */
-/*  1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF */
-/*  1. Page1(0x100) */
-/*  */
-#define        rPMAC_Reset             0x100
-#define        rPMAC_TxStart           0x104
-#define        rPMAC_TxLegacySIG       0x108
-#define        rPMAC_TxHTSIG1          0x10c
-#define        rPMAC_TxHTSIG2          0x110
-#define        rPMAC_PHYDebug          0x114
-#define        rPMAC_TxPacketNum       0x118
-#define        rPMAC_TxIdle            0x11c
-#define        rPMAC_TxMACHeader0      0x120
-#define        rPMAC_TxMACHeader1      0x124
-#define        rPMAC_TxMACHeader2      0x128
-#define        rPMAC_TxMACHeader3      0x12c
-#define        rPMAC_TxMACHeader4      0x130
-#define        rPMAC_TxMACHeader5      0x134
-#define        rPMAC_TxDataType        0x138
-#define        rPMAC_TxRandomSeed      0x13c
-#define        rPMAC_CCKPLCPPreamble   0x140
-#define        rPMAC_CCKPLCPHeader     0x144
-#define        rPMAC_CCKCRC16          0x148
-#define        rPMAC_OFDMRxCRC32OK     0x170
-#define        rPMAC_OFDMRxCRC32Er     0x174
-#define        rPMAC_OFDMRxParityEr    0x178
-#define        rPMAC_OFDMRxCRC8Er      0x17c
-#define        rPMAC_CCKCRxRC16Er      0x180
-#define        rPMAC_CCKCRxRC32Er      0x184
-#define        rPMAC_CCKCRxRC32OK      0x188
-#define        rPMAC_TxStatus          0x18c
-
-/*  2. Page2(0x200) */
-/*  The following two definition are only used for USB interface. */
-#define        RF_BB_CMD_ADDR          0x02c0  /*  RF/BB r/w cmd address. */
-#define        RF_BB_CMD_DATA          0x02c4  /*  RF/BB r/w cmd data. */
-
-/*  3. Page8(0x800) */
-#define        rFPGA0_RFMOD            0x800   /* RF mode & CCK TxSC RF BW Setting */
-
-#define        rFPGA0_TxInfo           0x804   /*  Status report?? */
-#define        rFPGA0_PSDFunction      0x808
-
-#define        rFPGA0_TxGainStage      0x80c   /*  Set TX PWR init gain? */
-
-#define        rFPGA0_RFTiming1        0x810   /*  Useless now */
-#define        rFPGA0_RFTiming2        0x814
-
-#define        rFPGA0_XA_HSSIParameter1        0x820   /*  RF 3 wire register */
-#define        rFPGA0_XA_HSSIParameter2        0x824
-#define        rFPGA0_XB_HSSIParameter1        0x828
-#define        rFPGA0_XB_HSSIParameter2        0x82c
-
-#define        rFPGA0_XA_LSSIParameter         0x840
-#define        rFPGA0_XB_LSSIParameter         0x844
-
-#define        rFPGA0_RFWakeUpParameter        0x850   /*  Useless now */
-#define        rFPGA0_RFSleepUpParameter       0x854
-
-#define        rFPGA0_XAB_SwitchControl        0x858   /*  RF Channel switch */
-#define        rFPGA0_XCD_SwitchControl        0x85c
-
-#define        rFPGA0_XA_RFInterfaceOE         0x860   /*  RF Channel switch */
-#define        rFPGA0_XB_RFInterfaceOE         0x864
-
-#define        rFPGA0_XAB_RFInterfaceSW        0x870   /*  RF Iface Software Control */
-#define        rFPGA0_XCD_RFInterfaceSW        0x874
-
-#define        rFPGA0_XAB_RFParameter          0x878   /*  RF Parameter */
-#define        rFPGA0_XCD_RFParameter          0x87c
-
-/* Crystal cap setting RF-R/W protection for parameter4?? */
-#define        rFPGA0_AnalogParameter1         0x880
-#define        rFPGA0_AnalogParameter2         0x884
-#define        rFPGA0_AnalogParameter3         0x888
-/*  enable ad/da clock1 for dual-phy */
-#define        rFPGA0_AdDaClockEn              0x888
-#define        rFPGA0_AnalogParameter4         0x88c
-
-#define        rFPGA0_XA_LSSIReadBack          0x8a0   /*  Transceiver LSSI Readback */
-#define        rFPGA0_XB_LSSIReadBack          0x8a4
-#define        rFPGA0_XC_LSSIReadBack          0x8a8
-#define        rFPGA0_XD_LSSIReadBack          0x8ac
-
-#define        rFPGA0_PSDReport                0x8b4   /*  Useless now */
-/*  Transceiver A HSPI Readback */
-#define        TransceiverA_HSPI_Readback      0x8b8
-/*  Transceiver B HSPI Readback */
-#define        TransceiverB_HSPI_Readback      0x8bc
-/*  Useless now RF Interface Readback Value */
-#define        rFPGA0_XAB_RFInterfaceRB        0x8e0
-#define        rFPGA0_XCD_RFInterfaceRB        0x8e4   /*  Useless now */
-
-/*  4. Page9(0x900) */
-/* RF mode & OFDM TxSC RF BW Setting?? */
-#define        rFPGA1_RFMOD                    0x900
-
-#define        rFPGA1_TxBlock                  0x904   /*  Useless now */
-#define        rFPGA1_DebugSelect              0x908   /*  Useless now */
-#define        rFPGA1_TxInfo                   0x90c   /*  Useless now Status report */
-
-/*  5. PageA(0xA00) */
-/*  Set Control channel to upper or lower - required only for 40MHz */
-#define        rCCK0_System                    0xa00
-
-/*  Disable init gain now Select RX path by RSSI */
-#define        rCCK0_AFESetting                0xa04
-/*  Disable init gain now Init gain */
-#define        rCCK0_CCA                       0xa08
-
-/* AGC default value, saturation level Antenna Diversity, RX AGC, LNA Threshold,
- * RX LNA Threshold useless now. Not the same as 90 series */
-#define        rCCK0_RxAGC1                    0xa0c
-#define        rCCK0_RxAGC2                    0xa10   /* AGC & DAGC */
-
-#define        rCCK0_RxHP                      0xa14
-
-/* Timing recovery & Channel estimation threshold */
-#define        rCCK0_DSPParameter1             0xa18
-#define        rCCK0_DSPParameter2             0xa1c   /* SQ threshold */
-
-#define        rCCK0_TxFilter1                 0xa20
-#define        rCCK0_TxFilter2                 0xa24
-#define        rCCK0_DebugPort                 0xa28   /* debug port and Tx filter3 */
-#define        rCCK0_FalseAlarmReport          0xa2c   /* 0xa2d useless now */
-#define        rCCK0_TRSSIReport               0xa50
-#define        rCCK0_RxReport                  0xa54  /* 0xa57 */
-#define        rCCK0_FACounterLower            0xa5c  /* 0xa5b */
-#define        rCCK0_FACounterUpper            0xa58  /* 0xa5c */
-
-/*  */
-/*  PageB(0xB00) */
-/*  */
-#define        rPdp_AntA                       0xb00
-#define        rPdp_AntA_4                     0xb04
-#define        rConfig_Pmpd_AntA               0xb28
-#define        rConfig_AntA                    0xb68
-#define        rConfig_AntB                    0xb6c
-#define        rPdp_AntB                       0xb70
-#define        rPdp_AntB_4                     0xb74
-#define        rConfig_Pmpd_AntB               0xb98
-#define        rAPK                            0xbd8
-
-/*  */
-/*  6. PageC(0xC00) */
-/*  */
-#define        rOFDM0_LSTF                     0xc00
-
-#define        rOFDM0_TRxPathEnable            0xc04
-#define        rOFDM0_TRMuxPar                 0xc08
-#define        rOFDM0_TRSWIsolation            0xc0c
-
-/* RxIQ DC offset, Rx digital filter, DC notch filter */
-#define        rOFDM0_XARxAFE                  0xc10
-#define        rOFDM0_XARxIQImbalance          0xc14  /* RxIQ imbalance matrix */
-#define        rOFDM0_XBRxAFE                  0xc18
-#define        rOFDM0_XBRxIQImbalance          0xc1c
-#define        rOFDM0_XCRxAFE                  0xc20
-#define        rOFDM0_XCRxIQImbalance          0xc24
-#define        rOFDM0_XDRxAFE                  0xc28
-#define        rOFDM0_XDRxIQImbalance          0xc2c
-
-#define        rOFDM0_RxDetector1              0xc30  /*PD,BW & SBD DM tune init gain*/
-#define        rOFDM0_RxDetector2              0xc34  /* SBD & Fame Sync. */
-#define        rOFDM0_RxDetector3              0xc38  /* Frame Sync. */
-#define        rOFDM0_RxDetector4              0xc3c  /* PD, SBD, Frame Sync & Short-GI */
-
-#define        rOFDM0_RxDSP                    0xc40  /* Rx Sync Path */
-#define        rOFDM0_CFOandDAGC               0xc44  /* CFO & DAGC */
-#define        rOFDM0_CCADropThreshold         0xc48 /* CCA Drop threshold */
-#define        rOFDM0_ECCAThreshold            0xc4c /*  energy CCA */
-
-#define        rOFDM0_XAAGCCore1               0xc50   /*  DIG */
-#define        rOFDM0_XAAGCCore2               0xc54
-#define        rOFDM0_XBAGCCore1               0xc58
-#define        rOFDM0_XBAGCCore2               0xc5c
-#define        rOFDM0_XCAGCCore1               0xc60
-#define        rOFDM0_XCAGCCore2               0xc64
-#define        rOFDM0_XDAGCCore1               0xc68
-#define        rOFDM0_XDAGCCore2               0xc6c
-
-#define        rOFDM0_AGCParameter1            0xc70
-#define        rOFDM0_AGCParameter2            0xc74
-#define        rOFDM0_AGCRSSITable             0xc78
-#define        rOFDM0_HTSTFAGC                 0xc7c
-
-#define        rOFDM0_XATxIQImbalance          0xc80   /*  TX PWR TRACK and DIG */
-#define        rOFDM0_XATxAFE                  0xc84
-#define        rOFDM0_XBTxIQImbalance          0xc88
-#define        rOFDM0_XBTxAFE                  0xc8c
-#define        rOFDM0_XCTxIQImbalance          0xc90
-#define        rOFDM0_XCTxAFE                  0xc94
-#define        rOFDM0_XDTxIQImbalance          0xc98
-#define        rOFDM0_XDTxAFE                  0xc9c
-
-#define        rOFDM0_RxIQExtAnta              0xca0
-#define        rOFDM0_TxCoeff1                 0xca4
-#define        rOFDM0_TxCoeff2                 0xca8
-#define        rOFDM0_TxCoeff3                 0xcac
-#define        rOFDM0_TxCoeff4                 0xcb0
-#define        rOFDM0_TxCoeff5                 0xcb4
-#define        rOFDM0_TxCoeff6                 0xcb8
-#define        rOFDM0_RxHPParameter            0xce0
-#define        rOFDM0_TxPseudoNoiseWgt         0xce4
-#define        rOFDM0_FrameSync                0xcf0
-#define        rOFDM0_DFSReport                0xcf4
-
-/*  */
-/*  7. PageD(0xD00) */
-/*  */
-#define        rOFDM1_LSTF                     0xd00
-#define        rOFDM1_TRxPathEnable            0xd04
-
-#define        rOFDM1_CFO                      0xd08   /*  No setting now */
-#define        rOFDM1_CSI1                     0xd10
-#define        rOFDM1_SBD                      0xd14
-#define        rOFDM1_CSI2                     0xd18
-#define        rOFDM1_CFOTracking              0xd2c
-#define        rOFDM1_TRxMesaure1              0xd34
-#define        rOFDM1_IntfDet                  0xd3c
-#define        rOFDM1_PseudoNoiseStateAB       0xd50
-#define        rOFDM1_PseudoNoiseStateCD       0xd54
-#define        rOFDM1_RxPseudoNoiseWgt         0xd58
-
-#define        rOFDM_PHYCounter1               0xda0  /* cca, parity fail */
-#define        rOFDM_PHYCounter2               0xda4  /* rate illegal, crc8 fail */
-#define        rOFDM_PHYCounter3               0xda8  /* MCS not support */
-
-#define        rOFDM_ShortCFOAB                0xdac   /*  No setting now */
-#define        rOFDM_ShortCFOCD                0xdb0
-#define        rOFDM_LongCFOAB                 0xdb4
-#define        rOFDM_LongCFOCD                 0xdb8
-#define        rOFDM_TailCFOAB                 0xdbc
-#define        rOFDM_TailCFOCD                 0xdc0
-#define        rOFDM_PWMeasure1                0xdc4
-#define        rOFDM_PWMeasure2                0xdc8
-#define        rOFDM_BWReport                  0xdcc
-#define        rOFDM_AGCReport                 0xdd0
-#define        rOFDM_RxSNR                     0xdd4
-#define        rOFDM_RxEVMCSI                  0xdd8
-#define        rOFDM_SIGReport                 0xddc
-
-/*  */
-/*  8. PageE(0xE00) */
-/*  */
-#define        rTxAGC_A_Rate18_06              0xe00
-#define        rTxAGC_A_Rate54_24              0xe04
-#define        rTxAGC_A_CCK1_Mcs32             0xe08
-#define        rTxAGC_A_Mcs03_Mcs00            0xe10
-#define        rTxAGC_A_Mcs07_Mcs04            0xe14
-#define        rTxAGC_A_Mcs11_Mcs08            0xe18
-#define        rTxAGC_A_Mcs15_Mcs12            0xe1c
-
-#define        rTxAGC_B_Rate18_06              0x830
-#define        rTxAGC_B_Rate54_24              0x834
-#define        rTxAGC_B_CCK1_55_Mcs32          0x838
-#define        rTxAGC_B_Mcs03_Mcs00            0x83c
-#define        rTxAGC_B_Mcs07_Mcs04            0x848
-#define        rTxAGC_B_Mcs11_Mcs08            0x84c
-#define        rTxAGC_B_Mcs15_Mcs12            0x868
-#define        rTxAGC_B_CCK11_A_CCK2_11        0x86c
-
-#define        rFPGA0_IQK                      0xe28
-#define        rTx_IQK_Tone_A                  0xe30
-#define        rRx_IQK_Tone_A                  0xe34
-#define        rTx_IQK_PI_A                    0xe38
-#define        rRx_IQK_PI_A                    0xe3c
-
-#define        rTx_IQK                         0xe40
-#define        rRx_IQK                         0xe44
-#define        rIQK_AGC_Pts                    0xe48
-#define        rIQK_AGC_Rsp                    0xe4c
-#define        rTx_IQK_Tone_B                  0xe50
-#define        rRx_IQK_Tone_B                  0xe54
-#define        rTx_IQK_PI_B                    0xe58
-#define        rRx_IQK_PI_B                    0xe5c
-#define        rIQK_AGC_Cont                   0xe60
-
-#define        rBlue_Tooth                     0xe6c
-#define        rRx_Wait_CCA                    0xe70
-#define        rTx_CCK_RFON                    0xe74
-#define        rTx_CCK_BBON                    0xe78
-#define        rTx_OFDM_RFON                   0xe7c
-#define        rTx_OFDM_BBON                   0xe80
-#define        rTx_To_Rx                       0xe84
-#define        rTx_To_Tx                       0xe88
-#define        rRx_CCK                         0xe8c
-
-#define        rTx_Power_Before_IQK_A          0xe94
-#define        rTx_Power_After_IQK_A           0xe9c
-
-#define        rRx_Power_Before_IQK_A          0xea0
-#define        rRx_Power_Before_IQK_A_2        0xea4
-#define        rRx_Power_After_IQK_A           0xea8
-#define        rRx_Power_After_IQK_A_2         0xeac
-
-#define        rTx_Power_Before_IQK_B          0xeb4
-#define        rTx_Power_After_IQK_B           0xebc
-
-#define        rRx_Power_Before_IQK_B          0xec0
-#define        rRx_Power_Before_IQK_B_2        0xec4
-#define        rRx_Power_After_IQK_B           0xec8
-#define        rRx_Power_After_IQK_B_2         0xecc
-
-#define        rRx_OFDM                        0xed0
-#define        rRx_Wait_RIFS                   0xed4
-#define        rRx_TO_Rx                       0xed8
-#define        rStandby                        0xedc
-#define        rSleep                          0xee0
-#define        rPMPD_ANAEN                     0xeec
-
-/*  */
-/*  7. RF Register 0x00-0x2E (RF 8256) */
-/*     RF-0222D 0x00-3F */
-/*  */
-/* Zebra1 */
-#define        rZebra1_HSSIEnable              0x0     /*  Useless now */
-#define        rZebra1_TRxEnable1              0x1
-#define        rZebra1_TRxEnable2              0x2
-#define        rZebra1_AGC                     0x4
-#define        rZebra1_ChargePump              0x5
-#define        rZebra1_Channel                 0x7     /*  RF channel switch */
-
-/* endif */
-#define        rZebra1_TxGain                  0x8     /*  Useless now */
-#define        rZebra1_TxLPF                   0x9
-#define        rZebra1_RxLPF                   0xb
-#define        rZebra1_RxHPFCorner             0xc
-
-/* Zebra4 */
-#define        rGlobalCtrl             0       /*  Useless now */
-#define        rRTL8256_TxLPF          19
-#define        rRTL8256_RxLPF          11
-
-/* RTL8258 */
-#define        rRTL8258_TxLPF          0x11    /*  Useless now */
-#define        rRTL8258_RxLPF          0x13
-#define        rRTL8258_RSSILPF        0xa
-
-/*  */
-/*  RL6052 Register definition */
-/*  */
-#define        RF_AC                   0x00    /*  */
-
-#define        RF_IQADJ_G1             0x01    /*  */
-#define        RF_IQADJ_G2             0x02    /*  */
-
-#define        RF_POW_TRSW             0x05    /*  */
-
-#define        RF_GAIN_RX              0x06    /*  */
-#define        RF_GAIN_TX              0x07    /*  */
-
-#define        RF_TXM_IDAC             0x08    /*  */
-#define        RF_IPA_G                0x09    /*  */
-#define        RF_TXBIAS_G             0x0A
-#define        RF_TXPA_AG              0x0B
-#define        RF_IPA_A                0x0C    /*  */
-#define        RF_TXBIAS_A             0x0D
-#define        RF_BS_PA_APSET_G9_G11   0x0E
-#define        RF_BS_IQGEN             0x0F    /*  */
-
-#define        RF_MODE1                0x10    /*  */
-#define        RF_MODE2                0x11    /*  */
-
-#define        RF_RX_AGC_HP            0x12    /*  */
-#define        RF_TX_AGC               0x13    /*  */
-#define        RF_BIAS                 0x14    /*  */
-#define        RF_IPA                  0x15    /*  */
-#define        RF_TXBIAS               0x16
-#define        RF_POW_ABILITY          0x17    /*  */
-#define        RF_CHNLBW               0x18    /*  RF channel and BW switch */
-#define        RF_TOP                  0x19    /*  */
-
-#define        RF_RX_G1                0x1A    /*  */
-#define        RF_RX_G2                0x1B    /*  */
-
-#define        RF_RX_BB2               0x1C    /*  */
-#define        RF_RX_BB1               0x1D    /*  */
-
-#define        RF_RCK1                 0x1E    /*  */
-#define        RF_RCK2                 0x1F    /*  */
-
-#define        RF_TX_G1                0x20    /*  */
-#define        RF_TX_G2                0x21    /*  */
-#define        RF_TX_G3                0x22    /*  */
-
-#define        RF_TX_BB1               0x23    /*  */
-
-#define        RF_T_METER_92D          0x42    /*  */
-#define        RF_T_METER_88E          0x42    /*  */
-#define        RF_T_METER              0x24    /*  */
-
-#define        RF_SYN_G1               0x25    /*  RF TX Power control */
-#define        RF_SYN_G2               0x26    /*  RF TX Power control */
-#define        RF_SYN_G3               0x27    /*  RF TX Power control */
-#define        RF_SYN_G4               0x28    /*  RF TX Power control */
-#define        RF_SYN_G5               0x29    /*  RF TX Power control */
-#define        RF_SYN_G6               0x2A    /*  RF TX Power control */
-#define        RF_SYN_G7               0x2B    /*  RF TX Power control */
-#define        RF_SYN_G8               0x2C    /*  RF TX Power control */
-
-#define        RF_RCK_OS               0x30    /*  RF TX PA control */
-#define        RF_TXPA_G1              0x31    /*  RF TX PA control */
-#define        RF_TXPA_G2              0x32    /*  RF TX PA control */
-#define        RF_TXPA_G3              0x33    /*  RF TX PA control */
-#define        RF_TX_BIAS_A            0x35
-#define        RF_TX_BIAS_D            0x36
-#define        RF_LOBF_9               0x38
-#define        RF_RXRF_A3              0x3C    /*  */
-#define        RF_TRSW                 0x3F
-
-#define        RF_TXRF_A2              0x41
-#define        RF_TXPA_G4              0x46
-#define        RF_TXPA_A4              0x4B
-#define        RF_0x52                 0x52
-#define        RF_WE_LUT               0xEF
-
-/*  */
-/* Bit Mask */
-/*  */
-/*  1. Page1(0x100) */
-#define        bBBResetB               0x100   /*  Useless now? */
-#define        bGlobalResetB           0x200
-#define        bOFDMTxStart            0x4
-#define        bCCKTxStart             0x8
-#define        bCRC32Debug             0x100
-#define        bPMACLoopback           0x10
-#define        bTxLSIG                 0xffffff
-#define        bOFDMTxRate             0xf
-#define        bOFDMTxReserved         0x10
-#define        bOFDMTxLength           0x1ffe0
-#define        bOFDMTxParity           0x20000
-#define        bTxHTSIG1               0xffffff
-#define        bTxHTMCSRate            0x7f
-#define        bTxHTBW                 0x80
-#define        bTxHTLength             0xffff00
-#define        bTxHTSIG2               0xffffff
-#define        bTxHTSmoothing          0x1
-#define        bTxHTSounding           0x2
-#define        bTxHTReserved           0x4
-#define        bTxHTAggreation         0x8
-#define        bTxHTSTBC               0x30
-#define        bTxHTAdvanceCoding      0x40
-#define        bTxHTShortGI            0x80
-#define        bTxHTNumberHT_LTF       0x300
-#define        bTxHTCRC8               0x3fc00
-#define        bCounterReset           0x10000
-#define        bNumOfOFDMTx            0xffff
-#define        bNumOfCCKTx             0xffff0000
-#define        bTxIdleInterval         0xffff
-#define        bOFDMService            0xffff0000
-#define        bTxMACHeader            0xffffffff
-#define        bTxDataInit             0xff
-#define        bTxHTMode               0x100
-#define        bTxDataType             0x30000
-#define        bTxRandomSeed           0xffffffff
-#define        bCCKTxPreamble          0x1
-#define        bCCKTxSFD               0xffff0000
-#define        bCCKTxSIG               0xff
-#define        bCCKTxService           0xff00
-#define        bCCKLengthExt           0x8000
-#define        bCCKTxLength            0xffff0000
-#define        bCCKTxCRC16             0xffff
-#define        bCCKTxStatus            0x1
-#define        bOFDMTxStatus           0x2
-
-#define        IS_BB_REG_OFFSET_92S(_Offset)                   \
-       ((_Offset >= 0x800) && (_Offset <= 0xfff))
-
-/*  2. Page8(0x800) */
-#define        bRFMOD                  0x1     /*  Reg 0x800 rFPGA0_RFMOD */
-#define        bJapanMode              0x2
-#define        bCCKTxSC                0x30
-#define        bCCKEn                  0x1000000
-#define        bOFDMEn                 0x2000000
-
-#define        bOFDMRxADCPhase         0x10000 /*  Useless now */
-#define        bOFDMTxDACPhase         0x40000
-#define        bXATxAGC                0x3f
-
-#define        bAntennaSelect          0x0300
-
-#define        bXBTxAGC                0xf00   /*  Reg 80c rFPGA0_TxGainStage */
-#define        bXCTxAGC                0xf000
-#define        bXDTxAGC                0xf0000
-
-#define        bPAStart                0xf0000000      /*  Useless now */
-#define        bTRStart                0x00f00000
-#define        bRFStart                0x0000f000
-#define        bBBStart                0x000000f0
-#define        bBBCCKStart             0x0000000f
-#define        bPAEnd                  0xf          /* Reg0x814 */
-#define        bTREnd                  0x0f000000
-#define        bRFEnd                  0x000f0000
-#define        bCCAMask                0x000000f0   /* T2R */
-#define        bR2RCCAMask             0x00000f00
-#define        bHSSI_R2TDelay          0xf8000000
-#define        bHSSI_T2RDelay          0xf80000
-#define        bContTxHSSI             0x400     /* change gain at continue Tx */
-#define        bIGFromCCK              0x200
-#define        bAGCAddress             0x3f
-#define        bRxHPTx                 0x7000
-#define        bRxHPT2R                0x38000
-#define        bRxHPCCKIni             0xc0000
-#define        bAGCTxCode              0xc00000
-#define        bAGCRxCode              0x300000
-
-/* Reg 0x820~84f rFPGA0_XA_HSSIParameter1 */
-#define        b3WireDataLength        0x800
-#define        b3WireAddressLength     0x400
-
-#define        b3WireRFPowerDown       0x1     /*  Useless now */
-#define        b5GPAPEPolarity         0x40000000
-#define        b2GPAPEPolarity         0x80000000
-#define        bRFSW_TxDefaultAnt      0x3
-#define        bRFSW_TxOptionAnt       0x30
-#define        bRFSW_RxDefaultAnt      0x300
-#define        bRFSW_RxOptionAnt       0x3000
-#define        bRFSI_3WireData         0x1
-#define        bRFSI_3WireClock        0x2
-#define        bRFSI_3WireLoad         0x4
-#define        bRFSI_3WireRW           0x8
-#define        bRFSI_3Wire             0xf
-
-#define        bRFSI_RFENV             0x10    /* Reg 0x870 rFPGA0_XAB_RFInterfaceSW */
-
-#define        bRFSI_TRSW              0x20    /*  Useless now */
-#define        bRFSI_TRSWB             0x40
-#define        bRFSI_ANTSW             0x100
-#define        bRFSI_ANTSWB            0x200
-#define        bRFSI_PAPE              0x400
-#define        bRFSI_PAPE5G            0x800
-#define        bBandSelect             0x1
-#define        bHTSIG2_GI              0x80
-#define        bHTSIG2_Smoothing       0x01
-#define        bHTSIG2_Sounding        0x02
-#define        bHTSIG2_Aggreaton       0x08
-#define        bHTSIG2_STBC            0x30
-#define        bHTSIG2_AdvCoding       0x40
-#define        bHTSIG2_NumOfHTLTF      0x300
-#define        bHTSIG2_CRC8            0x3fc
-#define        bHTSIG1_MCS             0x7f
-#define        bHTSIG1_BandWidth       0x80
-#define        bHTSIG1_HTLength        0xffff
-#define        bLSIG_Rate              0xf
-#define        bLSIG_Reserved          0x10
-#define        bLSIG_Length            0x1fffe
-#define        bLSIG_Parity            0x20
-#define        bCCKRxPhase             0x4
-
-#define        bLSSIReadAddress        0x7f800000   /*  T65 RF */
-
-#define        bLSSIReadEdge           0x80000000   /* LSSI "Read" edge signal */
-
-#define        bLSSIReadBackData       0xfffff         /*  T65 RF */
-
-#define        bLSSIReadOKFlag         0x1000  /*  Useless now */
-#define        bCCKSampleRate          0x8       /* 0: 44MHz, 1:88MHz */
-#define        bRegulator0Standby      0x1
-#define        bRegulatorPLLStandby    0x2
-#define        bRegulator1Standby      0x4
-#define        bPLLPowerUp             0x8
-#define        bDPLLPowerUp            0x10
-#define        bDA10PowerUp            0x20
-#define        bAD7PowerUp             0x200
-#define        bDA6PowerUp             0x2000
-#define        bXtalPowerUp            0x4000
-#define        b40MDClkPowerUP         0x8000
-#define        bDA6DebugMode           0x20000
-#define        bDA6Swing               0x380000
-
-/*  Reg 0x880 rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ */
-#define        bADClkPhase             0x4000000
-
-#define        b80MClkDelay            0x18000000      /*  Useless */
-#define        bAFEWatchDogEnable      0x20000000
-
-/*  Reg 0x884 rFPGA0_AnalogParameter2 Crystal cap */
-#define        bXtalCap01              0xc0000000
-#define        bXtalCap23              0x3
-#define        bXtalCap92x             0x0f000000
-#define        bXtalCap                0x0f000000
-
-#define        bIntDifClkEnable        0x400   /*  Useless */
-#define        bExtSigClkEnable        0x800
-#define        bBandgapMbiasPowerUp    0x10000
-#define        bAD11SHGain             0xc0000
-#define        bAD11InputRange         0x700000
-#define        bAD11OPCurrent          0x3800000
-#define        bIPathLoopback          0x4000000
-#define        bQPathLoopback          0x8000000
-#define        bAFELoopback            0x10000000
-#define        bDA10Swing              0x7e0
-#define        bDA10Reverse            0x800
-#define        bDAClkSource            0x1000
-#define        bAD7InputRange          0x6000
-#define        bAD7Gain                0x38000
-#define        bAD7OutputCMMode        0x40000
-#define        bAD7InputCMMode         0x380000
-#define        bAD7Current             0xc00000
-#define        bRegulatorAdjust        0x7000000
-#define        bAD11PowerUpAtTx        0x1
-#define        bDA10PSAtTx             0x10
-#define        bAD11PowerUpAtRx        0x100
-#define        bDA10PSAtRx             0x1000
-#define        bCCKRxAGCFormat         0x200
-#define        bPSDFFTSamplepPoint     0xc000
-#define        bPSDAverageNum          0x3000
-#define        bIQPathControl          0xc00
-#define        bPSDFreq                0x3ff
-#define        bPSDAntennaPath         0x30
-#define        bPSDIQSwitch            0x40
-#define        bPSDRxTrigger           0x400000
-#define        bPSDTxTrigger           0x80000000
-#define        bPSDSineToneScale       0x7f000000
-#define        bPSDReport              0xffff
-
-/*  3. Page9(0x900) */
-#define        bOFDMTxSC               0x30000000      /*  Useless */
-#define        bCCKTxOn                0x1
-#define        bOFDMTxOn               0x2
-#define        bDebugPage              0xfff  /* reset debug page and HWord, LWord */
-#define        bDebugItem              0xff   /* reset debug page and LWord */
-#define        bAntL                   0x10
-#define        bAntNonHT               0x100
-#define        bAntHT1                 0x1000
-#define        bAntHT2                 0x10000
-#define        bAntHT1S1               0x100000
-#define        bAntNonHTS1             0x1000000
-
-/*  4. PageA(0xA00) */
-#define        bCCKBBMode              0x3     /*  Useless */
-#define        bCCKTxPowerSaving       0x80
-#define        bCCKRxPowerSaving       0x40
-
-#define        bCCKSideBand            0x10    /*  Reg 0xa00 rCCK0_System 20/40 */
-
-#define        bCCKScramble            0x8     /*  Useless */
-#define        bCCKAntDiversity        0x8000
-#define        bCCKCarrierRecovery     0x4000
-#define        bCCKTxRate              0x3000
-#define        bCCKDCCancel            0x0800
-#define        bCCKISICancel           0x0400
-#define        bCCKMatchFilter         0x0200
-#define        bCCKEqualizer           0x0100
-#define        bCCKPreambleDetect      0x800000
-#define        bCCKFastFalseCCA        0x400000
-#define        bCCKChEstStart          0x300000
-#define        bCCKCCACount            0x080000
-#define        bCCKcs_lim              0x070000
-#define        bCCKBistMode            0x80000000
-#define        bCCKCCAMask             0x40000000
-#define        bCCKTxDACPhase          0x4
-#define        bCCKRxADCPhase          0x20000000   /* r_rx_clk */
-#define        bCCKr_cp_mode0          0x0100
-#define        bCCKTxDCOffset          0xf0
-#define        bCCKRxDCOffset          0xf
-#define        bCCKCCAMode             0xc000
-#define        bCCKFalseCS_lim         0x3f00
-#define        bCCKCS_ratio            0xc00000
-#define        bCCKCorgBit_sel         0x300000
-#define        bCCKPD_lim              0x0f0000
-#define        bCCKNewCCA              0x80000000
-#define        bCCKRxHPofIG            0x8000
-#define        bCCKRxIG                0x7f00
-#define        bCCKLNAPolarity         0x800000
-#define        bCCKRx1stGain           0x7f0000
-#define        bCCKRFExtend            0x20000000 /* CCK Rx Iinital gain polarity */
-#define        bCCKRxAGCSatLevel       0x1f000000
-#define        bCCKRxAGCSatCount       0xe0
-#define        bCCKRxRFSettle          0x1f       /* AGCsamp_dly */
-#define        bCCKFixedRxAGC          0x8000
-#define        bCCKAntennaPolarity     0x2000
-#define        bCCKTxFilterType        0x0c00
-#define        bCCKRxAGCReportType     0x0300
-#define        bCCKRxDAGCEn            0x80000000
-#define        bCCKRxDAGCPeriod        0x20000000
-#define        bCCKRxDAGCSatLevel      0x1f000000
-#define        bCCKTimingRecovery      0x800000
-#define        bCCKTxC0                0x3f0000
-#define        bCCKTxC1                0x3f000000
-#define        bCCKTxC2                0x3f
-#define        bCCKTxC3                0x3f00
-#define        bCCKTxC4                0x3f0000
-#define        bCCKTxC5                0x3f000000
-#define        bCCKTxC6                0x3f
-#define        bCCKTxC7                0x3f00
-#define        bCCKDebugPort           0xff0000
-#define        bCCKDACDebug            0x0f000000
-#define        bCCKFalseAlarmEnable    0x8000
-#define        bCCKFalseAlarmRead      0x4000
-#define        bCCKTRSSI               0x7f
-#define        bCCKRxAGCReport         0xfe
-#define        bCCKRxReport_AntSel     0x80000000
-#define        bCCKRxReport_MFOff      0x40000000
-#define        bCCKRxRxReport_SQLoss   0x20000000
-#define        bCCKRxReport_Pktloss    0x10000000
-#define        bCCKRxReport_Lockedbit  0x08000000
-#define        bCCKRxReport_RateError  0x04000000
-#define        bCCKRxReport_RxRate     0x03000000
-#define        bCCKRxFACounterLower    0xff
-#define        bCCKRxFACounterUpper    0xff000000
-#define        bCCKRxHPAGCStart        0xe000
-#define        bCCKRxHPAGCFinal        0x1c00
-#define        bCCKRxFalseAlarmEnable  0x8000
-#define        bCCKFACounterFreeze     0x4000
-#define        bCCKTxPathSel           0x10000000
-#define        bCCKDefaultRxPath       0xc000000
-#define        bCCKOptionRxPath        0x3000000
-
-/*  5. PageC(0xC00) */
-#define        bNumOfSTF               0x3     /*  Useless */
-#define        bShift_L                0xc0
-#define        bGI_TH                  0xc
-#define        bRxPathA                0x1
-#define        bRxPathB                0x2
-#define        bRxPathC                0x4
-#define        bRxPathD                0x8
-#define        bTxPathA                0x1
-#define        bTxPathB                0x2
-#define        bTxPathC                0x4
-#define        bTxPathD                0x8
-#define        bTRSSIFreq              0x200
-#define        bADCBackoff             0x3000
-#define        bDFIRBackoff            0xc000
-#define        bTRSSILatchPhase        0x10000
-#define        bRxIDCOffset            0xff
-#define        bRxQDCOffset            0xff00
-#define        bRxDFIRMode             0x1800000
-#define        bRxDCNFType             0xe000000
-#define        bRXIQImb_A              0x3ff
-#define        bRXIQImb_B              0xfc00
-#define        bRXIQImb_C              0x3f0000
-#define        bRXIQImb_D              0xffc00000
-#define        bDC_dc_Notch            0x60000
-#define        bRxNBINotch             0x1f000000
-#define        bPD_TH                  0xf
-#define        bPD_TH_Opt2             0xc000
-#define        bPWED_TH                0x700
-#define        bIfMF_Win_L             0x800
-#define        bPD_Option              0x1000
-#define        bMF_Win_L               0xe000
-#define        bBW_Search_L            0x30000
-#define        bwin_enh_L              0xc0000
-#define        bBW_TH                  0x700000
-#define        bED_TH2                 0x3800000
-#define        bBW_option              0x4000000
-#define        bRatio_TH               0x18000000
-#define        bWindow_L               0xe0000000
-#define        bSBD_Option             0x1
-#define        bFrame_TH               0x1c
-#define        bFS_Option              0x60
-#define        bDC_Slope_check         0x80
-#define        bFGuard_Counter_DC_L    0xe00
-#define        bFrame_Weight_Short     0x7000
-#define        bSub_Tune               0xe00000
-#define        bFrame_DC_Length        0xe000000
-#define        bSBD_start_offset       0x30000000
-#define        bFrame_TH_2             0x7
-#define        bFrame_GI2_TH           0x38
-#define        bGI2_Sync_en            0x40
-#define        bSarch_Short_Early      0x300
-#define        bSarch_Short_Late       0xc00
-#define        bSarch_GI2_Late         0x70000
-#define        bCFOAntSum              0x1
-#define        bCFOAcc                 0x2
-#define        bCFOStartOffset         0xc
-#define        bCFOLookBack            0x70
-#define        bCFOSumWeight           0x80
-#define        bDAGCEnable             0x10000
-#define        bTXIQImb_A              0x3ff
-#define        bTXIQImb_B              0xfc00
-#define        bTXIQImb_C              0x3f0000
-#define        bTXIQImb_D              0xffc00000
-#define        bTxIDCOffset            0xff
-#define        bTxQDCOffset            0xff00
-#define        bTxDFIRMode             0x10000
-#define        bTxPesudoNoiseOn        0x4000000
-#define        bTxPesudoNoise_A        0xff
-#define        bTxPesudoNoise_B        0xff00
-#define        bTxPesudoNoise_C        0xff0000
-#define        bTxPesudoNoise_D        0xff000000
-#define        bCCADropOption          0x20000
-#define        bCCADropThres           0xfff00000
-#define        bEDCCA_H                0xf
-#define        bEDCCA_L                0xf0
-#define        bLambda_ED              0x300
-#define        bRxInitialGain          0x7f
-#define        bRxAntDivEn             0x80
-#define        bRxAGCAddressForLNA     0x7f00
-#define        bRxHighPowerFlow        0x8000
-#define        bRxAGCFreezeThres       0xc0000
-#define        bRxFreezeStep_AGC1      0x300000
-#define        bRxFreezeStep_AGC2      0xc00000
-#define        bRxFreezeStep_AGC3      0x3000000
-#define        bRxFreezeStep_AGC0      0xc000000
-#define        bRxRssi_Cmp_En          0x10000000
-#define        bRxQuickAGCEn           0x20000000
-#define        bRxAGCFreezeThresMode   0x40000000
-#define        bRxOverFlowCheckType    0x80000000
-#define        bRxAGCShift             0x7f
-#define        bTRSW_Tri_Only          0x80
-#define        bPowerThres             0x300
-#define        bRxAGCEn                0x1
-#define        bRxAGCTogetherEn        0x2
-#define        bRxAGCMin               0x4
-#define        bRxHP_Ini               0x7
-#define        bRxHP_TRLNA             0x70
-#define        bRxHP_RSSI              0x700
-#define        bRxHP_BBP1              0x7000
-#define        bRxHP_BBP2              0x70000
-#define        bRxHP_BBP3              0x700000
-#define        bRSSI_H                 0x7f0000     /* threshold for high power */
-#define        bRSSI_Gen               0x7f000000   /* threshold for ant diversity */
-#define        bRxSettle_TRSW          0x7
-#define        bRxSettle_LNA           0x38
-#define        bRxSettle_RSSI          0x1c0
-#define        bRxSettle_BBP           0xe00
-#define        bRxSettle_RxHP          0x7000
-#define        bRxSettle_AntSW_RSSI    0x38000
-#define        bRxSettle_AntSW         0xc0000
-#define        bRxProcessTime_DAGC     0x300000
-#define        bRxSettle_HSSI          0x400000
-#define        bRxProcessTime_BBPPW    0x800000
-#define        bRxAntennaPowerShift    0x3000000
-#define        bRSSITableSelect        0xc000000
-#define        bRxHP_Final             0x7000000
-#define        bRxHTSettle_BBP         0x7
-#define        bRxHTSettle_HSSI        0x8
-#define        bRxHTSettle_RxHP        0x70
-#define        bRxHTSettle_BBPPW       0x80
-#define        bRxHTSettle_Idle        0x300
-#define        bRxHTSettle_Reserved    0x1c00
-#define        bRxHTRxHPEn             0x8000
-#define        bRxHTAGCFreezeThres     0x30000
-#define        bRxHTAGCTogetherEn      0x40000
-#define        bRxHTAGCMin             0x80000
-#define        bRxHTAGCEn              0x100000
-#define        bRxHTDAGCEn             0x200000
-#define        bRxHTRxHP_BBP           0x1c00000
-#define        bRxHTRxHP_Final         0xe0000000
-#define        bRxPWRatioTH            0x3
-#define        bRxPWRatioEn            0x4
-#define        bRxMFHold               0x3800
-#define        bRxPD_Delay_TH1         0x38
-#define        bRxPD_Delay_TH2         0x1c0
-#define        bRxPD_DC_COUNT_MAX      0x600
-#define        bRxPD_Delay_TH          0x8000
-#define        bRxProcess_Delay        0xf0000
-#define        bRxSearchrange_GI2_Early        0x700000
-#define        bRxFrame_Guard_Counter_L        0x3800000
-#define        bRxSGI_Guard_L          0xc000000
-#define        bRxSGI_Search_L         0x30000000
-#define        bRxSGI_TH               0xc0000000
-#define        bDFSCnt0                0xff
-#define        bDFSCnt1                0xff00
-#define        bDFSFlag                0xf0000
-#define        bMFWeightSum            0x300000
-#define        bMinIdxTH               0x7f000000
-#define        bDAFormat               0x40000
-#define        bTxChEmuEnable          0x01000000
-#define        bTRSWIsolation_A        0x7f
-#define        bTRSWIsolation_B        0x7f00
-#define        bTRSWIsolation_C        0x7f0000
-#define        bTRSWIsolation_D        0x7f000000
-#define        bExtLNAGain             0x7c00
-
-/*  6. PageE(0xE00) */
-#define        bSTBCEn                 0x4     /*  Useless */
-#define        bAntennaMapping         0x10
-#define        bNss                    0x20
-#define        bCFOAntSumD             0x200
-#define        bPHYCounterReset        0x8000000
-#define        bCFOReportGet           0x4000000
-#define        bOFDMContinueTx         0x10000000
-#define        bOFDMSingleCarrier      0x20000000
-#define        bOFDMSingleTone         0x40000000
-#define        bHTDetect               0x100
-#define        bCFOEn                  0x10000
-#define        bCFOValue               0xfff00000
-#define        bSigTone_Re             0x3f
-#define        bSigTone_Im             0x7f00
-#define        bCounter_CCA            0xffff
-#define        bCounter_ParityFail     0xffff0000
-#define        bCounter_RateIllegal    0xffff
-#define        bCounter_CRC8Fail       0xffff0000
-#define        bCounter_MCSNoSupport   0xffff
-#define        bCounter_FastSync       0xffff
-#define        bShortCFO               0xfff
-#define        bShortCFOTLength        12   /* total */
-#define        bShortCFOFLength        11   /* fraction */
-#define        bLongCFO                0x7ff
-#define        bLongCFOTLength         11
-#define        bLongCFOFLength         11
-#define        bTailCFO                0x1fff
-#define        bTailCFOTLength         13
-#define        bTailCFOFLength         12
-#define        bmax_en_pwdB            0xffff
-#define        bCC_power_dB            0xffff0000
-#define        bnoise_pwdB             0xffff
-#define        bPowerMeasTLength       10
-#define        bPowerMeasFLength       3
-#define        bRx_HT_BW               0x1
-#define        bRxSC                   0x6
-#define        bRx_HT                  0x8
-#define        bNB_intf_det_on         0x1
-#define        bIntf_win_len_cfg       0x30
-#define        bNB_Intf_TH_cfg         0x1c0
-#define        bRFGain                 0x3f
-#define        bTableSel               0x40
-#define        bTRSW                   0x80
-#define        bRxSNR_A                0xff
-#define        bRxSNR_B                0xff00
-#define        bRxSNR_C                0xff0000
-#define        bRxSNR_D                0xff000000
-#define        bSNREVMTLength          8
-#define        bSNREVMFLength          1
-#define        bCSI1st                 0xff
-#define        bCSI2nd                 0xff00
-#define        bRxEVM1st               0xff0000
-#define        bRxEVM2nd               0xff000000
-#define        bSIGEVM                 0xff
-#define        bPWDB                   0xff00
-#define        bSGIEN                  0x10000
-
-#define        bSFactorQAM1            0xf     /*  Useless */
-#define        bSFactorQAM2            0xf0
-#define        bSFactorQAM3            0xf00
-#define        bSFactorQAM4            0xf000
-#define        bSFactorQAM5            0xf0000
-#define        bSFactorQAM6            0xf0000
-#define        bSFactorQAM7            0xf00000
-#define        bSFactorQAM8            0xf000000
-#define        bSFactorQAM9            0xf0000000
-#define        bCSIScheme              0x100000
-
-#define        bNoiseLvlTopSet         0x3     /*  Useless */
-#define        bChSmooth               0x4
-#define        bChSmoothCfg1           0x38
-#define        bChSmoothCfg2           0x1c0
-#define        bChSmoothCfg3           0xe00
-#define        bChSmoothCfg4           0x7000
-#define        bMRCMode                0x800000
-#define        bTHEVMCfg               0x7000000
-
-#define        bLoopFitType            0x1     /*  Useless */
-#define        bUpdCFO                 0x40
-#define        bUpdCFOOffData          0x80
-#define        bAdvUpdCFO              0x100
-#define        bAdvTimeCtrl            0x800
-#define        bUpdClko                0x1000
-#define        bFC                     0x6000
-#define        bTrackingMode           0x8000
-#define        bPhCmpEnable            0x10000
-#define        bUpdClkoLTF             0x20000
-#define        bComChCFO               0x40000
-#define        bCSIEstiMode            0x80000
-#define        bAdvUpdEqz              0x100000
-#define        bUChCfg                 0x7000000
-#define        bUpdEqz                 0x8000000
-
-/* Rx Pseduo noise */
-#define        bRxPesudoNoiseOn        0x20000000      /*  Useless */
-#define        bRxPesudoNoise_A        0xff
-#define        bRxPesudoNoise_B        0xff00
-#define        bRxPesudoNoise_C        0xff0000
-#define        bRxPesudoNoise_D        0xff000000
-#define        bPesudoNoiseState_A     0xffff
-#define        bPesudoNoiseState_B     0xffff0000
-#define        bPesudoNoiseState_C     0xffff
-#define        bPesudoNoiseState_D     0xffff0000
-
-/* 7. RF Register */
-/* Zebra1 */
-#define        bZebra1_HSSIEnable      0x8             /*  Useless */
-#define        bZebra1_TRxControl      0xc00
-#define        bZebra1_TRxGainSetting  0x07f
-#define        bZebra1_RxCorner        0xc00
-#define        bZebra1_TxChargePump    0x38
-#define        bZebra1_RxChargePump    0x7
-#define        bZebra1_ChannelNum      0xf80
-#define        bZebra1_TxLPFBW         0x400
-#define        bZebra1_RxLPFBW         0x600
-
-/* Zebra4 */
-#define        bRTL8256RegModeCtrl1    0x100   /*  Useless */
-#define        bRTL8256RegModeCtrl0    0x40
-#define        bRTL8256_TxLPFBW        0x18
-#define        bRTL8256_RxLPFBW        0x600
-
-/* RTL8258 */
-#define        bRTL8258_TxLPFBW        0xc     /*  Useless */
-#define        bRTL8258_RxLPFBW        0xc00
-#define        bRTL8258_RSSILPFBW      0xc0
-
-/*  */
-/*  Other Definition */
-/*  */
-
-/* byte endable for sb_write */
-#define        bByte0                  0x1     /*  Useless */
-#define        bByte1                  0x2
-#define        bByte2                  0x4
-#define        bByte3                  0x8
-#define        bWord0                  0x3
-#define        bWord1                  0xc
-#define        bDWord                  0xf
-
-/* for PutRegsetting & GetRegSetting BitMask */
-#define        bMaskByte0              0xff    /*  Reg 0xc50 rOFDM0_XAAGCCore~0xC6f */
-#define        bMaskByte1              0xff00
-#define        bMaskByte2              0xff0000
-#define        bMaskByte3              0xff000000
-#define        bMaskHWord              0xffff0000
-#define        bMaskLWord              0x0000ffff
-#define        bMaskDWord              0xffffffff
-#define        bMask12Bits             0xfff
-#define        bMaskH4Bits             0xf0000000
-#define        bMaskOFDM_D             0xffc00000
-#define        bMaskCCK                0x3f3f3f3f
-
-/* for PutRFRegsetting & GetRFRegSetting BitMask */
-#define        bRFRegOffsetMask        0xfffff
-
-#define        bEnable                 0x1     /*  Useless */
-#define        bDisable                0x0
-
-#define        LeftAntenna             0x0     /*  Useless */
-#define        RightAntenna            0x1
-
-#define        tCheckTxStatus          500   /* 500ms Useless */
-#define        tUpdateRxCounter        100   /* 100ms */
-
-#define        rateCCK                 0       /*  Useless */
-#define        rateOFDM                1
-#define        rateHT                  2
-
-/* define Register-End */
-#define        bPMAC_End               0x1ff   /*  Useless */
-#define        bFPGAPHY0_End           0x8ff
-#define        bFPGAPHY1_End           0x9ff
-#define        bCCKPHY0_End            0xaff
-#define        bOFDMPHY0_End           0xcff
-#define        bOFDMPHY1_End           0xdff
-
-#define        bPMACControl            0x0     /*  Useless */
-#define        bWMACControl            0x1
-#define        bWNICControl            0x2
-
-#define        PathA                   0x0     /*  Useless */
-#define        PathB                   0x1
-#define        PathC                   0x2
-#define        PathD                   0x3
-
-/*--------------------------Define Parameters-------------------------------*/
-
-#endif
diff --git a/drivers/staging/r8188eu/include/Hal8188ERateAdaptive.h b/drivers/staging/r8188eu/include/Hal8188ERateAdaptive.h
deleted file mode 100644 (file)
index c571ad9..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright (c) 2011 Realtek Semiconductor Corp. */
-
-#ifndef __INC_RA_H
-#define __INC_RA_H
-/* Module Name: RateAdaptive.h
- * Abstract: Prototype of RA and related data structure.
- */
-
-#include <linux/bitfield.h>
-
-/*  Rate adaptive define */
-#define        PERENTRY        23
-#define        RETRYSIZE       5
-#define        RATESIZE        28
-#define        TX_RPT2_ITEM_SIZE       8
-
-/*  TX report 2 format in Rx desc */
-#define GET_TX_RPT2_DESC_PKT_LEN_88E(__rxstatusdesc)           \
-       le32_get_bits(*(__le32 *)__rxstatusdesc, GENMASK(8, 0))
-#define GET_TX_RPT2_DESC_MACID_VALID_1_88E(__rxstatusdesc)     \
-       le32_to_cpu((*(__le32 *)(__rxstatusdesc + 16))
-#define GET_TX_RPT2_DESC_MACID_VALID_2_88E(__rxstatusdesc)     \
-       le32_to_cpu((*(__le32 *)(__rxstatusdesc + 20))
-/*  End rate adaptive define */
-
-int ODM_RAInfo_Init_all(struct odm_dm_struct *dm_odm);
-
-int ODM_RAInfo_Init(struct odm_dm_struct *dm_odm, u8 MacID);
-
-u8 ODM_RA_GetShortGI_8188E(struct odm_dm_struct *dm_odm, u8 MacID);
-
-u8 ODM_RA_GetDecisionRate_8188E(struct odm_dm_struct *dm_odm, u8 MacID);
-
-u8 ODM_RA_GetHwPwrStatus_8188E(struct odm_dm_struct *dm_odm, u8 MacID);
-void ODM_RA_UpdateRateInfo_8188E(struct odm_dm_struct *dm_odm, u8 MacID,
-                                u8 RateID, u32 RateMask,
-                                u8 SGIEnable);
-
-void ODM_RA_SetRSSI_8188E(struct odm_dm_struct *dm_odm, u8 macid,
-                         u8 rssi);
-
-void ODM_RA_TxRPT2Handle_8188E(struct odm_dm_struct *dm_odm,
-                              u8 *txrpt_buf, u16 txrpt_len,
-                              u32 validentry0, u32 validentry1);
-
-void ODM_RA_Set_TxRPT_Time(struct odm_dm_struct *dm_odm, u16 minRptTime);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/HalHWImg8188E_BB.h b/drivers/staging/r8188eu/include/HalHWImg8188E_BB.h
deleted file mode 100644 (file)
index 0a290bc..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __INC_BB_8188E_HW_IMG_H
-#define __INC_BB_8188E_HW_IMG_H
-
-/* static bool CheckCondition(const u32 Condition, const u32 Hex); */
-
-/******************************************************************************
-*                           AGC_TAB_1T.TXT
-******************************************************************************/
-
-int ODM_ReadAndConfig_AGC_TAB_1T_8188E(struct odm_dm_struct *odm);
-
-/******************************************************************************
-*                           PHY_REG_1T.TXT
-******************************************************************************/
-
-int ODM_ReadAndConfig_PHY_REG_1T_8188E(struct odm_dm_struct *odm);
-
-/******************************************************************************
-*                           PHY_REG_PG.TXT
-******************************************************************************/
-
-void ODM_ReadAndConfig_PHY_REG_PG_8188E(struct odm_dm_struct *dm_odm);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/HalHWImg8188E_MAC.h b/drivers/staging/r8188eu/include/HalHWImg8188E_MAC.h
deleted file mode 100644 (file)
index b3d67c1..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __INC_MAC_8188E_HW_IMG_H
-#define __INC_MAC_8188E_HW_IMG_H
-
-/******************************************************************************
-*                           MAC_REG.TXT
-******************************************************************************/
-int ODM_ReadAndConfig_MAC_REG_8188E(struct odm_dm_struct *pDM_Odm);
-
-#endif /*  end of HWIMG_SUPPORT */
diff --git a/drivers/staging/r8188eu/include/HalHWImg8188E_RF.h b/drivers/staging/r8188eu/include/HalHWImg8188E_RF.h
deleted file mode 100644 (file)
index 880fead..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __INC_RF_8188E_HW_IMG_H
-#define __INC_RF_8188E_HW_IMG_H
-
-/******************************************************************************
- *                           RadioA_1T.TXT
- ******************************************************************************/
-
-int ODM_ReadAndConfig_RadioA_1T_8188E(struct odm_dm_struct *odm);
-
-#endif /*  end of HWIMG_SUPPORT */
diff --git a/drivers/staging/r8188eu/include/HalPhyRf_8188e.h b/drivers/staging/r8188eu/include/HalPhyRf_8188e.h
deleted file mode 100644 (file)
index b75a5d8..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __HAL_PHY_RF_8188E_H__
-#define __HAL_PHY_RF_8188E_H__
-
-/*--------------------------Define Parameters-------------------------------*/
-#define        IQK_DELAY_TIME_88E              10              /* ms */
-#define        index_mapping_NUM_88E   15
-#define AVG_THERMAL_NUM_88E    4
-
-void ODM_TxPwrTrackAdjust88E(struct odm_dm_struct *pDM_Odm,
-                            u8 Type,   /* 0 = OFDM, 1 = CCK */
-                            u8 *pDirection,/* 1 = +(incr) 2 = -(decr) */
-                            u32 *pOutWriteVal); /* Tx tracking CCK/OFDM BB
-                                                    * swing index adjust */
-
-void odm_TXPowerTrackingCallback_ThermalMeter_8188E(struct adapter *Adapter);
-
-/* 1 7.        IQK */
-
-void PHY_IQCalibrate_8188E(struct adapter *Adapter, bool ReCovery);
-
-/*  LC calibrate */
-void PHY_LCCalibrate_8188E(struct adapter *pAdapter);
-
-/*  AP calibrate */
-void PHY_DigitalPredistortion_8188E(struct adapter *pAdapter);
-
-void _PHY_SaveADDARegisters(struct adapter *pAdapter, u32 *ADDAReg,
-                           u32 *ADDABackup, u32 RegisterNum);
-
-void _PHY_MACSettingCalibration(struct adapter *pAdapter, u32 *MACReg,
-                               u32 *MACBackup);
-
-#endif /*  #ifndef __HAL_PHY_RF_8188E_H__ */
diff --git a/drivers/staging/r8188eu/include/HalPwrSeqCmd.h b/drivers/staging/r8188eu/include/HalPwrSeqCmd.h
deleted file mode 100644 (file)
index 0886300..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __HALPWRSEQCMD_H__
-#define __HALPWRSEQCMD_H__
-
-#include "drv_types.h"
-
-enum r8188eu_pwr_seq {
-       PWR_ON_FLOW,
-       DISABLE_FLOW,
-       LPS_ENTER_FLOW,
-};
-
-/*     Prototype of protected function. */
-u8 HalPwrSeqCmdParsing(struct adapter *padapter, enum r8188eu_pwr_seq seq);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/HalVerDef.h b/drivers/staging/r8188eu/include/HalVerDef.h
deleted file mode 100644 (file)
index 7a530c7..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-#ifndef __HAL_VERSION_DEF_H__
-#define __HAL_VERSION_DEF_H__
-
-enum HAL_CHIP_TYPE {
-       TEST_CHIP       =       0,
-       NORMAL_CHIP     =       1,
-};
-
-enum HAL_CUT_VERSION {
-       A_CUT_VERSION   =       0,
-       B_CUT_VERSION   =       1,
-       C_CUT_VERSION   =       2,
-       D_CUT_VERSION   =       3,
-       E_CUT_VERSION   =       4,
-};
-
-enum HAL_VENDOR {
-       CHIP_VENDOR_TSMC        =       0,
-       CHIP_VENDOR_UMC         =       1,
-};
-
-struct HAL_VERSION {
-       enum HAL_CHIP_TYPE      ChipType;
-       enum HAL_CUT_VERSION    CUTVersion;
-       enum HAL_VENDOR         VendorType;
-};
-
-/*  Get element */
-#define GET_CVID_CHIP_TYPE(version)    (((version).ChipType))
-#define GET_CVID_MANUFACTUER(version)  (((version).VendorType))
-
-/* HAL_CHIP_TYPE_E */
-#define IS_NORMAL_CHIP(version)                                \
-       (GET_CVID_CHIP_TYPE(version) == NORMAL_CHIP)
-
-/* HAL_VENDOR_E */
-#define IS_CHIP_VENDOR_TSMC(version)                   \
-       (GET_CVID_MANUFACTUER(version) == CHIP_VENDOR_TSMC)
-
-#endif
diff --git a/drivers/staging/r8188eu/include/drv_types.h b/drivers/staging/r8188eu/include/drv_types.h
deleted file mode 100644 (file)
index 159990f..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-/*-----------------------------------------------------------------------------
-
-       For type defines and data structure defines
-
-------------------------------------------------------------------------------*/
-
-#ifndef __DRV_TYPES_H__
-#define __DRV_TYPES_H__
-
-#include "osdep_service.h"
-#include "wlan_bssdef.h"
-#include "rtw_ht.h"
-#include "rtw_cmd.h"
-#include "rtw_xmit.h"
-#include "rtw_recv.h"
-#include "hal_intf.h"
-#include "hal_com.h"
-#include "rtw_security.h"
-#include "rtw_pwrctrl.h"
-#include "rtw_io.h"
-#include "rtw_eeprom.h"
-#include "sta_info.h"
-#include "rtw_mlme.h"
-#include "rtw_rf.h"
-#include "rtw_event.h"
-#include "rtw_led.h"
-#include "rtw_mlme_ext.h"
-#include "rtw_p2p.h"
-#include "rtw_ap.h"
-#include "rtw_br_ext.h"
-#include "rtl8188e_hal.h"
-#include "rtw_fw.h"
-
-#define FW_RTL8188EU   "rtlwifi/rtl8188eufw.bin"
-
-struct registry_priv {
-       u8      rfintfs;
-       u8      lbkmode;
-       u8      hci;
-       struct ndis_802_11_ssid ssid;
-       u8      network_mode;   /* infra, ad-hoc, auto */
-       u8      channel;/* ad-hoc support requirement */
-       u8      wireless_mode;/* A, B, G, auto */
-       u8      scan_mode;/* active, passive */
-       u8      radio_enable;
-       u8      preamble;/* long, short, auto */
-       u8      vrtl_carrier_sense;/* Enable, Disable, Auto */
-       u8      vcs_type;/* RTS/CTS, CTS-to-self */
-       u16     rts_thresh;
-       u16     frag_thresh;
-       u8      adhoc_tx_pwr;
-       u8      soft_ap;
-       u8      power_mgnt;
-       u8      ips_mode;
-       u8      smart_ps;
-       u8      long_retry_lmt;
-       u8      short_retry_lmt;
-       u16     busy_thresh;
-       u8      ack_policy;
-       u8      software_encrypt;
-       u8      software_decrypt;
-       u8      acm_method;
-         /* UAPSD */
-       u8      wmm_enable;
-       u8      uapsd_enable;
-       u8      uapsd_max_sp;
-       u8      uapsd_acbk_en;
-       u8      uapsd_acbe_en;
-       u8      uapsd_acvi_en;
-       u8      uapsd_acvo_en;
-
-       u8      led_enable;
-
-       struct wlan_bssid_ex    dev_network;
-
-       u8      ht_enable;
-       u8      cbw40_enable;
-       u8      ampdu_enable;/* for tx */
-       u8      rx_stbc;
-       u8      ampdu_amsdu;/* A-MPDU Supports A-MSDU is permitted */
-       u8      lowrate_two_xmit;
-
-       u8      low_power;
-
-       u8      wifi_spec;/*  !turbo_mode */
-
-       u8      channel_plan;
-       bool    bAcceptAddbaReq;
-
-       u8      antdiv_cfg;
-       u8      antdiv_type;
-
-       u8      usbss_enable;/* 0:disable,1:enable */
-       u8      hwpdn_mode;/* 0:disable,1:enable,2:decide by EFUSE config */
-       u8      hwpwrp_detect;/* 0:disable,1:enable */
-
-       u8      hw_wps_pbc;/* 0:disable,1:enable */
-
-       u8      max_roaming_times; /*  the max number driver will try */
-
-       u8      fw_iol; /* enable iol without other concern */
-
-       u8      enable80211d;
-
-       u8      ifname[16];
-       u8      if2name[16];
-
-       u8      notch_filter;
-};
-
-#define MAX_CONTINUAL_URB_ERR          4
-
-struct dvobj_priv {
-       struct adapter *if1;
-
-       /* For 92D, DMDP have 2 interface. */
-       u8      InterfaceNumber;
-       u8      NumInterfaces;
-
-       /* In /Out Pipe information */
-       int     RtInPipe;
-       int     RtOutPipe[3];
-       u8      Queue2Pipe[HW_QUEUE_ENTRY];/* for out pipe mapping */
-
-       struct rt_firmware firmware;
-
-/*-------- below is for USB INTERFACE --------*/
-
-       u8      RtNumOutPipes;
-
-       struct usb_interface *pusbintf;
-       struct usb_device *pusbdev;
-
-       atomic_t continual_urb_error;
-};
-
-static inline struct device *dvobj_to_dev(struct dvobj_priv *dvobj)
-{
-       /* todo: get interface type from dvobj and the return
-        * the dev accordingly */
-       return &dvobj->pusbintf->dev;
-};
-
-struct adapter {
-       int     pid[3];/* process id from UI, 0:wps, 1:hostapd, 2:dhcpcd */
-
-       struct dvobj_priv *dvobj;
-       struct  mlme_priv mlmepriv;
-       struct  mlme_ext_priv mlmeextpriv;
-       struct  cmd_priv        cmdpriv;
-       struct  evt_priv        evtpriv;
-       struct  xmit_priv       xmitpriv;
-       struct  recv_priv       recvpriv;
-       struct  sta_priv        stapriv;
-       struct  security_priv   securitypriv;
-       struct  registry_priv   registrypriv;
-       struct  pwrctrl_priv    pwrctrlpriv;
-       struct  eeprom_priv eeprompriv;
-       struct  led_priv        ledpriv;
-       struct wifidirect_info  wdinfo;
-
-       struct hal_data_8188e haldata;
-
-       s32     bDriverStopped;
-       s32     bSurpriseRemoved;
-
-       u8      hw_init_completed;
-       s8      signal_strength;
-
-       void *cmdThread;
-       struct  net_device *pnetdev;
-
-       /*  used by rtw_rereg_nd_name related function */
-       struct rereg_nd_name_data {
-               struct  net_device *old_pnetdev;
-               char old_ifname[IFNAMSIZ];
-               u8 old_ips_mode;
-               u8 old_bRegUseLed;
-       } rereg_nd_name_priv;
-
-       int bup;
-       struct net_device_stats stats;
-       struct iw_statistics iwstats;
-
-       int net_closed;
-       u8 bFWReady;
-       u8 bReadPortCancel;
-       u8 bWritePortCancel;
-       u8 bRxRSSIDisplay;
-       /* The driver will show up the desired channel number
-        * when this flag is 1. */
-       u8 bNotifyChannelChange;
-       /* The driver will show the current P2P status when the
-        * upper application reads it. */
-       u8 bShowGetP2PState;
-       struct adapter *pbuddy_adapter;
-
-       struct mutex *hw_init_mutex;
-
-       spinlock_t br_ext_lock;
-       struct nat25_network_db_entry   *nethash[NAT25_HASH_SIZE];
-       int                             pppoe_connection_in_progress;
-       unsigned char                   pppoe_addr[ETH_ALEN];
-       unsigned char                   scdb_mac[ETH_ALEN];
-       unsigned char                   scdb_ip[4];
-       struct nat25_network_db_entry   *scdb_entry;
-       unsigned char                   br_mac[ETH_ALEN];
-       unsigned char                   br_ip[4];
-       struct br_ext_info              ethBrExtInfo;
-};
-
-#define adapter_to_dvobj(adapter) (adapter->dvobj)
-
-void rtw_handle_dualmac(struct adapter *adapter, bool init);
-
-static inline u8 *myid(struct eeprom_priv *peepriv)
-{
-       return peepriv->mac_addr;
-}
-
-#endif /* __DRV_TYPES_H__ */
diff --git a/drivers/staging/r8188eu/include/hal_com.h b/drivers/staging/r8188eu/include/hal_com.h
deleted file mode 100644 (file)
index cd3f845..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __HAL_COMMON_H__
-#define __HAL_COMMON_H__
-
-/*  */
-/*        Rate Definition */
-/*  */
-/* CCK */
-#define        RATR_1M                                 0x00000001
-#define        RATR_2M                                 0x00000002
-#define        RATR_55M                                0x00000004
-#define        RATR_11M                                0x00000008
-/* OFDM */
-#define        RATR_6M                                 0x00000010
-#define        RATR_9M                                 0x00000020
-#define        RATR_12M                                0x00000040
-#define        RATR_18M                                0x00000080
-#define        RATR_24M                                0x00000100
-#define        RATR_36M                                0x00000200
-#define        RATR_48M                                0x00000400
-#define        RATR_54M                                0x00000800
-/* MCS 1 Spatial Stream */
-#define        RATR_MCS0                               0x00001000
-#define        RATR_MCS1                               0x00002000
-#define        RATR_MCS2                               0x00004000
-#define        RATR_MCS3                               0x00008000
-#define        RATR_MCS4                               0x00010000
-#define        RATR_MCS5                               0x00020000
-#define        RATR_MCS6                               0x00040000
-#define        RATR_MCS7                               0x00080000
-/* MCS 2 Spatial Stream */
-#define        RATR_MCS8                               0x00100000
-#define        RATR_MCS9                               0x00200000
-#define        RATR_MCS10                              0x00400000
-#define        RATR_MCS11                              0x00800000
-#define        RATR_MCS12                              0x01000000
-#define        RATR_MCS13                              0x02000000
-#define        RATR_MCS14                              0x04000000
-#define        RATR_MCS15                              0x08000000
-
-/* CCK */
-#define RATE_1M                                        BIT(0)
-#define RATE_2M                                        BIT(1)
-#define RATE_5_5M                              BIT(2)
-#define RATE_11M                               BIT(3)
-/* OFDM */
-#define RATE_6M                                        BIT(4)
-#define RATE_9M                                        BIT(5)
-#define RATE_12M                               BIT(6)
-#define RATE_18M                               BIT(7)
-#define RATE_24M                               BIT(8)
-#define RATE_36M                               BIT(9)
-#define RATE_48M                               BIT(10)
-#define RATE_54M                               BIT(11)
-/* MCS 1 Spatial Stream */
-#define RATE_MCS0                              BIT(12)
-#define RATE_MCS1                              BIT(13)
-#define RATE_MCS2                              BIT(14)
-#define RATE_MCS3                              BIT(15)
-#define RATE_MCS4                              BIT(16)
-#define RATE_MCS5                              BIT(17)
-#define RATE_MCS6                              BIT(18)
-#define RATE_MCS7                              BIT(19)
-/* MCS 2 Spatial Stream */
-#define RATE_MCS8                              BIT(20)
-#define RATE_MCS9                              BIT(21)
-#define RATE_MCS10                             BIT(22)
-#define RATE_MCS11                             BIT(23)
-#define RATE_MCS12                             BIT(24)
-#define RATE_MCS13                             BIT(25)
-#define RATE_MCS14                             BIT(26)
-#define RATE_MCS15                             BIT(27)
-
-/*  ALL CCK Rate */
-#define        RATE_ALL_CCK            (RATR_1M | RATR_2M | RATR_55M | RATR_11M)
-#define        RATE_ALL_OFDM_AG        (RATR_6M | RATR_9M | RATR_12M | RATR_18M | \
-                                RATR_24M | RATR_36M | RATR_48M | RATR_54M)
-#define        RATE_ALL_OFDM_1SS       (RATR_MCS0 | RATR_MCS1 | RATR_MCS2 |    \
-                                RATR_MCS3 | RATR_MCS4 | RATR_MCS5|RATR_MCS6 | \
-                                RATR_MCS7)
-#define        RATE_ALL_OFDM_2SS       (RATR_MCS8 | RATR_MCS9 | RATR_MCS10 | \
-                                RATR_MCS11 | RATR_MCS12 | RATR_MCS13 | \
-                                RATR_MCS14 | RATR_MCS15)
-
-/*------------------------------ Tx Desc definition Macro --------------------*/
-/* pragma mark -- Tx Desc related definition. -- */
-/*     Rate */
-/*  CCK Rates, TxHT = 0 */
-#define DESC_RATE1M                            0x00
-#define DESC_RATE2M                            0x01
-#define DESC_RATE5_5M                          0x02
-#define DESC_RATE11M                           0x03
-
-/*  OFDM Rates, TxHT = 0 */
-#define DESC_RATE6M                            0x04
-#define DESC_RATE9M                            0x05
-#define DESC_RATE12M                           0x06
-#define DESC_RATE18M                           0x07
-#define DESC_RATE24M                           0x08
-#define DESC_RATE36M                           0x09
-#define DESC_RATE48M                           0x0a
-#define DESC_RATE54M                           0x0b
-
-/*  MCS Rates, TxHT = 1 */
-#define DESC_RATEMCS0                          0x0c
-#define DESC_RATEMCS1                          0x0d
-#define DESC_RATEMCS2                          0x0e
-#define DESC_RATEMCS3                          0x0f
-#define DESC_RATEMCS4                          0x10
-#define DESC_RATEMCS5                          0x11
-#define DESC_RATEMCS6                          0x12
-#define DESC_RATEMCS7                          0x13
-#define DESC_RATEMCS8                          0x14
-#define DESC_RATEMCS9                          0x15
-#define DESC_RATEMCS10                         0x16
-#define DESC_RATEMCS11                         0x17
-#define DESC_RATEMCS12                         0x18
-#define DESC_RATEMCS13                         0x19
-#define DESC_RATEMCS14                         0x1a
-#define DESC_RATEMCS15                         0x1b
-#define DESC_RATEMCS15_SG                      0x1c
-#define DESC_RATEMCS32                         0x20
-
-/*  1 Byte long (in unit of TU) */
-#define REG_P2P_CTWIN                          0x0572
-#define REG_NOA_DESC_SEL                       0x05CF
-#define REG_NOA_DESC_DURATION                  0x05E0
-#define REG_NOA_DESC_INTERVAL                  0x05E4
-#define REG_NOA_DESC_START                     0x05E8
-#define REG_NOA_DESC_COUNT                     0x05EC
-
-/* return the final channel plan decision */
-u8 hal_com_get_channel_plan(struct adapter *padapter,
-                           u8 hw_channel_plan,
-                           u8 sw_channel_plan,
-                           u8 def_channel_plan,
-                           bool AutoLoadFail
-);
-
-u8 MRateToHwRate(u8 rate);
-
-void HalSetBrateCfg(struct adapter *Adapter, u8 *mBratesOS, u16 *pBrateCfg);
-
-#endif /* __HAL_COMMON_H__ */
diff --git a/drivers/staging/r8188eu/include/hal_intf.h b/drivers/staging/r8188eu/include/hal_intf.h
deleted file mode 100644 (file)
index 296aa5b..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#ifndef __HAL_INTF_H__
-#define __HAL_INTF_H__
-
-#include "osdep_service.h"
-#include "drv_types.h"
-#include "Hal8188EPhyCfg.h"
-
-typedef s32 (*c2h_id_filter)(u8 id);
-
-int rtl8188eu_interface_configure(struct adapter *adapt);
-int ReadAdapterInfo8188EU(struct adapter *Adapter);
-void rtl8188eu_init_default_value(struct adapter *adapt);
-void rtl8188e_SetHalODMVar(struct adapter *Adapter, void *pValue1, bool bSet);
-u32 rtl8188eu_InitPowerOn(struct adapter *adapt);
-void rtl8188e_EfusePowerSwitch(struct adapter *pAdapter, u8 PwrState);
-void rtl8188e_ReadEFuse(struct adapter *Adapter, u16 _size_byte, u8 *pbuf);
-
-void hal_notch_filter_8188e(struct adapter *adapter, bool enable);
-
-void SetBeaconRelatedRegisters8188EUsb(struct adapter *adapt);
-void UpdateHalRAMask8188EUsb(struct adapter *adapt, u32 mac_id, u8 rssi_level);
-
-int rtl8188e_IOL_exec_cmds_sync(struct adapter *adapter,
-                               struct xmit_frame *xmit_frame, u32 max_wating_ms, u32 bndy_cnt);
-
-int rtl8188eu_inirp_init(struct adapter *Adapter);
-
-uint rtw_hal_init(struct adapter *padapter);
-uint rtw_hal_deinit(struct adapter *padapter);
-void rtw_hal_stop(struct adapter *padapter);
-
-u32 rtl8188eu_hal_init(struct adapter *Adapter);
-u32 rtl8188eu_hal_deinit(struct adapter *Adapter);
-
-void rtw_hal_update_ra_mask(struct adapter *padapter, u32 mac_id, u8 level);
-void   rtw_hal_clone_data(struct adapter *dst_adapt,
-                          struct adapter *src_adapt);
-
-u8 rtw_do_join(struct adapter *padapter);
-
-#endif /* __HAL_INTF_H__ */
diff --git a/drivers/staging/r8188eu/include/ieee80211.h b/drivers/staging/r8188eu/include/ieee80211.h
deleted file mode 100644 (file)
index e7a4f8a..0000000
+++ /dev/null
@@ -1,817 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __IEEE80211_H
-#define __IEEE80211_H
-
-#include "osdep_service.h"
-#include "drv_types.h"
-#include "wifi.h"
-#include <linux/wireless.h>
-
-#define MGMT_QUEUE_NUM 5
-
-#define ETH_TYPE_LEN           2
-#define PAYLOAD_TYPE_LEN       1
-
-#define RTL_IOCTL_HOSTAPD (SIOCIWFIRSTPRIV + 28)
-
-/* STA flags */
-#define WLAN_STA_AUTH BIT(0)
-#define WLAN_STA_ASSOC BIT(1)
-#define WLAN_STA_PS BIT(2)
-#define WLAN_STA_TIM BIT(3)
-#define WLAN_STA_PERM BIT(4)
-#define WLAN_STA_AUTHORIZED BIT(5)
-#define WLAN_STA_PENDING_POLL BIT(6) /* pending activity poll not ACKed */
-#define WLAN_STA_SHORT_PREAMBLE BIT(7)
-#define WLAN_STA_PREAUTH BIT(8)
-#define WLAN_STA_WME BIT(9)
-#define WLAN_STA_MFP BIT(10)
-#define WLAN_STA_HT BIT(11)
-#define WLAN_STA_WPS BIT(12)
-#define WLAN_STA_MAYBE_WPS BIT(13)
-#define WLAN_STA_NONERP BIT(31)
-
-#define IEEE_CMD_SET_WPA_PARAM                 1
-#define IEEE_CMD_SET_WPA_IE                            2
-#define IEEE_CMD_SET_ENCRYPTION                        3
-#define IEEE_CMD_MLME                                          4
-
-#define IEEE_PARAM_WPA_ENABLED                         1
-#define IEEE_PARAM_TKIP_COUNTERMEASURES                2
-#define IEEE_PARAM_DROP_UNENCRYPTED                    3
-#define IEEE_PARAM_PRIVACY_INVOKED                     4
-#define IEEE_PARAM_AUTH_ALGS                                   5
-#define IEEE_PARAM_IEEE_802_1X                         6
-#define IEEE_PARAM_WPAX_SELECT                         7
-
-#define AUTH_ALG_OPEN_SYSTEM                   0x1
-#define AUTH_ALG_SHARED_KEY                    0x2
-#define AUTH_ALG_LEAP                          0x00000004
-
-#define IEEE_MLME_STA_DEAUTH                           1
-#define IEEE_MLME_STA_DISASSOC                 2
-
-#define IEEE_CRYPT_ERR_UNKNOWN_ALG                     2
-#define IEEE_CRYPT_ERR_UNKNOWN_ADDR                    3
-#define IEEE_CRYPT_ERR_CRYPT_INIT_FAILED               4
-#define IEEE_CRYPT_ERR_KEY_SET_FAILED                  5
-#define IEEE_CRYPT_ERR_TX_KEY_SET_FAILED               6
-#define IEEE_CRYPT_ERR_CARD_CONF_FAILED                7
-
-#define        IEEE_CRYPT_ALG_NAME_LEN                 16
-
-#define WPA_CIPHER_NONE                BIT(0)
-#define WPA_CIPHER_WEP40       BIT(1)
-#define WPA_CIPHER_WEP104 BIT(2)
-#define WPA_CIPHER_TKIP                BIT(3)
-#define WPA_CIPHER_CCMP                BIT(4)
-
-
-#define WPA_SELECTOR_LEN 4
-extern u8 RTW_WPA_OUI_TYPE[];
-extern u16 RTW_WPA_VERSION;
-extern u8 WPA_AUTH_KEY_MGMT_NONE[];
-extern u8 WPA_AUTH_KEY_MGMT_UNSPEC_802_1X[];
-extern u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X[];
-extern u8 WPA_CIPHER_SUITE_NONE[];
-extern u8 WPA_CIPHER_SUITE_WEP40[];
-extern u8 WPA_CIPHER_SUITE_TKIP[];
-extern u8 WPA_CIPHER_SUITE_WRAP[];
-extern u8 WPA_CIPHER_SUITE_CCMP[];
-extern u8 WPA_CIPHER_SUITE_WEP104[];
-
-#define RSN_HEADER_LEN 4
-#define RSN_SELECTOR_LEN 4
-
-extern u16 RSN_VERSION_BSD;
-extern u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X[];
-extern u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X[];
-extern u8 RSN_CIPHER_SUITE_NONE[];
-extern u8 RSN_CIPHER_SUITE_WEP40[];
-extern u8 RSN_CIPHER_SUITE_TKIP[];
-extern u8 RSN_CIPHER_SUITE_WRAP[];
-extern u8 RSN_CIPHER_SUITE_CCMP[];
-extern u8 RSN_CIPHER_SUITE_WEP104[];
-
-enum ratr_table_mode {
-       RATR_INX_WIRELESS_NGB = 0,      /*  BGN 40 Mhz 2SS 1SS */
-       RATR_INX_WIRELESS_NG = 1,       /*  GN or N */
-       RATR_INX_WIRELESS_NB = 2,       /*  BGN 20 Mhz 2SS 1SS  or BN */
-       RATR_INX_WIRELESS_N = 3,
-       RATR_INX_WIRELESS_GB = 4,
-       RATR_INX_WIRELESS_G = 5,
-       RATR_INX_WIRELESS_B = 6,
-       RATR_INX_WIRELESS_MC = 7,
-       RATR_INX_WIRELESS_AC_N = 8,
-};
-
-enum NETWORK_TYPE {
-       WIRELESS_INVALID = 0,
-       /* Sub-Element */
-       WIRELESS_11B = BIT(0), /* tx:cck only, rx:cck only, hw: cck */
-       WIRELESS_11G = BIT(1), /* tx:ofdm only, rx:ofdm & cck, hw:cck & ofdm*/
-       WIRELESS_11_24N = BIT(3), /* tx:MCS only, rx:MCS & cck, hw:MCS & cck */
-
-       /* Combination */
-       /*  tx: cck & ofdm, rx: cck & ofdm & MCS, hw: cck & ofdm */
-       WIRELESS_11BG = (WIRELESS_11B | WIRELESS_11G),
-       /*  tx: ofdm & MCS, rx: ofdm & cck & MCS, hw: cck & ofdm */
-       WIRELESS_11G_24N = (WIRELESS_11G | WIRELESS_11_24N),
-       /*  tx: ofdm & cck & MCS, rx: ofdm & cck & MCS, hw: ofdm & cck */
-       WIRELESS_11BG_24N = (WIRELESS_11B | WIRELESS_11G | WIRELESS_11_24N),
-};
-
-struct ieee_param {
-       u32 cmd;
-       u8 sta_addr[ETH_ALEN];
-       union {
-               struct {
-                       u8 name;
-                       u32 value;
-               } wpa_param;
-               struct {
-                       u32 len;
-                       u8 reserved[32];
-                       u8 data[];
-               } wpa_ie;
-               struct {
-                       int command;
-                       int reason_code;
-               } mlme;
-               struct {
-                       u8 alg[IEEE_CRYPT_ALG_NAME_LEN];
-                       u8 set_tx;
-                       u32 err;
-                       u8 idx;
-                       u8 seq[8]; /* sequence counter (set: RX, get: TX) */
-                       u16 key_len;
-                       u8 key[];
-               } crypt;
-               struct {
-                       u16 aid;
-                       u16 capability;
-                       int flags;
-                       u8 tx_supp_rates[16];
-                       struct ieee80211_ht_cap ht_cap;
-               } add_sta;
-               struct {
-                       u8      reserved[2];/* for set max_num_sta */
-                       u8      buf[];
-               } bcn_ie;
-       } u;
-};
-
-#define IEEE80211_DATA_LEN             2304
-/* Maximum size for the MA-UNITDATA primitive, 802.11 standard section
-   6.2.1.1.2.
-
-   The figure in section 7.1.2 suggests a body size of up to 2312
-   bytes is allowed, which is a bit confusing, I suspect this
-   represents the 2304 bytes of real data, plus a possible 8 bytes of
-   WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */
-
-#define IEEE80211_HLEN                 30
-#define IEEE80211_FRAME_LEN            (IEEE80211_DATA_LEN + IEEE80211_HLEN)
-
-/* this is stolen from ipw2200 driver */
-#define IEEE_IBSS_MAC_HASH_SIZE 31
-
-#define IEEE80211_3ADDR_LEN 24
-#define IEEE80211_4ADDR_LEN 30
-#define IEEE80211_FCS_LEN    4
-
-#define MIN_FRAG_THRESHOLD     256U
-#define        MAX_FRAG_THRESHOLD     2346U
-
-/* Frame control field constants */
-#define RTW_IEEE80211_FCTL_VERS                0x0003
-#define RTW_IEEE80211_FCTL_FTYPE       0x000c
-#define RTW_IEEE80211_FCTL_STYPE       0x00f0
-#define RTW_IEEE80211_FCTL_TODS                0x0100
-#define RTW_IEEE80211_FCTL_FROMDS      0x0200
-#define RTW_IEEE80211_FCTL_MOREFRAGS   0x0400
-#define RTW_IEEE80211_FCTL_RETRY       0x0800
-#define RTW_IEEE80211_FCTL_PM          0x1000
-#define RTW_IEEE80211_FCTL_MOREDATA    0x2000
-#define RTW_IEEE80211_FCTL_PROTECTED   0x4000
-#define RTW_IEEE80211_FCTL_ORDER       0x8000
-#define RTW_IEEE80211_FCTL_CTL_EXT     0x0f00
-
-#define RTW_IEEE80211_FTYPE_MGMT       0x0000
-#define RTW_IEEE80211_FTYPE_CTL                0x0004
-#define RTW_IEEE80211_FTYPE_DATA       0x0008
-#define RTW_IEEE80211_FTYPE_EXT                0x000c
-
-/* management */
-#define RTW_IEEE80211_STYPE_ASSOC_REQ  0x0000
-#define RTW_IEEE80211_STYPE_ASSOC_RESP 0x0010
-#define RTW_IEEE80211_STYPE_REASSOC_REQ        0x0020
-#define RTW_IEEE80211_STYPE_REASSOC_RESP       0x0030
-#define RTW_IEEE80211_STYPE_PROBE_REQ  0x0040
-#define RTW_IEEE80211_STYPE_PROBE_RESP 0x0050
-#define RTW_IEEE80211_STYPE_BEACON     0x0080
-#define RTW_IEEE80211_STYPE_ATIM       0x0090
-#define RTW_IEEE80211_STYPE_DISASSOC   0x00A0
-#define RTW_IEEE80211_STYPE_AUTH       0x00B0
-#define RTW_IEEE80211_STYPE_DEAUTH     0x00C0
-#define RTW_IEEE80211_STYPE_ACTION     0x00D0
-
-/* control */
-#define RTW_IEEE80211_STYPE_CTL_EXT    0x0060
-#define RTW_IEEE80211_STYPE_BACK_REQ   0x0080
-#define RTW_IEEE80211_STYPE_BACK       0x0090
-#define RTW_IEEE80211_STYPE_PSPOLL     0x00A0
-#define RTW_IEEE80211_STYPE_RTS                0x00B0
-#define RTW_IEEE80211_STYPE_CTS                0x00C0
-#define RTW_IEEE80211_STYPE_ACK                0x00D0
-#define RTW_IEEE80211_STYPE_CFEND      0x00E0
-#define RTW_IEEE80211_STYPE_CFENDACK   0x00F0
-
-/* data */
-#define RTW_IEEE80211_STYPE_DATA       0x0000
-#define RTW_IEEE80211_STYPE_DATA_CFACK 0x0010
-#define RTW_IEEE80211_STYPE_DATA_CFPOLL        0x0020
-#define RTW_IEEE80211_STYPE_DATA_CFACKPOLL     0x0030
-#define RTW_IEEE80211_STYPE_NULLFUNC   0x0040
-#define RTW_IEEE80211_STYPE_CFACK      0x0050
-#define RTW_IEEE80211_STYPE_CFPOLL     0x0060
-#define RTW_IEEE80211_STYPE_CFACKPOLL  0x0070
-#define RTW_IEEE80211_STYPE_QOS_DATA   0x0080
-#define RTW_IEEE80211_STYPE_QOS_DATA_CFACK     0x0090
-#define RTW_IEEE80211_STYPE_QOS_DATA_CFPOLL    0x00A0
-#define RTW_IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0
-#define RTW_IEEE80211_STYPE_QOS_NULLFUNC       0x00C0
-#define RTW_IEEE80211_STYPE_QOS_CFACK          0x00D0
-#define RTW_IEEE80211_STYPE_QOS_CFPOLL         0x00E0
-#define RTW_IEEE80211_STYPE_QOS_CFACKPOLL      0x00F0
-
-/* sequence control field */
-#define RTW_IEEE80211_SCTL_FRAG        0x000F
-#define RTW_IEEE80211_SCTL_SEQ 0xFFF0
-
-#define RTW_ERP_INFO_NON_ERP_PRESENT BIT(0)
-#define RTW_ERP_INFO_USE_PROTECTION BIT(1)
-#define RTW_ERP_INFO_BARKER_PREAMBLE_MODE BIT(2)
-
-/* QoS, QOS */
-#define NORMAL_ACK                     0
-#define NO_ACK                         1
-#define NON_EXPLICIT_ACK               2
-#define BLOCK_ACK                      3
-
-#ifndef ETH_P_PAE
-#define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */
-#endif /* ETH_P_PAE */
-
-#define ETH_P_PREAUTH 0x88C7 /* IEEE 802.11i pre-authentication */
-
-#define ETH_P_ECONET   0x0018
-
-#ifndef ETH_P_80211_RAW
-#define ETH_P_80211_RAW (ETH_P_ECONET + 1)
-#endif
-
-/* IEEE 802.11 defines */
-
-#define P80211_OUI_LEN 3
-
-struct ieee80211_snap_hdr {
-       u8    dsap;   /* always 0xAA */
-       u8    ssap;   /* always 0xAA */
-       u8    ctrl;   /* always 0x03 */
-       u8    oui[P80211_OUI_LEN];    /* organizational universal id */
-} __packed;
-
-#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr)
-
-#define WLAN_FC_GET_TYPE(fc) ((fc) & RTW_IEEE80211_FCTL_FTYPE)
-#define WLAN_FC_GET_STYPE(fc) ((fc) & RTW_IEEE80211_FCTL_STYPE)
-
-#define WLAN_QC_GET_TID(qc) ((qc) & 0x0f)
-
-#define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTW_IEEE80211_SCTL_FRAG)
-#define WLAN_GET_SEQ_SEQ(seq)  ((seq) & RTW_IEEE80211_SCTL_SEQ)
-
-/* Authentication algorithms */
-#define WLAN_AUTH_OPEN 0
-#define WLAN_AUTH_SHARED_KEY 1
-
-#define WLAN_AUTH_CHALLENGE_LEN 128
-
-#define WLAN_CAPABILITY_BSS (1<<0)
-#define WLAN_CAPABILITY_IBSS (1<<1)
-#define WLAN_CAPABILITY_CF_POLLABLE (1<<2)
-#define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3)
-#define WLAN_CAPABILITY_PRIVACY (1<<4)
-#define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5)
-#define WLAN_CAPABILITY_PBCC (1<<6)
-#define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7)
-#define WLAN_CAPABILITY_SHORT_SLOT (1<<10)
-
-/* Status codes */
-#define WLAN_STATUS_SUCCESS 0
-#define WLAN_STATUS_UNSPECIFIED_FAILURE 1
-#define WLAN_STATUS_CAPS_UNSUPPORTED 10
-#define WLAN_STATUS_REASSOC_NO_ASSOC 11
-#define WLAN_STATUS_ASSOC_DENIED_UNSPEC 12
-#define WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG 13
-#define WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION 14
-#define WLAN_STATUS_CHALLENGE_FAIL 15
-#define WLAN_STATUS_AUTH_TIMEOUT 16
-#define WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA 17
-#define WLAN_STATUS_ASSOC_DENIED_RATES 18
-/* 802.11b */
-#define WLAN_STATUS_ASSOC_DENIED_NOSHORT 19
-#define WLAN_STATUS_ASSOC_DENIED_NOPBCC 20
-#define WLAN_STATUS_ASSOC_DENIED_NOAGILITY 21
-
-/* Reason codes */
-#define WLAN_REASON_UNSPECIFIED 1
-#define WLAN_REASON_PREV_AUTH_NOT_VALID 2
-#define WLAN_REASON_DEAUTH_LEAVING 3
-#define WLAN_REASON_DISASSOC_DUE_TO_INACTIVITY 4
-#define WLAN_REASON_DISASSOC_AP_BUSY 5
-#define WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA 6
-#define WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA 7
-#define WLAN_REASON_DISASSOC_STA_HAS_LEFT 8
-#define WLAN_REASON_STA_REQ_ASSOC_WITHOUT_AUTH 9
-#define WLAN_REASON_JOIN_WRONG_CHANNEL       65534
-#define WLAN_REASON_EXPIRATION_CHK 65535
-
-/* Information Element IDs */
-#define WLAN_EID_SSID 0
-#define WLAN_EID_SUPP_RATES 1
-#define WLAN_EID_FH_PARAMS 2
-#define WLAN_EID_DS_PARAMS 3
-#define WLAN_EID_CF_PARAMS 4
-#define WLAN_EID_TIM 5
-#define WLAN_EID_IBSS_PARAMS 6
-#define WLAN_EID_CHALLENGE 16
-/* EIDs defined by IEEE 802.11h - START */
-#define WLAN_EID_PWR_CONSTRAINT 32
-#define WLAN_EID_PWR_CAPABILITY 33
-#define WLAN_EID_TPC_REQUEST 34
-#define WLAN_EID_TPC_REPORT 35
-#define WLAN_EID_SUPPORTED_CHANNELS 36
-#define WLAN_EID_CHANNEL_SWITCH 37
-#define WLAN_EID_MEASURE_REQUEST 38
-#define WLAN_EID_MEASURE_REPORT 39
-#define WLAN_EID_QUITE 40
-#define WLAN_EID_IBSS_DFS 41
-/* EIDs defined by IEEE 802.11h - END */
-#define WLAN_EID_ERP_INFO 42
-#define WLAN_EID_HT_CAP 45
-#define WLAN_EID_RSN 48
-#define WLAN_EID_EXT_SUPP_RATES 50
-#define WLAN_EID_MOBILITY_DOMAIN 54
-#define WLAN_EID_FAST_BSS_TRANSITION 55
-#define WLAN_EID_TIMEOUT_INTERVAL 56
-#define WLAN_EID_RIC_DATA 57
-#define WLAN_EID_HT_OPERATION 61
-#define WLAN_EID_SECONDARY_CHANNEL_OFFSET 62
-#define WLAN_EID_20_40_BSS_COEXISTENCE 72
-#define WLAN_EID_20_40_BSS_INTOLERANT 73
-#define WLAN_EID_OVERLAPPING_BSS_SCAN_PARAMS 74
-#define WLAN_EID_MMIE 76
-#define WLAN_EID_VENDOR_SPECIFIC 221
-#define WLAN_EID_GENERIC (WLAN_EID_VENDOR_SPECIFIC)
-
-#define IEEE80211_MGMT_HDR_LEN 24
-#define IEEE80211_DATA_HDR3_LEN 24
-#define IEEE80211_DATA_HDR4_LEN 30
-
-#define IEEE80211_STATMASK_SIGNAL (1<<0)
-#define IEEE80211_STATMASK_RSSI (1<<1)
-#define IEEE80211_STATMASK_NOISE (1<<2)
-#define IEEE80211_STATMASK_RATE (1<<3)
-#define IEEE80211_STATMASK_WEMASK 0x7
-
-#define IEEE80211_CCK_MODULATION    (1<<0)
-#define IEEE80211_OFDM_MODULATION   (1<<1)
-
-#define IEEE80211_24GHZ_BAND     (1<<0)
-#define IEEE80211_52GHZ_BAND     (1<<1)
-
-#define IEEE80211_CCK_RATE_LEN                 4
-#define IEEE80211_NUM_OFDM_RATESLEN    8
-
-#define IEEE80211_CCK_RATE_1MB                 0x02
-#define IEEE80211_CCK_RATE_2MB                 0x04
-#define IEEE80211_CCK_RATE_5MB                 0x0B
-#define IEEE80211_CCK_RATE_11MB                        0x16
-#define IEEE80211_OFDM_RATE_LEN                        8
-#define IEEE80211_OFDM_RATE_6MB                        0x0C
-#define IEEE80211_OFDM_RATE_9MB                        0x12
-#define IEEE80211_OFDM_RATE_12MB               0x18
-#define IEEE80211_OFDM_RATE_18MB               0x24
-#define IEEE80211_OFDM_RATE_24MB               0x30
-#define IEEE80211_OFDM_RATE_36MB               0x48
-#define IEEE80211_OFDM_RATE_48MB               0x60
-#define IEEE80211_OFDM_RATE_54MB               0x6C
-#define IEEE80211_BASIC_RATE_MASK              0x80
-
-#define IEEE80211_CCK_RATE_1MB_MASK            (1<<0)
-#define IEEE80211_CCK_RATE_2MB_MASK            (1<<1)
-#define IEEE80211_CCK_RATE_5MB_MASK            (1<<2)
-#define IEEE80211_CCK_RATE_11MB_MASK           (1<<3)
-#define IEEE80211_OFDM_RATE_6MB_MASK           (1<<4)
-#define IEEE80211_OFDM_RATE_9MB_MASK           (1<<5)
-#define IEEE80211_OFDM_RATE_12MB_MASK          (1<<6)
-#define IEEE80211_OFDM_RATE_18MB_MASK          (1<<7)
-#define IEEE80211_OFDM_RATE_24MB_MASK          (1<<8)
-#define IEEE80211_OFDM_RATE_36MB_MASK          (1<<9)
-#define IEEE80211_OFDM_RATE_48MB_MASK          (1<<10)
-#define IEEE80211_OFDM_RATE_54MB_MASK          (1<<11)
-
-#define IEEE80211_CCK_RATES_MASK               0x0000000F
-#define IEEE80211_CCK_BASIC_RATES_MASK (IEEE80211_CCK_RATE_1MB_MASK | \
-       IEEE80211_CCK_RATE_2MB_MASK)
-#define IEEE80211_CCK_DEFAULT_RATES_MASK                               \
-       (IEEE80211_CCK_BASIC_RATES_MASK |                               \
-       IEEE80211_CCK_RATE_5MB_MASK |                                   \
-       IEEE80211_CCK_RATE_11MB_MASK)
-
-#define IEEE80211_OFDM_RATES_MASK              0x00000FF0
-#define IEEE80211_OFDM_BASIC_RATES_MASK        (IEEE80211_OFDM_RATE_6MB_MASK | \
-       IEEE80211_OFDM_RATE_12MB_MASK |                                 \
-       IEEE80211_OFDM_RATE_24MB_MASK)
-#define IEEE80211_OFDM_DEFAULT_RATES_MASK                              \
-       (IEEE80211_OFDM_BASIC_RATES_MASK |                              \
-       IEEE80211_OFDM_RATE_9MB_MASK  |                                 \
-       IEEE80211_OFDM_RATE_18MB_MASK |                                 \
-       IEEE80211_OFDM_RATE_36MB_MASK |                                 \
-       IEEE80211_OFDM_RATE_48MB_MASK |                                 \
-       IEEE80211_OFDM_RATE_54MB_MASK)
-#define IEEE80211_DEFAULT_RATES_MASK                                   \
-       (IEEE80211_OFDM_DEFAULT_RATES_MASK |                            \
-        IEEE80211_CCK_DEFAULT_RATES_MASK)
-
-#define IEEE80211_NUM_OFDM_RATES       8
-#define IEEE80211_NUM_CCK_RATES                4
-#define IEEE80211_OFDM_SHIFT_MASK_A    4
-
-/* IEEE 802.11 requires that STA supports concurrent reception of at least
- * three fragmented frames. This define can be increased to support more
- * concurrent frames, but it should be noted that each entry can consume about
- * 2 kB of RAM and increasing cache size will slow down frame reassembly. */
-#define IEEE80211_FRAG_CACHE_LEN 4
-
-#define SEC_KEY_1      (1<<0)
-#define SEC_KEY_2      (1<<1)
-#define SEC_KEY_3      (1<<2)
-#define SEC_KEY_4      (1<<3)
-#define SEC_ACTIVE_KEY  (1<<4)
-#define SEC_AUTH_MODE   (1<<5)
-#define SEC_UNICAST_GROUP (1<<6)
-#define SEC_LEVEL      (1<<7)
-#define SEC_ENABLED     (1<<8)
-
-#define SEC_LEVEL_0      0 /* None */
-#define SEC_LEVEL_1      1 /* WEP 40 and 104 bit */
-#define SEC_LEVEL_2      2 /* Level 1 + TKIP */
-#define SEC_LEVEL_2_CKIP 3 /* Level 1 + CKIP */
-#define SEC_LEVEL_3      4 /* Level 2 + CCMP */
-
-#define WEP_KEYS 4
-#define WEP_KEY_LEN 13
-
-/*
-
- 802.11 data frame from AP
-
-      ,-------------------------------------------------------------------.
-Bytes |  2   |  2   |    6    |    6    |    6    |  2   | 0..2312 |   4  |
-      |------|------|---------|---------|---------|------|---------|------|
-Desc. | ctrl | dura |  DA/RA  |   TA    |    SA   | Sequ |  frame  |  fcs |
-      |      | tion | (BSSID) |         |       | ence |  data   |      |
-      `-------------------------------------------------------------------'
-
-Total: 28-2340 bytes
-
-*/
-
-#define BEACON_PROBE_SSID_ID_POSITION 12
-
-/* Management Frame Information Element Types */
-#define MFIE_TYPE_SSID         0
-#define MFIE_TYPE_RATES                1
-#define MFIE_TYPE_FH_SET       2
-#define MFIE_TYPE_DS_SET       3
-#define MFIE_TYPE_CF_SET       4
-#define MFIE_TYPE_TIM          5
-#define MFIE_TYPE_IBSS_SET     6
-#define MFIE_TYPE_CHALLENGE    16
-#define MFIE_TYPE_ERP          42
-#define MFIE_TYPE_RSN          48
-#define MFIE_TYPE_RATES_EX     50
-#define MFIE_TYPE_GENERIC      221
-
-/*
- * These are the data types that can make up management packets
- *
-       u16 auth_algorithm;
-       u16 auth_sequence;
-       u16 beacon_interval;
-       u16 capability;
-       u8 current_ap[ETH_ALEN];
-       u16 listen_interval;
-       struct {
-               u16 association_id:14, reserved:2;
-       } __packed;
-       u32 time_stamp[2];
-       u16 reason;
-       u16 status;
-*/
-
-#define IEEE80211_DEFAULT_TX_ESSID "Penguin"
-#define IEEE80211_DEFAULT_BASIC_RATE 10
-
-/* SWEEP TABLE ENTRIES NUMBER*/
-#define MAX_SWEEP_TAB_ENTRIES            42
-#define MAX_SWEEP_TAB_ENTRIES_PER_PACKET  7
-/* MAX_RATES_LENGTH needs to be 12.  The spec says 8, and many APs
- * only use 8, and then use extended rates for the remaining supported
- * rates.  Other APs, however, stick all of their supported rates on the
- * main rates information element... */
-#define MAX_RATES_LENGTH               ((u8)12)
-#define MAX_RATES_EX_LENGTH            ((u8)16)
-#define MAX_NETWORK_COUNT              128
-#define MAX_CHANNEL_NUMBER             161
-#define IEEE80211_SOFTMAC_SCAN_TIME    400
-/* HZ / 2) */
-#define IEEE80211_SOFTMAC_ASSOC_RETRY_TIME (HZ * 2)
-
-#define CRC_LENGTH              4U
-
-#define MAX_WPA_IE_LEN (256)
-#define MAX_WPS_IE_LEN (512)
-#define MAX_P2P_IE_LEN (256)
-#define MAX_WFD_IE_LEN (128)
-
-#define NETWORK_EMPTY_ESSID (1<<0)
-#define NETWORK_HAS_OFDM    (1<<1)
-#define NETWORK_HAS_CCK     (1<<2)
-
-#define IEEE80211_DTIM_MBCAST 4
-#define IEEE80211_DTIM_UCAST 2
-#define IEEE80211_DTIM_VALID 1
-#define IEEE80211_DTIM_INVALID 0
-
-#define IEEE80211_PS_DISABLED 0
-#define IEEE80211_PS_UNICAST IEEE80211_DTIM_UCAST
-#define IEEE80211_PS_MBCAST IEEE80211_DTIM_MBCAST
-#define IW_ESSID_MAX_SIZE 32
-/*
-join_res:
--1: authentication fail
--2: association fail
-> 0: TID
-*/
-
-#define DEFAULT_MAX_SCAN_AGE (15 * HZ)
-#define DEFAULT_FTS 2346
-
-static inline int is_multicast_mac_addr(const u8 *addr)
-{
-       return ((addr[0] != 0xff) && (0x01 & addr[0]));
-}
-
-static inline int is_broadcast_mac_addr(const u8 *addr)
-{
-       return (addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) &&
-              (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff);
-}
-
-#define CFG_IEEE80211_RESERVE_FCS (1<<0)
-#define CFG_IEEE80211_COMPUTE_FCS (1<<1)
-
-#define MAXTID 16
-
-/* Action category code */
-enum rtw_ieee80211_category {
-       RTW_WLAN_CATEGORY_P2P = 0x7f,/* P2P action frames */
-};
-
-/* SPECTRUM_MGMT action code */
-enum rtw_ieee80211_spectrum_mgmt_actioncode {
-       RTW_WLAN_ACTION_SPCT_MSR_REQ = 0,
-       RTW_WLAN_ACTION_SPCT_MSR_RPRT = 1,
-       RTW_WLAN_ACTION_SPCT_TPC_REQ = 2,
-       RTW_WLAN_ACTION_SPCT_TPC_RPRT = 3,
-       RTW_WLAN_ACTION_SPCT_CHL_SWITCH = 4,
-       RTW_WLAN_ACTION_SPCT_EXT_CHL_SWITCH = 5,
-};
-
-enum _PUBLIC_ACTION {
-       ACT_PUBLIC_BSSCOEXIST = 0, /*  20/40 BSS Coexistence */
-       ACT_PUBLIC_DSE_ENABLE = 1,
-       ACT_PUBLIC_DSE_DEENABLE = 2,
-       ACT_PUBLIC_DSE_REG_LOCATION = 3,
-       ACT_PUBLIC_EXT_CHL_SWITCH = 4,
-       ACT_PUBLIC_DSE_MSR_REQ = 5,
-       ACT_PUBLIC_DSE_MSR_RPRT = 6,
-       ACT_PUBLIC_MP = 7, /*  Measurement Pilot */
-       ACT_PUBLIC_DSE_PWR_CONSTRAINT = 8,
-       ACT_PUBLIC_VENDOR = 9, /*  for WIFI_DIRECT */
-       ACT_PUBLIC_GAS_INITIAL_REQ = 10,
-       ACT_PUBLIC_GAS_INITIAL_RSP = 11,
-       ACT_PUBLIC_GAS_COMEBACK_REQ = 12,
-       ACT_PUBLIC_GAS_COMEBACK_RSP = 13,
-       ACT_PUBLIC_TDLS_DISCOVERY_RSP = 14,
-       ACT_PUBLIC_LOCATION_TRACK = 15,
-       ACT_PUBLIC_MAX
-};
-
-#define OUI_MICROSOFT 0x0050f2 /* Microsoft (also used in Wi-Fi specs)
-                               * 00:50:F2 */
-#define WME_OUI_TYPE 2
-#define WME_OUI_SUBTYPE_INFORMATION_ELEMENT 0
-#define WME_OUI_SUBTYPE_PARAMETER_ELEMENT 1
-#define WME_OUI_SUBTYPE_TSPEC_ELEMENT 2
-#define WME_VERSION 1
-
-#define WME_ACTION_CODE_SETUP_REQUEST 0
-#define WME_ACTION_CODE_SETUP_RESPONSE 1
-#define WME_ACTION_CODE_TEARDOWN 2
-
-#define WME_SETUP_RESPONSE_STATUS_ADMISSION_ACCEPTED 0
-#define WME_SETUP_RESPONSE_STATUS_INVALID_PARAMETERS 1
-#define WME_SETUP_RESPONSE_STATUS_REFUSED 3
-
-#define WME_TSPEC_DIRECTION_UPLINK 0
-#define WME_TSPEC_DIRECTION_DOWNLINK 1
-#define WME_TSPEC_DIRECTION_BI_DIRECTIONAL 3
-
-#define OUI_BROADCOM 0x00904c /* Broadcom (Epigram) */
-
-#define VENDOR_HT_CAPAB_OUI_TYPE 0x33 /* 00-90-4c:0x33 */
-
-/**
- * enum rtw_ieee80211_channel_flags - channel flags
- *
- * Channel flags set by the regulatory control code.
- *
- * @RTW_IEEE80211_CHAN_DISABLED: This channel is disabled.
- * @RTW_IEEE80211_CHAN_PASSIVE_SCAN: Only passive scanning is permitted
- *      on this channel.
- * @RTW_IEEE80211_CHAN_NO_IBSS: IBSS is not allowed on this channel.
- * @RTW_IEEE80211_CHAN_RADAR: Radar detection is required on this channel.
- * @RTW_IEEE80211_CHAN_NO_HT40PLUS: extension channel above this channel
- *      is not permitted.
- * @RTW_IEEE80211_CHAN_NO_HT40MINUS: extension channel below this channel
- *      is not permitted.
- */
-enum rtw_ieee80211_channel_flags {
-       RTW_IEEE80211_CHAN_DISABLED      = 1<<0,
-       RTW_IEEE80211_CHAN_PASSIVE_SCAN     = 1<<1,
-       RTW_IEEE80211_CHAN_NO_IBSS        = 1<<2,
-       RTW_IEEE80211_CHAN_RADAR            = 1<<3,
-       RTW_IEEE80211_CHAN_NO_HT40PLUS      = 1<<4,
-       RTW_IEEE80211_CHAN_NO_HT40MINUS     = 1<<5,
-};
-
-#define RTW_IEEE80211_CHAN_NO_HT40 \
-         (RTW_IEEE80211_CHAN_NO_HT40PLUS | RTW_IEEE80211_CHAN_NO_HT40MINUS)
-
-/* Represent channel details, subset of ieee80211_channel */
-struct rtw_ieee80211_channel {
-       u16 hw_value;
-       u32 flags;
-};
-
-#define CHAN_FMT \
-       "hw_value:%u, " \
-       "flags:0x%08x" \
-
-#define CHAN_ARG(channel) \
-       (channel)->hw_value \
-       , (channel)->flags \
-
-/* Parsed Information Elements */
-struct rtw_ieee802_11_elems {
-       u8 *ssid;
-       u8 ssid_len;
-       u8 *supp_rates;
-       u8 supp_rates_len;
-       u8 *fh_params;
-       u8 fh_params_len;
-       u8 *ds_params;
-       u8 ds_params_len;
-       u8 *cf_params;
-       u8 cf_params_len;
-       u8 *tim;
-       u8 tim_len;
-       u8 *ibss_params;
-       u8 ibss_params_len;
-       u8 *challenge;
-       u8 challenge_len;
-       u8 *erp_info;
-       u8 erp_info_len;
-       u8 *ext_supp_rates;
-       u8 ext_supp_rates_len;
-       u8 *wpa_ie;
-       u8 wpa_ie_len;
-       u8 *rsn_ie;
-       u8 rsn_ie_len;
-       u8 *wme;
-       u8 wme_len;
-       u8 *wme_tspec;
-       u8 wme_tspec_len;
-       u8 *wps_ie;
-       u8 wps_ie_len;
-       u8 *power_cap;
-       u8 power_cap_len;
-       u8 *supp_channels;
-       u8 supp_channels_len;
-       u8 *mdie;
-       u8 mdie_len;
-       u8 *ftie;
-       u8 ftie_len;
-       u8 *timeout_int;
-       u8 timeout_int_len;
-       u8 *ht_capabilities;
-       u8 ht_capabilities_len;
-       u8 *ht_operation;
-       u8 ht_operation_len;
-       u8 *vendor_ht_cap;
-       u8 vendor_ht_cap_len;
-};
-
-enum parse_res {
-       ParseOK = 0,
-       ParseUnknown = 1,
-       ParseFailed = -1
-};
-
-enum parse_res rtw_ieee802_11_parse_elems(u8 *start, uint len,
-                                         struct rtw_ieee802_11_elems *elems,
-                                         int show_errors);
-
-u8 *rtw_set_fixed_ie(unsigned char *pbuf, unsigned int len,
-                    unsigned char *source, unsigned int *frlen);
-u8 *rtw_set_ie(u8 *pbuf, int index, uint len, u8 *source, uint *frlen);
-u8 *rtw_get_ie(u8 *pbuf, int index, int *len, int limit);
-
-void rtw_set_supported_rate(u8 *SupportedRates, uint mode);
-
-unsigned char *rtw_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit);
-unsigned char *rtw_get_wpa2_ie(unsigned char *pie, int *rsn_ie_len, int limit);
-int rtw_get_wpa_cipher_suite(u8 *s);
-int rtw_get_wpa2_cipher_suite(u8 *s);
-int rtw_get_wapi_ie(u8 *in_ie, uint in_len, u8 *wapi_ie, u16 *wapi_len);
-int rtw_parse_wpa_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher,
-                    int *pairwise_cipher, int *is_8021x);
-int rtw_parse_wpa2_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher,
-                     int *pairwise_cipher, int *is_8021x);
-
-int rtw_get_sec_ie(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len,
-                  u8 *wpa_ie, u16 *wpa_len);
-
-u8 rtw_is_wps_ie(u8 *ie_ptr, uint *wps_ielen);
-u8 *rtw_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen);
-u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id,
-                    u8 *buf_attr, u32 *len_attr);
-u8 *rtw_get_wps_attr_content(u8 *wps_ie, uint wps_ielen, u16 target_attr_id,
-                            u8 *buf_content, uint *len_content);
-
-/**
- * for_each_ie - iterate over continuous IEs
- * @ie:
- * @buf:
- * @buf_len:
- */
-#define for_each_ie(ie, buf, buf_len) \
-       for (ie = (void *)buf; (((u8 *)ie) - ((u8 *)buf) + 1) < buf_len;        \
-               ie = (void *)(((u8 *)ie) + *(((u8 *)ie)+1) + 2))
-
-u8 *rtw_get_p2p_ie(u8 *in_ie, int in_len, u8 *p2p_ie, uint *p2p_ielen);
-u8 *rtw_get_p2p_attr(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id,
-                    u8 *buf_attr, u32 *len_attr);
-u8 *rtw_get_p2p_attr_content(u8 *p2p_ie, uint p2p_ielen, u8 target_attr_id,
-                            u8 *buf_content, uint *len_content);
-u32 rtw_set_p2p_attr_content(u8 *pbuf, u8 attr_id, u16 attr_len,
-                            u8 *pdata_attr);
-void rtw_wlan_bssid_ex_remove_p2p_attr(struct wlan_bssid_ex *bss_ex,
-                                      u8 attr_id);
-uint   rtw_get_rateset_len(u8  *rateset);
-
-struct registry_priv;
-int rtw_generate_ie(struct registry_priv *pregistrypriv);
-
-int rtw_get_bit_value_from_ieee_value(u8 val);
-
-bool   rtw_is_cckrates_included(u8 *rate);
-
-bool   rtw_is_cckratesonly_included(u8 *rate);
-
-int rtw_check_network_type(unsigned char *rate, int ratelen, int channel);
-
-void rtw_get_bcn_info(struct wlan_network *pnetwork);
-
-void rtw_macaddr_cfg(u8 *mac_addr);
-
-u16 rtw_mcs_rate(u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, unsigned char *MCS_rate);
-
-#endif /* IEEE80211_H */
diff --git a/drivers/staging/r8188eu/include/odm.h b/drivers/staging/r8188eu/include/odm.h
deleted file mode 100644 (file)
index 8cea166..0000000
+++ /dev/null
@@ -1,416 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef        __HALDMOUTSRC_H__
-#define __HALDMOUTSRC_H__
-
-struct rtw_dig {
-       u8              PreIGValue;
-       u8              CurIGValue;
-       u8              BackupIGValue;
-
-       u8              rx_gain_range_max;
-       u8              rx_gain_range_min;
-
-       u8              CurCCK_CCAThres;
-
-       u8              LargeFAHit;
-       u8              ForbiddenIGI;
-       u32             Recover_cnt;
-
-       u8              DIG_Dynamic_MIN_0;
-       bool            bMediaConnect_0;
-
-       u32             AntDiv_RSSI_max;
-       u32             RSSI_max;
-};
-
-struct rtl_ps {
-       u8              pre_rf_state;
-       u8              cur_rf_state;
-       u8              initialize;
-       u32             reg_874;
-       u32             reg_c70;
-       u32             reg_85c;
-       u32             reg_a74;
-
-};
-
-struct false_alarm_stats {
-       u32     Cnt_Parity_Fail;
-       u32     Cnt_Rate_Illegal;
-       u32     Cnt_Crc8_fail;
-       u32     Cnt_Mcs_fail;
-       u32     Cnt_Ofdm_fail;
-       u32     Cnt_Cck_fail;
-       u32     Cnt_all;
-       u32     Cnt_Fast_Fsync;
-       u32     Cnt_SB_Search_fail;
-       u32     Cnt_OFDM_CCA;
-       u32     Cnt_CCK_CCA;
-       u32     Cnt_CCA_all;
-       u32     Cnt_BW_USC;     /* Gary */
-       u32     Cnt_BW_LSC;     /* Gary */
-};
-
-#define ODM_ASSOCIATE_ENTRY_NUM        32 /*  Max size of AsocEntry[]. */
-
-struct sw_ant_switch {
-       u8      CurAntenna;
-       u8      SWAS_NoLink_State; /* Before link Antenna Switch check */
-       u8      RxIdleAnt;
-};
-
-struct edca_turbo {
-       bool bCurrentTurboEDCA;
-       bool bIsCurRDLState;
-       u32     prv_traffic_idx; /*  edca turbo */
-};
-
-struct odm_rate_adapt {
-       u8      HighRSSIThresh; /*  if RSSI > HighRSSIThresh    => RATRState is DM_RATR_STA_HIGH */
-       u8      LowRSSIThresh;  /*  if RSSI <= LowRSSIThresh    => RATRState is DM_RATR_STA_LOW */
-       u8      RATRState;      /*  Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW */
-       u32     LastRATR;       /*  RATR Register Content */
-};
-
-#define IQK_MAC_REG_NUM                4
-#define IQK_ADDA_REG_NUM       16
-#define IQK_BB_REG_NUM         9
-#define HP_THERMAL_NUM         8
-
-#define AVG_THERMAL_NUM                8
-
-struct odm_phy_dbg_info {
-       /* ODM Write,debug info */
-       s8      RxSNRdB[MAX_PATH_NUM_92CS];
-       u64     NumQryPhyStatus;
-       /* Others */
-       s32     RxEVM[MAX_PATH_NUM_92CS];
-};
-
-struct odm_per_pkt_info {
-       s8      Rate;
-       u8      StationID;
-       bool    bPacketMatchBSSID;
-       bool    bPacketToSelf;
-       bool    bPacketBeacon;
-};
-
-/*  2011/10/20 MH Define Common info enum for all team. */
-
-enum odm_common_info_def {
-       /*  Fixed value: */
-
-       /* HOOK BEFORE REG INIT----------- */
-       ODM_CMNINFO_MP_TEST_CHIP,
-       /* HOOK BEFORE REG INIT-----------  */
-
-/* CALL BY VALUE------------- */
-       ODM_CMNINFO_RF_ANTENNA_TYPE,            /*  u8 */
-/* CALL BY VALUE-------------*/
-};
-
-enum odm_ability_def {
-       /*  BB ODM section BIT 0-15 */
-       ODM_BB_RSSI_MONITOR             = BIT(4),
-       ODM_BB_ANT_DIV                  = BIT(6),
-       ODM_BB_PWR_TRA                  = BIT(8),
-};
-
-#define ODM_ITRF_USB   0x2
-#define ODM_CE         0x04
-
-/*  ODM_CMNINFO_WM_MODE */
-enum odm_wireless_mode {
-       ODM_WM_UNKNOW   = 0x0,
-       ODM_WM_B        = BIT(0),
-       ODM_WM_G        = BIT(1),
-       ODM_WM_N24G     = BIT(3),
-       ODM_WM_AUTO     = BIT(5),
-};
-
-struct odm_ra_info {
-       u8 RateID;
-       u32 RateMask;
-       u32 RAUseRate;
-       u8 RateSGI;
-       u8 RssiStaRA;
-       u8 PreRssiStaRA;
-       u8 SGIEnable;
-       u8 DecisionRate;
-       u8 PreRate;
-       u8 HighestRate;
-       u8 LowestRate;
-       u32 NscUp;
-       u32 NscDown;
-       u16 RTY[5];
-       u32 TOTAL;
-       u16 DROP;
-       u8 Active;
-       u16 RptTime;
-       u8 RAWaitingCounter;
-       u8 RAPendingCounter;
-       u8 PTActive;    /*  on or off */
-       u8 PTTryState;  /*  0 trying state, 1 for decision state */
-       u8 PTStage;     /*  0~6 */
-       u8 PTStopCount; /* Stop PT counter */
-       u8 PTPreRate;   /*  if rate change do PT */
-       u8 PTPreRssi;   /*  if RSSI change 5% do PT */
-       u8 PTModeSS;    /*  decide whitch rate should do PT */
-       u8 RAstage;     /*  StageRA, decide how many times RA will be done
-                        * between PT */
-       u8 PTSmoothFactor;
-};
-
-struct odm_rf_cal {
-       /* for tx power tracking */
-       u32     RegA24; /*  for TempCCK */
-       s32     RegE94;
-       s32     RegE9C;
-       s32     RegEB4;
-       s32     RegEBC;
-
-       u8      TxPowerTrackControl; /* for mp mode, turn off txpwrtracking
-                                     * as default */
-       u8      TM_Trigger;
-       u8      InternalPA5G[2];        /* pathA / pathB */
-
-       u8      ThermalMeter[2];    /* ThermalMeter, index 0 for RFIC0,
-                                    * and 1 for RFIC1 */
-       u8      ThermalValue;
-       u8      ThermalValue_LCK;
-       u8      ThermalValue_IQK;
-       u8      ThermalValue_DPK;
-       u8      ThermalValue_AVG[AVG_THERMAL_NUM];
-       u8      ThermalValue_AVG_index;
-       u8      ThermalValue_RxGain;
-       u8      ThermalValue_Crystal;
-       u8      ThermalValue_DPKstore;
-       u8      ThermalValue_DPKtrack;
-       bool    TxPowerTrackingInProgress;
-       bool    bDPKenable;
-
-       bool    bReloadtxpowerindex;
-       u8      bRfPiEnable;
-
-       u8      CCK_index;
-       u8      OFDM_index;
-       bool bDoneTxpower;
-
-       u8      ThermalValue_HP[HP_THERMAL_NUM];
-       u8      ThermalValue_HP_index;
-
-       u8      Delta_IQK;
-       u8      Delta_LCK;
-
-       /* for IQK */
-       u32     RegC04;
-       u32     Reg874;
-       u32     RegC08;
-       u32     RegB68;
-       u32     RegB6C;
-       u32     Reg870;
-       u32     Reg860;
-       u32     Reg864;
-
-       bool    bIQKInitialized;
-       bool    bAntennaDetected;
-       u32     ADDA_backup[IQK_ADDA_REG_NUM];
-       u32     IQK_MAC_backup[IQK_MAC_REG_NUM];
-       u32     IQK_BB_backup_recover[9];
-       u32     IQK_BB_backup[IQK_BB_REG_NUM];
-
-       /* for APK */
-       u32     APKoutput[2][2]; /* path A/B; output1_1a/output1_2a */
-       u8      bAPKdone;
-       u8      bAPKThermalMeterIgnore;
-       u8      bDPdone;
-       u8      bDPPathAOK;
-       u8      bDPPathBOK;
-};
-
-/*  ODM Dynamic common info value definition */
-
-struct fast_ant_train {
-       u8      antsel_rx_keep_0;
-       u8      antsel_rx_keep_1;
-       u8      antsel_rx_keep_2;
-       u8      antsel_a[ODM_ASSOCIATE_ENTRY_NUM];
-       u8      antsel_b[ODM_ASSOCIATE_ENTRY_NUM];
-       u8      antsel_c[ODM_ASSOCIATE_ENTRY_NUM];
-       u32     MainAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];
-       u32     AuxAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM];
-       u32     MainAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
-       u32     AuxAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
-       u8      RxIdleAnt;
-       bool    bBecomeLinked;
-};
-
-enum ant_div_type {
-       NO_ANTDIV                       = 0xFF,
-       CG_TRX_HW_ANTDIV                = 0x01,
-       CGCS_RX_HW_ANTDIV               = 0x02,
-       FIXED_HW_ANTDIV                 = 0x03,
-       CG_TRX_SMART_ANTDIV             = 0x04,
-};
-
-/* Copy from SD4 defined structure. We use to support PHY DM integration. */
-struct odm_dm_struct {
-       struct adapter *Adapter;        /*  For CE/NIC team */
-
-/*  ODM HANDLE, DRIVER NEEDS NOT TO HOOK------ */
-       bool    bCckHighPower;
-       u8      RFPathRxEnable;         /*  ODM_CMNINFO_RFPATH_ENABLE */
-       u8      ControlChannel;
-/*  ODM HANDLE, DRIVER NEEDS NOT TO HOOK------ */
-
-/* 1  COMMON INFORMATION */
-       /*  Init Value */
-/* HOOK BEFORE REG INIT----------- */
-       /*  ODM Support Ability DIG/RATR/TX_PWR_TRACK/ ï¿½K�K = 1/2/3/�K */
-       u32     SupportAbility;
-
-       u32     BK_SupportAbility;
-       u8      AntDivType;
-/* HOOK BEFORE REG INIT----------- */
-
-       /*  Dynamic Value */
-/*  POINTER REFERENCE----------- */
-       /*  Wireless mode B/G/A/N = BIT(0)/BIT(1)/BIT(2)/BIT(3) */
-       u8      *pWirelessMode; /* ODM_WIRELESS_MODE_E */
-       /*  Secondary channel offset don't_care/below/above = 0/1/2 */
-       u8      *pSecChOffset;
-       /*  BW info 20M/40M/80M = 0/1/2 */
-       enum ht_channel_width *pBandWidth;
-       /*  Central channel location Ch1/Ch2/.... */
-       u8      *pChannel;      /* central channel number */
-
-       /*  Common info for Status */
-       bool    *pbScanInProcess;
-       bool    *pbPowerSaving;
-/*  POINTER REFERENCE----------- */
-       /*  */
-/* CALL BY VALUE------------- */
-       bool    bLinked;
-       u8      RSSI_Min;
-       bool    bIsMPChip;
-       bool    bOneEntryOnly;
-/* CALL BY VALUE------------- */
-
-       /* 2 Define STA info. */
-       /*  _ODM_STA_INFO */
-       /*  For MP, we need to reduce one array pointer for default port.?? */
-       struct sta_info *pODM_StaInfo[ODM_ASSOCIATE_ENTRY_NUM];
-
-       u16     CurrminRptTime;
-       struct odm_ra_info RAInfo[ODM_ASSOCIATE_ENTRY_NUM]; /* Use MacID as
-                       * array index. STA MacID=0,
-                       * VWiFi Client MacID={1, ODM_ASSOCIATE_ENTRY_NUM-1} */
-
-       /*  Latest packet phy info (ODM write) */
-       struct odm_phy_dbg_info PhyDbgInfo;
-
-       /* ODM Structure */
-       struct fast_ant_train DM_FatTable;
-       struct rtw_dig  DM_DigTable;
-       struct rtl_ps   DM_PSTable;
-       struct false_alarm_stats FalseAlmCnt;
-       struct sw_ant_switch DM_SWAT_Table;
-
-       struct edca_turbo DM_EDCA_Table;
-
-       /* PSD */
-       bool    bDMInitialGainEnable;
-
-       struct odm_rate_adapt RateAdaptive;
-
-       struct odm_rf_cal RFCalibrateInfo;
-
-       /*  TX power tracking */
-       u8      BbSwingIdxOfdm;
-       u8      BbSwingIdxOfdmCurrent;
-       u8      BbSwingIdxOfdmBase;
-       bool    BbSwingFlagOfdm;
-       u8      BbSwingIdxCck;
-       u8      BbSwingIdxCckCurrent;
-       u8      BbSwingIdxCckBase;
-       bool    BbSwingFlagCck;
-};
-
-enum odm_bb_config_type {
-    CONFIG_BB_PHY_REG,
-    CONFIG_BB_AGC_TAB,
-    CONFIG_BB_AGC_TAB_2G,
-    CONFIG_BB_PHY_REG_PG,
-};
-
-#define                DM_DIG_MAX_NIC                  0x4e
-#define                DM_DIG_MIN_NIC                  0x1e /* 0x22/0x1c */
-
-#define                DM_DIG_MAX_AP                   0x32
-
-/* vivi 92c&92d has different definition, 20110504 */
-/* this is for 92c */
-#define                DM_DIG_FA_TH0                   0x200/* 0x20 */
-#define                DM_DIG_FA_TH1                   0x300/* 0x100 */
-#define                DM_DIG_FA_TH2                   0x400/* 0x200 */
-
-/* 3=========================================================== */
-/* 3 Rate Adaptive */
-/* 3=========================================================== */
-#define                DM_RATR_STA_INIT                0
-#define                DM_RATR_STA_HIGH                1
-#define                DM_RATR_STA_MIDDLE              2
-#define                DM_RATR_STA_LOW                 3
-
-/* 3=========================================================== */
-/* 3 BB Power Save */
-/* 3=========================================================== */
-
-enum dm_rf {
-       RF_Save = 0,
-       RF_Normal = 1,
-       RF_MAX = 2,
-};
-
-/* 3=========================================================== */
-/* 3 Antenna Diversity */
-/* 3=========================================================== */
-enum dm_swas {
-       Antenna_A = 1,
-       Antenna_B = 2,
-       Antenna_MAX = 3,
-};
-
-/*  Extern Global Variables. */
-#define        OFDM_TABLE_SIZE_92D     43
-#define        CCK_TABLE_SIZE          33
-
-extern u32 OFDMSwingTable[OFDM_TABLE_SIZE_92D];
-extern u8 cck_swing_table[CCK_TABLE_SIZE][8];
-
-/*  check Sta pointer valid or not */
-#define IS_STA_VALID(pSta)             (pSta)
-
-void ODM_Write_DIG(struct odm_dm_struct *pDM_Odm, u8 CurrentIGI);
-void ODM_Write_CCK_CCA_Thres(struct odm_dm_struct *pDM_Odm, u8 CurCCK_CCAThres);
-
-void ODM_RF_Saving(struct odm_dm_struct *pDM_Odm, u8 bForceInNormal);
-
-void ODM_TXPowerTrackingCheck(struct odm_dm_struct *pDM_Odm);
-
-bool ODM_RAStateCheck(struct odm_dm_struct *pDM_Odm, s32 RSSI,
-                     bool bForceUpdate, u8 *pRATRState);
-
-u32 ODM_Get_Rate_Bitmap(struct odm_dm_struct *pDM_Odm, u32 macid,
-                       u32 ra_mask, u8 rssi_level);
-
-void ODM_DMInit(struct odm_dm_struct *pDM_Odm);
-
-void ODM_DMWatchdog(struct odm_dm_struct *pDM_Odm);
-
-void ODM_CmnInfoInit(struct odm_dm_struct *pDM_Odm,
-                    enum odm_common_info_def CmnInfo, u32 Value);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/odm_HWConfig.h b/drivers/staging/r8188eu/include/odm_HWConfig.h
deleted file mode 100644 (file)
index 3f71857..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef        __HALHWOUTSRC_H__
-#define __HALHWOUTSRC_H__
-
-/*  CCK Rates, TxHT = 0 */
-#define DESC92C_RATE1M                         0x00
-#define DESC92C_RATE11M                                0x03
-
-/*  MCS Rates, TxHT = 1 */
-#define DESC92C_RATEMCS8                       0x14
-#define DESC92C_RATEMCS15                      0x1b
-
-/*  structure and define */
-
-struct phy_rx_agc_info {
-       #ifdef __LITTLE_ENDIAN
-               u8      gain:7, trsw:1;
-       #else
-               u8      trsw:1, gain:7;
-       #endif
-};
-
-struct phy_status_rpt {
-       struct phy_rx_agc_info path_agc[3];
-       u8      ch_corr[2];
-       u8      cck_sig_qual_ofdm_pwdb_all;
-       u8      cck_agc_rpt_ofdm_cfosho_a;
-       u8      cck_rpt_b_ofdm_cfosho_b;
-       u8      rsvd_1;/* ch_corr_msb; */
-       u8      noise_power_db_msb;
-       u8      path_cfotail[2];
-       u8      pcts_mask[2];
-       s8      stream_rxevm[2];
-       u8      path_rxsnr[3];
-       u8      noise_power_db_lsb;
-       u8      rsvd_2[3];
-       u8      stream_csi[2];
-       u8      stream_target_csi[2];
-       s8      sig_evm;
-       u8      rsvd_3;
-
-#ifdef __LITTLE_ENDIAN
-       u8      antsel_rx_keep_2:1;     /* ex_intf_flg:1; */
-       u8      sgi_en:1;
-       u8      rxsc:2;
-       u8      idle_long:1;
-       u8      r_ant_train_en:1;
-       u8      ant_sel_b:1;
-       u8      ant_sel:1;
-#else  /*  _BIG_ENDIAN_ */
-       u8      ant_sel:1;
-       u8      ant_sel_b:1;
-       u8      r_ant_train_en:1;
-       u8      idle_long:1;
-       u8      rxsc:2;
-       u8      sgi_en:1;
-       u8      antsel_rx_keep_2:1;     /* ex_intf_flg:1; */
-#endif
-};
-
-void ODM_PhyStatusQuery(struct odm_dm_struct *pDM_Odm,
-                       struct phy_info *pPhyInfo,
-                       u8 *pPhyStatus,
-                       struct odm_per_pkt_info *pPktinfo,
-                       struct adapter *adapt);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/odm_RTL8188E.h b/drivers/staging/r8188eu/include/odm_RTL8188E.h
deleted file mode 100644 (file)
index 4f16af2..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef        __ODM_RTL8188E_H__
-#define __ODM_RTL8188E_H__
-
-#define        MAIN_ANT        0
-#define        AUX_ANT 1
-#define        MAIN_ANT_CG_TRX 1
-#define        AUX_ANT_CG_TRX  0
-#define        MAIN_ANT_CGCS_RX        0
-#define        AUX_ANT_CGCS_RX 1
-
-#define SET_TX_DESC_ANTSEL_A_88E(__ptxdesc, __value)                   \
-       le32p_replace_bits((__le32 *)(__ptxdesc + 8), __value, BIT(24))
-#define SET_TX_DESC_ANTSEL_B_88E(__ptxdesc, __value)                   \
-       le32p_replace_bits((__le32 *)(__ptxdesc + 8), __value, BIT(25))
-#define SET_TX_DESC_ANTSEL_C_88E(__ptxdesc, __value)                   \
-       le32p_replace_bits((__le32 *)(__ptxdesc + 28), __value, BIT(29))
-
-void ODM_AntennaDiversityInit_88E(struct odm_dm_struct *pDM_Odm);
-
-void ODM_AntennaDiversity_88E(struct odm_dm_struct *pDM_Odm);
-
-void ODM_SetTxAntByTxInfo_88E(struct odm_dm_struct *pDM_Odm, u8 *pDesc,
-                             u8 macId);
-
-void ODM_UpdateRxIdleAnt_88E(struct odm_dm_struct *pDM_Odm, u8 Ant);
-
-void ODM_AntselStatistics_88E(struct odm_dm_struct *pDM_Odm, u8        antsel_tr_mux,
-                             u32 MacId, u8 RxPWDBAll);
-
-void odm_FastAntTraining(struct odm_dm_struct *pDM_Odm);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/odm_RegDefine11N.h b/drivers/staging/r8188eu/include/odm_RegDefine11N.h
deleted file mode 100644 (file)
index 82a602b..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef        __ODM_REGDEFINE11N_H__
-#define __ODM_REGDEFINE11N_H__
-
-/* 2 BB REG LIST */
-/* PAGE 8 */
-#define        ODM_REG_TX_ANT_CTRL_11N                 0x80C
-#define        ODM_REG_RX_DEFUALT_A_11N                0x858
-#define        ODM_REG_ANTSEL_CTRL_11N                 0x860
-#define        ODM_REG_RX_ANT_CTRL_11N                 0x864
-#define        ODM_REG_PIN_CTRL_11N                    0x870
-#define        ODM_REG_SC_CNT_11N                      0x8C4
-/* PAGE 9 */
-#define        ODM_REG_ANT_MAPPING1_11N                0x914
-/* PAGE A */
-#define        ODM_REG_CCK_ANTDIV_PARA1_11N            0xA00
-#define        ODM_REG_CCK_CCA_11N                     0xA0A
-#define        ODM_REG_CCK_ANTDIV_PARA2_11N            0xA0C
-#define        ODM_REG_CCK_FA_RST_11N                  0xA2C
-#define        ODM_REG_CCK_FA_MSB_11N                  0xA58
-#define        ODM_REG_CCK_FA_LSB_11N                  0xA5C
-#define        ODM_REG_CCK_CCA_CNT_11N                 0xA60
-#define        ODM_REG_BB_PWR_SAV4_11N                 0xA74
-/* PAGE B */
-#define        ODM_REG_LNA_SWITCH_11N                  0xB2C
-/* PAGE C */
-#define        ODM_REG_OFDM_FA_HOLDC_11N               0xC00
-#define        ODM_REG_OFDM_FA_RSTC_11N                0xC0C
-#define        ODM_REG_IGI_A_11N                       0xC50
-#define        ODM_REG_ANTDIV_PARA1_11N                0xCA4
-#define        ODM_REG_OFDM_FA_TYPE1_11N               0xCF0
-/* PAGE D */
-#define        ODM_REG_OFDM_FA_RSTD_11N                0xD00
-#define        ODM_REG_OFDM_FA_TYPE2_11N               0xDA0
-#define        ODM_REG_OFDM_FA_TYPE3_11N               0xDA4
-#define        ODM_REG_OFDM_FA_TYPE4_11N               0xDA8
-
-/* 2 MAC REG LIST */
-#define        ODM_REG_ANTSEL_PIN_11N                  0x4C
-#define        ODM_REG_RESP_TX_11N                     0x6D8
-
-/* DIG Related */
-#define        ODM_BIT_IGI_11N                         0x0000007F
-
-#endif
diff --git a/drivers/staging/r8188eu/include/osdep_intf.h b/drivers/staging/r8188eu/include/osdep_intf.h
deleted file mode 100644 (file)
index 457fb38..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __OSDEP_INTF_H_
-#define __OSDEP_INTF_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-
-int netdev_open(struct net_device *pnetdev);
-int netdev_close(struct net_device *pnetdev);
-
-u8 rtw_init_drv_sw(struct adapter *padapter);
-void rtw_free_drv_sw(struct adapter *padapter);
-void rtw_reset_drv_sw(struct adapter *padapter);
-
-int rtw_start_drv_threads(struct adapter *padapter);
-void rtw_stop_drv_threads (struct adapter *padapter);
-void rtw_cancel_all_timer(struct adapter *padapter);
-
-int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname);
-struct net_device *rtw_init_netdev(struct adapter *padapter);
-u16 rtw_recv_select_queue(struct sk_buff *skb);
-
-void rtw_ips_dev_unload(struct adapter *padapter);
-
-int rtw_ips_pwr_up(struct adapter *padapter);
-void rtw_ips_pwr_down(struct adapter *padapter);
-
-#endif /* _OSDEP_INTF_H_ */
diff --git a/drivers/staging/r8188eu/include/osdep_service.h b/drivers/staging/r8188eu/include/osdep_service.h
deleted file mode 100644 (file)
index f8ed04f..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __OSDEP_SERVICE_H_
-#define __OSDEP_SERVICE_H_
-
-#include <linux/sched/signal.h>
-
-#define _FAIL          0
-#define _SUCCESS       1
-#define RTW_RX_HANDLED 2
-
-#include <linux/spinlock.h>
-#include <linux/compiler.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/init.h>
-#include <linux/slab.h>
-#include <linux/module.h>
-#include <linux/kref.h>
-#include <linux/netdevice.h>
-#include <linux/skbuff.h>
-#include <linux/circ_buf.h>
-#include <linux/uaccess.h>
-#include <asm/byteorder.h>
-#include <asm/atomic.h>
-#include <linux/io.h>
-#include <linux/semaphore.h>
-#include <linux/sem.h>
-#include <linux/sched.h>
-#include <linux/etherdevice.h>
-#include <linux/wireless.h>
-#include <net/iw_handler.h>
-#include <linux/if_arp.h>
-#include <linux/rtnetlink.h>
-#include <linux/delay.h>
-#include <linux/proc_fs.h>     /*  Necessary because we use the proc fs */
-#include <linux/interrupt.h>   /*  for struct tasklet_struct */
-#include <linux/ip.h>
-#include <linux/kthread.h>
-#include <linux/vmalloc.h>
-
-#include <linux/usb.h>
-#include <linux/usb/ch9.h>
-
-struct __queue {
-       struct  list_head       queue;
-       spinlock_t lock;
-};
-
-static inline struct list_head *get_list_head(struct __queue *queue)
-{
-       return (&(queue->queue));
-}
-
-static inline void _set_timer(struct timer_list *ptimer, u32 delay_time)
-{
-       mod_timer(ptimer, jiffies + msecs_to_jiffies(delay_time));
-}
-
-static inline int rtw_netif_queue_stopped(struct net_device *pnetdev)
-{
-       return  netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 0)) &&
-               netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 1)) &&
-               netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 2)) &&
-               netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 3));
-}
-
-int RTW_STATUS_CODE(int error_code);
-
-void *rtw_malloc2d(int h, int w, int size);
-
-#define rtw_init_queue(q)                                      \
-       do {                                                    \
-               INIT_LIST_HEAD(&((q)->queue));                  \
-               spin_lock_init(&((q)->lock));                   \
-       } while (0)
-
-static inline unsigned char _cancel_timer_ex(struct timer_list *ptimer)
-{
-       return del_timer_sync(ptimer);
-}
-
-static inline void flush_signals_thread(void)
-{
-       if (signal_pending (current))
-               flush_signals(current);
-}
-
-struct rtw_netdev_priv_indicator {
-       void *priv;
-       u32 sizeof_priv;
-};
-struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv,
-                                                   void *old_priv);
-struct net_device *rtw_alloc_etherdev(int sizeof_priv);
-
-#define rtw_netdev_priv(netdev)                                        \
-       (((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv)
-void rtw_free_netdev(struct net_device *netdev);
-
-#define NDEV_FMT "%s"
-#define NDEV_ARG(ndev) ndev->name
-#define ADPT_FMT "%s"
-#define ADPT_ARG(adapter) adapter->pnetdev->name
-#define FUNC_NDEV_FMT "%s(%s)"
-#define FUNC_NDEV_ARG(ndev) __func__, ndev->name
-#define FUNC_ADPT_FMT "%s(%s)"
-#define FUNC_ADPT_ARG(adapter) __func__, adapter->pnetdev->name
-
-#define rtw_signal_process(pid, sig) kill_pid(find_vpid((pid)), (sig), 1)
-
-/* Macros for handling unaligned memory accesses */
-
-#define RTW_GET_BE16(a) ((u16) (((a)[0] << 8) | (a)[1]))
-#define RTW_PUT_BE16(a, val)                   \
-       do {                                    \
-               (a)[0] = ((u16) (val)) >> 8;    \
-               (a)[1] = ((u16) (val)) & 0xff;  \
-       } while (0)
-
-#define RTW_PUT_LE16(a, val)                   \
-       do {                                    \
-               (a)[1] = ((u16) (val)) >> 8;    \
-               (a)[0] = ((u16) (val)) & 0xff;  \
-       } while (0)
-
-#define RTW_GET_BE24(a) ((((u32) (a)[0]) << 16) | (((u32) (a)[1]) << 8) | \
-                        ((u32) (a)[2]))
-
-#define RTW_PUT_BE32(a, val)                                   \
-       do {                                                    \
-               (a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff);   \
-               (a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff);   \
-               (a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff);    \
-               (a)[3] = (u8) (((u32) (val)) & 0xff);           \
-       } while (0)
-
-void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len);
-
-struct rtw_cbuf {
-       u32 write;
-       u32 read;
-       u32 size;
-       void *bufs[];
-};
-
-bool rtw_cbuf_empty(struct rtw_cbuf *cbuf);
-void *rtw_cbuf_pop(struct rtw_cbuf *cbuf);
-struct rtw_cbuf *rtw_cbuf_alloc(u32 size);
-int wifirate2_ratetbl_inx(unsigned char rate);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/rtl8188e_cmd.h b/drivers/staging/r8188eu/include/rtl8188e_cmd.h
deleted file mode 100644 (file)
index c785cf8..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTL8188E_CMD_H__
-#define __RTL8188E_CMD_H__
-
-enum RTL8188E_H2C_CMD_ID {
-       /* Class Common */
-       H2C_COM_RSVD_PAGE               = 0x00,
-       H2C_COM_MEDIA_STATUS_RPT        = 0x01,
-       H2C_COM_SCAN                    = 0x02,
-       H2C_COM_KEEP_ALIVE              = 0x03,
-       H2C_COM_DISCNT_DECISION         = 0x04,
-       H2C_COM_INIT_OFFLOAD            = 0x06,
-       H2C_COM_REMOTE_WAKE_CTL         = 0x07,
-       H2C_COM_AP_OFFLOAD              = 0x08,
-       H2C_COM_BCN_RSVD_PAGE           = 0x09,
-       H2C_COM_PROB_RSP_RSVD_PAGE      = 0x0A,
-
-       /* Class PS */
-       H2C_PS_PWR_MODE                 = 0x20,
-       H2C_PS_TUNE_PARA                = 0x21,
-       H2C_PS_TUNE_PARA_2              = 0x22,
-       H2C_PS_LPS_PARA                 = 0x23,
-       H2C_PS_P2P_OFFLOAD              = 0x24,
-
-       /* Class DM */
-       H2C_DM_MACID_CFG                = 0x40,
-       H2C_DM_TXBF                     = 0x41,
-};
-
-struct cmd_msg_parm {
-       u8 eid; /* element id */
-       u8 sz; /*  sz */
-       u8 buf[6];
-};
-
-struct setpwrmode_parm {
-       u8 Mode;/* 0:Active,1:LPS,2:WMMPS */
-       u8 SmartPS_RLBM;/* LPS= 0:PS_Poll,1:PS_Poll,2:NullData,WMM= 0:PS_Poll,1:NullData */
-       u8 AwakeInterval;       /*  unit: beacon interval */
-       u8 bAllQueueUAPSD;
-       u8 PwrState;/* AllON(0x0c),RFON(0x04),RFOFF(0x00) */
-};
-
-struct H2C_SS_RFOFF_PARAM {
-       u8 ROFOn; /*  1: on, 0:off */
-       u16 gpio_period; /*  unit: 1024 us */
-} __packed;
-
-struct joinbssrpt_parm {
-       u8 OpMode;      /*  RT_MEDIA_STATUS */
-};
-
-struct rsvdpage_loc {
-       u8 LocProbeRsp;
-       u8 LocPsPoll;
-       u8 LocNullData;
-       u8 LocQosNull;
-       u8 LocBTQosNull;
-};
-
-struct P2P_PS_Offload_t {
-       u8 Offload_En:1;
-       u8 role:1; /*  1: Owner, 0: Client */
-       u8 CTWindow_En:1;
-       u8 NoA0_En:1;
-       u8 NoA1_En:1;
-       u8 AllStaSleep:1; /*  Only valid in Owner */
-       u8 discovery:1;
-       u8 rsvd:1;
-};
-
-struct P2P_PS_CTWPeriod_t {
-       u8 CTWPeriod;   /* TU */
-};
-
-/*  host message to firmware cmd */
-void rtl8188e_set_FwPwrMode_cmd(struct adapter *padapter, u8 Mode);
-void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *padapter, u8 mstatus);
-u8 rtl8188e_set_raid_cmd(struct adapter *padapter, u32 mask);
-void rtl8188e_Add_RateATid(struct adapter *padapter, u32 bitmap, u8 arg,
-                          u8 rssi_level);
-
-void rtl8188e_set_p2p_ps_offload_cmd(struct adapter *adapt, u8 p2p_ps_state);
-
-void CheckFwRsvdPageContent(struct adapter *adapt);
-void rtl8188e_set_FwMediaStatus_cmd(struct adapter *adapt, u16 mstatus_rpt);
-
-#endif/* __RTL8188E_CMD_H__ */
diff --git a/drivers/staging/r8188eu/include/rtl8188e_dm.h b/drivers/staging/r8188eu/include/rtl8188e_dm.h
deleted file mode 100644 (file)
index d62cdfc..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTL8188E_DM_H__
-#define __RTL8188E_DM_H__
-
-enum{
-       UP_LINK,
-       DOWN_LINK,
-};
-
-struct dm_priv {
-       u32     InitODMFlag;
-
-       /* Lower Signal threshold for Rate Adaptive */
-       int     EntryMinUndecoratedSmoothedPWDB;
-       int     MinUndecoratedPWDBForDM;
-};
-
-void rtl8188e_init_dm_priv(struct adapter *adapt);
-void rtl8188e_InitHalDm(struct adapter *adapt);
-void rtl8188e_HalDmWatchDog(struct adapter *adapt);
-
-void AntDivCompare8188E(struct adapter *adapt, struct wlan_bssid_ex *dst,
-                       struct wlan_bssid_ex *src);
-u8 AntDivBeforeLink8188E(struct adapter *adapt);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/rtl8188e_hal.h b/drivers/staging/r8188eu/include/rtl8188e_hal.h
deleted file mode 100644 (file)
index feeb37c..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTL8188E_HAL_H__
-#define __RTL8188E_HAL_H__
-
-/* include HAL Related header after HAL Related compiling flags */
-#include "rtl8188e_spec.h"
-#include "Hal8188EPhyReg.h"
-#include "Hal8188EPhyCfg.h"
-#include "rtl8188e_rf.h"
-#include "rtl8188e_dm.h"
-#include "rtl8188e_recv.h"
-#include "rtl8188e_xmit.h"
-#include "rtl8188e_cmd.h"
-#include "rtw_efuse.h"
-#include "odm.h"
-#include "odm_HWConfig.h"
-#include "odm_RegDefine11N.h"
-#include "HalPhyRf_8188e.h"
-#include "Hal8188ERateAdaptive.h"
-#include "HalHWImg8188E_MAC.h"
-#include "HalHWImg8188E_RF.h"
-#include "HalHWImg8188E_BB.h"
-#include "odm_RTL8188E.h"
-
-#define DRVINFO_SZ     4 /*  unit is 8bytes */
-#define PageNum_128(_Len)      (u32)(((_Len)>>7) + ((_Len) & 0x7F ? 1 : 0))
-
-#define DRIVER_EARLY_INT_TIME          0x05
-#define BCN_DMA_ATIME_INT_TIME         0x02
-
-#define MAX_RX_DMA_BUFFER_SIZE_88E                             \
-      0x2400 /* 9k for 88E nornal chip , MaxRxBuff=10k-max(TxReportSize(64*8),
-             * WOLPattern(16*24)) */
-
-#define TX_SELE_LQ                     BIT(1)          /*  Low Queue */
-#define TX_SELE_NQ                     BIT(2)          /*  Normal Queue */
-
-/*  Note: We will divide number of page equally for each queue other
- *  than public queue! */
-/*  22k = 22528 bytes = 176 pages (@page =  128 bytes) */
-/*  must reserved about 7 pages for LPS =>  176-7 = 169 (0xA9) */
-/*  2*BCN / 1*ps-poll / 1*null-data /1*prob_rsp /1*QOS null-data /1*BT QOS
- *  null-data */
-
-#define TX_TOTAL_PAGE_NUMBER_88E               0xA9/*   169 (21632=> 21k) */
-
-#define TX_PAGE_BOUNDARY_88E (TX_TOTAL_PAGE_NUMBER_88E + 1)
-
-#include "HalVerDef.h"
-#include "hal_com.h"
-
-/*     Channel Plan */
-enum ChannelPlan {
-       CHPL_FCC        = 0,
-       CHPL_IC         = 1,
-       CHPL_ETSI       = 2,
-       CHPL_SPA        = 3,
-       CHPL_FRANCE     = 4,
-       CHPL_MKK        = 5,
-       CHPL_MKK1       = 6,
-       CHPL_ISRAEL     = 7,
-       CHPL_TELEC      = 8,
-       CHPL_GLOBAL     = 9,
-       CHPL_WORLD      = 10,
-};
-
-struct txpowerinfo24g {
-       u8 IndexCCK_Base[RF_PATH_MAX][MAX_CHNL_GROUP_24G];
-       u8 IndexBW40_Base[RF_PATH_MAX][MAX_CHNL_GROUP_24G];
-       /* If only one tx, only BW20 and OFDM are used. */
-       s8 CCK_Diff[RF_PATH_MAX][MAX_TX_COUNT];
-       s8 OFDM_Diff[RF_PATH_MAX][MAX_TX_COUNT];
-       s8 BW20_Diff[RF_PATH_MAX][MAX_TX_COUNT];
-       s8 BW40_Diff[RF_PATH_MAX][MAX_TX_COUNT];
-};
-
-#define EFUSE_REAL_CONTENT_LEN         512
-#define AVAILABLE_EFUSE_ADDR(addr)     (addr < EFUSE_REAL_CONTENT_LEN)
-
-#define                EFUSE_REAL_CONTENT_LEN_88E      256
-#define                EFUSE_MAP_LEN_88E               512
-#define                EFUSE_MAX_SECTION_88E           64
-/*  To prevent out of boundary programming case, leave 1byte and program
- *  full section */
-/*  9bytes + 1byt + 5bytes and pre 1byte. */
-/*  For worst case: */
-/*  | 2byte|----8bytes----|1byte|--7bytes--| 92D */
-/*  PG data exclude header, dummy 7 bytes from CP test and reserved 1byte. */
-#define                EFUSE_OOB_PROTECT_BYTES_88E     18
-
-#define EFUSE_PROTECT_BYTES_BANK       16
-
-#define USB_RXAGG_PAGE_COUNT   48
-#define USB_RXAGG_PAGE_TIMEOUT 0x4
-
-struct hal_data_8188e {
-       struct HAL_VERSION      VersionID;
-       /* current WIFI_PHY values */
-       enum ht_channel_width CurrentChannelBW;
-       u8      CurrentChannel;
-       u8      nCur40MhzPrimeSC;/*  Control channel sub-carrier */
-
-       u8      EEPROMRegulatory;
-       u8      EEPROMThermalMeter;
-
-       u8      Index24G_CCK_Base[CHANNEL_MAX_NUMBER];
-       u8      Index24G_BW40_Base[CHANNEL_MAX_NUMBER];
-       /* If only one tx, only BW20 and OFDM are used. */
-       s8      OFDM_24G_Diff[MAX_TX_COUNT];
-       s8      BW20_24G_Diff[MAX_TX_COUNT];
-
-       /*  HT 20<->40 Pwr diff */
-       u8      TxPwrHt20Diff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
-       /*  For HT<->legacy pwr diff */
-       u8      TxPwrLegacyHtDiff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
-       /*  For power group */
-       u8      PwrGroupHT20[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
-       u8      PwrGroupHT40[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
-
-       /*  Read/write are allow for following hardware information variables */
-       u8      pwrGroupCnt;
-       u32     MCSTxPowerLevelOriginalOffset[MAX_PG_GROUP][16];
-
-       u8      CrystalCap;
-
-       u32     AcParam_BE; /* Original parameter for BE, use for EDCA turbo. */
-
-       struct bb_reg_def PHYRegDef;
-
-       u32     RfRegChnlVal;
-
-       /* for host message to fw */
-       u8      LastHMEBoxNum;
-
-       u8      fw_ractrl;
-       u8      RegFwHwTxQCtrl;
-       u8      RegReg542;
-       u8      RegCR_1;
-
-       struct dm_priv  dmpriv;
-       struct odm_dm_struct odmpriv;
-
-       u8      CurAntenna;
-       u8      AntDivCfg;
-       u8      TRxAntDivType;
-
-       u8      out_ep_extra_queues;
-
-       struct P2P_PS_Offload_t p2p_ps_offload;
-
-       /*  Auto FSM to Turn On, include clock, isolation, power control
-        *  for MAC only */
-       u8      bMacPwrCtrlOn;
-};
-
-s32 InitLLTTable(struct adapter *padapter, u8 txpktbuf_bndy);
-
-/*  EFuse */
-void Hal_EfuseParseIDCode88E(struct adapter *padapter, u8 *hwinfo);
-void Hal_ReadTxPowerInfo88E(struct adapter *padapter, u8 *hwinfo,
-                           bool AutoLoadFail);
-
-void rtl8188e_EfuseParseChnlPlan(struct adapter *padapter, u8 *hwinfo,
-                                bool AutoLoadFail);
-void Hal_ReadAntennaDiversity88E(struct adapter *pAdapter, u8 *PROMContent,
-                                bool AutoLoadFail);
-void Hal_ReadThermalMeter_88E(struct adapter *padapter, u8 *PROMContent,
-                             bool AutoloadFail);
-void Hal_EfuseParseXtal_8188E(struct adapter *pAdapter, u8 *hwinfo,
-                             bool AutoLoadFail);
-void Hal_ReadPowerSavingMode88E(struct adapter *pAdapter, u8 *hwinfo,
-                               bool AutoLoadFail);
-
-void rtl8188e_read_chip_version(struct adapter *padapter);
-
-s32 rtl8188e_iol_efuse_patch(struct adapter *padapter);
-void rtw_cancel_all_timer(struct adapter *padapter);
-
-#endif /* __RTL8188E_HAL_H__ */
diff --git a/drivers/staging/r8188eu/include/rtl8188e_recv.h b/drivers/staging/r8188eu/include/rtl8188e_recv.h
deleted file mode 100644 (file)
index dc4f358..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTL8188E_RECV_H__
-#define __RTL8188E_RECV_H__
-
-#define TX_RPT1_PKT_LEN 8
-
-#define NR_PREALLOC_RECV_SKB (8)
-
-#define NR_RECVBUFF (4)
-
-#define MAX_RECVBUF_SZ (15360) /*  15k < 16k */
-
-struct phy_stat {
-       unsigned int phydw0;
-       unsigned int phydw1;
-       unsigned int phydw2;
-       unsigned int phydw3;
-       unsigned int phydw4;
-       unsigned int phydw5;
-       unsigned int phydw6;
-       unsigned int phydw7;
-};
-
-/*  Rx smooth factor */
-#define        Rx_Smooth_Factor (20)
-
-enum rx_packet_type {
-       NORMAL_RX,/* Normal rx packet */
-       TX_REPORT1,/* CCX */
-       TX_REPORT2,/* TX RPT */
-       HIS_REPORT,/*  USB HISR RPT */
-};
-
-void rtl8188eu_recv_tasklet(unsigned long priv);
-void update_recvframe_phyinfo_88e(struct recv_frame *fra, struct phy_stat *phy);
-void update_recvframe_attrib_88e(struct recv_frame *fra, struct recv_stat *stat);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/rtl8188e_rf.h b/drivers/staging/r8188eu/include/rtl8188e_rf.h
deleted file mode 100644 (file)
index 63ac0ac..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTL8188E_RF_H__
-#define __RTL8188E_RF_H__
-
-#define                RF6052_MAX_TX_PWR               0x3F
-#define                RF6052_MAX_REG                  0x3F
-#define                RF6052_MAX_PATH                 2
-
-int phy_RF6052_Config_ParaFile(struct adapter *Adapter);
-void rtl8188e_PHY_RF6052SetBandwidth(struct adapter *Adapter,
-                                    enum ht_channel_width Bandwidth);
-void   rtl8188e_PHY_RF6052SetCckTxPower(struct adapter *Adapter, u8 *level);
-void   rtl8188e_PHY_RF6052SetOFDMTxPower(struct adapter *Adapter, u8 *ofdm,
-                                         u8 *pwrbw20, u8 *pwrbw40, u8 channel);
-
-#endif/* __RTL8188E_RF_H__ */
diff --git a/drivers/staging/r8188eu/include/rtl8188e_spec.h b/drivers/staging/r8188eu/include/rtl8188e_spec.h
deleted file mode 100644 (file)
index 25b3141..0000000
+++ /dev/null
@@ -1,1142 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTL8188E_SPEC_H__
-#define __RTL8188E_SPEC_H__
-
-/*        8192C Register offset definition */
-
-#define                HAL_PS_TIMER_INT_DELAY  50      /*   50 microseconds */
-#define                HAL_92C_NAV_UPPER_UNIT  128     /*  micro-second */
-
-/*  8188E PKT_BUFF_ACCESS_CTRL value */
-#define TXPKT_BUF_SELECT               0x69
-#define RXPKT_BUF_SELECT               0xA5
-#define DISABLE_TRXPKT_BUF_ACCESS      0x0
-
-/*     0x0000h ~ 0x00FFh       System Configuration */
-#define REG_SYS_ISO_CTRL               0x0000
-#define REG_SYS_FUNC_EN                        0x0002
-#define REG_APS_FSMCO                  0x0004
-#define REG_SYS_CLKR                   0x0008
-#define REG_9346CR                     0x000A
-#define REG_EE_VPD                     0x000C
-#define REG_AFE_MISC                   0x0010
-#define REG_SPS0_CTRL                  0x0011
-#define REG_SPS_OCP_CFG                        0x0018
-#define REG_RSV_CTRL                   0x001C
-#define REG_RF_CTRL                    0x001F
-#define REG_LDOA15_CTRL                        0x0020
-#define REG_LDOV12D_CTRL               0x0021
-#define REG_LDOHCI12_CTRL              0x0022
-#define REG_LPLDO_CTRL                 0x0023
-#define REG_AFE_XTAL_CTRL              0x0024
-#define REG_AFE_PLL_CTRL               0x0028
-#define REG_APE_PLL_CTRL_EXT           0x002c
-#define REG_EFUSE_CTRL                 0x0030
-#define REG_EFUSE_TEST                 0x0034
-#define REG_GPIO_MUXCFG                        0x0040
-#define REG_GPIO_IO_SEL                        0x0042
-#define REG_MAC_PINMUX_CFG             0x0043
-#define REG_GPIO_PIN_CTRL              0x0044
-#define REG_GPIO_INTM                  0x0048
-#define REG_LEDCFG0                    0x004C
-#define REG_LEDCFG1                    0x004D
-#define REG_LEDCFG2                    0x004E
-#define REG_LEDCFG3                    0x004F
-#define REG_FSIMR                      0x0050
-#define REG_FSISR                      0x0054
-#define REG_HSIMR                      0x0058
-#define REG_HSISR                      0x005c
-#define REG_GPIO_PIN_CTRL_2            0x0060 /*  RTL8723 WIFI/BT/GPS
-                                * Multi-Function GPIO Pin Control. */
-#define REG_GPIO_IO_SEL_2              0x0062 /*  RTL8723 WIFI/BT/GPS
-                                * Multi-Function GPIO Select. */
-#define REG_BB_PAD_CTRL                        0x0064
-#define REG_MULTI_FUNC_CTRL            0x0068 /*  RTL8723 WIFI/BT/GPS
-                                * Multi-Function control source. */
-#define REG_GPIO_OUTPUT                        0x006c
-#define REG_AFE_XTAL_CTRL_EXT          0x0078 /* RTL8188E */
-#define REG_XCK_OUT_CTRL               0x007c /* RTL8188E */
-#define REG_MCUFWDL                    0x0080
-#define REG_WOL_EVENT                  0x0081 /* RTL8188E */
-#define REG_MCUTSTCFG                  0x0084
-#define REG_HMEBOX_E0                  0x0088
-#define REG_HMEBOX_E1                  0x008A
-#define REG_HMEBOX_E2                  0x008C
-#define REG_HMEBOX_E3                  0x008E
-#define REG_HMEBOX_EXT_0               0x01F0
-#define REG_HMEBOX_EXT_1               0x01F4
-#define REG_HMEBOX_EXT_2               0x01F8
-#define REG_HMEBOX_EXT_3               0x01FC
-#define REG_HIMR_88E                   0x00B0
-#define REG_HISR_88E                   0x00B4
-#define REG_HIMRE_88E                  0x00B8
-#define REG_HISRE_88E                  0x00BC
-#define REG_EFUSE_ACCESS               0x00CF  /*  Efuse access protection
-                                                * for RTL8723 */
-#define REG_BIST_SCAN                  0x00D0
-#define REG_BIST_RPT                   0x00D4
-#define REG_BIST_ROM_RPT               0x00D8
-#define REG_USB_SIE_INTF               0x00E0
-#define REG_PCIE_MIO_INTF              0x00E4
-#define REG_PCIE_MIO_INTD              0x00E8
-#define REG_HPON_FSM                   0x00EC
-#define REG_SYS_CFG                    0x00F0
-#define REG_GPIO_OUTSTS                        0x00F4  /*  For RTL8723 only. */
-#define REG_TYPE_ID                    0x00FC
-
-#define REG_MAC_PHY_CTRL_NORMAL                0x00f8
-
-/*     0x0100h ~ 0x01FFh       MACTOP General Configuration */
-#define REG_CR                         0x0100
-#define REG_PBP                                0x0104
-#define REG_PKT_BUFF_ACCESS_CTRL       0x0106
-#define REG_TRXDMA_CTRL                        0x010C
-#define REG_TRXFF_BNDY                 0x0114
-#define REG_TRXFF_STATUS               0x0118
-#define REG_RXFF_PTR                   0x011C
-/* define REG_HIMR                     0x0120 */
-/* define REG_HISR                     0x0124 */
-#define REG_HIMRE                      0x0128
-#define REG_HISRE                      0x012C
-#define REG_CPWM                       0x012F
-#define REG_FWIMR                      0x0130
-#define REG_FTIMR                      0x0138
-#define REG_FWISR                      0x0134
-#define REG_PKTBUF_DBG_CTRL            0x0140
-#define REG_PKTBUF_DBG_ADDR            (REG_PKTBUF_DBG_CTRL)
-#define REG_RXPKTBUF_DBG               (REG_PKTBUF_DBG_CTRL+2)
-#define REG_TXPKTBUF_DBG               (REG_PKTBUF_DBG_CTRL+3)
-#define REG_RXPKTBUF_CTRL              (REG_PKTBUF_DBG_CTRL+2)
-#define REG_PKTBUF_DBG_DATA_L          0x0144
-#define REG_PKTBUF_DBG_DATA_H          0x0148
-
-#define REG_TC0_CTRL                   0x0150
-#define REG_TC1_CTRL                   0x0154
-#define REG_TC2_CTRL                   0x0158
-#define REG_TC3_CTRL                   0x015C
-#define REG_TC4_CTRL                   0x0160
-#define REG_TCUNIT_BASE                        0x0164
-#define REG_MBIST_START                        0x0174
-#define REG_MBIST_DONE                 0x0178
-#define REG_MBIST_FAIL                 0x017C
-#define REG_32K_CTRL                   0x0194 /* RTL8188E */
-#define REG_C2HEVT_MSG_NORMAL          0x01A0
-#define REG_C2HEVT_CLEAR               0x01AF
-#define REG_MCUTST_1                   0x01c0
-#define REG_FMETHR                     0x01C8
-#define REG_HMETFR                     0x01CC
-#define REG_HMEBOX_0                   0x01D0
-#define REG_HMEBOX_1                   0x01D4
-#define REG_HMEBOX_2                   0x01D8
-#define REG_HMEBOX_3                   0x01DC
-
-#define REG_LLT_INIT                   0x01E0
-
-/*     0x0200h ~ 0x027Fh       TXDMA Configuration */
-#define REG_RQPN                       0x0200
-#define REG_FIFOPAGE                   0x0204
-#define REG_TDECTRL                    0x0208
-#define REG_TXDMA_OFFSET_CHK           0x020C
-#define REG_TXDMA_STATUS               0x0210
-#define REG_RQPN_NPQ                   0x0214
-
-/*     0x0280h ~ 0x02FFh       RXDMA Configuration */
-#define                REG_RXDMA_AGG_PG_TH     0x0280
-#define        REG_RXPKT_NUM                   0x0284
-#define                REG_RXDMA_STATUS        0x0288
-
-/*     0x0300h ~ 0x03FFh       PCIe */
-#define        REG_PCIE_CTRL_REG               0x0300
-#define        REG_INT_MIG                     0x0304  /*  Interrupt Migration */
-#define        REG_BCNQ_DESA                   0x0308  /*  TX Beacon Descr Address */
-#define        REG_HQ_DESA                     0x0310  /*  TX High Queue Descr Addr */
-#define        REG_MGQ_DESA                    0x0318  /*  TX Manage Queue Descr Addr*/
-#define        REG_VOQ_DESA                    0x0320  /*  TX VO Queue Descr Addr */
-#define        REG_VIQ_DESA                    0x0328  /*  TX VI Queue Descr Addr */
-#define        REG_BEQ_DESA                    0x0330  /*  TX BE Queue Descr Addr */
-#define        REG_BKQ_DESA                    0x0338  /*  TX BK Queue Descr Addr */
-#define        REG_RX_DESA                     0x0340  /*  RX Queue Descr Addr */
-#define        REG_MDIO                        0x0354  /*  MDIO for Access PCIE PHY */
-#define        REG_DBG_SEL                     0x0360  /*  Debug Selection Register */
-#define        REG_PCIE_HRPWM                  0x0361  /* PCIe RPWM */
-#define        REG_PCIE_HCPWM                  0x0363  /* PCIe CPWM */
-#define        REG_WATCH_DOG                   0x0368
-
-/*  RTL8723 series ------------------------------ */
-#define        REG_PCIE_HISR                   0x03A0
-
-/*  spec version 11 */
-/*     0x0400h ~ 0x047Fh       Protocol Configuration */
-#define REG_VOQ_INFORMATION            0x0400
-#define REG_VIQ_INFORMATION            0x0404
-#define REG_BEQ_INFORMATION            0x0408
-#define REG_BKQ_INFORMATION            0x040C
-#define REG_MGQ_INFORMATION            0x0410
-#define REG_HGQ_INFORMATION            0x0414
-#define REG_BCNQ_INFORMATION           0x0418
-#define REG_TXPKT_EMPTY                        0x041A
-
-#define REG_CPU_MGQ_INFORMATION                0x041C
-#define REG_FWHW_TXQ_CTRL              0x0420
-#define REG_HWSEQ_CTRL                 0x0423
-#define REG_TXPKTBUF_BCNQ_BDNY         0x0424
-#define REG_TXPKTBUF_MGQ_BDNY          0x0425
-#define REG_LIFETIME_EN                        0x0426
-#define REG_MULTI_BCNQ_OFFSET          0x0427
-#define REG_SPEC_SIFS                  0x0428
-#define REG_RL                         0x042A
-#define REG_DARFRC                     0x0430
-#define REG_RARFRC                     0x0438
-#define REG_RRSR                       0x0440
-#define REG_ARFR0                      0x0444
-#define REG_ARFR1                      0x0448
-#define REG_ARFR2                      0x044C
-#define REG_ARFR3                      0x0450
-#define REG_AGGLEN_LMT                 0x0458
-#define REG_AMPDU_MIN_SPACE            0x045C
-#define REG_TXPKTBUF_WMAC_LBK_BF_HD    0x045D
-#define REG_FAST_EDCA_CTRL             0x0460
-#define REG_RD_RESP_PKT_TH             0x0463
-#define REG_INIRTS_RATE_SEL            0x0480
-/* define REG_INIDATA_RATE_SEL         0x0484 */
-#define REG_POWER_STATUS               0x04A4
-#define REG_POWER_STAGE1               0x04B4
-#define REG_POWER_STAGE2               0x04B8
-#define REG_PKT_VO_VI_LIFE_TIME                0x04C0
-#define REG_PKT_BE_BK_LIFE_TIME                0x04C2
-#define REG_STBC_SETTING               0x04C4
-#define REG_PROT_MODE_CTRL             0x04C8
-#define REG_MAX_AGGR_NUM               0x04CA
-#define REG_RTS_MAX_AGGR_NUM           0x04CB
-#define REG_BAR_MODE_CTRL              0x04CC
-#define REG_RA_TRY_RATE_AGG_LMT                0x04CF
-#define REG_EARLY_MODE_CONTROL         0x4D0
-#define REG_NQOS_SEQ                   0x04DC
-#define REG_QOS_SEQ                    0x04DE
-#define REG_NEED_CPU_HANDLE            0x04E0
-#define REG_PKT_LOSE_RPT               0x04E1
-#define REG_PTCL_ERR_STATUS            0x04E2
-#define REG_TX_RPT_CTRL                        0x04EC
-#define REG_TX_RPT_TIME                        0x04F0  /*  2 byte */
-#define REG_DUMMY                      0x04FC
-
-/*     0x0500h ~ 0x05FFh       EDCA Configuration */
-#define REG_EDCA_VO_PARAM              0x0500
-#define REG_EDCA_VI_PARAM              0x0504
-#define REG_EDCA_BE_PARAM              0x0508
-#define REG_EDCA_BK_PARAM              0x050C
-#define REG_BCNTCFG                    0x0510
-#define REG_PIFS                       0x0512
-#define REG_RDG_PIFS                   0x0513
-#define REG_SIFS_CTX                   0x0514
-#define REG_SIFS_TRX                   0x0516
-#define REG_TSFTR_SYN_OFFSET           0x0518
-#define REG_AGGR_BREAK_TIME            0x051A
-#define REG_SLOT                       0x051B
-#define REG_TX_PTCL_CTRL               0x0520
-#define REG_TXPAUSE                    0x0522
-#define REG_DIS_TXREQ_CLR              0x0523
-#define REG_RD_CTRL                    0x0524
-/*  Format for offset 540h-542h: */
-/*     [3:0]:   TBTT prohibit setup in unit of 32us. The time for HW getting
- *              beacon content before TBTT. */
-/*     [7:4]:   Reserved. */
-/*     [19:8]:  TBTT prohibit hold in unit of 32us. The time for HW holding
- *              to send the beacon packet. */
-/*     [23:20]: Reserved */
-/*  Description: */
-/*                   | */
-/*      |<--Setup--|--Hold------------>| */
-/*     --------------|---------------------- */
-/*                 | */
-/*                TBTT */
-/*  Note: We cannot update beacon content to HW or send any AC packets during
- *       the time between Setup and Hold. */
-#define REG_TBTT_PROHIBIT              0x0540
-#define REG_RD_NAV_NXT                 0x0544
-#define REG_NAV_PROT_LEN               0x0546
-#define REG_BCN_CTRL                   0x0550
-#define REG_BCN_CTRL_1                 0x0551
-#define REG_MBID_NUM                   0x0552
-#define REG_DUAL_TSF_RST               0x0553
-#define REG_BCN_INTERVAL               0x0554
-#define REG_DRVERLYINT                 0x0558
-#define REG_BCNDMATIM                  0x0559
-#define REG_ATIMWND                    0x055A
-#define REG_BCN_MAX_ERR                        0x055D
-#define REG_RXTSF_OFFSET_CCK           0x055E
-#define REG_RXTSF_OFFSET_OFDM          0x055F
-#define REG_TSFTR                      0x0560
-#define REG_TSFTR1                     0x0568
-#define REG_ATIMWND_1                  0x0570
-#define REG_PSTIMER                    0x0580
-#define REG_TIMER0                     0x0584
-#define REG_TIMER1                     0x0588
-#define REG_ACMHWCTRL                  0x05C0
-
-/* define REG_FW_TSF_SYNC_CNT          0x04A0 */
-#define REG_FW_RESET_TSF_CNT_1         0x05FC
-#define REG_FW_RESET_TSF_CNT_0         0x05FD
-#define REG_FW_BCN_DIS_CNT             0x05FE
-
-/*     0x0600h ~ 0x07FFh       WMAC Configuration */
-#define REG_APSD_CTRL                  0x0600
-#define REG_BWOPMODE                   0x0603
-#define REG_TCR                                0x0604
-#define REG_RCR                                0x0608
-#define REG_RX_PKT_LIMIT               0x060C
-#define REG_RX_DLK_TIME                        0x060D
-#define REG_RX_DRVINFO_SZ              0x060F
-
-#define REG_MACID                      0x0610
-#define REG_BSSID                      0x0618
-#define REG_MAR                                0x0620
-#define REG_MBIDCAMCFG                 0x0628
-
-#define REG_USTIME_EDCA                        0x0638
-#define REG_MAC_SPEC_SIFS              0x063A
-
-/*  20100719 Joseph: Hardware register definition change. (HW datasheet v54) */
-/*  [15:8]SIFS_R2T_OFDM, [7:0]SIFS_R2T_CCK */
-#define REG_R2T_SIFS                   0x063C
-/*  [15:8]SIFS_T2T_OFDM, [7:0]SIFS_T2T_CCK */
-#define REG_T2T_SIFS                   0x063E
-#define REG_ACKTO                      0x0640
-#define REG_CTS2TO                     0x0641
-#define REG_EIFS                       0x0642
-
-/* RXERR_RPT */
-#define RXERR_TYPE_OFDM_PPDU           0
-#define RXERR_TYPE_OFDM_false_ALARM    1
-#define RXERR_TYPE_OFDM_MPDU_OK                2
-#define RXERR_TYPE_OFDM_MPDU_FAIL      3
-#define RXERR_TYPE_CCK_PPDU            4
-#define RXERR_TYPE_CCK_false_ALARM     5
-#define RXERR_TYPE_CCK_MPDU_OK         6
-#define RXERR_TYPE_CCK_MPDU_FAIL       7
-#define RXERR_TYPE_HT_PPDU             8
-#define RXERR_TYPE_HT_false_ALARM      9
-#define RXERR_TYPE_HT_MPDU_TOTAL       10
-#define RXERR_TYPE_HT_MPDU_OK          11
-#define RXERR_TYPE_HT_MPDU_FAIL                12
-#define RXERR_TYPE_RX_FULL_DROP                15
-
-#define RXERR_COUNTER_MASK             0xFFFFF
-#define RXERR_RPT_RST                  BIT(27)
-#define _RXERR_RPT_SEL(type)           ((type) << 28)
-
-/*  Note: */
-/*     The NAV upper value is very important to WiFi 11n 5.2.3 NAV test.
- *     The default value is always too small, but the WiFi TestPlan test
- *     by 25,000 microseconds of NAV through sending CTS in the air.
- *     We must update this value greater than 25,000 microseconds to pass
- *     the item. The offset of NAV_UPPER in 8192C Spec is incorrect, and
- *     the offset should be 0x0652. */
-#define REG_NAV_UPPER                  0x0652  /*  unit of 128 */
-
-/* WMA, BA, CCX */
-/* define REG_NAV_CTRL                 0x0650 */
-#define REG_BACAMCMD                   0x0654
-#define REG_BACAMCONTENT               0x0658
-#define REG_LBDLY                      0x0660
-#define REG_FWDLY                      0x0661
-#define REG_RXERR_RPT                  0x0664
-#define REG_WMAC_TRXPTCL_CTL           0x0668
-
-/*  Security */
-#define REG_CAMCMD                     0x0670
-#define REG_CAMWRITE                   0x0674
-#define REG_CAMREAD                    0x0678
-#define REG_CAMDBG                     0x067C
-#define REG_SECCFG                     0x0680
-
-/*  Power */
-#define REG_WOW_CTRL                   0x0690
-#define REG_PS_RX_INFO                 0x0692
-#define REG_UAPSD_TID                  0x0693
-#define REG_WKFMCAM_CMD                        0x0698
-#define REG_WKFMCAM_NUM_88E            0x698
-#define REG_RXFLTMAP0                  0x06A0
-#define REG_RXFLTMAP1                  0x06A2
-#define REG_RXFLTMAP2                  0x06A4
-#define REG_BCN_PSR_RPT                        0x06A8
-#define REG_BT_COEX_TABLE              0x06C0
-
-/*  Hardware Port 2 */
-#define REG_MACID1                     0x0700
-#define REG_BSSID1                     0x0708
-
-/*     0xFE00h ~ 0xFE55h       USB Configuration */
-#define REG_USB_INFO                   0xFE17
-#define REG_USB_SPECIAL_OPTION         0xFE55
-#define REG_USB_DMA_AGG_TO             0xFE5B
-#define REG_USB_AGG_TO                 0xFE5C
-#define REG_USB_AGG_TH                 0xFE5D
-
-/*  For normal chip */
-#define REG_NORMAL_SIE_VID             0xFE60          /*  0xFE60~0xFE61 */
-#define REG_NORMAL_SIE_PID             0xFE62          /*  0xFE62~0xFE63 */
-#define REG_NORMAL_SIE_OPTIONAL                0xFE64
-#define REG_NORMAL_SIE_EP              0xFE65          /*  0xFE65~0xFE67 */
-#define REG_NORMAL_SIE_PHY             0xFE68          /*  0xFE68~0xFE6B */
-#define REG_NORMAL_SIE_OPTIONAL2       0xFE6C
-#define REG_NORMAL_SIE_GPS_EP          0xFE6D  /*  0xFE6D, for RTL8723 only. */
-#define REG_NORMAL_SIE_MAC_ADDR                0xFE70          /*  0xFE70~0xFE75 */
-#define REG_NORMAL_SIE_STRING          0xFE80          /*  0xFE80~0xFEDF */
-
-/*  TODO: use these definition when using REG_xxx naming rule. */
-/*  NOTE: DO NOT Remove these definition. Use later. */
-
-#define        EFUSE_CTRL                      REG_EFUSE_CTRL  /*  E-Fuse Control. */
-#define        EFUSE_TEST                      REG_EFUSE_TEST  /*  E-Fuse Test. */
-#define        MSR                             (REG_CR + 2)    /*  Media Status reg */
-#define        ISR                             REG_HISR_88E
-/*  Timing Sync Function Timer Register. */
-#define        TSFR                            REG_TSFTR
-
-#define                PBP                     REG_PBP
-
-/*  Redifine MACID register, to compatible prior ICs. */
-/*  MAC ID Register, Offset 0x0050-0x0053 */
-#define        IDR0                            REG_MACID
-/*  MAC ID Register, Offset 0x0054-0x0055 */
-#define        IDR4                            (REG_MACID + 4)
-
-/*  9. Security Control Registers      (Offset: ) */
-/* IN 8190 Data Sheet is called CAMcmd */
-#define        RWCAM                           REG_CAMCMD
-/*  Software write CAM input content */
-#define        WCAMI                           REG_CAMWRITE
-/*  Software read/write CAM config */
-#define        RCAMO                           REG_CAMREAD
-#define        CAMDBG                          REG_CAMDBG
-/* Security Configuration Register */
-#define        SECR                            REG_SECCFG
-
-/*  Unused register */
-#define        UnusedRegister                  0x1BF
-#define        DCAM                            UnusedRegister
-#define        PSR                             UnusedRegister
-#define        BBAddr                          UnusedRegister
-#define        PhyDataR                        UnusedRegister
-
-/*  Min Spacing related settings. */
-#define        MAX_MSS_DENSITY_2T              0x13
-#define        MAX_MSS_DENSITY_1T              0x0A
-
-/*        8192C GPIO MUX Configuration Register (offset 0x40, 4 byte) */
-#define        GPIOSEL_GPIO                    0
-#define        GPIOSEL_ENBT                    BIT(5)
-
-/*        8192C GPIO PIN Control Register (offset 0x44, 4 byte) */
-/*  GPIO pins input value */
-#define        GPIO_IN                         REG_GPIO_PIN_CTRL
-/*  GPIO pins output value */
-#define        GPIO_OUT                        (REG_GPIO_PIN_CTRL+1)
-/*  GPIO pins output enable when a bit is set to "1"; otherwise,
- *  input is configured. */
-#define        GPIO_IO_SEL                     (REG_GPIO_PIN_CTRL+2)
-#define        GPIO_MOD                        (REG_GPIO_PIN_CTRL+3)
-
-/* 8723/8188E Host System Interrupt Mask Register (offset 0x58, 32 byte) */
-#define        HSIMR_GPIO12_0_INT_EN           BIT(0)
-#define        HSIMR_SPS_OCP_INT_EN            BIT(5)
-#define        HSIMR_RON_INT_EN                BIT(6)
-#define        HSIMR_PDN_INT_EN                BIT(7)
-#define        HSIMR_GPIO9_INT_EN              BIT(25)
-
-/* 8723/8188E Host System Interrupt Status Register (offset 0x5C, 32 byte) */
-#define        HSISR_GPIO12_0_INT              BIT(0)
-#define        HSISR_SPS_OCP_INT               BIT(5)
-#define        HSISR_RON_INT_EN                BIT(6)
-#define        HSISR_PDNINT                    BIT(7)
-#define        HSISR_GPIO9_INT                 BIT(25)
-
-/*   8192C (MSR) Media Status Register (Offset 0x4C, 8 bits) */
-/*
-Network Type
-00: No link
-01: Link in ad hoc network
-10: Link in infrastructure network
-11: AP mode
-Default: 00b.
-*/
-#define        MSR_NOLINK                      0x00
-#define        MSR_ADHOC                       0x01
-#define        MSR_INFRA                       0x02
-#define        MSR_AP                          0x03
-
-/*  88E Driver Initialization Offload REG_FDHM0(Offset 0x88, 8 bits) */
-/* IOL config for REG_FDHM0(Reg0x88) */
-#define CMD_INIT_LLT                   BIT(0)
-#define CMD_READ_EFUSE_MAP             BIT(1)
-#define CMD_EFUSE_PATCH                        BIT(2)
-#define CMD_IOCONFIG                   BIT(3)
-#define CMD_INIT_LLT_ERR               BIT(4)
-#define CMD_READ_EFUSE_MAP_ERR         BIT(5)
-#define CMD_EFUSE_PATCH_ERR            BIT(6)
-#define CMD_IOCONFIG_ERR               BIT(7)
-
-/*  6. Adaptive Control Registers  (Offset: 0x0160 - 0x01CF) */
-/*  8192C Response Rate Set Register   (offset 0x181, 24bits) */
-#define        RRSR_1M                         BIT(0)
-#define        RRSR_2M                         BIT(1)
-#define        RRSR_5_5M                       BIT(2)
-#define        RRSR_11M                        BIT(3)
-#define        RRSR_6M                         BIT(4)
-#define        RRSR_9M                         BIT(5)
-#define        RRSR_12M                        BIT(6)
-#define        RRSR_18M                        BIT(7)
-#define        RRSR_24M                        BIT(8)
-#define        RRSR_36M                        BIT(9)
-#define        RRSR_48M                        BIT(10)
-#define        RRSR_54M                        BIT(11)
-#define        RRSR_MCS0                       BIT(12)
-#define        RRSR_MCS1                       BIT(13)
-#define        RRSR_MCS2                       BIT(14)
-#define        RRSR_MCS3                       BIT(15)
-#define        RRSR_MCS4                       BIT(16)
-#define        RRSR_MCS5                       BIT(17)
-#define        RRSR_MCS6                       BIT(18)
-#define        RRSR_MCS7                       BIT(19)
-
-/*  8192C Response Rate Set Register   (offset 0x1BF, 8bits) */
-/*  WOL bit information */
-#define        HAL92C_WOL_PTK_UPDATE_EVENT     BIT(0)
-#define        HAL92C_WOL_GTK_UPDATE_EVENT     BIT(1)
-
-/*        8192C BW_OPMODE bits         (Offset 0x203, 8bit) */
-#define        BW_OPMODE_20MHZ                 BIT(2)
-
-#define        CAM_WRITE                       BIT(16)
-#define        CAM_POLLINIG                    BIT(31)
-
-#define        SCR_UseDK                       0x01
-#define        SCR_TxSecEnable                 0x02
-#define        SCR_RxSecEnable                 0x04
-
-/*  10. Power Save Control Registers    (Offset: 0x0260 - 0x02DF) */
-#define        WOW_PMEN                        BIT(0) /*  Power management Enable. */
-#define        WOW_WOMEN                       BIT(1) /*  WoW function on or off. */
-#define        WOW_MAGIC                       BIT(2) /*  Magic packet */
-#define        WOW_UWF                         BIT(3) /*  Unicast Wakeup frame. */
-
-/*  12. Host Interrupt Status Registers         (Offset: 0x0300 - 0x030F) */
-/*        8188 IMR/ISR bits */
-#define        IMR_DISABLED_88E                0x0
-/*  IMR DW0(0x0060-0063) Bit 0-31 */
-#define        IMR_TXCCK_88E                   BIT(30) /*  TXRPT interrupt when CCX bit of the packet is set */
-#define        IMR_PSTIMEOUT_88E               BIT(29) /*  Power Save Time Out Interrupt */
-#define        IMR_GTINT4_88E                  BIT(28) /*  When GTIMER4 expires, this bit is set to 1 */
-#define        IMR_GTINT3_88E                  BIT(27) /*  When GTIMER3 expires, this bit is set to 1 */
-#define        IMR_TBDER_88E                   BIT(26) /*  Transmit Beacon0 Error */
-#define        IMR_TBDOK_88E                   BIT(25) /*  Transmit Beacon0 OK */
-#define        IMR_TSF_BIT32_TOGGLE_88E        BIT(24) /*  TSF Timer BIT32 toggle indication interrupt */
-#define        IMR_BCNDMAINT0_88E              BIT(20) /*  Beacon DMA Interrupt 0 */
-#define        IMR_BCNDERR0_88E                BIT(16) /*  Beacon Queue DMA Error 0 */
-#define        IMR_HSISR_IND_ON_INT_88E        BIT(15) /*  HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1) */
-#define        IMR_BCNDMAINT_E_88E             BIT(14) /*  Beacon DMA Interrupt Extension for Win7 */
-#define        IMR_ATIMEND_88E                 BIT(12) /*  CTWidnow End or ATIM Window End */
-#define        IMR_HISR1_IND_INT_88E           BIT(11) /*  HISR1 Indicator (HISR1 & HIMR1 is true, this bit is set to 1) */
-#define        IMR_C2HCMD_88E                  BIT(10) /*  CPU to Host Command INT Status, Write 1 clear */
-#define        IMR_CPWM2_88E                   BIT(9)  /*  CPU power Mode exchange INT Status, Write 1 clear */
-#define        IMR_CPWM_88E                    BIT(8)  /*  CPU power Mode exchange INT Status, Write 1 clear */
-#define        IMR_HIGHDOK_88E                 BIT(7)  /*  High Queue DMA OK */
-#define        IMR_MGNTDOK_88E                 BIT(6)  /*  Management Queue DMA OK */
-#define        IMR_BKDOK_88E                   BIT(5)  /*  AC_BK DMA OK */
-#define        IMR_BEDOK_88E                   BIT(4)  /*  AC_BE DMA OK */
-#define        IMR_VIDOK_88E                   BIT(3)  /*  AC_VI DMA OK */
-#define        IMR_VODOK_88E                   BIT(2)  /*  AC_VO DMA OK */
-#define        IMR_RDU_88E                     BIT(1)  /*  Rx Descriptor Unavailable */
-#define        IMR_ROK_88E                     BIT(0)  /*  Receive DMA OK */
-
-/*  IMR DW1(0x00B4-00B7) Bit 0-31 */
-#define        IMR_BCNDMAINT7_88E              BIT(27) /*  Beacon DMA Interrupt 7 */
-#define        IMR_BCNDMAINT6_88E              BIT(26) /*  Beacon DMA Interrupt 6 */
-#define        IMR_BCNDMAINT5_88E              BIT(25) /*  Beacon DMA Interrupt 5 */
-#define        IMR_BCNDMAINT4_88E              BIT(24) /*  Beacon DMA Interrupt 4 */
-#define        IMR_BCNDMAINT3_88E              BIT(23) /*  Beacon DMA Interrupt 3 */
-#define        IMR_BCNDMAINT2_88E              BIT(22) /*  Beacon DMA Interrupt 2 */
-#define        IMR_BCNDMAINT1_88E              BIT(21) /*  Beacon DMA Interrupt 1 */
-#define        IMR_BCNDERR7_88E                BIT(20) /*  Beacon DMA Error Int 7 */
-#define        IMR_BCNDERR6_88E                BIT(19) /*  Beacon DMA Error Int 6 */
-#define        IMR_BCNDERR5_88E                BIT(18) /*  Beacon DMA Error Int 5 */
-#define        IMR_BCNDERR4_88E                BIT(17) /*  Beacon DMA Error Int 4 */
-#define        IMR_BCNDERR3_88E                BIT(16) /*  Beacon DMA Error Int 3 */
-#define        IMR_BCNDERR2_88E                BIT(15) /*  Beacon DMA Error Int 2 */
-#define        IMR_BCNDERR1_88E                BIT(14) /*  Beacon DMA Error Int 1 */
-#define        IMR_ATIMEND_E_88E               BIT(13) /*  ATIM Window End Ext for Win7 */
-#define        IMR_TXERR_88E                   BIT(11) /*  Tx Err Flag Int Status, write 1 clear. */
-#define        IMR_RXERR_88E                   BIT(10) /*  Rx Err Flag INT Status, Write 1 clear */
-#define        IMR_TXFOVW_88E                  BIT(9)  /*  Transmit FIFO Overflow */
-#define        IMR_RXFOVW_88E                  BIT(8)  /*  Receive FIFO Overflow */
-
-#define        HAL_NIC_UNPLUG_ISR              0xFFFFFFFF      /*  The value when the NIC is unplugged for PCI. */
-
-/*  8192C EFUSE */
-#define                HWSET_MAX_SIZE                  256
-#define                HWSET_MAX_SIZE_88E              512
-
-/*===================================================================
-=====================================================================
-Here the register defines are for 92C. When the define is as same with 92C,
-we will use the 92C's define for the consistency
-So the following defines for 92C is not entire!!!!!!
-=====================================================================
-=====================================================================*/
-/*
-Based on Datasheet V33---090401
-Register Summary
-Current IOREG MAP
-0x0000h ~ 0x00FFh   System Configuration (256 Bytes)
-0x0100h ~ 0x01FFh   MACTOP General Configuration (256 Bytes)
-0x0200h ~ 0x027Fh   TXDMA Configuration (128 Bytes)
-0x0280h ~ 0x02FFh   RXDMA Configuration (128 Bytes)
-0x0300h ~ 0x03FFh   PCIE EMAC Reserved Region (256 Bytes)
-0x0400h ~ 0x04FFh   Protocol Configuration (256 Bytes)
-0x0500h ~ 0x05FFh   EDCA Configuration (256 Bytes)
-0x0600h ~ 0x07FFh   WMAC Configuration (512 Bytes)
-0x2000h ~ 0x3FFFh   8051 FW Download Region (8196 Bytes)
-*/
-/*              8192C (TXPAUSE) transmission pause (Offset 0x522, 8 bits) */
-/*  Note: */
-/*     The bits of stopping AC(VO/VI/BE/BK) queue in datasheet
- *     RTL8192S/RTL8192C are wrong, */
-/*     the correct arragement is VO - Bit0, VI - Bit1, BE - Bit2,
- *     and BK - Bit3. */
-/*     8723 and 88E may be not correct either in the earlier version. */
-#define                StopBecon                       BIT(6)
-#define                StopHigh                        BIT(5)
-#define                StopMgt                         BIT(4)
-#define                StopBK                          BIT(3)
-#define                StopBE                          BIT(2)
-#define                StopVI                          BIT(1)
-#define                StopVO                          BIT(0)
-
-/*        8192C (RCR) Receive Configuration Register(Offset 0x608, 32 bits) */
-#define        RCR_APPFCS              BIT(31) /* WMAC append FCS after payload */
-#define        RCR_APP_MIC             BIT(30)
-#define        RCR_APP_PHYSTS          BIT(28)
-#define        RCR_APP_ICV             BIT(29)
-#define        RCR_APP_PHYST_RXFF      BIT(28)
-#define        RCR_APP_BA_SSN          BIT(27) /* Accept BA SSN */
-#define        RCR_ENMBID              BIT(24) /* Enable Multiple BssId. */
-#define        RCR_LSIGEN              BIT(23)
-#define        RCR_MFBEN               BIT(22)
-#define        RCR_HTC_LOC_CTRL        BIT(14)   /* MFC<--HTC=1 MFC-->HTC=0 */
-#define        RCR_AMF                 BIT(13) /* Accept management type frame */
-#define        RCR_ACF                 BIT(12) /* Accept control type frame */
-#define        RCR_ADF                 BIT(11) /* Accept data type frame */
-#define        RCR_AICV                BIT(9)  /* Accept ICV error packet */
-#define        RCR_ACRC32              BIT(8)  /* Accept CRC32 error packet */
-#define        RCR_CBSSID_BCN          BIT(7)  /* Accept BSSID match packet
-                                        * (Rx beacon, probe rsp) */
-#define        RCR_CBSSID_DATA         BIT(6)  /* Accept BSSID match (Data)*/
-#define        RCR_CBSSID              RCR_CBSSID_DATA /* Accept BSSID match */
-#define        RCR_APWRMGT             BIT(5)  /* Accept power management pkt*/
-#define        RCR_ADD3                BIT(4)  /* Accept address 3 match pkt */
-#define        RCR_AB                  BIT(3)  /* Accept broadcast packet */
-#define        RCR_AM                  BIT(2)  /* Accept multicast packet */
-#define        RCR_APM                 BIT(1)  /* Accept physical match pkt */
-#define        RCR_AAP                 BIT(0)  /* Accept all unicast packet */
-#define        RCR_MXDMA_OFFSET        8
-#define        RCR_FIFO_OFFSET         13
-
-/*     0xFE00h ~ 0xFE55h       USB Configuration */
-#define REG_USB_INFO                   0xFE17
-#define REG_USB_SPECIAL_OPTION         0xFE55
-#define REG_USB_DMA_AGG_TO             0xFE5B
-#define REG_USB_AGG_TO                 0xFE5C
-#define REG_USB_AGG_TH                 0xFE5D
-
-#define REG_USB_HRPWM                  0xFE58
-#define REG_USB_HCPWM                  0xFE57
-/*        8192C Register Bit and Content definition */
-/*     0x0000h ~ 0x00FFh       System Configuration */
-
-/* 2 SYS_ISO_CTRL */
-#define ISO_MD2PP                      BIT(0)
-#define ISO_UA2USB                     BIT(1)
-#define ISO_UD2CORE                    BIT(2)
-#define ISO_PA2PCIE                    BIT(3)
-#define ISO_PD2CORE                    BIT(4)
-#define ISO_IP2MAC                     BIT(5)
-#define ISO_DIOP                       BIT(6)
-#define ISO_DIOE                       BIT(7)
-#define ISO_EB2CORE                    BIT(8)
-#define ISO_DIOR                       BIT(9)
-#define PWC_EV12V                      BIT(15)
-
-/* 2 SYS_FUNC_EN */
-#define FEN_BBRSTB                     BIT(0)
-#define FEN_BB_GLB_RSTn                        BIT(1)
-#define FEN_USBA                       BIT(2)
-#define FEN_UPLL                       BIT(3)
-#define FEN_USBD                       BIT(4)
-#define FEN_DIO_PCIE                   BIT(5)
-#define FEN_PCIEA                      BIT(6)
-#define FEN_PPLL                       BIT(7)
-#define FEN_PCIED                      BIT(8)
-#define FEN_DIOE                       BIT(9)
-#define FEN_CPUEN                      BIT(10)
-#define FEN_DCORE                      BIT(11)
-#define FEN_ELDR                       BIT(12)
-#define FEN_DIO_RF                     BIT(13)
-#define FEN_HWPDN                      BIT(14)
-#define FEN_MREGEN                     BIT(15)
-
-/* 2 APS_FSMCO */
-#define PFM_LDALL                      BIT(0)
-#define PFM_ALDN                       BIT(1)
-#define PFM_LDKP                       BIT(2)
-#define PFM_WOWL                       BIT(3)
-#define EnPDN                          BIT(4)
-#define PDN_PL                         BIT(5)
-#define APFM_ONMAC                     BIT(8)
-#define APFM_OFF                       BIT(9)
-#define APFM_RSM                       BIT(10)
-#define AFSM_HSUS                      BIT(11)
-#define AFSM_PCIE                      BIT(12)
-#define APDM_MAC                       BIT(13)
-#define APDM_HOST                      BIT(14)
-#define APDM_HPDN                      BIT(15)
-#define RDY_MACON                      BIT(16)
-#define SUS_HOST                       BIT(17)
-#define ROP_ALD                                BIT(20)
-#define ROP_PWR                                BIT(21)
-#define ROP_SPS                                BIT(22)
-#define SOP_MRST                       BIT(25)
-#define SOP_FUSE                       BIT(26)
-#define SOP_ABG                                BIT(27)
-#define SOP_AMB                                BIT(28)
-#define SOP_RCK                                BIT(29)
-#define SOP_A8M                                BIT(30)
-#define XOP_BTCK                       BIT(31)
-
-/* 2 SYS_CLKR */
-#define ANAD16V_EN                     BIT(0)
-#define ANA8M                          BIT(1)
-#define MACSLP                         BIT(4)
-#define LOADER_CLK_EN                  BIT(5)
-
-/* 2 9346CR */
-
-#define                BOOT_FROM_EEPROM        BIT(4)
-#define                EEPROM_EN               BIT(5)
-
-/* 2 SPS0_CTRL */
-
-/* 2 SPS_OCP_CFG */
-
-/* 2 RF_CTRL */
-#define RF_EN                          BIT(0)
-#define RF_RSTB                                BIT(1)
-#define RF_SDMRSTB                     BIT(2)
-
-/* 2 LDOV12D_CTRL */
-#define LDV12_EN                       BIT(0)
-#define LDV12_SDBY                     BIT(1)
-#define LPLDO_HSM                      BIT(2)
-#define LPLDO_LSM_DIS                  BIT(3)
-#define _LDV12_VADJ(x)                 (((x) & 0xF) << 4)
-
-/* 2EFUSE_CTRL */
-#define ALD_EN                         BIT(18)
-#define EF_PD                          BIT(19)
-#define EF_FLAG                                BIT(31)
-
-/* 2 EFUSE_TEST (For RTL8723 partially) */
-#define EF_TRPT                                BIT(7)
-/*  00: Wifi Efuse, 01: BT Efuse0, 10: BT Efuse1, 11: BT Efuse2 */
-#define EF_CELL_SEL                    (BIT(8)|BIT(9))
-#define LDOE25_EN                      BIT(31)
-#define EFUSE_SEL(x)                   (((x) & 0x3) << 8)
-#define EFUSE_SEL_MASK                 0x300
-#define EFUSE_WIFI_SEL_0               0x0
-#define EFUSE_BT_SEL_0                 0x1
-#define EFUSE_BT_SEL_1                 0x2
-#define EFUSE_BT_SEL_2                 0x3
-
-#define EFUSE_ACCESS_ON                        0x69    /*  For RTL8723 only. */
-#define EFUSE_ACCESS_OFF               0x00    /*  For RTL8723 only. */
-
-/* 2 8051FWDL */
-/* 2 MCUFWDL */
-#define MCUFWDL_EN                     BIT(0)
-#define MCUFWDL_RDY                    BIT(1)
-#define FWDL_CHKSUM_RPT                        BIT(2)
-#define MACINI_RDY                     BIT(3)
-#define BBINI_RDY                      BIT(4)
-#define RFINI_RDY                      BIT(5)
-#define WINTINI_RDY                    BIT(6)
-#define RAM_DL_SEL                     BIT(7) /*  1:RAM, 0:ROM */
-#define ROM_DLEN                       BIT(19)
-#define CPRST                          BIT(23)
-
-/* 2 REG_SYS_CFG */
-#define XCLK_VLD                       BIT(0)
-#define ACLK_VLD                       BIT(1)
-#define UCLK_VLD                       BIT(2)
-#define PCLK_VLD                       BIT(3)
-#define PCIRSTB                                BIT(4)
-#define V15_VLD                                BIT(5)
-#define SW_OFFLOAD_EN                  BIT(7)
-#define SIC_IDLE                       BIT(8)
-#define BD_MAC2                                BIT(9)
-#define BD_MAC1                                BIT(10)
-#define IC_MACPHY_MODE                 BIT(11)
-#define CHIP_VER                       (BIT(12)|BIT(13)|BIT(14)|BIT(15))
-#define BT_FUNC                                BIT(16)
-#define VENDOR_ID                      BIT(19)
-#define PAD_HWPD_IDN                   BIT(22)
-#define TRP_VAUX_EN                    BIT(23) /*  RTL ID */
-#define TRP_BT_EN                      BIT(24)
-#define BD_PKG_SEL                     BIT(25)
-#define BD_HCI_SEL                     BIT(26)
-#define TYPE_ID                                BIT(27)
-
-#define CHIP_VER_RTL_MASK              0xF000  /* Bit 12 ~ 15 */
-#define CHIP_VER_RTL_SHIFT             12
-
-/* 2REG_GPIO_OUTSTS (For RTL8723 only) */
-#define        EFS_HCI_SEL                     (BIT(0)|BIT(1))
-#define        PAD_HCI_SEL                     (BIT(2)|BIT(3))
-#define        HCI_SEL                         (BIT(4)|BIT(5))
-#define        PKG_SEL_HCI                     BIT(6)
-#define        FEN_GPS                         BIT(7)
-#define        FEN_BT                          BIT(8)
-#define        FEN_WL                          BIT(9)
-#define        FEN_PCI                         BIT(10)
-#define        FEN_USB                         BIT(11)
-#define        BTRF_HWPDN_N                    BIT(12)
-#define        WLRF_HWPDN_N                    BIT(13)
-#define        PDN_BT_N                        BIT(14)
-#define        PDN_GPS_N                       BIT(15)
-#define        BT_CTL_HWPDN                    BIT(16)
-#define        GPS_CTL_HWPDN                   BIT(17)
-#define        PPHY_SUSB                       BIT(20)
-#define        UPHY_SUSB                       BIT(21)
-#define        PCI_SUSEN                       BIT(22)
-#define        USB_SUSEN                       BIT(23)
-#define        RF_RL_ID                        (BIT(31)|BIT(30)|BIT(29)|BIT(28))
-
-/* 2SYS_CFG */
-#define RTL_ID                         BIT(23) /*  TestChip ID, 1:Test(RLE); 0:MP(RL) */
-
-/*     0x0100h ~ 0x01FFh       MACTOP General Configuration */
-
-/* 2 Function Enable Registers */
-/* 2 CR */
-
-#define HCI_TXDMA_EN                   BIT(0)
-#define HCI_RXDMA_EN                   BIT(1)
-#define TXDMA_EN                       BIT(2)
-#define RXDMA_EN                       BIT(3)
-#define PROTOCOL_EN                    BIT(4)
-#define SCHEDULE_EN                    BIT(5)
-#define MACTXEN                                BIT(6)
-#define MACRXEN                                BIT(7)
-#define ENSWBCN                                BIT(8)
-#define ENSEC                          BIT(9)
-#define CALTMR_EN                      BIT(10) /*  32k CAL TMR enable */
-
-/*  Network type */
-#define _NETTYPE(x)                    (((x) & 0x3) << 16)
-#define MASK_NETTYPE                   0x30000
-#define NT_NO_LINK                     0x0
-#define NT_LINK_AD_HOC                 0x1
-#define NT_LINK_AP                     0x2
-#define NT_AS_AP                       0x3
-
-/* 2 PBP - Page Size Register */
-#define GET_RX_PAGE_SIZE(value)                ((value) & 0xF)
-#define GET_TX_PAGE_SIZE(value)                (((value) & 0xF0) >> 4)
-#define _PSRX_MASK                     0xF
-#define _PSTX_MASK                     0xF0
-#define _PSRX(x)                       (x)
-#define _PSTX(x)                       ((x) << 4)
-
-#define PBP_128                                0x1
-
-/* 2 TX/RXDMA */
-#define RXDMA_ARBBW_EN                 BIT(0)
-#define RXSHFT_EN                      BIT(1)
-#define RXDMA_AGG_EN                   BIT(2)
-#define QS_VO_QUEUE                    BIT(8)
-#define QS_VI_QUEUE                    BIT(9)
-#define QS_BE_QUEUE                    BIT(10)
-#define QS_BK_QUEUE                    BIT(11)
-#define QS_MANAGER_QUEUE               BIT(12)
-#define QS_HIGH_QUEUE                  BIT(13)
-
-#define HQSEL_VOQ                      BIT(0)
-#define HQSEL_VIQ                      BIT(1)
-#define HQSEL_BEQ                      BIT(2)
-#define HQSEL_BKQ                      BIT(3)
-#define HQSEL_MGTQ                     BIT(4)
-#define HQSEL_HIQ                      BIT(5)
-
-/*  For normal driver, 0x10C */
-#define _TXDMA_HIQ_MAP(x)              (((x) & 0x3) << 14)
-#define _TXDMA_MGQ_MAP(x)              (((x) & 0x3) << 12)
-#define _TXDMA_BKQ_MAP(x)              (((x) & 0x3) << 10)
-#define _TXDMA_BEQ_MAP(x)              (((x) & 0x3) << 8)
-#define _TXDMA_VIQ_MAP(x)              (((x) & 0x3) << 6)
-#define _TXDMA_VOQ_MAP(x)              (((x) & 0x3) << 4)
-
-#define QUEUE_LOW                      1
-#define QUEUE_NORMAL                   2
-#define QUEUE_HIGH                     3
-
-/* 2 TRXFF_BNDY */
-
-/* 2 LLT_INIT */
-#define _LLT_NO_ACTIVE                 0x0
-#define _LLT_WRITE_ACCESS              0x1
-#define _LLT_READ_ACCESS               0x2
-
-#define _LLT_INIT_DATA(x)              ((x) & 0xFF)
-#define _LLT_INIT_ADDR(x)              (((x) & 0xFF) << 8)
-#define _LLT_OP(x)                     (((x) & 0x3) << 30)
-#define _LLT_OP_VALUE(x)               (((x) >> 30) & 0x3)
-
-/*     0x0200h ~ 0x027Fh       TXDMA Configuration */
-
-#define NUM_HQ 0x29
-
-#define LD_RQPN                                BIT(31)
-
-/* 2TDECTRL */
-#define BCN_VALID                      BIT(16)
-#define BCN_HEAD(x)                    (((x) & 0xFF) << 8)
-#define        BCN_HEAD_MASK                   0xFF00
-
-/* 2 TDECTL */
-#define BLK_DESC_NUM_SHIFT             4
-#define BLK_DESC_NUM_MASK              0xF
-
-/* 2 TXDMA_OFFSET_CHK */
-#define DROP_DATA_EN                   BIT(9)
-
-/*     0x0280h ~ 0x028Bh       RX DMA Configuration */
-
-/*     REG_RXDMA_CONTROL, 0x0286h */
-
-/* 2 REG_RXPKT_NUM, 0x0284 */
-#define                RXPKT_RELEASE_POLL      BIT(16)
-#define        RXDMA_IDLE                      BIT(17)
-#define        RW_RELEASE_EN                   BIT(18)
-
-/*     0x0400h ~ 0x047Fh       Protocol Configuration */
-/* 2 FWHW_TXQ_CTRL */
-#define EN_AMPDU_RTY_NEW               BIT(7)
-
-/* 2 SPEC SIFS */
-#define _SPEC_SIFS_CCK(x)              ((x) & 0xFF)
-#define _SPEC_SIFS_OFDM(x)             (((x) & 0xFF) << 8)
-
-/* 2 RL */
-#define        RETRY_LIMIT_SHORT_SHIFT         8
-#define        RETRY_LIMIT_LONG_SHIFT          0
-
-/*     0x0500h ~ 0x05FFh       EDCA Configuration */
-
-/* 2 EDCA setting */
-#define AC_PARAM_TXOP_LIMIT_OFFSET     16
-#define AC_PARAM_ECW_MAX_OFFSET                12
-#define AC_PARAM_ECW_MIN_OFFSET                8
-#define AC_PARAM_AIFS_OFFSET           0
-
-#define _LRL(x)                        ((x) & 0x3F)
-#define _SRL(x)                        (((x) & 0x3F) << 8)
-
-/* 2 BCN_CTRL */
-#define EN_MBSSID              BIT(1)
-#define EN_TXBCN_RPT           BIT(2)
-#define EN_BCN_FUNCTION                BIT(3)
-#define DIS_TSF_UPDATE         BIT(3)
-
-/*  The same function but different bit field. */
-#define DIS_TSF_UDT0_NORMAL_CHIP       BIT(4)
-#define DIS_TSF_UDT0_TEST_CHIP BIT(5)
-#define STOP_BCNQ              BIT(6)
-
-/* 2 ACMHWCTRL */
-#define ACMHW_BEQEN            BIT(1)
-#define ACMHW_VIQEN            BIT(2)
-#define ACMHW_VOQEN            BIT(3)
-
-/*     0x0600h ~ 0x07FFh       WMAC Configuration */
-/* 2APSD_CTRL */
-#define APSDOFF                        BIT(6)
-#define APSDOFF_STATUS         BIT(7)
-
-#define RATE_BITMAP_ALL                0xFFFFF
-
-/*  Only use CCK 1M rate for ACK */
-#define RATE_RRSR_CCK_ONLY_1M  0xFFFF1
-
-/* 2 TCR */
-#define TSFRST                 BIT(0)
-#define DIS_GCLK               BIT(1)
-#define PAD_SEL                        BIT(2)
-#define PWR_ST                 BIT(6)
-#define PWRBIT_OW_EN           BIT(7)
-#define ACRC                   BIT(8)
-#define CFENDFORM              BIT(9)
-#define ICV                    BIT(10)
-
-/* 2 RCR */
-#define AAP                    BIT(0)
-#define APM                    BIT(1)
-#define AM                     BIT(2)
-#define AB                     BIT(3)
-#define ADD3                   BIT(4)
-#define APWRMGT                        BIT(5)
-#define CBSSID                 BIT(6)
-#define CBSSID_DATA            BIT(6)
-#define CBSSID_BCN             BIT(7)
-#define ACRC32                 BIT(8)
-#define AICV                   BIT(9)
-#define ADF                    BIT(11)
-#define ACF                    BIT(12)
-#define AMF                    BIT(13)
-#define HTC_LOC_CTRL           BIT(14)
-#define UC_DATA_EN             BIT(16)
-#define BM_DATA_EN             BIT(17)
-#define MFBEN                  BIT(22)
-#define LSIGEN                 BIT(23)
-#define EnMBID                 BIT(24)
-#define APP_BASSN              BIT(27)
-#define APP_PHYSTS             BIT(28)
-#define APP_ICV                        BIT(29)
-#define APP_MIC                        BIT(30)
-#define APP_FCS                        BIT(31)
-
-/* 2 SECCFG */
-#define        SCR_TxUseDK             BIT(0)  /* Force Tx Use Default Key */
-#define        SCR_RxUseDK             BIT(1)  /* Force Rx Use Default Key */
-#define        SCR_TxEncEnable         BIT(2)  /* Enable Tx Encryption */
-#define        SCR_RxDecEnable         BIT(3)  /* Enable Rx Decryption */
-#define        SCR_SKByA2              BIT(4)  /* Search kEY BY A2 */
-#define        SCR_NoSKMC              BIT(5)  /* No Key Search Multicast */
-#define SCR_TXBCUSEDK          BIT(6)  /* Force Tx Bcast pkt Use Default Key */
-#define SCR_RXBCUSEDK          BIT(7)  /* Force Rx Bcast pkt Use Default Key */
-
-/*     0xFE00h ~ 0xFE55h       USB Configuration */
-
-/* 2 USB Information (0xFE17) */
-#define USB_IS_HIGH_SPEED                      0
-#define USB_IS_FULL_SPEED                      1
-#define USB_SPEED_MASK                         BIT(5)
-
-#define USB_NORMAL_SIE_EP_MASK                 0xF
-#define USB_NORMAL_SIE_EP_SHIFT                        4
-
-/* 2 Special Option */
-#define USB_AGG_EN                             BIT(3)
-
-/*  0; Use interrupt endpoint to upload interrupt pkt */
-/*  1; Use bulk endpoint to upload interrupt pkt, */
-#define INT_BULK_SEL                           BIT(4)
-
-/* 2REG_C2HEVT_CLEAR */
-/*  Set by driver and notify FW that the driver has read
- *  the C2H command message */
-#define        C2H_EVT_HOST_CLOSE      0x00
-/*  Set by FW indicating that FW had set the C2H command
- *  message and it's not yet read by driver. */
-#define C2H_EVT_FW_CLOSE       0xFF
-
-/* 2REG_MULTI_FUNC_CTRL(For RTL8723 Only) */
-/*  Enable GPIO[9] as WiFi HW PDn source */
-#define        WL_HWPDN_EN                             BIT(0)
-/*  WiFi HW PDn polarity control */
-#define        WL_HWPDN_SL                             BIT(1)
-/*  WiFi function enable */
-#define        WL_FUNC_EN                              BIT(2)
-/*  Enable GPIO[9] as WiFi RF HW PDn source */
-#define        WL_HWROF_EN                             BIT(3)
-/*  Enable GPIO[11] as BT HW PDn source */
-#define        BT_HWPDN_EN                             BIT(16)
-/*  BT HW PDn polarity control */
-#define        BT_HWPDN_SL                             BIT(17)
-/*  BT function enable */
-#define        BT_FUNC_EN                              BIT(18)
-/*  Enable GPIO[11] as BT/GPS RF HW PDn source */
-#define        BT_HWROF_EN                             BIT(19)
-/*  Enable GPIO[10] as GPS HW PDn source */
-#define        GPS_HWPDN_EN                            BIT(20)
-/*  GPS HW PDn polarity control */
-#define        GPS_HWPDN_SL                            BIT(21)
-/*  GPS function enable */
-#define        GPS_FUNC_EN                             BIT(22)
-
-/* 3 REG_LIFECTRL_CTRL */
-#define        HAL92C_EN_PKT_LIFE_TIME_BK              BIT(3)
-#define        HAL92C_EN_PKT_LIFE_TIME_BE              BIT(2)
-#define        HAL92C_EN_PKT_LIFE_TIME_VI              BIT(1)
-#define        HAL92C_EN_PKT_LIFE_TIME_VO              BIT(0)
-
-#define        HAL92C_MSDU_LIFE_TIME_UNIT              128     /*  in us */
-
-/*  General definitions */
-#define LAST_ENTRY_OF_TX_PKT_BUFFER            176 /*  22k 22528 bytes */
-
-#define POLLING_LLT_THRESHOLD                  20
-#define POLLING_READY_TIMEOUT_COUNT            1000
-/*  GPIO BIT */
-#define        HAL_8192C_HW_GPIO_WPS_BIT               BIT(2)
-
-/*     8192C EEPROM/EFUSE share register definition. */
-
-/*     EEPROM/Efuse PG Offset for 88EE/88EU/88ES */
-#define        EEPROM_TX_PWR_INX_88E                   0x10
-
-#define        EEPROM_ChannelPlan_88E                  0xB8
-#define        EEPROM_XTAL_88E                         0xB9
-#define        EEPROM_THERMAL_METER_88E                0xBA
-#define        EEPROM_IQK_LCK_88E                      0xBB
-
-#define        EEPROM_RF_BOARD_OPTION_88E              0xC1
-#define        EEPROM_RF_FEATURE_OPTION_88E            0xC2
-#define        EEPROM_RF_ANTENNA_OPT_88E               0xC9
-
-/* RTL88EU */
-#define        EEPROM_MAC_ADDR_88EU                    0xD7
-#define EEPROM_USB_OPTIONAL_FUNCTION0          0xD4
-
-/*  RTL88ES */
-#define        EEPROM_MAC_ADDR_88ES                    0x11A
-
-#define EEPROM_Default_CrystalCap_88E          0x20
-#define        EEPROM_Default_ThermalMeter_88E         0x18
-
-/* New EFUSE default value */
-#define                EEPROM_DEFAULT_24G_INDEX        0x2D
-#define                EEPROM_DEFAULT_24G_HT20_DIFF    0X02
-#define                EEPROM_DEFAULT_24G_OFDM_DIFF    0X04
-
-#define                EEPROM_DEFAULT_DIFF             0XFE
-#define        EEPROM_DEFAULT_BOARD_OPTION             0x00
-
-#define EEPROM_CHANNEL_PLAN_FCC                        0x0
-#define EEPROM_CHANNEL_PLAN_IC                 0x1
-#define EEPROM_CHANNEL_PLAN_ETSI               0x2
-#define EEPROM_CHANNEL_PLAN_SPA                        0x3
-#define EEPROM_CHANNEL_PLAN_FRANCE             0x4
-#define EEPROM_CHANNEL_PLAN_MKK                        0x5
-#define EEPROM_CHANNEL_PLAN_MKK1               0x6
-#define EEPROM_CHANNEL_PLAN_ISRAEL             0x7
-#define EEPROM_CHANNEL_PLAN_TELEC              0x8
-#define EEPROM_CHANNEL_PLAN_GLOBAL_DOMA                0x9
-#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_13      0xA
-#define EEPROM_CHANNEL_PLAN_NCC                        0xB
-#define EEPROM_USB_OPTIONAL1                   0xE
-#define EEPROM_CHANNEL_PLAN_BY_HW_MASK         0x80
-
-#define        RTL_EEPROM_ID                   0x8129
-
-#endif /* __RTL8188E_SPEC_H__ */
diff --git a/drivers/staging/r8188eu/include/rtl8188e_xmit.h b/drivers/staging/r8188eu/include/rtl8188e_xmit.h
deleted file mode 100644 (file)
index a023dd7..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTL8188E_XMIT_H__
-#define __RTL8188E_XMIT_H__
-
-#define                MAX_TX_AGG_PACKET_NUMBER        0xFF
-#define QSLT_MGNT                                              0x12
-
-/* For 88e early mode */
-#define SET_EARLYMODE_PKTNUM(__paddr, __value)                 \
-       le32p_replace_bits((__le32 *)__paddr, __value, GENMASK(2, 0))
-#define SET_EARLYMODE_LEN0(__pAddr, __Value)                   \
-       le32p_replace_bits((__le32 *)__paddr, __value, GENMASK(15, 4))
-#define SET_EARLYMODE_LEN1(__paddr, __value)                   \
-       le32p_replace_bits((__le32 *)__paddr, __value, GENMASK(27, 16))
-#define SET_EARLYMODE_LEN2_1(__pdr, __vValue)                  \
-       le32p_replace_bits((__le32 *)__paddr, __value, GENMASK(31, 28))
-#define SET_EARLYMODE_LEN2_2(__paddr, __value)                 \
-       le32p_replace_bits((__le32 *)(__paddr + 4), __value, GENMASK(7, 0))
-#define SET_EARLYMODE_LEN3(__pAddr, __Value)                   \
-       le32p_replace_bits((__le32 *)(__paddr + 4), __value, GENMASK(19, 8))
-#define SET_EARLYMODE_LEN4(__paAddr, __vValue)                 \
-       le32p_replace_bits((__le32 *)(__paddr + 4), __value, GENMASK(31, 20))
-
-/* defined for TX DESC Operation */
-
-#define MAX_TID (15)
-
-/* OFFSET 0 */
-#define OFFSET_SZ      0
-#define OFFSET_SHT     16
-#define BMC            BIT(24)
-#define LSG            BIT(26)
-#define FSG            BIT(27)
-#define OWN            BIT(31)
-
-/* OFFSET 4 */
-#define PKT_OFFSET_SZ          0
-#define QSEL_SHT               8
-#define RATE_ID_SHT            16
-#define NAVUSEHDR              BIT(20)
-#define SEC_TYPE_SHT           22
-#define PKT_OFFSET_SHT         26
-
-/* OFFSET 8 */
-#define AGG_EN                 BIT(12)
-#define AGG_BK                 BIT(16)
-#define AMPDU_DENSITY_SHT      20
-#define ANTSEL_A               BIT(24)
-#define ANTSEL_B               BIT(25)
-#define TX_ANT_CCK_SHT         26
-#define TX_ANTL_SHT            28
-#define TX_ANT_HT_SHT          30
-
-/* OFFSET 12 */
-#define SEQ_SHT                        16
-#define EN_HWSEQ               BIT(31)
-
-/* OFFSET 16 */
-#define QOS                    BIT(6)
-#define        HW_SSN                  BIT(7)
-#define USERATE                        BIT(8)
-#define DISDATAFB              BIT(10)
-#define CTS_2_SELF             BIT(11)
-#define        RTS_EN                  BIT(12)
-#define        HW_RTS_EN               BIT(13)
-#define DATA_SHORT             BIT(24)
-#define PWR_STATUS_SHT         15
-#define DATA_SC_SHT            20
-#define DATA_BW                        BIT(25)
-
-/* OFFSET 20 */
-#define        RTY_LMT_EN              BIT(17)
-
-/* OFFSET 20 */
-#define SGI                    BIT(6)
-#define USB_TXAGG_NUM_SHT      24
-
-#define USB_TXAGG_DESC_NUM     0x6
-
-#define txdesc_set_ccx_sw_88e(txdesc, value) \
-       do { \
-               ((struct txdesc_88e *)(txdesc))->sw1 = (((value)>>8) & 0x0f); \
-               ((struct txdesc_88e *)(txdesc))->sw0 = ((value) & 0xff); \
-       } while (0)
-
-struct txrpt_ccx_88e {
-       /* offset 0 */
-       u8 tag1:1;
-       u8 pkt_num:3;
-       u8 txdma_underflow:1;
-       u8 int_bt:1;
-       u8 int_tri:1;
-       u8 int_ccx:1;
-
-       /* offset 1 */
-       u8 mac_id:6;
-       u8 pkt_ok:1;
-       u8 bmc:1;
-
-       /* offset 2 */
-       u8 retry_cnt:6;
-       u8 lifetime_over:1;
-       u8 retry_over:1;
-
-       /* offset 3 */
-       u8 ccx_qtime0;
-       u8 ccx_qtime1;
-
-       /* offset 5 */
-       u8 final_data_rate;
-
-       /* offset 6 */
-       u8 sw1:4;
-       u8 qsel:4;
-
-       /* offset 7 */
-       u8 sw0;
-};
-
-void rtl8188e_fill_fake_txdesc(struct adapter *padapter, u8 *pDesc,
-                              u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull);
-s32 rtl8188eu_hal_xmit(struct adapter *padapter, struct xmit_frame *frame);
-s32 rtl8188eu_mgnt_xmit(struct adapter *padapter, struct xmit_frame *frame);
-s32 rtl8188eu_xmit_buf_handler(struct adapter *padapter);
-void rtl8188eu_xmit_tasklet(unsigned long priv);
-bool rtl8188eu_xmitframe_complete(struct adapter *padapter);
-
-#endif /* __RTL8188E_XMIT_H__ */
diff --git a/drivers/staging/r8188eu/include/rtw_ap.h b/drivers/staging/r8188eu/include/rtw_ap.h
deleted file mode 100644 (file)
index 89b02c9..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#ifndef __RTW_AP_H_
-#define __RTW_AP_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-
-/* external function */
-void rtw_indicate_sta_assoc_event(struct adapter *padapter,
-                                 struct sta_info *psta);
-void init_mlme_ap_info(struct adapter *padapter);
-void free_mlme_ap_info(struct adapter *padapter);
-void update_beacon(struct adapter *padapter, u8 ie_id,
-                  u8 *oui, u8 tx);
-void add_RATid(struct adapter *padapter, struct sta_info *psta,
-              u8 rssi_level);
-void expire_timeout_chk(struct adapter *padapter);
-void update_sta_info_apmode(struct adapter *padapter, struct sta_info *psta);
-void rtw_ap_restore_network(struct adapter *padapter);
-
-void associated_clients_update(struct adapter *padapter, u8 updated);
-void bss_cap_update_on_sta_join(struct adapter *padapter, struct sta_info *psta);
-u8 bss_cap_update_on_sta_leave(struct adapter *padapter, struct sta_info *psta);
-void sta_info_update(struct adapter *padapter, struct sta_info *psta);
-u8 ap_free_sta(struct adapter *padapter, struct sta_info *psta,
-              bool active, u16 reason);
-void rtw_sta_flush(struct adapter *padapter);
-void start_ap_mode(struct adapter *padapter);
-void stop_ap_mode(struct adapter *padapter);
-void update_bmc_sta(struct adapter *padapter);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/rtw_br_ext.h b/drivers/staging/r8188eu/include/rtw_br_ext.h
deleted file mode 100644 (file)
index 56772af..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef _RTW_BR_EXT_H_
-#define _RTW_BR_EXT_H_
-
-#define GET_MY_HWADDR(padapter)                ((padapter)->eeprompriv.mac_addr)
-
-#define NAT25_HASH_BITS                4
-#define NAT25_HASH_SIZE                (1 << NAT25_HASH_BITS)
-#define NAT25_AGEING_TIME      300
-
-#define MAX_NETWORK_ADDR_LEN   17
-
-struct nat25_network_db_entry {
-       struct nat25_network_db_entry   *next_hash;
-       struct nat25_network_db_entry   **pprev_hash;
-       atomic_t        use_count;
-       unsigned char   macAddr[6];
-       unsigned long   ageing_timer;
-       unsigned char   networkAddr[MAX_NETWORK_ADDR_LEN];
-};
-
-enum NAT25_METHOD {
-       NAT25_MIN,
-       NAT25_CHECK,
-       NAT25_INSERT,
-       NAT25_PARSE,
-       NAT25_MAX
-};
-
-struct br_ext_info {
-       unsigned int    nat25_disable;
-       unsigned int    macclone_enable;
-       unsigned int    dhcp_bcst_disable;
-       int     addPPPoETag;            /* 1: Add PPPoE relay-SID, 0: disable */
-       unsigned char   nat25_dmzMac[ETH_ALEN];
-       unsigned int    nat25sc_disable;
-};
-
-void nat25_db_cleanup(struct adapter *priv);
-
-#endif /*  _RTW_BR_EXT_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_cmd.h b/drivers/staging/r8188eu/include/rtw_cmd.h
deleted file mode 100644 (file)
index e8eecd5..0000000
+++ /dev/null
@@ -1,925 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTW_CMD_H_
-#define __RTW_CMD_H_
-
-#include "wlan_bssdef.h"
-#include "rtw_rf.h"
-
-#include "osdep_service.h"
-#include "ieee80211.h" /*  <ieee80211/ieee80211.h> */
-
-#define MAX_CMDSZ      1024
-#define MAX_RSPSZ      512
-#define MAX_EVTSZ      1024
-
-#define CMDBUFF_ALIGN_SZ 512
-
-struct cmd_obj {
-       struct adapter *padapter;
-       u16     cmdcode;
-       u8      res;
-       u8      *parmbuf;
-       u32     cmdsz;
-       u8      *rsp;
-       u32     rspsz;
-       struct list_head list;
-};
-
-struct cmd_priv {
-       struct completion enqueue_cmd;
-       struct completion start_cmd_thread;
-       struct completion stop_cmd_thread;
-       struct __queue cmd_queue;
-       u8      *cmd_buf;       /* shall be non-paged, and 4 bytes aligned */
-       u8      *cmd_allocated_buf;
-       u8      *rsp_buf;       /* shall be non-paged, and 4 bytes aligned */
-       u8      *rsp_allocated_buf;
-       u32     cmd_done_cnt;
-       u32     rsp_cnt;
-       u8 cmdthd_running;
-       struct adapter *padapter;
-};
-
-struct evt_priv {
-       struct work_struct c2h_wk;
-       bool c2h_wk_alive;
-       struct rtw_cbuf *c2h_queue;
-       #define C2H_QUEUE_MAX_LEN 10
-       atomic_t event_seq;
-       u8      *evt_buf;       /* shall be non-paged, and 4 bytes aligned */
-};
-
-#define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \
-do {\
-       INIT_LIST_HEAD(&pcmd->list);\
-       pcmd->cmdcode = code;\
-       pcmd->parmbuf = (u8 *)(pparm);\
-       pcmd->cmdsz = sizeof(*pparm);\
-       pcmd->rsp = NULL;\
-       pcmd->rspsz = 0;\
-} while (0)
-
-struct c2h_evt_hdr {
-       u8 id:4;
-       u8 plen:4;
-       u8 seq;
-       u8 payload[];
-};
-
-#define c2h_evt_exist(c2h_evt) ((c2h_evt)->id || (c2h_evt)->plen)
-
-u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj);
-struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv);
-void rtw_free_cmd_obj(struct cmd_obj *pcmd);
-
-int rtw_cmd_thread(void *context);
-
-int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv);
-void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv);
-
-int rtw_init_evt_priv(struct evt_priv *pevtpriv);
-void rtw_free_evt_priv(struct evt_priv *pevtpriv);
-void rtw_evt_notify_isr(struct evt_priv *pevtpriv);
-u8 p2p_protocol_wk_cmd(struct adapter *padapter, int intCmdType);
-
-enum rtw_drvextra_cmd_id {
-       NONE_WK_CID,
-       DYNAMIC_CHK_WK_CID,
-       DM_CTRL_WK_CID,
-       PBC_POLLING_WK_CID,
-       POWER_SAVING_CTRL_WK_CID,/* IPS,AUTOSuspend */
-       LPS_CTRL_WK_CID,
-       ANT_SELECT_WK_CID,
-       P2P_PS_WK_CID,
-       P2P_PROTO_WK_CID,
-       CHECK_HIQ_WK_CID,/* for softap mode, check hi queue if empty */
-       INTEl_WIDI_WK_CID,
-       C2H_WK_CID,
-       RTP_TIMER_CFG_WK_CID,
-       MAX_WK_CID
-};
-
-enum LPS_CTRL_TYPE {
-       LPS_CTRL_SCAN = 0,
-       LPS_CTRL_JOINBSS = 1,
-       LPS_CTRL_CONNECT = 2,
-       LPS_CTRL_DISCONNECT = 3,
-       LPS_CTRL_SPECIAL_PACKET = 4,
-       LPS_CTRL_LEAVE = 5,
-};
-
-enum RFINTFS {
-       SWSI,
-       HWSI,
-       HWPI,
-};
-
-/*
-Caller Mode: Infra, Ad-HoC
-
-Notes: To join a known BSS.
-
-Command-Event Mode
-
-*/
-
-/*
-Caller Mode: Infra, Ad-Hoc
-
-Notes: To join the specified bss
-
-Command Event Mode
-
-*/
-struct joinbss_parm {
-       struct wlan_bssid_ex network;
-};
-
-/*
-Caller Mode: Infra, Ad-HoC(C)
-
-Notes: To disconnect the current associated BSS
-
-Command Mode
-
-*/
-struct disconnect_parm {
-       u32 deauth_timeout_ms;
-};
-
-/*
-Caller Mode: AP, Ad-HoC(M)
-
-Notes: To create a BSS
-
-Command Mode
-*/
-struct createbss_parm {
-       struct wlan_bssid_ex network;
-};
-
-struct setopmode_parm {
-       u8      mode;
-       u8      rsvd[3];
-};
-
-/*
-Caller Mode: AP, Ad-HoC, Infra
-
-Notes: To ask RTL8711 performing site-survey
-
-Command-Event Mode
-
-*/
-
-#define RTW_SSID_SCAN_AMOUNT 9 /*  for WEXT_CSCAN_AMOUNT 9 */
-#define RTW_CHANNEL_SCAN_AMOUNT (14+37)
-struct sitesurvey_parm {
-       int scan_mode;  /* active: 1, passive: 0 */
-       u8 ssid_num;
-       u8 ch_num;
-       struct ndis_802_11_ssid ssid[RTW_SSID_SCAN_AMOUNT];
-       struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
-};
-
-/*
-Caller Mode: Any
-
-Notes: To set the auth type of RTL8711. open/shared/802.1x
-
-Command Mode
-
-*/
-struct setauth_parm {
-       u8 mode;  /* 0: legacy open, 1: legacy shared 2: 802.1x */
-       u8 _1x;   /* 0: PSK, 1: TLS */
-       u8 rsvd[2];
-};
-
-/*
-Caller Mode: Infra
-
-a. algorithm: wep40, wep104, tkip & aes
-b. keytype: grp key/unicast key
-c. key contents
-
-when shared key ==> keyid is the camid
-when 802.1x ==> keyid [0:1] ==> grp key
-when 802.1x ==> keyid > 2 ==> unicast key
-
-*/
-struct setkey_parm {
-       u8      algorithm;      /* could be none, wep40, TKIP, CCMP, wep104 */
-       u8      keyid;
-       u8      grpkey;         /* 1: this is the grpkey for 802.1x.
-                                * 0: this is the unicast key for 802.1x */
-       u8      set_tx;         /* 1: main tx key for wep. 0: other key. */
-       u8      key[16];        /* this could be 40 or 104 */
-};
-
-/*
-When in AP or Ad-Hoc mode, this is used to
-allocate an sw/hw entry for a newly associated sta.
-
-Command
-
-when shared key ==> algorithm/keyid
-
-*/
-struct set_stakey_parm {
-       u8      addr[ETH_ALEN];
-       u8      algorithm;
-       u8      id;/* currently for erasing cam entry if
-                   * algorithm == _NO_PRIVACY_ */
-       u8      key[16];
-};
-
-struct set_stakey_rsp {
-       u8      addr[ETH_ALEN];
-       u8      keyid;
-       u8      rsvd;
-};
-
-/*
-Caller Ad-Hoc/AP
-
-Command -Rsp(AID == CAMID) mode
-
-This is to force fw to add an sta_data entry per driver's request.
-
-FW will write an cam entry associated with it.
-
-*/
-struct set_assocsta_parm {
-       u8      addr[ETH_ALEN];
-};
-
-struct set_assocsta_rsp {
-       u8      cam_id;
-       u8      rsvd[3];
-};
-
-/*
-       Caller Ad-Hoc/AP
-
-       Command mode
-
-       This is to force fw to del an sta_data entry per driver's request
-
-       FW will invalidate the cam entry associated with it.
-
-*/
-struct del_assocsta_parm {
-       u8      addr[ETH_ALEN];
-};
-
-/*
-Caller Mode: AP/Ad-HoC(M)
-
-Notes: To notify fw that given staid has changed its power state
-
-Command Mode
-
-*/
-struct setstapwrstate_parm {
-       u8      staid;
-       u8      status;
-       u8      hwaddr[6];
-};
-
-/*
-Caller Mode: Any
-
-Notes: To setup the basic rate of RTL8711
-
-Command Mode
-
-*/
-struct setbasicrate_parm {
-       u8      basicrates[NumRates];
-};
-
-/*
-Caller Mode: Any
-
-Notes: To read the current basic rate
-
-Command-Rsp Mode
-
-*/
-struct getbasicrate_parm {
-       u32 rsvd;
-};
-
-struct getbasicrate_rsp {
-       u8 basicrates[NumRates];
-};
-
-/*
-Caller Mode: Any
-
-Notes: To setup the data rate of RTL8711
-
-Command Mode
-
-*/
-struct setdatarate_parm {
-       u8      mac_id;
-       u8      datarates[NumRates];
-};
-
-/*
-Caller Mode: Any
-
-Notes: To read the current data rate
-
-Command-Rsp Mode
-
-*/
-struct getdatarate_parm {
-       u32 rsvd;
-
-};
-struct getdatarate_rsp {
-       u8 datarates[NumRates];
-};
-
-/*
-Caller Mode: Any
-AP: AP can use the info for the contents of beacon frame
-Infra: STA can use the info when sitesurveying
-Ad-HoC(M): Like AP
-Ad-HoC(C): Like STA
-
-Notes: To set the phy capability of the NIC
-
-Command Mode
-
-*/
-
-struct setphyinfo_parm {
-       struct regulatory_class class_sets[NUM_REGULATORYS];
-       u8      status;
-};
-
-struct getphyinfo_parm {
-       u32 rsvd;
-};
-
-struct getphyinfo_rsp {
-       struct regulatory_class class_sets[NUM_REGULATORYS];
-       u8      status;
-};
-
-/*
-Caller Mode: Any
-
-Notes: To set the channel/modem/band
-This command will be used when channel/modem/band is changed.
-
-Command Mode
-
-*/
-struct setphy_parm {
-       u8      rfchannel;
-       u8      modem;
-};
-
-/*
-Caller Mode: Any
-
-Notes: To get the current setting of channel/modem/band
-
-Command-Rsp Mode
-
-*/
-struct getphy_parm {
-       u32 rsvd;
-
-};
-struct getphy_rsp {
-       u8      rfchannel;
-       u8      modem;
-};
-
-struct readBB_parm {
-       u8      offset;
-};
-struct readBB_rsp {
-       u8      value;
-};
-
-struct readTSSI_parm {
-       u8      offset;
-};
-struct readTSSI_rsp {
-       u8      value;
-};
-
-struct writeBB_parm {
-       u8      offset;
-       u8      value;
-};
-
-struct readRF_parm {
-       u8      offset;
-};
-struct readRF_rsp {
-       u32     value;
-};
-
-struct writeRF_parm {
-       u32     offset;
-       u32     value;
-};
-
-struct getrfintfs_parm {
-       u8      rfintfs;
-};
-
-struct Tx_Beacon_param {
-       struct wlan_bssid_ex network;
-};
-
-/*
-       Notes: This command is used for H2C/C2H loopback testing
-
-       mac[0] == 0
-       ==> CMD mode, return H2C_SUCCESS.
-       The following condition must be true under CMD mode
-               mac[1] == mac[4], mac[2] == mac[3], mac[0]=mac[5]= 0;
-               s0 == 0x1234, s1 == 0xabcd, w0 == 0x78563412, w1 == 0x5aa5def7;
-               s2 == (b1 << 8 | b0);
-
-       mac[0] == 1
-       ==> CMD_RSP mode, return H2C_SUCCESS_RSP
-
-       The rsp layout shall be:
-       rsp:                    parm:
-               mac[0]  =   mac[5];
-               mac[1]  =   mac[4];
-               mac[2]  =   mac[3];
-               mac[3]  =   mac[2];
-               mac[4]  =   mac[1];
-               mac[5]  =   mac[0];
-               s0              =   s1;
-               s1              =   swap16(s0);
-               w0              =       swap32(w1);
-               b0              =       b1
-               s2              =       s0 + s1
-               b1              =       b0
-               w1              =       w0
-
-       mac[0] ==       2
-       ==> CMD_EVENT mode, return      H2C_SUCCESS
-       The event layout shall be:
-       event:                  parm:
-               mac[0]  =   mac[5];
-               mac[1]  =   mac[4];
-               mac[2]  =   event's seq no, starting from 1 to parm's marc[3]
-               mac[3]  =   mac[2];
-               mac[4]  =   mac[1];
-               mac[5]  =   mac[0];
-               s0              =   swap16(s0) - event.mac[2];
-               s1              =   s1 + event.mac[2];
-               w0              =       swap32(w0);
-               b0              =       b1
-               s2              =       s0 + event.mac[2]
-               b1              =       b0
-               w1              =       swap32(w1) - event.mac[2];
-
-               parm->mac[3] is the total event counts that host requested.
-       event will be the same with the cmd's param.
-*/
-
-/*  CMD param Format for driver extra cmd handler */
-struct drvextra_cmd_parm {
-       int ec_id; /* extra cmd id */
-       int type_size; /*  Can use this field as the type id or command size */
-       unsigned char *pbuf;
-};
-
-/*------------------- Below are used for RF/BB tuning ---------------------*/
-
-struct setantenna_parm {
-       u8      tx_antset;
-       u8      rx_antset;
-       u8      tx_antenna;
-       u8      rx_antenna;
-};
-
-struct enrateadaptive_parm {
-       u32     en;
-};
-
-struct settxagctbl_parm {
-       u32     txagc[MAX_RATES_LENGTH];
-};
-
-struct gettxagctbl_parm {
-       u32 rsvd;
-};
-struct gettxagctbl_rsp {
-       u32     txagc[MAX_RATES_LENGTH];
-};
-
-struct setagcctrl_parm {
-       u32     agcctrl;                /*  0: pure hw, 1: fw */
-};
-
-struct setssup_parm    {
-       u32     ss_ForceUp[MAX_RATES_LENGTH];
-};
-
-struct getssup_parm    {
-       u32 rsvd;
-};
-
-struct getssup_rsp     {
-       u8      ss_ForceUp[MAX_RATES_LENGTH];
-};
-
-struct setssdlevel_parm        {
-       u8      ss_DLevel[MAX_RATES_LENGTH];
-};
-
-struct getssdlevel_parm        {
-       u32 rsvd;
-};
-
-struct getssdlevel_rsp {
-       u8      ss_DLevel[MAX_RATES_LENGTH];
-};
-
-struct setssulevel_parm        {
-       u8      ss_ULevel[MAX_RATES_LENGTH];
-};
-
-struct getssulevel_parm        {
-       u32 rsvd;
-};
-
-struct getssulevel_rsp {
-       u8      ss_ULevel[MAX_RATES_LENGTH];
-};
-
-struct setcountjudge_parm {
-       u8      count_judge[MAX_RATES_LENGTH];
-};
-
-struct getcountjudge_parm {
-       u32 rsvd;
-};
-
-struct getcountjudge_rsp {
-       u8      count_judge[MAX_RATES_LENGTH];
-};
-
-struct setratable_parm {
-       u8 ss_ForceUp[NumRates];
-       u8 ss_ULevel[NumRates];
-       u8 ss_DLevel[NumRates];
-       u8 count_judge[NumRates];
-};
-
-struct getratable_parm {
-       uint rsvd;
-};
-
-struct getratable_rsp {
-       u8 ss_ForceUp[NumRates];
-       u8 ss_ULevel[NumRates];
-       u8 ss_DLevel[NumRates];
-       u8 count_judge[NumRates];
-};
-
-/* to get TX,RX retry count */
-
-struct gettxretrycnt_parm {
-       unsigned int rsvd;
-};
-
-struct gettxretrycnt_rsp {
-       unsigned long tx_retrycnt;
-};
-
-struct getrxretrycnt_parm {
-       unsigned int rsvd;
-};
-
-struct getrxretrycnt_rsp {
-       unsigned long rx_retrycnt;
-};
-
-/* to get BCNOK,BCNERR count */
-struct getbcnokcnt_parm {
-       unsigned int rsvd;
-};
-
-struct getbcnokcnt_rsp {
-       unsigned long  bcnokcnt;
-};
-
-struct getbcnerrcnt_parm {
-       unsigned int rsvd;
-};
-
-struct getbcnerrcnt_rsp {
-       unsigned long bcnerrcnt;
-};
-
-/*  to get current TX power level */
-struct getcurtxpwrlevel_parm {
-       unsigned int rsvd;
-};
-struct getcurtxpwrlevel_rspi {
-       unsigned short tx_power;
-};
-
-struct setprobereqextraie_parm {
-       unsigned char e_id;
-       unsigned char ie_len;
-       unsigned char ie[];
-};
-
-struct setassocreqextraie_parm {
-       unsigned char e_id;
-       unsigned char ie_len;
-       unsigned char ie[];
-};
-
-struct setproberspextraie_parm {
-       unsigned char e_id;
-       unsigned char ie_len;
-       unsigned char ie[];
-};
-
-struct setassocrspextraie_parm {
-       unsigned char e_id;
-       unsigned char ie_len;
-       unsigned char ie[];
-};
-
-struct addBaReq_parm {
-       unsigned int tid;
-       u8      addr[ETH_ALEN];
-};
-
-/*H2C Handler index: 46 */
-struct set_ch_parm {
-       u8 ch;
-       u8 bw;
-       u8 ch_offset;
-};
-
-/*H2C Handler index: 59 */
-struct SetChannelPlan_param {
-       u8 channel_plan;
-};
-
-/*H2C Handler index: 60 */
-struct LedBlink_param {
-       struct LED_871x *pLed;
-};
-
-/*H2C Handler index: 61 */
-struct SetChannelSwitch_param {
-       u8 new_ch_no;
-};
-
-/*H2C Handler index: 62 */
-struct TDLSoption_param {
-       u8 addr[ETH_ALEN];
-       u8 option;
-};
-
-#define GEN_CMD_CODE(cmd)      cmd ## _CMD_
-
-/*
-
-Result:
-0x00: success
-0x01: success, and check Response.
-0x02: cmd ignored due to duplicated sequcne number
-0x03: cmd dropped due to invalid cmd code
-0x04: reserved.
-
-*/
-
-#define H2C_RSP_OFFSET         512
-
-#define H2C_SUCCESS            0x00
-#define H2C_SUCCESS_RSP                0x01
-#define H2C_DUPLICATED         0x02
-#define H2C_DROPPED            0x03
-#define H2C_PARAMETERS_ERROR   0x04
-#define H2C_REJECTED           0x05
-#define H2C_CMD_OVERFLOW       0x06
-#define H2C_RESERVED           0x07
-
-u8 rtw_sitesurvey_cmd(struct adapter *padapter, struct ndis_802_11_ssid *ssid, int ssid_num);
-u8 rtw_createbss_cmd(struct adapter *padapter);
-u8 rtw_setstakey_cmd(struct adapter *padapter, u8 *psta, u8 unicast_key);
-u8 rtw_clearstakey_cmd(struct adapter *padapter, u8 *psta, u8 entry, u8 enqueue);
-u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network *pnetwork);
-u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, bool enqueue);
-u8 rtw_setopmode_cmd(struct adapter *padapter, enum ndis_802_11_network_infra networktype);
-int rtw_setdatarate_cmd(struct adapter *padapter, u8 *rateset);
-u8 rtw_setrfintfs_cmd(struct adapter *padapter, u8 mode);
-
-u8 rtw_gettssi_cmd(struct adapter *padapter, u8 offset, u8 *pval);
-u8 rtw_setfwdig_cmd(struct adapter *padapter, u8 type);
-u8 rtw_setfwra_cmd(struct adapter *padapter, u8 type);
-
-u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr);
-
-u8 rtw_dynamic_chk_wk_cmd(struct adapter *adapter);
-
-u8 rtw_lps_ctrl_wk_cmd(struct adapter *padapter, u8 lps_ctrl_type, u8 enqueue);
-u8 rtw_rpt_timer_cfg_cmd(struct adapter *padapter, u16 minRptTime);
-
-u8 rtw_antenna_select_cmd(struct adapter *padapter, u8 antenna, u8 enqueue);
-u8 rtw_ps_cmd(struct adapter *padapter);
-
-void rtw_chk_hi_queue_cmd(struct adapter *padapter);
-
-u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan);
-
-u8 rtw_c2h_wk_cmd(struct adapter *padapter, u8 *c2h_evt);
-
-u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf);
-
-void rtw_survey_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
-void rtw_disassoc_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
-void rtw_joinbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
-void rtw_createbss_cmd_callback(struct adapter *adapt, struct cmd_obj *pcmd);
-void rtw_getbbrfreg_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
-
-void rtw_setstaKey_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
-void rtw_setassocsta_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cm);
-void rtw_getrttbl_cmdrsp_callback(struct adapter *adapt, struct cmd_obj *cmd);
-
-struct _cmd_callback {
-       u32     cmd_code;
-       void (*callback)(struct adapter  *padapter, struct cmd_obj *cmd);
-};
-
-enum rtw_h2c_cmd {
-       GEN_CMD_CODE(_Read_MACREG),     /*0*/
-       GEN_CMD_CODE(_Write_MACREG),
-       GEN_CMD_CODE(_Read_BBREG),
-       GEN_CMD_CODE(_Write_BBREG),
-       GEN_CMD_CODE(_Read_RFREG),
-       GEN_CMD_CODE(_Write_RFREG), /*5*/
-       GEN_CMD_CODE(_Read_EEPROM),
-       GEN_CMD_CODE(_Write_EEPROM),
-       GEN_CMD_CODE(_Read_EFUSE),
-       GEN_CMD_CODE(_Write_EFUSE),
-
-       GEN_CMD_CODE(_Read_CAM),        /*10*/
-       GEN_CMD_CODE(_Write_CAM),
-       GEN_CMD_CODE(_setBCNITV),
-       GEN_CMD_CODE(_setMBIDCFG),
-       GEN_CMD_CODE(_JoinBss),   /*14*/
-       GEN_CMD_CODE(_DisConnect), /*15*/
-       GEN_CMD_CODE(_CreateBss),
-       GEN_CMD_CODE(_SetOpMode),
-       GEN_CMD_CODE(_SiteSurvey),  /*18*/
-       GEN_CMD_CODE(_SetAuth),
-
-       GEN_CMD_CODE(_SetKey),  /*20*/
-       GEN_CMD_CODE(_SetStaKey),
-       GEN_CMD_CODE(_SetAssocSta),
-       GEN_CMD_CODE(_DelAssocSta),
-       GEN_CMD_CODE(_SetStaPwrState),
-       GEN_CMD_CODE(_SetBasicRate), /*25*/
-       GEN_CMD_CODE(_GetBasicRate),
-       GEN_CMD_CODE(_SetDataRate),
-       GEN_CMD_CODE(_GetDataRate),
-       GEN_CMD_CODE(_SetPhyInfo),
-
-       GEN_CMD_CODE(_GetPhyInfo),      /*30*/
-       GEN_CMD_CODE(_SetPhy),
-       GEN_CMD_CODE(_GetPhy),
-       GEN_CMD_CODE(_readRssi),
-       GEN_CMD_CODE(_readGain),
-       GEN_CMD_CODE(_SetAtim), /*35*/
-       GEN_CMD_CODE(_SetPwrMode),
-       GEN_CMD_CODE(_JoinbssRpt),
-       GEN_CMD_CODE(_SetRaTable),
-       GEN_CMD_CODE(_GetRaTable),
-
-       GEN_CMD_CODE(_GetCCXReport), /*40*/
-       GEN_CMD_CODE(_GetDTMReport),
-       GEN_CMD_CODE(_GetTXRateStatistics),
-       GEN_CMD_CODE(_SetUsbSuspend),
-       GEN_CMD_CODE(_SetH2cLbk),
-       GEN_CMD_CODE(_AddBAReq), /*45*/
-       GEN_CMD_CODE(_SetChannel), /*46*/
-       GEN_CMD_CODE(_SetTxPower),
-       GEN_CMD_CODE(_SwitchAntenna),
-       GEN_CMD_CODE(_SetCrystalCap),
-       GEN_CMD_CODE(_SetSingleCarrierTx), /*50*/
-
-       GEN_CMD_CODE(_SetSingleToneTx),/*51*/
-       GEN_CMD_CODE(_SetCarrierSuppressionTx),
-       GEN_CMD_CODE(_SetContinuousTx),
-       GEN_CMD_CODE(_SwitchBandwidth), /*54*/
-       GEN_CMD_CODE(_TX_Beacon), /*55*/
-
-       GEN_CMD_CODE(_Set_MLME_EVT), /*56*/
-       GEN_CMD_CODE(_Set_Drv_Extra), /*57*/
-       GEN_CMD_CODE(_Set_H2C_MSG), /*58*/
-
-       GEN_CMD_CODE(_SetChannelPlan), /*59*/
-       GEN_CMD_CODE(_LedBlink), /*60*/
-
-       GEN_CMD_CODE(_SetChannelSwitch), /*61*/
-       GEN_CMD_CODE(_TDLS), /*62*/
-
-       MAX_H2CCMD
-};
-
-#define _GetBBReg_CMD_         _Read_BBREG_CMD_
-#define _SetBBReg_CMD_         _Write_BBREG_CMD_
-#define _GetRFReg_CMD_         _Read_RFREG_CMD_
-#define _SetRFReg_CMD_         _Write_RFREG_CMD_
-
-#ifdef _RTW_CMD_C_
-static struct _cmd_callback    rtw_cmd_callback[] = {
-       {GEN_CMD_CODE(_Read_MACREG), NULL}, /*0*/
-       {GEN_CMD_CODE(_Write_MACREG), NULL},
-       {GEN_CMD_CODE(_Read_BBREG), &rtw_getbbrfreg_cmdrsp_callback},
-       {GEN_CMD_CODE(_Write_BBREG), NULL},
-       {GEN_CMD_CODE(_Read_RFREG), &rtw_getbbrfreg_cmdrsp_callback},
-       {GEN_CMD_CODE(_Write_RFREG), NULL}, /*5*/
-       {GEN_CMD_CODE(_Read_EEPROM), NULL},
-       {GEN_CMD_CODE(_Write_EEPROM), NULL},
-       {GEN_CMD_CODE(_Read_EFUSE), NULL},
-       {GEN_CMD_CODE(_Write_EFUSE), NULL},
-
-       {GEN_CMD_CODE(_Read_CAM),       NULL},  /*10*/
-       {GEN_CMD_CODE(_Write_CAM),       NULL},
-       {GEN_CMD_CODE(_setBCNITV), NULL},
-       {GEN_CMD_CODE(_setMBIDCFG), NULL},
-       {GEN_CMD_CODE(_JoinBss), &rtw_joinbss_cmd_callback},  /*14*/
-       {GEN_CMD_CODE(_DisConnect), &rtw_disassoc_cmd_callback}, /*15*/
-       {GEN_CMD_CODE(_CreateBss), &rtw_createbss_cmd_callback},
-       {GEN_CMD_CODE(_SetOpMode), NULL},
-       {GEN_CMD_CODE(_SiteSurvey), &rtw_survey_cmd_callback}, /*18*/
-       {GEN_CMD_CODE(_SetAuth), NULL},
-
-       {GEN_CMD_CODE(_SetKey), NULL},  /*20*/
-       {GEN_CMD_CODE(_SetStaKey), &rtw_setstaKey_cmdrsp_callback},
-       {GEN_CMD_CODE(_SetAssocSta), &rtw_setassocsta_cmdrsp_callback},
-       {GEN_CMD_CODE(_DelAssocSta), NULL},
-       {GEN_CMD_CODE(_SetStaPwrState), NULL},
-       {GEN_CMD_CODE(_SetBasicRate), NULL}, /*25*/
-       {GEN_CMD_CODE(_GetBasicRate), NULL},
-       {GEN_CMD_CODE(_SetDataRate), NULL},
-       {GEN_CMD_CODE(_GetDataRate), NULL},
-       {GEN_CMD_CODE(_SetPhyInfo), NULL},
-
-       {GEN_CMD_CODE(_GetPhyInfo), NULL}, /*30*/
-       {GEN_CMD_CODE(_SetPhy), NULL},
-       {GEN_CMD_CODE(_GetPhy), NULL},
-       {GEN_CMD_CODE(_readRssi), NULL},
-       {GEN_CMD_CODE(_readGain), NULL},
-       {GEN_CMD_CODE(_SetAtim), NULL}, /*35*/
-       {GEN_CMD_CODE(_SetPwrMode), NULL},
-       {GEN_CMD_CODE(_JoinbssRpt), NULL},
-       {GEN_CMD_CODE(_SetRaTable), NULL},
-       {GEN_CMD_CODE(_GetRaTable), NULL},
-
-       {GEN_CMD_CODE(_GetCCXReport), NULL}, /*40*/
-       {GEN_CMD_CODE(_GetDTMReport),   NULL},
-       {GEN_CMD_CODE(_GetTXRateStatistics), NULL},
-       {GEN_CMD_CODE(_SetUsbSuspend), NULL},
-       {GEN_CMD_CODE(_SetH2cLbk), NULL},
-       {GEN_CMD_CODE(_AddBAReq), NULL}, /*45*/
-       {GEN_CMD_CODE(_SetChannel), NULL},              /*46*/
-       {GEN_CMD_CODE(_SetTxPower), NULL},
-       {GEN_CMD_CODE(_SwitchAntenna), NULL},
-       {GEN_CMD_CODE(_SetCrystalCap), NULL},
-       {GEN_CMD_CODE(_SetSingleCarrierTx), NULL},      /*50*/
-
-       {GEN_CMD_CODE(_SetSingleToneTx), NULL}, /*51*/
-       {GEN_CMD_CODE(_SetCarrierSuppressionTx), NULL},
-       {GEN_CMD_CODE(_SetContinuousTx), NULL},
-       {GEN_CMD_CODE(_SwitchBandwidth), NULL},         /*54*/
-       {GEN_CMD_CODE(_TX_Beacon), NULL},/*55*/
-
-       {GEN_CMD_CODE(_Set_MLME_EVT), NULL},/*56*/
-       {GEN_CMD_CODE(_Set_Drv_Extra), NULL},/*57*/
-       {GEN_CMD_CODE(_Set_H2C_MSG), NULL},/*58*/
-       {GEN_CMD_CODE(_SetChannelPlan), NULL},/*59*/
-       {GEN_CMD_CODE(_LedBlink), NULL},/*60*/
-
-       {GEN_CMD_CODE(_SetChannelSwitch), NULL},/*61*/
-       {GEN_CMD_CODE(_TDLS), NULL},/*62*/
-};
-#endif
-
-#endif /*  _CMD_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_eeprom.h b/drivers/staging/r8188eu/include/rtw_eeprom.h
deleted file mode 100644 (file)
index 94d735b..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTW_EEPROM_H__
-#define __RTW_EEPROM_H__
-
-#include "osdep_service.h"
-#include "drv_types.h"
-
-struct eeprom_priv {
-       u8              bautoload_fail_flag;
-       u8              mac_addr[ETH_ALEN] __aligned(2); /* PermanentAddress */
-};
-
-#endif  /* __RTL871X_EEPROM_H__ */
diff --git a/drivers/staging/r8188eu/include/rtw_efuse.h b/drivers/staging/r8188eu/include/rtw_efuse.h
deleted file mode 100644 (file)
index 3d688a0..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTW_EFUSE_H__
-#define __RTW_EFUSE_H__
-
-#define                EFUSE_MAX_WORD_UNIT                     4
-
-void ReadEFuseByte(struct adapter *adapter, u16 _offset, u8 *pbuf);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/rtw_event.h b/drivers/staging/r8188eu/include/rtw_event.h
deleted file mode 100644 (file)
index 54dc1ea..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef _RTW_EVENT_H_
-#define _RTW_EVENT_H_
-
-#include "osdep_service.h"
-
-#include "wlan_bssdef.h"
-#include <linux/semaphore.h>
-#include <linux/sem.h>
-
-/*
-Used to report a bss has been scanned
-*/
-struct survey_event    {
-       struct wlan_bssid_ex bss;
-};
-
-/*
-Used to report that the requested site survey has been done.
-
-bss_cnt indicates the number of bss that has been reported.
-
-*/
-struct surveydone_event {
-       unsigned int    bss_cnt;
-
-};
-
-/*
-Used to report the link result of joinning the given bss
-
-join_res:
--1: authentication fail
--2: association fail
-> 0: TID
-
-*/
-struct joinbss_event {
-       struct  wlan_network    network;
-};
-
-/*
-Used to report a given STA has joinned the created BSS.
-It is used in AP/Ad-HoC(M) mode.
-*/
-
-struct stassoc_event {
-       unsigned char macaddr[6];
-       unsigned char rsvd[2];
-       int    cam_id;
-};
-
-struct stadel_event {
-       unsigned char macaddr[6];
-       unsigned char rsvd[2]; /* for reason */
-       int mac_id;
-};
-
-struct addba_event {
-       unsigned int tid;
-};
-
-#define GEN_EVT_CODE(event)    event ## _EVT_
-
-struct fwevent {
-       u32     parmsize;
-       void (*event_callback)(struct adapter *dev, u8 *pbuf);
-};
-
-#define C2HEVENT_SZ                    32
-
-struct event_node {
-       unsigned char *node;
-       unsigned char evt_code;
-       unsigned short evt_sz;
-       int     *caller_ff_tail;
-       int     caller_ff_sz;
-};
-
-struct c2hevent_queue {
-       int     head;
-       int     tail;
-       struct  event_node      nodes[C2HEVENT_SZ];
-       unsigned char   seq;
-};
-
-#define NETWORK_QUEUE_SZ       4
-
-struct network_queue {
-       int     head;
-       int     tail;
-       struct wlan_bssid_ex networks[NETWORK_QUEUE_SZ];
-};
-
-#endif /*  _WLANEVENT_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_fw.h b/drivers/staging/r8188eu/include/rtw_fw.h
deleted file mode 100644 (file)
index 8f74157..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTW_FW_H__
-#define __RTW_FW_H__
-
-struct rt_firmware {
-       u8 *data;
-       u32 size;
-};
-
-#include "drv_types.h"
-
-int rtl8188e_firmware_download(struct adapter *padapter);
-void rtw_reset_8051(struct adapter *padapter);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/rtw_ht.h b/drivers/staging/r8188eu/include/rtw_ht.h
deleted file mode 100644 (file)
index 2b56b7c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef _RTW_HT_H_
-#define _RTW_HT_H_
-
-#include "osdep_service.h"
-#include "wifi.h"
-
-struct ht_priv {
-       u32     ht_option;
-       u32     ampdu_enable;/* for enable Tx A-MPDU */
-       u32     tx_amsdu_enable;/* for enable Tx A-MSDU */
-       u32     tx_amdsu_maxlen; /*  1: 8k, 0:4k ; default:8k, for tx */
-       u32     rx_ampdu_maxlen; /* for rx reordering ctrl win_sz,
-                                 * updated when join_callback. */
-       u8      bwmode;/*  */
-       u8      ch_offset;/* PRIME_CHNL_OFFSET */
-       u8      sgi;/* short GI */
-
-       /* for processing Tx A-MPDU */
-       u8      agg_enable_bitmap;
-       u8      candidate_tid_bitmap;
-
-       struct ieee80211_ht_cap ht_cap;
-};
-
-#endif /* _RTL871X_HT_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_io.h b/drivers/staging/r8188eu/include/rtw_io.h
deleted file mode 100644 (file)
index e1718f7..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef _RTW_IO_H_
-#define _RTW_IO_H_
-
-#include "osdep_service.h"
-#include "osdep_intf.h"
-
-#include <asm/byteorder.h>
-#include <linux/semaphore.h>
-#include <linux/list.h>
-#include <linux/spinlock.h>
-#include <asm/atomic.h>
-
-#include <linux/usb.h>
-#include <linux/usb/ch9.h>
-
-int __must_check rtw_read8(struct adapter *adapter, u32 addr, u8 *data);
-int __must_check rtw_read16(struct adapter *adapter, u32 addr, u16 *data);
-int __must_check rtw_read32(struct adapter *adapter, u32 addr, u32 *data);
-int rtw_read_port(struct adapter *adapter, struct recv_buf *precvbuf);
-void rtw_read_port_cancel(struct adapter *adapter);
-
-int rtw_write8(struct adapter *adapter, u32 addr, u8 val);
-int rtw_write16(struct adapter *adapter, u32 addr, u16 val);
-int rtw_write32(struct adapter *adapter, u32 addr, u32 val);
-int rtw_writeN(struct adapter *adapter, u32 addr, u32 length, u8 *pdata);
-
-u32 rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
-void rtw_write_port_cancel(struct adapter *adapter);
-
-#endif /* _RTL8711_IO_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_ioctl.h b/drivers/staging/r8188eu/include/rtw_ioctl.h
deleted file mode 100644 (file)
index c704f30..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef _RTW_IOCTL_H_
-#define _RTW_IOCTL_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-
-extern struct iw_handler_def  rtw_handlers_def;
-extern int ui_pid[3];
-
-#endif /*  #ifndef __INC_CEINFO_ */
diff --git a/drivers/staging/r8188eu/include/rtw_ioctl_set.h b/drivers/staging/r8188eu/include/rtw_ioctl_set.h
deleted file mode 100644 (file)
index c3eb247..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTW_IOCTL_SET_H_
-#define __RTW_IOCTL_SET_H_
-
-#include "drv_types.h"
-
-typedef u8 NDIS_802_11_PMKID_VALUE[16];
-
-u8 rtw_set_802_11_authentication_mode(struct adapter *adapt,
-                                     enum ndis_802_11_auth_mode authmode);
-u8 rtw_set_802_11_bssid(struct adapter *adapter, u8 *bssid);
-u8 rtw_set_802_11_add_wep(struct adapter *adapter, struct ndis_802_11_wep *wep);
-void rtw_set_802_11_disassociate(struct adapter *adapter);
-u8 rtw_set_802_11_bssid_list_scan(struct adapter *adapter,
-                                 struct ndis_802_11_ssid *pssid,
-                                 int ssid_max_num);
-u8 rtw_set_802_11_infrastructure_mode(struct adapter *adapter,
-                                     enum ndis_802_11_network_infra type);
-u8 rtw_set_802_11_ssid(struct adapter *adapt, struct ndis_802_11_ssid *ssid);
-u16 rtw_get_cur_max_rate(struct adapter *adapter);
-int rtw_change_ifname(struct adapter *padapter, const char *ifname);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/rtw_iol.h b/drivers/staging/r8188eu/include/rtw_iol.h
deleted file mode 100644 (file)
index 099f5a0..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTW_IOL_H_
-#define __RTW_IOL_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-
-#define IOREG_CMD_END_LEN      4
-
-struct ioreg_cfg {
-       u8      length;
-       u8      cmd_id;
-       __le16  address;
-       __le32  data;
-       __le32  mask;
-};
-
-enum ioreg_cmd {
-       IOREG_CMD_LLT           = 0x01,
-       IOREG_CMD_REFUSE        = 0x02,
-       IOREG_CMD_EFUSE_PATH    = 0x03,
-       IOREG_CMD_WB_REG        = 0x04,
-       IOREG_CMD_WW_REG        = 0x05,
-       IOREG_CMD_WD_REG        = 0x06,
-       IOREG_CMD_W_RF          = 0x07,
-       IOREG_CMD_DELAY_US      = 0x10,
-       IOREG_CMD_DELAY_MS      = 0x11,
-       IOREG_CMD_END           = 0xFF,
-};
-
-struct xmit_frame *rtw_IOL_accquire_xmit_frame(struct adapter *adapter);
-int rtw_IOL_append_cmds(struct xmit_frame *xmit_frame, u8 *IOL_cmds,
-                       u32 cmd_len);
-bool rtw_IOL_applied(struct adapter  *adapter);
-int rtw_IOL_append_DELAY_US_cmd(struct xmit_frame *xmit_frame, u16 us);
-int rtw_IOL_append_DELAY_MS_cmd(struct xmit_frame *xmit_frame, u16 ms);
-int rtw_IOL_append_END_cmd(struct xmit_frame *xmit_frame);
-
-void read_efuse_from_txpktbuf(struct adapter *adapter, int bcnhead,
-                             u8 *content, u16 *size);
-
-int rtw_IOL_append_WB_cmd(struct xmit_frame *xmit_frame, u16 addr,
-                         u8 value, u8 mask);
-int rtw_IOL_append_WW_cmd(struct xmit_frame *xmit_frame, u16 addr,
-                         u16 value, u16 mask);
-int rtw_IOL_append_WD_cmd(struct xmit_frame *xmit_frame, u16 addr,
-                         u32 value, u32 mask);
-int rtw_IOL_append_WRF_cmd(struct xmit_frame *xmit_frame, u8 rf_path,
-                          u16 addr, u32 value, u32 mask);
-
-u8 rtw_IOL_cmd_boundary_handle(struct xmit_frame *pxmit_frame);
-
-#endif /* __RTW_IOL_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_led.h b/drivers/staging/r8188eu/include/rtw_led.h
deleted file mode 100644 (file)
index ea5f5ed..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTW_LED_H_
-#define __RTW_LED_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-
-enum LED_CTL_MODE {
-       LED_CTL_LINK = 2,
-       LED_CTL_NO_LINK = 3,
-       LED_CTL_TX = 4,
-       LED_CTL_RX = 5,
-       LED_CTL_SITE_SURVEY = 6,
-       LED_CTL_POWER_OFF = 7,
-       LED_CTL_START_TO_LINK = 8,
-       LED_CTL_START_WPS = 9,
-       LED_CTL_STOP_WPS = 10,
-       LED_CTL_STOP_WPS_FAIL = 12,
-};
-
-enum LED_STATE_871x {
-       RTW_LED_OFF = 2,
-       LED_BLINK_NORMAL = 3,
-       LED_BLINK_SLOWLY = 4,
-       LED_BLINK_SCAN = 6, /*  LED is blinking during scanning period,
-                            * the # of times to blink is depend on time
-                            * for scanning. */
-       LED_BLINK_TXRX = 9,
-       LED_BLINK_WPS = 10,     /*  LED is blinkg during WPS communication */
-       LED_BLINK_WPS_STOP = 11,
-};
-
-struct led_priv {
-       bool bRegUseLed;
-
-       enum LED_STATE_871x     CurrLedState; /*  Current LED state. */
-
-       bool bLedOn; /*  true if LED is ON, false if LED is OFF. */
-
-       bool bLedBlinkInProgress; /*  true if it is blinking, false o.w.. */
-
-       bool bLedWPSBlinkInProgress;
-
-       u32 BlinkTimes; /*  Number of times to toggle led state for blinking. */
-
-       bool bLedScanBlinkInProgress;
-       struct delayed_work blink_work;
-};
-
-void rtl8188eu_InitSwLeds(struct adapter *padapter);
-void rtl8188eu_DeInitSwLeds(struct adapter *padapter);
-
-void rtw_led_control(struct adapter *padapter, enum LED_CTL_MODE LedAction);
-
-#endif /* __RTW_LED_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_mlme.h b/drivers/staging/r8188eu/include/rtw_mlme.h
deleted file mode 100644 (file)
index 3ff653f..0000000
+++ /dev/null
@@ -1,574 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTW_MLME_H_
-#define __RTW_MLME_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-#include "wlan_bssdef.h"
-
-#define        MAX_BSS_CNT     128
-#define   MAX_JOIN_TIMEOUT     6500
-
-/* Increase the scanning timeout because of increasing the SURVEY_TO value. */
-
-#define                SCANNING_TIMEOUT        8000
-
-#define        SCAN_INTERVAL   (30) /*  unit:2sec, 30*2=60sec */
-
-#define        SCANQUEUE_LIFETIME 20 /*  unit:sec */
-
-#define        WIFI_NULL_STATE                 0x00000000
-
-#define        WIFI_ASOC_STATE                 0x00000001      /* Under Linked state */
-#define        WIFI_REASOC_STATE               0x00000002
-#define        WIFI_SLEEP_STATE                0x00000004
-#define        WIFI_STATION_STATE              0x00000008
-
-#define        WIFI_AP_STATE                   0x00000010
-#define        WIFI_ADHOC_STATE                0x00000020
-#define WIFI_ADHOC_MASTER_STATE                0x00000040
-#define WIFI_UNDER_LINKING             0x00000080
-
-#define        WIFI_UNDER_WPS                  0x00000100
-#define        WIFI_STA_ALIVE_CHK_STATE        0x00000400
-#define        WIFI_SITE_MONITOR               0x00000800      /* to indicate the station is under site surveying */
-
-#define        WIFI_MP_STATE                   0x00010000
-#define        WIFI_MP_CTX_BACKGROUND          0x00020000      /*  in continuous tx background */
-#define        WIFI_MP_CTX_ST                  0x00040000      /*  in continuous tx with single-tone */
-#define        WIFI_MP_CTX_BACKGROUND_PENDING  0x00080000      /*  pending in continuous tx background due to out of skb */
-#define        WIFI_MP_CTX_CCK_HW              0x00100000      /*  in continuous tx */
-#define        WIFI_MP_CTX_CCK_CS              0x00200000      /*  in continuous tx with carrier suppression */
-#define WIFI_MP_LPBK_STATE             0x00400000
-
-#define _FW_UNDER_LINKING      WIFI_UNDER_LINKING
-#define _FW_LINKED                     WIFI_ASOC_STATE
-#define _FW_UNDER_SURVEY       WIFI_SITE_MONITOR
-
-enum dot11AuthAlgrthmNum {
-       dot11AuthAlgrthm_Open = 0,
-       dot11AuthAlgrthm_Shared,
-       dot11AuthAlgrthm_8021X,
-       dot11AuthAlgrthm_Auto,
-       dot11AuthAlgrthm_WAPI,
-       dot11AuthAlgrthm_MaxNum
-};
-
-/*  Scan type including active and passive scan. */
-enum rt_scan_type {
-       SCAN_PASSIVE,
-       SCAN_ACTIVE,
-       SCAN_MIX,
-};
-
-/*
-there are several "locks" in mlme_priv,
-since mlme_priv is a shared resource between many threads,
-like ISR/Call-Back functions, the OID handlers, and even timer functions.
-
-Each _queue has its own locks, already.
-Other items are protected by mlme_priv.lock.
-
-To avoid possible dead lock, any thread trying to modifiying mlme_priv
-SHALL not lock up more than one lock at a time!
-*/
-
-#define traffic_threshold      10
-#define        traffic_scan_period     500
-
-struct sitesurvey_ctrl {
-       u64     last_tx_pkts;
-       uint    last_rx_pkts;
-       int     traffic_busy;
-       struct timer_list sitesurvey_ctrl_timer;
-};
-
-struct rt_link_detect {
-       u32     NumTxOkInPeriod;
-       u32     NumRxOkInPeriod;
-       u32     NumRxUnicastOkInPeriod;
-       bool    bBusyTraffic;
-       bool    bTxBusyTraffic;
-       bool    bRxBusyTraffic;
-       bool    bHigherBusyTraffic; /*  For interrupt migration purpose. */
-       bool    bHigherBusyRxTraffic; /* We may disable Tx interrupt according
-                                      * to Rx traffic. */
-       bool    bHigherBusyTxTraffic; /* We may disable Tx interrupt according
-                                      * to Tx traffic. */
-};
-
-struct profile_info {
-       u8      ssidlen;
-       u8      ssid[WLAN_SSID_MAXLEN];
-       u8      peermac[ETH_ALEN];
-};
-
-struct tx_invite_req_info {
-       u8      token;
-       u8      benable;
-       u8      go_ssid[WLAN_SSID_MAXLEN];
-       u8      ssidlen;
-       u8      go_bssid[ETH_ALEN];
-       u8      peer_macaddr[ETH_ALEN];
-       u8      operating_ch;   /* This information will be set by using the
-                                * p2p_set op_ch=x */
-       u8      peer_ch;        /* The listen channel for peer P2P device */
-};
-
-struct tx_invite_resp_info {
-       u8      token;  /* Used to record the dialog token of p2p invitation
-                        * request frame. */
-};
-
-struct tx_provdisc_req_info {
-       u16     wps_config_method_request;      /* Used when sending the
-                                                * provisioning request frame*/
-       u16     peer_channel_num[2];            /* The channel number which the
-                                                * receiver stands. */
-       struct ndis_802_11_ssid ssid;
-       u8      peerDevAddr[ETH_ALEN];          /* Peer device address */
-       u8      peerIFAddr[ETH_ALEN];           /* Peer interface address */
-       u8      benable;                        /* This provision discovery
-                                                * request frame is trigger
-                                                * to send or not */
-};
-
-/* When peer device issue prov_disc_req first, we should store the following
- * information */
-/* The UI must know this information to know which config method the
- * remote p2p device needs. */
-struct rx_provdisc_req_info {
-       u8      peerDevAddr[ETH_ALEN];          /* Peer device address */
-       u8      strconfig_method_desc_of_prov_disc_req[4];      /* description
-                       * for the config method located in the provisioning
-                       * discovery request frame. */
-};
-
-struct tx_nego_req_info {
-       u16     peer_channel_num[2];    /* The channel number. */
-       u8      peerDevAddr[ETH_ALEN];  /* Peer device address */
-       u8      benable;                /* This negotiation request frame is
-                                        * trigger to send or not */
-};
-
-struct group_id_info {
-       u8      go_device_addr[ETH_ALEN];       /* The GO's device address of
-                                                * this P2P group */
-       u8      ssid[WLAN_SSID_MAXLEN]; /* The SSID of this P2P group */
-};
-
-struct scan_limit_info {
-       u8      scan_op_ch_only;        /* When this flag is set, the driver
-                                        * should only scan the op. channel */
-       u8      operation_ch[2];        /* Store the op. chan of invitation */
-};
-
-struct wifidirect_info {
-       struct adapter *padapter;
-       struct timer_list find_phase_timer;
-       struct timer_list restore_p2p_state_timer;
-
-       /* Used to do the scanning. After confirming the peer is availalble,
-        * the driver transmits the P2P frame to peer. */
-       struct timer_list pre_tx_scan_timer;
-       struct timer_list reset_ch_sitesurvey;
-       struct timer_list reset_ch_sitesurvey2; /* Just for resetting the scan
-                                        * limit function by using p2p nego */
-       struct tx_provdisc_req_info     tx_prov_disc_info;
-       struct rx_provdisc_req_info rx_prov_disc_info;
-       struct tx_invite_req_info       invitereq_info;
-       /* Store the profile information of persistent group */
-       struct profile_info profileinfo[P2P_MAX_PERSISTENT_GROUP_NUM];
-       struct tx_invite_resp_info      inviteresp_info;
-       struct tx_nego_req_info nego_req_info;
-       /* Store the group id info when doing the group negot handshake. */
-       struct group_id_info groupid_info;
-       /* Used for get the limit scan channel from the Invitation procedure */
-       struct scan_limit_info rx_invitereq_info;
-       /* Used for get the limit scan chan from the P2P negotiation handshake*/
-       struct scan_limit_info p2p_info;
-       enum P2P_ROLE role;
-       enum P2P_STATE pre_p2p_state;
-       enum P2P_STATE p2p_state;
-       /* The device address should be the mac address of this device. */
-       u8 device_addr[ETH_ALEN];
-       u8 interface_addr[ETH_ALEN];
-       u8 social_chan[4];
-       u8 listen_channel;
-       u8 operating_channel;
-       u8 listen_dwell;        /* This value should be between 1 and 3 */
-       u8 support_rate[8];
-       u8 p2p_wildcard_ssid[P2P_WILDCARD_SSID_LEN];
-       u8 intent;      /* should only include the intent value. */
-       u8 p2p_peer_interface_addr[ETH_ALEN];
-       u8 p2p_peer_device_addr[ETH_ALEN];
-       u8 peer_intent; /* Included the intent value and tie breaker value. */
-       /* Device name for displaying on searching device screen */
-       u8 device_name[WPS_MAX_DEVICE_NAME_LEN];
-       u8 device_name_len;
-       u8 profileindex; /* Used to point to the index of profileinfo array */
-       u8 peer_operating_ch;
-       u8 find_phase_state_exchange_cnt;
-       /* The device password ID for group negotiation */
-       u16 device_password_id_for_nego;
-       u8 negotiation_dialog_token;
-       /* SSID information for group negotitation */
-       u8 nego_ssid[WLAN_SSID_MAXLEN];
-       u8 nego_ssidlen;
-       u8 p2p_group_ssid[WLAN_SSID_MAXLEN];
-       u8 p2p_group_ssid_len;
-       /* Flag to know if the persistent function should be supported or not.*/
-       u8 persistent_supported;
-       /* In the Sigma test, the Sigma will provide this enable from the
-        * sta_set_p2p CAPI. */
-       /*      0: disable */
-       /*      1: enable */
-       u8 session_available;   /* Flag to set the WFD session available to
-                                * enable or disable "by Sigma" */
-       /* In the Sigma test, the Sigma will disable the session available
-        * by using the sta_preset CAPI. */
-       /*      0: disable */
-       /*      1: enable */
-
-       /* This field will store the WPS value (PIN value or PBC) that UI had
-        * got from the user. */
-       enum    P2P_WPSINFO ui_got_wps_info;
-       u16 supported_wps_cm;   /* This field describes the WPS config method
-                                * which this driver supported. */
-                               /* The value should be the combination of config
-                                * method defined in page104 of WPS v2.0 spec.*/
-       /* This field will contain the length of body of P2P Channel List
-        * attribute of group negotiation response frame. */
-       uint channel_list_attr_len;
-       /* This field will contain the body of P2P Channel List attribute of
-        * group negotitation response frame. */
-       /* We will use the channel_cnt and channel_list fields when constructing
-        * the group negotiation confirm frame. */
-       u8 channel_list_attr[100];
-       enum P2P_PS_MODE p2p_ps_mode; /*  indicate p2p ps mode */
-       enum P2P_PS_STATE p2p_ps_state; /*  indicate p2p ps state */
-       u8 noa_index; /*  Identifies and instance of Notice of Absence timing. */
-       u8 ctwindow; /*  Client traffic window. A period of time in TU after TBTT. */
-       u8 opp_ps; /*  opportunistic power save. */
-       u8 noa_num; /*  number of NoA descriptor in P2P IE. */
-       u8 noa_count[P2P_MAX_NOA_NUM]; /*  Count for owner, Type of client. */
-       /* Max duration for owner, preferred or min acceptable duration for
-        * client. */
-       u32 noa_duration[P2P_MAX_NOA_NUM];
-       /* Length of interval for owner, preferred or max acceptable interval
-        * of client. */
-       u32 noa_interval[P2P_MAX_NOA_NUM];
-       /* schedule expressed in terms of the lower 4 bytes of the TSF timer. */
-       u32 noa_start_time[P2P_MAX_NOA_NUM];
-};
-
-struct tdls_ss_record {        /* signal strength record */
-       u8 macaddr[ETH_ALEN];
-       u8 RxPWDBAll;
-       u8 is_tdls_sta; /*  true: direct link sta, false: else */
-};
-
-struct tdls_info {
-       u8 ap_prohibited;
-       uint setup_state;
-       u8 sta_cnt;
-       u8 sta_maximum; /*  1:tdls sta is equal (NUM_STA-1), reach max direct link number; 0: else; */
-       struct tdls_ss_record   ss_record;
-       u8 macid_index; /* macid entry that is ready to write */
-       u8 clear_cam;   /* cam entry that is trying to clear, using it in direct link teardown */
-       u8 ch_sensing;
-       u8 cur_channel;
-       u8 candidate_ch;
-       u8 collect_pkt_num[MAX_CHANNEL_NUM];
-       spinlock_t cmd_lock;
-       spinlock_t hdl_lock;
-       u8 watchdog_count;
-       u8 dev_discovered;              /* WFD_TDLS: for sigma test */
-       u8 enable;
-};
-
-struct qos_priv {
-       /* bit mask option: u-apsd,
-        * s-apsd, ts, block ack... */
-       unsigned int qos_option;
-};
-
-struct mlme_priv {
-       spinlock_t lock;
-       int fw_state;   /* shall we protect this variable? maybe not necessarily... */
-       bool bScanInProcess;
-       u8 to_join; /* flag */
-       u8 to_roaming; /*  roaming trying times */
-
-       u8 *nic_hdl;
-
-       struct list_head *pscanned;
-       struct __queue free_bss_pool;
-       struct __queue scanned_queue;
-       u8 *free_bss_buf;
-       u8      key_mask; /* use to restore wep key after hal_init */
-       u32     num_of_scanned;
-
-       struct ndis_802_11_ssid assoc_ssid;
-       u8      assoc_bssid[6];
-
-       struct wlan_network     cur_network;
-       struct wlan_network *cur_network_scanned;
-
-       u32     scan_interval;
-
-       struct timer_list assoc_timer;
-
-       uint assoc_by_bssid;
-       uint assoc_by_rssi;
-
-       struct timer_list scan_to_timer; /*  driver itself handles scan_timeout status. */
-       u32 scan_start_time; /*  used to evaluate the time spent in scanning */
-
-       struct qos_priv qospriv;
-
-       /* Number of non-HT AP/stations */
-       int num_sta_no_ht;
-
-       /* Number of HT AP/stations 20 MHz */
-       /* int num_sta_ht_20mhz; */
-
-       int num_FortyMHzIntolerant;
-       struct ht_priv  htpriv;
-       struct rt_link_detect LinkDetectInfo;
-       struct timer_list dynamic_chk_timer; /* dynamic/periodic check timer */
-
-       u8      acm_mask; /*  for wmm acm mask */
-       u8      ChannelPlan;
-       enum rt_scan_type scan_mode; /*  active: 1, passive: 0 */
-
-       /* u8 probereq_wpsie[MAX_WPS_IE_LEN];added in probe req */
-       /* int probereq_wpsie_len; */
-       u8 *wps_probe_req_ie;
-       u32 wps_probe_req_ie_len;
-
-       u8 *assoc_req;
-       u32 assoc_req_len;
-
-       /* Number of associated Non-ERP stations (i.e., stations using 802.11b
-        * in 802.11g BSS) */
-       int num_sta_non_erp;
-
-       /* Number of associated stations that do not support Short Slot Time */
-       int num_sta_no_short_slot_time;
-
-       /* Number of associated stations that do not support Short Preamble */
-       int num_sta_no_short_preamble;
-
-       int olbc; /* Overlapping Legacy BSS Condition */
-
-       /* Number of HT assoc sta that do not support greenfield */
-       int num_sta_ht_no_gf;
-
-       /* Number of associated non-HT stations */
-       /* int num_sta_no_ht; */
-
-       /* Number of HT associated stations 20 MHz */
-       int num_sta_ht_20mhz;
-
-       /* Overlapping BSS information */
-       int olbc_ht;
-
-       u16 ht_op_mode;
-
-       u8 *wps_beacon_ie;
-       /* u8 *wps_probe_req_ie; */
-       u8 *wps_probe_resp_ie;
-       u8 *wps_assoc_resp_ie;
-
-       u32 wps_beacon_ie_len;
-       u32 wps_probe_resp_ie_len;
-       u32 wps_assoc_resp_ie_len;
-
-       u8 *p2p_beacon_ie;
-       u8 *p2p_probe_req_ie;
-       u8 *p2p_probe_resp_ie;
-       u8 *p2p_go_probe_resp_ie; /* for GO */
-       u8 *p2p_assoc_req_ie;
-
-       u32 p2p_beacon_ie_len;
-       u32 p2p_probe_req_ie_len;
-       u32 p2p_probe_resp_ie_len;
-       u32 p2p_go_probe_resp_ie_len; /* for GO */
-       u32 p2p_assoc_req_ie_len;
-       spinlock_t bcn_update_lock;
-       u8              update_bcn;
-};
-
-int hostapd_mode_init(struct adapter *padapter);
-void hostapd_mode_unload(struct adapter *padapter);
-
-extern unsigned char WPA_TKIP_CIPHER[4];
-extern unsigned char RSN_TKIP_CIPHER[4];
-extern unsigned char REALTEK_96B_IE[];
-extern unsigned char   MCS_rate_2R[16];
-extern unsigned char   MCS_rate_1R[16];
-
-void rtw_joinbss_event_prehandle(struct adapter *adapter, u8 *pbuf);
-void rtw_survey_event_callback(struct adapter *adapter, u8 *pbuf);
-void rtw_surveydone_event_callback(struct adapter *adapter, u8 *pbuf);
-void rtw_joinbss_event_callback(struct adapter *adapter, u8 *pbuf);
-void rtw_stassoc_event_callback(struct adapter *adapter, u8 *pbuf);
-void rtw_stadel_event_callback(struct adapter *adapter, u8 *pbuf);
-void indicate_wx_scan_complete_event(struct adapter *padapter);
-void rtw_indicate_wx_assoc_event(struct adapter *padapter);
-void rtw_indicate_wx_disassoc_event(struct adapter *padapter);
-int event_thread(void *context);
-void rtw_free_network_queue(struct adapter *adapter, u8 isfreeall);
-int rtw_init_mlme_priv(struct adapter *adapter);
-void rtw_free_mlme_priv (struct mlme_priv *pmlmepriv);
-int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv);
-int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv,
-               int keyid, u8 set_tx);
-int rtw_set_auth(struct adapter *adapter, struct security_priv *psecuritypriv);
-
-static inline u8 *get_bssid(struct mlme_priv *pmlmepriv)
-{      /* if sta_mode:pmlmepriv->cur_network.network.MacAddress=> bssid */
-       /*  if adhoc_mode:pmlmepriv->cur_network.network.MacAddress=> ibss mac address */
-       return pmlmepriv->cur_network.network.MacAddress;
-}
-
-static inline bool check_fwstate(struct mlme_priv *pmlmepriv, int state)
-{
-       if (pmlmepriv->fw_state & state)
-               return true;
-
-       return false;
-}
-
-/*
- * No Limit on the calling context,
- * therefore set it to be the critical section...
- *
- * ### NOTE:#### (!!!!)
- * MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock
- */
-static inline void set_fwstate(struct mlme_priv *pmlmepriv, int state)
-{
-       pmlmepriv->fw_state |= state;
-       /* FOR HW integration */
-       if (_FW_UNDER_SURVEY == state)
-               pmlmepriv->bScanInProcess = true;
-}
-
-static inline void _clr_fwstate_(struct mlme_priv *pmlmepriv, int state)
-{
-       pmlmepriv->fw_state &= ~state;
-       /* FOR HW integration */
-       if (_FW_UNDER_SURVEY == state)
-               pmlmepriv->bScanInProcess = false;
-}
-
-/*
- * No Limit on the calling context,
- * therefore set it to be the critical section...
- */
-static inline void clr_fwstate(struct mlme_priv *pmlmepriv, int state)
-{
-       spin_lock_bh(&pmlmepriv->lock);
-       if (check_fwstate(pmlmepriv, state))
-               pmlmepriv->fw_state ^= state;
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-static inline void clr_fwstate_ex(struct mlme_priv *pmlmepriv, int state)
-{
-       spin_lock_bh(&pmlmepriv->lock);
-       _clr_fwstate_(pmlmepriv, state);
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-static inline void up_scanned_network(struct mlme_priv *pmlmepriv)
-{
-       spin_lock_bh(&pmlmepriv->lock);
-       pmlmepriv->num_of_scanned++;
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-static inline void down_scanned_network(struct mlme_priv *pmlmepriv)
-{
-       spin_lock_bh(&pmlmepriv->lock);
-       pmlmepriv->num_of_scanned--;
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-static inline void set_scanned_network_val(struct mlme_priv *pmlmepriv, int val)
-{
-       spin_lock_bh(&pmlmepriv->lock);
-       pmlmepriv->num_of_scanned = val;
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-u16 rtw_get_capability(struct wlan_bssid_ex *bss);
-void rtw_update_scanned_network(struct adapter *adapter,
-                               struct wlan_bssid_ex *target);
-void rtw_disconnect_hdl_under_linked(struct adapter *adapter,
-                                    struct sta_info *psta, u8 free_assoc);
-void rtw_generate_random_ibss(u8 *pibss);
-struct wlan_network *rtw_find_network(struct __queue *scanned_queue, u8 *addr);
-struct wlan_network *rtw_get_oldest_wlan_network(struct __queue *scanned_queue);
-
-void rtw_free_assoc_resources(struct adapter *adapter, int lock_scanned_queue);
-void rtw_indicate_disconnect(struct adapter *adapter);
-void rtw_indicate_connect(struct adapter *adapter);
-void rtw_indicate_scan_done(struct adapter *padapter);
-
-int rtw_restruct_sec_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie,
-                       uint in_len);
-int rtw_restruct_wmm_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie,
-                       uint in_len, uint initial_out_len);
-void rtw_init_registrypriv_dev_network(struct adapter *adapter);
-
-void rtw_update_registrypriv_dev_network(struct adapter *adapter);
-
-void _rtw_join_timeout_handler(struct adapter *adapter);
-void rtw_scan_timeout_handler(struct adapter *adapter);
-
- void rtw_dynamic_check_timer_handlder(struct adapter *adapter);
-
-void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv);
-
-struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv);
-
-void _rtw_free_network(struct mlme_priv *pmlmepriv,
-                      struct wlan_network *pnetwork, u8 isfreeall);
-
-struct wlan_network *_rtw_find_network(struct __queue *scanned_queue, u8 *addr);
-
-void _rtw_free_network_queue(struct adapter *padapter, u8 isfreeall);
-
-int rtw_if_up(struct adapter *padapter);
-
-u8 *rtw_get_capability_from_ie(u8 *ie);
-u8 *rtw_get_beacon_interval_from_ie(u8 *ie);
-
-void rtw_joinbss_reset(struct adapter *padapter);
-
-unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie,
-                                  u8 *out_ie, uint in_len, uint *pout_len);
-void rtw_update_ht_cap(struct adapter *padapter, u8 *pie, uint ie_len);
-void rtw_issue_addbareq_cmd(struct adapter *padapter,
-                           struct xmit_frame *pxmitframe);
-
-int rtw_is_same_ibss(struct adapter *adapter, struct wlan_network *pnetwork);
-int is_same_network(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst);
-
-void rtw_roaming(struct adapter *padapter, struct wlan_network *tgt_network);
-void _rtw_roaming(struct adapter *padapter, struct wlan_network *tgt_network);
-void rtw_set_roaming(struct adapter *adapter, u8 to_roaming);
-u8 rtw_to_roaming(struct adapter *adapter);
-
-void rtw_set_max_rpt_macid(struct adapter *adapter, u8 macid);
-void rtw_sta_media_status_rpt(struct adapter *adapter, struct sta_info *psta,
-                             u32 mstatus);
-
-u8 rtw_current_antenna(struct adapter *adapter);
-
-#endif /* __RTL871X_MLME_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_mlme_ext.h b/drivers/staging/r8188eu/include/rtw_mlme_ext.h
deleted file mode 100644 (file)
index 589de7c..0000000
+++ /dev/null
@@ -1,753 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTW_MLME_EXT_H_
-#define __RTW_MLME_EXT_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-#include "wlan_bssdef.h"
-
-/*     Commented by Albert 20101105 */
-/*     Increase the SURVEY_TO value from 100 to 150  ( 100ms to 150ms ) */
-/*     The Realtek 8188CE SoftAP will spend around 100ms to send the probe response after receiving the probe request. */
-/*     So, this driver tried to extend the dwell time for each scanning channel. */
-/*     This will increase the chance to receive the probe response from SoftAP. */
-
-#define SURVEY_TO              (100)
-#define REAUTH_TO              (300) /* 50) */
-#define REASSOC_TO             (300) /* 50) */
-/* define DISCONNECT_TO        (3000) */
-#define ADDBA_TO                       (2000)
-
-#define LINKED_TO (1) /* unit:2 sec, 1x2=2 sec */
-
-#define REAUTH_LIMIT   (4)
-#define REASSOC_LIMIT  (4)
-
-#define        DYNAMIC_FUNC_DISABLE                    (0x0)
-
-/*  ====== ODM_ABILITY_E ======== */
-/*  BB ODM section BIT 0-15 */
-#define        DYNAMIC_BB_DIG                          BIT(0)
-
-#define                DYNAMIC_ALL_FUNC_ENABLE         0xFFFFFFF
-
-#define _HW_STATE_NOLINK_              0x00
-#define _HW_STATE_ADHOC_               0x01
-#define _HW_STATE_STATION_     0x02
-#define _HW_STATE_AP_                  0x03
-
-#define                _1M_RATE_       0
-#define                _2M_RATE_       1
-#define                _5M_RATE_       2
-#define                _11M_RATE_      3
-#define                _6M_RATE_       4
-#define                _9M_RATE_       5
-#define                _12M_RATE_      6
-#define                _18M_RATE_      7
-#define                _24M_RATE_      8
-#define                _36M_RATE_      9
-#define                _48M_RATE_      10
-#define                _54M_RATE_      11
-
-extern unsigned char RTW_WPA_OUI[];
-extern unsigned char WMM_OUI[];
-extern unsigned char WPS_OUI[];
-extern unsigned char WFD_OUI[];
-extern unsigned char P2P_OUI[];
-
-extern unsigned char WMM_INFO_OUI[];
-extern unsigned char WMM_PARA_OUI[];
-
-/*  Channel Plan Type. */
-/*  Note: */
-/*     We just add new channel plan when the new channel plan is different
- *      from any of the following channel plan. */
-/*     If you just want to customize the actions(scan period or join actions)
- *      about one of the channel plan, */
-/*     customize them in struct rt_channel_info in the RT_CHANNEL_LIST. */
-enum RT_CHANNEL_DOMAIN {
-       /*  old channel plan mapping =====  */
-       RT_CHANNEL_DOMAIN_FCC = 0x00,
-       RT_CHANNEL_DOMAIN_IC = 0x01,
-       RT_CHANNEL_DOMAIN_ETSI = 0x02,
-       RT_CHANNEL_DOMAIN_SPAIN = 0x03,
-       RT_CHANNEL_DOMAIN_FRANCE = 0x04,
-       RT_CHANNEL_DOMAIN_MKK = 0x05,
-       RT_CHANNEL_DOMAIN_MKK1 = 0x06,
-       RT_CHANNEL_DOMAIN_ISRAEL = 0x07,
-       RT_CHANNEL_DOMAIN_TELEC = 0x08,
-       RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN = 0x09,
-       RT_CHANNEL_DOMAIN_WORLD_WIDE_13 = 0x0A,
-       RT_CHANNEL_DOMAIN_TAIWAN = 0x0B,
-       RT_CHANNEL_DOMAIN_CHINA = 0x0C,
-       RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO = 0x0D,
-       RT_CHANNEL_DOMAIN_KOREA = 0x0E,
-       RT_CHANNEL_DOMAIN_TURKEY = 0x0F,
-       RT_CHANNEL_DOMAIN_JAPAN = 0x10,
-       RT_CHANNEL_DOMAIN_FCC_NO_DFS = 0x11,
-       RT_CHANNEL_DOMAIN_JAPAN_NO_DFS = 0x12,
-       RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS = 0x14,
-
-       /*  new channel plan mapping, (2GDOMAIN_5GDOMAIN) ===== */
-       RT_CHANNEL_DOMAIN_WORLD_NULL = 0x20,
-       RT_CHANNEL_DOMAIN_ETSI1_NULL = 0x21,
-       RT_CHANNEL_DOMAIN_FCC1_NULL = 0x22,
-       RT_CHANNEL_DOMAIN_MKK1_NULL = 0x23,
-       RT_CHANNEL_DOMAIN_ETSI2_NULL = 0x24,
-       RT_CHANNEL_DOMAIN_FCC1_FCC1 = 0x25,
-       RT_CHANNEL_DOMAIN_WORLD_ETSI1 = 0x26,
-       RT_CHANNEL_DOMAIN_MKK1_MKK1 = 0x27,
-       RT_CHANNEL_DOMAIN_WORLD_KCC1 = 0x28,
-       RT_CHANNEL_DOMAIN_WORLD_FCC2 = 0x29,
-       RT_CHANNEL_DOMAIN_WORLD_FCC3 = 0x30,
-       RT_CHANNEL_DOMAIN_WORLD_FCC4 = 0x31,
-       RT_CHANNEL_DOMAIN_WORLD_FCC5 = 0x32,
-       RT_CHANNEL_DOMAIN_WORLD_FCC6 = 0x33,
-       RT_CHANNEL_DOMAIN_FCC1_FCC7 = 0x34,
-       RT_CHANNEL_DOMAIN_WORLD_ETSI2 = 0x35,
-       RT_CHANNEL_DOMAIN_WORLD_ETSI3 = 0x36,
-       RT_CHANNEL_DOMAIN_MKK1_MKK2 = 0x37,
-       RT_CHANNEL_DOMAIN_MKK1_MKK3 = 0x38,
-       RT_CHANNEL_DOMAIN_FCC1_NCC1 = 0x39,
-       RT_CHANNEL_DOMAIN_FCC1_NCC2 = 0x40,
-       RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN_2G = 0x41,
-       /*  Add new channel plan above this line=============== */
-       RT_CHANNEL_DOMAIN_MAX,
-       RT_CHANNEL_DOMAIN_REALTEK_DEFINE = 0x7F,
-};
-
-enum RT_CHANNEL_DOMAIN_2G {
-       RT_CHANNEL_DOMAIN_2G_WORLD = 0x00,              /* Worldwide 13 */
-       RT_CHANNEL_DOMAIN_2G_ETSI1 = 0x01,              /* Europe */
-       RT_CHANNEL_DOMAIN_2G_FCC1 = 0x02,               /* US */
-       RT_CHANNEL_DOMAIN_2G_MKK1 = 0x03,               /* Japan */
-       RT_CHANNEL_DOMAIN_2G_ETSI2 = 0x04,              /* France */
-       RT_CHANNEL_DOMAIN_2G_NULL = 0x05,
-       /*  Add new channel plan above this line=============== */
-       RT_CHANNEL_DOMAIN_2G_MAX,
-};
-
-#define rtw_is_channel_plan_valid(chplan)                      \
-       (chplan < RT_CHANNEL_DOMAIN_MAX ||                      \
-        chplan == RT_CHANNEL_DOMAIN_REALTEK_DEFINE)
-
-struct rt_channel_plan {
-       unsigned char   Channel[MAX_CHANNEL_NUM];
-       unsigned char   Len;
-};
-
-struct rt_channel_plan_map {
-       unsigned char   Index2G;
-};
-
-enum Associated_AP {
-       atherosAP       = 0,
-       broadcomAP      = 1,
-       ciscoAP         = 2,
-       marvellAP       = 3,
-       ralinkAP        = 4,
-       realtekAP       = 5,
-       airgocapAP      = 6,
-       unknownAP       = 7,
-       maxAP,
-};
-
-enum HT_IOT_PEER {
-       HT_IOT_PEER_UNKNOWN             = 0,
-       HT_IOT_PEER_REALTEK             = 1,
-       HT_IOT_PEER_REALTEK_92SE        = 2,
-       HT_IOT_PEER_BROADCOM            = 3,
-       HT_IOT_PEER_RALINK              = 4,
-       HT_IOT_PEER_ATHEROS             = 5,
-       HT_IOT_PEER_CISCO               = 6,
-       HT_IOT_PEER_MERU                = 7,
-       HT_IOT_PEER_MARVELL             = 8,
-       HT_IOT_PEER_REALTEK_SOFTAP      = 9,/*  peer is RealTek SOFT_AP */
-       HT_IOT_PEER_SELF_SOFTAP         = 10, /*  Self is SoftAP */
-       HT_IOT_PEER_AIRGO               = 11,
-       HT_IOT_PEER_INTEL               = 12,
-       HT_IOT_PEER_RTK_APCLIENT        = 13,
-       HT_IOT_PEER_REALTEK_81XX        = 14,
-       HT_IOT_PEER_REALTEK_WOW         = 15,
-       HT_IOT_PEER_TENDA               = 16,
-       HT_IOT_PEER_MAX                 = 17
-};
-
-enum SCAN_STATE {
-       SCAN_DISABLE = 0,
-       SCAN_START = 1,
-       SCAN_TXNULL = 2,
-       SCAN_PROCESS = 3,
-       SCAN_COMPLETE = 4,
-       SCAN_STATE_MAX,
-};
-
-typedef void (*mlme_handler)(struct adapter *adapt, struct recv_frame *frame);
-
-struct ss_res {
-       int     state;
-       int     bss_cnt;
-       int     channel_idx;
-       int     scan_mode;
-       u8 ssid_num;
-       u8 ch_num;
-       struct ndis_802_11_ssid ssid[RTW_SSID_SCAN_AMOUNT];
-       struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
-};
-
-/* define AP_MODE                              0x0C */
-/* define STATION_MODE 0x08 */
-/* define AD_HOC_MODE          0x04 */
-/* define NO_LINK_MODE 0x00 */
-
-#define WIFI_FW_NULL_STATE             _HW_STATE_NOLINK_
-#define        WIFI_FW_STATION_STATE           _HW_STATE_STATION_
-#define        WIFI_FW_AP_STATE                _HW_STATE_AP_
-#define        WIFI_FW_ADHOC_STATE             _HW_STATE_ADHOC_
-
-#define        WIFI_FW_AUTH_NULL               0x00000100
-#define        WIFI_FW_AUTH_STATE              0x00000200
-#define        WIFI_FW_AUTH_SUCCESS            0x00000400
-
-#define        WIFI_FW_ASSOC_STATE             0x00002000
-#define        WIFI_FW_ASSOC_SUCCESS           0x00004000
-
-#define        WIFI_FW_LINKING_STATE           (WIFI_FW_AUTH_NULL |            \
-                                       WIFI_FW_AUTH_STATE |            \
-                                       WIFI_FW_AUTH_SUCCESS |          \
-                                       WIFI_FW_ASSOC_STATE)
-
-struct FW_Sta_Info {
-       struct sta_info *psta;
-       u32     status;
-       u32     rx_pkt;
-       u32     retry;
-       unsigned char SupportedRates[NDIS_802_11_LENGTH_RATES_EX];
-};
-
-/*
- * Usage:
- * When one iface acted as AP mode and the other iface is STA mode and scanning,
- * it should switch back to AP's operating channel periodically.
- * Parameters info:
- * When the driver scanned RTW_SCAN_NUM_OF_CH channels, it would switch back to
- * AP's operating channel for
- * RTW_STAY_AP_CH_MILLISECOND * SURVEY_TO milliseconds.
- * Example:
- * For chip supports 2.4G + 5GHz and AP mode is operating in channel 1,
- * RTW_SCAN_NUM_OF_CH is 8, RTW_STAY_AP_CH_MS is 3 and SURVEY_TO is 100.
- * When it's STA mode gets set_scan command,
- * it would
- * 1. Doing the scan on channel 1.2.3.4.5.6.7.8
- * 2. Back to channel 1 for 300 milliseconds
- * 3. Go through doing site survey on channel 9.10.11.36.40.44.48.52
- * 4. Back to channel 1 for 300 milliseconds
- * 5. ... and so on, till survey done.
- */
-
-struct mlme_ext_info {
-       u32     state;
-       u32     reauth_count;
-       u32     reassoc_count;
-       u32     link_count;
-       u32     auth_seq;
-       u32     auth_algo;      /*  802.11 auth, could be open, shared, auto */
-       u32     authModeToggle;
-       u32     enc_algo;/* encrypt algorithm; */
-       u32     key_index;      /*  this is only valid for legacy wep,
-                                *  0~3 for key id. */
-       u32     iv;
-       u8      chg_txt[128];
-       u16     aid;
-       u16     bcn_interval;
-       u16     capability;
-       u8      assoc_AP_vendor;
-       u8      slotTime;
-       u8      preamble_mode;
-       u8      WMM_enable;
-       u8      ERP_enable;
-       u8      ERP_IE;
-       u8      HT_enable;
-       u8      HT_caps_enable;
-       u8      HT_info_enable;
-       u8      HT_protection;
-       u8      turboMode_cts2self;
-       u8      turboMode_rtsen;
-       u8      SM_PS;
-       u8      agg_enable_bitmap;
-       u8      ADDBA_retry_count;
-       u8      candidate_tid_bitmap;
-       u8      dialogToken;
-       /*  Accept ADDBA Request */
-       bool bAcceptAddbaReq;
-       u8      bwmode_updated;
-       u8      hidden_ssid_mode;
-
-       struct WMM_para_element WMM_param;
-       struct HT_caps_element  HT_caps;
-       struct HT_info_element  HT_info;
-       struct wlan_bssid_ex    network;/* join network or bss_network,
-                                        * if in ap mode, it is the same
-                                        * as cur_network.network */
-       struct FW_Sta_Info      FW_sta_info[NUM_STA];
-};
-
-/*  The channel information about this channel including joining,
- *  scanning, and power constraints. */
-struct rt_channel_info {
-       u8      ChannelNum;     /*  The channel number. */
-       enum rt_scan_type ScanType;     /*  Scan type such as passive
-                                        *  or active scan. */
-       u32     rx_count;
-};
-
-int rtw_ch_set_search_ch(struct rt_channel_info *ch_set, const u32 ch);
-
-/*  P2P_MAX_REG_CLASSES - Maximum number of regulatory classes */
-#define P2P_MAX_REG_CLASSES 10
-
-/*  P2P_MAX_REG_CLASS_CHANNELS - Maximum number of chan per regulatory class */
-#define P2P_MAX_REG_CLASS_CHANNELS 20
-
-/*   struct p2p_channels - List of supported channels */
-struct p2p_channels {
-       /*  struct p2p_reg_class - Supported regulatory class */
-       struct p2p_reg_class {
-               /*  reg_class - Regulatory class (IEEE 802.11-2007, Annex J) */
-               u8 reg_class;
-
-               /*  channel - Supported channels */
-               u8 channel[P2P_MAX_REG_CLASS_CHANNELS];
-
-               /*  channels - Number of channel entries in use */
-               size_t channels;
-       } reg_class[P2P_MAX_REG_CLASSES];
-
-       /*  reg_classes - Number of reg_class entries in use */
-       size_t reg_classes;
-};
-
-struct p2p_oper_class_map {
-       enum hw_mode {IEEE80211G} mode;
-       u8 op_class;
-       u8 min_chan;
-       u8 max_chan;
-       u8 inc;
-       enum {BW20, BW40PLUS, BW40MINUS} bw;
-};
-
-struct mlme_ext_priv {
-       struct adapter  *padapter;
-       u8      mlmeext_init;
-       atomic_t event_seq;
-       u16     mgnt_seq;
-
-       unsigned char   cur_channel;
-       unsigned char   cur_bwmode;
-       unsigned char   cur_ch_offset;/* PRIME_CHNL_OFFSET */
-       unsigned char   cur_wireless_mode;      /*  NETWORK_TYPE */
-
-       unsigned char   oper_channel; /* saved chan info when call
-                                      * set_channel_bw */
-       unsigned char   oper_bwmode;
-       unsigned char   oper_ch_offset;/* PRIME_CHNL_OFFSET */
-
-       unsigned char   max_chan_nums;
-       struct rt_channel_info channel_set[MAX_CHANNEL_NUM];
-       struct p2p_channels channel_list;
-       unsigned char   basicrate[NumRates];
-       unsigned char   datarate[NumRates];
-
-       struct ss_res           sitesurvey_res;
-       struct mlme_ext_info    mlmext_info;/* for sta/adhoc mode, including
-                                            * current scan/connecting/connected
-                                            * related info. For ap mode,
-                                            * network includes ap's cap_info*/
-       struct timer_list survey_timer;
-       struct timer_list link_timer;
-       u16     chan_scan_time;
-
-       u8      scan_abort;
-       u8      tx_rate; /*  TXRATE when USERATE is set. */
-
-       u32     retry; /* retry for issue probereq */
-
-       u64 TSFValue;
-
-       unsigned char bstart_bss;
-       u8 update_channel_plan_by_ap_done;
-       /* recv_decache check for Action_public frame */
-       u8 action_public_dialog_token;
-       u16      action_public_rxseq;
-       u8 active_keep_alive_check;
-};
-
-void init_mlme_ext_priv(struct adapter *adapter);
-int init_hw_mlme_ext(struct adapter *padapter);
-void free_mlme_ext_priv (struct mlme_ext_priv *pmlmeext);
-struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv);
-
-unsigned char networktype_to_raid(unsigned char network_type);
-u8 judge_network_type(struct adapter *padapter, unsigned char *rate, int len);
-void get_rate_set(struct adapter *padapter, unsigned char *pbssrate, int *len);
-
-void Save_DM_Func_Flag(struct adapter *padapter);
-void Restore_DM_Func_Flag(struct adapter *padapter);
-
-void Set_MSR(struct adapter *padapter, u8 type);
-
-u8 rtw_get_oper_ch(struct adapter *adapter);
-void rtw_set_oper_ch(struct adapter *adapter, u8 ch);
-void rtw_set_oper_bw(struct adapter *adapter, u8 bw);
-void rtw_set_oper_choffset(struct adapter *adapter, u8 offset);
-
-void set_channel_bwmode(struct adapter *padapter, unsigned char channel,
-                       unsigned char channel_offset, unsigned short bwmode);
-void SelectChannel(struct adapter *padapter, unsigned char channel);
-void SetBWMode(struct adapter *padapter, unsigned short bwmode,
-              unsigned char channel_offset);
-
-unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval);
-
-void write_cam(struct adapter *padapter, u8 entry, u16 ctrl, u8 *mac, u8 *key);
-void clear_cam_entry(struct adapter *padapter, u8 entry);
-
-void invalidate_cam_all(struct adapter *padapter);
-
-int allocate_fw_sta_entry(struct adapter *padapter);
-void flush_all_cam_entry(struct adapter *padapter);
-
-void rtw_mlme_under_site_survey(struct adapter *adapter);
-void rtw_mlme_site_survey_done(struct adapter *adapter);
-
-void site_survey(struct adapter *padapter);
-u8 collect_bss_info(struct adapter *padapter, struct recv_frame *precv_frame,
-                   struct wlan_bssid_ex *bssid);
-void update_network(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src,
-                   struct adapter *adapter, bool update_ie);
-
-u8 *get_my_bssid(struct wlan_bssid_ex *pnetwork);
-u16 get_beacon_interval(struct wlan_bssid_ex *bss);
-
-bool r8188eu_is_client_associated_to_ap(struct adapter *padapter);
-bool r8188eu_is_client_associated_to_ibss(struct adapter *padapter);
-bool r8188eu_is_ibss_empty(struct adapter *padapter);
-
-unsigned char check_assoc_AP(u8 *pframe, uint len);
-
-int WMM_param_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
-void WMMOnAssocRsp(struct adapter *padapter);
-
-void HT_caps_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
-void HT_info_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
-void HTOnAssocRsp(struct adapter *padapter);
-
-void ERP_IE_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
-void VCS_update(struct adapter *padapter, struct sta_info *psta);
-
-void update_beacon_info(struct adapter *padapter, u8 *ie_ptr, uint ie_len, struct sta_info *psta);
-int rtw_check_bcn_info(struct adapter  *Adapter, u8 *pframe, u32 packet_len);
-void update_IOT_info(struct adapter *padapter);
-void update_capinfo(struct adapter *adapter, u16 updatecap);
-void update_wireless_mode(struct adapter *padapter);
-void rtw_set_basic_rate(struct adapter *adapter, u8 *rates);
-void update_tx_basic_rate(struct adapter *padapter, u8 modulation);
-void update_bmc_sta_support_rate(struct adapter *padapter, u32 mac_id);
-int update_sta_support_rate(struct adapter *padapter, u8 *pvar_ie,
-                           uint var_ie_len, int cam_idx);
-
-/* for sta/adhoc mode */
-void update_sta_info(struct adapter *padapter, struct sta_info *psta);
-unsigned int update_basic_rate(unsigned char *ptn, unsigned int ptn_sz);
-unsigned int update_supported_rate(unsigned char *ptn, unsigned int ptn_sz);
-unsigned int update_MSC_rate(struct HT_caps_element *pHT_caps);
-void Update_RA_Entry(struct adapter *padapter, u32 mac_id);
-void set_sta_rate(struct adapter *padapter, struct sta_info *psta);
-
-void receive_disconnect(struct adapter *padapter, unsigned char *macaddr, unsigned short reason);
-
-unsigned char get_highest_rate_idx(u32 mask);
-int support_short_GI(struct adapter *padapter, struct HT_caps_element *caps);
-bool is_ap_in_tkip(struct adapter *padapter);
-
-void report_join_res(struct adapter *padapter, int res);
-void report_survey_event(struct adapter *padapter, struct recv_frame *precv_frame);
-void report_surveydone_event(struct adapter *padapter);
-void report_del_sta_event(struct adapter *padapter,
-                         unsigned char *addr, unsigned short reason);
-void report_add_sta_event(struct adapter *padapter, unsigned char *addr,
-                         int cam_idx);
-
-void beacon_timing_control(struct adapter *padapter);
-u8 set_tx_beacon_cmd(struct adapter *padapter);
-unsigned int setup_beacon_frame(struct adapter *padapter,
-                               unsigned char *beacon_frame);
-void update_mgnt_tx_rate(struct adapter *padapter, u8 rate);
-void update_mgntframe_attrib(struct adapter *padapter,
-                            struct pkt_attrib *pattrib);
-void dump_mgntframe(struct adapter *padapter, struct xmit_frame *pmgntframe);
-s32 dump_mgntframe_and_wait(struct adapter *padapter,
-                           struct xmit_frame *pmgntframe, int timeout_ms);
-s32 dump_mgntframe_and_wait_ack(struct adapter *padapter,
-                               struct xmit_frame *pmgntframe);
-
-void issue_probersp_p2p(struct adapter *padapter, unsigned char *da);
-void issue_p2p_provision_request(struct adapter *padapter, u8 *pssid,
-                                u8 ussidlen, u8 *pdev_raddr);
-void issue_p2p_GO_request(struct adapter *padapter, u8 *raddr);
-void issue_probereq_p2p(struct adapter *padapter);
-void issue_p2p_invitation_response(struct adapter *padapter, u8 *raddr,
-                                  u8 dialogToken, u8 success);
-void issue_p2p_invitation_request(struct adapter *padapter, u8 *raddr);
-void issue_beacon(struct adapter *padapter, int timeout_ms);
-void issue_probersp(struct adapter *padapter, unsigned char *da,
-                   u8 is_valid_p2p_probereq);
-void issue_assocreq(struct adapter *padapter);
-void issue_asocrsp(struct adapter *padapter, unsigned short status,
-                  struct sta_info *pstat, int pkt_type);
-void issue_auth(struct adapter *padapter, struct sta_info *psta,
-               unsigned short status);
-void issue_probereq(struct adapter *padapter, struct ndis_802_11_ssid *pssid,
-                   u8 *da);
-void issue_probereq_ex(struct adapter *padapter, struct ndis_802_11_ssid *pssid, u8 *da);
-int issue_nulldata(struct adapter *padapter, unsigned char *da,
-                  unsigned int power_mode, int try_cnt, int wait_ms);
-int issue_qos_nulldata(struct adapter *padapter, unsigned char *da,
-                      u16 tid, int try_cnt, int wait_ms);
-int issue_deauth(struct adapter *padapter, unsigned char *da,
-                unsigned short reason);
-int issue_deauth_ex(struct adapter *padapter, u8 *da, unsigned short reason,
-                   int try_cnt, int wait_ms);
-void issue_action_BA(struct adapter *padapter, unsigned char *raddr, u8 action,
-                    u16 status, struct ieee80211_mgmt *mgmt_req);
-unsigned int send_delba(struct adapter *padapter, u8 initiator, u8 *addr);
-unsigned int send_beacon(struct adapter *padapter);
-bool get_beacon_valid_bit(struct adapter *adapter);
-void clear_beacon_valid_bit(struct adapter *adapter);
-void rtw_resume_tx_beacon(struct adapter *adapt);
-void rtw_stop_tx_beacon(struct adapter *adapt);
-
-void start_clnt_assoc(struct adapter *padapter);
-void start_clnt_auth(struct adapter *padapter);
-void start_clnt_join(struct adapter *padapter);
-void start_create_ibss(struct adapter *padapter);
-
-void mlmeext_joinbss_event_callback(struct adapter *padapter, int join_res);
-void mlmeext_sta_del_event_callback(struct adapter *padapter);
-void mlmeext_sta_add_event_callback(struct adapter *padapter,
-                                   struct sta_info *psta);
-
-void linked_status_chk(struct adapter *padapter);
-
-void survey_timer_hdl (struct adapter *padapter);
-void link_timer_hdl (struct adapter *padapter);
-void addba_timer_hdl(struct sta_info *psta);
-
-#define set_survey_timer(mlmeext, ms) \
-       do { \
-               _set_timer(&(mlmeext)->survey_timer, (ms)); \
-       } while (0)
-
-#define set_link_timer(mlmeext, ms) \
-       do { \
-               _set_timer(&(mlmeext)->link_timer, (ms)); \
-       } while (0)
-
-bool cckrates_included(unsigned char *rate, int ratelen);
-bool cckratesonly_included(unsigned char *rate, int ratelen);
-
-struct cmd_hdl {
-       uint    parmsize;
-       u8 (*h2cfuns)(struct adapter  *padapter, u8 *pbuf);
-};
-
-u8 read_macreg_hdl(struct adapter *padapter, u8 *pbuf);
-u8 write_macreg_hdl(struct adapter *padapter, u8 *pbuf);
-u8 read_bbreg_hdl(struct adapter *padapter, u8 *pbuf);
-u8 write_bbreg_hdl(struct adapter *padapter, u8 *pbuf);
-u8 read_rfreg_hdl(struct adapter *padapter, u8 *pbuf);
-u8 write_rfreg_hdl(struct adapter *padapter, u8 *pbuf);
-u8 NULL_hdl(struct adapter *padapter, u8 *pbuf);
-u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf);
-u8 disconnect_hdl(struct adapter *padapter, u8 *pbuf);
-u8 createbss_hdl(struct adapter *padapter, u8 *pbuf);
-u8 setopmode_hdl(struct adapter *padapter, u8 *pbuf);
-u8 sitesurvey_cmd_hdl(struct adapter *padapter, u8 *pbuf);
-u8 setauth_hdl(struct adapter *padapter, u8 *pbuf);
-u8 setkey_hdl(struct adapter *padapter, u8 *pbuf);
-u8 set_stakey_hdl(struct adapter *padapter, u8 *pbuf);
-u8 set_assocsta_hdl(struct adapter *padapter, u8 *pbuf);
-u8 del_assocsta_hdl(struct adapter *padapter, u8 *pbuf);
-u8 add_ba_hdl(struct adapter *padapter, unsigned char *pbuf);
-
-u8 mlme_evt_hdl(struct adapter *padapter, unsigned char *pbuf);
-u8 h2c_msg_hdl(struct adapter *padapter, unsigned char *pbuf);
-u8 tx_beacon_hdl(struct adapter *padapter, unsigned char *pbuf);
-u8 set_ch_hdl(struct adapter *padapter, u8 *pbuf);
-u8 set_chplan_hdl(struct adapter *padapter, unsigned char *pbuf);
-u8 led_blink_hdl(struct adapter *padapter, unsigned char *pbuf);
-/* Handling DFS channel switch announcement ie. */
-u8 set_csa_hdl(struct adapter *padapter, unsigned char *pbuf);
-u8 tdls_hdl(struct adapter *padapter, unsigned char *pbuf);
-
-#define GEN_DRV_CMD_HANDLER(size, cmd) {size, &cmd ## _hdl},
-#define GEN_MLME_EXT_HANDLER(size, cmd)        {size, cmd},
-
-#ifdef _RTW_CMD_C_
-
-static struct cmd_hdl wlancmds[] = {
-       GEN_DRV_CMD_HANDLER(0, NULL) /*0*/
-       GEN_DRV_CMD_HANDLER(0, NULL)
-       GEN_DRV_CMD_HANDLER(0, NULL)
-       GEN_DRV_CMD_HANDLER(0, NULL)
-       GEN_DRV_CMD_HANDLER(0, NULL)
-       GEN_DRV_CMD_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL) /*10*/
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(sizeof (struct joinbss_parm), join_cmd_hdl) /*14*/
-       GEN_MLME_EXT_HANDLER(sizeof (struct disconnect_parm), disconnect_hdl)
-       GEN_MLME_EXT_HANDLER(sizeof (struct createbss_parm), createbss_hdl)
-       GEN_MLME_EXT_HANDLER(sizeof (struct setopmode_parm), setopmode_hdl)
-       GEN_MLME_EXT_HANDLER(sizeof (struct sitesurvey_parm),
-                            sitesurvey_cmd_hdl) /*18*/
-       GEN_MLME_EXT_HANDLER(sizeof (struct setauth_parm), setauth_hdl)
-       GEN_MLME_EXT_HANDLER(sizeof (struct setkey_parm), setkey_hdl) /*20*/
-       GEN_MLME_EXT_HANDLER(sizeof (struct set_stakey_parm), set_stakey_hdl)
-       GEN_MLME_EXT_HANDLER(sizeof (struct set_assocsta_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof (struct del_assocsta_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof (struct setstapwrstate_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof (struct setbasicrate_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof (struct getbasicrate_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof (struct setdatarate_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof (struct getdatarate_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof (struct setphyinfo_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof (struct getphyinfo_parm), NULL)  /*30*/
-       GEN_MLME_EXT_HANDLER(sizeof (struct setphy_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof (struct getphy_parm), NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)   /*40*/
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), add_ba_hdl)
-       GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm), set_ch_hdl) /* 46 */
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL) /*50*/
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct Tx_Beacon_param),
-                            tx_beacon_hdl) /*55*/
-
-       GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl) /*56*/
-       GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl) /*57*/
-
-       GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) /*58*/
-       GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param),
-                            set_chplan_hdl) /*59*/
-       GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param),
-                            led_blink_hdl) /*60*/
-
-       GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param),
-                            set_csa_hdl) /*61*/
-       GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param),
-                            tdls_hdl) /*62*/
-};
-
-#endif
-
-struct C2HEvent_Header {
-#ifdef __LITTLE_ENDIAN
-       unsigned int len:16;
-       unsigned int ID:8;
-       unsigned int seq:8;
-#elif defined(__BIG_ENDIAN)
-       unsigned int seq:8;
-       unsigned int ID:8;
-       unsigned int len:16;
-#endif
-       unsigned int rsvd;
-};
-
-enum rtw_c2h_event {
-       GEN_EVT_CODE(_Read_MACREG) = 0, /*0*/
-       GEN_EVT_CODE(_Read_BBREG),
-       GEN_EVT_CODE(_Read_RFREG),
-       GEN_EVT_CODE(_Read_EEPROM),
-       GEN_EVT_CODE(_Read_EFUSE),
-       GEN_EVT_CODE(_Read_CAM),        /*5*/
-       GEN_EVT_CODE(_Get_BasicRate),
-       GEN_EVT_CODE(_Get_DataRate),
-       GEN_EVT_CODE(_Survey),   /*8*/
-       GEN_EVT_CODE(_SurveyDone),       /*9*/
-
-       GEN_EVT_CODE(_JoinBss), /*10*/
-       GEN_EVT_CODE(_AddSTA),
-       GEN_EVT_CODE(_DelSTA),
-       GEN_EVT_CODE(_AtimDone),
-       GEN_EVT_CODE(_TX_Report),
-       GEN_EVT_CODE(_CCX_Report),              /*15*/
-       GEN_EVT_CODE(_DTM_Report),
-       GEN_EVT_CODE(_TX_Rate_Statistics),
-       GEN_EVT_CODE(_C2HLBK),
-       GEN_EVT_CODE(_FWDBG),
-       GEN_EVT_CODE(_C2HFEEDBACK),             /*20*/
-       GEN_EVT_CODE(_ADDBA),
-       GEN_EVT_CODE(_C2HBCN),
-       GEN_EVT_CODE(_ReportPwrState),  /* filen: only for PCIE, USB */
-       GEN_EVT_CODE(_CloseRF),         /* filen: only for PCIE,
-                                        * work around ASPM */
-       MAX_C2HEVT
-};
-
-#ifdef _RTW_MLME_EXT_C_
-
-static struct fwevent wlanevents[] = {
-       {0, NULL},      /*0*/
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, &rtw_survey_event_callback},                /*8*/
-       {sizeof (struct surveydone_event), &rtw_surveydone_event_callback},/*9*/
-       {0, &rtw_joinbss_event_callback},               /*10*/
-       {sizeof(struct stassoc_event), &rtw_stassoc_event_callback},
-       {sizeof(struct stadel_event), &rtw_stadel_event_callback},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},      /*15*/
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},       /*20*/
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-};
-
-#endif/* _RTL_MLME_EXT_C_ */
-
-#endif /* __RTW_MLME_EXT_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_p2p.h b/drivers/staging/r8188eu/include/rtw_p2p.h
deleted file mode 100644 (file)
index b91322a..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTW_P2P_H_
-#define __RTW_P2P_H_
-
-#include "drv_types.h"
-
-u32 build_beacon_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
-u32 build_probe_resp_p2p_ie(struct wifidirect_info *pwdinfo, u8 *pbuf);
-u32 build_prov_disc_request_p2p_ie(struct wifidirect_info *pwdinfo,
-                                  u8 *pbuf, u8 *pssid, u8 ussidlen,
-                                  u8 *pdev_raddr);
-u32 build_assoc_resp_p2p_ie(struct wifidirect_info *pwdinfo,
-                           u8 *pbuf, u8 status_code);
-u32 process_probe_req_p2p_ie(struct wifidirect_info *pwdinfo,
-                            u8 *pframe, uint len);
-u32 process_assoc_req_p2p_ie(struct wifidirect_info *pwdinfo,
-                            u8 *pframe, uint len, struct sta_info *psta);
-u32 process_p2p_devdisc_req(struct wifidirect_info *pwdinfo,
-                           u8 *pframe, uint len);
-u32 process_p2p_devdisc_resp(struct wifidirect_info *pwdinfo,
-                            u8 *pframe, uint len);
-u8 process_p2p_provdisc_req(struct wifidirect_info *pwdinfo,
-                           u8 *pframe, uint len);
-u8 process_p2p_provdisc_resp(struct wifidirect_info *pwdinfo,  u8 *pframe);
-u8 process_p2p_group_negotation_req(struct wifidirect_info *pwdinfo,
-                                   u8 *pframe, uint len);
-u8 process_p2p_group_negotation_resp(struct wifidirect_info *pwdinfo,
-                                    u8 *pframe, uint len);
-u8 process_p2p_group_negotation_confirm(struct wifidirect_info *pwdinfo,
-                                       u8 *pframe, uint len);
-u8 process_p2p_presence_req(struct wifidirect_info *pwdinfo, u8 *pframe,
-                           uint len);
-void p2p_protocol_wk_hdl(struct adapter *padapter, int intcmdtype);
-void process_p2p_ps_ie(struct adapter *padapter, u8 *ies, u32 ielength);
-void p2p_ps_wk_hdl(struct adapter *padapter, u8 p2p_ps_state);
-u8 p2p_ps_wk_cmd(struct adapter *padapter, u8 p2p_ps_state, u8 enqueue);
-void reset_global_wifidirect_info(struct adapter *padapter);
-int rtw_init_wifi_display_info(struct adapter *padapter);
-void rtw_init_wifidirect_timers(struct adapter *padapter);
-void rtw_init_wifidirect_addrs(struct adapter *padapter, u8 *dev_addr,
-                              u8 *iface_addr);
-void init_wifidirect_info(struct adapter *padapter, enum P2P_ROLE role);
-int rtw_p2p_enable(struct adapter *padapter, enum P2P_ROLE role);
-
-static inline void _rtw_p2p_set_state(struct wifidirect_info *wdinfo,
-                                     enum P2P_STATE state)
-{
-       if (wdinfo->p2p_state != state)
-               wdinfo->p2p_state = state;
-}
-
-static inline void _rtw_p2p_set_pre_state(struct wifidirect_info *wdinfo,
-                                         enum P2P_STATE state)
-{
-       if (wdinfo->pre_p2p_state != state)
-               wdinfo->pre_p2p_state = state;
-}
-
-static inline void _rtw_p2p_set_role(struct wifidirect_info *wdinfo,
-                                    enum P2P_ROLE role)
-{
-       if (wdinfo->role != role)
-               wdinfo->role = role;
-}
-
-static inline int _rtw_p2p_state(struct wifidirect_info *wdinfo)
-{
-       return wdinfo->p2p_state;
-}
-
-static inline int _rtw_p2p_pre_state(struct wifidirect_info *wdinfo)
-{
-       return wdinfo->pre_p2p_state;
-}
-
-static inline int _rtw_p2p_role(struct wifidirect_info *wdinfo)
-{
-       return wdinfo->role;
-}
-
-static inline bool _rtw_p2p_chk_state(struct wifidirect_info *wdinfo,
-                                     enum P2P_STATE state)
-{
-       return wdinfo->p2p_state == state;
-}
-
-static inline bool _rtw_p2p_chk_role(struct wifidirect_info *wdinfo,
-                                    enum P2P_ROLE role)
-{
-       return wdinfo->role == role;
-}
-
-#define rtw_p2p_set_state(wdinfo, state) _rtw_p2p_set_state(wdinfo, state)
-#define rtw_p2p_set_pre_state(wdinfo, state)                           \
-        _rtw_p2p_set_pre_state(wdinfo, state)
-#define rtw_p2p_set_role(wdinfo, role) _rtw_p2p_set_role(wdinfo, role)
-
-#define rtw_p2p_state(wdinfo) _rtw_p2p_state(wdinfo)
-#define rtw_p2p_pre_state(wdinfo) _rtw_p2p_pre_state(wdinfo)
-#define rtw_p2p_role(wdinfo) _rtw_p2p_role(wdinfo)
-#define rtw_p2p_chk_state(wdinfo, state) _rtw_p2p_chk_state(wdinfo, state)
-#define rtw_p2p_chk_role(wdinfo, role) _rtw_p2p_chk_role(wdinfo, role)
-
-#define rtw_p2p_findphase_ex_set(wdinfo, value) \
-       ((wdinfo)->find_phase_state_exchange_cnt = (value))
-
-/* is this find phase exchange for social channel scan? */
-#define rtw_p2p_findphase_ex_is_social(wdinfo)   \
-((wdinfo)->find_phase_state_exchange_cnt >= P2P_FINDPHASE_EX_SOCIAL_FIRST)
-
-/* should we need find phase exchange anymore? */
-#define rtw_p2p_findphase_ex_is_needed(wdinfo) \
-       ((wdinfo)->find_phase_state_exchange_cnt < P2P_FINDPHASE_EX_MAX && \
-       (wdinfo)->find_phase_state_exchange_cnt != P2P_FINDPHASE_EX_NONE)
-
-#endif
diff --git a/drivers/staging/r8188eu/include/rtw_pwrctrl.h b/drivers/staging/r8188eu/include/rtw_pwrctrl.h
deleted file mode 100644 (file)
index 9f5cffd..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#ifndef __RTW_PWRCTRL_H_
-#define __RTW_PWRCTRL_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-
-#define XMIT_ALIVE     BIT(0)
-#define RECV_ALIVE     BIT(1)
-#define CMD_ALIVE      BIT(2)
-#define EVT_ALIVE      BIT(3)
-
-enum power_mgnt {
-       PS_MODE_ACTIVE = 0,
-       PS_MODE_MIN,
-       PS_MODE_MAX,
-       PS_MODE_DTIM,
-       PS_MODE_VOIP,
-       PS_MODE_UAPSD_WMM,
-       PM_Card_Disable,
-       PS_MODE_NUM
-};
-
-#define LPS_DELAY_TIME 1*HZ /*  1 sec */
-
-/*  RF state. */
-enum rt_rf_power_state {
-       rf_on,          /*  RF is on after RFSleep or RFOff */
-       rf_sleep,       /*  802.11 Power Save mode */
-       rf_off,         /*  HW/SW Radio OFF or Inactive Power Save */
-       /* Add the new RF state above this line===== */
-       rf_max
-};
-
-enum { /*  for ips_mode */
-       IPS_NONE = 0,
-       IPS_NORMAL,
-       IPS_LEVEL_2,
-};
-
-struct pwrctrl_priv {
-       struct mutex lock; /* Mutex used to protect struct pwrctrl_priv */
-
-       u8      pwr_mode;
-       u8      smart_ps;
-       u8      bcn_ant_mode;
-
-       bool    bpower_saving;
-
-       uint    ips_enter_cnts;
-       uint    ips_leave_cnts;
-
-       u8      ips_mode;
-       u8      ips_mode_req;   /*  used to accept the mode setting request,
-                                *  will update to ipsmode later */
-       uint bips_processing;
-       unsigned long ips_deny_time; /* will deny IPS when system time less than this */
-       u8 ps_processing; /* temp used to mark whether in rtw_ps_processor */
-
-       u8      bLeisurePs;
-       u8      LpsIdleCount;
-       u8      power_mgnt;
-       u8      bFwCurrentInPSMode;
-       u32     DelayLPSLastTimeStamp;
-
-       u8              bInSuspend;
-       u8              bSupportRemoteWakeup;
-       struct timer_list pwr_state_check_timer;
-       int             pwr_state_check_interval;
-
-       enum rt_rf_power_state  rf_pwrstate;/* cur power state */
-
-       u8              bkeepfwalive;
-};
-
-#define rtw_get_ips_mode_req(pwrctrlpriv) \
-       (pwrctrlpriv)->ips_mode_req
-
-#define rtw_ips_mode_req(pwrctrlpriv, ips_mode) \
-       ((pwrctrlpriv)->ips_mode_req = (ips_mode))
-
-#define RTW_PWR_STATE_CHK_INTERVAL 2000
-
-#define _rtw_set_pwr_state_check_timer(pwrctrlpriv, ms) \
-       do { \
-               _set_timer(&(pwrctrlpriv)->pwr_state_check_timer, (ms)); \
-       } while (0)
-
-#define rtw_set_pwr_state_check_timer(pwrctrl)                 \
-       _rtw_set_pwr_state_check_timer((pwrctrl),               \
-                                      (pwrctrl)->pwr_state_check_interval)
-
-void rtw_init_pwrctrl_priv(struct adapter *adapter);
-
-void rtw_set_firmware_ps_mode(struct adapter *adapter, u8 mode);
-void rtw_set_ps_mode(struct adapter *adapter, u8 ps_mode, u8 smart_ps,
-                    u8 bcn_ant_mode);
-void LeaveAllPowerSaveMode(struct adapter *adapter);
-
-void rtw_ps_processor(struct adapter *padapter);
-
-void LPS_Enter(struct adapter *adapter);
-void LPS_Leave(struct adapter *adapter);
-
-int rtw_pwr_wakeup(struct adapter *adapter);
-int rtw_pm_set_ips(struct adapter *adapter, u8 mode);
-int rtw_pm_set_lps(struct adapter *adapter, u8 mode);
-
-#endif  /* __RTL871X_PWRCTRL_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_recv.h b/drivers/staging/r8188eu/include/rtw_recv.h
deleted file mode 100644 (file)
index 1202643..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#ifndef _RTW_RECV_H_
-#define _RTW_RECV_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-
-#define NR_RECVFRAME 256
-
-#define RXFRAME_ALIGN  8
-#define RXFRAME_ALIGN_SZ       (1<<RXFRAME_ALIGN)
-
-#define MAX_RXFRAME_CNT        512
-#define MAX_RX_NUMBLKS         (32)
-#define RECVFRAME_HDR_ALIGN 128
-
-#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr)
-
-#define MAX_SUBFRAME_COUNT     64
-
-#define LLC_HEADER_SIZE 6
-
-/* for Rx reordering buffer control */
-struct recv_reorder_ctrl {
-       struct adapter  *padapter;
-       u8 enable;
-       u16 indicate_seq;/* wstart_b, init_value=0xffff */
-       u16 wend_b;
-       u8 wsize_b;
-       struct __queue pending_recvframe_queue;
-       struct timer_list reordering_ctrl_timer;
-};
-
-struct stainfo_rxcache {
-       u16     tid_rxseq[16];
-/*
-       unsigned short  tid0_rxseq;
-       unsigned short  tid1_rxseq;
-       unsigned short  tid2_rxseq;
-       unsigned short  tid3_rxseq;
-       unsigned short  tid4_rxseq;
-       unsigned short  tid5_rxseq;
-       unsigned short  tid6_rxseq;
-       unsigned short  tid7_rxseq;
-       unsigned short  tid8_rxseq;
-       unsigned short  tid9_rxseq;
-       unsigned short  tid10_rxseq;
-       unsigned short  tid11_rxseq;
-       unsigned short  tid12_rxseq;
-       unsigned short  tid13_rxseq;
-       unsigned short  tid14_rxseq;
-       unsigned short  tid15_rxseq;
-*/
-};
-
-struct signal_stat {
-       u8      update_req;             /* used to indicate */
-       u8      avg_val;                /* avg of valid elements */
-       u32     total_num;              /* num of valid elements */
-       u32     total_val;              /* sum of valid elements */
-};
-#define MAX_PATH_NUM_92CS              3
-struct phy_info {
-       u8      RxPWDBAll;
-       u8      SignalQuality;   /*  in 0-100 index. */
-       u8      RxMIMOSignalStrength[MAX_PATH_NUM_92CS];/*  in 0~100 index */
-       s8      RxPower; /*  in dBm Translate from PWdB */
-/*  Real power in dBm for this packet, no beautification and aggregation.
- * Keep this raw info to be used for the other procedures. */
-       s8      recvpower;
-       u8      SignalStrength; /*  in 0-100 index. */
-       u8      RxPwr[MAX_PATH_NUM_92CS];/* per-path's pwdb */
-};
-
-struct rx_pkt_attrib {
-       u16     pkt_len;
-       u8      physt;
-       u8      drvinfo_sz;
-       u8      shift_sz;
-       u8      hdrlen; /* the WLAN Header Len */
-       u8      amsdu;
-       bool    qos;
-       u8      priority;
-       u8      pw_save;
-       u8      mdata;
-       u16     seq_num;
-       u8      frag_num;
-       u8      mfrag;
-       u8      order;
-       u8      privacy; /* in frame_ctrl field */
-       u8      bdecrypted;
-       u8      encrypt; /* when 0 indicate no encrypt. when non-zero,
-                         * indicate the encrypt algorithm */
-       u8      iv_len;
-       u8      icv_len;
-       u8      crc_err;
-       u8      icv_err;
-
-       u16 eth_type;
-
-       u8      dst[ETH_ALEN] __aligned(2);
-       u8      src[ETH_ALEN] __aligned(2);
-       u8      ta[ETH_ALEN] __aligned(2);
-       u8      ra[ETH_ALEN] __aligned(2);
-       u8      bssid[ETH_ALEN] __aligned(2);
-
-       u8 ack_policy;
-
-       u8      key_index;
-
-       u8      mcs_rate;
-       u8      rxht;
-       u8      sgi;
-       u8      pkt_rpt_type;
-       u32     MacIDValidEntry[2];     /*  64 bits present 64 entry. */
-
-       struct phy_info phy_info;
-};
-
-/* These definition is used for Rx packet reordering. */
-#define SN_LESS(a, b)          (((a - b) & 0x800) != 0)
-#define SN_EQUAL(a, b) (a == b)
-#define REORDER_WAIT_TIME      (50) /*  (ms) */
-
-#define RECVBUFF_ALIGN_SZ 8
-
-#define RXDESC_SIZE    24
-#define RXDESC_OFFSET RXDESC_SIZE
-
-struct recv_stat {
-       __le32 rxdw0;
-       __le32 rxdw1;
-       __le32 rxdw2;
-       __le32 rxdw3;
-       __le32 rxdw4;
-       __le32 rxdw5;
-};
-
-#define EOR BIT(30)
-
-/*
-accesser of recv_priv: rtw_recv_entry(dispatch / passive level);
-recv_thread(passive) ; returnpkt(dispatch)
-; halt(passive) ;
-
-using enter_critical section to protect
-*/
-struct recv_priv {
-       spinlock_t lock;
-       struct __queue free_recv_queue;
-       struct __queue recv_pending_queue;
-       struct __queue uc_swdec_pending_queue;
-       u8 *pallocated_frame_buf;
-       u8 *precv_frame_buf;
-       uint free_recvframe_cnt;
-       struct adapter  *adapter;
-       u32     bIsAnyNonBEPkts;
-       u64     rx_bytes;
-       u64     rx_pkts;
-       u64     rx_drop;
-       u64     last_rx_bytes;
-
-       uint  rx_icv_err;
-       uint  rx_largepacket_crcerr;
-       uint  rx_smallpacket_crcerr;
-       uint  rx_middlepacket_crcerr;
-       u8      rx_pending_cnt;
-
-       struct tasklet_struct recv_tasklet;
-       struct sk_buff_head free_recv_skb_queue;
-       struct sk_buff_head rx_skb_queue;
-       u8 *pallocated_recv_buf;
-       u8 *precv_buf;    /*  4 alignment */
-       struct __queue free_recv_buf_queue;
-       u32     free_recv_buf_queue_cnt;
-       /* For display the phy information */
-       u8 is_signal_dbg;       /*  for debug */
-       u8 signal_strength_dbg; /*  for debug */
-       s8 rssi;
-       s8 rxpwdb;
-       u8 signal_strength;
-       u8 signal_qual;
-       u8 noise;
-       int RxSNRdB[2];
-       s8 RxRssi[2];
-       int FalseAlmCnt_all;
-
-       struct timer_list signal_stat_timer;
-       u32 signal_stat_sampling_interval;
-       struct signal_stat signal_qual_data;
-       struct signal_stat signal_strength_data;
-};
-
-#define rtw_set_signal_stat_timer(recvpriv)                    \
-       _set_timer(&(recvpriv)->signal_stat_timer,              \
-                  (recvpriv)->signal_stat_sampling_interval)
-
-struct sta_recv_priv {
-       spinlock_t lock;
-       int     option;
-       struct __queue defrag_q; /* keeping the fragment frame until defrag */
-       struct  stainfo_rxcache rxcache;
-};
-
-struct recv_buf {
-       struct adapter *adapter;
-       struct urb *purb;
-       struct sk_buff *pskb;
-       u8      reuse;
-};
-
-/*
-       head  ----->
-
-               data  ----->
-
-                       payload
-
-               tail  ----->
-
-       end   ----->
-
-       len = (unsigned int )(tail - data);
-
-*/
-struct recv_frame {
-       struct list_head list;
-       struct sk_buff   *pkt;
-       struct adapter  *adapter;
-       u8 fragcnt;
-       int frame_tag;
-       struct rx_pkt_attrib attrib;
-       uint  len;
-       u8 *rx_head;
-       u8 *rx_data;
-       u8 *rx_tail;
-       u8 *rx_end;
-       void *precvbuf;
-       struct sta_info *psta;
-       /* for A-MPDU Rx reordering buffer control */
-       struct recv_reorder_ctrl *preorder_ctrl;
-};
-
-int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter);
-void _rtw_free_recv_priv(struct recv_priv *precvpriv);
-s32 rtw_recv_entry(struct recv_frame *precv_frame);
-struct recv_frame *_rtw_alloc_recvframe(struct __queue *pfree_recv_queue);
-struct recv_frame *rtw_alloc_recvframe(struct __queue *pfree_recv_queue);
-int  rtw_free_recvframe(struct recv_frame *precvframe,
-                       struct __queue *pfree_recv_queue);
-int _rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue);
-int rtw_enqueue_recvframe(struct recv_frame *precvframe, struct __queue *queue);
-void rtw_free_recvframe_queue(struct __queue *pframequeue,
-                             struct __queue *pfree_recv_queue);
-u32 rtw_free_uc_swdec_pending_queue(struct adapter *adapter);
-
-void rtw_reordering_ctrl_timeout_handler(void *pcontext);
-
-static inline u8 *get_rxmem(struct recv_frame *precvframe)
-{
-       /* always return rx_head... */
-       if (precvframe == NULL)
-               return NULL;
-       return precvframe->rx_head;
-}
-
-static inline u8 *recvframe_pull(struct recv_frame *precvframe, int sz)
-{
-       /*  rx_data += sz; move rx_data sz bytes  hereafter */
-
-       /* used for extract sz bytes from rx_data, update rx_data and return
-        * the updated rx_data to the caller */
-
-       if (precvframe == NULL)
-               return NULL;
-       precvframe->rx_data += sz;
-       if (precvframe->rx_data > precvframe->rx_tail) {
-               precvframe->rx_data -= sz;
-               return NULL;
-       }
-       precvframe->len -= sz;
-       return precvframe->rx_data;
-}
-
-static inline u8 *recvframe_put(struct recv_frame *precvframe, int sz)
-{
-       /* used for append sz bytes from ptr to rx_tail, update rx_tail
-        * and return the updated rx_tail to the caller */
-       /* after putting, rx_tail must be still larger than rx_end. */
-
-       if (precvframe == NULL)
-               return NULL;
-
-       precvframe->rx_tail += sz;
-
-       if (precvframe->rx_tail > precvframe->rx_end) {
-               precvframe->rx_tail -= sz;
-               return NULL;
-       }
-       precvframe->len += sz;
-       return precvframe->rx_tail;
-}
-
-static inline u8 *recvframe_pull_tail(struct recv_frame *precvframe, int sz)
-{
-       /*  rmv data from rx_tail (by yitsen) */
-
-       /* used for extract sz bytes from rx_end, update rx_end and return
-        * the updated rx_end to the caller */
-       /* after pulling, rx_end must be still larger than rx_data. */
-
-       if (precvframe == NULL)
-               return NULL;
-       precvframe->rx_tail -= sz;
-       if (precvframe->rx_tail < precvframe->rx_data) {
-               precvframe->rx_tail += sz;
-               return NULL;
-       }
-       precvframe->len -= sz;
-       return precvframe->rx_tail;
-}
-
-static inline int get_recvframe_len(struct recv_frame *precvframe)
-{
-       return precvframe->len;
-}
-
-static inline s32 translate_percentage_to_dbm(u32 sig_stren_index)
-{
-       s32     power; /*  in dBm. */
-
-       /*  Translate to dBm (x=0.5y-95). */
-       power = (s32)((sig_stren_index + 1) >> 1);
-       power -= 95;
-
-       return power;
-}
-
-struct sta_info;
-
-void _rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv);
-
-void  mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/rtw_rf.h b/drivers/staging/r8188eu/include/rtw_rf.h
deleted file mode 100644 (file)
index b7267e7..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef        __RTW_RF_H_
-#define __RTW_RF_H_
-
-#include "rtw_cmd.h"
-
-#define NumRates       (13)
-
-/*  slot time for 11g */
-#define SHORT_SLOT_TIME                        9
-#define NON_SHORT_SLOT_TIME            20
-
-#define        MAX_CHANNEL_NUM                 14      /* 2.4 GHz only */
-
-#define NUM_REGULATORYS        1
-
-struct regulatory_class {
-       u32     starting_freq;                          /* MHz, */
-       u8      channel_set[MAX_CHANNEL_NUM];
-       u8      channel_cck_power[MAX_CHANNEL_NUM];     /* dbm */
-       u8      channel_ofdm_power[MAX_CHANNEL_NUM];    /* dbm */
-       u8      txpower_limit;                          /* dbm */
-       u8      channel_spacing;                        /* MHz */
-       u8      modem;
-};
-
-enum capability {
-       cESS            = 0x0001,
-       cIBSS           = 0x0002,
-       cPollable       = 0x0004,
-       cPollReq        = 0x0008,
-       cPrivacy        = 0x0010,
-       cShortPreamble  = 0x0020,
-       cPBCC           = 0x0040,
-       cChannelAgility = 0x0080,
-       cSpectrumMgnt   = 0x0100,
-       cQos            = 0x0200,       /* For HCCA, use with CF-Pollable
-                                        * and CF-PollReq */
-       cShortSlotTime  = 0x0400,
-       cAPSD           = 0x0800,
-       cRM             = 0x1000,       /*  RRM (Radio Request Measurement) */
-       cDSSS_OFDM      = 0x2000,
-       cDelayedBA      = 0x4000,
-       cImmediateBA    = 0x8000,
-};
-
-enum   _REG_PREAMBLE_MODE {
-       PREAMBLE_LONG   = 1,
-       PREAMBLE_AUTO   = 2,
-       PREAMBLE_SHORT  = 3,
-};
-
-/*  Bandwidth Offset */
-#define HAL_PRIME_CHNL_OFFSET_DONT_CARE        0
-#define HAL_PRIME_CHNL_OFFSET_LOWER    1
-#define HAL_PRIME_CHNL_OFFSET_UPPER    2
-
-/*  Represent Channel Width in HT Capabilities */
-/*  */
-enum ht_channel_width {
-       HT_CHANNEL_WIDTH_20 = 0,
-       HT_CHANNEL_WIDTH_40 = 1,
-};
-
-/*  */
-/*  Represent Extension Channel Offset in HT Capabilities */
-/*  This is available only in 40Mhz mode. */
-/*  */
-enum ht_extchnl_offset {
-       HT_EXTCHNL_OFFSET_NO_EXT = 0,
-       HT_EXTCHNL_OFFSET_UPPER = 1,
-       HT_EXTCHNL_OFFSET_NO_DEF = 2,
-       HT_EXTCHNL_OFFSET_LOWER = 3,
-};
-
-u32 rtw_ch2freq(u32 ch);
-
-#endif /* _RTL8711_RF_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_security.h b/drivers/staging/r8188eu/include/rtw_security.h
deleted file mode 100644 (file)
index 783ae18..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __RTW_SECURITY_H_
-#define __RTW_SECURITY_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-#include <crypto/arc4.h>
-
-#define _NO_PRIVACY_                   0x0
-#define _WEP40_                                0x1
-#define _TKIP_                         0x2
-#define _TKIP_WTMIC_                   0x3
-#define _AES_                          0x4
-#define _WEP104_                       0x5
-#define _SMS4_                         0x06
-
-#define _WPA_IE_ID_    0xdd
-#define _WPA2_IE_ID_   0x30
-
-enum {
-       ENCRYP_PROTOCOL_OPENSYS,   /* open system */
-       ENCRYP_PROTOCOL_WEP,       /* WEP */
-       ENCRYP_PROTOCOL_WPA,       /* WPA */
-       ENCRYP_PROTOCOL_WPA2,      /* WPA2 */
-       ENCRYP_PROTOCOL_WAPI,      /* WAPI: Not support in this version */
-       ENCRYP_PROTOCOL_MAX
-};
-
-#ifndef Ndis802_11AuthModeWPA2
-#define Ndis802_11AuthModeWPA2 (Ndis802_11AuthModeWPANone + 1)
-#endif
-
-#ifndef Ndis802_11AuthModeWPA2PSK
-#define Ndis802_11AuthModeWPA2PSK (Ndis802_11AuthModeWPANone + 2)
-#endif
-
-union pn48     {
-       u64     val;
-
-#ifdef __LITTLE_ENDIAN
-       struct {
-               u8 TSC0;
-               u8 TSC1;
-               u8 TSC2;
-               u8 TSC3;
-               u8 TSC4;
-               u8 TSC5;
-               u8 TSC6;
-               u8 TSC7;
-       } _byte_;
-
-#elif defined(__BIG_ENDIAN)
-
-       struct {
-               u8 TSC7;
-               u8 TSC6;
-               u8 TSC5;
-               u8 TSC4;
-               u8 TSC3;
-               u8 TSC2;
-               u8 TSC1;
-               u8 TSC0;
-       } _byte_;
-#endif
-};
-
-union Keytype {
-       u8   skey[16];
-       u32    lkey[4];
-};
-
-struct rt_pmkid_list {
-       u8      bUsed;
-       u8      Bssid[6];
-       u8      PMKID[16];
-       u8      SsidBuf[33];
-       u8      *ssid_octet;
-       u16     ssid_length;
-};
-
-struct security_priv {
-       u32       dot11AuthAlgrthm;     /*  802.11 auth, could be open,
-                                        * shared, 8021x and authswitch */
-       u32       dot11PrivacyAlgrthm;  /*  This specify the privacy for
-                                        * shared auth. algorithm. */
-       /* WEP */
-       u32       dot11PrivacyKeyIndex; /*  this is only valid for legendary
-                                        * wep, 0~3 for key id.(tx key index) */
-       union Keytype dot11DefKey[4];   /*  this is only valid for def. key */
-       u32     dot11DefKeylen[4];
-       u32 dot118021XGrpPrivacy;       /*  This specify the privacy algthm.
-                                        * used for Grp key */
-       u32     dot118021XGrpKeyid;     /*  key id used for Grp Key
-                                        * ( tx key index) */
-       union Keytype   dot118021XGrpKey[4];    /*  802.1x Group Key,
-                                                * for inx0 and inx1 */
-       union Keytype   dot118021XGrptxmickey[4];
-       union Keytype   dot118021XGrprxmickey[4];
-       union pn48      dot11Grptxpn;           /* PN48 used for Grp Key xmit.*/
-       union pn48      dot11Grprxpn;           /* PN48 used for Grp Key recv.*/
-
-       struct arc4_ctx xmit_arc4_ctx;
-       struct arc4_ctx recv_arc4_ctx;
-
-       /* extend security capabilities for AP_MODE */
-       unsigned int dot8021xalg;/* 0:disable, 1:psk, 2:802.1x */
-       unsigned int wpa_psk;/* 0:disable, bit(0): WPA, bit(1):WPA2 */
-       unsigned int wpa_group_cipher;
-       unsigned int wpa2_group_cipher;
-       unsigned int wpa_pairwise_cipher;
-       unsigned int wpa2_pairwise_cipher;
-       u8 wps_ie[MAX_WPS_IE_LEN];/* added in assoc req */
-       int wps_ie_len;
-       u8      binstallGrpkey;
-       u8      busetkipkey;
-       u8      bcheck_grpkey;
-       u8      bgrpkey_handshake;
-       s32     sw_encrypt;/* from registry_priv */
-       s32     sw_decrypt;/* from registry_priv */
-       s32     hw_decrypted;/* if the rx packets is hw_decrypted==false,i
-                             * it means the hw has not been ready. */
-
-       /* keeps the auth_type & enc_status from upper layer
-        * ioctl(wpa_supplicant or wzc) */
-       u32 ndisauthtype;       /*  NDIS_802_11_AUTHENTICATION_MODE */
-       u32 ndisencryptstatus;  /*  NDIS_802_11_ENCRYPTION_STATUS */
-       struct wlan_bssid_ex sec_bss;  /* for joinbss (h2c buffer) usage */
-       struct ndis_802_11_wep ndiswep;
-       u8 assoc_info[600];
-       u8 szofcapability[256]; /* for wpa2 usage */
-       u8 oidassociation[512]; /* for wpa/wpa2 usage */
-       u8 authenticator_ie[256];  /* store ap security information element */
-       u8 supplicant_ie[256];  /* store sta security information element */
-
-       /* for tkip countermeasure */
-       u32 last_mic_err_time;
-       u8      btkip_countermeasure;
-       u8      btkip_wait_report;
-       u32 btkip_countermeasure_time;
-
-       /*  */
-       /*  For WPA2 Pre-Authentication. */
-       /*  */
-       struct rt_pmkid_list PMKIDList[NUM_PMKID_CACHE];
-       u8      PMKIDIndex;
-       u8 bWepDefaultKeyIdxSet;
-};
-
-#define GET_ENCRY_ALGO(psecuritypriv, psta, encry_algo, bmcst)         \
-do {                                                                   \
-       switch (psecuritypriv->dot11AuthAlgrthm) {                      \
-       case dot11AuthAlgrthm_Open:                                     \
-       case dot11AuthAlgrthm_Shared:                                   \
-       case dot11AuthAlgrthm_Auto:                                     \
-               encry_algo = (u8)psecuritypriv->dot11PrivacyAlgrthm;    \
-               break;                                                  \
-       case dot11AuthAlgrthm_8021X:                                    \
-               if (bmcst)                                              \
-                       encry_algo = (u8)psecuritypriv->dot118021XGrpPrivacy;\
-               else                                                    \
-                       encry_algo = (u8)psta->dot118021XPrivacy;       \
-               break;                                                  \
-       case dot11AuthAlgrthm_WAPI:                                     \
-               encry_algo = (u8)psecuritypriv->dot11PrivacyAlgrthm;    \
-               break;                                                  \
-       }                                                               \
-} while (0)
-
-#define SET_ICE_IV_LEN(iv_len, icv_len, encrypt)                       \
-do {                                                                   \
-       switch (encrypt) {                                              \
-       case _WEP40_:                                                   \
-       case _WEP104_:                                                  \
-               iv_len = 4;                                             \
-               icv_len = 4;                                            \
-               break;                                                  \
-       case _TKIP_:                                                    \
-               iv_len = 8;                                             \
-               icv_len = 4;                                            \
-               break;                                                  \
-       case _AES_:                                                     \
-               iv_len = 8;                                             \
-               icv_len = 8;                                            \
-               break;                                                  \
-       case _SMS4_:                                                    \
-               iv_len = 18;                                            \
-               icv_len = 16;                                           \
-               break;                                                  \
-       default:                                                        \
-               iv_len = 0;                                             \
-               icv_len = 0;                                            \
-               break;                                                  \
-       }                                                               \
-} while (0)
-
-#define GET_TKIP_PN(iv, dot11txpn)                                     \
-do {                                                                   \
-       dot11txpn._byte_.TSC0 = iv[2];                                  \
-       dot11txpn._byte_.TSC1 = iv[0];                                  \
-       dot11txpn._byte_.TSC2 = iv[4];                                  \
-       dot11txpn._byte_.TSC3 = iv[5];                                  \
-       dot11txpn._byte_.TSC4 = iv[6];                                  \
-       dot11txpn._byte_.TSC5 = iv[7];                                  \
-} while (0)
-
-#define ROL32(A, n)    (((A) << (n)) | (((A)>>(32-(n)))  & ((1UL << (n)) - 1)))
-#define ROR32(A, n)    ROL32((A), 32-(n))
-
-struct mic_data {
-       u32  K0, K1;         /*  Key */
-       u32  L, R;           /*  Current state */
-       u32  M;              /*  Message accumulator (single word) */
-       u32  nBytesInM;      /*  # bytes in M */
-};
-
-void rtw_secmicsetkey(struct mic_data *pmicdata, u8 *key);
-void rtw_secmicappendbyte(struct mic_data *pmicdata, u8 b);
-void rtw_secmicappend(struct mic_data *pmicdata, u8 *src, u32 nBytes);
-void rtw_secgetmic(struct mic_data *pmicdata, u8 *dst);
-void rtw_seccalctkipmic(u8 *key, u8 *header, u8 *data, u32 data_len,
-                       u8 *Miccode, u8   priority);
-u32 rtw_aes_encrypt(struct adapter *padapter, struct xmit_frame *pxmitframe);
-u32 rtw_tkip_encrypt(struct adapter *padapter, struct xmit_frame *pxmitframe);
-void rtw_wep_encrypt(struct adapter *padapter, struct xmit_frame *pxmitframe);
-u32 rtw_aes_decrypt(struct adapter *padapter, struct recv_frame *precvframe);
-u32 rtw_tkip_decrypt(struct adapter *padapter, struct recv_frame *precvframe);
-void rtw_wep_decrypt(struct adapter *padapter, struct recv_frame *precvframe);
-
-#endif /* __RTL871X_SECURITY_H_ */
diff --git a/drivers/staging/r8188eu/include/rtw_xmit.h b/drivers/staging/r8188eu/include/rtw_xmit.h
deleted file mode 100644 (file)
index feeac85..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef _RTW_XMIT_H_
-#define _RTW_XMIT_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-
-#define NR_XMITFRAME           256
-#define WMM_XMIT_THRESHOLD     (NR_XMITFRAME * 2 / 5)
-
-#define MAX_XMITBUF_SZ (20480) /*  20k */
-#define NR_XMITBUFF            (4)
-
-#define XMITBUF_ALIGN_SZ       4
-
-/*  xmit extension buff defination */
-#define MAX_XMIT_EXTBUF_SZ     (1536)
-#define NR_XMIT_EXTBUFF                (32)
-
-#define MAX_NUMBLKS            (1)
-
-#define XMIT_VO_QUEUE          (0)
-#define XMIT_VI_QUEUE          (1)
-#define XMIT_BE_QUEUE          (2)
-#define XMIT_BK_QUEUE          (3)
-
-#define VO_QUEUE_INX           0
-#define VI_QUEUE_INX           1
-#define BE_QUEUE_INX           2
-#define BK_QUEUE_INX           3
-#define BCN_QUEUE_INX          4
-#define MGT_QUEUE_INX          5
-#define HIGH_QUEUE_INX         6
-#define TXCMD_QUEUE_INX                7
-
-#define HW_QUEUE_ENTRY         8
-
-#define WEP_IV(pattrib_iv, dot11txpn, keyidx)\
-do {\
-       pattrib_iv[0] = dot11txpn._byte_.TSC0;\
-       pattrib_iv[1] = dot11txpn._byte_.TSC1;\
-       pattrib_iv[2] = dot11txpn._byte_.TSC2;\
-       pattrib_iv[3] = ((keyidx & 0x3)<<6);\
-       dot11txpn.val = (dot11txpn.val == 0xffffff) ? 0 : (dot11txpn.val+1);\
-} while (0)
-
-#define TKIP_IV(pattrib_iv, dot11txpn, keyidx)\
-do {\
-       pattrib_iv[0] = dot11txpn._byte_.TSC1;\
-       pattrib_iv[1] = (dot11txpn._byte_.TSC1 | 0x20) & 0x7f;\
-       pattrib_iv[2] = dot11txpn._byte_.TSC0;\
-       pattrib_iv[3] = BIT(5) | ((keyidx & 0x3)<<6);\
-       pattrib_iv[4] = dot11txpn._byte_.TSC2;\
-       pattrib_iv[5] = dot11txpn._byte_.TSC3;\
-       pattrib_iv[6] = dot11txpn._byte_.TSC4;\
-       pattrib_iv[7] = dot11txpn._byte_.TSC5;\
-       dot11txpn.val = dot11txpn.val == 0xffffffffffffULL ? 0 : (dot11txpn.val+1);\
-} while (0)
-
-#define AES_IV(pattrib_iv, dot11txpn, keyidx)\
-do {                                                   \
-       pattrib_iv[0] = dot11txpn._byte_.TSC0;          \
-       pattrib_iv[1] = dot11txpn._byte_.TSC1;          \
-       pattrib_iv[2] = 0;                              \
-       pattrib_iv[3] = BIT(5) | ((keyidx & 0x3)<<6);   \
-       pattrib_iv[4] = dot11txpn._byte_.TSC2;          \
-       pattrib_iv[5] = dot11txpn._byte_.TSC3;          \
-       pattrib_iv[6] = dot11txpn._byte_.TSC4;          \
-       pattrib_iv[7] = dot11txpn._byte_.TSC5;          \
-       dot11txpn.val = dot11txpn.val == 0xffffffffffffULL ? 0 : (dot11txpn.val+1);\
-} while (0)
-
-#define HWXMIT_ENTRY   4
-
-#define TXDESC_SIZE 32
-
-#define PACKET_OFFSET_SZ (8)
-#define TXDESC_OFFSET (TXDESC_SIZE + PACKET_OFFSET_SZ)
-
-struct tx_desc {
-       /* DWORD 0 */
-       __le32 txdw0;
-       __le32 txdw1;
-       __le32 txdw2;
-       __le32 txdw3;
-       __le32 txdw4;
-       __le32 txdw5;
-       __le32 txdw6;
-       __le32 txdw7;
-};
-
-union txdesc {
-       struct tx_desc txdesc;
-       unsigned int value[TXDESC_SIZE>>2];
-};
-
-struct hw_xmit {
-       struct list_head *sta_list;
-       int     accnt;
-};
-
-/* reduce size */
-struct pkt_attrib {
-       u8      type;
-       u8      subtype;
-       u8      bswenc;
-       u8      dhcp_pkt;
-       u16     ether_type;
-       u16     seqnum;
-       u16     pkt_hdrlen;     /* the original 802.3 pkt header len */
-       u16     hdrlen;         /* the WLAN Header Len */
-       u32     pktlen;         /* the original 802.3 pkt raw_data len (not include
-                                * ether_hdr data) */
-       u32     last_txcmdsz;
-       u8      nr_frags;
-       u8      encrypt;        /* when 0 indicate no encrypt. when non-zero,
-                                * indicate the encrypt algorithm */
-       u8      iv_len;
-       u8      icv_len;
-       u8      iv[18];
-       u8      icv[16];
-       u8      priority;
-       u8      ack_policy;
-       u8      mac_id;
-       u8      vcs_mode;       /* virtual carrier sense method */
-       u8      dst[ETH_ALEN] __aligned(2);
-       u8      src[ETH_ALEN] __aligned(2);
-       u8      ta[ETH_ALEN] __aligned(2);
-       u8      ra[ETH_ALEN] __aligned(2);
-       u8      key_idx;
-       u8      qos_en;
-       u8      ht_en;
-       u8      raid;/* rate adpative id */
-       u8      bwmode;
-       u8      ch_offset;/* PRIME_CHNL_OFFSET */
-       u8      sgi;/* short GI */
-       u8      ampdu_en;/* tx ampdu enable */
-       u8      mdata;/* more data bit */
-       u8      pctrl;/* per packet txdesc control enable */
-       u8      triggered;/* for ap mode handling Power Saving sta */
-       u8      qsel;
-       u8      eosp;
-       u8      rate;
-       u8      intel_proxim;
-       u8      retry_ctrl;
-       struct sta_info *psta;
-};
-
-#define WLANHDR_OFFSET 64
-
-#define NULL_FRAMETAG          (0x0)
-#define DATA_FRAMETAG          0x01
-#define MGNT_FRAMETAG          0x03
-
-#define TXAGG_FRAMETAG 0x08
-
-struct  submit_ctx {
-       u32 submit_time; /* */
-       u32 timeout_ms; /* <0: not synchronous, 0: wait forever, >0: up to ms waiting */
-       int status; /* status for operation */
-       struct completion done;
-};
-
-enum {
-       RTW_SCTX_SUBMITTED = -1,
-       RTW_SCTX_DONE_SUCCESS = 0,
-       RTW_SCTX_DONE_UNKNOWN,
-       RTW_SCTX_DONE_TIMEOUT,
-       RTW_SCTX_DONE_BUF_ALLOC,
-       RTW_SCTX_DONE_BUF_FREE,
-       RTW_SCTX_DONE_WRITE_PORT_ERR,
-       RTW_SCTX_DONE_TX_DESC_NA,
-       RTW_SCTX_DONE_TX_DENY,
-       RTW_SCTX_DONE_CCX_PKT_FAIL,
-       RTW_SCTX_DONE_DRV_STOP,
-       RTW_SCTX_DONE_DEV_REMOVE,
-};
-
-void rtw_sctx_init(struct submit_ctx *sctx, int timeout_ms);
-int rtw_sctx_wait(struct submit_ctx *sctx);
-void rtw_sctx_done_err(struct submit_ctx **sctx, int status);
-
-struct xmit_buf {
-       struct list_head list;
-       struct adapter *padapter;
-       u8 *pallocated_buf;
-       u8 *pbuf;
-       void *priv_data;
-       u16 ext_tag; /*  0: Normal xmitbuf, 1: extension xmitbuf. */
-       bool high_queue;
-       u32 alloc_sz;
-       u32  len;
-       struct submit_ctx *sctx;
-       struct urb *pxmit_urb;
-       int last[8];
-};
-
-struct xmit_frame {
-       struct list_head list;
-       struct pkt_attrib attrib;
-       struct sk_buff *pkt;
-       int     frame_tag;
-       struct adapter *padapter;
-       u8      *buf_addr;
-       struct xmit_buf *pxmitbuf;
-
-       u8      agg_num;
-       s8      pkt_offset;
-       u8 ack_report;
-};
-
-struct tx_servq {
-       struct list_head tx_pending;
-       struct list_head sta_pending;
-       int qcnt;
-};
-
-struct sta_xmit_priv {
-       spinlock_t lock;
-       struct tx_servq be_q;                   /* priority == 0,3 */
-       struct tx_servq bk_q;                   /* priority == 1,2 */
-       struct tx_servq vi_q;                   /* priority == 4,5 */
-       struct tx_servq vo_q;                   /* priority == 6,7 */
-       u16 txseq_tid[16];
-};
-
-struct hw_txqueue {
-       volatile int    head;
-       volatile int    tail;
-       volatile int    free_sz;        /* in units of 64 bytes */
-       volatile int      free_cmdsz;
-       volatile int     txsz[8];
-       uint    ff_hwaddr;
-       uint    cmd_hwaddr;
-       int     ac_tag;
-};
-
-struct xmit_priv {
-       spinlock_t lock;
-       struct list_head be_pending;
-       struct list_head bk_pending;
-       struct list_head vi_pending;
-       struct list_head vo_pending;
-       u8 *pallocated_frame_buf;
-       u8 *pxmit_frame_buf;
-       uint free_xmitframe_cnt;
-       struct __queue free_xmit_queue;
-       uint    frag_len;
-       struct adapter  *adapter;
-       u64     tx_bytes;
-       u64     tx_pkts;
-       u64     tx_drop;
-       u64     last_tx_bytes;
-       u64     last_tx_pkts;
-       struct hw_xmit *hwxmits;
-       u8      wmm_para_seq[4];/* sequence for wmm ac parameter strength
-                                * from large to small. it's value is 0->vo,
-                                * 1->vi, 2->be, 3->bk. */
-       struct tasklet_struct xmit_tasklet;
-       struct __queue free_xmitbuf_queue;
-       struct __queue pending_xmitbuf_queue;
-       u8 *pallocated_xmitbuf;
-       u8 *pxmitbuf;
-       uint free_xmitbuf_cnt;
-       struct __queue free_xmit_extbuf_queue;
-       u8 *pallocated_xmit_extbuf;
-       u8 *pxmit_extbuf;
-       uint free_xmit_extbuf_cnt;
-       u16     nqos_ssn;
-       int     ack_tx;
-       struct mutex ack_tx_mutex;
-       struct submit_ctx ack_tx_ops;
-};
-
-struct pkt_file {
-       struct sk_buff *pkt;
-       size_t pkt_len;  /* the remainder length of the open_file */
-       unsigned char *cur_buffer;
-       u8 *buf_start;
-       u8 *cur_addr;
-       size_t buf_len;
-};
-
-struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv);
-s32 rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv,
-                        struct xmit_buf *pxmitbuf);
-struct xmit_buf *rtw_alloc_xmitbuf(struct xmit_priv *pxmitpriv);
-s32 rtw_free_xmitbuf(struct xmit_priv *pxmitpriv,
-                    struct xmit_buf *pxmitbuf);
-void rtw_count_tx_stats(struct adapter *padapter,
-                       struct xmit_frame *pxmitframe, int sz);
-s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr,
-                    struct pkt_attrib *pattrib);
-s32 rtw_put_snap(u8 *data, u16 h_proto);
-
-struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv);
-s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv,
-                      struct xmit_frame *pxmitframe);
-void rtw_free_xmitframe_list(struct xmit_priv *pxmitpriv, struct list_head *xframe_list);
-struct tx_servq *rtw_get_sta_pending(struct adapter *padapter,
-                                    struct sta_info *psta, int up, u8 *ac);
-struct xmit_frame *rtw_dequeue_xframe(struct xmit_priv *pxmitpriv,
-                                     struct hw_xmit *phwxmit_i);
-
-s32 rtw_xmit_classifier(struct adapter *padapter,
-                       struct xmit_frame *pxmitframe);
-s32 rtw_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt,
-                          struct xmit_frame *pxmitframe);
-s32 _rtw_init_hw_txqueue(struct hw_txqueue *phw_txqueue, u8 ac_tag);
-void _rtw_init_sta_xmit_priv(struct sta_xmit_priv *psta_xmitpriv);
-s32 rtw_txframes_pending(struct adapter *padapter);
-s32 rtw_txframes_sta_ac_pending(struct adapter *padapter,
-                               struct pkt_attrib *pattrib);
-int _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter);
-void _rtw_free_xmit_priv(struct xmit_priv *pxmitpriv);
-int rtw_alloc_hwxmits(struct adapter *padapter);
-s32 rtw_xmit(struct adapter *padapter, struct sk_buff **pkt);
-
-int xmitframe_enqueue_for_sleeping_sta(struct adapter *padapter, struct xmit_frame *pxmitframe);
-void stop_sta_xmit(struct adapter *padapter, struct sta_info *psta);
-void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta);
-void xmit_delivery_enabled_frames(struct adapter *padapter, struct sta_info *psta);
-
-u8     qos_acm(u8 acm_mask, u8 priority);
-u32    rtw_get_ff_hwaddr(struct xmit_frame *pxmitframe);
-int rtw_ack_tx_wait(struct xmit_priv *pxmitpriv, u32 timeout_ms);
-void rtw_ack_tx_done(struct xmit_priv *pxmitpriv, int status);
-
-void rtw_xmit_complete(struct adapter *padapter, struct xmit_frame *pxframe);
-netdev_tx_t rtw_xmit_entry(struct sk_buff *pkt, struct net_device *pnetdev);
-
-#endif /* _RTL871X_XMIT_H_ */
diff --git a/drivers/staging/r8188eu/include/sta_info.h b/drivers/staging/r8188eu/include/sta_info.h
deleted file mode 100644 (file)
index e42f4b4..0000000
+++ /dev/null
@@ -1,313 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __STA_INFO_H_
-#define __STA_INFO_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-#include "wifi.h"
-
-#define IBSS_START_MAC_ID      2
-#define NUM_STA 32
-#define NUM_ACL 16
-
-/* if mode ==0, then the sta is allowed once the addr is hit. */
-/* if mode ==1, then the sta is rejected once the addr is non-hit. */
-struct rtw_wlan_acl_node {
-       struct list_head list;
-       u8       addr[ETH_ALEN];
-       u8       valid;
-};
-
-/* mode=0, disable */
-/* mode=1, accept unless in deny list */
-/* mode=2, deny unless in accept list */
-struct wlan_acl_pool {
-       int mode;
-       int num;
-       struct rtw_wlan_acl_node aclnode[NUM_ACL];
-       struct __queue acl_node_q;
-};
-
-struct rssi_sta {
-       s32     UndecoratedSmoothedPWDB;
-       s32     UndecoratedSmoothedCCK;
-       s32     UndecoratedSmoothedOFDM;
-       u64     PacketMap;
-       u8      ValidBit;
-};
-
-struct stainfo_stats   {
-       u64 rx_mgnt_pkts;
-       u64 rx_beacon_pkts;
-       u64 rx_probereq_pkts;
-       u64 rx_probersp_pkts;
-       u64 rx_probersp_bm_pkts;
-       u64 rx_probersp_uo_pkts;
-       u64 rx_ctrl_pkts;
-       u64 rx_data_pkts;
-
-       u64 last_rx_beacon_pkts;
-       u64 last_rx_probereq_pkts;
-       u64 last_rx_probersp_pkts;
-       u64 last_rx_probersp_bm_pkts;
-       u64 last_rx_probersp_uo_pkts;
-       u64     last_rx_ctrl_pkts;
-       u64     last_rx_data_pkts;
-       u64     rx_bytes;
-       u64     rx_drops;
-       u64     tx_pkts;
-       u64     tx_bytes;
-       u64  tx_drops;
-};
-
-struct sta_info {
-       spinlock_t lock;
-       struct list_head list; /* free_sta_queue */
-       struct list_head hash_list; /* sta_hash */
-
-       struct sta_xmit_priv sta_xmitpriv;
-       struct sta_recv_priv sta_recvpriv;
-
-       struct __queue sleep_q;
-       unsigned int sleepq_len;
-
-       uint state;
-       uint aid;
-       uint mac_id;
-       uint qos_option;
-       u8      hwaddr[ETH_ALEN];
-
-       uint    ieee8021x_blocked;      /* 0: allowed, 1:blocked */
-       uint    dot118021XPrivacy; /* aes, tkip... */
-       union Keytype   dot11tkiptxmickey;
-       union Keytype   dot11tkiprxmickey;
-       union Keytype   dot118021x_UncstKey;
-       union pn48              dot11txpn;                      /*  PN48 used for Unicast xmit. */
-       union pn48              dot11rxpn;                      /*  PN48 used for Unicast recv. */
-       u8      bssrateset[16];
-       u32     bssratelen;
-       s32  rssi;
-       s32     signal_quality;
-
-       u8      cts2self;
-       u8      rtsen;
-
-       u8      raid;
-       u8      init_rate;
-       u32     ra_mask;
-       u8      wireless_mode;  /*  NETWORK_TYPE */
-       struct stainfo_stats sta_stats;
-
-       /* for A-MPDU TX, ADDBA timeout check */
-       struct timer_list addba_retry_timer;
-
-       /* for A-MPDU Rx reordering buffer control */
-       struct recv_reorder_ctrl recvreorder_ctrl[16];
-
-       /* for A-MPDU Tx */
-       /* unsigned char                ampdu_txen_bitmap; */
-       u16     BA_starting_seqctrl[16];
-
-       struct ht_priv  htpriv;
-
-       /* Notes: */
-       /* STA_Mode: */
-       /* curr_network(mlme_priv/security_priv/qos/ht) +
-        * sta_info: (STA & AP) CAP/INFO */
-       /* scan_q: AP CAP/INFO */
-
-       /* AP_Mode: */
-       /* curr_network(mlme_priv/security_priv/qos/ht) : AP CAP/INFO */
-       /* sta_info: (AP & STA) CAP/INFO */
-
-       struct list_head asoc_list;
-       struct list_head auth_list;
-
-       unsigned int expire_to;
-       unsigned int auth_seq;
-       unsigned int authalg;
-       unsigned char chg_txt[128];
-
-       u16 capability;
-       int flags;
-
-       int dot8021xalg;/* 0:disable, 1:psk, 2:802.1x */
-       int wpa_psk;/* 0:disable, bit(0): WPA, bit(1):WPA2 */
-       int wpa_group_cipher;
-       int wpa2_group_cipher;
-       int wpa_pairwise_cipher;
-       int wpa2_pairwise_cipher;
-
-       u8 bpairwise_key_installed;
-
-       u8 wpa_ie[32];
-
-       u8 nonerp_set;
-       u8 no_short_slot_time_set;
-       u8 no_short_preamble_set;
-       u8 no_ht_gf_set;
-       u8 no_ht_set;
-       u8 ht_20mhz_set;
-
-       unsigned int tx_ra_bitmap;
-       u8 qos_info;
-
-       u8 max_sp_len;
-       u8 uapsd_bk;/* BIT(0): Delivery enabled, BIT(1): Trigger enabled */
-       u8 uapsd_be;
-       u8 uapsd_vi;
-       u8 uapsd_vo;
-
-       u8 has_legacy_ac;
-       unsigned int sleepq_ac_len;
-
-       /* p2p priv data */
-       u8 is_p2p_device;
-       u8 p2p_status_code;
-
-       /* p2p client info */
-       u8 dev_addr[ETH_ALEN];
-       u8 dev_cap;
-       u16 config_methods;
-       u8 primary_dev_type[8];
-       u8 num_of_secdev_type;
-       u8 secdev_types_list[32];/*  32/8 == 4; */
-       u16 dev_name_len;
-       u8 dev_name[32];
-       u8 under_exist_checking;
-       u8 keep_alive_trycnt;
-
-       /* for DM */
-       struct rssi_sta rssi_stat;
-
-       /*  ================ODM Relative Info======================= */
-       /*  Please be careful, don't declare too much structure here.
-        *  It will cost memory * STA support num. */
-       /*  2011/10/20 MH Add for ODM STA info. */
-       /*  Driver Write */
-       u8      bValid;         /*  record the sta status link or not? */
-       u8      IOTPeer;        /*  Enum value. HT_IOT_PEER_E */
-       u8      rssi_level;     /* for Refresh RA mask */
-       /*  ODM Write */
-       /* 1 PHY_STATUS_INFO */
-       u8              RSSI_Path[4];           /*  */
-       u8              RSSI_Ave;
-       u8              RXEVM[4];
-       u8              RXSNR[4];
-
-       /*  ================ODM Relative Info======================= */
-       /*  */
-
-       /* To store the sequence number of received management frame */
-       u16 RxMgmtFrameSeqNum;
-};
-
-#define sta_rx_pkts(sta) \
-       (sta->sta_stats.rx_mgnt_pkts \
-       + sta->sta_stats.rx_ctrl_pkts \
-       + sta->sta_stats.rx_data_pkts)
-
-#define sta_rx_data_pkts(sta) \
-       (sta->sta_stats.rx_data_pkts)
-
-#define sta_last_rx_data_pkts(sta) \
-       (sta->sta_stats.last_rx_data_pkts)
-
-#define sta_rx_beacon_pkts(sta) \
-       (sta->sta_stats.rx_beacon_pkts)
-
-#define sta_last_rx_beacon_pkts(sta) \
-       (sta->sta_stats.last_rx_beacon_pkts)
-
-#define sta_rx_probersp_pkts(sta) \
-       (sta->sta_stats.rx_probersp_pkts)
-
-#define sta_last_rx_probersp_pkts(sta) \
-       (sta->sta_stats.last_rx_probersp_pkts)
-
-#define sta_update_last_rx_pkts(sta) \
-do { \
-       sta->sta_stats.last_rx_beacon_pkts = sta->sta_stats.rx_beacon_pkts; \
-       sta->sta_stats.last_rx_probereq_pkts = sta->sta_stats.rx_probereq_pkts; \
-       sta->sta_stats.last_rx_probersp_pkts = sta->sta_stats.rx_probersp_pkts; \
-       sta->sta_stats.last_rx_probersp_bm_pkts = sta->sta_stats.rx_probersp_bm_pkts; \
-       sta->sta_stats.last_rx_probersp_uo_pkts = sta->sta_stats.rx_probersp_uo_pkts; \
-       sta->sta_stats.last_rx_ctrl_pkts = sta->sta_stats.rx_ctrl_pkts; \
-       sta->sta_stats.last_rx_data_pkts = sta->sta_stats.rx_data_pkts; \
-} while (0)
-
-struct sta_priv {
-       u8 *pallocated_stainfo_buf;
-       u8 *pstainfo_buf;
-       struct __queue free_sta_queue;
-
-       spinlock_t sta_hash_lock;
-       struct list_head sta_hash[NUM_STA];
-       int asoc_sta_count;
-       struct __queue sleep_q;
-       struct __queue wakeup_q;
-
-       struct adapter *padapter;
-
-       spinlock_t asoc_list_lock;
-       struct list_head asoc_list;
-
-       struct list_head auth_list;
-       spinlock_t auth_list_lock;
-       u8 asoc_list_cnt;
-       u8 auth_list_cnt;
-
-       unsigned int auth_to;  /* sec, time to expire in authenticating. */
-       unsigned int assoc_to; /* sec, time to expire before associating. */
-       unsigned int expire_to; /* sec , time to expire after associated. */
-
-       /* pointers to STA info; based on allocated AID or NULL if AID free
-        * AID is in the range 1-2007, so sta_aid[0] corresponders to AID 1
-        * and so on
-        */
-       struct sta_info *sta_aid[NUM_STA];
-
-       u16 sta_dz_bitmap;/* only support 15 stations, station aid bitmap
-                          * for sleeping sta. */
-       u16 tim_bitmap; /* only support 15 stations, aid=0~15 mapping
-                        * bit0~bit15 */
-
-       u16 max_num_sta;
-
-       struct wlan_acl_pool acl_list;
-};
-
-static inline u32 wifi_mac_hash(u8 *mac)
-{
-       u32 x;
-
-       x = mac[0];
-       x = (x << 2) ^ mac[1];
-       x = (x << 2) ^ mac[2];
-       x = (x << 2) ^ mac[3];
-       x = (x << 2) ^ mac[4];
-       x = (x << 2) ^ mac[5];
-
-       x ^= x >> 8;
-       x  = x & (NUM_STA - 1);
-       return x;
-}
-
-int _rtw_init_sta_priv(struct sta_priv *pstapriv);
-void _rtw_free_sta_priv(struct sta_priv *pstapriv);
-
-#define stainfo_offset_valid(offset) (offset < NUM_STA && offset >= 0)
-int rtw_stainfo_offset(struct sta_priv *stapriv, struct sta_info *sta);
-struct sta_info *rtw_get_stainfo_by_offset(struct sta_priv *stapriv, int off);
-
-struct sta_info *rtw_alloc_stainfo(struct sta_priv *stapriv, u8 *hwaddr);
-void rtw_free_stainfo(struct adapter *adapt, struct sta_info *psta);
-void rtw_free_all_stainfo(struct adapter *adapt);
-struct sta_info *rtw_get_stainfo(struct sta_priv *stapriv, u8 *hwaddr);
-u32 rtw_init_bcmc_stainfo(struct adapter *adapt);
-struct sta_info *rtw_get_bcmc_stainfo(struct adapter *padapter);
-u8 rtw_access_ctrl(struct adapter *padapter, u8 *mac_addr);
-
-#endif /* _STA_INFO_H_ */
diff --git a/drivers/staging/r8188eu/include/usb_ops.h b/drivers/staging/r8188eu/include/usb_ops.h
deleted file mode 100644 (file)
index 5bd8ce3..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __USB_OPS_H_
-#define __USB_OPS_H_
-
-#include "osdep_service.h"
-#include "drv_types.h"
-#include "osdep_intf.h"
-
-#define REALTEK_USB_VENQT_READ         (USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE)
-#define REALTEK_USB_VENQT_WRITE                (USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE)
-#define REALTEK_USB_VENQT_CMD_REQ      0x05
-#define REALTEK_USB_VENQT_CMD_IDX      0x00
-
-#define ALIGNMENT_UNIT                 16
-#define MAX_VENDOR_REQ_CMD_SIZE        254     /* 8188cu SIE Support */
-#define MAX_USB_IO_CTL_SIZE    (MAX_VENDOR_REQ_CMD_SIZE + ALIGNMENT_UNIT)
-
-/*
- * Increase and check if the continual_urb_error of this @param dvobjprivei
- * is larger than MAX_CONTINUAL_URB_ERR
- * @return true:
- * @return false:
- */
-static inline bool rtw_inc_and_chk_continual_urb_error(struct dvobj_priv *dvobj)
-{
-       int value = atomic_inc_return(&dvobj->continual_urb_error);
-
-       if (value > MAX_CONTINUAL_URB_ERR)
-               return true;
-
-       return false;
-}
-
-/*
-* Set the continual_urb_error of this @param dvobjprive to 0
-*/
-static inline void rtw_reset_continual_urb_error(struct dvobj_priv *dvobj)
-{
-       atomic_set(&dvobj->continual_urb_error, 0);
-}
-
-#define USB_HIGH_SPEED_BULK_SIZE       512
-#define USB_FULL_SPEED_BULK_SIZE       64
-
-static inline bool rtw_usb_bulk_size_boundary(struct adapter *padapter, int buf_len)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-
-       if (pdvobjpriv->pusbdev->speed == USB_SPEED_HIGH)
-               return buf_len % USB_HIGH_SPEED_BULK_SIZE == 0;
-       else
-               return buf_len % USB_FULL_SPEED_BULK_SIZE == 0;
-}
-
-#endif /* __USB_OPS_H_ */
diff --git a/drivers/staging/r8188eu/include/usb_osintf.h b/drivers/staging/r8188eu/include/usb_osintf.h
deleted file mode 100644 (file)
index f271e93..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __USB_OSINTF_H
-#define __USB_OSINTF_H
-
-#include "osdep_service.h"
-#include "drv_types.h"
-
-extern char *rtw_initmac;
-extern int rtw_mc2u_disable;
-
-#define USBD_HALTED(Status) ((u32)(Status) >> 30 == 3)
-
-void netdev_br_init(struct net_device *netdev);
-void dhcp_flag_bcast(struct adapter *priv, struct sk_buff *skb);
-void *scdb_findEntry(struct adapter *priv, unsigned char *ipAddr);
-void nat25_db_expire(struct adapter *priv);
-int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method);
-
-#endif
diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h
deleted file mode 100644 (file)
index 254a4bc..0000000
+++ /dev/null
@@ -1,773 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#ifndef _WIFI_H_
-#define _WIFI_H_
-
-#include <linux/bits.h>
-#include <linux/ieee80211.h>
-
-#define WLAN_ETHHDR_LEN                14
-#define WLAN_HDR_A3_LEN                24
-#define WLAN_HDR_A3_QOS_LEN    26
-#define WLAN_SSID_MAXLEN       32
-
-enum WIFI_FRAME_SUBTYPE {
-       /*  below is for mgt frame */
-       WIFI_ASSOCREQ       = (0 | IEEE80211_FTYPE_MGMT),
-       WIFI_ASSOCRSP       = (BIT(4) | IEEE80211_FTYPE_MGMT),
-       WIFI_REASSOCREQ     = (BIT(5) | IEEE80211_FTYPE_MGMT),
-       WIFI_REASSOCRSP     = (BIT(5) | BIT(4) | IEEE80211_FTYPE_MGMT),
-       WIFI_PROBEREQ       = (BIT(6) | IEEE80211_FTYPE_MGMT),
-       WIFI_PROBERSP       = (BIT(6) | BIT(4) | IEEE80211_FTYPE_MGMT),
-       WIFI_BEACON         = (BIT(7) | IEEE80211_FTYPE_MGMT),
-       WIFI_ATIM           = (BIT(7) | BIT(4) | IEEE80211_FTYPE_MGMT),
-       WIFI_DISASSOC       = (BIT(7) | BIT(5) | IEEE80211_FTYPE_MGMT),
-       WIFI_AUTH           = (BIT(7) | BIT(5) | BIT(4) | IEEE80211_FTYPE_MGMT),
-       WIFI_DEAUTH         = (BIT(7) | BIT(6) | IEEE80211_FTYPE_MGMT),
-       WIFI_ACTION         = (BIT(7) | BIT(6) | BIT(4) | IEEE80211_FTYPE_MGMT),
-
-       /*  below is for control frame */
-       WIFI_PSPOLL         = (BIT(7) | BIT(5) | IEEE80211_FTYPE_CTL),
-
-       /*  below is for data frame */
-       WIFI_DATA           = (0 | IEEE80211_FTYPE_DATA),
-       WIFI_DATA_CFACK     = (BIT(4) | IEEE80211_FTYPE_DATA),
-       WIFI_DATA_CFPOLL    = (BIT(5) | IEEE80211_FTYPE_DATA),
-       WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA),
-       WIFI_DATA_NULL      = (BIT(6) | IEEE80211_FTYPE_DATA),
-       WIFI_QOS_DATA_NULL      = (BIT(6) | IEEE80211_STYPE_QOS_DATA | IEEE80211_FTYPE_DATA),
-};
-
-enum WIFI_REASON_CODE  {
-       _RSON_RESERVED_                 = 0,
-       _RSON_UNSPECIFIED_              = 1,
-       _RSON_AUTH_NO_LONGER_VALID_     = 2,
-       _RSON_DEAUTH_STA_LEAVING_       = 3,
-       _RSON_INACTIVITY_               = 4,
-       _RSON_UNABLE_HANDLE_            = 5,
-       _RSON_CLS2_                     = 6,
-       _RSON_CLS3_                     = 7,
-       _RSON_DISAOC_STA_LEAVING_       = 8,
-       _RSON_ASOC_NOT_AUTH_            = 9,
-
-       /*  WPA reason */
-       _RSON_INVALID_IE_               = 13,
-       _RSON_MIC_FAILURE_              = 14,
-       _RSON_4WAY_HNDSHK_TIMEOUT_      = 15,
-       _RSON_GROUP_KEY_UPDATE_TIMEOUT_ = 16,
-       _RSON_DIFF_IE_                  = 17,
-       _RSON_MLTCST_CIPHER_NOT_VALID_  = 18,
-       _RSON_UNICST_CIPHER_NOT_VALID_  = 19,
-       _RSON_AKMP_NOT_VALID_           = 20,
-       _RSON_UNSUPPORT_RSNE_VER_       = 21,
-       _RSON_INVALID_RSNE_CAP_         = 22,
-       _RSON_IEEE_802DOT1X_AUTH_FAIL_  = 23,
-
-       /* belowing are Realtek definition */
-       _RSON_PMK_NOT_AVAILABLE_        = 24,
-       _RSON_TDLS_TEAR_TOOFAR_         = 25,
-       _RSON_TDLS_TEAR_UN_RSN_         = 26,
-};
-
-enum WIFI_STATUS_CODE {
-       _STATS_SUCCESSFUL_              = 0,
-       _STATS_FAILURE_                 = 1,
-       _STATS_CAP_FAIL_                = 10,
-       _STATS_NO_ASOC_                 = 11,
-       _STATS_OTHER_                   = 12,
-       _STATS_NO_SUPP_ALG_             = 13,
-       _STATS_OUT_OF_AUTH_SEQ_         = 14,
-       _STATS_CHALLENGE_FAIL_          = 15,
-       _STATS_AUTH_TIMEOUT_            = 16,
-       _STATS_UNABLE_HANDLE_STA_       = 17,
-       _STATS_RATE_FAIL_               = 18,
-};
-
-/* entended */
-/* IEEE 802.11b */
-#define WLAN_STATUS_ASSOC_DENIED_NOSHORT 19
-#define WLAN_STATUS_ASSOC_DENIED_NOPBCC 20
-#define WLAN_STATUS_ASSOC_DENIED_NOAGILITY 21
-/* IEEE 802.11h */
-#define WLAN_STATUS_SPEC_MGMT_REQUIRED 22
-#define WLAN_STATUS_PWR_CAPABILITY_NOT_VALID 23
-#define WLAN_STATUS_SUPPORTED_CHANNEL_NOT_VALID 24
-/* IEEE 802.11g */
-#define WLAN_STATUS_ASSOC_DENIED_NO_SHORT_SLOT_TIME 25
-#define WLAN_STATUS_ASSOC_DENIED_NO_ER_PBCC 26
-#define WLAN_STATUS_ASSOC_DENIED_NO_DSSS_OFDM 27
-/* IEEE 802.11w */
-#define WLAN_STATUS_ASSOC_REJECTED_TEMPORARILY 30
-#define WLAN_STATUS_ROBUST_MGMT_FRAME_POLICY_VIOLATION 31
-/* IEEE 802.11i */
-#define WLAN_STATUS_INVALID_IE 40
-#define WLAN_STATUS_GROUP_CIPHER_NOT_VALID 41
-#define WLAN_STATUS_PAIRWISE_CIPHER_NOT_VALID 42
-#define WLAN_STATUS_AKMP_NOT_VALID 43
-#define WLAN_STATUS_UNSUPPORTED_RSN_IE_VERSION 44
-#define WLAN_STATUS_INVALID_RSN_IE_CAPAB 45
-#define WLAN_STATUS_CIPHER_REJECTED_PER_POLICY 46
-#define WLAN_STATUS_TS_NOT_CREATED 47
-#define WLAN_STATUS_DIRECT_LINK_NOT_ALLOWED 48
-#define WLAN_STATUS_DEST_STA_NOT_PRESENT 49
-#define WLAN_STATUS_DEST_STA_NOT_QOS_STA 50
-#define WLAN_STATUS_ASSOC_DENIED_LISTEN_INT_TOO_LARGE 51
-/* IEEE 802.11r */
-#define WLAN_STATUS_INVALID_FT_ACTION_FRAME_COUNT 52
-#define WLAN_STATUS_INVALID_PMKID 53
-#define WLAN_STATUS_INVALID_MDIE 54
-#define WLAN_STATUS_INVALID_FTIE 55
-
-enum WIFI_REG_DOMAIN {
-       DOMAIN_FCC      = 1,
-       DOMAIN_IC       = 2,
-       DOMAIN_ETSI     = 3,
-       DOMAIN_SPA      = 4,
-       DOMAIN_FRANCE   = 5,
-       DOMAIN_MKK      = 6,
-       DOMAIN_ISRAEL   = 7,
-       DOMAIN_MKK1     = 8,
-       DOMAIN_MKK2     = 9,
-       DOMAIN_MKK3     = 10,
-       DOMAIN_MAX
-};
-
-#define _TO_DS_                BIT(8)
-#define _FROM_DS_      BIT(9)
-#define _MORE_FRAG_    BIT(10)
-#define _RETRY_                BIT(11)
-#define _PWRMGT_       BIT(12)
-#define _MORE_DATA_    BIT(13)
-#define _PRIVACY_      BIT(14)
-
-#define SetToDs(pbuf)  \
-       *(__le16 *)(pbuf) |= cpu_to_le16(_TO_DS_)
-
-#define GetToDs(pbuf)  (((*(__le16 *)(pbuf)) & cpu_to_le16(_TO_DS_)) != 0)
-
-#define SetFrDs(pbuf)  \
-       *(__le16 *)(pbuf) |= cpu_to_le16(_FROM_DS_)
-
-#define GetFrDs(pbuf)  (((*(__le16 *)(pbuf)) & cpu_to_le16(_FROM_DS_)) != 0)
-
-#define SetMFrag(pbuf) \
-       *(__le16 *)(pbuf) |= cpu_to_le16(_MORE_FRAG_)
-
-#define ClearMFrag(pbuf)       \
-       *(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_FRAG_))
-
-#define GetRetry(pbuf) (((*(__le16 *)(pbuf)) & cpu_to_le16(_RETRY_)) != 0)
-
-#define SetPwrMgt(pbuf)        \
-       *(__le16 *)(pbuf) |= cpu_to_le16(_PWRMGT_)
-
-#define GetPwrMgt(pbuf)        (((*(__le16 *)(pbuf)) & cpu_to_le16(_PWRMGT_)) != 0)
-
-#define SetMData(pbuf) \
-       *(__le16 *)(pbuf) |= cpu_to_le16(_MORE_DATA_)
-
-#define SetPrivacy(pbuf)       \
-       *(__le16 *)(pbuf) |= cpu_to_le16(_PRIVACY_)
-
-#define GetFrameType(pbuf)                             \
-       (le16_to_cpu(*(__le16 *)(pbuf)) & (BIT(3) | BIT(2)))
-
-#define GetFrameSubType(pbuf)  (le16_to_cpu(*(__le16 *)(pbuf)) & (BIT(7) |\
-        BIT(6) | BIT(5) | BIT(4) | BIT(3) | BIT(2)))
-
-#define SetFrameSubType(pbuf, type) \
-       do {    \
-               *(__le16 *)(pbuf) &= cpu_to_le16(~(BIT(7) | BIT(6) |    \
-                BIT(5) | BIT(4) | BIT(3) | BIT(2))); \
-               *(__le16 *)(pbuf) |= cpu_to_le16(type); \
-       } while (0)
-
-#define SetSeqNum(pbuf, num) \
-       do {    \
-               *(__le16 *)((size_t)(pbuf) + 22) = \
-                       ((*(__le16 *)((size_t)(pbuf) + 22)) & cpu_to_le16((unsigned short)0x000f)) | \
-                       cpu_to_le16((unsigned short)(0xfff0 & (num << 4))); \
-       } while (0)
-
-#define SetDuration(pbuf, dur) \
-       *(__le16 *)((size_t)(pbuf) + 2) = cpu_to_le16(0xffff & (dur))
-
-#define SetPriority(pbuf, tid) \
-       *(__le16 *)(pbuf) |= cpu_to_le16(tid & 0xf)
-
-#define SetEOSP(pbuf, eosp)    \
-               *(__le16 *)(pbuf) |= cpu_to_le16((eosp & 1) << 4)
-
-#define SetAckpolicy(pbuf, ack)        \
-       *(__le16 *)(pbuf) |= cpu_to_le16((ack & 3) << 5)
-
-#define GetAckpolicy(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 5) & 0x3)
-
-#define GetAMsdu(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 7) & 0x1)
-
-#define GetAddr1Ptr(pbuf)      ((unsigned char *)((size_t)(pbuf) + 4))
-
-#define GetAddr2Ptr(pbuf)      ((unsigned char *)((size_t)(pbuf) + 10))
-
-#define GetAddr3Ptr(pbuf)      ((unsigned char *)((size_t)(pbuf) + 16))
-
-#define GetAddr4Ptr(pbuf)      ((unsigned char *)((size_t)(pbuf) + 24))
-
-static inline unsigned char *get_sa(unsigned char *pframe)
-{
-       unsigned char   *sa;
-       unsigned int    to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
-
-       switch (to_fr_ds) {
-       case 0x00:      /*  ToDs=0, FromDs=0 */
-               sa = GetAddr2Ptr(pframe);
-               break;
-       case 0x01:      /*  ToDs=0, FromDs=1 */
-               sa = GetAddr3Ptr(pframe);
-               break;
-       case 0x02:      /*  ToDs=1, FromDs=0 */
-               sa = GetAddr2Ptr(pframe);
-               break;
-       default:        /*  ToDs=1, FromDs=1 */
-               sa = GetAddr4Ptr(pframe);
-               break;
-       }
-       return sa;
-}
-
-static inline unsigned char *get_hdr_bssid(unsigned char *pframe)
-{
-       unsigned char   *sa;
-       unsigned int    to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
-
-       switch (to_fr_ds) {
-       case 0x00:      /*  ToDs=0, FromDs=0 */
-               sa = GetAddr3Ptr(pframe);
-               break;
-       case 0x01:      /*  ToDs=0, FromDs=1 */
-               sa = GetAddr2Ptr(pframe);
-               break;
-       case 0x02:      /*  ToDs=1, FromDs=0 */
-               sa = GetAddr1Ptr(pframe);
-               break;
-       case 0x03:      /*  ToDs=1, FromDs=1 */
-               sa = GetAddr1Ptr(pframe);
-               break;
-       default:
-               sa = NULL; /*  */
-               break;
-       }
-       return sa;
-}
-
-/*-----------------------------------------------------------------------------
-                       Below is for the security related definition
-------------------------------------------------------------------------------*/
-#define _RESERVED_FRAME_TYPE_          0
-#define _SKB_FRAME_TYPE_               2
-#define _PRE_ALLOCMEM_                 1
-#define _PRE_ALLOCHDR_                 3
-#define _PRE_ALLOCLLCHDR_              4
-#define _PRE_ALLOCICVHDR_              5
-#define _PRE_ALLOCMICHDR_              6
-
-#define _SIFSTIME_                             \
-       (priv->pmib->dot11BssType.net_work_type = 10)
-#define _ACKCTSLNG_            14      /* 14 bytes long, including crclng */
-#define _CRCLNG_               4
-
-#define _ASOCREQ_IE_OFFSET_    4       /*  excluding wlan_hdr */
-#define        _ASOCRSP_IE_OFFSET_     6
-#define _REASOCREQ_IE_OFFSET_  10
-#define _REASOCRSP_IE_OFFSET_  6
-#define _PROBEREQ_IE_OFFSET_   0
-#define        _PROBERSP_IE_OFFSET_    12
-#define _AUTH_IE_OFFSET_       6
-#define _DEAUTH_IE_OFFSET_     0
-#define _BEACON_IE_OFFSET_     12
-#define _PUBLIC_ACTION_IE_OFFSET_      8
-
-#define _FIXED_IE_LENGTH_      _BEACON_IE_OFFSET_
-
-#define _SSID_IE_              0
-#define _SUPPORTEDRATES_IE_    1
-#define _DSSET_IE_             3
-#define _TIM_IE_               5
-#define _IBSS_PARA_IE_         6
-#define _COUNTRY_IE_           7
-#define _CHLGETXT_IE_          16
-#define _SUPPORTED_CH_IE_      36
-#define _CH_SWTICH_ANNOUNCE_   37      /* Secondary Channel Offset */
-#define _RSN_IE_2_             48
-#define _SSN_IE_1_             221
-#define _ERPINFO_IE_           42
-#define _EXT_SUPPORTEDRATES_IE_        50
-
-#define _HT_CAPABILITY_IE_     45
-#define _FTIE_                 55
-#define _TIMEOUT_ITVL_IE_      56
-#define _SRC_IE_               59
-#define _HT_EXTRA_INFO_IE_     61
-#define _HT_ADD_INFO_IE_       61 /* _HT_EXTRA_INFO_IE_ */
-#define _WAPI_IE_              68
-
-#define        EID_BSSCoexistence      72 /*  20/40 BSS Coexistence */
-#define        EID_BSSIntolerantChlReport      73
-#define _RIC_Descriptor_IE_    75
-
-#define _LINK_ID_IE_           101
-#define _CH_SWITCH_TIMING_     104
-#define _PTI_BUFFER_STATUS_    106
-#define _EXT_CAP_IE_           127
-#define _VENDOR_SPECIFIC_IE_   221
-
-#define        _RESERVED47_            47
-
-/* ---------------------------------------------------------------------------
-                                       Below is the fixed elements...
------------------------------------------------------------------------------*/
-#define _AUTH_ALGM_NUM_                2
-#define _AUTH_SEQ_NUM_         2
-#define _BEACON_ITERVAL_       2
-#define _CAPABILITY_           2
-#define _CURRENT_APADDR_       6
-#define _LISTEN_INTERVAL_      2
-#define _RSON_CODE_            2
-#define _ASOC_ID_              2
-#define _STATUS_CODE_          2
-#define _TIMESTAMP_            8
-
-#define cap_ESS                BIT(0)
-#define cap_IBSS       BIT(1)
-#define cap_CFPollable BIT(2)
-#define cap_CFRequest  BIT(3)
-#define cap_Privacy    BIT(4)
-#define cap_ShortPremble BIT(5)
-#define cap_PBCC       BIT(6)
-#define cap_ChAgility  BIT(7)
-#define cap_SpecMgmt   BIT(8)
-#define cap_QoSi       BIT(9)
-#define cap_ShortSlot  BIT(10)
-
-/*-----------------------------------------------------------------------------
-                               Below is the definition for 802.11i / 802.1x
-------------------------------------------------------------------------------*/
-#define _IEEE8021X_MGT_                        1       /*  WPA */
-#define _IEEE8021X_PSK_                        2       /*  WPA with pre-shared key */
-
-/*-----------------------------------------------------------------------------
-                               Below is the definition for WMM
-------------------------------------------------------------------------------*/
-#define _WMM_IE_Length_                                7  /*  for WMM STA */
-#define _WMM_Para_Element_Length_              24
-
-/*-----------------------------------------------------------------------------
-                               Below is the definition for 802.11n
-------------------------------------------------------------------------------*/
-
-/**
- * struct rtw_ieee80211_bar - HT Block Ack Request
- *
- * This structure refers to "HT BlockAckReq" as
- * described in 802.11n draft section 7.2.1.7.1
- */
-struct rtw_ieee80211_bar {
-       __le16 frame_control;
-       __le16 duration;
-       unsigned char ra[ETH_ALEN];
-       unsigned char ta[ETH_ALEN];
-       __le16 control;
-       __le16 start_seq_num;
-} __packed;
-
-/**
- * struct ieee80211_ht_cap - HT additional information
- *
- * This structure refers to "HT information element" as
- * described in 802.11n draft section 7.3.2.53
- */
-struct ieee80211_ht_addt_info {
-       unsigned char   control_chan;
-       unsigned char   ht_param;
-       __le16  operation_mode;
-       __le16  stbc_param;
-       unsigned char   basic_set[16];
-} __packed;
-
-struct HT_caps_element {
-       union {
-               struct {
-                       __le16  HT_caps_info;
-                       unsigned char   AMPDU_para;
-                       unsigned char   MCS_rate[16];
-                       __le16  HT_ext_caps;
-                       __le16  Beamforming_caps;
-                       unsigned char   ASEL_caps;
-               } HT_cap_element;
-               unsigned char HT_cap[26];
-       } u;
-} __packed;
-
-struct HT_info_element {
-       unsigned char   primary_channel;
-       unsigned char   infos[5];
-       unsigned char   MCS_rate[16];
-} __packed;
-
-struct AC_param {
-       unsigned char           ACI_AIFSN;
-       unsigned char           CW;
-       __le16  TXOP_limit;
-} __packed;
-
-struct WMM_para_element {
-       unsigned char           QoS_info;
-       unsigned char           reserved;
-       struct AC_param ac_param[4];
-} __packed;
-
-#define MAX_AMPDU_FACTOR_64K   3
-
-/* Spatial Multiplexing Power Save Modes */
-#define WLAN_HT_CAP_SM_PS_STATIC       0
-#define WLAN_HT_CAP_SM_PS_DYNAMIC      1
-#define WLAN_HT_CAP_SM_PS_INVALID      2
-#define WLAN_HT_CAP_SM_PS_DISABLED     3
-
-#define OP_MODE_PURE                    0
-#define OP_MODE_MAY_BE_LEGACY_STAS      1
-#define OP_MODE_20MHZ_HT_STA_ASSOCED    2
-#define OP_MODE_MIXED                   3
-
-#define HT_INFO_HT_PARAM_SECONDARY_CHNL_OFF_MASK       ((u8) BIT(0) | BIT(1))
-#define HT_INFO_HT_PARAM_SECONDARY_CHNL_ABOVE          ((u8) BIT(0))
-#define HT_INFO_HT_PARAM_SECONDARY_CHNL_BELOW          ((u8) BIT(0) | BIT(1))
-#define HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH          ((u8) BIT(2))
-#define HT_INFO_HT_PARAM_RIFS_MODE                     ((u8) BIT(3))
-#define HT_INFO_HT_PARAM_CTRL_ACCESS_ONLY              ((u8) BIT(4))
-#define HT_INFO_HT_PARAM_SRV_INTERVAL_GRANULARITY      ((u8) BIT(5))
-
-#define HT_INFO_OPERATION_MODE_OP_MODE_MASK    \
-               ((u16) (0x0001 | 0x0002))
-#define HT_INFO_OPERATION_MODE_OP_MODE_OFFSET          0
-#define HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT     ((u8) BIT(2))
-#define HT_INFO_OPERATION_MODE_TRANSMIT_BURST_LIMIT    ((u8) BIT(3))
-#define HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT      ((u8) BIT(4))
-
-/*     ===============WPS Section=============== */
-/*     For WPSv1.0 */
-#define WPSOUI                                 0x0050f204
-/*     WPS attribute ID */
-#define WPS_ATTR_VER1                          0x104A
-#define WPS_ATTR_SIMPLE_CONF_STATE             0x1044
-#define WPS_ATTR_RESP_TYPE                     0x103B
-#define WPS_ATTR_UUID_E                                0x1047
-#define WPS_ATTR_MANUFACTURER                  0x1021
-#define WPS_ATTR_MODEL_NAME                    0x1023
-#define WPS_ATTR_MODEL_NUMBER                  0x1024
-#define WPS_ATTR_SERIAL_NUMBER                 0x1042
-#define WPS_ATTR_PRIMARY_DEV_TYPE              0x1054
-#define WPS_ATTR_SEC_DEV_TYPE_LIST             0x1055
-#define WPS_ATTR_DEVICE_NAME                   0x1011
-#define WPS_ATTR_CONF_METHOD                   0x1008
-#define WPS_ATTR_RF_BANDS                      0x103C
-#define WPS_ATTR_DEVICE_PWID                   0x1012
-#define WPS_ATTR_REQUEST_TYPE                  0x103A
-#define WPS_ATTR_ASSOCIATION_STATE             0x1002
-#define WPS_ATTR_CONFIG_ERROR                  0x1009
-#define WPS_ATTR_VENDOR_EXT                    0x1049
-#define WPS_ATTR_SELECTED_REGISTRAR            0x1041
-
-/*     Value of WPS attribute "WPS_ATTR_DEVICE_NAME */
-#define WPS_MAX_DEVICE_NAME_LEN                        32
-
-/*     Value of WPS Request Type Attribute */
-#define WPS_REQ_TYPE_ENROLLEE_INFO_ONLY                0x00
-#define WPS_REQ_TYPE_ENROLLEE_OPEN_8021X       0x01
-#define WPS_REQ_TYPE_REGISTRAR                 0x02
-#define WPS_REQ_TYPE_WLAN_MANAGER_REGISTRAR    0x03
-
-/*     Value of WPS Response Type Attribute */
-#define WPS_RESPONSE_TYPE_INFO_ONLY    0x00
-#define WPS_RESPONSE_TYPE_8021X                0x01
-#define WPS_RESPONSE_TYPE_REGISTRAR    0x02
-#define WPS_RESPONSE_TYPE_AP           0x03
-
-/*     Value of WPS WiFi Simple Configuration State Attribute */
-#define WPS_WSC_STATE_NOT_CONFIG       0x01
-#define WPS_WSC_STATE_CONFIG           0x02
-
-/*     Value of WPS Version Attribute */
-#define WPS_VERSION_1                  0x10
-
-/*     Value of WPS Configuration Method Attribute */
-#define WPS_CONFIG_METHOD_FLASH                0x0001
-#define WPS_CONFIG_METHOD_ETHERNET     0x0002
-#define WPS_CONFIG_METHOD_LABEL                0x0004
-#define WPS_CONFIG_METHOD_DISPLAY      0x0008
-#define WPS_CONFIG_METHOD_E_NFC                0x0010
-#define WPS_CONFIG_METHOD_I_NFC                0x0020
-#define WPS_CONFIG_METHOD_NFC          0x0040
-#define WPS_CONFIG_METHOD_PBC          0x0080
-#define WPS_CONFIG_METHOD_KEYPAD       0x0100
-#define WPS_CONFIG_METHOD_VPBC         0x0280
-#define WPS_CONFIG_METHOD_PPBC         0x0480
-#define WPS_CONFIG_METHOD_VDISPLAY     0x2008
-#define WPS_CONFIG_METHOD_PDISPLAY     0x4008
-
-/*     Value of Category ID of WPS Primary Device Type Attribute */
-#define WPS_PDT_CID_DISPLAYS           0x0007
-#define WPS_PDT_CID_MULIT_MEDIA                0x0008
-#define WPS_PDT_CID_RTK_WIDI           WPS_PDT_CID_MULIT_MEDIA
-
-/*     Value of Sub Category ID of WPS Primary Device Type Attribute */
-#define WPS_PDT_SCID_MEDIA_SERVER      0x0005
-#define WPS_PDT_SCID_RTK_DMP           WPS_PDT_SCID_MEDIA_SERVER
-
-/*     Value of Device Password ID */
-#define WPS_DPID_P                     0x0000
-#define WPS_DPID_USER_SPEC             0x0001
-#define WPS_DPID_MACHINE_SPEC          0x0002
-#define WPS_DPID_REKEY                 0x0003
-#define WPS_DPID_PBC                   0x0004
-#define WPS_DPID_REGISTRAR_SPEC                0x0005
-
-/*     Value of WPS RF Bands Attribute */
-#define WPS_RF_BANDS_2_4_GHZ           0x01
-#define WPS_RF_BANDS_5_GHZ             0x02
-
-/*     Value of WPS Association State Attribute */
-#define WPS_ASSOC_STATE_NOT_ASSOCIATED         0x00
-#define WPS_ASSOC_STATE_CONNECTION_SUCCESS     0x01
-#define WPS_ASSOC_STATE_CONFIGURATION_FAILURE  0x02
-#define WPS_ASSOC_STATE_ASSOCIATION_FAILURE    0x03
-#define WPS_ASSOC_STATE_IP_FAILURE             0x04
-
-/*     =====================P2P Section===================== */
-/*     For P2P */
-#define        P2POUI                                  0x506F9A09
-
-/*     P2P Attribute ID */
-#define        P2P_ATTR_STATUS                         0x00
-#define        P2P_ATTR_MINOR_REASON_CODE              0x01
-#define        P2P_ATTR_CAPABILITY                     0x02
-#define        P2P_ATTR_DEVICE_ID                      0x03
-#define        P2P_ATTR_GO_INTENT                      0x04
-#define        P2P_ATTR_CONF_TIMEOUT                   0x05
-#define        P2P_ATTR_LISTEN_CH                      0x06
-#define        P2P_ATTR_GROUP_BSSID                    0x07
-#define        P2P_ATTR_EX_LISTEN_TIMING               0x08
-#define        P2P_ATTR_INTENTED_IF_ADDR               0x09
-#define        P2P_ATTR_MANAGEABILITY                  0x0A
-#define        P2P_ATTR_CH_LIST                        0x0B
-#define        P2P_ATTR_NOA                            0x0C
-#define        P2P_ATTR_DEVICE_INFO                    0x0D
-#define        P2P_ATTR_GROUP_INFO                     0x0E
-#define        P2P_ATTR_GROUP_ID                       0x0F
-#define        P2P_ATTR_INTERFACE                      0x10
-#define        P2P_ATTR_OPERATING_CH                   0x11
-#define        P2P_ATTR_INVITATION_FLAGS               0x12
-
-/*     Value of Status Attribute */
-#define        P2P_STATUS_SUCCESS                              0x00
-#define        P2P_STATUS_FAIL_INFO_UNAVAILABLE                0x01
-#define        P2P_STATUS_FAIL_INCOMPATIBLE_PARAM              0x02
-#define        P2P_STATUS_FAIL_LIMIT_REACHED                   0x03
-#define        P2P_STATUS_FAIL_INVALID_PARAM                   0x04
-#define        P2P_STATUS_FAIL_REQUEST_UNABLE                  0x05
-#define        P2P_STATUS_FAIL_PREVOUS_PROTO_ERR               0x06
-#define        P2P_STATUS_FAIL_NO_COMMON_CH                    0x07
-#define        P2P_STATUS_FAIL_UNKNOWN_P2PGROUP                0x08
-#define        P2P_STATUS_FAIL_BOTH_GOINTENT_15                0x09
-#define        P2P_STATUS_FAIL_INCOMPATIBLE_PROVSION           0x0A
-#define        P2P_STATUS_FAIL_USER_REJECT                     0x0B
-
-/*     Value of Inviation Flags Attribute */
-#define        P2P_INVITATION_FLAGS_PERSISTENT                 BIT(0)
-
-#define        DMP_P2P_DEVCAP_SUPPORT  (P2P_DEVCAP_SERVICE_DISCOVERY | \
-                               P2P_DEVCAP_CLIENT_DISCOVERABILITY | \
-                               P2P_DEVCAP_CONCURRENT_OPERATION | \
-                               P2P_DEVCAP_INVITATION_PROC)
-
-#define        DMP_P2P_GRPCAP_SUPPORT  (P2P_GRPCAP_INTRABSS)
-
-/*     Value of Device Capability Bitmap */
-#define        P2P_DEVCAP_SERVICE_DISCOVERY            BIT(0)
-#define        P2P_DEVCAP_CLIENT_DISCOVERABILITY       BIT(1)
-#define        P2P_DEVCAP_CONCURRENT_OPERATION         BIT(2)
-#define        P2P_DEVCAP_INFRA_MANAGED                BIT(3)
-#define        P2P_DEVCAP_DEVICE_LIMIT                 BIT(4)
-#define        P2P_DEVCAP_INVITATION_PROC              BIT(5)
-
-/*     Value of Group Capability Bitmap */
-#define        P2P_GRPCAP_GO                           BIT(0)
-#define        P2P_GRPCAP_PERSISTENT_GROUP             BIT(1)
-#define        P2P_GRPCAP_GROUP_LIMIT                  BIT(2)
-#define        P2P_GRPCAP_INTRABSS                     BIT(3)
-#define        P2P_GRPCAP_CROSS_CONN                   BIT(4)
-#define        P2P_GRPCAP_PERSISTENT_RECONN            BIT(5)
-#define        P2P_GRPCAP_GROUP_FORMATION              BIT(6)
-
-/*     P2P Public Action Frame (Management Frame) */
-#define        P2P_PUB_ACTION_ACTION                   0x09
-
-/*     P2P Public Action Frame Type */
-#define        P2P_GO_NEGO_REQ                         0
-#define        P2P_GO_NEGO_RESP                        1
-#define        P2P_GO_NEGO_CONF                        2
-#define        P2P_INVIT_REQ                           3
-#define        P2P_INVIT_RESP                          4
-#define        P2P_DEVDISC_REQ                         5
-#define        P2P_DEVDISC_RESP                        6
-#define        P2P_PROVISION_DISC_REQ                  7
-#define        P2P_PROVISION_DISC_RESP                 8
-
-/*     P2P Action Frame Type */
-#define        P2P_NOTICE_OF_ABSENCE                   0
-#define        P2P_PRESENCE_REQUEST                    1
-#define        P2P_PRESENCE_RESPONSE                   2
-#define        P2P_GO_DISC_REQUEST                     3
-
-#define        P2P_MAX_PERSISTENT_GROUP_NUM            10
-
-#define        P2P_PROVISIONING_SCAN_CNT               3
-
-#define        P2P_WILDCARD_SSID_LEN                   7
-
-/* default value, used when: (1)p2p disabled or (2)p2p enabled
- * but only do 1 scan phase */
-#define        P2P_FINDPHASE_EX_NONE           0
-/*  used when p2p enabled and want to do 1 scan phase and
- *  P2P_FINDPHASE_EX_MAX-1 find phase */
-#define        P2P_FINDPHASE_EX_FULL           1
-#define        P2P_FINDPHASE_EX_SOCIAL_FIRST   (P2P_FINDPHASE_EX_FULL+1)
-#define        P2P_FINDPHASE_EX_MAX            4
-#define        P2P_FINDPHASE_EX_SOCIAL_LAST    P2P_FINDPHASE_EX_MAX
-
-/* 5 seconds timeout for sending the provision discovery request */
-#define        P2P_PROVISION_TIMEOUT           5000
-/* 3 seconds timeout for sending the prov disc request concurrent mode */
-#define        P2P_CONCURRENT_PROVISION_TIME   3000
-/* 5 seconds timeout for receiving the group negotiation response */
-#define        P2P_GO_NEGO_TIMEOUT             5000
-/* 3 seconds timeout for sending the negotiation request under concurrent mode */
-#define        P2P_CONCURRENT_GO_NEGO_TIME     3000
-/* 100ms */
-#define        P2P_TX_PRESCAN_TIMEOUT          100
-/* 5 seconds timeout for sending the invitation request */
-#define        P2P_INVITE_TIMEOUT              5000
-/* 3 seconds timeout for sending the invitation request under concurrent mode */
-#define        P2P_CONCURRENT_INVITE_TIME      3000
-/* 25 seconds timeout to reset the scan channel (based on channel plan) */
-#define        P2P_RESET_SCAN_CH               25000
-#define        P2P_MAX_INTENT                  15
-
-#define        P2P_MAX_NOA_NUM                 2
-
-/*     WPS Configuration Method */
-#define        WPS_CM_NONE                     0x0000
-#define        WPS_CM_LABEL                    0x0004
-#define        WPS_CM_DISPLYA                  0x0008
-#define        WPS_CM_EXTERNAL_NFC_TOKEN       0x0010
-#define        WPS_CM_INTEGRATED_NFC_TOKEN     0x0020
-#define        WPS_CM_NFC_INTERFACE            0x0040
-#define        WPS_CM_PUSH_BUTTON              0x0080
-#define        WPS_CM_KEYPAD                   0x0100
-#define        WPS_CM_SW_PUHS_BUTTON           0x0280
-#define        WPS_CM_HW_PUHS_BUTTON           0x0480
-#define        WPS_CM_SW_DISPLAY_P             0x2008
-#define        WPS_CM_LCD_DISPLAY_P            0x4008
-
-enum P2P_ROLE {
-       P2P_ROLE_DISABLE = 0,
-       P2P_ROLE_DEVICE = 1,
-       P2P_ROLE_CLIENT = 2,
-       P2P_ROLE_GO = 3
-};
-
-enum P2P_STATE {
-       P2P_STATE_NONE = 0,                     /* P2P disable */
-       /* P2P had enabled and do nothing */
-       P2P_STATE_IDLE = 1,
-       P2P_STATE_LISTEN = 2,                   /* In pure listen state */
-       P2P_STATE_SCAN = 3,                     /* In scan phase */
-       /* In the listen state of find phase */
-       P2P_STATE_FIND_PHASE_LISTEN = 4,
-       /* In the search state of find phase */
-       P2P_STATE_FIND_PHASE_SEARCH = 5,
-       /* In P2P provisioning discovery */
-       P2P_STATE_TX_PROVISION_DIS_REQ = 6,
-       P2P_STATE_RX_PROVISION_DIS_RSP = 7,
-       P2P_STATE_RX_PROVISION_DIS_REQ = 8,
-       /* Doing the group owner negotiation handshake */
-       P2P_STATE_GONEGO_ING = 9,
-       /* finish the group negotiation handshake with success */
-       P2P_STATE_GONEGO_OK = 10,
-       /* finish the group negotiation handshake with failure */
-       P2P_STATE_GONEGO_FAIL = 11,
-       /* receiving the P2P Inviation request and match with the profile. */
-       P2P_STATE_RECV_INVITE_REQ_MATCH = 12,
-       /* Doing the P2P WPS */
-       P2P_STATE_PROVISIONING_ING = 13,
-       /* Finish the P2P WPS */
-       P2P_STATE_PROVISIONING_DONE = 14,
-       /* Transmit the P2P Invitation request */
-       P2P_STATE_TX_INVITE_REQ = 15,
-       /* Receiving the P2P Invitation response */
-       P2P_STATE_RX_INVITE_RESP_OK = 16,
-       /* receiving the P2P Inviation request and dismatch with the profile. */
-       P2P_STATE_RECV_INVITE_REQ_DISMATCH = 17,
-       /* receiving the P2P Inviation request and this wifi is GO. */
-       P2P_STATE_RECV_INVITE_REQ_GO = 18,
-       /* receiving the P2P Inviation request to join an existing P2P Group. */
-       P2P_STATE_RECV_INVITE_REQ_JOIN = 19,
-       /* recveing the P2P Inviation response with failure */
-       P2P_STATE_RX_INVITE_RESP_FAIL = 20,
-       /* receiving p2p negotiation response with information is not available */
-       P2P_STATE_RX_INFOR_NOREADY = 21,
-       /* sending p2p negotiation response with information is not available */
-       P2P_STATE_TX_INFOR_NOREADY = 22,
-};
-
-enum P2P_WPSINFO {
-       P2P_NO_WPSINFO                          = 0,
-       P2P_GOT_WPSINFO_PEER_DISPLAY_PIN        = 1,
-       P2P_GOT_WPSINFO_SELF_DISPLAY_PIN        = 2,
-       P2P_GOT_WPSINFO_PBC                     = 3,
-};
-
-#define        P2P_PRIVATE_IOCTL_SET_LEN               64
-
-enum P2P_PROTO_WK_ID {
-       P2P_FIND_PHASE_WK = 0,
-       P2P_RESTORE_STATE_WK = 1,
-       P2P_PRE_TX_PROVDISC_PROCESS_WK = 2,
-       P2P_PRE_TX_NEGOREQ_PROCESS_WK = 3,
-       P2P_PRE_TX_INVITEREQ_PROCESS_WK = 4,
-       P2P_AP_P2P_CH_SWITCH_PROCESS_WK = 5,
-       P2P_RO_CH_WK = 6,
-};
-
-enum P2P_PS_STATE {
-       P2P_PS_DISABLE = 0,
-       P2P_PS_ENABLE = 1,
-       P2P_PS_SCAN = 2,
-       P2P_PS_SCAN_DONE = 3,
-       P2P_PS_ALLSTASLEEP = 4, /*  for P2P GO */
-};
-
-enum P2P_PS_MODE {
-       P2P_PS_NONE = 0,
-       P2P_PS_CTWINDOW = 1,
-       P2P_PS_NOA       = 2,
-       P2P_PS_MIX = 3, /*  CTWindow and NoA */
-};
-
-#define IP_MCAST_MAC(mac)                              \
-       ((mac[0] == 0x01) && (mac[1] == 0x00) && (mac[2] == 0x5e))
-#define ICMPV6_MCAST_MAC(mac)                          \
-       ((mac[0] == 0x33) && (mac[1] == 0x33) && (mac[2] != 0xff))
-
-#endif /*  _WIFI_H_ */
diff --git a/drivers/staging/r8188eu/include/wlan_bssdef.h b/drivers/staging/r8188eu/include/wlan_bssdef.h
deleted file mode 100644 (file)
index ffeafa1..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#ifndef __WLAN_BSSDEF_H__
-#define __WLAN_BSSDEF_H__
-
-#define MAX_IE_SZ                      768
-
-#define NDIS_802_11_LENGTH_SSID         32
-#define NDIS_802_11_LENGTH_RATES        8
-#define NDIS_802_11_LENGTH_RATES_EX     16
-
-#define NDIS_802_11_RSSI long           /*  in dBm */
-
-struct ndis_802_11_ssid {
-       u32  SsidLength;
-       u8  Ssid[32];
-};
-
-struct ndis_802_11_config_fh {
-       u32           Length;           /*  Length of structure */
-       u32           HopPattern;       /*  As defined by 802.11, MSB set */
-       u32           HopSet;           /*  to one if non-802.11 */
-       u32           DwellTime;        /*  units are Kusec */
-};
-
-/*
- *     FW will only save the channel number in DSConfig.
- *     ODI Handler will convert the channel number to freq. number.
- */
-struct ndis_802_11_config {
-       u32           Length;             /*  Length of structure */
-       u32           BeaconPeriod;       /*  units are Kusec */
-       u32           ATIMWindow;         /*  units are Kusec */
-       u32           DSConfig;           /*  Frequency, units are kHz */
-       struct ndis_802_11_config_fh    FHConfig;
-};
-
-enum ndis_802_11_network_infra {
-       Ndis802_11IBSS,
-       Ndis802_11Infrastructure,
-       Ndis802_11AutoUnknown,
-       Ndis802_11InfrastructureMax,     /*  dummy upper bound */
-       Ndis802_11APMode
-};
-
-struct ndis_802_11_fixed_ie {
-       u8  Timestamp[8];
-       u16  BeaconInterval;
-       u16  Capabilities;
-};
-
-struct ndis_802_11_var_ie {
-       u8  ElementID;
-       u8  Length;
-       u8  data[];
-};
-
-/*
- * Length is the 4 bytes multiples of the sume of
- *     [ETH_ALEN] + 2 + sizeof (struct ndis_802_11_ssid) + sizeof (u32)
- *     + sizeof (NDIS_802_11_RSSI) + sizeof (enum NDIS_802_11_NETWORK_TYPE)
- *     + sizeof (struct ndis_802_11_config)
- *     + NDIS_802_11_LENGTH_RATES_EX + IELength
- *
- * Except the IELength, all other fields are fixed length.
- * Therefore, we can define a macro to represent the partial sum. */
-
-enum ndis_802_11_auth_mode {
-       Ndis802_11AuthModeOpen,
-       Ndis802_11AuthModeShared,
-       Ndis802_11AuthModeAutoSwitch,
-       Ndis802_11AuthModeWPA,
-       Ndis802_11AuthModeWPAPSK,
-       Ndis802_11AuthModeWPANone,
-       Ndis802_11AuthModeWAPI,
-       Ndis802_11AuthModeMax   /*  Not a real mode, upper bound */
-};
-
-enum ndis_802_11_wep_status {
-       Ndis802_11WEPEnabled,
-       Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
-       Ndis802_11WEPDisabled,
-       Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
-       Ndis802_11WEPKeyAbsent,
-       Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
-       Ndis802_11WEPNotSupported,
-       Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
-       Ndis802_11Encryption2Enabled,
-       Ndis802_11Encryption2KeyAbsent,
-       Ndis802_11Encryption3Enabled,
-       Ndis802_11Encryption3KeyAbsent,
-       Ndis802_11_EncryptionWAPI
-};
-
-#define NDIS_802_11_AI_REQFI_CAPABILITIES      1
-#define NDIS_802_11_AI_REQFI_LISTENINTERVAL    2
-#define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS  4
-
-#define NDIS_802_11_AI_RESFI_CAPABILITIES      1
-#define NDIS_802_11_AI_RESFI_STATUSCODE        2
-#define NDIS_802_11_AI_RESFI_ASSOCIATIONID     4
-
-struct ndis_802_11_ai_reqfi {
-    u16 Capabilities;
-    u16 ListenInterval;
-    unsigned char CurrentAPAddress[ETH_ALEN];
-};
-
-struct ndis_802_11_ai_resfi {
-    u16 Capabilities;
-    u16 StatusCode;
-    u16 AssociationId;
-};
-
-struct ndis_802_11_assoc_info {
-       u32  Length;
-       u16 AvailableRequestFixedIEs;
-       struct ndis_802_11_ai_reqfi    RequestFixedIEs;
-       u32  RequestIELength;
-       u32  OffsetRequestIEs;
-       u16 AvailableResponseFixedIEs;
-       struct ndis_802_11_ai_resfi    ResponseFixedIEs;
-       u32  ResponseIELength;
-       u32  OffsetResponseIEs;
-};
-
-/*  Key mapping keys require a BSSID */
-struct ndis_802_11_key {
-       u32           Length;             /*  Length of this structure */
-       u32           KeyIndex;
-       u32           KeyLength;          /*  length of key in bytes */
-       unsigned char BSSID[ETH_ALEN];
-       unsigned long long KeyRSC;
-       u8           KeyMaterial[32];  /* var len depending on above field */
-};
-
-struct ndis_802_11_remove_key {
-       u32                   Length;        /*  Length */
-       u32                   KeyIndex;
-       unsigned char BSSID[ETH_ALEN];
-};
-
-struct ndis_802_11_wep {
-       u32     Length;        /*  Length of this structure */
-       u32     KeyIndex;      /*  0 is the per-client key,
-                                 * 1-N are the global keys */
-       u32     KeyLength;     /*  length of key in bytes */
-       u8     KeyMaterial[16];/*  variable len depending on above field */
-};
-
-struct ndis_802_11_auth_req {
-       u32 Length;            /*  Length of structure */
-       unsigned char Bssid[ETH_ALEN];
-       u32 Flags;
-};
-
-enum ndis_802_11_status_type {
-       Ndis802_11StatusType_Authentication,
-       Ndis802_11StatusType_MediaStreamMode,
-       Ndis802_11StatusType_PMKID_CandidateList,
-       Ndis802_11StatusTypeMax    /*  not a real type, defined as
-                                   * an upper bound */
-};
-
-struct ndis_802_11_status_ind {
-       enum ndis_802_11_status_type StatusType;
-};
-
-/*  mask for authentication/integrity fields */
-#define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS           0x0f
-#define NDIS_802_11_AUTH_REQUEST_REAUTH                        0x01
-#define NDIS_802_11_AUTH_REQUEST_KEYUPDATE             0x02
-#define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR                0x06
-#define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR           0x0E
-
-/*  MIC check time, 60 seconds. */
-#define MIC_CHECK_TIME 60000000
-
-#ifndef Ndis802_11APMode
-#define Ndis802_11APMode (Ndis802_11InfrastructureMax+1)
-#endif
-
-struct wlan_phy_info {
-       u8      SignalStrength;/* in percentage) */
-       u8      SignalQuality;/* in percentage) */
-       u8      Optimum_antenna;  /* for Antenna diversity */
-       u8      Reserved_0;
-};
-
-struct wlan_bcn_info {
-       /* these infor get from rtw_get_encrypt_info when
-        *       * translate scan to UI */
-       u8 encryp_protocol;/* ENCRYP_PROTOCOL_E: OPEN/WEP/WPA/WPA2/WAPI */
-       int group_cipher; /* WPA/WPA2 group cipher */
-       int pairwise_cipher;/* WPA/WPA2/WEP pairwise cipher */
-       int is_8021x;
-
-       /* bwmode 20/40 and ch_offset UP/LOW */
-       unsigned short  ht_cap_info;
-       unsigned char   ht_info_infos_0;
-};
-
-/* temporally add #pragma pack for structure alignment issue of
-*   struct wlan_bssid_ex and get_struct wlan_bssid_ex_sz()
-*/
-struct wlan_bssid_ex {
-       u32  Length;
-       unsigned char MacAddress[ETH_ALEN];
-       u8  Reserved[2];/* 0]: IS beacon frame */
-       struct ndis_802_11_ssid  Ssid;
-       u32  Privacy;
-       NDIS_802_11_RSSI  Rssi;/* in dBM,raw data ,get from PHY) */
-       struct ndis_802_11_config  Configuration;
-       enum ndis_802_11_network_infra  InfrastructureMode;
-       unsigned char SupportedRates[NDIS_802_11_LENGTH_RATES_EX];
-       struct wlan_phy_info    PhyInfo;
-       u32  IELength;
-       u8  IEs[MAX_IE_SZ];     /* timestamp, beacon interval, and
-                                * capability information) */
-} __packed;
-
-static inline uint get_wlan_bssid_ex_sz(struct wlan_bssid_ex *bss)
-{
-       return sizeof(struct wlan_bssid_ex) - MAX_IE_SZ + bss->IELength;
-}
-
-struct wlan_network {
-       struct list_head list;
-       int     network_type;   /* refer to ieee80211.h for WIRELESS_11B/G */
-       int     fixed;          /*  set fixed when not to be removed
-                                *  in site-surveying */
-       unsigned long   last_scanned; /* timestamp for the network */
-       int     aid;            /* will only be valid when a BSS is joinned. */
-       int     join_res;
-       struct wlan_bssid_ex    network; /* must be the last item */
-       struct wlan_bcn_info    BcnInfo;
-};
-
-enum VRTL_CARRIER_SENSE {
-       DISABLE_VCS,
-       ENABLE_VCS,
-       AUTO_VCS
-};
-
-enum VCS_TYPE {
-       NONE_VCS,
-       RTS_CTS,
-       CTS_TO_SELF
-};
-
-#define PWR_CAM 0
-#define PWR_MINPS 1
-#define PWR_MAXPS 2
-#define PWR_UAPSD 3
-#define PWR_VOIP 4
-
-enum UAPSD_MAX_SP {
-       NO_LIMIT,
-       TWO_MSDU,
-       FOUR_MSDU,
-       SIX_MSDU
-};
-
-#define NUM_PRE_AUTH_KEY 16
-#define NUM_PMKID_CACHE NUM_PRE_AUTH_KEY
-
-u8 key_2char2num(u8 hch, u8 lch);
-u8 key_char2num(u8 ch);
-u8 str_2char2num(u8 hch, u8 lch);
-
-#endif /* ifndef WLAN_BSSDEF_H_ */
diff --git a/drivers/staging/r8188eu/os_dep/ioctl_linux.c b/drivers/staging/r8188eu/os_dep/ioctl_linux.c
deleted file mode 100644 (file)
index e0a8199..0000000
+++ /dev/null
@@ -1,3775 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/wlan_bssdef.h"
-#include "../include/wifi.h"
-#include "../include/rtw_mlme.h"
-#include "../include/rtw_mlme_ext.h"
-#include "../include/rtw_ioctl.h"
-#include "../include/rtw_ioctl_set.h"
-#include "../include/usb_ops.h"
-#include "../include/rtl8188e_hal.h"
-#include "../include/rtw_led.h"
-
-#include "../include/rtw_iol.h"
-
-#define RTL_IOCTL_WPA_SUPPLICANT       (SIOCIWFIRSTPRIV + 30)
-
-#define SCAN_ITEM_SIZE 768
-#define MAX_CUSTOM_LEN 64
-#define RATE_COUNT 4
-
-/*  combo scan */
-#define WEXT_CSCAN_AMOUNT 9
-#define WEXT_CSCAN_BUF_LEN             360
-#define WEXT_CSCAN_HEADER              "CSCAN S\x01\x00\x00S\x00"
-#define WEXT_CSCAN_HEADER_SIZE         12
-#define WEXT_CSCAN_SSID_SECTION                'S'
-#define WEXT_CSCAN_CHANNEL_SECTION     'C'
-#define WEXT_CSCAN_NPROBE_SECTION      'N'
-#define WEXT_CSCAN_ACTV_DWELL_SECTION  'A'
-#define WEXT_CSCAN_PASV_DWELL_SECTION  'P'
-#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;
-
-       memset(&wrqu, 0, sizeof(union iwreq_data));
-       wireless_send_event(padapter->pnetdev, SIOCGIWSCAN, &wrqu, NULL);
-}
-
-void rtw_indicate_wx_assoc_event(struct adapter *padapter)
-{
-       union iwreq_data wrqu;
-       struct  mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       memset(&wrqu, 0, sizeof(union iwreq_data));
-
-       wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-
-       memcpy(wrqu.ap_addr.sa_data, pmlmepriv->cur_network.network.MacAddress, ETH_ALEN);
-
-       wireless_send_event(padapter->pnetdev, SIOCGIWAP, &wrqu, NULL);
-}
-
-void rtw_indicate_wx_disassoc_event(struct adapter *padapter)
-{
-       union iwreq_data wrqu;
-
-       memset(&wrqu, 0, sizeof(union iwreq_data));
-
-       wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-       memset(wrqu.ap_addr.sa_data, 0, ETH_ALEN);
-
-       wireless_send_event(padapter->pnetdev, SIOCGIWAP, &wrqu, NULL);
-}
-
-static char *translate_scan(struct adapter *padapter,
-                           struct iw_request_info *info,
-                           struct wlan_network *pnetwork,
-                           char *start, char *stop)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct iw_event iwe;
-       u16 cap;
-       __le16 le_tmp;
-       u32 ht_ielen = 0;
-       char *custom;
-       char *p;
-       u16 max_rate = 0, rate, ht_cap = false;
-       u32 i = 0;
-       u8 bw_40MHz = 0, short_GI = 0;
-       u16 mcs_rate = 0;
-       u8 ss, sq;
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) {
-               u32     blnGotP2PIE = false;
-
-               /*      User is doing the P2P device discovery */
-               /*      The prefix of SSID should be "DIRECT-" and the IE should contains the P2P IE. */
-               /*      If not, the driver should ignore this AP and go to the next AP. */
-
-               /*      Verifying the SSID */
-               if (!memcmp(pnetwork->network.Ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN)) {
-                       u32     p2pielen = 0;
-
-                       if (pnetwork->network.Reserved[0] == 2) {/*  Probe Request */
-                               /*      Verifying the P2P IE */
-                               if (rtw_get_p2p_ie(pnetwork->network.IEs, pnetwork->network.IELength, NULL, &p2pielen))
-                                       blnGotP2PIE = true;
-                       } else {/*  Beacon or Probe Respones */
-                               /*      Verifying the P2P IE */
-                               if (rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen))
-                                       blnGotP2PIE = true;
-                       }
-               }
-
-               if (!blnGotP2PIE)
-                       return start;
-       }
-
-       /*  AP MAC address  */
-       iwe.cmd = SIOCGIWAP;
-       iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
-
-       memcpy(iwe.u.ap_addr.sa_data, pnetwork->network.MacAddress, 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_t(u16, pnetwork->network.Ssid.SsidLength, 32);
-       start = iwe_stream_add_point(info, start, stop, &iwe, pnetwork->network.Ssid.Ssid);
-
-       /* parsing HT_CAP_IE */
-       p = rtw_get_ie(&pnetwork->network.IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pnetwork->network.IELength - 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_20_40) ? 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.SupportedRates))) {
-               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.SupportedRates))) {
-               if (ht_cap)
-                       snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bgn");
-               else
-                       snprintf(iwe.u.name, IFNAMSIZ, "IEEE 802.11bg");
-       } else {
-               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 */
-       iwe.cmd = SIOCGIWMODE;
-       memcpy(&le_tmp, rtw_get_capability_from_ie(pnetwork->network.IEs), 2);
-
-       cap = le16_to_cpu(le_tmp);
-
-       if (cap & (WLAN_CAPABILITY_IBSS | WLAN_CAPABILITY_BSS)) {
-               if (cap & WLAN_CAPABILITY_BSS)
-                       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.DSConfig < 1)
-               pnetwork->network.Configuration.DSConfig = 1;
-
-        /* Add frequency/channel */
-       iwe.cmd = SIOCGIWFREQ;
-       iwe.u.freq.m = rtw_ch2freq(pnetwork->network.Configuration.DSConfig) * 100000;
-       iwe.u.freq.e = 1;
-       iwe.u.freq.i = pnetwork->network.Configuration.DSConfig;
-       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 += snprintf(p, MAX_CUSTOM_LEN - (p - custom), " Rates (Mb/s): ");
-       while (pnetwork->network.SupportedRates[i] != 0) {
-               rate = pnetwork->network.SupportedRates[i] & 0x7F;
-               if (rate > max_rate)
-                       max_rate = rate;
-               p += snprintf(p, MAX_CUSTOM_LEN - (p - custom),
-                             "%d%s ", rate >> 1, (rate & 1) ? ".5" : "");
-               i++;
-       }
-
-       if (ht_cap) {
-               if (mcs_rate & 0x8000)/* MCS15 */
-                       max_rate = (bw_40MHz) ? ((short_GI) ? 300 : 270) : ((short_GI) ? 144 : 130);
-               else if (mcs_rate & 0x0080)/* MCS7 */
-                       ;
-               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 = 0;
-       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 */
-       {
-               u8 *buf;
-               u8 *wpa_ie, *rsn_ie;
-               u16 wpa_len = 0, rsn_len = 0;
-               u8 *p;
-
-               buf = kzalloc(MAX_WPA_IE_LEN, GFP_ATOMIC);
-               if (!buf)
-                       goto exit;
-               wpa_ie = kzalloc(255, GFP_ATOMIC);
-               if (!wpa_ie) {
-                       kfree(buf);
-                       goto exit;
-               }
-               rsn_ie = kzalloc(255, GFP_ATOMIC);
-               if (!rsn_ie) {
-                       kfree(buf);
-                       kfree(wpa_ie);
-                       goto exit;
-               }
-               rtw_get_sec_ie(pnetwork->network.IEs, pnetwork->network.IELength, rsn_ie, &rsn_len, wpa_ie, &wpa_len);
-
-               if (wpa_len > 0) {
-                       p = buf;
-                       memset(buf, 0, MAX_WPA_IE_LEN);
-                       p += sprintf(p, "wpa_ie =");
-                       for (i = 0; i < wpa_len; i++)
-                               p += sprintf(p, "%02x", wpa_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 = 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);
-                       p += sprintf(p, "rsn_ie =");
-                       for (i = 0; i < rsn_len; i++)
-                               p += sprintf(p, "%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);
-               kfree(wpa_ie);
-               kfree(rsn_ie);
-       }
-
-       {/* parsing WPS IE */
-               uint cnt = 0, total_ielen;
-               u8 *wpsie_ptr = NULL;
-               uint wps_ielen = 0;
-
-               u8 *ie_ptr = pnetwork->network.IEs + _FIXED_IE_LENGTH_;
-               total_ielen = pnetwork->network.IELength - _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) &&
-           is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network)) {
-               ss = padapter->recvpriv.signal_strength;
-               sq = padapter->recvpriv.signal_qual;
-       } else {
-               ss = pnetwork->network.PhyInfo.SignalStrength;
-               sq = pnetwork->network.PhyInfo.SignalQuality;
-       }
-
-       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);
-exit:
-       kfree(custom);
-       return start;
-}
-
-static int wpa_set_auth_algs(struct net_device *dev, u32 value)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int ret = 0;
-
-       if ((value & AUTH_ALG_SHARED_KEY) && (value & AUTH_ALG_OPEN_SYSTEM)) {
-               padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
-               padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeAutoSwitch;
-               padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_Auto;
-       } else if (value & AUTH_ALG_SHARED_KEY) {
-               padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
-
-               padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeShared;
-               padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_Shared;
-       } else if (value & AUTH_ALG_OPEN_SYSTEM) {
-               if (padapter->securitypriv.ndisauthtype < Ndis802_11AuthModeWPAPSK) {
-                       padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
-                       padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
-               }
-       } else if (!(value & AUTH_ALG_LEAP)) {
-               ret = -EINVAL;
-       }
-       return ret;
-}
-
-static int wpa_set_encryption(struct net_device *dev, struct ieee_param *param, u32 param_len)
-{
-       int ret = 0;
-       u32 wep_key_idx, wep_key_len, wep_total_len;
-       struct ndis_802_11_wep   *pwep = NULL;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       param->u.crypt.err = 0;
-       param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0';
-
-       if (param_len < (u32)((u8 *)param->u.crypt.key - (u8 *)param) + param->u.crypt.key_len) {
-               ret =  -EINVAL;
-               goto exit;
-       }
-
-       if (param->sta_addr[0] == 0xff && param->sta_addr[1] == 0xff &&
-           param->sta_addr[2] == 0xff && param->sta_addr[3] == 0xff &&
-           param->sta_addr[4] == 0xff && param->sta_addr[5] == 0xff) {
-               if (param->u.crypt.idx >= WEP_KEYS) {
-                       ret = -EINVAL;
-                       goto exit;
-               }
-       } else {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       if (strcmp(param->u.crypt.alg, "WEP") == 0) {
-               padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
-               padapter->securitypriv.dot11PrivacyAlgrthm = _WEP40_;
-               padapter->securitypriv.dot118021XGrpPrivacy = _WEP40_;
-
-               wep_key_idx = param->u.crypt.idx;
-               wep_key_len = param->u.crypt.key_len;
-
-               if (wep_key_idx > WEP_KEYS)
-                       return -EINVAL;
-
-               if (wep_key_len > 0) {
-                       wep_key_len = wep_key_len <= 5 ? 5 : 13;
-                       wep_total_len = wep_key_len + sizeof(*pwep);
-                       pwep = kzalloc(wep_total_len, GFP_KERNEL);
-                       if (!pwep)
-                               goto exit;
-
-                       pwep->KeyLength = wep_key_len;
-                       pwep->Length = wep_total_len;
-                       if (wep_key_len == 13) {
-                               padapter->securitypriv.dot11PrivacyAlgrthm = _WEP104_;
-                               padapter->securitypriv.dot118021XGrpPrivacy = _WEP104_;
-                       }
-               } else {
-                       ret = -EINVAL;
-                       goto exit;
-               }
-               pwep->KeyIndex = wep_key_idx;
-               pwep->KeyIndex |= 0x80000000;
-               memcpy(pwep->KeyMaterial,  param->u.crypt.key, pwep->KeyLength);
-               if (param->u.crypt.set_tx) {
-                       if (rtw_set_802_11_add_wep(padapter, pwep) == (u8)_FAIL)
-                               ret = -EOPNOTSUPP;
-               } else {
-                       if (wep_key_idx >= WEP_KEYS) {
-                               ret = -EOPNOTSUPP;
-                               goto exit;
-                       }
-                       memcpy(&psecuritypriv->dot11DefKey[wep_key_idx].skey[0], pwep->KeyMaterial, pwep->KeyLength);
-                       psecuritypriv->dot11DefKeylen[wep_key_idx] = pwep->KeyLength;
-                       rtw_set_key(padapter, psecuritypriv, wep_key_idx, 0);
-               }
-               goto exit;
-       }
-
-       if (padapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) { /*  802_1x */
-               struct sta_info *psta, *pbcmc_sta;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_MP_STATE)) { /* sta mode */
-                       psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));
-                       if (!psta) {
-                               ;
-                       } else {
-                               if (strcmp(param->u.crypt.alg, "none") != 0)
-                                       psta->ieee8021x_blocked = false;
-
-                               if ((padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption2Enabled) ||
-                                   (padapter->securitypriv.ndisencryptstatus ==  Ndis802_11Encryption3Enabled))
-                                       psta->dot118021XPrivacy = padapter->securitypriv.dot11PrivacyAlgrthm;
-
-                               if (param->u.crypt.set_tx == 1) { /* pairwise key */
-                                       memcpy(psta->dot118021x_UncstKey.skey,  param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len));
-
-                                       if (strcmp(param->u.crypt.alg, "TKIP") == 0) { /* set mic key */
-                                               memcpy(psta->dot11tkiptxmickey.skey, &param->u.crypt.key[16], 8);
-                                               memcpy(psta->dot11tkiprxmickey.skey, &param->u.crypt.key[24], 8);
-                                               padapter->securitypriv.busetkipkey = false;
-                                       }
-
-                                       rtw_setstakey_cmd(padapter, (unsigned char *)psta, true);
-                               } else { /* group key */
-                                       memcpy(padapter->securitypriv.dot118021XGrpKey[param->u.crypt.idx].skey,  param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len));
-                                       memcpy(padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey, &param->u.crypt.key[16], 8);
-                                       memcpy(padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey, &param->u.crypt.key[24], 8);
-                                       padapter->securitypriv.binstallGrpkey = true;
-
-                                       padapter->securitypriv.dot118021XGrpKeyid = param->u.crypt.idx;
-
-                                       rtw_set_key(padapter, &padapter->securitypriv, param->u.crypt.idx, 1);
-                                       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_PROVISIONING_ING))
-                                               rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_DONE);
-                               }
-                       }
-                       pbcmc_sta = rtw_get_bcmc_stainfo(padapter);
-                       if (!pbcmc_sta) {
-                               ;
-                       } else {
-                               /* Jeff: don't disable ieee8021x_blocked while clearing key */
-                               if (strcmp(param->u.crypt.alg, "none") != 0)
-                                       pbcmc_sta->ieee8021x_blocked = false;
-
-                               if ((padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption2Enabled) ||
-                                   (padapter->securitypriv.ndisencryptstatus ==  Ndis802_11Encryption3Enabled))
-                                       pbcmc_sta->dot118021XPrivacy = padapter->securitypriv.dot11PrivacyAlgrthm;
-                       }
-               }
-       }
-
-exit:
-
-       kfree(pwep);
-
-       return ret;
-}
-
-static int rtw_set_wpa_ie(struct adapter *padapter, char *pie, unsigned short ielen)
-{
-       u8 *buf = NULL;
-       int group_cipher = 0, pairwise_cipher = 0;
-       int ret = 0;
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       if (ielen > MAX_WPA_IE_LEN || !pie) {
-               _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
-               if (!pie)
-                       return ret;
-               else
-                       return -EINVAL;
-       }
-
-       if (ielen) {
-               buf = kmemdup(pie, ielen, GFP_KERNEL);
-               if (!buf) {
-                       ret =  -ENOMEM;
-                       goto exit;
-               }
-
-               if (ielen < RSN_HEADER_LEN) {
-                       ret  = -1;
-                       goto exit;
-               }
-
-               if (rtw_parse_wpa_ie(buf, ielen, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) {
-                       padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
-                       padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeWPAPSK;
-                       memcpy(padapter->securitypriv.supplicant_ie, &buf[0], ielen);
-               }
-
-               if (rtw_parse_wpa2_ie(buf, ielen, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) {
-                       padapter->securitypriv.dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
-                       padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeWPA2PSK;
-                       memcpy(padapter->securitypriv.supplicant_ie, &buf[0], ielen);
-               }
-
-               switch (group_cipher) {
-               case WPA_CIPHER_NONE:
-                       padapter->securitypriv.dot118021XGrpPrivacy = _NO_PRIVACY_;
-                       padapter->securitypriv.ndisencryptstatus = Ndis802_11EncryptionDisabled;
-                       break;
-               case WPA_CIPHER_WEP40:
-                       padapter->securitypriv.dot118021XGrpPrivacy = _WEP40_;
-                       padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
-                       break;
-               case WPA_CIPHER_TKIP:
-                       padapter->securitypriv.dot118021XGrpPrivacy = _TKIP_;
-                       padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
-                       break;
-               case WPA_CIPHER_CCMP:
-                       padapter->securitypriv.dot118021XGrpPrivacy = _AES_;
-                       padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
-                       break;
-               case WPA_CIPHER_WEP104:
-                       padapter->securitypriv.dot118021XGrpPrivacy = _WEP104_;
-                       padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
-                       break;
-               }
-
-               switch (pairwise_cipher) {
-               case WPA_CIPHER_NONE:
-                       padapter->securitypriv.dot11PrivacyAlgrthm = _NO_PRIVACY_;
-                       padapter->securitypriv.ndisencryptstatus = Ndis802_11EncryptionDisabled;
-                       break;
-               case WPA_CIPHER_WEP40:
-                       padapter->securitypriv.dot11PrivacyAlgrthm = _WEP40_;
-                       padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
-                       break;
-               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 == _VENDOR_SPECIFIC_IE_) && (!memcmp(&buf[cnt + 2], wps_oui, 4))) {
-                                       padapter->securitypriv.wps_ie_len = ((buf[cnt + 1] + 2) < (MAX_WPA_IE_LEN << 2)) ? (buf[cnt + 1] + 2) : (MAX_WPA_IE_LEN << 2);
-
-                                       memcpy(padapter->securitypriv.wps_ie, &buf[cnt], padapter->securitypriv.wps_ie_len);
-
-                                       set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
-                                       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_GONEGO_OK))
-                                               rtw_p2p_set_state(pwdinfo, P2P_STATE_PROVISIONING_ING);
-                                       cnt += buf[cnt + 1] + 2;
-                                       break;
-                               } else {
-                                       cnt += buf[cnt + 1] + 2; /* goto next */
-                               }
-                       }
-               }
-       }
-
-exit:
-       kfree(buf);
-       return ret;
-}
-
-typedef unsigned char   NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX];
-
-static int rtw_wx_get_name(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)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)) {
-               /* parsing HT_CAP_IE */
-               p = rtw_get_ie(&pcur_bss->IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pcur_bss->IELength - 12);
-               if (p && ht_ielen > 0)
-                       ht_cap = true;
-
-               prates = &pcur_bss->SupportedRates;
-
-               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 (ht_cap)
-                               snprintf(wrqu->name, IFNAMSIZ, "IEEE 802.11gn");
-                       else
-                               snprintf(wrqu->name, IFNAMSIZ, "IEEE 802.11g");
-               }
-       } else {
-               snprintf(wrqu->name, IFNAMSIZ, "unassociated");
-       }
-
-
-
-       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 = (struct adapter *)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)) {
-               /* wrqu->freq.m = ieee80211_wlan_frequencies[pcur_bss->Configuration.DSConfig-1] * 100000; */
-               wrqu->freq.m = rtw_ch2freq(pcur_bss->Configuration.DSConfig) * 100000;
-               wrqu->freq.e = 1;
-               wrqu->freq.i = pcur_bss->Configuration.DSConfig;
-       } 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 = (struct adapter *)rtw_netdev_priv(dev);
-       enum ndis_802_11_network_infra networkType;
-       int ret = 0;
-
-       ret = rtw_pwr_wakeup(padapter);
-       if (ret)
-               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;
-               break;
-       case IW_MODE_INFRA:
-               networkType = Ndis802_11Infrastructure;
-               break;
-       default:
-               ret = -EINVAL;
-               goto exit;
-       }
-       if (!rtw_set_802_11_infrastructure_mode(padapter, networkType)) {
-               ret = -EPERM;
-               goto exit;
-       }
-       rtw_setopmode_cmd(padapter, networkType);
-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 = (struct adapter *)rtw_netdev_priv(dev);
-       struct  mlme_priv       *pmlmepriv = &padapter->mlmepriv;
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
-               wrqu->mode = IW_MODE_INFRA;
-       else if  ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) ||
-                 (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)))
-               wrqu->mode = IW_MODE_ADHOC;
-       else if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
-               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 = (struct adapter *)rtw_netdev_priv(dev);
-       u8   j, blInserted = false;
-       int  ret = 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};
-
-       memcpy(strIssueBssid, pPMK->bssid.sa_data, ETH_ALEN);
-       if (pPMK->cmd == IW_PMKSA_ADD) {
-               if (!memcmp(strIssueBssid, strZeroMacAddress, ETH_ALEN))
-                       return ret;
-               else
-                       ret = true;
-               blInserted = false;
-
-               /* overwrite PMKID */
-               for (j = 0; j < NUM_PMKID_CACHE; j++) {
-                       if (!memcmp(psecuritypriv->PMKIDList[j].Bssid, strIssueBssid, ETH_ALEN)) {
-                               /*  BSSID is matched, the same AP => rewrite with new PMKID. */
-                               memcpy(psecuritypriv->PMKIDList[j].PMKID, pPMK->pmkid, IW_PMKID_LEN);
-                               psecuritypriv->PMKIDList[j].bUsed = true;
-                               psecuritypriv->PMKIDIndex = j + 1;
-                               blInserted = true;
-                               break;
-                       }
-               }
-
-               if (!blInserted) {
-                       /*  Find a new entry */
-                       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) {
-               ret = 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. */
-                               memset(psecuritypriv->PMKIDList[j].Bssid, 0x00, ETH_ALEN);
-                               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;
-               ret = true;
-       }
-       return ret;
-}
-
-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 = (struct adapter *)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 = 178; /* -78 dBm */
-       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;
-
-/*  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 = (struct adapter *)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_auth_mode      authmode;
-
-       ret = rtw_pwr_wakeup(padapter);
-       if (ret)
-               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);
-       pmlmepriv->pscanned = phead->next;
-
-       while (phead != pmlmepriv->pscanned) {
-
-               pnetwork = container_of(pmlmepriv->pscanned, struct wlan_network, list);
-
-               pmlmepriv->pscanned = pmlmepriv->pscanned->next;
-
-               dst_bssid = pnetwork->network.MacAddress;
-
-               src_bssid = temp->sa_data;
-
-               if ((!memcmp(dst_bssid, src_bssid, ETH_ALEN))) {
-                       if (!rtw_set_802_11_infrastructure_mode(padapter, pnetwork->network.InfrastructureMode)) {
-                               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)) {
-               ret = -1;
-               goto exit;
-       }
-
-exit:
-
-
-
-       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 = (struct adapter *)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;
-
-       memset(wrqu->ap_addr.sa_data, 0, ETH_ALEN);
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_AP_STATE))
-               memcpy(wrqu->ap_addr.sa_data, pcur_bss->MacAddress, ETH_ALEN);
-       else
-               memset(wrqu->ap_addr.sa_data, 0, ETH_ALEN);
-
-
-
-       return 0;
-}
-
-static int rtw_wx_set_mlme(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct iw_mlme *mlme = (struct iw_mlme *)extra;
-
-       if (!mlme)
-               return -1;
-
-       switch (mlme->cmd) {
-       case IW_MLME_DEAUTH:
-               rtw_set_802_11_disassociate(padapter);
-               break;
-       case IW_MLME_DISASSOC:
-               rtw_set_802_11_disassociate(padapter);
-               break;
-       default:
-               return -EOPNOTSUPP;
-       }
-       return 0;
-}
-
-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 = (struct adapter *)rtw_netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ndis_802_11_ssid ssid[RTW_SSID_SCAN_AMOUNT];
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       ret = rtw_pwr_wakeup(padapter);
-       if (ret)
-               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)) {
-               indicate_wx_scan_complete_event(padapter);
-               goto exit;
-       }
-
-/*     For the DMP WiFi Display project, the driver won't to scan because */
-/*     the pmlmepriv->scan_interval is always equal to 3. */
-/*     So, the wpa_supplicant won't find out the WPS SoftAP. */
-
-       if (pwdinfo->p2p_state != P2P_STATE_NONE) {
-               rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);
-               rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_FULL);
-               rtw_free_network_queue(padapter, true);
-       }
-
-       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].SsidLength = len;
-
-                       spin_lock_bh(&pmlmepriv->lock);
-
-                       _status = rtw_sitesurvey_cmd(padapter, ssid, 1);
-
-                       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 &&
-                                           sec_len <= 32) {
-                                               ssid[ssid_index].SsidLength = sec_len;
-                                               memcpy(ssid[ssid_index].Ssid, pos, sec_len);
-                                               ssid_index++;
-                                       }
-                                       pos += sec_len;
-                                       len -= sec_len;
-                                       break;
-                               case WEXT_CSCAN_TYPE_SECTION:
-                               case WEXT_CSCAN_CHANNEL_SECTION:
-                                       pos += 1;
-                                       len -= 1;
-                                       break;
-                               case WEXT_CSCAN_PASV_DWELL_SECTION:
-                               case WEXT_CSCAN_HOME_DWELL_SECTION:
-                               case WEXT_CSCAN_ACTV_DWELL_SECTION:
-                                       pos += 2;
-                                       len -= 2;
-                                       break;
-                               default:
-                                       len = 0; /*  stop parsing */
-                               }
-                       }
-
-                       /* 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)
-               ret = -1;
-
-exit:
-
-       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 = (struct adapter *)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;
-       u32 cnt = 0;
-       u32 wait_for_surveydone;
-       int wait_status;
-       struct  wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) {
-               /*      P2P is enabled */
-               wait_for_surveydone = 200;
-       } else {
-               /*      P2P is disabled */
-               wait_for_surveydone = 100;
-       }
-
-       wait_status = _FW_UNDER_SURVEY | _FW_UNDER_LINKING;
-
-       while (check_fwstate(pmlmepriv, wait_status)) {
-               msleep(30);
-               cnt++;
-               if (cnt > wait_for_surveydone)
-                       break;
-       }
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-       phead = get_list_head(queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               if ((stop - ev) < SCAN_ITEM_SIZE) {
-                       ret = -E2BIG;
-                       break;
-               }
-
-               pnetwork = container_of(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.DSConfig) >= 0)
-                       ev = translate_scan(padapter, a, pnetwork, ev, stop);
-
-               plist = plist->next;
-       }
-
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       wrqu->data.length = ev - extra;
-       wrqu->data.flags = 0;
-
-       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 = (struct adapter *)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_auth_mode authmode;
-       struct ndis_802_11_ssid ndis_ssid;
-       u8 *dst_ssid, *src_ssid;
-
-       uint ret = 0, len;
-
-       ret = rtw_pwr_wakeup(padapter);
-       if (ret)
-               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.SsidLength = len;
-               memcpy(ndis_ssid.Ssid, extra, len);
-               src_ssid = ndis_ssid.Ssid;
-
-               spin_lock_bh(&queue->lock);
-               phead = get_list_head(queue);
-               pmlmepriv->pscanned = phead->next;
-
-               while (phead != pmlmepriv->pscanned) {
-                       pnetwork = container_of(pmlmepriv->pscanned, struct wlan_network, list);
-
-                       pmlmepriv->pscanned = pmlmepriv->pscanned->next;
-
-                       dst_ssid = pnetwork->network.Ssid.Ssid;
-
-                       if ((!memcmp(dst_ssid, src_ssid, ndis_ssid.SsidLength)) &&
-                           (pnetwork->network.Ssid.SsidLength == ndis_ssid.SsidLength)) {
-
-                               if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-                                       if (pnetwork->network.InfrastructureMode != pmlmepriv->cur_network.network.InfrastructureMode)
-                                               continue;
-                               }
-
-                               if (!rtw_set_802_11_infrastructure_mode(padapter, pnetwork->network.InfrastructureMode)) {
-                                       ret = -1;
-                                       spin_unlock_bh(&queue->lock);
-                                       goto exit;
-                               }
-
-                               break;
-                       }
-               }
-               spin_unlock_bh(&queue->lock);
-               rtw_set_802_11_authentication_mode(padapter, authmode);
-               if (!rtw_set_802_11_ssid(padapter, &ndis_ssid)) {
-                       ret = -1;
-                       goto exit;
-               }
-       }
-
-exit:
-       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;
-       struct adapter *padapter = (struct adapter *)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)) ||
-           (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))) {
-               len = pcur_bss->Ssid.SsidLength;
-               memcpy(extra, pcur_bss->Ssid.Ssid, len);
-       } else {
-               len = 0;
-               *extra = 0;
-       }
-       wrqu->essid.length = len;
-       wrqu->essid.flags = 1;
-
-       return 0;
-}
-
-static int rtw_wx_set_rate(struct net_device *dev,
-                             struct iw_request_info *a,
-                             union iwreq_data *wrqu, char *extra)
-{
-       int i;
-       struct adapter *padapter = (struct adapter *)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;
-               }
-       }
-
-       return rtw_setdatarate_cmd(padapter, datarates);
-}
-
-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((struct adapter *)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 = (struct adapter *)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 = (struct adapter *)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 = (struct adapter *)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 = (struct adapter *)rtw_netdev_priv(dev);
-
-
-
-       wrqu->frag.value = padapter->xmitpriv.frag_len;
-       wrqu->frag.fixed = 0;   /* no auto select */
-
-
-
-       return 0;
-}
-
-static int rtw_wx_get_retry(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       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_auth_mode authmode;
-
-       struct iw_point *erq = &wrqu->encoding;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-       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.KeyIndex = key;
-       if (erq->length > 0) {
-               wep.KeyLength = erq->length <= 5 ? 5 : 13;
-
-               wep.Length = wep.KeyLength + offsetof(struct ndis_802_11_wep, KeyMaterial);
-       } else {
-               wep.KeyLength = 0;
-
-               if (keyindex_provided == 1) {
-                       /*  set key_id only, no given KeyMaterial(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.KeyIndex |= 0x80000000;
-
-       memcpy(wep.KeyMaterial, keybuf, wep.KeyLength);
-
-       if (!rtw_set_802_11_add_wep(padapter, &wep)) {
-               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;
-       struct adapter *padapter = (struct adapter *)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)) {
-                       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;
-
-       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 0;
-}
-
-static int rtw_wx_get_power(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       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)
-{
-       int ret;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-
-       ret = rtw_set_wpa_ie(padapter, extra, wrqu->data.length);
-       return ret;
-}
-
-static int rtw_wx_set_auth(struct net_device *dev,
-                            struct iw_request_info *info,
-                            union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)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:
-               if (param->value) {
-                       /*  wpa_supplicant is enabling the tkip countermeasure. */
-                       padapter->securitypriv.btkip_countermeasure = true;
-               } else {
-                       /*  wpa_supplicant is disabling the tkip countermeasure. */
-                       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.
-                */
-
-               if (padapter->securitypriv.ndisencryptstatus == Ndis802_11Encryption1Enabled)
-                       break;/* it means init value, or using wep, ndisencryptstatus = Ndis802_11Encryption1Enabled, */
-                                       /*  then it needn't reset it; */
-
-               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 = -1;
-
-       param_len = sizeof(struct ieee_param) + pext->key_len;
-       param = kzalloc(param_len, GFP_KERNEL);
-       if (!param)
-               return -ENOMEM;
-
-       param->cmd = IEEE_CMD_SET_ENCRYPTION;
-       memset(param->sta_addr, 0xff, ETH_ALEN);
-
-       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;
-       default:
-               goto out;
-       }
-
-       strscpy((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))
-               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->u.crypt.key, pext + 1, pext->key_len);
-       }
-
-       ret =  wpa_set_encryption(dev, param, param_len);
-
-out:
-       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)
-{
-       if (extra) {
-               wrqu->data.length = 14;
-               wrqu->data.flags = 1;
-               memcpy(extra, "<WIFI@REALTEK>", 14);
-       }
-
-       /* dump debug info here */
-       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 = (struct adapter *)rtw_netdev_priv(dev);
-       u32 path, addr, data32;
-
-       path = *(u32 *)extra;
-       if (path != RF_PATH_A)
-               return -EINVAL;
-
-       addr = *((u32 *)extra + 1);
-       data32 = rtl8188e_PHY_QueryRFReg(padapter, 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 = (struct adapter *)rtw_netdev_priv(dev);
-       u32 path, addr, data32;
-
-       path = *(u32 *)extra;
-       if (path != RF_PATH_A)
-               return -EINVAL;
-
-       addr = *((u32 *)extra + 1);
-       data32 = *((u32 *)extra + 2);
-       rtl8188e_PHY_SetRFReg(padapter, addr, 0xFFFFF, data32);
-
-       return 0;
-}
-
-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 = (struct adapter *)rtw_netdev_priv(dev);
-       u8 channel_plan_req = (u8)(*((int *)wrqu));
-
-       if (rtw_set_chplan_cmd(padapter, channel_plan_req) != _SUCCESS)
-               return -EPERM;
-
-       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;
-       u32 cnt = 0, wpa_ielen;
-       struct list_head *plist, *phead;
-       unsigned char *pbuf;
-       u8 bssid[ETH_ALEN];
-       char data[32];
-       struct wlan_network *pnetwork = NULL;
-       struct adapter *padapter = (struct adapter *)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) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       while ((check_fwstate(pmlmepriv, (_FW_UNDER_SURVEY | _FW_UNDER_LINKING)))) {
-               msleep(30);
-               cnt++;
-               if (cnt > 100)
-                       break;
-       }
-       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);
-       plist = phead->next;
-
-       while (phead != plist) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-
-               if (!mac_pton(data, bssid)) {
-                       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                       return -EINVAL;
-               }
-
-               if (!memcmp(bssid, pnetwork->network.MacAddress, ETH_ALEN)) {
-                       /* BSSID match, then check if supporting wpa/wpa2 */
-                       pbuf = rtw_get_wpa_ie(&pnetwork->network.IEs[12], &wpa_ielen, pnetwork->network.IELength - 12);
-                       if (pbuf && (wpa_ielen > 0)) {
-                               pdata->flags = 1;
-                               break;
-                       }
-
-                       pbuf = rtw_get_wpa2_ie(&pnetwork->network.IEs[12], &wpa_ielen, pnetwork->network.IELength - 12);
-                       if (pbuf && (wpa_ielen > 0)) {
-                               pdata->flags = 2;
-                               break;
-                       }
-               }
-
-               plist = plist->next;
-       }
-
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       if (pdata->length >= 34) {
-               if (copy_to_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) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       selector = *pdata;
-       if (selector < 3 && selector >= 0) {
-               padapter->pid[selector] = *(pdata + 1);
-               ui_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 = (struct adapter *)rtw_netdev_priv(dev);
-       struct iw_point *pdata = &wrqu->data;
-       u32   u32wps_start = 0;
-
-       if (!pdata)
-               return -EINVAL;
-       ret = copy_from_user((void *)&u32wps_start, pdata->pointer, 4);
-       if (ret) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       if (padapter->bDriverStopped) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       if (u32wps_start == 0)
-               u32wps_start = *extra;
-
-       if (u32wps_start == 1) /*  WPS Start */
-               rtw_led_control(padapter, LED_CTL_START_WPS);
-       else if (u32wps_start == 2) /*  WPS Stop because of wps success */
-               rtw_led_control(padapter, LED_CTL_STOP_WPS);
-       else if (u32wps_start == 3) /*  WPS Stop because of wps fail */
-               rtw_led_control(padapter, LED_CTL_STOP_WPS_FAIL);
-
-exit:
-       return ret;
-}
-
-static int rtw_wext_p2p_enable(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       int ret;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       enum P2P_ROLE init_role = P2P_ROLE_DISABLE;
-
-       if (*extra == '0')
-               init_role = P2P_ROLE_DISABLE;
-       else if (*extra == '1')
-               init_role = P2P_ROLE_DEVICE;
-       else if (*extra == '2')
-               init_role = P2P_ROLE_CLIENT;
-       else if (*extra == '3')
-               init_role = P2P_ROLE_GO;
-
-       ret = rtw_p2p_enable(padapter, init_role);
-       if (ret)
-               return ret;
-
-       /* set channel/bandwidth */
-       if (init_role != P2P_ROLE_DISABLE) {
-               u8 channel, ch_offset;
-               u16 bwmode;
-
-               if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_LISTEN)) {
-                       /*      Stay at the listen state and wait for discovery. */
-                       channel = pwdinfo->listen_channel;
-                       pwdinfo->operating_channel = pwdinfo->listen_channel;
-                       ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-                       bwmode = HT_CHANNEL_WIDTH_20;
-               } else {
-                       pwdinfo->operating_channel = pmlmeext->cur_channel;
-
-                       channel = pwdinfo->operating_channel;
-                       ch_offset = pmlmeext->cur_ch_offset;
-                       bwmode = pmlmeext->cur_bwmode;
-               }
-
-               set_channel_bwmode(padapter, channel, ch_offset, bwmode);
-       }
-
-       return 0;
-}
-
-static void rtw_p2p_set_go_nego_ssid(struct net_device *dev,
-                                    struct iw_request_info *info,
-                                    union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       memcpy(pwdinfo->nego_ssid, extra, strlen(extra));
-       pwdinfo->nego_ssidlen = strlen(extra);
-}
-
-static int rtw_p2p_set_intent(struct net_device *dev,
-                             struct iw_request_info *info,
-                             union iwreq_data *wrqu, char *extra)
-{
-       int ret = 0;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-       u8 intent = pwdinfo->intent;
-
-       switch (wrqu->data.length) {
-       case 1:
-               intent = extra[0] - '0';
-               break;
-       case 2:
-               intent = str_2char2num(extra[0], extra[1]);
-               break;
-       }
-       if (intent <= 15)
-               pwdinfo->intent = intent;
-       else
-               ret = -1;
-       return ret;
-}
-
-static int rtw_p2p_set_listen_ch(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       int ret = 0;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-       u8 listen_ch = pwdinfo->listen_channel; /*      Listen channel number */
-
-       switch (wrqu->data.length) {
-       case 1:
-               listen_ch = extra[0] - '0';
-               break;
-       case 2:
-               listen_ch = str_2char2num(extra[0], extra[1]);
-               break;
-       }
-
-       if ((listen_ch == 1) || (listen_ch == 6) || (listen_ch == 11)) {
-               pwdinfo->listen_channel = listen_ch;
-               set_channel_bwmode(padapter, pwdinfo->listen_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-       } else {
-               ret = -1;
-       }
-
-       return ret;
-}
-
-static int rtw_p2p_set_op_ch(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-/*     Commented by Albert 20110524 */
-/*     This function is used to set the operating channel if the driver will become the group owner */
-
-       int ret = 0;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-       u8 op_ch = pwdinfo->operating_channel;  /*      Operating channel number */
-
-       switch (wrqu->data.length) {
-       case 1:
-               op_ch = extra[0] - '0';
-               break;
-       case 2:
-               op_ch = str_2char2num(extra[0], extra[1]);
-               break;
-       }
-
-       if (op_ch > 0)
-               pwdinfo->operating_channel = op_ch;
-       else
-               ret = -1;
-
-       return ret;
-}
-
-static int rtw_p2p_profilefound(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       int ret = 0;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       /*      Comment by Albert 2010/10/13 */
-       /*      Input data format: */
-       /*      Ex:  0 */
-       /*      Ex:  1XX:XX:XX:XX:XX:XXYYSSID */
-       /*      0 => Reflush the profile record list. */
-       /*      1 => Add the profile list */
-       /*      XX:XX:XX:XX:XX:XX => peer's MAC Address (ex: 00:E0:4C:00:00:01) */
-       /*      YY => SSID Length */
-       /*      SSID => SSID for persistence group */
-
-       /*      The upper application should pass the SSID to driver by using this rtw_p2p_profilefound function. */
-       if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) {
-               if (extra[0] == '0') {
-                       /*      Remove all the profile information of wifidirect_info structure. */
-                       memset(&pwdinfo->profileinfo[0], 0x00, sizeof(struct profile_info) * P2P_MAX_PERSISTENT_GROUP_NUM);
-                       pwdinfo->profileindex = 0;
-               } else {
-                       if (pwdinfo->profileindex >= P2P_MAX_PERSISTENT_GROUP_NUM) {
-                               ret = -1;
-                       } else {
-                               int jj, kk;
-
-                               /*      Add this profile information into pwdinfo->profileinfo */
-                               /*      Ex:  1XX:XX:XX:XX:XX:XXYYSSID */
-                               for (jj = 0, kk = 1; jj < ETH_ALEN; jj++, kk += 3)
-                                       pwdinfo->profileinfo[pwdinfo->profileindex].peermac[jj] = key_2char2num(extra[kk], extra[kk + 1]);
-
-                               pwdinfo->profileinfo[pwdinfo->profileindex].ssidlen = (extra[18] - '0') * 10 + (extra[19] - '0');
-                               memcpy(pwdinfo->profileinfo[pwdinfo->profileindex].ssid, &extra[20], pwdinfo->profileinfo[pwdinfo->profileindex].ssidlen);
-                               pwdinfo->profileindex++;
-                       }
-               }
-       }
-
-       return ret;
-}
-
-static void rtw_p2p_setDN(struct net_device *dev,
-                         struct iw_request_info *info,
-                         union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       memset(pwdinfo->device_name, 0x00, WPS_MAX_DEVICE_NAME_LEN);
-       memcpy(pwdinfo->device_name, extra, wrqu->data.length - 1);
-       pwdinfo->device_name_len = wrqu->data.length - 1;
-}
-
-static int rtw_p2p_get_wps_configmethod(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       u8 peerMAC[ETH_ALEN] = {0x00};
-       int jj, kk;
-       u8 peerMACStr[17] = {0x00};
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-       struct list_head *plist, *phead;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       struct  wlan_network    *pnetwork = NULL;
-       u8 blnMatch = 0;
-       u16     attr_content = 0;
-       uint attr_contentlen = 0;
-       /* 6 is the string "wpsCM =", 17 is the MAC addr, we have to clear it at wrqu->data.pointer */
-       u8 attr_content_str[6 + 17] = {0x00};
-
-       /*      Commented by Albert 20110727 */
-       /*      The input data is the MAC address which the application wants to know its WPS config method. */
-       /*      After knowing its WPS config method, the application can decide the config method for provisioning discovery. */
-       /*      Format: iwpriv wlanx p2p_get_wpsCM 00:E0:4C:00:00:05 */
-
-       if (copy_from_user(peerMACStr, wrqu->data.pointer + 6, 17))
-               return -EFAULT;
-
-       for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3)
-               peerMAC[jj] = key_2char2num(peerMACStr[kk], peerMACStr[kk + 1]);
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-       phead = get_list_head(queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-               if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) {
-                       u8 *wpsie;
-                       uint wpsie_len = 0;
-                       __be16 be_tmp;
-
-                       /*  The mac address is matched. */
-                       wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len);
-                       if (wpsie) {
-                               rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_CONF_METHOD, (u8 *)&be_tmp, &attr_contentlen);
-                               if (attr_contentlen) {
-                                       attr_content = be16_to_cpu(be_tmp);
-                                       sprintf(attr_content_str, "\n\nM =%.4d", attr_content);
-                                       blnMatch = 1;
-                               }
-                       }
-                       break;
-               }
-               plist = plist->next;
-       }
-
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       if (!blnMatch)
-               sprintf(attr_content_str, "\n\nM = 0000");
-
-       if (copy_to_user(wrqu->data.pointer, attr_content_str, 6 + 17))
-               return -EFAULT;
-       return 0;
-}
-
-static int rtw_p2p_get_go_device_address(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       u8 peerMAC[ETH_ALEN] = {0x00};
-       int jj, kk;
-       u8 peerMACStr[17] = {0x00};
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-       struct list_head *plist, *phead;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       struct  wlan_network    *pnetwork = NULL;
-       u8 blnMatch = 0;
-       u8 *p2pie;
-       uint p2pielen = 0, attr_contentlen = 0;
-       u8 attr_content[100] = {0x00};
-
-       u8 go_devadd_str[100 + 10] = {0x00};
-       /*  +10 is for the str "go_devadd =", we have to clear it at wrqu->data.pointer */
-
-       /*      Commented by Albert 20121209 */
-       /*      The input data is the GO's interface address which the application wants to know its device address. */
-       /*      Format: iwpriv wlanx p2p_get2 go_devadd = 00:E0:4C:00:00:05 */
-
-       if (copy_from_user(peerMACStr, wrqu->data.pointer + 10, 17))
-               return -EFAULT;
-
-       for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3)
-               peerMAC[jj] = key_2char2num(peerMACStr[kk], peerMACStr[kk + 1]);
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-       phead = get_list_head(queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-               if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) {
-                       /*      Commented by Albert 2011/05/18 */
-                       /*      Match the device address located in the P2P IE */
-                       /*      This is for the case that the P2P device address is not the same as the P2P interface address. */
-
-                       p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen);
-                       if (p2pie) {
-                               while (p2pie) {
-                                       /*      The P2P Device ID attribute is included in the Beacon frame. */
-                                       /*      The P2P Device Info attribute is included in the probe response frame. */
-
-                                       memset(attr_content, 0x00, 100);
-                                       if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen)) {
-                                               /*      Handle the P2P Device ID attribute of Beacon first */
-                                               blnMatch = 1;
-                                               break;
-                                       } else if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen)) {
-                                               /*      Handle the P2P Device Info attribute of probe response */
-                                               blnMatch = 1;
-                                               break;
-                                       }
-
-                                       /* Get the next P2P IE */
-                                       p2pie = rtw_get_p2p_ie(p2pie + p2pielen, pnetwork->network.IELength - 12 - (p2pie - &pnetwork->network.IEs[12] + p2pielen), NULL, &p2pielen);
-                               }
-                       }
-            }
-
-               plist = plist->next;
-       }
-
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       if (!blnMatch)
-               sprintf(go_devadd_str, "\n\ndev_add = NULL");
-       else
-               sprintf(go_devadd_str, "\ndev_add =%.2X:%.2X:%.2X:%.2X:%.2X:%.2X",
-                       attr_content[0], attr_content[1], attr_content[2], attr_content[3], attr_content[4], attr_content[5]);
-
-       if (copy_to_user(wrqu->data.pointer, go_devadd_str, 10 + 17))
-               return -EFAULT;
-       return 0;
-}
-
-static int rtw_p2p_get_device_type(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       u8 peerMAC[ETH_ALEN] = {0x00};
-       int jj, kk;
-       u8 peerMACStr[17] = {0x00};
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-       struct list_head *plist, *phead;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       struct  wlan_network    *pnetwork = NULL;
-       u8 blnMatch = 0;
-       u8 dev_type[8] = {0x00};
-       uint dev_type_len = 0;
-       u8 dev_type_str[17 + 9] = {0x00};       /*  +9 is for the str "dev_type =", we have to clear it at wrqu->data.pointer */
-
-       /*      Commented by Albert 20121209 */
-       /*      The input data is the MAC address which the application wants to know its device type. */
-       /*      Such user interface could know the device type. */
-       /*      Format: iwpriv wlanx p2p_get2 dev_type = 00:E0:4C:00:00:05 */
-
-       if (copy_from_user(peerMACStr, wrqu->data.pointer + 9, 17))
-               return -EFAULT;
-
-       for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3)
-               peerMAC[jj] = key_2char2num(peerMACStr[kk], peerMACStr[kk + 1]);
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-       phead = get_list_head(queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-               if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) {
-                       u8 *wpsie;
-                       uint wpsie_len = 0;
-
-               /*      The mac address is matched. */
-
-                       wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12],
-                                              pnetwork->network.IELength - 12,
-                                              NULL, &wpsie_len);
-                       if (wpsie) {
-                               rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_PRIMARY_DEV_TYPE, dev_type, &dev_type_len);
-                               if (dev_type_len) {
-                                       u16     type = 0;
-                                       __be16 be_tmp;
-
-                                       memcpy(&be_tmp, dev_type, 2);
-                                       type = be16_to_cpu(be_tmp);
-                                       sprintf(dev_type_str, "\n\nN =%.2d", type);
-                                       blnMatch = 1;
-                               }
-                       }
-                       break;
-            }
-
-               plist = plist->next;
-       }
-
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       if (!blnMatch)
-               sprintf(dev_type_str, "\n\nN = 00");
-
-       if (copy_to_user(wrqu->data.pointer, dev_type_str, 9 + 17)) {
-               return -EFAULT;
-       }
-
-       return 0;
-}
-
-static int rtw_p2p_get_device_name(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       u8 peerMAC[ETH_ALEN] = {0x00};
-       int jj, kk;
-       u8 peerMACStr[17] = {0x00};
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-       struct list_head *plist, *phead;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       struct  wlan_network    *pnetwork = NULL;
-       u8 blnMatch = 0;
-       u8 dev_name[WPS_MAX_DEVICE_NAME_LEN] = {0x00};
-       uint dev_len = 0;
-       u8 dev_name_str[WPS_MAX_DEVICE_NAME_LEN + 5] = {0x00};  /*  +5 is for the str "devN =", we have to clear it at wrqu->data.pointer */
-
-       /*      Commented by Albert 20121225 */
-       /*      The input data is the MAC address which the application wants to know its device name. */
-       /*      Such user interface could show peer device's device name instead of ssid. */
-       /*      Format: iwpriv wlanx p2p_get2 devN = 00:E0:4C:00:00:05 */
-
-       if (copy_from_user(peerMACStr, wrqu->data.pointer + 5, 17))
-               return -EFAULT;
-
-       for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3)
-               peerMAC[jj] = key_2char2num(peerMACStr[kk], peerMACStr[kk + 1]);
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-       phead = get_list_head(queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-               if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) {
-                       u8 *wpsie;
-                       uint wpsie_len = 0;
-
-                       /*      The mac address is matched. */
-                       wpsie = rtw_get_wps_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &wpsie_len);
-                       if (wpsie) {
-                               rtw_get_wps_attr_content(wpsie, wpsie_len, WPS_ATTR_DEVICE_NAME, dev_name, &dev_len);
-                               if (dev_len) {
-                                       sprintf(dev_name_str, "\n\nN =%s", dev_name);
-                                       blnMatch = 1;
-                               }
-                       }
-                       break;
-               }
-
-               plist = plist->next;
-       }
-
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       if (!blnMatch)
-               sprintf(dev_name_str, "\n\nN = 0000");
-
-       if (copy_to_user(wrqu->data.pointer, dev_name_str, 5 + ((dev_len > 17) ? dev_len : 17)))
-               return -EFAULT;
-       return 0;
-}
-
-static int rtw_p2p_get_invitation_procedure(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       u8 peerMAC[ETH_ALEN] = {0x00};
-       int jj, kk;
-       u8 peerMACStr[17] = {0x00};
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-       struct list_head *plist, *phead;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       struct  wlan_network    *pnetwork = NULL;
-       u8 blnMatch = 0;
-       u8 *p2pie;
-       uint p2pielen = 0, attr_contentlen = 0;
-       u8 attr_content[2] = {0x00};
-
-       u8 inv_proc_str[17 + 8] = {0x00};
-       /*  +8 is for the str "InvProc =", we have to clear it at wrqu->data.pointer */
-
-       /*      Commented by Ouden 20121226 */
-       /*      The application wants to know P2P initiation procedure is supported or not. */
-       /*      Format: iwpriv wlanx p2p_get2 InvProc = 00:E0:4C:00:00:05 */
-
-       if (copy_from_user(peerMACStr, wrqu->data.pointer + 8, 17))
-               return -EFAULT;
-
-       for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3)
-               peerMAC[jj] = key_2char2num(peerMACStr[kk], peerMACStr[kk + 1]);
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-       phead = get_list_head(queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-               if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) {
-                       /*      Commented by Albert 20121226 */
-                       /*      Match the device address located in the P2P IE */
-                       /*      This is for the case that the P2P device address is not the same as the P2P interface address. */
-
-                       p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen);
-                       if (p2pie) {
-                               while (p2pie) {
-                                       if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_CAPABILITY, attr_content, &attr_contentlen)) {
-                                               /*      Handle the P2P capability attribute */
-                                               blnMatch = 1;
-                                               break;
-                                       }
-
-                                       /* Get the next P2P IE */
-                                       p2pie = rtw_get_p2p_ie(p2pie + p2pielen, pnetwork->network.IELength - 12 - (p2pie - &pnetwork->network.IEs[12] + p2pielen), NULL, &p2pielen);
-                               }
-                       }
-               }
-               plist = plist->next;
-       }
-
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       if (!blnMatch) {
-               sprintf(inv_proc_str, "\nIP =-1");
-       } else {
-               if (attr_content[0] & 0x20)
-                       sprintf(inv_proc_str, "\nIP = 1");
-               else
-                       sprintf(inv_proc_str, "\nIP = 0");
-       }
-       if (copy_to_user(wrqu->data.pointer, inv_proc_str, 8 + 17))
-               return -EFAULT;
-       return 0;
-}
-
-static int rtw_p2p_connect(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       int ret = 0;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-       u8 peerMAC[ETH_ALEN] = {0x00};
-       int jj, kk;
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-       struct list_head *plist, *phead;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       struct  wlan_network    *pnetwork = NULL;
-       u32 peer_channel = 0;
-
-       /*      Commented by Albert 20110304 */
-       /*      The input data contains two information. */
-       /*      1. First information is the MAC address which wants to formate with */
-       /*      2. Second information is the WPS PINCode or "pbc" string for push button method */
-       /*      Format: 00:E0:4C:00:00:05 */
-       /*      Format: 00:E0:4C:00:00:05 */
-
-       if (pwdinfo->p2p_state == P2P_STATE_NONE)
-               return ret;
-
-       if (pwdinfo->ui_got_wps_info == P2P_NO_WPSINFO)
-               return -1;
-
-       for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3)
-               peerMAC[jj] = key_2char2num(extra[kk], extra[kk + 1]);
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-       phead = get_list_head(queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-               if (!memcmp(pnetwork->network.MacAddress, peerMAC, ETH_ALEN)) {
-                       peer_channel = pnetwork->network.Configuration.DSConfig;
-                       break;
-               }
-
-               plist = plist->next;
-       }
-
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       if (peer_channel) {
-               memset(&pwdinfo->nego_req_info, 0x00, sizeof(struct tx_nego_req_info));
-               memset(&pwdinfo->groupid_info, 0x00, sizeof(struct group_id_info));
-
-               pwdinfo->nego_req_info.peer_channel_num[0] = peer_channel;
-               memcpy(pwdinfo->nego_req_info.peerDevAddr, pnetwork->network.MacAddress, ETH_ALEN);
-               pwdinfo->nego_req_info.benable = true;
-
-               _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer);
-               if (rtw_p2p_state(pwdinfo) != P2P_STATE_GONEGO_OK) {
-                       /*      Restore to the listen state if the current p2p state is not nego OK */
-                       rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);
-               }
-
-               rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_GONEGO_ING);
-
-               _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT);
-               _set_timer(&pwdinfo->restore_p2p_state_timer, P2P_GO_NEGO_TIMEOUT);
-       } else {
-               ret = -1;
-       }
-       return ret;
-}
-
-static void rtw_p2p_invite_req(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-       int jj, kk;
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-       struct list_head *plist, *phead;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       struct  wlan_network    *pnetwork = NULL;
-       uint peer_channel = 0;
-       u8 attr_content[50] = {0x00};
-       u8 *p2pie;
-       uint p2pielen = 0, attr_contentlen = 0;
-       struct tx_invite_req_info *pinvite_req_info = &pwdinfo->invitereq_info;
-
-       /*      The input data contains two information items. */
-       /*      1. First information is the P2P device address which you want to send to. */
-       /*      2. Second information is the group id which combines with GO's mac address, space and GO's ssid. */
-       /*      Command line sample: iwpriv wlan0 p2p_set invite ="00:11:22:33:44:55 00:E0:4C:00:00:05 DIRECT-xy" */
-       /*      Format: 00:11:22:33:44:55 00:E0:4C:00:00:05 DIRECT-xy */
-
-       if (wrqu->data.length <=  37)
-               return;
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) {
-               return;
-       } else {
-               /*      Reset the content of struct tx_invite_req_info */
-               pinvite_req_info->benable = false;
-               memset(pinvite_req_info->go_bssid, 0x00, ETH_ALEN);
-               memset(pinvite_req_info->go_ssid, 0x00, WLAN_SSID_MAXLEN);
-               pinvite_req_info->ssidlen = 0x00;
-               pinvite_req_info->operating_ch = pwdinfo->operating_channel;
-               memset(pinvite_req_info->peer_macaddr, 0x00, ETH_ALEN);
-               pinvite_req_info->token = 3;
-       }
-
-       for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3)
-               pinvite_req_info->peer_macaddr[jj] = key_2char2num(extra[kk], extra[kk + 1]);
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-       phead = get_list_head(queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-
-               /*      Commented by Albert 2011/05/18 */
-               /*      Match the device address located in the P2P IE */
-               /*      This is for the case that the P2P device address is not the same as the P2P interface address. */
-
-               p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen);
-               if (p2pie) {
-                       /*      The P2P Device ID attribute is included in the Beacon frame. */
-                       /*      The P2P Device Info attribute is included in the probe response frame. */
-
-                       if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen)) {
-                               /*      Handle the P2P Device ID attribute of Beacon first */
-                               if (!memcmp(attr_content, pinvite_req_info->peer_macaddr, ETH_ALEN)) {
-                                       peer_channel = pnetwork->network.Configuration.DSConfig;
-                                       break;
-                               }
-                       } else if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen)) {
-                               /*      Handle the P2P Device Info attribute of probe response */
-                               if (!memcmp(attr_content, pinvite_req_info->peer_macaddr, ETH_ALEN)) {
-                                       peer_channel = pnetwork->network.Configuration.DSConfig;
-                                       break;
-                               }
-                       }
-               }
-               plist = plist->next;
-       }
-
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       if (peer_channel) {
-               /*      Store the GO's bssid */
-               for (jj = 0, kk = 18; jj < ETH_ALEN; jj++, kk += 3)
-                       pinvite_req_info->go_bssid[jj] = key_2char2num(extra[kk], extra[kk + 1]);
-
-               /*      Store the GO's ssid */
-               pinvite_req_info->ssidlen = wrqu->data.length - 36;
-               memcpy(pinvite_req_info->go_ssid, &extra[36], (u32)pinvite_req_info->ssidlen);
-               pinvite_req_info->benable = true;
-               pinvite_req_info->peer_ch = peer_channel;
-
-               rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_TX_INVITE_REQ);
-
-               set_channel_bwmode(padapter, peer_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-
-               _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT);
-
-               _set_timer(&pwdinfo->restore_p2p_state_timer, P2P_INVITE_TIMEOUT);
-       }
-}
-
-static void rtw_p2p_set_persistent(struct net_device *dev,
-                                  struct iw_request_info *info,
-                                  union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       /*      The input data is 0 or 1 */
-       /*      0: disable persistent group functionality */
-       /*      1: enable persistent group founctionality */
-
-       if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) {
-               return;
-       } else {
-               if (extra[0] == '0')    /*      Disable the persistent group function. */
-                       pwdinfo->persistent_supported = false;
-               else if (extra[0] == '1')       /*      Enable the persistent group function. */
-                       pwdinfo->persistent_supported = true;
-               else
-                       pwdinfo->persistent_supported = false;
-       }
-       pr_info("[%s] persistent_supported = %d\n", __func__, pwdinfo->persistent_supported);
-}
-
-static void rtw_p2p_prov_disc(struct net_device *dev,
-                             struct iw_request_info *info,
-                             union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-       u8 peerMAC[ETH_ALEN] = {0x00};
-       int jj, kk;
-       struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
-       struct list_head *plist, *phead;
-       struct __queue *queue   = &pmlmepriv->scanned_queue;
-       struct  wlan_network    *pnetwork = NULL;
-       uint peer_channel = 0;
-       u8 attr_content[100] = {0x00};
-       u8 *p2pie;
-       uint p2pielen = 0, attr_contentlen = 0;
-
-       /*      The input data contains two information items. */
-       /*      1. First information is the MAC address which wants to issue the provisioning discovery request frame. */
-       /*      2. Second information is the WPS configuration method which wants to discovery */
-       /*      Format: 00:E0:4C:00:00:05_display */
-       /*      Format: 00:E0:4C:00:00:05_keypad */
-       /*      Format: 00:E0:4C:00:00:05_pbc */
-       /*      Format: 00:E0:4C:00:00:05_label */
-
-       if (pwdinfo->p2p_state == P2P_STATE_NONE) {
-               return;
-       } else {
-               /*      Reset the content of struct tx_provdisc_req_info excluded the wps_config_method_request. */
-               memset(pwdinfo->tx_prov_disc_info.peerDevAddr, 0x00, ETH_ALEN);
-               memset(pwdinfo->tx_prov_disc_info.peerIFAddr, 0x00, ETH_ALEN);
-               memset(&pwdinfo->tx_prov_disc_info.ssid, 0x00, sizeof(struct ndis_802_11_ssid));
-               pwdinfo->tx_prov_disc_info.peer_channel_num[0] = 0;
-               pwdinfo->tx_prov_disc_info.peer_channel_num[1] = 0;
-               pwdinfo->tx_prov_disc_info.benable = false;
-       }
-
-       for (jj = 0, kk = 0; jj < ETH_ALEN; jj++, kk += 3)
-               peerMAC[jj] = key_2char2num(extra[kk], extra[kk + 1]);
-
-       if (!memcmp(&extra[18], "display", 7))
-               pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_DISPLYA;
-       else if (!memcmp(&extra[18], "keypad", 7))
-               pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_KEYPAD;
-       else if (!memcmp(&extra[18], "pbc", 3))
-               pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_PUSH_BUTTON;
-       else if (!memcmp(&extra[18], "label", 5))
-               pwdinfo->tx_prov_disc_info.wps_config_method_request = WPS_CM_LABEL;
-       else
-               return;
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-       phead = get_list_head(queue);
-       plist = phead->next;
-
-       while (phead != plist) {
-               if (peer_channel != 0)
-                       break;
-
-               pnetwork = container_of(plist, struct wlan_network, list);
-
-               /*      Commented by Albert 2011/05/18 */
-               /*      Match the device address located in the P2P IE */
-               /*      This is for the case that the P2P device address is not the same as the P2P interface address. */
-
-               p2pie = rtw_get_p2p_ie(&pnetwork->network.IEs[12], pnetwork->network.IELength - 12, NULL, &p2pielen);
-               if (p2pie) {
-                       while (p2pie) {
-                               /*      The P2P Device ID attribute is included in the Beacon frame. */
-                               /*      The P2P Device Info attribute is included in the probe response frame. */
-
-                               if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_ID, attr_content, &attr_contentlen)) {
-                                       /*      Handle the P2P Device ID attribute of Beacon first */
-                                       if (!memcmp(attr_content, peerMAC, ETH_ALEN)) {
-                                               peer_channel = pnetwork->network.Configuration.DSConfig;
-                                               break;
-                                       }
-                               } else if (rtw_get_p2p_attr_content(p2pie, p2pielen, P2P_ATTR_DEVICE_INFO, attr_content, &attr_contentlen)) {
-                                       /*      Handle the P2P Device Info attribute of probe response */
-                                       if (!memcmp(attr_content, peerMAC, ETH_ALEN)) {
-                                               peer_channel = pnetwork->network.Configuration.DSConfig;
-                                               break;
-                                       }
-                               }
-
-                               /* Get the next P2P IE */
-                               p2pie = rtw_get_p2p_ie(p2pie + p2pielen, pnetwork->network.IELength - 12 - (p2pie - &pnetwork->network.IEs[12] + p2pielen), NULL, &p2pielen);
-                       }
-               }
-
-               plist = plist->next;
-       }
-
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       if (peer_channel) {
-               memcpy(pwdinfo->tx_prov_disc_info.peerIFAddr, pnetwork->network.MacAddress, ETH_ALEN);
-               memcpy(pwdinfo->tx_prov_disc_info.peerDevAddr, peerMAC, ETH_ALEN);
-               pwdinfo->tx_prov_disc_info.peer_channel_num[0] = (u16)peer_channel;
-               pwdinfo->tx_prov_disc_info.benable = true;
-               rtw_p2p_set_pre_state(pwdinfo, rtw_p2p_state(pwdinfo));
-               rtw_p2p_set_state(pwdinfo, P2P_STATE_TX_PROVISION_DIS_REQ);
-
-               if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_CLIENT)) {
-                       memcpy(&pwdinfo->tx_prov_disc_info.ssid, &pnetwork->network.Ssid, sizeof(struct ndis_802_11_ssid));
-               } else if (rtw_p2p_chk_role(pwdinfo, P2P_ROLE_DEVICE) || rtw_p2p_chk_role(pwdinfo, P2P_ROLE_GO)) {
-                       memcpy(pwdinfo->tx_prov_disc_info.ssid.Ssid, pwdinfo->p2p_wildcard_ssid, P2P_WILDCARD_SSID_LEN);
-                       pwdinfo->tx_prov_disc_info.ssid.SsidLength = P2P_WILDCARD_SSID_LEN;
-               }
-
-               set_channel_bwmode(padapter, peer_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-
-               _set_timer(&pwdinfo->pre_tx_scan_timer, P2P_TX_PRESCAN_TIMEOUT);
-
-               _set_timer(&pwdinfo->restore_p2p_state_timer, P2P_PROVISION_TIMEOUT);
-       }
-}
-
-/*     This function is used to inform the driver the user had specified the pin code value or pbc */
-/*     to application. */
-
-static void rtw_p2p_got_wpsinfo(struct net_device *dev,
-                               struct iw_request_info *info,
-                               union iwreq_data *wrqu, char *extra)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-
-       /*      Added by Albert 20110328 */
-       /*      if the input data is P2P_NO_WPSINFO -> reset the wpsinfo */
-       /*      if the input data is P2P_GOT_WPSINFO_PEER_DISPLAY_PIN -> the utility just input the PIN code got from the peer P2P device. */
-       /*      if the input data is P2P_GOT_WPSINFO_SELF_DISPLAY_PIN -> the utility just got the PIN code from itself. */
-       /*      if the input data is P2P_GOT_WPSINFO_PBC -> the utility just determine to use the PBC */
-
-       if (*extra == '0')
-               pwdinfo->ui_got_wps_info = P2P_NO_WPSINFO;
-       else if (*extra == '1')
-               pwdinfo->ui_got_wps_info = P2P_GOT_WPSINFO_PEER_DISPLAY_PIN;
-       else if (*extra == '2')
-               pwdinfo->ui_got_wps_info = P2P_GOT_WPSINFO_SELF_DISPLAY_PIN;
-       else if (*extra == '3')
-               pwdinfo->ui_got_wps_info = P2P_GOT_WPSINFO_PBC;
-       else
-               pwdinfo->ui_got_wps_info = P2P_NO_WPSINFO;
-}
-
-static int rtw_p2p_set(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       if (!memcmp(extra, "enable =", 7)) {
-               rtw_wext_p2p_enable(dev, info, wrqu, &extra[7]);
-       } else if (!memcmp(extra, "setDN =", 6)) {
-               wrqu->data.length -= 6;
-               rtw_p2p_setDN(dev, info, wrqu, &extra[6]);
-       } else if (!memcmp(extra, "profilefound =", 13)) {
-               wrqu->data.length -= 13;
-               rtw_p2p_profilefound(dev, info, wrqu, &extra[13]);
-       } else if (!memcmp(extra, "prov_disc =", 10)) {
-               wrqu->data.length -= 10;
-               rtw_p2p_prov_disc(dev, info, wrqu, &extra[10]);
-       } else if (!memcmp(extra, "nego =", 5)) {
-               wrqu->data.length -= 5;
-               rtw_p2p_connect(dev, info, wrqu, &extra[5]);
-       } else if (!memcmp(extra, "intent =", 7)) {
-               /*      Commented by Albert 2011/03/23 */
-               /*      The wrqu->data.length will include the null character */
-               /*      So, we will decrease 7 + 1 */
-               wrqu->data.length -= 8;
-               rtw_p2p_set_intent(dev, info, wrqu, &extra[7]);
-       } else if (!memcmp(extra, "ssid =", 5)) {
-               wrqu->data.length -= 5;
-               rtw_p2p_set_go_nego_ssid(dev, info, wrqu, &extra[5]);
-       } else if (!memcmp(extra, "got_wpsinfo =", 12)) {
-               wrqu->data.length -= 12;
-               rtw_p2p_got_wpsinfo(dev, info, wrqu, &extra[12]);
-       } else if (!memcmp(extra, "listen_ch =", 10)) {
-               /*      Commented by Albert 2011/05/24 */
-               /*      The wrqu->data.length will include the null character */
-               /*      So, we will decrease (10 + 1) */
-               wrqu->data.length -= 11;
-               rtw_p2p_set_listen_ch(dev, info, wrqu, &extra[10]);
-       } else if (!memcmp(extra, "op_ch =", 6)) {
-               /*      Commented by Albert 2011/05/24 */
-               /*      The wrqu->data.length will include the null character */
-               /*      So, we will decrease (6 + 1) */
-               wrqu->data.length -= 7;
-               rtw_p2p_set_op_ch(dev, info, wrqu, &extra[6]);
-       } else if (!memcmp(extra, "invite =", 7)) {
-               wrqu->data.length -= 8;
-               rtw_p2p_invite_req(dev, info, wrqu, &extra[7]);
-       } else if (!memcmp(extra, "persistent =", 11)) {
-               wrqu->data.length -= 11;
-               rtw_p2p_set_persistent(dev, info, wrqu, &extra[11]);
-       }
-
-       return 0;
-}
-
-static int rtw_p2p_get2(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       int ret = 0;
-
-       if (!memcmp(extra, "wpsCM =", 6)) {
-               wrqu->data.length -= 6;
-               ret = rtw_p2p_get_wps_configmethod(dev, info, wrqu,  &extra[6]);
-       } else if (!memcmp(extra, "devN =", 5)) {
-               wrqu->data.length -= 5;
-               ret = rtw_p2p_get_device_name(dev, info, wrqu, &extra[5]);
-       } else if (!memcmp(extra, "dev_type =", 9)) {
-               wrqu->data.length -= 9;
-               ret = rtw_p2p_get_device_type(dev, info, wrqu, &extra[9]);
-       } else if (!memcmp(extra, "go_devadd =", 10)) {
-               wrqu->data.length -= 10;
-               ret = rtw_p2p_get_go_device_address(dev, info, wrqu, &extra[10]);
-       } else if (!memcmp(extra, "InvProc =", 8)) {
-               wrqu->data.length -= 8;
-               ret = rtw_p2p_get_invitation_procedure(dev, info, wrqu, &extra[8]);
-       }
-
-       return ret;
-}
-
-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.if2name;
-
-               strscpy(rereg_priv->old_ifname, reg_ifname, IFNAMSIZ);
-       }
-
-       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 (0 != ret)
-               goto exit;
-
-       if (!memcmp(rereg_priv->old_ifname, "disable%d", 9)) {
-               padapter->ledpriv.bRegUseLed = rereg_priv->old_bRegUseLed;
-               rtl8188eu_InitSwLeds(padapter);
-               rtw_ips_mode_req(&padapter->pwrctrlpriv, rereg_priv->old_ips_mode);
-       }
-
-       strscpy(rereg_priv->old_ifname, new_ifname, IFNAMSIZ);
-
-       if (!memcmp(new_ifname, "disable%d", 9)) {
-               /*  free network queue for Android's timming issue */
-               rtw_free_network_queue(padapter, true);
-
-               /*  close led */
-               rtw_led_control(padapter, LED_CTL_POWER_OFF);
-               rereg_priv->old_bRegUseLed = padapter->ledpriv.bRegUseLed;
-               padapter->ledpriv.bRegUseLed = false;
-               rtl8188eu_DeInitSwLeds(padapter);
-
-               /*  the interface is being "disabled", we can do deeper IPS */
-               rereg_priv->old_ips_mode = rtw_get_ips_mode_req(&padapter->pwrctrlpriv);
-               rtw_ips_mode_req(&padapter->pwrctrlpriv, IPS_NORMAL);
-       }
-exit:
-       return ret;
-}
-
-static void mac_reg_dump(struct adapter *padapter)
-{
-       int i, j = 1;
-       u32 reg;
-       int res;
-
-       pr_info("\n ======= MAC REG =======\n");
-       for (i = 0x0; i < 0x300; i += 4) {
-               if (j % 4 == 1)
-                       pr_info("0x%02x", i);
-
-               res = rtw_read32(padapter, i, &reg);
-               if (!res)
-                       pr_info(" 0x%08x ", reg);
-
-               if ((j++) % 4 == 0)
-                       pr_info("\n");
-       }
-       for (i = 0x400; i < 0x800; i += 4) {
-               if (j % 4 == 1)
-                       pr_info("0x%02x", i);
-
-               res = rtw_read32(padapter, i, &reg);
-               if (!res)
-                       pr_info(" 0x%08x ", reg);
-
-               if ((j++) % 4 == 0)
-                       pr_info("\n");
-       }
-}
-
-static void bb_reg_dump(struct adapter *padapter)
-{
-       int i, j = 1, res;
-       u32 reg;
-
-       pr_info("\n ======= BB REG =======\n");
-       for (i = 0x800; i < 0x1000; i += 4) {
-               if (j % 4 == 1)
-                       pr_info("0x%02x", i);
-
-               res = rtw_read32(padapter, i, &reg);
-               if (!res)
-                       pr_info(" 0x%08x ", reg);
-
-               if ((j++) % 4 == 0)
-                       pr_info("\n");
-       }
-}
-
-static void rf_reg_dump(struct adapter *padapter)
-{
-       int i, j = 1;
-       u32 value;
-
-       pr_info("\n ======= RF REG =======\n");
-       pr_info("\nRF_Path(%x)\n", RF_PATH_A);
-       for (i = 0; i < 0x100; i++) {
-               value = rtl8188e_PHY_QueryRFReg(padapter, i, 0xffffffff);
-               if (j % 4 == 1)
-                       pr_info("0x%02x ", i);
-               pr_info(" 0x%08x ", value);
-               if ((j++) % 4 == 0)
-                       pr_info("\n");
-       }
-}
-
-static void rtw_set_dynamic_functions(struct adapter *adapter, u8 dm_func)
-{
-       struct hal_data_8188e *haldata = &adapter->haldata;
-       struct odm_dm_struct *odmpriv = &haldata->odmpriv;
-       int res;
-
-       switch (dm_func) {
-       case 0:
-               /* disable all dynamic func */
-               odmpriv->SupportAbility = DYNAMIC_FUNC_DISABLE;
-               break;
-       case 1:
-               /* disable DIG */
-               odmpriv->SupportAbility &= (~DYNAMIC_BB_DIG);
-               break;
-       case 6:
-               /* turn on all dynamic func */
-               if (!(odmpriv->SupportAbility & DYNAMIC_BB_DIG)) {
-                       struct rtw_dig *digtable = &odmpriv->DM_DigTable;
-
-                       res = rtw_read8(adapter, 0xc50, &digtable->CurIGValue);
-                       (void)res;
-                       /* FIXME: return an error to caller */
-               }
-               odmpriv->SupportAbility = DYNAMIC_ALL_FUNC_ENABLE;
-               break;
-       default:
-               break;
-       }
-}
-
-static void rtw_set_dm_func_flag(struct adapter *adapter, u32 odm_flag)
-{
-       struct hal_data_8188e *haldata = &adapter->haldata;
-       struct odm_dm_struct *odmpriv = &haldata->odmpriv;
-
-       odmpriv->SupportAbility = odm_flag;
-}
-
-static int rtw_dbg_port(struct net_device *dev,
-                              struct iw_request_info *info,
-                              union iwreq_data *wrqu, char *extra)
-{
-       int ret = 0;
-       u8 major_cmd, minor_cmd;
-       u16 arg;
-       s32 extra_arg;
-       u32 *pdata, val32;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_network *cur_network = &pmlmepriv->cur_network;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       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 */
-               rtl8188e_PHY_SetBBReg(padapter, arg, 0xffffffff, extra_arg);
-               break;
-       case 0x74:/* read_rf */
-               if (minor_cmd != RF_PATH_A) {
-                       ret = -EINVAL;
-                       break;
-               }
-               break;
-       case 0x75:/* write_rf */
-               if (minor_cmd != RF_PATH_A) {
-                       ret = -EINVAL;
-                       break;
-               }
-               rtl8188e_PHY_SetRFReg(padapter, 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;
-                       extra_arg = extra_arg < 0 ? 0 : extra_arg;
-                       padapter->recvpriv.signal_strength_dbg = extra_arg;
-                       break;
-               }
-               break;
-       case 0x78: /* IOL test */
-               switch (minor_cmd) {
-               case 0x04: /* LLT table initialization test */
-               {
-                       struct xmit_frame       *xmit_frame;
-
-                       xmit_frame = rtw_IOL_accquire_xmit_frame(padapter);
-                       if (!xmit_frame) {
-                               ret = -ENOMEM;
-                               break;
-                       }
-
-                       if (rtl8188e_IOL_exec_cmds_sync(padapter, xmit_frame, 500, 0) != _SUCCESS)
-                               ret = -EPERM;
-               }
-                       break;
-               case 0x05: /* blink LED test */
-               {
-                       u16 reg = 0x4c;
-                       u32 blink_num = 50;
-                       u32 blink_delay_ms = 200;
-                       int i;
-                       struct xmit_frame       *xmit_frame;
-
-                       xmit_frame = rtw_IOL_accquire_xmit_frame(padapter);
-                       if (!xmit_frame) {
-                               ret = -ENOMEM;
-                               break;
-                       }
-
-                       for (i = 0; i < blink_num; i++) {
-                               rtw_IOL_append_WB_cmd(xmit_frame, reg, 0x00, 0xff);
-                               rtw_IOL_append_DELAY_MS_cmd(xmit_frame, blink_delay_ms);
-                               rtw_IOL_append_WB_cmd(xmit_frame, reg, 0x08, 0xff);
-                               rtw_IOL_append_DELAY_MS_cmd(xmit_frame, blink_delay_ms);
-                       }
-                       if (rtl8188e_IOL_exec_cmds_sync(padapter, xmit_frame, (blink_delay_ms * blink_num * 2) + 200, 0) != _SUCCESS)
-                               ret = -EPERM;
-               }
-                       break;
-
-               case 0x06: /* continuous write byte test */
-               {
-                       u16 reg = arg;
-                       u16 start_value = 0;
-                       u32 write_num = extra_arg;
-                       int i, res;
-                       struct xmit_frame       *xmit_frame;
-                       u8 val8;
-
-                       xmit_frame = rtw_IOL_accquire_xmit_frame(padapter);
-                       if (!xmit_frame) {
-                               ret = -ENOMEM;
-                               break;
-                       }
-
-                       for (i = 0; i < write_num; i++)
-                               rtw_IOL_append_WB_cmd(xmit_frame, reg, i + start_value, 0xFF);
-                       if (rtl8188e_IOL_exec_cmds_sync(padapter, xmit_frame, 5000, 0) != _SUCCESS)
-                               ret = -EPERM;
-
-                       /* FIXME: is this read necessary? */
-                       res = rtw_read8(padapter, reg, &val8);
-                       (void)res;
-               }
-                       break;
-
-               case 0x07: /* continuous write word test */
-               {
-                       u16 reg = arg;
-                       u16 start_value = 200;
-                       u32 write_num = extra_arg;
-                       u16 val16;
-                       int i, res;
-                       struct xmit_frame       *xmit_frame;
-
-                       xmit_frame = rtw_IOL_accquire_xmit_frame(padapter);
-                       if (!xmit_frame) {
-                               ret = -ENOMEM;
-                               break;
-                       }
-
-                       for (i = 0; i < write_num; i++)
-                               rtw_IOL_append_WW_cmd(xmit_frame, reg, i + start_value, 0xFFFF);
-                       if (rtl8188e_IOL_exec_cmds_sync(padapter, xmit_frame, 5000, 0) != _SUCCESS)
-                               ret = -EPERM;
-
-                       /* FIXME: is this read necessary? */
-                       res = rtw_read16(padapter, reg, &val16);
-                       (void)res;
-               }
-                       break;
-               case 0x08: /* continuous write dword test */
-               {
-                       u16 reg = arg;
-                       u32 start_value = 0x110000c7;
-                       u32 write_num = extra_arg;
-
-                       int i;
-                       struct xmit_frame       *xmit_frame;
-
-                       xmit_frame = rtw_IOL_accquire_xmit_frame(padapter);
-                       if (!xmit_frame) {
-                               ret = -ENOMEM;
-                               break;
-                       }
-
-                       for (i = 0; i < write_num; i++)
-                               rtw_IOL_append_WD_cmd(xmit_frame, reg, i + start_value, 0xFFFFFFFF);
-                       if (rtl8188e_IOL_exec_cmds_sync(padapter, xmit_frame, 5000, 0) != _SUCCESS)
-                               ret = -EPERM;
-
-                       /* FIXME: is this read necessary? */
-                       ret = rtw_read32(padapter, reg, &write_num);
-               }
-                       break;
-               }
-               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.MacAddress
-                       , 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:
-                       rtw_get_stainfo(pstapriv, cur_network->network.MacAddress);
-                       break;
-               case 0x06:
-                       {
-                               u32 ODMFlag = (u32)(0x0f & arg);
-                               rtw_set_dm_func_flag(padapter, ODMFlag);
-                       }
-                       break;
-               case 0x07:
-                       break;
-               case 0x08:
-                       break;
-               case 0x09:
-                       break;
-               case 0x15:
-                       break;
-               case 0x10:/*  driver version display */
-                       break;
-               case 0x11:
-                       padapter->bRxRSSIDisplay = extra_arg;
-                       break;
-               case 0x12: /* set rx_stbc */
-               {
-                       struct registry_priv    *pregpriv = &padapter->registrypriv;
-                       /*  0: disable, bit(0):enable 2.4g, bit(1):enable 5g, 0x3: enable both 2.4g and 5g */
-                       /* default is set to enable 2.4GHZ for IOT issue with bufflao's AP at 5GHZ */
-                       if (extra_arg == 0 ||
-                           extra_arg == 1 ||
-                           extra_arg == 2 ||
-                           extra_arg == 3)
-                               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 >= 0 && extra_arg < 3)
-                               pregpriv->ampdu_enable = extra_arg;
-               }
-                       break;
-               case 0x14: /* get wifi_spec */
-                       break;
-               case 0x23:
-                       padapter->bNotifyChannelChange = extra_arg;
-                       break;
-               case 0x24:
-                       padapter->bShowGetP2PState = 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;
-               case 0xee:/* turn on/off dynamic funcs */
-                       if (extra_arg != 0xf) {
-                               /* extra_arg = 0  - disable all dynamic func
-                                * extra_arg = 1  - disable DIG
-                                * extra_arg = 6  - turn on all dynamic func
-                                */
-                               rtw_set_dynamic_functions(padapter, extra_arg);
-                       }
-                       break;
-               case 0xfd:
-                       rtw_write8(padapter, 0xc50, arg);
-                       rtw_write8(padapter, 0xc58, arg);
-                       break;
-               case 0xfe:
-                       break;
-               case 0xff:
-                       break;
-               }
-               break;
-       default:
-               break;
-       }
-       return ret;
-}
-
-static int rtw_wx_set_priv(struct net_device *dev,
-                               struct iw_request_info *info,
-                               union iwreq_data *awrq,
-                               char *extra)
-{
-       int ret = 0;
-       int len = 0;
-       char *ext;
-       struct adapter *padapter = (struct adapter *)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;
-       }
-
-       /* 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 ((_VENDOR_SPECIFIC_IE_ == probereq_wpsie[0]) &&
-                   (!memcmp(&probereq_wpsie[2], wps_oui, 4))) {
-                       cp_sz = min(probereq_wpsie_len, MAX_WPS_IE_LEN);
-
-                       pmlmepriv->wps_probe_req_ie_len = 0;
-                       kfree(pmlmepriv->wps_probe_req_ie);
-                       pmlmepriv->wps_probe_req_ie = NULL;
-
-                       pmlmepriv->wps_probe_req_ie = kmemdup(probereq_wpsie, cp_sz, GFP_KERNEL);
-                       if (!pmlmepriv->wps_probe_req_ie) {
-                               ret =  -EINVAL;
-                               goto FREE_EXT;
-                       }
-                       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);
-
-       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 = (struct adapter *)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 iw_handler rtw_handlers[] = {
-       IW_HANDLER(SIOCGIWNAME, rtw_wx_get_name),
-       IW_HANDLER(SIOCGIWFREQ, rtw_wx_get_freq),
-       IW_HANDLER(SIOCSIWMODE, rtw_wx_set_mode),
-       IW_HANDLER(SIOCGIWMODE, rtw_wx_get_mode),
-       IW_HANDLER(SIOCGIWSENS, rtw_wx_get_sens),
-       IW_HANDLER(SIOCGIWRANGE, rtw_wx_get_range),
-       IW_HANDLER(SIOCSIWPRIV, rtw_wx_set_priv),
-       IW_HANDLER(SIOCSIWAP, rtw_wx_set_wap),
-       IW_HANDLER(SIOCGIWAP, rtw_wx_get_wap),
-       IW_HANDLER(SIOCSIWMLME, rtw_wx_set_mlme),
-       IW_HANDLER(SIOCSIWSCAN, rtw_wx_set_scan),
-       IW_HANDLER(SIOCGIWSCAN, rtw_wx_get_scan),
-       IW_HANDLER(SIOCSIWESSID, rtw_wx_set_essid),
-       IW_HANDLER(SIOCGIWESSID, rtw_wx_get_essid),
-       IW_HANDLER(SIOCGIWNICKN, rtw_wx_get_nick),
-       IW_HANDLER(SIOCSIWRATE, rtw_wx_set_rate),
-       IW_HANDLER(SIOCGIWRATE, rtw_wx_get_rate),
-       IW_HANDLER(SIOCSIWRTS, rtw_wx_set_rts),
-       IW_HANDLER(SIOCGIWRTS, rtw_wx_get_rts),
-       IW_HANDLER(SIOCSIWFRAG, rtw_wx_set_frag),
-       IW_HANDLER(SIOCGIWFRAG, rtw_wx_get_frag),
-       IW_HANDLER(SIOCGIWRETRY, rtw_wx_get_retry),
-       IW_HANDLER(SIOCSIWENCODE, rtw_wx_set_enc),
-       IW_HANDLER(SIOCGIWENCODE, rtw_wx_get_enc),
-       IW_HANDLER(SIOCGIWPOWER, rtw_wx_get_power),
-       IW_HANDLER(SIOCSIWGENIE, rtw_wx_set_gen_ie),
-       IW_HANDLER(SIOCSIWAUTH, rtw_wx_set_auth),
-       IW_HANDLER(SIOCSIWENCODEEXT, rtw_wx_set_enc_ext),
-       IW_HANDLER(SIOCSIWPMKSA, rtw_wx_set_pmkid),
-};
-
-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 + 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"
-       },
-       {
-               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 | P2P_PRIVATE_IOCTL_SET_LEN, 0, "p2p_set"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x11,
-               IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | P2P_PRIVATE_IOCTL_SET_LEN, "p2p_get"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x12,
-               IW_PRIV_TYPE_CHAR | P2P_PRIVATE_IOCTL_SET_LEN, IW_PRIV_TYPE_CHAR | IFNAMSIZ, "p2p_get2"
-       },
-       {
-               SIOCIWFIRSTPRIV + 0x16,
-               IW_PRIV_TYPE_CHAR | 64, 0, "pm_set"
-       },
-
-       {SIOCIWFIRSTPRIV + 0x18, IW_PRIV_TYPE_CHAR | IFNAMSIZ, 0, "rereg_nd_name"},
-};
-
-static iw_handler rtw_private_handler[] = {
-       NULL,                           /* 0x00 */
-       NULL,                           /* 0x01 */
-       NULL,                           /* 0x02 */
-NULL,                                  /* 0x03 */
-/*  for MM DTV platform */
-       rtw_get_ap_info,                /* 0x04 */
-
-       rtw_set_pid,                    /* 0x05 */
-       rtw_wps_start,                  /* 0x06 */
-
-       NULL,                           /* 0x07 */
-       NULL,                           /* 0x08 */
-       NULL,                           /* 0x09 */
-
-/*  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 */
-       NULL,                           /* 0x0E */
-       NULL,                           /* 0x0F */
-
-       rtw_p2p_set,                    /* 0x10 */
-       NULL,                           /* 0x11 */
-       rtw_p2p_get2,                   /* 0x12 */
-
-       NULL,                           /* 0x13 */
-       NULL,                           /* 0x14 */
-       NULL,                           /* 0x15 */
-
-       rtw_pm_set,                     /* 0x16 */
-       NULL,                           /* 0x17 */
-       rtw_rereg_nd_name,              /* 0x18 */
-};
-
-static struct iw_statistics *rtw_get_wireless_stats(struct net_device *dev)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct iw_statistics *piwstats = &padapter->iwstats;
-       int tmp_noise = 0;
-       int tmp;
-
-       if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED)) {
-               piwstats->qual.qual = 0;
-               piwstats->qual.level = 0;
-               piwstats->qual.noise = 0;
-       } else {
-               tmp_noise = padapter->recvpriv.noise;
-
-               piwstats->qual.level = padapter->signal_strength;
-               tmp = 219 + 3 * padapter->signal_strength;
-               tmp = min(100, tmp);
-               tmp = max(0, tmp);
-               piwstats->qual.qual = tmp;
-               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),
-       .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),
-       .get_wireless_stats = rtw_get_wireless_stats,
-};
diff --git a/drivers/staging/r8188eu/os_dep/os_intfs.c b/drivers/staging/r8188eu/os_dep/os_intfs.c
deleted file mode 100644 (file)
index dc419fd..0000000
+++ /dev/null
@@ -1,807 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#define _OS_INTFS_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/hal_intf.h"
-#include "../include/rtw_ioctl.h"
-#include "../include/usb_osintf.h"
-#include "../include/rtw_br_ext.h"
-#include "../include/rtw_led.h"
-#include "../include/rtl8188e_dm.h"
-
-MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
-MODULE_AUTHOR("Realtek Semiconductor Corp.");
-MODULE_FIRMWARE(FW_RTL8188EU);
-
-#define CONFIG_BR_EXT_BRNAME "br0"
-#define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable, */
-
-/* module param defaults */
-static int rtw_rfintfs = HWPI;
-static int rtw_lbkmode;/* RTL8712_AIR_TRX; */
-static int rtw_network_mode = Ndis802_11IBSS;/* Ndis802_11Infrastructure; infra, ad-hoc, auto */
-static int rtw_channel = 1;/* ad-hoc support requirement */
-static int rtw_wireless_mode = WIRELESS_11BG_24N;
-static int rtw_vrtl_carrier_sense = AUTO_VCS;
-static int rtw_vcs_type = RTS_CTS;/*  */
-static int rtw_rts_thresh = 2347;/*  */
-static int rtw_frag_thresh = 2346;/*  */
-static int rtw_preamble = PREAMBLE_LONG;/* long, short, auto */
-static int rtw_scan_mode = 1;/* active, passive */
-static int rtw_adhoc_tx_pwr = 1;
-static int rtw_soft_ap;
-static int rtw_power_mgnt = 1;
-static int rtw_ips_mode = IPS_NORMAL;
-
-static int rtw_smart_ps = 2;
-
-module_param(rtw_ips_mode, int, 0644);
-MODULE_PARM_DESC(rtw_ips_mode, "The default IPS mode");
-
-static int rtw_radio_enable = 1;
-static int rtw_long_retry_lmt = 7;
-static int rtw_short_retry_lmt = 7;
-static int rtw_busy_thresh = 40;
-static int rtw_ack_policy = NORMAL_ACK;
-
-static int rtw_software_encrypt;
-static int rtw_software_decrypt;
-
-static int rtw_acm_method;/*  0:By SW 1:By HW. */
-
-static int rtw_wmm_enable = 1;/*  default is set to enable the wmm. */
-static int rtw_uapsd_enable;
-static int rtw_uapsd_max_sp = NO_LIMIT;
-static int rtw_uapsd_acbk_en;
-static int rtw_uapsd_acbe_en;
-static int rtw_uapsd_acvi_en;
-static int rtw_uapsd_acvo_en;
-
-static int rtw_led_enable = 1;
-
-static int rtw_ht_enable = 1;
-static int rtw_cbw40_enable = 3; /*  0 :disable, bit(0): enable 2.4g, bit(1): enable 5g */
-static int rtw_ampdu_enable = 1;/* for enable tx_ampdu */
-static int rtw_rx_stbc = 1;/*  0: disable, bit(0):enable 2.4g, bit(1):enable 5g, default is set to enable 2.4GHZ for IOT issue with bufflao's AP at 5GHZ */
-static int rtw_ampdu_amsdu;/*  0: disabled, 1:enabled, 2:auto */
-
-static int rtw_lowrate_two_xmit = 1;/* Use 2 path Tx to transmit MCS0~7 and legacy mode */
-
-static int rtw_low_power;
-static int rtw_wifi_spec;
-static int rtw_channel_plan = RT_CHANNEL_DOMAIN_MAX;
-static int rtw_AcceptAddbaReq = true;/*  0:Reject AP's Add BA req, 1:Accept AP's Add BA req. */
-
-static int rtw_antdiv_cfg = 2; /*  0:OFF , 1:ON, 2:decide by Efuse config */
-static int rtw_antdiv_type; /* 0:decide by efuse  1: for 88EE, 1Tx and 1RxCG are diversity.(2 Ant with SPDT), 2:  for 88EE, 1Tx and 2Rx are diversity.(2 Ant, Tx and RxCG are both on aux port, RxCS is on main port), 3: for 88EE, 1Tx and 1RxCG are fixed.(1Ant, Tx and RxCG are both on aux port) */
-
-
-static int rtw_hwpdn_mode = 2;/* 0:disable, 1:enable, 2: by EFUSE config */
-
-static int rtw_hwpwrp_detect; /* HW power  ping detect 0:disable , 1:enable */
-
-static int rtw_hw_wps_pbc = 1;
-
-int rtw_mc2u_disable;
-
-static int rtw_80211d;
-
-static char *ifname = "wlan%d";
-module_param(ifname, charp, 0644);
-MODULE_PARM_DESC(ifname, "The default name to allocate for first interface");
-
-static char *if2name = "wlan%d";
-module_param(if2name, charp, 0644);
-MODULE_PARM_DESC(if2name, "The default name to allocate for second interface");
-
-char *rtw_initmac;  /*  temp mac address if users want to use instead of the mac address in Efuse */
-
-module_param(rtw_initmac, charp, 0644);
-module_param(rtw_channel_plan, int, 0644);
-module_param(rtw_rfintfs, int, 0644);
-module_param(rtw_lbkmode, int, 0644);
-module_param(rtw_network_mode, int, 0644);
-module_param(rtw_channel, int, 0644);
-module_param(rtw_wmm_enable, int, 0644);
-module_param(rtw_vrtl_carrier_sense, int, 0644);
-module_param(rtw_vcs_type, int, 0644);
-module_param(rtw_busy_thresh, int, 0644);
-module_param(rtw_led_enable, int, 0644);
-module_param(rtw_ht_enable, int, 0644);
-module_param(rtw_cbw40_enable, int, 0644);
-module_param(rtw_ampdu_enable, int, 0644);
-module_param(rtw_rx_stbc, int, 0644);
-module_param(rtw_ampdu_amsdu, int, 0644);
-module_param(rtw_lowrate_two_xmit, int, 0644);
-module_param(rtw_power_mgnt, int, 0644);
-module_param(rtw_smart_ps, int, 0644);
-module_param(rtw_low_power, int, 0644);
-module_param(rtw_wifi_spec, int, 0644);
-module_param(rtw_antdiv_cfg, int, 0644);
-module_param(rtw_antdiv_type, int, 0644);
-module_param(rtw_hwpdn_mode, int, 0644);
-module_param(rtw_hwpwrp_detect, int, 0644);
-module_param(rtw_hw_wps_pbc, int, 0644);
-
-static uint rtw_max_roaming_times = 2;
-module_param(rtw_max_roaming_times, uint, 0644);
-MODULE_PARM_DESC(rtw_max_roaming_times, "The max roaming times to try");
-
-static int rtw_fw_iol = 1;/*  0:Disable, 1:enable, 2:by usb speed */
-module_param(rtw_fw_iol, int, 0644);
-MODULE_PARM_DESC(rtw_fw_iol, "FW IOL");
-
-module_param(rtw_mc2u_disable, int, 0644);
-
-module_param(rtw_80211d, int, 0644);
-MODULE_PARM_DESC(rtw_80211d, "Enable 802.11d mechanism");
-
-static uint rtw_notch_filter = RTW_NOTCH_FILTER;
-module_param(rtw_notch_filter, uint, 0644);
-MODULE_PARM_DESC(rtw_notch_filter, "0:Disable, 1:Enable, 2:Enable only for P2P");
-
-static uint loadparam(struct adapter *padapter)
-{
-       struct registry_priv  *registry_par = &padapter->registrypriv;
-
-       registry_par->rfintfs = (u8)rtw_rfintfs;
-       registry_par->lbkmode = (u8)rtw_lbkmode;
-       registry_par->network_mode  = (u8)rtw_network_mode;
-
-       memcpy(registry_par->ssid.Ssid, "ANY", 3);
-       registry_par->ssid.SsidLength = 3;
-
-       registry_par->channel = (u8)rtw_channel;
-       registry_par->wireless_mode = (u8)rtw_wireless_mode;
-       registry_par->vrtl_carrier_sense = (u8)rtw_vrtl_carrier_sense;
-       registry_par->vcs_type = (u8)rtw_vcs_type;
-       registry_par->rts_thresh = (u16)rtw_rts_thresh;
-       registry_par->frag_thresh = (u16)rtw_frag_thresh;
-       registry_par->preamble = (u8)rtw_preamble;
-       registry_par->scan_mode = (u8)rtw_scan_mode;
-       registry_par->adhoc_tx_pwr = (u8)rtw_adhoc_tx_pwr;
-       registry_par->soft_ap =  (u8)rtw_soft_ap;
-       registry_par->smart_ps =  (u8)rtw_smart_ps;
-       registry_par->power_mgnt = (u8)rtw_power_mgnt;
-       registry_par->ips_mode = (u8)rtw_ips_mode;
-       registry_par->radio_enable = (u8)rtw_radio_enable;
-       registry_par->long_retry_lmt = (u8)rtw_long_retry_lmt;
-       registry_par->short_retry_lmt = (u8)rtw_short_retry_lmt;
-       registry_par->busy_thresh = (u16)rtw_busy_thresh;
-       registry_par->ack_policy = (u8)rtw_ack_policy;
-       registry_par->software_encrypt = (u8)rtw_software_encrypt;
-       registry_par->software_decrypt = (u8)rtw_software_decrypt;
-       registry_par->acm_method = (u8)rtw_acm_method;
-
-        /* UAPSD */
-       registry_par->wmm_enable = (u8)rtw_wmm_enable;
-       registry_par->uapsd_enable = (u8)rtw_uapsd_enable;
-       registry_par->uapsd_max_sp = (u8)rtw_uapsd_max_sp;
-       registry_par->uapsd_acbk_en = (u8)rtw_uapsd_acbk_en;
-       registry_par->uapsd_acbe_en = (u8)rtw_uapsd_acbe_en;
-       registry_par->uapsd_acvi_en = (u8)rtw_uapsd_acvi_en;
-       registry_par->uapsd_acvo_en = (u8)rtw_uapsd_acvo_en;
-
-       registry_par->led_enable = (u8)rtw_led_enable;
-
-       registry_par->ht_enable = (u8)rtw_ht_enable;
-       registry_par->cbw40_enable = (u8)rtw_cbw40_enable;
-       registry_par->ampdu_enable = (u8)rtw_ampdu_enable;
-       registry_par->rx_stbc = (u8)rtw_rx_stbc;
-       registry_par->ampdu_amsdu = (u8)rtw_ampdu_amsdu;
-       registry_par->lowrate_two_xmit = (u8)rtw_lowrate_two_xmit;
-       registry_par->low_power = (u8)rtw_low_power;
-       registry_par->wifi_spec = (u8)rtw_wifi_spec;
-       registry_par->channel_plan = (u8)rtw_channel_plan;
-       registry_par->bAcceptAddbaReq = (u8)rtw_AcceptAddbaReq;
-       registry_par->antdiv_cfg = (u8)rtw_antdiv_cfg;
-       registry_par->antdiv_type = (u8)rtw_antdiv_type;
-       registry_par->hwpdn_mode = (u8)rtw_hwpdn_mode;/* 0:disable, 1:enable, 2:by EFUSE config */
-       registry_par->hwpwrp_detect = (u8)rtw_hwpwrp_detect;/* 0:disable, 1:enable */
-       registry_par->hw_wps_pbc = (u8)rtw_hw_wps_pbc;
-
-       registry_par->max_roaming_times = (u8)rtw_max_roaming_times;
-
-       registry_par->fw_iol = rtw_fw_iol;
-
-       registry_par->enable80211d = (u8)rtw_80211d;
-       snprintf(registry_par->ifname, 16, "%s", ifname);
-       snprintf(registry_par->if2name, 16, "%s", if2name);
-       registry_par->notch_filter = (u8)rtw_notch_filter;
-
-       return _SUCCESS;
-}
-
-static int rtw_net_set_mac_address(struct net_device *pnetdev, void *p)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
-       struct sockaddr *addr = p;
-
-       if (!padapter->bup)
-               memcpy(padapter->eeprompriv.mac_addr, addr->sa_data, ETH_ALEN);
-
-       return 0;
-}
-
-static struct net_device_stats *rtw_net_get_stats(struct net_device *pnetdev)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-
-       padapter->stats.tx_packets = pxmitpriv->tx_pkts;/* pxmitpriv->tx_pkts++; */
-       padapter->stats.rx_packets = precvpriv->rx_pkts;/* precvpriv->rx_pkts++; */
-       padapter->stats.tx_dropped = pxmitpriv->tx_drop;
-       padapter->stats.rx_dropped = precvpriv->rx_drop;
-       padapter->stats.tx_bytes = pxmitpriv->tx_bytes;
-       padapter->stats.rx_bytes = precvpriv->rx_bytes;
-       return &padapter->stats;
-}
-
-/*
- * AC to queue mapping
- *
- * AC_VO -> queue 0
- * AC_VI -> queue 1
- * AC_BE -> queue 2
- * AC_BK -> queue 3
- */
-static const u16 rtw_1d_to_queue[8] = { 2, 3, 3, 2, 1, 1, 0, 0 };
-
-/* Given a data frame determine the 802.1p/1d tag to use. */
-static unsigned int rtw_classify8021d(struct sk_buff *skb)
-{
-       unsigned int dscp;
-
-       /* skb->priority values from 256->263 are magic values to
-        * directly indicate a specific 802.1d priority.  This is used
-        * to allow 802.1d priority to be passed directly in from VLAN
-        * tags, etc.
-        */
-       if (skb->priority >= 256 && skb->priority <= 263)
-               return skb->priority - 256;
-
-       switch (skb->protocol) {
-       case htons(ETH_P_IP):
-               dscp = ip_hdr(skb)->tos & 0xfc;
-               break;
-       default:
-               return 0;
-       }
-
-       return dscp >> 5;
-}
-
-static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb, struct net_device *sb_dev)
-{
-       struct adapter  *padapter = rtw_netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       skb->priority = rtw_classify8021d(skb);
-
-       if (pmlmepriv->acm_mask != 0)
-               skb->priority = qos_acm(pmlmepriv->acm_mask, skb->priority);
-
-       return rtw_1d_to_queue[skb->priority];
-}
-
-u16 rtw_recv_select_queue(struct sk_buff *skb)
-{
-       struct iphdr *piphdr;
-       unsigned int dscp;
-       __be16  eth_type;
-       u32 priority;
-       u8 *pdata = skb->data;
-
-       memcpy(&eth_type, pdata + (ETH_ALEN << 1), 2);
-
-       switch (eth_type) {
-       case htons(ETH_P_IP):
-               piphdr = (struct iphdr *)(pdata + ETH_HLEN);
-               dscp = piphdr->tos & 0xfc;
-               priority = dscp >> 5;
-               break;
-       default:
-               priority = 0;
-       }
-
-       return rtw_1d_to_queue[priority];
-}
-
-static const struct net_device_ops rtw_netdev_ops = {
-       .ndo_open = netdev_open,
-       .ndo_stop = netdev_close,
-       .ndo_start_xmit = rtw_xmit_entry,
-       .ndo_select_queue       = rtw_select_queue,
-       .ndo_set_mac_address = rtw_net_set_mac_address,
-       .ndo_get_stats = rtw_net_get_stats,
-};
-
-int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname)
-{
-       int err;
-
-       err = dev_alloc_name(pnetdev, ifname);
-       if (err < 0)
-               return err;
-
-       netif_carrier_off(pnetdev);
-       return 0;
-}
-
-static const struct device_type wlan_type = {
-       .name = "wlan",
-};
-
-struct net_device *rtw_init_netdev(struct adapter *old_padapter)
-{
-       struct adapter *padapter;
-       struct net_device *pnetdev;
-
-       if (old_padapter)
-               pnetdev = rtw_alloc_etherdev_with_old_priv(sizeof(struct adapter), (void *)old_padapter);
-       else
-               pnetdev = rtw_alloc_etherdev(sizeof(struct adapter));
-
-       if (!pnetdev)
-               return NULL;
-
-       pnetdev->dev.type = &wlan_type;
-       padapter = rtw_netdev_priv(pnetdev);
-       padapter->pnetdev = pnetdev;
-       pnetdev->netdev_ops = &rtw_netdev_ops;
-       pnetdev->watchdog_timeo = HZ * 3; /* 3 second timeout */
-       pnetdev->wireless_handlers = (struct iw_handler_def *)&rtw_handlers_def;
-
-       /* step 2. */
-       loadparam(padapter);
-
-       return pnetdev;
-}
-
-int rtw_start_drv_threads(struct adapter *padapter)
-{
-       padapter->cmdThread = kthread_run(rtw_cmd_thread, padapter, "RTW_CMD_THREAD");
-       if (IS_ERR(padapter->cmdThread))
-               return PTR_ERR(padapter->cmdThread);
-
-       /* wait for rtw_cmd_thread() to start running */
-       wait_for_completion(&padapter->cmdpriv.start_cmd_thread);
-
-       return 0;
-}
-
-void rtw_stop_drv_threads(struct adapter *padapter)
-{
-       /* Below is to termindate rtw_cmd_thread & event_thread... */
-       complete(&padapter->cmdpriv.enqueue_cmd);
-       if (padapter->cmdThread)
-               /* wait for rtw_cmd_thread() to stop running */
-               wait_for_completion(&padapter->cmdpriv.stop_cmd_thread);
-}
-
-static void rtw_init_default_value(struct adapter *padapter)
-{
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-
-       /* xmit_priv */
-       pxmitpriv->frag_len = pregistrypriv->frag_thresh;
-
-       /* mlme_priv */
-       pmlmepriv->scan_interval = SCAN_INTERVAL;/*  30*2 sec = 60sec */
-       pmlmepriv->scan_mode = SCAN_ACTIVE;
-
-       /* ht_priv */
-       pmlmepriv->htpriv.ampdu_enable = false;/* set to disabled */
-
-       /* security_priv */
-       psecuritypriv->binstallGrpkey = false;
-       psecuritypriv->sw_encrypt = pregistrypriv->software_encrypt;
-       psecuritypriv->sw_decrypt = pregistrypriv->software_decrypt;
-       psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open; /* open system */
-       psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
-       psecuritypriv->dot11PrivacyKeyIndex = 0;
-       psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
-       psecuritypriv->dot118021XGrpKeyid = 1;
-       psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
-       psecuritypriv->ndisencryptstatus = Ndis802_11WEPDisabled;
-
-       /* registry_priv */
-       rtw_init_registrypriv_dev_network(padapter);
-       rtw_update_registrypriv_dev_network(padapter);
-
-       /* hal_priv */
-       rtl8188eu_init_default_value(padapter);
-
-       /* misc. */
-       padapter->bReadPortCancel = false;
-       padapter->bWritePortCancel = false;
-       padapter->bRxRSSIDisplay = 0;
-       padapter->bNotifyChannelChange = 0;
-       padapter->bShowGetP2PState = 1;
-}
-
-void rtw_reset_drv_sw(struct adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       /* hal_priv */
-       rtl8188eu_init_default_value(padapter);
-       padapter->bReadPortCancel = false;
-       padapter->bWritePortCancel = false;
-       padapter->bRxRSSIDisplay = 0;
-       pmlmepriv->scan_interval = SCAN_INTERVAL;/*  30*2 sec = 60sec */
-
-       padapter->xmitpriv.tx_pkts = 0;
-       padapter->recvpriv.rx_pkts = 0;
-
-       pmlmepriv->LinkDetectInfo.bBusyTraffic = false;
-
-       _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING);
-
-       /* mlmeextpriv */
-       padapter->mlmeextpriv.sitesurvey_res.state = SCAN_DISABLE;
-
-       rtw_set_signal_stat_timer(&padapter->recvpriv);
-}
-
-u8 rtw_init_drv_sw(struct adapter *padapter)
-{
-       if (rtw_init_cmd_priv(&padapter->cmdpriv)) {
-               dev_err(dvobj_to_dev(padapter->dvobj), "rtw_init_cmd_priv failed\n");
-               return _FAIL;
-       }
-
-       padapter->cmdpriv.padapter = padapter;
-
-       if (rtw_init_evt_priv(&padapter->evtpriv)) {
-               dev_err(dvobj_to_dev(padapter->dvobj), "rtw_init_evt_priv failed\n");
-               goto free_cmd_priv;
-       }
-
-       if (rtw_init_mlme_priv(padapter)) {
-               dev_err(dvobj_to_dev(padapter->dvobj), "rtw_init_mlme_priv failed\n");
-               goto free_evt_priv;
-       }
-
-       rtw_init_wifidirect_timers(padapter);
-       init_wifidirect_info(padapter, P2P_ROLE_DISABLE);
-       reset_global_wifidirect_info(padapter);
-
-       init_mlme_ext_priv(padapter);
-
-       if (_rtw_init_xmit_priv(&padapter->xmitpriv, padapter)) {
-               dev_err(dvobj_to_dev(padapter->dvobj), "_rtw_init_xmit_priv failed\n");
-               goto free_mlme_ext;
-       }
-
-       if (_rtw_init_recv_priv(&padapter->recvpriv, padapter)) {
-               dev_err(dvobj_to_dev(padapter->dvobj), "_rtw_init_recv_priv failed\n");
-               goto free_xmit_priv;
-       }
-
-       if (_rtw_init_sta_priv(&padapter->stapriv)) {
-               dev_err(dvobj_to_dev(padapter->dvobj), "_rtw_init_sta_priv failed\n");
-               goto free_recv_priv;
-       }
-
-       padapter->stapriv.padapter = padapter;
-
-       rtw_init_bcmc_stainfo(padapter);
-
-       rtw_init_pwrctrl_priv(padapter);
-
-       rtw_init_default_value(padapter);
-
-       rtl8188e_init_dm_priv(padapter);
-       rtl8188eu_InitSwLeds(padapter);
-
-       spin_lock_init(&padapter->br_ext_lock);
-
-       return _SUCCESS;
-
-free_recv_priv:
-       _rtw_free_recv_priv(&padapter->recvpriv);
-
-free_xmit_priv:
-       _rtw_free_xmit_priv(&padapter->xmitpriv);
-
-free_mlme_ext:
-       free_mlme_ext_priv(&padapter->mlmeextpriv);
-
-       rtw_free_mlme_priv(&padapter->mlmepriv);
-
-free_evt_priv:
-       rtw_free_evt_priv(&padapter->evtpriv);
-
-free_cmd_priv:
-       rtw_free_cmd_priv(&padapter->cmdpriv);
-
-       return _FAIL;
-}
-
-void rtw_cancel_all_timer(struct adapter *padapter)
-{
-       _cancel_timer_ex(&padapter->mlmepriv.assoc_timer);
-
-       _cancel_timer_ex(&padapter->mlmepriv.scan_to_timer);
-
-       _cancel_timer_ex(&padapter->mlmepriv.dynamic_chk_timer);
-
-       /*  cancel sw led timer */
-       rtl8188eu_DeInitSwLeds(padapter);
-
-       _cancel_timer_ex(&padapter->pwrctrlpriv.pwr_state_check_timer);
-
-       _cancel_timer_ex(&padapter->recvpriv.signal_stat_timer);
-}
-
-void rtw_free_drv_sw(struct adapter *padapter)
-{
-       /* we can call rtw_p2p_enable here, but: */
-       /*  1. rtw_p2p_enable may have IO operation */
-       /*  2. rtw_p2p_enable is bundled with wext interface */
-       {
-               struct wifidirect_info *pwdinfo = &padapter->wdinfo;
-               if (!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)) {
-                       _cancel_timer_ex(&pwdinfo->find_phase_timer);
-                       _cancel_timer_ex(&pwdinfo->restore_p2p_state_timer);
-                       _cancel_timer_ex(&pwdinfo->pre_tx_scan_timer);
-                       rtw_p2p_set_state(pwdinfo, P2P_STATE_NONE);
-               }
-       }
-
-       free_mlme_ext_priv(&padapter->mlmeextpriv);
-
-       rtw_free_cmd_priv(&padapter->cmdpriv);
-
-       rtw_free_evt_priv(&padapter->evtpriv);
-
-       rtw_free_mlme_priv(&padapter->mlmepriv);
-       _rtw_free_xmit_priv(&padapter->xmitpriv);
-
-       _rtw_free_sta_priv(&padapter->stapriv); /* will free bcmc_stainfo here */
-
-       _rtw_free_recv_priv(&padapter->recvpriv);
-
-       /* free the old_pnetdev */
-       if (padapter->rereg_nd_name_priv.old_pnetdev) {
-               free_netdev(padapter->rereg_nd_name_priv.old_pnetdev);
-               padapter->rereg_nd_name_priv.old_pnetdev = NULL;
-       }
-
-       /*  clear pbuddystruct adapter to avoid access wrong pointer. */
-       if (padapter->pbuddy_adapter)
-               padapter->pbuddy_adapter->pbuddy_adapter = NULL;
-}
-
-void netdev_br_init(struct net_device *netdev)
-{
-       struct adapter *adapter = (struct adapter *)rtw_netdev_priv(netdev);
-
-       rcu_read_lock();
-
-       if (rcu_dereference(adapter->pnetdev->rx_handler_data)) {
-               struct net_device *br_netdev;
-               struct net *devnet = NULL;
-
-               devnet = dev_net(netdev);
-               br_netdev = dev_get_by_name(devnet, CONFIG_BR_EXT_BRNAME);
-               if (br_netdev) {
-                       memcpy(adapter->br_mac, br_netdev->dev_addr, ETH_ALEN);
-                       dev_put(br_netdev);
-               } else {
-                       pr_info("%s()-%d: dev_get_by_name(%s) failed!",
-                               __func__, __LINE__, CONFIG_BR_EXT_BRNAME);
-               }
-       }
-       adapter->ethBrExtInfo.addPPPoETag = 1;
-
-       rcu_read_unlock();
-}
-
-static int _netdev_open(struct net_device *pnetdev)
-{
-       uint status;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
-
-       if (!padapter->bup) {
-               padapter->bDriverStopped = false;
-               padapter->bSurpriseRemoved = false;
-
-               status = rtw_hal_init(padapter);
-               if (status == _FAIL)
-                       goto netdev_open_error;
-
-               netdev_dbg(pnetdev, "MAC Address = %pM\n", pnetdev->dev_addr);
-
-               if (rtw_start_drv_threads(padapter)) {
-                       pr_info("Initialize driver software resource Failed!\n");
-                       goto netdev_open_error;
-               }
-
-               if (init_hw_mlme_ext(padapter) == _FAIL) {
-                       pr_info("can't init mlme_ext_priv\n");
-                       goto netdev_open_error;
-               }
-               if (rtl8188eu_inirp_init(padapter))
-                       goto netdev_open_error;
-
-               rtw_led_control(padapter, LED_CTL_NO_LINK);
-
-               padapter->bup = true;
-       }
-       padapter->net_closed = false;
-
-       _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
-
-       padapter->pwrctrlpriv.bips_processing = false;
-       rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
-
-       if (!rtw_netif_queue_stopped(pnetdev))
-               netif_tx_start_all_queues(pnetdev);
-       else
-               netif_tx_wake_all_queues(pnetdev);
-
-       netdev_br_init(pnetdev);
-
-       return 0;
-
-netdev_open_error:
-       padapter->bup = false;
-       netif_carrier_off(pnetdev);
-       netif_tx_stop_all_queues(pnetdev);
-       return -1;
-}
-
-int netdev_open(struct net_device *pnetdev)
-{
-       int ret;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
-
-       mutex_lock(padapter->hw_init_mutex);
-       ret = _netdev_open(pnetdev);
-       mutex_unlock(padapter->hw_init_mutex);
-       return ret;
-}
-
-static int  ips_netdrv_open(struct adapter *padapter)
-{
-       int status = _SUCCESS;
-       padapter->net_closed = false;
-
-       padapter->bDriverStopped = false;
-       padapter->bSurpriseRemoved = false;
-
-       status = rtw_hal_init(padapter);
-       if (status == _FAIL)
-               goto netdev_open_error;
-
-       if (rtl8188eu_inirp_init(padapter))
-               goto netdev_open_error;
-
-       rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
-       _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 5000);
-
-       return _SUCCESS;
-
-netdev_open_error:
-       return _FAIL;
-}
-
-int rtw_ips_pwr_up(struct adapter *padapter)
-{
-       int result;
-       rtw_reset_drv_sw(padapter);
-
-       result = ips_netdrv_open(padapter);
-
-       rtw_led_control(padapter, LED_CTL_NO_LINK);
-
-       return result;
-}
-
-void rtw_ips_pwr_down(struct adapter *padapter)
-{
-       padapter->net_closed = true;
-
-       rtw_led_control(padapter, LED_CTL_POWER_OFF);
-
-       rtw_ips_dev_unload(padapter);
-}
-
-static void rtw_fifo_cleanup(struct adapter *adapter)
-{
-       struct pwrctrl_priv *pwrpriv = &adapter->pwrctrlpriv;
-       u8 trycnt = 100;
-       int res;
-       u32 reg;
-
-       /* pause tx */
-       rtw_write8(adapter, REG_TXPAUSE, 0xff);
-
-       /* keep sn */
-       /* FIXME: return an error to caller */
-       res = rtw_read16(adapter, REG_NQOS_SEQ, &adapter->xmitpriv.nqos_ssn);
-       if (res)
-               return;
-
-       if (!pwrpriv->bkeepfwalive) {
-               /* RX DMA stop */
-               res = rtw_read32(adapter, REG_RXPKT_NUM, &reg);
-               if (res)
-                       return;
-
-               rtw_write32(adapter, REG_RXPKT_NUM,
-                           (reg | RW_RELEASE_EN));
-               do {
-                       res = rtw_read32(adapter, REG_RXPKT_NUM, &reg);
-                       if (res)
-                               continue;
-
-                       if (!(reg & RXDMA_IDLE))
-                               break;
-               } while (trycnt--);
-
-               /* RQPN Load 0 */
-               rtw_write16(adapter, REG_RQPN_NPQ, 0x0);
-               rtw_write32(adapter, REG_RQPN, 0x80000000);
-               mdelay(10);
-       }
-}
-
-void rtw_ips_dev_unload(struct adapter *padapter)
-{
-       rtw_fifo_cleanup(padapter);
-
-       rtw_read_port_cancel(padapter);
-       rtw_write_port_cancel(padapter);
-
-       /* s5. */
-       if (!padapter->bSurpriseRemoved)
-               rtw_hal_deinit(padapter);
-}
-
-int netdev_close(struct net_device *pnetdev)
-{
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(pnetdev);
-       struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
-
-       padapter->net_closed = true;
-
-       if (padapter->pwrctrlpriv.rf_pwrstate == rf_on) {
-               /* s1. */
-               if (pnetdev) {
-                       if (!rtw_netif_queue_stopped(pnetdev))
-                               netif_tx_stop_all_queues(pnetdev);
-               }
-
-               /* s2. */
-               LeaveAllPowerSaveMode(padapter);
-               rtw_disassoc_cmd(padapter, 500, false);
-               /* s2-2.  indicate disconnect to os */
-               rtw_indicate_disconnect(padapter);
-               /* s2-3. */
-               rtw_free_assoc_resources(padapter, 1);
-               /* s2-4. */
-               rtw_free_network_queue(padapter, true);
-               /*  Close LED */
-               rtw_led_control(padapter, LED_CTL_POWER_OFF);
-       }
-
-       nat25_db_cleanup(padapter);
-
-       rtw_p2p_enable(padapter, P2P_ROLE_DISABLE);
-
-       kfree(dvobj->firmware.data);
-       dvobj->firmware.data = NULL;
-
-       return 0;
-}
diff --git a/drivers/staging/r8188eu/os_dep/osdep_service.c b/drivers/staging/r8188eu/os_dep/osdep_service.c
deleted file mode 100644 (file)
index 88271f9..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#define _OSDEP_SERVICE_C_
-
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/rtw_ioctl_set.h"
-
-/*
-* Translate the OS dependent @param error_code to OS independent RTW_STATUS_CODE
-* @return: one of RTW_STATUS_CODE
-*/
-inline int RTW_STATUS_CODE(int error_code)
-{
-       if (error_code >= 0)
-               return _SUCCESS;
-       return _FAIL;
-}
-
-void *rtw_malloc2d(int h, int w, int size)
-{
-       int j;
-
-       void **a = kzalloc(h * sizeof(void *) + h * w * size, GFP_KERNEL);
-       if (!a)
-               return NULL;
-
-       for (j = 0; j < h; j++)
-               a[j] = ((char *)(a + h)) + j * w * size;
-
-       return a;
-}
-
-/*
-For the following list_xxx operations,
-caller must guarantee the atomic context.
-Otherwise, there will be racing condition.
-*/
-/*
-Caller must check if the list is empty before calling rtw_list_delete
-*/
-
-static const struct device_type wlan_type = {
-       .name = "wlan",
-};
-
-struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv,
-                                                   void *old_priv)
-{
-       struct net_device *pnetdev;
-       struct rtw_netdev_priv_indicator *pnpi;
-
-       pnetdev = alloc_etherdev_mq(sizeof(struct rtw_netdev_priv_indicator), 4);
-       if (!pnetdev)
-               return NULL;
-
-       pnetdev->dev.type = &wlan_type;
-       pnpi = netdev_priv(pnetdev);
-       pnpi->priv = old_priv;
-       pnpi->sizeof_priv = sizeof_priv;
-
-       return pnetdev;
-}
-
-struct net_device *rtw_alloc_etherdev(int sizeof_priv)
-{
-       struct net_device *pnetdev;
-       struct rtw_netdev_priv_indicator *pnpi;
-
-       pnetdev = alloc_etherdev_mq(sizeof(struct rtw_netdev_priv_indicator), 4);
-       if (!pnetdev)
-               return NULL;
-
-       pnpi = netdev_priv(pnetdev);
-
-       pnpi->priv = vzalloc(sizeof_priv);
-       if (!pnpi->priv) {
-               free_netdev(pnetdev);
-               return NULL;
-       }
-
-       pnpi->sizeof_priv = sizeof_priv;
-
-       return pnetdev;
-}
-
-void rtw_free_netdev(struct net_device *netdev)
-{
-       struct rtw_netdev_priv_indicator *pnpi;
-
-       pnpi = netdev_priv(netdev);
-
-       vfree(pnpi->priv);
-       free_netdev(netdev);
-}
-
-int rtw_change_ifname(struct adapter *padapter, const char *ifname)
-{
-       struct net_device *pnetdev;
-       struct net_device *cur_pnetdev;
-       struct rereg_nd_name_data *rereg_priv;
-       int ret;
-
-       if (!padapter)
-               goto error;
-
-       cur_pnetdev = padapter->pnetdev;
-       rereg_priv = &padapter->rereg_nd_name_priv;
-
-       /* free the old_pnetdev */
-       if (rereg_priv->old_pnetdev) {
-               free_netdev(rereg_priv->old_pnetdev);
-               rereg_priv->old_pnetdev = NULL;
-       }
-
-       if (!rtnl_is_locked())
-               unregister_netdev(cur_pnetdev);
-       else
-               unregister_netdevice(cur_pnetdev);
-
-       rereg_priv->old_pnetdev = cur_pnetdev;
-
-       pnetdev = rtw_init_netdev(padapter);
-       if (!pnetdev)  {
-               ret = -1;
-               goto error;
-       }
-
-       SET_NETDEV_DEV(pnetdev, dvobj_to_dev(adapter_to_dvobj(padapter)));
-
-       rtw_init_netdev_name(pnetdev, ifname);
-
-       eth_hw_addr_set(pnetdev, padapter->eeprompriv.mac_addr);
-
-       if (!rtnl_is_locked())
-               ret = register_netdev(pnetdev);
-       else
-               ret = register_netdevice(pnetdev);
-       if (ret != 0)
-               goto error;
-
-       return 0;
-error:
-       return -1;
-}
-
-void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len)
-{
-       u32 dup_len = 0;
-       u8 *ori = NULL;
-       u8 *dup = NULL;
-
-       if (!buf || !buf_len)
-               return;
-
-       if (!src || !src_len)
-               goto keep_ori;
-
-       /* duplicate src */
-       dup = kmalloc(src_len, GFP_ATOMIC);
-       if (dup) {
-               dup_len = src_len;
-               memcpy(dup, src, dup_len);
-       }
-
-keep_ori:
-       ori = *buf;
-
-       /* replace buf with dup */
-       *buf_len = 0;
-       *buf = dup;
-       *buf_len = dup_len;
-
-       /* free ori */
-       kfree(ori);
-}
-
-/**
- * rtw_cbuf_empty - test if cbuf is empty
- * @cbuf: pointer of struct rtw_cbuf
- *
- * Returns: true if cbuf is empty
- */
-inline bool rtw_cbuf_empty(struct rtw_cbuf *cbuf)
-{
-       return cbuf->write == cbuf->read;
-}
-
-/**
- * rtw_cbuf_pop - pop a pointer from cbuf
- * @cbuf: pointer of struct rtw_cbuf
- *
- * Lock free operation, be careful of the use scheme
- * Returns: pointer popped out
- */
-void *rtw_cbuf_pop(struct rtw_cbuf *cbuf)
-{
-       void *buf;
-       if (rtw_cbuf_empty(cbuf))
-               return NULL;
-
-       buf = cbuf->bufs[cbuf->read];
-       cbuf->read = (cbuf->read + 1) % cbuf->size;
-
-       return buf;
-}
-
-/**
- * rtw_cbuf_alloc - allocate a rtw_cbuf with given size and do initialization
- * @size: size of pointer
- *
- * Returns: pointer of srtuct rtw_cbuf, NULL for allocation failure
- */
-struct rtw_cbuf *rtw_cbuf_alloc(u32 size)
-{
-       struct rtw_cbuf *cbuf;
-
-       cbuf = kmalloc(struct_size(cbuf, bufs, size), GFP_KERNEL);
-
-       if (cbuf) {
-               cbuf->write = 0;
-               cbuf->read = 0;
-               cbuf->size = size;
-       }
-       return cbuf;
-}
diff --git a/drivers/staging/r8188eu/os_dep/usb_intf.c b/drivers/staging/r8188eu/os_dep/usb_intf.c
deleted file mode 100644 (file)
index 74a16d1..0000000
+++ /dev/null
@@ -1,445 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2011 Realtek Corporation. */
-
-#include <linux/usb.h>
-#include "../include/osdep_service.h"
-#include "../include/drv_types.h"
-#include "../include/hal_intf.h"
-#include "../include/osdep_intf.h"
-#include "../include/usb_ops.h"
-#include "../include/usb_osintf.h"
-#include "../include/rtw_ioctl.h"
-#include "../include/rtl8188e_hal.h"
-
-int ui_pid[3] = {0, 0, 0};
-
-static int rtw_suspend(struct usb_interface *intf, pm_message_t message);
-static int rtw_resume(struct usb_interface *intf);
-
-static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device_id *pdid);
-static void rtw_dev_remove(struct usb_interface *pusb_intf);
-
-#define USB_VENDER_ID_REALTEK          0x0bda
-
-/* DID_USB_v916_20130116 */
-static struct usb_device_id rtw_usb_id_tbl[] = {
-       /*=== Realtek demoboard ===*/
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8179)}, /* 8188EUS */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0179)}, /* 8188ETV */
-       {USB_DEVICE(USB_VENDER_ID_REALTEK, 0xffef)}, /* Rosewill USB-N150 Nano */
-       /*=== Customer ID ===*/
-       /****** 8188EUS ********/
-       {USB_DEVICE(0x07B8, 0x8179)}, /* Abocom - Abocom */
-       {USB_DEVICE(0x0DF6, 0x0076)}, /* Sitecom N150 v2 */
-       {USB_DEVICE(0x2001, 0x330F)}, /* DLink DWA-125 REV D1 */
-       {USB_DEVICE(0x2001, 0x3310)}, /* Dlink DWA-123 REV D1 */
-       {USB_DEVICE(0x2001, 0x3311)}, /* DLink GO-USB-N150 REV B1 */
-       {USB_DEVICE(0x2001, 0x331B)}, /* D-Link DWA-121 rev B1 */
-       {USB_DEVICE(0x056E, 0x4008)}, /* Elecom WDC-150SU2M */
-       {USB_DEVICE(0x2357, 0x010c)}, /* TP-Link TL-WN722N v2 */
-       {USB_DEVICE(0x2357, 0x0111)}, /* TP-Link TL-WN727N v5.21 */
-       {USB_DEVICE(0x2C4E, 0x0102)}, /* MERCUSYS MW150US v2 */
-       {USB_DEVICE(0x0B05, 0x18F0)}, /* ASUS USB-N10 Nano B1 */
-       {USB_DEVICE(0x7392, 0xb811)}, /* Edimax EW-7811Un V2 */
-       {}      /* Terminating entry */
-};
-
-MODULE_DEVICE_TABLE(usb, rtw_usb_id_tbl);
-
-struct rtw_usb_drv {
-       struct usb_driver usbdrv;
-       int drv_registered;
-       struct mutex hw_init_mutex;
-};
-
-static struct rtw_usb_drv rtl8188e_usb_drv = {
-       .usbdrv.name = KBUILD_MODNAME,
-       .usbdrv.probe = rtw_drv_init,
-       .usbdrv.disconnect = rtw_dev_remove,
-       .usbdrv.id_table = rtw_usb_id_tbl,
-       .usbdrv.suspend =  rtw_suspend,
-       .usbdrv.resume = rtw_resume,
-       .usbdrv.reset_resume   = rtw_resume,
-};
-
-static struct rtw_usb_drv *usb_drv = &rtl8188e_usb_drv;
-
-static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf)
-{
-       int     i;
-       u8      rt_num_in_pipes = 0;
-       struct dvobj_priv *pdvobjpriv;
-       struct usb_host_config          *phost_conf;
-       struct usb_config_descriptor    *pconf_desc;
-       struct usb_host_interface       *phost_iface;
-       struct usb_interface_descriptor *piface_desc;
-       struct usb_endpoint_descriptor  *pendp_desc;
-       struct usb_device       *pusbd;
-
-       pdvobjpriv = kzalloc(sizeof(*pdvobjpriv), GFP_KERNEL);
-       if (!pdvobjpriv)
-               goto err;
-
-       pdvobjpriv->pusbintf = usb_intf;
-       pusbd = interface_to_usbdev(usb_intf);
-       pdvobjpriv->pusbdev = pusbd;
-       usb_set_intfdata(usb_intf, pdvobjpriv);
-
-       pdvobjpriv->RtNumOutPipes = 0;
-
-       phost_conf = pusbd->actconfig;
-       pconf_desc = &phost_conf->desc;
-
-       phost_iface = &usb_intf->altsetting[0];
-       piface_desc = &phost_iface->desc;
-
-       pdvobjpriv->NumInterfaces = pconf_desc->bNumInterfaces;
-       pdvobjpriv->InterfaceNumber = piface_desc->bInterfaceNumber;
-
-       for (i = 0; i < piface_desc->bNumEndpoints; i++) {
-               int ep_num;
-               pendp_desc = &phost_iface->endpoint[i].desc;
-
-               ep_num = usb_endpoint_num(pendp_desc);
-
-               if (usb_endpoint_is_bulk_in(pendp_desc)) {
-                       pdvobjpriv->RtInPipe = ep_num;
-                       rt_num_in_pipes++;
-               } else if (usb_endpoint_is_bulk_out(pendp_desc)) {
-                       pdvobjpriv->RtOutPipe[pdvobjpriv->RtNumOutPipes] =
-                               ep_num;
-                       pdvobjpriv->RtNumOutPipes++;
-               }
-       }
-
-       if (rt_num_in_pipes != 1)
-               goto err;
-
-       /* 3 misc */
-       rtw_reset_continual_urb_error(pdvobjpriv);
-
-       usb_get_dev(pusbd);
-       return pdvobjpriv;
-
-err:
-       kfree(pdvobjpriv);
-       return NULL;
-}
-
-static void usb_dvobj_deinit(struct usb_interface *usb_intf)
-{
-       struct dvobj_priv *dvobj = usb_get_intfdata(usb_intf);
-
-       usb_set_intfdata(usb_intf, NULL);
-       if (dvobj) {
-               /* Modify condition for 92DU DMDP 2010.11.18, by Thomas */
-               if ((dvobj->NumInterfaces != 2 &&
-                   dvobj->NumInterfaces != 3) ||
-           (dvobj->InterfaceNumber == 1)) {
-                       if (interface_to_usbdev(usb_intf)->state !=
-                           USB_STATE_NOTATTACHED)
-                               /* If we didn't unplug usb dongle and
-                                * remove/insert module, driver fails
-                                * on sitesurvey for the first time when
-                                * device is up . Reset usb port for sitesurvey
-                                * fail issue. */
-                               usb_reset_device(interface_to_usbdev(usb_intf));
-               }
-               kfree(dvobj);
-       }
-
-       usb_put_dev(interface_to_usbdev(usb_intf));
-
-}
-
-static void rtw_dev_unload(struct adapter *padapter)
-{
-       if (padapter->bup) {
-               padapter->bDriverStopped = true;
-               if (padapter->xmitpriv.ack_tx)
-                       rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
-               /* s3. */
-               rtw_read_port_cancel(padapter);
-               rtw_write_port_cancel(padapter);
-
-               /* s4. */
-               rtw_stop_drv_threads(padapter);
-
-               /* s5. */
-               if (!padapter->bSurpriseRemoved) {
-                       rtw_hal_deinit(padapter);
-                       padapter->bSurpriseRemoved = true;
-               }
-
-               padapter->bup = false;
-       }
-}
-
-static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
-{
-       struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
-       struct adapter *padapter = dvobj->if1;
-       struct net_device *pnetdev = padapter->pnetdev;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-       if ((!padapter->bup) || (padapter->bDriverStopped) ||
-           (padapter->bSurpriseRemoved))
-               goto exit;
-
-       pwrpriv->bInSuspend = true;
-       rtw_cancel_all_timer(padapter);
-       LeaveAllPowerSaveMode(padapter);
-
-       mutex_lock(&pwrpriv->lock);
-       /* s1. */
-       if (pnetdev) {
-               netif_carrier_off(pnetdev);
-               netif_tx_stop_all_queues(pnetdev);
-       }
-
-       /* s2. */
-       rtw_disassoc_cmd(padapter, 0, false);
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) &&
-           check_fwstate(pmlmepriv, _FW_LINKED))
-               pmlmepriv->to_roaming = 1;
-       /* s2-2.  indicate disconnect to os */
-       rtw_indicate_disconnect(padapter);
-       /* s2-3. */
-       rtw_free_assoc_resources(padapter, 1);
-       /* s2-4. */
-       rtw_free_network_queue(padapter, true);
-
-       rtw_dev_unload(padapter);
-       mutex_unlock(&pwrpriv->lock);
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
-               rtw_indicate_scan_done(padapter);
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
-               rtw_indicate_disconnect(padapter);
-
-exit:
-               return 0;
-}
-
-static int rtw_resume(struct usb_interface *pusb_intf)
-{
-       struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
-       struct adapter *padapter = dvobj->if1;
-       struct net_device *pnetdev;
-       struct pwrctrl_priv *pwrpriv = NULL;
-       int ret = -1;
-
-       pnetdev = padapter->pnetdev;
-       pwrpriv = &padapter->pwrctrlpriv;
-
-       mutex_lock(&pwrpriv->lock);
-       rtw_reset_drv_sw(padapter);
-       if (pwrpriv)
-               pwrpriv->bkeepfwalive = false;
-
-       if (netdev_open(pnetdev) != 0) {
-               mutex_unlock(&pwrpriv->lock);
-               goto exit;
-       }
-
-       netif_device_attach(pnetdev);
-       netif_carrier_on(pnetdev);
-
-       mutex_unlock(&pwrpriv->lock);
-
-       if (padapter->pid[1] != 0)
-               rtw_signal_process(padapter->pid[1], SIGUSR2);
-
-       rtw_roaming(padapter, NULL);
-
-       ret = 0;
-exit:
-       if (pwrpriv)
-               pwrpriv->bInSuspend = false;
-
-       return ret;
-}
-
-/*
- * drv_init() - a device potentially for us
- *
- * notes: drv_init() is called when the bus driver has located
- * a card for us to support.
- *        We accept the new device by returning 0.
- */
-
-static int rtw_usb_if1_init(struct dvobj_priv *dvobj, struct usb_interface *pusb_intf)
-{
-       struct adapter *padapter = NULL;
-       struct net_device *pnetdev = NULL;
-       int ret;
-
-       padapter = vzalloc(sizeof(*padapter));
-       if (!padapter)
-               return -ENOMEM;
-
-       padapter->dvobj = dvobj;
-       dvobj->if1 = padapter;
-
-       padapter->bDriverStopped = true;
-
-       padapter->hw_init_mutex = &usb_drv->hw_init_mutex;
-
-       rtw_handle_dualmac(padapter, 1);
-
-       pnetdev = rtw_init_netdev(padapter);
-       if (!pnetdev) {
-               ret = -ENODEV;
-               goto handle_dualmac;
-       }
-       SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
-       padapter = rtw_netdev_priv(pnetdev);
-
-       /* step read_chip_version */
-       rtl8188e_read_chip_version(padapter);
-
-       /* step usb endpoint mapping */
-       ret = rtl8188eu_interface_configure(padapter);
-       if (ret)
-               goto handle_dualmac;
-
-       /* step read efuse/eeprom data and get mac_addr */
-       ret = ReadAdapterInfo8188EU(padapter);
-       if (ret)
-               goto handle_dualmac;
-
-       /* step 5. */
-       if (rtw_init_drv_sw(padapter) == _FAIL) {
-               ret = -ENODEV;
-               goto handle_dualmac;
-       }
-
-#ifdef CONFIG_PM
-       if (padapter->pwrctrlpriv.bSupportRemoteWakeup) {
-               dvobj->pusbdev->do_remote_wakeup = 1;
-               pusb_intf->needs_remote_wakeup = 1;
-               device_init_wakeup(&pusb_intf->dev, 1);
-       }
-#endif
-
-       /* 2012-07-11 Move here to prevent the 8723AS-VAU BT auto
-        * suspend influence */
-       usb_autopm_get_interface(pusb_intf);
-
-       /*  alloc dev name after read efuse. */
-       ret = rtw_init_netdev_name(pnetdev, padapter->registrypriv.ifname);
-       if (ret)
-               goto free_drv_sw;
-       rtw_macaddr_cfg(padapter->eeprompriv.mac_addr);
-       rtw_init_wifidirect_addrs(padapter, padapter->eeprompriv.mac_addr,
-                                 padapter->eeprompriv.mac_addr);
-       eth_hw_addr_set(pnetdev, padapter->eeprompriv.mac_addr);
-
-       /* step 6. Tell the network stack we exist */
-       ret = register_netdev(pnetdev);
-       if (ret)
-               goto free_drv_sw;
-
-       return 0;
-
-free_drv_sw:
-       rtw_cancel_all_timer(padapter);
-       rtw_free_drv_sw(padapter);
-handle_dualmac:
-       rtw_handle_dualmac(padapter, 0);
-       if (pnetdev)
-               rtw_free_netdev(pnetdev);
-       else
-               vfree(padapter);
-
-       return ret;
-}
-
-static void rtw_usb_if1_deinit(struct adapter *if1)
-{
-       struct net_device *pnetdev = if1->pnetdev;
-       struct mlme_priv *pmlmepriv = &if1->mlmepriv;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED))
-               rtw_disassoc_cmd(if1, 0, false);
-
-       free_mlme_ap_info(if1);
-
-       if (pnetdev) {
-               /* will call netdev_close() */
-               unregister_netdev(pnetdev);
-       }
-       rtw_cancel_all_timer(if1);
-
-       rtw_dev_unload(if1);
-       rtw_handle_dualmac(if1, 0);
-       rtw_free_drv_sw(if1);
-       if (pnetdev)
-               rtw_free_netdev(pnetdev);
-}
-
-static int rtw_drv_init(struct usb_interface *pusb_intf, const struct usb_device_id *pdid)
-{
-       struct dvobj_priv *dvobj;
-       int ret;
-
-       /* Initialize dvobj_priv */
-       dvobj = usb_dvobj_init(pusb_intf);
-       if (!dvobj)
-               return -ENODEV;
-
-       ret = rtw_usb_if1_init(dvobj, pusb_intf);
-       if (ret) {
-               usb_dvobj_deinit(pusb_intf);
-               return ret;
-       }
-
-       if (ui_pid[1] != 0)
-               rtw_signal_process(ui_pid[1], SIGUSR2);
-
-       return 0;
-}
-
-/*
- * dev_remove() - our device is being removed
-*/
-/* rmmod module & unplug(SurpriseRemoved) will call r871xu_dev_remove() => how to recognize both */
-static void rtw_dev_remove(struct usb_interface *pusb_intf)
-{
-       struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
-       struct adapter *padapter = dvobj->if1;
-
-       if (usb_drv->drv_registered)
-               padapter->bSurpriseRemoved = true;
-
-       rtw_pm_set_ips(padapter, IPS_NONE);
-       rtw_pm_set_lps(padapter, PS_MODE_ACTIVE);
-
-       LeaveAllPowerSaveMode(padapter);
-
-       rtw_usb_if1_deinit(padapter);
-
-       usb_dvobj_deinit(pusb_intf);
-}
-
-static int __init rtw_drv_entry(void)
-{
-       mutex_init(&usb_drv->hw_init_mutex);
-
-       usb_drv->drv_registered = true;
-       return usb_register(&usb_drv->usbdrv);
-}
-
-static void __exit rtw_drv_halt(void)
-{
-       usb_drv->drv_registered = false;
-       usb_deregister(&usb_drv->usbdrv);
-
-       mutex_destroy(&usb_drv->hw_init_mutex);
-}
-
-module_init(rtw_drv_entry);
-module_exit(rtw_drv_halt);
diff --git a/drivers/staging/r8188eu/os_dep/usb_ops_linux.c b/drivers/staging/r8188eu/os_dep/usb_ops_linux.c
deleted file mode 100644 (file)
index ca09f7e..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/* Copyright(c) 2007 - 2012 Realtek Corporation. */
-
-#define _USB_OPS_LINUX_C_
-
-#include "../include/drv_types.h"
-#include "../include/rtl8188e_recv.h"
-
-static unsigned int ffaddr2pipehdl(struct dvobj_priv *pdvobj, u32 addr)
-{
-       unsigned int pipe = 0, ep_num = 0;
-       struct usb_device *pusbd = pdvobj->pusbdev;
-
-       if (addr < HW_QUEUE_ENTRY) {
-               ep_num = pdvobj->Queue2Pipe[addr];
-               pipe = usb_sndbulkpipe(pusbd, ep_num);
-       }
-
-       return pipe;
-}
-
-void rtw_read_port_cancel(struct adapter *padapter)
-{
-       int i;
-       struct recv_buf *precvbuf = (struct recv_buf *)padapter->recvpriv.precv_buf;
-
-       padapter->bReadPortCancel = true;
-
-       for (i = 0; i < NR_RECVBUFF; i++) {
-               precvbuf->reuse = true;
-               usb_kill_urb(precvbuf->purb);
-               precvbuf++;
-       }
-}
-
-static void usb_write_port_complete(struct urb *purb)
-{
-       struct xmit_buf *pxmitbuf = (struct xmit_buf *)purb->context;
-       struct adapter *padapter = pxmitbuf->padapter;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       if (pxmitbuf->high_queue)
-               rtw_chk_hi_queue_cmd(padapter);
-
-       switch (purb->status) {
-       case 0:
-       case -EINPROGRESS:
-       case -ENOENT:
-       case -ECONNRESET:
-       case -EPIPE:
-       case -EPROTO:
-               break;
-       case -ESHUTDOWN:
-               padapter->bDriverStopped = true;
-               break;
-       default:
-               padapter->bSurpriseRemoved = true;
-               break;
-       }
-
-       rtw_sctx_done_err(&pxmitbuf->sctx,
-                         purb->status ? RTW_SCTX_DONE_WRITE_PORT_ERR : RTW_SCTX_DONE_SUCCESS);
-       rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
-       tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
-}
-
-u32 rtw_write_port(struct adapter *padapter, u32 addr, u32 cnt, u8 *wmem)
-{
-       unsigned long irqL;
-       unsigned int pipe;
-       int status;
-       u32 ret = _FAIL;
-       struct urb *purb = NULL;
-       struct dvobj_priv       *pdvobj = adapter_to_dvobj(padapter);
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-       struct xmit_buf *pxmitbuf = (struct xmit_buf *)wmem;
-       struct xmit_frame *pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
-       struct usb_device *pusbd = pdvobj->pusbdev;
-
-       if (padapter->bDriverStopped || padapter->bSurpriseRemoved) {
-               rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_TX_DENY);
-               goto exit;
-       }
-
-       spin_lock_irqsave(&pxmitpriv->lock, irqL);
-       pxmitbuf->high_queue = (addr == HIGH_QUEUE_INX);
-       spin_unlock_irqrestore(&pxmitpriv->lock, irqL);
-
-       purb    = pxmitbuf->pxmit_urb;
-
-       /* translate DMA FIFO addr to pipehandle */
-       pipe = ffaddr2pipehdl(pdvobj, addr);
-
-       usb_fill_bulk_urb(purb, pusbd, pipe,
-                         pxmitframe->buf_addr, /*  pxmitbuf->pbuf */
-                         cnt,
-                         usb_write_port_complete,
-                         pxmitbuf);/* context is pxmitbuf */
-
-       status = usb_submit_urb(purb, GFP_ATOMIC);
-       if (status) {
-               rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_WRITE_PORT_ERR);
-               if (status == -ENODEV)
-                       padapter->bDriverStopped = true;
-               goto exit;
-       }
-
-       ret = _SUCCESS;
-
-/*    We add the URB_ZERO_PACKET flag to urb so that the host will send the zero packet automatically. */
-
-exit:
-       if (ret != _SUCCESS)
-               rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
-
-       return ret;
-}
-
-void rtw_write_port_cancel(struct adapter *padapter)
-{
-       int i;
-       struct xmit_buf *pxmitbuf = (struct xmit_buf *)padapter->xmitpriv.pxmitbuf;
-
-       padapter->bWritePortCancel = true;
-
-       for (i = 0; i < NR_XMITBUFF; i++) {
-               usb_kill_urb(pxmitbuf->pxmit_urb);
-               pxmitbuf++;
-       }
-
-       pxmitbuf = (struct xmit_buf *)padapter->xmitpriv.pxmit_extbuf;
-       for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
-               usb_kill_urb(pxmitbuf->pxmit_urb);
-               pxmitbuf++;
-       }
-}