* [PATCH] staging: rtl8723bs: remove the obsolete driver
@ 2026-10-07 10:28 Luka Gejak
0 siblings, 0 replies; only message in thread
From: Luka Gejak @ 2026-10-07 10:28 UTC (permalink / raw)
To: Ping-Ke Shih, Greg Kroah-Hartman
Cc: linux-wireless, linux-kernel, Luka Gejak, linux-staging
RTW88 now supports RTL8723B family, via rtw8723b driver which handles
RTL8723BS, so the staging driver is obsolete. Remove it together
with its Kconfig and Makefile wiring.
Signed-off-by: Luka Gejak <luka.gejak@linux.dev>
---
drivers/staging/Kconfig | 2 -
drivers/staging/Makefile | 1 -
drivers/staging/rtl8723bs/Kconfig | 13 -
drivers/staging/rtl8723bs/Makefile | 60 -
drivers/staging/rtl8723bs/TODO | 7 -
drivers/staging/rtl8723bs/core/rtw_ap.c | 1943 ------
drivers/staging/rtl8723bs/core/rtw_btcoex.c | 75 -
drivers/staging/rtl8723bs/core/rtw_cmd.c | 1936 ------
drivers/staging/rtl8723bs/core/rtw_efuse.c | 253 -
.../staging/rtl8723bs/core/rtw_ieee80211.c | 1199 ----
drivers/staging/rtl8723bs/core/rtw_io.c | 145 -
.../staging/rtl8723bs/core/rtw_ioctl_set.c | 494 --
drivers/staging/rtl8723bs/core/rtw_mlme.c | 2565 -------
drivers/staging/rtl8723bs/core/rtw_mlme_ext.c | 5901 -----------------
drivers/staging/rtl8723bs/core/rtw_pwrctrl.c | 1139 ----
drivers/staging/rtl8723bs/core/rtw_recv.c | 2249 -------
drivers/staging/rtl8723bs/core/rtw_security.c | 1470 ----
drivers/staging/rtl8723bs/core/rtw_sta_mgt.c | 549 --
.../staging/rtl8723bs/core/rtw_wlan_util.c | 1759 -----
drivers/staging/rtl8723bs/core/rtw_xmit.c | 2569 -------
drivers/staging/rtl8723bs/hal/Hal8723BReg.h | 65 -
.../staging/rtl8723bs/hal/HalBtc8723b1Ant.c | 2595 --------
.../staging/rtl8723bs/hal/HalBtc8723b1Ant.h | 184 -
.../staging/rtl8723bs/hal/HalBtc8723b2Ant.c | 2624 --------
.../staging/rtl8723bs/hal/HalBtc8723b2Ant.h | 146 -
drivers/staging/rtl8723bs/hal/HalBtcOutSrc.h | 426 --
.../staging/rtl8723bs/hal/HalHWImg8723B_BB.c | 556 --
.../staging/rtl8723bs/hal/HalHWImg8723B_BB.h | 39 -
.../staging/rtl8723bs/hal/HalHWImg8723B_MAC.c | 237 -
.../staging/rtl8723bs/hal/HalHWImg8723B_MAC.h | 19 -
.../staging/rtl8723bs/hal/HalHWImg8723B_RF.c | 554 --
.../staging/rtl8723bs/hal/HalHWImg8723B_RF.h | 40 -
drivers/staging/rtl8723bs/hal/HalPhyRf.c | 268 -
drivers/staging/rtl8723bs/hal/HalPhyRf.h | 39 -
.../staging/rtl8723bs/hal/HalPhyRf_8723B.c | 1767 -----
.../staging/rtl8723bs/hal/HalPhyRf_8723B.h | 66 -
drivers/staging/rtl8723bs/hal/HalPwrSeqCmd.c | 144 -
drivers/staging/rtl8723bs/hal/Mp_Precomp.h | 23 -
drivers/staging/rtl8723bs/hal/hal_btcoex.c | 1303 ----
drivers/staging/rtl8723bs/hal/hal_com.c | 767 ---
.../staging/rtl8723bs/hal/hal_com_phycfg.c | 973 ---
drivers/staging/rtl8723bs/hal/hal_intf.c | 283 -
drivers/staging/rtl8723bs/hal/hal_pwr_seq.c | 128 -
drivers/staging/rtl8723bs/hal/hal_sdio.c | 100 -
drivers/staging/rtl8723bs/hal/odm.c | 988 ---
drivers/staging/rtl8723bs/hal/odm.h | 1109 ----
.../staging/rtl8723bs/hal/odm_CfoTracking.c | 210 -
.../staging/rtl8723bs/hal/odm_CfoTracking.h | 39 -
drivers/staging/rtl8723bs/hal/odm_DIG.c | 799 ---
drivers/staging/rtl8723bs/hal/odm_DIG.h | 164 -
.../rtl8723bs/hal/odm_DynamicBBPowerSaving.c | 81 -
.../rtl8723bs/hal/odm_DynamicBBPowerSaving.h | 31 -
.../rtl8723bs/hal/odm_DynamicTxPower.c | 22 -
.../rtl8723bs/hal/odm_DynamicTxPower.h | 29 -
.../rtl8723bs/hal/odm_EdcaTurboCheck.c | 158 -
.../rtl8723bs/hal/odm_EdcaTurboCheck.h | 23 -
drivers/staging/rtl8723bs/hal/odm_HWConfig.c | 439 --
drivers/staging/rtl8723bs/hal/odm_HWConfig.h | 85 -
.../rtl8723bs/hal/odm_RegConfig8723B.c | 176 -
.../rtl8723bs/hal/odm_RegConfig8723B.h | 45 -
.../staging/rtl8723bs/hal/odm_RegDefine11N.h | 160 -
drivers/staging/rtl8723bs/hal/odm_interface.h | 29 -
drivers/staging/rtl8723bs/hal/odm_precomp.h | 47 -
drivers/staging/rtl8723bs/hal/odm_reg.h | 91 -
drivers/staging/rtl8723bs/hal/odm_types.h | 40 -
drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c | 933 ---
drivers/staging/rtl8723bs/hal/rtl8723b_dm.c | 256 -
.../staging/rtl8723bs/hal/rtl8723b_hal_init.c | 2826 --------
.../staging/rtl8723bs/hal/rtl8723b_phycfg.c | 759 ---
.../staging/rtl8723bs/hal/rtl8723b_rf6052.c | 135 -
.../staging/rtl8723bs/hal/rtl8723b_rxdesc.c | 69 -
.../staging/rtl8723bs/hal/rtl8723bs_recv.c | 477 --
.../staging/rtl8723bs/hal/rtl8723bs_xmit.c | 568 --
drivers/staging/rtl8723bs/hal/sdio_halinit.c | 1192 ----
drivers/staging/rtl8723bs/hal/sdio_ops.c | 859 ---
.../rtl8723bs/include/Hal8192CPhyReg.h | 232 -
.../staging/rtl8723bs/include/HalPwrSeqCmd.h | 111 -
.../staging/rtl8723bs/include/basic_types.h | 175 -
drivers/staging/rtl8723bs/include/cmd_osdep.h | 16 -
drivers/staging/rtl8723bs/include/drv_types.h | 431 --
.../rtl8723bs/include/drv_types_sdio.h | 25 -
.../staging/rtl8723bs/include/hal_btcoex.h | 54 -
drivers/staging/rtl8723bs/include/hal_com.h | 152 -
.../staging/rtl8723bs/include/hal_com_h2c.h | 28 -
.../rtl8723bs/include/hal_com_phycfg.h | 108 -
.../staging/rtl8723bs/include/hal_com_reg.h | 594 --
drivers/staging/rtl8723bs/include/hal_data.h | 276 -
drivers/staging/rtl8723bs/include/hal_intf.h | 250 -
drivers/staging/rtl8723bs/include/hal_pg.h | 63 -
drivers/staging/rtl8723bs/include/hal_phy.h | 73 -
.../staging/rtl8723bs/include/hal_phy_cfg.h | 63 -
.../staging/rtl8723bs/include/hal_phy_reg.h | 17 -
.../staging/rtl8723bs/include/hal_pwr_seq.h | 226 -
drivers/staging/rtl8723bs/include/hal_sdio.h | 18 -
drivers/staging/rtl8723bs/include/ieee80211.h | 748 ---
.../rtl8723bs/include/ioctl_cfg80211.h | 58 -
.../staging/rtl8723bs/include/osdep_intf.h | 42 -
.../staging/rtl8723bs/include/osdep_service.h | 53 -
.../rtl8723bs/include/osdep_service_linux.h | 118 -
.../staging/rtl8723bs/include/rtl8192c_recv.h | 33 -
.../staging/rtl8723bs/include/rtl8723b_cmd.h | 182 -
.../staging/rtl8723bs/include/rtl8723b_dm.h | 32 -
.../staging/rtl8723bs/include/rtl8723b_hal.h | 246 -
.../staging/rtl8723bs/include/rtl8723b_recv.h | 95 -
.../staging/rtl8723bs/include/rtl8723b_rf.h | 17 -
.../staging/rtl8723bs/include/rtl8723b_spec.h | 237 -
.../staging/rtl8723bs/include/rtl8723b_xmit.h | 421 --
drivers/staging/rtl8723bs/include/rtw_ap.h | 39 -
.../staging/rtl8723bs/include/rtw_btcoex.h | 27 -
.../staging/rtl8723bs/include/rtw_byteorder.h | 16 -
drivers/staging/rtl8723bs/include/rtw_cmd.h | 705 --
.../staging/rtl8723bs/include/rtw_eeprom.h | 118 -
drivers/staging/rtl8723bs/include/rtw_efuse.h | 78 -
drivers/staging/rtl8723bs/include/rtw_event.h | 92 -
drivers/staging/rtl8723bs/include/rtw_ht.h | 83 -
drivers/staging/rtl8723bs/include/rtw_io.h | 58 -
.../staging/rtl8723bs/include/rtw_ioctl_set.h | 27 -
drivers/staging/rtl8723bs/include/rtw_mlme.h | 397 --
.../staging/rtl8723bs/include/rtw_mlme_ext.h | 708 --
.../staging/rtl8723bs/include/rtw_pwrctrl.h | 254 -
drivers/staging/rtl8723bs/include/rtw_qos.h | 15 -
drivers/staging/rtl8723bs/include/rtw_recv.h | 457 --
drivers/staging/rtl8723bs/include/rtw_rf.h | 100 -
.../staging/rtl8723bs/include/rtw_security.h | 272 -
.../staging/rtl8723bs/include/rtw_version.h | 3 -
.../staging/rtl8723bs/include/rtw_wifi_regd.h | 16 -
drivers/staging/rtl8723bs/include/rtw_xmit.h | 470 --
drivers/staging/rtl8723bs/include/sdio_hal.h | 14 -
drivers/staging/rtl8723bs/include/sdio_ops.h | 33 -
.../rtl8723bs/include/sdio_ops_linux.h | 29 -
drivers/staging/rtl8723bs/include/sta_info.h | 330 -
drivers/staging/rtl8723bs/include/wifi.h | 409 --
.../staging/rtl8723bs/include/wlan_bssdef.h | 195 -
.../staging/rtl8723bs/include/xmit_osdep.h | 43 -
.../staging/rtl8723bs/os_dep/ioctl_cfg80211.c | 2795 --------
drivers/staging/rtl8723bs/os_dep/os_intfs.c | 1189 ----
.../staging/rtl8723bs/os_dep/osdep_service.c | 201 -
drivers/staging/rtl8723bs/os_dep/sdio_intf.c | 465 --
.../staging/rtl8723bs/os_dep/sdio_ops_linux.c | 495 --
drivers/staging/rtl8723bs/os_dep/wifi_regd.c | 129 -
drivers/staging/rtl8723bs/os_dep/xmit_linux.c | 216 -
141 files changed, 66186 deletions(-)
delete mode 100644 drivers/staging/rtl8723bs/Kconfig
delete mode 100644 drivers/staging/rtl8723bs/Makefile
delete mode 100644 drivers/staging/rtl8723bs/TODO
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_ap.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_btcoex.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_cmd.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_efuse.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_ieee80211.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_io.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_ioctl_set.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_mlme.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_pwrctrl.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_recv.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_security.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_sta_mgt.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_wlan_util.c
delete mode 100644 drivers/staging/rtl8723bs/core/rtw_xmit.c
delete mode 100644 drivers/staging/rtl8723bs/hal/Hal8723BReg.h
delete mode 100644 drivers/staging/rtl8723bs/hal/HalBtc8723b1Ant.c
delete mode 100644 drivers/staging/rtl8723bs/hal/HalBtc8723b1Ant.h
delete mode 100644 drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.c
delete mode 100644 drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.h
delete mode 100644 drivers/staging/rtl8723bs/hal/HalBtcOutSrc.h
delete mode 100644 drivers/staging/rtl8723bs/hal/HalHWImg8723B_BB.c
delete mode 100644 drivers/staging/rtl8723bs/hal/HalHWImg8723B_BB.h
delete mode 100644 drivers/staging/rtl8723bs/hal/HalHWImg8723B_MAC.c
delete mode 100644 drivers/staging/rtl8723bs/hal/HalHWImg8723B_MAC.h
delete mode 100644 drivers/staging/rtl8723bs/hal/HalHWImg8723B_RF.c
delete mode 100644 drivers/staging/rtl8723bs/hal/HalHWImg8723B_RF.h
delete mode 100644 drivers/staging/rtl8723bs/hal/HalPhyRf.c
delete mode 100644 drivers/staging/rtl8723bs/hal/HalPhyRf.h
delete mode 100644 drivers/staging/rtl8723bs/hal/HalPhyRf_8723B.c
delete mode 100644 drivers/staging/rtl8723bs/hal/HalPhyRf_8723B.h
delete mode 100644 drivers/staging/rtl8723bs/hal/HalPwrSeqCmd.c
delete mode 100644 drivers/staging/rtl8723bs/hal/Mp_Precomp.h
delete mode 100644 drivers/staging/rtl8723bs/hal/hal_btcoex.c
delete mode 100644 drivers/staging/rtl8723bs/hal/hal_com.c
delete mode 100644 drivers/staging/rtl8723bs/hal/hal_com_phycfg.c
delete mode 100644 drivers/staging/rtl8723bs/hal/hal_intf.c
delete mode 100644 drivers/staging/rtl8723bs/hal/hal_pwr_seq.c
delete mode 100644 drivers/staging/rtl8723bs/hal/hal_sdio.c
delete mode 100644 drivers/staging/rtl8723bs/hal/odm.c
delete mode 100644 drivers/staging/rtl8723bs/hal/odm.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_CfoTracking.c
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_CfoTracking.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_DIG.c
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_DIG.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_DynamicBBPowerSaving.c
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_DynamicBBPowerSaving.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_DynamicTxPower.c
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_DynamicTxPower.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_EdcaTurboCheck.c
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_EdcaTurboCheck.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_HWConfig.c
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_HWConfig.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_RegConfig8723B.c
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_RegConfig8723B.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_RegDefine11N.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_interface.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_precomp.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_reg.h
delete mode 100644 drivers/staging/rtl8723bs/hal/odm_types.h
delete mode 100644 drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c
delete mode 100644 drivers/staging/rtl8723bs/hal/rtl8723b_dm.c
delete mode 100644 drivers/staging/rtl8723bs/hal/rtl8723b_hal_init.c
delete mode 100644 drivers/staging/rtl8723bs/hal/rtl8723b_phycfg.c
delete mode 100644 drivers/staging/rtl8723bs/hal/rtl8723b_rf6052.c
delete mode 100644 drivers/staging/rtl8723bs/hal/rtl8723b_rxdesc.c
delete mode 100644 drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
delete mode 100644 drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c
delete mode 100644 drivers/staging/rtl8723bs/hal/sdio_halinit.c
delete mode 100644 drivers/staging/rtl8723bs/hal/sdio_ops.c
delete mode 100644 drivers/staging/rtl8723bs/include/Hal8192CPhyReg.h
delete mode 100644 drivers/staging/rtl8723bs/include/HalPwrSeqCmd.h
delete mode 100644 drivers/staging/rtl8723bs/include/basic_types.h
delete mode 100644 drivers/staging/rtl8723bs/include/cmd_osdep.h
delete mode 100644 drivers/staging/rtl8723bs/include/drv_types.h
delete mode 100644 drivers/staging/rtl8723bs/include/drv_types_sdio.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_btcoex.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_com.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_com_h2c.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_com_phycfg.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_com_reg.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_data.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_intf.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_pg.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_phy.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_phy_cfg.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_phy_reg.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_pwr_seq.h
delete mode 100644 drivers/staging/rtl8723bs/include/hal_sdio.h
delete mode 100644 drivers/staging/rtl8723bs/include/ieee80211.h
delete mode 100644 drivers/staging/rtl8723bs/include/ioctl_cfg80211.h
delete mode 100644 drivers/staging/rtl8723bs/include/osdep_intf.h
delete mode 100644 drivers/staging/rtl8723bs/include/osdep_service.h
delete mode 100644 drivers/staging/rtl8723bs/include/osdep_service_linux.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtl8192c_recv.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtl8723b_cmd.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtl8723b_dm.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtl8723b_hal.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtl8723b_recv.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtl8723b_rf.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtl8723b_spec.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtl8723b_xmit.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_ap.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_btcoex.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_byteorder.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_cmd.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_eeprom.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_efuse.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_event.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_ht.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_io.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_ioctl_set.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_mlme.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_mlme_ext.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_pwrctrl.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_qos.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_recv.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_rf.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_security.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_version.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_wifi_regd.h
delete mode 100644 drivers/staging/rtl8723bs/include/rtw_xmit.h
delete mode 100644 drivers/staging/rtl8723bs/include/sdio_hal.h
delete mode 100644 drivers/staging/rtl8723bs/include/sdio_ops.h
delete mode 100644 drivers/staging/rtl8723bs/include/sdio_ops_linux.h
delete mode 100644 drivers/staging/rtl8723bs/include/sta_info.h
delete mode 100644 drivers/staging/rtl8723bs/include/wifi.h
delete mode 100644 drivers/staging/rtl8723bs/include/wlan_bssdef.h
delete mode 100644 drivers/staging/rtl8723bs/include/xmit_osdep.h
delete mode 100644 drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
delete mode 100644 drivers/staging/rtl8723bs/os_dep/os_intfs.c
delete mode 100644 drivers/staging/rtl8723bs/os_dep/osdep_service.c
delete mode 100644 drivers/staging/rtl8723bs/os_dep/sdio_intf.c
delete mode 100644 drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c
delete mode 100644 drivers/staging/rtl8723bs/os_dep/wifi_regd.c
delete mode 100644 drivers/staging/rtl8723bs/os_dep/xmit_linux.c
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
index 2f92cd698bef..46b460bfb436 100644
--- a/drivers/staging/Kconfig
+++ b/drivers/staging/Kconfig
@@ -24,8 +24,6 @@ menuconfig STAGING
if STAGING
-source "drivers/staging/rtl8723bs/Kconfig"
-
source "drivers/staging/octeon/Kconfig"
source "drivers/staging/iio/Kconfig"
diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
index f5b8876aa536..7e2e7a7e773a 100644
--- a/drivers/staging/Makefile
+++ b/drivers/staging/Makefile
@@ -2,7 +2,6 @@
# Makefile for staging directory
obj-y += media/
-obj-$(CONFIG_RTL8723BS) += rtl8723bs/
obj-$(CONFIG_OCTEON_ETHERNET) += octeon/
obj-$(CONFIG_VME_BUS) += vme_user/
obj-$(CONFIG_IIO) += iio/
diff --git a/drivers/staging/rtl8723bs/Kconfig b/drivers/staging/rtl8723bs/Kconfig
deleted file mode 100644
index 414982893b6b..000000000000
--- a/drivers/staging/rtl8723bs/Kconfig
+++ /dev/null
@@ -1,13 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0
-config RTL8723BS
- tristate "Realtek RTL8723BS SDIO Wireless LAN NIC driver"
- depends on WLAN && MMC && CFG80211
- depends on m
- select CRYPTO_LIB_AES
- select CRYPTO_LIB_ARC4
- select CRYPTO_LIB_UTILS
- help
- This option enables support for RTL8723BS SDIO drivers, such as
- the wifi found on the 1st gen Intel Compute Stick, the CHIP
- and many other Intel Atom and ARM based devices.
- If built as a module, it will be called r8723bs.
diff --git a/drivers/staging/rtl8723bs/Makefile b/drivers/staging/rtl8723bs/Makefile
deleted file mode 100644
index 1768b8123f03..000000000000
--- a/drivers/staging/rtl8723bs/Makefile
+++ /dev/null
@@ -1,60 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0
-r8723bs-y = \
- core/rtw_ap.o \
- core/rtw_btcoex.o \
- core/rtw_cmd.o \
- core/rtw_efuse.o \
- core/rtw_io.o \
- core/rtw_ioctl_set.o \
- core/rtw_ieee80211.o \
- core/rtw_mlme.o \
- core/rtw_mlme_ext.o \
- core/rtw_pwrctrl.o \
- core/rtw_recv.o \
- core/rtw_security.o \
- core/rtw_sta_mgt.o \
- core/rtw_wlan_util.o \
- core/rtw_xmit.o \
- hal/hal_intf.o \
- hal/hal_com.o \
- hal/hal_com_phycfg.o \
- hal/hal_btcoex.o \
- hal/hal_sdio.o \
- hal/hal_pwr_seq.o \
- hal/HalPhyRf.o \
- hal/HalPwrSeqCmd.o \
- hal/odm.o \
- hal/odm_CfoTracking.o \
- hal/odm_DIG.o \
- hal/odm_DynamicBBPowerSaving.o \
- hal/odm_DynamicTxPower.o \
- hal/odm_EdcaTurboCheck.o \
- hal/odm_HWConfig.o \
- hal/odm_RegConfig8723B.o \
- hal/rtl8723b_cmd.o \
- hal/rtl8723b_dm.o \
- hal/rtl8723b_hal_init.o \
- hal/rtl8723b_phycfg.o \
- hal/rtl8723b_rf6052.o \
- hal/rtl8723b_rxdesc.o \
- hal/rtl8723bs_recv.o \
- hal/rtl8723bs_xmit.o \
- hal/sdio_halinit.o \
- hal/sdio_ops.o \
- hal/HalBtc8723b1Ant.o \
- hal/HalBtc8723b2Ant.o \
- hal/HalHWImg8723B_BB.o \
- hal/HalHWImg8723B_MAC.o \
- hal/HalHWImg8723B_RF.o \
- hal/HalPhyRf_8723B.o \
- os_dep/ioctl_cfg80211.o \
- os_dep/osdep_service.o \
- os_dep/os_intfs.o \
- os_dep/sdio_intf.o \
- os_dep/sdio_ops_linux.o \
- os_dep/wifi_regd.o \
- os_dep/xmit_linux.o
-
-obj-$(CONFIG_RTL8723BS) := r8723bs.o
-
-ccflags-y += -I$(src)/include -I$(src)/hal
diff --git a/drivers/staging/rtl8723bs/TODO b/drivers/staging/rtl8723bs/TODO
deleted file mode 100644
index 34c216e6da32..000000000000
--- a/drivers/staging/rtl8723bs/TODO
+++ /dev/null
@@ -1,7 +0,0 @@
-TODO:
-- find and remove any code for other chips that is left over
-- convert any remaining unusual variable types
-- checkpatch.pl fixes - most of the remaining ones are lines too long. Many
- of them will require refactoring
-- merge Realtek's bugfixes and new features into the driver
-- switch to use MAC80211
diff --git a/drivers/staging/rtl8723bs/core/rtw_ap.c b/drivers/staging/rtl8723bs/core/rtw_ap.c
deleted file mode 100644
index 4728f62a1557..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_ap.c
+++ /dev/null
@@ -1,1943 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-#include <linux/unaligned.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 */
- INIT_LIST_HEAD(&pacl_list->acl_node_q.queue);
- spin_lock_init(&pacl_list->acl_node_q.lock);
-
- start_ap_mode(padapter);
-}
-
-void free_mlme_ap_info(struct adapter *padapter)
-{
- struct sta_info *psta = NULL;
- 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);
- rtw_free_stainfo(padapter, psta);
-}
-
-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;
-
- /* update TIM IE */
- u8 *p, *dst_ie, *premainder_ie = NULL, *pbackup_remainder_ie = NULL;
- __le16 tim_bitmap_le;
- unsigned int offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
-
- tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
-
- p = rtw_get_ie(pie + _FIXED_IE_LENGTH_,
- WLAN_EID_TIM,
- &tim_ielen,
- pnetwork_mlmeext->ie_length - _FIXED_IE_LENGTH_
- );
- if (p && tim_ielen > 0) {
- tim_ielen += 2;
-
- premainder_ie = p + tim_ielen;
-
- tim_ie_offset = (signed int)(p - pie);
-
- remainder_ielen = pnetwork_mlmeext->ie_length - 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_;
-
- /* get ssid_ie len */
- p = rtw_get_ie(pie + _BEACON_IE_OFFSET_,
- WLAN_EID_SSID,
- &tmp_len,
- (pnetwork_mlmeext->ie_length - _BEACON_IE_OFFSET_)
- );
- if (p)
- offset += tmp_len + 2;
-
- /* get supported rates len */
- p = rtw_get_ie(pie + _BEACON_IE_OFFSET_,
- WLAN_EID_SUPP_RATES, &tmp_len,
- (pnetwork_mlmeext->ie_length - _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->ie_length - offset - tim_ielen;
-
- /* append TIM IE from offset */
- dst_ie = pie + offset;
- }
-
- if (premainder_ie && remainder_ielen)
- pbackup_remainder_ie = kmemdup(premainder_ie, remainder_ielen, GFP_ATOMIC);
-
- *dst_ie++ = WLAN_EID_TIM;
-
- if ((pstapriv->tim_bitmap & 0xff00) && (pstapriv->tim_bitmap & 0x00fe))
- 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;
-
- if (tim_ielen == 4) {
- __le16 pvb;
-
- if (pstapriv->tim_bitmap & 0xff00)
- pvb = cpu_to_le16(pstapriv->tim_bitmap >> 8);
- else
- pvb = tim_bitmap_le;
-
- *dst_ie++ = le16_to_cpu(pvb);
-
- } 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 = (unsigned int)(dst_ie - pie);
- pnetwork_mlmeext->ie_length = offset + remainder_ielen;
-}
-
-static u8 chk_sta_is_alive(struct sta_info *psta)
-{
- sta_update_last_rx_pkts(psta);
-
- return true;
-}
-
-void expire_timeout_chk(struct adapter *padapter)
-{
- struct list_head *phead, *plist, *tmp;
- u8 updated = false;
- struct sta_info *psta = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- u8 chk_alive_num = 0;
- char chk_alive_list[NUM_STA];
- struct sta_info *psta_tmp;
- LIST_HEAD(free_list);
- int i;
-
- spin_lock_bh(&pstapriv->auth_list_lock);
-
- phead = &pstapriv->auth_list;
- /* check auth_queue */
- list_for_each_safe(plist, tmp, phead) {
- psta = list_entry(plist, struct sta_info, auth_list);
-
- if (psta->expire_to > 0) {
- psta->expire_to--;
- if (psta->expire_to == 0) {
- list_move(&psta->auth_list, &free_list);
- pstapriv->auth_list_cnt--;
- }
- }
- }
-
- spin_unlock_bh(&pstapriv->auth_list_lock);
-
- list_for_each_entry_safe(psta, psta_tmp, &free_list, auth_list) {
- list_del_init(&psta->auth_list);
- rtw_free_stainfo(padapter, psta);
- }
-
- psta = NULL;
-
- spin_lock_bh(&pstapriv->asoc_list_lock);
-
- phead = &pstapriv->asoc_list;
- /* check asoc_queue */
- list_for_each_safe(plist, tmp, phead) {
- psta = list_entry(plist, struct sta_info, asoc_list);
- 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 {
- if (psta->expire_to > 0)
- 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, WLAN_EID_TIM, true);
-
- 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, false, 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);
- r8723bs_select_channel(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 & _FW_LINKED))
- continue;
-
- 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);
- if (!list_empty(&psta->asoc_list)) {
- list_del_init(&psta->asoc_list);
- pstapriv->asoc_list_cnt--;
- updated = ap_free_sta(padapter, psta, false,
- WLAN_REASON_DEAUTH_LEAVING);
- }
- spin_unlock_bh(&pstapriv->asoc_list_lock);
- }
-
- if (backup_oper_channel > 0) /* back to the original operation channel */
- r8723bs_select_channel(padapter, backup_oper_channel);
- }
-
- associated_clients_update(padapter, updated);
-}
-
-void add_ratid(struct adapter *padapter, struct sta_info *psta, u8 rssi_level)
-{
- unsigned char sta_band = 0, short_gi_rate = false;
- 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;
-
- if (!psta)
- return;
-
- if (!(psta->state & _FW_LINKED))
- return;
-
- rtw_hal_update_sta_rate_mask(padapter, psta);
- tx_ra_bitmap = psta->ra_mask;
-
- short_gi_rate = query_ra_short_GI(psta);
-
- if (pcur_network->configuration.ds_config > 14) {
- sta_band |= WIRELESS_INVALID;
- } else {
- if (tx_ra_bitmap & 0xffff000)
- sta_band |= WIRELESS_11_24N;
-
- if (tx_ra_bitmap & 0xff0)
- sta_band |= WIRELESS_11G;
-
- if (tx_ra_bitmap & 0x0f)
- sta_band |= WIRELESS_11B;
- }
-
- psta->wireless_mode = sta_band;
- psta->raid = networktype_to_raid_ex(padapter, psta);
-
- if (psta->aid < NUM_STA) {
- u8 arg[4] = {0};
-
- arg[0] = psta->mac_id;
- arg[1] = psta->raid;
- arg[2] = short_gi_rate;
- arg[3] = psta->init_rate;
-
- rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg, rssi_level);
- }
-}
-
-void update_bmc_sta(struct adapter *padapter)
-{
- unsigned char network_type;
- unsigned int tx_ra_bitmap = 0;
- 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
- *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;/* mac_id = 1 for bc/mc stainfo */
-
- pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
-
- psta->qos_option = 0;
- psta->htpriv.ht_option = false;
-
- psta->ieee8021x_blocked = false;
-
- memset(&psta->sta_stats, 0, sizeof(struct stainfo_stats));
-
- /* prepare for add_ratid */
- network_type = rtw_check_network_type((u8 *)&pcur_network->supported_rates,
- pcur_network->configuration.ds_config
- );
- if (is_supported_tx_cck(network_type)) {
- network_type = WIRELESS_11B;
- } else if (network_type == WIRELESS_INVALID) { /* error handling */
-
- if (pcur_network->configuration.ds_config > 14)
- network_type = WIRELESS_INVALID;
- else
- network_type = WIRELESS_11B;
- }
- update_sta_basic_rate(psta, network_type);
- psta->wireless_mode = network_type;
-
- rtw_hal_update_sta_rate_mask(padapter, psta);
- tx_ra_bitmap = psta->ra_mask;
-
- psta->raid = networktype_to_raid_ex(padapter, psta);
-
- /* ap mode */
- rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, psta, true);
-
- /* if (pHalData->fw_ractrl == true) */
- {
- u8 arg[4] = {0};
-
- arg[0] = psta->mac_id;
- arg[1] = psta->raid;
- arg[2] = 0;
- arg[3] = psta->init_rate;
-
- rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg, 0);
- }
-
- 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;
- u8 cur_ldpc_cap = 0, cur_stbc_cap = 0, cur_beamform_cap = 0;
-
- /* ap mode */
- rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, psta, true);
-
- if (psecuritypriv->dot11_auth_algrthm == dot11_auth_algrthm_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;
-
- phtpriv_sta->rx_ampdu_min_spacing =
- (phtpriv_sta->ht_cap.ampdu_params_info &
- IEEE80211_HT_CAP_AMPDU_DENSITY) >> 2;
-
- /* bwmode */
- if ((phtpriv_sta->ht_cap.cap_info &
- phtpriv_ap->ht_cap.cap_info) &
- cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
- psta->bw_mode = CHANNEL_WIDTH_40;
- else
- psta->bw_mode = CHANNEL_WIDTH_20;
-
- if (pmlmeext->cur_bwmode < psta->bw_mode)
- psta->bw_mode = pmlmeext->cur_bwmode;
-
- phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
-
- /* check if sta support s Short GI 20M */
- if ((phtpriv_sta->ht_cap.cap_info &
- phtpriv_ap->ht_cap.cap_info) &
- cpu_to_le16(IEEE80211_HT_CAP_SGI_20))
- phtpriv_sta->sgi_20m = true;
-
- /* check if sta support s Short GI 40M */
- if ((phtpriv_sta->ht_cap.cap_info &
- phtpriv_ap->ht_cap.cap_info) &
- cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) {
- if (psta->bw_mode == CHANNEL_WIDTH_40) /* according to psta->bw_mode */
- phtpriv_sta->sgi_40m = true;
- else
- phtpriv_sta->sgi_40m = false;
- }
-
- psta->qos_option = true;
-
- /* B0 Config LDPC Coding Capability */
- if (TEST_FLAG(phtpriv_ap->ldpc_cap, LDPC_HT_ENABLE_TX) &&
- GET_HT_CAPABILITY_ELE_LDPC_CAP((u8 *)(&phtpriv_sta->ht_cap)))
- SET_FLAG(cur_ldpc_cap, (LDPC_HT_ENABLE_TX | LDPC_HT_CAP_TX));
-
- /* B7 B8 B9 Config STBC setting */
- if (TEST_FLAG(phtpriv_ap->stbc_cap, STBC_HT_ENABLE_TX) &&
- GET_HT_CAPABILITY_ELE_RX_STBC((u8 *)(&phtpriv_sta->ht_cap)))
- SET_FLAG(cur_stbc_cap, (STBC_HT_ENABLE_TX | STBC_HT_CAP_TX));
- } else {
- phtpriv_sta->ampdu_enable = false;
-
- phtpriv_sta->sgi_20m = false;
- phtpriv_sta->sgi_40m = false;
- psta->bw_mode = CHANNEL_WIDTH_20;
- phtpriv_sta->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
- }
-
- phtpriv_sta->ldpc_cap = cur_ldpc_cap;
- phtpriv_sta->stbc_cap = cur_stbc_cap;
- phtpriv_sta->beamform_cap = cur_beamform_cap;
-
- /* 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 */
-
- update_ldpc_stbc_cap(psta);
-
- /* todo: init other variables */
-
- memset(&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_ap_info(struct adapter *padapter, struct sta_info *psta)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wlan_bssid_ex
- *pnetwork = (struct wlan_bssid_ex *)&pmlmepriv->cur_network.network;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
-
- psta->wireless_mode = pmlmeext->cur_wireless_mode;
-
- psta->bssratelen = rtw_get_rateset_len(pnetwork->supported_rates);
- memcpy(psta->bssrateset, pnetwork->supported_rates, psta->bssratelen);
-
- /* HT related cap */
- if (phtpriv_ap->ht_option) {
- /* check if sta support s Short GI 20M */
- if ((phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SGI_20))
- phtpriv_ap->sgi_20m = true;
-
- /* check if sta support s Short GI 40M */
- if ((phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SGI_40))
- phtpriv_ap->sgi_40m = true;
-
- psta->qos_option = true;
- } else {
- phtpriv_ap->ampdu_enable = false;
-
- phtpriv_ap->sgi_20m = false;
- phtpriv_ap->sgi_40m = false;
- }
-
- psta->bw_mode = pmlmeext->cur_bwmode;
- phtpriv_ap->ch_offset = pmlmeext->cur_ch_offset;
-
- phtpriv_ap->agg_enable_bitmap = 0x0;/* reset */
- phtpriv_ap->candidate_tid_bitmap = 0x0;/* reset */
-
- memcpy(&psta->htpriv, &pmlmepriv->htpriv, sizeof(struct ht_priv));
-}
-
-static void update_hw_ht_param(struct adapter *padapter)
-{
- unsigned char max_AMPDU_len;
- unsigned char min_MPDU_spacing;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
- /* 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;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
-
- rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
-
- /* */
- /* Config SM Power Save setting */
- /* */
- pmlmeinfo->SM_PS =
- (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) &
- 0x0C) >> 2;
-}
-
-void start_bss_network(struct adapter *padapter)
-{
- u8 *p;
- u8 val8, cur_channel, cur_bwmode, cur_ch_offset;
- u16 bcn_interval;
- u32 acparm;
- int ie_len;
- struct registry_priv *pregpriv = &padapter->registrypriv;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct wlan_bssid_ex
- *pnetwork = (struct wlan_bssid_ex *)&pmlmepriv->cur_network.network;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- struct wlan_bssid_ex *pnetwork_mlmeext = &pmlmeinfo->network;
- struct HT_info_element *pht_info = NULL;
- u8 cbw40_enable = 0;
-
- bcn_interval = (u16)pnetwork->configuration.beacon_period;
- cur_channel = pnetwork->configuration.ds_config;
- cur_bwmode = CHANNEL_WIDTH_20;
- cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
- /*
- * check if there is wps ie,
- * if there is wpsie in beacon,
- * the hostapd will update beacon twice when stating hostapd,
- * and at first time the security ie (RSN/WPA IE) will not include in beacon.
- */
- if (!rtw_get_wps_ie(pnetwork->ies + _FIXED_IE_LENGTH_,
- pnetwork->ie_length - _FIXED_IE_LENGTH_, NULL, NULL))
- pmlmeext->bstart_bss = true;
-
- /* todo: update wmm, ht cap */
- if (pmlmepriv->qospriv.qos_option)
- pmlmeinfo->WMM_enable = true;
- if (pmlmepriv->htpriv.ht_option) {
- pmlmeinfo->WMM_enable = true;
- pmlmeinfo->HT_enable = true;
- update_hw_ht_param(padapter);
- }
-
- if (!pmlmepriv->cur_network.join_res) { /* setting only at first time */
-
- /* WEP Key will be set before this function, do not clear CAM. */
- if ((psecuritypriv->dot11_privacy_algrthm != _WEP40_) &&
- (psecuritypriv->dot11_privacy_algrthm != _WEP104_))
- flush_all_cam_entry(padapter); /* clear CAM */
- }
-
- /* set MSR to AP_Mode */
- set_msr(padapter, _HW_STATE_AP_);
-
- /* Set BSSID REG */
- rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pnetwork->mac_address);
-
- /* Set EDCA param reg */
- acparm = 0x002F3217; /* VO */
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acparm));
- acparm = 0x005E4317; /* VI */
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acparm));
- acparm = 0x005ea42b;
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acparm));
- acparm = 0x0000A444; /* BK */
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acparm));
-
- /* Set Security */
- val8 = (psecuritypriv->dot11_auth_algrthm ==
- dot11_auth_algrthm_8021x) ? 0xcc : 0xcf;
- rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
-
- /* Beacon Control related register */
- rtw_hal_set_hwreg(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&bcn_interval));
-
- if (!pmlmepriv->cur_network.join_res) { /* setting only at first time */
- /* turn on all dynamic functions */
- switch_dm_func(padapter, DYNAMIC_ALL_FUNC_ENABLE, true);
- }
-
- /* set channel, bwmode */
- p = rtw_get_ie((pnetwork->ies + sizeof(struct ndis_802_11_fix_ie)),
- WLAN_EID_HT_OPERATION,
- &ie_len,
- (pnetwork->ie_length - sizeof(struct ndis_802_11_fix_ie))
- );
- if (p && ie_len) {
- pht_info = (struct HT_info_element *)(p + 2);
-
- if ((pregpriv->bw_mode & 0x0f) > 0)
- cbw40_enable = 1;
-
- if ((cbw40_enable) && (pht_info->infos[0] & BIT(2))) {
- /* switch to the 40M Hz mode */
- cur_bwmode = CHANNEL_WIDTH_40;
- switch (pht_info->infos[0] & 0x3) {
- case 1:
- cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
- break;
-
- case 3:
- cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
- break;
-
- default:
- cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
- break;
- }
- }
- }
-
- set_channel_bwmode(padapter, cur_channel, cur_ch_offset, cur_bwmode);
- pmlmeext->cur_channel = cur_channel;
- pmlmeext->cur_bwmode = cur_bwmode;
- pmlmeext->cur_ch_offset = cur_ch_offset;
- pmlmeext->cur_wireless_mode = pmlmepriv->cur_network.network_type;
-
- /* let pnetwork_mlmeext == pnetwork_mlme. */
- memcpy(pnetwork_mlmeext, pnetwork, pnetwork->length);
-
- /* update cur_wireless_mode */
- update_wireless_mode(padapter);
-
- /* update RRSR after set channel and bandwidth */
- update_basic_rate_table(padapter, pnetwork->supported_rates);
- rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, pnetwork->supported_rates);
-
- /* update capability after cur_wireless_mode updated */
- update_capinfo(padapter,
- rtw_get_capability((struct wlan_bssid_ex *)pnetwork));
-
- if (pmlmeext->bstart_bss) {
- update_beacon(padapter, WLAN_EID_TIM, true);
-
- /* issue beacon frame */
- send_beacon(padapter);
- }
-
- /* update bc/mc sta_info */
- update_bmc_sta(padapter);
-}
-
-int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
-{
- int ret = _SUCCESS;
- u8 *p;
- u8 *ht_caps_ie = NULL;
- u8 *ht_info_ie = NULL;
- struct sta_info *psta = NULL;
- u16 cap, ht_cap = false;
- unsigned int ie_len = 0;
- int group_cipher, pairwise_cipher;
- u8 channel, network_type, support_rate[NDIS_802_11_LENGTH_RATES_EX];
- int support_rate_num = 0;
- u8 OUI1[] = {0x00, 0x50, 0xf2, 0x01};
- u8 WMM_PARA_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wlan_bssid_ex
- *pbss_network = (struct wlan_bssid_ex *)&pmlmepriv->cur_network.network;
- u8 *ie = pbss_network->ies;
-
- if (!check_fwstate(pmlmepriv, WIFI_AP_STATE))
- return _FAIL;
-
- if (len < 0 || len > MAX_IE_SZ)
- return _FAIL;
-
- pbss_network->ie_length = len;
-
- memset(ie, 0, MAX_IE_SZ);
-
- memcpy(ie, pbuf, pbss_network->ie_length);
-
- if (pbss_network->infrastructure_mode != NL80211_IFTYPE_AP)
- return _FAIL;
-
- pbss_network->rssi = 0;
-
- memcpy(pbss_network->mac_address, myid(&padapter->eeprompriv), ETH_ALEN);
-
- /* beacon interval */
- /* ie + 8; 8: TimeStamp, 2: Beacon Interval 2:Capability */
- p = rtw_get_beacon_interval_from_ie(ie);
- pbss_network->configuration.beacon_period = get_unaligned_le16(p);
-
- /* capability */
- cap = get_unaligned_le16(ie);
-
- /* SSID */
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_,
- WLAN_EID_SSID,
- &ie_len,
- (pbss_network->ie_length - _BEACON_IE_OFFSET_));
- if (p && ie_len > 0) {
- memset(&pbss_network->ssid, 0, sizeof(struct ndis_802_11_ssid));
- memcpy(pbss_network->ssid.ssid, (p + 2), ie_len);
- pbss_network->ssid.ssid_length = ie_len;
- }
-
- /* channel */
- channel = 0;
- pbss_network->configuration.length = 0;
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_,
- WLAN_EID_DS_PARAMS, &ie_len,
- (pbss_network->ie_length - _BEACON_IE_OFFSET_));
- if (p && ie_len > 0)
- channel = *(p + 2);
-
- pbss_network->configuration.ds_config = channel;
-
- memset(support_rate, 0, NDIS_802_11_LENGTH_RATES_EX);
- /* get supported rates */
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_,
- WLAN_EID_SUPP_RATES,
- &ie_len,
- (pbss_network->ie_length - _BEACON_IE_OFFSET_));
- if (p) {
- memcpy(support_rate, p + 2, ie_len);
- support_rate_num = ie_len;
- }
-
- /* get ext_supported rates */
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_,
- WLAN_EID_EXT_SUPP_RATES,
- &ie_len,
- pbss_network->ie_length - _BEACON_IE_OFFSET_);
- if (p)
- memcpy(support_rate + support_rate_num, p + 2, ie_len);
-
- network_type = rtw_check_network_type(support_rate, channel);
-
- rtw_set_supported_rate(pbss_network->supported_rates, network_type);
-
- /* parsing ERP_IE */
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_,
- WLAN_EID_ERP_INFO,
- &ie_len,
- (pbss_network->ie_length - _BEACON_IE_OFFSET_));
- if (p && ie_len > 0)
- ERP_IE_handler(padapter, (struct ndis_80211_var_ie *)p);
-
- /* update privacy/security */
- if (cap & BIT(4))
- pbss_network->privacy = 1;
- else
- pbss_network->privacy = 0;
-
- psecuritypriv->wpa_psk = 0;
-
- /* wpa2 */
- group_cipher = 0; pairwise_cipher = 0;
- psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
- psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_,
- WLAN_EID_RSN,
- &ie_len,
- (pbss_network->ie_length - _BEACON_IE_OFFSET_));
- if (p && ie_len > 0) {
- if (rtw_parse_wpa2_ie(p,
- ie_len + 2,
- &group_cipher,
- &pairwise_cipher,
- NULL) == _SUCCESS) {
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_8021x;
-
- psecuritypriv->dot8021xalg = 1;/* psk, todo:802.1x */
- psecuritypriv->wpa_psk |= BIT(1);
-
- psecuritypriv->wpa2_group_cipher = group_cipher;
- psecuritypriv->wpa2_pairwise_cipher = pairwise_cipher;
- }
- }
-
- /* wpa */
- ie_len = 0;
- group_cipher = 0; pairwise_cipher = 0;
- psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
- psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
- for (p = ie + _BEACON_IE_OFFSET_; ; p += (ie_len + 2)) {
- p = rtw_get_ie(p,
- WLAN_EID_VENDOR_SPECIFIC,
- &ie_len,
- (pbss_network->ie_length - _BEACON_IE_OFFSET_ - (ie_len + 2)));
- if ((p) && (!memcmp(p + 2, OUI1, 4))) {
- if (rtw_parse_wpa_ie(p,
- ie_len + 2,
- &group_cipher,
- &pairwise_cipher,
- NULL) == _SUCCESS) {
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_8021x;
-
- psecuritypriv->dot8021xalg = 1;/* psk, todo:802.1x */
-
- psecuritypriv->wpa_psk |= BIT(0);
-
- psecuritypriv->wpa_group_cipher = group_cipher;
- psecuritypriv->wpa_pairwise_cipher = pairwise_cipher;
- }
-
- break;
- }
-
- if (!p || ie_len == 0)
- break;
- }
-
- /* wmm */
- ie_len = 0;
- pmlmepriv->qospriv.qos_option = 0;
- if (pregistrypriv->wmm_enable) {
- for (p = ie + _BEACON_IE_OFFSET_; ; p += (ie_len + 2)) {
- p = rtw_get_ie(p,
- WLAN_EID_VENDOR_SPECIFIC,
- &ie_len,
- (pbss_network->ie_length -
- _BEACON_IE_OFFSET_ - (ie_len + 2)));
- if ((p) && !memcmp(p + 2, WMM_PARA_IE, 6)) {
- pmlmepriv->qospriv.qos_option = 1;
-
- *(p + 8) |= BIT(7);/* QoS Info, support U-APSD */
-
- /* disable all ACM bits since the WMM admission */
- /* control is not supported */
- *(p + 10) &= ~BIT(4); /* BE */
- *(p + 14) &= ~BIT(4); /* BK */
- *(p + 18) &= ~BIT(4); /* VI */
- *(p + 22) &= ~BIT(4); /* VO */
-
- break;
- }
-
- if (!p || ie_len == 0)
- break;
- }
- }
-
- /* parsing HT_CAP_IE */
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_,
- WLAN_EID_HT_CAPABILITY,
- &ie_len,
- (pbss_network->ie_length - _BEACON_IE_OFFSET_));
- if (p && ie_len > 0) {
- u8 max_rx_ampdu_factor = 0;
- struct ieee80211_ht_cap *pht_cap = (struct ieee80211_ht_cap *)(p + 2);
-
- ht_caps_ie = p;
-
- ht_cap = true;
- network_type |= WIRELESS_11_24N;
-
- rtw_ht_use_default_setting(padapter);
-
- if (!pmlmepriv->htpriv.sgi_20m)
- pht_cap->cap_info &= cpu_to_le16(~(IEEE80211_HT_CAP_SGI_20));
-
- if (!pmlmepriv->htpriv.sgi_40m)
- pht_cap->cap_info &= cpu_to_le16(~(IEEE80211_HT_CAP_SGI_40));
-
- if (!TEST_FLAG(pmlmepriv->htpriv.ldpc_cap, LDPC_HT_ENABLE_RX))
- pht_cap->cap_info &= cpu_to_le16(~(IEEE80211_HT_CAP_LDPC_CODING));
-
- if (!TEST_FLAG(pmlmepriv->htpriv.stbc_cap, STBC_HT_ENABLE_TX))
- pht_cap->cap_info &= cpu_to_le16(~(IEEE80211_HT_CAP_TX_STBC));
-
- if (!TEST_FLAG(pmlmepriv->htpriv.stbc_cap, STBC_HT_ENABLE_RX))
- pht_cap->cap_info &= cpu_to_le16(~(IEEE80211_HT_CAP_RX_STBC_3R));
-
- pht_cap->ampdu_params_info &= ~(IEEE80211_HT_CAP_AMPDU_FACTOR |
- IEEE80211_HT_CAP_AMPDU_DENSITY);
-
- if ((psecuritypriv->wpa_pairwise_cipher & WPA_CIPHER_CCMP) ||
- (psecuritypriv->wpa2_pairwise_cipher & WPA_CIPHER_CCMP)) {
- pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY &
- (0x07 << 2));
- } else {
- pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY &
- 0x00);
- }
-
- rtw_hal_get_def_var(padapter,
- HW_VAR_MAX_RX_AMPDU_FACTOR,
- &max_rx_ampdu_factor);
- /* set Max Rx AMPDU size to 64K */
- pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_FACTOR &
- max_rx_ampdu_factor);
-
- pht_cap->mcs.rx_mask[0] = 0xff;
- pht_cap->mcs.rx_mask[1] = 0x0;
-
- memcpy(&pmlmepriv->htpriv.ht_cap, p + 2, ie_len);
- }
-
- /* parsing HT_INFO_IE */
- p = rtw_get_ie(ie + _BEACON_IE_OFFSET_,
- WLAN_EID_HT_OPERATION,
- &ie_len,
- (pbss_network->ie_length - _BEACON_IE_OFFSET_));
- if (p && ie_len > 0)
- ht_info_ie = p;
-
- pmlmepriv->cur_network.network_type = network_type;
-
- pmlmepriv->htpriv.ht_option = false;
-
- /* ht_cap */
- if (pregistrypriv->ht_enable && ht_cap) {
- pmlmepriv->htpriv.ht_option = true;
- pmlmepriv->qospriv.qos_option = 1;
-
- if (pregistrypriv->ampdu_enable == 1)
- pmlmepriv->htpriv.ampdu_enable = true;
-
- HT_caps_handler(padapter, (struct ndis_80211_var_ie *)ht_caps_ie);
-
- HT_info_handler(padapter, (struct ndis_80211_var_ie *)ht_info_ie);
- }
-
- pbss_network->length =
- get_wlan_bssid_ex_sz((struct wlan_bssid_ex *)pbss_network);
-
- /* issue beacon to start bss network */
- rtw_startbss_cmd(padapter, RTW_CMDF_WAIT_ACK);
-
- /* alloc sta_info for ap itself */
- psta = rtw_get_stainfo(&padapter->stapriv, pbss_network->mac_address);
- if (!psta) {
- psta = rtw_alloc_stainfo(&padapter->stapriv, pbss_network->mac_address);
- if (!psta)
- return _FAIL;
- }
-
- /* update AP's sta info */
- update_ap_info(padapter, psta);
-
- psta->state |= WIFI_AP_STATE;
- rtw_indicate_connect(padapter);
-
- pmlmepriv->cur_network.join_res = true;/* for check if already set beacon */
-
- return ret;
-}
-
-void rtw_set_macaddr_acl(struct adapter *padapter, int mode)
-{
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-
- pacl_list->mode = mode;
-}
-
-int rtw_acl_add_sta(struct adapter *padapter, u8 *addr)
-{
- struct list_head *plist, *phead;
- u8 added = false;
- int i, ret = 0;
- struct rtw_wlan_acl_node *paclnode;
- 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;
-
- if ((NUM_ACL - 1) < pacl_list->num)
- return (-1);
-
- spin_lock_bh(&pacl_node_q->lock);
-
- phead = get_list_head(pacl_node_q);
- list_for_each(plist, phead) {
- paclnode = list_entry(plist, struct rtw_wlan_acl_node, list);
-
- if (!memcmp(paclnode->addr, addr, ETH_ALEN)) {
- if (paclnode->valid) {
- added = true;
- break;
- }
- }
- }
-
- spin_unlock_bh(&pacl_node_q->lock);
-
- if (added)
- return ret;
-
- spin_lock_bh(&pacl_node_q->lock);
-
- for (i = 0; i < NUM_ACL; i++) {
- paclnode = &pacl_list->aclnode[i];
-
- if (!paclnode->valid) {
- INIT_LIST_HEAD(&paclnode->list);
-
- memcpy(paclnode->addr, addr, ETH_ALEN);
-
- paclnode->valid = true;
-
- list_add_tail(&paclnode->list, get_list_head(pacl_node_q));
-
- pacl_list->num++;
-
- break;
- }
- }
-
- spin_unlock_bh(&pacl_node_q->lock);
-
- return ret;
-}
-
-void rtw_acl_remove_sta(struct adapter *padapter, u8 *addr)
-{
- struct list_head *plist, *phead, *tmp;
- struct rtw_wlan_acl_node *paclnode;
- 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);
- list_for_each_safe(plist, tmp, phead) {
- paclnode = list_entry(plist, struct rtw_wlan_acl_node, list);
-
- if (!memcmp(paclnode->addr, addr, ETH_ALEN) ||
- is_broadcast_ether_addr(addr)) {
- if (paclnode->valid) {
- paclnode->valid = false;
-
- list_del_init(&paclnode->list);
-
- pacl_list->num--;
- }
- }
- }
-
- spin_unlock_bh(&pacl_node_q->lock);
-}
-
-u8 rtw_ap_set_pairwise_key(struct adapter *padapter, struct sta_info *psta)
-{
- struct cmd_obj *ph2c;
- struct set_stakey_parm *psetstakey_para;
- struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- u8 res = _SUCCESS;
-
- ph2c = kzalloc_obj(*ph2c);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- psetstakey_para = kzalloc_obj(*psetstakey_para);
- if (!psetstakey_para) {
- kfree(ph2c);
- res = _FAIL;
- goto exit;
- }
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, SET_STA_KEY_CMD);
-
- psetstakey_para->algorithm = (u8)psta->dot118021XPrivacy;
-
- memcpy(psetstakey_para->addr, psta->hwaddr, ETH_ALEN);
-
- memcpy(psetstakey_para->key, &psta->dot118021x_UncstKey, 16);
-
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
-
- return res;
-}
-
-static int rtw_ap_set_key(struct adapter *padapter,
- u8 *key,
- u8 alg,
- int keyid,
- u8 set_tx)
-{
- u8 keylen;
- struct cmd_obj *pcmd;
- struct setkey_parm *psetkeyparm;
- struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- int res = _SUCCESS;
-
- pcmd = kzalloc_obj(*pcmd);
- if (!pcmd) {
- res = _FAIL;
- goto exit;
- }
- psetkeyparm = kzalloc_obj(*psetkeyparm);
- if (!psetkeyparm) {
- kfree(pcmd);
- res = _FAIL;
- goto exit;
- }
-
- psetkeyparm->keyid = (u8)keyid;
- if (is_wep_enc(alg))
- padapter->securitypriv.key_mask |= BIT(psetkeyparm->keyid);
-
- psetkeyparm->algorithm = alg;
-
- psetkeyparm->set_tx = set_tx;
-
- switch (alg) {
- case _WEP40_:
- keylen = 5;
- break;
- case _WEP104_:
- keylen = 13;
- break;
- case _TKIP_:
- case _TKIP_WTMIC_:
- case _AES_:
- default:
- keylen = 16;
- }
-
- memcpy(&psetkeyparm->key[0], key, keylen);
-
- pcmd->cmdcode = SET_KEY_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;
-}
-
-int rtw_ap_set_group_key(struct adapter *padapter, u8 *key, u8 alg, int keyid)
-{
- return rtw_ap_set_key(padapter, key, alg, keyid, 1);
-}
-
-int rtw_ap_set_wep_key(struct adapter *padapter,
- u8 *key,
- u8 keylen,
- int keyid,
- u8 set_tx)
-{
- u8 alg;
-
- switch (keylen) {
- case 5:
- alg = _WEP40_;
- break;
- case 13:
- alg = _WEP104_;
- break;
- default:
- alg = _NO_PRIVACY_;
- }
-
- return rtw_ap_set_key(padapter, key, alg, keyid, set_tx);
-}
-
-static void update_bcn_fixed_ie(struct adapter *padapter)
-{
-}
-
-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_,
- WLAN_EID_ERP_INFO,
- &len,
- (pnetwork->ie_length - _BEACON_IE_OFFSET_));
- if (p && len > 0) {
- struct ndis_80211_var_ie *erp_ie = (struct ndis_80211_var_ie *)p;
-
- if (pmlmepriv->num_sta_non_erp == 1)
- erp_ie->data[0] |= RTW_ERP_INFO_NON_ERP_PRESENT |
- RTW_ERP_INFO_USE_PROTECTION;
- else
- erp_ie->data[0] &= ~(RTW_ERP_INFO_NON_ERP_PRESENT |
- RTW_ERP_INFO_USE_PROTECTION);
-
- if (pmlmepriv->num_sta_no_short_preamble > 0)
- erp_ie->data[0] |= RTW_ERP_INFO_BARKER_PREAMBLE_MODE;
- else
- erp_ie->data[0] &= ~(RTW_ERP_INFO_BARKER_PREAMBLE_MODE);
-
- ERP_IE_handler(padapter, erp_ie);
- }
-}
-
-static void update_bcn_htcap_ie(struct adapter *padapter)
-{
-}
-
-static void update_bcn_htinfo_ie(struct adapter *padapter)
-{
-}
-
-static void update_bcn_rsn_ie(struct adapter *padapter)
-{
-}
-
-void update_beacon(struct adapter *padapter, u8 ie_id, 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 0xFF:
-
- update_bcn_fixed_ie(padapter);/* 8: TimeStamp, 2: Beacon Interval 2:Capability */
-
- break;
-
- case WLAN_EID_TIM:
-
- update_BCNTIM(padapter);
-
- break;
-
- case WLAN_EID_ERP_INFO:
-
- update_bcn_erpinfo_ie(padapter);
-
- break;
-
- case WLAN_EID_HT_CAPABILITY:
-
- update_bcn_htcap_ie(padapter);
-
- break;
-
- case WLAN_EID_RSN:
-
- update_bcn_rsn_ie(padapter);
-
- break;
-
- case WLAN_EID_HT_OPERATION:
-
- update_bcn_htinfo_ie(padapter);
-
- 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 & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT) &&
- pmlmepriv->num_sta_ht_no_gf) {
- pmlmepriv->ht_op_mode |=
- IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT;
- op_mode_changes++;
- } else if ((pmlmepriv->ht_op_mode &
- IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT) &&
- pmlmepriv->num_sta_ht_no_gf == 0) {
- pmlmepriv->ht_op_mode &=
- ~IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT;
- op_mode_changes++;
- }
-
- if (!(pmlmepriv->ht_op_mode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT) &&
- (pmlmepriv->num_sta_no_ht || pmlmepriv->olbc_ht)) {
- pmlmepriv->ht_op_mode |= IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT;
- op_mode_changes++;
- } else if ((pmlmepriv->ht_op_mode &
- IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT) &&
- (pmlmepriv->num_sta_no_ht == 0 && !pmlmepriv->olbc_ht)) {
- pmlmepriv->ht_op_mode &=
- ~IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT;
- 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 & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT))
- new_op_mode = IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED;
- else if ((le16_to_cpu(phtpriv_ap->ht_cap.cap_info) &
- IEEE80211_HT_CAP_SUP_WIDTH) &&
- pmlmepriv->num_sta_ht_20mhz)
- new_op_mode = IEEE80211_HT_OP_MODE_PROTECTION_20MHZ;
- else if (pmlmepriv->olbc_ht)
- new_op_mode = IEEE80211_HT_OP_MODE_PROTECTION_NONMEMBER;
- else
- new_op_mode = IEEE80211_HT_OP_MODE_PROTECTION_NONE;
-
- cur_op_mode = pmlmepriv->ht_op_mode & IEEE80211_HT_OP_MODE_PROTECTION;
- if (cur_op_mode != new_op_mode) {
- pmlmepriv->ht_op_mode &= ~IEEE80211_HT_OP_MODE_PROTECTION;
- 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;
- /* check asoc_queue */
- list_for_each(plist, phead) {
- psta = list_entry(plist, struct sta_info, asoc_list);
-
- 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, 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, 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, WLAN_EID_ERP_INFO, 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, WLAN_EID_ERP_INFO, true);
- }
- }
- }
-
- if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT_TIME)) {
- 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, 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, 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) == 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, WLAN_EID_HT_CAPABILITY, false);
- update_beacon(padapter, WLAN_EID_HT_OPERATION, 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, 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, WLAN_EID_ERP_INFO, 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, 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, WLAN_EID_HT_CAPABILITY, false);
- update_beacon(padapter, WLAN_EID_HT_OPERATION, true);
- }
-
- return beacon_updated;
-}
-
-u8 ap_free_sta(struct adapter *padapter,
- struct sta_info *psta,
- bool active,
- u16 reason)
-{
- u8 beacon_updated = false;
-
- if (!psta)
- return beacon_updated;
-
- if (active) {
- /* tear down Rx AMPDU */
- send_delba(padapter, 0, psta->hwaddr);/* recipient */
-
- /* tear down TX AMPDU */
- send_delba(padapter, 1, psta->hwaddr);/* // originator */
-
- issue_deauth(padapter, psta->hwaddr, reason);
- }
-
- psta->htpriv.agg_enable_bitmap = 0x0;/* reset */
- psta->htpriv.candidate_tid_bitmap = 0x0;/* reset */
-
- /* clear cam entry / key */
- rtw_clearstakey_cmd(padapter, psta, true);
-
- spin_lock_bh(&psta->lock);
- psta->state &= ~_FW_LINKED;
- spin_unlock_bh(&psta->lock);
-
- rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, reason);
-
- report_del_sta_event(padapter, psta->hwaddr, reason);
-
- beacon_updated = bss_cap_update_on_sta_leave(padapter, psta);
-
- rtw_free_stainfo(padapter, psta);
-
- return beacon_updated;
-}
-
-void rtw_sta_flush(struct adapter *padapter)
-{
- struct list_head *phead, *plist, *tmp;
- 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;
- /* free sta asoc_queue */
- list_for_each_safe(plist, tmp, phead) {
- psta = list_entry(plist, struct sta_info, asoc_list);
-
- 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);
-}
-
-/* called >= TSR LEVEL for USB or SDIO Interface*/
-void ap_sta_info_defer_update(struct adapter *padapter, struct sta_info *psta)
-{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
- if (psta->state & _FW_LINKED) {
- pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
-
- /* add ratid */
- add_ratid(padapter, psta, 0);/* DM_RATR_STA_INIT */
- }
-}
-
-/* restore hw setting from sw data structures */
-void rtw_ap_restore_network(struct adapter *padapter)
-{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct sta_info *psta;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct list_head *phead, *plist;
- u8 chk_alive_num = 0;
- char chk_alive_list[NUM_STA];
- int i;
-
- rtw_setopmode_cmd(padapter, NL80211_IFTYPE_AP, false);
-
- set_channel_bwmode(padapter,
- pmlmeext->cur_channel,
- pmlmeext->cur_ch_offset,
- pmlmeext->cur_bwmode);
-
- start_bss_network(padapter);
-
- if ((padapter->securitypriv.dot11_privacy_algrthm == _TKIP_) ||
- (padapter->securitypriv.dot11_privacy_algrthm == _AES_)) {
- /* restore group key, WEP keys is restored in ips_leave() */
- rtw_set_key(padapter,
- psecuritypriv,
- psecuritypriv->dot118021XGrpKeyid,
- 0,
- false);
- }
-
- spin_lock_bh(&pstapriv->asoc_list_lock);
-
- phead = &pstapriv->asoc_list;
- list_for_each(plist, phead) {
- int stainfo_offset;
-
- psta = list_entry(plist, struct sta_info, asoc_list);
-
- stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
- if (stainfo_offset_valid(stainfo_offset))
- chk_alive_list[chk_alive_num++] = stainfo_offset;
- }
-
- spin_unlock_bh(&pstapriv->asoc_list_lock);
-
- for (i = 0; i < chk_alive_num; i++) {
- psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
-
- if (!psta)
- continue;
-
- if (psta->state & _FW_LINKED) {
- rtw_sta_media_status_rpt(padapter, psta, 1);
- update_ra_entry(padapter, psta);
- /* pairwise key */
- /* per sta pairwise key and settings */
- if ((psecuritypriv->dot11_privacy_algrthm == _TKIP_) ||
- (psecuritypriv->dot11_privacy_algrthm == _AES_)) {
- rtw_setstakey_cmd(padapter, psta, true, false);
- }
- }
- }
-}
-
-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, *tmp;
- 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);
- list_for_each_safe(plist, tmp, phead) {
- paclnode = list_entry(plist, struct rtw_wlan_acl_node, list);
-
- 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);
- rtw_free_stainfo(padapter, psta);
-
- rtw_init_bcmc_stainfo(padapter);
-
- rtw_free_mlme_priv_ie_data(pmlmepriv);
-
- rtw_btcoex_media_status_notify(padapter, 0); /* disconnect */
-}
diff --git a/drivers/staging/rtl8723bs/core/rtw_btcoex.c b/drivers/staging/rtl8723bs/core/rtw_btcoex.c
deleted file mode 100644
index 9e00424d00bd..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_btcoex.c
+++ /dev/null
@@ -1,75 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2013 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <rtw_btcoex.h>
-#include <hal_btcoex.h>
-
-void rtw_btcoex_media_status_notify(struct adapter *padapter, u8 media_status)
-{
- if ((media_status == RT_MEDIA_CONNECT) &&
- check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE)) {
- rtw_hal_set_hwreg(padapter, HW_VAR_DL_RSVD_PAGE, NULL);
- }
-
- hal_btcoex_MediaStatusNotify(padapter, media_status);
-}
-
-void rtw_btcoex_halt_notify(struct adapter *padapter)
-{
- if (!padapter->bup)
- return;
-
- if (padapter->bSurpriseRemoved)
- return;
-
- hal_btcoex_HaltNotify(padapter);
-}
-
-/* ================================================== */
-/* Below Functions are called by BT-Coex */
-/* ================================================== */
-void rtw_btcoex_reject_ap_aggregated_packet(struct adapter *padapter, u8 enable)
-{
- struct mlme_ext_info *pmlmeinfo;
- struct sta_info *psta;
-
- pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
- psta = rtw_get_stainfo(&padapter->stapriv, get_bssid(&padapter->mlmepriv));
-
- if (enable) {
- pmlmeinfo->accept_addba_req = false;
- if (psta)
- send_delba(padapter, 0, psta->hwaddr);
- } else {
- pmlmeinfo->accept_addba_req = true;
- }
-}
-
-void rtw_btcoex_lps_enter(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrpriv;
- u8 lps_val;
-
- pwrpriv = adapter_to_pwrctl(padapter);
-
- pwrpriv->bpower_saving = true;
- lps_val = hal_btcoex_LpsVal(padapter);
- rtw_set_ps_mode(padapter, PS_MODE_MIN, 0, lps_val, "BTCOEX");
-}
-
-void rtw_btcoex_lps_leave(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrpriv;
-
- pwrpriv = adapter_to_pwrctl(padapter);
-
- if (pwrpriv->pwr_mode != PS_MODE_ACTIVE) {
- rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0, "BTCOEX");
- LPS_RF_ON_check(padapter, 100);
- pwrpriv->bpower_saving = false;
- }
-}
diff --git a/drivers/staging/rtl8723bs/core/rtw_cmd.c b/drivers/staging/rtl8723bs/core/rtw_cmd.c
deleted file mode 100644
index ce3dfa1fee26..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_cmd.c
+++ /dev/null
@@ -1,1936 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <hal_btcoex.h>
-#include <linux/jiffies.h>
-#include <linux/align.h>
-#include <linux/delay.h>
-
-static struct _cmd_callback rtw_cmd_callback[] = {
- {READ_MACREG_CMD, NULL}, /*0*/
- {WRITE_MACREG_CMD, NULL},
- {READ_BBREG_CMD, &rtw_getbbrfreg_cmdrsp_callback},
- {WRITE_BBREG_CMD, NULL},
- {READ_RFREG_CMD, &rtw_getbbrfreg_cmdrsp_callback},
- {WRITE_RFREG_CMD, NULL}, /*5*/
- {READ_EEPROM_CMD, NULL},
- {WRITE_EEPROM_CMD, NULL},
- {READ_EFUSE_CMD, NULL},
- {WRITE_EFUSE_CMD, NULL},
-
- {READ_CAM_CMD, NULL}, /*10*/
- {WRITE_CAM_CMD, NULL},
- {SET_BCNITV_CMD, NULL},
- {SET_MBIDCFG_CMD, NULL},
- {JOIN_BSS_CMD, &rtw_joinbss_cmd_callback}, /*14*/
- {DISCONNECT_CMD, &rtw_disassoc_cmd_callback}, /*15*/
- {CREATE_BSS_CMD, &rtw_createbss_cmd_callback},
- {SET_OP_MODE_CMD, NULL},
- {SITE_SURVEY_CMD, &rtw_survey_cmd_callback}, /*18*/
- {SET_AUTH_CMD, NULL},
-
- {SET_KEY_CMD, NULL}, /*20*/
- {SET_STA_KEY_CMD, &rtw_setstaKey_cmdrsp_callback},
- {SET_ASSOC_STA_CMD, &rtw_setassocsta_cmdrsp_callback},
- {DEL_ASSOC_STA_CMD, NULL},
- {SET_STA_PWR_STATE_CMD, NULL},
- {SET_BASIC_RATE_CMD, NULL}, /*25*/
- {GET_BASIC_RATE_CMD, NULL},
- {SET_DATA_RATE_CMD, NULL},
- {GET_DATA_RATE_CMD, NULL},
- {SET_PHY_INFO_CMD, NULL},
-
- {GET_PHY_INFO_CMD, NULL}, /*30*/
- {SET_PHY_CMD, NULL},
- {GET_PHY_CMD, NULL},
- {READ_RSSI_CMD, NULL},
- {READ_GAIN_CMD, NULL},
- {SET_ATIM_CMD, NULL}, /*35*/
- {SET_PWR_MODE_CMD, NULL},
- {JOIN_BSS_RPT_CMD, NULL},
- {SET_RA_TABLE_CMD, NULL},
- {GET_RA_TABLE_CMD, NULL},
-
- {GET_CCX_REPORT_CMD, NULL}, /*40*/
- {GET_DTM_REPORT_CMD, NULL},
- {GET_TX_RATE_STATISTICS_CMD, NULL},
- {SET_USB_SUSPEND_CMD, NULL},
- {SET_H2C_LBK_CMD, NULL},
- {ADD_BA_REQ_CMD, NULL}, /*45*/
- {SET_CHANNEL_CMD, NULL}, /*46*/
- {SET_TX_POWER_CMD, NULL},
- {SWITCH_ANTENNA_CMD, NULL},
- {SET_CRYSTAL_CAP_CMD, NULL},
- {SET_SINGLE_CARRIER_TX_CMD, NULL}, /*50*/
-
- {SET_SINGLE_TONE_TX_CMD, NULL}, /*51*/
- {SET_CARRIER_SUPPRESSION_TX_CMD, NULL},
- {SET_CONTINUOUS_TX_CMD, NULL},
- {SWITCH_BANDWIDTH_CMD, NULL}, /*54*/
- {TX_BEACON_CMD, NULL},/*55*/
-
- {SET_MLME_EVT_CMD, NULL},/*56*/
- {SET_DRV_EXTRA_CMD, NULL},/*57*/
- {SET_H2C_MSG_CMD, NULL},/*58*/
- {SET_CHANNEL_PLAN_CMD, NULL},/*59*/
-
- {SET_CHANNEL_SWITCH_CMD, NULL},/*60*/
- {TDLS_CMD, NULL},/*61*/
- {CHK_BMC_SLEEPQ_CMD, NULL}, /*62*/
-
- {RUN_IN_THREAD_CMD, NULL},/*63*/
-};
-
-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 SetChannelSwitch_param), set_csa_hdl) /*60*/
- GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param), tdls_hdl) /*61*/
- GEN_MLME_EXT_HANDLER(0, chk_bmc_sleepq_hdl) /*62*/
- GEN_MLME_EXT_HANDLER(sizeof(struct RunInThread_param), run_in_thread_hdl) /*63*/
-};
-
-/*
- * Caller and the rtw_cmd_thread can protect cmd_q by spin_lock.
- * No irqsave is necessary.
- */
-
-int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv)
-{
- init_completion(&pcmdpriv->cmd_queue_comp);
- init_completion(&pcmdpriv->terminate_cmdthread_comp);
-
- INIT_LIST_HEAD(&pcmdpriv->cmd_queue.queue);
- spin_lock_init(&pcmdpriv->cmd_queue.lock);
-
- /* allocate DMA-able/Non-Page memory for cmd_buf and rsp_buf */
-
- pcmdpriv->cmd_seq = 1;
-
- pcmdpriv->cmd_allocated_buf = kzalloc(MAX_CMDSZ + CMDBUFF_ALIGN_SZ, GFP_ATOMIC);
- if (!pcmdpriv->cmd_allocated_buf)
- return -ENOMEM;
-
- pcmdpriv->cmd_buf = PTR_ALIGN(pcmdpriv->cmd_allocated_buf, CMDBUFF_ALIGN_SZ);
-
- pcmdpriv->rsp_buf = kzalloc(MAX_RSPSZ, GFP_ATOMIC);
- if (!pcmdpriv->rsp_buf) {
- kfree(pcmdpriv->cmd_allocated_buf);
- return -ENOMEM;
- }
-
- pcmdpriv->cmd_issued_cnt = 0;
- pcmdpriv->cmd_done_cnt = 0;
- pcmdpriv->rsp_cnt = 0;
-
- mutex_init(&pcmdpriv->sctx_mutex);
-
- return 0;
-}
-
-static void c2h_wk_callback(struct work_struct *work);
-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);
- pevtpriv->evt_done_cnt = 0;
-
- _init_workitem(&pevtpriv->c2h_wk, c2h_wk_callback, NULL);
- 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_evt_priv(struct evt_priv *pevtpriv)
-{
- _cancel_workitem_sync(&pevtpriv->c2h_wk);
- while (pevtpriv->c2h_wk_alive)
- fsleep(10 * USEC_PER_MSEC);
-
- while (!rtw_cbuf_empty(pevtpriv->c2h_queue)) {
- void *c2h = rtw_cbuf_pop(pevtpriv->c2h_queue);
-
- if (c2h && c2h != (void *)pevtpriv)
- kfree(c2h);
- }
- kfree(pevtpriv->c2h_queue);
-}
-
-void _rtw_free_cmd_priv(struct cmd_priv *pcmdpriv)
-{
- if (pcmdpriv) {
- kfree(pcmdpriv->cmd_allocated_buf);
-
- kfree(pcmdpriv->rsp_buf);
-
- mutex_destroy(&pcmdpriv->sctx_mutex);
- }
-}
-
-/*
- * Calling Context:
- *
- * rtw_enqueue_cmd can only be called between kernel thread,
- * since only spin_lock is used.
- *
- * ISR/Call-Back functions can't call this sub-function.
- *
- */
-
-static int _rtw_enqueue_cmd(struct __queue *queue, struct cmd_obj *obj)
-{
- unsigned long irqL;
-
- if (!obj)
- return 0;
-
- /* spin_lock_bh(&queue->lock); */
- spin_lock_irqsave(&queue->lock, irqL);
-
- list_add_tail(&obj->list, &queue->queue);
-
- /* spin_unlock_bh(&queue->lock); */
- spin_unlock_irqrestore(&queue->lock, irqL);
-
- return 0;
-}
-
-struct cmd_obj *_rtw_dequeue_cmd(struct __queue *queue)
-{
- unsigned long irqL;
- struct cmd_obj *obj;
-
- /* spin_lock_bh(&(queue->lock)); */
- spin_lock_irqsave(&queue->lock, irqL);
- if (list_empty(&queue->queue)) {
- obj = NULL;
- } else {
- obj = container_of(get_next(&queue->queue), struct cmd_obj, list);
- list_del_init(&obj->list);
- }
-
- /* spin_unlock_bh(&(queue->lock)); */
- spin_unlock_irqrestore(&queue->lock, irqL);
-
- return obj;
-}
-
-void rtw_free_evt_priv(struct evt_priv *pevtpriv)
-{
- _rtw_free_evt_priv(pevtpriv);
-}
-
-void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv)
-{
- _rtw_free_cmd_priv(pcmdpriv);
-}
-
-int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj);
-int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
-{
- bool allow = false; /* set to true to allow enqueuing cmd when hw_init_completed is false */
-
- if (cmd_obj->cmdcode == SET_CHANNEL_PLAN_CMD)
- allow = true;
-
- if ((!pcmdpriv->padapter->hw_init_completed && !allow) ||
- !atomic_read(&pcmdpriv->cmdthd_running)) /* com_thread not running */
- return _FAIL;
-
- return _SUCCESS;
-}
-
-int rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
-{
- int res;
- struct adapter *padapter = pcmdpriv->padapter;
-
- if (!cmd_obj)
- return _FAIL;
-
- cmd_obj->padapter = padapter;
-
- res = rtw_cmd_filter(pcmdpriv, cmd_obj);
- if (res == _FAIL) {
- rtw_free_cmd_obj(cmd_obj);
- return _FAIL;
- }
-
- res = _rtw_enqueue_cmd(&pcmdpriv->cmd_queue, cmd_obj);
-
- if (res == 0) {
- complete(&pcmdpriv->cmd_queue_comp);
- return _SUCCESS;
- }
-
- return _FAIL;
-}
-
-struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv)
-{
- return _rtw_dequeue_cmd(&pcmdpriv->cmd_queue);
-}
-
-void rtw_free_cmd_obj(struct cmd_obj *pcmd)
-{
- if ((pcmd->cmdcode != JOIN_BSS_CMD) &&
- (pcmd->cmdcode != CREATE_BSS_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);
-}
-
-void rtw_stop_cmd_thread(struct adapter *adapter)
-{
- if (adapter->cmdThread &&
- atomic_read(&adapter->cmdpriv.cmdthd_running) &&
- adapter->cmdpriv.stop_req == 0) {
- adapter->cmdpriv.stop_req = 1;
- complete(&adapter->cmdpriv.cmd_queue_comp);
- wait_for_completion(&adapter->cmdpriv.terminate_cmdthread_comp);
- }
-}
-
-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 = context;
- struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- struct drvextra_cmd_parm *extra_parm = NULL;
-
- allow_signal(SIGTERM);
-
- pcmdbuf = pcmdpriv->cmd_buf;
-
- pcmdpriv->stop_req = 0;
- atomic_set(&pcmdpriv->cmdthd_running, true);
- complete(&pcmdpriv->terminate_cmdthread_comp);
-
- while (1) {
- if (wait_for_completion_interruptible(&pcmdpriv->cmd_queue_comp)) {
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " wait_for_completion_interruptible(&pcmdpriv->cmd_queue_comp) return != 0, break\n",
- FUNC_ADPT_ARG(padapter));
- break;
- }
-
- if (padapter->driver_stopped || padapter->bSurpriseRemoved) {
- netdev_dbg(padapter->pnetdev,
- "%s: DriverStopped(%d) SurpriseRemoved(%d) break at line %d\n",
- __func__, padapter->driver_stopped,
- padapter->bSurpriseRemoved, __LINE__);
- break;
- }
-
- if (pcmdpriv->stop_req) {
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " stop_req:%u, break\n",
- FUNC_ADPT_ARG(padapter),
- pcmdpriv->stop_req);
- break;
- }
-
- if (list_empty(&pcmdpriv->cmd_queue.queue))
- continue;
-
- if (rtw_register_cmd_alive(padapter) != _SUCCESS)
- continue;
-
-_next:
- if (padapter->driver_stopped || padapter->bSurpriseRemoved) {
- netdev_dbg(padapter->pnetdev,
- "%s: DriverStopped(%d) SurpriseRemoved(%d) break at line %d\n",
- __func__, padapter->driver_stopped,
- padapter->bSurpriseRemoved, __LINE__);
- break;
- }
-
- pcmd = rtw_dequeue_cmd(pcmdpriv);
- if (!pcmd) {
- rtw_unregister_cmd_alive(padapter);
- continue;
- }
-
- if (rtw_cmd_filter(pcmdpriv, pcmd) == _FAIL) {
- pcmd->res = H2C_DROPPED;
- goto post_process;
- }
-
- pcmdpriv->cmd_issued_cnt++;
-
- 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;
- }
-
- pcmdpriv->cmd_seq++;
- } else {
- pcmd->res = H2C_PARAMETERS_ERROR;
- }
-
- cmd_hdl = NULL;
-
-post_process:
-
- if (mutex_lock_interruptible(&pcmd->padapter->cmdpriv.sctx_mutex) == 0) {
- if (pcmd->sctx) {
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " pcmd->sctx\n",
- FUNC_ADPT_ARG(pcmd->padapter));
-
- if (pcmd->res == H2C_SUCCESS)
- rtw_sctx_done(&pcmd->sctx);
- else
- rtw_sctx_done_err(&pcmd->sctx, RTW_SCTX_DONE_CMD_ERROR);
- }
- mutex_unlock(&pcmd->padapter->cmdpriv.sctx_mutex);
- }
-
- /* 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;
- }
-
- /* free all cmd_obj resources */
- do {
- pcmd = rtw_dequeue_cmd(pcmdpriv);
- if (!pcmd) {
- rtw_unregister_cmd_alive(padapter);
- break;
- }
-
- if (pcmd->cmdcode == SET_DRV_EXTRA_CMD) {
- extra_parm = (struct drvextra_cmd_parm *)pcmd->parmbuf;
- if (extra_parm->pbuf && extra_parm->size > 0)
- kfree(extra_parm->pbuf);
- }
-
- rtw_free_cmd_obj(pcmd);
- } while (1);
-
- complete(&pcmdpriv->terminate_cmdthread_comp);
- atomic_set(&pcmdpriv->cmdthd_running, false);
-
- 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,
- struct rtw_ieee80211_channel *ch, int ch_num)
-{
- u8 res = _FAIL;
- struct cmd_obj *ph2c;
- struct sitesurvey_parm *survey_para;
- 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);
-
- ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c)
- return _FAIL;
-
- survey_para = kzalloc_obj(*survey_para, GFP_ATOMIC);
- if (!survey_para) {
- kfree(ph2c);
- return _FAIL;
- }
-
- rtw_free_network_queue(padapter, false);
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, survey_para, SITE_SURVEY_CMD);
-
- /* psurveyPara->bsslimit = 48; */
- survey_para->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].ssid_length) {
- memcpy(&survey_para->ssid[i], &ssid[i], sizeof(struct ndis_802_11_ssid));
- survey_para->ssid_num++;
- }
- }
- }
-
- /* prepare channel list */
- if (ch) {
- int i;
-
- for (i = 0; i < ch_num && i < RTW_CHANNEL_SCAN_AMOUNT; i++) {
- if (ch[i].hw_value && !(ch[i].flags & RTW_IEEE80211_CHAN_DISABLED)) {
- memcpy(&survey_para->ch[i], &ch[i], sizeof(struct rtw_ieee80211_channel));
- survey_para->ch_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);
- } else {
- _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
- }
- return res;
-}
-
-void rtw_getbbrfreg_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *pcmd)
-{
- /* rtw_free_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;
-
- pcmd = kzalloc_obj(*pcmd, GFP_ATOMIC);
- if (!pcmd) {
- res = _FAIL;
- goto exit;
- }
-
- INIT_LIST_HEAD(&pcmd->list);
- pcmd->cmdcode = CREATE_BSS_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;
-}
-
-int rtw_startbss_cmd(struct adapter *padapter, int flags)
-{
- struct cmd_obj *pcmd;
- struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- struct submit_ctx sctx;
- int res = _SUCCESS;
-
- if (flags & RTW_CMDF_DIRECTLY) {
- /* no need to enqueue, do the cmd hdl directly and free cmd parameter */
- start_bss_network(padapter);
- } else {
- /* need enqueue, prepare cmd_obj and enqueue */
- pcmd = kzalloc_obj(*pcmd);
- if (!pcmd) {
- res = _FAIL;
- goto exit;
- }
-
- INIT_LIST_HEAD(&pcmd->list);
- pcmd->cmdcode = CREATE_BSS_CMD;
- pcmd->parmbuf = NULL;
- pcmd->cmdsz = 0;
- pcmd->rsp = NULL;
- pcmd->rspsz = 0;
-
- if (flags & RTW_CMDF_WAIT_ACK) {
- pcmd->sctx = &sctx;
- rtw_sctx_init(&sctx, 2000);
- }
-
- res = rtw_enqueue_cmd(pcmdpriv, pcmd);
-
- if (res == _SUCCESS && (flags & RTW_CMDF_WAIT_ACK)) {
- rtw_sctx_wait(&sctx);
- if (mutex_lock_interruptible(&pcmdpriv->sctx_mutex) == 0) {
- if (sctx.status == RTW_SCTX_SUBMITTED)
- pcmd->sctx = NULL;
- mutex_unlock(&pcmdpriv->sctx_mutex);
- }
- }
- }
-
-exit:
- return res;
-}
-
-u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network *pnetwork)
-{
- u8 res = _SUCCESS;
- unsigned int 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 nl80211_iftype ndis_network_mode = pnetwork->network.infrastructure_mode;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- u32 tmp_len;
- u8 *ptmp = NULL;
-
- pcmd = kzalloc_obj(*pcmd);
- 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 NL80211_IFTYPE_ADHOC:
- set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
- break;
-
- case NL80211_IFTYPE_STATION:
- set_fwstate(pmlmepriv, WIFI_STATION_STATE);
- break;
-
- default:
- break;
- }
- }
-
- psecnetwork = (struct wlan_bssid_ex *)&psecuritypriv->sec_bss;
-
- memset(psecnetwork, 0, t_len);
-
- memcpy(psecnetwork, &pnetwork->network, get_wlan_bssid_ex_sz(&pnetwork->network));
-
- psecuritypriv->authenticator_ie[0] = (unsigned char)psecnetwork->ie_length;
-
- if ((psecnetwork->ie_length - 12) < (256 - 1))
- memcpy(&psecuritypriv->authenticator_ie[1], &psecnetwork->ies[12], psecnetwork->ie_length - 12);
- else
- memcpy(&psecuritypriv->authenticator_ie[1], &psecnetwork->ies[12], (256 - 1));
-
- psecnetwork->ie_length = 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.mac_address[0], ETH_ALEN);
-
- psecnetwork->ie_length = rtw_restruct_sec_ie(padapter,
- &pnetwork->network.ies[0],
- &psecnetwork->ies[0],
- pnetwork->network.ie_length);
-
- pqospriv->qos_option = 0;
-
- if (pregistrypriv->wmm_enable) {
- tmp_len = rtw_restruct_wmm_ie(padapter,
- &pnetwork->network.ies[0],
- &psecnetwork->ies[0],
- pnetwork->network.ie_length,
- psecnetwork->ie_length);
-
- if (psecnetwork->ie_length != tmp_len) {
- psecnetwork->ie_length = 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;
- ptmp = rtw_get_ie(&pnetwork->network.ies[12], WLAN_EID_HT_CAPABILITY, &tmp_len,
- pnetwork->network.ie_length - 12);
-
- if (pregistrypriv->ht_enable && ptmp && tmp_len > 0) {
- /* 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.dot11_privacy_algrthm != _WEP40_) &&
- (padapter->securitypriv.dot11_privacy_algrthm != _WEP104_) &&
- (padapter->securitypriv.dot11_privacy_algrthm != _TKIP_)) {
- rtw_ht_use_default_setting(padapter);
-
- rtw_build_wmm_ie_ht(padapter, &psecnetwork->ies[12], &psecnetwork->ie_length);
-
- /* rtw_restructure_ht_ie */
- rtw_restructure_ht_ie(padapter, &pnetwork->network.ies[12], &psecnetwork->ies[0],
- pnetwork->network.ie_length - 12, &psecnetwork->ie_length,
- pnetwork->network.configuration.ds_config);
- }
- }
-
- rtw_append_exented_cap(padapter, &psecnetwork->ies[0], &psecnetwork->ie_length);
-
- pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->network.ies, pnetwork->network.ie_length);
-
- pcmd->cmdsz = get_wlan_bssid_ex_sz(psecnetwork);/* get cmdsz before endian conversion */
-
- INIT_LIST_HEAD(&pcmd->list);
- pcmd->cmdcode = JOIN_BSS_CMD;
- 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_obj(*param);
- if (!param) {
- res = _FAIL;
- goto exit;
- }
- param->deauth_timeout_ms = deauth_timeout_ms;
-
- if (enqueue) {
- /* need enqueue, prepare cmd_obj and enqueue */
- cmdobj = kzalloc_obj(*cmdobj);
- 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 nl80211_iftype networktype, bool enqueue)
-{
- struct cmd_obj *ph2c;
- struct setopmode_parm *psetop;
-
- struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- u8 res = _SUCCESS;
-
- psetop = kzalloc_obj(*psetop);
- if (!psetop) {
- res = _FAIL;
- goto exit;
- }
- psetop->mode = (u8)networktype;
-
- if (enqueue) {
- ph2c = kzalloc_obj(*ph2c);
- if (!ph2c) {
- kfree(psetop);
- res = _FAIL;
- goto exit;
- }
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, psetop, SET_OP_MODE_CMD);
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
- } else {
- setopmode_hdl(padapter, (u8 *)psetop);
- kfree(psetop);
- }
-exit:
- return res;
-}
-
-u8 rtw_setstakey_cmd(struct adapter *padapter, struct sta_info *sta, u8 unicast_key, bool 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 mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- u8 res = _SUCCESS;
-
- psetstakey_para = kzalloc_obj(*psetstakey_para);
- if (!psetstakey_para) {
- res = _FAIL;
- goto exit;
- }
-
- memcpy(psetstakey_para->addr, sta->hwaddr, ETH_ALEN);
-
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
- psetstakey_para->algorithm = (unsigned char)psecuritypriv->dot11_privacy_algrthm;
- 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;
-
- if (enqueue) {
- ph2c = kzalloc_obj(*ph2c);
- if (!ph2c) {
- kfree_sensitive(psetstakey_para);
- res = _FAIL;
- goto exit;
- }
-
- psetstakey_rsp = kzalloc_obj(*psetstakey_rsp);
- if (!psetstakey_rsp) {
- kfree(ph2c);
- kfree_sensitive(psetstakey_para);
- res = _FAIL;
- goto exit;
- }
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, SET_STA_KEY_CMD);
- ph2c->rsp = (u8 *)psetstakey_rsp;
- ph2c->rspsz = sizeof(struct set_stakey_rsp);
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
- } else {
- set_stakey_hdl(padapter, (u8 *)psetstakey_para);
- kfree_sensitive(psetstakey_para);
- }
-exit:
- return res;
-}
-
-u8 rtw_clearstakey_cmd(struct adapter *padapter, struct sta_info *sta, 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;
- s16 cam_id = 0;
- u8 res = _SUCCESS;
-
- if (!enqueue) {
- while ((cam_id = rtw_camid_search(padapter, sta->hwaddr, -1)) >= 0) {
- netdev_dbg(padapter->pnetdev,
- "clear key for addr:%pM, camid:%d\n",
- sta->hwaddr, cam_id);
- clear_cam_entry(padapter, cam_id);
- rtw_camid_free(padapter, cam_id);
- }
- } else {
- ph2c = kzalloc_obj(*ph2c);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- psetstakey_para = kzalloc_obj(*psetstakey_para);
- if (!psetstakey_para) {
- kfree(ph2c);
- res = _FAIL;
- goto exit;
- }
-
- psetstakey_rsp = kzalloc_obj(*psetstakey_rsp);
- if (!psetstakey_rsp) {
- kfree(ph2c);
- kfree_sensitive(psetstakey_para);
- res = _FAIL;
- goto exit;
- }
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, SET_STA_KEY_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_;
-
- 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_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- paddbareq_parm = kzalloc_obj(*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, ADD_BA_REQ_CMD);
-
- /* rtw_enqueue_cmd(pcmdpriv, ph2c); */
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
- return res;
-}
-
-u8 rtw_reset_securitypriv_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_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
- if (!pdrvextra_cmd_parm) {
- kfree(ph2c);
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm->ec_id = RESET_SECURITYPRIV;
- pdrvextra_cmd_parm->type = 0;
- pdrvextra_cmd_parm->size = 0;
- pdrvextra_cmd_parm->pbuf = NULL;
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, SET_DRV_EXTRA_CMD);
-
- /* rtw_enqueue_cmd(pcmdpriv, ph2c); */
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-exit:
- return res;
-}
-
-u8 rtw_free_assoc_resources_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_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
- if (!pdrvextra_cmd_parm) {
- kfree(ph2c);
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm->ec_id = FREE_ASSOC_RESOURCES;
- pdrvextra_cmd_parm->type = 0;
- pdrvextra_cmd_parm->size = 0;
- pdrvextra_cmd_parm->pbuf = NULL;
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, SET_DRV_EXTRA_CMD);
-
- /* 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;
-
- /* only primary padapter does this cmd */
- ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm = kzalloc_obj(*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 = 0;
- pdrvextra_cmd_parm->size = 0;
- pdrvextra_cmd_parm->pbuf = NULL;
- init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, SET_DRV_EXTRA_CMD);
-
- /* rtw_enqueue_cmd(pcmdpriv, ph2c); */
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-exit:
- return res;
-}
-
-static void collect_traffic_statistics(struct adapter *padapter)
-{
- struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-
- /* Tx */
- pdvobjpriv->traffic_stat.tx_bytes = padapter->xmitpriv.tx_bytes;
- pdvobjpriv->traffic_stat.tx_pkts = padapter->xmitpriv.tx_pkts;
- pdvobjpriv->traffic_stat.tx_drop = padapter->xmitpriv.tx_drop;
-
- /* Rx */
- pdvobjpriv->traffic_stat.rx_bytes = padapter->recvpriv.rx_bytes;
- pdvobjpriv->traffic_stat.rx_pkts = padapter->recvpriv.rx_pkts;
- pdvobjpriv->traffic_stat.rx_drop = padapter->recvpriv.rx_drop;
-
- /* Calculate throughput in last interval */
- pdvobjpriv->traffic_stat.cur_tx_bytes = pdvobjpriv->traffic_stat.tx_bytes - pdvobjpriv->traffic_stat.last_tx_bytes;
- pdvobjpriv->traffic_stat.cur_rx_bytes = pdvobjpriv->traffic_stat.rx_bytes - pdvobjpriv->traffic_stat.last_rx_bytes;
- pdvobjpriv->traffic_stat.last_tx_bytes = pdvobjpriv->traffic_stat.tx_bytes;
- pdvobjpriv->traffic_stat.last_rx_bytes = pdvobjpriv->traffic_stat.rx_bytes;
-
- pdvobjpriv->traffic_stat.cur_tx_tp = (u32)(pdvobjpriv->traffic_stat.cur_tx_bytes * 8 / 2 / 1024 / 1024);
- pdvobjpriv->traffic_stat.cur_rx_tp = (u32)(pdvobjpriv->traffic_stat.cur_rx_bytes * 8 / 2 / 1024 / 1024);
-}
-
-bool traffic_status_watchdog(struct adapter *padapter, bool from_timer)
-{
- bool should_enter_ps = false;
- u16 busy_threshold_high = 25;
- u16 busy_threshold_low = 10;
- u16 busy_threshold = busy_threshold_high;
- bool busy_traffic = false;
- bool tx_busy_traffic = false;
- bool rx_busy_traffic = false;
- bool higher_busy_traffic = false;
- bool higher_busy_rx_traffic = false;
- bool higher_busy_tx_traffic = false;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- collect_traffic_statistics(padapter);
-
- /* */
- /* Determine if our traffic is busy now */
- /* */
- if ((check_fwstate(pmlmepriv, _FW_LINKED))
- /*&& !MgntInitAdapterInProgress(pMgntInfo)*/) {
- /* if we raise busy_traffic in last watchdog, using lower threshold. */
- if (pmlmepriv->link_detect_info.busy_traffic)
- busy_threshold = busy_threshold_low;
-
- if (pmlmepriv->link_detect_info.num_rx_ok_in_period > busy_threshold ||
- pmlmepriv->link_detect_info.num_tx_ok_in_period > busy_threshold) {
- busy_traffic = true;
-
- if (pmlmepriv->link_detect_info.num_rx_ok_in_period >
- pmlmepriv->link_detect_info.num_tx_ok_in_period)
- rx_busy_traffic = true;
- else
- tx_busy_traffic = true;
- }
-
- /* Higher Tx/Rx data. */
- if (pmlmepriv->link_detect_info.num_rx_ok_in_period > 4000 ||
- pmlmepriv->link_detect_info.num_tx_ok_in_period > 4000) {
- higher_busy_traffic = true;
-
- if (pmlmepriv->link_detect_info.num_rx_ok_in_period >
- pmlmepriv->link_detect_info.num_tx_ok_in_period)
- higher_busy_rx_traffic = true;
- else
- higher_busy_tx_traffic = true;
- }
-
- /* check traffic for powersaving. */
- if (((pmlmepriv->link_detect_info.num_rx_unicast_ok_in_period +
- pmlmepriv->link_detect_info.num_tx_ok_in_period) > 8) ||
- (pmlmepriv->link_detect_info.num_rx_unicast_ok_in_period > 2)) {
- should_enter_ps = false;
-
- if (busy_traffic) {
- if (pmlmepriv->link_detect_info.traffic_transition_count <= 4)
- pmlmepriv->link_detect_info.traffic_transition_count = 4;
-
- pmlmepriv->link_detect_info.traffic_transition_count++;
-
- if (pmlmepriv->link_detect_info.traffic_transition_count > 30)
- pmlmepriv->link_detect_info.traffic_transition_count = 30;
- }
- } else {
- if (pmlmepriv->link_detect_info.traffic_transition_count >= 2)
- pmlmepriv->link_detect_info.traffic_transition_count -= 2;
- else
- pmlmepriv->link_detect_info.traffic_transition_count = 0;
-
- if (pmlmepriv->link_detect_info.traffic_transition_count == 0)
- should_enter_ps = true;
- }
-
- /* LeisurePS only work in infra mode. */
- if (should_enter_ps) {
- if (!from_timer)
- LPS_Enter(padapter, "TRAFFIC_IDLE");
- } else {
- if (!from_timer)
- LPS_Leave(padapter, "TRAFFIC_BUSY");
- else
- rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_TRAFFIC_BUSY, 1);
- }
- } else {
- struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
- int n_assoc_iface = 0;
-
- if (check_fwstate(&dvobj->padapters->mlmepriv, WIFI_ASOC_STATE))
- n_assoc_iface++;
-
- if (!from_timer && n_assoc_iface == 0)
- LPS_Leave(padapter, "NON_LINKED");
- }
-
- pmlmepriv->link_detect_info.num_rx_ok_in_period = 0;
- pmlmepriv->link_detect_info.num_tx_ok_in_period = 0;
- pmlmepriv->link_detect_info.num_rx_unicast_ok_in_period = 0;
- pmlmepriv->link_detect_info.busy_traffic = busy_traffic;
- pmlmepriv->link_detect_info.tx_busy_traffic = tx_busy_traffic;
- pmlmepriv->link_detect_info.rx_busy_traffic = rx_busy_traffic;
- pmlmepriv->link_detect_info.higher_busy_traffic = higher_busy_traffic;
- pmlmepriv->link_detect_info.higher_busy_rx_traffic = higher_busy_rx_traffic;
- pmlmepriv->link_detect_info.higher_busy_tx_traffic = higher_busy_tx_traffic;
-
- return should_enter_ps;
-}
-
-static void dynamic_chk_wk_hdl(struct adapter *padapter)
-{
- struct mlme_priv *pmlmepriv;
-
- pmlmepriv = &padapter->mlmepriv;
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
- expire_timeout_chk(padapter);
-
- /* for debug purpose */
- _linked_info_dump(padapter);
- /* if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING|_FW_UNDER_SURVEY) ==false) */
- {
- linked_status_chk(padapter);
- traffic_status_watchdog(padapter, false);
- }
- rtw_hal_dm_watchdog(padapter);
-
- /* check_hw_pbc(padapter, pdrvextra_cmd->pbuf, pdrvextra_cmd->type); */
-
- /* */
- /* BT-Coexist */
- /* */
- hal_btcoex_Handler(padapter);
-
- /* always call rtw_ps_processor() at last one. */
- rtw_ps_processor(padapter);
-}
-
-void lps_ctrl_wk_hdl(struct adapter *padapter, u8 lps_ctrl_type);
-void lps_ctrl_wk_hdl(struct adapter *padapter, u8 lps_ctrl_type)
-{
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
- 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:
- hal_btcoex_ScanNotify(padapter, true);
-
- if (check_fwstate(pmlmepriv, _FW_LINKED)) {
- /* connect */
- LPS_Leave(padapter, "LPS_CTRL_SCAN");
- }
- break;
- case LPS_CTRL_JOINBSS:
- LPS_Leave(padapter, "LPS_CTRL_JOINBSS");
- break;
- case LPS_CTRL_CONNECT:
- mstatus = 1;/* connect */
- /* Reset LPS Setting */
- pwrpriv->LpsIdleCount = 0;
- rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_JOINBSSRPT, (u8 *)(&mstatus));
- rtw_btcoex_media_status_notify(padapter, mstatus);
- break;
- case LPS_CTRL_DISCONNECT:
- mstatus = 0;/* disconnect */
- rtw_btcoex_media_status_notify(padapter, mstatus);
- LPS_Leave(padapter, "LPS_CTRL_DISCONNECT");
- rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_JOINBSSRPT, (u8 *)(&mstatus));
- break;
- case LPS_CTRL_SPECIAL_PACKET:
- pwrpriv->delay_lps_last_time_stamp = jiffies;
- hal_btcoex_SpecialPacketNotify(padapter, PACKET_DHCP);
- LPS_Leave(padapter, "LPS_CTRL_SPECIAL_PACKET");
- break;
- case LPS_CTRL_LEAVE:
- LPS_Leave(padapter, "LPS_CTRL_LEAVE");
- break;
- case LPS_CTRL_TRAFFIC_BUSY:
- LPS_Leave(padapter, "LPS_CTRL_TRAFFIC_BUSY");
- 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 = adapter_to_pwrctl(padapter); */
- u8 res = _SUCCESS;
-
- if (enqueue) {
- ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm = kzalloc_obj(*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 = lps_ctrl_type;
- pdrvextra_cmd_parm->size = 0;
- pdrvextra_cmd_parm->pbuf = NULL;
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, SET_DRV_EXTRA_CMD);
-
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
- } else {
- lps_ctrl_wk_hdl(padapter, lps_ctrl_type);
- }
-
-exit:
- return res;
-}
-
-static void rtw_dm_in_lps_hdl(struct adapter *padapter)
-{
- rtw_hal_set_hwreg(padapter, HW_VAR_DM_IN_LPS, NULL);
-}
-
-u8 rtw_dm_in_lps_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_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
- if (!pdrvextra_cmd_parm) {
- kfree(ph2c);
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm->ec_id = DM_IN_LPS_WK_CID;
- pdrvextra_cmd_parm->type = 0;
- pdrvextra_cmd_parm->size = 0;
- pdrvextra_cmd_parm->pbuf = NULL;
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, SET_DRV_EXTRA_CMD);
-
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
- return res;
-}
-
-static void rtw_lps_change_dtim_hdl(struct adapter *padapter, u8 dtim)
-{
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
-
- if (dtim <= 0 || dtim > 16)
- return;
-
- if (hal_btcoex_IsBtControlLps(padapter))
- return;
-
- mutex_lock(&pwrpriv->lock);
-
- pwrpriv->dtim = dtim;
-
- if (pwrpriv->fw_current_in_ps_mode && (pwrpriv->pwr_mode > PS_MODE_ACTIVE)) {
- u8 ps_mode = pwrpriv->pwr_mode;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
- }
-
- mutex_unlock(&pwrpriv->lock);
-}
-
-static void rtw_dm_ra_mask_hdl(struct adapter *padapter, struct sta_info *psta)
-{
- if (psta)
- set_sta_rate(padapter, psta);
-}
-
-u8 rtw_dm_ra_mask_wk_cmd(struct adapter *padapter, u8 *psta)
-{
- struct cmd_obj *ph2c;
- struct drvextra_cmd_parm *pdrvextra_cmd_parm;
- struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- u8 res = _SUCCESS;
-
- ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
- if (!pdrvextra_cmd_parm) {
- kfree(ph2c);
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm->ec_id = DM_RA_MSK_WK_CID;
- pdrvextra_cmd_parm->type = 0;
- pdrvextra_cmd_parm->size = 0;
- pdrvextra_cmd_parm->pbuf = psta;
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, SET_DRV_EXTRA_CMD);
-
- 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_obj(*ppscmd, GFP_ATOMIC);
- if (!ppscmd) {
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm = kzalloc_obj(*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->type = 0;
- pdrvextra_cmd_parm->size = 0;
- pdrvextra_cmd_parm->pbuf = NULL;
- init_h2fwcmd_w_parm_no_rsp(ppscmd, pdrvextra_cmd_parm, SET_DRV_EXTRA_CMD);
-
- res = rtw_enqueue_cmd(pcmdpriv, ppscmd);
-
-exit:
- return res;
-}
-
-u32 g_wait_hiq_empty;
-
-static void rtw_chk_hi_queue_hdl(struct adapter *padapter)
-{
- struct sta_info *psta_bmc;
- struct sta_priv *pstapriv = &padapter->stapriv;
- unsigned long start = jiffies;
- u8 empty = false;
-
- psta_bmc = rtw_get_bcmc_stainfo(padapter);
- if (!psta_bmc)
- return;
-
- rtw_hal_get_hwreg(padapter, HW_VAR_CHK_HI_QUEUE_EMPTY, &empty);
-
- while (!empty && jiffies_to_msecs(jiffies - start) < g_wait_hiq_empty) {
- fsleep(100 * USEC_PER_MSEC);
- rtw_hal_get_hwreg(padapter, HW_VAR_CHK_HI_QUEUE_EMPTY, &empty);
- }
-
- if (psta_bmc->sleepq_len == 0) {
- if (empty == _SUCCESS) {
- bool update_tim = false;
-
- if (pstapriv->tim_bitmap & BIT(0))
- update_tim = true;
-
- pstapriv->tim_bitmap &= ~BIT(0);
- pstapriv->sta_dz_bitmap &= ~BIT(0);
-
- if (update_tim)
- update_beacon(padapter, WLAN_EID_TIM, true);
- } else {/* re check again */
- rtw_chk_hi_queue_cmd(padapter);
- }
- }
-}
-
-u8 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;
- u8 res = _SUCCESS;
-
- ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm, GFP_ATOMIC);
- if (!pdrvextra_cmd_parm) {
- kfree(ph2c);
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm->ec_id = CHECK_HIQ_WK_CID;
- pdrvextra_cmd_parm->type = 0;
- pdrvextra_cmd_parm->size = 0;
- pdrvextra_cmd_parm->pbuf = NULL;
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, SET_DRV_EXTRA_CMD);
-
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
- return res;
-}
-
-struct btinfo {
- u8 cid;
- u8 len;
-
- u8 bConnection:1;
- u8 bSCOeSCO:1;
- u8 bInQPage:1;
- u8 bACLBusy:1;
- u8 bSCOBusy:1;
- u8 bHID:1;
- u8 bA2DP:1;
- u8 bFTP:1;
-
- u8 retry_cnt:4;
- u8 rsvd_34:1;
- u8 rsvd_35:1;
- u8 rsvd_36:1;
- u8 rsvd_37:1;
-
- u8 rssi;
-
- u8 rsvd_50:1;
- u8 rsvd_51:1;
- u8 rsvd_52:1;
- u8 rsvd_53:1;
- u8 rsvd_54:1;
- u8 rsvd_55:1;
- u8 eSCO_SCO:1;
- u8 Master_Slave:1;
-
- u8 rsvd_6;
- u8 rsvd_7;
-};
-
-static void rtw_btinfo_hdl(struct adapter *adapter, u8 *buf, u16 buf_len)
-{
- #define BTINFO_WIFI_FETCH 0x23
- #define BTINFO_BT_AUTO_RPT 0x27
- struct btinfo *info = (struct btinfo *)buf;
- u8 cmd_idx;
- u8 len;
-
- cmd_idx = info->cid;
-
- if (info->len > buf_len - 2) {
- WARN_ON(1);
- len = buf_len - 2;
- } else {
- len = info->len;
- }
-
- /* transform BT-FW btinfo to WiFI-FW C2H format and notify */
- if (cmd_idx == BTINFO_WIFI_FETCH)
- buf[1] = 0;
- else if (cmd_idx == BTINFO_BT_AUTO_RPT)
- buf[1] = 2;
- hal_btcoex_BtInfoNotify(adapter, len + 1, &buf[1]);
-}
-
-u8 rtw_c2h_packet_wk_cmd(struct adapter *padapter, u8 *pbuf, u16 length)
-{
- struct cmd_obj *ph2c;
- struct drvextra_cmd_parm *pdrvextra_cmd_parm;
- struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- u8 res = _SUCCESS;
-
- ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm = kzalloc_obj(*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 = 0;
- pdrvextra_cmd_parm->size = length;
- pdrvextra_cmd_parm->pbuf = pbuf;
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, SET_DRV_EXTRA_CMD);
-
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
- return res;
-}
-
-/* do not call R/W in this function, because SDIO interrupt have claim host */
-/* or deadlock will happen and cause special-systemserver-died in android */
-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_obj(*ph2c);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm = kzalloc_obj(*pdrvextra_cmd_parm);
- if (!pdrvextra_cmd_parm) {
- kfree(ph2c);
- res = _FAIL;
- goto exit;
- }
-
- pdrvextra_cmd_parm->ec_id = C2H_WK_CID;
- pdrvextra_cmd_parm->type = 0;
- pdrvextra_cmd_parm->size = c2h_evt ? 16 : 0;
- pdrvextra_cmd_parm->pbuf = c2h_evt;
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, SET_DRV_EXTRA_CMD);
-
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
-
- return res;
-}
-
-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);
- u8 *c2h_evt;
- c2h_id_filter ccx_id_filter = rtw_hal_c2h_id_filter_ccx(adapter);
-
- evtpriv->c2h_wk_alive = true;
-
- while (!rtw_cbuf_empty(evtpriv->c2h_queue)) {
- c2h_evt = (u8 *)rtw_cbuf_pop(evtpriv->c2h_queue);
- if (c2h_evt) {
- /* This C2H event is read, clear it */
- c2h_evt_clear(adapter);
- } else {
- c2h_evt = kmalloc(16, GFP_ATOMIC);
- if (c2h_evt) {
- /* This C2H event is not read, read & clear now */
- if (c2h_evt_read_88xx(adapter, c2h_evt) != _SUCCESS) {
- kfree(c2h_evt);
- continue;
- }
- } else {
- continue;
- }
- }
-
- /* Special pointer to trigger c2h_evt_clear only */
- if ((void *)c2h_evt == (void *)evtpriv)
- continue;
-
- if (!rtw_hal_c2h_valid(adapter, c2h_evt)) {
- kfree(c2h_evt);
- continue;
- }
-
- if (ccx_id_filter(c2h_evt)) {
- /* Handle CCX report here */
- rtw_hal_c2h_handler(adapter, c2h_evt);
- kfree(c2h_evt);
- } else {
- /* Enqueue into cmd_thread for others */
- rtw_c2h_wk_cmd(adapter, 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:/* only primary padapter go to this cmd, but execute dynamic_chk_wk_hdl() for two interfaces */
- dynamic_chk_wk_hdl(padapter);
- 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);
- break;
- case DM_IN_LPS_WK_CID:
- rtw_dm_in_lps_hdl(padapter);
- break;
- case LPS_CHANGE_DTIM_CID:
- rtw_lps_change_dtim_hdl(padapter, (u8)pdrvextra_cmd->type);
- break;
- case CHECK_HIQ_WK_CID:
- rtw_chk_hi_queue_hdl(padapter);
- break;
- case RESET_SECURITYPRIV:
- rtw_reset_securitypriv(padapter);
- break;
- case FREE_ASSOC_RESOURCES:
- rtw_free_assoc_resources(padapter, 1);
- break;
- case C2H_WK_CID:
- rtw_hal_set_hwreg_with_buf(padapter, HW_VAR_C2H_HANDLE,
- pdrvextra_cmd->pbuf, pdrvextra_cmd->size);
- break;
- case DM_RA_MSK_WK_CID:
- rtw_dm_ra_mask_hdl(padapter, (struct sta_info *)pdrvextra_cmd->pbuf);
- break;
- case BTINFO_WK_CID:
- rtw_btinfo_hdl(padapter, pdrvextra_cmd->pbuf, pdrvextra_cmd->size);
- break;
- default:
- break;
- }
-
- if (pdrvextra_cmd->pbuf && pdrvextra_cmd->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;
- }
- /* 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->parmbuf)
- goto exit;
-
- if (pcmd->res != H2C_SUCCESS)
- _set_timer(&pmlmepriv->assoc_timer, 1);
-
- timer_delete_sync(&pmlmepriv->assoc_timer);
-
- spin_lock_bh(&pmlmepriv->lock);
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- psta = rtw_get_stainfo(&padapter->stapriv, pnetwork->mac_address);
- if (!psta) {
- psta = rtw_alloc_stainfo(&padapter->stapriv, pnetwork->mac_address);
- 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);
- /* pwlan->fixed = true; */
-
- /* list_add_tail(&(pwlan->list), &pmlmepriv->scanned_queue.queue); */
-
- /* copy pdev_network information to pmlmepriv->cur_network */
- 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);
-exit:
- 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/rtl8723bs/core/rtw_efuse.c b/drivers/staging/rtl8723bs/core/rtw_efuse.c
deleted file mode 100644
index 168ecb7a998f..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_efuse.c
+++ /dev/null
@@ -1,253 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <hal_data.h>
-#include <linux/jiffies.h>
-
-/* 11/16/2008 MH Add description. Get current efuse area enabled word!!. */
-u8
-rtw_efuse_calculate_word_counts(u8 word_en)
-{
- u8 word_cnts = 0;
-
- if (!(word_en & BIT(0)))
- word_cnts++; /* 0 : write enable */
- if (!(word_en & BIT(1)))
- word_cnts++;
- if (!(word_en & BIT(2)))
- word_cnts++;
- if (!(word_en & BIT(3)))
- word_cnts++;
- return word_cnts;
-}
-
-/*-----------------------------------------------------------------------------
- * Function: rtw_efuse_read_1_byte
- *
- * Overview: Copy from WMAC fot EFUSE read 1 byte.
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 09/23/2008 MHC Copy from WMAC.
- *
- */
-u8 rtw_efuse_read_1_byte(struct adapter *Adapter, u16 Address)
-{
- u8 Bytetemp = {0x00};
- u8 temp = {0x00};
- u32 k = 0;
- u16 contentLen = 0;
-
- Hal_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_EFUSE_REAL_CONTENT_LEN, &contentLen);
-
- if (Address < contentLen) {/* E-fuse 512Byte */
- /* Write E-fuse Register address bit0~7 */
- temp = Address & 0xFF;
- rtw_write8(Adapter, EFUSE_CTRL + 1, temp);
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL + 2);
- /* Write E-fuse Register address bit8~9 */
- temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC);
- rtw_write8(Adapter, EFUSE_CTRL + 2, temp);
-
- /* Write 0x30[31]= 0 */
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL + 3);
- temp = Bytetemp & 0x7F;
- rtw_write8(Adapter, EFUSE_CTRL + 3, temp);
-
- /* Wait Write-ready (0x30[31]= 1) */
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL + 3);
- while (!(Bytetemp & 0x80)) {
- Bytetemp = rtw_read8(Adapter, EFUSE_CTRL + 3);
- k++;
- if (k == 1000)
- break;
- }
- return rtw_read8(Adapter, EFUSE_CTRL);
- } else {
- return 0xFF;
- }
-} /* rtw_efuse_read_1_byte */
-
-/* 11/16/2008 MH Read one byte from real Efuse. */
-u8 rtw_efuse_one_byte_read(struct adapter *padapter, u16 addr, u8 *data)
-{
- u32 tmpidx = 0;
- u8 bResult;
- u8 readbyte;
-
- /* <20130121, Kordan> For SMIC EFUSE specificatoin. */
- /* 0x34[11]: SW force PGMEN input of efuse to high. (for the bank selected by 0x34[9:8]) */
- /* PHY_SetMacReg(padapter, 0x34, BIT11, 0); */
- rtw_write16(padapter, 0x34, rtw_read16(padapter, 0x34) & (~BIT(11)));
-
- /* -----------------e-fuse reg ctrl --------------------------------- */
- /* address */
- rtw_write8(padapter, EFUSE_CTRL + 1, (u8)(addr & 0xff));
- rtw_write8(padapter, EFUSE_CTRL + 2, ((u8)((addr >> 8) & 0x03)) |
- (rtw_read8(padapter, EFUSE_CTRL + 2) & 0xFC));
-
- /* rtw_write8(padapter, EFUSE_CTRL+3, 0x72); read cmd */
- /* Write bit 32 0 */
- readbyte = rtw_read8(padapter, EFUSE_CTRL + 3);
- rtw_write8(padapter, EFUSE_CTRL + 3, (readbyte & 0x7f));
-
- while (!(0x80 & rtw_read8(padapter, EFUSE_CTRL + 3)) && (tmpidx < 1000)) {
- mdelay(1);
- tmpidx++;
- }
- if (tmpidx < 100) {
- *data = rtw_read8(padapter, EFUSE_CTRL);
- bResult = true;
- } else {
- *data = 0xff;
- bResult = false;
- }
-
- return bResult;
-}
-
-/*-----------------------------------------------------------------------------
- * Function: Efuse_ReadAllMap
- *
- * Overview: Read All Efuse content
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 11/11/2008 MHC Create Version 0.
- *
- */
-static void Efuse_ReadAllMap(struct adapter *padapter, u8 efuseType, u8 *Efuse)
-{
- u16 mapLen = 0;
-
- Hal_EfusePowerSwitch(padapter, true);
-
- Hal_GetEfuseDefinition(padapter, efuseType, TYPE_EFUSE_MAP_LEN, &mapLen);
-
- Hal_ReadEFuse(padapter, efuseType, 0, mapLen, Efuse);
-
- Hal_EfusePowerSwitch(padapter, false);
-}
-
-/*-----------------------------------------------------------------------------
- * Function: efuse_ShadowRead1Byte
- * efuse_ShadowRead2Byte
- * efuse_ShadowRead4Byte
- *
- * Overview: Read from efuse init map by one/two/four bytes !!!!!
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 11/12/2008 MHC Create Version 0.
- *
- */
-static void efuse_ShadowRead1Byte(struct adapter *padapter, u16 Offset, u8 *Value)
-{
- struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-
- *Value = pEEPROM->efuse_eeprom_data[Offset];
-
-} /* EFUSE_ShadowRead1Byte */
-
-/* Read Two Bytes */
-static void efuse_ShadowRead2Byte(struct adapter *padapter, u16 Offset, u16 *Value)
-{
- struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-
- *Value = pEEPROM->efuse_eeprom_data[Offset];
- *Value |= pEEPROM->efuse_eeprom_data[Offset + 1] << 8;
-
-} /* EFUSE_ShadowRead2Byte */
-
-/* Read Four Bytes */
-static void efuse_ShadowRead4Byte(struct adapter *padapter, u16 Offset, u32 *Value)
-{
- struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-
- *Value = pEEPROM->efuse_eeprom_data[Offset];
- *Value |= pEEPROM->efuse_eeprom_data[Offset + 1] << 8;
- *Value |= pEEPROM->efuse_eeprom_data[Offset + 2] << 16;
- *Value |= pEEPROM->efuse_eeprom_data[Offset + 3] << 24;
-
-} /* efuse_ShadowRead4Byte */
-
-/*-----------------------------------------------------------------------------
- * Function: rtw_efuse_shadow_map_update
- *
- * Overview: Transfer current EFUSE content to shadow init and modify map.
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 11/13/2008 MHC Create Version 0.
- *
- */
-void rtw_efuse_shadow_map_update(struct adapter *padapter, u8 efuseType)
-{
- struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
- u16 mapLen = 0;
-
- Hal_GetEfuseDefinition(padapter, efuseType, TYPE_EFUSE_MAP_LEN, &mapLen);
-
- if (pEEPROM->bautoload_fail_flag)
- memset(pEEPROM->efuse_eeprom_data, 0xFF, mapLen);
- else
- Efuse_ReadAllMap(padapter, efuseType, pEEPROM->efuse_eeprom_data);
-
- /* PlatformMoveMemory((void *)&pHalData->EfuseMap[EFUSE_MODIFY_MAP][0], */
- /* void *)&pHalData->EfuseMap[EFUSE_INIT_MAP][0], mapLen); */
-} /* rtw_efuse_shadow_map_update */
-
-/*-----------------------------------------------------------------------------
- * Function: rtw_efuse_shadow_read
- *
- * Overview: Read from efuse init map !!!!!
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- * When Who Remark
- * 11/12/2008 MHC Create Version 0.
- *
- */
-void rtw_efuse_shadow_read(struct adapter *padapter, u8 Type, u16 Offset, u32 *Value)
-{
- if (Type == 1)
- efuse_ShadowRead1Byte(padapter, Offset, (u8 *)Value);
- else if (Type == 2)
- efuse_ShadowRead2Byte(padapter, Offset, (u16 *)Value);
- else if (Type == 4)
- efuse_ShadowRead4Byte(padapter, Offset, (u32 *)Value);
-
-} /* rtw_efuse_shadow_read*/
diff --git a/drivers/staging/rtl8723bs/core/rtw_ieee80211.c b/drivers/staging/rtl8723bs/core/rtw_ieee80211.c
deleted file mode 100644
index 66f476a46aad..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_ieee80211.c
+++ /dev/null
@@ -1,1199 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-#include <linux/hex.h>
-#include <linux/of.h>
-#include <linux/unaligned.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)
-{
- static const 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)
-{
- while (*rate) {
- u8 r = *rate & 0x7f;
-
- if (r == 2 || r == 4 || r == 11 || r == 22)
- return true;
- rate++;
- }
-
- return false;
-}
-
-bool rtw_is_cckratesonly_included(u8 *rate)
-{
- while (*rate) {
- u8 r = *rate & 0x7f;
-
- if (r != 2 && r != 4 && r != 11 && r != 22)
- return false;
- rate++;
- }
-
- return true;
-}
-
-int rtw_check_network_type(unsigned char *rate, 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;
- if (rtw_is_cckrates_included(rate))
- return WIRELESS_11BG;
- return WIRELESS_11G;
-}
-
-u8 *rtw_set_fixed_ie(unsigned char *pbuf, unsigned int len, unsigned char *source,
- unsigned int *frlen)
-{
- memcpy(pbuf, source, len);
- *frlen = *frlen + len;
- return pbuf + len;
-}
-
-/* rtw_set_ie will update frame length */
-u8 *rtw_set_ie(u8 *pbuf,
- signed int index,
- uint len,
- u8 *source,
- uint *frlen) /* frame length */
-{
- *pbuf = (u8)index;
-
- *(pbuf + 1) = (u8)len;
-
- if (len > 0)
- memcpy(pbuf + 2, 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, signed int index, signed int *len, signed int limit)
-{
- signed int tmp, i;
- u8 *p;
-
- if (limit < 2)
- return NULL;
-
- p = pbuf;
- i = 0;
- *len = 0;
- while (i + 2 <= limit) {
- tmp = *(p + 1);
- if (i + 2 + tmp > limit)
- break;
-
- if (*p == index) {
- *len = tmp;
- return p;
- }
-
- p += (tmp + 2);
- i += (tmp + 2);
- }
- return NULL;
-}
-
-/**
- * rtw_get_ie_ex - Search specific IE from a series of IEs
- * @in_ie: Address of IEs to search
- * @in_len: Length limit from in_ie
- * @eid: Element ID to match
- * @oui: OUI to match
- * @oui_len: OUI length
- * @ie: If not NULL and the specific IE is found, the IE will be copied to the buf starting from the specific IE
- * @ielen: If not NULL and the specific IE is found, will set to the length of the entire IE
- *
- * Returns: The address of the specific IE found, or NULL
- */
-u8 *rtw_get_ie_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui, u8 oui_len, u8 *ie, uint *ielen)
-{
- uint cnt;
- u8 *target_ie = NULL;
-
- if (ielen)
- *ielen = 0;
-
- if (!in_ie || in_len <= 0)
- return target_ie;
-
- cnt = 0;
-
- while (cnt + 2 <= in_len) {
- u8 ie_len = in_ie[cnt + 1];
-
- if (cnt + 2 + ie_len > in_len)
- break;
-
- if (eid == in_ie[cnt] &&
- (!oui || (ie_len >= oui_len && !memcmp(&in_ie[cnt + 2], oui, oui_len)))) {
- target_ie = &in_ie[cnt];
-
- if (ie)
- memcpy(ie, &in_ie[cnt], ie_len + 2);
-
- if (ielen)
- *ielen = ie_len + 2;
-
- break;
- }
- cnt += ie_len + 2; /* goto next */
- }
-
- return target_ie;
-}
-
-/**
- * rtw_ies_remove_ie - Find matching IEs and remove
- * @ies: Address of IEs to search
- * @ies_len: Pointer of length of ies, will update to new length
- * @offset: The offset to start search
- * @eid: Element ID to match
- * @oui: OUI to match
- * @oui_len: OUI length
- *
- * Returns: _SUCCESS: ies is updated, _FAIL: not updated
- */
-int rtw_ies_remove_ie(u8 *ies, uint *ies_len, uint offset, u8 eid, u8 *oui, u8 oui_len)
-{
- int ret = _FAIL;
- u8 *target_ie;
- u32 target_ielen;
- u8 *start;
- uint search_len;
-
- if (!ies || !ies_len || *ies_len <= offset)
- goto exit;
-
- start = ies + offset;
- search_len = *ies_len - offset;
-
- while (1) {
- target_ie = rtw_get_ie_ex(start, search_len, eid, oui, oui_len, NULL, &target_ielen);
- if (target_ie && target_ielen) {
- u8 *remain_ies = target_ie + target_ielen;
- uint remain_len = search_len - (remain_ies - start);
-
- memcpy(target_ie, remain_ies, remain_len);
- *ies_len = *ies_len - target_ielen;
- ret = _SUCCESS;
-
- start = target_ie;
- search_len = remain_len;
- } else {
- break;
- }
- }
-exit:
- return ret;
-}
-
-void rtw_set_supported_rate(u8 *supported_rates, uint mode)
-{
- memset(supported_rates, 0, NDIS_802_11_LENGTH_RATES_EX);
-
- switch (mode) {
- case WIRELESS_11B:
- memcpy(supported_rates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN);
- break;
-
- case WIRELESS_11G:
- memcpy(supported_rates, WIFI_OFDMRATES, IEEE80211_NUM_OFDM_RATESLEN);
- break;
-
- case WIRELESS_11BG:
- case WIRELESS_11G_24N:
- case WIRELESS_11_24N:
- case WIRELESS_11BG_24N:
- memcpy(supported_rates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN);
- memcpy(supported_rates + IEEE80211_CCK_RATE_LEN, WIFI_OFDMRATES, IEEE80211_NUM_OFDM_RATESLEN);
- break;
- }
-}
-
-uint rtw_get_rateset_len(u8 *rateset)
-{
- uint i;
-
- for (i = 0; i < 13; i++)
- if (rateset[i] == 0)
- break;
- return i;
-}
-
-int rtw_generate_ie(struct registry_priv *pregistrypriv)
-{
- u8 wireless_mode;
- int sz = 0, rate_len;
- 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.beacon_period);/* BCN_INTERVAL; */
- sz += 2;
- ie += 2;
-
- /* capability info */
- *(u16 *)ie = 0;
-
- *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_IBSS);
-
- if (pregistrypriv->preamble == PREAMBLE_SHORT)
- *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_SHORT_PREAMBLE);
-
- if (pdev_network->privacy)
- *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY);
-
- sz += 2;
- ie += 2;
-
- /* SSID */
- ie = rtw_set_ie(ie, WLAN_EID_SSID, pdev_network->ssid.ssid_length, pdev_network->ssid.ssid, &sz);
-
- /* supported rates */
- wireless_mode = pregistrypriv->wireless_mode;
-
- rtw_set_supported_rate(pdev_network->supported_rates, wireless_mode);
-
- rate_len = rtw_get_rateset_len(pdev_network->supported_rates);
-
- if (rate_len > 8) {
- ie = rtw_set_ie(ie, WLAN_EID_SUPP_RATES, 8, pdev_network->supported_rates, &sz);
- /* ie = rtw_set_ie(ie, WLAN_EID_EXT_SUPP_RATES, (rate_len - 8), (pdev_network->supported_rates + 8), &sz); */
- } else {
- ie = rtw_set_ie(ie, WLAN_EID_SUPP_RATES, rate_len, pdev_network->supported_rates, &sz);
- }
-
- /* DS parameter set */
- ie = rtw_set_ie(ie, WLAN_EID_DS_PARAMS, 1, (u8 *)&(pdev_network->configuration.ds_config), &sz);
-
- /* IBSS Parameter Set */
-
- ie = rtw_set_ie(ie, WLAN_EID_IBSS_PARAMS, 2, (u8 *)&(pdev_network->configuration.atim_window), &sz);
-
- if (rate_len > 8)
- ie = rtw_set_ie(ie, WLAN_EID_EXT_SUPP_RATES, (rate_len - 8), (pdev_network->supported_rates + 8), &sz);
-
- /* HT Cap. */
- if ((pregistrypriv->wireless_mode & WIRELESS_11_24N) &&
- pregistrypriv->ht_enable) {
- /* todo: */
- }
-
- /* pdev_network->ie_length = sz; update ie_length */
-
- /* return _SUCCESS; */
-
- return sz;
-}
-
-unsigned char *rtw_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit)
-{
- int len;
- u16 val16;
- unsigned char wpa_oui_type[] = {0x00, 0x50, 0xf2, 0x01};
- u8 *pbuf = pie;
- int limit_new = limit;
- __le16 le_tmp;
-
- while (1) {
- pbuf = rtw_get_ie(pbuf, WLAN_EID_VENDOR_SPECIFIC, &len, limit_new);
-
- if (pbuf) {
- if (len < 6)
- goto check_next_ie;
-
- /* 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;
-
- } else {
- *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, WLAN_EID_RSN, 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 != WLAN_EID_VENDOR_SPECIFIC) ||
- (*(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 = le16_to_cpu(*(u16*)pos); */
- 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 != WLAN_EID_RSN) || (*(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 = le16_to_cpu(*(u16*)pos); */
- 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_wapi_ie(u8 *in_ie, uint in_len, u8 *wapi_ie, u16 *wapi_len)
-{
- int len = 0;
- u8 authmode;
- uint cnt;
- u8 wapi_oui1[4] = {0x0, 0x14, 0x72, 0x01};
- u8 wapi_oui2[4] = {0x0, 0x14, 0x72, 0x02};
-
- if (wapi_len)
- *wapi_len = 0;
-
- if (!in_ie || in_len <= 0)
- return len;
-
- cnt = (_TIMESTAMP_ + _BEACON_ITERVAL_ + _CAPABILITY_);
-
- while (cnt < in_len) {
- if (cnt + 2 > in_len)
- break;
- if (cnt + 2 + in_ie[cnt + 1] > in_len)
- break;
- authmode = in_ie[cnt];
-
- if (authmode == WLAN_EID_BSS_AC_ACCESS_DELAY &&
- in_ie[cnt + 1] >= 8 &&
- (!memcmp(&in_ie[cnt + 6], wapi_oui1, 4) ||
- !memcmp(&in_ie[cnt + 6], wapi_oui2, 4))) {
- if (wapi_ie)
- memcpy(wapi_ie, &in_ie[cnt], in_ie[cnt + 1] + 2);
-
- if (wapi_len)
- *wapi_len = in_ie[cnt + 1] + 2;
- }
-
- cnt += in_ie[cnt + 1] + 2; /* get next */
- }
-
- if (wapi_len)
- len = *wapi_len;
-
- return len;
-}
-
-void 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) {
- if (cnt + 2 > in_len)
- break;
- if (cnt + 2 + in_ie[cnt + 1] > in_len)
- break;
- authmode = in_ie[cnt];
-
- if ((authmode == WLAN_EID_VENDOR_SPECIFIC) &&
- in_ie[cnt + 1] >= 4 &&
- (!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;
- } else if (authmode == WLAN_EID_RSN) {
- 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 */
- }
-}
-
-/**
- * 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 (cnt + 2 > in_len)
- break;
-
- if (in_ie[cnt + 1] + 2 > in_len - cnt)
- break;
-
- if ((eid == WLAN_EID_VENDOR_SPECIFIC) && (in_ie[cnt + 1] >= 4) &&
- (!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_ielen < 6)
- return attr_ptr;
-
- if ((wps_ie[0] != WLAN_EID_VENDOR_SPECIFIC) ||
- (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) */
- if (attr_ptr + 4 > wps_ie + wps_ielen)
- break;
- u16 attr_id = get_unaligned_be16(attr_ptr);
- u16 attr_data_len = get_unaligned_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 = get_unaligned_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;
-}
-
-/**
- * rtw_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_result 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 PARSE_FAILED;
-
- 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_CAPABILITY:
- 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;
- case WLAN_EID_VHT_CAPABILITY:
- elems->vht_capabilities = pos;
- elems->vht_capabilities_len = elen;
- break;
- case WLAN_EID_VHT_OPERATION:
- elems->vht_operation = pos;
- elems->vht_operation_len = elen;
- break;
- case WLAN_EID_OPMODE_NOTIF:
- elems->vht_op_mode_notify = pos;
- elems->vht_op_mode_notify_len = elen;
- break;
- default:
- unknown++;
- break;
- }
-
- left -= elen;
- pos += elen;
- }
-
- if (left)
- return PARSE_FAILED;
-
- return unknown ? PARSE_UNKNOWN : PARSE_OK;
-}
-
-void rtw_macaddr_cfg(struct device *dev, u8 *mac_addr)
-{
- u8 mac[ETH_ALEN];
- struct device_node *np = dev->of_node;
- const unsigned char *addr;
- int len;
-
- 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)) {
- addr = of_get_property(np, "local-mac-address", &len);
-
- if (addr && len == ETH_ALEN)
- ether_addr_copy(mac_addr, addr);
- else
- eth_random_addr(mac_addr);
- }
-}
-
-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.ie_length - 12);
-
- if (pbuf && (wpa_ielen > 0)) {
- if (rtw_parse_wpa_ie(pbuf, wpa_ielen + 2, &group_cipher,
- &pairwise_cipher, &is8021x) == _SUCCESS) {
- pnetwork->bcn_info.pairwise_cipher = pairwise_cipher;
- pnetwork->bcn_info.group_cipher = group_cipher;
- pnetwork->bcn_info.is_8021x = is8021x;
- ret = _SUCCESS;
- }
- } else {
- pbuf = rtw_get_wpa2_ie(&pnetwork->network.ies[12], &wpa_ielen,
- pnetwork->network.ie_length - 12);
-
- if (pbuf && (wpa_ielen > 0)) {
- if (rtw_parse_wpa2_ie(pbuf, wpa_ielen + 2, &group_cipher,
- &pairwise_cipher, &is8021x) == _SUCCESS) {
- pnetwork->bcn_info.pairwise_cipher = pairwise_cipher;
- pnetwork->bcn_info.group_cipher = group_cipher;
- pnetwork->bcn_info.is_8021x = is8021x;
- ret = _SUCCESS;
- }
- }
- }
-
- return ret;
-}
-
-void rtw_get_bcn_info(struct wlan_network *pnetwork)
-{
- unsigned short cap = 0;
- u8 bencrypt = 0;
- /* u8 wpa_ie[255], rsn_ie[255]; */
- 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;
- __le16 le_cap;
-
- memcpy((u8 *)&le_cap, rtw_get_capability_from_ie(pnetwork->network.ies), 2);
- cap = le16_to_cpu(le_cap);
- if (cap & WLAN_CAPABILITY_PRIVACY) {
- bencrypt = 1;
- pnetwork->network.privacy = 1;
- } else {
- pnetwork->bcn_info.encryp_protocol = ENCRYP_PROTOCOL_OPENSYS;
- }
- rtw_get_sec_ie(pnetwork->network.ies, pnetwork->network.ie_length, NULL, &rsn_len, NULL, &wpa_len);
-
- if (rsn_len > 0) {
- pnetwork->bcn_info.encryp_protocol = ENCRYP_PROTOCOL_WPA2;
- } else if (wpa_len > 0) {
- pnetwork->bcn_info.encryp_protocol = ENCRYP_PROTOCOL_WPA;
- } else {
- if (bencrypt)
- pnetwork->bcn_info.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_, WLAN_EID_HT_CAPABILITY, &len, pnetwork->network.ie_length - _FIXED_IE_LENGTH_);
- if (p && len > 0) {
- pht_cap = (struct ieee80211_ht_cap *)(p + 2);
- pnetwork->bcn_info.ht_cap_info = le16_to_cpu(pht_cap->cap_info);
- } else {
- pnetwork->bcn_info.ht_cap_info = 0;
- }
- /* parsing HT_INFO_IE */
- p = rtw_get_ie(pnetwork->network.ies + _FIXED_IE_LENGTH_, WLAN_EID_HT_OPERATION, &len, pnetwork->network.ie_length - _FIXED_IE_LENGTH_);
- if (p && len > 0) {
- pht_info = (struct HT_info_element *)(p + 2);
- pnetwork->bcn_info.ht_info_infos_0 = pht_info->infos[0];
- } else {
- pnetwork->bcn_info.ht_info_infos_0 = 0;
- }
-}
-
-/* show MCS rate, unit: 100Kbps */
-u16 rtw_mcs_rate(u8 bw_40MHz, u8 short_GI, unsigned char *MCS_rate)
-{
- u16 max_rate = 0;
-
- if (MCS_rate[0] & BIT(7))
- max_rate = (bw_40MHz) ? ((short_GI) ? 1500 : 1350) : ((short_GI) ? 722 : 650);
- else if (MCS_rate[0] & BIT(6))
- max_rate = (bw_40MHz) ? ((short_GI) ? 1350 : 1215) : ((short_GI) ? 650 : 585);
- else if (MCS_rate[0] & BIT(5))
- max_rate = (bw_40MHz) ? ((short_GI) ? 1200 : 1080) : ((short_GI) ? 578 : 520);
- else if (MCS_rate[0] & BIT(4))
- max_rate = (bw_40MHz) ? ((short_GI) ? 900 : 810) : ((short_GI) ? 433 : 390);
- else if (MCS_rate[0] & BIT(3))
- max_rate = (bw_40MHz) ? ((short_GI) ? 600 : 540) : ((short_GI) ? 289 : 260);
- else if (MCS_rate[0] & BIT(2))
- max_rate = (bw_40MHz) ? ((short_GI) ? 450 : 405) : ((short_GI) ? 217 : 195);
- else if (MCS_rate[0] & BIT(1))
- max_rate = (bw_40MHz) ? ((short_GI) ? 300 : 270) : ((short_GI) ? 144 : 130);
- else if (MCS_rate[0] & BIT(0))
- max_rate = (bw_40MHz) ? ((short_GI) ? 150 : 135) : ((short_GI) ? 72 : 65);
-
- return max_rate;
-}
-
-int rtw_action_frame_parse(const u8 *frame, u32 frame_len, u8 *category, u8 *action)
-{
- const u8 *frame_body = frame + sizeof(struct ieee80211_hdr_3addr);
- u16 fc;
- u8 c;
- u8 a = ACT_PUBLIC_MAX;
-
- fc = le16_to_cpu(((struct ieee80211_hdr_3addr *)frame)->frame_control);
-
- if ((fc & (IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) !=
- (IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION))
- return false;
-
- c = frame_body[0];
-
- switch (c) {
- case RTW_WLAN_CATEGORY_P2P: /* vendor-specific */
- break;
- default:
- a = frame_body[1];
- }
-
- if (category)
- *category = c;
- if (action)
- *action = a;
-
- return true;
-}
-
-static const char * const _action_public_str[] = {
- "ACT_PUB_BSSCOEXIST",
- "ACT_PUB_DSE_ENABLE",
- "ACT_PUB_DSE_DEENABLE",
- "ACT_PUB_DSE_REG_LOCATION",
- "ACT_PUB_EXT_CHL_SWITCH",
- "ACT_PUB_DSE_MSR_REQ",
- "ACT_PUB_DSE_MSR_RPRT",
- "ACT_PUB_MP",
- "ACT_PUB_DSE_PWR_CONSTRAINT",
- "ACT_PUB_VENDOR",
- "ACT_PUB_GAS_INITIAL_REQ",
- "ACT_PUB_GAS_INITIAL_RSP",
- "ACT_PUB_GAS_COMEBACK_REQ",
- "ACT_PUB_GAS_COMEBACK_RSP",
- "ACT_PUB_TDLS_DISCOVERY_RSP",
- "ACT_PUB_LOCATION_TRACK",
- "ACT_PUB_RSVD",
-};
-
-const char *action_public_str(u8 action)
-{
- action = (action >= ACT_PUBLIC_MAX) ? ACT_PUBLIC_MAX : action;
- return _action_public_str[action];
-}
diff --git a/drivers/staging/rtl8723bs/core/rtw_io.c b/drivers/staging/rtl8723bs/core/rtw_io.c
deleted file mode 100644
index 49c9e4cb8bf6..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_io.c
+++ /dev/null
@@ -1,145 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-/*
- * The purpose of rtw_io.c
- *
- * a. provides the API
- *
- * b. provides the protocol engine
- *
- * c. provides the software interface between caller and the hardware interface
- *
- * jackson@realtek.com.tw
- */
-
-#include <drv_types.h>
-
-u8 rtw_read8(struct adapter *adapter, u32 addr)
-{
- struct io_priv *pio_priv = &adapter->iopriv;
- struct intf_hdl *pintfhdl = &pio_priv->intf;
- u8 (*_read8)(struct intf_hdl *pintfhdl, u32 addr);
-
- _read8 = pintfhdl->io_ops._read8;
-
- return _read8(pintfhdl, addr);
-}
-
-u16 rtw_read16(struct adapter *adapter, u32 addr)
-{
- struct io_priv *pio_priv = &adapter->iopriv;
- struct intf_hdl *pintfhdl = &pio_priv->intf;
- u16 (*_read16)(struct intf_hdl *pintfhdl, u32 addr);
-
- _read16 = pintfhdl->io_ops._read16;
-
- return _read16(pintfhdl, addr);
-}
-
-u32 rtw_read32(struct adapter *adapter, u32 addr)
-{
- struct io_priv *pio_priv = &adapter->iopriv;
- struct intf_hdl *pintfhdl = &pio_priv->intf;
- u32 (*_read32)(struct intf_hdl *pintfhdl, u32 addr);
-
- _read32 = pintfhdl->io_ops._read32;
-
- return _read32(pintfhdl, addr);
-}
-
-int rtw_write8(struct adapter *adapter, u32 addr, u8 val)
-{
- struct io_priv *pio_priv = &adapter->iopriv;
- struct intf_hdl *pintfhdl = &pio_priv->intf;
- int (*_write8)(struct intf_hdl *pintfhdl, u32 addr, u8 val);
- int ret;
-
- _write8 = pintfhdl->io_ops._write8;
-
- ret = _write8(pintfhdl, addr, val);
-
- return RTW_STATUS_CODE(ret);
-}
-
-int rtw_write16(struct adapter *adapter, u32 addr, u16 val)
-{
- struct io_priv *pio_priv = &adapter->iopriv;
- struct intf_hdl *pintfhdl = &pio_priv->intf;
- int (*_write16)(struct intf_hdl *pintfhdl, u32 addr, u16 val);
- int ret;
-
- _write16 = pintfhdl->io_ops._write16;
-
- ret = _write16(pintfhdl, addr, val);
- return RTW_STATUS_CODE(ret);
-}
-
-int rtw_write32(struct adapter *adapter, u32 addr, u32 val)
-{
- struct io_priv *pio_priv = &adapter->iopriv;
- struct intf_hdl *pintfhdl = &pio_priv->intf;
- int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val);
- int ret;
-
- _write32 = pintfhdl->io_ops._write32;
-
- ret = _write32(pintfhdl, addr, val);
-
- return RTW_STATUS_CODE(ret);
-}
-
-u32 rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem)
-{
- u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
- struct io_priv *pio_priv = &adapter->iopriv;
- struct intf_hdl *pintfhdl = &pio_priv->intf;
-
- _write_port = pintfhdl->io_ops._write_port;
-
- return _write_port(pintfhdl, addr, cnt, pmem);
-}
-
-int rtw_init_io_priv(struct adapter *padapter,
- void (*set_intf_ops)(struct adapter *padapter,
- struct _io_ops *pops))
-{
- struct io_priv *piopriv = &padapter->iopriv;
- struct intf_hdl *pintf = &piopriv->intf;
-
- if (!set_intf_ops)
- return _FAIL;
-
- piopriv->padapter = padapter;
- pintf->padapter = padapter;
- pintf->pintf_dev = adapter_to_dvobj(padapter);
-
- set_intf_ops(padapter, &pintf->io_ops);
-
- return _SUCCESS;
-}
-
-/*
- * Increase and check if the continual_io_error of this @param dvobjprive
- * is larger than MAX_CONTINUAL_IO_ERR
- * @return true:
- * @return false:
- */
-int rtw_inc_and_chk_continual_io_error(struct dvobj_priv *dvobj)
-{
- int error_count = atomic_inc_return(&dvobj->continual_io_error);
-
- if (error_count > MAX_CONTINUAL_IO_ERR)
- return true;
-
- return false;
-}
-
-/* Set the continual_io_error of this @param dvobjprive to 0 */
-void rtw_reset_continual_io_error(struct dvobj_priv *dvobj)
-{
- atomic_set(&dvobj->continual_io_error, 0);
-}
diff --git a/drivers/staging/rtl8723bs/core/rtw_ioctl_set.c b/drivers/staging/rtl8723bs/core/rtw_ioctl_set.c
deleted file mode 100644
index 2739d0e99098..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_ioctl_set.c
+++ /dev/null
@@ -1,494 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-
-u8 rtw_validate_bssid(u8 *bssid)
-{
- u8 ret = true;
-
- if (is_zero_ether_addr(bssid) ||
- is_broadcast_ether_addr(bssid) ||
- is_multicast_ether_addr(bssid))
- ret = false;
-
- return ret;
-}
-
-u8 rtw_validate_ssid(struct ndis_802_11_ssid *ssid)
-{
- u8 ret = true;
-
- if (ssid->ssid_length > 32) {
- ret = false;
- goto exit;
- }
-
-exit:
- return ret;
-}
-
-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 = get_next(phead);
-
- 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->link_detect_info.busy_traffic || rtw_to_roam(padapter) > 0) {
- /* submit site_survey_cmd */
- ret = rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0);
- if (ret != _SUCCESS)
- pmlmepriv->to_join = false;
-
- } else {
- pmlmepriv->to_join = false;
- ret = _FAIL;
- }
-
- goto exit;
- } 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.mac_address;
-
- 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) {
- ret = false;
- goto exit;
- }
-
- 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->link_detect_info.busy_traffic ||
- rtw_to_roam(padapter) > 0) {
- ret = rtw_sitesurvey_cmd(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0);
- if (ret != _SUCCESS)
- pmlmepriv->to_join = false;
-
- } else {
- ret = _FAIL;
- pmlmepriv->to_join = false;
- }
- }
- }
- }
-
-exit:
- return ret;
-}
-
-u8 rtw_set_802_11_ssid(struct adapter *padapter, struct ndis_802_11_ssid *ssid)
-{
- u8 status = _SUCCESS;
-
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wlan_network *pnetwork = &pmlmepriv->cur_network;
-
- netdev_dbg(padapter->pnetdev, "set ssid [%s] fw_state = 0x%08x\n",
- ssid->ssid, get_fwstate(pmlmepriv));
-
- 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.ssid_length == ssid->ssid_length) &&
- (!memcmp(&pmlmepriv->assoc_ssid.ssid, ssid->ssid, ssid->ssid_length))) {
- 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 (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
- status = _FAIL;
- goto release_mlme_lock;
- }
-
- if (!rtw_validate_ssid(ssid)) {
- 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_connect(struct adapter *padapter, u8 *bssid, struct ndis_802_11_ssid *ssid)
-{
- u8 status = _SUCCESS;
- bool bssid_valid = true;
- bool ssid_valid = true;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- if (!ssid || !rtw_validate_ssid(ssid))
- ssid_valid = false;
-
- if (!bssid || !rtw_validate_bssid(bssid))
- bssid_valid = false;
-
- if (!ssid_valid && !bssid_valid) {
- status = _FAIL;
- goto exit;
- }
-
- if (!padapter->hw_init_completed) {
- status = _FAIL;
- goto exit;
- }
-
- spin_lock_bh(&pmlmepriv->lock);
-
- netdev_dbg(padapter->pnetdev, FUNC_ADPT_FMT " fw_state = 0x%08x\n",
- FUNC_ADPT_ARG(padapter), get_fwstate(pmlmepriv));
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
- goto handle_tkip_countermeasure;
- else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
- goto release_mlme_lock;
-
-handle_tkip_countermeasure:
- if (rtw_handle_tkip_countermeasure(padapter, __func__) == _FAIL) {
- status = _FAIL;
- goto release_mlme_lock;
- }
-
- if (ssid && ssid_valid)
- memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(struct ndis_802_11_ssid));
- else
- memset(&pmlmepriv->assoc_ssid, 0, sizeof(struct ndis_802_11_ssid));
-
- if (bssid && bssid_valid) {
- memcpy(&pmlmepriv->assoc_bssid, bssid, ETH_ALEN);
- pmlmepriv->assoc_by_bssid = true;
- } else {
- 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 nl80211_iftype networktype)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wlan_network *cur_network = &pmlmepriv->cur_network;
- enum nl80211_iftype *pold_state = &(cur_network->network.infrastructure_mode);
-
- if (*pold_state != networktype) {
- if (*pold_state == NL80211_IFTYPE_AP) {
- /* change to other mode from AP mode */
- cur_network->join_res = -1;
-
- stop_ap_mode(padapter);
- }
-
- spin_lock_bh(&pmlmepriv->lock);
-
- if (check_fwstate(pmlmepriv, _FW_LINKED) || (*pold_state == NL80211_IFTYPE_ADHOC))
- 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 == NL80211_IFTYPE_STATION) || (*pold_state == NL80211_IFTYPE_ADHOC)) {
- 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 NL80211_IFTYPE_ADHOC:
- set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
- break;
-
- case NL80211_IFTYPE_STATION:
- set_fwstate(pmlmepriv, WIFI_STATION_STATE);
- break;
-
- case NL80211_IFTYPE_AP:
- set_fwstate(pmlmepriv, WIFI_AP_STATE);
- start_ap_mode(padapter);
- /* rtw_indicate_connect(padapter); */
-
- break;
-
- default:
- break;
- }
-
- /* SecClearAllKeys(adapter); */
-
- spin_unlock_bh(&pmlmepriv->lock);
- }
- return true;
-}
-
-u8 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_cmd(padapter);
- rtw_pwr_wakeup(padapter);
- }
-
- spin_unlock_bh(&pmlmepriv->lock);
-
- return true;
-}
-
-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->link_detect_info.busy_traffic) {
- /* Scan or linking is in progress, do nothing. */
- res = true;
-
- } else {
- if (rtw_is_scan_deny(padapter))
- return _SUCCESS;
-
- spin_lock_bh(&pmlmepriv->lock);
-
- res = rtw_sitesurvey_cmd(padapter, pssid, ssid_max_num, NULL, 0);
-
- spin_unlock_bh(&pmlmepriv->lock);
- }
-exit:
-
- return res;
-}
-
-u8 rtw_set_802_11_authentication_mode(struct adapter *padapter, enum ndis_802_11_authentication_mode authmode)
-{
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- int res;
- u8 ret;
-
- psecuritypriv->ndisauthtype = authmode;
-
- if (psecuritypriv->ndisauthtype > 3)
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_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)
-{
- signed int keyid, res;
- struct security_priv *psecuritypriv = &(padapter->securitypriv);
- u8 ret = _SUCCESS;
-
- keyid = wep->key_index & 0x3fffffff;
-
- if (keyid >= 4) {
- ret = false;
- goto exit;
- }
-
- switch (wep->key_length) {
- case 5:
- psecuritypriv->dot11_privacy_algrthm = _WEP40_;
- break;
- case 13:
- psecuritypriv->dot11_privacy_algrthm = _WEP104_;
- break;
- default:
- psecuritypriv->dot11_privacy_algrthm = _NO_PRIVACY_;
- break;
- }
-
- memcpy(&(psecuritypriv->dot11DefKey[keyid].skey[0]), &(wep->key_material), wep->key_length);
-
- psecuritypriv->dot11DefKeylen[keyid] = wep->key_length;
-
- psecuritypriv->dot11PrivacyKeyIndex = keyid;
-
- res = rtw_set_key(padapter, psecuritypriv, keyid, 1, true);
-
- 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;
- u16 rate = 0, max_rate = 0;
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
- struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
- struct sta_info *psta = NULL;
- u8 short_GI = 0;
-
- if (!check_fwstate(pmlmepriv, _FW_LINKED) &&
- !check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))
- return 0;
-
- psta = rtw_get_stainfo(&adapter->stapriv, get_bssid(pmlmepriv));
- if (!psta)
- return 0;
-
- short_GI = query_ra_short_GI(psta);
-
- if (is_supported_ht(psta->wireless_mode)) {
- max_rate = rtw_mcs_rate(psta->bw_mode == CHANNEL_WIDTH_40 ? 1 : 0,
- short_GI,
- psta->htpriv.ht_cap.mcs.rx_mask);
- } else {
- while ((pcur_bss->supported_rates[i] != 0) && (pcur_bss->supported_rates[i] != 0xFF)) {
- rate = pcur_bss->supported_rates[i]&0x7F;
- if (rate > max_rate)
- max_rate = rate;
- i++;
- }
-
- max_rate = max_rate*10/2;
- }
-
- return max_rate;
-}
diff --git a/drivers/staging/rtl8723bs/core/rtw_mlme.c b/drivers/staging/rtl8723bs/core/rtw_mlme.c
deleted file mode 100644
index fc46b33b836a..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_mlme.c
+++ /dev/null
@@ -1,2565 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <linux/etherdevice.h>
-#include <drv_types.h>
-#include <hal_btcoex.h>
-#include <linux/jiffies.h>
-
-static void _dynamic_check_timer_handler(struct timer_list *t)
-{
- struct adapter *adapter =
- timer_container_of(adapter, t, mlmepriv.dynamic_chk_timer);
-
- rtw_dynamic_check_timer_handler(adapter);
-
- _set_timer(&adapter->mlmepriv.dynamic_chk_timer, 2000);
-}
-
-static void _rtw_set_scan_deny_timer_hdl(struct timer_list *t)
-{
- struct adapter *adapter =
- timer_container_of(adapter, t, mlmepriv.set_scan_deny_timer);
-
- rtw_clear_scan_deny(adapter);
-}
-
-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_handler, 0);
- timer_setup(&pmlmepriv->set_scan_deny_timer,
- _rtw_set_scan_deny_timer_hdl, 0);
-}
-
-int rtw_init_mlme_priv(struct adapter *padapter)
-{
- int i;
- u8 *pbuf;
- struct wlan_network *pnetwork;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- int res = _SUCCESS;
-
- pmlmepriv->nic_hdl = (u8 *)padapter;
-
- pmlmepriv->pscanned = NULL;
- pmlmepriv->fw_state = WIFI_STATION_STATE; /* Must sync with rtw_wdev_alloc() */
- pmlmepriv->cur_network.network.infrastructure_mode = NL80211_IFTYPE_UNSPECIFIED;
- pmlmepriv->scan_mode = SCAN_ACTIVE;/* 1: active, 0: passive. Maybe someday we should rename this variable to "active_mode" (Jeff) */
-
- spin_lock_init(&pmlmepriv->lock);
- INIT_LIST_HEAD(&pmlmepriv->free_bss_pool.queue);
- spin_lock_init(&pmlmepriv->free_bss_pool.lock);
- INIT_LIST_HEAD(&pmlmepriv->scanned_queue.queue);
- spin_lock_init(&pmlmepriv->scanned_queue.lock);
-
- memset(&pmlmepriv->assoc_ssid, 0, sizeof(struct ndis_802_11_ssid));
-
- pbuf = vzalloc(array_size(MAX_BSS_CNT, sizeof(struct wlan_network)));
-
- if (!pbuf) {
- res = _FAIL;
- goto exit;
- }
- 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_clear_scan_deny(padapter);
-
- #define RTW_ROAM_SCAN_RESULT_EXP_MS 5000
- #define RTW_ROAM_RSSI_DIFF_TH 10
- #define RTW_ROAM_SCAN_INTERVAL_MS 10000
-
- pmlmepriv->roam_flags = 0
- | RTW_ROAM_ON_EXPIRED
- | RTW_ROAM_ON_RESUME
- ;
-
- pmlmepriv->roam_scanr_exp_ms = RTW_ROAM_SCAN_RESULT_EXP_MS;
- pmlmepriv->roam_rssi_diff_th = RTW_ROAM_RSSI_DIFF_TH;
- pmlmepriv->roam_scan_int_ms = RTW_ROAM_SCAN_INTERVAL_MS;
-
- rtw_init_mlme_timer(padapter);
-
-exit:
-
- return res;
-}
-
-static void rtw_free_mlme_ie_data(u8 **ppie, u32 *plen)
-{
- if (*ppie) {
- kfree(*ppie);
- *plen = 0;
- *ppie = NULL;
- }
-}
-
-void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv)
-{
- rtw_buf_free(&pmlmepriv->assoc_req, &pmlmepriv->assoc_req_len);
- rtw_buf_free(&pmlmepriv->assoc_rsp, &pmlmepriv->assoc_rsp_len);
- 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_mlme_priv(struct mlme_priv *pmlmepriv)
-{
- if (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 = get_next(&free_queue->queue);
-
- 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;
-
-exit:
- spin_unlock_bh(&free_queue->lock);
-
- return pnetwork;
-}
-
-void _rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, u8 isfreeall)
-{
- unsigned int delta_time;
- u32 lifetime = SCANQUEUE_LIFETIME;
- struct __queue *free_queue = &pmlmepriv->free_bss_pool;
-
- if (!pnetwork)
- return;
-
- if (pnetwork->fixed)
- return;
-
- if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
- check_fwstate(pmlmepriv, WIFI_ADHOC_STATE))
- lifetime = 1;
-
- if (!isfreeall) {
- delta_time = jiffies_to_msecs(jiffies - pnetwork->last_scanned);
- if (delta_time < lifetime)/* unit:msec */
- return;
- }
-
- spin_lock_bh(&free_queue->lock);
-
- list_del_init(&pnetwork->list);
-
- list_add_tail(&pnetwork->list, &free_queue->queue);
-
- spin_unlock_bh(&free_queue->lock);
-}
-
-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));
-}
-
-/*
- * 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;
-
- if (is_zero_ether_addr(addr)) {
- pnetwork = NULL;
- goto exit;
- }
-
- phead = get_list_head(scanned_queue);
- list_for_each(plist, phead) {
- pnetwork = list_entry(plist, struct wlan_network, list);
-
- if (!memcmp(addr, pnetwork->network.mac_address, ETH_ALEN))
- break;
- }
-
- if (plist == phead)
- pnetwork = NULL;
-
-exit:
- return pnetwork;
-}
-
-void rtw_free_network_queue(struct adapter *padapter, u8 isfreeall)
-{
- struct list_head *phead, *plist, *tmp;
- 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);
- list_for_each_safe(plist, tmp, phead) {
- pnetwork = list_entry(plist, struct wlan_network, list);
-
- _rtw_free_network(pmlmepriv, pnetwork, isfreeall);
- }
-
- spin_unlock_bh(&scanned_queue->lock);
-}
-
-bool rtw_if_up(struct adapter *padapter)
-{
- if (padapter->driver_stopped || padapter->bSurpriseRemoved ||
- !check_fwstate(&padapter->mlmepriv, _FW_LINKED))
- return false;
-
- return true;
-}
-
-void rtw_generate_random_ibss(u8 *pibss)
-{
- unsigned long 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;
-}
-
-void rtw_free_mlme_priv(struct mlme_priv *pmlmepriv)
-{
- _rtw_free_mlme_priv(pmlmepriv);
-}
-
-void rtw_free_network_nolock(struct adapter *padapter, struct wlan_network *pnetwork);
-void rtw_free_network_nolock(struct adapter *padapter, struct wlan_network *pnetwork)
-{
- _rtw_free_network_nolock(&padapter->mlmepriv, pnetwork);
- rtw_cfg80211_unlink_bss(padapter, pnetwork);
-}
-
-/*
- * 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;
-}
-
-bool rtw_is_same_ibss(struct adapter *adapter, struct wlan_network *pnetwork)
-{
- struct security_priv *psecuritypriv = &adapter->securitypriv;
-
- if ((psecuritypriv->dot11_privacy_algrthm != _NO_PRIVACY_) &&
- (pnetwork->network.privacy == 0))
- return false;
- else if ((psecuritypriv->dot11_privacy_algrthm == _NO_PRIVACY_) &&
- (pnetwork->network.privacy == 1))
- return false;
-
- return true;
-}
-
-inline int is_same_ess(struct wlan_bssid_ex *a, struct wlan_bssid_ex *b)
-{
- return (a->ssid.ssid_length == b->ssid.ssid_length) &&
- !memcmp(a->ssid.ssid, b->ssid.ssid, a->ssid.ssid_length);
-}
-
-int is_same_network(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst, u8 feature)
-{
- u16 s_cap, d_cap;
- __le16 tmps, tmpd;
-
- memcpy((u8 *)&tmps, rtw_get_capability_from_ie(src->ies), 2);
- memcpy((u8 *)&tmpd, rtw_get_capability_from_ie(dst->ies), 2);
-
- s_cap = le16_to_cpu(tmps);
- d_cap = le16_to_cpu(tmpd);
-
- return (src->ssid.ssid_length == dst->ssid.ssid_length) &&
- ((!memcmp(src->mac_address, dst->mac_address, ETH_ALEN))) &&
- ((!memcmp(src->ssid.ssid, dst->ssid.ssid, src->ssid.ssid_length))) &&
- ((s_cap & WLAN_CAPABILITY_IBSS) ==
- (d_cap & WLAN_CAPABILITY_IBSS)) &&
- ((s_cap & WLAN_CAPABILITY_ESS) ==
- (d_cap & WLAN_CAPABILITY_ESS));
-}
-
-struct wlan_network *_rtw_find_same_network(struct __queue *scanned_queue, struct wlan_network *network)
-{
- struct list_head *phead, *plist;
- struct wlan_network *found = NULL;
-
- phead = get_list_head(scanned_queue);
- list_for_each(plist, phead) {
- found = list_entry(plist, struct wlan_network, list);
-
- if (is_same_network(&network->network, &found->network, 0))
- break;
- }
-
- if (plist == phead)
- found = NULL;
-
- return found;
-}
-
-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);
-
- list_for_each(plist, phead) {
- pwlan = list_entry(plist, struct wlan_network, list);
-
- if (!pwlan->fixed) {
- if (!oldest || time_after(oldest->last_scanned, pwlan->last_scanned))
- oldest = pwlan;
- }
- }
- 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->phy_info.signal_quality;
-
- u8 ss_final;
- u8 sq_final;
- long rssi_final;
-
- /* 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, 0)) {
- /* 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 = (src->rssi + dst->rssi * 4) / 5;
- else
- rssi_final = rssi_ori;
- } else {
- if (sq_smp != 101) { /* from the right channel */
- ss_final = ((u32)(src->phy_info.signal_strength) + (u32)(dst->phy_info.signal_strength) * 4) / 5;
- sq_final = ((u32)(src->phy_info.signal_quality) + (u32)(dst->phy_info.signal_quality) * 4) / 5;
- rssi_final = (src->rssi + dst->rssi * 4) / 5;
- } else {
- /* bss info not receiving from the right channel, use the original RX signal infos */
- ss_final = dst->phy_info.signal_strength;
- sq_final = dst->phy_info.signal_quality;
- 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->phy_info.signal_strength = ss_final;
- dst->phy_info.signal_quality = 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, 0))) {
- update_network(&pmlmepriv->cur_network.network, pnetwork, adapter, true);
- if (pmlmepriv->cur_network.network.ie_length < sizeof(struct ndis_802_11_fix_ie))
- return;
-
- rtw_update_protection(adapter, (pmlmepriv->cur_network.network.ies) + sizeof(struct ndis_802_11_fix_ie),
- pmlmepriv->cur_network.network.ie_length - sizeof(struct ndis_802_11_fix_ie));
- }
-}
-
-/* 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;
- int target_find = 0;
- u8 feature = 0;
-
- spin_lock_bh(&queue->lock);
- phead = get_list_head(queue);
- list_for_each(plist, phead) {
- pnetwork = list_entry(plist, struct wlan_network, list);
-
- if (is_same_network(&pnetwork->network, target, feature)) {
- target_find = 1;
- break;
- }
-
- if (rtw_roam_flags(adapter)) {
- /* TODO: don't select network in the same ess as oldest if it's new enough*/
- }
-
- if (!oldest || time_after(oldest->last_scanned, pnetwork->last_scanned))
- oldest = pnetwork;
- }
-
- /*
- * If we didn't find a match, then get a new network slot to initialize
- * with this beacon's information
- */
- if (!target_find) {
- if (list_empty(&pmlmepriv->free_bss_pool.queue)) {
- /* If there are no more slots, expire the oldest */
- /* list_del_init(&oldest->list); */
- pnetwork = oldest;
- if (!pnetwork)
- goto exit;
-
- 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.phy_info.signal_quality == 101)
- pnetwork->network.phy_info.signal_quality = 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;
- memcpy(&pnetwork->network, target, bssid_ex_sz);
-
- pnetwork->last_scanned = jiffies;
-
- /* bss info not receiving from the right channel */
- if (pnetwork->network.phy_info.signal_quality == 101)
- pnetwork->network.phy_info.signal_quality = 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. */
- if (pnetwork->network.ie_length > target->ie_length && target->reserved[0] == 1)
- update_ie = false;
-
- /* 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)
-{
- 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;
- uint wps_ielen;
- bool bselected = true;
-
- desired_encmode = psecuritypriv->ndisencryptstatus;
- privacy = pnetwork->network.privacy;
-
- if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) {
- if (pnetwork->network.ie_length < _FIXED_IE_LENGTH_)
- return false;
- if (rtw_get_wps_ie(pnetwork->network.ies + _FIXED_IE_LENGTH_, pnetwork->network.ie_length - _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) {
- if (pnetwork->network.ie_length < _BEACON_IE_OFFSET_) {
- bselected = false;
- } else {
- p = rtw_get_ie(pnetwork->network.ies + _BEACON_IE_OFFSET_, WLAN_EID_RSN, &ie_len, (pnetwork->network.ie_length - _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.infrastructure_mode != pmlmepriv->cur_network.network.infrastructure_mode)
- 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.mac_address, pnetwork->mac_address, 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->mac_address);
- 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.ssid_length = 0;
- rtw_add_network(adapter, pnetwork);
- }
-
-exit:
-
- spin_unlock_bh(&pmlmepriv->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)) {
- spin_unlock_bh(&pmlmepriv->lock);
- timer_delete_sync(&pmlmepriv->scan_to_timer);
- spin_lock_bh(&pmlmepriv->lock);
- _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
- }
-
- 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 {
- u8 ret = _SUCCESS;
- struct wlan_bssid_ex *pdev_network =
- &adapter->registrypriv.dev_network;
-
- u8 *pibss = adapter->registrypriv.dev_network.mac_address;
-
- /* pmlmepriv->fw_state ^= _FW_UNDER_SURVEY;because don't set assoc_timer */
- _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;
-
- pmlmepriv->to_join = false;
-
- ret = rtw_createbss_cmd(adapter);
- if (ret != _SUCCESS)
- goto unlock;
- }
- }
- } 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 (s_ret == 2) {/* there is no need to wait for join */
- _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
- rtw_indicate_connect(adapter);
- } else {
- if (rtw_to_roam(adapter) != 0) {
- if (rtw_dec_to_roam(adapter) == 0 ||
- rtw_sitesurvey_cmd(adapter, &pmlmepriv->assoc_ssid,
- 1, NULL, 0) != _SUCCESS) {
- rtw_set_to_roam(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);
- }
- }
- } else {
- if (rtw_chk_roam_flags(adapter, RTW_ROAM_ACTIVE)) {
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) &&
- check_fwstate(pmlmepriv, _FW_LINKED)) {
- if (rtw_select_roaming_candidate(pmlmepriv) == _SUCCESS) {
- receive_disconnect(adapter, pmlmepriv->cur_network.network.mac_address
- , WLAN_REASON_ACTIVE_ROAM);
- }
- }
- }
- }
-
-unlock:
- spin_unlock_bh(&pmlmepriv->lock);
-
- rtw_os_xmit_schedule(adapter);
-
- rtw_cfg80211_surveydone_event_callback(adapter);
-
- rtw_indicate_scan_done(adapter, false);
-}
-
-void rtw_dummy_event_callback(struct adapter *adapter, u8 *pbuf)
-{
-}
-
-void rtw_fwdbg_event_callback(struct adapter *adapter, u8 *pbuf)
-{
-}
-
-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 = get_next(phead);
-
- while (plist != phead) {
- ptemp = get_next(plist);
- list_del_init(plist);
- list_add_tail(plist, &free_queue->queue);
- plist = ptemp;
- }
-
- spin_unlock_bh(&free_queue->lock);
- spin_unlock_bh(&scan_queue->lock);
-}
-
-static void find_network(struct adapter *adapter)
-{
- struct wlan_network *pwlan = NULL;
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
- struct wlan_network *tgt_network = &pmlmepriv->cur_network;
-
- pwlan = rtw_find_network(&pmlmepriv->scanned_queue, tgt_network->network.mac_address);
- if (!pwlan)
- return;
-
- pwlan->fixed = false;
-
- if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) &&
- (adapter->stapriv.asoc_sta_count == 1))
- rtw_free_network_nolock(adapter, pwlan);
-}
-
-/* rtw_free_assoc_resources: the caller has to lock pmlmepriv->lock */
-void rtw_free_assoc_resources(struct adapter *adapter, int lock_scanned_queue)
-{
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
- 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.mac_address);
- rtw_free_stainfo(adapter, psta);
- }
-
- 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);
- rtw_free_stainfo(adapter, psta);
-
- rtw_init_bcmc_stainfo(adapter);
- }
-
- find_network(adapter);
-
- if (lock_scanned_queue)
- adapter->securitypriv.key_mask = 0;
-}
-
-/* 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);
-
- if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
- check_fwstate(pmlmepriv, WIFI_ADHOC_STATE))
- rtw_cfg80211_ibss_indicate_connect(padapter);
- else
- rtw_cfg80211_indicate_connect(padapter);
-
- netif_carrier_on(padapter->pnetdev);
-
- if (padapter->pid[2] != 0)
- rtw_signal_process(padapter->pid[2], SIGALRM);
- }
-
- rtw_set_to_roam(padapter, 0);
- rtw_set_scan_deny(padapter, 3000);
-}
-
-/* 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 (rtw_to_roam(padapter) > 0)
- _clr_fwstate_(pmlmepriv, _FW_LINKED);
-
- if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) || rtw_to_roam(padapter) <= 0) {
- /* Do it first for tx broadcast pkt after disconnection issue! */
- netif_carrier_off(padapter->pnetdev);
-
- rtw_cfg80211_indicate_disconnect(padapter);
-
- rtw_reset_securitypriv_cmd(padapter);
-
- /* set ips_deny_time to avoid enter IPS before LPS leave */
- rtw_set_ips_deny(padapter, 3000);
-
- _clr_fwstate_(pmlmepriv, _FW_LINKED);
-
- rtw_clear_scan_deny(padapter);
- }
-
- rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_DISCONNECT, 1);
-}
-
-inline void rtw_indicate_scan_done(struct adapter *padapter, bool aborted)
-{
- rtw_cfg80211_indicate_scan_done(padapter, aborted);
-
- if ((!adapter_to_pwrctl(padapter)->bInSuspend) &&
- (!check_fwstate(&padapter->mlmepriv,
- WIFI_ASOC_STATE | WIFI_UNDER_LINKING))) {
- rtw_set_ips_deny(padapter, 0);
- _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 1);
- }
-}
-
-void rtw_scan_abort(struct adapter *adapter)
-{
- unsigned long start;
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
- struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
-
- start = jiffies;
- pmlmeext->scan_abort = true;
- while (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)
- && jiffies_to_msecs(start) <= 200) {
- if (adapter->driver_stopped || adapter->bSurpriseRemoved)
- break;
-
- msleep(20);
- }
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
- rtw_indicate_scan_done(adapter, true);
-
- pmlmeext->scan_abort = false;
-}
-
-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;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
- psta = rtw_get_stainfo(pstapriv, pnetwork->network.mac_address);
- if (!psta)
- psta = rtw_alloc_stainfo(pstapriv, pnetwork->network.mac_address);
-
- if (psta) { /* update ptarget_sta */
-
- psta->aid = pnetwork->join_res;
-
- update_sta_info(padapter, psta);
-
- /* update station supportRate */
- psta->bssratelen = rtw_get_rateset_len(pnetwork->network.supported_rates);
- memcpy(psta->bssrateset, pnetwork->network.supported_rates, psta->bssratelen);
- rtw_hal_update_sta_rate_mask(padapter, psta);
-
- psta->wireless_mode = pmlmeext->cur_wireless_mode;
- psta->raid = networktype_to_raid_ex(padapter, psta);
-
- /* sta mode */
- rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, psta, true);
-
- /* security related */
- if (padapter->securitypriv.dot11_auth_algrthm == dot11_auth_algrthm_8021x) {
- padapter->securitypriv.binstallGrpkey = false;
- padapter->securitypriv.busetkipkey = false;
- padapter->securitypriv.bgrpkey_handshake = false;
-
- psta->ieee8021x_blocked = true;
- psta->dot118021XPrivacy = padapter->securitypriv.dot11_privacy_algrthm;
-
- 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));
- psta->dot11txpn.val = psta->dot11txpn.val + 1;
- memset((u8 *)&psta->dot11wtxpn, 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 = &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 = &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 */
- }
- }
- }
-
- 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.ie_length = ptarget_wlan->network.ie_length;
- 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.phy_info.signal_strength;
- padapter->recvpriv.signal_qual = ptarget_wlan->network.phy_info.signal_quality;
- /* the ptarget_wlan->network.rssi is raw data, we use ptarget_wlan->network.phy_info.signal_strength instead (has scaled) */
- padapter->recvpriv.rssi = translate_percentage_to_dbm(ptarget_wlan->network.phy_info.signal_strength);
-
- rtw_set_signal_stat_timer(&padapter->recvpriv);
-
- /* update fw_state will clr _FW_UNDER_LINKING here indirectly */
- switch (pnetwork->network.infrastructure_mode) {
- case NL80211_IFTYPE_STATION:
-
- 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 NL80211_IFTYPE_ADHOC:
- pmlmepriv->fw_state = WIFI_ADHOC_STATE;
- break;
- default:
- pmlmepriv->fw_state = WIFI_NULL_STATE;
- break;
- }
-
- if (cur_network->network.ie_length < sizeof(struct ndis_802_11_fix_ie))
- return;
-
- rtw_update_protection(padapter, (cur_network->network.ies) + sizeof(struct ndis_802_11_fix_ie),
- (cur_network->network.ie_length - sizeof(struct ndis_802_11_fix_ie)));
-
- rtw_update_ht_cap(padapter, cur_network->network.ies, cur_network->network.ie_length, (u8) cur_network->network.configuration.ds_config);
-}
-
-static struct rt_pmkid_list backupPMKIDList[NUM_PMKID_CACHE];
-void rtw_reset_securitypriv(struct adapter *adapter)
-{
- u8 backupPMKIDIndex = 0;
- u8 backupTKIPCountermeasure = 0x00;
- u32 backupTKIPcountermeasure_time = 0;
- struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
-
- spin_lock_bh(&adapter->security_key_mutex);
-
- if (adapter->securitypriv.dot11_auth_algrthm == dot11_auth_algrthm_8021x) {
- /* 802.1x */
- /* Added by Albert 2009/02/18 */
- /* 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(&backupPMKIDList[0], &adapter->securitypriv.PMKIDList[0], sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE);
- backupPMKIDIndex = adapter->securitypriv.PMKIDIndex;
- backupTKIPCountermeasure = adapter->securitypriv.btkip_countermeasure;
- backupTKIPcountermeasure_time = adapter->securitypriv.btkip_countermeasure_time;
-
- /* reset RX BIP packet number */
- pmlmeext->mgnt_80211w_IPN_rx = 0;
-
- memset((unsigned char *)&adapter->securitypriv, 0, sizeof(struct security_priv));
-
- /* Added by Albert 2009/02/18 */
- /* Restore the PMK information to securitypriv structure for the following connection. */
- memcpy(&adapter->securitypriv.PMKIDList[0], &backupPMKIDList[0], sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE);
- adapter->securitypriv.PMKIDIndex = backupPMKIDIndex;
- adapter->securitypriv.btkip_countermeasure = backupTKIPCountermeasure;
- adapter->securitypriv.btkip_countermeasure_time = backupTKIPcountermeasure_time;
-
- adapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
- adapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
-
- } else {
- /* reset values in securitypriv */
- /* if (adapter->mlmepriv.fw_state & WIFI_STATION_STATE) */
- /* */
- struct security_priv *psec_priv = &adapter->securitypriv;
-
- psec_priv->dot11_auth_algrthm = dot11_auth_algrthm_open; /* open system */
- psec_priv->dot11_privacy_algrthm = _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;
- /* */
- }
- spin_unlock_bh(&adapter->security_key_mutex);
-}
-
-/* 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.mac_address, cur_network->network.mac_address, 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);
-
- pmlmepriv->link_detect_info.traffic_transition_count = 0;
- pmlmepriv->link_detect_info.low_power_transition_count = 0;
-
- 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);
-
- spin_unlock_bh(&pmlmepriv->lock);
- return;
- }
-
- if (pnetwork->join_res <= 0) { /* if join_res < 0 (join fails), then try again */
- _set_timer(&pmlmepriv->assoc_timer, 1);
- _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
- spin_unlock_bh(&pmlmepriv->lock);
- return;
- }
-
- spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
- if (!check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
- spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
- spin_unlock_bh(&pmlmepriv->lock);
- return;
- }
-
- /* 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.mac_address);
- } else {
- pcur_wlan = rtw_find_network(&pmlmepriv->scanned_queue, cur_network->network.mac_address);
- if (pcur_wlan)
- pcur_wlan->fixed = false;
-
- pcur_sta = rtw_get_stainfo(pstapriv, cur_network->network.mac_address);
- if (pcur_sta)
- rtw_free_stainfo(adapter, pcur_sta);
-
- ptarget_wlan = rtw_find_network(&pmlmepriv->scanned_queue, pnetwork->network.mac_address);
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
- if (ptarget_wlan)
- ptarget_wlan->fixed = true;
- }
- }
- } else {
- ptarget_wlan = _rtw_find_same_network(&pmlmepriv->scanned_queue, pnetwork);
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
- if (ptarget_wlan)
- ptarget_wlan->fixed = true;
- }
- }
-
- /* s2. update cur_network */
- if (!ptarget_wlan) {
- netdev_dbg(adapter->pnetdev,
- "Can't find ptarget_wlan when joinbss_event callback\n");
- spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
- spin_unlock_bh(&pmlmepriv->lock);
- return;
- }
-
- rtw_joinbss_update_network(adapter, ptarget_wlan, pnetwork);
-
- /* 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);
- spin_unlock_bh(&pmlmepriv->lock);
- return;
- }
- }
-
- /* s4. indicate connect */
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
- pmlmepriv->cur_network_scanned = ptarget_wlan;
- rtw_indicate_connect(adapter);
- }
-
- spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
- spin_unlock_bh(&pmlmepriv->lock);
- /* s5. Cancel assoc_timer */
- timer_delete_sync(&pmlmepriv->assoc_timer);
-}
-
-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_os_xmit_schedule(adapter);
-}
-
-/* FOR STA, AP , AD-HOC mode */
-void rtw_sta_media_status_rpt(struct adapter *adapter, struct sta_info *psta, u32 mstatus)
-{
- u16 media_status_rpt;
-
- if (!psta)
- return;
-
- media_status_rpt = (u16)((psta->mac_id << 8) | mstatus); /* MACID|OPMODE:1 connect */
- rtw_hal_set_hwreg(adapter, HW_VAR_H2C_MEDIA_STATUS_RPT, (u8 *)&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) {
- u8 *passoc_req = NULL;
- u32 assoc_req_len = 0;
-
- rtw_sta_media_status_rpt(adapter, psta, 1);
-
- ap_sta_info_defer_update(adapter, psta);
-
- /* report to upper layer */
- spin_lock_bh(&psta->lock);
- if (psta->passoc_req && psta->assoc_req_len > 0) {
- passoc_req = kmemdup(psta->passoc_req, psta->assoc_req_len, GFP_ATOMIC);
- if (passoc_req) {
- assoc_req_len = psta->assoc_req_len;
-
- kfree(psta->passoc_req);
- psta->passoc_req = NULL;
- psta->assoc_req_len = 0;
- }
- }
- spin_unlock_bh(&psta->lock);
-
- if (passoc_req && assoc_req_len > 0) {
- rtw_cfg80211_indicate_sta_assoc(adapter, passoc_req, assoc_req_len);
-
- kfree(passoc_req);
- }
- }
- 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 */
- rtw_hal_set_odm_var(adapter, HAL_ODM_STA_INFO, psta, true);
-
- rtw_sta_media_status_rpt(adapter, psta, 1);
-
- if (adapter->securitypriv.dot11_auth_algrthm == dot11_auth_algrthm_8021x)
- psta->dot118021XPrivacy = adapter->securitypriv.dot11_privacy_algrthm;
-
- 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.mac_address);
- 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 wlan_network *tgt_network = &pmlmepriv->cur_network;
- struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
- 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 status to FW */
- rtw_hal_set_hwreg(adapter, HW_VAR_H2C_MEDIA_STATUS_RPT, (u8 *)&media_status);
- }
-
- /* if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) */
- if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)
- return;
-
- mlmeext_sta_del_event_callback(adapter);
-
- spin_lock_bh(&pmlmepriv->lock);
-
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
- u16 reason = *((unsigned short *)(pstadel->rsvd));
- bool roam = false;
- struct wlan_network *roam_target = NULL;
-
- if (adapter->registrypriv.wifi_spec == 1) {
- roam = false;
- } else if (reason == WLAN_REASON_EXPIRATION_CHK && rtw_chk_roam_flags(adapter, RTW_ROAM_ON_EXPIRED)) {
- roam = true;
- } else if (reason == WLAN_REASON_ACTIVE_ROAM && rtw_chk_roam_flags(adapter, RTW_ROAM_ACTIVE)) {
- roam = true;
- roam_target = pmlmepriv->roam_network;
- }
-
- if (roam) {
- if (rtw_to_roam(adapter) > 0)
- rtw_dec_to_roam(adapter); /* this stadel_event is caused by roaming, decrease to_roam */
- else if (rtw_to_roam(adapter) == 0)
- rtw_set_to_roam(adapter, adapter->registrypriv.max_roaming_times);
- } else {
- rtw_set_to_roam(adapter, 0);
- }
-
- 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.mac_address);
- if (pwlan) {
- pwlan->fixed = false;
- rtw_free_network_nolock(adapter, pwlan);
- }
- spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
- _rtw_roaming(adapter, roam_target);
- }
-
- if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
- check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
- rtw_free_stainfo(adapter, psta);
-
- if (adapter->stapriv.asoc_sta_count == 1) {/* a sta + bc/mc_stainfo (not Ibss_stainfo) */
- u8 ret = _SUCCESS;
-
- spin_lock_bh(&pmlmepriv->scanned_queue.lock);
- /* free old ibss network */
- pwlan = rtw_find_network(&pmlmepriv->scanned_queue, tgt_network->network.mac_address);
- if (pwlan) {
- pwlan->fixed = false;
- rtw_free_network_nolock(adapter, pwlan);
- }
- spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
- /* re-create ibss */
- pdev_network = &adapter->registrypriv.dev_network;
- pibss = adapter->registrypriv.dev_network.mac_address;
-
- 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);
- }
-
- ret = rtw_createbss_cmd(adapter);
- if (ret != _SUCCESS)
- goto unlock;
- }
- }
-
-unlock:
- spin_unlock_bh(&pmlmepriv->lock);
-}
-
-void rtw_cpwm_event_callback(struct adapter *padapter, u8 *pbuf)
-{
- struct reportpwrstate_parm *preportpwrstate;
-
- preportpwrstate = (struct reportpwrstate_parm *)pbuf;
- preportpwrstate->state |= (u8)(adapter_to_pwrctl(padapter)->cpwm_tog + 0x80);
- cpwm_int_hdl(padapter, preportpwrstate);
-}
-
-void rtw_wmm_event_callback(struct adapter *padapter, u8 *pbuf)
-{
- WMMOnAssocRsp(padapter);
-}
-
-/*
- * _rtw_join_timeout_handler - Timeout/failure handler for CMD JoinBss
- * @adapter: pointer to struct adapter structure
- */
-void _rtw_join_timeout_handler(struct timer_list *t)
-{
- struct adapter *adapter = timer_container_of(adapter, t,
- mlmepriv.assoc_timer);
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-
- if (adapter->driver_stopped || adapter->bSurpriseRemoved)
- return;
-
- spin_lock_bh(&pmlmepriv->lock);
-
- if (rtw_to_roam(adapter) > 0) { /* join timeout caused by roaming */
- while (1) {
- rtw_dec_to_roam(adapter);
- if (rtw_to_roam(adapter) != 0) { /* try another */
- int do_join_r;
-
- do_join_r = rtw_do_join(adapter);
- if (do_join_r != _SUCCESS)
- continue;
-
- break;
- }
-
- rtw_indicate_disconnect(adapter);
- break;
- }
-
- } else {
- rtw_indicate_disconnect(adapter);
- free_scanqueue(pmlmepriv);/* */
-
- /* indicate disconnect for the case that join_timeout and check_fwstate != FW_LINKED */
- rtw_cfg80211_indicate_disconnect(adapter);
- }
-
- spin_unlock_bh(&pmlmepriv->lock);
-}
-
-/*
- * rtw_scan_timeout_handler - Timeout/Failure handler for CMD SiteSurvey
- * @adapter: pointer to struct adapter structure
- */
-void rtw_scan_timeout_handler(struct timer_list *t)
-{
- struct adapter *adapter = timer_container_of(adapter, t,
- mlmepriv.scan_to_timer);
- 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, true);
-}
-
-void rtw_mlme_reset_auto_scan_int(struct adapter *adapter)
-{
- struct mlme_priv *mlme = &adapter->mlmepriv;
- struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
- if (pmlmeinfo->VHT_enable) {
- /* disable auto scan when connect to 11AC AP */
- mlme->auto_scan_int_ms = 0;
- } else if (adapter->registrypriv.wifi_spec && is_client_associated_to_ap(adapter)) {
- mlme->auto_scan_int_ms = 60 * 1000;
- } else if (rtw_chk_roam_flags(adapter, RTW_ROAM_ACTIVE)) {
- if (check_fwstate(mlme, WIFI_STATION_STATE) && check_fwstate(mlme, _FW_LINKED))
- mlme->auto_scan_int_ms = mlme->roam_scan_int_ms;
- } else {
- mlme->auto_scan_int_ms = 0; /* disabled */
- }
-}
-
-static void rtw_auto_scan_handler(struct adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- rtw_mlme_reset_auto_scan_int(padapter);
-
- if (pmlmepriv->auto_scan_int_ms != 0 &&
- jiffies_to_msecs(jiffies - pmlmepriv->scan_start_time) > pmlmepriv->auto_scan_int_ms) {
- if (!padapter->registrypriv.wifi_spec) {
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING))
- goto exit;
-
- if (pmlmepriv->link_detect_info.busy_traffic)
- goto exit;
- }
-
- rtw_set_802_11_bssid_list_scan(padapter, NULL, 0);
- }
-
-exit:
- return;
-}
-
-void rtw_dynamic_check_timer_handler(struct adapter *adapter)
-{
- if (!adapter)
- return;
-
- if (!adapter->hw_init_completed)
- return;
-
- if (adapter->driver_stopped || adapter->bSurpriseRemoved)
- return;
-
- if (adapter->net_closed)
- return;
-
- if ((adapter_to_pwrctl(adapter)->fw_current_in_ps_mode) &&
- !(hal_btcoex_IsBtControlLps(adapter))
- ) {
- bool should_enter_ps;
-
- linked_status_chk(adapter);
-
- should_enter_ps = traffic_status_watchdog(adapter, true);
- if (should_enter_ps) {
- /* rtw_lps_ctrl_wk_cmd(adapter, LPS_CTRL_ENTER, 1); */
- rtw_hal_dm_watchdog_in_lps(adapter);
- } else {
- /* call rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_LEAVE, 1) in traffic_status_watchdog() */
- }
-
- } else {
- rtw_dynamic_chk_wk_cmd(adapter);
- }
-
- /* auto site survey */
- rtw_auto_scan_handler(adapter);
-}
-
-inline bool rtw_is_scan_deny(struct adapter *adapter)
-{
- struct mlme_priv *mlmepriv = &adapter->mlmepriv;
-
- return (atomic_read(&mlmepriv->set_scan_deny) != 0) ? true : false;
-}
-
-inline void rtw_clear_scan_deny(struct adapter *adapter)
-{
- struct mlme_priv *mlmepriv = &adapter->mlmepriv;
-
- atomic_set(&mlmepriv->set_scan_deny, 0);
-}
-
-void rtw_set_scan_deny(struct adapter *adapter, u32 ms)
-{
- struct mlme_priv *mlmepriv = &adapter->mlmepriv;
-
- atomic_set(&mlmepriv->set_scan_deny, 1);
- _set_timer(&mlmepriv->set_scan_deny_timer, ms);
-}
-
-/*
- * Select a new roaming candidate from the original @param candidate and @param competitor
- * @return true: candidate is updated
- * @return false: candidate is not updated
- */
-static int rtw_check_roaming_candidate(struct mlme_priv *mlme
- , struct wlan_network **candidate, struct wlan_network *competitor)
-{
- int updated = false;
- struct adapter *adapter = container_of(mlme, struct adapter, mlmepriv);
-
- if (!is_same_ess(&competitor->network, &mlme->cur_network.network))
- goto exit;
-
- if (!rtw_is_desired_network(adapter, competitor))
- goto exit;
-
- /* got specific addr to roam */
- if (!is_zero_ether_addr(mlme->roam_tgt_addr)) {
- if (!memcmp(mlme->roam_tgt_addr, competitor->network.mac_address, ETH_ALEN))
- goto update;
- else
- goto exit;
- }
- if (jiffies_to_msecs(jiffies - competitor->last_scanned) >= mlme->roam_scanr_exp_ms)
- goto exit;
-
- if (competitor->network.rssi - mlme->cur_network_scanned->network.rssi < mlme->roam_rssi_diff_th)
- goto exit;
-
- if (*candidate && (*candidate)->network.rssi >= competitor->network.rssi)
- goto exit;
-
-update:
- *candidate = competitor;
- updated = true;
-
-exit:
- return updated;
-}
-
-int rtw_select_roaming_candidate(struct mlme_priv *mlme)
-{
- int ret = _FAIL;
- struct list_head *phead;
- struct __queue *queue = &mlme->scanned_queue;
- struct wlan_network *pnetwork = NULL;
- struct wlan_network *candidate = NULL;
-
- if (!mlme->cur_network_scanned) {
- WARN_ON(1);
- return ret;
- }
-
- spin_lock_bh(&mlme->scanned_queue.lock);
- phead = get_list_head(queue);
-
- list_for_each(mlme->pscanned, phead) {
- pnetwork = list_entry(mlme->pscanned, struct wlan_network,
- list);
-
- rtw_check_roaming_candidate(mlme, &candidate, pnetwork);
- }
-
- if (!candidate) {
- ret = _FAIL;
- goto exit;
- } else {
- mlme->roam_network = candidate;
-
- if (!memcmp(candidate->network.mac_address, mlme->roam_tgt_addr, ETH_ALEN))
- eth_zero_addr(mlme->roam_tgt_addr);
- }
-
- ret = _SUCCESS;
-exit:
- spin_unlock_bh(&mlme->scanned_queue.lock);
-
- return ret;
-}
-
-/*
- * 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 *mlme
- , struct wlan_network **candidate, struct wlan_network *competitor)
-{
- int updated = false;
- struct adapter *adapter = container_of(mlme, struct adapter, mlmepriv);
-
- /* check bssid, if needed */
- if (mlme->assoc_by_bssid) {
- if (memcmp(competitor->network.mac_address, mlme->assoc_bssid, ETH_ALEN))
- goto exit;
- }
-
- /* check ssid, if needed */
- if (mlme->assoc_ssid.ssid[0] && mlme->assoc_ssid.ssid_length) {
- if (competitor->network.ssid.ssid_length != mlme->assoc_ssid.ssid_length ||
- memcmp(competitor->network.ssid.ssid, mlme->assoc_ssid.ssid, mlme->assoc_ssid.ssid_length)
- )
- goto exit;
- }
-
- if (!rtw_is_desired_network(adapter, competitor))
- goto exit;
-
- if (rtw_to_roam(adapter) > 0) {
- if (jiffies_to_msecs(jiffies - competitor->last_scanned) >=
- mlme->roam_scanr_exp_ms ||
- !is_same_ess(&competitor->network, &mlme->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;
-
- adapter = (struct adapter *)pmlmepriv->nic_hdl;
-
- spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
- if (pmlmepriv->roam_network) {
- candidate = pmlmepriv->roam_network;
- pmlmepriv->roam_network = NULL;
- goto candidate_exist;
- }
-
- phead = get_list_head(queue);
- list_for_each(pmlmepriv->pscanned, phead) {
- pnetwork = list_entry(pmlmepriv->pscanned,
- struct wlan_network, list);
-
- rtw_check_join_candidate(pmlmepriv, &candidate, pnetwork);
- }
-
- if (!candidate) {
- ret = _FAIL;
- goto exit;
- } else {
- goto candidate_exist;
- }
-
-candidate_exist:
-
- /* 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);
- }
-
- set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
- ret = rtw_joinbss_cmd(adapter, candidate);
-
-exit:
- spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
- return ret;
-}
-
-signed 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;
- signed int res = _SUCCESS;
-
- pcmd = kzalloc_obj(*pcmd);
- if (!pcmd) {
- res = _FAIL; /* try again */
- goto exit;
- }
-
- psetauthparm = kzalloc_obj(*psetauthparm);
- if (!psetauthparm) {
- kfree(pcmd);
- res = _FAIL;
- goto exit;
- }
-
- psetauthparm->mode = (unsigned char)psecuritypriv->dot11_auth_algrthm;
-
- pcmd->cmdcode = SET_AUTH_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;
-}
-
-signed int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv, signed int keyid, u8 set_tx, bool enqueue)
-{
- u8 keylen;
- struct cmd_obj *pcmd;
- struct setkey_parm *psetkeyparm;
- struct cmd_priv *pcmdpriv = &adapter->cmdpriv;
- signed int res = _SUCCESS;
-
- psetkeyparm = kzalloc_obj(*psetkeyparm);
- if (!psetkeyparm) {
- res = _FAIL;
- goto exit;
- }
-
- if (psecuritypriv->dot11_auth_algrthm == dot11_auth_algrthm_8021x)
- psetkeyparm->algorithm = (unsigned char)psecuritypriv->dot118021XGrpPrivacy;
- else
- psetkeyparm->algorithm = (u8)psecuritypriv->dot11_privacy_algrthm;
-
- psetkeyparm->keyid = (u8)keyid;/* 0~3 */
- psetkeyparm->set_tx = set_tx;
- if (is_wep_enc(psetkeyparm->algorithm))
- adapter->securitypriv.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:
- res = _FAIL;
- kfree(psetkeyparm);
- goto exit;
- }
-
- if (enqueue) {
- pcmd = kzalloc_obj(*pcmd);
- if (!pcmd) {
- kfree(psetkeyparm);
- res = _FAIL; /* try again */
- goto exit;
- }
-
- pcmd->cmdcode = SET_KEY_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);
- } else {
- setkey_hdl(adapter, (u8 *)psetkeyparm);
- kfree(psetkeyparm);
- }
-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 (i + 5 < in_len &&
- in_ie[i] == 0xDD && in_ie[i + 2] == 0x00 &&
- in_ie[i + 3] == 0x50 && in_ie[i + 4] == 0xF2 &&
- in_ie[i + 5] == 0x02) {
- 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;
-}
-
-/* Ported from 8185: IsInPreAuthKeyList().
- * (Renamed from SecIsInPreAuthKeyList(), 2006-10-13.)
- * Added by Annie, 2006-05-07.
- *
- * 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;
- union iwreq_data wrqu;
-
- buff = NULL;
- if (authmode == WLAN_EID_VENDOR_SPECIFIC) {
- buff = kzalloc(IW_CUSTOM_MAX, GFP_ATOMIC);
- if (!buff)
- return;
-
- p = buff;
-
- p += scnprintf(p, IW_CUSTOM_MAX - (p - buff), "ASSOCINFO(ReqIEs =");
-
- len = sec_ie[1] + 2;
- len = (len < IW_CUSTOM_MAX) ? len : IW_CUSTOM_MAX;
-
- p += scnprintf(p, IW_CUSTOM_MAX - (p - buff), " %*ph", len, sec_ie);
-
- p += scnprintf(p, IW_CUSTOM_MAX - (p - buff), ")");
-
- 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;
-
- kfree(buff);
- }
-}
-
-signed int rtw_restruct_sec_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_len)
-{
- u8 authmode = 0x0;
- 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 = WLAN_EID_VENDOR_SPECIFIC;
- if ((ndisauthmode == Ndis802_11AuthModeWPA2) || (ndisauthmode == Ndis802_11AuthModeWPA2PSK))
- authmode = WLAN_EID_RSN;
-
- 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 == WLAN_EID_VENDOR_SPECIFIC) || (authmode == WLAN_EID_RSN)) {
- /* 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;
-
- if (authmode == WLAN_EID_RSN)
- 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->mac_address, myhwaddr, ETH_ALEN);
-
- memcpy(&pdev_network->ssid, &pregistrypriv->ssid, sizeof(struct ndis_802_11_ssid));
-
- pdev_network->configuration.length = sizeof(struct ndis_802_11_conf);
- pdev_network->configuration.beacon_period = 100;
-}
-
-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->dot11_privacy_algrthm > 0 ? 1 : 0) ; /* adhoc no 802.1x */
-
- pdev_network->rssi = 0;
-
- pdev_network->configuration.ds_config = (pregistrypriv->channel);
-
- if (cur_network->network.infrastructure_mode == NL80211_IFTYPE_ADHOC)
- pdev_network->configuration.atim_window = (0);
-
- pdev_network->infrastructure_mode = (cur_network->network.infrastructure_mode);
-
- /* 1. Supported rates */
- /* 2. IE */
-
- /* rtw_set_supported_rate(pdev_network->supported_rates, pregistrypriv->wireless_mode) ; will be called in rtw_generate_ie */
- sz = rtw_generate_ie(pregistrypriv);
-
- pdev_network->ie_length = sz;
-
- pdev_network->length = get_wlan_bssid_ex_sz((struct wlan_bssid_ex *)pdev_network);
-
- /* notes: translate ie_length & length after assign the length to cmdsz in createbss_cmd(); */
- /* pdev_network->ie_length = cpu_to_le32(sz); */
-}
-
-/* the function is at passive_level */
-void rtw_joinbss_reset(struct adapter *padapter)
-{
- u8 threshold;
- 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 */
-
- /* TH = 1 => means that invalidate usb rx aggregation */
- /* TH = 0 => means that validate usb rx aggregation, use init value. */
- if (phtpriv->ht_option) {
- if (padapter->registrypriv.wifi_spec == 1)
- threshold = 1;
- else
- threshold = 0;
- rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
- } else {
- threshold = 1;
- rtw_hal_set_hwreg(padapter, HW_VAR_RXDMA_AGG_PG_TH, (u8 *)(&threshold));
- }
-}
-
-void rtw_ht_use_default_setting(struct adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct ht_priv *phtpriv = &pmlmepriv->htpriv;
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
- bool bHwLDPCSupport = false, bHwSTBCSupport = false;
- bool bHwSupportBeamformer = false, bHwSupportBeamformee = false;
-
- if (pregistrypriv->wifi_spec)
- phtpriv->bss_coexist = 1;
- else
- phtpriv->bss_coexist = 0;
-
- phtpriv->sgi_40m = TEST_FLAG(pregistrypriv->short_gi, BIT(1)) ? true : false;
- phtpriv->sgi_20m = TEST_FLAG(pregistrypriv->short_gi, BIT(0)) ? true : false;
-
- /* LDPC support */
- rtw_hal_get_def_var(padapter, HAL_DEF_RX_LDPC, (u8 *)&bHwLDPCSupport);
- CLEAR_FLAGS(phtpriv->ldpc_cap);
- if (bHwLDPCSupport) {
- if (TEST_FLAG(pregistrypriv->ldpc_cap, BIT(4)))
- SET_FLAG(phtpriv->ldpc_cap, LDPC_HT_ENABLE_RX);
- }
- rtw_hal_get_def_var(padapter, HAL_DEF_TX_LDPC, (u8 *)&bHwLDPCSupport);
- if (bHwLDPCSupport) {
- if (TEST_FLAG(pregistrypriv->ldpc_cap, BIT(5)))
- SET_FLAG(phtpriv->ldpc_cap, LDPC_HT_ENABLE_TX);
- }
-
- /* STBC */
- rtw_hal_get_def_var(padapter, HAL_DEF_TX_STBC, (u8 *)&bHwSTBCSupport);
- CLEAR_FLAGS(phtpriv->stbc_cap);
- if (bHwSTBCSupport) {
- if (TEST_FLAG(pregistrypriv->stbc_cap, BIT(5)))
- SET_FLAG(phtpriv->stbc_cap, STBC_HT_ENABLE_TX);
- }
- rtw_hal_get_def_var(padapter, HAL_DEF_RX_STBC, (u8 *)&bHwSTBCSupport);
- if (bHwSTBCSupport) {
- if (TEST_FLAG(pregistrypriv->stbc_cap, BIT(4)))
- SET_FLAG(phtpriv->stbc_cap, STBC_HT_ENABLE_RX);
- }
-
- /* Beamforming setting */
- rtw_hal_get_def_var(padapter, HAL_DEF_EXPLICIT_BEAMFORMER, (u8 *)&bHwSupportBeamformer);
- rtw_hal_get_def_var(padapter, HAL_DEF_EXPLICIT_BEAMFORMEE, (u8 *)&bHwSupportBeamformee);
- CLEAR_FLAGS(phtpriv->beamform_cap);
- if (TEST_FLAG(pregistrypriv->beamform_cap, BIT(4)) && bHwSupportBeamformer)
- SET_FLAG(phtpriv->beamform_cap, BEAMFORMING_HT_BEAMFORMER_ENABLE);
-
- if (TEST_FLAG(pregistrypriv->beamform_cap, BIT(5)) && bHwSupportBeamformee)
- SET_FLAG(phtpriv->beamform_cap, BEAMFORMING_HT_BEAMFORMEE_ENABLE);
-}
-
-void rtw_build_wmm_ie_ht(struct adapter *padapter, u8 *out_ie, uint *pout_len)
-{
- unsigned char WMM_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00};
- int out_len;
-
- if (padapter->mlmepriv.qospriv.qos_option == 0) {
- out_len = *pout_len;
- rtw_set_ie(out_ie + out_len, WLAN_EID_VENDOR_SPECIFIC,
- _WMM_IE_Length_, WMM_IE, pout_len);
-
- padapter->mlmepriv.qospriv.qos_option = 1;
- }
-}
-
-/* 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, u8 channel)
-{
- u32 ielen, out_len;
- enum ieee80211_max_ampdu_length_exp max_rx_ampdu_factor;
- unsigned char *p;
- struct ieee80211_ht_cap ht_capie;
- u8 cbw40_enable = 0, stbc_rx_enable = 0, operation_bw = 0;
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct ht_priv *phtpriv = &pmlmepriv->htpriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
- phtpriv->ht_option = false;
-
- out_len = *pout_len;
-
- memset(&ht_capie, 0, sizeof(struct ieee80211_ht_cap));
-
- ht_capie.cap_info = cpu_to_le16(IEEE80211_HT_CAP_DSSSCCK40);
-
- if (phtpriv->sgi_20m)
- ht_capie.cap_info |= cpu_to_le16(IEEE80211_HT_CAP_SGI_20);
-
- /* Get HT BW */
- if (!in_ie) {
- /* TDLS: TODO 20/40 issue */
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
- operation_bw = padapter->mlmeextpriv.cur_bwmode;
- if (operation_bw > CHANNEL_WIDTH_40)
- operation_bw = CHANNEL_WIDTH_40;
- } else {
- /* TDLS: TODO 40? */
- operation_bw = CHANNEL_WIDTH_40;
- }
- } else {
- p = rtw_get_ie(in_ie, WLAN_EID_HT_OPERATION, &ielen, in_len);
- if (p && (ielen == sizeof(struct ieee80211_ht_addt_info))) {
- struct HT_info_element *pht_info = (struct HT_info_element *)(p + 2);
-
- if (pht_info->infos[0] & BIT(2)) {
- switch (pht_info->infos[0] & 0x3) {
- case 1:
- case 3:
- operation_bw = CHANNEL_WIDTH_40;
- break;
- default:
- operation_bw = CHANNEL_WIDTH_20;
- break;
- }
- } else {
- operation_bw = CHANNEL_WIDTH_20;
- }
- }
- }
-
- /* to disable 40M Hz support while gd_bw_40MHz_en = 0 */
- if ((pregistrypriv->bw_mode & 0x0f) > 0)
- cbw40_enable = 1;
-
- if ((cbw40_enable == 1) && (operation_bw == CHANNEL_WIDTH_40)) {
- ht_capie.cap_info |= cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH);
- if (phtpriv->sgi_40m)
- ht_capie.cap_info |= cpu_to_le16(IEEE80211_HT_CAP_SGI_40);
- }
-
- if (TEST_FLAG(phtpriv->stbc_cap, STBC_HT_ENABLE_TX))
- ht_capie.cap_info |= cpu_to_le16(IEEE80211_HT_CAP_TX_STBC);
-
- /* todo: disable SM power save mode */
- ht_capie.cap_info |= cpu_to_le16(IEEE80211_HT_CAP_SM_PS);
-
- if (TEST_FLAG(phtpriv->stbc_cap, STBC_HT_ENABLE_RX)) {
- if ((channel <= 14 && pregistrypriv->rx_stbc == 0x1) || /* enable for 2.4GHz */
- (pregistrypriv->wifi_spec == 1))
- stbc_rx_enable = 1;
- }
-
- /* fill default supported_mcs_set */
- memcpy(&ht_capie.mcs, pmlmeext->default_supported_mcs_set, 16);
-
- /* update default supported_mcs_set */
- if (stbc_rx_enable)
- ht_capie.cap_info |= cpu_to_le16(IEEE80211_HT_CAP_RX_STBC_1R);/* RX STBC One spatial stream */
-
- set_mcs_rate_by_mask(ht_capie.mcs.rx_mask, MCS_RATE_1R);
-
- {
- u32 rx_packet_offset, max_recvbuf_sz;
-
- rtw_hal_get_def_var(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
- rtw_hal_get_def_var(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
- }
-
- if (padapter->driver_rx_ampdu_factor != 0xFF)
- max_rx_ampdu_factor =
- (enum ieee80211_max_ampdu_length_exp)padapter->driver_rx_ampdu_factor;
- else
- rtw_hal_get_def_var(padapter, HW_VAR_MAX_RX_AMPDU_FACTOR,
- &max_rx_ampdu_factor);
-
- ht_capie.ampdu_params_info = (max_rx_ampdu_factor & 0x03);
-
- if (padapter->securitypriv.dot11_privacy_algrthm == _AES_)
- ht_capie.ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY & (0x07 << 2));
- else
- ht_capie.ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY & 0x00);
-
- rtw_set_ie(out_ie + out_len, WLAN_EID_HT_CAPABILITY,
- sizeof(struct ieee80211_ht_cap), (unsigned char *)&ht_capie, pout_len);
-
- phtpriv->ht_option = true;
-
- if (in_ie) {
- p = rtw_get_ie(in_ie, WLAN_EID_HT_OPERATION, &ielen, in_len);
- if (p && (ielen == sizeof(struct ieee80211_ht_addt_info))) {
- out_len = *pout_len;
- rtw_set_ie(out_ie + out_len, WLAN_EID_HT_OPERATION, 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 channel)
-{
- 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;
- u8 cbw40_enable = 0;
-
- 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)
- phtpriv->ampdu_enable = true;
-
- /* check Max Rx A-MPDU Size */
- len = 0;
- p = rtw_get_ie(pie + sizeof(struct ndis_802_11_fix_ie), WLAN_EID_HT_CAPABILITY, &len, ie_len - sizeof(struct ndis_802_11_fix_ie));
- if (p && len > 0) {
- pht_capie = (struct ieee80211_ht_cap *)(p + 2);
- max_ampdu_sz = (pht_capie->ampdu_params_info & IEEE80211_HT_CAP_AMPDU_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_fix_ie), WLAN_EID_HT_OPERATION, &len, ie_len - sizeof(struct ndis_802_11_fix_ie));
- if (p && len > 0) {
- /* todo: */
- }
-
- if ((pregistrypriv->bw_mode & 0x0f) > 0)
- cbw40_enable = 1;
-
- /* update cur_bwmode & cur_ch_offset */
- if ((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 set */
- for (i = 0; i < 16; i++)
- pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= pmlmeext->default_supported_mcs_set[i];
-
- /* update the MCS rates */
- set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_1R);
-
- /* switch to the 40M Hz mode according to the AP */
- /* pmlmeext->cur_bwmode = CHANNEL_WIDTH_40; */
- switch ((pmlmeinfo->HT_info.infos[0] & 0x3)) {
- case EXTCHNL_OFFSET_UPPER:
- pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
- break;
-
- case 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;
- struct ht_priv *phtpriv;
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- s32 bmcst = is_multicast_ether_addr(pattrib->ra);
-
- if (bmcst || (padapter->mlmepriv.link_detect_info.num_tx_ok_in_period < 100))
- return;
-
- priority = pattrib->priority;
-
- psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
- if (pattrib->psta != psta)
- return;
-
- if (!psta)
- return;
-
- if (!(psta->state & _FW_LINKED))
- 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_append_exented_cap(struct adapter *padapter, u8 *out_ie, uint *pout_len)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct ht_priv *phtpriv = &pmlmepriv->htpriv;
- u8 cap_content[8] = {0};
-
- if (phtpriv->bss_coexist)
- SET_EXT_CAPABILITY_ELE_BSS_COEXIST(cap_content, 1);
-
- rtw_set_ie(out_ie + *pout_len, WLAN_EID_EXT_CAPABILITY, 8, cap_content, pout_len);
-}
-
-inline void rtw_set_to_roam(struct adapter *adapter, u8 to_roam)
-{
- if (to_roam == 0)
- adapter->mlmepriv.to_join = false;
- adapter->mlmepriv.to_roam = to_roam;
-}
-
-inline u8 rtw_dec_to_roam(struct adapter *adapter)
-{
- adapter->mlmepriv.to_roam--;
- return adapter->mlmepriv.to_roam;
-}
-
-inline u8 rtw_to_roam(struct adapter *adapter)
-{
- return adapter->mlmepriv.to_roam;
-}
-
-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;
- struct wlan_network *cur_network = &pmlmepriv->cur_network;
-
- if (rtw_to_roam(padapter) > 0) {
- memcpy(&pmlmepriv->assoc_ssid, &cur_network->network.ssid, sizeof(struct ndis_802_11_ssid));
-
- pmlmepriv->assoc_by_bssid = false;
-
- while (rtw_do_join(padapter) != _SUCCESS) {
- rtw_dec_to_roam(padapter);
- if (rtw_to_roam(padapter) <= 0) {
- rtw_indicate_disconnect(padapter);
- break;
- }
- }
- }
-}
-
-bool rtw_linked_check(struct adapter *padapter)
-{
- if (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) ||
- check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE)) {
- if (padapter->stapriv.asoc_sta_count > 2)
- return true;
- } else { /* Station mode */
- if (check_fwstate(&padapter->mlmepriv, _FW_LINKED))
- return true;
- }
- return false;
-}
diff --git a/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c b/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
deleted file mode 100644
index e965133d94ab..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
+++ /dev/null
@@ -1,5901 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <rtw_wifi_regd.h>
-#include <hal_btcoex.h>
-#include <linux/kernel.h>
-#include <linux/minmax.h>
-#include <linux/unaligned.h>
-
-static struct mlme_handler mlme_sta_tbl[] = {
- {WIFI_ASSOCREQ, "OnAssocReq", &OnAssocReq},
- {WIFI_ASSOCRSP, "OnAssocRsp", &OnAssocRsp},
- {WIFI_REASSOCREQ, "OnReAssocReq", &OnAssocReq},
- {WIFI_REASSOCRSP, "OnReAssocRsp", &OnAssocRsp},
- {WIFI_PROBEREQ, "OnProbeReq", &OnProbeReq},
- {WIFI_PROBERSP, "OnProbeRsp", &OnProbeRsp},
-
- /* below 2 are reserved */
- {0, "DoReserved", &DoReserved},
- {0, "DoReserved", &DoReserved},
- {WIFI_BEACON, "OnBeacon", &OnBeacon},
- {WIFI_ATIM, "OnATIM", &OnAtim},
- {WIFI_DISASSOC, "OnDisassoc", &OnDisassoc},
- {WIFI_AUTH, "OnAuth", &OnAuthClient},
- {WIFI_DEAUTH, "OnDeAuth", &OnDeAuth},
- {WIFI_ACTION, "OnAction", &OnAction},
- {WIFI_ACTION_NOACK, "OnActionNoAck", &OnAction},
-};
-
-static struct action_handler OnAction_tbl[] = {
- {RTW_WLAN_CATEGORY_SPECTRUM_MGMT, "ACTION_SPECTRUM_MGMT", on_action_spct},
- {RTW_WLAN_CATEGORY_QOS, "ACTION_QOS", &DoReserved},
- {RTW_WLAN_CATEGORY_DLS, "ACTION_DLS", &DoReserved},
- {RTW_WLAN_CATEGORY_BACK, "ACTION_BACK", &OnAction_back},
- {RTW_WLAN_CATEGORY_PUBLIC, "ACTION_PUBLIC", on_action_public},
- {RTW_WLAN_CATEGORY_RADIO_MEASUREMENT, "ACTION_RADIO_MEASUREMENT", &DoReserved},
- {RTW_WLAN_CATEGORY_FT, "ACTION_FT", &DoReserved},
- {RTW_WLAN_CATEGORY_HT, "ACTION_HT", &OnAction_ht},
- {RTW_WLAN_CATEGORY_SA_QUERY, "ACTION_SA_QUERY", &OnAction_sa_query},
- {RTW_WLAN_CATEGORY_UNPROTECTED_WNM, "ACTION_UNPROTECTED_WNM", &DoReserved},
- {RTW_WLAN_CATEGORY_SELF_PROTECTED, "ACTION_SELF_PROTECTED", &DoReserved},
- {RTW_WLAN_CATEGORY_WMM, "ACTION_WMM", &DoReserved},
- {RTW_WLAN_CATEGORY_P2P, "ACTION_P2P", &DoReserved},
-};
-
-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};
-
-static unsigned char REALTEK_96B_IE[] = {0x00, 0xe0, 0x4c, 0x02, 0x01, 0x20};
-
-/* ChannelPlan definitions */
-static struct rt_channel_plan_2g 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 */
- {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, 14}, /* 0x05, RT_CHANNEL_DOMAIN_2G_GLOBAL , Passive scan CH 12, 13, 14 */
- {{}, 0}, /* 0x06, 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, RT_CHANNEL_DOMAIN_WORLD_WIDE_5G */
- {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 */
- {0x06}, /* 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, */
- {0x06}, /* 0x1F, RT_CHANNEL_DOMAIN_WORLD_WIDE_ONLY_5G */
- /* 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 */
- {0x05}, /* 0x41, RT_CHANNEL_DOMAIN_GLOBAL_NULL */
- {0x01}, /* 0x42, RT_CHANNEL_DOMAIN_ETSI1_ETSI4 */
- {0x02}, /* 0x43, RT_CHANNEL_DOMAIN_FCC1_FCC2 */
- {0x02}, /* 0x44, RT_CHANNEL_DOMAIN_FCC1_NCC3 */
- {0x00}, /* 0x45, RT_CHANNEL_DOMAIN_WORLD_ETSI5 */
- {0x02}, /* 0x46, RT_CHANNEL_DOMAIN_FCC1_FCC8 */
- {0x00}, /* 0x47, RT_CHANNEL_DOMAIN_WORLD_ETSI6 */
- {0x00}, /* 0x48, RT_CHANNEL_DOMAIN_WORLD_ETSI7 */
- {0x00}, /* 0x49, RT_CHANNEL_DOMAIN_WORLD_ETSI8 */
- {0x00}, /* 0x50, RT_CHANNEL_DOMAIN_WORLD_ETSI9 */
- {0x00}, /* 0x51, RT_CHANNEL_DOMAIN_WORLD_ETSI10 */
- {0x00}, /* 0x52, RT_CHANNEL_DOMAIN_WORLD_ETSI11 */
- {0x02}, /* 0x53, RT_CHANNEL_DOMAIN_FCC1_NCC4 */
- {0x00}, /* 0x54, RT_CHANNEL_DOMAIN_WORLD_ETSI12 */
- {0x02}, /* 0x55, RT_CHANNEL_DOMAIN_FCC1_FCC9 */
- {0x00}, /* 0x56, RT_CHANNEL_DOMAIN_WORLD_ETSI13 */
- {0x02}, /* 0x57, RT_CHANNEL_DOMAIN_FCC1_FCC10 */
-};
-
- /* use the combination for max channel numbers */
-static struct rt_channel_plan_map RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = {0x03};
-
-/* Search the @param ch in given @param ch_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].channel_num != 0; i++) {
- if (ch == ch_set[i].channel_num)
- break;
- }
-
- if (i >= ch_set[i].channel_num)
- return -1;
- return i;
-}
-
-/* Following are the initialization functions for WiFi MLME */
-
-void 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);
-}
-
-void init_mlme_default_rate_set(struct adapter *padapter)
-{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
- 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,};
- unsigned char supported_mcs_set[16] = {0xff, 0xff, 0x00, 0x00, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
-
- memcpy(pmlmeext->datarate, mixed_datarate, NumRates);
- memcpy(pmlmeext->basicrate, mixed_basicrate, NumRates);
-
- memcpy(pmlmeext->default_supported_mcs_set, supported_mcs_set, sizeof(pmlmeext->default_supported_mcs_set));
-}
-
-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;
-
- atomic_set(&pmlmeext->event_seq, 0);
- pmlmeext->mgnt_seq = 0;/* reset to zero when disconnect at client mode */
- pmlmeext->sa_query_seq = 0;
- pmlmeext->mgnt_80211w_IPN = 0;
- pmlmeext->mgnt_80211w_IPN_rx = 0;
- pmlmeext->cur_channel = padapter->registrypriv.channel;
- pmlmeext->cur_bwmode = CHANNEL_WIDTH_20;
- pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
- pmlmeext->retry = 0;
-
- pmlmeext->cur_wireless_mode = padapter->registrypriv.wireless_mode;
-
- init_mlme_default_rate_set(padapter);
-
- 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 = dot11_auth_algrthm_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].channel_num == 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)
-{
- static const struct p2p_oper_class_map op_class[] = {
- { IEEE80211G, 81, 1, 13, 1, BW20 },
- { IEEE80211G, 82, 14, 14, 1, BW20 },
- { IEEE80211A, 115, 36, 48, 4, BW20 },
- { IEEE80211A, 116, 36, 44, 8, BW40PLUS },
- { IEEE80211A, 117, 40, 48, 8, BW40MINUS },
- { IEEE80211A, 124, 149, 161, 4, BW20 },
- { IEEE80211A, 125, 149, 169, 4, BW20 },
- { IEEE80211A, 126, 149, 157, 8, BW40PLUS },
- { IEEE80211A, 127, 153, 161, 8, BW40MINUS },
- { -1, 0, 0, 0, 0, BW20 }
- };
-
- int cla, op;
-
- cla = 0;
-
- for (op = 0; op_class[op].op_class; op++) {
- u8 ch;
- const 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 ((0 < (padapter->registrypriv.bw_mode & 0xf0)) &&
- ((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 (is_supported_24g(padapter->registrypriv.wireless_mode)) {
- 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].channel_num =
- 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_NULL)) {
- if (channel_set[chanset_size].channel_num >= 1 &&
- channel_set[chanset_size].channel_num <= 11)
- channel_set[chanset_size].scan_type = SCAN_ACTIVE;
- else if (channel_set[chanset_size].channel_num >= 12 &&
- channel_set[chanset_size].channel_num <= 14)
- channel_set[chanset_size].scan_type = 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].channel_num <= 11)
- channel_set[chanset_size].scan_type = SCAN_ACTIVE;
- else
- channel_set[chanset_size].scan_type = SCAN_PASSIVE;
- } else
- channel_set[chanset_size].scan_type = SCAN_ACTIVE;
-
- chanset_size++;
- }
- }
-
- return chanset_size;
-}
-
-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);
- timer_setup(&pmlmeext->sa_query_timer, sa_query_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;
-
- /* fill_fwpriv(padapter, &(pmlmeext->fwpriv)); */
-
- init_mlme_ext_priv_value(padapter);
- pmlmeinfo->accept_addba_req = pregistrypriv->accept_addba_req;
-
- 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->last_scan_time = 0;
- 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->driver_stopped) {
- timer_delete_sync(&pmlmeext->survey_timer);
- timer_delete_sync(&pmlmeext->link_timer);
- /* timer_delete_sync(&pmlmeext->ADDBA_timer); */
- }
-}
-
-static void _mgt_dispatcher(struct adapter *padapter, struct mlme_handler *ptable, union recv_frame *precv_frame)
-{
- u8 *pframe = precv_frame->u.hdr.rx_data;
-
- if (ptable->func) {
- /* receive the frames that ra(a1) is my address or ra(a1) is bc address. */
- if (memcmp(GetAddr1Ptr(pframe), myid(&padapter->eeprompriv), ETH_ALEN) &&
- !is_broadcast_ether_addr(GetAddr1Ptr(pframe)))
- return;
-
- ptable->func(padapter, precv_frame);
- }
-}
-
-void mgt_dispatcher(struct adapter *padapter, union recv_frame *precv_frame)
-{
- int index;
- struct mlme_handler *ptable;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- u8 *pframe = precv_frame->u.hdr.rx_data;
- struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(pframe));
-
- if (GetFrameType(pframe) != WIFI_MGT_TYPE)
- return;
-
- /* receive the frames that ra(a1) is my address or ra(a1) is bc address. */
- if (memcmp(GetAddr1Ptr(pframe), myid(&padapter->eeprompriv), ETH_ALEN) &&
- !is_broadcast_ether_addr(GetAddr1Ptr(pframe))) {
- return;
- }
-
- ptable = mlme_sta_tbl;
-
- index = GetFrameSubType(pframe) >> 4;
-
- if (index >= ARRAY_SIZE(mlme_sta_tbl))
- return;
-
- ptable += index;
-
- if (psta) {
- if (GetRetry(pframe)) {
- if (precv_frame->u.hdr.attrib.seq_num == psta->rx_mgmt_frame_seq_num) {
- /* drop the duplicate management frame */
- return;
- }
- }
- psta->rx_mgmt_frame_seq_num = precv_frame->u.hdr.attrib.seq_num;
- }
-
- switch (GetFrameSubType(pframe)) {
- case WIFI_AUTH:
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
- ptable->func = &OnAuth;
- else
- ptable->func = &OnAuthClient;
- fallthrough;
- case WIFI_ASSOCREQ:
- case WIFI_REASSOCREQ:
- _mgt_dispatcher(padapter, ptable, precv_frame);
- break;
- case WIFI_PROBEREQ:
- _mgt_dispatcher(padapter, ptable, precv_frame);
- break;
- case WIFI_BEACON:
- _mgt_dispatcher(padapter, ptable, precv_frame);
- break;
- case WIFI_ACTION:
- /* if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true) */
- _mgt_dispatcher(padapter, ptable, precv_frame);
- break;
- default:
- _mgt_dispatcher(padapter, ptable, precv_frame);
- break;
- }
-}
-
-/* Following are the callback functions for each subtype of the management frames */
-
-unsigned int OnProbeReq(struct adapter *padapter, union 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->u.hdr.rx_data;
- uint len = precv_frame->u.hdr.len;
- u8 is_valid_p2p_probereq = false;
-
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
- return _SUCCESS;
-
- if (!check_fwstate(pmlmepriv, _FW_LINKED) &&
- !check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE | WIFI_AP_STATE)) {
- return _SUCCESS;
- }
-
- p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _PROBEREQ_IE_OFFSET_, WLAN_EID_SSID, (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 && false == !memcmp((p + 2), cur->ssid.ssid, cur->ssid.ssid_length))
- || (ielen == 0 && pmlmeinfo->hidden_ssid_mode)
- )
- return _SUCCESS;
-
-_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);
- }
-
- return _SUCCESS;
-}
-
-unsigned int OnProbeRsp(struct adapter *padapter, union recv_frame *precv_frame)
-{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
- if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
- report_survey_event(padapter, precv_frame);
- return _SUCCESS;
- }
-
- return _SUCCESS;
-}
-
-unsigned int OnBeacon(struct adapter *padapter, union recv_frame *precv_frame)
-{
- 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->u.hdr.rx_data;
- uint len = precv_frame->u.hdr.len;
- struct wlan_bssid_ex *pbss;
- int ret = _SUCCESS;
- u8 *p = NULL;
- u32 ielen = 0;
-
- p = rtw_get_ie(pframe + sizeof(struct ieee80211_hdr_3addr) + _BEACON_IE_OFFSET_, WLAN_EID_EXT_SUPP_RATES, &ielen, precv_frame->u.hdr.len - sizeof(struct ieee80211_hdr_3addr) - _BEACON_IE_OFFSET_);
- if (p && ielen > 0) {
- if (p + 2 + ielen < pframe + len) {
- if ((*(p + 1 + ielen) == 0x2D) && (*(p + 2 + ielen) != 0x2D))
- /* Invalid value 0x2D is detected in Extended Supported Rates (ESR) IE. Try to fix the IE length to avoid failed Beacon parsing. */
- *(p + 1) = ielen - 1;
- }
- }
-
- if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
- report_survey_event(padapter, precv_frame);
- return _SUCCESS;
- }
-
- if (!memcmp(GetAddr3Ptr(pframe), get_my_bssid(&pmlmeinfo->network), ETH_ALEN)) {
- if (pmlmeinfo->state & WIFI_FW_AUTH_NULL) {
- /* we should update current network before auth, or some IE is wrong */
- pbss = kmalloc_obj(*pbss, GFP_ATOMIC);
- if (pbss) {
- 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));
-
- /* update TSF Value */
- update_TSF(pmlmeext, pframe, len);
-
- /* reset for adaptive_early_32k */
- pmlmeext->adaptive_tsf_done = false;
- pmlmeext->DrvBcnEarly = 0xff;
- pmlmeext->DrvBcnTimeOut = 0xff;
- pmlmeext->bcn_cnt = 0;
- memset(pmlmeext->bcn_delay_cnt, 0, sizeof(pmlmeext->bcn_delay_cnt));
- memset(pmlmeext->bcn_delay_ratio, 0, sizeof(pmlmeext->bcn_delay_ratio));
-
- /* start auth */
- start_clnt_auth(padapter);
-
- return _SUCCESS;
- }
-
- if (((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE) &&
- (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)) {
- psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
- if (psta) {
- ret = rtw_check_bcn_info(padapter, pframe, len);
- if (!ret) {
- netdev_dbg(padapter->pnetdev,
- "ap has changed, disconnect now\n");
- receive_disconnect(padapter,
- pmlmeinfo->network.mac_address, 0);
- return _SUCCESS;
- }
- /* 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, pframe, len, psta);
-
- adaptive_early_32k(pmlmeext, pframe, len);
- }
- } else if ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) {
- psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
- 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, pframe, len, psta);
- } else {
- /* allocate a new CAM entry for IBSS station */
- cam_idx = allocate_fw_sta_entry(padapter);
- if (cam_idx == NUM_STA)
- goto _END_ONBEACON_;
-
- /* get supported rate */
- if (update_sta_support_rate(padapter, (pframe + WLAN_HDR_A3_LEN + _BEACON_IE_OFFSET_), (len - WLAN_HDR_A3_LEN - _BEACON_IE_OFFSET_), cam_idx) == _FAIL) {
- pmlmeinfo->FW_sta_info[cam_idx].status = 0;
- goto _END_ONBEACON_;
- }
-
- /* update TSF Value */
- update_TSF(pmlmeext, pframe, len);
-
- /* report sta add event */
- report_add_sta_event(padapter, GetAddr2Ptr(pframe), cam_idx);
- }
- }
- }
-
-_END_ONBEACON_:
-
- return _SUCCESS;
-}
-
-unsigned int OnAuth(struct adapter *padapter, union recv_frame *precv_frame)
-{
- unsigned int auth_mode, seq, ie_len;
- 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->u.hdr.rx_data;
- uint len = precv_frame->u.hdr.len;
- u8 offset = 0;
-
- if ((pmlmeinfo->state & 0x03) != WIFI_FW_AP_STATE)
- return _FAIL;
-
- if (len < WLAN_HDR_A3_LEN)
- return _FAIL;
-
- sa = GetAddr2Ptr(pframe);
-
- auth_mode = psecuritypriv->dot11_auth_algrthm;
-
- if (GetPrivacy(pframe)) {
- u8 *iv;
- struct rx_pkt_attrib *prxattrib = &(precv_frame->u.hdr.attrib);
-
- prxattrib->hdrlen = WLAN_HDR_A3_LEN;
- prxattrib->encrypt = _WEP40_;
-
- if (len < WLAN_HDR_A3_LEN + 8)
- return _FAIL;
-
- iv = pframe + prxattrib->hdrlen;
- prxattrib->key_index = ((iv[3] >> 6) & 0x3);
-
- prxattrib->iv_len = 4;
- prxattrib->icv_len = 4;
-
- rtw_wep_decrypt(padapter, (u8 *)precv_frame);
-
- offset = 4;
- }
-
- algorithm = le16_to_cpu(*(__le16 *)((SIZE_PTR)pframe + WLAN_HDR_A3_LEN + offset));
- seq = le16_to_cpu(*(__le16 *)((SIZE_PTR)pframe + WLAN_HDR_A3_LEN + offset + 2));
-
- if (auth_mode == 2 &&
- psecuritypriv->dot11_privacy_algrthm != _WEP40_ &&
- psecuritypriv->dot11_privacy_algrthm != _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 = WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG;
-
- goto auth_fail;
- }
-
- if (!rtw_access_ctrl(padapter, sa)) {
- status = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_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 = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA;
- goto auth_fail;
- }
-
- pstat->state = WIFI_FW_AUTH_NULL;
- pstat->auth_seq = 0;
-
- /* pstat->flags = 0; */
- /* pstat->capability = 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--;
- if (pstat->expire_to > 0) {
- /* TODO: STA re_auth within expire_to */
- }
- }
- 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 = WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION;
- goto auth_fail;
- }
-
- if (algorithm == 0 && (auth_mode == 0 || auth_mode == 2 || auth_mode == 3)) {
- 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 = WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION;
- goto auth_fail;
- }
- } else { /* shared system or auto authentication */
- if (seq == 1) {
- /* prepare for the challenging txt... */
- memset(pstat->chg_txt, 78, 128);
-
- pstat->state &= ~WIFI_FW_AUTH_NULL;
- pstat->state |= WIFI_FW_AUTH_STATE;
- pstat->authalg = algorithm;
- } else if (seq == 3) {
- p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + 4 + _AUTH_IE_OFFSET_, WLAN_EID_CHALLENGE, (int *)&ie_len,
- len - WLAN_HDR_A3_LEN - _AUTH_IE_OFFSET_ - 4);
-
- if (!p || ie_len != 128) {
- status = WLAN_STATUS_CHALLENGE_FAIL;
- goto auth_fail;
- }
-
- if (!memcmp((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 = WLAN_STATUS_CHALLENGE_FAIL;
- goto auth_fail;
- }
- } else {
- status = WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION;
- goto auth_fail;
- }
- }
-
- /* Now, we are going to issue_auth... */
- pstat->auth_seq = seq + 1;
-
- issue_auth(padapter, pstat, (unsigned short)(WLAN_STATUS_SUCCESS));
-
- if (pstat->state & WIFI_FW_AUTH_SUCCESS)
- pstat->auth_seq = 0;
-
- return _SUCCESS;
-
-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);
-
- return _FAIL;
-}
-
-unsigned int OnAuthClient(struct adapter *padapter, union recv_frame *precv_frame)
-{
- unsigned int seq, len, status, offset;
- unsigned char *p;
- unsigned int go2asoc = 0;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- u8 *pframe = precv_frame->u.hdr.rx_data;
- uint pkt_len = precv_frame->u.hdr.len;
-
- /* check A1 matches or not */
- if (memcmp(myid(&(padapter->eeprompriv)), get_da(pframe), ETH_ALEN))
- return _SUCCESS;
-
- if (!(pmlmeinfo->state & WIFI_FW_AUTH_STATE))
- return _SUCCESS;
-
- offset = (GetPrivacy(pframe)) ? 4 : 0;
-
- seq = le16_to_cpu(*(__le16 *)((SIZE_PTR)pframe + WLAN_HDR_A3_LEN + offset + 2));
- status = le16_to_cpu(*(__le16 *)((SIZE_PTR)pframe + WLAN_HDR_A3_LEN + offset + 4));
-
- if (status != 0) {
- if (status == 13) { /* pmlmeinfo->auth_algo == dot11_auth_algrthm_auto) */
- if (pmlmeinfo->auth_algo == dot11_auth_algrthm_shared)
- pmlmeinfo->auth_algo = dot11_auth_algrthm_open;
- else
- pmlmeinfo->auth_algo = dot11_auth_algrthm_shared;
- /* pmlmeinfo->reauth_count = 0; */
- }
-
- set_link_timer(pmlmeext, 1);
- goto authclnt_fail;
- }
-
- if (seq == 2) {
- if (pmlmeinfo->auth_algo == dot11_auth_algrthm_shared) {
- /* legendary shared system */
- p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + _AUTH_IE_OFFSET_, WLAN_EID_CHALLENGE, (int *)&len,
- pkt_len - WLAN_HDR_A3_LEN - _AUTH_IE_OFFSET_);
-
- if (!p || len != WLAN_AUTH_CHALLENGE_LEN)
- goto authclnt_fail;
-
- memcpy(pmlmeinfo->chg_txt, p + 2, len);
- pmlmeinfo->auth_seq = 3;
- issue_auth(padapter, NULL, 0);
- set_link_timer(pmlmeext, REAUTH_TO);
-
- return _SUCCESS;
- }
- /* open system */
- go2asoc = 1;
- } else if (seq == 4) {
- if (pmlmeinfo->auth_algo == dot11_auth_algrthm_shared)
- go2asoc = 1;
- else
- goto authclnt_fail;
- } else {
- /* this is also illegal */
- goto authclnt_fail;
- }
-
- if (go2asoc) {
- netdev_dbg(padapter->pnetdev, "auth success, start assoc\n");
- start_clnt_assoc(padapter);
- return _SUCCESS;
- }
-
-authclnt_fail:
-
- /* pmlmeinfo->state &= ~(WIFI_FW_AUTH_STATE); */
-
- return _FAIL;
-}
-
-unsigned int OnAssocReq(struct adapter *padapter, union 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, left;
- u8 wpa_ie_len;
- unsigned char supportRate[16];
- int support_rate_num;
- unsigned short status = WLAN_STATUS_SUCCESS;
- 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->u.hdr.rx_data;
- uint pkt_len = precv_frame->u.hdr.len;
-
- if ((pmlmeinfo->state & 0x03) != WIFI_FW_AP_STATE)
- return _FAIL;
-
- 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 < sizeof(struct ieee80211_hdr_3addr) + ie_offset)
- return _FAIL;
-
- pstat = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
- if (!pstat) {
- status = WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA;
- goto asoc_class2_error;
- }
-
- capab_info = get_unaligned_le16(pframe + WLAN_HDR_A3_LEN);
- /* capab_info = le16_to_cpu(*(unsigned short *)(pframe + WLAN_HDR_A3_LEN)); */
-
- left = pkt_len - (sizeof(struct ieee80211_hdr_3addr) + ie_offset);
- pos = pframe + (sizeof(struct ieee80211_hdr_3addr) + ie_offset);
-
- /* check if this stat has been successfully authenticated/associated */
- if (!((pstat->state) & WIFI_FW_AUTH_SUCCESS)) {
- if (!((pstat->state) & WIFI_FW_ASSOC_SUCCESS)) {
- status = WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA;
- 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) == PARSE_FAILED ||
- !elems.ssid) {
- status = WLAN_STATUS_CHALLENGE_FAIL;
- goto OnAssocReqFail;
- }
-
- /* now we should check all the fields... */
- /* checking SSID */
- p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + ie_offset, WLAN_EID_SSID, &ie_len,
- pkt_len - WLAN_HDR_A3_LEN - ie_offset);
-
- if (!p || ie_len == 0) {
- /* broadcast ssid, however it is not allowed in assocreq */
- status = WLAN_STATUS_CHALLENGE_FAIL;
- goto OnAssocReqFail;
- } else {
- /* check if ssid match */
- if (memcmp(p + 2, cur->ssid.ssid, cur->ssid.ssid_length))
- status = WLAN_STATUS_CHALLENGE_FAIL;
-
- if (ie_len != cur->ssid.ssid_length)
- status = WLAN_STATUS_CHALLENGE_FAIL;
- }
-
- if (status != WLAN_STATUS_SUCCESS)
- goto OnAssocReqFail;
-
- /* check if the supported rate is ok */
- p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + ie_offset, WLAN_EID_SUPP_RATES, &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); */
- /* support_rate_num = AP_BSSRATE_LEN; */
-
- status = WLAN_STATUS_CHALLENGE_FAIL;
- goto OnAssocReqFail;
- } else {
- if (ie_len > sizeof(supportRate))
- ie_len = sizeof(supportRate);
-
- memcpy(supportRate, p + 2, ie_len);
- support_rate_num = ie_len;
-
- p = rtw_get_ie(pframe + WLAN_HDR_A3_LEN + ie_offset, WLAN_EID_EXT_SUPP_RATES, &ie_len,
- pkt_len - WLAN_HDR_A3_LEN - ie_offset);
- if (p) {
- if (support_rate_num + ie_len <= sizeof(supportRate)) {
- memcpy(supportRate + support_rate_num, p + 2, ie_len);
- support_rate_num += ie_len;
- }
- }
- }
-
- /* todo: mask supportRate between AP & STA -> move to update raid */
- /* get_matched_rate(pmlmeext, supportRate, &support_rate_num, 0); */
-
- /* update station supportRate */
- pstat->bssratelen = support_rate_num;
- memcpy(pstat->bssrateset, supportRate, support_rate_num);
- update_basic_rate_table_soft_ap(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_INVALID_GROUP_CIPHER;
-
- if (!pstat->wpa2_pairwise_cipher)
- status = WLAN_STATUS_INVALID_PAIRWISE_CIPHER;
- } 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_INVALID_GROUP_CIPHER;
-
- if (!pstat->wpa_pairwise_cipher)
- status = WLAN_STATUS_INVALID_PAIRWISE_CIPHER;
-
- } else {
- status = WLAN_STATUS_INVALID_IE;
- }
-
- } else {
- wpa_ie = NULL;
- wpa_ie_len = 0;
- }
-
- if (status != WLAN_STATUS_SUCCESS)
- goto OnAssocReqFail;
-
- pstat->flags &= ~(WLAN_STA_WPS | WLAN_STA_MAYBE_WPS);
- if (!wpa_ie) {
- if (elems.wps_ie)
- pstat->flags |= WLAN_STA_WPS;
- 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 = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_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 = min(sizeof(pstat->wpa_ie), wpa_ie_len + 2u);
- }
-
- 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, WLAN_EID_VENDOR_SPECIFIC, &ie_len, pkt_len - WLAN_HDR_A3_LEN - ie_offset);
- if (!p)
- break;
-
- if (memcmp(p + 2, WMM_IE, 6)) {
- p = p + ie_len + 2;
- continue;
- }
-
- 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;
- }
- }
-
- /* 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 = WLAN_STATUS_CHALLENGE_FAIL;
- goto OnAssocReqFail;
- }
-
- if ((pstat->flags & WLAN_STA_HT) &&
- ((pstat->wpa2_pairwise_cipher & WPA_CIPHER_TKIP) ||
- (pstat->wpa_pairwise_cipher & WPA_CIPHER_TKIP))) {
- /* status = WLAN_STATUS_CIPHER_SUITE_REJECTED; */
- /* 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;
-
- /* 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 == WLAN_STATUS_SUCCESS)) {
- /* 1 bss_cap_update & sta_info_update */
- bss_cap_update_on_sta_join(padapter, pstat);
- sta_info_update(padapter, pstat);
-
- /* 2 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);
-
- spin_lock_bh(&pstat->lock);
- kfree(pstat->passoc_req);
- pstat->assoc_req_len = 0;
- pstat->passoc_req = kmemdup(pframe, pkt_len, GFP_ATOMIC);
- if (pstat->passoc_req)
- pstat->assoc_req_len = pkt_len;
-
- spin_unlock_bh(&pstat->lock);
-
- /* 3-(1) report sta add event */
- report_add_sta_event(padapter, pstat->hwaddr, pstat->aid);
- }
-
- return _SUCCESS;
-
-asoc_class2_error:
-
- issue_deauth(padapter, GetAddr2Ptr(pframe), status);
-
- return _FAIL;
-
-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 _FAIL;
-}
-
-unsigned int OnAssocRsp(struct adapter *padapter, union recv_frame *precv_frame)
-{
- uint i;
- int res;
- unsigned short status;
- struct ndis_80211_var_ie *pIE;
- 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); */
- u8 *pframe = precv_frame->u.hdr.rx_data;
- uint pkt_len = precv_frame->u.hdr.len;
-
- /* check A1 matches or not */
- if (memcmp(myid(&(padapter->eeprompriv)), get_da(pframe), ETH_ALEN))
- return _SUCCESS;
-
- if (!(pmlmeinfo->state & (WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE)))
- return _SUCCESS;
-
- if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)
- return _SUCCESS;
-
- timer_delete_sync(&pmlmeext->link_timer);
-
- /* status */
- status = le16_to_cpu(*(__le16 *)(pframe + WLAN_HDR_A3_LEN + 2));
- if (status > 0) {
- pmlmeinfo->state = WIFI_FW_NULL_STATE;
- res = -4;
- goto report_assoc_result;
- }
-
- /* get capabilities */
- pmlmeinfo->capability = le16_to_cpu(*(__le16 *)(pframe + WLAN_HDR_A3_LEN));
-
- /* set slot time */
- pmlmeinfo->slotTime = (pmlmeinfo->capability & BIT(10)) ? 9 : 20;
-
- /* AID */
- pmlmeinfo->aid = (int)(le16_to_cpu(*(__le16 *)(pframe + WLAN_HDR_A3_LEN + 4)) & 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 = (6 + WLAN_HDR_A3_LEN); i < pkt_len;) {
- if (i + sizeof(*pIE) > pkt_len)
- break;
- pIE = (struct ndis_80211_var_ie *)(pframe + i);
- if (i + sizeof(*pIE) + pIE->length > pkt_len)
- break;
-
- switch (pIE->element_id) {
- case WLAN_EID_VENDOR_SPECIFIC:
- if (!memcmp(pIE->data, WMM_PARA_OUI, 6)) /* WMM */
- WMM_param_handler(padapter, pIE);
- break;
-
- case WLAN_EID_HT_CAPABILITY: /* HT caps */
- HT_caps_handler(padapter, pIE);
- break;
-
- case WLAN_EID_HT_OPERATION: /* HT info */
- HT_info_handler(padapter, pIE);
- break;
-
- case WLAN_EID_ERP_INFO:
- 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 */
- update_basic_rate_table(padapter, pmlmeinfo->network.supported_rates);
-
-report_assoc_result:
- if (res > 0)
- rtw_buf_update(&pmlmepriv->assoc_rsp, &pmlmepriv->assoc_rsp_len, pframe, pkt_len);
- else
- rtw_buf_free(&pmlmepriv->assoc_rsp, &pmlmepriv->assoc_rsp_len);
-
- report_join_res(padapter, res);
-
- return _SUCCESS;
-}
-
-unsigned int OnDeAuth(struct adapter *padapter, union recv_frame *precv_frame)
-{
- unsigned short reason;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- u8 *pframe = precv_frame->u.hdr.rx_data;
- int ignore_received_deauth = 0;
-
- /* check A3 */
- if (memcmp(GetAddr3Ptr(pframe), get_my_bssid(&pmlmeinfo->network), ETH_ALEN))
- return _SUCCESS;
-
- reason = le16_to_cpu(*(__le16 *)(pframe + WLAN_HDR_A3_LEN));
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- struct sta_info *psta;
- struct sta_priv *pstapriv = &padapter->stapriv;
-
- /* rtw_free_stainfo(padapter, psta); */
-
- netdev_dbg(padapter->pnetdev,
- "ap recv deauth reason code(%d) sta:%pM\n", reason,
- GetAddr2Ptr(pframe));
-
- psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
- if (psta) {
- u8 updated = false;
-
- 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);
- }
-
- return _SUCCESS;
- }
-
- /* Commented by Albert 20130604
- * 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) ||
- (pmlmeinfo->state & WIFI_FW_ASSOC_STATE)) {
- if (reason == WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA) {
- ignore_received_deauth = 1;
- } else if (reason == WLAN_REASON_PREV_AUTH_NOT_VALID) {
- /* TODO: 802.11r */
- ignore_received_deauth = 1;
- }
- }
-
- netdev_dbg(padapter->pnetdev,
- "sta recv deauth reason code(%d) sta:%pM, ignore = %d\n",
- reason, GetAddr3Ptr(pframe),
- ignore_received_deauth);
-
- if (ignore_received_deauth == 0)
- receive_disconnect(padapter, GetAddr3Ptr(pframe), reason);
-
- pmlmepriv->link_detect_info.busy_traffic = false;
- return _SUCCESS;
-}
-
-unsigned int OnDisassoc(struct adapter *padapter, union recv_frame *precv_frame)
-{
- unsigned short reason;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- u8 *pframe = precv_frame->u.hdr.rx_data;
-
- /* check A3 */
- if (memcmp(GetAddr3Ptr(pframe), get_my_bssid(&pmlmeinfo->network), ETH_ALEN))
- return _SUCCESS;
-
- reason = le16_to_cpu(*(__le16 *)(pframe + WLAN_HDR_A3_LEN));
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- struct sta_info *psta;
- struct sta_priv *pstapriv = &padapter->stapriv;
-
- /* rtw_free_stainfo(padapter, psta); */
-
- netdev_dbg(padapter->pnetdev,
- "ap recv disassoc reason code(%d) sta:%pM\n",
- reason, GetAddr2Ptr(pframe));
-
- psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
- if (psta) {
- u8 updated = false;
-
- 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);
- }
-
- return _SUCCESS;
- }
- netdev_dbg(padapter->pnetdev,
- "sta recv disassoc reason code(%d) sta:%pM\n",
- reason, GetAddr3Ptr(pframe));
-
- receive_disconnect(padapter, GetAddr3Ptr(pframe), reason);
-
- pmlmepriv->link_detect_info.busy_traffic = false;
- return _SUCCESS;
-}
-
-unsigned int OnAtim(struct adapter *padapter, union recv_frame *precv_frame)
-{
- return _SUCCESS;
-}
-
-unsigned int on_action_spct(struct adapter *padapter, union recv_frame *precv_frame)
-{
- struct sta_info *psta = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- u8 *pframe = precv_frame->u.hdr.rx_data;
- u8 *frame_body = (u8 *)(pframe + sizeof(struct ieee80211_hdr_3addr));
- u8 category;
- u8 action;
-
- psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
-
- if (!psta)
- goto exit;
-
- category = frame_body[0];
- if (category != RTW_WLAN_CATEGORY_SPECTRUM_MGMT)
- goto exit;
-
- action = frame_body[1];
- switch (action) {
- case WLAN_ACTION_SPCT_MSR_REQ:
- case WLAN_ACTION_SPCT_MSR_RPRT:
- case WLAN_ACTION_SPCT_TPC_REQ:
- case WLAN_ACTION_SPCT_TPC_RPRT:
- case WLAN_ACTION_SPCT_CHL_SWITCH:
- break;
- default:
- break;
- }
-
-exit:
- return _FAIL;
-}
-
-unsigned int OnAction_back(struct adapter *padapter, union recv_frame *precv_frame)
-{
- u8 *addr;
- struct sta_info *psta = NULL;
- struct recv_reorder_ctrl *preorder_ctrl;
- unsigned char *frame_body;
- unsigned char category, action;
- unsigned short tid, status;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- u8 *pframe = precv_frame->u.hdr.rx_data;
- struct sta_priv *pstapriv = &padapter->stapriv;
-
- /* check RA matches or not */
- if (memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))/* for if1, sta/ap mode */
- return _SUCCESS;
-
- if ((pmlmeinfo->state & 0x03) != WIFI_FW_AP_STATE)
- if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS))
- return _SUCCESS;
-
- addr = GetAddr2Ptr(pframe);
- psta = rtw_get_stainfo(pstapriv, addr);
-
- if (!psta)
- return _SUCCESS;
-
- frame_body = (unsigned char *)(pframe + sizeof(struct ieee80211_hdr_3addr));
-
- category = frame_body[0];
- if (category == RTW_WLAN_CATEGORY_BACK) {/* representing Block Ack */
- if (!pmlmeinfo->HT_enable)
- return _SUCCESS;
-
- action = frame_body[1];
- switch (action) {
- case WLAN_ACTION_ADDBA_REQ: /* ADDBA request */
-
- memcpy(&(pmlmeinfo->ADDBA_req), &(frame_body[2]), sizeof(struct ADDBA_request));
- /* process_addba_req(padapter, (u8 *)&(pmlmeinfo->ADDBA_req), GetAddr3Ptr(pframe)); */
- process_addba_req(padapter, (u8 *)&(pmlmeinfo->ADDBA_req), addr);
-
- if (pmlmeinfo->accept_addba_req)
- issue_action_BA(padapter, addr, WLAN_ACTION_ADDBA_RESP, 0);
- else
- issue_action_BA(padapter, addr, WLAN_ACTION_ADDBA_RESP, 37);/* reject ADDBA Req */
-
- break;
-
- case WLAN_ACTION_ADDBA_RESP: /* ADDBA response */
- status = get_unaligned_le16(&frame_body[3]);
- tid = ((frame_body[5] >> 2) & 0x7);
-
- if (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);
- }
-
- if (psta->state & WIFI_STA_ALIVE_CHK_STATE) {
- psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
- psta->expire_to = pstapriv->expire_to;
- psta->state ^= WIFI_STA_ALIVE_CHK_STATE;
- }
-
- break;
-
- case WLAN_ACTION_DELBA: /* DELBA */
- if ((frame_body[3] & BIT(3)) == 0) {
- psta->htpriv.agg_enable_bitmap &=
- ~BIT((frame_body[3] >> 4) & 0xf);
- psta->htpriv.candidate_tid_bitmap &=
- ~BIT((frame_body[3] >> 4) & 0xf);
- } else if ((frame_body[3] & BIT(3)) == BIT(3)) {
- tid = (frame_body[3] >> 4) & 0x0F;
-
- 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;
- }
- }
- return _SUCCESS;
-}
-
-static s32 rtw_action_public_decache(union recv_frame *recv_frame, s32 token)
-{
- struct adapter *adapter = recv_frame->u.hdr.adapter;
- struct mlme_ext_priv *mlmeext = &(adapter->mlmeextpriv);
- u8 *frame = recv_frame->u.hdr.rx_data;
- u16 seq_ctrl = ((recv_frame->u.hdr.attrib.seq_num & 0xffff) << 4) |
- (recv_frame->u.hdr.attrib.frag_num & 0xf);
-
- if (GetRetry(frame)) {
- if (token >= 0) {
- if ((seq_ctrl == mlmeext->action_public_rxseq)
- && (token == mlmeext->action_public_dialog_token))
- return _FAIL;
- } else {
- if (seq_ctrl == mlmeext->action_public_rxseq)
- return _FAIL;
- }
- }
-
- mlmeext->action_public_rxseq = seq_ctrl;
-
- if (token >= 0)
- mlmeext->action_public_dialog_token = token;
-
- return _SUCCESS;
-}
-
-static unsigned int on_action_public_p2p(union recv_frame *precv_frame)
-{
- u8 *pframe = precv_frame->u.hdr.rx_data;
- u8 *frame_body;
- u8 dialogToken = 0;
-
- 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;
-
- return _SUCCESS;
-}
-
-static unsigned int on_action_public_vendor(union recv_frame *precv_frame)
-{
- unsigned int ret = _FAIL;
- u8 *pframe = precv_frame->u.hdr.rx_data;
- u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
-
- if (!memcmp(frame_body + 2, P2P_OUI, 4))
- ret = on_action_public_p2p(precv_frame);
-
- return ret;
-}
-
-static unsigned int on_action_public_default(union recv_frame *precv_frame, u8 action)
-{
- unsigned int ret = _FAIL;
- u8 *pframe = precv_frame->u.hdr.rx_data;
- uint frame_len = precv_frame->u.hdr.len;
- u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
- u8 token;
- struct adapter *adapter = precv_frame->u.hdr.adapter;
- char msg[64];
-
- token = frame_body[2];
-
- if (rtw_action_public_decache(precv_frame, token) == _FAIL)
- goto exit;
-
- scnprintf(msg, sizeof(msg), "%s(token:%u)", action_public_str(action), token);
- rtw_cfg80211_rx_action(adapter, pframe, frame_len, msg);
-
- ret = _SUCCESS;
-
-exit:
- return ret;
-}
-
-unsigned int on_action_public(struct adapter *padapter, union recv_frame *precv_frame)
-{
- unsigned int ret = _FAIL;
- u8 *pframe = precv_frame->u.hdr.rx_data;
- u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
- u8 category, action;
-
- /* check RA matches or not */
- if (memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))
- goto exit;
-
- category = frame_body[0];
- if (category != RTW_WLAN_CATEGORY_PUBLIC)
- goto exit;
-
- action = frame_body[1];
- switch (action) {
- case ACT_PUBLIC_VENDOR:
- ret = on_action_public_vendor(precv_frame);
- break;
- default:
- ret = on_action_public_default(precv_frame, action);
- break;
- }
-
-exit:
- return ret;
-}
-
-unsigned int OnAction_ht(struct adapter *padapter, union recv_frame *precv_frame)
-{
- u8 *pframe = precv_frame->u.hdr.rx_data;
- u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
- u8 category, action;
-
- /* check RA matches or not */
- if (memcmp(myid(&(padapter->eeprompriv)), GetAddr1Ptr(pframe), ETH_ALEN))
- goto exit;
-
- category = frame_body[0];
- if (category != RTW_WLAN_CATEGORY_HT)
- goto exit;
-
- action = frame_body[1];
- switch (action) {
- case WLAN_HT_ACTION_COMPRESSED_BF:
- break;
- default:
- break;
- }
-
-exit:
-
- return _SUCCESS;
-}
-
-unsigned int OnAction_sa_query(struct adapter *padapter, union recv_frame *precv_frame)
-{
- u8 *pframe = precv_frame->u.hdr.rx_data;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- unsigned short tid;
-
- switch (pframe[WLAN_HDR_A3_LEN + 1]) {
- case 0: /* SA Query req */
- memcpy(&tid, &pframe[WLAN_HDR_A3_LEN + 2], sizeof(unsigned short));
- issue_action_SA_Query(padapter, GetAddr2Ptr(pframe), 1, tid);
- break;
-
- case 1: /* SA Query rsp */
- timer_delete_sync(&pmlmeext->sa_query_timer);
- break;
- default:
- break;
- }
-
- return _SUCCESS;
-}
-
-unsigned int OnAction(struct adapter *padapter, union recv_frame *precv_frame)
-{
- int i;
- unsigned char category;
- struct action_handler *ptable;
- unsigned char *frame_body;
- u8 *pframe = precv_frame->u.hdr.rx_data;
-
- frame_body = (unsigned char *)(pframe + sizeof(struct ieee80211_hdr_3addr));
-
- category = frame_body[0];
-
- for (i = 0; i < ARRAY_SIZE(OnAction_tbl); i++) {
- ptable = &OnAction_tbl[i];
-
- if (category == ptable->num)
- ptable->func(padapter, precv_frame);
- }
-
- return _SUCCESS;
-}
-
-unsigned int DoReserved(struct adapter *padapter, union recv_frame *precv_frame)
-{
- return _SUCCESS;
-}
-
-static struct xmit_frame *_alloc_mgtxmitframe(struct xmit_priv *pxmitpriv, bool once)
-{
- struct xmit_frame *pmgntframe;
- struct xmit_buf *pxmitbuf;
-
- if (once)
- pmgntframe = rtw_alloc_xmitframe_once(pxmitpriv);
- else
- pmgntframe = rtw_alloc_xmitframe_ext(pxmitpriv);
-
- if (!pmgntframe)
- goto exit;
-
- pxmitbuf = rtw_alloc_xmitbuf_ext(pxmitpriv);
- if (!pxmitbuf) {
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- pmgntframe = NULL;
- goto exit;
- }
-
- pmgntframe->frame_tag = MGNT_FRAMETAG;
- pmgntframe->pxmitbuf = pxmitbuf;
- pmgntframe->buf_addr = pxmitbuf->pbuf;
- pxmitbuf->priv_data = pmgntframe;
-
-exit:
- return pmgntframe;
-}
-
-inline struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv)
-{
- return _alloc_mgtxmitframe(pxmitpriv, false);
-}
-
-/* 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)
-{
- u8 wireless_mode;
- 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->tx_rate == IEEE80211_CCK_RATE_1MB)
- wireless_mode = WIRELESS_11B;
- else
- wireless_mode = WIRELESS_11G;
- pattrib->raid = rtw_get_mgntframe_raid(padapter, wireless_mode);
- pattrib->rate = pmlmeext->tx_rate;
-
- pattrib->encrypt = _NO_PRIVACY_;
- pattrib->bswenc = false;
-
- pattrib->qos_en = false;
- pattrib->ht_en = false;
- pattrib->bwmode = CHANNEL_WIDTH_20;
- pattrib->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
- pattrib->sgi = false;
-
- pattrib->seqnum = pmlmeext->mgnt_seq;
-
- pattrib->retry_ctrl = true;
-
- pattrib->mbssid = 0;
-}
-
-void update_mgntframe_attrib_addr(struct adapter *padapter, struct xmit_frame *pmgntframe)
-{
- u8 *pframe;
- struct pkt_attrib *pattrib = &pmgntframe->attrib;
-
- pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-
- memcpy(pattrib->ra, GetAddr1Ptr(pframe), ETH_ALEN);
- memcpy(pattrib->ta, GetAddr2Ptr(pframe), ETH_ALEN);
-}
-
-void dump_mgntframe(struct adapter *padapter, struct xmit_frame *pmgntframe)
-{
- if (padapter->bSurpriseRemoved ||
- padapter->driver_stopped) {
- rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
- return;
- }
-
- rtw_hal_mgnt_xmit(padapter, pmgntframe);
-}
-
-s32 dump_mgntframe_and_wait(struct adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms)
-{
- s32 ret = _FAIL;
- unsigned long irqL;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- struct xmit_buf *pxmitbuf = pmgntframe->pxmitbuf;
- struct submit_ctx sctx;
-
- if (padapter->bSurpriseRemoved ||
- padapter->driver_stopped) {
- rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
- return ret;
- }
-
- rtw_sctx_init(&sctx, timeout_ms);
- pxmitbuf->sctx = &sctx;
-
- ret = rtw_hal_mgnt_xmit(padapter, pmgntframe);
-
- if (ret == _SUCCESS)
- ret = rtw_sctx_wait(&sctx);
-
- spin_lock_irqsave(&pxmitpriv->lock_sctx, irqL);
- pxmitbuf->sctx = NULL;
- spin_unlock_irqrestore(&pxmitpriv->lock_sctx, irqL);
-
- return ret;
-}
-
-s32 dump_mgntframe_and_wait_ack(struct adapter *padapter, struct xmit_frame *pmgntframe)
-{
- static u8 seq_no;
- s32 ret = _FAIL;
- u32 timeout_ms = 500;/* 500ms */
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
- if (padapter->bSurpriseRemoved ||
- padapter->driver_stopped) {
- rtw_free_xmitbuf(&padapter->xmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(&padapter->xmitpriv, pmgntframe);
- return -1;
- }
-
- if (mutex_lock_interruptible(&pxmitpriv->ack_tx_mutex) == 0) {
- pxmitpriv->ack_tx = true;
- pxmitpriv->seq_no = seq_no++;
- pmgntframe->ack_report = 1;
- if (rtw_hal_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;
- signed 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);
-
- 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) {
- {
- int len_diff;
-
- memcpy(pframe, cur_network->ies, cur_network->ie_length);
- len_diff = update_hidden_ssid(pframe + _BEACON_IE_OFFSET_,
- cur_network->ie_length - _BEACON_IE_OFFSET_,
- pmlmeinfo->hidden_ssid_mode);
- pframe += (cur_network->ie_length + len_diff);
- pattrib->pktlen += (cur_network->ie_length + 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);
- }
-
- 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, WLAN_EID_SSID, cur_network->ssid.ssid_length, cur_network->ssid.ssid, &pattrib->pktlen);
-
- /* supported rates... */
- rate_len = rtw_get_rateset_len(cur_network->supported_rates);
- pframe = rtw_set_ie(pframe, WLAN_EID_SUPP_RATES, ((rate_len > 8) ? 8 : rate_len), cur_network->supported_rates, &pattrib->pktlen);
-
- /* DS parameter set */
- pframe = rtw_set_ie(pframe, WLAN_EID_DS_PARAMS, 1, (unsigned char *)&(cur_network->configuration.ds_config), &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, WLAN_EID_IBSS_PARAMS, 2, (unsigned char *)(&ATIMWindow), &pattrib->pktlen);
-
- /* ERP IE */
- pframe = rtw_set_ie(pframe, WLAN_EID_ERP_INFO, 1, &erpinfo, &pattrib->pktlen);
- }
-
- /* EXTERNDED SUPPORTED RATE */
- if (rate_len > 8)
- pframe = rtw_set_ie(pframe, WLAN_EID_EXT_SUPP_RATES, (rate_len - 8), (cur_network->supported_rates + 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) {
- rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- 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;
-
- if (!da)
- return;
-
- 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->mac_address;
-
- 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->ie_length > MAX_IE_SZ) {
- rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- return;
- }
-
- if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) {
- pwps_ie = rtw_get_wps_ie(cur_network->ies + _FIXED_IE_LENGTH_,
- cur_network->ie_length - _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->ie_length - 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->ie_length);
- pframe += cur_network->ie_length;
- pattrib->pktlen += cur_network->ie_length;
- }
-
- /* retrieve SSID IE from cur_network->ssid */
- {
- u8 *ssid_ie;
- signed int ssid_ielen;
- signed int ssid_ielen_diff;
- u8 *buf;
- u8 *ies = pmgntframe->buf_addr + TXDESC_OFFSET +
- sizeof(struct ieee80211_hdr_3addr);
-
- buf = kzalloc(MAX_IE_SZ, GFP_ATOMIC);
- if (!buf) {
- rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- return;
- }
-
- ssid_ie = rtw_get_ie(ies + _FIXED_IE_LENGTH_, WLAN_EID_SSID, &ssid_ielen,
- (pframe - ies) - _FIXED_IE_LENGTH_);
-
- ssid_ielen_diff = cur_network->ssid.ssid_length - ssid_ielen;
-
- if (ssid_ie && cur_network->ssid.ssid_length) {
- uint remainder_ielen;
- u8 *remainder_ie;
-
- remainder_ie = ssid_ie + 2;
- remainder_ielen = (pframe - remainder_ie);
-
- if (remainder_ielen > MAX_IE_SZ) {
- netdev_warn(padapter->pnetdev,
- FUNC_ADPT_FMT " remainder_ielen > MAX_IE_SZ\n",
- FUNC_ADPT_ARG(padapter));
- remainder_ielen = MAX_IE_SZ;
- }
-
- memcpy(buf, remainder_ie, remainder_ielen);
- memcpy(remainder_ie + ssid_ielen_diff, buf, remainder_ielen);
- *(ssid_ie + 1) = cur_network->ssid.ssid_length;
- memcpy(ssid_ie + 2, cur_network->ssid.ssid,
- cur_network->ssid.ssid_length);
-
- pframe += ssid_ielen_diff;
- pattrib->pktlen += ssid_ielen_diff;
- }
- kfree(buf);
- }
- } 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, WLAN_EID_SSID, cur_network->ssid.ssid_length, cur_network->ssid.ssid, &pattrib->pktlen);
-
- /* supported rates... */
- rate_len = rtw_get_rateset_len(cur_network->supported_rates);
- pframe = rtw_set_ie(pframe, WLAN_EID_SUPP_RATES, ((rate_len > 8) ? 8 : rate_len), cur_network->supported_rates, &pattrib->pktlen);
-
- /* DS parameter set */
- pframe = rtw_set_ie(pframe, WLAN_EID_DS_PARAMS, 1, (unsigned char *)&(cur_network->configuration.ds_config), &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, WLAN_EID_IBSS_PARAMS, 2, (unsigned char *)(&ATIMWindow), &pattrib->pktlen);
-
- /* ERP IE */
- pframe = rtw_set_ie(pframe, WLAN_EID_ERP_INFO, 1, &erpinfo, &pattrib->pktlen);
- }
-
- /* EXTERNDED SUPPORTED RATE */
- if (rate_len > 8)
- pframe = rtw_set_ie(pframe, WLAN_EID_EXT_SUPP_RATES, (rate_len - 8), (cur_network->supported_rates + 8), &pattrib->pktlen);
-
- /* todo:HT for adhoc */
- }
-
- pattrib->last_txcmdsz = pattrib->pktlen;
-
- dump_mgntframe(padapter, pmgntframe);
-}
-
-static int _issue_probereq(struct adapter *padapter,
- struct ndis_802_11_ssid *pssid,
- u8 *da, u8 ch, bool append_wps, bool 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, WLAN_EID_SSID, pssid->ssid_length, pssid->ssid, &(pattrib->pktlen));
- else
- pframe = rtw_set_ie(pframe, WLAN_EID_SSID, 0, NULL, &(pattrib->pktlen));
-
- get_rate_set(padapter, bssrate, &bssrate_len);
-
- if (bssrate_len > 8) {
- pframe = rtw_set_ie(pframe, WLAN_EID_SUPP_RATES, 8, bssrate, &(pattrib->pktlen));
- pframe = rtw_set_ie(pframe, WLAN_EID_EXT_SUPP_RATES, (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
- } else {
- pframe = rtw_set_ie(pframe, WLAN_EID_SUPP_RATES, bssrate_len, bssrate, &(pattrib->pktlen));
- }
-
- if (ch)
- pframe = rtw_set_ie(pframe, WLAN_EID_DS_PARAMS, 1, &ch, &pattrib->pktlen);
-
- if (append_wps) {
- /* 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, 0, 1, false);
-}
-
-int issue_probereq_ex(struct adapter *padapter, struct ndis_802_11_ssid *pssid, u8 *da, u8 ch, bool append_wps,
- int try_cnt, int wait_ms)
-{
- int ret;
- int i = 0;
-
- do {
- ret = _issue_probereq(padapter, pssid, da, ch, append_wps,
- wait_ms > 0);
-
- i++;
-
- if (padapter->driver_stopped || 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;
- #ifndef DBG_XMIT_ACK
- goto exit;
- #endif
- }
-
-exit:
- return ret;
-}
-
-/* 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;
- unsigned short 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;
- __le16 le_tmp;
-
- 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 != WLAN_STATUS_SUCCESS)
- val16 = 0;
-
- if (val16)
- use_shared_key = 1;
-
- le_tmp = cpu_to_le16(val16);
-
- pframe = rtw_set_fixed_ie(pframe, _AUTH_ALGM_NUM_, (unsigned char *)&le_tmp, &(pattrib->pktlen));
-
- /* setting auth seq number */
- val16 = (u16)psta->auth_seq;
- le_tmp = cpu_to_le16(val16);
- pframe = rtw_set_fixed_ie(pframe, _AUTH_SEQ_NUM_, (unsigned char *)&le_tmp, &(pattrib->pktlen));
-
- /* setting status code... */
- val16 = status;
- le_tmp = cpu_to_le16(val16);
- pframe = rtw_set_fixed_ie(pframe, _STATUS_CODE_, (unsigned char *)&le_tmp, &(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, WLAN_EID_CHALLENGE, 128, psta->chg_txt, &(pattrib->pktlen));
-
- } else {
- 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 == dot11_auth_algrthm_shared) ? 1 : 0;/* 0:OPEN System, 1:Shared key */
- if (val16)
- use_shared_key = 1;
- le_tmp = cpu_to_le16(val16);
-
- /* setting IV for auth seq #3 */
- if ((pmlmeinfo->auth_seq == 3) && (pmlmeinfo->state & WIFI_FW_AUTH_STATE) && (use_shared_key == 1)) {
- __le32 le_tmp32;
-
- 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;
- }
-
- pframe = rtw_set_fixed_ie(pframe, _AUTH_ALGM_NUM_, (unsigned char *)&le_tmp, &(pattrib->pktlen));
-
- /* setting auth seq number */
- le_tmp = cpu_to_le16(pmlmeinfo->auth_seq);
- pframe = rtw_set_fixed_ie(pframe, _AUTH_SEQ_NUM_, (unsigned char *)&le_tmp, &(pattrib->pktlen));
-
- /* setting status code... */
- le_tmp = cpu_to_le16(status);
- pframe = rtw_set_fixed_ie(pframe, _STATUS_CODE_, (unsigned char *)&le_tmp, &(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, WLAN_EID_CHALLENGE, 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, (u8 *)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, le_tmp;
-
- 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(GetAddr1Ptr(pwlanhdr), pstat->hwaddr, ETH_ALEN);
- memcpy(GetAddr2Ptr(pwlanhdr), myid(&(padapter->eeprompriv)), ETH_ALEN);
- memcpy(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 {
- rtw_free_xmitbuf(pxmitpriv, pmgntframe->pxmitbuf);
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
- 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));
-
- le_tmp = cpu_to_le16(pstat->aid | BIT(14) | BIT(15));
- pframe = rtw_set_fixed_ie(pframe, _ASOC_ID_, (unsigned char *)&le_tmp, &(pattrib->pktlen));
-
- if (pstat->bssratelen <= 8) {
- pframe = rtw_set_ie(pframe, WLAN_EID_SUPP_RATES, pstat->bssratelen, pstat->bssrateset, &(pattrib->pktlen));
- } else {
- pframe = rtw_set_ie(pframe, WLAN_EID_SUPP_RATES, 8, pstat->bssrateset, &(pattrib->pktlen));
- pframe = rtw_set_ie(pframe, WLAN_EID_EXT_SUPP_RATES, (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 */
- /* p = hostapd_eid_ht_capabilities_info(hapd, p); */
- pbuf = rtw_get_ie(ie + _BEACON_IE_OFFSET_, WLAN_EID_HT_CAPABILITY, &ie_len, (pnetwork->ie_length - _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 */
- /* p = hostapd_eid_ht_operation(hapd, p); */
- pbuf = rtw_get_ie(ie + _BEACON_IE_OFFSET_, WLAN_EID_HT_OPERATION, &ie_len, (pnetwork->ie_length - _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, WLAN_EID_VENDOR_SPECIFIC, &ie_len, (pnetwork->ie_length - _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, WLAN_EID_VENDOR_SPECIFIC, 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;
- }
-
- 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;
- struct ieee80211_hdr *pwlanhdr;
- __le16 *fctrl;
- __le16 val16;
- unsigned int i, j, index = 0;
- unsigned char bssrate[NumRates], sta_bssrate[NumRates];
- struct ndis_80211_var_ie *pIE;
- 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;
- u8 vs_ie_length = 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 */
- val16 = cpu_to_le16(3);
- memcpy(pframe, (unsigned char *)&val16, 2);
- pframe += 2;
- pattrib->pktlen += 2;
-
- /* SSID */
- pframe = rtw_set_ie(pframe, WLAN_EID_SSID, pmlmeinfo->network.ssid.ssid_length, 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 < sta_bssrate_len; i++) { */
- /* */
-
- for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
- if (pmlmeinfo->network.supported_rates[i] == 0)
- break;
- }
-
- for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
- if (pmlmeinfo->network.supported_rates[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.supported_rates[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.supported_rates[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, WLAN_EID_SUPP_RATES, 8, bssrate, &(pattrib->pktlen));
- pframe = rtw_set_ie(pframe, WLAN_EID_EXT_SUPP_RATES, (bssrate_len - 8), (bssrate + 8), &(pattrib->pktlen));
- } else
- pframe = rtw_set_ie(pframe, WLAN_EID_SUPP_RATES, bssrate_len, bssrate, &(pattrib->pktlen));
-
- /* vendor specific IE, such as WPA, WMM, WPS */
- for (i = sizeof(struct ndis_802_11_fix_ie); i < pmlmeinfo->network.ie_length;) {
- if (i + sizeof(*pIE) > pmlmeinfo->network.ie_length)
- break;
- pIE = (struct ndis_80211_var_ie *)(pmlmeinfo->network.ies + i);
- if (i + sizeof(*pIE) + pIE->length > pmlmeinfo->network.ie_length)
- break;
-
- switch (pIE->element_id) {
- case WLAN_EID_VENDOR_SPECIFIC:
- if ((!memcmp(pIE->data, RTW_WPA_OUI, 4)) ||
- (!memcmp(pIE->data, WMM_OUI, 4)) ||
- (!memcmp(pIE->data, WPS_OUI, 4))) {
- vs_ie_length = pIE->length;
- if ((!padapter->registrypriv.wifi_spec) && (!memcmp(pIE->data, WPS_OUI, 4))) {
- /* Commented by Kurt 20110629
- * In some older APs, WPS handshake
- * would be fail if we append vendor
- * extensions information to AP
- */
-
- vs_ie_length = 14;
- }
-
- pframe = rtw_set_ie(pframe, WLAN_EID_VENDOR_SPECIFIC, vs_ie_length, pIE->data, &(pattrib->pktlen));
- }
- break;
-
- case WLAN_EID_RSN:
- pframe = rtw_set_ie(pframe, WLAN_EID_RSN, pIE->length, pIE->data, &(pattrib->pktlen));
- break;
- case WLAN_EID_HT_CAPABILITY:
- if (padapter->mlmepriv.htpriv.ht_option) {
- if (!(is_ap_in_tkip(padapter))) {
- memcpy(&(pmlmeinfo->HT_caps), pIE->data, sizeof(struct HT_caps_element));
- pframe = rtw_set_ie(pframe, WLAN_EID_HT_CAPABILITY, pIE->length, (u8 *)(&(pmlmeinfo->HT_caps)), &(pattrib->pktlen));
- }
- }
- break;
-
- case WLAN_EID_EXT_CAPABILITY:
- if (padapter->mlmepriv.htpriv.ht_option)
- pframe = rtw_set_ie(pframe, WLAN_EID_EXT_CAPABILITY, 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, WLAN_EID_VENDOR_SPECIFIC, 6, REALTEK_96B_IE, &(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
- rtw_buf_free(&pmlmepriv->assoc_req, &pmlmepriv->assoc_req_len);
-}
-
-/* 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, bool 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;
-}
-
-/*
- * [IMPORTANT] Don't call this function in interrupt context
- *
- * 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;
- struct sta_info *psta;
-
- /* da == NULL, assume it's null data for sta to ap*/
- if (!da)
- da = get_my_bssid(&(pmlmeinfo->network));
-
- psta = rtw_get_stainfo(&padapter->stapriv, da);
- if (psta) {
- if (power_mode)
- rtw_hal_macid_sleep(padapter, psta->mac_id);
- else
- rtw_hal_macid_wakeup(padapter, psta->mac_id);
- } else {
- WARN_ON(1);
- }
-
- do {
- ret = _issue_nulldata(padapter, da, power_mode, wait_ms > 0);
-
- i++;
-
- if (padapter->driver_stopped || 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;
- #ifndef DBG_XMIT_ACK
- goto exit;
- #endif
- }
-
-exit:
- return ret;
-}
-
-/*
- * [IMPORTANT] This function run in interrupt context
- *
- * The null data packet would be sent without power bit,
- * and not guarantee success.
- */
-s32 issue_nulldata_in_interrupt(struct adapter *padapter, u8 *da)
-{
- struct mlme_ext_priv *pmlmeext;
- struct mlme_ext_info *pmlmeinfo;
-
- pmlmeext = &padapter->mlmeextpriv;
- pmlmeinfo = &pmlmeext->mlmext_info;
-
- /* da == NULL, assume it's null data for sta to ap*/
- if (!da)
- da = get_my_bssid(&(pmlmeinfo->network));
-
- return _issue_nulldata(padapter, da, 0, false);
-}
-
-/* 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, bool wait_ack)
-{
- int ret = _FAIL;
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- unsigned char *pframe;
- struct ieee80211_hdr *pwlanhdr;
- __le16 *fctrl;
- u16 *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->driver_stopped || 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;
- #ifndef DBG_XMIT_ACK
- goto exit;
- #endif
- }
-
-exit:
- return ret;
-}
-
-static int _issue_deauth(struct adapter *padapter, unsigned char *da,
- unsigned short reason, bool 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;
-
- 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->driver_stopped || padapter->bSurpriseRemoved)
- break;
-
- if (i < try_cnt && wait_ms > 0 && ret == _FAIL)
- mdelay(wait_ms);
-
- } while ((i < try_cnt) && ((ret == _FAIL) || (wait_ms == 0)));
-
- if (ret != _FAIL) {
- ret = _SUCCESS;
- #ifndef DBG_XMIT_ACK
- goto exit;
- #endif
- }
-
-exit:
- return ret;
-}
-
-void issue_action_SA_Query(struct adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid)
-{
- u8 category = RTW_WLAN_CATEGORY_SA_QUERY;
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- u8 *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;
- __le16 le_tmp;
-
- 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;
-
- if (raddr)
- memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
- else
- 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);
-
- switch (action) {
- case 0: /* SA Query req */
- pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)&pmlmeext->sa_query_seq, &pattrib->pktlen);
- pmlmeext->sa_query_seq++;
- /* send sa query request to AP, AP should reply sa query response in 1 second */
- set_sa_query_timer(pmlmeext, 1000);
- break;
-
- case 1: /* SA Query rsp */
- le_tmp = cpu_to_le16(tid);
- pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)&le_tmp, &pattrib->pktlen);
- break;
- default:
- break;
- }
-
- pattrib->last_txcmdsz = pattrib->pktlen;
-
- dump_mgntframe(padapter, pmgntframe);
-}
-
-void issue_action_BA(struct adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short status)
-{
- u8 category = RTW_WLAN_CATEGORY_BACK;
- u16 start_seq;
- u16 BA_para_set;
- u16 reason_code;
- u16 BA_timeout_value;
- u16 BA_starting_seqctrl = 0;
- enum ieee80211_max_ampdu_length_exp max_rx_ampdu_factor;
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- u8 *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;
- struct sta_info *psta;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct registry_priv *pregpriv = &padapter->registrypriv;
- __le16 le_tmp;
-
- 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->addr1, raddr, 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 (category == 3) {
- switch (action) {
- case 0: /* ADDBA req */
- do {
- pmlmeinfo->dialogToken++;
- } while (pmlmeinfo->dialogToken == 0);
- pframe = rtw_set_fixed_ie(pframe, 1, &(pmlmeinfo->dialogToken), &(pattrib->pktlen));
-
- if (hal_btcoex_IsBTCoexCtrlAMPDUSize(padapter)) {
- /* A-MSDU NOT Supported */
- BA_para_set = 0;
- /* immediate Block Ack */
- BA_para_set |= BIT(1) & IEEE80211_ADDBA_PARAM_POLICY_MASK;
- /* TID */
- BA_para_set |= (status << 2) & IEEE80211_ADDBA_PARAM_TID_MASK;
- /* max buffer size is 8 MSDU */
- BA_para_set |= (8 << 6) & IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK;
- } else {
- BA_para_set = (0x1002 | ((status & 0xf) << 2)); /* immediate ack & 64 buffer size */
- }
- le_tmp = cpu_to_le16(BA_para_set);
- pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(le_tmp)), &(pattrib->pktlen));
-
- BA_timeout_value = 5000;/* 5ms */
- le_tmp = cpu_to_le16(BA_timeout_value);
- pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(le_tmp)), &(pattrib->pktlen));
-
- /* if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.mac_address)) != NULL) */
- psta = rtw_get_stainfo(pstapriv, raddr);
- if (psta) {
- start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07] % 4096u) + 1;
-
- psta->BA_starting_seqctrl[status & 0x07] = start_seq;
-
- BA_starting_seqctrl = start_seq << 4;
- }
-
- le_tmp = cpu_to_le16(BA_starting_seqctrl);
- pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(le_tmp)), &(pattrib->pktlen));
- break;
-
- case 1: /* ADDBA rsp */
- pframe = rtw_set_fixed_ie(pframe, 1, &(pmlmeinfo->ADDBA_req.dialog_token), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&status), &(pattrib->pktlen));
- if (padapter->driver_rx_ampdu_factor != 0xFF)
- max_rx_ampdu_factor =
- (enum ieee80211_max_ampdu_length_exp)padapter->driver_rx_ampdu_factor;
- else
- rtw_hal_get_def_var(padapter,
- HW_VAR_MAX_RX_AMPDU_FACTOR, &max_rx_ampdu_factor);
-
- if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_64K)
- BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x1000); /* 64 buffer size */
- else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_32K)
- BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x0800); /* 32 buffer size */
- else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_16K)
- BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x0400); /* 16 buffer size */
- else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_8K)
- BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x0200); /* 8 buffer size */
- else
- BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x1000); /* 64 buffer size */
-
- if (hal_btcoex_IsBTCoexCtrlAMPDUSize(padapter) &&
- padapter->driver_rx_ampdu_factor == 0xFF) {
- /* max buffer size is 8 MSDU */
- BA_para_set &= ~IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK;
- BA_para_set |= (8 << 6) & IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK;
- }
-
- if (pregpriv->ampdu_amsdu == 0)/* disabled */
- le_tmp = cpu_to_le16(BA_para_set & ~BIT(0));
- else if (pregpriv->ampdu_amsdu == 1)/* enabled */
- le_tmp = cpu_to_le16(BA_para_set | BIT(0));
- else /* auto */
- le_tmp = cpu_to_le16(BA_para_set);
-
- pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(le_tmp)), &(pattrib->pktlen));
- pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(pmlmeinfo->ADDBA_req.BA_timeout_value)), &(pattrib->pktlen));
- break;
- case 2:/* DELBA */
- BA_para_set = (status & 0x1F) << 3;
- le_tmp = cpu_to_le16(BA_para_set);
- pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(le_tmp)), &(pattrib->pktlen));
-
- reason_code = 37;
- le_tmp = cpu_to_le16(reason_code);
- pframe = rtw_set_fixed_ie(pframe, 2, (unsigned char *)(&(le_tmp)), &(pattrib->pktlen));
- 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 (true == pmlmeinfo->bwmode_updated)
- return;
-
- category = RTW_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, WLAN_EID_BSS_COEX_2040, 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 = get_next(phead);
-
- while (1) {
- int len;
- u8 *p;
- struct wlan_bssid_ex *pbss_network;
-
- if (phead == plist)
- break;
-
- pnetwork = container_of(plist, struct wlan_network, list);
-
- plist = get_next(plist);
-
- pbss_network = (struct wlan_bssid_ex *)&pnetwork->network;
-
- p = rtw_get_ie(pbss_network->ies + _FIXED_IE_LENGTH_, WLAN_EID_HT_CAPABILITY, &len, pbss_network->ie_length - _FIXED_IE_LENGTH_);
- if (!p || len == 0) {/* non-HT */
-
- if (pbss_network->configuration.ds_config <= 0)
- continue;
-
- ICS[0][pbss_network->configuration.ds_config] = 1;
-
- if (ICS[0][0] == 0)
- ICS[0][0] = 1;
- }
- }
-
- spin_unlock_bh(&(pmlmepriv->scanned_queue.lock));
-
- for (i = 0; i < 8; i++) {
- int j, k = 0;
-
- if (ICS[i][0] != 1)
- continue;
-
- InfoContent[k] = i;
- /* SET_BSS_INTOLERANT_ELE_REG_CLASS(InfoContent, i); */
- k++;
-
- for (j = 1; j <= 14; j++) {
- if (ICS[i][j] != 1)
- continue;
-
- if (k < 16) {
- InfoContent[k] = j; /* channel number */
- /* SET_BSS_INTOLERANT_ELE_CHANNEL(InfoContent+k, j); */
- k++;
- }
- }
-
- pframe = rtw_set_ie(pframe, WLAN_EID_BSS_INTOLERANT_CHL_REPORT, 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));
- 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));
- psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
- psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
- }
- }
- }
-
- return _SUCCESS;
-}
-
-unsigned int send_beacon(struct adapter *padapter)
-{
- u8 bxmitok = false;
- int issue = 0;
- int poll = 0;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_BCN_VALID, NULL);
- rtw_hal_set_hwreg(padapter, HW_VAR_DL_BCN_SEL, NULL);
- do {
- issue_beacon(padapter, 100);
- issue++;
- do {
- cond_resched();
- rtw_hal_get_hwreg(padapter, HW_VAR_BCN_VALID, (u8 *)(&bxmitok));
- poll++;
- } while ((poll % 10) != 0 && !bxmitok &&
- !padapter->bSurpriseRemoved &&
- !padapter->driver_stopped);
-
- } while (false == bxmitok && issue < 100 && !padapter->bSurpriseRemoved &&
- !padapter->driver_stopped);
-
- if (padapter->bSurpriseRemoved || padapter->driver_stopped)
- return _FAIL;
-
- if (!bxmitok)
- return _FAIL;
- else
- return _SUCCESS;
-}
-
-/* Following are some utility functions for WiFi MLME */
-
-void site_survey(struct adapter *padapter)
-{
- unsigned char survey_channel = 0, val8;
- enum rt_scan_type scan_type = SCAN_PASSIVE;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- u32 initialgain = 0;
- u32 channel_scan_time_ms = 0;
-
- {
- 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;
- scan_type = (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, CHANNEL_WIDTH_20);
- else
- r8723bs_select_channel(padapter, survey_channel);
-
- if (scan_type == SCAN_ACTIVE) { /* obey the channel plan setting... */
- {
- int i;
-
- for (i = 0; i < RTW_SSID_SCAN_AMOUNT; i++) {
- if (!pmlmeext->sitesurvey_res.ssid[i].ssid_length)
- continue;
-
- /* IOT issue, When wifi_spec is not set, send one probe req without WPS IE. */
- if (padapter->registrypriv.wifi_spec)
- issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]), NULL);
- else
- issue_probereq_ex(padapter, &(pmlmeext->sitesurvey_res.ssid[i]), NULL, 0, 0, 0, 0);
-
- issue_probereq(padapter, &(pmlmeext->sitesurvey_res.ssid[i]), NULL);
- }
-
- if (pmlmeext->sitesurvey_res.scan_mode == SCAN_ACTIVE) {
- /* IOT issue, When wifi_spec is not set, send one probe req without WPS IE. */
- if (padapter->registrypriv.wifi_spec)
- issue_probereq(padapter, NULL, NULL);
- else
- issue_probereq_ex(padapter, NULL, NULL, 0, 0, 0, 0);
- issue_probereq(padapter, NULL, NULL);
- }
- }
- }
-
- channel_scan_time_ms = pmlmeext->chan_scan_time;
-
- set_survey_timer(pmlmeext, channel_scan_time_ms);
- } else {
- /* channel number is 0 or this channel is not valid. */
-
- {
- pmlmeext->sitesurvey_res.state = SCAN_COMPLETE;
-
- /* switch back to the original channel */
- /* SelectChannel(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset); */
-
- set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
- /* flush 4-AC Queue after site_survey */
- /* val8 = 0; */
- /* rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8)); */
-
- /* config MSR */
- set_msr(padapter, (pmlmeinfo->state & 0x3));
-
- initialgain = 0xff; /* restore RX GAIN */
- rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
- /* turn on dynamic functions */
- restore_dm_func_flag(padapter);
- /* switch_dm_func(padapter, DYNAMIC_ALL_FUNC_ENABLE, true); */
-
- if (is_client_associated_to_ap(padapter))
- issue_nulldata(padapter, NULL, 0, 3, 500);
-
- val8 = 0; /* survey done */
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
-
- 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, union recv_frame *precv_frame, struct wlan_bssid_ex *bssid)
-{
- int i;
- u32 len;
- u8 *p;
- u16 val16, subtype;
- u8 *pframe = precv_frame->u.hdr.rx_data;
- u32 packet_len = precv_frame->u.hdr.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));
-
- subtype = GetFrameSubType(pframe);
-
- if (subtype == WIFI_BEACON) {
- bssid->reserved[0] = 1;
- ie_offset = _BEACON_IE_OFFSET_;
- } else {
- /* FIXME : more type */
- if (subtype == WIFI_PROBERSP) {
- ie_offset = _PROBERSP_IE_OFFSET_;
- bssid->reserved[0] = 3;
- } else if (subtype == WIFI_PROBEREQ) {
- ie_offset = _PROBEREQ_IE_OFFSET_;
- bssid->reserved[0] = 2;
- } 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->ie_length = len;
- memcpy(bssid->ies, (pframe + sizeof(struct ieee80211_hdr_3addr)), bssid->ie_length);
-
- /* get the signal strength */
- bssid->rssi = precv_frame->u.hdr.attrib.phy_info.RecvSignalPower; /* in dBM.raw data */
- bssid->phy_info.signal_quality = precv_frame->u.hdr.attrib.phy_info.SignalQuality;/* in percentage */
- bssid->phy_info.signal_strength = precv_frame->u.hdr.attrib.phy_info.SignalStrength;/* in percentage */
-
- /* checking SSID */
- p = rtw_get_ie(bssid->ies + ie_offset, WLAN_EID_SSID, &len, bssid->ie_length - 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.ssid_length = *(p + 1);
- } else
- bssid->ssid.ssid_length = 0;
-
- memset(bssid->supported_rates, 0, NDIS_802_11_LENGTH_RATES_EX);
-
- /* checking rate info... */
- i = 0;
- p = rtw_get_ie(bssid->ies + ie_offset, WLAN_EID_SUPP_RATES, &len, bssid->ie_length - ie_offset);
- if (p) {
- if (len > NDIS_802_11_LENGTH_RATES_EX)
- return _FAIL;
-
- memcpy(bssid->supported_rates, (p + 2), len);
- i = len;
- }
-
- p = rtw_get_ie(bssid->ies + ie_offset, WLAN_EID_EXT_SUPP_RATES, &len, bssid->ie_length - ie_offset);
- if (p) {
- if (len > (NDIS_802_11_LENGTH_RATES_EX - i))
- return _FAIL;
-
- memcpy(bssid->supported_rates + i, (p + 2), len);
- }
-
- if (bssid->ie_length < 12)
- return _FAIL;
-
- /* Checking for ds_config */
- p = rtw_get_ie(bssid->ies + ie_offset, WLAN_EID_DS_PARAMS, &len, bssid->ie_length - ie_offset);
-
- bssid->configuration.ds_config = 0;
- bssid->configuration.length = 0;
-
- if (p) {
- bssid->configuration.ds_config = *(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, WLAN_EID_HT_OPERATION, &len, bssid->ie_length - ie_offset);
- if (p) {
- struct HT_info_element *HT_info = (struct HT_info_element *)(p + 2);
-
- bssid->configuration.ds_config = HT_info->primary_channel;
- } else { /* use current channel */
- bssid->configuration.ds_config = rtw_get_oper_ch(padapter);
- }
- }
-
- memcpy(&le32_tmp, rtw_get_beacon_interval_from_ie(bssid->ies), 2);
- bssid->configuration.beacon_period = le32_to_cpu(le32_tmp);
-
- val16 = rtw_get_capability((struct wlan_bssid_ex *)bssid);
-
- if (val16 & BIT(0)) {
- bssid->infrastructure_mode = NL80211_IFTYPE_STATION;
- memcpy(bssid->mac_address, GetAddr2Ptr(pframe), ETH_ALEN);
- } else {
- bssid->infrastructure_mode = NL80211_IFTYPE_ADHOC;
- memcpy(bssid->mac_address, GetAddr3Ptr(pframe), ETH_ALEN);
- }
-
- if (val16 & BIT(4))
- bssid->privacy = 1;
- else
- bssid->privacy = 0;
-
- bssid->configuration.atim_window = 0;
-
- /* 20/40 BSS Coexistence check */
- if ((pregistrypriv->wifi_spec == 1) && (false == pmlmeinfo->bwmode_updated)) {
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- p = rtw_get_ie(bssid->ies + ie_offset, WLAN_EID_HT_CAPABILITY, &len, bssid->ie_length - 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 signal_quality 101 */
- if (bssid->configuration.ds_config != rtw_get_oper_ch(padapter))
- bssid->phy_info.signal_quality = 101;
-
- return _SUCCESS;
-}
-
-void start_create_ibss(struct adapter *padapter)
-{
- unsigned short caps;
- u8 val8;
- u8 join_type;
- 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.ds_config;
- 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 & WLAN_CAPABILITY_IBSS) {/* adhoc master */
- val8 = 0xcf;
- rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
-
- /* 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, 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_hal_set_hwreg(padapter, HW_VAR_BSSID, padapter->registrypriv.dev_network.mac_address);
- join_type = 0;
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
-
- 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;
-
- /* update wireless mode */
- update_wireless_mode(padapter);
-
- /* update capability */
- caps = rtw_get_capability((struct wlan_bssid_ex *)pnetwork);
- update_capinfo(padapter, caps);
- if (caps & WLAN_CAPABILITY_ESS) {
- set_msr(padapter, WIFI_FW_STATION_STATE);
-
- val8 = (pmlmeinfo->auth_algo == dot11_auth_algrthm_8021x) ? 0xcc : 0xcf;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
-
- /* 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.
- */
- {
- /* To avoid connecting to AP fail during resume process, change retry count from 5 to 1 */
- issue_deauth_ex(padapter, pnetwork->mac_address, WLAN_REASON_DEAUTH_LEAVING, 1, 100);
- }
-
- /* 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 & WLAN_CAPABILITY_IBSS) { /* adhoc client */
- set_msr(padapter, WIFI_FW_ADHOC_STATE);
-
- val8 = 0xcf;
- rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)(&val8));
-
- 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;
-
- timer_delete_sync(&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;
-
- netdev_dbg(padapter->pnetdev, "start auth\n");
- 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;
-
- timer_delete_sync(&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);
-}
-
-unsigned int 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 _SUCCESS;
-
- 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);
- }
- }
-
- return _SUCCESS;
-}
-
-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_, WLAN_EID_COUNTRY, &len, bssid->ie_length - _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++) {
- if (fcn <= 14)
- channel = fcn + j; /* 2.4 GHz */
- else
- channel = fcn + j * 4; /* 5 GHz */
-
- 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 = j = k = 0;
- if (pregistrypriv->wireless_mode & WIRELESS_11G) {
- do {
- if ((i == MAX_CHANNEL_NUM) ||
- (chplan_sta[i].channel_num == 0) ||
- (chplan_sta[i].channel_num > 14))
- break;
-
- if ((j == chplan_ap.Len) || (chplan_ap.Channel[j] > 14))
- break;
-
- if (chplan_sta[i].channel_num == chplan_ap.Channel[j]) {
- chplan_new[k].channel_num = chplan_ap.Channel[j];
- chplan_new[k].scan_type = SCAN_ACTIVE;
- i++;
- j++;
- k++;
- } else if (chplan_sta[i].channel_num < chplan_ap.Channel[j]) {
- chplan_new[k].channel_num = chplan_sta[i].channel_num;
- chplan_new[k].scan_type = SCAN_PASSIVE;
- i++;
- k++;
- } else if (chplan_sta[i].channel_num > chplan_ap.Channel[j]) {
- chplan_new[k].channel_num = chplan_ap.Channel[j];
- chplan_new[k].scan_type = SCAN_ACTIVE;
- j++;
- k++;
- }
- } while (1);
-
- /* change AP not support channel to Passive scan */
- while ((i < MAX_CHANNEL_NUM) &&
- (chplan_sta[i].channel_num != 0) &&
- (chplan_sta[i].channel_num <= 14)) {
- chplan_new[k].channel_num = chplan_sta[i].channel_num;
- chplan_new[k].scan_type = SCAN_PASSIVE;
- i++;
- k++;
- }
-
- /* add channel AP supported */
- while ((j < chplan_ap.Len) && (chplan_ap.Channel[j] <= 14)) {
- chplan_new[k].channel_num = chplan_ap.Channel[j];
- chplan_new[k].scan_type = SCAN_ACTIVE;
- j++;
- k++;
- }
- } else {
- /* keep original STA 2.4G channel plan */
- while ((i < MAX_CHANNEL_NUM) &&
- (chplan_sta[i].channel_num != 0) &&
- (chplan_sta[i].channel_num <= 14)) {
- chplan_new[k].channel_num = chplan_sta[i].channel_num;
- chplan_new[k].scan_type = chplan_sta[i].scan_type;
- i++;
- k++;
- }
-
- /* skip AP 2.4G channel plan */
- while ((j < chplan_ap.Len) && (chplan_ap.Channel[j] <= 14))
- j++;
- }
-
- pmlmeext->update_channel_plan_by_ap_done = 1;
- }
-
- /* If channel is used by AP, set channel scan type to active */
- channel = bssid->configuration.ds_config;
- chplan_new = pmlmeext->channel_set;
- i = 0;
- while ((i < MAX_CHANNEL_NUM) && (chplan_new[i].channel_num != 0)) {
- if (chplan_new[i].channel_num == channel) {
- if (chplan_new[i].scan_type == SCAN_PASSIVE)
- chplan_new[i].scan_type = SCAN_ACTIVE;
- break;
- }
- i++;
- }
-}
-
-/* Following are the functions to report events */
-
-void report_survey_event(struct adapter *padapter, union 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->u.hdr.rx_data; */
- /* uint len = precv_frame->u.hdr.len; */
-
- if (!padapter)
- return;
-
- pmlmeext = &padapter->mlmeextpriv;
- pcmdpriv = &padapter->cmdpriv;
-
- pcmd_obj = kzalloc_obj(*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 = SET_MLME_EVT_CMD;
- 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 = SURVEY_EVENT;
- 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_obj(*pcmd_obj, GFP_ATOMIC);
- if (!pcmd_obj)
- return;
-
- cmdsz = (sizeof(struct surveydone_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 = SET_MLME_EVT_CMD;
- 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 = SURVEY_DONE_EVENT;
- 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_obj(*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 = SET_MLME_EVT_CMD;
- 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 joinbss_event);
- pc2h_evt_hdr->ID = JOIN_BSS_EVENT;
- 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 = pjoinbss_evt->network.aid = res;
-
- rtw_joinbss_event_prehandle(padapter, (u8 *)&pjoinbss_evt->network);
-
- rtw_enqueue_cmd(pcmdpriv, pcmd_obj);
-}
-
-void report_wmm_edca_update(struct adapter *padapter)
-{
- struct cmd_obj *pcmd_obj;
- u8 *pevtcmd;
- u32 cmdsz;
- struct wmm_event *pwmm_event;
- struct C2HEvent_Header *pc2h_evt_hdr;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
- pcmd_obj = kzalloc_obj(*pcmd_obj, GFP_ATOMIC);
- if (!pcmd_obj)
- return;
-
- cmdsz = (sizeof(struct wmm_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 = SET_MLME_EVT_CMD;
- 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 wmm_event);
- pc2h_evt_hdr->ID = WMM_EVENT;
- pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
-
- pwmm_event = (struct wmm_event *)(pevtcmd + sizeof(struct C2HEvent_Header));
- pwmm_event->wmm = 0;
-
- 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_obj(*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 = SET_MLME_EVT_CMD;
- 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 = DEL_STA_EVENT;
- 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_obj(*pcmd_obj, GFP_ATOMIC);
- if (!pcmd_obj)
- return;
-
- cmdsz = (sizeof(struct stassoc_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 = SET_MLME_EVT_CMD;
- 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 = ADD_STA_EVENT;
- 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;
-
- psta->htpriv.rx_ampdu_min_spacing =
- (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para &
- IEEE80211_HT_CAP_AMPDU_DENSITY) >> 2;
-
- if (support_short_GI(padapter, &(pmlmeinfo->HT_caps), CHANNEL_WIDTH_20))
- psta->htpriv.sgi_20m = true;
-
- if (support_short_GI(padapter, &(pmlmeinfo->HT_caps), CHANNEL_WIDTH_40))
- psta->htpriv.sgi_40m = true;
-
- psta->qos_option = true;
-
- psta->htpriv.ldpc_cap = pmlmepriv->htpriv.ldpc_cap;
- psta->htpriv.stbc_cap = pmlmepriv->htpriv.stbc_cap;
- psta->htpriv.beamform_cap = pmlmepriv->htpriv.beamform_cap;
-
- memcpy(&psta->htpriv.ht_cap, &pmlmeinfo->HT_caps, sizeof(struct ieee80211_ht_cap));
- } else {
- psta->htpriv.ht_option = false;
-
- psta->htpriv.ampdu_enable = false;
-
- psta->htpriv.sgi_20m = false;
- psta->htpriv.sgi_40m = false;
- psta->qos_option = false;
- }
-
- psta->htpriv.ch_offset = pmlmeext->cur_ch_offset;
-
- psta->htpriv.agg_enable_bitmap = 0x0;/* reset */
- psta->htpriv.candidate_tid_bitmap = 0x0;/* reset */
-
- psta->bw_mode = pmlmeext->cur_bwmode;
-
- /* QoS */
- if (pmlmepriv->qospriv.qos_option)
- psta->qos_option = true;
-
- update_ldpc_stbc_cap(psta);
-
- spin_lock_bh(&psta->lock);
- psta->state = _FW_LINKED;
- spin_unlock_bh(&psta->lock);
-}
-
-static void rtw_mlmeext_disconnect(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 = (struct wlan_bssid_ex *)(&(pmlmeinfo->network));
-
- /* set_opmode_cmd(padapter, infra_client_with_mlme); */
-
- /* For safety, prevent from keeping macid sleep.
- * If we can sure all power mode enter/leave are paired,
- * this check can be removed.
- * Lucas@20131113
- */
- /* wakeup macid after disconnect. */
- {
- struct sta_info *psta;
-
- psta = rtw_get_stainfo(&padapter->stapriv, get_my_bssid(pnetwork));
- if (psta)
- rtw_hal_macid_wakeup(padapter, psta->mac_id);
- }
-
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_DISCONNECT, NULL);
- rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, null_addr);
-
- /* 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 = 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);
-
- timer_delete_sync(&pmlmeext->link_timer);
-
- pmlmepriv->link_detect_info.traffic_transition_count = 0;
- pmlmepriv->link_detect_info.low_power_transition_count = 0;
-}
-
-void mlmeext_joinbss_event_callback(struct adapter *padapter, int join_res)
-{
- 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;
- u8 join_type;
- struct sta_info *psta;
-
- if (join_res < 0) {
- join_type = 1;
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
- rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, null_addr);
-
- return;
- }
-
- if ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE)
- /* update bc/mc sta_info */
- update_bmc_sta(padapter);
-
- /* turn on dynamic functions */
- switch_dm_func(padapter, DYNAMIC_ALL_FUNC_ENABLE, true);
-
- /* update IOT-related issue */
- update_IOT_info(padapter);
-
- rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, cur_network->supported_rates);
-
- /* BCN interval */
- rtw_hal_set_hwreg(padapter, HW_VAR_BEACON_INTERVAL, (u8 *)(&pmlmeinfo->bcn_interval));
-
- /* update capability */
- update_capinfo(padapter, pmlmeinfo->capability);
-
- /* WMM, Update EDCA param */
- WMMOnAssocRsp(padapter);
-
- /* HT */
- HTOnAssocRsp(padapter);
-
- /* Set cur_channel&cur_bwmode&cur_ch_offset */
- set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
- psta = rtw_get_stainfo(pstapriv, cur_network->mac_address);
- 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_sta_media_status_rpt(padapter, psta, 1);
-
- /*
- * wakeup macid after join bss successfully to ensure
- * the subsequent data frames can be sent out normally
- */
- rtw_hal_macid_wakeup(padapter, psta->mac_id);
- }
-
- join_type = 2;
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
-
- if ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE) {
- /* correcting TSF */
- correct_TSF(padapter, pmlmeext);
-
- /* set_link_timer(pmlmeext, DISCONNECT_TO); */
- }
-
- rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_CONNECT, 0);
-}
-
-/* currently only adhoc mode will go here */
-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;
- u8 join_type;
-
- 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 */
- /* update TSF Value */
- /* update_TSF(pmlmeext, pframe, len); */
-
- /* correcting TSF */
- correct_TSF(padapter, pmlmeext);
-
- /* 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;
- }
-
- join_type = 2;
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
- }
-
- pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
-
- psta->bssratelen = rtw_get_rateset_len(pmlmeinfo->FW_sta_info[psta->mac_id].SupportedRates);
- memcpy(psta->bssrateset, pmlmeinfo->FW_sta_info[psta->mac_id].SupportedRates, psta->bssratelen);
-
- /* update adhoc sta_info */
- update_sta_info(padapter, psta);
-
- rtw_hal_update_sta_rate_mask(padapter, psta);
-
- /* ToDo: HT for Ad-hoc */
- psta->wireless_mode = rtw_check_network_type(psta->bssrateset, pmlmeext->cur_channel);
- psta->raid = networktype_to_raid_ex(padapter, psta);
-
- /* rate radaptive */
- update_ra_entry(padapter, psta);
-}
-
-void mlmeext_sta_del_event_callback(struct adapter *padapter)
-{
- if (is_client_associated_to_ap(padapter) || is_IBSS_empty(padapter))
- rtw_mlmeext_disconnect(padapter);
-}
-
-/* Following are the functions for the timer handlers */
-
-void _linked_info_dump(struct adapter *padapter)
-{
- int i;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- int UndecoratedSmoothedPWDB;
- struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
-
- if (padapter->bLinkInfoDump) {
- if ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE)
- rtw_hal_get_def_var(padapter,
- HAL_DEF_UNDERCORATEDSMOOTHEDPWDB,
- &UndecoratedSmoothedPWDB);
-
- for (i = 0; i < NUM_STA; i++) {
- if (pdvobj->macid[i]) {
- if (i != 1) /* skip bc/mc sta */
- /* tx info ============ */
- rtw_hal_get_def_var(padapter, HW_DEF_RA_INFO_DUMP, &i);
- }
- }
- }
-}
-
-static u8 chk_ap_is_alive(struct adapter *padapter, 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;
-}
-
-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;
-
- if (is_client_associated_to_ap(padapter)) {
- /* linked infrastructure client mode */
-
- int tx_chk = _SUCCESS, rx_chk = _SUCCESS;
- int rx_chk_limit;
- int link_count_limit;
-
- #if defined(DBG_ROAMING_TEST)
- rx_chk_limit = 1;
- #else
- rx_chk_limit = 8;
- #endif
- link_count_limit = 7; /* 16 sec */
-
- /* Marked by Kurt 20130715 */
- /* For WiDi 3.5 and latered on, they don't ask WiDi sink to do roaming, */
- /* so we could not check rx limit that strictly. */
- /* todo: To check why we under miracast session, rx_chk would be false */
- psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.mac_address);
- if (psta) {
- if (!chk_ap_is_alive(padapter, psta))
- rx_chk = _FAIL;
-
- if (pxmitpriv->last_tx_pkts == pxmitpriv->tx_pkts)
- tx_chk = _FAIL;
-
- {
- if (rx_chk != _SUCCESS) {
- if (pmlmeext->retry == 0) {
- issue_probereq_ex(padapter,
- &pmlmeinfo->network.ssid,
- pmlmeinfo->network.mac_address,
- 0, 0, 0, 0);
- issue_probereq_ex(padapter,
- &pmlmeinfo->network.ssid,
- pmlmeinfo->network.mac_address,
- 0, 0, 0, 0);
- issue_probereq_ex(padapter,
- &pmlmeinfo->network.ssid,
- pmlmeinfo->network.mac_address,
- 0, 0, 0, 0);
- }
- }
-
- if (tx_chk != _SUCCESS &&
- pmlmeinfo->link_count++ == link_count_limit)
- tx_chk = issue_nulldata_in_interrupt(padapter, NULL);
- }
-
- if (rx_chk == _FAIL) {
- pmlmeext->retry++;
- if (pmlmeext->retry > rx_chk_limit) {
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " disconnect or roaming\n",
- FUNC_ADPT_ARG(padapter));
- receive_disconnect(padapter, pmlmeinfo->network.mac_address
- , WLAN_REASON_EXPIRATION_CHK);
- return;
- }
- } else {
- pmlmeext->retry = 0;
- }
-
- if (tx_chk == _FAIL) {
- pmlmeinfo->link_count %= (link_count_limit + 1);
- } else {
- pxmitpriv->last_tx_pkts = pxmitpriv->tx_pkts;
- pmlmeinfo->link_count = 0;
- }
-
- } /* end of if ((psta = rtw_get_stainfo(pstapriv, passoc_res->network.mac_address)) != NULL) */
- } else if (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)
- 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);
- }
- }
- }
-
- /* set_link_timer(pmlmeext, DISCONNECT_TO); */
- }
-}
-
-void survey_timer_hdl(struct timer_list *t)
-{
- struct adapter *padapter =
- timer_container_of(padapter, t, mlmeextpriv.survey_timer);
- struct cmd_obj *ph2c;
- struct sitesurvey_parm *psurveyPara;
- struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
- /* 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) {
- pmlmeext->sitesurvey_res.channel_idx = pmlmeext->sitesurvey_res.ch_num;
-
- pmlmeext->scan_abort = false;/* reset */
- }
-
- ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c)
- return;
-
- psurveyPara = kzalloc_obj(*psurveyPara, GFP_ATOMIC);
- if (!psurveyPara) {
- kfree(ph2c);
- return;
- }
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara, SITE_SURVEY_CMD);
- rtw_enqueue_cmd(pcmdpriv, ph2c);
- }
-}
-
-void link_timer_hdl(struct timer_list *t)
-{
- struct adapter *padapter =
- timer_container_of(padapter, t, mlmeextpriv.link_timer);
- 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 timer_list *t)
-{
- struct sta_info *psta = timer_container_of(psta, t, addba_retry_timer);
- 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;
- }
-}
-
-void sa_query_timer_hdl(struct timer_list *t)
-{
- struct adapter *padapter =
- timer_container_of(padapter, t, mlmeextpriv.sa_query_timer);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- /* disconnect */
- 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);
- }
-
- spin_unlock_bh(&pmlmepriv->lock);
-}
-
-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 == NL80211_IFTYPE_AP) {
- pmlmeinfo->state = WIFI_FW_AP_STATE;
- type = _HW_STATE_AP_;
- /* start_ap_mode(padapter); */
- } else if (psetop->mode == NL80211_IFTYPE_STATION) {
- 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 == NL80211_IFTYPE_ADHOC) {
- type = _HW_STATE_ADHOC_;
- } else {
- type = _HW_STATE_NOLINK_;
- }
-
- rtw_hal_set_hwreg(padapter, HW_VAR_SET_OPMODE, (u8 *)(&type));
- /* set_msr(padapter, type); */
-
- if (psetop->mode == NL80211_IFTYPE_AP) {
- /* Do this after port switch to */
- /* prevent from downloading rsvd page to wrong port */
- rtw_btcoex_media_status_notify(padapter, 1); /* connect */
- }
-
- 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 (pmlmeinfo->state == WIFI_FW_AP_STATE) {
- start_bss_network(padapter);
- return H2C_SUCCESS;
- }
-
- /* below is for ad-hoc master */
- if (pparm->network.infrastructure_mode == NL80211_IFTYPE_ADHOC) {
- rtw_joinbss_reset(padapter);
-
- pmlmeext->cur_bwmode = 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);
- switch_dm_func(padapter, DYNAMIC_FUNC_DISABLE, false);
-
- /* config the initial gain under linking, need to write the BB registers */
- /* initialgain = 0x1E; */
- /* rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain)); */
-
- /* cancel link timer */
- timer_delete_sync(&pmlmeext->link_timer);
-
- /* clear CAM */
- flush_all_cam_entry(padapter);
-
- memcpy(pnetwork, pbuf, offsetof(struct wlan_bssid_ex, ie_length));
- pnetwork->ie_length = ((struct wlan_bssid_ex *)pbuf)->ie_length;
-
- if (pnetwork->ie_length > MAX_IE_SZ)/* Check pbuf->ie_length */
- return H2C_PARAMETERS_ERROR;
-
- memcpy(pnetwork->ies, ((struct wlan_bssid_ex *)pbuf)->ies, pnetwork->ie_length);
-
- start_create_ibss(padapter);
- }
-
- return H2C_SUCCESS;
-}
-
-u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf)
-{
- u8 join_type;
- struct ndis_80211_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));
- u32 i;
- u8 cbw40_enable = 0;
- /* u32 initialgain; */
- /* u32 acparm; */
- u8 ch, bw, offset;
-
- /* 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->mac_address, WLAN_REASON_DEAUTH_LEAVING, 1, 100);
- pmlmeinfo->state = WIFI_FW_NULL_STATE;
-
- /* clear CAM */
- flush_all_cam_entry(padapter);
-
- timer_delete_sync(&pmlmeext->link_timer);
-
- /* set MSR to nolink -> infra. mode */
- /* set_msr(padapter, _HW_STATE_NOLINK_); */
- set_msr(padapter, _HW_STATE_STATION_);
-
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_DISCONNECT, NULL);
- }
-
- rtw_joinbss_reset(padapter);
-
- pmlmeext->cur_bwmode = 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;
- /* pmlmeinfo->assoc_AP_vendor = HT_IOT_PEER_MAX; */
- pmlmeinfo->VHT_enable = 0;
-
- memcpy(pnetwork, pbuf, offsetof(struct wlan_bssid_ex, ie_length));
- pnetwork->ie_length = ((struct wlan_bssid_ex *)pbuf)->ie_length;
-
- if (pnetwork->ie_length > MAX_IE_SZ)/* Check pbuf->ie_length */
- return H2C_PARAMETERS_ERROR;
-
- memcpy(pnetwork->ies, ((struct wlan_bssid_ex *)pbuf)->ies, pnetwork->ie_length);
-
- pmlmeext->cur_channel = (u8)pnetwork->configuration.ds_config;
- pmlmeinfo->bcn_interval = get_beacon_interval(pnetwork);
-
- /* Check AP vendor to move rtw_joinbss_cmd() */
- /* pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->ies, pnetwork->ie_length); */
-
- /* sizeof(struct ndis_802_11_fix_ie) */
- for (i = _FIXED_IE_LENGTH_; i < pnetwork->ie_length;) {
- if (i + sizeof(*pIE) > pnetwork->ie_length)
- break;
- pIE = (struct ndis_80211_var_ie *)(pnetwork->ies + i);
- if (i + sizeof(*pIE) + pIE->length > pnetwork->ie_length)
- break;
-
- switch (pIE->element_id) {
- case WLAN_EID_VENDOR_SPECIFIC:/* Get WMM IE. */
- if (!memcmp(pIE->data, WMM_OUI, 4))
- WMM_param_handler(padapter, pIE);
- break;
-
- case WLAN_EID_HT_CAPABILITY: /* Get HT Cap IE. */
- pmlmeinfo->HT_caps_enable = 1;
- break;
-
- case WLAN_EID_HT_OPERATION: /* 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 (pnetwork->configuration.ds_config <= 14) {
- if ((pregpriv->bw_mode & 0x0f) > CHANNEL_WIDTH_20)
- cbw40_enable = 1;
- }
-
- if ((cbw40_enable) && (pht_info->infos[0] & BIT(2))) {
- /* switch to the 40M Hz mode according to the AP */
- pmlmeext->cur_bwmode = 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;
- pmlmeext->cur_bwmode = CHANNEL_WIDTH_20;
- break;
- }
- }
- }
- break;
- default:
- break;
- }
-
- i += (pIE->length + 2);
- }
-
- /* check channel, bandwidth, offset and switch */
- if (rtw_chk_start_clnt_join(padapter, &ch, &bw, &offset) == _FAIL) {
- report_join_res(padapter, (-4));
- return H2C_SUCCESS;
- }
-
- /* disable dynamic functions, such as high power, DIG */
- /* switch_dm_func(padapter, DYNAMIC_FUNC_DISABLE, false); */
-
- /* config the initial gain under linking, need to write the BB registers */
- /* initialgain = 0x1E; */
- /* rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain)); */
-
- rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, pmlmeinfo->network.mac_address);
- join_type = 0;
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_JOIN, (u8 *)(&join_type));
-
- set_channel_bwmode(padapter, ch, offset, bw);
-
- /* cancel link timer */
- timer_delete_sync(&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;
-
- if (is_client_associated_to_ap(padapter))
- issue_deauth_ex(padapter, pnetwork->mac_address, WLAN_REASON_DEAUTH_LEAVING,
- param->deauth_timeout_ms / 100, 100);
-
- if (((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) ||
- ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)) {
- /* Stop BCN */
- val8 = 0;
- rtw_hal_set_hwreg(padapter, HW_VAR_BCN_FUNC, (u8 *)(&val8));
- }
-
- rtw_mlmeext_disconnect(padapter);
-
- 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 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
- ) {
- if (j >= out_num) {
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " out_num:%u not enough\n",
- FUNC_ADPT_ARG(padapter), out_num);
- break;
- }
-
- memcpy(&out[j], &in[i], sizeof(struct rtw_ieee80211_channel));
-
- if (pmlmeext->channel_set[set_idx].scan_type == 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++) {
- if (j >= out_num) {
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " out_num:%u not enough\n",
- FUNC_ADPT_ARG(padapter),
- out_num);
- break;
- }
-
- out[j].hw_value = pmlmeext->channel_set[i].channel_num;
-
- if (pmlmeext->channel_set[i].scan_type == SCAN_PASSIVE)
- out[j].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;
- u8 val8;
- u32 initialgain;
- u32 i;
-
- if (pmlmeext->sitesurvey_res.state == SCAN_DISABLE) {
- 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].ssid_length) {
- memcpy(pmlmeext->sitesurvey_res.ssid[i].ssid,
- pparm->ssid[i].ssid,
- IW_ESSID_MAX_SIZE);
- pmlmeext->sitesurvey_res.ssid[i].ssid_length =
- pparm->ssid[i].ssid_length;
- } else {
- pmlmeext->sitesurvey_res.ssid[i].ssid_length = 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 (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);
- switch_dm_func(padapter, DYNAMIC_FUNC_DISABLE, false);
-
- /* config the initial gain under scanning, need to write the BB
- * registers
- */
- initialgain = 0x1e;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_INITIAL_GAIN, (u8 *)(&initialgain));
-
- /* set MSR to no link state */
- set_msr(padapter, _HW_STATE_NOLINK_);
-
- val8 = 1; /* under site survey */
- rtw_hal_set_hwreg(padapter, HW_VAR_MLME_SITESURVEY, (u8 *)(&val8));
-
- 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)
-{
- u16 ctrl = 0;
- s16 cam_id = 0;
- 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_addr[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
- u8 *addr;
-
- /* main tx key for wep. */
- if (pparm->set_tx)
- pmlmeinfo->key_index = pparm->keyid;
-
- cam_id = rtw_camid_alloc(padapter, NULL, pparm->keyid);
-
- if (cam_id < 0) {
- } else {
- if (cam_id > 3) /* not default key, searched by A2 */
- addr = get_bssid(&padapter->mlmepriv);
- else
- addr = null_addr;
-
- ctrl = BIT(15) | BIT(6) | ((pparm->algorithm) << 2) | pparm->keyid;
- write_cam(padapter, cam_id, ctrl, addr, pparm->key);
- netdev_dbg(padapter->pnetdev,
- "set group key camid:%d, addr:%pM, kid:%d, type:%s\n",
- cam_id, addr, pparm->keyid,
- security_type_str(pparm->algorithm));
- }
-
- if (cam_id >= 0 && cam_id <= 3)
- rtw_hal_set_hwreg(padapter, HW_VAR_SEC_DK_CFG, (u8 *)true);
-
- /* allow multicast packets to driver */
- SetHwReg8723BS(padapter, HW_VAR_ON_RCR_AM, null_addr);
-
- return H2C_SUCCESS;
-}
-
-u8 set_stakey_hdl(struct adapter *padapter, u8 *pbuf)
-{
- u16 ctrl = 0;
- s16 cam_id = 0;
- u8 ret = H2C_SUCCESS;
- 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;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct sta_info *psta;
-
- if (pparm->algorithm == _NO_PRIVACY_)
- goto write_to_cam;
-
- psta = rtw_get_stainfo(pstapriv, pparm->addr);
- if (!psta) {
- netdev_dbg(padapter->pnetdev, "%s sta:%pM not found\n",
- __func__, pparm->addr);
- ret = H2C_REJECTED;
- goto exit;
- }
-
- pmlmeinfo->enc_algo = pparm->algorithm;
- cam_id = rtw_camid_alloc(padapter, psta, 0);
- if (cam_id < 0)
- goto exit;
-
-write_to_cam:
- if (pparm->algorithm == _NO_PRIVACY_) {
- while ((cam_id = rtw_camid_search(padapter, pparm->addr, -1)) >= 0) {
- netdev_dbg(padapter->pnetdev,
- "clear key for addr:%pM, camid:%d\n",
- pparm->addr, cam_id);
- clear_cam_entry(padapter, cam_id);
- rtw_camid_free(padapter, cam_id);
- }
- } else {
- netdev_dbg(padapter->pnetdev,
- "set pairwise key camid:%d, addr:%pM, kid:%d, type:%s\n",
- cam_id, pparm->addr, pparm->keyid,
- security_type_str(pparm->algorithm));
- ctrl = BIT(15) | ((pparm->algorithm) << 2) | pparm->keyid;
- write_cam(padapter, cam_id, ctrl, pparm->addr, pparm->key);
- }
- ret = H2C_SUCCESS_RSP;
-
-exit:
- return ret;
-}
-
-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)) {
- /* pmlmeinfo->ADDBA_retry_count = 0; */
- /* pmlmeinfo->candidate_tid_bitmap |= (0x1 << pparm->tid); */
- /* psta->htpriv.candidate_tid_bitmap |= BIT(pparm->tid); */
- issue_action_BA(padapter, pparm->addr, WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid);
- /* _set_timer(&pmlmeext->ADDBA_timer, ADDBA_TO); */
- _set_timer(&psta->addba_retry_timer, ADDBA_TO);
- } else {
- psta->htpriv.candidate_tid_bitmap &= ~BIT(pparm->tid);
- }
- return H2C_SUCCESS;
-}
-
-u8 chk_bmc_sleepq_cmd(struct adapter *padapter)
-{
- struct cmd_obj *ph2c;
- struct cmd_priv *pcmdpriv = &(padapter->cmdpriv);
- u8 res = _SUCCESS;
-
- ph2c = kzalloc_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- init_h2fwcmd_w_parm_no_parm_rsp(ph2c, CHK_BMC_SLEEPQ_CMD);
-
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
- return res;
-}
-
-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_obj(*ph2c, GFP_ATOMIC);
- if (!ph2c) {
- res = _FAIL;
- goto exit;
- }
-
- ptxBeacon_parm = kzalloc_obj(*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.ie_length - _BEACON_IE_OFFSET_,
- pmlmeinfo->hidden_ssid_mode);
- ptxBeacon_parm->network.ie_length += len_diff;
-
- init_h2fwcmd_w_parm_no_rsp(ph2c, ptxBeacon_parm, TX_BEACON_CMD);
-
- res = rtw_enqueue_cmd(pcmdpriv, ph2c);
-
-exit:
- return res;
-}
-
-static struct fwevent wlanevents[] = {
- {0, rtw_dummy_event_callback}, /* 0 */
- {0, NULL}, /* 1 */
- {0, NULL}, /* 2 */
- {0, NULL}, /* 3 */
- {0, NULL}, /* 4 */
- {0, NULL}, /* 5 */
- {0, NULL}, /* 6 */
- {0, NULL}, /* 7 */
- {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}, /* 11 */
- {sizeof(struct stadel_event), rtw_stadel_event_callback}, /* 12 */
- {0, rtw_dummy_event_callback}, /* 13 */
- {0, rtw_dummy_event_callback}, /* 14 */
- {0, NULL}, /* 15 */
- {0, NULL}, /* 16 */
- {0, NULL}, /* 17 */
- {0, NULL}, /* 18 */
- {0, rtw_fwdbg_event_callback}, /* 19 */
- {0, NULL}, /* 20 */
- {0, NULL}, /* 21 */
- {0, NULL}, /* 22 */
- {0, rtw_cpwm_event_callback}, /* 23 */
- {0, NULL}, /* 24 */
- {0, rtw_wmm_event_callback}, /* 25 */
-};
-
-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);
-
- if (!pbuf)
- goto _abort_event_;
-
- 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);
-
- pevt_priv->evt_done_cnt++;
- }
-
-_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 chk_bmc_sleepq_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
- struct sta_info *psta_bmc;
- struct list_head *xmitframe_plist, *xmitframe_phead, *tmp;
- struct xmit_frame *pxmitframe = NULL;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- 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); */
- spin_lock_bh(&pxmitpriv->lock);
-
- xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
- list_for_each_safe(xmitframe_plist, tmp, xmitframe_phead) {
- pxmitframe = list_entry(xmitframe_plist,
- struct xmit_frame, list);
-
- 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;
-
- if (xmitframe_hiq_filter(pxmitframe))
- pxmitframe->attrib.qsel = 0x11;/* HIQ */
-
- rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
- }
-
- /* spin_unlock_bh(&psta_bmc->sleep_q.lock); */
- spin_unlock_bh(&pxmitpriv->lock);
-
- /* check hi queue and bmc_sleepq */
- rtw_chk_hi_queue_cmd(padapter);
- }
-
- return H2C_SUCCESS;
-}
-
-u8 tx_beacon_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
- if (send_beacon(padapter) == _FAIL)
- return H2C_PARAMETERS_ERROR;
-
- /* tx bc/mc frames after update TIM */
- chk_bmc_sleepq_hdl(padapter, NULL);
-
- return H2C_SUCCESS;
-}
-
-int rtw_chk_start_clnt_join(struct adapter *padapter, u8 *ch, u8 *bw, u8 *offset)
-{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- unsigned char cur_ch = pmlmeext->cur_channel;
- unsigned char cur_bw = pmlmeext->cur_bwmode;
- unsigned char cur_ch_offset = pmlmeext->cur_ch_offset;
- bool connect_allow = true;
-
- if (!ch || !bw || !offset) {
- WARN_ON(1);
- connect_allow = false;
- }
-
- if (connect_allow) {
- *ch = cur_ch;
- *bw = cur_bw;
- *offset = cur_ch_offset;
- }
-
- return connect_allow ? _SUCCESS : _FAIL;
-}
-
-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);
-
- if (padapter->rtw_wdev && padapter->rtw_wdev->wiphy) {
- struct regulatory_request request;
-
- request.initiator = NL80211_REGDOM_SET_BY_DRIVER;
- rtw_reg_notifier(padapter->rtw_wdev->wiphy, &request);
- }
-
- return H2C_SUCCESS;
-}
-
-u8 set_csa_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
- return H2C_REJECTED;
-}
-
-/* TDLS_ESTABLISHED : write RCR DATA BIT */
-/* 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_TEAR_STA : free tdls sta */
-u8 tdls_hdl(struct adapter *padapter, unsigned char *pbuf)
-{
- return H2C_REJECTED;
-}
-
-u8 run_in_thread_hdl(struct adapter *padapter, u8 *pbuf)
-{
- struct RunInThread_param *p;
-
- if (!pbuf)
- return H2C_PARAMETERS_ERROR;
- p = (struct RunInThread_param *)pbuf;
-
- if (p->func)
- p->func(p->context);
-
- return H2C_SUCCESS;
-}
diff --git a/drivers/staging/rtl8723bs/core/rtw_pwrctrl.c b/drivers/staging/rtl8723bs/core/rtw_pwrctrl.c
deleted file mode 100644
index 448611ad8237..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_pwrctrl.c
+++ /dev/null
@@ -1,1139 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <hal_data.h>
-#include <linux/jiffies.h>
-
-void _ips_enter(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
-
- pwrpriv->bips_processing = true;
-
- /* syn ips_mode with request */
- pwrpriv->ips_mode = pwrpriv->ips_mode_req;
-
- pwrpriv->ips_enter_cnts++;
-
- if (rf_off == pwrpriv->change_rfpwrstate) {
- 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;
-}
-
-void ips_enter(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
-
- hal_btcoex_IpsNotify(padapter, pwrpriv->ips_mode_req);
-
- mutex_lock(&pwrpriv->lock);
- _ips_enter(padapter);
- mutex_unlock(&pwrpriv->lock);
-}
-
-int _ips_leave(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
- int result = _SUCCESS;
-
- if ((pwrpriv->rf_pwrstate == rf_off) && (!pwrpriv->bips_processing)) {
- pwrpriv->bips_processing = true;
- pwrpriv->change_rfpwrstate = rf_on;
- pwrpriv->ips_leave_cnts++;
-
- result = rtw_ips_pwr_up(padapter);
- if (result == _SUCCESS)
- pwrpriv->rf_pwrstate = rf_on;
- pwrpriv->bips_processing = false;
-
- pwrpriv->bkeepfwalive = false;
- pwrpriv->bpower_saving = false;
- }
-
- return result;
-}
-
-int ips_leave(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
- int ret;
-
- mutex_lock(&pwrpriv->lock);
- ret = _ips_leave(padapter);
- mutex_unlock(&pwrpriv->lock);
-
- if (ret == _SUCCESS)
- hal_btcoex_IpsNotify(padapter, IPS_NONE);
-
- return ret;
-}
-
-static bool rtw_pwr_unassociated_idle(struct adapter *adapter)
-{
- struct adapter *buddy = adapter->pbuddy_adapter;
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
- struct xmit_priv *pxmit_priv = &adapter->xmitpriv;
-
- bool ret = false;
-
- if (adapter_to_pwrctl(adapter)->bpower_saving)
- goto exit;
-
- if (time_before(jiffies, adapter_to_pwrctl(adapter)->ips_deny_time))
- 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_AP_STATE) ||
- check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE)
- )
- goto exit;
-
- /* consider buddy, if exist */
- if (buddy) {
- struct mlme_priv *b_pmlmepriv = &buddy->mlmepriv;
-
- 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)
- )
- goto exit;
- }
-
- if (pxmit_priv->free_xmitbuf_cnt != NR_XMITBUFF ||
- pxmit_priv->free_xmit_extbuf_cnt != NR_XMIT_EXTBUFF) {
- netdev_dbg(adapter->pnetdev,
- "There are some pkts to transmit\n");
- netdev_dbg(adapter->pnetdev,
- "free_xmitbuf_cnt: %d, free_xmit_extbuf_cnt: %d\n",
- pxmit_priv->free_xmitbuf_cnt,
- pxmit_priv->free_xmit_extbuf_cnt);
- goto exit;
- }
-
- ret = true;
-
-exit:
- return ret;
-}
-
-/*
- * ATTENTION:
- *rtw_ps_processor() doesn't handle LPS.
- */
-void rtw_ps_processor(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
- u32 ps_deny = 0;
-
- mutex_lock(&adapter_to_pwrctl(padapter)->lock);
- ps_deny = rtw_ps_deny_get(padapter);
- mutex_unlock(&adapter_to_pwrctl(padapter)->lock);
- if (ps_deny != 0)
- goto exit;
-
- if (pwrpriv->bInSuspend) /* system suspend or autosuspend */
- return;
-
- pwrpriv->ps_processing = true;
-
- if (pwrpriv->ips_mode_req == IPS_NONE)
- goto exit;
-
- if (!rtw_pwr_unassociated_idle(padapter))
- goto exit;
-
- if ((pwrpriv->rf_pwrstate == rf_on) && ((pwrpriv->pwr_state_check_cnts % 4) == 0)) {
- pwrpriv->change_rfpwrstate = rf_off;
- {
- ips_enter(padapter);
- }
- }
-exit:
- pwrpriv->ps_processing = false;
-}
-
-static void pwr_state_check_handler(struct timer_list *t)
-{
- struct pwrctrl_priv *pwrctrlpriv =
- timer_container_of(pwrctrlpriv, t, pwr_state_check_timer);
- struct adapter *padapter = pwrctrlpriv->adapter;
-
- rtw_ps_cmd(padapter);
-}
-
-void traffic_check_for_leave_lps(struct adapter *padapter, u8 tx, u32 tx_packets)
-{
- static unsigned long start_time;
- static u32 xmit_cnt;
- u8 bLeaveLPS = false;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- if (tx) { /* from tx */
- xmit_cnt += tx_packets;
-
- if (start_time == 0)
- start_time = jiffies;
-
- if (jiffies_to_msecs(jiffies - start_time) > 2000) { /* 2 sec == watch dog timer */
- if (xmit_cnt > 8) {
- if (adapter_to_pwrctl(padapter)->bLeisurePs &&
- (adapter_to_pwrctl(padapter)->pwr_mode != PS_MODE_ACTIVE) &&
- !(hal_btcoex_IsBtControlLps(padapter))) {
- bLeaveLPS = true;
- }
- }
-
- start_time = jiffies;
- xmit_cnt = 0;
- }
-
- } else { /* from rx path */
- if (pmlmepriv->link_detect_info.num_rx_unicast_ok_in_period > 4) {
- if (adapter_to_pwrctl(padapter)->bLeisurePs &&
- (adapter_to_pwrctl(padapter)->pwr_mode != PS_MODE_ACTIVE) &&
- !(hal_btcoex_IsBtControlLps(padapter)))
- bLeaveLPS = true;
- }
- }
-
- if (bLeaveLPS)
- /* rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_LEAVE, 1); */
- rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_LEAVE, tx ? 0 : 1);
-}
-
-/*
- * Description:
- *This function MUST be called under power lock protect
- *
- * Parameters
- *padapter
- *pslv power state level, only could be PS_STATE_S0 ~ PS_STATE_S4
- *
- */
-void rtw_set_rpwm(struct adapter *padapter, u8 pslv)
-{
- u8 rpwm;
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
- u8 cpwm_orig;
-
- pslv = PS_STATE(pslv);
-
- if (!pwrpriv->brpwmtimeout) {
- if (pwrpriv->rpwm == pslv ||
- (pwrpriv->rpwm >= PS_STATE_S2 && pslv >= PS_STATE_S2))
- return;
- }
-
- if ((padapter->bSurpriseRemoved) || !(padapter->hw_init_completed)) {
- pwrpriv->cpwm = PS_STATE_S4;
- return;
- }
-
- if (padapter->driver_stopped) {
- if (pslv < PS_STATE_S2)
- return;
- }
-
- rpwm = pslv | pwrpriv->tog;
- /* only when from PS_STATE S0/S1 to S2 and higher needs ACK */
- if ((pwrpriv->cpwm < PS_STATE_S2) && (pslv >= PS_STATE_S2))
- rpwm |= PS_ACK;
-
- pwrpriv->rpwm = pslv;
-
- cpwm_orig = 0;
- if (rpwm & PS_ACK)
- rtw_hal_get_hwreg(padapter, HW_VAR_CPWM, &cpwm_orig);
-
- if (rpwm & PS_ACK)
- _set_timer(&pwrpriv->pwr_rpwm_timer, LPS_RPWM_WAIT_MS);
- rtw_hal_set_hwreg(padapter, HW_VAR_SET_RPWM, (u8 *)(&rpwm));
-
- pwrpriv->tog += 0x80;
-
- /* No LPS 32K, No Ack */
- if (rpwm & PS_ACK) {
- unsigned long start_time;
- u8 cpwm_now;
-
- start_time = jiffies;
-
- /* polling cpwm */
- do {
- mdelay(1);
- rtw_hal_get_hwreg(padapter, HW_VAR_CPWM, &cpwm_now);
- if ((cpwm_orig ^ cpwm_now) & 0x80) {
- pwrpriv->cpwm = PS_STATE_S4;
- pwrpriv->cpwm_tog = cpwm_now & PS_TOGGLE;
- break;
- }
-
- if (jiffies_to_msecs(jiffies - start_time) > LPS_RPWM_WAIT_MS) {
- _set_timer(&pwrpriv->pwr_rpwm_timer, 1);
- break;
- }
- } while (1);
- } else {
- pwrpriv->cpwm = pslv;
- }
-}
-
-static u8 PS_RDY_CHECK(struct adapter *padapter)
-{
- unsigned long curr_time, delta_time;
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- if (pwrpriv->bInSuspend)
- return false;
-
- curr_time = jiffies;
-
- delta_time = curr_time - pwrpriv->delay_lps_last_time_stamp;
-
- if (delta_time < LPS_DELAY_TIME)
- return false;
-
- if (check_fwstate(pmlmepriv, WIFI_SITE_MONITOR) ||
- check_fwstate(pmlmepriv, WIFI_UNDER_LINKING | WIFI_UNDER_WPS) ||
- check_fwstate(pmlmepriv, WIFI_AP_STATE) ||
- check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE) ||
- rtw_is_scan_deny(padapter)
- )
- return false;
-
- if (padapter->securitypriv.dot11_auth_algrthm == dot11_auth_algrthm_8021x &&
- !padapter->securitypriv.binstallGrpkey)
- return false;
-
- if (!rtw_cfg80211_pwr_mgmt(padapter))
- return false;
-
- return true;
-}
-
-void rtw_set_ps_mode(struct adapter *padapter, u8 ps_mode,
- u8 smart_ps, u8 bcn_ant_mode, const char *msg)
-{
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
-
- if (ps_mode > PM_Card_Disable)
- return;
-
- if (pwrpriv->pwr_mode == ps_mode)
- if (ps_mode == PS_MODE_ACTIVE)
- return;
-
- mutex_lock(&pwrpriv->lock);
-
- /* if (pwrpriv->pwr_mode == PS_MODE_ACTIVE) */
- if (ps_mode == PS_MODE_ACTIVE) {
- if (!(hal_btcoex_IsBtControlLps(padapter)) ||
- (hal_btcoex_IsBtControlLps(padapter) &&
- !(hal_btcoex_IsLpsOn(padapter)))) {
- pwrpriv->pwr_mode = ps_mode;
- rtw_set_rpwm(padapter, PS_STATE_S4);
-
- rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
- pwrpriv->fw_current_in_ps_mode = false;
-
- hal_btcoex_LpsNotify(padapter, ps_mode);
- }
- } else {
- if ((PS_RDY_CHECK(padapter) &&
- check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE)) ||
- ((hal_btcoex_IsBtControlLps(padapter)) && (hal_btcoex_IsLpsOn(padapter)))
- ) {
- u8 pslv;
-
- hal_btcoex_LpsNotify(padapter, ps_mode);
-
- pwrpriv->fw_current_in_ps_mode = true;
- pwrpriv->pwr_mode = ps_mode;
- pwrpriv->smart_ps = smart_ps;
- pwrpriv->bcn_ant_mode = bcn_ant_mode;
- rtw_hal_set_hwreg(padapter, HW_VAR_H2C_FW_PWRMODE, (u8 *)(&ps_mode));
-
- pslv = PS_STATE_S2;
- if (pwrpriv->alives == 0)
- pslv = PS_STATE_S0;
-
- if (!(hal_btcoex_IsBtDisabled(padapter)) &&
- (hal_btcoex_IsBtControlLps(padapter))) {
- u8 val8;
-
- val8 = hal_btcoex_LpsVal(padapter);
- if (val8 & BIT(4))
- pslv = PS_STATE_S2;
- }
-
- rtw_set_rpwm(padapter, pslv);
- }
- }
-
- mutex_unlock(&pwrpriv->lock);
-}
-
-/*
- * Return:
- * 0: Leave OK
- * -ETIMEDOUT: Timeout
- * -ENODEV: Other error
- */
-int LPS_RF_ON_check(struct adapter *padapter, u32 delay_ms)
-{
- unsigned long start_time;
- u8 bAwake = false;
-
- start_time = jiffies;
- while (1) {
- rtw_hal_get_hwreg(padapter, HW_VAR_FWLPS_RF_ON, &bAwake);
- if (bAwake)
- return 0;
-
- if (padapter->bSurpriseRemoved)
- return -ENODEV;
-
- if (jiffies_to_msecs(jiffies - start_time) > delay_ms)
- return -ETIMEDOUT;
-
- msleep(1);
- }
-}
-
-/* Description: Enter the leisure power save mode. */
-void LPS_Enter(struct adapter *padapter, const char *msg)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
- struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(dvobj);
- int n_assoc_iface = 0;
- char buf[32] = {0};
-
- if (hal_btcoex_IsBtControlLps(padapter))
- return;
-
- /* Skip lps enter request if number of associated adapters is not 1 */
- if (check_fwstate(&dvobj->padapters->mlmepriv, WIFI_ASOC_STATE))
- n_assoc_iface++;
- if (n_assoc_iface != 1)
- return;
-
- if (!PS_RDY_CHECK(dvobj->padapters))
- 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) {
- scnprintf(buf, sizeof(buf), "WIFI-%s", msg);
- pwrpriv->bpower_saving = true;
- rtw_set_ps_mode(padapter, pwrpriv->power_mgnt,
- padapter->registrypriv.smart_ps, 0, buf);
- }
- } else {
- pwrpriv->LpsIdleCount++;
- }
- }
-}
-
-/* Description: Leave the leisure power save mode. */
-void LPS_Leave(struct adapter *padapter, const char *msg)
-{
-#define LPS_LEAVE_TIMEOUT_MS 100
-
- struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
- struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(dvobj);
- char buf[32] = {0};
-
- if (hal_btcoex_IsBtControlLps(padapter))
- return;
-
- if (pwrpriv->bLeisurePs) {
- if (pwrpriv->pwr_mode != PS_MODE_ACTIVE) {
- scnprintf(buf, sizeof(buf), "WIFI-%s", msg);
- rtw_set_ps_mode(padapter, PS_MODE_ACTIVE, 0, 0, buf);
-
- if (pwrpriv->pwr_mode == PS_MODE_ACTIVE)
- LPS_RF_ON_check(padapter, LPS_LEAVE_TIMEOUT_MS);
- }
- }
-
- pwrpriv->bpower_saving = false;
-}
-
-void LeaveAllPowerSaveModeDirect(struct adapter *Adapter)
-{
- struct adapter *pri_padapter = GET_PRIMARY_ADAPTER(Adapter);
- struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(Adapter);
-
- if (Adapter->bSurpriseRemoved)
- return;
-
- if (check_fwstate(pmlmepriv, _FW_LINKED)) { /* connect */
-
- if (pwrpriv->pwr_mode == PS_MODE_ACTIVE)
- return;
-
- mutex_lock(&pwrpriv->lock);
-
- rtw_set_rpwm(Adapter, PS_STATE_S4);
-
- mutex_unlock(&pwrpriv->lock);
-
- rtw_lps_ctrl_wk_cmd(pri_padapter, LPS_CTRL_LEAVE, 0);
- } else {
- if (pwrpriv->rf_pwrstate == rf_off)
- ips_leave(pri_padapter);
- }
-}
-
-/* */
-/* 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 dvobj_priv *dvobj = adapter_to_dvobj(Adapter);
- u8 enqueue = 0;
- int n_assoc_iface = 0;
-
- if (!Adapter->bup)
- return;
-
- if (Adapter->bSurpriseRemoved)
- return;
-
- if (check_fwstate(&dvobj->padapters->mlmepriv, WIFI_ASOC_STATE))
- n_assoc_iface++;
-
- if (n_assoc_iface) { /* connect */
- enqueue = 1;
-
- rtw_lps_ctrl_wk_cmd(Adapter, LPS_CTRL_LEAVE, enqueue);
-
- LPS_Leave_check(Adapter);
- } else {
- if (adapter_to_pwrctl(Adapter)->rf_pwrstate == rf_off)
- ips_leave(Adapter);
- }
-}
-
-void LPS_Leave_check(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrpriv;
- unsigned long start_time;
- u8 bReady;
-
- pwrpriv = adapter_to_pwrctl(padapter);
-
- bReady = false;
- start_time = jiffies;
-
- cond_resched();
-
- while (1) {
- mutex_lock(&pwrpriv->lock);
-
- if (padapter->bSurpriseRemoved ||
- !(padapter->hw_init_completed) ||
- (pwrpriv->pwr_mode == PS_MODE_ACTIVE))
- bReady = true;
-
- mutex_unlock(&pwrpriv->lock);
-
- if (bReady)
- break;
-
- if (jiffies_to_msecs(jiffies - start_time) > 100)
- break;
-
- msleep(1);
- }
-}
-
-/*
- * Caller:ISR handler...
- *
- * This will be called when CPWM interrupt is up.
- *
- * using to update cpwn of drv; and drv will make a decision to up or down pwr level
- */
-void cpwm_int_hdl(struct adapter *padapter, struct reportpwrstate_parm *preportpwrstate)
-{
- struct pwrctrl_priv *pwrpriv;
-
- pwrpriv = adapter_to_pwrctl(padapter);
-
- mutex_lock(&pwrpriv->lock);
-
- if (pwrpriv->rpwm < PS_STATE_S2)
- goto exit;
-
- pwrpriv->cpwm = PS_STATE(preportpwrstate->state);
- pwrpriv->cpwm_tog = preportpwrstate->state & PS_TOGGLE;
-
- if (pwrpriv->cpwm >= PS_STATE_S2) {
- if (pwrpriv->alives & CMD_ALIVE)
- complete(&padapter->cmdpriv.cmd_queue_comp);
-
- if (pwrpriv->alives & XMIT_ALIVE)
- complete(&padapter->xmitpriv.xmit_comp);
- }
-
-exit:
- mutex_unlock(&pwrpriv->lock);
-}
-
-static void cpwm_event_callback(struct work_struct *work)
-{
- struct pwrctrl_priv *pwrpriv = container_of(work, struct pwrctrl_priv, cpwm_event);
- struct dvobj_priv *dvobj = pwrctl_to_dvobj(pwrpriv);
- struct adapter *adapter = dvobj->if1;
- struct reportpwrstate_parm report;
-
- report.state = PS_STATE_S2;
- cpwm_int_hdl(adapter, &report);
-}
-
-static void rpwmtimeout_workitem_callback(struct work_struct *work)
-{
- struct adapter *padapter;
- struct dvobj_priv *dvobj;
- struct pwrctrl_priv *pwrpriv;
-
- pwrpriv = container_of(work, struct pwrctrl_priv, rpwmtimeoutwi);
- dvobj = pwrctl_to_dvobj(pwrpriv);
- padapter = dvobj->if1;
-
- mutex_lock(&pwrpriv->lock);
- if ((pwrpriv->rpwm == pwrpriv->cpwm) || (pwrpriv->cpwm >= PS_STATE_S2))
- goto exit;
-
- mutex_unlock(&pwrpriv->lock);
-
- if (rtw_read8(padapter, 0x100) != 0xEA) {
- struct reportpwrstate_parm report;
-
- report.state = PS_STATE_S2;
- cpwm_int_hdl(padapter, &report);
-
- return;
- }
-
- mutex_lock(&pwrpriv->lock);
-
- if ((pwrpriv->rpwm == pwrpriv->cpwm) || (pwrpriv->cpwm >= PS_STATE_S2))
- goto exit;
-
- pwrpriv->brpwmtimeout = true;
- rtw_set_rpwm(padapter, pwrpriv->rpwm);
- pwrpriv->brpwmtimeout = false;
-
-exit:
- mutex_unlock(&pwrpriv->lock);
-}
-
-/*
- * This function is a timer handler, can't do any IO in it.
- */
-static void pwr_rpwm_timeout_handler(struct timer_list *t)
-{
- struct pwrctrl_priv *pwrpriv = timer_container_of(pwrpriv, t,
- pwr_rpwm_timer);
-
- if ((pwrpriv->rpwm == pwrpriv->cpwm) || (pwrpriv->cpwm >= PS_STATE_S2))
- return;
-
- _set_workitem(&pwrpriv->rpwmtimeoutwi);
-}
-
-static inline void register_task_alive(struct pwrctrl_priv *pwrctrl, u32 tag)
-{
- pwrctrl->alives |= tag;
-}
-
-static inline void unregister_task_alive(struct pwrctrl_priv *pwrctrl, u32 tag)
-{
- pwrctrl->alives &= ~tag;
-}
-
-/*
- * Description:
- *Check if the fw_pwrstate is okay for I/O.
- *If not (cpwm is less than S2), then the sub-routine
- *will raise the cpwm to be greater than or equal to S2.
- *
- *Calling Context: Passive
- *
- *Constraint:
- * 1. this function will request pwrctrl->lock
- *
- * Return Value:
- *_SUCCESS hardware is ready for I/O
- *_FAIL can't I/O right now
- */
-s32 rtw_register_task_alive(struct adapter *padapter, u32 task)
-{
- s32 res;
- struct pwrctrl_priv *pwrctrl;
- u8 pslv;
-
- res = _SUCCESS;
- pwrctrl = adapter_to_pwrctl(padapter);
- pslv = PS_STATE_S2;
-
- mutex_lock(&pwrctrl->lock);
-
- register_task_alive(pwrctrl, task);
-
- if (pwrctrl->fw_current_in_ps_mode) {
- if (pwrctrl->cpwm < pslv) {
- if (pwrctrl->cpwm < PS_STATE_S2)
- res = _FAIL;
- if (pwrctrl->rpwm < pslv)
- rtw_set_rpwm(padapter, pslv);
- }
- }
-
- mutex_unlock(&pwrctrl->lock);
-
- if (res == _FAIL)
- if (pwrctrl->cpwm >= PS_STATE_S2)
- res = _SUCCESS;
-
- return res;
-}
-
-/*
- * Description:
- *If task is done, call this func. to power down firmware again.
- *
- *Constraint:
- * 1. this function will request pwrctrl->lock
- *
- * Return Value:
- *none
- */
-void rtw_unregister_task_alive(struct adapter *padapter, u32 task)
-{
- struct pwrctrl_priv *pwrctrl;
- u8 pslv;
-
- pwrctrl = adapter_to_pwrctl(padapter);
- pslv = PS_STATE_S0;
-
- if (!(hal_btcoex_IsBtDisabled(padapter)) && hal_btcoex_IsBtControlLps(padapter)) {
- u8 val8;
-
- val8 = hal_btcoex_LpsVal(padapter);
- if (val8 & BIT(4))
- pslv = PS_STATE_S2;
- }
-
- mutex_lock(&pwrctrl->lock);
-
- unregister_task_alive(pwrctrl, task);
-
- if ((pwrctrl->pwr_mode != PS_MODE_ACTIVE) && pwrctrl->fw_current_in_ps_mode) {
- if (pwrctrl->cpwm > pslv) {
- if ((pslv >= PS_STATE_S2) || (pwrctrl->alives == 0))
- rtw_set_rpwm(padapter, pslv);
- }
- }
-
- mutex_unlock(&pwrctrl->lock);
-}
-
-/*
- * Caller: rtw_xmit_thread
- *
- * Check if the fw_pwrstate is okay for xmit.
- * If not (cpwm is less than S3), then the sub-routine
- * will raise the cpwm to be greater than or equal to S3.
- *
- * Calling Context: Passive
- *
- * Return Value:
- * _SUCCESS rtw_xmit_thread can write fifo/txcmd afterwards.
- * _FAIL rtw_xmit_thread can not do anything.
- */
-s32 rtw_register_tx_alive(struct adapter *padapter)
-{
- s32 res;
- struct pwrctrl_priv *pwrctrl;
- u8 pslv;
-
- res = _SUCCESS;
- pwrctrl = adapter_to_pwrctl(padapter);
- pslv = PS_STATE_S2;
-
- mutex_lock(&pwrctrl->lock);
-
- register_task_alive(pwrctrl, XMIT_ALIVE);
-
- if (pwrctrl->fw_current_in_ps_mode) {
- if (pwrctrl->cpwm < pslv) {
- if (pwrctrl->cpwm < PS_STATE_S2)
- res = _FAIL;
- if (pwrctrl->rpwm < pslv)
- rtw_set_rpwm(padapter, pslv);
- }
- }
-
- mutex_unlock(&pwrctrl->lock);
-
- if (res == _FAIL)
- if (pwrctrl->cpwm >= PS_STATE_S2)
- res = _SUCCESS;
-
- return res;
-}
-
-/*
- * Caller: rtw_cmd_thread
- *
- * Check if the fw_pwrstate is okay for issuing cmd.
- * If not (cpwm should be is less than S2), then the sub-routine
- * will raise the cpwm to be greater than or equal to S2.
- *
- * Calling Context: Passive
- *
- * Return Value:
- *_SUCCESS rtw_cmd_thread can issue cmds to firmware afterwards.
- *_FAIL rtw_cmd_thread can not do anything.
- */
-s32 rtw_register_cmd_alive(struct adapter *padapter)
-{
- s32 res;
- struct pwrctrl_priv *pwrctrl;
- u8 pslv;
-
- res = _SUCCESS;
- pwrctrl = adapter_to_pwrctl(padapter);
- pslv = PS_STATE_S2;
-
- mutex_lock(&pwrctrl->lock);
-
- register_task_alive(pwrctrl, CMD_ALIVE);
-
- if (pwrctrl->fw_current_in_ps_mode) {
- if (pwrctrl->cpwm < pslv) {
- if (pwrctrl->cpwm < PS_STATE_S2)
- res = _FAIL;
- if (pwrctrl->rpwm < pslv)
- rtw_set_rpwm(padapter, pslv);
- }
- }
-
- mutex_unlock(&pwrctrl->lock);
-
- if (res == _FAIL)
- if (pwrctrl->cpwm >= PS_STATE_S2)
- res = _SUCCESS;
-
- return res;
-}
-
-/*
- * Caller: ISR
- *
- * If ISR's txdone,
- * No more pkts for TX,
- * Then driver shall call this fun. to power down firmware again.
- */
-void rtw_unregister_tx_alive(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrctrl;
- u8 pslv;
-
- pwrctrl = adapter_to_pwrctl(padapter);
- pslv = PS_STATE_S0;
-
- if (!(hal_btcoex_IsBtDisabled(padapter)) && hal_btcoex_IsBtControlLps(padapter)) {
- u8 val8;
-
- val8 = hal_btcoex_LpsVal(padapter);
- if (val8 & BIT(4))
- pslv = PS_STATE_S2;
- }
-
- mutex_lock(&pwrctrl->lock);
-
- unregister_task_alive(pwrctrl, XMIT_ALIVE);
-
- if ((pwrctrl->pwr_mode != PS_MODE_ACTIVE) && pwrctrl->fw_current_in_ps_mode) {
- if (pwrctrl->cpwm > pslv)
- if ((pslv >= PS_STATE_S2) || (pwrctrl->alives == 0))
- rtw_set_rpwm(padapter, pslv);
- }
-
- mutex_unlock(&pwrctrl->lock);
-}
-
-/*
- * Caller: ISR
- *
- * If all commands have been done,
- * and no more command to do,
- * then driver shall call this fun. to power down firmware again.
- */
-void rtw_unregister_cmd_alive(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrctrl;
- u8 pslv;
-
- pwrctrl = adapter_to_pwrctl(padapter);
- pslv = PS_STATE_S0;
-
- if (!(hal_btcoex_IsBtDisabled(padapter)) && hal_btcoex_IsBtControlLps(padapter)) {
- u8 val8;
-
- val8 = hal_btcoex_LpsVal(padapter);
- if (val8 & BIT(4))
- pslv = PS_STATE_S2;
- }
-
- mutex_lock(&pwrctrl->lock);
-
- unregister_task_alive(pwrctrl, CMD_ALIVE);
-
- if ((pwrctrl->pwr_mode != PS_MODE_ACTIVE) && pwrctrl->fw_current_in_ps_mode) {
- if (pwrctrl->cpwm > pslv) {
- if ((pslv >= PS_STATE_S2) || (pwrctrl->alives == 0))
- rtw_set_rpwm(padapter, pslv);
- }
- }
-
- mutex_unlock(&pwrctrl->lock);
-}
-
-void rtw_init_pwrctrl_priv(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
-
- 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->pwr_state_check_cnts = 0;
- pwrctrlpriv->bInternalAutoSuspend = false;
- 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->fw_current_in_ps_mode = false;
-
- pwrctrlpriv->rpwm = 0;
- pwrctrlpriv->cpwm = PS_STATE_S4;
-
- pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE;
- pwrctrlpriv->smart_ps = padapter->registrypriv.smart_ps;
- pwrctrlpriv->bcn_ant_mode = 0;
- pwrctrlpriv->dtim = 0;
-
- pwrctrlpriv->tog = 0x80;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_SET_RPWM, (u8 *)(&pwrctrlpriv->rpwm));
-
- _init_workitem(&pwrctrlpriv->cpwm_event, cpwm_event_callback, NULL);
-
- pwrctrlpriv->brpwmtimeout = false;
- pwrctrlpriv->adapter = padapter;
- _init_workitem(&pwrctrlpriv->rpwmtimeoutwi, rpwmtimeout_workitem_callback, NULL);
- timer_setup(&pwrctrlpriv->pwr_rpwm_timer, pwr_rpwm_timeout_handler, 0);
- timer_setup(&pwrctrlpriv->pwr_state_check_timer,
- pwr_state_check_handler, 0);
-
- pwrctrlpriv->wowlan_mode = false;
- pwrctrlpriv->wowlan_ap_mode = false;
-}
-
-void rtw_free_pwrctrl_priv(struct adapter *adapter)
-{
-}
-
-inline void rtw_set_ips_deny(struct adapter *padapter, u32 ms)
-{
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
-
- pwrpriv->ips_deny_time = jiffies + msecs_to_jiffies(ms);
-}
-
-/*
- * rtw_pwr_wakeup - Wake the NIC up from: 1)IPS. 2)USB autosuspend
- * @adapter: pointer to struct adapter structure
- * @ips_deffer_ms: the ms will prevent from falling into IPS after wakeup
- * Return _SUCCESS or _FAIL
- */
-
-int _rtw_pwr_wakeup(struct adapter *padapter, u32 ips_deffer_ms, const char *caller)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
- struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(dvobj);
- struct mlme_priv *pmlmepriv;
- int ret = _SUCCESS;
- unsigned long start = jiffies;
- unsigned long deny_time = jiffies + msecs_to_jiffies(ips_deffer_ms);
-
- /* for LPS */
- LeaveAllPowerSaveMode(padapter);
-
- /* IPS still bound with primary adapter */
- padapter = GET_PRIMARY_ADAPTER(padapter);
- pmlmepriv = &padapter->mlmepriv;
-
- if (time_before(pwrpriv->ips_deny_time, deny_time))
- pwrpriv->ips_deny_time = deny_time;
-
- if (pwrpriv->ps_processing)
- while (pwrpriv->ps_processing && jiffies_to_msecs(jiffies - start) <= 3000)
- mdelay(10);
-
- if (!(pwrpriv->bInternalAutoSuspend) && pwrpriv->bInSuspend)
- while (pwrpriv->bInSuspend && jiffies_to_msecs(jiffies - start) <= 3000
- )
- mdelay(10);
-
- /* System suspend is not allowed to wakeup */
- if (!(pwrpriv->bInternalAutoSuspend) && pwrpriv->bInSuspend) {
- ret = _FAIL;
- goto exit;
- }
-
- /* block??? */
- if (pwrpriv->bInternalAutoSuspend && padapter->net_closed) {
- ret = _FAIL;
- goto exit;
- }
-
- /* I think this should be check in IPS, LPS, autosuspend functions... */
- if (check_fwstate(pmlmepriv, _FW_LINKED)) {
- ret = _SUCCESS;
- goto exit;
- }
-
- if (rf_off == pwrpriv->rf_pwrstate) {
- {
- if (ips_leave(padapter) == _FAIL) {
- ret = _FAIL;
- goto exit;
- }
- }
- }
-
- /* TODO: the following checking need to be merged... */
- if (padapter->driver_stopped || !padapter->bup || !padapter->hw_init_completed) {
- ret = false;
- goto exit;
- }
-
-exit:
- deny_time = jiffies + msecs_to_jiffies(ips_deffer_ms);
- 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 = adapter_to_pwrctl(padapter);
-
- 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 = adapter_to_pwrctl(padapter);
-
- 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) == _FAIL))
- return -EFAULT;
- } else {
- return -EINVAL;
- }
-
- return 0;
-}
-
-/*
- * ATTENTION:
- *This function will request pwrctrl LOCK!
- */
-void rtw_ps_deny(struct adapter *padapter, enum ps_deny_reason reason)
-{
- struct pwrctrl_priv *pwrpriv;
-
- pwrpriv = adapter_to_pwrctl(padapter);
-
- mutex_lock(&pwrpriv->lock);
- pwrpriv->ps_deny |= BIT(reason);
- mutex_unlock(&pwrpriv->lock);
-}
-
-/*
- * ATTENTION:
- *This function will request pwrctrl LOCK!
- */
-void rtw_ps_deny_cancel(struct adapter *padapter, enum ps_deny_reason reason)
-{
- struct pwrctrl_priv *pwrpriv;
-
- pwrpriv = adapter_to_pwrctl(padapter);
-
- mutex_lock(&pwrpriv->lock);
- pwrpriv->ps_deny &= ~BIT(reason);
- mutex_unlock(&pwrpriv->lock);
-}
-
-/*
- * ATTENTION:
- *Before calling this function pwrctrl lock should be occupied already,
- *otherwise it may return incorrect value.
- */
-u32 rtw_ps_deny_get(struct adapter *padapter)
-{
- return adapter_to_pwrctl(padapter)->ps_deny;
-}
diff --git a/drivers/staging/rtl8723bs/core/rtw_recv.c b/drivers/staging/rtl8723bs/core/rtw_recv.c
deleted file mode 100644
index 7568fc514d7c..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_recv.c
+++ /dev/null
@@ -1,2249 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <linux/jiffies.h>
-#include <rtw_recv.h>
-#include <net/cfg80211.h>
-#include <linux/unaligned.h>
-
-static u8 SNAP_ETH_TYPE_IPX[2] = {0x81, 0x37};
-static u8 SNAP_ETH_TYPE_APPLETALK_AARP[2] = {0x80, 0xf3};
-
-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);
-
- INIT_LIST_HEAD(&psta_recvpriv->defrag_q.queue);
- spin_lock_init(&psta_recvpriv->defrag_q.lock);
-}
-
-signed int _rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter)
-{
- signed int i;
- union recv_frame *precvframe;
- signed int res = _SUCCESS;
-
- spin_lock_init(&precvpriv->lock);
-
- INIT_LIST_HEAD(&precvpriv->free_recv_queue.queue);
- spin_lock_init(&precvpriv->free_recv_queue.lock);
- INIT_LIST_HEAD(&precvpriv->recv_pending_queue.queue);
- spin_lock_init(&precvpriv->recv_pending_queue.lock);
- INIT_LIST_HEAD(&precvpriv->uc_swdec_pending_queue.queue);
- spin_lock_init(&precvpriv->uc_swdec_pending_queue.lock);
-
- precvpriv->adapter = padapter;
-
- precvpriv->free_recvframe_cnt = NR_RECVFRAME;
-
- precvpriv->pallocated_frame_buf = vzalloc(NR_RECVFRAME * sizeof(union recv_frame)
- + RXFRAME_ALIGN_SZ);
-
- if (!precvpriv->pallocated_frame_buf) {
- res = _FAIL;
- goto exit;
- }
-
- precvpriv->precv_frame_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_frame_buf), RXFRAME_ALIGN_SZ);
- /* precvpriv->precv_frame_buf = precvpriv->pallocated_frame_buf + RXFRAME_ALIGN_SZ - */
- /* ((SIZE_PTR) (precvpriv->pallocated_frame_buf) &(RXFRAME_ALIGN_SZ-1)); */
-
- precvframe = (union recv_frame *)precvpriv->precv_frame_buf;
-
- for (i = 0; i < NR_RECVFRAME; i++) {
- INIT_LIST_HEAD(&(precvframe->u.list));
-
- list_add_tail(&(precvframe->u.list), &(precvpriv->free_recv_queue.queue));
-
- precvframe->u.hdr.pkt_newalloc = NULL;
- precvframe->u.hdr.pkt = NULL;
-
- precvframe->u.hdr.len = 0;
-
- precvframe->u.hdr.adapter = padapter;
- precvframe++;
- }
-
- res = rtw_hal_init_recv_priv(padapter);
-
- timer_setup(&precvpriv->signal_stat_timer, rtw_signal_stat_timer_hdl,
- 0);
-
- precvpriv->signal_stat_sampling_interval = 2000; /* ms */
-
- rtw_set_signal_stat_timer(precvpriv);
-
-exit:
- return res;
-}
-
-void _rtw_free_recv_priv(struct recv_priv *precvpriv)
-{
- signed int i;
- union recv_frame *precvframe;
- struct adapter *padapter = precvpriv->adapter;
-
- rtw_free_uc_swdec_pending_queue(padapter);
-
- precvframe = (union recv_frame *)precvpriv->precv_frame_buf;
-
- for (i = 0; i < NR_RECVFRAME; i++) {
- if (precvframe->u.hdr.pkt) {
- /* free skb by driver */
- dev_kfree_skb_any(precvframe->u.hdr.pkt);
- precvframe->u.hdr.pkt = NULL;
- }
- precvframe++;
- }
-
- vfree(precvpriv->pallocated_frame_buf);
-
- rtw_hal_free_recv_priv(padapter);
-}
-
-union recv_frame *_rtw_alloc_recvframe(struct __queue *pfree_recv_queue)
-{
- union recv_frame *precvframe;
- struct list_head *plist, *phead;
- struct adapter *padapter;
- struct recv_priv *precvpriv;
-
- if (list_empty(&pfree_recv_queue->queue)) {
- precvframe = NULL;
- } else {
- phead = get_list_head(pfree_recv_queue);
-
- plist = get_next(phead);
-
- precvframe = (union recv_frame *)plist;
-
- list_del_init(&precvframe->u.hdr.list);
- padapter = precvframe->u.hdr.adapter;
- if (padapter) {
- precvpriv = &padapter->recvpriv;
- if (pfree_recv_queue == &precvpriv->free_recv_queue)
- precvpriv->free_recvframe_cnt--;
- }
- }
- return precvframe;
-}
-
-union recv_frame *rtw_alloc_recvframe(struct __queue *pfree_recv_queue)
-{
- union 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(union recv_frame *precvframe, struct __queue *pfree_recv_queue)
-{
- struct adapter *padapter = precvframe->u.hdr.adapter;
- struct recv_priv *precvpriv = &padapter->recvpriv;
-
- if (precvframe->u.hdr.pkt) {
- dev_kfree_skb_any(precvframe->u.hdr.pkt);/* free skb by driver */
- precvframe->u.hdr.pkt = NULL;
- }
-
- spin_lock_bh(&pfree_recv_queue->lock);
-
- list_del_init(&(precvframe->u.hdr.list));
-
- precvframe->u.hdr.len = 0;
-
- list_add_tail(&(precvframe->u.hdr.list), get_list_head(pfree_recv_queue));
-
- if (padapter) {
- if (pfree_recv_queue == &precvpriv->free_recv_queue)
- precvpriv->free_recvframe_cnt++;
- }
- spin_unlock_bh(&pfree_recv_queue->lock);
- return _SUCCESS;
-}
-
-signed int _rtw_enqueue_recvframe(union recv_frame *precvframe, struct __queue *queue)
-{
- struct adapter *padapter = precvframe->u.hdr.adapter;
- struct recv_priv *precvpriv = &padapter->recvpriv;
-
- /* INIT_LIST_HEAD(&(precvframe->u.hdr.list)); */
- list_del_init(&(precvframe->u.hdr.list));
-
- list_add_tail(&(precvframe->u.hdr.list), get_list_head(queue));
-
- if (padapter)
- if (queue == &precvpriv->free_recv_queue)
- precvpriv->free_recvframe_cnt++;
-
- return _SUCCESS;
-}
-
-signed int rtw_enqueue_recvframe(union recv_frame *precvframe, struct __queue *queue)
-{
- signed int ret;
-
- /* _spinlock(&pfree_recv_queue->lock); */
- spin_lock_bh(&queue->lock);
- ret = _rtw_enqueue_recvframe(precvframe, queue);
- /* spin_unlock(&pfree_recv_queue->lock); */
- 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)
-{
- union recv_frame *precvframe;
- struct list_head *plist, *phead;
-
- spin_lock(&pframequeue->lock);
-
- phead = get_list_head(pframequeue);
- plist = get_next(phead);
-
- while (phead != plist) {
- precvframe = (union recv_frame *)plist;
-
- plist = get_next(plist);
-
- rtw_free_recvframe(precvframe, pfree_recv_queue);
- }
-
- spin_unlock(&pframequeue->lock);
-}
-
-u32 rtw_free_uc_swdec_pending_queue(struct adapter *adapter)
-{
- u32 cnt = 0;
- union 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;
-}
-
-signed int rtw_enqueue_recvbuf_to_head(struct recv_buf *precvbuf, struct __queue *queue)
-{
- spin_lock_bh(&queue->lock);
-
- list_del_init(&precvbuf->list);
- list_add(&precvbuf->list, get_list_head(queue));
-
- spin_unlock_bh(&queue->lock);
-
- return _SUCCESS;
-}
-
-signed int rtw_enqueue_recvbuf(struct recv_buf *precvbuf, struct __queue *queue)
-{
- spin_lock_bh(&queue->lock);
-
- list_del_init(&precvbuf->list);
-
- list_add_tail(&precvbuf->list, get_list_head(queue));
- spin_unlock_bh(&queue->lock);
- return _SUCCESS;
-}
-
-struct recv_buf *rtw_dequeue_recvbuf(struct __queue *queue)
-{
- struct recv_buf *precvbuf;
- struct list_head *plist, *phead;
-
- spin_lock_bh(&queue->lock);
-
- if (list_empty(&queue->queue)) {
- precvbuf = NULL;
- } else {
- phead = get_list_head(queue);
-
- plist = get_next(phead);
-
- precvbuf = container_of(plist, struct recv_buf, list);
-
- list_del_init(&precvbuf->list);
- }
-
- spin_unlock_bh(&queue->lock);
-
- return precvbuf;
-}
-
-static void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup)
-{
- enum nl80211_key_type key_type = 0;
- union iwreq_data wrqu;
- struct iw_michaelmicfailure ev;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- unsigned long 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;
- }
- }
-
- if (bgroup)
- key_type |= NL80211_KEYTYPE_GROUP;
- else
- key_type |= NL80211_KEYTYPE_PAIRWISE;
-
- cfg80211_michael_mic_failure(padapter->pnetdev, (u8 *)&pmlmepriv->assoc_bssid[0], key_type, -1,
- NULL, GFP_ATOMIC);
-
- 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);
-}
-
-static signed int recvframe_chkmic(struct adapter *adapter, union recv_frame *precvframe)
-{
- signed int i, res = _SUCCESS;
- u32 datalen;
- u8 miccode[8];
- u8 bmic_err = false, brpt_micerror = true;
- u8 *pframe, *payload, *pframemic;
- u8 *mickey;
- /* u8 *iv, rxdata_key_idx = 0; */
- struct sta_info *stainfo;
- struct rx_pkt_attrib *prxattrib = &precvframe->u.hdr.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.skey[0]; */
- /* iv = precvframe->u.hdr.rx_data+prxattrib->hdrlen; */
- /* rxdata_key_idx =(((iv[3])>>6)&0x3) ; */
- mickey = &psecuritypriv->dot118021XGrprxmickey[prxattrib->key_index].skey[0];
-
- /* psecuritypriv->dot118021XGrpKeyid, pmlmeinfo->key_index, rxdata_key_idx); */
-
- if (!psecuritypriv->binstallGrpkey) {
- res = _FAIL;
- goto exit;
- }
- } else {
- mickey = &stainfo->dot11tkiprxmickey.skey[0];
- }
-
- datalen = precvframe->u.hdr.len - prxattrib->hdrlen - prxattrib->iv_len - prxattrib->icv_len - 8;/* icv_len included the mic code */
- pframe = precvframe->u.hdr.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 union recv_frame *decryptor(struct adapter *padapter, union recv_frame *precv_frame)
-{
- struct rx_pkt_attrib *prxattrib = &precv_frame->u.hdr.attrib;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- union recv_frame *return_packet = precv_frame;
- u32 res = _SUCCESS;
-
- if (prxattrib->encrypt > 0) {
- u8 *iv = precv_frame->u.hdr.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, (u8 *)precv_frame);
- break;
- case _TKIP_:
- res = rtw_tkip_decrypt(padapter, (u8 *)precv_frame);
- break;
- case _AES_:
- res = rtw_aes_decrypt(padapter, (u8 *)precv_frame);
- break;
- default:
- break;
- }
- } else if (prxattrib->bdecrypted == 1 && prxattrib->encrypt > 0 &&
- (psecuritypriv->busetkipkey == 1 || prxattrib->encrypt != _TKIP_)
- ) {
- psecuritypriv->hw_decrypted = true;
- } else {
- }
-
- 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 union recv_frame *portctrl(struct adapter *adapter, union recv_frame *precv_frame)
-{
- u8 *psta_addr = NULL;
- u8 *ptr;
- unsigned int auth_alg;
- struct recv_frame_hdr *pfhdr;
- struct sta_info *psta;
- struct sta_priv *pstapriv;
- union recv_frame *prtnframe;
- u16 ether_type = 0;
- u16 eapol_type = 0x888e;/* for Funia BD's WPA issue */
- struct rx_pkt_attrib *pattrib;
-
- pstapriv = &adapter->stapriv;
-
- auth_alg = adapter->securitypriv.dot11_auth_algrthm;
-
- ptr = precv_frame->u.hdr.rx_data;
- pfhdr = &precv_frame->u.hdr;
- 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)) {
- __be16 be_tmp;
-
- /* blocked */
- /* only accept EAPOL frame */
-
- prtnframe = precv_frame;
-
- /* get ether_type */
- ptr = ptr + pfhdr->attrib.hdrlen + pfhdr->attrib.iv_len + LLC_HEADER_LENGTH;
- 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;
- /* check is the EAPOL frame or not (Rekey) */
- /* if (ether_type == eapol_type) { */
- /* check Rekey */
-
- /* prtnframe =precv_frame; */
- /* */
- /* else { */
- /* */
- }
- } else {
- prtnframe = precv_frame;
- }
-
- return prtnframe;
-}
-
-static signed int recv_decache(union recv_frame *precv_frame, u8 bretry, struct stainfo_rxcache *prxcache)
-{
- signed int tid = precv_frame->u.hdr.attrib.priority;
-
- u16 seq_ctrl = ((precv_frame->u.hdr.attrib.seq_num & 0xffff) << 4) |
- (precv_frame->u.hdr.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, union recv_frame *precv_frame)
-{
- unsigned char pwrbit;
- u8 *ptr = precv_frame->u.hdr.rx_data;
- struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.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)) {
- /* psta->state |= WIFI_SLEEP_STATE; */
- /* pstapriv->sta_dz_bitmap |= BIT(psta->aid); */
-
- stop_sta_xmit(padapter, psta);
- }
- } else {
- if (psta->state & WIFI_SLEEP_STATE) {
- /* psta->state ^= WIFI_SLEEP_STATE; */
- /* pstapriv->sta_dz_bitmap &= ~BIT(psta->aid); */
-
- wakeup_sta_to_xmit(padapter, psta);
- }
- }
- }
-}
-
-static void process_wmmps_data(struct adapter *padapter, union recv_frame *precv_frame)
-{
- struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.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, union 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->u.hdr.attrib;
- struct recv_priv *precvpriv = &padapter->recvpriv;
-
- sz = get_recvframe_len(prframe);
- precvpriv->rx_bytes += sz;
-
- padapter->mlmepriv.link_detect_info.num_rx_ok_in_period++;
-
- if ((!is_broadcast_ether_addr(pattrib->dst)) && (!is_multicast_ether_addr(pattrib->dst)))
- padapter->mlmepriv.link_detect_info.num_rx_unicast_ok_in_period++;
-
- if (sta)
- psta = sta;
- else
- psta = prframe->u.hdr.psta;
-
- if (psta) {
- pstats = &psta->sta_stats;
-
- pstats->rx_data_pkts++;
- pstats->rx_bytes += sz;
- }
-
- traffic_check_for_leave_lps(padapter, false, 0);
-}
-
-static signed int sta2sta_data_frame(struct adapter *adapter, union recv_frame *precv_frame,
- struct sta_info **psta)
-{
- u8 *ptr = precv_frame->u.hdr.rx_data;
- signed int ret = _SUCCESS;
- struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.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;
- signed int 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 (is_zero_ether_addr(pattrib->bssid) ||
- is_zero_ether_addr(mybssid) ||
- (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)) {
- memcpy(pattrib->dst, GetAddr1Ptr(ptr), ETH_ALEN);
- memcpy(pattrib->src, GetAddr2Ptr(ptr), ETH_ALEN);
- memcpy(pattrib->bssid, GetAddr3Ptr(ptr), ETH_ALEN);
- memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
- memcpy(pattrib->ta, pattrib->src, ETH_ALEN);
-
- 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) {
- ret = _FAIL;
- goto exit;
- }
-
-exit:
- return ret;
-}
-
-static signed int ap2sta_data_frame(struct adapter *adapter, union recv_frame *precv_frame,
- struct sta_info **psta)
-{
- u8 *ptr = precv_frame->u.hdr.rx_data;
- struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
- signed 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);
- signed int 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 (GetFrameSubType(ptr) & BIT(6)) {
- /* No data, will not indicate to upper layer, temporarily count it here */
- 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->dst, GetAddr1Ptr(ptr), ETH_ALEN);
- memcpy(pattrib->src, GetAddr2Ptr(ptr), ETH_ALEN);
- memcpy(pattrib->bssid, GetAddr3Ptr(ptr), ETH_ALEN);
- memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
- memcpy(pattrib->ta, pattrib->src, 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) {
- /* for AP multicast issue , modify by yiwei */
- static unsigned long send_issue_deauth_time;
-
- if (jiffies_to_msecs(jiffies - send_issue_deauth_time) > 10000 || send_issue_deauth_time == 0) {
- send_issue_deauth_time = jiffies;
-
- issue_deauth(adapter, pattrib->bssid, WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
- }
- }
- }
-
- ret = _FAIL;
- }
-
-exit:
- return ret;
-}
-
-static signed int sta2ap_data_frame(struct adapter *adapter, union recv_frame *precv_frame,
- struct sta_info **psta)
-{
- u8 *ptr = precv_frame->u.hdr.rx_data;
- struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
- struct sta_priv *pstapriv = &adapter->stapriv;
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
- unsigned char *mybssid = get_bssid(pmlmepriv);
- signed 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 ((GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE) == WIFI_QOS_DATA_TYPE)
- process_wmmps_data(adapter, precv_frame);
-
- if (GetFrameSubType(ptr) & BIT(6)) {
- /* No data, will not indicate to upper layer, temporarily 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 signed int validate_recv_ctrl_frame(struct adapter *padapter, union recv_frame *precv_frame)
-{
- struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
- struct sta_priv *pstapriv = &padapter->stapriv;
- u8 *pframe = precv_frame->u.hdr.rx_data;
- struct sta_info *psta = NULL;
- /* uint len = precv_frame->u.hdr.len; */
-
- if (GetFrameType(pframe) != WIFI_CTRL_TYPE)
- return _FAIL;
-
- /* receive the frames that ra(a1) is my address */
- if (memcmp(GetAddr1Ptr(pframe), myid(&padapter->eeprompriv), ETH_ALEN))
- return _FAIL;
-
- psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
- if (!psta)
- return _FAIL;
-
- /* for rx pkt statistics */
- psta->sta_stats.rx_ctrl_pkts++;
-
- /* only handle ps-poll */
- if (GetFrameSubType(pframe) == WIFI_PSPOLL) {
- u16 aid;
- u8 wmmps_ac = 0;
-
- aid = GetAid(pframe);
- if (psta->aid != aid)
- return _FAIL;
-
- 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 _FAIL;
-
- 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(&psta->sleep_q.lock); */
- spin_lock_bh(&pxmitpriv->lock);
-
- xmitframe_phead = get_list_head(&psta->sleep_q);
- xmitframe_plist = get_next(xmitframe_phead);
-
- if (xmitframe_phead != xmitframe_plist) {
- pxmitframe = container_of(xmitframe_plist, struct xmit_frame, list);
-
- xmitframe_plist = get_next(xmitframe_plist);
-
- 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;
-
- rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
-
- if (psta->sleepq_len == 0) {
- pstapriv->tim_bitmap &= ~BIT(psta->aid);
-
- /* update BCN for TIM IE */
- /* update_BCNTIM(padapter); */
- update_beacon(padapter, WLAN_EID_TIM, true);
- }
-
- /* spin_unlock_bh(&psta->sleep_q.lock); */
- spin_unlock_bh(&pxmitpriv->lock);
-
- } else {
- /* spin_unlock_bh(&psta->sleep_q.lock); */
- spin_unlock_bh(&pxmitpriv->lock);
-
- 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_in_interrupt(padapter, psta->hwaddr);
- } else {
- psta->sleepq_len = 0;
- }
-
- pstapriv->tim_bitmap &= ~BIT(psta->aid);
-
- /* update BCN for TIM IE */
- /* update_BCNTIM(padapter); */
- update_beacon(padapter, WLAN_EID_TIM, true);
- }
- }
- }
- }
-
- return _FAIL;
-}
-
-/* perform defrag */
-static union recv_frame *recvframe_defrag(struct adapter *adapter,
- struct __queue *defrag_q)
-{
- struct list_head *plist, *phead;
- u8 wlanhdr_offset;
- u8 curfragnum;
- struct recv_frame_hdr *pfhdr, *pnfhdr;
- union 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 = get_next(phead);
- prframe = (union recv_frame *)plist;
- pfhdr = &prframe->u.hdr;
- list_del_init(&(prframe->u.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 = get_next(plist);
-
- while (phead != plist) {
- pnextrframe = (union recv_frame *)plist;
- pnfhdr = &pnextrframe->u.hdr;
-
- /* 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 = get_next(plist);
- }
-
- /* 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 */
-static union recv_frame *recvframe_chk_defrag(struct adapter *padapter, union recv_frame *precv_frame)
-{
- u8 ismfrag;
- u8 fragnum;
- u8 *psta_addr;
- struct recv_frame_hdr *pfhdr;
- struct sta_info *psta;
- struct sta_priv *pstapriv;
- struct list_head *phead;
- union recv_frame *prtnframe = NULL;
- struct __queue *pfree_recv_queue, *pdefrag_q;
-
- pstapriv = &padapter->stapriv;
-
- pfhdr = &precv_frame->u.hdr;
-
- 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) {
- u8 type = GetFrameType(pfhdr->rx_data);
-
- if (type != WIFI_DATA_TYPE) {
- 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 */
-
- /* spin_lock(&pdefrag_q->lock); */
- phead = get_list_head(pdefrag_q);
- list_add_tail(&pfhdr->list, phead);
- /* spin_unlock(&pdefrag_q->lock); */
-
- prtnframe = NULL;
-
- } else {
- /* can't find this ta's defrag_queue, so free this recv_frame */
- 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) {
- /* spin_lock(&pdefrag_q->lock); */
- phead = get_list_head(pdefrag_q);
- list_add_tail(&pfhdr->list, phead);
- /* spin_unlock(&pdefrag_q->lock); */
-
- /* 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 */
- rtw_free_recvframe(precv_frame, pfree_recv_queue);
- prtnframe = NULL;
- }
- }
-
- if ((prtnframe) && (prtnframe->u.hdr.attrib.privacy)) {
- /* after defrag we must check tkip mic code */
- if (recvframe_chkmic(padapter, prtnframe) == _FAIL) {
- rtw_free_recvframe(prtnframe, pfree_recv_queue);
- prtnframe = NULL;
- }
- }
- return prtnframe;
-}
-
-static signed int validate_recv_mgnt_frame(struct adapter *padapter, union recv_frame *precv_frame)
-{
- struct sta_info *psta;
-
- precv_frame = recvframe_chk_defrag(padapter, precv_frame);
- if (!precv_frame)
- return _SUCCESS;
-
- /* for rx pkt statistics */
- psta = rtw_get_stainfo(&padapter->stapriv, GetAddr2Ptr(precv_frame->u.hdr.rx_data));
- if (!psta)
- goto exit;
-
- psta->sta_stats.rx_mgnt_pkts++;
-
- switch (GetFrameSubType(precv_frame->u.hdr.rx_data)) {
- case WIFI_BEACON:
- psta->sta_stats.rx_beacon_pkts++;
- break;
- case WIFI_PROBEREQ:
- psta->sta_stats.rx_probereq_pkts++;
- break;
- case WIFI_PROBERSP:
- if (!memcmp(padapter->eeprompriv.mac_addr,
- GetAddr1Ptr(precv_frame->u.hdr.rx_data),
- ETH_ALEN))
- psta->sta_stats.rx_probersp_pkts++;
- else if (is_broadcast_ether_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data)) ||
- is_multicast_ether_addr(GetAddr1Ptr(precv_frame->u.hdr.rx_data)))
- psta->sta_stats.rx_probersp_bm_pkts++;
- else
- psta->sta_stats.rx_probersp_uo_pkts++;
-
- break;
- }
-
-exit:
- mgt_dispatcher(padapter, precv_frame);
-
- return _SUCCESS;
-}
-
-static signed int validate_recv_data_frame(struct adapter *adapter, union recv_frame *precv_frame)
-{
- u8 bretry;
- u8 *psa, *pda, *pbssid;
- struct sta_info *psta = NULL;
- u8 *ptr = precv_frame->u.hdr.rx_data;
- struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
- struct security_priv *psecuritypriv = &adapter->securitypriv;
- signed int ret = _SUCCESS;
-
- bretry = GetRetry(ptr);
- pda = get_da(ptr);
- psa = get_sa(ptr);
- pbssid = get_hdr_bssid(ptr);
-
- if (!pbssid) {
- ret = _FAIL;
- goto exit;
- }
-
- memcpy(pattrib->dst, pda, ETH_ALEN);
- memcpy(pattrib->src, psa, ETH_ALEN);
-
- memcpy(pattrib->bssid, pbssid, ETH_ALEN);
-
- switch (pattrib->to_fr_ds) {
- case 0:
- memcpy(pattrib->ra, pda, ETH_ALEN);
- memcpy(pattrib->ta, psa, ETH_ALEN);
- ret = sta2sta_data_frame(adapter, precv_frame, &psta);
- break;
-
- case 1:
- memcpy(pattrib->ra, pda, ETH_ALEN);
- memcpy(pattrib->ta, pbssid, ETH_ALEN);
- ret = ap2sta_data_frame(adapter, precv_frame, &psta);
- break;
-
- case 2:
- memcpy(pattrib->ra, pbssid, ETH_ALEN);
- memcpy(pattrib->ta, psa, ETH_ALEN);
- ret = sta2ap_data_frame(adapter, precv_frame, &psta);
- break;
-
- case 3:
- memcpy(pattrib->ra, GetAddr1Ptr(ptr), ETH_ALEN);
- memcpy(pattrib->ta, GetAddr2Ptr(ptr), ETH_ALEN);
- ret = _FAIL;
- break;
-
- default:
- ret = _FAIL;
- break;
- }
-
- if (ret == _FAIL || ret == RTW_RX_HANDLED)
- goto exit;
-
- if (!psta) {
- ret = _FAIL;
- goto exit;
- }
-
- /* psta->rssi = prxcmd->rssi; */
- /* psta->signal_quality = prxcmd->sq; */
- precv_frame->u.hdr.psta = psta;
-
- pattrib->amsdu = 0;
- pattrib->ack_policy = 0;
- /* parsing QC field */
- if (pattrib->qos == 1) {
- pattrib->priority = GetPriority((ptr + 24));
- pattrib->ack_policy = GetAckpolicy((ptr + 24));
- pattrib->amsdu = GetAMsdu((ptr + 24));
- pattrib->hdrlen = pattrib->to_fr_ds == 3 ? 32 : 26;
-
- if (pattrib->priority != 0 && pattrib->priority != 3)
- adapter->recvpriv.bIsAnyNonBEPkts = true;
-
- } else {
- pattrib->priority = 0;
- pattrib->hdrlen = pattrib->to_fr_ds == 3 ? 30 : 24;
- }
-
- if (pattrib->order)/* HT-CTRL 11n */
- pattrib->hdrlen += 4;
-
- precv_frame->u.hdr.preorder_ctrl = &psta->recvreorder_ctrl[pattrib->priority];
-
- /* decache, drop duplicate recv packets */
- if (recv_decache(precv_frame, bretry, &psta->sta_recvpriv.rxcache) == _FAIL) {
- ret = _FAIL;
- goto exit;
- }
-
- 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 = pattrib->icv_len = 0;
- }
-
-exit:
- return ret;
-}
-
-static signed int validate_80211w_mgmt(struct adapter *adapter, union recv_frame *precv_frame)
-{
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
- struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
- u8 *ptr = precv_frame->u.hdr.rx_data;
- u8 subtype;
-
- subtype = GetFrameSubType(ptr); /* bit(7)~bit(2) */
-
- /* only support station mode */
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED) &&
- adapter->securitypriv.binstallBIPkey) {
- /* unicast management frame decrypt */
- if (pattrib->privacy && !(is_multicast_ether_addr(GetAddr1Ptr(ptr))) &&
- (subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC || subtype == WIFI_ACTION)) {
- u8 *mgmt_DATA;
- u32 data_len = 0;
-
- pattrib->bdecrypted = 0;
- pattrib->encrypt = _AES_;
- pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
- /* set iv and icv length */
- SET_ICE_IV_LEN(pattrib->iv_len, pattrib->icv_len, pattrib->encrypt);
- memcpy(pattrib->ra, GetAddr1Ptr(ptr), ETH_ALEN);
- memcpy(pattrib->ta, GetAddr2Ptr(ptr), ETH_ALEN);
- /* actual management data frame body */
- data_len = pattrib->pkt_len - pattrib->hdrlen - pattrib->iv_len - pattrib->icv_len;
- mgmt_DATA = kzalloc(data_len, GFP_ATOMIC);
- if (!mgmt_DATA)
- goto validate_80211w_fail;
- precv_frame = decryptor(adapter, precv_frame);
- /* save actual management data frame body */
- memcpy(mgmt_DATA, ptr + pattrib->hdrlen + pattrib->iv_len, data_len);
- /* overwrite the iv field */
- memcpy(ptr + pattrib->hdrlen, mgmt_DATA, data_len);
- /* remove the iv and icv length */
- pattrib->pkt_len = pattrib->pkt_len - pattrib->iv_len - pattrib->icv_len;
- kfree(mgmt_DATA);
- if (!precv_frame)
- goto validate_80211w_fail;
- } else if (is_multicast_ether_addr(GetAddr1Ptr(ptr)) &&
- (subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC)) {
- signed int BIP_ret = _SUCCESS;
- /* verify BIP MME IE of broadcast/multicast de-auth/disassoc packet */
- BIP_ret = rtw_BIP_verify(adapter, (u8 *)precv_frame);
- if (BIP_ret == _FAIL) {
- goto validate_80211w_fail;
- } else if (BIP_ret == RTW_RX_HANDLED) {
- /* issue sa query request */
- issue_action_SA_Query(adapter, NULL, 0, 0);
- goto validate_80211w_fail;
- }
- } else { /* 802.11w protect */
- if (subtype == WIFI_ACTION) {
- /* according 802.11-2012 standard, these five types are not robust types */
- if (ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_PUBLIC &&
- ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_HT &&
- ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_UNPROTECTED_WNM &&
- ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_SELF_PROTECTED &&
- ptr[WLAN_HDR_A3_LEN] != RTW_WLAN_CATEGORY_P2P) {
- goto validate_80211w_fail;
- }
- } else if (subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC) {
- /* issue sa query request */
- issue_action_SA_Query(adapter, NULL, 0, 0);
- goto validate_80211w_fail;
- }
- }
- }
- return _SUCCESS;
-
-validate_80211w_fail:
- return _FAIL;
-}
-
-static signed int validate_recv_frame(struct adapter *adapter, union recv_frame *precv_frame)
-{
- /* shall check frame subtype, to / from ds, da, bssid */
-
- /* then call check if rx seq/frag. duplicated. */
-
- u8 type;
- u8 subtype;
- signed int retval = _SUCCESS;
-
- struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
-
- u8 *ptr = precv_frame->u.hdr.rx_data;
- u8 ver = (unsigned char) (*ptr) & 0x3;
-
- /* add version chk */
- if (ver != 0) {
- retval = _FAIL;
- goto exit;
- }
-
- type = GetFrameType(ptr);
- subtype = GetFrameSubType(ptr); /* bit(7)~bit(2) */
-
- pattrib->to_fr_ds = get_tofr_ds(ptr);
-
- pattrib->frag_num = GetFragNum(ptr);
- pattrib->seq_num = GetSequence(ptr);
-
- pattrib->pw_save = GetPwrMgt(ptr);
- pattrib->mfrag = GetMFrag(ptr);
- pattrib->mdata = GetMData(ptr);
- pattrib->privacy = GetPrivacy(ptr);
- pattrib->order = GetOrder(ptr);
-
- switch (type) {
- case WIFI_MGT_TYPE: /* mgnt */
- if (validate_80211w_mgmt(adapter, precv_frame) == _FAIL) {
- retval = _FAIL;
- break;
- }
-
- retval = validate_recv_mgnt_frame(adapter, precv_frame);
- retval = _FAIL; /* only data frame return _SUCCESS */
- break;
- case WIFI_CTRL_TYPE: /* ctrl */
- retval = validate_recv_ctrl_frame(adapter, precv_frame);
- retval = _FAIL; /* only data frame return _SUCCESS */
- break;
- case WIFI_DATA_TYPE: /* data */
- pattrib->qos = (subtype & BIT(7)) ? 1 : 0;
- retval = validate_recv_data_frame(adapter, precv_frame);
- if (retval == _FAIL) {
- struct recv_priv *precvpriv = &adapter->recvpriv;
-
- precvpriv->rx_drop++;
- }
- break;
- default:
- retval = _FAIL;
- break;
- }
-
-exit:
- return retval;
-}
-
-/* remove the wlanhdr and add the eth_hdr */
-static signed int wlanhdr_to_ethhdr(union recv_frame *precvframe)
-{
- signed int rmv_len;
- u16 eth_type, len;
- u8 bsnaphdr;
- u8 *psnap_type;
- struct ieee80211_snap_hdr *psnap;
- __be16 be_tmp;
- struct adapter *adapter = precvframe->u.hdr.adapter;
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
- u8 *ptr = precvframe->u.hdr.rx_data; /* point to frame_ctrl field */
- struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.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 */
- /* eth_type = (psnap_type[0] << 8) | psnap_type[1]; */
- if ((!memcmp(psnap, rfc1042_header, SNAP_SIZE) &&
- (memcmp(psnap_type, SNAP_ETH_TYPE_IPX, 2)) &&
- (memcmp(psnap_type, SNAP_ETH_TYPE_APPLETALK_AARP, 2))) ||
- /* eth_type != ETH_P_AARP && eth_type != ETH_P_IPX) || */
- !memcmp(psnap, 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->u.hdr.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 _SUCCESS;
-}
-
-static struct sk_buff *rtw_alloc_msdu_pkt(union recv_frame *prframe, u16 subframe_len, u8 *pdata)
-{
- u16 eth_type;
- struct sk_buff *sub_skb;
- struct rx_pkt_attrib *pattrib;
-
- pattrib = &prframe->u.hdr.attrib;
-
- sub_skb = __dev_alloc_skb(subframe_len + 12, GFP_ATOMIC);
- if (!sub_skb)
- return NULL;
-
- skb_reserve(sub_skb, 12);
- skb_put_data(sub_skb, (pdata + ETH_HLEN), subframe_len);
-
- eth_type = get_unaligned_be16(&sub_skb->data[6]);
-
- if (sub_skb->len >= 8 &&
- ((!memcmp(sub_skb->data, rfc1042_header, SNAP_SIZE) &&
- eth_type != ETH_P_AARP && eth_type != ETH_P_IPX) ||
- !memcmp(sub_skb->data, 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);
- }
-
- return sub_skb;
-}
-
-static void rtw_recv_indicate_pkt(struct adapter *padapter, struct sk_buff *pkt, struct rx_pkt_attrib *pattrib)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- /* Indicate the packets to upper layer */
- if (pkt) {
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- struct sk_buff *pskb2 = NULL;
- struct sta_info *psta = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- int 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(pkt, GFP_ATOMIC);
- } else {
- psta = rtw_get_stainfo(pstapriv, pattrib->dst);
- }
-
- if (psta) {
- struct net_device *pnetdev = (struct net_device *)padapter->pnetdev;
- /* skb->ip_summed = CHECKSUM_NONE; */
- pkt->dev = pnetdev;
- skb_set_queue_mapping(pkt, rtw_recv_select_queue(pkt));
-
- _rtw_xmit_entry(pkt, pnetdev);
-
- if (bmcast && pskb2)
- pkt = pskb2;
- else
- return;
- }
- } else {
- /* to APself */
- }
- }
-
- pkt->protocol = eth_type_trans(pkt, padapter->pnetdev);
- pkt->dev = padapter->pnetdev;
-
- pkt->ip_summed = CHECKSUM_NONE;
-
- rtw_netif_rx(padapter->pnetdev, pkt);
- }
-}
-
-static int amsdu_to_msdu(struct adapter *padapter, union recv_frame *prframe)
-{
- int a_len, padding_len;
- u16 subframe_len;
- u8 nr_subframes, i;
- u8 *pdata;
- struct sk_buff *sub_pkt, *subframes[MAX_SUBFRAME_COUNT];
- struct recv_priv *precvpriv = &padapter->recvpriv;
- struct __queue *pfree_recv_queue = &(precvpriv->free_recv_queue);
-
- nr_subframes = 0;
-
- recvframe_pull(prframe, prframe->u.hdr.attrib.hdrlen);
-
- if (prframe->u.hdr.attrib.iv_len > 0)
- recvframe_pull(prframe, prframe->u.hdr.attrib.iv_len);
-
- a_len = prframe->u.hdr.len;
-
- pdata = prframe->u.hdr.rx_data;
-
- while (a_len > ETH_HLEN) {
- /* Offset 12 denote 2 mac address */
- subframe_len = get_unaligned_be16(pdata + 12);
-
- if (a_len < ETH_HLEN + subframe_len)
- break;
-
- sub_pkt = rtw_alloc_msdu_pkt(prframe, subframe_len, pdata);
- if (!sub_pkt)
- break;
-
- /* move the data point to data content */
- pdata += ETH_HLEN;
- a_len -= ETH_HLEN;
-
- subframes[nr_subframes++] = sub_pkt;
-
- if (nr_subframes >= MAX_SUBFRAME_COUNT)
- break;
-
- pdata += subframe_len;
- a_len -= subframe_len;
- if (a_len != 0) {
- padding_len = 4 - ((subframe_len + ETH_HLEN) & (4 - 1));
- if (padding_len == 4)
- padding_len = 0;
-
- if (a_len < padding_len)
- break;
-
- pdata += padding_len;
- a_len -= padding_len;
- }
- }
-
- for (i = 0; i < nr_subframes; i++) {
- sub_pkt = subframes[i];
-
- /* Indicate the packets to upper layer */
- if (sub_pkt)
- rtw_recv_indicate_pkt(padapter, sub_pkt, &prframe->u.hdr.attrib);
- }
-
- prframe->u.hdr.len = 0;
- rtw_free_recvframe(prframe, pfree_recv_queue);/* free this recv_frame */
-
- return _SUCCESS;
-}
-
-static int 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) % 4096u;
-
- /* 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) % 4096u;
-
- } else if (SN_LESS(wend, seq_num)) {
- /* boundary situation, when seq_num cross 0xFFF */
- 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 int enqueue_reorder_recvframe(struct recv_reorder_ctrl *preorder_ctrl, union recv_frame *prframe)
-{
- struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
- struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
- struct list_head *phead, *plist;
- union recv_frame *pnextrframe;
- struct rx_pkt_attrib *pnextattrib;
-
- /* spin_lock_irqsave(&ppending_recvframe_queue->lock, irql); */
- /* spin_lock(&ppending_recvframe_queue->lock); */
-
- phead = get_list_head(ppending_recvframe_queue);
- plist = get_next(phead);
-
- while (phead != plist) {
- pnextrframe = (union recv_frame *)plist;
- pnextattrib = &pnextrframe->u.hdr.attrib;
-
- if (SN_LESS(pnextattrib->seq_num, pattrib->seq_num))
- plist = get_next(plist);
- else if (SN_EQUAL(pnextattrib->seq_num, pattrib->seq_num))
- /* Duplicate entry is found!! Do not insert current entry. */
- /* spin_unlock_irqrestore(&ppending_recvframe_queue->lock, irql); */
- return false;
- else
- break;
- }
-
- /* spin_lock_irqsave(&ppending_recvframe_queue->lock, irql); */
- /* spin_lock(&ppending_recvframe_queue->lock); */
-
- list_del_init(&(prframe->u.hdr.list));
-
- list_add_tail(&(prframe->u.hdr.list), plist);
-
- /* spin_unlock(&ppending_recvframe_queue->lock); */
- /* spin_unlock_irqrestore(&ppending_recvframe_queue->lock, irql); */
-
- return true;
-}
-
-static int rtw_recv_indicatepkt(struct adapter *padapter, union recv_frame *precv_frame)
-{
- struct recv_priv *precvpriv;
- struct __queue *pfree_recv_queue;
- struct sk_buff *skb;
- struct rx_pkt_attrib *pattrib = &precv_frame->u.hdr.attrib;
-
- precvpriv = &(padapter->recvpriv);
- pfree_recv_queue = &(precvpriv->free_recv_queue);
-
- skb = precv_frame->u.hdr.pkt;
- if (!skb)
- goto _recv_indicatepkt_drop;
-
- skb->data = precv_frame->u.hdr.rx_data;
-
- skb_set_tail_pointer(skb, precv_frame->u.hdr.len);
-
- skb->len = precv_frame->u.hdr.len;
-
- rtw_recv_indicate_pkt(padapter, skb, pattrib);
-
- /* pointers to NULL before rtw_free_recvframe() */
- precv_frame->u.hdr.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 int recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reorder_ctrl *preorder_ctrl, int bforced)
-{
- struct list_head *phead, *plist;
- union recv_frame *prframe;
- struct rx_pkt_attrib *pattrib;
- /* u8 index = 0; */
- int bPktInBuf = false;
- struct recv_priv *precvpriv = &padapter->recvpriv;
- struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-
- /* spin_lock_irqsave(&ppending_recvframe_queue->lock, irql); */
- /* spin_lock(&ppending_recvframe_queue->lock); */
-
- phead = get_list_head(ppending_recvframe_queue);
- plist = get_next(phead);
-
- /* Handling some condition for forced indicate case. */
- if (bforced) {
- if (list_empty(phead)) {
- /* spin_unlock_irqrestore(&ppending_recvframe_queue->lock, irql); */
- /* spin_unlock(&ppending_recvframe_queue->lock); */
- return true;
- }
-
- prframe = (union recv_frame *)plist;
- pattrib = &prframe->u.hdr.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 = (union recv_frame *)plist;
- pattrib = &prframe->u.hdr.attrib;
-
- if (!SN_LESS(preorder_ctrl->indicate_seq, pattrib->seq_num)) {
- plist = get_next(plist);
- list_del_init(&(prframe->u.hdr.list));
-
- if (SN_EQUAL(preorder_ctrl->indicate_seq, pattrib->seq_num))
- preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) % 4096u;
-
- /* Set this as a lock to make sure that only one thread is indicating packet. */
- /* pTS->RxIndicateState = RXTS_INDICATE_PROCESSING; */
-
- /* Indicate packets */
-
- /* indicate this recv_frame */
- if (!pattrib->amsdu) {
- if (!padapter->driver_stopped &&
- !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;
- }
- }
-
- /* spin_unlock(&ppending_recvframe_queue->lock); */
- /* spin_unlock_irqrestore(&ppending_recvframe_queue->lock, irql); */
-
- return bPktInBuf;
-}
-
-static int recv_indicatepkt_reorder(struct adapter *padapter, union recv_frame *prframe)
-{
- int retval = _SUCCESS;
- struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
- struct recv_reorder_ctrl *preorder_ctrl = prframe->u.hdr.preorder_ctrl;
- struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-
- if (!pattrib->amsdu) {
- /* s1. */
- wlanhdr_to_ethhdr(prframe);
-
- if (pattrib->qos != 1) {
- if (!padapter->driver_stopped &&
- !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)) {
- /* spin_unlock_irqrestore(&ppending_recvframe_queue->lock, irql); */
- /* return _FAIL; */
- 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);
- timer_delete_sync(&preorder_ctrl->reordering_ctrl_timer);
- }
-
- return _SUCCESS;
-
-_err_exit:
- spin_unlock_bh(&ppending_recvframe_queue->lock);
-
- return _FAIL;
-}
-
-void rtw_reordering_ctrl_timeout_handler(struct timer_list *t)
-{
- struct recv_reorder_ctrl *preorder_ctrl =
- timer_container_of(preorder_ctrl, t, reordering_ctrl_timer);
- struct adapter *padapter = preorder_ctrl->padapter;
- struct __queue *ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-
- if (padapter->driver_stopped || 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, union recv_frame *prframe)
-{
- int retval = _SUCCESS;
- /* struct recv_priv *precvpriv = &padapter->recvpriv; */
- /* struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib; */
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct ht_priv *phtpriv = &pmlmepriv->htpriv;
-
- if (phtpriv->ht_option) { /* B/G/N Mode */
- /* prframe->u.hdr.preorder_ctrl = &precvpriv->recvreorder_ctrl[pattrib->priority]; */
-
- if (recv_indicatepkt_reorder(padapter, prframe) != _SUCCESS) { /* including perform A-MPDU Rx Ordering Buffer Control */
-
- if (!padapter->driver_stopped &&
- !padapter->bSurpriseRemoved) {
- retval = _FAIL;
- return retval;
- }
- }
- } else { /* B/G mode */
- retval = wlanhdr_to_ethhdr(prframe);
- if (retval != _SUCCESS)
- return retval;
-
- if (!padapter->driver_stopped && !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, union 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 */
- goto exit;
- }
-
-exit:
- return ret;
-}
-
-static int recv_func_posthandle(struct adapter *padapter, union recv_frame *prframe)
-{
- int ret = _SUCCESS;
- union recv_frame *orig_prframe = prframe;
- struct recv_priv *precvpriv = &padapter->recvpriv;
- struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
-
- 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;
- }
-
-_recv_data_drop:
- precvpriv->rx_drop++;
- return ret;
-}
-
-static int recv_func(struct adapter *padapter, union recv_frame *rframe)
-{
- int ret;
- struct rx_pkt_attrib *prxattrib = &rframe->u.hdr.attrib;
- struct recv_priv *recvpriv = &padapter->recvpriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct mlme_priv *mlmepriv = &padapter->mlmepriv;
-
- /* check if need to handle uc_swdec_pending_queue*/
- if (check_fwstate(mlmepriv, WIFI_STATION_STATE) && psecuritypriv->busetkipkey) {
- union 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(union recv_frame *precvframe)
-{
- struct adapter *padapter;
- struct recv_priv *precvpriv;
- s32 ret = _SUCCESS;
-
- padapter = precvframe->u.hdr.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 =
- timer_container_of(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;
- u32 num_signal_strength = 0;
- u32 __maybe_unused num_signal_qual = 0;
- u8 _alpha = 5; /* 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;
- num_signal_strength = recvpriv->signal_strength_data.total_num;
- /* 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;
- num_signal_qual = recvpriv->signal_qual_data.total_num;
- /* after avg_vals are acquired, we can re-stat the signal values */
- recvpriv->signal_qual_data.update_req = 1;
- }
-
- if (num_signal_strength == 0) {
- if (rtw_get_on_cur_ch_time(adapter) == 0 ||
- jiffies_to_msecs(jiffies - rtw_get_on_cur_ch_time(adapter)) < 2 * adapter->mlmeextpriv.mlmext_info.bcn_interval
- ) {
- goto set_timer;
- }
- }
-
- if (check_fwstate(&adapter->mlmepriv, _FW_UNDER_SURVEY) ||
- !check_fwstate(&adapter->mlmepriv, _FW_LINKED)
- ) {
- goto set_timer;
- }
-
- /* update value of signal_strength, rssi, signal_qual */
- 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;
- }
-
-set_timer:
- rtw_set_signal_stat_timer(recvpriv);
-}
diff --git a/drivers/staging/rtl8723bs/core/rtw_security.c b/drivers/staging/rtl8723bs/core/rtw_security.c
deleted file mode 100644
index 2217cffac5f2..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_security.c
+++ /dev/null
@@ -1,1470 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <linux/crc32.h>
-#include <linux/unaligned.h>
-#include <linux/bitops.h>
-#include <drv_types.h>
-#include <crypto/aes.h>
-#include <crypto/utils.h>
-
-static const char * const _security_type_str[] = {
- "N/A",
- "WEP40",
- "TKIP",
- "TKIP_WM",
- "AES",
- "WEP104",
- "SMS4",
- "WEP_WPA",
- "BIP",
-};
-
-const char *security_type_str(u8 value)
-{
- if (value <= _BIP_)
- return _security_type_str[value];
- return NULL;
-}
-
-/* WEP related ===== */
-
-/* Need to consider the fragment situation */
-void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
-{ /* exclude ICV */
- union {
- __le32 f0;
- unsigned char f1[4];
- } crc;
-
- signed int curfragnum, length;
- u32 keylength;
-
- u8 *pframe, *payload, *iv; /* wepkey */
- u8 wepkey[16];
- u8 hw_hdr_offset = 0;
- struct pkt_attrib *pattrib = &((struct xmit_frame *)pxmitframe)->attrib;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- struct arc4_ctx *ctx = &psecuritypriv->xmit_arc4_ctx;
-
- if (!((struct xmit_frame *)pxmitframe)->buf_addr)
- return;
-
- hw_hdr_offset = TXDESC_OFFSET;
- pframe = ((struct xmit_frame *)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 = (u8 *)round_up((SIZE_PTR)(pframe), 4);
- }
- }
- }
-}
-
-void rtw_wep_decrypt(struct adapter *padapter, u8 *precvframe)
-{
- /* exclude ICV */
- u8 crc[4];
- signed int length;
- u32 keylength;
- u8 *pframe, *payload, *iv, wepkey[16];
- u8 keyindex;
- struct rx_pkt_attrib *prxattrib = &(((union recv_frame *)precvframe)->u.hdr.attrib);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct arc4_ctx *ctx = &psecuritypriv->recv_arc4_ctx;
-
- pframe = (unsigned char *)((union recv_frame *)precvframe)->u.hdr.rx_data;
-
- /* start to decrypt recvframe */
- if ((prxattrib->encrypt == _WEP40_) || (prxattrib->encrypt == _WEP104_)) {
- iv = pframe + prxattrib->hdrlen;
- /* keyindex =(iv[3]&0x3); */
- keyindex = prxattrib->key_index;
- keylength = psecuritypriv->dot11DefKeylen[keyindex];
- memcpy(&wepkey[0], iv, 3);
- /* memcpy(&wepkey[3], &psecuritypriv->dot11DefKey[psecuritypriv->dot11PrivacyKeyIndex].skey[0], keylength); */
- memcpy(&wepkey[3], &psecuritypriv->dot11DefKey[keyindex].skey[0], keylength);
- length = ((union recv_frame *)precvframe)->u.hdr.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);
-
- /* calculate icv and compare the icv */
- *((u32 *)crc) = ~crc32_le(~0, payload, length - 4);
- }
-}
-
-/* 3 =====TKIP related ===== */
-
-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 = get_unaligned_le32(key);
- pmicdata->K1 = get_unaligned_le32(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. */
- put_unaligned_le32(pmicdata->L, dst);
- put_unaligned_le32(pmicdata->R, dst + 4);
- /* 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 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" */
-
-/* 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)
-{
- signed 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)
-{
- signed 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] += ror16(PPK[5] ^ TK16(6), 1);
- PPK[1] += ror16(PPK[0] ^ TK16(7), 1); /* Use all of TK[] in Phase2 */
- PPK[2] += ror16(PPK[1], 1);
- PPK[3] += ror16(PPK[2], 1);
- PPK[4] += ror16(PPK[3], 1);
- PPK[5] += ror16(PPK[4], 1);
- /* 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, u8 *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;
- signed int curfragnum, length;
-
- u8 *pframe, *payload, *iv, *prwskey;
- union pn48 dot11txpn;
- struct pkt_attrib *pattrib = &((struct xmit_frame *)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 (!((struct xmit_frame *)pxmitframe)->buf_addr)
- return _FAIL;
-
- hw_hdr_offset = TXDESC_OFFSET;
- pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + hw_hdr_offset;
-
- /* 4 start to encrypt each fragment */
- if (pattrib->encrypt != _TKIP_)
- return _SUCCESS;
-
- if (is_multicast_ether_addr(pattrib->ra))
- prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
- else
- prwskey = pattrib->dot118021x_UncstKey.skey;
-
- 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 = (u8 *)round_up((SIZE_PTR)(pframe), 4);
- }
- }
- return res;
-}
-
-/* The hlen isn't include the IV */
-u32 rtw_tkip_decrypt(struct adapter *padapter, u8 *precvframe)
-{ /* exclude ICV */
- u16 pnl;
- u32 pnh;
- u8 rc4key[16];
- u8 ttkey[16];
- u8 crc[4];
- signed int length;
-
- u8 *pframe, *payload, *iv, *prwskey;
- union pn48 dot11txpn;
- struct sta_info *stainfo;
- struct rx_pkt_attrib *prxattrib = &((union recv_frame *)precvframe)->u.hdr.attrib;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct arc4_ctx *ctx = &psecuritypriv->recv_arc4_ctx;
- u32 res = _SUCCESS;
-
- pframe = (unsigned char *)((union recv_frame *)precvframe)->u.hdr.rx_data;
-
- /* 4 start to decrypt recvframe */
- if (prxattrib->encrypt != _TKIP_)
- return _SUCCESS;
-
- stainfo = rtw_get_stainfo(&padapter->stapriv, &prxattrib->ta[0]);
- if (!stainfo)
- return _FAIL;
-
- if (is_multicast_ether_addr(prxattrib->ra)) {
- static unsigned long start;
- static u32 no_gkey_bc_cnt;
- static u32 no_gkey_mc_cnt;
-
- if (!psecuritypriv->binstallGrpkey) {
- res = _FAIL;
-
- if (start == 0)
- start = jiffies;
-
- if (is_broadcast_ether_addr(prxattrib->ra))
- no_gkey_bc_cnt++;
- else
- no_gkey_mc_cnt++;
-
- if (jiffies_to_msecs(jiffies - start) > 1000) {
- if (no_gkey_bc_cnt || no_gkey_mc_cnt) {
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " no_gkey_bc_cnt:%u, no_gkey_mc_cnt:%u\n",
- FUNC_ADPT_ARG(padapter),
- no_gkey_bc_cnt,
- no_gkey_mc_cnt);
- }
- start = jiffies;
- no_gkey_bc_cnt = 0;
- no_gkey_mc_cnt = 0;
- }
- goto exit;
- }
-
- if (no_gkey_bc_cnt || no_gkey_mc_cnt) {
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " gkey installed. no_gkey_bc_cnt:%u, no_gkey_mc_cnt:%u\n",
- FUNC_ADPT_ARG(padapter),
- no_gkey_bc_cnt,
- no_gkey_mc_cnt);
- }
- start = 0;
- no_gkey_bc_cnt = 0;
- no_gkey_mc_cnt = 0;
-
- 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 = ((union recv_frame *)precvframe)->u.hdr.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);
-
- *((u32 *)crc) = ~crc32_le(~0, payload, length - 4);
-
- if (crc[3] != payload[length - 1] || crc[2] != payload[length - 2] ||
- crc[1] != payload[length - 3] || crc[0] != payload[length - 4])
- res = _FAIL;
-exit:
- return res;
-}
-
-/* 3 =====AES related ===== */
-
-#define MAX_MSG_SIZE 2048
-
-/****************************************/
-/* aes128k128d() */
-/* Performs a 128 bit AES encrypt with */
-/* 128 bit data. */
-/****************************************/
-static void aes128k128d(u8 *key, u8 *data, u8 *ciphertext)
-{
- struct aes_enckey aes;
-
- aes_prepareenckey(&aes, key, 16);
- aes_encrypt(&aes, ciphertext, data);
- memzero_explicit(&aes, sizeof(aes));
-}
-
-/************************************************/
-/* construct_mic_iv() */
-/* Builds the MIC IV from header fields and PN */
-/* Baron think the function is construct CCM */
-/* nonce */
-/************************************************/
-static void construct_mic_iv(u8 *mic_iv,
- signed int qc_exists,
- signed int a4_exists,
- u8 *mpdu,
- uint payload_length,
- u8 *pn_vector,
- uint frtype)
-{
- signed 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;
-
- /* 802.11w management frame should set management bit(4) */
- if (frtype == WIFI_MGT_TYPE)
- mic_iv[1] |= BIT(4);
-
- 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. */
-/* Build AAD SC, A1, A2 */
-/************************************************/
-static void construct_mic_header1(u8 *mic_header1,
- signed int header_length,
- u8 *mpdu,
- uint frtype)
-{
- mic_header1[0] = (u8)((header_length - 2) / 256);
- mic_header1[1] = (u8)((header_length - 2) % 256);
-
- /* 802.11w management frame don't AND subtype bits 4, 5, 6 of frame control field */
- if (frtype == WIFI_MGT_TYPE)
- mic_header1[2] = mpdu[0];
- else
- 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,
- signed int a4_exists,
- signed int qc_exists)
-{
- signed 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. */
-/* Baron think the function is construct CCM */
-/* nonce */
-/************************************************/
-static void construct_ctr_preload(u8 *ctr_preload,
- signed int a4_exists,
- signed int qc_exists,
- u8 *mpdu,
- u8 *pn_vector,
- signed int c,
- uint frtype)
-{
- signed int i = 0;
-
- 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;
-
- /* 802.11w management frame should set management bit(4) */
- if (frtype == WIFI_MGT_TYPE)
- ctr_preload[1] |= BIT(4);
-
- 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);
-}
-
-static signed int 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;
-
- if ((hdrlen == WLAN_HDR_A3_LEN) || (hdrlen == WLAN_HDR_A3_QOS_LEN))
- a4_exists = 0;
- else
- a4_exists = 1;
-
- if (((frtype | frsubtype) == WIFI_DATA_CFACK) ||
- ((frtype | frsubtype) == WIFI_DATA_CFPOLL) ||
- ((frtype | frsubtype) == WIFI_DATA_CFACKPOLL)) {
- qc_exists = 1;
- if (hdrlen != WLAN_HDR_A3_QOS_LEN)
- hdrlen += 2;
-
- } else if ((frtype == WIFI_DATA) &&
- ((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, /* message, */
- plen,
- pn_vector,
- frtype);
-
- construct_mic_header1(mic_header1,
- hdrlen,
- pframe, /* message */
- frtype);
-
- construct_mic_header2(mic_header2,
- pframe, /* message, */
- 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);
- crypto_xor_cpy(chain_buffer, aes_out, mic_header1, 16);
- aes128k128d(key, chain_buffer, aes_out);
- crypto_xor_cpy(chain_buffer, aes_out, mic_header2, 16);
- aes128k128d(key, chain_buffer, aes_out);
-
- for (i = 0; i < num_blocks; i++) {
- crypto_xor_cpy(chain_buffer, aes_out, &pframe[payload_index], 16);
-
- 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++];
-
- crypto_xor_cpy(chain_buffer, aes_out, padded_buffer, 16);
- 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];
-
- payload_index = hdrlen + 8;
- for (i = 0; i < num_blocks; i++) {
- construct_ctr_preload(ctr_preload, a4_exists, qc_exists, pframe, /* message, */
- pn_vector, i + 1, frtype);
- aes128k128d(key, ctr_preload, aes_out);
- crypto_xor_cpy(chain_buffer, aes_out, &pframe[payload_index], 16);
- 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, /* message, */
- pn_vector, num_blocks + 1, frtype);
-
- 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);
- crypto_xor_cpy(chain_buffer, aes_out, padded_buffer, 16);
- 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, /* message, */
- pn_vector, 0, frtype);
-
- 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);
- crypto_xor_cpy(chain_buffer, aes_out, padded_buffer, 16);
- for (j = 0; j < 8; j++)
- pframe[payload_index++] = chain_buffer[j];
-
- return _SUCCESS;
-}
-
-u32 rtw_aes_encrypt(struct adapter *padapter, u8 *pxmitframe)
-{ /* exclude ICV */
-
- /*static*/
- /* unsigned char message[MAX_MSG_SIZE]; */
-
- /* Intermediate Buffers */
- signed int curfragnum, length;
- u8 *pframe, *prwskey; /* *payload,*iv */
- u8 hw_hdr_offset = 0;
- struct pkt_attrib *pattrib = &((struct xmit_frame *)pxmitframe)->attrib;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
- u32 res = _SUCCESS;
-
- if (!((struct xmit_frame *)pxmitframe)->buf_addr)
- return _FAIL;
-
- hw_hdr_offset = TXDESC_OFFSET;
- pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + hw_hdr_offset;
-
- /* 4 start to encrypt each fragment */
- if (pattrib->encrypt != _AES_)
- return _SUCCESS;
-
- if (is_multicast_ether_addr(pattrib->ra))
- prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
- else
- prwskey = pattrib->dot118021x_UncstKey.skey;
-
- 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 = (u8 *)round_up((SIZE_PTR)(pframe), 4);
- }
- }
- return res;
-}
-
-static signed 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;
- signed 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 frtype = GetFrameType(pframe);
- uint frsubtype = GetFrameSubType(pframe);
-
- frsubtype = frsubtype >> 4;
-
- /* 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 | frsubtype) == WIFI_DATA_CFACK) ||
- ((frtype | frsubtype) == WIFI_DATA_CFPOLL) ||
- ((frtype | frsubtype) == WIFI_DATA_CFACKPOLL)) {
- qc_exists = 1;
- if (hdrlen != WLAN_HDR_A3_QOS_LEN)
- hdrlen += 2;
-
- } else if ((frtype == WIFI_DATA) &&
- ((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,
- frtype);
-
- aes128k128d(key, ctr_preload, aes_out);
- crypto_xor_cpy(chain_buffer, aes_out, &pframe[payload_index], 16);
-
- 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, frtype);
-
- 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);
- crypto_xor_cpy(chain_buffer, aes_out, padded_buffer, 16);
- 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, frtype);
-
- construct_mic_header1(mic_header1, hdrlen, message, frtype);
- 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);
- crypto_xor_cpy(chain_buffer, aes_out, mic_header1, 16);
- aes128k128d(key, chain_buffer, aes_out);
- crypto_xor_cpy(chain_buffer, aes_out, mic_header2, 16);
- aes128k128d(key, chain_buffer, aes_out);
-
- for (i = 0; i < num_blocks; i++) {
- crypto_xor_cpy(chain_buffer, aes_out, &message[payload_index], 16);
-
- 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++];
-
- crypto_xor_cpy(chain_buffer, aes_out, padded_buffer, 16);
- 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,
- frtype);
- aes128k128d(key, ctr_preload, aes_out);
- crypto_xor_cpy(chain_buffer, aes_out, &message[payload_index], 16);
- 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, frtype);
-
- 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);
- crypto_xor_cpy(chain_buffer, aes_out, padded_buffer, 16);
- 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, frtype);
-
- 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);
- crypto_xor_cpy(chain_buffer, aes_out, padded_buffer, 16);
- 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, u8 *precvframe)
-{ /* exclude ICV */
-
- /*static*/
- /* unsigned char message[MAX_MSG_SIZE]; */
-
- /* Intermediate Buffers */
-
- signed int length;
- u8 *pframe, *prwskey; /* *payload,*iv */
- struct sta_info *stainfo;
- struct rx_pkt_attrib *prxattrib = &((union recv_frame *)precvframe)->u.hdr.attrib;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- u32 res = _SUCCESS;
-
- pframe = (unsigned char *)((union recv_frame *)precvframe)->u.hdr.rx_data;
- /* 4 start to encrypt each fragment */
- if (prxattrib->encrypt != _AES_)
- return _SUCCESS;
- stainfo = rtw_get_stainfo(&padapter->stapriv, &prxattrib->ta[0]);
- if (!stainfo)
- return _FAIL;
- if (is_multicast_ether_addr(prxattrib->ra)) {
- static unsigned long start;
- static u32 no_gkey_bc_cnt;
- static u32 no_gkey_mc_cnt;
-
- if (!psecuritypriv->binstallGrpkey) {
- res = _FAIL;
-
- if (start == 0)
- start = jiffies;
-
- if (is_broadcast_ether_addr(prxattrib->ra))
- no_gkey_bc_cnt++;
- else
- no_gkey_mc_cnt++;
-
- if (jiffies_to_msecs(jiffies - start) > 1000) {
- if (no_gkey_bc_cnt || no_gkey_mc_cnt) {
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " no_gkey_bc_cnt:%u, no_gkey_mc_cnt:%u\n",
- FUNC_ADPT_ARG(padapter),
- no_gkey_bc_cnt,
- no_gkey_mc_cnt);
- }
- start = jiffies;
- no_gkey_bc_cnt = 0;
- no_gkey_mc_cnt = 0;
- }
-
- goto exit;
- }
-
- if (no_gkey_bc_cnt || no_gkey_mc_cnt) {
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " gkey installed. no_gkey_bc_cnt:%u, no_gkey_mc_cnt:%u\n",
- FUNC_ADPT_ARG(padapter),
- no_gkey_bc_cnt,
- no_gkey_mc_cnt);
- }
- start = 0;
- no_gkey_bc_cnt = 0;
- no_gkey_mc_cnt = 0;
-
- 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 = ((union recv_frame *)precvframe)->u.hdr.len - prxattrib->hdrlen - prxattrib->iv_len;
-
- res = aes_decipher(prwskey, prxattrib->hdrlen, pframe, length);
-
-exit:
- return res;
-}
-
-u32 rtw_BIP_verify(struct adapter *padapter, u8 *precvframe)
-{
- struct rx_pkt_attrib *pattrib = &((union recv_frame *)precvframe)->u.hdr.attrib;
- u8 *pframe;
- u8 *BIP_AAD, *p;
- u32 res = _FAIL;
- uint len, ori_len;
- struct ieee80211_hdr *pwlanhdr;
- u8 mic[16];
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- __le16 le_tmp;
- __le64 le_tmp64 = 0;
-
- ori_len = pattrib->pkt_len - WLAN_HDR_A3_LEN + BIP_AAD_SIZE;
- BIP_AAD = kzalloc(ori_len, GFP_KERNEL);
- if (!BIP_AAD)
- return _FAIL;
-
- /* PKT start */
- pframe = (unsigned char *)((union recv_frame *)precvframe)->u.hdr.rx_data;
- /* mapping to wlan header */
- pwlanhdr = (struct ieee80211_hdr *)pframe;
- /* save the frame body + MME */
- memcpy(BIP_AAD + BIP_AAD_SIZE, pframe + WLAN_HDR_A3_LEN, pattrib->pkt_len - WLAN_HDR_A3_LEN);
- /* find MME IE pointer */
- p = rtw_get_ie(BIP_AAD + BIP_AAD_SIZE, WLAN_EID_MMIE, &len, pattrib->pkt_len - WLAN_HDR_A3_LEN);
- /* Baron */
- if (p) {
- u16 keyid = 0;
- u64 temp_ipn = 0;
- /* save packet number */
- memcpy(&le_tmp64, p + 4, 6);
- temp_ipn = le64_to_cpu(le_tmp64);
- /* BIP packet number should bigger than previous BIP packet */
- if (temp_ipn <= pmlmeext->mgnt_80211w_IPN_rx)
- goto BIP_exit;
-
- /* copy key index */
- memcpy(&le_tmp, p + 2, 2);
- keyid = le16_to_cpu(le_tmp);
- if (keyid != padapter->securitypriv.dot11wBIPKeyid)
- goto BIP_exit;
-
- /* clear the MIC field of MME to zero */
- memset(p + 2 + len - 8, 0, 8);
-
- /* conscruct AAD, copy frame control field */
- memcpy(BIP_AAD, &pwlanhdr->frame_control, 2);
- ClearRetry(BIP_AAD);
- ClearPwrMgt(BIP_AAD);
- ClearMData(BIP_AAD);
- /* conscruct AAD, copy address 1 to address 3 */
- memcpy(BIP_AAD + 2, &pwlanhdr->addrs, sizeof(pwlanhdr->addrs));
-
- if (omac1_aes_128(padapter->securitypriv.dot11wBIPKey[padapter->securitypriv.dot11wBIPKeyid].skey
- , BIP_AAD, ori_len, mic))
- goto BIP_exit;
-
- /* MIC field should be last 8 bytes of packet (packet without FCS) */
- if (!memcmp(mic, pframe + pattrib->pkt_len - 8, 8)) {
- pmlmeext->mgnt_80211w_IPN_rx = temp_ipn;
- res = _SUCCESS;
- } else {
- }
-
- } else {
- res = RTW_RX_HANDLED;
- }
-BIP_exit:
-
- kfree(BIP_AAD);
- return res;
-}
-
-static void gf_mulx(u8 *pad)
-{
- int i, carry;
-
- carry = pad[0] & 0x80;
- for (i = 0; i < AES_BLOCK_SIZE - 1; i++)
- pad[i] = (pad[i] << 1) | (pad[i + 1] >> 7);
-
- pad[AES_BLOCK_SIZE - 1] <<= 1;
- if (carry)
- pad[AES_BLOCK_SIZE - 1] ^= 0x87;
-}
-
-/**
- * omac1_aes_128_vector - One-Key CBC MAC (OMAC1) hash with AES-128
- * @key: 128-bit key for the hash operation
- * @num_elem: Number of elements in the data vector
- * @addr: Pointers to the data areas
- * @len: Lengths of the data blocks
- * @mac: Buffer for MAC (128 bits, i.e., 16 bytes)
- * Returns: 0 on success, -1 on failure
- *
- * This is a mode for using block cipher (AES in this case) for authentication.
- * OMAC1 was standardized with the name CMAC by NIST in a Special Publication
- * (SP) 800-38B.
- */
-static int omac1_aes_128_vector(u8 *key, size_t num_elem,
- u8 *addr[], size_t *len, u8 *mac)
-{
- struct aes_enckey aes;
- u8 cbc[AES_BLOCK_SIZE], pad[AES_BLOCK_SIZE];
- u8 *pos, *end;
- size_t i, e, left, total_len;
- int ret;
-
- ret = aes_prepareenckey(&aes, key, 16);
- if (ret)
- return -1;
- memset(cbc, 0, AES_BLOCK_SIZE);
-
- total_len = 0;
- for (e = 0; e < num_elem; e++)
- total_len += len[e];
- left = total_len;
-
- e = 0;
- pos = addr[0];
- end = pos + len[0];
-
- while (left >= AES_BLOCK_SIZE) {
- for (i = 0; i < AES_BLOCK_SIZE; i++) {
- cbc[i] ^= *pos++;
- if (pos >= end) {
- e++;
- pos = addr[e];
- end = pos + len[e];
- }
- }
- if (left > AES_BLOCK_SIZE)
- aes_encrypt(&aes, cbc, cbc);
- left -= AES_BLOCK_SIZE;
- }
-
- memset(pad, 0, AES_BLOCK_SIZE);
- aes_encrypt(&aes, pad, pad);
- gf_mulx(pad);
-
- if (left || total_len == 0) {
- for (i = 0; i < left; i++) {
- cbc[i] ^= *pos++;
- if (pos >= end) {
- e++;
- pos = addr[e];
- end = pos + len[e];
- }
- }
- cbc[left] ^= 0x80;
- gf_mulx(pad);
- }
-
- for (i = 0; i < AES_BLOCK_SIZE; i++)
- pad[i] ^= cbc[i];
- aes_encrypt(&aes, pad, mac);
- memzero_explicit(&aes, sizeof(aes));
- return 0;
-}
-
-/**
- * omac1_aes_128 - One-Key CBC MAC (OMAC1) hash with AES-128 (aka AES-CMAC)
- * @key: 128-bit key for the hash operation
- * @data: Data buffer for which a MAC is determined
- * @data_len: Length of data buffer in bytes
- * @mac: Buffer for MAC (128 bits, i.e., 16 bytes)
- * Returns: 0 on success, -1 on failure
- *
- * This is a mode for using block cipher (AES in this case) for authentication.
- * OMAC1 was standardized with the name CMAC by NIST in a Special Publication
- * (SP) 800-38B.
- */
-int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac)
-{
- return omac1_aes_128_vector(key, 1, &data, &data_len, mac);
-}
-
-/* Restore HW wep key setting according to key_mask */
-void rtw_sec_restore_wep_key(struct adapter *adapter)
-{
- struct security_priv *securitypriv = &adapter->securitypriv;
- signed int keyid;
-
- if ((securitypriv->dot11_privacy_algrthm == _WEP40_) || (securitypriv->dot11_privacy_algrthm == _WEP104_)) {
- for (keyid = 0; keyid < 4; keyid++) {
- if (securitypriv->key_mask & BIT(keyid)) {
- if (keyid == securitypriv->dot11PrivacyKeyIndex)
- rtw_set_key(adapter, securitypriv, keyid, 1, false);
- else
- rtw_set_key(adapter, securitypriv, keyid, 0, false);
- }
- }
- }
-}
-
-u8 rtw_handle_tkip_countermeasure(struct adapter *adapter, const char *caller)
-{
- struct security_priv *securitypriv = &adapter->securitypriv;
- u8 status = _SUCCESS;
-
- if (securitypriv->btkip_countermeasure) {
- unsigned long passing_ms = jiffies_to_msecs(jiffies - securitypriv->btkip_countermeasure_time);
-
- if (passing_ms > 60 * 1000) {
- netdev_dbg(adapter->pnetdev,
- "%s(%s) countermeasure time:%lus > 60s\n",
- caller, ADPT_ARG(adapter),
- passing_ms / 1000);
- securitypriv->btkip_countermeasure = false;
- securitypriv->btkip_countermeasure_time = 0;
- } else {
- netdev_dbg(adapter->pnetdev,
- "%s(%s) countermeasure time:%lus < 60s\n",
- caller, ADPT_ARG(adapter),
- passing_ms / 1000);
- status = _FAIL;
- }
- }
-
- return status;
-}
diff --git a/drivers/staging/rtl8723bs/core/rtw_sta_mgt.c b/drivers/staging/rtl8723bs/core/rtw_sta_mgt.c
deleted file mode 100644
index 6d014bf8fa96..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_sta_mgt.c
+++ /dev/null
@@ -1,549 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-
-void _rtw_init_stainfo(struct sta_info *psta);
-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);
- /* INIT_LIST_HEAD(&psta->asoc_list); */
- /* INIT_LIST_HEAD(&psta->sleep_list); */
- /* INIT_LIST_HEAD(&psta->wakeup_list); */
-
- INIT_LIST_HEAD(&psta->sleep_q.queue);
- spin_lock_init(&psta->sleep_q.lock);
- 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;
-}
-
-u32 _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 _FAIL;
-
- pstapriv->pstainfo_buf = pstapriv->pallocated_stainfo_buf + 4 -
- ((SIZE_PTR)(pstapriv->pallocated_stainfo_buf) & 3);
-
- INIT_LIST_HEAD(&pstapriv->free_sta_queue.queue);
- spin_lock_init(&pstapriv->free_sta_queue.lock);
-
- spin_lock_init(&pstapriv->sta_hash_lock);
-
- pstapriv->asoc_sta_count = 0;
- INIT_LIST_HEAD(&pstapriv->sleep_q.queue);
- spin_lock_init(&pstapriv->sleep_q.lock);
- INIT_LIST_HEAD(&pstapriv->wakeup_q.queue);
- spin_lock_init(&pstapriv->wakeup_q.lock);
-
- 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 _SUCCESS;
-}
-
-inline int rtw_stainfo_offset(struct sta_priv *stapriv, struct sta_info *sta)
-{
- int offset = (((u8 *)sta) - stapriv->pstainfo_buf) / sizeof(struct sta_info);
-
- return offset;
-}
-
-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));
-}
-
-/* this function is used to free the memory of lock || sema for all stainfos */
-void kfree_all_stainfo(struct sta_priv *pstapriv);
-void kfree_all_stainfo(struct sta_priv *pstapriv)
-{
- struct list_head *plist, *phead;
-
- spin_lock_bh(&pstapriv->sta_hash_lock);
-
- phead = get_list_head(&pstapriv->free_sta_queue);
- plist = get_next(phead);
-
- while (phead != plist)
- plist = get_next(plist);
-
- spin_unlock_bh(&pstapriv->sta_hash_lock);
-}
-
-void kfree_sta_priv_lock(struct sta_priv *pstapriv);
-void kfree_sta_priv_lock(struct sta_priv *pstapriv)
-{
- kfree_all_stainfo(pstapriv); /* be done before free sta_hash_lock */
-}
-
-u32 _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];
- list_for_each(plist, phead) {
- int i;
-
- psta = list_entry(plist, struct sta_info,
- hash_list);
-
- for (i = 0; i < 16 ; i++) {
- preorder_ctrl = &psta->recvreorder_ctrl[i];
- timer_delete_sync(&preorder_ctrl->reordering_ctrl_timer);
- }
- }
- }
- spin_unlock_bh(&pstapriv->sta_hash_lock);
- /*===============================*/
-
- kfree_sta_priv_lock(pstapriv);
-
- vfree(pstapriv->pallocated_stainfo_buf);
- }
- return _SUCCESS;
-}
-
-/* struct sta_info *rtw_alloc_stainfo(_queue *pfree_sta_queue, unsigned char *hwaddr) */
-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)); */
- spin_lock_bh(&pstapriv->sta_hash_lock);
- if (list_empty(&pfree_sta_queue->queue)) {
- /* spin_unlock_bh(&(pfree_sta_queue->lock)); */
- spin_unlock_bh(&pstapriv->sta_hash_lock);
- return NULL;
- }
- psta = container_of(get_next(&pfree_sta_queue->queue), struct sta_info, list);
-
- list_del_init(&psta->list);
-
- /* spin_unlock_bh(&(pfree_sta_queue->lock)); */
-
- _rtw_init_stainfo(psta);
-
- psta->padapter = pstapriv->padapter;
-
- memcpy(psta->hwaddr, hwaddr, ETH_ALEN);
-
- index = wifi_mac_hash(hwaddr);
-
- if (index >= NUM_STA) {
- spin_unlock_bh(&pstapriv->sta_hash_lock);
- 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);
-
- timer_setup(&psta->addba_retry_timer, addba_timer_hdl, 0);
-
- /* 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 = (NR_RECVBUFF-2); */
- preorder_ctrl->wsize_b = 64;/* 64; */
-
- INIT_LIST_HEAD(&preorder_ctrl->pending_recvframe_queue.queue);
- spin_lock_init(&preorder_ctrl->pending_recvframe_queue.lock);
-
- /* init recv timer */
- timer_setup(&preorder_ctrl->reordering_ctrl_timer,
- rtw_reordering_ctrl_timeout_handler, 0);
- }
-
- /* init for DM */
- psta->rssi_stat.UndecoratedSmoothedPWDB = (-1);
- psta->rssi_stat.UndecoratedSmoothedCCK = (-1);
-
- /* init for the sequence number of received management frame */
- psta->rx_mgmt_frame_seq_num = 0xffff;
- spin_unlock_bh(&pstapriv->sta_hash_lock);
- /* alloc mac id for non-bc/mc station, */
- rtw_alloc_macid(pstapriv->padapter, psta);
-
-exit:
-
- return psta;
-}
-
-u32 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;
- struct hw_xmit *phwxmit;
-
- if (!psta)
- goto exit;
-
- spin_lock_bh(&psta->lock);
- psta->state &= ~_FW_LINKED;
- spin_unlock_bh(&psta->lock);
-
- pfree_sta_queue = &pstapriv->free_sta_queue;
-
- pstaxmitpriv = &psta->sta_xmitpriv;
-
- /* list_del_init(&psta->sleep_list); */
-
- /* list_del_init(&psta->wakeup_list); */
-
- spin_lock_bh(&pxmitpriv->lock);
-
- rtw_free_xmitframe_queue(pxmitpriv, &psta->sleep_q);
- psta->sleepq_len = 0;
-
- /* vo */
- /* spin_lock_bh(&(pxmitpriv->vo_pending.lock)); */
- rtw_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->vo_q.sta_pending);
- list_del_init(&pstaxmitpriv->vo_q.tx_pending);
- phwxmit = pxmitpriv->hwxmits;
- phwxmit->accnt -= pstaxmitpriv->vo_q.qcnt;
- pstaxmitpriv->vo_q.qcnt = 0;
- /* spin_unlock_bh(&(pxmitpriv->vo_pending.lock)); */
-
- /* vi */
- /* spin_lock_bh(&(pxmitpriv->vi_pending.lock)); */
- rtw_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->vi_q.sta_pending);
- list_del_init(&pstaxmitpriv->vi_q.tx_pending);
- phwxmit = pxmitpriv->hwxmits + 1;
- phwxmit->accnt -= pstaxmitpriv->vi_q.qcnt;
- pstaxmitpriv->vi_q.qcnt = 0;
- /* spin_unlock_bh(&(pxmitpriv->vi_pending.lock)); */
-
- /* be */
- /* spin_lock_bh(&(pxmitpriv->be_pending.lock)); */
- rtw_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->be_q.sta_pending);
- list_del_init(&pstaxmitpriv->be_q.tx_pending);
- phwxmit = pxmitpriv->hwxmits + 2;
- phwxmit->accnt -= pstaxmitpriv->be_q.qcnt;
- pstaxmitpriv->be_q.qcnt = 0;
- /* spin_unlock_bh(&(pxmitpriv->be_pending.lock)); */
-
- /* bk */
- /* spin_lock_bh(&(pxmitpriv->bk_pending.lock)); */
- rtw_free_xmitframe_queue(pxmitpriv, &pstaxmitpriv->bk_q.sta_pending);
- list_del_init(&pstaxmitpriv->bk_q.tx_pending);
- phwxmit = pxmitpriv->hwxmits + 3;
- phwxmit->accnt -= pstaxmitpriv->bk_q.qcnt;
- pstaxmitpriv->bk_q.qcnt = 0;
- /* spin_unlock_bh(&(pxmitpriv->bk_pending.lock)); */
-
- spin_unlock_bh(&pxmitpriv->lock);
-
- spin_lock_bh(&pstapriv->sta_hash_lock);
- list_del_init(&psta->hash_list);
- pstapriv->asoc_sta_count--;
- spin_unlock_bh(&pstapriv->sta_hash_lock);
-
- /* re-init sta_info; 20061114 will be init in alloc_stainfo */
- /* _rtw_init_sta_xmit_priv(&psta->sta_xmitpriv); */
- /* _rtw_init_sta_recv_priv(&psta->sta_recvpriv); */
-
- timer_delete_sync(&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;
- union recv_frame *prframe;
- struct __queue *ppending_recvframe_queue;
- struct __queue *pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
-
- preorder_ctrl = &psta->recvreorder_ctrl[i];
-
- timer_delete_sync(&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 = get_next(phead);
-
- while (!list_empty(phead)) {
- prframe = (union recv_frame *)plist;
-
- plist = get_next(plist);
-
- list_del_init(&prframe->u.hdr.list);
-
- rtw_free_recvframe(prframe, pfree_recv_queue);
- }
-
- spin_unlock_bh(&ppending_recvframe_queue->lock);
- }
-
- if (!(psta->state & WIFI_AP_STATE))
- rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, psta, false);
-
- /* release mac id for non-bc/mc station, */
- rtw_release_macid(pstapriv->padapter, psta);
- 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)); */
-
-exit:
- return _SUCCESS;
-}
-
-/* free all stainfo which in sta_hash[all] */
-void rtw_free_all_stainfo(struct adapter *padapter)
-{
- struct list_head *plist, *phead, *tmp;
- s32 index;
- struct sta_info *psta = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct sta_info *pbcmc_stainfo = rtw_get_bcmc_stainfo(padapter);
- LIST_HEAD(stainfo_free_list);
-
- 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];
- list_for_each_safe(plist, tmp, phead) {
- psta = list_entry(plist, struct sta_info, hash_list);
-
- if (pbcmc_stainfo != psta)
- list_move(&psta->hash_list, &stainfo_free_list);
- }
- }
-
- spin_unlock_bh(&pstapriv->sta_hash_lock);
-
- list_for_each_safe(plist, tmp, &stainfo_free_list) {
- psta = list_entry(plist, struct sta_info, hash_list);
- rtw_free_stainfo(padapter, psta);
- }
-}
-
-/* any station allocated can be searched by hash list */
-struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr)
-{
- struct list_head *plist, *phead;
- struct sta_info *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);
-
- phead = &pstapriv->sta_hash[index];
- list_for_each(plist, phead) {
- psta = list_entry(plist, struct sta_info, hash_list);
-
- if ((!memcmp(psta->hwaddr, addr, ETH_ALEN)))
- /* if found the matched address */
- break;
-
- psta = NULL;
- }
-
- spin_unlock_bh(&pstapriv->sta_hash_lock);
- return psta;
-}
-
-u32 rtw_init_bcmc_stainfo(struct adapter *padapter)
-{
- struct sta_info *psta;
- u8 bcast_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
- struct sta_priv *pstapriv = &padapter->stapriv;
- /* struct __queue *pstapending = &padapter->xmitpriv.bm_pending; */
-
- psta = rtw_alloc_stainfo(pstapriv, bcast_addr);
-
- if (!psta)
- return _FAIL;
-
- /* default broadcast & multicast use macid 1 */
- psta->mac_id = 1;
-
- return _SUCCESS;
-}
-
-struct sta_info *rtw_get_bcmc_stainfo(struct adapter *padapter)
-{
- struct sta_priv *pstapriv = &padapter->stapriv;
- u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
- return rtw_get_stainfo(pstapriv, bc_addr);
-}
-
-u8 rtw_access_ctrl(struct adapter *padapter, u8 *mac_addr)
-{
- bool res = true;
- struct list_head *plist, *phead;
- struct rtw_wlan_acl_node *paclnode;
- bool 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);
- list_for_each(plist, phead) {
- paclnode = list_entry(plist, struct rtw_wlan_acl_node, list);
-
- 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/rtl8723bs/core/rtw_wlan_util.c b/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
deleted file mode 100644
index 8c1f4670679b..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
+++ /dev/null
@@ -1,1759 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-#include <hal_com_h2c.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 BROADCOM_OUI3[] = {0x00, 0x05, 0xb5};
-
-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 RSN_TKIP_CIPHER[4] = {0x00, 0x0f, 0xac, 0x02};
-static unsigned char WPA_TKIP_CIPHER[4] = {0x00, 0x50, 0xf2, 0x02};
-
-/* define WAIT_FOR_BCN_TO_MIN (3000) */
-#define WAIT_FOR_BCN_TO_MIN (6000)
-#define WAIT_FOR_BCN_TO_MAX (20000)
-
-#define DISCONNECT_BY_CHK_BCN_FAIL_OBSERV_PERIOD_IN_MS 1000
-#define DISCONNECT_BY_CHK_BCN_FAIL_THRESHOLD 3
-
-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
-};
-
-u8 networktype_to_raid_ex(struct adapter *adapter, struct sta_info *psta)
-{
- u8 raid;
-
- switch (psta->wireless_mode) {
- case WIRELESS_11B:
- raid = RATEID_IDX_B;
- break;
- case WIRELESS_11G:
- raid = RATEID_IDX_G;
- break;
- case WIRELESS_11BG:
- raid = RATEID_IDX_BG;
- break;
- case WIRELESS_11_24N:
- case WIRELESS_11G_24N:
- raid = RATEID_IDX_GN_N1SS;
- break;
- case WIRELESS_11B_24N:
- case WIRELESS_11BG_24N:
- if (psta->bw_mode == CHANNEL_WIDTH_20)
- raid = RATEID_IDX_BGN_20M_1SS_BN;
- else
- raid = RATEID_IDX_BGN_40M_1SS;
- break;
- default:
- raid = RATEID_IDX_BGN_40M_2SS;
- break;
- }
- return raid;
-}
-
-unsigned char ratetbl_val_2wifirate(unsigned char rate);
-unsigned char ratetbl_val_2wifirate(unsigned char rate)
-{
- switch (rate & 0x7f) {
- case 0:
- return IEEE80211_CCK_RATE_1MB;
- case 1:
- return IEEE80211_CCK_RATE_2MB;
- case 2:
- return IEEE80211_CCK_RATE_5MB;
- case 3:
- return IEEE80211_CCK_RATE_11MB;
- case 4:
- return IEEE80211_OFDM_RATE_6MB;
- case 5:
- return IEEE80211_OFDM_RATE_9MB;
- case 6:
- return IEEE80211_OFDM_RATE_12MB;
- case 7:
- return IEEE80211_OFDM_RATE_18MB;
- case 8:
- return IEEE80211_OFDM_RATE_24MB;
- case 9:
- return IEEE80211_OFDM_RATE_36MB;
- case 10:
- return IEEE80211_OFDM_RATE_48MB;
- case 11:
- return IEEE80211_OFDM_RATE_54MB;
- default:
- return 0;
- }
-}
-
-int is_basicrate(struct adapter *padapter, unsigned char rate);
-int 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;
-}
-
-unsigned int ratetbl2rateset(struct adapter *padapter, unsigned char *rateset);
-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 set_mcs_rate_by_mask(u8 *mcs_set, u32 mask)
-{
- u8 mcs_rate_1r = (u8)(mask & 0xff);
- u8 mcs_rate_2r = (u8)((mask >> 8) & 0xff);
- u8 mcs_rate_3r = (u8)((mask >> 16) & 0xff);
- u8 mcs_rate_4r = (u8)((mask >> 24) & 0xff);
-
- mcs_set[0] &= mcs_rate_1r;
- mcs_set[1] &= mcs_rate_2r;
- mcs_set[2] &= mcs_rate_3r;
- mcs_set[3] &= mcs_rate_4r;
-}
-
-void update_basic_rate_table(struct adapter *Adapter, u8 *mBratesOS)
-{
- 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 = mBratesOS[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:
- mBratesOS[i] |= IEEE80211_BASIC_RATE_MASK;
- break;
- }
- }
-}
-
-void update_basic_rate_table_soft_ap(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;
- }
- }
-}
-
-void save_dm_func_flag(struct adapter *padapter)
-{
- u8 bSaveFlag = true;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
-}
-
-void restore_dm_func_flag(struct adapter *padapter)
-{
- u8 bSaveFlag = false;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_OP, (u8 *)(&bSaveFlag));
-}
-
-void switch_dm_func(struct adapter *padapter, u32 mode, u8 enable)
-{
- if (enable)
- rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_SET, (u8 *)(&mode));
- else
- rtw_hal_set_hwreg(padapter, HW_VAR_DM_FUNC_CLR, (u8 *)(&mode));
-}
-
-void set_msr(struct adapter *padapter, u8 type)
-{
- rtw_hal_set_hwreg(padapter, HW_VAR_MEDIA_STATUS, (u8 *)(&type));
-}
-
-inline u8 rtw_get_oper_ch(struct adapter *adapter)
-{
- return adapter_to_dvobj(adapter)->oper_channel;
-}
-
-inline void rtw_set_oper_ch(struct adapter *adapter, u8 ch)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
-
- if (dvobj->oper_channel != ch)
- dvobj->on_oper_ch_time = jiffies;
-
- dvobj->oper_channel = ch;
-}
-
-inline void rtw_set_oper_bw(struct adapter *adapter, u8 bw)
-{
- adapter_to_dvobj(adapter)->oper_bwmode = bw;
-}
-
-inline void rtw_set_oper_choffset(struct adapter *adapter, u8 offset)
-{
- adapter_to_dvobj(adapter)->oper_ch_offset = offset;
-}
-
-u8 rtw_get_center_ch(u8 channel, u8 chnl_bw, u8 chnl_offset)
-{
- u8 center_ch = channel;
-
- if (chnl_bw == CHANNEL_WIDTH_40) {
- if (chnl_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
- center_ch = channel + 2;
- else
- center_ch = channel - 2;
- }
-
- return center_ch;
-}
-
-inline unsigned long rtw_get_on_cur_ch_time(struct adapter *adapter)
-{
- if (adapter->mlmeextpriv.cur_channel == adapter_to_dvobj(adapter)->oper_channel)
- return adapter_to_dvobj(adapter)->on_oper_ch_time;
- else
- return 0;
-}
-
-void r8723bs_select_channel(struct adapter *padapter, unsigned char channel)
-{
- if (mutex_lock_interruptible(&(adapter_to_dvobj(padapter)->setch_mutex)))
- return;
-
- /* saved channel info */
- rtw_set_oper_ch(padapter, channel);
-
- rtw_hal_set_chan(padapter, channel);
-
- mutex_unlock(&(adapter_to_dvobj(padapter)->setch_mutex));
-}
-
-void set_channel_bwmode(struct adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode)
-{
- u8 center_ch, chnl_offset80 = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
- center_ch = rtw_get_center_ch(channel, bwmode, channel_offset);
-
- /* set Channel */
- if (mutex_lock_interruptible(&(adapter_to_dvobj(padapter)->setch_mutex)))
- return;
-
- /* saved channel/bw info */
- rtw_set_oper_ch(padapter, channel);
- rtw_set_oper_bw(padapter, bwmode);
- rtw_set_oper_choffset(padapter, channel_offset);
-
- rtw_hal_set_chnl_bw(padapter, center_ch, bwmode, channel_offset, chnl_offset80); /* set center channel */
-
- mutex_unlock(&(adapter_to_dvobj(padapter)->setch_mutex));
-}
-
-inline u8 *get_my_bssid(struct wlan_bssid_ex *pnetwork)
-{
- return pnetwork->mac_address;
-}
-
-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);
-}
-
-int is_client_associated_to_ap(struct adapter *padapter)
-{
- struct mlme_ext_priv *pmlmeext;
- struct mlme_ext_info *pmlmeinfo;
-
- if (!padapter)
- return _FAIL;
-
- pmlmeext = &padapter->mlmeextpriv;
- pmlmeinfo = &pmlmeext->mlmext_info;
-
- if ((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) && ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE))
- return true;
- else
- return _FAIL;
-}
-
-int 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;
- else
- return _FAIL;
-}
-
-int 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 _FAIL;
- }
-
- 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)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
- struct cam_ctl_t *cam_ctl = &dvobj->cam_ctl;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_CAM_INVALID_ALL, NULL);
-
- spin_lock_bh(&cam_ctl->lock);
- cam_ctl->bitmap = 0;
- memset(dvobj->cam_cache, 0, sizeof(struct cam_entry_cache) * TOTAL_CAM_ENTRY);
- spin_unlock_bh(&cam_ctl->lock);
-}
-
-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_hal_set_hwreg(padapter, HW_VAR_CAM_WRITE, (u8 *)cam_val);
- }
-}
-
-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);
-}
-
-inline void write_cam(struct adapter *adapter, u8 id, u16 ctrl, u8 *mac, u8 *key)
-{
- _write_cam(adapter, id, ctrl, mac, key);
- write_cam_cache(adapter, id, ctrl, mac, key);
-}
-
-inline void clear_cam_entry(struct adapter *adapter, u8 id)
-{
- _clear_cam_entry(adapter, id);
- clear_cam_cache(adapter, id);
-}
-
-void write_cam_cache(struct adapter *adapter, u8 id, u16 ctrl, u8 *mac, u8 *key)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
- struct cam_ctl_t *cam_ctl = &dvobj->cam_ctl;
-
- spin_lock_bh(&cam_ctl->lock);
-
- dvobj->cam_cache[id].ctrl = ctrl;
- memcpy(dvobj->cam_cache[id].mac, mac, ETH_ALEN);
- memcpy(dvobj->cam_cache[id].key, key, 16);
-
- spin_unlock_bh(&cam_ctl->lock);
-}
-
-void clear_cam_cache(struct adapter *adapter, u8 id)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
- struct cam_ctl_t *cam_ctl = &dvobj->cam_ctl;
-
- spin_lock_bh(&cam_ctl->lock);
-
- memset(&dvobj->cam_cache[id], 0, sizeof(struct cam_entry_cache));
-
- spin_unlock_bh(&cam_ctl->lock);
-}
-
-static bool _rtw_camid_is_gk(struct adapter *adapter, u8 cam_id)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
- struct cam_ctl_t *cam_ctl = &dvobj->cam_ctl;
- bool ret = false;
-
- if (cam_id >= TOTAL_CAM_ENTRY)
- goto exit;
-
- if (!(cam_ctl->bitmap & BIT(cam_id)))
- goto exit;
-
- ret = (dvobj->cam_cache[cam_id].ctrl & BIT(6)) ? true : false;
-
-exit:
- return ret;
-}
-
-static s16 _rtw_camid_search(struct adapter *adapter, u8 *addr, s16 kid)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
- int i;
- s16 cam_id = -1;
-
- for (i = 0; i < TOTAL_CAM_ENTRY; i++) {
- if (addr && memcmp(dvobj->cam_cache[i].mac, addr, ETH_ALEN))
- continue;
- if (kid >= 0 && kid != (dvobj->cam_cache[i].ctrl & 0x03))
- continue;
-
- cam_id = i;
- break;
- }
-
- return cam_id;
-}
-
-s16 rtw_camid_search(struct adapter *adapter, u8 *addr, s16 kid)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
- struct cam_ctl_t *cam_ctl = &dvobj->cam_ctl;
- s16 cam_id = -1;
-
- spin_lock_bh(&cam_ctl->lock);
- cam_id = _rtw_camid_search(adapter, addr, kid);
- spin_unlock_bh(&cam_ctl->lock);
-
- return cam_id;
-}
-
-s16 rtw_camid_alloc(struct adapter *adapter, struct sta_info *sta, u8 kid)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
- struct cam_ctl_t *cam_ctl = &dvobj->cam_ctl;
- s16 cam_id = -1;
- struct mlme_ext_info *mlmeinfo;
-
- spin_lock_bh(&cam_ctl->lock);
-
- mlmeinfo = &adapter->mlmeextpriv.mlmext_info;
-
- if ((((mlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) || ((mlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE))
- && !sta) {
- /* AP/Ad-hoc mode group key: static allocation to default key by key ID */
- if (kid > 3) {
- netdev_dbg(adapter->pnetdev,
- FUNC_ADPT_FMT " group key with invalid key id:%u\n",
- FUNC_ADPT_ARG(adapter), kid);
- WARN_ON(1);
- goto bitmap_handle;
- }
-
- cam_id = kid;
- } else {
- int i;
- u8 *addr = sta ? sta->hwaddr : NULL;
-
- if (!sta) {
- if (!(mlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)) {
- /* bypass STA mode group key setting before connected(ex:WEP) because bssid is not ready */
- goto bitmap_handle;
- }
-
- addr = get_bssid(&adapter->mlmepriv);
- }
-
- i = _rtw_camid_search(adapter, addr, kid);
- if (i >= 0) {
- /* Fix issue that pairwise and group key have same key id.
- * Pairwise key first, group key can overwrite group only(ex: rekey)
- */
- if (sta || _rtw_camid_is_gk(adapter, i))
- cam_id = i;
- else
- netdev_dbg(adapter->pnetdev,
- FUNC_ADPT_FMT " group key id:%u the same key id as pairwise key\n",
- FUNC_ADPT_ARG(adapter), kid);
- goto bitmap_handle;
- }
-
- for (i = 4; i < TOTAL_CAM_ENTRY; i++)
- if (!(cam_ctl->bitmap & BIT(i)))
- break;
-
- if (i == TOTAL_CAM_ENTRY) {
- if (sta)
- netdev_dbg(adapter->pnetdev,
- FUNC_ADPT_FMT " pairwise key with %pM id:%u no room\n",
- FUNC_ADPT_ARG(adapter),
- sta->hwaddr, kid);
- else
- netdev_dbg(adapter->pnetdev,
- FUNC_ADPT_FMT " group key id:%u no room\n",
- FUNC_ADPT_ARG(adapter), kid);
- WARN_ON(1);
- goto bitmap_handle;
- }
-
- cam_id = i;
- }
-
-bitmap_handle:
- if (cam_id >= 0 && cam_id < 32)
- cam_ctl->bitmap |= BIT(cam_id);
-
- spin_unlock_bh(&cam_ctl->lock);
-
- return cam_id;
-}
-
-void rtw_camid_free(struct adapter *adapter, u8 cam_id)
-{
- struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
- struct cam_ctl_t *cam_ctl = &dvobj->cam_ctl;
-
- spin_lock_bh(&cam_ctl->lock);
-
- if (cam_id < TOTAL_CAM_ENTRY)
- cam_ctl->bitmap &= ~(BIT(cam_id));
-
- spin_unlock_bh(&cam_ctl->lock);
-}
-
-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;
-
- invalidate_cam_all(padapter);
- /* clear default key related key search setting */
- rtw_hal_set_hwreg(padapter, HW_VAR_SEC_DK_CFG, (u8 *)false);
-
- memset((u8 *)(pmlmeinfo->FW_sta_info), 0, sizeof(pmlmeinfo->FW_sta_info));
-}
-
-int WMM_param_handler(struct adapter *padapter, struct ndis_80211_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 false;
- }
-
- if (pIE->length != WLAN_WMM_LEN)
- return false;
-
- if (!memcmp(&pmlmeinfo->WMM_param, (pIE->data + 6), sizeof(struct WMM_para_element)))
- return false;
-
- memcpy(&pmlmeinfo->WMM_param, (pIE->data + 6), sizeof(struct WMM_para_element));
-
- pmlmeinfo->WMM_enable = 1;
- return true;
-}
-
-static void sort_wmm_ac_params(u32 *inx, u32 *edca)
-{
- u32 i, j, change_inx = false;
-
- /* entry index: 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;
- }
- }
- }
-}
-
-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;
-
- acm_mask = 0;
-
- if (pmlmeext->cur_wireless_mode & WIRELESS_11_24N)
- aSifsTime = 16;
- else
- aSifsTime = 10;
-
- if (pmlmeinfo->WMM_enable == 0) {
- padapter->mlmepriv.acm_mask = 0;
-
- AIFS = aSifsTime + (2 * pmlmeinfo->slotTime);
-
- if (pmlmeext->cur_wireless_mode & WIRELESS_11G) {
- ECWMin = 4;
- ECWMax = 10;
- } else if (pmlmeext->cur_wireless_mode & WIRELESS_11B) {
- ECWMin = 5;
- ECWMax = 10;
- } else {
- ECWMin = 4;
- ECWMax = 10;
- }
-
- TXOP = 0;
- acParm = AIFS | (ECWMin << 8) | (ECWMax << 12) | (TXOP << 16);
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acParm));
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acParm));
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acParm));
-
- ECWMin = 2;
- ECWMax = 3;
- TXOP = 0x2f;
- acParm = AIFS | (ECWMin << 8) | (ECWMax << 12) | (TXOP << 16);
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acParm));
- } else {
- edca[0] = edca[1] = edca[2] = edca[3] = 0;
-
- 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:
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BE, (u8 *)(&acParm));
- acm_mask |= (ACM ? BIT(1) : 0);
- edca[XMIT_BE_QUEUE] = acParm;
- break;
-
- case 0x1:
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_BK, (u8 *)(&acParm));
- /* acm_mask |= (ACM? BIT(0):0); */
- edca[XMIT_BK_QUEUE] = acParm;
- break;
-
- case 0x2:
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VI, (u8 *)(&acParm));
- acm_mask |= (ACM ? BIT(2) : 0);
- edca[XMIT_VI_QUEUE] = acParm;
- break;
-
- case 0x3:
- rtw_hal_set_hwreg(padapter, HW_VAR_AC_PARAM_VO, (u8 *)(&acParm));
- acm_mask |= (ACM ? BIT(3) : 0);
- edca[XMIT_VO_QUEUE] = acParm;
- break;
- }
- }
-
- if (padapter->registrypriv.acm_method == 1)
- rtw_hal_set_hwreg(padapter, HW_VAR_ACM_CTRL, (u8 *)(&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)
- sort_wmm_ac_params(inx, edca);
-
- for (i = 0; i < 4; i++)
- pxmitpriv->wmm_para_seq[i] = inx[i];
- }
-}
-
-static void bwmode_update_check(struct adapter *padapter, struct ndis_80211_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;
- u8 cbw40_enable = 0;
-
- if (!pIE)
- return;
-
- if (!phtpriv->ht_option)
- return;
-
- if (pIE->length > sizeof(struct HT_info_element))
- return;
-
- pHT_info = (struct HT_info_element *)pIE->data;
-
- if ((pregistrypriv->bw_mode & 0x0f) > 0)
- cbw40_enable = 1;
-
- if ((pHT_info->infos[0] & BIT(2)) && cbw40_enable) {
- new_bwmode = 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_bwmode = CHANNEL_WIDTH_20;
- new_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
- break;
- }
- } else {
- new_bwmode = 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 (true == 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->mac_address);
- if (psta) {
- struct ht_priv *phtpriv_sta = &psta->htpriv;
-
- if (phtpriv_sta->ht_option) {
- /* bwmode */
- psta->bw_mode = pmlmeext->cur_bwmode;
- phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
- } else {
- psta->bw_mode = CHANNEL_WIDTH_20;
- phtpriv_sta->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
- }
-
- rtw_dm_ra_mask_wk_cmd(padapter, (u8 *)psta);
- }
- }
-}
-
-void HT_caps_handler(struct adapter *padapter, struct ndis_80211_var_ie *pIE)
-{
- unsigned int i;
- u8 max_AMPDU_len, min_MPDU_spacing;
- u8 cur_ldpc_cap = 0, cur_stbc_cap = 0;
- 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 < umin(pIE->length,
- sizeof(pmlmeinfo->HT_caps.u.HT_cap)); i++) {
- if (i != 2) {
- /* Commented by Albert 2010/07/12 */
- /* 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 set */
- for (i = 0; i < 16; i++)
- pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= pmlmeext->default_supported_mcs_set[i];
-
- /* update the MCS rates */
- set_mcs_rate_by_mask(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_RATE_1R);
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- /* Config STBC setting */
- if (TEST_FLAG(phtpriv->stbc_cap, STBC_HT_ENABLE_TX) &&
- GET_HT_CAPABILITY_ELE_TX_STBC(pIE->data))
- SET_FLAG(cur_stbc_cap, STBC_HT_ENABLE_TX);
-
- phtpriv->stbc_cap = cur_stbc_cap;
- } else {
- /* Config LDPC Coding Capability */
- if (TEST_FLAG(phtpriv->ldpc_cap, LDPC_HT_ENABLE_TX) &&
- GET_HT_CAPABILITY_ELE_LDPC_CAP(pIE->data))
- SET_FLAG(cur_ldpc_cap, (LDPC_HT_ENABLE_TX | LDPC_HT_CAP_TX));
-
- phtpriv->ldpc_cap = cur_ldpc_cap;
-
- /* Config STBC setting */
- if (TEST_FLAG(phtpriv->stbc_cap, STBC_HT_ENABLE_TX) &&
- GET_HT_CAPABILITY_ELE_RX_STBC(pIE->data))
- SET_FLAG(cur_stbc_cap, (STBC_HT_ENABLE_TX | STBC_HT_CAP_TX));
-
- phtpriv->stbc_cap = cur_stbc_cap;
- }
-}
-
-void HT_info_handler(struct adapter *padapter, struct ndis_80211_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);
-}
-
-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;
- /* set_channel_bwmode(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode); */
- 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;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
-
- rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_FACTOR, (u8 *)(&max_AMPDU_len));
-}
-
-void ERP_IE_handler(struct adapter *padapter, struct ndis_80211_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;
- }
-}
-
-void update_ldpc_stbc_cap(struct sta_info *psta)
-{
- if (psta->htpriv.ht_option) {
- if (TEST_FLAG(psta->htpriv.ldpc_cap, LDPC_HT_ENABLE_TX))
- psta->ldpc = 1;
-
- if (TEST_FLAG(psta->htpriv.stbc_cap, STBC_HT_ENABLE_TX))
- psta->stbc = 1;
- } else {
- psta->ldpc = 0;
- psta->stbc = 0;
- }
-}
-
-int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len)
-{
- unsigned int len;
- unsigned char *p;
- unsigned short val16, subtype;
- 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);
- 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;
- struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
- int ssid_len;
-
- if (!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.mac_address, pbssid, 6))
- return true;
-
- bssid = kzalloc_obj(*bssid);
- if (!bssid)
- return true;
-
- if ((pmlmepriv->timeBcnInfoChkStart != 0) && (jiffies_to_msecs(jiffies - pmlmepriv->timeBcnInfoChkStart) > DISCONNECT_BY_CHK_BCN_FAIL_OBSERV_PERIOD_IN_MS)) {
- pmlmepriv->timeBcnInfoChkStart = 0;
- pmlmepriv->NumOfBcnInfoChkFail = 0;
- }
-
- subtype = GetFrameSubType(pframe) >> 4;
-
- if (subtype == WIFI_BEACON)
- bssid->reserved[0] = 1;
-
- bssid->length = sizeof(struct wlan_bssid_ex) - MAX_IE_SZ + len;
-
- /* below is to copy the information element */
- bssid->ie_length = len;
- memcpy(bssid->ies, (pframe + sizeof(struct ieee80211_hdr_3addr)), bssid->ie_length);
-
- /* check bw and channel offset */
- /* parsing HT_CAP_IE */
- p = rtw_get_ie(bssid->ies + _FIXED_IE_LENGTH_, WLAN_EID_HT_CAPABILITY, &len, bssid->ie_length - _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_, WLAN_EID_HT_OPERATION, &len, bssid->ie_length - _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->bcn_info.ht_cap_info ||
- ((ht_info_infos_0 & 0x03) != (cur_network->bcn_info.ht_info_infos_0 & 0x03))) {
- {
- /* bcn_info_update */
- cur_network->bcn_info.ht_cap_info = ht_cap_info;
- cur_network->bcn_info.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_, WLAN_EID_DS_PARAMS, &len, bssid->ie_length - _FIXED_IE_LENGTH_);
- if (p) {
- bcn_channel = *(p + 2);
- } else {/* In 5G, some ap do not have DSSET IE checking HT info for channel */
- rtw_get_ie(bssid->ies + _FIXED_IE_LENGTH_, WLAN_EID_HT_OPERATION,
- &len, bssid->ie_length - _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 */
- ssid_len = 0;
- p = rtw_get_ie(bssid->ies + _FIXED_IE_LENGTH_, WLAN_EID_SSID, &len, bssid->ie_length - _FIXED_IE_LENGTH_);
- if (p) {
- ssid_len = *(p + 1);
- if (ssid_len > NDIS_802_11_LENGTH_SSID)
- ssid_len = 0;
- memcpy(bssid->ssid.ssid, (p + 2), ssid_len);
- }
- bssid->ssid.ssid_length = ssid_len;
-
- if (memcmp(bssid->ssid.ssid, cur_network->network.ssid.ssid, 32) ||
- bssid->ssid.ssid_length != cur_network->network.ssid.ssid_length)
- if (bssid->ssid.ssid[0] != '\0' &&
- bssid->ssid.ssid_length != 0) /* not hidden ssid */
- 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->ie_length, 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->bcn_info.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->ie_length - 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->ie_length - 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->bcn_info.pairwise_cipher ||
- group_cipher != cur_network->bcn_info.group_cipher)
- goto _mismatch;
-
- if (is_8021x != cur_network->bcn_info.is_8021x)
- goto _mismatch;
- }
-
- kfree(bssid);
- return _SUCCESS;
-
-_mismatch:
- kfree(bssid);
-
- if (pmlmepriv->NumOfBcnInfoChkFail == 0)
- pmlmepriv->timeBcnInfoChkStart = jiffies;
-
- pmlmepriv->NumOfBcnInfoChkFail++;
-
- if ((pmlmepriv->timeBcnInfoChkStart != 0) && (jiffies_to_msecs(jiffies - pmlmepriv->timeBcnInfoChkStart) <= DISCONNECT_BY_CHK_BCN_FAIL_OBSERV_PERIOD_IN_MS)
- && (pmlmepriv->NumOfBcnInfoChkFail >= DISCONNECT_BY_CHK_BCN_FAIL_THRESHOLD)) {
- pmlmepriv->timeBcnInfoChkStart = 0;
- pmlmepriv->NumOfBcnInfoChkFail = 0;
- return _FAIL;
- }
-
- return _SUCCESS;
-}
-
-void update_beacon_info(struct adapter *padapter, u8 *pframe, uint pkt_len, struct sta_info *psta)
-{
- unsigned int i;
- unsigned int len;
- struct ndis_80211_var_ie *pIE;
-
- len = pkt_len - (_BEACON_IE_OFFSET_ + WLAN_HDR_A3_LEN);
-
- for (i = 0; i < len;) {
- if (i + sizeof(*pIE) > len)
- break;
- pIE = (struct ndis_80211_var_ie *)(pframe + (_BEACON_IE_OFFSET_ + WLAN_HDR_A3_LEN) + i);
- if (i + sizeof(*pIE) + pIE->length > len)
- break;
-
- switch (pIE->element_id) {
- case WLAN_EID_VENDOR_SPECIFIC:
- /* to update WMM parameter set while receiving beacon */
- if (!memcmp(pIE->data, WMM_PARA_OUI, 6) && pIE->length == WLAN_WMM_LEN) /* WMM */
- if (WMM_param_handler(padapter, pIE))
- report_wmm_edca_update(padapter);
-
- break;
-
- case WLAN_EID_HT_OPERATION: /* HT info */
- /* HT_info_handler(padapter, pIE); */
- bwmode_update_check(padapter, pIE);
- break;
-
- case WLAN_EID_ERP_INFO:
- ERP_IE_handler(padapter, pIE);
- VCS_update(padapter, psta);
- break;
-
- default:
- break;
- }
-
- i += sizeof(*pIE) + pIE->length;
- }
-}
-
-unsigned int is_ap_in_tkip(struct adapter *padapter)
-{
- u32 i;
- struct ndis_80211_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_fix_ie); i < pmlmeinfo->network.ie_length;) {
- pIE = (struct ndis_80211_var_ie *)(pmlmeinfo->network.ies + i);
-
- if (i + sizeof(*pIE) > pmlmeinfo->network.ie_length)
- break;
- if (i + sizeof(*pIE) + pIE->length > pmlmeinfo->network.ie_length)
- break;
-
- switch (pIE->element_id) {
- case WLAN_EID_VENDOR_SPECIFIC:
- if (pIE->length >= 16 &&
- !memcmp(pIE->data, RTW_WPA_OUI, 4) &&
- !memcmp((pIE->data + 12), WPA_TKIP_CIPHER, 4))
- return true;
-
- break;
-
- case WLAN_EID_RSN:
- if (pIE->length >= 12 &&
- !memcmp((pIE->data + 8), RSN_TKIP_CIPHER, 4))
- return true;
- break;
-
- default:
- break;
- }
-
- i += sizeof(*pIE) + pIE->length;
- }
-
- return false;
- } else {
- return false;
- }
-}
-
-int support_short_GI(struct adapter *padapter, struct HT_caps_element *pHT_caps, u8 bwmode)
-{
- 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;
-
- bit_offset = (bwmode & 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 = 31; i >= 0; i--) {
- if (mask & BIT(i)) {
- rate_idx = i;
- break;
- }
- }
-
- return rate_idx;
-}
-
-void update_ra_entry(struct adapter *padapter, struct sta_info *psta)
-{
- rtw_hal_update_ra_mask(psta, 0);
-}
-
-void set_sta_rate(struct adapter *padapter, struct sta_info *psta)
-{
- /* rate adaptive */
- update_ra_entry(padapter, psta);
-}
-
-static u32 get_realtek_assoc_AP_vender(struct ndis_80211_var_ie *pIE)
-{
- u32 Vender = HT_IOT_PEER_REALTEK;
-
- if (pIE->length >= 5) {
- if (pIE->data[4] == 1)
- /* if (pIE->data[5] & RT_HT_CAP_USE_LONG_PREAMBLE) */
- /* bssDesc->BssHT.RT2RT_HT_Mode |= RT_HT_CAP_USE_LONG_PREAMBLE; */
- if (pIE->data[5] & RT_HT_CAP_USE_92SE)
- /* bssDesc->BssHT.RT2RT_HT_Mode |= RT_HT_CAP_USE_92SE; */
- Vender = HT_IOT_PEER_REALTEK_92SE;
-
- if (pIE->data[5] & RT_HT_CAP_USE_SOFTAP)
- Vender = HT_IOT_PEER_REALTEK_SOFTAP;
-
- if (pIE->data[4] == 2) {
- if (pIE->data[6] & RT_HT_CAP_USE_JAGUAR_BCUT)
- Vender = HT_IOT_PEER_REALTEK_JAGUAR_BCUTAP;
-
- if (pIE->data[6] & RT_HT_CAP_USE_JAGUAR_CCUT)
- Vender = HT_IOT_PEER_REALTEK_JAGUAR_CCUTAP;
- }
- }
-
- return Vender;
-}
-
-unsigned char check_assoc_AP(u8 *pframe, uint len)
-{
- unsigned int i;
- struct ndis_80211_var_ie *pIE;
-
- for (i = sizeof(struct ndis_802_11_fix_ie); i < len;) {
- pIE = (struct ndis_80211_var_ie *)(pframe + i);
-
- switch (pIE->element_id) {
- case WLAN_EID_VENDOR_SPECIFIC:
- 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)) ||
- (!memcmp(pIE->data, BROADCOM_OUI3, 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))
- 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 get_realtek_assoc_AP_vender(pIE);
- else if (!memcmp(pIE->data, AIRGOCAP_OUI, 3))
- return HT_IOT_PEER_AIRGO;
- break;
- default:
- break;
- }
-
- i += (pIE->length + 2);
- }
-
- 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;
- /* disable high power */
- switch_dm_func(padapter, ((u32)(~DYNAMIC_BB_DYNAMIC_TXPWR)), false);
- break;
- case HT_IOT_PEER_REALTEK:
- /* rtw_write16(padapter, 0x4cc, 0xffff); */
- /* rtw_write16(padapter, 0x546, 0x01c0); */
- /* disable high power */
- switch_dm_func(padapter, ((u32)(~DYNAMIC_BB_DYNAMIC_TXPWR)), false);
- break;
- default:
- pmlmeinfo->turboMode_cts2self = 0;
- pmlmeinfo->turboMode_rtsen = 1;
- break;
- }
-}
-
-void update_capinfo(struct adapter *Adapter, u16 updateCap)
-{
- struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- bool ShortPreamble;
-
- /* Check preamble mode, 2005.01.06, by rcnjko. */
- /* Mark to update preamble value forever, 2008.03.18 by lanhsin */
- /* if (pMgntInfo->RegPreambleMode == PREAMBLE_AUTO) */
- {
- if (updateCap & cShortPreamble) {
- /* Short Preamble */
- if (pmlmeinfo->preamble_mode != PREAMBLE_SHORT) { /* PREAMBLE_LONG or PREAMBLE_AUTO */
- ShortPreamble = true;
- pmlmeinfo->preamble_mode = PREAMBLE_SHORT;
- rtw_hal_set_hwreg(Adapter, HW_VAR_ACK_PREAMBLE, (u8 *)&ShortPreamble);
- }
- } else {
- /* Long Preamble */
- if (pmlmeinfo->preamble_mode != PREAMBLE_LONG) { /* PREAMBLE_SHORT or PREAMBLE_AUTO */
- ShortPreamble = false;
- pmlmeinfo->preamble_mode = PREAMBLE_LONG;
- rtw_hal_set_hwreg(Adapter, HW_VAR_ACK_PREAMBLE, (u8 *)&ShortPreamble);
- }
- }
- }
-
- 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_11_24N)) {
- pmlmeinfo->slotTime = SHORT_SLOT_TIME;
- } else if (pmlmeext->cur_wireless_mode & (WIRELESS_11G)) {
- if ((updateCap & cShortSlotTime) /* && (!(pMgntInfo->pHTInfo->RT2RT_HT_Mode & RT_HT_CAP_USE_LONG_PREAMBLE)) */)
- /* Short Slot Time */
- pmlmeinfo->slotTime = SHORT_SLOT_TIME;
- else
- /* Long Slot Time */
- pmlmeinfo->slotTime = NON_SHORT_SLOT_TIME;
- } else {
- /* B Mode */
- pmlmeinfo->slotTime = NON_SHORT_SLOT_TIME;
- }
- }
-
- rtw_hal_set_hwreg(Adapter, HW_VAR_SLOT_TIME, &pmlmeinfo->slotTime);
-}
-
-void update_wireless_mode(struct adapter *padapter)
-{
- int network_type = 0;
- u32 SIFS_Timer;
- 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->supported_rates;
-
- if ((pmlmeinfo->HT_info_enable) && (pmlmeinfo->HT_caps_enable))
- pmlmeinfo->HT_enable = 1;
-
- if (pmlmeinfo->HT_enable)
- network_type = WIRELESS_11_24N;
-
- if (rtw_is_cckratesonly_included(rate))
- network_type |= WIRELESS_11B;
- else if (rtw_is_cckrates_included(rate))
- network_type |= WIRELESS_11BG;
- else
- network_type |= WIRELESS_11G;
-
- pmlmeext->cur_wireless_mode = network_type & padapter->registrypriv.wireless_mode;
-
- SIFS_Timer = 0x0a0a0808; /* 0x0808 -> for CCK, 0x0a0a -> for OFDM */
- /* change this value if having IOT issues. */
-
- SetHwReg8723BS(padapter, HW_VAR_RESP_SIFS, (u8 *)&SIFS_Timer);
-
- SetHwReg8723BS(padapter, HW_VAR_WIRELESS_MODE, (u8 *)&pmlmeext->cur_wireless_mode);
-
- 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_sta_basic_rate(struct sta_info *psta, u8 wireless_mode)
-{
- if (is_supported_tx_cck(wireless_mode)) {
- /* Only B, B/G, and B/G/N AP could use CCK rate */
- memcpy(psta->bssrateset, rtw_basic_rate_cck, 4);
- psta->bssratelen = 4;
- } else {
- memcpy(psta->bssrateset, rtw_basic_rate_ofdm, 3);
- psta->bssratelen = 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_80211_var_ie *pIE;
- int support_rate_num = 0;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
- pIE = (struct ndis_80211_var_ie *)rtw_get_ie(pvar_ie, WLAN_EID_SUPP_RATES, &ie_len, var_ie_len);
- if (!pIE)
- return _FAIL;
- if (ie_len > sizeof(pmlmeinfo->FW_sta_info[cam_idx].SupportedRates))
- return _FAIL;
-
- memcpy(pmlmeinfo->FW_sta_info[cam_idx].SupportedRates, pIE->data, ie_len);
- support_rate_num = ie_len;
-
- pIE = (struct ndis_80211_var_ie *)rtw_get_ie(pvar_ie, WLAN_EID_EXT_SUPP_RATES, &ie_len, var_ie_len);
- if (pIE && (ie_len <= sizeof(pmlmeinfo->FW_sta_info[cam_idx].SupportedRates) - support_rate_num))
- memcpy((pmlmeinfo->FW_sta_info[cam_idx].SupportedRates + support_rate_num), pIE->data, ie_len);
-
- return _SUCCESS;
-}
-
-void process_addba_req(struct adapter *padapter, u8 *paddba_req, u8 *addr)
-{
- struct sta_info *psta;
- u16 tid, param;
- struct recv_reorder_ctrl *preorder_ctrl;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct ADDBA_request *preq = (struct ADDBA_request *)paddba_req;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
- psta = rtw_get_stainfo(pstapriv, addr);
-
- if (psta) {
- param = le16_to_cpu(preq->BA_para_set);
- tid = (param >> 2) & 0x0f;
-
- preorder_ctrl = &psta->recvreorder_ctrl[tid];
-
- preorder_ctrl->indicate_seq = 0xffff;
-
- preorder_ctrl->enable = pmlmeinfo->accept_addba_req;
- }
-}
-
-void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len)
-{
- u8 *pIE;
- __le32 *pbuf;
-
- pIE = pframe + sizeof(struct ieee80211_hdr_3addr);
- pbuf = (__le32 *)pIE;
-
- pmlmeext->TSFValue = le32_to_cpu(*(pbuf + 1));
-
- pmlmeext->TSFValue = pmlmeext->TSFValue << 32;
-
- pmlmeext->TSFValue |= le32_to_cpu(*pbuf);
-}
-
-void correct_TSF(struct adapter *padapter, struct mlme_ext_priv *pmlmeext)
-{
- rtw_hal_set_hwreg(padapter, HW_VAR_CORRECT_TSF, NULL);
-}
-
-void adaptive_early_32k(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len)
-{
- int i;
- u8 *pIE;
- __le32 *pbuf;
- u64 tsf = 0;
- u32 delay_ms;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
- pmlmeext->bcn_cnt++;
-
- pIE = pframe + sizeof(struct ieee80211_hdr_3addr);
- pbuf = (__le32 *)pIE;
-
- tsf = le32_to_cpu(*(pbuf + 1));
- tsf = tsf << 32;
- tsf |= le32_to_cpu(*pbuf);
-
- /* delay = (timestamp mod 1024*100)/1000 (unit: ms) */
- /* delay_ms = do_div(tsf, (pmlmeinfo->bcn_interval*1024))/1000; */
- delay_ms = do_div(tsf, (pmlmeinfo->bcn_interval * 1024));
- delay_ms = delay_ms / 1000;
-
- if (delay_ms >= 8)
- pmlmeext->bcn_delay_cnt[8]++;
- /* pmlmeext->bcn_delay_ratio[8] = (pmlmeext->bcn_delay_cnt[8] * 100) /pmlmeext->bcn_cnt; */
- else
- pmlmeext->bcn_delay_cnt[delay_ms]++;
- /* pmlmeext->bcn_delay_ratio[delay_ms] = (pmlmeext->bcn_delay_cnt[delay_ms] * 100) /pmlmeext->bcn_cnt; */
- /* dump for adaptive_early_32k */
- if (pmlmeext->bcn_cnt > 100 && pmlmeext->adaptive_tsf_done) {
- u8 ratio_20_delay, ratio_80_delay;
- u8 DrvBcnEarly, DrvBcnTimeOut;
-
- ratio_20_delay = 0;
- ratio_80_delay = 0;
- DrvBcnEarly = 0xff;
- DrvBcnTimeOut = 0xff;
-
- for (i = 0; i < 9; i++) {
- pmlmeext->bcn_delay_ratio[i] = (pmlmeext->bcn_delay_cnt[i] * 100) / pmlmeext->bcn_cnt;
-
- ratio_20_delay += pmlmeext->bcn_delay_ratio[i];
- ratio_80_delay += pmlmeext->bcn_delay_ratio[i];
-
- if (ratio_20_delay > 20 && DrvBcnEarly == 0xff)
- DrvBcnEarly = i;
-
- if (ratio_80_delay > 80 && DrvBcnTimeOut == 0xff)
- DrvBcnTimeOut = i;
-
- /* reset adaptive_early_32k cnt */
- pmlmeext->bcn_delay_cnt[i] = 0;
- pmlmeext->bcn_delay_ratio[i] = 0;
- }
-
- pmlmeext->DrvBcnEarly = DrvBcnEarly;
- pmlmeext->DrvBcnTimeOut = DrvBcnTimeOut;
-
- pmlmeext->bcn_cnt = 0;
- }
-}
-
-void rtw_alloc_macid(struct adapter *padapter, struct sta_info *psta)
-{
- int i;
- struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
-
- if (is_broadcast_ether_addr(psta->hwaddr))
- return;
-
- if (!memcmp(psta->hwaddr, myid(&padapter->eeprompriv), ETH_ALEN)) {
- psta->mac_id = NUM_STA;
- return;
- }
-
- spin_lock_bh(&pdvobj->lock);
- for (i = 0; i < NUM_STA; i++) {
- if (!pdvobj->macid[i]) {
- pdvobj->macid[i] = true;
- break;
- }
- }
- spin_unlock_bh(&pdvobj->lock);
-
- if (i > (NUM_STA - 1))
- psta->mac_id = NUM_STA;
- else
- psta->mac_id = i;
-}
-
-void rtw_release_macid(struct adapter *padapter, struct sta_info *psta)
-{
- struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
-
- if (is_broadcast_ether_addr(psta->hwaddr))
- return;
-
- if (!memcmp(psta->hwaddr, myid(&padapter->eeprompriv), ETH_ALEN))
- return;
-
- spin_lock_bh(&pdvobj->lock);
- if (psta->mac_id < NUM_STA && psta->mac_id != 1) {
- if (pdvobj->macid[psta->mac_id]) {
- pdvobj->macid[psta->mac_id] = false;
- psta->mac_id = NUM_STA;
- }
- }
- spin_unlock_bh(&pdvobj->lock);
-}
diff --git a/drivers/staging/rtl8723bs/core/rtw_xmit.c b/drivers/staging/rtl8723bs/core/rtw_xmit.c
deleted file mode 100644
index 81d9e713fc12..000000000000
--- a/drivers/staging/rtl8723bs/core/rtw_xmit.c
+++ /dev/null
@@ -1,2569 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <linux/delay.h>
-#include <linux/if_ether.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.queue);
- spin_lock_init(&ptxservq->sta_pending.lock);
- 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);
- INIT_LIST_HEAD(&psta_xmitpriv->legacy_dz);
- INIT_LIST_HEAD(&psta_xmitpriv->apsd);
-}
-
-static s32 rtw_alloc_hwxmits(struct adapter *padapter)
-{
- struct hw_xmit *hwxmits;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
- pxmitpriv->hwxmit_entry = HWXMIT_ENTRY;
-
- pxmitpriv->hwxmits = NULL;
-
- pxmitpriv->hwxmits = kzalloc_objs(*hwxmits, pxmitpriv->hwxmit_entry,
- GFP_ATOMIC);
- if (!pxmitpriv->hwxmits)
- return -ENOMEM;
-
- hwxmits = pxmitpriv->hwxmits;
-
- if (pxmitpriv->hwxmit_entry == 5) {
- hwxmits[0] .sta_queue = &pxmitpriv->bm_pending;
-
- hwxmits[1] .sta_queue = &pxmitpriv->vo_pending;
-
- hwxmits[2] .sta_queue = &pxmitpriv->vi_pending;
-
- hwxmits[3] .sta_queue = &pxmitpriv->bk_pending;
-
- hwxmits[4] .sta_queue = &pxmitpriv->be_pending;
- } else if (pxmitpriv->hwxmit_entry == 4) {
- hwxmits[0] .sta_queue = &pxmitpriv->vo_pending;
-
- hwxmits[1] .sta_queue = &pxmitpriv->vi_pending;
-
- hwxmits[2] .sta_queue = &pxmitpriv->be_pending;
-
- hwxmits[3] .sta_queue = &pxmitpriv->bk_pending;
- } else {
- }
-
- return 0;
-}
-
-static int rtw_os_xmit_resource_alloc(struct adapter *padapter, struct xmit_buf *pxmitbuf, u32 alloc_sz, u8 flag)
-{
- if (alloc_sz > 0) {
- pxmitbuf->pallocated_buf = kzalloc(alloc_sz, GFP_KERNEL);
- if (!pxmitbuf->pallocated_buf)
- return -ENOMEM;
-
- pxmitbuf->pbuf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pxmitbuf->pallocated_buf), XMITBUF_ALIGN_SZ);
- }
-
- return 0;
-}
-
-s32 _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter)
-{
- int i;
- struct xmit_buf *pxmitbuf;
- struct xmit_frame *pxframe;
- int res;
-
- spin_lock_init(&pxmitpriv->lock);
- spin_lock_init(&pxmitpriv->lock_sctx);
- init_completion(&pxmitpriv->xmit_comp);
- init_completion(&pxmitpriv->terminate_xmitthread_comp);
-
- pxmitpriv->adapter = padapter;
-
- INIT_LIST_HEAD(&pxmitpriv->be_pending.queue);
- spin_lock_init(&pxmitpriv->be_pending.lock);
- INIT_LIST_HEAD(&pxmitpriv->bk_pending.queue);
- spin_lock_init(&pxmitpriv->bk_pending.lock);
- INIT_LIST_HEAD(&pxmitpriv->vi_pending.queue);
- spin_lock_init(&pxmitpriv->vi_pending.lock);
- INIT_LIST_HEAD(&pxmitpriv->vo_pending.queue);
- spin_lock_init(&pxmitpriv->vo_pending.lock);
- INIT_LIST_HEAD(&pxmitpriv->bm_pending.queue);
- spin_lock_init(&pxmitpriv->bm_pending.lock);
-
- INIT_LIST_HEAD(&pxmitpriv->free_xmit_queue.queue);
- spin_lock_init(&pxmitpriv->free_xmit_queue.lock);
-
- /*
- * 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;
- return -ENOMEM;
- }
- pxmitpriv->pxmit_frame_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pxmitpriv->pallocated_frame_buf), 4);
-
- 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 */
- INIT_LIST_HEAD(&pxmitpriv->free_xmitbuf_queue.queue);
- spin_lock_init(&pxmitpriv->free_xmitbuf_queue.lock);
- INIT_LIST_HEAD(&pxmitpriv->pending_xmitbuf_queue.queue);
- spin_lock_init(&pxmitpriv->pending_xmitbuf_queue.lock);
-
- pxmitpriv->pallocated_xmitbuf = vzalloc(NR_XMITBUFF * sizeof(struct xmit_buf) + 4);
-
- if (!pxmitpriv->pallocated_xmitbuf)
- return -ENOMEM;
-
- pxmitpriv->pxmitbuf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pxmitpriv->pallocated_xmitbuf), 4);
-
- 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->buf_tag = XMITBUF_DATA;
-
- /* Tx buf allocation may fail sometimes, so sleep and retry. */
- res = rtw_os_xmit_resource_alloc(padapter, pxmitbuf, (MAX_XMITBUF_SZ + XMITBUF_ALIGN_SZ), true);
- if (res) {
- fsleep(10 * USEC_PER_MSEC);
- res = rtw_os_xmit_resource_alloc(padapter, pxmitbuf, (MAX_XMITBUF_SZ + XMITBUF_ALIGN_SZ), true);
- if (res)
- return res;
- }
-
- pxmitbuf->phead = pxmitbuf->pbuf;
- pxmitbuf->pend = pxmitbuf->pbuf + MAX_XMITBUF_SZ;
- pxmitbuf->len = 0;
- pxmitbuf->pdata = pxmitbuf->phead;
- pxmitbuf->ptail = pxmitbuf->phead;
-
- pxmitbuf->flags = XMIT_VO_QUEUE;
-
- list_add_tail(&pxmitbuf->list,
- &pxmitpriv->free_xmitbuf_queue.queue);
- pxmitbuf++;
- }
-
- pxmitpriv->free_xmitbuf_cnt = NR_XMITBUFF;
-
- /* init xframe_ext queue, the same count as extbuf */
- INIT_LIST_HEAD(&pxmitpriv->free_xframe_ext_queue.queue);
- spin_lock_init(&pxmitpriv->free_xframe_ext_queue.lock);
-
- pxmitpriv->xframe_ext_alloc_addr = vzalloc(NR_XMIT_EXTBUFF * sizeof(struct xmit_frame) + 4);
-
- if (!pxmitpriv->xframe_ext_alloc_addr) {
- pxmitpriv->xframe_ext = NULL;
- return -ENOMEM;
- }
- pxmitpriv->xframe_ext = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pxmitpriv->xframe_ext_alloc_addr), 4);
- pxframe = (struct xmit_frame *)pxmitpriv->xframe_ext;
-
- for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
- INIT_LIST_HEAD(&pxframe->list);
-
- pxframe->padapter = padapter;
- pxframe->frame_tag = NULL_FRAMETAG;
-
- pxframe->pkt = NULL;
-
- pxframe->buf_addr = NULL;
- pxframe->pxmitbuf = NULL;
-
- pxframe->ext_tag = 1;
-
- list_add_tail(&pxframe->list,
- &pxmitpriv->free_xframe_ext_queue.queue);
-
- pxframe++;
- }
- pxmitpriv->free_xframe_ext_cnt = NR_XMIT_EXTBUFF;
-
- /* Init xmit extension buff */
- INIT_LIST_HEAD(&pxmitpriv->free_xmit_extbuf_queue.queue);
- spin_lock_init(&pxmitpriv->free_xmit_extbuf_queue.lock);
-
- pxmitpriv->pallocated_xmit_extbuf = vzalloc(NR_XMIT_EXTBUFF * sizeof(struct xmit_buf) + 4);
-
- if (!pxmitpriv->pallocated_xmit_extbuf)
- return -ENOMEM;
-
- pxmitpriv->pxmit_extbuf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(pxmitpriv->pallocated_xmit_extbuf), 4);
-
- pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmit_extbuf;
-
- for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
- INIT_LIST_HEAD(&pxmitbuf->list);
-
- pxmitbuf->priv_data = NULL;
- pxmitbuf->padapter = padapter;
- pxmitbuf->buf_tag = XMITBUF_MGNT;
-
- res = rtw_os_xmit_resource_alloc(padapter, pxmitbuf, MAX_XMIT_EXTBUF_SZ + XMITBUF_ALIGN_SZ, true);
- if (res)
- return res;
-
- pxmitbuf->phead = pxmitbuf->pbuf;
- pxmitbuf->pend = pxmitbuf->pbuf + MAX_XMIT_EXTBUF_SZ;
- pxmitbuf->len = 0;
- pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
-
- list_add_tail(&pxmitbuf->list,
- &pxmitpriv->free_xmit_extbuf_queue.queue);
- pxmitbuf++;
- }
-
- pxmitpriv->free_xmit_extbuf_cnt = NR_XMIT_EXTBUFF;
-
- for (i = 0; i < CMDBUF_MAX; i++) {
- pxmitbuf = &pxmitpriv->pcmd_xmitbuf[i];
- if (pxmitbuf) {
- INIT_LIST_HEAD(&pxmitbuf->list);
-
- pxmitbuf->priv_data = NULL;
- pxmitbuf->padapter = padapter;
- pxmitbuf->buf_tag = XMITBUF_CMD;
-
- res = rtw_os_xmit_resource_alloc(padapter, pxmitbuf,
- MAX_CMDBUF_SZ + XMITBUF_ALIGN_SZ,
- true);
- if (res)
- return res;
-
- pxmitbuf->phead = pxmitbuf->pbuf;
- pxmitbuf->pend = pxmitbuf->pbuf + MAX_CMDBUF_SZ;
- pxmitbuf->len = 0;
- pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
- pxmitbuf->alloc_sz = MAX_CMDBUF_SZ + XMITBUF_ALIGN_SZ;
- }
- }
-
- res = rtw_alloc_hwxmits(padapter);
- if (res)
- return res;
- rtw_init_hwxmits(pxmitpriv->hwxmits, pxmitpriv->hwxmit_entry);
-
- 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);
-
- rtw_hal_init_xmit_priv(padapter);
-
- return 0;
-}
-
-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;
-
- rtw_hal_free_xmit_priv(padapter);
-
- if (!pxmitpriv->pxmit_frame_buf)
- return;
-
- for (i = 0; i < NR_XMITFRAME; i++) {
- rtw_os_xmit_complete(padapter, pxmitframe);
-
- pxmitframe++;
- }
-
- for (i = 0; i < NR_XMITBUFF; i++) {
- rtw_os_xmit_resource_free(padapter, pxmitbuf, (MAX_XMITBUF_SZ + XMITBUF_ALIGN_SZ), true);
-
- pxmitbuf++;
- }
-
- vfree(pxmitpriv->pallocated_frame_buf);
- vfree(pxmitpriv->pallocated_xmitbuf);
-
- /* free xframe_ext queue, the same count as extbuf */
- pxmitframe = (struct xmit_frame *)pxmitpriv->xframe_ext;
- if (pxmitframe) {
- for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
- rtw_os_xmit_complete(padapter, pxmitframe);
- pxmitframe++;
- }
- }
-
- vfree(pxmitpriv->xframe_ext_alloc_addr);
-
- /* free xmit extension buff */
- pxmitbuf = (struct xmit_buf *)pxmitpriv->pxmit_extbuf;
- for (i = 0; i < NR_XMIT_EXTBUFF; i++) {
- rtw_os_xmit_resource_free(padapter, pxmitbuf, (MAX_XMIT_EXTBUF_SZ + XMITBUF_ALIGN_SZ), true);
-
- pxmitbuf++;
- }
-
- vfree(pxmitpriv->pallocated_xmit_extbuf);
-
- for (i = 0; i < CMDBUF_MAX; i++) {
- pxmitbuf = &pxmitpriv->pcmd_xmitbuf[i];
- if (pxmitbuf)
- rtw_os_xmit_resource_free(padapter, pxmitbuf,
- MAX_CMDBUF_SZ + XMITBUF_ALIGN_SZ,
- true);
- }
-
- rtw_free_hwxmits(padapter);
-
- mutex_destroy(&pxmitpriv->ack_tx_mutex);
-}
-
-u8 query_ra_short_GI(struct sta_info *psta)
-{
- u8 sgi = false, sgi_20m = false, sgi_40m = false;
-
- sgi_20m = psta->htpriv.sgi_20m;
- sgi_40m = psta->htpriv.sgi_40m;
-
- switch (psta->bw_mode) {
- case CHANNEL_WIDTH_40:
- sgi = sgi_40m;
- break;
- case CHANNEL_WIDTH_20:
- default:
- sgi = sgi_20m;
- break;
- }
-
- return sgi;
-}
-
-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 (pattrib->rtsen)
- pattrib->vcs_mode = RTS_CTS;
- else if (pattrib->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.dot11_privacy_algrthm == _AES_)) {
- pattrib->vcs_mode = CTS_TO_SELF;
- break;
- }
-
- /* check ERP protection */
- if (pattrib->rtsen || pattrib->cts2self) {
- if (pattrib->rtsen)
- pattrib->vcs_mode = RTS_CTS;
- else if (pattrib->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;
- }
- }
-
- /* for debug : force driver control vrtl_carrier_sense. */
- if (padapter->driver_vcs_en == 1)
- pattrib->vcs_mode = padapter->driver_vcs_type;
-}
-
-static void update_attrib_phy_info(struct adapter *padapter, struct pkt_attrib *pattrib, struct sta_info *psta)
-{
- struct mlme_ext_priv *mlmeext = &padapter->mlmeextpriv;
-
- pattrib->rtsen = psta->rtsen;
- pattrib->cts2self = psta->cts2self;
-
- pattrib->mdata = 0;
- pattrib->eosp = 0;
- pattrib->triggered = 0;
- pattrib->ampdu_spacing = 0;
-
- /* qos_en, ht_en, init rate, , bw, ch_offset, sgi */
- pattrib->qos_en = psta->qos_option;
-
- pattrib->raid = psta->raid;
-
- pattrib->bwmode = min(mlmeext->cur_bwmode, psta->bw_mode);
-
- pattrib->sgi = query_ra_short_GI(psta);
-
- pattrib->ldpc = psta->ldpc;
- pattrib->stbc = psta->stbc;
-
- pattrib->ht_en = psta->htpriv.ht_option;
- pattrib->ch_offset = psta->htpriv.ch_offset;
- pattrib->ampdu_en = false;
-
- if (padapter->driver_ampdu_spacing != 0xFF) /* driver control AMPDU Density for peer sta's rx */
- pattrib->ampdu_spacing = padapter->driver_ampdu_spacing;
- else
- pattrib->ampdu_spacing = psta->htpriv.rx_ampdu_min_spacing;
-
- pattrib->retry_ctrl = false;
-}
-
-static int update_attrib_sec_info(struct adapter *padapter, struct pkt_attrib *pattrib, struct sta_info *psta)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- signed int bmcast = is_multicast_ether_addr(pattrib->ra);
-
- memset(pattrib->dot118021x_UncstKey.skey, 0, 16);
- memset(pattrib->dot11tkiptxmickey.skey, 0, 16);
- pattrib->mac_id = psta->mac_id;
-
- if (psta->ieee8021x_blocked) {
- pattrib->encrypt = 0;
-
- if ((pattrib->ether_type != 0x888e) && !check_fwstate(pmlmepriv, WIFI_MP_STATE))
- return -EINVAL;
- } else {
- GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, bmcast);
-
- switch (psecuritypriv->dot11_auth_algrthm) {
- case dot11_auth_algrthm_open:
- case dot11_auth_algrthm_shared:
- case dot11_auth_algrthm_auto:
- pattrib->key_idx = (u8)psecuritypriv->dot11PrivacyKeyIndex;
- break;
- case dot11_auth_algrthm_8021x:
- if (bmcast)
- pattrib->key_idx = (u8)psecuritypriv->dot118021XGrpKeyid;
- else
- pattrib->key_idx = 0;
- break;
- default:
- pattrib->key_idx = 0;
- break;
- }
-
- /* For WPS 1.0 WEP, driver should not encrypt EAPOL Packet for WPS handshake. */
- if (((pattrib->encrypt == _WEP40_) || (pattrib->encrypt == _WEP104_)) && (pattrib->ether_type == 0x888e))
- pattrib->encrypt = _NO_PRIVACY_;
- }
-
- switch (pattrib->encrypt) {
- case _WEP40_:
- case _WEP104_:
- pattrib->iv_len = 4;
- pattrib->icv_len = 4;
- WEP_IV(pattrib->iv, psta->dot11txpn, pattrib->key_idx);
- break;
-
- case _TKIP_:
- pattrib->iv_len = 8;
- pattrib->icv_len = 4;
-
- if (psecuritypriv->busetkipkey == _FAIL)
- return -EINVAL;
-
- if (bmcast)
- TKIP_IV(pattrib->iv, psta->dot11txpn, pattrib->key_idx);
- else
- TKIP_IV(pattrib->iv, psta->dot11txpn, 0);
-
- memcpy(pattrib->dot11tkiptxmickey.skey, psta->dot11tkiptxmickey.skey, 16);
-
- break;
-
- case _AES_:
-
- pattrib->iv_len = 8;
- pattrib->icv_len = 8;
-
- if (bmcast)
- AES_IV(pattrib->iv, psta->dot11txpn, pattrib->key_idx);
- else
- AES_IV(pattrib->iv, psta->dot11txpn, 0);
-
- break;
-
- default:
- pattrib->iv_len = 0;
- pattrib->icv_len = 0;
- break;
- }
-
- if (pattrib->encrypt > 0)
- memcpy(pattrib->dot118021x_UncstKey.skey, psta->dot118021x_UncstKey.skey, 16);
-
- if (pattrib->encrypt &&
- ((padapter->securitypriv.sw_encrypt) || (!psecuritypriv->hw_decrypted)))
- pattrib->bswenc = true;
- else
- pattrib->bswenc = false;
-
- return 0;
-}
-
-u8 qos_acm(u8 acm_mask, u8 priority)
-{
- switch (priority) {
- case 0:
- case 3:
- if (acm_mask & BIT(1))
- priority = 1;
- break;
- case 1:
- case 2:
- break;
- case 4:
- case 5:
- if (acm_mask & BIT(2))
- priority = 0;
- break;
- case 6:
- case 7:
- if (acm_mask & BIT(3))
- priority = 5;
- break;
- default:
- break;
- }
-
- return priority;
-}
-
-static int set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib)
-{
- struct ethhdr etherhdr;
- struct iphdr ip_hdr;
- s32 UserPriority = 0;
- int ret;
-
- _rtw_open_pktfile(ppktfile->pkt, ppktfile);
- ret = _rtw_pktfile_read(ppktfile, (unsigned char *)ðerhdr, ETH_HLEN);
- if (ret < 0)
- return ret;
-
- /* get UserPriority from IP hdr */
- if (pattrib->ether_type == 0x0800) {
- ret = _rtw_pktfile_read(ppktfile, (u8 *)&ip_hdr, sizeof(ip_hdr));
- if (ret < 0)
- return ret;
-
- UserPriority = ip_hdr.tos >> 5;
- }
- pattrib->priority = UserPriority;
- pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN;
- pattrib->subtype = WIFI_QOS_DATA_TYPE;
-
- return 0;
-}
-
-static int 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;
-
- signed int bmcast;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct qos_priv *pqospriv = &pmlmepriv->qospriv;
- int ret;
-
- _rtw_open_pktfile(pkt, &pktfile);
- ret = _rtw_pktfile_read(&pktfile, (u8 *)ðerhdr, ETH_HLEN);
- if (ret < 0)
- return ret;
-
- pattrib->ether_type = ntohs(etherhdr.h_proto);
-
- memcpy(pattrib->dst, ðerhdr.h_dest, ETH_ALEN);
- memcpy(pattrib->src, ðerhdr.h_source, ETH_ALEN);
-
- 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];
-
- ret = _rtw_pktfile_read(&pktfile, &tmp[0], 24);
- if (ret < 0)
- return ret;
-
- pattrib->dhcp_pkt = 0;
- if (pktfile.pkt_len > 282) {/* MINIMUM_DHCP_PACKET_SIZE) { */
- if (pattrib->ether_type == ETH_P_IP) {/* IP header */
- if (((tmp[21] == 68) && (tmp[23] == 67)) ||
- ((tmp[21] == 67) && (tmp[23] == 68))) {
- /* 68 : UDP BOOTP client */
- /* 67 : UDP BOOTP server */
- pattrib->dhcp_pkt = 1;
- }
- }
- }
-
- /* for parsing ICMP packets */
- {
- struct iphdr *piphdr = (struct iphdr *)tmp;
-
- pattrib->icmp_pkt = 0;
- if (piphdr->protocol == 0x1) /* protocol type in ip header 0x1 is ICMP */
- pattrib->icmp_pkt = 1;
- }
- } else if (pattrib->ether_type == 0x888e) {
- netdev_dbg(padapter->pnetdev, "send eapol packet\n");
- }
-
- if ((pattrib->ether_type == 0x888e) || (pattrib->dhcp_pkt == 1))
- rtw_set_scan_deny(padapter, 3000);
-
- /* If EAPOL , ARP , OR DHCP packet, driver must be in active mode. */
- if (pattrib->icmp_pkt == 1)
- rtw_lps_ctrl_wk_cmd(padapter, LPS_CTRL_LEAVE, 1);
- else if (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 => drop the pkt */
- return -EINVAL;
- else if (check_fwstate(pmlmepriv, WIFI_AP_STATE) && !(psta->state & _FW_LINKED))
- return -EINVAL;
- }
-
- if (!psta) {
- /* if we cannot get psta => drop the pkt */
- return -EINVAL;
- }
-
- if (!(psta->state & _FW_LINKED))
- return -EINVAL;
-
- spin_lock_bh(&psta->lock);
- ret = update_attrib_sec_info(padapter, pattrib, psta);
- if (ret) {
- spin_unlock_bh(&psta->lock);
- return ret;
- }
-
- update_attrib_phy_info(padapter, pattrib, psta);
-
- pattrib->psta = psta;
- spin_unlock_bh(&psta->lock);
-
- pattrib->pctrl = 0;
-
- 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 = WIFI_DATA_TYPE;
- pattrib->priority = 0;
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE | WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE)) {
- if (pattrib->qos_en) {
- ret = set_qos(&pktfile, pattrib);
- if (ret < 0)
- return ret;
- }
- } else {
- if (pqospriv->qos_option) {
- ret = set_qos(&pktfile, pattrib);
- if (ret < 0)
- return ret;
-
- if (pmlmepriv->acm_mask != 0)
- pattrib->priority = qos_acm(pmlmepriv->acm_mask, pattrib->priority);
- }
- }
-
- /* pattrib->priority = 5; force to used VI queue, for testing */
- return 0;
-}
-
-static int xmitframe_addmic(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
- signed int curfragnum, length;
- u8 *pframe, *payload, mic[8];
- struct mic_data micdata;
- 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;
- signed int bmcst = is_multicast_ether_addr(pattrib->ra);
-
- hw_hdr_offset = TXDESC_OFFSET;
-
- if (pattrib->encrypt == _TKIP_) {
- /* encode mic code */
- {
- 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 (bmcst) {
- if (!memcmp(psecuritypriv->dot118021XGrptxmickey[psecuritypriv->dot118021XGrpKeyid].skey, null_key, 16))
- return -EINVAL;
- /* start to calculate the mic code */
- rtw_secmicsetkey(&micdata, psecuritypriv->dot118021XGrptxmickey[psecuritypriv->dot118021XGrpKeyid].skey);
- } else {
- if (!memcmp(&pattrib->dot11tkiptxmickey.skey[0], null_key, 16))
- return -EINVAL;
- /* start to calculate the mic code */
- rtw_secmicsetkey(&micdata, &pattrib->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 = (u8 *)round_up((SIZE_PTR)(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;
- }
- }
- return 0;
-}
-
-static s32 xmitframe_swencrypt(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
-
- if (pattrib->bswenc) {
- switch (pattrib->encrypt) {
- case _WEP40_:
- case _WEP104_:
- rtw_wep_encrypt(padapter, (u8 *)pxmitframe);
- break;
- case _TKIP_:
- rtw_tkip_encrypt(padapter, (u8 *)pxmitframe);
- break;
- case _AES_:
- rtw_aes_encrypt(padapter, (u8 *)pxmitframe);
- break;
- default:
- break;
- }
- }
-
- return _SUCCESS;
-}
-
-int 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;
- u8 qos_option = false;
- __le16 *fctrl = &pwlanhdr->frame_control;
-
- memset(hdr, 0, WLANHDR_OFFSET);
-
- SetFrameSubType(fctrl, pattrib->subtype);
-
- if (pattrib->subtype & WIFI_DATA_TYPE) {
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
- /* to_ds = 1, fr_ds = 0; */
-
- {
- /* 1.Data transfer to AP */
- /* 2.Arp pkt will relayed by 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);
- }
-
- if (pqospriv->qos_option)
- qos_option = true;
- } 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);
-
- if (pattrib->qos_en)
- qos_option = true;
- } 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);
-
- if (pattrib->qos_en)
- qos_option = true;
- } else {
- return -EINVAL;
- }
-
- 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 */
- {
- struct sta_info *psta;
-
- psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
- if (pattrib->psta != psta)
- return -EINVAL;
-
- if (!psta)
- return -ENOENT;
-
- if (!(psta->state & _FW_LINKED))
- return -ENOLINK;
-
- if (psta) {
- psta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
- psta->sta_xmitpriv.txseq_tid[pattrib->priority] %= 4096u;
- 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) % 4096u;
-
- pattrib->ampdu_en = true;/* AGG EN */
- } else {
- psta->BA_starting_seqctrl[pattrib->priority & 0x0f] =
- (pattrib->seqnum + 1) % 4096u;
-
- pattrib->ampdu_en = true;/* AGG EN */
- }
- }
- }
- }
- } else {
- }
-
- return 0;
-}
-
-s32 rtw_txframes_pending(struct adapter *padapter)
-{
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
- return ((!list_empty(&pxmitpriv->be_pending.queue)) ||
- (!list_empty(&pxmitpriv->bk_pending.queue)) ||
- (!list_empty(&pxmitpriv->vi_pending.queue)) ||
- (!list_empty(&pxmitpriv->vo_pending.queue)));
-}
-
-/*
- * Calculate wlan 802.11 packet MAX size from pkt_attrib
- * This function doesn't consider fragment case
- */
-u32 rtw_calculate_wlan_pkt_size_by_attribue(struct pkt_attrib *pattrib)
-{
- u32 len = 0;
-
- len = pattrib->hdrlen + pattrib->iv_len; /* WLAN Header and IV */
- len += SNAP_SIZE + sizeof(u16); /* LLC */
- len += pattrib->pktlen;
- if (pattrib->encrypt == _TKIP_)
- len += 8; /* MIC */
- len += ((pattrib->bswenc) ? pattrib->icv_len : 0); /* ICV */
-
- return len;
-}
-
-/*
- * 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.
- */
-int 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;
-
- SIZE_PTR addr;
-
- u8 *pframe, *mem_start;
- u8 hw_hdr_offset;
-
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
-
- u8 *pbuf_start;
-
- s32 bmcst = is_multicast_ether_addr(pattrib->ra);
- int ret;
-
- if (!pxmitframe->buf_addr)
- return -EINVAL;
-
- pbuf_start = pxmitframe->buf_addr;
-
- hw_hdr_offset = TXDESC_OFFSET;
- mem_start = pbuf_start + hw_hdr_offset;
-
- ret = rtw_make_wlanhdr(padapter, mem_start, pattrib);
- if (ret)
- return ret;
-
- _rtw_open_pktfile(pkt, &pktfile);
- ret = _rtw_pktfile_read(&pktfile, NULL, pattrib->pkt_hdrlen);
- if (ret < 0)
- return ret;
-
- 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) {
- 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);
- }
-
- if (mem_sz < 0)
- return mem_sz;
-
- 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 || rtw_endofpktfile(&pktfile)) {
- 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;
- }
-
- addr = (SIZE_PTR)(pframe);
-
- mem_start = (unsigned char *)round_up(addr, 4) + hw_hdr_offset;
- memcpy(mem_start, pbuf_start + hw_hdr_offset, pattrib->hdrlen);
- }
-
- ret = xmitframe_addmic(padapter, pxmitframe);
- if (ret)
- return ret;
-
- xmitframe_swencrypt(padapter, pxmitframe);
-
- if (!bmcst)
- update_attrib_vcs_info(padapter, pxmitframe);
- else
- pattrib->vcs_mode = NONE_VCS;
-
- return 0;
-}
-
-/* broadcast or multicast management pkt use BIP, unicast management pkt use CCMP encryption */
-s32 rtw_mgmt_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, struct xmit_frame *pxmitframe)
-{
- u8 *pframe, *mem_start = NULL, *tmp_buf = NULL;
- u8 subtype;
- struct sta_info *psta = NULL;
- struct pkt_attrib *pattrib = &pxmitframe->attrib;
- s32 bmcst = is_multicast_ether_addr(pattrib->ra);
- u8 *BIP_AAD = NULL;
- u8 *MGMT_body = NULL;
-
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct ieee80211_hdr *pwlanhdr;
- u8 MME[_MME_IE_LENGTH_];
- u32 ori_len;
-
- mem_start = pframe = (u8 *)(pxmitframe->buf_addr) + TXDESC_OFFSET;
- pwlanhdr = (struct ieee80211_hdr *)pframe;
-
- ori_len = BIP_AAD_SIZE + pattrib->pktlen;
- BIP_AAD = kzalloc(ori_len, GFP_ATOMIC);
-
- if (!BIP_AAD)
- return _FAIL;
-
- tmp_buf = BIP_AAD;
- subtype = GetFrameSubType(pframe); /* bit(7)~bit(2) */
- spin_lock_bh(&padapter->security_key_mutex);
-
- /* only support station mode */
- if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE) || !check_fwstate(pmlmepriv, _FW_LINKED))
- goto xmitframe_coalesce_success;
-
- /* IGTK key is not install, it may not support 802.11w */
- if (!padapter->securitypriv.binstallBIPkey)
- goto xmitframe_coalesce_success;
-
- /* station mode doesn't need TX BIP, just ready the code */
- if (bmcst) {
- int frame_body_len;
- u8 mic[16];
-
- memset(MME, 0, 18);
-
- /* other types doesn't need the BIP */
- if (GetFrameSubType(pframe) != WIFI_DEAUTH && GetFrameSubType(pframe) != WIFI_DISASSOC)
- goto xmitframe_coalesce_fail;
-
- MGMT_body = pframe + sizeof(struct ieee80211_hdr_3addr);
- pframe += pattrib->pktlen;
-
- /* octent 0 and 1 is key index , BIP keyid is 4 or 5, LSB only need octent 0 */
- MME[0] = padapter->securitypriv.dot11wBIPKeyid;
- /* copy packet number */
- memcpy(&MME[2], &pmlmeext->mgnt_80211w_IPN, 6);
- /* increase the packet number */
- pmlmeext->mgnt_80211w_IPN++;
-
- /* add MME IE with MIC all zero, MME string doesn't include element id and length */
- pframe = rtw_set_ie(pframe, WLAN_EID_MMIE, 16,
- MME, &pattrib->pktlen);
- pattrib->last_txcmdsz = pattrib->pktlen;
- /* total frame length - header length */
- frame_body_len = pattrib->pktlen - sizeof(struct ieee80211_hdr_3addr);
-
- /* conscruct AAD, copy frame control field */
- memcpy(BIP_AAD, &pwlanhdr->frame_control, 2);
- ClearRetry(BIP_AAD);
- ClearPwrMgt(BIP_AAD);
- ClearMData(BIP_AAD);
- /* conscruct AAD, copy address 1 to address 3 */
- memcpy(BIP_AAD + 2, &pwlanhdr->addrs, sizeof(pwlanhdr->addrs));
- /* copy management fram body */
- memcpy(BIP_AAD + BIP_AAD_SIZE, MGMT_body, frame_body_len);
- /* calculate mic */
- if (omac1_aes_128(padapter->securitypriv.dot11wBIPKey[padapter->securitypriv.dot11wBIPKeyid].skey
- , BIP_AAD, BIP_AAD_SIZE + frame_body_len, mic))
- goto xmitframe_coalesce_fail;
-
- /* copy right BIP mic value, total is 128bits, we use the 0~63 bits */
- memcpy(pframe - 8, mic, 8);
- } else { /* unicast mgmt frame TX */
- /* start to encrypt mgmt frame */
- if (subtype == WIFI_DEAUTH || subtype == WIFI_DISASSOC ||
- subtype == WIFI_REASSOCREQ || subtype == WIFI_ACTION) {
- if (pattrib->psta)
- psta = pattrib->psta;
- else
- psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
-
- if (!psta)
- goto xmitframe_coalesce_fail;
-
- if (!(psta->state & _FW_LINKED) || !pxmitframe->buf_addr)
- goto xmitframe_coalesce_fail;
-
- /* according 802.11-2012 standard, these five types are not robust types */
- if (subtype == WIFI_ACTION &&
- (pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_PUBLIC ||
- pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_HT ||
- pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_UNPROTECTED_WNM ||
- pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_SELF_PROTECTED ||
- pframe[WLAN_HDR_A3_LEN] == RTW_WLAN_CATEGORY_P2P))
- goto xmitframe_coalesce_fail;
- /* before encrypt dump the management packet content */
- if (pattrib->encrypt > 0)
- memcpy(pattrib->dot118021x_UncstKey.skey, psta->dot118021x_UncstKey.skey, 16);
- /* bakeup original management packet */
- memcpy(tmp_buf, pframe, pattrib->pktlen);
- /* move to data portion */
- pframe += pattrib->hdrlen;
-
- /* 802.11w unicast management packet must be _AES_ */
- pattrib->iv_len = 8;
- /* it's MIC of AES */
- pattrib->icv_len = 8;
-
- switch (pattrib->encrypt) {
- case _AES_:
- /* set AES IV header */
- AES_IV(pattrib->iv, psta->dot11wtxpn, 0);
- break;
- default:
- goto xmitframe_coalesce_fail;
- }
- /* insert iv header into management frame */
- memcpy(pframe, pattrib->iv, pattrib->iv_len);
- pframe += pattrib->iv_len;
- /* copy mgmt data portion after CCMP header */
- memcpy(pframe, tmp_buf + pattrib->hdrlen,
- pattrib->pktlen - pattrib->hdrlen);
- /* move pframe to end of mgmt pkt */
- pframe += pattrib->pktlen - pattrib->hdrlen;
- /* add 8 bytes CCMP IV header to length */
- pattrib->pktlen += pattrib->iv_len;
- if ((pattrib->icv_len > 0) && (pattrib->bswenc)) {
- memcpy(pframe, pattrib->icv, pattrib->icv_len);
- pframe += pattrib->icv_len;
- }
- /* add 8 bytes MIC */
- pattrib->pktlen += pattrib->icv_len;
- /* set final tx command size */
- pattrib->last_txcmdsz = pattrib->pktlen;
-
- /* set protected bit must be before SW encrypt */
- SetPrivacy(mem_start);
- /* software encrypt */
- xmitframe_swencrypt(padapter, pxmitframe);
- }
- }
-
-xmitframe_coalesce_success:
- spin_unlock_bh(&padapter->security_key_mutex);
- kfree(BIP_AAD);
- return _SUCCESS;
-
-xmitframe_coalesce_fail:
- spin_unlock_bh(&padapter->security_key_mutex);
- kfree(BIP_AAD);
- return _FAIL;
-}
-
-/* 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_update_protection(struct adapter *padapter, u8 *ie, uint ie_len)
-{
- uint protection;
- u8 *perp;
- signed int erp_len;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
-
- switch (pxmitpriv->vcs_setting) {
- case DISABLE_VCS:
- pxmitpriv->vcs = NONE_VCS;
- break;
-
- case ENABLE_VCS:
- break;
-
- case AUTO_VCS:
- default:
- perp = rtw_get_ie(ie, WLAN_EID_ERP_INFO, &erp_len, ie_len);
- if (!perp) {
- pxmitpriv->vcs = NONE_VCS;
- } else {
- protection = (*(perp + 2)) & BIT(1);
- if (protection) {
- if (pregistrypriv->vcs_type == RTS_CTS)
- pxmitpriv->vcs = RTS_CTS;
- else
- pxmitpriv->vcs = CTS_TO_SELF;
- } else {
- pxmitpriv->vcs = NONE_VCS;
- }
- }
-
- break;
- }
-}
-
-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;
- u8 pkt_num = 1;
-
- if ((pxmitframe->frame_tag & 0x0f) == DATA_FRAMETAG) {
- pkt_num = pxmitframe->agg_num;
-
- pmlmepriv->link_detect_info.num_tx_ok_in_period += pkt_num;
-
- pxmitpriv->tx_pkts += pkt_num;
-
- pxmitpriv->tx_bytes += sz;
-
- psta = pxmitframe->attrib.psta;
- if (psta) {
- pstats = &psta->sta_stats;
-
- pstats->tx_pkts += pkt_num;
-
- pstats->tx_bytes += sz;
- }
- }
-}
-
-static struct xmit_buf *__rtw_alloc_cmd_xmitbuf(struct xmit_priv *pxmitpriv,
- enum cmdbuf_type buf_type)
-{
- struct xmit_buf *pxmitbuf = NULL;
-
- pxmitbuf = &pxmitpriv->pcmd_xmitbuf[buf_type];
- if (pxmitbuf) {
- pxmitbuf->priv_data = NULL;
-
- pxmitbuf->len = 0;
- pxmitbuf->pdata = pxmitbuf->ptail = pxmitbuf->phead;
- pxmitbuf->agg_num = 0;
- pxmitbuf->pg_num = 0;
-
- if (pxmitbuf->sctx)
- rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_ALLOC);
- }
-
- return pxmitbuf;
-}
-
-struct xmit_frame *__rtw_alloc_cmdxmitframe(struct xmit_priv *pxmitpriv,
- enum cmdbuf_type buf_type)
-{
- struct xmit_frame *pcmdframe;
- struct xmit_buf *pxmitbuf;
-
- pcmdframe = rtw_alloc_xmitframe(pxmitpriv);
- if (!pcmdframe)
- return NULL;
-
- pxmitbuf = __rtw_alloc_cmd_xmitbuf(pxmitpriv, buf_type);
- if (!pxmitbuf) {
- rtw_free_xmitframe(pxmitpriv, pcmdframe);
- return NULL;
- }
-
- pcmdframe->frame_tag = MGNT_FRAMETAG;
-
- pcmdframe->pxmitbuf = pxmitbuf;
-
- pcmdframe->buf_addr = pxmitbuf->pbuf;
-
- pxmitbuf->priv_data = pcmdframe;
-
- return pcmdframe;
-}
-
-struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv)
-{
- unsigned long irqL;
- struct xmit_buf *pxmitbuf = NULL;
- struct list_head *plist, *phead;
- struct __queue *pfree_queue = &pxmitpriv->free_xmit_extbuf_queue;
-
- spin_lock_irqsave(&pfree_queue->lock, irqL);
-
- if (list_empty(&pfree_queue->queue)) {
- pxmitbuf = NULL;
- } else {
- phead = get_list_head(pfree_queue);
-
- plist = get_next(phead);
-
- 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->len = 0;
- pxmitbuf->pdata = pxmitbuf->phead;
- pxmitbuf->ptail = pxmitbuf->phead;
- pxmitbuf->agg_num = 1;
-
- if (pxmitbuf->sctx)
- rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_ALLOC);
- }
-
- spin_unlock_irqrestore(&pfree_queue->lock, irqL);
-
- return pxmitbuf;
-}
-
-s32 rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf)
-{
- unsigned long irqL;
- struct __queue *pfree_queue = &pxmitpriv->free_xmit_extbuf_queue;
-
- if (!pxmitbuf)
- return _FAIL;
-
- spin_lock_irqsave(&pfree_queue->lock, irqL);
-
- 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, irqL);
-
- return _SUCCESS;
-}
-
-struct xmit_buf *rtw_alloc_xmitbuf(struct xmit_priv *pxmitpriv)
-{
- unsigned long irqL;
- struct xmit_buf *pxmitbuf = NULL;
- struct list_head *plist, *phead;
- struct __queue *pfree_xmitbuf_queue = &pxmitpriv->free_xmitbuf_queue;
-
- spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irqL);
-
- if (list_empty(&pfree_xmitbuf_queue->queue)) {
- pxmitbuf = NULL;
- } else {
- phead = get_list_head(pfree_xmitbuf_queue);
-
- plist = get_next(phead);
-
- pxmitbuf = container_of(plist, struct xmit_buf, list);
-
- list_del_init(&pxmitbuf->list);
- }
-
- if (pxmitbuf) {
- pxmitpriv->free_xmitbuf_cnt--;
-
- pxmitbuf->priv_data = NULL;
-
- pxmitbuf->len = 0;
- pxmitbuf->pdata = pxmitbuf->phead;
- pxmitbuf->ptail = pxmitbuf->phead;
- pxmitbuf->agg_num = 0;
- pxmitbuf->pg_num = 0;
-
- if (pxmitbuf->sctx)
- rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_ALLOC);
- }
-
- spin_unlock_irqrestore(&pfree_xmitbuf_queue->lock, irqL);
-
- return pxmitbuf;
-}
-
-s32 rtw_free_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf)
-{
- unsigned long irqL;
- struct __queue *pfree_xmitbuf_queue = &pxmitpriv->free_xmitbuf_queue;
-
- if (!pxmitbuf)
- return _FAIL;
-
- if (pxmitbuf->sctx)
- rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_FREE);
-
- if (pxmitbuf->buf_tag == XMITBUF_CMD) {
- } else if (pxmitbuf->buf_tag == XMITBUF_MGNT) {
- rtw_free_xmitbuf_ext(pxmitpriv, pxmitbuf);
- } else {
- spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irqL);
-
- 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, irqL);
- }
- return _SUCCESS;
-}
-
-static void rtw_init_xmitframe(struct xmit_frame *pxframe)
-{
- if (pxframe) { /* default value setting */
- pxframe->buf_addr = NULL;
- pxframe->pxmitbuf = NULL;
-
- memset(&pxframe->attrib, 0, sizeof(struct pkt_attrib));
-
- pxframe->frame_tag = DATA_FRAMETAG;
-
- pxframe->pg_num = 1;
- pxframe->agg_num = 1;
- pxframe->ack_report = 0;
- }
-}
-
-/*
- * 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)) {
- pxframe = NULL;
- } else {
- phead = get_list_head(pfree_xmit_queue);
-
- plist = get_next(phead);
-
- pxframe = container_of(plist, struct xmit_frame, list);
-
- list_del_init(&pxframe->list);
- pxmitpriv->free_xmitframe_cnt--;
- }
-
- spin_unlock_bh(&pfree_xmit_queue->lock);
-
- rtw_init_xmitframe(pxframe);
- return pxframe;
-}
-
-struct xmit_frame *rtw_alloc_xmitframe_ext(struct xmit_priv *pxmitpriv)
-{
- struct xmit_frame *pxframe = NULL;
- struct list_head *plist, *phead;
- struct __queue *queue = &pxmitpriv->free_xframe_ext_queue;
-
- spin_lock_bh(&queue->lock);
-
- if (list_empty(&queue->queue)) {
- pxframe = NULL;
- } else {
- phead = get_list_head(queue);
- plist = get_next(phead);
- pxframe = container_of(plist, struct xmit_frame, list);
-
- list_del_init(&pxframe->list);
- pxmitpriv->free_xframe_ext_cnt--;
- }
-
- spin_unlock_bh(&queue->lock);
-
- rtw_init_xmitframe(pxframe);
-
- return pxframe;
-}
-
-struct xmit_frame *rtw_alloc_xmitframe_once(struct xmit_priv *pxmitpriv)
-{
- struct xmit_frame *pxframe = NULL;
- u8 *alloc_addr;
-
- alloc_addr = kzalloc(sizeof(*pxframe) + 4, GFP_ATOMIC);
- if (!alloc_addr)
- goto exit;
-
- pxframe = (struct xmit_frame *)N_BYTE_ALIGMENT((SIZE_PTR)(alloc_addr), 4);
- pxframe->alloc_addr = alloc_addr;
-
- pxframe->padapter = pxmitpriv->adapter;
- pxframe->frame_tag = NULL_FRAMETAG;
-
- pxframe->pkt = NULL;
-
- pxframe->buf_addr = NULL;
- pxframe->pxmitbuf = NULL;
-
- rtw_init_xmitframe(pxframe);
-
-exit:
- return pxframe;
-}
-
-s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe)
-{
- struct __queue *queue = NULL;
- struct adapter *padapter = pxmitpriv->adapter;
- struct sk_buff *pndis_pkt = NULL;
-
- if (!pxmitframe)
- return _SUCCESS;
-
- if (pxmitframe->pkt) {
- pndis_pkt = pxmitframe->pkt;
- pxmitframe->pkt = NULL;
- }
-
- if (pxmitframe->alloc_addr) {
- kfree(pxmitframe->alloc_addr);
- goto check_pkt_complete;
- }
-
- if (pxmitframe->ext_tag == 0)
- queue = &pxmitpriv->free_xmit_queue;
- else if (pxmitframe->ext_tag == 1)
- queue = &pxmitpriv->free_xframe_ext_queue;
-
- spin_lock_bh(&queue->lock);
-
- list_del_init(&pxmitframe->list);
- list_add_tail(&pxmitframe->list, get_list_head(queue));
- if (pxmitframe->ext_tag == 0)
- pxmitpriv->free_xmitframe_cnt++;
- else if (pxmitframe->ext_tag == 1)
- pxmitpriv->free_xframe_ext_cnt++;
-
- spin_unlock_bh(&queue->lock);
-
-check_pkt_complete:
-
- if (pndis_pkt)
- rtw_os_pkt_complete(padapter, pndis_pkt);
-
- return _SUCCESS;
-}
-
-void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, struct __queue *pframequeue)
-{
- struct list_head *plist, *phead, *tmp;
- struct xmit_frame *pxmitframe;
-
- spin_lock_bh(&pframequeue->lock);
-
- phead = get_list_head(pframequeue);
- list_for_each_safe(plist, tmp, phead) {
- pxmitframe = list_entry(plist, struct xmit_frame, list);
-
- rtw_free_xmitframe(pxmitpriv, pxmitframe);
- }
- spin_unlock_bh(&pframequeue->lock);
-}
-
-/*
- * Will enqueue pxmitframe to the proper queue,
- * and indicate it to xx_pending list.....
- */
-static int 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 hw_xmit *phwxmits = padapter->xmitpriv.hwxmits;
-
- psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
- if (pattrib->psta != psta)
- return -ENODEV;
-
- if (!psta)
- return -EINVAL;
-
- if (!(psta->state & _FW_LINKED))
- return -ENETDOWN;
-
- ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index));
-
- if (list_empty(&ptxservq->tx_pending))
- list_add_tail(&ptxservq->tx_pending, get_list_head(phwxmits[ac_index].sta_queue));
-
- list_add_tail(&pxmitframe->list, get_list_head(&ptxservq->sta_pending));
- ptxservq->qcnt++;
- phwxmits[ac_index].accnt++;
-
- return 0;
-}
-
-int rtw_xmitframe_enqueue(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
- int res;
-
- res = rtw_xmit_classifier(padapter, pxmitframe);
- if (res)
- return res;
-
- return 0;
-}
-
-struct tx_servq *rtw_get_sta_pending(struct adapter *padapter, struct sta_info *psta, signed int up, u8 *ac)
-{
- struct tx_servq *ptxservq = NULL;
-
- 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;
-}
-
-void rtw_free_hwxmits(struct adapter *padapter)
-{
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
- kfree(pxmitpriv->hwxmits);
-}
-
-void rtw_init_hwxmits(struct hw_xmit *phwxmit, signed int entry)
-{
- signed int i;
-
- for (i = 0; i < entry; i++, phwxmit++)
- phwxmit->accnt = 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;
-}
-
-static void do_queue_select(struct adapter *padapter, struct pkt_attrib *pattrib)
-{
- u8 qsel;
-
- qsel = pattrib->priority;
-
- pattrib->qsel = qsel;
-}
-
-/*
- * 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)
-{
- static unsigned long start;
-
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- struct xmit_frame *pxmitframe = NULL;
-
- int ret;
-
- if (start == 0)
- start = jiffies;
-
- pxmitframe = rtw_alloc_xmitframe(pxmitpriv);
-
- if (jiffies_to_msecs(jiffies - start) > 2000)
- start = jiffies;
-
- if (!pxmitframe)
- return -1;
-
- ret = update_attrib(padapter, *ppkt, &pxmitframe->attrib);
- if (ret) {
- rtw_free_xmitframe(pxmitpriv, pxmitframe);
- return -1;
- }
- pxmitframe->pkt = *ppkt;
-
- do_queue_select(padapter, &pxmitframe->attrib);
-
- 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);
-
- /* pre_xmitframe */
- if (!rtw_hal_xmit(padapter, pxmitframe))
- return 1;
-
- return 0;
-}
-
-#define RTW_HIQ_FILTER_ALLOW_ALL 0
-#define RTW_HIQ_FILTER_ALLOW_SPECIAL 1
-#define RTW_HIQ_FILTER_DENY_ALL 2
-
-inline bool xmitframe_hiq_filter(struct xmit_frame *xmitframe)
-{
- bool allow = false;
- struct adapter *adapter = xmitframe->padapter;
- struct registry_priv *registry = &adapter->registrypriv;
-
- if (registry->hiq_filter == RTW_HIQ_FILTER_ALLOW_SPECIAL) {
- struct pkt_attrib *attrib = &xmitframe->attrib;
-
- if (attrib->ether_type == ETH_P_ARP ||
- attrib->ether_type == ETH_P_PAE ||
- attrib->dhcp_pkt
- )
- allow = true;
-
- } else if (registry->hiq_filter == RTW_HIQ_FILTER_ALLOW_ALL)
- allow = true;
- else if (registry->hiq_filter == RTW_HIQ_FILTER_DENY_ALL) {
- } else {
- WARN_ON(1);
- }
-
- return allow;
-}
-
-signed int xmitframe_enqueue_for_sleeping_sta(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
- signed 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;
- signed int bmcst = is_multicast_ether_addr(pattrib->ra);
- bool update_tim = false;
-
- if (!check_fwstate(pmlmepriv, WIFI_AP_STATE))
- return ret;
- psta = rtw_get_stainfo(&padapter->stapriv, pattrib->ra);
- if (pattrib->psta != psta)
- return false;
-
- if (!psta)
- return false;
-
- if (!(psta->state & _FW_LINKED))
- return false;
-
- if (pattrib->triggered == 1) {
- if (bmcst && xmitframe_hiq_filter(pxmitframe))
- pattrib->qsel = 0x11;/* HIQ */
-
- return ret;
- }
-
- if (bmcst) {
- spin_lock_bh(&psta->sleep_q.lock);
-
- if (pstapriv->sta_dz_bitmap) { /* if anyone sta is in ps mode */
- /* pattrib->qsel = 0x11;HIQ */
-
- list_del_init(&pxmitframe->list);
-
- list_add_tail(&pxmitframe->list, get_list_head(&psta->sleep_q));
-
- psta->sleepq_len++;
-
- if (!(pstapriv->tim_bitmap & BIT(0)))
- update_tim = true;
-
- pstapriv->tim_bitmap |= BIT(0);
- pstapriv->sta_dz_bitmap |= BIT(0);
-
- if (update_tim)
- update_beacon(padapter, WLAN_EID_TIM, true);
- else
- chk_bmc_sleepq_cmd(padapter);
-
- 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))) {
- if (!(pstapriv->tim_bitmap & BIT(psta->aid)))
- update_tim = true;
-
- pstapriv->tim_bitmap |= BIT(psta->aid);
-
- if (update_tim)
- /* update BCN for TIM IE */
- update_beacon(padapter, WLAN_EID_TIM, true);
- }
-
- 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 __queue *pframequeue)
-{
- signed int ret;
- struct list_head *plist, *phead, *tmp;
- u8 ac_index;
- struct tx_servq *ptxservq;
- struct pkt_attrib *pattrib;
- struct xmit_frame *pxmitframe;
- struct hw_xmit *phwxmits = padapter->xmitpriv.hwxmits;
-
- phead = get_list_head(pframequeue);
- list_for_each_safe(plist, tmp, phead) {
- pxmitframe = list_entry(plist, struct xmit_frame, list);
-
- pattrib = &pxmitframe->attrib;
-
- pattrib->triggered = 0;
-
- ret = xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe);
-
- if (true == ret) {
- ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index));
-
- ptxservq->qcnt--;
- phwxmits[ac_index].accnt--;
- } else {
- }
- }
-}
-
-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, *tmp;
- struct xmit_frame *pxmitframe = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
- psta_bmc = rtw_get_bcmc_stainfo(padapter);
-
- spin_lock_bh(&pxmitpriv->lock);
-
- xmitframe_phead = get_list_head(&psta->sleep_q);
- list_for_each_safe(xmitframe_plist, tmp, xmitframe_phead) {
- pxmitframe = list_entry(xmitframe_plist, struct xmit_frame,
- list);
-
- 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;
-
- rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
- }
-
- if (psta->sleepq_len == 0) {
- if (pstapriv->tim_bitmap & BIT(psta->aid))
- update_mask = BIT(0);
-
- pstapriv->tim_bitmap &= ~BIT(psta->aid);
-
- 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);
- }
-
- /* for BC/MC Frames */
- if (!psta_bmc)
- goto _exit;
-
- if ((pstapriv->sta_dz_bitmap & 0xfffe) == 0x0) { /* no any sta in ps mode */
- xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
- list_for_each_safe(xmitframe_plist, tmp, xmitframe_phead) {
- pxmitframe = list_entry(xmitframe_plist,
- struct xmit_frame, list);
-
- 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;
- rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
- }
-
- if (psta_bmc->sleepq_len == 0) {
- if (pstapriv->tim_bitmap & BIT(0))
- update_mask |= BIT(1);
-
- pstapriv->tim_bitmap &= ~BIT(0);
- pstapriv->sta_dz_bitmap &= ~BIT(0);
- }
- }
-
-_exit:
-
- spin_unlock_bh(&pxmitpriv->lock);
-
- if (update_mask)
- update_beacon(padapter, WLAN_EID_TIM, true);
-}
-
-void xmit_delivery_enabled_frames(struct adapter *padapter, struct sta_info *psta)
-{
- u8 wmmps_ac = 0;
- struct list_head *xmitframe_plist, *xmitframe_phead, *tmp;
- struct xmit_frame *pxmitframe = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
- spin_lock_bh(&pxmitpriv->lock);
-
- xmitframe_phead = get_list_head(&psta->sleep_q);
- list_for_each_safe(xmitframe_plist, tmp, xmitframe_phead) {
- pxmitframe = list_entry(xmitframe_plist, struct xmit_frame,
- 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;
- }
-
- 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;
- rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
-
- if ((psta->sleepq_ac_len == 0) && (!psta->has_legacy_ac) && (wmmps_ac)) {
- pstapriv->tim_bitmap &= ~BIT(psta->aid);
-
- update_beacon(padapter, WLAN_EID_TIM, true);
- }
- }
-
- spin_unlock_bh(&pxmitpriv->lock);
-}
-
-void enqueue_pending_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf)
-{
- struct __queue *pqueue;
- struct adapter *pri_adapter = pxmitpriv->adapter;
-
- pqueue = &pxmitpriv->pending_xmitbuf_queue;
-
- spin_lock_bh(&pqueue->lock);
- list_del_init(&pxmitbuf->list);
- list_add_tail(&pxmitbuf->list, get_list_head(pqueue));
- spin_unlock_bh(&pqueue->lock);
-
- complete(&pri_adapter->xmitpriv.xmit_comp);
-}
-
-void enqueue_pending_xmitbuf_to_head(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf)
-{
- struct __queue *pqueue;
-
- pqueue = &pxmitpriv->pending_xmitbuf_queue;
-
- spin_lock_bh(&pqueue->lock);
- list_del_init(&pxmitbuf->list);
- list_add(&pxmitbuf->list, get_list_head(pqueue));
- spin_unlock_bh(&pqueue->lock);
-}
-
-struct xmit_buf *dequeue_pending_xmitbuf(struct xmit_priv *pxmitpriv)
-{
- struct xmit_buf *pxmitbuf;
- struct __queue *pqueue;
-
- pxmitbuf = NULL;
- pqueue = &pxmitpriv->pending_xmitbuf_queue;
-
- spin_lock_bh(&pqueue->lock);
-
- if (!list_empty(&pqueue->queue)) {
- struct list_head *plist, *phead;
-
- phead = get_list_head(pqueue);
- plist = get_next(phead);
- pxmitbuf = container_of(plist, struct xmit_buf, list);
- list_del_init(&pxmitbuf->list);
- }
-
- spin_unlock_bh(&pqueue->lock);
-
- return pxmitbuf;
-}
-
-struct xmit_buf *dequeue_pending_xmitbuf_under_survey(struct xmit_priv *pxmitpriv)
-{
- struct xmit_buf *pxmitbuf;
- struct __queue *pqueue;
-
- pxmitbuf = NULL;
- pqueue = &pxmitpriv->pending_xmitbuf_queue;
-
- spin_lock_bh(&pqueue->lock);
-
- if (!list_empty(&pqueue->queue)) {
- struct list_head *plist, *phead;
- u8 type;
-
- phead = get_list_head(pqueue);
- plist = phead;
- do {
- plist = get_next(plist);
- if (plist == phead)
- break;
-
- pxmitbuf = container_of(plist, struct xmit_buf, list);
-
- type = GetFrameSubType(pxmitbuf->pbuf + TXDESC_OFFSET);
-
- if ((type == WIFI_PROBEREQ) ||
- (type == WIFI_DATA_NULL) ||
- (type == WIFI_QOS_DATA_NULL)) {
- list_del_init(&pxmitbuf->list);
- break;
- }
- pxmitbuf = NULL;
- } while (1);
- }
-
- spin_unlock_bh(&pqueue->lock);
-
- return pxmitbuf;
-}
-
-signed int check_pending_xmitbuf(struct xmit_priv *pxmitpriv)
-{
- struct __queue *pqueue;
- signed int ret = false;
-
- pqueue = &pxmitpriv->pending_xmitbuf_queue;
-
- spin_lock_bh(&pqueue->lock);
-
- if (!list_empty(&pqueue->queue))
- ret = true;
-
- spin_unlock_bh(&pqueue->lock);
-
- return ret;
-}
-
-int rtw_xmit_thread(void *context)
-{
- s32 err;
- struct adapter *padapter;
-
- err = _SUCCESS;
- padapter = context;
-
- allow_signal(SIGTERM);
-
- do {
- err = rtw_hal_xmit_thread_handler(padapter);
- flush_signals_thread();
- } while (err == _SUCCESS);
-
- complete(&padapter->xmitpriv.terminate_xmitthread_comp);
-
- return 0;
-}
-
-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;
- }
-}
-
-void rtw_sctx_done(struct submit_ctx **sctx)
-{
- rtw_sctx_done_err(sctx, RTW_SCTX_DONE_SUCCESS);
-}
-
-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);
-}
diff --git a/drivers/staging/rtl8723bs/hal/Hal8723BReg.h b/drivers/staging/rtl8723bs/hal/Hal8723BReg.h
deleted file mode 100644
index 0b327a70aa15..000000000000
--- a/drivers/staging/rtl8723bs/hal/Hal8723BReg.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*****************************************************************************
- *Copyright(c) 2009, RealTEK Technology Inc. All Right Reserved.
- *
- * Module: __INC_HAL8723BREG_H
- *
- *
- * Note: 1. Define Mac register address and corresponding bit mask map
- *
- *
- * Export: Constants, macro, functions(API), global variables(None).
- *
- * Abbrev:
- *
- * History:
- * Data Who Remark
- *
- *****************************************************************************/
-#ifndef __INC_HAL8723BREG_H
-#define __INC_HAL8723BREG_H
-
-/* */
-/* */
-/* 0x0100h ~ 0x01FFh MACTOP General Configuration */
-/* */
-/* */
-#define REG_C2HEVT_CMD_SEQ_88XX 0x01A1
-#define REG_C2HEVT_CMD_LEN_88XX 0x01AE
-
-/* */
-/* */
-/* 0x0200h ~ 0x027Fh TXDMA Configuration */
-/* */
-/* */
-#define REG_DWBCN1_CTRL_8723B 0x0228
-
-/* spec version 11 */
-/* */
-/* */
-/* 0x0400h ~ 0x047Fh Protocol Configuration */
-/* */
-/* */
-#define REG_FWHW_TXQ_CTRL_8723B 0x0420
-#define REG_ARFR0_8723B 0x0444
-#define REG_ARFR1_8723B 0x044C
-#define REG_CCK_CHECK_8723B 0x0454
-#define REG_AMPDU_MAX_TIME_8723B 0x0456
-
-#define REG_AMPDU_MAX_LENGTH_8723B 0x0458
-#define REG_DATA_SC_8723B 0x0483
-#define REG_MAX_AGGR_NUM_8723B 0x04CA
-
-/* */
-/* */
-/* 0x0500h ~ 0x05FFh EDCA Configuration */
-/* */
-/* */
-#define REG_PIFS_8723B 0x0512
-
-/* 0x0600h ~ 0x07FFh WMAC Configuration */
-#define REG_RX_PKT_LIMIT_8723B 0x060C
-
-#define REG_TRXPTCL_CTL_8723B 0x0668
-
-#endif /* #ifndef __INC_HAL8723BREG_H */
diff --git a/drivers/staging/rtl8723bs/hal/HalBtc8723b1Ant.c b/drivers/staging/rtl8723bs/hal/HalBtc8723b1Ant.c
deleted file mode 100644
index 0613beaa3752..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalBtc8723b1Ant.c
+++ /dev/null
@@ -1,2595 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include "Mp_Precomp.h"
-
-/* Global variables, these are static variables */
-static struct coex_dm_8723b_1ant GLCoexDm8723b1Ant;
-static struct coex_dm_8723b_1ant *pCoexDm = &GLCoexDm8723b1Ant;
-static struct coex_sta_8723b_1ant GLCoexSta8723b1Ant;
-static struct coex_sta_8723b_1ant *pCoexSta = &GLCoexSta8723b1Ant;
-
-/* local function proto type if needed */
-/* local function start with halbtc8723b1ant_ */
-static u8 halbtc8723b1ant_BtRssiState(
- u8 levelNum, u8 rssiThresh, u8 rssiThresh1
-)
-{
- s32 btRssi = 0;
- u8 btRssiState = pCoexSta->preBtRssiState;
-
- btRssi = pCoexSta->btRssi;
-
- if (levelNum == 2) {
- if (
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW)
- ) {
- if (btRssi >= (rssiThresh + BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))
-
- btRssiState = BTC_RSSI_STATE_HIGH;
- else
- btRssiState = BTC_RSSI_STATE_STAY_LOW;
- } else {
- if (btRssi < rssiThresh)
- btRssiState = BTC_RSSI_STATE_LOW;
- else
- btRssiState = BTC_RSSI_STATE_STAY_HIGH;
- }
- } else if (levelNum == 3) {
- if (rssiThresh > rssiThresh1)
- return pCoexSta->preBtRssiState;
-
- if (
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW)
- ) {
- if (btRssi >= (rssiThresh + BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))
- btRssiState = BTC_RSSI_STATE_MEDIUM;
- else
- btRssiState = BTC_RSSI_STATE_STAY_LOW;
- } else if (
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_MEDIUM)
- ) {
- if (btRssi >= (rssiThresh1 + BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT))
- btRssiState = BTC_RSSI_STATE_HIGH;
- else if (btRssi < rssiThresh)
- btRssiState = BTC_RSSI_STATE_LOW;
- else
- btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;
- } else {
- if (btRssi < rssiThresh1)
- btRssiState = BTC_RSSI_STATE_MEDIUM;
- else
- btRssiState = BTC_RSSI_STATE_STAY_HIGH;
- }
- }
-
- pCoexSta->preBtRssiState = btRssiState;
-
- return btRssiState;
-}
-
-static void halbtc8723b1ant_UpdateRaMask(
- struct btc_coexist *pBtCoexist, bool bForceExec, u32 disRateMask
-)
-{
- pCoexDm->curRaMask = disRateMask;
-
- if (bForceExec || (pCoexDm->preRaMask != pCoexDm->curRaMask))
- pBtCoexist->fBtcSet(
- pBtCoexist,
- BTC_SET_ACT_UPDATE_RAMASK,
- &pCoexDm->curRaMask
- );
- pCoexDm->preRaMask = pCoexDm->curRaMask;
-}
-
-static void halbtc8723b1ant_AutoRateFallbackRetry(
- struct btc_coexist *pBtCoexist, bool bForceExec, u8 type
-)
-{
- bool bWifiUnderBMode = false;
-
- pCoexDm->curArfrType = type;
-
- if (bForceExec || (pCoexDm->preArfrType != pCoexDm->curArfrType)) {
- switch (pCoexDm->curArfrType) {
- case 0: /* normal mode */
- pBtCoexist->fBtcWrite4Byte(
- pBtCoexist, 0x430, pCoexDm->backupArfrCnt1
- );
- pBtCoexist->fBtcWrite4Byte(
- pBtCoexist, 0x434, pCoexDm->backupArfrCnt2
- );
- break;
- case 1:
- pBtCoexist->fBtcGet(
- pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode
- );
- if (bWifiUnderBMode) {
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, 0x0);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, 0x01010101);
- } else {
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x430, 0x0);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x434, 0x04030201);
- }
- break;
- default:
- break;
- }
- }
-
- pCoexDm->preArfrType = pCoexDm->curArfrType;
-}
-
-static void halbtc8723b1ant_RetryLimit(
- struct btc_coexist *pBtCoexist, bool bForceExec, u8 type
-)
-{
- pCoexDm->curRetryLimitType = type;
-
- if (
- bForceExec ||
- (pCoexDm->preRetryLimitType != pCoexDm->curRetryLimitType)
- ) {
- switch (pCoexDm->curRetryLimitType) {
- case 0: /* normal mode */
- pBtCoexist->fBtcWrite2Byte(
- pBtCoexist, 0x42a, pCoexDm->backupRetryLimit
- );
- break;
- case 1: /* retry limit =8 */
- pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x42a, 0x0808);
- break;
- default:
- break;
- }
- }
-
- pCoexDm->preRetryLimitType = pCoexDm->curRetryLimitType;
-}
-
-static void halbtc8723b1ant_AmpduMaxTime(
- struct btc_coexist *pBtCoexist, bool bForceExec, u8 type
-)
-{
- pCoexDm->curAmpduTimeType = type;
-
- if (
- bForceExec || (pCoexDm->preAmpduTimeType != pCoexDm->curAmpduTimeType)
- ) {
- switch (pCoexDm->curAmpduTimeType) {
- case 0: /* normal mode */
- pBtCoexist->fBtcWrite1Byte(
- pBtCoexist, 0x456, pCoexDm->backupAmpduMaxTime
- );
- break;
- case 1: /* AMPDU timw = 0x38 * 32us */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x456, 0x38);
- break;
- default:
- break;
- }
- }
-
- pCoexDm->preAmpduTimeType = pCoexDm->curAmpduTimeType;
-}
-
-static void halbtc8723b1ant_LimitedTx(
- struct btc_coexist *pBtCoexist,
- bool bForceExec,
- u8 raMaskType,
- u8 arfrType,
- u8 retryLimitType,
- u8 ampduTimeType
-)
-{
- switch (raMaskType) {
- case 0: /* normal mode */
- halbtc8723b1ant_UpdateRaMask(pBtCoexist, bForceExec, 0x0);
- break;
- case 1: /* disable cck 1/2 */
- halbtc8723b1ant_UpdateRaMask(pBtCoexist, bForceExec, 0x00000003);
- break;
- case 2: /* disable cck 1/2/5.5, ofdm 6/9/12/18/24, mcs 0/1/2/3/4 */
- halbtc8723b1ant_UpdateRaMask(pBtCoexist, bForceExec, 0x0001f1f7);
- break;
- default:
- break;
- }
-
- halbtc8723b1ant_AutoRateFallbackRetry(pBtCoexist, bForceExec, arfrType);
- halbtc8723b1ant_RetryLimit(pBtCoexist, bForceExec, retryLimitType);
- halbtc8723b1ant_AmpduMaxTime(pBtCoexist, bForceExec, ampduTimeType);
-}
-
-static void halbtc8723b1ant_LimitedRx(
- struct btc_coexist *pBtCoexist,
- bool bForceExec,
- bool bRejApAggPkt,
- bool bBtCtrlAggBufSize,
- u8 aggBufSize
-)
-{
- bool bRejectRxAgg = bRejApAggPkt;
- bool bBtCtrlRxAggSize = bBtCtrlAggBufSize;
- u8 rxAggSize = aggBufSize;
-
- /* */
- /* Rx Aggregation related setting */
- /* */
- pBtCoexist->fBtcSet(
- pBtCoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT, &bRejectRxAgg
- );
- /* decide BT control aggregation buf size or not */
- pBtCoexist->fBtcSet(
- pBtCoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE, &bBtCtrlRxAggSize
- );
- /* aggregation buf size, only work when BT control Rx aggregation size. */
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_AGG_BUF_SIZE, &rxAggSize);
- /* real update aggregation setting */
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);
-}
-
-static void halbtc8723b1ant_QueryBtInfo(struct btc_coexist *pBtCoexist)
-{
- u8 H2C_Parameter[1] = {0};
-
- pCoexSta->bC2hBtInfoReqSent = true;
-
- H2C_Parameter[0] |= BIT(0); /* trigger */
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);
-}
-
-static void halbtc8723b1ant_MonitorBtCtr(struct btc_coexist *pBtCoexist)
-{
- u32 regHPTxRx, regLPTxRx, u4Tmp;
- u32 regHPTx = 0, regHPRx = 0, regLPTx = 0, regLPRx = 0;
- static u8 NumOfBtCounterChk;
-
- /* to avoid 0x76e[3] = 1 (WLAN_Act control by PTA) during IPS */
- /* if (! (pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e) & 0x8)) */
-
- if (pCoexSta->bUnderIps) {
- pCoexSta->highPriorityTx = 65535;
- pCoexSta->highPriorityRx = 65535;
- pCoexSta->lowPriorityTx = 65535;
- pCoexSta->lowPriorityRx = 65535;
- return;
- }
-
- regHPTxRx = 0x770;
- regLPTxRx = 0x774;
-
- u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regHPTxRx);
- regHPTx = u4Tmp & bMaskLWord;
- regHPRx = (u4Tmp & bMaskHWord) >> 16;
-
- u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, regLPTxRx);
- regLPTx = u4Tmp & bMaskLWord;
- regLPRx = (u4Tmp & bMaskHWord) >> 16;
-
- pCoexSta->highPriorityTx = regHPTx;
- pCoexSta->highPriorityRx = regHPRx;
- pCoexSta->lowPriorityTx = regLPTx;
- pCoexSta->lowPriorityRx = regLPRx;
-
- if ((pCoexSta->lowPriorityTx >= 1050) && (!pCoexSta->bC2hBtInquiryPage))
- pCoexSta->popEventCnt++;
-
- /* reset counter */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);
-
- if ((regHPTx == 0) && (regHPRx == 0) && (regLPTx == 0) && (regLPRx == 0)) {
- NumOfBtCounterChk++;
- if (NumOfBtCounterChk >= 3) {
- halbtc8723b1ant_QueryBtInfo(pBtCoexist);
- NumOfBtCounterChk = 0;
- }
- }
-}
-
-static void halbtc8723b1ant_MonitorWiFiCtr(struct btc_coexist *pBtCoexist)
-{
- s32 wifiRssi = 0;
- bool bWifiBusy = false, bWifiUnderBMode = false;
- static u8 nCCKLockCounter;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);
- pBtCoexist->fBtcGet(
- pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode
- );
-
- if (pCoexSta->bUnderIps) {
- pCoexSta->nCRCOK_CCK = 0;
- pCoexSta->nCRCOK_11g = 0;
- pCoexSta->nCRCOK_11n = 0;
- pCoexSta->nCRCOK_11nAgg = 0;
-
- pCoexSta->nCRCErr_CCK = 0;
- pCoexSta->nCRCErr_11g = 0;
- pCoexSta->nCRCErr_11n = 0;
- pCoexSta->nCRCErr_11nAgg = 0;
- } else {
- pCoexSta->nCRCOK_CCK = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf88);
- pCoexSta->nCRCOK_11g = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf94);
- pCoexSta->nCRCOK_11n = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf90);
- pCoexSta->nCRCOK_11nAgg = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xfb8);
-
- pCoexSta->nCRCErr_CCK = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0xf84);
- pCoexSta->nCRCErr_11g = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf96);
- pCoexSta->nCRCErr_11n = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xf92);
- pCoexSta->nCRCErr_11nAgg = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0xfba);
- }
-
- /* reset counter */
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xf16, 0x1, 0x1);
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0xf16, 0x1, 0x0);
-
- if (bWifiBusy && (wifiRssi >= 30) && !bWifiUnderBMode) {
- if (
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_SCO_BUSY)
- ) {
- if (
- pCoexSta->nCRCOK_CCK > (
- pCoexSta->nCRCOK_11g +
- pCoexSta->nCRCOK_11n +
- pCoexSta->nCRCOK_11nAgg
- )
- ) {
- if (nCCKLockCounter < 5)
- nCCKLockCounter++;
- } else {
- if (nCCKLockCounter > 0)
- nCCKLockCounter--;
- }
-
- } else {
- if (nCCKLockCounter > 0)
- nCCKLockCounter--;
- }
- } else {
- if (nCCKLockCounter > 0)
- nCCKLockCounter--;
- }
-
- if (!pCoexSta->bPreCCKLock) {
-
- if (nCCKLockCounter >= 5)
- pCoexSta->bCCKLock = true;
- else
- pCoexSta->bCCKLock = false;
- } else {
- if (nCCKLockCounter == 0)
- pCoexSta->bCCKLock = false;
- else
- pCoexSta->bCCKLock = true;
- }
-
- pCoexSta->bPreCCKLock = pCoexSta->bCCKLock;
-}
-
-static bool halbtc8723b1ant_IsWifiStatusChanged(struct btc_coexist *pBtCoexist)
-{
- static bool bPreWifiBusy, bPreUnder4way, bPreBtHsOn;
- bool bWifiBusy = false, bUnder4way = false, bBtHsOn = false;
- bool bWifiConnected = false;
-
- pBtCoexist->fBtcGet(
- pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected
- );
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
- pBtCoexist->fBtcGet(
- pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way
- );
-
- if (bWifiConnected) {
- if (bWifiBusy != bPreWifiBusy) {
- bPreWifiBusy = bWifiBusy;
- return true;
- }
-
- if (bUnder4way != bPreUnder4way) {
- bPreUnder4way = bUnder4way;
- return true;
- }
-
- if (bBtHsOn != bPreBtHsOn) {
- bPreBtHsOn = bBtHsOn;
- return true;
- }
- }
-
- return false;
-}
-
-static void halbtc8723b1ant_UpdateBtLinkInfo(struct btc_coexist *pBtCoexist)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
- bool bBtHsOn = false;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
-
- pBtLinkInfo->bBtLinkExist = pCoexSta->bBtLinkExist;
- pBtLinkInfo->bScoExist = pCoexSta->bScoExist;
- pBtLinkInfo->bA2dpExist = pCoexSta->bA2dpExist;
- pBtLinkInfo->bPanExist = pCoexSta->bPanExist;
- pBtLinkInfo->bHidExist = pCoexSta->bHidExist;
-
- /* work around for HS mode. */
- if (bBtHsOn) {
- pBtLinkInfo->bPanExist = true;
- pBtLinkInfo->bBtLinkExist = true;
- }
-
- /* check if Sco only */
- if (
- pBtLinkInfo->bScoExist &&
- !pBtLinkInfo->bA2dpExist &&
- !pBtLinkInfo->bPanExist &&
- !pBtLinkInfo->bHidExist
- )
- pBtLinkInfo->bScoOnly = true;
- else
- pBtLinkInfo->bScoOnly = false;
-
- /* check if A2dp only */
- if (
- !pBtLinkInfo->bScoExist &&
- pBtLinkInfo->bA2dpExist &&
- !pBtLinkInfo->bPanExist &&
- !pBtLinkInfo->bHidExist
- )
- pBtLinkInfo->bA2dpOnly = true;
- else
- pBtLinkInfo->bA2dpOnly = false;
-
- /* check if Pan only */
- if (
- !pBtLinkInfo->bScoExist &&
- !pBtLinkInfo->bA2dpExist &&
- pBtLinkInfo->bPanExist &&
- !pBtLinkInfo->bHidExist
- )
- pBtLinkInfo->bPanOnly = true;
- else
- pBtLinkInfo->bPanOnly = false;
-
- /* check if Hid only */
- if (
- !pBtLinkInfo->bScoExist &&
- !pBtLinkInfo->bA2dpExist &&
- !pBtLinkInfo->bPanExist &&
- pBtLinkInfo->bHidExist
- )
- pBtLinkInfo->bHidOnly = true;
- else
- pBtLinkInfo->bHidOnly = false;
-}
-
-static u8 halbtc8723b1ant_ActionAlgorithm(struct btc_coexist *pBtCoexist)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
- bool bBtHsOn = false;
- u8 algorithm = BT_8723B_1ANT_COEX_ALGO_UNDEFINED;
- u8 numOfDiffProfile = 0;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
-
- if (!pBtLinkInfo->bBtLinkExist)
- return algorithm;
-
- if (pBtLinkInfo->bScoExist)
- numOfDiffProfile++;
- if (pBtLinkInfo->bHidExist)
- numOfDiffProfile++;
- if (pBtLinkInfo->bPanExist)
- numOfDiffProfile++;
- if (pBtLinkInfo->bA2dpExist)
- numOfDiffProfile++;
-
- if (numOfDiffProfile == 1) {
- if (pBtLinkInfo->bScoExist) {
- algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;
- } else {
- if (pBtLinkInfo->bHidExist) {
- algorithm = BT_8723B_1ANT_COEX_ALGO_HID;
- } else if (pBtLinkInfo->bA2dpExist) {
- algorithm = BT_8723B_1ANT_COEX_ALGO_A2DP;
- } else if (pBtLinkInfo->bPanExist) {
- if (bBtHsOn)
- algorithm = BT_8723B_1ANT_COEX_ALGO_PANHS;
- else
- algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR;
- }
- }
- } else if (numOfDiffProfile == 2) {
- if (pBtLinkInfo->bScoExist) {
- if (pBtLinkInfo->bHidExist) {
- algorithm = BT_8723B_1ANT_COEX_ALGO_HID;
- } else if (pBtLinkInfo->bA2dpExist) {
- algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;
- } else if (pBtLinkInfo->bPanExist) {
- if (bBtHsOn)
- algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;
- else
- algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;
- }
- } else {
- if (pBtLinkInfo->bHidExist && pBtLinkInfo->bA2dpExist) {
- algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;
- } else if (pBtLinkInfo->bHidExist && pBtLinkInfo->bPanExist) {
- if (bBtHsOn)
- algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;
- else
- algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;
- } else if (pBtLinkInfo->bPanExist && pBtLinkInfo->bA2dpExist) {
- if (bBtHsOn)
- algorithm = BT_8723B_1ANT_COEX_ALGO_A2DP_PANHS;
- else
- algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_A2DP;
- }
- }
- } else if (numOfDiffProfile == 3) {
- if (pBtLinkInfo->bScoExist) {
- if (pBtLinkInfo->bHidExist && pBtLinkInfo->bA2dpExist) {
- algorithm = BT_8723B_1ANT_COEX_ALGO_HID;
- } else if (
- pBtLinkInfo->bHidExist && pBtLinkInfo->bPanExist
- ) {
- if (bBtHsOn)
- algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;
- else
- algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;
- } else if (pBtLinkInfo->bPanExist && pBtLinkInfo->bA2dpExist) {
- if (bBtHsOn)
- algorithm = BT_8723B_1ANT_COEX_ALGO_SCO;
- else
- algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;
- }
- } else {
- if (
- pBtLinkInfo->bHidExist &&
- pBtLinkInfo->bPanExist &&
- pBtLinkInfo->bA2dpExist
- ) {
- if (bBtHsOn)
- algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP;
- else
- algorithm = BT_8723B_1ANT_COEX_ALGO_HID_A2DP_PANEDR;
- }
- }
- } else if (numOfDiffProfile >= 3) {
- if (pBtLinkInfo->bScoExist) {
- if (
- pBtLinkInfo->bHidExist &&
- pBtLinkInfo->bPanExist &&
- pBtLinkInfo->bA2dpExist
- ) {
- if (!bBtHsOn)
- algorithm = BT_8723B_1ANT_COEX_ALGO_PANEDR_HID;
-
- }
- }
- }
-
- return algorithm;
-}
-
-static void halbtc8723b1ant_SetSwPenaltyTxRateAdaptive(
- struct btc_coexist *pBtCoexist, bool bLowPenaltyRa
-)
-{
- u8 H2C_Parameter[6] = {0};
-
- H2C_Parameter[0] = 0x6; /* opCode, 0x6 = Retry_Penalty */
-
- if (bLowPenaltyRa) {
- H2C_Parameter[1] |= BIT(0);
- H2C_Parameter[2] = 0x00; /* normal rate except MCS7/6/5, OFDM54/48/36 */
- H2C_Parameter[3] = 0xf7; /* MCS7 or OFDM54 */
- H2C_Parameter[4] = 0xf8; /* MCS6 or OFDM48 */
- H2C_Parameter[5] = 0xf9; /* MCS5 or OFDM36 */
- }
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);
-}
-
-static void halbtc8723b1ant_LowPenaltyRa(
- struct btc_coexist *pBtCoexist, bool bForceExec, bool bLowPenaltyRa
-)
-{
- pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;
-
- if (!bForceExec) {
- if (pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa)
- return;
- }
- halbtc8723b1ant_SetSwPenaltyTxRateAdaptive(
- pBtCoexist, pCoexDm->bCurLowPenaltyRa
- );
-
- pCoexDm->bPreLowPenaltyRa = pCoexDm->bCurLowPenaltyRa;
-}
-
-static void halbtc8723b1ant_SetCoexTable(
- struct btc_coexist *pBtCoexist,
- u32 val0x6c0,
- u32 val0x6c4,
- u32 val0x6c8,
- u8 val0x6cc
-)
-{
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);
-
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);
-
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);
-
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);
-}
-
-static void halbtc8723b1ant_CoexTable(
- struct btc_coexist *pBtCoexist,
- bool bForceExec,
- u32 val0x6c0,
- u32 val0x6c4,
- u32 val0x6c8,
- u8 val0x6cc
-)
-{
- pCoexDm->curVal0x6c0 = val0x6c0;
- pCoexDm->curVal0x6c4 = val0x6c4;
- pCoexDm->curVal0x6c8 = val0x6c8;
- pCoexDm->curVal0x6cc = val0x6cc;
-
- if (!bForceExec) {
- if (
- (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&
- (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&
- (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&
- (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc)
- )
- return;
- }
-
- halbtc8723b1ant_SetCoexTable(
- pBtCoexist, val0x6c0, val0x6c4, val0x6c8, val0x6cc
- );
-
- pCoexDm->preVal0x6c0 = pCoexDm->curVal0x6c0;
- pCoexDm->preVal0x6c4 = pCoexDm->curVal0x6c4;
- pCoexDm->preVal0x6c8 = pCoexDm->curVal0x6c8;
- pCoexDm->preVal0x6cc = pCoexDm->curVal0x6cc;
-}
-
-static void halbtc8723b1ant_CoexTableWithType(
- struct btc_coexist *pBtCoexist, bool bForceExec, u8 type
-)
-{
- static const u32 table[8][2] = {
- {0x55555555, 0x55555555},
- {0x55555555, 0x5a5a5a5a},
- {0x5a5a5a5a, 0x5a5a5a5a},
- {0xaaaa5555, 0xaaaa5a5a},
- {0x55555555, 0xaaaa5a5a},
- {0x5a5a5a5a, 0xaaaa5a5a},
- {0x55555555, 0xaaaaaaaa},
- {0xaaaaaaaa, 0xaaaaaaaa}
- };
-
- pCoexSta->nCoexTableType = type;
-
- if (type < 8)
- halbtc8723b1ant_CoexTable(pBtCoexist, bForceExec, table[type][0],
- table[type][1], 0xffffff, 0x3);
-}
-
-static void halbtc8723b1ant_SetFwIgnoreWlanAct(
- struct btc_coexist *pBtCoexist, bool bEnable
-)
-{
- u8 H2C_Parameter[1] = {0};
-
- if (bEnable)
- H2C_Parameter[0] |= BIT(0); /* function enable */
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);
-}
-
-static void halbtc8723b1ant_IgnoreWlanAct(
- struct btc_coexist *pBtCoexist, bool bForceExec, bool bEnable
-)
-{
- pCoexDm->bCurIgnoreWlanAct = bEnable;
-
- if (!bForceExec) {
- if (pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)
- return;
- }
- halbtc8723b1ant_SetFwIgnoreWlanAct(pBtCoexist, bEnable);
-
- pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;
-}
-
-static void halbtc8723b1ant_SetLpsRpwm(
- struct btc_coexist *pBtCoexist, u8 lpsVal, u8 rpwmVal
-)
-{
- u8 lps = lpsVal;
- u8 rpwm = rpwmVal;
-
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_LPS_VAL, &lps);
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RPWM_VAL, &rpwm);
-}
-
-static void halbtc8723b1ant_LpsRpwm(
- struct btc_coexist *pBtCoexist, bool bForceExec, u8 lpsVal, u8 rpwmVal
-)
-{
- pCoexDm->curLps = lpsVal;
- pCoexDm->curRpwm = rpwmVal;
-
- if (!bForceExec) {
- if (
- (pCoexDm->preLps == pCoexDm->curLps) &&
- (pCoexDm->preRpwm == pCoexDm->curRpwm)
- ) {
- return;
- }
- }
- halbtc8723b1ant_SetLpsRpwm(pBtCoexist, lpsVal, rpwmVal);
-
- pCoexDm->preLps = pCoexDm->curLps;
- pCoexDm->preRpwm = pCoexDm->curRpwm;
-}
-
-static void halbtc8723b1ant_SwMechanism(
- struct btc_coexist *pBtCoexist, bool bLowPenaltyRA
-)
-{
- halbtc8723b1ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);
-}
-
-static void halbtc8723b1ant_SetAntPath(
- struct btc_coexist *pBtCoexist, u8 antPosType, bool bInitHwCfg, bool bWifiOff
-)
-{
- struct btc_board_info *pBoardInfo = &pBtCoexist->boardInfo;
- u32 fwVer = 0, u4Tmp = 0, cntBtCalChk = 0;
- bool bPgExtSwitch = false;
- bool bUseExtSwitch = false;
- bool bIsInMpMode = false;
- u8 H2C_Parameter[2] = {0}, u1Tmp = 0;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_EXT_SWITCH, &bPgExtSwitch);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer); /* [31:16]=fw ver, [15:0]=fw sub ver */
-
- if ((fwVer > 0 && fwVer < 0xc0000) || bPgExtSwitch)
- bUseExtSwitch = true;
-
- if (bInitHwCfg) {
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780); /* WiFi TRx Mask on */
- pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15); /* BT TRx Mask on */
-
- if (fwVer >= 0x180000) {
- /* Use H2C to set GNT_BT to HIGH */
- H2C_Parameter[0] = 1;
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);
- } else { /* set grant_bt to high */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x18);
- }
-
- /* set wlan_act control by PTA */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4);
-
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x1); /* BT select s0/s1 is controlled by WiFi */
-
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x39, 0x8, 0x1);
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x974, 0xff);
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x944, 0x3, 0x3);
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x930, 0x77);
- } else if (bWifiOff) {
- if (fwVer >= 0x180000) {
- /* Use H2C to set GNT_BT to HIGH */
- H2C_Parameter[0] = 1;
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);
- } else { /* set grant_bt to high */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x18);
- }
-
- /* set wlan_act to always low */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4);
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_IS_IN_MP_MODE, &bIsInMpMode);
- if (!bIsInMpMode)
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x0); /* BT select s0/s1 is controlled by BT */
- else
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x1); /* BT select s0/s1 is controlled by WiFi */
-
- /* 0x4c[24:23]= 00, Set Antenna control by BT_RFE_CTRL BT Vendor 0xac = 0xf002 */
- u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
- u4Tmp &= ~BIT(23);
- u4Tmp &= ~BIT(24);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);
- } else {
- /* Use H2C to set GNT_BT to LOW */
- if (fwVer >= 0x180000) {
- if (pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765) != 0) {
- H2C_Parameter[0] = 0;
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);
- }
- } else {
- /* BT calibration check */
- while (cntBtCalChk <= 20) {
- u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x49d);
- cntBtCalChk++;
-
- if (u1Tmp & BIT(0))
- mdelay(50);
- else
- break;
- }
-
- /* set grant_bt to PTA */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x0);
- }
-
- if (pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x76e) != 0xc)
- /* set wlan_act control by PTA */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc);
- }
-
- if (bUseExtSwitch) {
- if (bInitHwCfg) {
- /* 0x4c[23]= 0, 0x4c[24]= 1 Antenna control by WL/BT */
- u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
- u4Tmp &= ~BIT(23);
- u4Tmp |= BIT(24);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);
-
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0); /* fixed internal switch S1->WiFi, S0->BT */
-
- if (pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT) {
- /* tell firmware "no antenna inverse" */
- H2C_Parameter[0] = 0;
- H2C_Parameter[1] = 1; /* ext switch type */
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);
- } else {
- /* tell firmware "antenna inverse" */
- H2C_Parameter[0] = 1;
- H2C_Parameter[1] = 1; /* ext switch type */
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);
- }
- }
-
- /* ext switch setting */
- switch (antPosType) {
- case BTC_ANT_PATH_WIFI:
- if (pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x1);
- else
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x2);
- break;
- case BTC_ANT_PATH_BT:
- if (pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x2);
- else
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x1);
- break;
- default:
- case BTC_ANT_PATH_PTA:
- if (pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x1);
- else
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x2);
- break;
- }
-
- } else {
- if (bInitHwCfg) {
- /* 0x4c[23]= 1, 0x4c[24]= 0 Antenna control by 0x64 */
- u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
- u4Tmp |= BIT(23);
- u4Tmp &= ~BIT(24);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);
-
- /* Fix Ext switch Main->S1, Aux->S0 */
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x64, 0x1, 0x0);
-
- if (pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT) {
-
- /* tell firmware "no antenna inverse" */
- H2C_Parameter[0] = 0;
- H2C_Parameter[1] = 0; /* internal switch type */
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);
- } else {
-
- /* tell firmware "antenna inverse" */
- H2C_Parameter[0] = 1;
- H2C_Parameter[1] = 0; /* internal switch type */
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);
- }
- }
-
- /* internal switch setting */
- switch (antPosType) {
- case BTC_ANT_PATH_WIFI:
- if (pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);
- else
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x280);
- break;
- case BTC_ANT_PATH_BT:
- if (pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x280);
- else
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);
- break;
- default:
- case BTC_ANT_PATH_PTA:
- if (pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT)
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x200);
- else
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x80);
- break;
- }
- }
-}
-
-static void halbtc8723b1ant_SetFwPstdma(
- struct btc_coexist *pBtCoexist, u8 byte1, u8 byte2, u8 byte3, u8 byte4, u8 byte5
-)
-{
- u8 H2C_Parameter[5] = {0};
- u8 realByte1 = byte1, realByte5 = byte5;
- bool bApEnable = false;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);
-
- if (bApEnable) {
- if (byte1 & BIT(4) && !(byte1 & BIT(5))) {
- realByte1 &= ~BIT(4);
- realByte1 |= BIT(5);
-
- realByte5 |= BIT(5);
- realByte5 &= ~BIT(6);
- }
- }
-
- H2C_Parameter[0] = realByte1;
- H2C_Parameter[1] = byte2;
- H2C_Parameter[2] = byte3;
- H2C_Parameter[3] = byte4;
- H2C_Parameter[4] = realByte5;
-
- pCoexDm->psTdmaPara[0] = realByte1;
- pCoexDm->psTdmaPara[1] = byte2;
- pCoexDm->psTdmaPara[2] = byte3;
- pCoexDm->psTdmaPara[3] = byte4;
- pCoexDm->psTdmaPara[4] = realByte5;
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);
-}
-
-static void halbtc8723b1ant_PsTdma(
- struct btc_coexist *pBtCoexist, bool bForceExec, bool bTurnOn, u8 type
-)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
- bool bWifiBusy = false;
- u8 rssiAdjustVal = 0;
- u8 psTdmaByte4Val = 0x50, psTdmaByte0Val = 0x51, psTdmaByte3Val = 0x10;
- s8 nWiFiDurationAdjust = 0x0;
- /* u32 fwVer = 0; */
-
- pCoexDm->bCurPsTdmaOn = bTurnOn;
- pCoexDm->curPsTdma = type;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
-
- if (!bForceExec) {
- if (
- (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&
- (pCoexDm->prePsTdma == pCoexDm->curPsTdma)
- )
- return;
- }
-
- if (pCoexSta->nScanAPNum <= 5)
- nWiFiDurationAdjust = 5;
- else if (pCoexSta->nScanAPNum >= 40)
- nWiFiDurationAdjust = -15;
- else if (pCoexSta->nScanAPNum >= 20)
- nWiFiDurationAdjust = -10;
-
- if (!pCoexSta->bForceLpsOn) { /* only for A2DP-only case 1/2/9/11 */
- psTdmaByte0Val = 0x61; /* no null-pkt */
- psTdmaByte3Val = 0x11; /* no tx-pause at BT-slot */
- psTdmaByte4Val = 0x10; /* 0x778 = d/1 toggle */
- }
-
- if (bTurnOn) {
- if (pBtLinkInfo->bSlaveRole)
- psTdmaByte4Val = psTdmaByte4Val | 0x1; /* 0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts) */
-
- switch (type) {
- default:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x51, 0x1a, 0x1a, 0x0, psTdmaByte4Val
- );
- break;
- case 1:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist,
- psTdmaByte0Val,
- 0x3a + nWiFiDurationAdjust,
- 0x03,
- psTdmaByte3Val,
- psTdmaByte4Val
- );
- break;
- case 2:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist,
- psTdmaByte0Val,
- 0x2d + nWiFiDurationAdjust,
- 0x03,
- psTdmaByte3Val,
- psTdmaByte4Val
- );
- break;
- case 3:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x51, 0x1d, 0x1d, 0x0, 0x10
- );
- break;
- case 4:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x93, 0x15, 0x3, 0x14, 0x0
- );
- break;
- case 5:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x61, 0x15, 0x3, 0x11, 0x10
- );
- break;
- case 6:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x61, 0x20, 0x3, 0x11, 0x11
- );
- break;
- case 7:
- halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x13, 0xc, 0x5, 0x0, 0x0);
- break;
- case 8:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0
- );
- break;
- case 9:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist,
- psTdmaByte0Val,
- 0x21,
- 0x3,
- psTdmaByte3Val,
- psTdmaByte4Val
- );
- break;
- case 10:
- halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x13, 0xa, 0xa, 0x0, 0x40);
- break;
- case 11:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist,
- psTdmaByte0Val,
- 0x21,
- 0x03,
- psTdmaByte3Val,
- psTdmaByte4Val
- );
- break;
- case 12:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x51, 0x0a, 0x0a, 0x0, 0x50
- );
- break;
- case 13:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x51, 0x12, 0x12, 0x0, 0x10
- );
- break;
- case 14:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x51, 0x21, 0x3, 0x10, psTdmaByte4Val
- );
- break;
- case 15:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x13, 0xa, 0x3, 0x8, 0x0
- );
- break;
- case 16:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x93, 0x15, 0x3, 0x10, 0x0
- );
- break;
- case 18:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x93, 0x25, 0x3, 0x10, 0x0
- );
- break;
- case 20:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x61, 0x3f, 0x03, 0x11, 0x10
-
- );
- break;
- case 21:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x61, 0x25, 0x03, 0x11, 0x11
- );
- break;
- case 22:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x61, 0x25, 0x03, 0x11, 0x10
- );
- break;
- case 23:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x18
- );
- break;
- case 24:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0xe3, 0x15, 0x3, 0x31, 0x18
- );
- break;
- case 25:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0xe3, 0xa, 0x3, 0x31, 0x18
- );
- break;
- case 26:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0xe3, 0xa, 0x3, 0x31, 0x18
- );
- break;
- case 27:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0xe3, 0x25, 0x3, 0x31, 0x98
- );
- break;
- case 28:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x69, 0x25, 0x3, 0x31, 0x0
- );
- break;
- case 29:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0xab, 0x1a, 0x1a, 0x1, 0x10
- );
- break;
- case 30:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x51, 0x30, 0x3, 0x10, 0x10
- );
- break;
- case 31:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0xd3, 0x1a, 0x1a, 0x0, 0x58
- );
- break;
- case 32:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x61, 0x35, 0x3, 0x11, 0x11
- );
- break;
- case 33:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0xa3, 0x25, 0x3, 0x30, 0x90
- );
- break;
- case 34:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x53, 0x1a, 0x1a, 0x0, 0x10
- );
- break;
- case 35:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x63, 0x1a, 0x1a, 0x0, 0x10
- );
- break;
- case 36:
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0xd3, 0x12, 0x3, 0x14, 0x50
- );
- break;
- case 40: /* SoftAP only with no sta associated, BT disable , TDMA mode for power saving */
- /* here softap mode screen off will cost 70-80mA for phone */
- halbtc8723b1ant_SetFwPstdma(
- pBtCoexist, 0x23, 0x18, 0x00, 0x10, 0x24
- );
- break;
- }
- } else {
-
- /* disable PS tdma */
- switch (type) {
- case 8: /* PTA Control */
- halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x8, 0x0, 0x0, 0x0, 0x0);
- halbtc8723b1ant_SetAntPath(
- pBtCoexist, BTC_ANT_PATH_PTA, false, false
- );
- break;
- case 0:
- default: /* Software control, Antenna at BT side */
- halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);
- halbtc8723b1ant_SetAntPath(
- pBtCoexist, BTC_ANT_PATH_BT, false, false
- );
- break;
- case 9: /* Software control, Antenna at WiFi side */
- halbtc8723b1ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x0, 0x0);
- halbtc8723b1ant_SetAntPath(
- pBtCoexist, BTC_ANT_PATH_WIFI, false, false
- );
- break;
- }
- }
-
- rssiAdjustVal = 0;
- pBtCoexist->fBtcSet(
- pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE, &rssiAdjustVal
- );
-
- /* update pre state */
- pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;
- pCoexDm->prePsTdma = pCoexDm->curPsTdma;
-}
-
-static bool halbtc8723b1ant_IsCommonAction(struct btc_coexist *pBtCoexist)
-{
- bool bCommon = false, bWifiConnected = false, bWifiBusy = false;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
-
- if (
- !bWifiConnected &&
- pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE
- ) {
- /* halbtc8723b1ant_SwMechanism(pBtCoexist, false); */
-
- bCommon = true;
- } else if (
- bWifiConnected &&
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE)
- ) {
- /* halbtc8723b1ant_SwMechanism(pBtCoexist, false); */
-
- bCommon = true;
- } else if (
- !bWifiConnected &&
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE)
- ) {
- /* halbtc8723b1ant_SwMechanism(pBtCoexist, false); */
-
- bCommon = true;
- } else if (
- bWifiConnected &&
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE)
- ) {
- /* halbtc8723b1ant_SwMechanism(pBtCoexist, false); */
-
- bCommon = true;
- } else if (
- !bWifiConnected &&
- (pCoexDm->btStatus != BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE)
- ) {
- /* halbtc8723b1ant_SwMechanism(pBtCoexist, false); */
-
- bCommon = true;
- } else {
- bCommon = false;
- }
-
- return bCommon;
-}
-
-static void halbtc8723b1ant_TdmaDurationAdjustForAcl(
- struct btc_coexist *pBtCoexist, u8 wifiStatus
-)
-{
- static s32 up, dn, m, n, WaitCount;
- s32 result; /* 0: no change, +1: increase WiFi duration, -1: decrease WiFi duration */
- u8 retryCount = 0, btInfoExt;
-
- if (
- (wifiStatus == BT_8723B_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN) ||
- (wifiStatus == BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SCAN) ||
- (wifiStatus == BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT)
- ) {
- if (
- pCoexDm->curPsTdma != 1 &&
- pCoexDm->curPsTdma != 2 &&
- pCoexDm->curPsTdma != 3 &&
- pCoexDm->curPsTdma != 9
- ) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 9);
- pCoexDm->psTdmaDuAdjType = 9;
-
- up = 0;
- dn = 0;
- m = 1;
- n = 3;
- result = 0;
- WaitCount = 0;
- }
- return;
- }
-
- if (!pCoexDm->bAutoTdmaAdjust) {
- pCoexDm->bAutoTdmaAdjust = true;
-
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 2);
- pCoexDm->psTdmaDuAdjType = 2;
- /* */
- up = 0;
- dn = 0;
- m = 1;
- n = 3;
- result = 0;
- WaitCount = 0;
- } else {
- /* acquire the BT TRx retry count from BT_Info byte2 */
- retryCount = pCoexSta->btRetryCnt;
- btInfoExt = pCoexSta->btInfoExt;
-
- if (pCoexSta->lowPriorityTx > 1050 || pCoexSta->lowPriorityRx > 1250)
- retryCount++;
-
- result = 0;
- WaitCount++;
-
- if (retryCount == 0) { /* no retry in the last 2-second duration */
- up++;
- dn--;
-
- if (dn <= 0)
- dn = 0;
-
- if (up >= n) { /* if 連續 n 個2秒 retry count為0, 則調寬WiFi duration */
- WaitCount = 0;
- n = 3;
- up = 0;
- dn = 0;
- result = 1;
- }
- } else if (retryCount <= 3) { /* <=3 retry in the last 2-second duration */
- up--;
- dn++;
-
- if (up <= 0)
- up = 0;
-
- if (dn == 2) { /* if 連續 2 個2秒 retry count< 3, 則調窄WiFi duration */
- if (WaitCount <= 2)
- m++; /* 避免一直在兩個level中來回 */
- else
- m = 1;
-
- if (m >= 20) /* m 最大值 = 20 ' 最大120秒 recheck是否調整 WiFi duration. */
- m = 20;
-
- n = 3 * m;
- up = 0;
- dn = 0;
- WaitCount = 0;
- result = -1;
- }
- } else { /* retry count > 3, 只要1次 retry count > 3, 則調窄WiFi duration */
- if (WaitCount == 1)
- m++; /* 避免一直在兩個level中來回 */
- else
- m = 1;
-
- if (m >= 20) /* m 最大值 = 20 ' 最大120秒 recheck是否調整 WiFi duration. */
- m = 20;
-
- n = 3 * m;
- up = 0;
- dn = 0;
- WaitCount = 0;
- result = -1;
- }
-
- if (result == -1) {
- if (
- BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(btInfoExt) &&
- ((pCoexDm->curPsTdma == 1) || (pCoexDm->curPsTdma == 2))
- ) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 9);
- pCoexDm->psTdmaDuAdjType = 9;
- } else if (pCoexDm->curPsTdma == 1) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 2);
- pCoexDm->psTdmaDuAdjType = 2;
- } else if (pCoexDm->curPsTdma == 2) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 9);
- pCoexDm->psTdmaDuAdjType = 9;
- } else if (pCoexDm->curPsTdma == 9) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 11);
- pCoexDm->psTdmaDuAdjType = 11;
- }
- } else if (result == 1) {
- if (
- BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(btInfoExt) &&
- ((pCoexDm->curPsTdma == 1) || (pCoexDm->curPsTdma == 2))
- ) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 9);
- pCoexDm->psTdmaDuAdjType = 9;
- } else if (pCoexDm->curPsTdma == 11) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 9);
- pCoexDm->psTdmaDuAdjType = 9;
- } else if (pCoexDm->curPsTdma == 9) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 2);
- pCoexDm->psTdmaDuAdjType = 2;
- } else if (pCoexDm->curPsTdma == 2) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 1);
- pCoexDm->psTdmaDuAdjType = 1;
- }
- }
-
- if (
- pCoexDm->curPsTdma != 1 &&
- pCoexDm->curPsTdma != 2 &&
- pCoexDm->curPsTdma != 9 &&
- pCoexDm->curPsTdma != 11
- ) /* recover to previous adjust type */
- halbtc8723b1ant_PsTdma(
- pBtCoexist, NORMAL_EXEC, true, pCoexDm->psTdmaDuAdjType
- );
- }
-}
-
-static void halbtc8723b1ant_PsTdmaCheckForPowerSaveState(
- struct btc_coexist *pBtCoexist, bool bNewPsState
-)
-{
- u8 lpsMode = 0x0;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_LPS_MODE, &lpsMode);
-
- if (lpsMode) { /* already under LPS state */
- if (bNewPsState) {
- /* keep state under LPS, do nothing. */
- } else { /* will leave LPS state, turn off psTdma first */
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 0);
- }
- } else { /* NO PS state */
- if (bNewPsState) { /* will enter LPS state, turn off psTdma first */
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 0);
- } else {
- /* keep state under NO PS state, do nothing. */
- }
- }
-}
-
-static void halbtc8723b1ant_PowerSaveState(
- struct btc_coexist *pBtCoexist, u8 psType, u8 lpsVal, u8 rpwmVal
-)
-{
- bool bLowPwrDisable = false;
-
- switch (psType) {
- case BTC_PS_WIFI_NATIVE:
- /* recover to original 32k low power setting */
- bLowPwrDisable = false;
- pBtCoexist->fBtcSet(
- pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable
- );
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_NORMAL_LPS, NULL);
- pCoexSta->bForceLpsOn = false;
- break;
- case BTC_PS_LPS_ON:
- halbtc8723b1ant_PsTdmaCheckForPowerSaveState(pBtCoexist, true);
- halbtc8723b1ant_LpsRpwm(pBtCoexist, NORMAL_EXEC, lpsVal, rpwmVal);
- /* when coex force to enter LPS, do not enter 32k low power. */
- bLowPwrDisable = true;
- pBtCoexist->fBtcSet(
- pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable
- );
- /* power save must executed before psTdma. */
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_ENTER_LPS, NULL);
- pCoexSta->bForceLpsOn = true;
- break;
- case BTC_PS_LPS_OFF:
- halbtc8723b1ant_PsTdmaCheckForPowerSaveState(pBtCoexist, false);
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_LEAVE_LPS, NULL);
- pCoexSta->bForceLpsOn = false;
- break;
- default:
- break;
- }
-}
-
-/* */
-/* */
-/* Software Coex Mechanism start */
-/* */
-/* */
-
-/* */
-/* */
-/* Non-Software Coex Mechanism start */
-/* */
-/* */
-static void halbtc8723b1ant_ActionWifiMultiPort(struct btc_coexist *pBtCoexist)
-{
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
-
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 8);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
-}
-
-static void halbtc8723b1ant_ActionHs(struct btc_coexist *pBtCoexist)
-{
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 5);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
-}
-
-static void halbtc8723b1ant_ActionBtInquiry(struct btc_coexist *pBtCoexist)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
- bool bWifiConnected = false;
- bool bApEnable = false;
- bool bWifiBusy = false;
- bool bBtBusy = false;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);
-
- if (!bWifiConnected && !pCoexSta->bWiFiIsHighPriTask) {
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 8);
-
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
- } else if (
- pBtLinkInfo->bScoExist ||
- pBtLinkInfo->bHidExist ||
- pBtLinkInfo->bA2dpExist
- ) {
- /* SCO/HID/A2DP busy */
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 32);
-
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- } else if (pBtLinkInfo->bPanExist || bWifiBusy) {
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 20);
-
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- } else {
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 8);
-
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
- }
-}
-
-static void halbtc8723b1ant_ActionBtScoHidOnlyBusy(
- struct btc_coexist *pBtCoexist, u8 wifiStatus
-)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
- bool bWifiConnected = false;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
-
- /* tdma and coex table */
-
- if (pBtLinkInfo->bScoExist) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 5);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);
- } else { /* HID */
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 6);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 5);
- }
-}
-
-static void halbtc8723b1ant_ActionWifiConnectedBtAclBusy(
- struct btc_coexist *pBtCoexist, u8 wifiStatus
-)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
-
- halbtc8723b1ant_BtRssiState(2, 28, 0);
-
- if ((pCoexSta->lowPriorityRx >= 1000) && (pCoexSta->lowPriorityRx != 65535))
- pBtLinkInfo->bSlaveRole = true;
- else
- pBtLinkInfo->bSlaveRole = false;
-
- if (pBtLinkInfo->bHidOnly) { /* HID */
- halbtc8723b1ant_ActionBtScoHidOnlyBusy(pBtCoexist, wifiStatus);
- pCoexDm->bAutoTdmaAdjust = false;
- return;
- } else if (pBtLinkInfo->bA2dpOnly) { /* A2DP */
- if (wifiStatus == BT_8723B_1ANT_WIFI_STATUS_CONNECTED_IDLE) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 32);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- pCoexDm->bAutoTdmaAdjust = false;
- } else {
- halbtc8723b1ant_TdmaDurationAdjustForAcl(pBtCoexist, wifiStatus);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- pCoexDm->bAutoTdmaAdjust = true;
- }
- } else if (pBtLinkInfo->bHidExist && pBtLinkInfo->bA2dpExist) { /* HID+A2DP */
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 14);
- pCoexDm->bAutoTdmaAdjust = false;
-
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- } else if (
- pBtLinkInfo->bPanOnly ||
- (pBtLinkInfo->bHidExist && pBtLinkInfo->bPanExist)
- ) { /* PAN(OPP, FTP), HID+PAN(OPP, FTP) */
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 3);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- pCoexDm->bAutoTdmaAdjust = false;
- } else if (
- (pBtLinkInfo->bA2dpExist && pBtLinkInfo->bPanExist) ||
- (pBtLinkInfo->bHidExist && pBtLinkInfo->bA2dpExist && pBtLinkInfo->bPanExist)
- ) { /* A2DP+PAN(OPP, FTP), HID+A2DP+PAN(OPP, FTP) */
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 13);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- pCoexDm->bAutoTdmaAdjust = false;
- } else {
- /* BT no-profile busy (0x9) */
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 32);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- pCoexDm->bAutoTdmaAdjust = false;
- }
-}
-
-static void halbtc8723b1ant_ActionWifiNotConnected(struct btc_coexist *pBtCoexist)
-{
- /* power save state */
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
-
- /* tdma and coex table */
- halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, false, 8);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
-}
-
-static void halbtc8723b1ant_ActionWifiNotConnectedScan(
- struct btc_coexist *pBtCoexist
-)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
-
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
-
- /* tdma and coex table */
- if (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_BUSY) {
- if (pBtLinkInfo->bA2dpExist) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 32);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- } else if (pBtLinkInfo->bA2dpExist && pBtLinkInfo->bPanExist) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 22);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- } else {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 20);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- }
- } else if (
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_SCO_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY)
- ) {
- halbtc8723b1ant_ActionBtScoHidOnlyBusy(
- pBtCoexist, BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SCAN
- );
- } else {
- /* Bryant Add */
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 8);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
- }
-}
-
-static void halbtc8723b1ant_ActionWifiNotConnectedAssoAuth(
- struct btc_coexist *pBtCoexist
-)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
-
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
-
- /* tdma and coex table */
- if (
- (pBtLinkInfo->bScoExist) ||
- (pBtLinkInfo->bHidExist) ||
- (pBtLinkInfo->bA2dpExist)
- ) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 32);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- } else if (pBtLinkInfo->bPanExist) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 20);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- } else {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 8);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
- }
-}
-
-static void halbtc8723b1ant_ActionWifiConnectedScan(struct btc_coexist *pBtCoexist)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
-
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
-
- /* tdma and coex table */
- if (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_BUSY) {
- if (pBtLinkInfo->bA2dpExist) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 32);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- } else if (pBtLinkInfo->bA2dpExist && pBtLinkInfo->bPanExist) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 22);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- } else {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 20);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- }
- } else if (
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_SCO_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY)
- ) {
- halbtc8723b1ant_ActionBtScoHidOnlyBusy(
- pBtCoexist, BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SCAN
- );
- } else {
- /* Bryant Add */
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 8);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
- }
-}
-
-static void halbtc8723b1ant_ActionWifiConnectedSpecialPacket(
- struct btc_coexist *pBtCoexist
-)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
-
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
-
- /* tdma and coex table */
- if (
- (pBtLinkInfo->bScoExist) ||
- (pBtLinkInfo->bHidExist) ||
- (pBtLinkInfo->bA2dpExist)
- ) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 32);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- } else if (pBtLinkInfo->bPanExist) {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 20);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 4);
- } else {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 8);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
- }
-}
-
-static void halbtc8723b1ant_ActionWifiConnected(struct btc_coexist *pBtCoexist)
-{
- bool bWifiBusy = false;
- bool bScan = false, bLink = false, bRoam = false;
- bool bUnder4way = false, bApEnable = false;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);
- if (bUnder4way) {
- halbtc8723b1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);
- return;
- }
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);
- if (bScan || bLink || bRoam) {
- if (bScan)
- halbtc8723b1ant_ActionWifiConnectedScan(pBtCoexist);
- else
- halbtc8723b1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);
- return;
- }
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_AP_MODE_ENABLE, &bApEnable);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
-
- /* power save state */
- if (
- !bApEnable &&
- pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_BUSY &&
- !pBtCoexist->btLinkInfo.bHidOnly
- ) {
- if (pBtCoexist->btLinkInfo.bA2dpOnly) { /* A2DP */
- if (!bWifiBusy)
- halbtc8723b1ant_PowerSaveState(
- pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0
- );
- else { /* busy */
- if (pCoexSta->nScanAPNum >= BT_8723B_1ANT_WIFI_NOISY_THRESH) /* no force LPS, no PS-TDMA, use pure TDMA */
- halbtc8723b1ant_PowerSaveState(
- pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0
- );
- else
- halbtc8723b1ant_PowerSaveState(
- pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4
- );
- }
- } else if (
- (!pCoexSta->bPanExist) &&
- (!pCoexSta->bA2dpExist) &&
- (!pCoexSta->bHidExist)
- )
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
- else
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_LPS_ON, 0x50, 0x4);
- } else {
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
- }
-
- /* tdma and coex table */
- if (!bWifiBusy) {
- if (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_BUSY) {
- halbtc8723b1ant_ActionWifiConnectedBtAclBusy(
- pBtCoexist,
- BT_8723B_1ANT_WIFI_STATUS_CONNECTED_IDLE
- );
- } else if (
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_SCO_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY)
- ) {
- halbtc8723b1ant_ActionBtScoHidOnlyBusy(pBtCoexist,
- BT_8723B_1ANT_WIFI_STATUS_CONNECTED_IDLE);
- } else {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 8);
-
- if ((pCoexSta->highPriorityTx) + (pCoexSta->highPriorityRx) <= 60)
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
- }
- } else {
- if (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_BUSY) {
- halbtc8723b1ant_ActionWifiConnectedBtAclBusy(
- pBtCoexist,
- BT_8723B_1ANT_WIFI_STATUS_CONNECTED_BUSY
- );
- } else if (
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_SCO_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY)
- ) {
- halbtc8723b1ant_ActionBtScoHidOnlyBusy(
- pBtCoexist,
- BT_8723B_1ANT_WIFI_STATUS_CONNECTED_BUSY
- );
- } else {
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 8);
-
- if ((pCoexSta->highPriorityTx) + (pCoexSta->highPriorityRx) <= 60)
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
- }
- }
-}
-
-static void halbtc8723b1ant_RunSwCoexistMechanism(struct btc_coexist *pBtCoexist)
-{
- u8 algorithm = 0;
-
- algorithm = halbtc8723b1ant_ActionAlgorithm(pBtCoexist);
- pCoexDm->curAlgorithm = algorithm;
-
- if (halbtc8723b1ant_IsCommonAction(pBtCoexist)) {
-
- } else {
- pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;
- }
-}
-
-static void halbtc8723b1ant_RunCoexistMechanism(struct btc_coexist *pBtCoexist)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
- bool bWifiConnected = false, bBtHsOn = false;
- bool bIncreaseScanDevNum = false;
- bool bBtCtrlAggBufSize = false;
- u8 aggBufSize = 5;
- u32 wifiLinkStatus = 0;
- u32 numOfWifiLink = 0;
-
- if (pBtCoexist->bManualControl)
- return;
-
- if (pBtCoexist->bStopCoexDm)
- return;
-
- if (pCoexSta->bUnderIps)
- return;
-
- if (
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_SCO_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY)
- ){
- bIncreaseScanDevNum = true;
- }
-
- pBtCoexist->fBtcSet(
- pBtCoexist,
- BTC_SET_BL_INC_SCAN_DEV_NUM,
- &bIncreaseScanDevNum
- );
- pBtCoexist->fBtcGet(
- pBtCoexist,
- BTC_GET_BL_WIFI_CONNECTED,
- &bWifiConnected
- );
-
- pBtCoexist->fBtcGet(
- pBtCoexist,
- BTC_GET_U4_WIFI_LINK_STATUS,
- &wifiLinkStatus
- );
- numOfWifiLink = wifiLinkStatus >> 16;
-
- if ((numOfWifiLink >= 2) || (wifiLinkStatus & WIFI_P2P_GO_CONNECTED)) {
- halbtc8723b1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);
- halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, bBtCtrlAggBufSize, aggBufSize);
-
- if ((pBtLinkInfo->bA2dpExist) && (pCoexSta->bC2hBtInquiryPage))
- halbtc8723b1ant_ActionBtInquiry(pBtCoexist);
- else
- halbtc8723b1ant_ActionWifiMultiPort(pBtCoexist);
-
- return;
- }
-
- if ((pBtLinkInfo->bBtLinkExist) && (bWifiConnected)) {
- halbtc8723b1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 1, 1, 0, 1);
-
- if (pBtLinkInfo->bScoExist)
- halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, true, 0x5);
- else
- halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, true, 0x8);
-
- halbtc8723b1ant_SwMechanism(pBtCoexist, true);
- halbtc8723b1ant_RunSwCoexistMechanism(pBtCoexist); /* just print debug message */
- } else {
- halbtc8723b1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);
-
- halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x5);
-
- halbtc8723b1ant_SwMechanism(pBtCoexist, false);
- halbtc8723b1ant_RunSwCoexistMechanism(pBtCoexist); /* just print debug message */
- }
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
- if (pCoexSta->bC2hBtInquiryPage) {
- halbtc8723b1ant_ActionBtInquiry(pBtCoexist);
- return;
- } else if (bBtHsOn) {
- halbtc8723b1ant_ActionHs(pBtCoexist);
- return;
- }
-
- if (!bWifiConnected) {
- bool bScan = false, bLink = false, bRoam = false;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);
-
- if (bScan || bLink || bRoam) {
- if (bScan)
- halbtc8723b1ant_ActionWifiNotConnectedScan(pBtCoexist);
- else
- halbtc8723b1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);
- } else
- halbtc8723b1ant_ActionWifiNotConnected(pBtCoexist);
- } else { /* wifi LPS/Busy */
- halbtc8723b1ant_ActionWifiConnected(pBtCoexist);
- }
-}
-
-static void halbtc8723b1ant_InitCoexDm(struct btc_coexist *pBtCoexist)
-{
- /* force to reset coex mechanism */
-
- /* sw all off */
- halbtc8723b1ant_SwMechanism(pBtCoexist, false);
-
- /* halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, false, 8); */
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);
-
- pCoexSta->popEventCnt = 0;
-}
-
-static void halbtc8723b1ant_InitHwConfig(
- struct btc_coexist *pBtCoexist,
- bool bBackUp,
- bool bWifiOnly
-)
-{
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x550, 0x8, 0x1); /* enable TBTT nterrupt */
-
- /* 0x790[5:0]= 0x5 */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x790, 0x5);
-
- /* Enable counter statistics */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x778, 0x1);
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x40, 0x20, 0x1);
-
- /* Antenna config */
- if (bWifiOnly) {
- halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_WIFI, true, false);
- halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, false, 9);
- } else {
- halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, true, false);
- }
-
- /* PTA parameter */
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);
-
- pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);
- pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);
- pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67);
-}
-
-/* */
-/* work around function start with wa_halbtc8723b1ant_ */
-/* */
-/* */
-/* extern function start with EXhalbtc8723b1ant_ */
-/* */
-void EXhalbtc8723b1ant_PowerOnSetting(struct btc_coexist *pBtCoexist)
-{
- struct btc_board_info *pBoardInfo = &pBtCoexist->boardInfo;
- u8 u1Tmp = 0x0;
- u16 u2Tmp = 0x0;
-
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x67, 0x20);
-
- /* enable BB, REG_SYS_FUNC_EN such that we can write 0x948 correctly. */
- u2Tmp = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0x2);
- pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x2, u2Tmp | BIT(0) | BIT(1));
-
- /* set GRAN_BT = 1 */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x18);
- /* set WLAN_ACT = 0 */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4);
-
- /* */
- /* S0 or S1 setting and Local register setting(By the setting fw can get ant number, S0/S1, ... info) */
- /* Local setting bit define */
- /* BIT0: "0" for no antenna inverse; "1" for antenna inverse */
- /* BIT1: "0" for internal switch; "1" for external switch */
- /* BIT2: "0" for one antenna; "1" for two antenna */
- /* NOTE: here default all internal switch and 1-antenna ==> BIT1 = 0 and BIT2 = 0 */
- if (pBtCoexist->chipInterface == BTC_INTF_USB) {
- /* fixed at S0 for USB interface */
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);
-
- u1Tmp |= 0x1; /* antenna inverse */
- pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0xfe08, u1Tmp);
-
- pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_AUX_PORT;
- } else {
- /* for PCIE and SDIO interface, we check efuse 0xc3[6] */
- if (pBoardInfo->singleAntPath == 0) {
- /* set to S1 */
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x280);
- pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT;
- } else if (pBoardInfo->singleAntPath == 1) {
- /* set to S0 */
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);
- u1Tmp |= 0x1; /* antenna inverse */
- pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_AUX_PORT;
- }
-
- if (pBtCoexist->chipInterface == BTC_INTF_PCI)
- pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x384, u1Tmp);
- else if (pBtCoexist->chipInterface == BTC_INTF_SDIO)
- pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x60, u1Tmp);
- }
-}
-
-void EXhalbtc8723b1ant_InitHwConfig(struct btc_coexist *pBtCoexist, bool bWifiOnly)
-{
- halbtc8723b1ant_InitHwConfig(pBtCoexist, true, bWifiOnly);
-}
-
-void EXhalbtc8723b1ant_InitCoexDm(struct btc_coexist *pBtCoexist)
-{
- pBtCoexist->bStopCoexDm = false;
-
- halbtc8723b1ant_InitCoexDm(pBtCoexist);
-
- halbtc8723b1ant_QueryBtInfo(pBtCoexist);
-}
-
-void EXhalbtc8723b1ant_IpsNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- if (pBtCoexist->bManualControl || pBtCoexist->bStopCoexDm)
- return;
-
- if (type == BTC_IPS_ENTER) {
- pCoexSta->bUnderIps = true;
-
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 0);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
- halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, false, true);
- } else if (type == BTC_IPS_LEAVE) {
- pCoexSta->bUnderIps = false;
-
- halbtc8723b1ant_InitHwConfig(pBtCoexist, false, false);
- halbtc8723b1ant_InitCoexDm(pBtCoexist);
- halbtc8723b1ant_QueryBtInfo(pBtCoexist);
- }
-}
-
-void EXhalbtc8723b1ant_LpsNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- if (pBtCoexist->bManualControl || pBtCoexist->bStopCoexDm)
- return;
-
- if (type == BTC_LPS_ENABLE)
- pCoexSta->bUnderLps = true;
- else if (type == BTC_LPS_DISABLE)
- pCoexSta->bUnderLps = false;
-}
-
-void EXhalbtc8723b1ant_ScanNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- bool bWifiConnected = false, bBtHsOn = false;
- u32 wifiLinkStatus = 0;
- u32 numOfWifiLink = 0;
- bool bBtCtrlAggBufSize = false;
- u8 aggBufSize = 5;
-
- if (pBtCoexist->bManualControl || pBtCoexist->bStopCoexDm)
- return;
-
- if (type == BTC_SCAN_START) {
- pCoexSta->bWiFiIsHighPriTask = true;
-
- halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, false, 8); /* Force antenna setup for no scan result issue */
- pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);
- pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x765);
- pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x67);
- } else {
- pCoexSta->bWiFiIsHighPriTask = false;
-
- pBtCoexist->fBtcGet(
- pBtCoexist, BTC_GET_U1_AP_NUM, &pCoexSta->nScanAPNum
- );
- }
-
- if (pBtCoexist->btInfo.bBtDisabled)
- return;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
-
- halbtc8723b1ant_QueryBtInfo(pBtCoexist);
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);
- numOfWifiLink = wifiLinkStatus >> 16;
-
- if (numOfWifiLink >= 2) {
- halbtc8723b1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);
- halbtc8723b1ant_LimitedRx(
- pBtCoexist, NORMAL_EXEC, false, bBtCtrlAggBufSize, aggBufSize
- );
- halbtc8723b1ant_ActionWifiMultiPort(pBtCoexist);
- return;
- }
-
- if (pCoexSta->bC2hBtInquiryPage) {
- halbtc8723b1ant_ActionBtInquiry(pBtCoexist);
- return;
- } else if (bBtHsOn) {
- halbtc8723b1ant_ActionHs(pBtCoexist);
- return;
- }
-
- if (type == BTC_SCAN_START) {
- if (!bWifiConnected) /* non-connected scan */
- halbtc8723b1ant_ActionWifiNotConnectedScan(pBtCoexist);
- else /* wifi is connected */
- halbtc8723b1ant_ActionWifiConnectedScan(pBtCoexist);
- } else if (type == BTC_SCAN_FINISH) {
- if (!bWifiConnected) /* non-connected scan */
- halbtc8723b1ant_ActionWifiNotConnected(pBtCoexist);
- else
- halbtc8723b1ant_ActionWifiConnected(pBtCoexist);
- }
-}
-
-void EXhalbtc8723b1ant_ConnectNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- bool bWifiConnected = false, bBtHsOn = false;
- u32 wifiLinkStatus = 0;
- u32 numOfWifiLink = 0;
- bool bBtCtrlAggBufSize = false;
- u8 aggBufSize = 5;
-
- if (
- pBtCoexist->bManualControl ||
- pBtCoexist->bStopCoexDm ||
- pBtCoexist->btInfo.bBtDisabled
- )
- return;
-
- if (type == BTC_ASSOCIATE_START) {
- pCoexSta->bWiFiIsHighPriTask = true;
- pCoexDm->nArpCnt = 0;
- } else {
- pCoexSta->bWiFiIsHighPriTask = false;
- /* pCoexDm->nArpCnt = 0; */
- }
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus);
- numOfWifiLink = wifiLinkStatus >> 16;
- if (numOfWifiLink >= 2) {
- halbtc8723b1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);
- halbtc8723b1ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, bBtCtrlAggBufSize, aggBufSize);
- halbtc8723b1ant_ActionWifiMultiPort(pBtCoexist);
- return;
- }
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
- if (pCoexSta->bC2hBtInquiryPage) {
- halbtc8723b1ant_ActionBtInquiry(pBtCoexist);
- return;
- } else if (bBtHsOn) {
- halbtc8723b1ant_ActionHs(pBtCoexist);
- return;
- }
-
- if (type == BTC_ASSOCIATE_START) {
- halbtc8723b1ant_ActionWifiNotConnectedAssoAuth(pBtCoexist);
- } else if (type == BTC_ASSOCIATE_FINISH) {
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
- if (!bWifiConnected) /* non-connected scan */
- halbtc8723b1ant_ActionWifiNotConnected(pBtCoexist);
- else
- halbtc8723b1ant_ActionWifiConnected(pBtCoexist);
- }
-}
-
-void EXhalbtc8723b1ant_MediaStatusNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- u8 H2C_Parameter[3] = {0};
- u32 wifiBw;
- u8 wifiCentralChnl;
- bool bWifiUnderBMode = false;
-
- if (
- pBtCoexist->bManualControl ||
- pBtCoexist->bStopCoexDm ||
- pBtCoexist->btInfo.bBtDisabled
- )
- return;
-
- if (type == BTC_MEDIA_CONNECT) {
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_UNDER_B_MODE, &bWifiUnderBMode);
-
- /* Set CCK Tx/Rx high Pri except 11b mode */
- if (bWifiUnderBMode) {
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cd, 0x00); /* CCK Tx */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cf, 0x00); /* CCK Rx */
- } else {
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cd, 0x10); /* CCK Tx */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cf, 0x10); /* CCK Rx */
- }
-
- pCoexDm->backupArfrCnt1 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x430);
- pCoexDm->backupArfrCnt2 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x434);
- pCoexDm->backupRetryLimit = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0x42a);
- pCoexDm->backupAmpduMaxTime = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x456);
- } else {
- pCoexDm->nArpCnt = 0;
-
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cd, 0x0); /* CCK Tx */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cf, 0x0); /* CCK Rx */
- }
-
- /* only 2.4G we need to inform bt the chnl mask */
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifiCentralChnl);
- if ((type == BTC_MEDIA_CONNECT) && (wifiCentralChnl <= 14)) {
- /* H2C_Parameter[0] = 0x1; */
- H2C_Parameter[0] = 0x0;
- H2C_Parameter[1] = wifiCentralChnl;
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
-
- if (wifiBw == BTC_WIFI_BW_HT40)
- H2C_Parameter[2] = 0x30;
- else
- H2C_Parameter[2] = 0x20;
- }
-
- pCoexDm->wifiChnlInfo[0] = H2C_Parameter[0];
- pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];
- pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);
-}
-
-void EXhalbtc8723b1ant_SpecialPacketNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- bool bBtHsOn = false;
- u32 wifiLinkStatus = 0;
- u32 numOfWifiLink = 0;
- bool bBtCtrlAggBufSize = false;
- u8 aggBufSize = 5;
-
- if (
- pBtCoexist->bManualControl ||
- pBtCoexist->bStopCoexDm ||
- pBtCoexist->btInfo.bBtDisabled
- )
- return;
-
- if (
- type == BTC_PACKET_DHCP ||
- type == BTC_PACKET_EAPOL ||
- type == BTC_PACKET_ARP
- ) {
- if (type == BTC_PACKET_ARP) {
- pCoexDm->nArpCnt++;
-
- if (pCoexDm->nArpCnt >= 10) /* if APR PKT > 10 after connect, do not go to ActionWifiConnectedSpecialPacket(pBtCoexist) */
- pCoexSta->bWiFiIsHighPriTask = false;
- else
- pCoexSta->bWiFiIsHighPriTask = true;
- } else {
- pCoexSta->bWiFiIsHighPriTask = true;
- }
- } else {
- pCoexSta->bWiFiIsHighPriTask = false;
- }
-
- pCoexSta->specialPktPeriodCnt = 0;
-
- pBtCoexist->fBtcGet(
- pBtCoexist, BTC_GET_U4_WIFI_LINK_STATUS, &wifiLinkStatus
- );
- numOfWifiLink = wifiLinkStatus >> 16;
-
- if (numOfWifiLink >= 2) {
- halbtc8723b1ant_LimitedTx(pBtCoexist, NORMAL_EXEC, 0, 0, 0, 0);
- halbtc8723b1ant_LimitedRx(
- pBtCoexist, NORMAL_EXEC, false, bBtCtrlAggBufSize, aggBufSize
- );
- halbtc8723b1ant_ActionWifiMultiPort(pBtCoexist);
- return;
- }
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
- if (pCoexSta->bC2hBtInquiryPage) {
- halbtc8723b1ant_ActionBtInquiry(pBtCoexist);
- return;
- } else if (bBtHsOn) {
- halbtc8723b1ant_ActionHs(pBtCoexist);
- return;
- }
-
- if (
- type == BTC_PACKET_DHCP ||
- type == BTC_PACKET_EAPOL ||
- ((type == BTC_PACKET_ARP) && (pCoexSta->bWiFiIsHighPriTask))
- )
- halbtc8723b1ant_ActionWifiConnectedSpecialPacket(pBtCoexist);
-}
-
-void EXhalbtc8723b1ant_BtInfoNotify(
- struct btc_coexist *pBtCoexist, u8 *tmpBuf, u8 length
-)
-{
- u8 btInfo = 0;
- u8 i, rspSource = 0;
- bool bWifiConnected = false;
- bool bBtBusy = false;
-
- pCoexSta->bC2hBtInfoReqSent = false;
-
- rspSource = tmpBuf[0] & 0xf;
- if (rspSource >= BT_INFO_SRC_8723B_1ANT_MAX)
- rspSource = BT_INFO_SRC_8723B_1ANT_WIFI_FW;
- pCoexSta->btInfoC2hCnt[rspSource]++;
-
- for (i = 0; i < length; i++) {
- pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];
- if (i == 1)
- btInfo = tmpBuf[i];
- }
-
- if (rspSource != BT_INFO_SRC_8723B_1ANT_WIFI_FW) {
- pCoexSta->btRetryCnt = pCoexSta->btInfoC2h[rspSource][2] & 0xf;
-
- if (pCoexSta->btRetryCnt >= 1)
- pCoexSta->popEventCnt++;
-
- if (pCoexSta->btInfoC2h[rspSource][2] & 0x20)
- pCoexSta->bC2hBtPage = true;
- else
- pCoexSta->bC2hBtPage = false;
-
- pCoexSta->btRssi = pCoexSta->btInfoC2h[rspSource][3] * 2 - 90;
- /* pCoexSta->btInfoC2h[rspSource][3]*2+10; */
-
- pCoexSta->btInfoExt = pCoexSta->btInfoC2h[rspSource][4];
-
- pCoexSta->bBtTxRxMask = (pCoexSta->btInfoC2h[rspSource][2] & 0x40);
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TX_RX_MASK, &pCoexSta->bBtTxRxMask);
-
- if (!pCoexSta->bBtTxRxMask) {
- /* BT into is responded by BT FW and BT RF REG 0x3C != 0x15 => Need to switch BT TRx Mask */
- pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15);
- }
-
- /* Here we need to resend some wifi info to BT */
- /* because bt is reset and loss of the info. */
- if (pCoexSta->btInfoExt & BIT(1)) {
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
- if (bWifiConnected)
- EXhalbtc8723b1ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_CONNECT);
- else
- EXhalbtc8723b1ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);
- }
-
- if (pCoexSta->btInfoExt & BIT(3)) {
- if (!pBtCoexist->bManualControl && !pBtCoexist->bStopCoexDm)
- halbtc8723b1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, false);
- } else {
- /* BT already NOT ignore Wlan active, do nothing here. */
- }
- }
-
- /* check BIT2 first ==> check if bt is under inquiry or page scan */
- if (btInfo & BT_INFO_8723B_1ANT_B_INQ_PAGE)
- pCoexSta->bC2hBtInquiryPage = true;
- else
- pCoexSta->bC2hBtInquiryPage = false;
-
- /* set link exist status */
- if (!(btInfo & BT_INFO_8723B_1ANT_B_CONNECTION)) {
- pCoexSta->bBtLinkExist = false;
- pCoexSta->bPanExist = false;
- pCoexSta->bA2dpExist = false;
- pCoexSta->bHidExist = false;
- pCoexSta->bScoExist = false;
- } else { /* connection exists */
- pCoexSta->bBtLinkExist = true;
- if (btInfo & BT_INFO_8723B_1ANT_B_FTP)
- pCoexSta->bPanExist = true;
- else
- pCoexSta->bPanExist = false;
-
- if (btInfo & BT_INFO_8723B_1ANT_B_A2DP)
- pCoexSta->bA2dpExist = true;
- else
- pCoexSta->bA2dpExist = false;
-
- if (btInfo & BT_INFO_8723B_1ANT_B_HID)
- pCoexSta->bHidExist = true;
- else
- pCoexSta->bHidExist = false;
-
- if (btInfo & BT_INFO_8723B_1ANT_B_SCO_ESCO)
- pCoexSta->bScoExist = true;
- else
- pCoexSta->bScoExist = false;
- }
-
- halbtc8723b1ant_UpdateBtLinkInfo(pBtCoexist);
-
- btInfo = btInfo & 0x1f; /* mask profile bit for connect-ilde identification (for CSR case: A2DP idle --> 0x41) */
-
- if (!(btInfo & BT_INFO_8723B_1ANT_B_CONNECTION)) {
- pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE;
- } else if (btInfo == BT_INFO_8723B_1ANT_B_CONNECTION) {
- /* connection exists but no busy */
- pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE;
- } else if (
- (btInfo & BT_INFO_8723B_1ANT_B_SCO_ESCO) ||
- (btInfo & BT_INFO_8723B_1ANT_B_SCO_BUSY)
- ) {
- pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_SCO_BUSY;
- } else if (btInfo & BT_INFO_8723B_1ANT_B_ACL_BUSY) {
- if (pCoexDm->btStatus != BT_8723B_1ANT_BT_STATUS_ACL_BUSY)
- pCoexDm->bAutoTdmaAdjust = false;
-
- pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_ACL_BUSY;
- } else {
- pCoexDm->btStatus = BT_8723B_1ANT_BT_STATUS_MAX;
- }
-
- if (
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_SCO_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY)
- )
- bBtBusy = true;
- else
- bBtBusy = false;
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);
-
- halbtc8723b1ant_RunCoexistMechanism(pBtCoexist);
-}
-
-void EXhalbtc8723b1ant_HaltNotify(struct btc_coexist *pBtCoexist)
-{
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
- halbtc8723b1ant_PsTdma(pBtCoexist, FORCE_EXEC, false, 0);
- halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, false, true);
-
- halbtc8723b1ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, true);
-
- EXhalbtc8723b1ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);
-
- pBtCoexist->bStopCoexDm = true;
-}
-
-void EXhalbtc8723b1ant_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState)
-{
- if (pnpState == BTC_WIFI_PNP_SLEEP) {
- halbtc8723b1ant_PowerSaveState(pBtCoexist, BTC_PS_WIFI_NATIVE, 0x0, 0x0);
- halbtc8723b1ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 0);
- halbtc8723b1ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
- halbtc8723b1ant_SetAntPath(pBtCoexist, BTC_ANT_PATH_BT, false, true);
-
- pBtCoexist->bStopCoexDm = true;
- } else if (pnpState == BTC_WIFI_PNP_WAKE_UP) {
- pBtCoexist->bStopCoexDm = false;
- halbtc8723b1ant_InitHwConfig(pBtCoexist, false, false);
- halbtc8723b1ant_InitCoexDm(pBtCoexist);
- halbtc8723b1ant_QueryBtInfo(pBtCoexist);
- }
-}
-
-void EXhalbtc8723b1ant_Periodical(struct btc_coexist *pBtCoexist)
-{
- static u8 disVerInfoCnt;
- u32 fwVer = 0, btPatchVer = 0;
-
- if (disVerInfoCnt <= 5) {
- disVerInfoCnt += 1;
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);
- }
-
- halbtc8723b1ant_MonitorBtCtr(pBtCoexist);
- halbtc8723b1ant_MonitorWiFiCtr(pBtCoexist);
-
- if (
- halbtc8723b1ant_IsWifiStatusChanged(pBtCoexist) ||
- pCoexDm->bAutoTdmaAdjust
- )
- halbtc8723b1ant_RunCoexistMechanism(pBtCoexist);
-
- pCoexSta->specialPktPeriodCnt++;
-}
diff --git a/drivers/staging/rtl8723bs/hal/HalBtc8723b1Ant.h b/drivers/staging/rtl8723bs/hal/HalBtc8723b1Ant.h
deleted file mode 100644
index 7a12d92da0a9..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalBtc8723b1Ant.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-/* The following is for 8723B 1ANT BT Co-exist definition */
-#define BT_INFO_8723B_1ANT_B_FTP BIT(7)
-#define BT_INFO_8723B_1ANT_B_A2DP BIT(6)
-#define BT_INFO_8723B_1ANT_B_HID BIT(5)
-#define BT_INFO_8723B_1ANT_B_SCO_BUSY BIT(4)
-#define BT_INFO_8723B_1ANT_B_ACL_BUSY BIT(3)
-#define BT_INFO_8723B_1ANT_B_INQ_PAGE BIT(2)
-#define BT_INFO_8723B_1ANT_B_SCO_ESCO BIT(1)
-#define BT_INFO_8723B_1ANT_B_CONNECTION BIT(0)
-
-#define BT_INFO_8723B_1ANT_A2DP_BASIC_RATE(_BT_INFO_EXT_) \
- (((_BT_INFO_EXT_ & BIT(0))) ? true : false)
-
-#define BTC_RSSI_COEX_THRESH_TOL_8723B_1ANT 2
-
-#define BT_8723B_1ANT_WIFI_NOISY_THRESH 30 /* max: 255 */
-
-enum {
- BT_INFO_SRC_8723B_1ANT_WIFI_FW = 0x0,
- BT_INFO_SRC_8723B_1ANT_BT_RSP = 0x1,
- BT_INFO_SRC_8723B_1ANT_BT_ACTIVE_SEND = 0x2,
- BT_INFO_SRC_8723B_1ANT_MAX
-};
-
-enum {
- BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE = 0x0,
- BT_8723B_1ANT_BT_STATUS_CONNECTED_IDLE = 0x1,
- BT_8723B_1ANT_BT_STATUS_INQ_PAGE = 0x2,
- BT_8723B_1ANT_BT_STATUS_ACL_BUSY = 0x3,
- BT_8723B_1ANT_BT_STATUS_SCO_BUSY = 0x4,
- BT_8723B_1ANT_BT_STATUS_ACL_SCO_BUSY = 0x5,
- BT_8723B_1ANT_BT_STATUS_MAX
-};
-
-enum {
- BT_8723B_1ANT_WIFI_STATUS_NON_CONNECTED_IDLE = 0x0,
- BT_8723B_1ANT_WIFI_STATUS_NON_CONNECTED_ASSO_AUTH_SCAN = 0x1,
- BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SCAN = 0x2,
- BT_8723B_1ANT_WIFI_STATUS_CONNECTED_SPECIAL_PKT = 0x3,
- BT_8723B_1ANT_WIFI_STATUS_CONNECTED_IDLE = 0x4,
- BT_8723B_1ANT_WIFI_STATUS_CONNECTED_BUSY = 0x5,
- BT_8723B_1ANT_WIFI_STATUS_MAX
-};
-
-enum {
- BT_8723B_1ANT_COEX_ALGO_UNDEFINED = 0x0,
- BT_8723B_1ANT_COEX_ALGO_SCO = 0x1,
- BT_8723B_1ANT_COEX_ALGO_HID = 0x2,
- BT_8723B_1ANT_COEX_ALGO_A2DP = 0x3,
- BT_8723B_1ANT_COEX_ALGO_A2DP_PANHS = 0x4,
- BT_8723B_1ANT_COEX_ALGO_PANEDR = 0x5,
- BT_8723B_1ANT_COEX_ALGO_PANHS = 0x6,
- BT_8723B_1ANT_COEX_ALGO_PANEDR_A2DP = 0x7,
- BT_8723B_1ANT_COEX_ALGO_PANEDR_HID = 0x8,
- BT_8723B_1ANT_COEX_ALGO_HID_A2DP_PANEDR = 0x9,
- BT_8723B_1ANT_COEX_ALGO_HID_A2DP = 0xa,
- BT_8723B_1ANT_COEX_ALGO_MAX = 0xb,
-};
-
-struct coex_dm_8723b_1ant {
- /* fw mechanism */
- bool bCurIgnoreWlanAct;
- bool bPreIgnoreWlanAct;
- u8 prePsTdma;
- u8 curPsTdma;
- u8 psTdmaPara[5];
- u8 psTdmaDuAdjType;
- bool bAutoTdmaAdjust;
- bool bPrePsTdmaOn;
- bool bCurPsTdmaOn;
- bool bPreBtAutoReport;
- bool bCurBtAutoReport;
- u8 preLps;
- u8 curLps;
- u8 preRpwm;
- u8 curRpwm;
-
- /* sw mechanism */
- bool bPreLowPenaltyRa;
- bool bCurLowPenaltyRa;
- u32 preVal0x6c0;
- u32 curVal0x6c0;
- u32 preVal0x6c4;
- u32 curVal0x6c4;
- u32 preVal0x6c8;
- u32 curVal0x6c8;
- u8 preVal0x6cc;
- u8 curVal0x6cc;
- bool bLimitedDig;
-
- u32 backupArfrCnt1; /* Auto Rate Fallback Retry cnt */
- u32 backupArfrCnt2; /* Auto Rate Fallback Retry cnt */
- u16 backupRetryLimit;
- u8 backupAmpduMaxTime;
-
- /* algorithm related */
- u8 preAlgorithm;
- u8 curAlgorithm;
- u8 btStatus;
- u8 wifiChnlInfo[3];
-
- u32 preRaMask;
- u32 curRaMask;
- u8 preArfrType;
- u8 curArfrType;
- u8 preRetryLimitType;
- u8 curRetryLimitType;
- u8 preAmpduTimeType;
- u8 curAmpduTimeType;
- u32 nArpCnt;
-
- u8 errorCondition;
-};
-
-struct coex_sta_8723b_1ant {
- bool bBtLinkExist;
- bool bScoExist;
- bool bA2dpExist;
- bool bHidExist;
- bool bPanExist;
-
- bool bUnderLps;
- bool bUnderIps;
- u32 specialPktPeriodCnt;
- u32 highPriorityTx;
- u32 highPriorityRx;
- u32 lowPriorityTx;
- u32 lowPriorityRx;
- s8 btRssi;
- bool bBtTxRxMask;
- u8 preBtRssiState;
- u8 preWifiRssiState[4];
- bool bC2hBtInfoReqSent;
- u8 btInfoC2h[BT_INFO_SRC_8723B_1ANT_MAX][10];
- u32 btInfoC2hCnt[BT_INFO_SRC_8723B_1ANT_MAX];
- bool bC2hBtInquiryPage;
- bool bC2hBtPage; /* Add for win8.1 page out issue */
- bool bWiFiIsHighPriTask; /* Add for win8.1 page out issue */
- u8 btRetryCnt;
- u8 btInfoExt;
- u32 popEventCnt;
- u8 nScanAPNum;
-
- u32 nCRCOK_CCK;
- u32 nCRCOK_11g;
- u32 nCRCOK_11n;
- u32 nCRCOK_11nAgg;
-
- u32 nCRCErr_CCK;
- u32 nCRCErr_11g;
- u32 nCRCErr_11n;
- u32 nCRCErr_11nAgg;
-
- bool bCCKLock;
- bool bPreCCKLock;
- u8 nCoexTableType;
-
- bool bForceLpsOn;
-};
-
-/* */
-/* The following is interface which will notify coex module. */
-/* */
-void EXhalbtc8723b1ant_PowerOnSetting(struct btc_coexist *pBtCoexist);
-void EXhalbtc8723b1ant_InitHwConfig(struct btc_coexist *pBtCoexist, bool bWifiOnly);
-void EXhalbtc8723b1ant_InitCoexDm(struct btc_coexist *pBtCoexist);
-void EXhalbtc8723b1ant_IpsNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b1ant_LpsNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b1ant_ScanNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b1ant_ConnectNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b1ant_MediaStatusNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b1ant_SpecialPacketNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b1ant_BtInfoNotify(
- struct btc_coexist *pBtCoexist, u8 *tmpBuf, u8 length
-);
-void EXhalbtc8723b1ant_HaltNotify(struct btc_coexist *pBtCoexist);
-void EXhalbtc8723b1ant_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState);
-void EXhalbtc8723b1ant_Periodical(struct btc_coexist *pBtCoexist);
diff --git a/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.c b/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.c
deleted file mode 100644
index 0220bacee181..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.c
+++ /dev/null
@@ -1,2624 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include "Mp_Precomp.h"
-
-/* defines */
-#define HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(val) \
-do { \
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, val); \
- pCoexDm->psTdmaDuAdjType = val; \
-} while (0)
-
-/* Global variables, these are static variables */
-static struct coex_dm_8723b_2ant GLCoexDm8723b2Ant;
-static struct coex_dm_8723b_2ant *pCoexDm = &GLCoexDm8723b2Ant;
-static struct coex_sta_8723b_2ant GLCoexSta8723b2Ant;
-static struct coex_sta_8723b_2ant *pCoexSta = &GLCoexSta8723b2Ant;
-
-/* local function start with halbtc8723b2ant_ */
-static u8 halbtc8723b2ant_BtRssiState(
- u8 levelNum, u8 rssiThresh, u8 rssiThresh1
-)
-{
- s32 btRssi = 0;
- u8 btRssiState = pCoexSta->preBtRssiState;
-
- btRssi = pCoexSta->btRssi;
-
- if (levelNum == 2) {
- if (
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW)
- ) {
- if (btRssi >= (rssiThresh + BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT)) {
- btRssiState = BTC_RSSI_STATE_HIGH;
- } else {
- btRssiState = BTC_RSSI_STATE_STAY_LOW;
- }
- } else {
- if (btRssi < rssiThresh) {
- btRssiState = BTC_RSSI_STATE_LOW;
- } else {
- btRssiState = BTC_RSSI_STATE_STAY_HIGH;
- }
- }
- } else if (levelNum == 3) {
- if (rssiThresh > rssiThresh1) {
- return pCoexSta->preBtRssiState;
- }
-
- if (
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_LOW) ||
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_LOW)
- ) {
- if (btRssi >= (rssiThresh + BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT)) {
- btRssiState = BTC_RSSI_STATE_MEDIUM;
- } else {
- btRssiState = BTC_RSSI_STATE_STAY_LOW;
- }
- } else if (
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_MEDIUM) ||
- (pCoexSta->preBtRssiState == BTC_RSSI_STATE_STAY_MEDIUM)
- ) {
- if (btRssi >= (rssiThresh1 + BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT)) {
- btRssiState = BTC_RSSI_STATE_HIGH;
- } else if (btRssi < rssiThresh) {
- btRssiState = BTC_RSSI_STATE_LOW;
- } else {
- btRssiState = BTC_RSSI_STATE_STAY_MEDIUM;
- }
- } else {
- if (btRssi < rssiThresh1) {
- btRssiState = BTC_RSSI_STATE_MEDIUM;
- } else {
- btRssiState = BTC_RSSI_STATE_STAY_HIGH;
- }
- }
- }
-
- pCoexSta->preBtRssiState = btRssiState;
-
- return btRssiState;
-}
-
-static u8 halbtc8723b2ant_WifiRssiState(
- struct btc_coexist *pBtCoexist,
- u8 index,
- u8 levelNum,
- u8 rssiThresh,
- u8 rssiThresh1
-)
-{
- s32 wifiRssi = 0;
- u8 wifiRssiState = pCoexSta->preWifiRssiState[index];
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_S4_WIFI_RSSI, &wifiRssi);
-
- if (levelNum == 2) {
- if (
- (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_LOW) ||
- (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_LOW)
- ) {
- if (wifiRssi >= (rssiThresh + BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT)) {
- wifiRssiState = BTC_RSSI_STATE_HIGH;
- } else {
- wifiRssiState = BTC_RSSI_STATE_STAY_LOW;
- }
- } else {
- if (wifiRssi < rssiThresh) {
- wifiRssiState = BTC_RSSI_STATE_LOW;
- } else {
- wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;
- }
- }
- } else if (levelNum == 3) {
- if (rssiThresh > rssiThresh1) {
- return pCoexSta->preWifiRssiState[index];
- }
-
- if (
- (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_LOW) ||
- (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_LOW)
- ) {
- if (wifiRssi >= (rssiThresh + BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT)) {
- wifiRssiState = BTC_RSSI_STATE_MEDIUM;
- } else {
- wifiRssiState = BTC_RSSI_STATE_STAY_LOW;
- }
- } else if (
- (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_MEDIUM) ||
- (pCoexSta->preWifiRssiState[index] == BTC_RSSI_STATE_STAY_MEDIUM)
- ) {
- if (wifiRssi >= (rssiThresh1 + BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT)) {
- wifiRssiState = BTC_RSSI_STATE_HIGH;
- } else if (wifiRssi < rssiThresh) {
- wifiRssiState = BTC_RSSI_STATE_LOW;
- } else {
- wifiRssiState = BTC_RSSI_STATE_STAY_MEDIUM;
- }
- } else {
- if (wifiRssi < rssiThresh1) {
- wifiRssiState = BTC_RSSI_STATE_MEDIUM;
- } else {
- wifiRssiState = BTC_RSSI_STATE_STAY_HIGH;
- }
- }
- }
-
- pCoexSta->preWifiRssiState[index] = wifiRssiState;
-
- return wifiRssiState;
-}
-
-static void halbtc8723b2ant_LimitedRx(
- struct btc_coexist *pBtCoexist,
- bool bForceExec,
- bool bRejApAggPkt,
- bool bBtCtrlAggBufSize,
- u8 aggBufSize
-)
-{
- bool bRejectRxAgg = bRejApAggPkt;
- bool bBtCtrlRxAggSize = bBtCtrlAggBufSize;
- u8 rxAggSize = aggBufSize;
-
- /* */
- /* Rx Aggregation related setting */
- /* */
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT, &bRejectRxAgg);
- /* decide BT control aggregation buf size or not */
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE, &bBtCtrlRxAggSize);
- /* aggregation buf size, only work when BT control Rx aggregation size. */
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_AGG_BUF_SIZE, &rxAggSize);
- /* real update aggregation setting */
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);
-}
-
-static void halbtc8723b2ant_QueryBtInfo(struct btc_coexist *pBtCoexist)
-{
- u8 H2C_Parameter[1] = {0};
-
- pCoexSta->bC2hBtInfoReqSent = true;
-
- H2C_Parameter[0] |= BIT(0); /* trigger */
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x61, 1, H2C_Parameter);
-}
-
-static bool halbtc8723b2ant_IsWifiStatusChanged(struct btc_coexist *pBtCoexist)
-{
- static bool bPreWifiBusy, bPreUnder4way, bPreBtHsOn;
- bool bWifiBusy = false, bUnder4way = false, bBtHsOn = false;
- bool bWifiConnected = false;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS, &bUnder4way);
-
- if (bWifiConnected) {
- if (bWifiBusy != bPreWifiBusy) {
- bPreWifiBusy = bWifiBusy;
- return true;
- }
-
- if (bUnder4way != bPreUnder4way) {
- bPreUnder4way = bUnder4way;
- return true;
- }
-
- if (bBtHsOn != bPreBtHsOn) {
- bPreBtHsOn = bBtHsOn;
- return true;
- }
- }
-
- return false;
-}
-
-static void halbtc8723b2ant_UpdateBtLinkInfo(struct btc_coexist *pBtCoexist)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
- bool bBtHsOn = false;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
-
- pBtLinkInfo->bBtLinkExist = pCoexSta->bBtLinkExist;
- pBtLinkInfo->bScoExist = pCoexSta->bScoExist;
- pBtLinkInfo->bA2dpExist = pCoexSta->bA2dpExist;
- pBtLinkInfo->bPanExist = pCoexSta->bPanExist;
- pBtLinkInfo->bHidExist = pCoexSta->bHidExist;
-
- /* work around for HS mode. */
- if (bBtHsOn) {
- pBtLinkInfo->bPanExist = true;
- pBtLinkInfo->bBtLinkExist = true;
- }
-
- /* check if Sco only */
- if (
- pBtLinkInfo->bScoExist &&
- !pBtLinkInfo->bA2dpExist &&
- !pBtLinkInfo->bPanExist &&
- !pBtLinkInfo->bHidExist
- )
- pBtLinkInfo->bScoOnly = true;
- else
- pBtLinkInfo->bScoOnly = false;
-
- /* check if A2dp only */
- if (
- !pBtLinkInfo->bScoExist &&
- pBtLinkInfo->bA2dpExist &&
- !pBtLinkInfo->bPanExist &&
- !pBtLinkInfo->bHidExist
- )
- pBtLinkInfo->bA2dpOnly = true;
- else
- pBtLinkInfo->bA2dpOnly = false;
-
- /* check if Pan only */
- if (
- !pBtLinkInfo->bScoExist &&
- !pBtLinkInfo->bA2dpExist &&
- pBtLinkInfo->bPanExist &&
- !pBtLinkInfo->bHidExist
- )
- pBtLinkInfo->bPanOnly = true;
- else
- pBtLinkInfo->bPanOnly = false;
-
- /* check if Hid only */
- if (
- !pBtLinkInfo->bScoExist &&
- !pBtLinkInfo->bA2dpExist &&
- !pBtLinkInfo->bPanExist &&
- pBtLinkInfo->bHidExist
- )
- pBtLinkInfo->bHidOnly = true;
- else
- pBtLinkInfo->bHidOnly = false;
-}
-
-static u8 halbtc8723b2ant_ActionAlgorithm(struct btc_coexist *pBtCoexist)
-{
- struct btc_bt_link_info *pBtLinkInfo = &pBtCoexist->btLinkInfo;
- bool bBtHsOn = false;
- u8 algorithm = BT_8723B_2ANT_COEX_ALGO_UNDEFINED;
- u8 numOfDiffProfile = 0;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
-
- if (!pBtLinkInfo->bBtLinkExist)
- return algorithm;
-
- if (pBtLinkInfo->bScoExist)
- numOfDiffProfile++;
-
- if (pBtLinkInfo->bHidExist)
- numOfDiffProfile++;
-
- if (pBtLinkInfo->bPanExist)
- numOfDiffProfile++;
-
- if (pBtLinkInfo->bA2dpExist)
- numOfDiffProfile++;
-
- if (numOfDiffProfile == 1) {
- if (pBtLinkInfo->bScoExist) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;
- } else {
- if (pBtLinkInfo->bHidExist) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_HID;
- } else if (pBtLinkInfo->bA2dpExist) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP;
- } else if (pBtLinkInfo->bPanExist) {
- if (bBtHsOn) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_PANHS;
- } else {
- algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR;
- }
- }
- }
- } else if (numOfDiffProfile == 2) {
- if (pBtLinkInfo->bScoExist) {
- if (pBtLinkInfo->bHidExist) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
- } else if (pBtLinkInfo->bA2dpExist) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
- } else if (pBtLinkInfo->bPanExist) {
- if (bBtHsOn) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;
- } else {
- algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
- }
- }
- } else {
- if (
- pBtLinkInfo->bHidExist &&
- pBtLinkInfo->bA2dpExist
- ) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;
- } else if (
- pBtLinkInfo->bHidExist &&
- pBtLinkInfo->bPanExist
- ) {
- if (bBtHsOn) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_HID;
- } else {
- algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
- }
- } else if (
- pBtLinkInfo->bPanExist &&
- pBtLinkInfo->bA2dpExist
- ) {
- if (bBtHsOn) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS;
- } else {
- algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP;
- }
- }
- }
- } else if (numOfDiffProfile == 3) {
- if (pBtLinkInfo->bScoExist) {
- if (
- pBtLinkInfo->bHidExist &&
- pBtLinkInfo->bA2dpExist
- ) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
- } else if (
- pBtLinkInfo->bHidExist &&
- pBtLinkInfo->bPanExist
- ) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
- } else if (
- pBtLinkInfo->bPanExist &&
- pBtLinkInfo->bA2dpExist
- ) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
- }
- } else {
- if (
- pBtLinkInfo->bHidExist &&
- pBtLinkInfo->bPanExist &&
- pBtLinkInfo->bA2dpExist
- ) {
- if (bBtHsOn) {
- algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP;
- } else {
- algorithm = BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
- }
- }
- }
- } else if (numOfDiffProfile >= 3) {
- if (pBtLinkInfo->bScoExist) {
- if (
- pBtLinkInfo->bHidExist &&
- pBtLinkInfo->bPanExist &&
- pBtLinkInfo->bA2dpExist
- ) {
- if (bBtHsOn) {
- } else {
- algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;
- }
- }
- }
- }
-
- return algorithm;
-}
-
-static void halbtc8723b2ant_SetFwDacSwingLevel(
- struct btc_coexist *pBtCoexist, u8 dacSwingLvl
-)
-{
- u8 H2C_Parameter[1] = {0};
-
- /* There are several type of dacswing */
- /* 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6 */
- H2C_Parameter[0] = dacSwingLvl;
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x64, 1, H2C_Parameter);
-}
-
-static void halbtc8723b2ant_SetFwDecBtPwr(
- struct btc_coexist *pBtCoexist, u8 decBtPwrLvl
-)
-{
- u8 H2C_Parameter[1] = {0};
-
- H2C_Parameter[0] = decBtPwrLvl;
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x62, 1, H2C_Parameter);
-}
-
-static void halbtc8723b2ant_DecBtPwr(
- struct btc_coexist *pBtCoexist, bool bForceExec, u8 decBtPwrLvl
-)
-{
- pCoexDm->curBtDecPwrLvl = decBtPwrLvl;
-
- if (!bForceExec) {
- if (pCoexDm->preBtDecPwrLvl == pCoexDm->curBtDecPwrLvl)
- return;
- }
- halbtc8723b2ant_SetFwDecBtPwr(pBtCoexist, pCoexDm->curBtDecPwrLvl);
-
- pCoexDm->preBtDecPwrLvl = pCoexDm->curBtDecPwrLvl;
-}
-
-static void halbtc8723b2ant_FwDacSwingLvl(
- struct btc_coexist *pBtCoexist, bool bForceExec, u8 fwDacSwingLvl
-)
-{
- pCoexDm->curFwDacSwingLvl = fwDacSwingLvl;
-
- if (!bForceExec) {
- if (pCoexDm->preFwDacSwingLvl == pCoexDm->curFwDacSwingLvl)
- return;
- }
-
- halbtc8723b2ant_SetFwDacSwingLevel(pBtCoexist, pCoexDm->curFwDacSwingLvl);
-
- pCoexDm->preFwDacSwingLvl = pCoexDm->curFwDacSwingLvl;
-}
-
-static void halbtc8723b2ant_SetSwRfRxLpfCorner(
- struct btc_coexist *pBtCoexist,
- bool bRxRfShrinkOn
-)
-{
- if (bRxRfShrinkOn) {
- /* Shrink RF Rx LPF corner */
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, 0xffffc);
- } else {
- /* Resume RF Rx LPF corner */
- /* After initialized, we can use pCoexDm->btRf0x1eBackup */
- if (pBtCoexist->bInitilized) {
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff, pCoexDm->btRf0x1eBackup);
- }
- }
-}
-
-static void halbtc8723b2ant_RfShrink(
- struct btc_coexist *pBtCoexist, bool bForceExec, bool bRxRfShrinkOn
-)
-{
- pCoexDm->bCurRfRxLpfShrink = bRxRfShrinkOn;
-
- if (!bForceExec) {
- if (pCoexDm->bPreRfRxLpfShrink == pCoexDm->bCurRfRxLpfShrink)
- return;
- }
- halbtc8723b2ant_SetSwRfRxLpfCorner(pBtCoexist, pCoexDm->bCurRfRxLpfShrink);
-
- pCoexDm->bPreRfRxLpfShrink = pCoexDm->bCurRfRxLpfShrink;
-}
-
-static void halbtc8723b2ant_SetSwPenaltyTxRateAdaptive(
- struct btc_coexist *pBtCoexist, bool bLowPenaltyRa
-)
-{
- u8 H2C_Parameter[6] = {0};
-
- H2C_Parameter[0] = 0x6; /* opCode, 0x6 = Retry_Penalty */
-
- if (bLowPenaltyRa) {
- H2C_Parameter[1] |= BIT(0);
- H2C_Parameter[2] = 0x00; /* normal rate except MCS7/6/5, OFDM54/48/36 */
- H2C_Parameter[3] = 0xf7; /* MCS7 or OFDM54 */
- H2C_Parameter[4] = 0xf8; /* MCS6 or OFDM48 */
- H2C_Parameter[5] = 0xf9; /* MCS5 or OFDM36 */
- }
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x69, 6, H2C_Parameter);
-}
-
-static void halbtc8723b2ant_LowPenaltyRa(
- struct btc_coexist *pBtCoexist, bool bForceExec, bool bLowPenaltyRa
-)
-{
- /* return; */
- pCoexDm->bCurLowPenaltyRa = bLowPenaltyRa;
-
- if (!bForceExec) {
- if (pCoexDm->bPreLowPenaltyRa == pCoexDm->bCurLowPenaltyRa)
- return;
- }
- halbtc8723b2ant_SetSwPenaltyTxRateAdaptive(pBtCoexist, pCoexDm->bCurLowPenaltyRa);
-
- pCoexDm->bPreLowPenaltyRa = pCoexDm->bCurLowPenaltyRa;
-}
-
-static void halbtc8723b2ant_SetDacSwingReg(struct btc_coexist *pBtCoexist, u32 level)
-{
- u8 val = (u8)level;
-
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x883, 0x3e, val);
-}
-
-static void halbtc8723b2ant_SetSwFullTimeDacSwing(
- struct btc_coexist *pBtCoexist, bool bSwDacSwingOn, u32 swDacSwingLvl
-)
-{
- if (bSwDacSwingOn)
- halbtc8723b2ant_SetDacSwingReg(pBtCoexist, swDacSwingLvl);
- else
- halbtc8723b2ant_SetDacSwingReg(pBtCoexist, 0x18);
-}
-
-static void halbtc8723b2ant_DacSwing(
- struct btc_coexist *pBtCoexist,
- bool bForceExec,
- bool bDacSwingOn,
- u32 dacSwingLvl
-)
-{
- pCoexDm->bCurDacSwingOn = bDacSwingOn;
- pCoexDm->curDacSwingLvl = dacSwingLvl;
-
- if (!bForceExec) {
- if ((pCoexDm->bPreDacSwingOn == pCoexDm->bCurDacSwingOn) &&
- (pCoexDm->preDacSwingLvl == pCoexDm->curDacSwingLvl))
- return;
- }
- mdelay(30);
- halbtc8723b2ant_SetSwFullTimeDacSwing(pBtCoexist, bDacSwingOn, dacSwingLvl);
-
- pCoexDm->bPreDacSwingOn = pCoexDm->bCurDacSwingOn;
- pCoexDm->preDacSwingLvl = pCoexDm->curDacSwingLvl;
-}
-
-static void halbtc8723b2ant_SetAgcTable(
- struct btc_coexist *pBtCoexist, bool bAgcTableEn
-)
-{
- u8 rssiAdjustVal = 0;
-
- /* BB AGC Gain Table */
- if (bAgcTableEn) {
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6e1A0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6d1B0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6c1C0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6b1D0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x6a1E0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x691F0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0x68200001);
- } else {
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xaa1A0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa91B0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa81C0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa71D0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa61E0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa51F0001);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0xc78, 0xa4200001);
- }
-
- /* RF Gain */
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);
- if (bAgcTableEn) {
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38fff);
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x38ffe);
- } else {
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x380c3);
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x3b, 0xfffff, 0x28ce6);
- }
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xef, 0xfffff, 0x0);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x1);
- if (bAgcTableEn) {
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38fff);
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x38ffe);
- } else {
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x380c3);
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x40, 0xfffff, 0x28ce6);
- }
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0xed, 0xfffff, 0x0);
-
- /* set rssiAdjustVal for wifi module. */
- if (bAgcTableEn)
- rssiAdjustVal = 8;
-
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON, &rssiAdjustVal);
-}
-
-static void halbtc8723b2ant_AgcTable(
- struct btc_coexist *pBtCoexist, bool bForceExec, bool bAgcTableEn
-)
-{
- pCoexDm->bCurAgcTableEn = bAgcTableEn;
-
- if (!bForceExec) {
- if (pCoexDm->bPreAgcTableEn == pCoexDm->bCurAgcTableEn)
- return;
- }
- halbtc8723b2ant_SetAgcTable(pBtCoexist, bAgcTableEn);
-
- pCoexDm->bPreAgcTableEn = pCoexDm->bCurAgcTableEn;
-}
-
-static void halbtc8723b2ant_SetCoexTable(
- struct btc_coexist *pBtCoexist,
- u32 val0x6c0,
- u32 val0x6c4,
- u32 val0x6c8,
- u8 val0x6cc
-)
-{
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c0, val0x6c0);
-
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c4, val0x6c4);
-
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x6c8, val0x6c8);
-
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x6cc, val0x6cc);
-}
-
-static void halbtc8723b2ant_CoexTable(
- struct btc_coexist *pBtCoexist,
- bool bForceExec,
- u32 val0x6c0,
- u32 val0x6c4,
- u32 val0x6c8,
- u8 val0x6cc
-)
-{
- pCoexDm->curVal0x6c0 = val0x6c0;
- pCoexDm->curVal0x6c4 = val0x6c4;
- pCoexDm->curVal0x6c8 = val0x6c8;
- pCoexDm->curVal0x6cc = val0x6cc;
-
- if (!bForceExec) {
- if (
- (pCoexDm->preVal0x6c0 == pCoexDm->curVal0x6c0) &&
- (pCoexDm->preVal0x6c4 == pCoexDm->curVal0x6c4) &&
- (pCoexDm->preVal0x6c8 == pCoexDm->curVal0x6c8) &&
- (pCoexDm->preVal0x6cc == pCoexDm->curVal0x6cc)
- )
- return;
- }
- halbtc8723b2ant_SetCoexTable(pBtCoexist, val0x6c0, val0x6c4, val0x6c8, val0x6cc);
-
- pCoexDm->preVal0x6c0 = pCoexDm->curVal0x6c0;
- pCoexDm->preVal0x6c4 = pCoexDm->curVal0x6c4;
- pCoexDm->preVal0x6c8 = pCoexDm->curVal0x6c8;
- pCoexDm->preVal0x6cc = pCoexDm->curVal0x6cc;
-}
-
-static void halbtc8723b2ant_CoexTableWithType(
- struct btc_coexist *pBtCoexist, bool bForceExec, u8 type
-)
-{
- switch (type) {
- case 0:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x55555555, 0xffff, 0x3);
- break;
- case 1:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55555555, 0x5afa5afa, 0xffff, 0x3);
- break;
- case 2:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5a5a5a5a, 0x5a5a5a5a, 0xffff, 0x3);
- break;
- case 3:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0xaaaaaaaa, 0xaaaaaaaa, 0xffff, 0x3);
- break;
- case 4:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0xffffffff, 0xffffffff, 0xffff, 0x3);
- break;
- case 5:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5fff5fff, 0x5fff5fff, 0xffff, 0x3);
- break;
- case 6:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5a5a5a5a, 0xffff, 0x3);
- break;
- case 7:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0xfafafafa, 0xffff, 0x3);
- break;
- case 8:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x5aea5aea, 0x5aea5aea, 0xffff, 0x3);
- break;
- case 9:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5aea5aea, 0xffff, 0x3);
- break;
- case 10:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5aff5aff, 0xffff, 0x3);
- break;
- case 11:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5a5f5a5f, 0xffff, 0x3);
- break;
- case 12:
- halbtc8723b2ant_CoexTable(pBtCoexist, bForceExec, 0x55ff55ff, 0x5f5f5f5f, 0xffff, 0x3);
- break;
- default:
- break;
- }
-}
-
-static void halbtc8723b2ant_SetFwIgnoreWlanAct(
- struct btc_coexist *pBtCoexist, bool bEnable
-)
-{
- u8 H2C_Parameter[1] = {0};
-
- if (bEnable)
- H2C_Parameter[0] |= BIT(0); /* function enable */
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x63, 1, H2C_Parameter);
-}
-
-static void halbtc8723b2ant_IgnoreWlanAct(
- struct btc_coexist *pBtCoexist, bool bForceExec, bool bEnable
-)
-{
- pCoexDm->bCurIgnoreWlanAct = bEnable;
-
- if (!bForceExec) {
- if (pCoexDm->bPreIgnoreWlanAct == pCoexDm->bCurIgnoreWlanAct)
- return;
- }
- halbtc8723b2ant_SetFwIgnoreWlanAct(pBtCoexist, bEnable);
-
- pCoexDm->bPreIgnoreWlanAct = pCoexDm->bCurIgnoreWlanAct;
-}
-
-static void halbtc8723b2ant_SetFwPstdma(
- struct btc_coexist *pBtCoexist,
- u8 byte1,
- u8 byte2,
- u8 byte3,
- u8 byte4,
- u8 byte5
-)
-{
- u8 H2C_Parameter[5] = {0};
-
- H2C_Parameter[0] = byte1;
- H2C_Parameter[1] = byte2;
- H2C_Parameter[2] = byte3;
- H2C_Parameter[3] = byte4;
- H2C_Parameter[4] = byte5;
-
- pCoexDm->psTdmaPara[0] = byte1;
- pCoexDm->psTdmaPara[1] = byte2;
- pCoexDm->psTdmaPara[2] = byte3;
- pCoexDm->psTdmaPara[3] = byte4;
- pCoexDm->psTdmaPara[4] = byte5;
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x60, 5, H2C_Parameter);
-}
-
-static void halbtc8723b2ant_SwMechanism1(
- struct btc_coexist *pBtCoexist,
- bool bShrinkRxLPF,
- bool bLowPenaltyRA,
- bool bLimitedDIG,
- bool bBTLNAConstrain
-)
-{
- halbtc8723b2ant_RfShrink(pBtCoexist, NORMAL_EXEC, bShrinkRxLPF);
- halbtc8723b2ant_LowPenaltyRa(pBtCoexist, NORMAL_EXEC, bLowPenaltyRA);
-}
-
-static void halbtc8723b2ant_SwMechanism2(
- struct btc_coexist *pBtCoexist,
- bool bAGCTableShift,
- bool bADCBackOff,
- bool bSWDACSwing,
- u32 dacSwingLvl
-)
-{
- halbtc8723b2ant_AgcTable(pBtCoexist, NORMAL_EXEC, bAGCTableShift);
- halbtc8723b2ant_DacSwing(pBtCoexist, NORMAL_EXEC, bSWDACSwing, dacSwingLvl);
-}
-
-static void halbtc8723b2ant_SetAntPath(
- struct btc_coexist *pBtCoexist, u8 antPosType, bool bInitHwCfg, bool bWifiOff
-)
-{
- struct btc_board_info *pBoardInfo = &pBtCoexist->boardInfo;
- u32 fwVer = 0, u4Tmp = 0;
- bool bPgExtSwitch = false;
- bool bUseExtSwitch = false;
- u8 H2C_Parameter[2] = {0};
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_EXT_SWITCH, &bPgExtSwitch);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer); /* [31:16]=fw ver, [15:0]=fw sub ver */
-
- if ((fwVer > 0 && fwVer < 0xc0000) || bPgExtSwitch)
- bUseExtSwitch = true;
-
- if (bInitHwCfg) {
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x39, 0x8, 0x1);
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x974, 0xff);
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x944, 0x3, 0x3);
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x930, 0x77);
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x1);
-
- if (fwVer >= 0x180000) {
- /* Use H2C to set GNT_BT to LOW */
- H2C_Parameter[0] = 0;
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);
- } else {
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x0);
- }
-
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0); /* WiFi TRx Mask off */
- pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x01); /* BT TRx Mask off */
-
- if (pBoardInfo->btdmAntPos == BTC_ANTENNA_AT_MAIN_PORT) {
- /* tell firmware "no antenna inverse" */
- H2C_Parameter[0] = 0;
- } else {
- /* tell firmware "antenna inverse" */
- H2C_Parameter[0] = 1;
- }
-
- if (bUseExtSwitch) {
- /* ext switch type */
- H2C_Parameter[1] = 1;
- } else {
- /* int switch type */
- H2C_Parameter[1] = 0;
- }
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x65, 2, H2C_Parameter);
- }
-
- /* ext switch setting */
- if (bUseExtSwitch) {
- if (bInitHwCfg) {
- /* 0x4c[23]= 0, 0x4c[24]= 1 Antenna control by WL/BT */
- u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
- u4Tmp &= ~BIT(23);
- u4Tmp |= BIT(24);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);
- }
-
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0); /* fixed internal switch S1->WiFi, S0->BT */
- switch (antPosType) {
- case BTC_ANT_WIFI_AT_MAIN:
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x1); /* ext switch main at wifi */
- break;
- case BTC_ANT_WIFI_AT_AUX:
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x92c, 0x3, 0x2); /* ext switch aux at wifi */
- break;
- }
- } else { /* internal switch */
- if (bInitHwCfg) {
- /* 0x4c[23]= 0, 0x4c[24]= 1 Antenna control by WL/BT */
- u4Tmp = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x4c);
- u4Tmp |= BIT(23);
- u4Tmp &= ~BIT(24);
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x4c, u4Tmp);
- }
-
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x64, 0x1, 0x0); /* fixed external switch S1->Main, S0->Aux */
- switch (antPosType) {
- case BTC_ANT_WIFI_AT_MAIN:
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0); /* fixed internal switch S1->WiFi, S0->BT */
- break;
- case BTC_ANT_WIFI_AT_AUX:
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x280); /* fixed internal switch S0->WiFi, S1->BT */
- break;
- }
- }
-}
-
-static void halbtc8723b2ant_PsTdma(
- struct btc_coexist *pBtCoexist, bool bForceExec, bool bTurnOn, u8 type
-)
-{
- pCoexDm->bCurPsTdmaOn = bTurnOn;
- pCoexDm->curPsTdma = type;
-
- if (!bForceExec) {
- if (
- (pCoexDm->bPrePsTdmaOn == pCoexDm->bCurPsTdmaOn) &&
- (pCoexDm->prePsTdma == pCoexDm->curPsTdma)
- )
- return;
- }
-
- if (bTurnOn) {
- switch (type) {
- case 1:
- default:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
- break;
- case 2:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);
- break;
- case 3:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0xf1, 0x90);
- break;
- case 4:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x10, 0x03, 0xf1, 0x90);
- break;
- case 5:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);
- break;
- case 6:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);
- break;
- case 7:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1c, 0x3, 0x70, 0x90);
- break;
- case 8:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x10, 0x3, 0x70, 0x90);
- break;
- case 9:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
- break;
- case 10:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0xe1, 0x90);
- break;
- case 11:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0xe1, 0x90);
- break;
- case 12:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);
- break;
- case 13:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0x60, 0x90);
- break;
- case 14:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x12, 0x12, 0x60, 0x90);
- break;
- case 15:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0xa, 0xa, 0x60, 0x90);
- break;
- case 16:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0x60, 0x90);
- break;
- case 17:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xa3, 0x2f, 0x2f, 0x60, 0x90);
- break;
- case 18:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x5, 0x5, 0xe1, 0x90);
- break;
- case 19:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0xe1, 0x90);
- break;
- case 20:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x25, 0x25, 0x60, 0x90);
- break;
- case 21:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x15, 0x03, 0x70, 0x90);
- break;
- case 71:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0xe3, 0x1a, 0x1a, 0xe1, 0x90);
- break;
- }
- } else {
- /* disable PS tdma */
- switch (type) {
- case 0:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);
- break;
- case 1:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x48, 0x0);
- break;
- default:
- halbtc8723b2ant_SetFwPstdma(pBtCoexist, 0x0, 0x0, 0x0, 0x40, 0x0);
- break;
- }
- }
-
- /* update pre state */
- pCoexDm->bPrePsTdmaOn = pCoexDm->bCurPsTdmaOn;
- pCoexDm->prePsTdma = pCoexDm->curPsTdma;
-}
-
-static void halbtc8723b2ant_CoexAllOff(struct btc_coexist *pBtCoexist)
-{
- /* fw all off */
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 1);
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- /* sw all off */
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
-
- /* hw all off */
- /* pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0); */
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
-}
-
-static void halbtc8723b2ant_InitCoexDm(struct btc_coexist *pBtCoexist)
-{
- /* force to reset coex mechanism */
-
- halbtc8723b2ant_PsTdma(pBtCoexist, FORCE_EXEC, false, 1);
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);
- halbtc8723b2ant_DecBtPwr(pBtCoexist, FORCE_EXEC, 0);
-
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
-}
-
-static void halbtc8723b2ant_ActionBtInquiry(struct btc_coexist *pBtCoexist)
-{
- bool bWifiConnected = false;
- bool bLowPwrDisable = true;
-
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
-
- if (bWifiConnected) {
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 3);
- } else {
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 1);
- }
-
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, FORCE_EXEC, 6);
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
-
- pCoexDm->bNeedRecover0x948 = true;
- pCoexDm->backup0x948 = pBtCoexist->fBtcRead4Byte(pBtCoexist, 0x948);
-
- halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_AUX, false, false);
-}
-
-static bool halbtc8723b2ant_IsCommonAction(struct btc_coexist *pBtCoexist)
-{
- u8 btRssiState = BTC_RSSI_STATE_HIGH;
- bool bCommon = false, bWifiConnected = false, bWifiBusy = false;
- bool bBtHsOn = false, bLowPwrDisable = false;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_HS_OPERATION, &bBtHsOn);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_BUSY, &bWifiBusy);
-
- if (!bWifiConnected) {
- bLowPwrDisable = false;
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 1);
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
-
- bCommon = true;
- } else {
- if (pCoexDm->btStatus == BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE) {
- bLowPwrDisable = false;
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 1);
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
-
- bCommon = true;
- } else if (pCoexDm->btStatus == BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE) {
- bLowPwrDisable = true;
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
-
- if (bBtHsOn)
- return false;
-
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 1);
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
-
- bCommon = true;
- } else {
- bLowPwrDisable = true;
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_ACT_DISABLE_LOW_POWER, &bLowPwrDisable);
-
- if (bWifiBusy) {
- bCommon = false;
- } else {
- if (bBtHsOn)
- return false;
-
- btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 21);
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 0xb);
-
- if (BTC_RSSI_HIGH(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- bCommon = true;
- }
- }
- }
-
- return bCommon;
-}
-
-static void halbtc8723b2ant_TdmaDurationAdjust(
- struct btc_coexist *pBtCoexist, bool bScoHid, bool bTxPause, u8 maxInterval
-)
-{
- static s32 up, dn, m, n, WaitCount;
- s32 result; /* 0: no change, +1: increase WiFi duration, -1: decrease WiFi duration */
- u8 retryCount = 0;
-
- if (!pCoexDm->bAutoTdmaAdjust) {
- pCoexDm->bAutoTdmaAdjust = true;
- {
- if (bScoHid) {
- if (bTxPause) {
- if (maxInterval == 1)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(13);
- else if (maxInterval == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(14);
- else
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- } else {
- if (maxInterval == 1)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(9);
- else if (maxInterval == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(10);
- else
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- }
- } else {
- if (bTxPause) {
- if (maxInterval == 1)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(5);
- else if (maxInterval == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(6);
- else
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- } else {
- if (maxInterval == 1)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(1);
- else if (maxInterval == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(2);
- else
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- }
- }
- }
- /* */
- up = 0;
- dn = 0;
- m = 1;
- n = 3;
- result = 0;
- WaitCount = 0;
- } else {
- /* acquire the BT TRx retry count from BT_Info byte2 */
- retryCount = pCoexSta->btRetryCnt;
- result = 0;
- WaitCount++;
-
- if (retryCount == 0) { /* no retry in the last 2-second duration */
- up++;
- dn--;
-
- if (dn <= 0)
- dn = 0;
-
- if (up >= n) { /* if 連續 n 個2秒 retry count為0, 則調寬WiFi duration */
- WaitCount = 0;
- n = 3;
- up = 0;
- dn = 0;
- result = 1;
- }
- } else if (retryCount <= 3) { /* <=3 retry in the last 2-second duration */
- up--;
- dn++;
-
- if (up <= 0)
- up = 0;
-
- if (dn == 2) { /* if 連續 2 個2秒 retry count< 3, 則調窄WiFi duration */
- if (WaitCount <= 2)
- m++; /* 避免一直在兩個level中來回 */
- else
- m = 1;
-
- if (m >= 20) /* m 最大值 = 20 ' 最大120秒 recheck是否調整 WiFi duration. */
- m = 20;
-
- n = 3 * m;
- up = 0;
- dn = 0;
- WaitCount = 0;
- result = -1;
- }
- } else { /* retry count > 3, 只要1次 retry count > 3, 則調窄WiFi duration */
- if (WaitCount == 1)
- m++; /* 避免一直在兩個level中來回 */
- else
- m = 1;
-
- if (m >= 20) /* m 最大值 = 20 ' 最大120秒 recheck是否調整 WiFi duration. */
- m = 20;
-
- n = 3 * m;
- up = 0;
- dn = 0;
- WaitCount = 0;
- result = -1;
- }
-
- if (maxInterval == 1) {
- if (bTxPause) {
- if (pCoexDm->curPsTdma == 71)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(5);
- else if (pCoexDm->curPsTdma == 1)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(5);
- else if (pCoexDm->curPsTdma == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(6);
- else if (pCoexDm->curPsTdma == 3)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 4)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(8);
-
- if (pCoexDm->curPsTdma == 9)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(13);
- else if (pCoexDm->curPsTdma == 10)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(14);
- else if (pCoexDm->curPsTdma == 11)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 12)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(16);
-
- if (result == -1) {
- if (pCoexDm->curPsTdma == 5)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(6);
- else if (pCoexDm->curPsTdma == 6)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 7)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(8);
- else if (pCoexDm->curPsTdma == 13)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(14);
- else if (pCoexDm->curPsTdma == 14)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 15)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(16);
- } else if (result == 1) {
- if (pCoexDm->curPsTdma == 8)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 7)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(6);
- else if (pCoexDm->curPsTdma == 6)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(5);
- else if (pCoexDm->curPsTdma == 16)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 15)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(14);
- else if (pCoexDm->curPsTdma == 14)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(13);
- }
- } else {
- if (pCoexDm->curPsTdma == 5)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(71);
- else if (pCoexDm->curPsTdma == 6)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(2);
- else if (pCoexDm->curPsTdma == 7)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 8)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(4);
-
- if (pCoexDm->curPsTdma == 13)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(9);
- else if (pCoexDm->curPsTdma == 14)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(10);
- else if (pCoexDm->curPsTdma == 15)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 16)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(12);
-
- if (result == -1) {
- if (pCoexDm->curPsTdma == 71)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(1);
- else if (pCoexDm->curPsTdma == 1)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(2);
- else if (pCoexDm->curPsTdma == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 3)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(4);
- else if (pCoexDm->curPsTdma == 9)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(10);
- else if (pCoexDm->curPsTdma == 10)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 11)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(12);
- } else if (result == 1) {
- if (pCoexDm->curPsTdma == 4)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 3)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(2);
- else if (pCoexDm->curPsTdma == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(1);
- else if (pCoexDm->curPsTdma == 1)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(71);
- else if (pCoexDm->curPsTdma == 12)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 11)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(10);
- else if (pCoexDm->curPsTdma == 10)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(9);
- }
- }
- } else if (maxInterval == 2) {
- if (bTxPause) {
- if (pCoexDm->curPsTdma == 1)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(6);
- else if (pCoexDm->curPsTdma == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(6);
- else if (pCoexDm->curPsTdma == 3)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 4)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(8);
-
- if (pCoexDm->curPsTdma == 9)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(14);
- else if (pCoexDm->curPsTdma == 10)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(14);
- else if (pCoexDm->curPsTdma == 11)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 12)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(16);
-
- if (result == -1) {
- if (pCoexDm->curPsTdma == 5)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(6);
- else if (pCoexDm->curPsTdma == 6)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 7)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(8);
- else if (pCoexDm->curPsTdma == 13)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(14);
- else if (pCoexDm->curPsTdma == 14)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 15)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(16);
- } else if (result == 1) {
- if (pCoexDm->curPsTdma == 8)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 7)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(6);
- else if (pCoexDm->curPsTdma == 6)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(6);
- else if (pCoexDm->curPsTdma == 16)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 15)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(14);
- else if (pCoexDm->curPsTdma == 14)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(14);
- }
- } else {
- if (pCoexDm->curPsTdma == 5)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(2);
- else if (pCoexDm->curPsTdma == 6)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(2);
- else if (pCoexDm->curPsTdma == 7)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 8)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(4);
-
- if (pCoexDm->curPsTdma == 13)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(10);
- else if (pCoexDm->curPsTdma == 14)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(10);
- else if (pCoexDm->curPsTdma == 15)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 16)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(12);
-
- if (result == -1) {
- if (pCoexDm->curPsTdma == 1)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(2);
- else if (pCoexDm->curPsTdma == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 3)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(4);
- else if (pCoexDm->curPsTdma == 9)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(10);
- else if (pCoexDm->curPsTdma == 10)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 11)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(12);
- } else if (result == 1) {
- if (pCoexDm->curPsTdma == 4)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 3)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(2);
- else if (pCoexDm->curPsTdma == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(2);
- else if (pCoexDm->curPsTdma == 12)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 11)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(10);
- else if (pCoexDm->curPsTdma == 10)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(10);
- }
- }
- } else if (maxInterval == 3) {
- if (bTxPause) {
- if (pCoexDm->curPsTdma == 1)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 3)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 4)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(8);
-
- if (pCoexDm->curPsTdma == 9)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 10)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 11)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 12)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(16);
-
- if (result == -1) {
- if (pCoexDm->curPsTdma == 5)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 6)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 7)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(8);
- else if (pCoexDm->curPsTdma == 13)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 14)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 15)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(16);
- } else if (result == 1) {
- if (pCoexDm->curPsTdma == 8)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 7)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 6)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(7);
- else if (pCoexDm->curPsTdma == 16)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 15)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- else if (pCoexDm->curPsTdma == 14)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(15);
- }
- } else {
- if (pCoexDm->curPsTdma == 5)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 6)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 7)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 8)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(4);
-
- if (pCoexDm->curPsTdma == 13)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 14)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 15)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 16)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(12);
-
- if (result == -1) {
- if (pCoexDm->curPsTdma == 1)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 3)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(4);
- else if (pCoexDm->curPsTdma == 9)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 10)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 11)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(12);
- } else if (result == 1) {
- if (pCoexDm->curPsTdma == 4)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 3)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 2)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(3);
- else if (pCoexDm->curPsTdma == 12)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 11)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- else if (pCoexDm->curPsTdma == 10)
- HAL_BTC8723B2ANT_DMA_DURATION_ADJUST(11);
- }
- }
- }
- }
-
- /* if current PsTdma not match with the recorded one (when scan, dhcp...), */
- /* then we have to adjust it back to the previous record one. */
- if (pCoexDm->curPsTdma != pCoexDm->psTdmaDuAdjType) {
- bool bScan = false, bLink = false, bRoam = false;
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_SCAN, &bScan);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_LINK, &bLink);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_ROAM, &bRoam);
-
- if (!bScan && !bLink && !bRoam)
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, pCoexDm->psTdmaDuAdjType);
-
- }
-}
-
-/* SCO only or SCO+PAN(HS) */
-static void halbtc8723b2ant_ActionSco(struct btc_coexist *pBtCoexist)
-{
- u8 wifiRssiState, btRssiState;
- u32 wifiBw;
-
- wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
- btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
-
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 4);
-
- if (BTC_RSSI_HIGH(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
-
- if (wifiBw == BTC_WIFI_BW_LEGACY) /* for SCO quality at 11b/g mode */
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 2);
- else /* for SCO quality & wifi performance balance at 11n mode */
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 8);
-
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 0); /* for voice quality */
-
- /* sw mechanism */
- if (wifiBw == BTC_WIFI_BW_HT40) {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, true, 0x4);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, true, 0x4);
- }
- } else {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, true, 0x4);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, true, 0x4);
- }
- }
-}
-
-static void halbtc8723b2ant_ActionHid(struct btc_coexist *pBtCoexist)
-{
- u8 wifiRssiState, btRssiState;
- u32 wifiBw;
-
- wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
- btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
-
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
-
- if (BTC_RSSI_HIGH(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
-
- if (wifiBw == BTC_WIFI_BW_LEGACY) /* for HID at 11b/g mode */
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
- else /* for HID quality & wifi performance balance at 11n mode */
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 9);
-
- if (
- (btRssiState == BTC_RSSI_STATE_HIGH) ||
- (btRssiState == BTC_RSSI_STATE_STAY_HIGH)
- )
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 9);
- else
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 13);
-
- /* sw mechanism */
- if (wifiBw == BTC_WIFI_BW_HT40) {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- } else {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- }
-}
-
-/* A2DP only / PAN(EDR) only/ A2DP+PAN(HS) */
-static void halbtc8723b2ant_ActionA2dp(struct btc_coexist *pBtCoexist)
-{
- u8 wifiRssiState, wifiRssiState1, btRssiState;
- u32 wifiBw;
- u8 apNum = 0;
-
- wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
- wifiRssiState1 = halbtc8723b2ant_WifiRssiState(pBtCoexist, 1, 2, 40, 0);
- btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);
-
- /* define the office environment */
- if (apNum >= 10 && BTC_RSSI_HIGH(wifiRssiState1)) {
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 0);
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 1);
-
- /* sw mechanism */
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
- if (wifiBw == BTC_WIFI_BW_HT40) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, true, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, true, 0x18);
- }
- return;
- }
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
-
- if (BTC_RSSI_HIGH(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
-
- if (
- (btRssiState == BTC_RSSI_STATE_HIGH) ||
- (btRssiState == BTC_RSSI_STATE_STAY_HIGH)
- )
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, false, false, 1);
- else
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, false, true, 1);
-
- /* sw mechanism */
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
- if (wifiBw == BTC_WIFI_BW_HT40) {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- } else {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- }
-}
-
-static void halbtc8723b2ant_ActionA2dpPanHs(struct btc_coexist *pBtCoexist)
-{
- u8 wifiRssiState, btRssiState;
- u32 wifiBw;
-
- wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
- btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
-
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
-
- if (BTC_RSSI_HIGH(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
-
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, false, true, 2);
-
- /* sw mechanism */
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
- if (wifiBw == BTC_WIFI_BW_HT40) {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- } else {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- }
-}
-
-static void halbtc8723b2ant_ActionPanEdr(struct btc_coexist *pBtCoexist)
-{
- u8 wifiRssiState, btRssiState;
- u32 wifiBw;
-
- wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
- btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
-
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
-
- if (BTC_RSSI_HIGH(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 10);
-
- if (
- (btRssiState == BTC_RSSI_STATE_HIGH) ||
- (btRssiState == BTC_RSSI_STATE_STAY_HIGH)
- )
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 1);
- else
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, true, 5);
-
- /* sw mechanism */
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
- if (wifiBw == BTC_WIFI_BW_HT40) {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- } else {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- }
-}
-
-/* PAN(HS) only */
-static void halbtc8723b2ant_ActionPanHs(struct btc_coexist *pBtCoexist)
-{
- u8 wifiRssiState, btRssiState;
- u32 wifiBw;
-
- wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
- btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
-
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
-
- if (BTC_RSSI_HIGH(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
-
- halbtc8723b2ant_PsTdma(pBtCoexist, NORMAL_EXEC, false, 1);
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
- if (wifiBw == BTC_WIFI_BW_HT40) {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- } else {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- }
-}
-
-/* PAN(EDR)+A2DP */
-static void halbtc8723b2ant_ActionPanEdrA2dp(struct btc_coexist *pBtCoexist)
-{
- u8 wifiRssiState, btRssiState;
- u32 wifiBw;
-
- wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
- btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
-
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
-
- if (BTC_RSSI_HIGH(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
-
- if (
- (btRssiState == BTC_RSSI_STATE_HIGH) ||
- (btRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 12);
- if (wifiBw == BTC_WIFI_BW_HT40)
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, false, true, 3);
- else
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, false, false, 3);
- } else {
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, false, true, 3);
- }
-
- /* sw mechanism */
- if (wifiBw == BTC_WIFI_BW_HT40) {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- } else {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, false, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- }
-}
-
-static void halbtc8723b2ant_ActionPanEdrHid(struct btc_coexist *pBtCoexist)
-{
- u8 wifiRssiState, btRssiState;
- u32 wifiBw;
-
- wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
- btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
-
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- if (BTC_RSSI_HIGH(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- if (
- (btRssiState == BTC_RSSI_STATE_HIGH) ||
- (btRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- if (wifiBw == BTC_WIFI_BW_HT40) {
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 3);
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 11);
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780);
- } else {
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
- }
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, true, false, 2);
- } else {
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 11);
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, true, true, 2);
- }
-
- /* sw mechanism */
- if (wifiBw == BTC_WIFI_BW_HT40) {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- } else {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- }
-}
-
-/* HID+A2DP+PAN(EDR) */
-static void halbtc8723b2ant_ActionHidA2dpPanEdr(struct btc_coexist *pBtCoexist)
-{
- u8 wifiRssiState, btRssiState;
- u32 wifiBw;
-
- wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
- btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
-
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, false, 0x8);
-
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
-
- if (BTC_RSSI_HIGH(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
-
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
-
- if (
- (btRssiState == BTC_RSSI_STATE_HIGH) ||
- (btRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- if (wifiBw == BTC_WIFI_BW_HT40)
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, true, true, 2);
- else
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, true, false, 3);
- } else
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, true, true, 3);
-
- /* sw mechanism */
- if (wifiBw == BTC_WIFI_BW_HT40) {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- } else {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- }
-}
-
-static void halbtc8723b2ant_ActionHidA2dp(struct btc_coexist *pBtCoexist)
-{
- u8 wifiRssiState, btRssiState;
- u32 wifiBw;
- u8 apNum = 0;
-
- wifiRssiState = halbtc8723b2ant_WifiRssiState(pBtCoexist, 0, 2, 15, 0);
- /* btRssiState = halbtc8723b2ant_BtRssiState(2, 29, 0); */
- btRssiState = halbtc8723b2ant_BtRssiState(3, 29, 37);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);
-
- halbtc8723b2ant_LimitedRx(pBtCoexist, NORMAL_EXEC, false, true, 0x5);
-
- halbtc8723b2ant_FwDacSwingLvl(pBtCoexist, NORMAL_EXEC, 6);
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
- if (wifiBw == BTC_WIFI_BW_LEGACY) {
- if (BTC_RSSI_HIGH(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else if (BTC_RSSI_MEDIUM(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
- } else {
- /* only 802.11N mode we have to dec bt power to 4 degree */
- if (BTC_RSSI_HIGH(btRssiState)) {
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);
- /* need to check ap Number of Not */
- if (apNum < 10)
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 4);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- } else if (BTC_RSSI_MEDIUM(btRssiState))
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 2);
- else
- halbtc8723b2ant_DecBtPwr(pBtCoexist, NORMAL_EXEC, 0);
- }
-
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, NORMAL_EXEC, 7);
-
- if (
- (btRssiState == BTC_RSSI_STATE_HIGH) ||
- (btRssiState == BTC_RSSI_STATE_STAY_HIGH)
- )
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, true, false, 2);
- else
- halbtc8723b2ant_TdmaDurationAdjust(pBtCoexist, true, true, 2);
-
- /* sw mechanism */
- if (wifiBw == BTC_WIFI_BW_HT40) {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, true, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- } else {
- if (
- (wifiRssiState == BTC_RSSI_STATE_HIGH) ||
- (wifiRssiState == BTC_RSSI_STATE_STAY_HIGH)
- ) {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, true, false, false, 0x18);
- } else {
- halbtc8723b2ant_SwMechanism1(pBtCoexist, false, true, false, false);
- halbtc8723b2ant_SwMechanism2(pBtCoexist, false, false, false, 0x18);
- }
- }
-}
-
-static void halbtc8723b2ant_RunCoexistMechanism(struct btc_coexist *pBtCoexist)
-{
- u8 algorithm = 0;
-
- if (pBtCoexist->bManualControl) {
- return;
- }
-
- if (pCoexSta->bUnderIps) {
- return;
- }
-
- algorithm = halbtc8723b2ant_ActionAlgorithm(pBtCoexist);
- if (pCoexSta->bC2hBtInquiryPage && (algorithm != BT_8723B_2ANT_COEX_ALGO_PANHS)) {
- halbtc8723b2ant_ActionBtInquiry(pBtCoexist);
- return;
- } else {
- if (pCoexDm->bNeedRecover0x948) {
- pCoexDm->bNeedRecover0x948 = false;
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, pCoexDm->backup0x948);
- }
- }
-
- pCoexDm->curAlgorithm = algorithm;
-
- if (halbtc8723b2ant_IsCommonAction(pBtCoexist)) {
- pCoexDm->bAutoTdmaAdjust = false;
- } else {
- if (pCoexDm->curAlgorithm != pCoexDm->preAlgorithm) {
- pCoexDm->bAutoTdmaAdjust = false;
- }
-
- switch (pCoexDm->curAlgorithm) {
- case BT_8723B_2ANT_COEX_ALGO_SCO:
- halbtc8723b2ant_ActionSco(pBtCoexist);
- break;
- case BT_8723B_2ANT_COEX_ALGO_HID:
- halbtc8723b2ant_ActionHid(pBtCoexist);
- break;
- case BT_8723B_2ANT_COEX_ALGO_A2DP:
- halbtc8723b2ant_ActionA2dp(pBtCoexist);
- break;
- case BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS:
- halbtc8723b2ant_ActionA2dpPanHs(pBtCoexist);
- break;
- case BT_8723B_2ANT_COEX_ALGO_PANEDR:
- halbtc8723b2ant_ActionPanEdr(pBtCoexist);
- break;
- case BT_8723B_2ANT_COEX_ALGO_PANHS:
- halbtc8723b2ant_ActionPanHs(pBtCoexist);
- break;
- case BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP:
- halbtc8723b2ant_ActionPanEdrA2dp(pBtCoexist);
- break;
- case BT_8723B_2ANT_COEX_ALGO_PANEDR_HID:
- halbtc8723b2ant_ActionPanEdrHid(pBtCoexist);
- break;
- case BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR:
- halbtc8723b2ant_ActionHidA2dpPanEdr(pBtCoexist);
- break;
- case BT_8723B_2ANT_COEX_ALGO_HID_A2DP:
- halbtc8723b2ant_ActionHidA2dp(pBtCoexist);
- break;
- default:
- halbtc8723b2ant_CoexAllOff(pBtCoexist);
- break;
- }
- pCoexDm->preAlgorithm = pCoexDm->curAlgorithm;
- }
-}
-
-static void halbtc8723b2ant_WifiOffHwCfg(struct btc_coexist *pBtCoexist)
-{
- bool bIsInMpMode = false;
- u8 H2C_Parameter[2] = {0};
- u32 fwVer = 0;
-
- /* set wlan_act to low */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4);
-
- pBtCoexist->fBtcSetRfReg(pBtCoexist, BTC_RF_A, 0x1, 0xfffff, 0x780); /* WiFi goto standby while GNT_BT 0-->1 */
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);
- if (fwVer >= 0x180000) {
- /* Use H2C to set GNT_BT to HIGH */
- H2C_Parameter[0] = 1;
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x6E, 1, H2C_Parameter);
- } else
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x18);
-
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_IS_IN_MP_MODE, &bIsInMpMode);
- if (!bIsInMpMode)
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x0); /* BT select s0/s1 is controlled by BT */
- else
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x67, 0x20, 0x1); /* BT select s0/s1 is controlled by WiFi */
-}
-
-static void halbtc8723b2ant_InitHwConfig(struct btc_coexist *pBtCoexist, bool bBackUp)
-{
- u8 u1Tmp = 0;
-
- /* backup rf 0x1e value */
- pCoexDm->btRf0x1eBackup =
- pBtCoexist->fBtcGetRfReg(pBtCoexist, BTC_RF_A, 0x1e, 0xfffff);
-
- /* 0x790[5:0]= 0x5 */
- u1Tmp = pBtCoexist->fBtcRead1Byte(pBtCoexist, 0x790);
- u1Tmp &= 0xc0;
- u1Tmp |= 0x5;
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x790, u1Tmp);
-
- /* Antenna config */
- halbtc8723b2ant_SetAntPath(pBtCoexist, BTC_ANT_WIFI_AT_MAIN, true, false);
-
- /* PTA parameter */
- halbtc8723b2ant_CoexTableWithType(pBtCoexist, FORCE_EXEC, 0);
-
- /* Enable counter statistics */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0xc); /* 0x76e[3] = 1, WLAN_Act control by PTA */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x778, 0x3);
- pBtCoexist->fBtcWrite1ByteBitMask(pBtCoexist, 0x40, 0x20, 0x1);
-}
-
-/* */
-/* work around function start with wa_halbtc8723b2ant_ */
-/* */
-/* */
-/* extern function start with EXhalbtc8723b2ant_ */
-/* */
-void EXhalbtc8723b2ant_PowerOnSetting(struct btc_coexist *pBtCoexist)
-{
- struct btc_board_info *pBoardInfo = &pBtCoexist->boardInfo;
- u8 u1Tmp = 0x4; /* Set BIT2 by default since it's 2ant case */
- u16 u2Tmp = 0x0;
-
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x67, 0x20);
-
- /* enable BB, REG_SYS_FUNC_EN such that we can write 0x948 correctly. */
- u2Tmp = pBtCoexist->fBtcRead2Byte(pBtCoexist, 0x2);
- pBtCoexist->fBtcWrite2Byte(pBtCoexist, 0x2, u2Tmp | BIT(0) | BIT(1));
-
- /* set GRAN_BT = 1 */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x765, 0x18);
- /* set WLAN_ACT = 0 */
- pBtCoexist->fBtcWrite1Byte(pBtCoexist, 0x76e, 0x4);
-
- /* */
- /* S0 or S1 setting and Local register setting(By the setting fw can get ant number, S0/S1, ... info) */
- /* Local setting bit define */
- /* BIT0: "0" for no antenna inverse; "1" for antenna inverse */
- /* BIT1: "0" for internal switch; "1" for external switch */
- /* BIT2: "0" for one antenna; "1" for two antenna */
- /* NOTE: here default all internal switch and 1-antenna ==> BIT1 = 0 and BIT2 = 0 */
- if (pBtCoexist->chipInterface == BTC_INTF_USB) {
- /* fixed at S0 for USB interface */
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);
-
- u1Tmp |= 0x1; /* antenna inverse */
- pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0xfe08, u1Tmp);
-
- pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_AUX_PORT;
- } else {
- /* for PCIE and SDIO interface, we check efuse 0xc3[6] */
- if (pBoardInfo->singleAntPath == 0) {
- /* set to S1 */
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x280);
- pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT;
- } else if (pBoardInfo->singleAntPath == 1) {
- /* set to S0 */
- pBtCoexist->fBtcWrite4Byte(pBtCoexist, 0x948, 0x0);
- u1Tmp |= 0x1; /* antenna inverse */
- pBoardInfo->btdmAntPos = BTC_ANTENNA_AT_AUX_PORT;
- }
-
- if (pBtCoexist->chipInterface == BTC_INTF_PCI)
- pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x384, u1Tmp);
- else if (pBtCoexist->chipInterface == BTC_INTF_SDIO)
- pBtCoexist->fBtcWriteLocalReg1Byte(pBtCoexist, 0x60, u1Tmp);
- }
-}
-
-void EXhalbtc8723b2ant_InitHwConfig(struct btc_coexist *pBtCoexist, bool bWifiOnly)
-{
- halbtc8723b2ant_InitHwConfig(pBtCoexist, true);
-}
-
-void EXhalbtc8723b2ant_InitCoexDm(struct btc_coexist *pBtCoexist)
-{
- halbtc8723b2ant_InitCoexDm(pBtCoexist);
-}
-
-void EXhalbtc8723b2ant_IpsNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- if (type == BTC_IPS_ENTER) {
- pCoexSta->bUnderIps = true;
- halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);
- halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, true);
- halbtc8723b2ant_CoexAllOff(pBtCoexist);
- } else if (type == BTC_IPS_LEAVE) {
- pCoexSta->bUnderIps = false;
- halbtc8723b2ant_InitHwConfig(pBtCoexist, false);
- halbtc8723b2ant_InitCoexDm(pBtCoexist);
- halbtc8723b2ant_QueryBtInfo(pBtCoexist);
- }
-}
-
-void EXhalbtc8723b2ant_LpsNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- if (type == BTC_LPS_ENABLE) {
- pCoexSta->bUnderLps = true;
- } else if (type == BTC_LPS_DISABLE) {
- pCoexSta->bUnderLps = false;
- }
-}
-
-void EXhalbtc8723b2ant_ScanNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- if (type == BTC_SCAN_START) {
- } else if (type == BTC_SCAN_FINISH) {
- }
-}
-
-void EXhalbtc8723b2ant_ConnectNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- if (type == BTC_ASSOCIATE_START) {
- } else if (type == BTC_ASSOCIATE_FINISH) {
- }
-}
-
-void EXhalbtc8723b2ant_MediaStatusNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- u8 H2C_Parameter[3] = {0};
- u32 wifiBw;
- u8 wifiCentralChnl;
- u8 apNum = 0;
-
- /* only 2.4G we need to inform bt the chnl mask */
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL, &wifiCentralChnl);
- if ((type == BTC_MEDIA_CONNECT) && (wifiCentralChnl <= 14)) {
- H2C_Parameter[0] = 0x1;
- H2C_Parameter[1] = wifiCentralChnl;
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_BW, &wifiBw);
- if (wifiBw == BTC_WIFI_BW_HT40)
- H2C_Parameter[2] = 0x30;
- else {
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U1_AP_NUM, &apNum);
- if (apNum < 10)
- H2C_Parameter[2] = 0x30;
- else
- H2C_Parameter[2] = 0x20;
- }
- }
-
- pCoexDm->wifiChnlInfo[0] = H2C_Parameter[0];
- pCoexDm->wifiChnlInfo[1] = H2C_Parameter[1];
- pCoexDm->wifiChnlInfo[2] = H2C_Parameter[2];
-
- pBtCoexist->fBtcFillH2c(pBtCoexist, 0x66, 3, H2C_Parameter);
-}
-
-void EXhalbtc8723b2ant_SpecialPacketNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
-}
-
-void EXhalbtc8723b2ant_BtInfoNotify(
- struct btc_coexist *pBtCoexist, u8 *tmpBuf, u8 length
-)
-{
- u8 btInfo = 0;
- u8 i, rspSource = 0;
- bool bBtBusy = false, bLimitedDig = false;
- bool bWifiConnected = false;
-
- pCoexSta->bC2hBtInfoReqSent = false;
-
- rspSource = tmpBuf[0] & 0xf;
- if (rspSource >= BT_INFO_SRC_8723B_2ANT_MAX)
- rspSource = BT_INFO_SRC_8723B_2ANT_WIFI_FW;
-
- pCoexSta->btInfoC2hCnt[rspSource]++;
-
- for (i = 0; i < length; i++) {
- pCoexSta->btInfoC2h[rspSource][i] = tmpBuf[i];
- if (i == 1)
- btInfo = tmpBuf[i];
-
- }
-
- if (pBtCoexist->bManualControl) {
- return;
- }
-
- if (rspSource != BT_INFO_SRC_8723B_2ANT_WIFI_FW) {
- pCoexSta->btRetryCnt = pCoexSta->btInfoC2h[rspSource][2] & 0xf; /* [3:0] */
-
- pCoexSta->btRssi = pCoexSta->btInfoC2h[rspSource][3] * 2 + 10;
-
- pCoexSta->btInfoExt = pCoexSta->btInfoC2h[rspSource][4];
-
- pCoexSta->bBtTxRxMask = (pCoexSta->btInfoC2h[rspSource][2] & 0x40);
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TX_RX_MASK, &pCoexSta->bBtTxRxMask);
- if (pCoexSta->bBtTxRxMask) {
- /* BT into is responded by BT FW and BT RF REG 0x3C != 0x01 => Need to switch BT TRx Mask */
- pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x01);
- }
-
- /* Here we need to resend some wifi info to BT */
- /* because bt is reset and loss of the info. */
- if ((pCoexSta->btInfoExt & BIT(1))) {
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_BL_WIFI_CONNECTED, &bWifiConnected);
-
- if (bWifiConnected)
- EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_CONNECT);
- else
- EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);
- }
-
- if ((pCoexSta->btInfoExt & BIT(3))) {
- halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, false);
- } else {
- /* BT already NOT ignore Wlan active, do nothing here. */
- }
- }
-
- /* check BIT2 first ==> check if bt is under inquiry or page scan */
- if (btInfo & BT_INFO_8723B_2ANT_B_INQ_PAGE)
- pCoexSta->bC2hBtInquiryPage = true;
- else
- pCoexSta->bC2hBtInquiryPage = false;
-
- /* set link exist status */
- if (!(btInfo & BT_INFO_8723B_2ANT_B_CONNECTION)) {
- pCoexSta->bBtLinkExist = false;
- pCoexSta->bPanExist = false;
- pCoexSta->bA2dpExist = false;
- pCoexSta->bHidExist = false;
- pCoexSta->bScoExist = false;
- } else { /* connection exists */
- pCoexSta->bBtLinkExist = true;
- if (btInfo & BT_INFO_8723B_2ANT_B_FTP)
- pCoexSta->bPanExist = true;
- else
- pCoexSta->bPanExist = false;
- if (btInfo & BT_INFO_8723B_2ANT_B_A2DP)
- pCoexSta->bA2dpExist = true;
- else
- pCoexSta->bA2dpExist = false;
- if (btInfo & BT_INFO_8723B_2ANT_B_HID)
- pCoexSta->bHidExist = true;
- else
- pCoexSta->bHidExist = false;
- if (btInfo & BT_INFO_8723B_2ANT_B_SCO_ESCO)
- pCoexSta->bScoExist = true;
- else
- pCoexSta->bScoExist = false;
- }
-
- halbtc8723b2ant_UpdateBtLinkInfo(pBtCoexist);
-
- if (!(btInfo & BT_INFO_8723B_2ANT_B_CONNECTION)) {
- pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE;
- } else if (btInfo == BT_INFO_8723B_2ANT_B_CONNECTION) { /* connection exists but no busy */
- pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE;
- } else if (
- (btInfo & BT_INFO_8723B_2ANT_B_SCO_ESCO) ||
- (btInfo & BT_INFO_8723B_2ANT_B_SCO_BUSY)
- ) {
- pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_SCO_BUSY;
- } else if (btInfo & BT_INFO_8723B_2ANT_B_ACL_BUSY) {
- pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_ACL_BUSY;
- } else {
- pCoexDm->btStatus = BT_8723B_2ANT_BT_STATUS_MAX;
- }
-
- if (
- (pCoexDm->btStatus == BT_8723B_2ANT_BT_STATUS_ACL_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_2ANT_BT_STATUS_SCO_BUSY) ||
- (pCoexDm->btStatus == BT_8723B_2ANT_BT_STATUS_ACL_SCO_BUSY)
- ) {
- bBtBusy = true;
- bLimitedDig = true;
- } else {
- bBtBusy = false;
- bLimitedDig = false;
- }
-
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bBtBusy);
-
- pCoexDm->bLimitedDig = bLimitedDig;
- pBtCoexist->fBtcSet(pBtCoexist, BTC_SET_BL_BT_LIMITED_DIG, &bLimitedDig);
-
- halbtc8723b2ant_RunCoexistMechanism(pBtCoexist);
-}
-
-void EXhalbtc8723b2ant_HaltNotify(struct btc_coexist *pBtCoexist)
-{
- halbtc8723b2ant_WifiOffHwCfg(pBtCoexist);
- pBtCoexist->fBtcSetBtReg(pBtCoexist, BTC_BT_REG_RF, 0x3c, 0x15); /* BT goto standby while GNT_BT 1-->0 */
- halbtc8723b2ant_IgnoreWlanAct(pBtCoexist, FORCE_EXEC, true);
-
- EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, BTC_MEDIA_DISCONNECT);
-}
-
-void EXhalbtc8723b2ant_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState)
-{
- if (pnpState == BTC_WIFI_PNP_SLEEP) {
- } else if (pnpState == BTC_WIFI_PNP_WAKE_UP) {
- halbtc8723b2ant_InitHwConfig(pBtCoexist, false);
- halbtc8723b2ant_InitCoexDm(pBtCoexist);
- halbtc8723b2ant_QueryBtInfo(pBtCoexist);
- }
-}
-
-void EXhalbtc8723b2ant_Periodical(struct btc_coexist *pBtCoexist)
-{
- static u8 disVerInfoCnt;
- u32 fwVer = 0, btPatchVer = 0;
-
- if (disVerInfoCnt <= 5) {
- disVerInfoCnt += 1;
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_BT_PATCH_VER, &btPatchVer);
- pBtCoexist->fBtcGet(pBtCoexist, BTC_GET_U4_WIFI_FW_VER, &fwVer);
- }
-
- if (
- halbtc8723b2ant_IsWifiStatusChanged(pBtCoexist) ||
- pCoexDm->bAutoTdmaAdjust
- )
- halbtc8723b2ant_RunCoexistMechanism(pBtCoexist);
-}
diff --git a/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.h b/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.h
deleted file mode 100644
index ebc47f65e8d2..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalBtc8723b2Ant.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-/* The following is for 8723B 2Ant BT Co-exist definition */
-#define BT_INFO_8723B_2ANT_B_FTP BIT(7)
-#define BT_INFO_8723B_2ANT_B_A2DP BIT(6)
-#define BT_INFO_8723B_2ANT_B_HID BIT(5)
-#define BT_INFO_8723B_2ANT_B_SCO_BUSY BIT(4)
-#define BT_INFO_8723B_2ANT_B_ACL_BUSY BIT(3)
-#define BT_INFO_8723B_2ANT_B_INQ_PAGE BIT(2)
-#define BT_INFO_8723B_2ANT_B_SCO_ESCO BIT(1)
-#define BT_INFO_8723B_2ANT_B_CONNECTION BIT(0)
-
-#define BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT 2
-
-enum {
- BT_INFO_SRC_8723B_2ANT_WIFI_FW = 0x0,
- BT_INFO_SRC_8723B_2ANT_BT_RSP = 0x1,
- BT_INFO_SRC_8723B_2ANT_BT_ACTIVE_SEND = 0x2,
- BT_INFO_SRC_8723B_2ANT_MAX
-};
-
-enum {
- BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE = 0x0,
- BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE = 0x1,
- BT_8723B_2ANT_BT_STATUS_INQ_PAGE = 0x2,
- BT_8723B_2ANT_BT_STATUS_ACL_BUSY = 0x3,
- BT_8723B_2ANT_BT_STATUS_SCO_BUSY = 0x4,
- BT_8723B_2ANT_BT_STATUS_ACL_SCO_BUSY = 0x5,
- BT_8723B_2ANT_BT_STATUS_MAX
-};
-
-enum {
- BT_8723B_2ANT_COEX_ALGO_UNDEFINED = 0x0,
- BT_8723B_2ANT_COEX_ALGO_SCO = 0x1,
- BT_8723B_2ANT_COEX_ALGO_HID = 0x2,
- BT_8723B_2ANT_COEX_ALGO_A2DP = 0x3,
- BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS = 0x4,
- BT_8723B_2ANT_COEX_ALGO_PANEDR = 0x5,
- BT_8723B_2ANT_COEX_ALGO_PANHS = 0x6,
- BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP = 0x7,
- BT_8723B_2ANT_COEX_ALGO_PANEDR_HID = 0x8,
- BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR = 0x9,
- BT_8723B_2ANT_COEX_ALGO_HID_A2DP = 0xa,
- BT_8723B_2ANT_COEX_ALGO_MAX = 0xb,
-};
-
-struct coex_dm_8723b_2ant {
- /* fw mechanism */
- u8 preBtDecPwrLvl;
- u8 curBtDecPwrLvl;
- u8 preFwDacSwingLvl;
- u8 curFwDacSwingLvl;
- bool bCurIgnoreWlanAct;
- bool bPreIgnoreWlanAct;
- u8 prePsTdma;
- u8 curPsTdma;
- u8 psTdmaPara[5];
- u8 psTdmaDuAdjType;
- bool bResetTdmaAdjust;
- bool bAutoTdmaAdjust;
- bool bPrePsTdmaOn;
- bool bCurPsTdmaOn;
- bool bPreBtAutoReport;
- bool bCurBtAutoReport;
-
- /* sw mechanism */
- bool bPreRfRxLpfShrink;
- bool bCurRfRxLpfShrink;
- u32 btRf0x1eBackup;
- bool bPreLowPenaltyRa;
- bool bCurLowPenaltyRa;
- bool bPreDacSwingOn;
- u32 preDacSwingLvl;
- bool bCurDacSwingOn;
- u32 curDacSwingLvl;
- bool bPreAdcBackOff;
- bool bCurAdcBackOff;
- bool bPreAgcTableEn;
- bool bCurAgcTableEn;
- u32 preVal0x6c0;
- u32 curVal0x6c0;
- u32 preVal0x6c4;
- u32 curVal0x6c4;
- u32 preVal0x6c8;
- u32 curVal0x6c8;
- u8 preVal0x6cc;
- u8 curVal0x6cc;
- bool bLimitedDig;
-
- /* algorithm related */
- u8 preAlgorithm;
- u8 curAlgorithm;
- u8 btStatus;
- u8 wifiChnlInfo[3];
-
- bool bNeedRecover0x948;
- u32 backup0x948;
-};
-
-struct coex_sta_8723b_2ant {
- bool bBtLinkExist;
- bool bScoExist;
- bool bA2dpExist;
- bool bHidExist;
- bool bPanExist;
-
- bool bUnderLps;
- bool bUnderIps;
- u32 highPriorityTx;
- u32 highPriorityRx;
- u32 lowPriorityTx;
- u32 lowPriorityRx;
- u8 btRssi;
- bool bBtTxRxMask;
- u8 preBtRssiState;
- u8 preWifiRssiState[4];
- bool bC2hBtInfoReqSent;
- u8 btInfoC2h[BT_INFO_SRC_8723B_2ANT_MAX][10];
- u32 btInfoC2hCnt[BT_INFO_SRC_8723B_2ANT_MAX];
- bool bC2hBtInquiryPage;
- u8 btRetryCnt;
- u8 btInfoExt;
-};
-
-/* */
-/* The following is interface which will notify coex module. */
-/* */
-void EXhalbtc8723b2ant_PowerOnSetting(struct btc_coexist *pBtCoexist);
-void EXhalbtc8723b2ant_InitHwConfig(struct btc_coexist *pBtCoexist, bool bWifiOnly);
-void EXhalbtc8723b2ant_InitCoexDm(struct btc_coexist *pBtCoexist);
-void EXhalbtc8723b2ant_IpsNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b2ant_LpsNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b2ant_ScanNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b2ant_ConnectNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b2ant_MediaStatusNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b2ant_SpecialPacketNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtc8723b2ant_BtInfoNotify(
- struct btc_coexist *pBtCoexist, u8 *tmpBuf, u8 length
-);
-void EXhalbtc8723b2ant_HaltNotify(struct btc_coexist *pBtCoexist);
-void EXhalbtc8723b2ant_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState);
-void EXhalbtc8723b2ant_Periodical(struct btc_coexist *pBtCoexist);
diff --git a/drivers/staging/rtl8723bs/hal/HalBtcOutSrc.h b/drivers/staging/rtl8723bs/hal/HalBtcOutSrc.h
deleted file mode 100644
index 36b0f429dd4c..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalBtcOutSrc.h
+++ /dev/null
@@ -1,426 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __HALBTC_OUT_SRC_H__
-#define __HALBTC_OUT_SRC_H__
-
-#define NORMAL_EXEC false
-#define FORCE_EXEC true
-
-#define BTC_RF_OFF 0x0
-#define BTC_RF_ON 0x1
-
-#define BTC_RF_A 0x0
-#define BTC_RF_B 0x1
-#define BTC_RF_C 0x2
-#define BTC_RF_D 0x3
-
-#define BTC_SMSP SINGLEMAC_SINGLEPHY
-#define BTC_DMDP DUALMAC_DUALPHY
-#define BTC_DMSP DUALMAC_SINGLEPHY
-#define BTC_MP_UNKNOWN 0xff
-
-#define BT_COEX_ANT_TYPE_PG 0
-#define BT_COEX_ANT_TYPE_ANTDIV 1
-#define BT_COEX_ANT_TYPE_DETECTED 2
-
-#define BTC_MIMO_PS_STATIC 0 /* 1ss */
-#define BTC_MIMO_PS_DYNAMIC 1 /* 2ss */
-
-#define BTC_RATE_DISABLE 0
-#define BTC_RATE_ENABLE 1
-
-/* single Antenna definition */
-#define BTC_ANT_PATH_WIFI 0
-#define BTC_ANT_PATH_BT 1
-#define BTC_ANT_PATH_PTA 2
-/* dual Antenna definition */
-#define BTC_ANT_WIFI_AT_MAIN 0
-#define BTC_ANT_WIFI_AT_AUX 1
-/* coupler Antenna definition */
-#define BTC_ANT_WIFI_AT_CPL_MAIN 0
-#define BTC_ANT_WIFI_AT_CPL_AUX 1
-
-enum {
- BTC_PS_WIFI_NATIVE = 0, /* wifi original power save behavior */
- BTC_PS_LPS_ON = 1,
- BTC_PS_LPS_OFF = 2,
- BTC_PS_MAX
-};
-
-enum {
- BTC_BT_REG_RF = 0,
- BTC_BT_REG_MODEM = 1,
- BTC_BT_REG_BLUEWIZE = 2,
- BTC_BT_REG_VENDOR = 3,
- BTC_BT_REG_LE = 4,
- BTC_BT_REG_MAX
-};
-
-enum btc_chip_interface {
- BTC_INTF_UNKNOWN = 0,
- BTC_INTF_PCI = 1,
- BTC_INTF_USB = 2,
- BTC_INTF_SDIO = 3,
- BTC_INTF_MAX
-};
-
-/* following is for wifi link status */
-#define WIFI_STA_CONNECTED BIT(0)
-#define WIFI_AP_CONNECTED BIT(1)
-#define WIFI_HS_CONNECTED BIT(2)
-#define WIFI_P2P_GO_CONNECTED BIT(3)
-#define WIFI_P2P_GC_CONNECTED BIT(4)
-
-struct btc_board_info {
- /* The following is some board information */
- u8 pgAntNum; /* pg ant number */
- u8 btdmAntNum; /* ant number for btdm */
- u8 btdmAntPos; /* Bryant Add to indicate Antenna Position for (pgAntNum = 2) && (btdmAntNum = 1) (DPDT+1Ant case) */
- u8 singleAntPath; /* current used for 8723b only, 1 =>s0, 0 =>s1 */
- /* bool bBtExist; */
-};
-
-enum {
- BTC_RSSI_STATE_HIGH = 0x0,
- BTC_RSSI_STATE_MEDIUM = 0x1,
- BTC_RSSI_STATE_LOW = 0x2,
- BTC_RSSI_STATE_STAY_HIGH = 0x3,
- BTC_RSSI_STATE_STAY_MEDIUM = 0x4,
- BTC_RSSI_STATE_STAY_LOW = 0x5,
- BTC_RSSI_MAX
-};
-#define BTC_RSSI_HIGH(_rssi_) ((_rssi_ == BTC_RSSI_STATE_HIGH || _rssi_ == BTC_RSSI_STATE_STAY_HIGH) ? true : false)
-#define BTC_RSSI_MEDIUM(_rssi_) ((_rssi_ == BTC_RSSI_STATE_MEDIUM || _rssi_ == BTC_RSSI_STATE_STAY_MEDIUM) ? true : false)
-#define BTC_RSSI_LOW(_rssi_) ((_rssi_ == BTC_RSSI_STATE_LOW || _rssi_ == BTC_RSSI_STATE_STAY_LOW) ? true : false)
-
-enum {
- BTC_WIFI_BW_LEGACY = 0x0,
- BTC_WIFI_BW_HT20 = 0x1,
- BTC_WIFI_BW_HT40 = 0x2,
- BTC_WIFI_BW_MAX
-};
-
-enum {
- BTC_WIFI_TRAFFIC_TX = 0x0,
- BTC_WIFI_TRAFFIC_RX = 0x1,
- BTC_WIFI_TRAFFIC_MAX
-};
-
-enum {
- BTC_WIFI_PNP_WAKE_UP = 0x0,
- BTC_WIFI_PNP_SLEEP = 0x1,
- BTC_WIFI_PNP_MAX
-};
-
-/* defined for BFP_BTC_GET */
-enum {
- /* type bool */
- BTC_GET_BL_HS_OPERATION,
- BTC_GET_BL_HS_CONNECTING,
- BTC_GET_BL_WIFI_CONNECTED,
- BTC_GET_BL_WIFI_BUSY,
- BTC_GET_BL_WIFI_SCAN,
- BTC_GET_BL_WIFI_LINK,
- BTC_GET_BL_WIFI_ROAM,
- BTC_GET_BL_WIFI_4_WAY_PROGRESS,
- BTC_GET_BL_WIFI_AP_MODE_ENABLE,
- BTC_GET_BL_WIFI_ENABLE_ENCRYPTION,
- BTC_GET_BL_WIFI_UNDER_B_MODE,
- BTC_GET_BL_EXT_SWITCH,
- BTC_GET_BL_WIFI_IS_IN_MP_MODE,
-
- /* type s32 */
- BTC_GET_S4_WIFI_RSSI,
- BTC_GET_S4_HS_RSSI,
-
- /* type u32 */
- BTC_GET_U4_WIFI_BW,
- BTC_GET_U4_WIFI_TRAFFIC_DIRECTION,
- BTC_GET_U4_WIFI_FW_VER,
- BTC_GET_U4_WIFI_LINK_STATUS,
- BTC_GET_U4_BT_PATCH_VER,
-
- /* type u8 */
- BTC_GET_U1_WIFI_DOT11_CHNL,
- BTC_GET_U1_WIFI_CENTRAL_CHNL,
- BTC_GET_U1_WIFI_HS_CHNL,
- BTC_GET_U1_MAC_PHY_MODE,
- BTC_GET_U1_AP_NUM,
-
- /* for 1Ant ====== */
- BTC_GET_U1_LPS_MODE,
-
- BTC_GET_MAX
-};
-
-/* defined for BFP_BTC_SET */
-enum {
- /* type bool */
- BTC_SET_BL_BT_DISABLE,
- BTC_SET_BL_BT_TRAFFIC_BUSY,
- BTC_SET_BL_BT_LIMITED_DIG,
- BTC_SET_BL_FORCE_TO_ROAM,
- BTC_SET_BL_TO_REJ_AP_AGG_PKT,
- BTC_SET_BL_BT_CTRL_AGG_SIZE,
- BTC_SET_BL_INC_SCAN_DEV_NUM,
- BTC_SET_BL_BT_TX_RX_MASK,
-
- /* type u8 */
- BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,
- BTC_SET_U1_AGG_BUF_SIZE,
-
- /* type trigger some action */
- BTC_SET_ACT_GET_BT_RSSI,
- BTC_SET_ACT_AGGREGATE_CTRL,
- /* for 1Ant ====== */
- /* type bool */
-
- /* type u8 */
- BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE,
- BTC_SET_U1_LPS_VAL,
- BTC_SET_U1_RPWM_VAL,
- /* type trigger some action */
- BTC_SET_ACT_LEAVE_LPS,
- BTC_SET_ACT_ENTER_LPS,
- BTC_SET_ACT_NORMAL_LPS,
- BTC_SET_ACT_DISABLE_LOW_POWER,
- BTC_SET_ACT_UPDATE_RAMASK,
- BTC_SET_ACT_SEND_MIMO_PS,
- /* BT Coex related */
- BTC_SET_ACT_CTRL_BT_INFO,
- BTC_SET_ACT_CTRL_BT_COEX,
- BTC_SET_ACT_CTRL_8723B_ANT,
- /* */
- BTC_SET_MAX
-};
-
-enum {
- BTC_DBG_DISP_COEX_STATISTICS = 0x0,
- BTC_DBG_DISP_BT_LINK_INFO = 0x1,
- BTC_DBG_DISP_FW_PWR_MODE_CMD = 0x2,
- BTC_DBG_DISP_MAX
-};
-
-enum {
- BTC_IPS_LEAVE = 0x0,
- BTC_IPS_ENTER = 0x1,
- BTC_IPS_MAX
-};
-
-enum {
- BTC_LPS_DISABLE = 0x0,
- BTC_LPS_ENABLE = 0x1,
- BTC_LPS_MAX
-};
-
-enum {
- BTC_SCAN_FINISH = 0x0,
- BTC_SCAN_START = 0x1,
- BTC_SCAN_MAX
-};
-
-enum {
- BTC_ASSOCIATE_FINISH = 0x0,
- BTC_ASSOCIATE_START = 0x1,
- BTC_ASSOCIATE_MAX
-};
-
-enum {
- BTC_MEDIA_DISCONNECT = 0x0,
- BTC_MEDIA_CONNECT = 0x1,
- BTC_MEDIA_MAX
-};
-
-enum {
- BTC_PACKET_UNKNOWN = 0x0,
- BTC_PACKET_DHCP = 0x1,
- BTC_PACKET_ARP = 0x2,
- BTC_PACKET_EAPOL = 0x3,
- BTC_PACKET_MAX
-};
-
-/* Bryant Add */
-enum {
- BTC_ANTENNA_AT_MAIN_PORT = 0x1,
- BTC_ANTENNA_AT_AUX_PORT = 0x2,
-};
-
-typedef u8 (*BFP_BTC_R1)(void *pBtcContext, u32 RegAddr);
-typedef u16(*BFP_BTC_R2)(void *pBtcContext, u32 RegAddr);
-typedef u32 (*BFP_BTC_R4)(void *pBtcContext, u32 RegAddr);
-typedef void (*BFP_BTC_W1)(void *pBtcContext, u32 RegAddr, u8 Data);
-typedef void(*BFP_BTC_W1_BIT_MASK)(
- void *pBtcContext, u32 regAddr, u8 bitMask, u8 data1b
-);
-typedef void (*BFP_BTC_W2)(void *pBtcContext, u32 RegAddr, u16 Data);
-typedef void (*BFP_BTC_W4)(void *pBtcContext, u32 RegAddr, u32 Data);
-typedef void (*BFP_BTC_LOCAL_REG_W1)(void *pBtcContext, u32 RegAddr, u8 Data);
-typedef void (*BFP_BTC_SET_BB_REG)(
- void *pBtcContext, u32 RegAddr, u32 BitMask, u32 Data
-);
-typedef u32 (*BFP_BTC_GET_BB_REG)(void *pBtcContext, u32 RegAddr, u32 BitMask);
-typedef void (*BFP_BTC_SET_RF_REG)(
- void *pBtcContext, u8 eRFPath, u32 RegAddr, u32 BitMask, u32 Data
-);
-typedef u32 (*BFP_BTC_GET_RF_REG)(
- void *pBtcContext, u8 eRFPath, u32 RegAddr, u32 BitMask
-);
-typedef void (*BFP_BTC_FILL_H2C)(
- void *pBtcContext, u8 elementId, u32 cmdLen, u8 *pCmdBuffer
-);
-
-typedef u8 (*BFP_BTC_GET)(void *pBtCoexist, u8 getType, void *pOutBuf);
-
-typedef u8 (*BFP_BTC_SET)(void *pBtCoexist, u8 setType, void *pInBuf);
-typedef void (*BFP_BTC_SET_BT_REG)(
- void *pBtcContext, u8 regType, u32 offset, u32 value
-);
-typedef u32 (*BFP_BTC_GET_BT_REG)(void *pBtcContext, u8 regType, u32 offset);
-typedef void (*BFP_BTC_DISP_DBG_MSG)(void *pBtCoexist, u8 dispType);
-
-struct btc_bt_info {
- bool bBtDisabled;
- u8 rssiAdjustForAgcTableOn;
- u8 rssiAdjustFor1AntCoexType;
- bool bPreBtCtrlAggBufSize;
- bool bBtCtrlAggBufSize;
- bool bRejectAggPkt;
- bool bIncreaseScanDevNum;
- bool bBtTxRxMask;
- u8 preAggBufSize;
- u8 aggBufSize;
- bool bBtBusy;
- bool bLimitedDig;
- u16 btHciVer;
- u16 btRealFwVer;
- u8 btFwVer;
- u32 getBtFwVerCnt;
-
- bool bBtDisableLowPwr;
-
- bool bBtCtrlLps;
- bool bBtLpsOn;
- bool bForceToRoam; /* for 1Ant solution */
- u8 lpsVal;
- u8 rpwmVal;
- u32 raMask;
-};
-
-struct btc_stack_info {
- bool bProfileNotified;
- u16 hciVersion; /* stack hci version */
- u8 numOfLink;
- bool bBtLinkExist;
- bool bScoExist;
- bool bAclExist;
- bool bA2dpExist;
- bool bHidExist;
- u8 numOfHid;
- bool bPanExist;
- bool bUnknownAclExist;
- s8 minBtRssi;
-};
-
-struct btc_bt_link_info {
- bool bBtLinkExist;
- bool bScoExist;
- bool bScoOnly;
- bool bA2dpExist;
- bool bA2dpOnly;
- bool bHidExist;
- bool bHidOnly;
- bool bPanExist;
- bool bPanOnly;
- bool bSlaveRole;
-};
-
-struct btc_statistics {
- u32 cntBind;
- u32 cntPowerOn;
- u32 cntInitHwConfig;
- u32 cntInitCoexDm;
- u32 cntIpsNotify;
- u32 cntLpsNotify;
- u32 cntScanNotify;
- u32 cntConnectNotify;
- u32 cntMediaStatusNotify;
- u32 cntSpecialPacketNotify;
- u32 cntBtInfoNotify;
- u32 cntRfStatusNotify;
- u32 cntPeriodical;
- u32 cntCoexDmSwitch;
- u32 cntStackOperationNotify;
- u32 cntDbgCtrl;
-};
-
-struct btc_coexist {
- bool bBinded; /* make sure only one adapter can bind the data context */
- void *Adapter; /* default adapter */
- struct btc_board_info boardInfo;
- struct btc_bt_info btInfo; /* some bt info referenced by non-bt module */
- struct btc_stack_info stackInfo;
- struct btc_bt_link_info btLinkInfo;
- enum btc_chip_interface chipInterface;
-
- bool bInitilized;
- bool bStopCoexDm;
- bool bManualControl;
- struct btc_statistics statistics;
- u8 pwrModeVal[10];
-
- /* function pointers */
- /* io related */
- BFP_BTC_R1 fBtcRead1Byte;
- BFP_BTC_W1 fBtcWrite1Byte;
- BFP_BTC_W1_BIT_MASK fBtcWrite1ByteBitMask;
- BFP_BTC_R2 fBtcRead2Byte;
- BFP_BTC_W2 fBtcWrite2Byte;
- BFP_BTC_R4 fBtcRead4Byte;
- BFP_BTC_W4 fBtcWrite4Byte;
- BFP_BTC_LOCAL_REG_W1 fBtcWriteLocalReg1Byte;
- /* read/write bb related */
- BFP_BTC_SET_BB_REG fBtcSetBbReg;
- BFP_BTC_GET_BB_REG fBtcGetBbReg;
-
- /* read/write rf related */
- BFP_BTC_SET_RF_REG fBtcSetRfReg;
- BFP_BTC_GET_RF_REG fBtcGetRfReg;
-
- /* fill h2c related */
- BFP_BTC_FILL_H2C fBtcFillH2c;
- /* normal get/set related */
- BFP_BTC_GET fBtcGet;
- BFP_BTC_SET fBtcSet;
-
- BFP_BTC_GET_BT_REG fBtcGetBtReg;
- BFP_BTC_SET_BT_REG fBtcSetBtReg;
-};
-
-extern struct btc_coexist GLBtCoexist;
-
-void EXhalbtcoutsrc_PowerOnSetting(struct btc_coexist *pBtCoexist);
-void EXhalbtcoutsrc_InitHwConfig(struct btc_coexist *pBtCoexist, u8 bWifiOnly);
-void EXhalbtcoutsrc_InitCoexDm(struct btc_coexist *pBtCoexist);
-void EXhalbtcoutsrc_IpsNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtcoutsrc_LpsNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtcoutsrc_ScanNotify(struct btc_coexist *pBtCoexist, u8 type);
-void EXhalbtcoutsrc_ConnectNotify(struct btc_coexist *pBtCoexist, u8 action);
-void EXhalbtcoutsrc_MediaStatusNotify(
- struct btc_coexist *pBtCoexist, enum rt_media_status mediaStatus
-);
-void EXhalbtcoutsrc_SpecialPacketNotify(struct btc_coexist *pBtCoexist, u8 pktType);
-void EXhalbtcoutsrc_BtInfoNotify(
- struct btc_coexist *pBtCoexist, u8 *tmpBuf, u8 length
-);
-void EXhalbtcoutsrc_HaltNotify(struct btc_coexist *pBtCoexist);
-void EXhalbtcoutsrc_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState);
-void EXhalbtcoutsrc_Periodical(struct btc_coexist *pBtCoexist);
-void EXhalbtcoutsrc_SetChipType(u8 chipType);
-void EXhalbtcoutsrc_SetAntNum(u8 type, u8 antNum);
-void EXhalbtcoutsrc_SetSingleAntPath(u8 singleAntPath);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_BB.c b/drivers/staging/rtl8723bs/hal/HalHWImg8723B_BB.c
deleted file mode 100644
index afdde3980ec3..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_BB.c
+++ /dev/null
@@ -1,556 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <linux/kernel.h>
-#include "odm_precomp.h"
-
-static bool CheckPositive(struct dm_odm_t *pDM_Odm, const u32 Condition1, const u32 Condition2)
-{
- u8 _BoardType =
- ((pDM_Odm->BoardType & BIT(4)) >> 4) << 0 | /* _GLNA */
- ((pDM_Odm->BoardType & BIT(3)) >> 3) << 1 | /* _GPA */
- ((pDM_Odm->BoardType & BIT(7)) >> 7) << 2 | /* _ALNA */
- ((pDM_Odm->BoardType & BIT(6)) >> 6) << 3 | /* _APA */
- ((pDM_Odm->BoardType & BIT(2)) >> 2) << 4; /* _BT */
-
- u32 cond1 = Condition1, cond2 = Condition2;
- u32 driver1 =
- pDM_Odm->CutVersion << 24 |
- pDM_Odm->SupportPlatform << 16 |
- pDM_Odm->PackageType << 12 |
- pDM_Odm->SupportInterface << 8 |
- _BoardType;
-
- u32 driver2 =
- pDM_Odm->TypeGLNA << 0 |
- pDM_Odm->TypeGPA << 8 |
- pDM_Odm->TypeALNA << 16 |
- pDM_Odm->TypeAPA << 24;
-
- /* Value Defined Check =============== */
- /* QFN Type [15:12] and Cut Version [27:24] need to do value check */
-
- if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))
- return false;
- if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))
- return false;
-
- /* Bit Defined Check ================ */
- /* We don't care [31:28] and [23:20] */
- /* */
- cond1 &= 0x000F0FFF;
- driver1 &= 0x000F0FFF;
-
- if ((cond1 & driver1) == cond1) {
- u32 bitMask = 0;
-
- if ((cond1 & 0x0F) == 0) /* BoardType is DONTCARE */
- return true;
-
- if ((cond1 & BIT(0)) != 0) /* GLNA */
- bitMask |= 0x000000FF;
- if ((cond1 & BIT(1)) != 0) /* GPA */
- bitMask |= 0x0000FF00;
- if ((cond1 & BIT(2)) != 0) /* ALNA */
- bitMask |= 0x00FF0000;
- if ((cond1 & BIT(3)) != 0) /* APA */
- bitMask |= 0xFF000000;
-
- /* BoardType of each RF path is matched */
- if ((cond2 & bitMask) == (driver2 & bitMask))
- return true;
- }
- return false;
-}
-
-/******************************************************************************
- * AGC_TAB.TXT
- ******************************************************************************/
-
-static u32 Array_MP_8723B_AGC_TAB[] = {
- 0xC78, 0xFD000001,
- 0xC78, 0xFC010001,
- 0xC78, 0xFB020001,
- 0xC78, 0xFA030001,
- 0xC78, 0xF9040001,
- 0xC78, 0xF8050001,
- 0xC78, 0xF7060001,
- 0xC78, 0xF6070001,
- 0xC78, 0xF5080001,
- 0xC78, 0xF4090001,
- 0xC78, 0xF30A0001,
- 0xC78, 0xF20B0001,
- 0xC78, 0xF10C0001,
- 0xC78, 0xF00D0001,
- 0xC78, 0xEF0E0001,
- 0xC78, 0xEE0F0001,
- 0xC78, 0xED100001,
- 0xC78, 0xEC110001,
- 0xC78, 0xEB120001,
- 0xC78, 0xEA130001,
- 0xC78, 0xE9140001,
- 0xC78, 0xE8150001,
- 0xC78, 0xE7160001,
- 0xC78, 0xE6170001,
- 0xC78, 0xE5180001,
- 0xC78, 0xE4190001,
- 0xC78, 0xE31A0001,
- 0xC78, 0xA51B0001,
- 0xC78, 0xA41C0001,
- 0xC78, 0xA31D0001,
- 0xC78, 0x671E0001,
- 0xC78, 0x661F0001,
- 0xC78, 0x65200001,
- 0xC78, 0x64210001,
- 0xC78, 0x63220001,
- 0xC78, 0x4A230001,
- 0xC78, 0x49240001,
- 0xC78, 0x48250001,
- 0xC78, 0x47260001,
- 0xC78, 0x46270001,
- 0xC78, 0x45280001,
- 0xC78, 0x44290001,
- 0xC78, 0x432A0001,
- 0xC78, 0x422B0001,
- 0xC78, 0x292C0001,
- 0xC78, 0x282D0001,
- 0xC78, 0x272E0001,
- 0xC78, 0x262F0001,
- 0xC78, 0x0A300001,
- 0xC78, 0x09310001,
- 0xC78, 0x08320001,
- 0xC78, 0x07330001,
- 0xC78, 0x06340001,
- 0xC78, 0x05350001,
- 0xC78, 0x04360001,
- 0xC78, 0x03370001,
- 0xC78, 0x02380001,
- 0xC78, 0x01390001,
- 0xC78, 0x013A0001,
- 0xC78, 0x013B0001,
- 0xC78, 0x013C0001,
- 0xC78, 0x013D0001,
- 0xC78, 0x013E0001,
- 0xC78, 0x013F0001,
- 0xC78, 0xFC400001,
- 0xC78, 0xFB410001,
- 0xC78, 0xFA420001,
- 0xC78, 0xF9430001,
- 0xC78, 0xF8440001,
- 0xC78, 0xF7450001,
- 0xC78, 0xF6460001,
- 0xC78, 0xF5470001,
- 0xC78, 0xF4480001,
- 0xC78, 0xF3490001,
- 0xC78, 0xF24A0001,
- 0xC78, 0xF14B0001,
- 0xC78, 0xF04C0001,
- 0xC78, 0xEF4D0001,
- 0xC78, 0xEE4E0001,
- 0xC78, 0xED4F0001,
- 0xC78, 0xEC500001,
- 0xC78, 0xEB510001,
- 0xC78, 0xEA520001,
- 0xC78, 0xE9530001,
- 0xC78, 0xE8540001,
- 0xC78, 0xE7550001,
- 0xC78, 0xE6560001,
- 0xC78, 0xE5570001,
- 0xC78, 0xE4580001,
- 0xC78, 0xE3590001,
- 0xC78, 0xA65A0001,
- 0xC78, 0xA55B0001,
- 0xC78, 0xA45C0001,
- 0xC78, 0xA35D0001,
- 0xC78, 0x675E0001,
- 0xC78, 0x665F0001,
- 0xC78, 0x65600001,
- 0xC78, 0x64610001,
- 0xC78, 0x63620001,
- 0xC78, 0x62630001,
- 0xC78, 0x61640001,
- 0xC78, 0x48650001,
- 0xC78, 0x47660001,
- 0xC78, 0x46670001,
- 0xC78, 0x45680001,
- 0xC78, 0x44690001,
- 0xC78, 0x436A0001,
- 0xC78, 0x426B0001,
- 0xC78, 0x286C0001,
- 0xC78, 0x276D0001,
- 0xC78, 0x266E0001,
- 0xC78, 0x256F0001,
- 0xC78, 0x24700001,
- 0xC78, 0x09710001,
- 0xC78, 0x08720001,
- 0xC78, 0x07730001,
- 0xC78, 0x06740001,
- 0xC78, 0x05750001,
- 0xC78, 0x04760001,
- 0xC78, 0x03770001,
- 0xC78, 0x02780001,
- 0xC78, 0x01790001,
- 0xC78, 0x017A0001,
- 0xC78, 0x017B0001,
- 0xC78, 0x017C0001,
- 0xC78, 0x017D0001,
- 0xC78, 0x017E0001,
- 0xC78, 0x017F0001,
- 0xC50, 0x69553422,
- 0xC50, 0x69553420,
- 0x824, 0x00390204,
-
-};
-
-void ODM_ReadAndConfig_MP_8723B_AGC_TAB(struct dm_odm_t *pDM_Odm)
-{
- u32 i = 0;
- u32 ArrayLen = ARRAY_SIZE(Array_MP_8723B_AGC_TAB);
- u32 *Array = Array_MP_8723B_AGC_TAB;
-
- for (i = 0; i < ArrayLen; i += 2) {
- u32 v1 = Array[i];
- u32 v2 = Array[i + 1];
-
- /* This (offset, data) pair doesn't care the condition. */
- if (v1 < 0x40000000) {
- odm_ConfigBB_AGC_8723B(pDM_Odm, v1, bMaskDWord, v2);
- continue;
- } else {
- /* This line is the beginning of branch. */
- bool bMatched = true;
- u8 cCond = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
-
- if (cCond == COND_ELSE) { /* ELSE, ENDIF */
- bMatched = true;
- READ_NEXT_PAIR(v1, v2, i);
- } else if (!CheckPositive(pDM_Odm, v1, v2)) {
- bMatched = false;
- READ_NEXT_PAIR(v1, v2, i);
- READ_NEXT_PAIR(v1, v2, i);
- } else {
- READ_NEXT_PAIR(v1, v2, i);
- bMatched = true;
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- if (!bMatched) {
- /*
- * Condition isn't matched.
- * Discard the following (offset, data) pairs.
- */
- while (v1 < 0x40000000 && 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. */
- while (v1 < 0x40000000 && i < ArrayLen - 2) {
- odm_ConfigBB_AGC_8723B(pDM_Odm, v1, bMaskDWord, v2);
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- /* Keeps reading until ENDIF. */
- cCond = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
- while (cCond != COND_ENDIF && i < ArrayLen - 2) {
- READ_NEXT_PAIR(v1, v2, i);
- cCond = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
- }
- }
- }
- }
-}
-
-/******************************************************************************
- * PHY_REG.TXT
- ******************************************************************************/
-
-static u32 Array_MP_8723B_PHY_REG[] = {
- 0x800, 0x80040000,
- 0x804, 0x00000003,
- 0x808, 0x0000FC00,
- 0x80C, 0x0000000A,
- 0x810, 0x10001331,
- 0x814, 0x020C3D10,
- 0x818, 0x02200385,
- 0x81C, 0x00000000,
- 0x820, 0x01000100,
- 0x824, 0x00190204,
- 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, 0x80FF800C,
- 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, 0x21806490,
- 0xB2C, 0x00000000,
- 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, 0x69E9AC44,
- 0xC34, 0x469652AF,
- 0xC38, 0x49795994,
- 0xC3C, 0x0A97971C,
- 0xC40, 0x1F7C403F,
- 0xC44, 0x000100B7,
- 0xC48, 0xEC020107,
- 0xC4C, 0x007F037F,
- 0xC50, 0x69553420,
- 0xC54, 0x43BC0094,
- 0xC58, 0x00013149,
- 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, 0x00020E1A,
- 0xC94, 0x00000000,
- 0xC98, 0x00020E1A,
- 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, 0x40020401,
- 0xD08, 0x0000907F,
- 0xD0C, 0x20010201,
- 0xD10, 0xA0633333,
- 0xD14, 0x3333BC53,
- 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, 0x001B2556,
- 0xE6C, 0x00C00096,
- 0xE70, 0x00C00096,
- 0xE74, 0x01000056,
- 0xE78, 0x01000014,
- 0xE7C, 0x01000056,
- 0xE80, 0x01000014,
- 0xE84, 0x00C00096,
- 0xE88, 0x01000056,
- 0xE8C, 0x00C00096,
- 0xED0, 0x00C00096,
- 0xED4, 0x00C00096,
- 0xED8, 0x00C00096,
- 0xEDC, 0x000000D6,
- 0xEE0, 0x000000D6,
- 0xEEC, 0x01C00016,
- 0xF14, 0x00000003,
- 0xF4C, 0x00000000,
- 0xF00, 0x00000300,
- 0x820, 0x01000100,
- 0x800, 0x83040000,
-
-};
-
-void ODM_ReadAndConfig_MP_8723B_PHY_REG(struct dm_odm_t *pDM_Odm)
-{
- u32 i = 0;
- u32 ArrayLen = ARRAY_SIZE(Array_MP_8723B_PHY_REG);
- u32 *Array = Array_MP_8723B_PHY_REG;
-
- for (i = 0; i < ArrayLen; i += 2) {
- u32 v1 = Array[i];
- u32 v2 = Array[i + 1];
-
- /* This (offset, data) pair doesn't care the condition. */
- if (v1 < 0x40000000) {
- odm_ConfigBB_PHY_8723B(pDM_Odm, v1, bMaskDWord, v2);
- continue;
- } else {
- /* This line is the beginning of branch. */
- bool bMatched = true;
- u8 cCond = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
-
- if (cCond == COND_ELSE) { /* ELSE, ENDIF */
- bMatched = true;
- READ_NEXT_PAIR(v1, v2, i);
- } else if (!CheckPositive(pDM_Odm, v1, v2)) {
- bMatched = false;
- READ_NEXT_PAIR(v1, v2, i);
- READ_NEXT_PAIR(v1, v2, i);
- } else {
- READ_NEXT_PAIR(v1, v2, i);
- bMatched = true;
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- if (!bMatched) {
- /*
- * Condition isn't matched.
- * Discard the following (offset, data) pairs.
- */
- while (v1 < 0x40000000 && 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. */
- while (v1 < 0x40000000 && i < ArrayLen - 2) {
- odm_ConfigBB_PHY_8723B(pDM_Odm, v1, bMaskDWord, v2);
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- /* Keeps reading until ENDIF. */
- cCond = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
- while (cCond != COND_ENDIF && i < ArrayLen - 2) {
- READ_NEXT_PAIR(v1, v2, i);
- cCond = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
- }
- }
- }
- }
-}
-
-/******************************************************************************
- * PHY_REG_PG.TXT
- ******************************************************************************/
-
-static u32 Array_MP_8723B_PHY_REG_PG[] = {
- 0, 0x00000e08, 0x0000ff00, 0x00003800,
- 0, 0x0000086c, 0xffffff00, 0x32343600,
- 0, 0x00000e00, 0xffffffff, 0x40424444,
- 0, 0x00000e04, 0xffffffff, 0x28323638,
- 0, 0x00000e10, 0xffffffff, 0x38404244,
- 0, 0x00000e14, 0xffffffff, 0x26303436
-};
-
-void ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(struct dm_odm_t *pDM_Odm)
-{
- u32 i = 0;
- u32 *Array = Array_MP_8723B_PHY_REG_PG;
-
- pDM_Odm->PhyRegPgVersion = 1;
- pDM_Odm->PhyRegPgValueType = PHY_REG_PG_EXACT_VALUE;
-
- for (i = 0; i < ARRAY_SIZE(Array_MP_8723B_PHY_REG_PG); i += 4) {
- u32 v1 = Array[i];
- u32 v2 = Array[i + 1];
- u32 v3 = Array[i + 2];
- u32 v4 = Array[i + 3];
-
- odm_ConfigBB_PHY_REG_PG_8723B(pDM_Odm, v1, v2, v3, v4);
- }
-}
diff --git a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_BB.h b/drivers/staging/rtl8723bs/hal/HalHWImg8723B_BB.h
deleted file mode 100644
index 054acfe231b4..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_BB.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __INC_MP_BB_HW_IMG_8723B_H
-#define __INC_MP_BB_HW_IMG_8723B_H
-
-/******************************************************************************
- * AGC_TAB.TXT
- ******************************************************************************/
-
-void
-ODM_ReadAndConfig_MP_8723B_AGC_TAB(/* TC: Test Chip, MP: MP Chip */
- struct dm_odm_t *pDM_Odm
-);
-
-/******************************************************************************
- * PHY_REG.TXT
- ******************************************************************************/
-
-void
-ODM_ReadAndConfig_MP_8723B_PHY_REG(/* TC: Test Chip, MP: MP Chip */
- struct dm_odm_t *pDM_Odm
-);
-
-/******************************************************************************
- * PHY_REG_PG.TXT
- ******************************************************************************/
-
-void
-ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(/* TC: Test Chip, MP: MP Chip */
- struct dm_odm_t *pDM_Odm
-);
-u32 ODM_GetVersion_MP_8723B_PHY_REG_PG(void);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_MAC.c b/drivers/staging/rtl8723bs/hal/HalHWImg8723B_MAC.c
deleted file mode 100644
index 0e098bd2d9f6..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_MAC.c
+++ /dev/null
@@ -1,237 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <linux/kernel.h>
-#include "odm_precomp.h"
-
-static bool CheckPositive(struct dm_odm_t *pDM_Odm, const u32 Condition1, const u32 Condition2)
-{
- u8 _BoardType =
- ((pDM_Odm->BoardType & BIT(4)) >> 4) << 0 | /* _GLNA */
- ((pDM_Odm->BoardType & BIT(3)) >> 3) << 1 | /* _GPA */
- ((pDM_Odm->BoardType & BIT(7)) >> 7) << 2 | /* _ALNA */
- ((pDM_Odm->BoardType & BIT(6)) >> 6) << 3 | /* _APA */
- ((pDM_Odm->BoardType & BIT(2)) >> 2) << 4; /* _BT */
-
- u32 cond1 = Condition1, cond2 = Condition2;
- u32 driver1 =
- pDM_Odm->CutVersion << 24 |
- pDM_Odm->SupportPlatform << 16 |
- pDM_Odm->PackageType << 12 |
- pDM_Odm->SupportInterface << 8 |
- _BoardType;
-
- u32 driver2 =
- pDM_Odm->TypeGLNA << 0 |
- pDM_Odm->TypeGPA << 8 |
- pDM_Odm->TypeALNA << 16 |
- pDM_Odm->TypeAPA << 24;
-
- /* Value Defined Check =============== */
- /* QFN Type [15:12] and Cut Version [27:24] need to do value check */
-
- if (((cond1 & 0x0000F000) != 0) && ((cond1 & 0x0000F000) != (driver1 & 0x0000F000)))
- return false;
- if (((cond1 & 0x0F000000) != 0) && ((cond1 & 0x0F000000) != (driver1 & 0x0F000000)))
- return false;
-
- /* Bit Defined Check ================ */
- /* We don't care [31:28] and [23:20] */
- /* */
- cond1 &= 0x000F0FFF;
- driver1 &= 0x000F0FFF;
-
- if ((cond1 & driver1) == cond1) {
- u32 bitMask = 0;
-
- if ((cond1 & 0x0F) == 0) /* BoardType is DONTCARE */
- return true;
-
- if ((cond1 & BIT(0)) != 0) /* GLNA */
- bitMask |= 0x000000FF;
- if ((cond1 & BIT(1)) != 0) /* GPA */
- bitMask |= 0x0000FF00;
- if ((cond1 & BIT(2)) != 0) /* ALNA */
- bitMask |= 0x00FF0000;
- if ((cond1 & BIT(3)) != 0) /* APA */
- bitMask |= 0xFF000000;
-
- /* BoardType of each RF path is matched */
- if ((cond2 & bitMask) == (driver2 & bitMask))
- return true;
- }
- return false;
-}
-
-/******************************************************************************
- * MAC_REG.TXT
- ******************************************************************************/
-
-static u32 Array_MP_8723B_MAC_REG[] = {
- 0x02F, 0x00000030,
- 0x035, 0x00000000,
- 0x039, 0x00000008,
- 0x04E, 0x000000E0,
- 0x064, 0x00000000,
- 0x067, 0x00000020,
- 0x428, 0x0000000A,
- 0x429, 0x00000010,
- 0x430, 0x00000000,
- 0x431, 0x00000000,
- 0x432, 0x00000000,
- 0x433, 0x00000001,
- 0x434, 0x00000004,
- 0x435, 0x00000005,
- 0x436, 0x00000007,
- 0x437, 0x00000008,
- 0x43C, 0x00000004,
- 0x43D, 0x00000005,
- 0x43E, 0x00000007,
- 0x43F, 0x00000008,
- 0x440, 0x0000005D,
- 0x441, 0x00000001,
- 0x442, 0x00000000,
- 0x444, 0x00000010,
- 0x445, 0x00000000,
- 0x446, 0x00000000,
- 0x447, 0x00000000,
- 0x448, 0x00000000,
- 0x449, 0x000000F0,
- 0x44A, 0x0000000F,
- 0x44B, 0x0000003E,
- 0x44C, 0x00000010,
- 0x44D, 0x00000000,
- 0x44E, 0x00000000,
- 0x44F, 0x00000000,
- 0x450, 0x00000000,
- 0x451, 0x000000F0,
- 0x452, 0x0000000F,
- 0x453, 0x00000000,
- 0x456, 0x0000005E,
- 0x460, 0x00000066,
- 0x461, 0x00000066,
- 0x4C8, 0x000000FF,
- 0x4C9, 0x00000008,
- 0x4CC, 0x000000FF,
- 0x4CD, 0x000000FF,
- 0x4CE, 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,
- 0x55C, 0x00000050,
- 0x55D, 0x000000FF,
- 0x605, 0x00000030,
- 0x608, 0x0000000E,
- 0x609, 0x0000002A,
- 0x620, 0x000000FF,
- 0x621, 0x000000FF,
- 0x622, 0x000000FF,
- 0x623, 0x000000FF,
- 0x624, 0x000000FF,
- 0x625, 0x000000FF,
- 0x626, 0x000000FF,
- 0x627, 0x000000FF,
- 0x638, 0x00000050,
- 0x63C, 0x0000000A,
- 0x63D, 0x0000000A,
- 0x63E, 0x0000000E,
- 0x63F, 0x0000000E,
- 0x640, 0x00000040,
- 0x642, 0x00000040,
- 0x643, 0x00000000,
- 0x652, 0x000000C8,
- 0x66E, 0x00000005,
- 0x700, 0x00000021,
- 0x701, 0x00000043,
- 0x702, 0x00000065,
- 0x703, 0x00000087,
- 0x708, 0x00000021,
- 0x709, 0x00000043,
- 0x70A, 0x00000065,
- 0x70B, 0x00000087,
- 0x765, 0x00000018,
- 0x76E, 0x00000004,
-
-};
-
-void ODM_ReadAndConfig_MP_8723B_MAC_REG(struct dm_odm_t *pDM_Odm)
-{
- u32 i = 0;
- u32 ArrayLen = ARRAY_SIZE(Array_MP_8723B_MAC_REG);
- u32 *Array = Array_MP_8723B_MAC_REG;
-
- for (i = 0; i < ArrayLen; i += 2) {
- u32 v1 = Array[i];
- u32 v2 = Array[i + 1];
-
- /* This (offset, data) pair doesn't care the condition. */
- if (v1 < 0x40000000) {
- odm_ConfigMAC_8723B(pDM_Odm, v1, (u8)v2);
- continue;
- } else {
- /* This line is the beginning of branch. */
- bool bMatched = true;
- u8 cCond = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
-
- if (cCond == COND_ELSE) { /* ELSE, ENDIF */
- bMatched = true;
- READ_NEXT_PAIR(v1, v2, i);
- } else if (!CheckPositive(pDM_Odm, v1, v2)) {
- bMatched = false;
- READ_NEXT_PAIR(v1, v2, i);
- READ_NEXT_PAIR(v1, v2, i);
- } else {
- READ_NEXT_PAIR(v1, v2, i);
- bMatched = true;
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- if (!bMatched) {
- /*
- * Condition isn't matched.
- * Discard the following (offset, data) pairs.
- */
- while (v1 < 0x40000000 && 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. */
- while (v1 < 0x40000000 && i < ArrayLen - 2) {
- odm_ConfigMAC_8723B(pDM_Odm, v1, (u8)v2);
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- /* Keeps reading until ENDIF. */
- cCond = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
- while (cCond != COND_ENDIF && i < ArrayLen - 2) {
- READ_NEXT_PAIR(v1, v2, i);
- cCond = (u8)((v1 & (BIT(29) | BIT(28))) >> 28);
- }
- }
- }
- }
-}
diff --git a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_MAC.h b/drivers/staging/rtl8723bs/hal/HalHWImg8723B_MAC.h
deleted file mode 100644
index 250861325919..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_MAC.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __INC_MP_MAC_HW_IMG_8723B_H
-#define __INC_MP_MAC_HW_IMG_8723B_H
-
-/******************************************************************************
- * MAC_REG.TXT
- ******************************************************************************/
-
-void
-ODM_ReadAndConfig_MP_8723B_MAC_REG(/* TC: Test Chip, MP: MP Chip */
- struct dm_odm_t *pDM_Odm
-);
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_RF.c b/drivers/staging/rtl8723bs/hal/HalHWImg8723B_RF.c
deleted file mode 100644
index 30c8624bba25..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_RF.c
+++ /dev/null
@@ -1,554 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <linux/kernel.h>
-#include "odm_precomp.h"
-
-static bool CheckPositive(
- struct dm_odm_t *pDM_Odm, const u32 Condition1, const u32 Condition2
-)
-{
- u8 _BoardType =
- ((pDM_Odm->BoardType & BIT(4)) >> 4) << 0 | /* _GLNA */
- ((pDM_Odm->BoardType & BIT(3)) >> 3) << 1 | /* _GPA */
- ((pDM_Odm->BoardType & BIT(7)) >> 7) << 2 | /* _ALNA */
- ((pDM_Odm->BoardType & BIT(6)) >> 6) << 3 | /* _APA */
- ((pDM_Odm->BoardType & BIT(2)) >> 2) << 4; /* _BT */
-
- u32 cond1 = Condition1, cond2 = Condition2;
- u32 driver1 =
- pDM_Odm->CutVersion << 24 |
- pDM_Odm->SupportPlatform << 16 |
- pDM_Odm->PackageType << 12 |
- pDM_Odm->SupportInterface << 8 |
- _BoardType;
-
- u32 driver2 =
- pDM_Odm->TypeGLNA << 0 |
- pDM_Odm->TypeGPA << 8 |
- pDM_Odm->TypeALNA << 16 |
- pDM_Odm->TypeAPA << 24;
-
- /* Value Defined Check =============== */
- /* QFN Type [15:12] and Cut Version [27:24] need to do value check */
-
- if (
- ((cond1 & 0x0000F000) != 0) &&
- ((cond1 & 0x0000F000) != (driver1 & 0x0000F000))
- )
- return false;
-
- if (
- ((cond1 & 0x0F000000) != 0) &&
- ((cond1 & 0x0F000000) != (driver1 & 0x0F000000))
- )
- return false;
-
- /* Bit Defined Check ================ */
- /* We don't care [31:28] and [23:20] */
- cond1 &= 0x000F0FFF;
- driver1 &= 0x000F0FFF;
-
- if ((cond1 & driver1) == cond1) {
- u32 bitMask = 0;
-
- if ((cond1 & 0x0F) == 0) /* BoardType is DONTCARE */
- return true;
-
- if ((cond1 & BIT(0)) != 0) /* GLNA */
- bitMask |= 0x000000FF;
- if ((cond1 & BIT(1)) != 0) /* GPA */
- bitMask |= 0x0000FF00;
- if ((cond1 & BIT(2)) != 0) /* ALNA */
- bitMask |= 0x00FF0000;
- if ((cond1 & BIT(3)) != 0) /* APA */
- bitMask |= 0xFF000000;
-
- /* BoardType of each RF path is matched */
- if ((cond2 & bitMask) == (driver2 & bitMask))
- return true;
-
- return false;
- }
-
- return false;
-}
-
-/******************************************************************************
- * RadioA.TXT
- ******************************************************************************/
-
-static u32 Array_MP_8723B_RadioA[] = {
- 0x000, 0x00010000,
- 0x0B0, 0x000DFFE0,
- 0x0FE, 0x00000000,
- 0x0FE, 0x00000000,
- 0x0FE, 0x00000000,
- 0x0B1, 0x00000018,
- 0x0FE, 0x00000000,
- 0x0FE, 0x00000000,
- 0x0FE, 0x00000000,
- 0x0B2, 0x00084C00,
- 0x0B5, 0x0000D2CC,
- 0x0B6, 0x000925AA,
- 0x0B7, 0x00000010,
- 0x0B8, 0x0000907F,
- 0x05C, 0x00000002,
- 0x07C, 0x00000002,
- 0x07E, 0x00000005,
- 0x08B, 0x0006FC00,
- 0x0B0, 0x000FF9F0,
- 0x01C, 0x000739D2,
- 0x01E, 0x00000000,
- 0x0DF, 0x00000780,
- 0x050, 0x00067435,
- 0x80002000, 0x00000000, 0x40000000, 0x00000000,
- 0x051, 0x0006B10E,
- 0x90003000, 0x00000000, 0x40000000, 0x00000000,
- 0x051, 0x0006B10E,
- 0x90004000, 0x00000000, 0x40000000, 0x00000000,
- 0x051, 0x0006B10E,
- 0xA0000000, 0x00000000,
- 0x051, 0x0006B04E,
- 0xB0000000, 0x00000000,
- 0x052, 0x000007D2,
- 0x053, 0x00000000,
- 0x054, 0x00050400,
- 0x055, 0x0004026E,
- 0x0DD, 0x0000004C,
- 0x070, 0x00067435,
- 0x80002000, 0x00000000, 0x40000000, 0x00000000,
- 0x071, 0x0006B10E,
- 0x90003000, 0x00000000, 0x40000000, 0x00000000,
- 0x071, 0x0006B10E,
- 0x90004000, 0x00000000, 0x40000000, 0x00000000,
- 0x071, 0x0006B10E,
- 0xA0000000, 0x00000000,
- 0x071, 0x0006B04E,
- 0xB0000000, 0x00000000,
- 0x072, 0x000007D2,
- 0x073, 0x00000000,
- 0x074, 0x00050400,
- 0x075, 0x0004026E,
- 0x0EF, 0x00000100,
- 0x034, 0x0000ADD7,
- 0x035, 0x00005C00,
- 0x034, 0x00009DD4,
- 0x035, 0x00005000,
- 0x034, 0x00008DD1,
- 0x035, 0x00004400,
- 0x034, 0x00007DCE,
- 0x035, 0x00003800,
- 0x034, 0x00006CD1,
- 0x035, 0x00004400,
- 0x034, 0x00005CCE,
- 0x035, 0x00003800,
- 0x034, 0x000048CE,
- 0x035, 0x00004400,
- 0x034, 0x000034CE,
- 0x035, 0x00003800,
- 0x034, 0x00002451,
- 0x035, 0x00004400,
- 0x034, 0x0000144E,
- 0x035, 0x00003800,
- 0x034, 0x00000051,
- 0x035, 0x00004400,
- 0x0EF, 0x00000000,
- 0x0EF, 0x00000100,
- 0x0ED, 0x00000010,
- 0x044, 0x0000ADD7,
- 0x044, 0x00009DD4,
- 0x044, 0x00008DD1,
- 0x044, 0x00007DCE,
- 0x044, 0x00006CC1,
- 0x044, 0x00005CCE,
- 0x044, 0x000044D1,
- 0x044, 0x000034CE,
- 0x044, 0x00002451,
- 0x044, 0x0000144E,
- 0x044, 0x00000051,
- 0x0EF, 0x00000000,
- 0x0ED, 0x00000000,
- 0x07F, 0x00020080,
- 0x0EF, 0x00002000,
- 0x03B, 0x000380EF,
- 0x03B, 0x000302FE,
- 0x03B, 0x00028CE6,
- 0x03B, 0x000200BC,
- 0x03B, 0x000188A5,
- 0x03B, 0x00010FBC,
- 0x03B, 0x00008F71,
- 0x03B, 0x00000900,
- 0x0EF, 0x00000000,
- 0x0ED, 0x00000001,
- 0x040, 0x000380EF,
- 0x040, 0x000302FE,
- 0x040, 0x00028CE6,
- 0x040, 0x000200BC,
- 0x040, 0x000188A5,
- 0x040, 0x00010FBC,
- 0x040, 0x00008F71,
- 0x040, 0x00000900,
- 0x0ED, 0x00000000,
- 0x082, 0x00080000,
- 0x083, 0x00008000,
- 0x084, 0x00048D80,
- 0x085, 0x00068000,
- 0x0A2, 0x00080000,
- 0x0A3, 0x00008000,
- 0x0A4, 0x00048D80,
- 0x0A5, 0x00068000,
- 0x0ED, 0x00000002,
- 0x0EF, 0x00000002,
- 0x056, 0x00000032,
- 0x076, 0x00000032,
- 0x001, 0x00000780,
-
-};
-
-void ODM_ReadAndConfig_MP_8723B_RadioA(struct dm_odm_t *pDM_Odm)
-{
- u32 i = 0;
- u32 ArrayLen = ARRAY_SIZE(Array_MP_8723B_RadioA);
- u32 *Array = Array_MP_8723B_RadioA;
-
- for (i = 0; i < ArrayLen; i += 2) {
- u32 v1 = Array[i];
- u32 v2 = Array[i+1];
-
- /* This (offset, data) pair doesn't care the condition. */
- if (v1 < 0x40000000) {
- odm_ConfigRF_RadioA_8723B(pDM_Odm, v1, v2);
- continue;
- } else {
- /* This line is the beginning of branch. */
- bool bMatched = true;
- u8 cCond = (u8)((v1 & (BIT(29)|BIT(28))) >> 28);
-
- if (cCond == COND_ELSE) { /* ELSE, ENDIF */
- bMatched = true;
- READ_NEXT_PAIR(v1, v2, i);
- } else if (!CheckPositive(pDM_Odm, v1, v2)) {
- bMatched = false;
- READ_NEXT_PAIR(v1, v2, i);
- READ_NEXT_PAIR(v1, v2, i);
- } else {
- READ_NEXT_PAIR(v1, v2, i);
- bMatched = true;
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- if (!bMatched) {
- /*
- * Condition isn't matched.
- * Discard the following (offset, data) pairs.
- */
- while (v1 < 0x40000000 && 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. */
- while (v1 < 0x40000000 && i < ArrayLen-2) {
- odm_ConfigRF_RadioA_8723B(pDM_Odm, v1, v2);
- READ_NEXT_PAIR(v1, v2, i);
- }
-
- /* Keeps reading until ENDIF. */
- cCond = (u8)((v1 & (BIT(29)|BIT(28))) >> 28);
- while (cCond != COND_ENDIF && i < ArrayLen-2) {
- READ_NEXT_PAIR(v1, v2, i);
- cCond = (u8)((v1 & (BIT(29)|BIT(28))) >> 28);
- }
- }
- }
- }
-}
-
-/******************************************************************************
- * TxPowerTrack_SDIO.TXT
- ******************************************************************************/
-
-static u8 gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_SDIO_8723B[] = {
- 0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6,
- 7, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 13, 14, 15
-};
-static u8 gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_SDIO_8723B[] = {
- 0, 0, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8,
- 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15
-};
-static u8 gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_SDIO_8723B[] = {
- 0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 6, 6,
- 7, 7, 7, 8, 8, 9, 9, 10, 10, 11, 12, 13, 14, 15
-};
-static u8 gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_SDIO_8723B[] = {
- 0, 0, 1, 2, 2, 3, 3, 4, 5, 5, 6, 6, 7, 7, 8, 8,
- 9, 9, 10, 10, 10, 11, 11, 12, 12, 13, 13, 14, 15, 15
-};
-static u8 gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_SDIO_8723B[] = {
- 0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8,
- 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15
-};
-static u8 gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_SDIO_8723B[] = {
- 0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7,
- 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15
-};
-static u8 gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_SDIO_8723B[] = {
- 0, 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 6, 7, 7, 7, 8,
- 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15
-};
-static u8 gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_SDIO_8723B[] = {
- 0, 0, 1, 2, 2, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 7,
- 8, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 14, 15
-};
-
-void ODM_ReadAndConfig_MP_8723B_TxPowerTrack_SDIO(struct dm_odm_t *pDM_Odm)
-{
- struct odm_rf_cal_t *pRFCalibrateInfo = &pDM_Odm->RFCalibrateInfo;
-
- memcpy(
- pRFCalibrateInfo->DeltaSwingTableIdx_2GA_P,
- gDeltaSwingTableIdx_MP_2GA_P_TxPowerTrack_SDIO_8723B,
- DELTA_SWINGIDX_SIZE
- );
- memcpy(
- pRFCalibrateInfo->DeltaSwingTableIdx_2GA_N,
- gDeltaSwingTableIdx_MP_2GA_N_TxPowerTrack_SDIO_8723B,
- DELTA_SWINGIDX_SIZE
- );
- memcpy(
- pRFCalibrateInfo->DeltaSwingTableIdx_2GB_P,
- gDeltaSwingTableIdx_MP_2GB_P_TxPowerTrack_SDIO_8723B,
- DELTA_SWINGIDX_SIZE
- );
- memcpy(
- pRFCalibrateInfo->DeltaSwingTableIdx_2GB_N,
- gDeltaSwingTableIdx_MP_2GB_N_TxPowerTrack_SDIO_8723B,
- DELTA_SWINGIDX_SIZE
- );
-
- memcpy(
- pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_P,
- gDeltaSwingTableIdx_MP_2GCCKA_P_TxPowerTrack_SDIO_8723B,
- DELTA_SWINGIDX_SIZE
- );
- memcpy(
- pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_N,
- gDeltaSwingTableIdx_MP_2GCCKA_N_TxPowerTrack_SDIO_8723B,
- DELTA_SWINGIDX_SIZE
- );
- memcpy(
- pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_P,
- gDeltaSwingTableIdx_MP_2GCCKB_P_TxPowerTrack_SDIO_8723B,
- DELTA_SWINGIDX_SIZE
- );
- memcpy(
- pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_N,
- gDeltaSwingTableIdx_MP_2GCCKB_N_TxPowerTrack_SDIO_8723B,
- DELTA_SWINGIDX_SIZE
- );
-}
-
-/******************************************************************************
- * TXPWR_LMT.TXT
- ******************************************************************************/
-
-static u8 *Array_MP_8723B_TXPWR_LMT[] = {
- "FCC", "20M", "CCK", "1T", "01", "32",
- "ETSI", "20M", "CCK", "1T", "01", "32",
- "MKK", "20M", "CCK", "1T", "01", "32",
- "FCC", "20M", "CCK", "1T", "02", "32",
- "ETSI", "20M", "CCK", "1T", "02", "32",
- "MKK", "20M", "CCK", "1T", "02", "32",
- "FCC", "20M", "CCK", "1T", "03", "32",
- "ETSI", "20M", "CCK", "1T", "03", "32",
- "MKK", "20M", "CCK", "1T", "03", "32",
- "FCC", "20M", "CCK", "1T", "04", "32",
- "ETSI", "20M", "CCK", "1T", "04", "32",
- "MKK", "20M", "CCK", "1T", "04", "32",
- "FCC", "20M", "CCK", "1T", "05", "32",
- "ETSI", "20M", "CCK", "1T", "05", "32",
- "MKK", "20M", "CCK", "1T", "05", "32",
- "FCC", "20M", "CCK", "1T", "06", "32",
- "ETSI", "20M", "CCK", "1T", "06", "32",
- "MKK", "20M", "CCK", "1T", "06", "32",
- "FCC", "20M", "CCK", "1T", "07", "32",
- "ETSI", "20M", "CCK", "1T", "07", "32",
- "MKK", "20M", "CCK", "1T", "07", "32",
- "FCC", "20M", "CCK", "1T", "08", "32",
- "ETSI", "20M", "CCK", "1T", "08", "32",
- "MKK", "20M", "CCK", "1T", "08", "32",
- "FCC", "20M", "CCK", "1T", "09", "32",
- "ETSI", "20M", "CCK", "1T", "09", "32",
- "MKK", "20M", "CCK", "1T", "09", "32",
- "FCC", "20M", "CCK", "1T", "10", "32",
- "ETSI", "20M", "CCK", "1T", "10", "32",
- "MKK", "20M", "CCK", "1T", "10", "32",
- "FCC", "20M", "CCK", "1T", "11", "32",
- "ETSI", "20M", "CCK", "1T", "11", "32",
- "MKK", "20M", "CCK", "1T", "11", "32",
- "FCC", "20M", "CCK", "1T", "12", "63",
- "ETSI", "20M", "CCK", "1T", "12", "32",
- "MKK", "20M", "CCK", "1T", "12", "32",
- "FCC", "20M", "CCK", "1T", "13", "63",
- "ETSI", "20M", "CCK", "1T", "13", "32",
- "MKK", "20M", "CCK", "1T", "13", "32",
- "FCC", "20M", "CCK", "1T", "14", "63",
- "ETSI", "20M", "CCK", "1T", "14", "63",
- "MKK", "20M", "CCK", "1T", "14", "32",
- "FCC", "20M", "OFDM", "1T", "01", "28",
- "ETSI", "20M", "OFDM", "1T", "01", "32",
- "MKK", "20M", "OFDM", "1T", "01", "32",
- "FCC", "20M", "OFDM", "1T", "02", "28",
- "ETSI", "20M", "OFDM", "1T", "02", "32",
- "MKK", "20M", "OFDM", "1T", "02", "32",
- "FCC", "20M", "OFDM", "1T", "03", "32",
- "ETSI", "20M", "OFDM", "1T", "03", "32",
- "MKK", "20M", "OFDM", "1T", "03", "32",
- "FCC", "20M", "OFDM", "1T", "04", "32",
- "ETSI", "20M", "OFDM", "1T", "04", "32",
- "MKK", "20M", "OFDM", "1T", "04", "32",
- "FCC", "20M", "OFDM", "1T", "05", "32",
- "ETSI", "20M", "OFDM", "1T", "05", "32",
- "MKK", "20M", "OFDM", "1T", "05", "32",
- "FCC", "20M", "OFDM", "1T", "06", "32",
- "ETSI", "20M", "OFDM", "1T", "06", "32",
- "MKK", "20M", "OFDM", "1T", "06", "32",
- "FCC", "20M", "OFDM", "1T", "07", "32",
- "ETSI", "20M", "OFDM", "1T", "07", "32",
- "MKK", "20M", "OFDM", "1T", "07", "32",
- "FCC", "20M", "OFDM", "1T", "08", "32",
- "ETSI", "20M", "OFDM", "1T", "08", "32",
- "MKK", "20M", "OFDM", "1T", "08", "32",
- "FCC", "20M", "OFDM", "1T", "09", "32",
- "ETSI", "20M", "OFDM", "1T", "09", "32",
- "MKK", "20M", "OFDM", "1T", "09", "32",
- "FCC", "20M", "OFDM", "1T", "10", "28",
- "ETSI", "20M", "OFDM", "1T", "10", "32",
- "MKK", "20M", "OFDM", "1T", "10", "32",
- "FCC", "20M", "OFDM", "1T", "11", "28",
- "ETSI", "20M", "OFDM", "1T", "11", "32",
- "MKK", "20M", "OFDM", "1T", "11", "32",
- "FCC", "20M", "OFDM", "1T", "12", "63",
- "ETSI", "20M", "OFDM", "1T", "12", "32",
- "MKK", "20M", "OFDM", "1T", "12", "32",
- "FCC", "20M", "OFDM", "1T", "13", "63",
- "ETSI", "20M", "OFDM", "1T", "13", "32",
- "MKK", "20M", "OFDM", "1T", "13", "32",
- "FCC", "20M", "OFDM", "1T", "14", "63",
- "ETSI", "20M", "OFDM", "1T", "14", "63",
- "MKK", "20M", "OFDM", "1T", "14", "63",
- "FCC", "20M", "HT", "1T", "01", "26",
- "ETSI", "20M", "HT", "1T", "01", "32",
- "MKK", "20M", "HT", "1T", "01", "32",
- "FCC", "20M", "HT", "1T", "02", "26",
- "ETSI", "20M", "HT", "1T", "02", "32",
- "MKK", "20M", "HT", "1T", "02", "32",
- "FCC", "20M", "HT", "1T", "03", "32",
- "ETSI", "20M", "HT", "1T", "03", "32",
- "MKK", "20M", "HT", "1T", "03", "32",
- "FCC", "20M", "HT", "1T", "04", "32",
- "ETSI", "20M", "HT", "1T", "04", "32",
- "MKK", "20M", "HT", "1T", "04", "32",
- "FCC", "20M", "HT", "1T", "05", "32",
- "ETSI", "20M", "HT", "1T", "05", "32",
- "MKK", "20M", "HT", "1T", "05", "32",
- "FCC", "20M", "HT", "1T", "06", "32",
- "ETSI", "20M", "HT", "1T", "06", "32",
- "MKK", "20M", "HT", "1T", "06", "32",
- "FCC", "20M", "HT", "1T", "07", "32",
- "ETSI", "20M", "HT", "1T", "07", "32",
- "MKK", "20M", "HT", "1T", "07", "32",
- "FCC", "20M", "HT", "1T", "08", "32",
- "ETSI", "20M", "HT", "1T", "08", "32",
- "MKK", "20M", "HT", "1T", "08", "32",
- "FCC", "20M", "HT", "1T", "09", "32",
- "ETSI", "20M", "HT", "1T", "09", "32",
- "MKK", "20M", "HT", "1T", "09", "32",
- "FCC", "20M", "HT", "1T", "10", "26",
- "ETSI", "20M", "HT", "1T", "10", "32",
- "MKK", "20M", "HT", "1T", "10", "32",
- "FCC", "20M", "HT", "1T", "11", "26",
- "ETSI", "20M", "HT", "1T", "11", "32",
- "MKK", "20M", "HT", "1T", "11", "32",
- "FCC", "20M", "HT", "1T", "12", "63",
- "ETSI", "20M", "HT", "1T", "12", "32",
- "MKK", "20M", "HT", "1T", "12", "32",
- "FCC", "20M", "HT", "1T", "13", "63",
- "ETSI", "20M", "HT", "1T", "13", "32",
- "MKK", "20M", "HT", "1T", "13", "32",
- "FCC", "20M", "HT", "1T", "14", "63",
- "ETSI", "20M", "HT", "1T", "14", "63",
- "MKK", "20M", "HT", "1T", "14", "63",
- "FCC", "40M", "HT", "1T", "01", "63",
- "ETSI", "40M", "HT", "1T", "01", "63",
- "MKK", "40M", "HT", "1T", "01", "63",
- "FCC", "40M", "HT", "1T", "02", "63",
- "ETSI", "40M", "HT", "1T", "02", "63",
- "MKK", "40M", "HT", "1T", "02", "63",
- "FCC", "40M", "HT", "1T", "03", "26",
- "ETSI", "40M", "HT", "1T", "03", "32",
- "MKK", "40M", "HT", "1T", "03", "32",
- "FCC", "40M", "HT", "1T", "04", "26",
- "ETSI", "40M", "HT", "1T", "04", "32",
- "MKK", "40M", "HT", "1T", "04", "32",
- "FCC", "40M", "HT", "1T", "05", "32",
- "ETSI", "40M", "HT", "1T", "05", "32",
- "MKK", "40M", "HT", "1T", "05", "32",
- "FCC", "40M", "HT", "1T", "06", "32",
- "ETSI", "40M", "HT", "1T", "06", "32",
- "MKK", "40M", "HT", "1T", "06", "32",
- "FCC", "40M", "HT", "1T", "07", "32",
- "ETSI", "40M", "HT", "1T", "07", "32",
- "MKK", "40M", "HT", "1T", "07", "32",
- "FCC", "40M", "HT", "1T", "08", "26",
- "ETSI", "40M", "HT", "1T", "08", "32",
- "MKK", "40M", "HT", "1T", "08", "32",
- "FCC", "40M", "HT", "1T", "09", "26",
- "ETSI", "40M", "HT", "1T", "09", "32",
- "MKK", "40M", "HT", "1T", "09", "32",
- "FCC", "40M", "HT", "1T", "10", "26",
- "ETSI", "40M", "HT", "1T", "10", "32",
- "MKK", "40M", "HT", "1T", "10", "32",
- "FCC", "40M", "HT", "1T", "11", "26",
- "ETSI", "40M", "HT", "1T", "11", "32",
- "MKK", "40M", "HT", "1T", "11", "32",
- "FCC", "40M", "HT", "1T", "12", "63",
- "ETSI", "40M", "HT", "1T", "12", "32",
- "MKK", "40M", "HT", "1T", "12", "32",
- "FCC", "40M", "HT", "1T", "13", "63",
- "ETSI", "40M", "HT", "1T", "13", "32",
- "MKK", "40M", "HT", "1T", "13", "32",
- "FCC", "40M", "HT", "1T", "14", "63",
- "ETSI", "40M", "HT", "1T", "14", "63",
- "MKK", "40M", "HT", "1T", "14", "63"
-};
-
-void ODM_ReadAndConfig_MP_8723B_TXPWR_LMT(struct dm_odm_t *pDM_Odm)
-{
- u32 i = 0;
- u8 **Array = Array_MP_8723B_TXPWR_LMT;
-
- for (i = 0; i < ARRAY_SIZE(Array_MP_8723B_TXPWR_LMT); i += 6) {
- u8 *regulation = Array[i];
- u8 *bandwidth = Array[i+1];
- u8 *rate = Array[i+2];
- u8 *rfPath = Array[i+3];
- u8 *chnl = Array[i+4];
- u8 *val = Array[i+5];
-
- odm_ConfigBB_TXPWR_LMT_8723B(
- pDM_Odm,
- regulation,
- bandwidth,
- rate,
- rfPath,
- chnl,
- val
- );
- }
-}
diff --git a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_RF.h b/drivers/staging/rtl8723bs/hal/HalHWImg8723B_RF.h
deleted file mode 100644
index 7b4f399fcdff..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalHWImg8723B_RF.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __INC_MP_RF_HW_IMG_8723B_H
-#define __INC_MP_RF_HW_IMG_8723B_H
-
-/******************************************************************************
- * RadioA.TXT
- ******************************************************************************/
-
-void
-ODM_ReadAndConfig_MP_8723B_RadioA(/* TC: Test Chip, MP: MP Chip */
- struct dm_odm_t *pDM_Odm
-);
-
-/******************************************************************************
- * TxPowerTrack_SDIO.TXT
- ******************************************************************************/
-
-void
-ODM_ReadAndConfig_MP_8723B_TxPowerTrack_SDIO(/* TC: Test Chip, MP: MP Chip */
- struct dm_odm_t *pDM_Odm
-);
-u32 ODM_GetVersion_MP_8723B_TxPowerTrack_SDIO(void);
-
-/******************************************************************************
- * TXPWR_LMT.TXT
- ******************************************************************************/
-
-void
-ODM_ReadAndConfig_MP_8723B_TXPWR_LMT(/* TC: Test Chip, MP: MP Chip */
- struct dm_odm_t *pDM_Odm
-);
-u32 ODM_GetVersion_MP_8723B_TXPWR_LMT(void);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/HalPhyRf.c b/drivers/staging/rtl8723bs/hal/HalPhyRf.c
deleted file mode 100644
index bf44c1050be5..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalPhyRf.c
+++ /dev/null
@@ -1,268 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-/* include "Mp_Precomp.h" */
-#include "odm_precomp.h"
-
-void ConfigureTxpowerTrack(struct dm_odm_t *pDM_Odm, struct txpwrtrack_cfg *pConfig)
-{
- ConfigureTxpowerTrack_8723B(pConfig);
-}
-
-/* */
-/* <20121113, Kordan> This function should be called when TxAGC changed. */
-/* Otherwise the previous compensation is gone, because we record the */
-/* delta of temperature between two TxPowerTracking watch dogs. */
-/* */
-/* NOTE: If Tx BB swing or Tx scaling is varified during run-time, still */
-/* need to call this function. */
-/* */
-void ODM_ClearTxPowerTrackingState(struct dm_odm_t *pDM_Odm)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(pDM_Odm->Adapter);
- u8 p = 0;
-
- pDM_Odm->BbSwingIdxCckBase = pDM_Odm->DefaultCckIndex;
- pDM_Odm->BbSwingIdxCck = pDM_Odm->DefaultCckIndex;
- pDM_Odm->RFCalibrateInfo.CCK_index = 0;
-
- for (p = RF_PATH_A; p < MAX_RF_PATH; ++p) {
- pDM_Odm->BbSwingIdxOfdmBase[p] = pDM_Odm->DefaultOfdmIndex;
- pDM_Odm->BbSwingIdxOfdm[p] = pDM_Odm->DefaultOfdmIndex;
- pDM_Odm->RFCalibrateInfo.OFDM_index[p] = pDM_Odm->DefaultOfdmIndex;
-
- pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = 0;
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p] = 0;
- pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
-
- /* Initial Mix mode power tracking */
- pDM_Odm->Absolute_OFDMSwingIdx[p] = 0;
- pDM_Odm->Remnant_OFDMSwingIdx[p] = 0;
- }
-
- /* Initial at Modify Tx Scaling Mode */
- pDM_Odm->Modify_TxAGC_Flag_PathA = false;
- /* Initial at Modify Tx Scaling Mode */
- pDM_Odm->Modify_TxAGC_Flag_PathB = false;
- pDM_Odm->Remnant_CCKSwingIdx = 0;
- pDM_Odm->RFCalibrateInfo.ThermalValue = pHalData->EEPROMThermalMeter;
- pDM_Odm->RFCalibrateInfo.ThermalValue_IQK = pHalData->EEPROMThermalMeter;
- pDM_Odm->RFCalibrateInfo.ThermalValue_LCK = pHalData->EEPROMThermalMeter;
-}
-
-void ODM_TXPowerTrackingCallback_ThermalMeter(struct adapter *Adapter)
-{
-
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- u8 ThermalValue = 0, delta, delta_LCK, p = 0, i = 0;
- u8 ThermalValue_AVG_count = 0;
- u32 ThermalValue_AVG = 0;
-
- u8 OFDM_min_index = 0; /* OFDM BB Swing should be less than +3.0dB, which is required by Arthur */
- u8 Indexforchannel = 0; /* GetRightChnlPlaceforIQK(pHalData->CurrentChannel) */
-
- struct txpwrtrack_cfg c;
-
- /* 4 1. The following TWO tables decide the final index of OFDM/CCK swing table. */
- u8 *deltaSwingTableIdx_TUP_A;
- u8 *deltaSwingTableIdx_TDOWN_A;
- u8 *deltaSwingTableIdx_TUP_B;
- u8 *deltaSwingTableIdx_TDOWN_B;
-
- /* 4 2. Initialization (7 steps in total) */
-
- ConfigureTxpowerTrack(pDM_Odm, &c);
-
- (*c.GetDeltaSwingTable)(
- pDM_Odm,
- (u8 **)&deltaSwingTableIdx_TUP_A,
- (u8 **)&deltaSwingTableIdx_TDOWN_A,
- (u8 **)&deltaSwingTableIdx_TUP_B,
- (u8 **)&deltaSwingTableIdx_TDOWN_B
- );
-
- /* cosa add for debug */
- pDM_Odm->RFCalibrateInfo.TXPowerTrackingCallbackCnt++;
- pDM_Odm->RFCalibrateInfo.bTXPowerTrackingInit = true;
-
- ThermalValue = (u8)PHY_QueryRFReg(pDM_Odm->Adapter, RF_PATH_A, c.ThermalRegAddr, 0xfc00); /* 0x42: RF Reg[15:10] 88E */
- if (
- !pDM_Odm->RFCalibrateInfo.TxPowerTrackControl ||
- pHalData->EEPROMThermalMeter == 0 ||
- pHalData->EEPROMThermalMeter == 0xFF
- )
- return;
-
- /* 4 3. Initialize ThermalValues of RFCalibrateInfo */
-
- /* 4 4. Calculate average thermal meter */
-
- pDM_Odm->RFCalibrateInfo.ThermalValue_AVG[pDM_Odm->RFCalibrateInfo.ThermalValue_AVG_index] = ThermalValue;
- pDM_Odm->RFCalibrateInfo.ThermalValue_AVG_index++;
- if (pDM_Odm->RFCalibrateInfo.ThermalValue_AVG_index == c.AverageThermalNum) /* Average times = c.AverageThermalNum */
- pDM_Odm->RFCalibrateInfo.ThermalValue_AVG_index = 0;
-
- for (i = 0; i < c.AverageThermalNum; i++) {
- if (pDM_Odm->RFCalibrateInfo.ThermalValue_AVG[i]) {
- ThermalValue_AVG += pDM_Odm->RFCalibrateInfo.ThermalValue_AVG[i];
- ThermalValue_AVG_count++;
- }
- }
-
- /* Calculate Average ThermalValue after average enough times */
- if (ThermalValue_AVG_count) {
- ThermalValue = (u8)(ThermalValue_AVG / ThermalValue_AVG_count);
- }
-
- /* 4 5. Calculate delta, delta_LCK */
- /* delta" here is used to determine whether thermal value changes or not. */
- delta =
- (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue) ?
- (ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue) :
- (pDM_Odm->RFCalibrateInfo.ThermalValue - ThermalValue);
- delta_LCK =
- (ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue_LCK) ?
- (ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue_LCK) :
- (pDM_Odm->RFCalibrateInfo.ThermalValue_LCK - ThermalValue);
-
- /* 4 6. If necessary, do LCK. */
- /* Delta temperature is equal to or larger than 20 centigrade. */
- if (delta_LCK >= c.Threshold_IQK) {
- pDM_Odm->RFCalibrateInfo.ThermalValue_LCK = ThermalValue;
- if (c.PHY_LCCalibrate)
- (*c.PHY_LCCalibrate)(pDM_Odm);
- }
-
- /* 3 7. If necessary, move the index of swing table to adjust Tx power. */
- if (delta > 0 && pDM_Odm->RFCalibrateInfo.TxPowerTrackControl) {
- /* delta" here is used to record the absolute value of difference. */
- delta =
- ThermalValue > pHalData->EEPROMThermalMeter ?
- (ThermalValue - pHalData->EEPROMThermalMeter) :
- (pHalData->EEPROMThermalMeter - ThermalValue);
-
- if (delta >= TXPWR_TRACK_TABLE_SIZE)
- delta = TXPWR_TRACK_TABLE_SIZE - 1;
-
- /* 4 7.1 The Final Power Index = BaseIndex + PowerIndexOffset */
- if (ThermalValue > pHalData->EEPROMThermalMeter) {
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[RF_PATH_A] =
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_A];
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_A] =
- deltaSwingTableIdx_TUP_A[delta];
-
- /* Record delta swing for mix mode power tracking */
- pDM_Odm->Absolute_OFDMSwingIdx[RF_PATH_A] =
- deltaSwingTableIdx_TUP_A[delta];
-
- if (c.RfPathCount > 1) {
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[RF_PATH_B] =
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_B];
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_B] =
- deltaSwingTableIdx_TUP_B[delta];
-
- /* Record delta swing for mix mode power tracking */
- pDM_Odm->Absolute_OFDMSwingIdx[RF_PATH_B] =
- deltaSwingTableIdx_TUP_B[delta];
- }
-
- } else {
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[RF_PATH_A] =
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_A];
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_A] =
- -1 * deltaSwingTableIdx_TDOWN_A[delta];
-
- /* Record delta swing for mix mode power tracking */
- pDM_Odm->Absolute_OFDMSwingIdx[RF_PATH_A] =
- -1 * deltaSwingTableIdx_TDOWN_A[delta];
-
- if (c.RfPathCount > 1) {
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[RF_PATH_B] =
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_B];
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_B] =
- -1 * deltaSwingTableIdx_TDOWN_B[delta];
-
- /* Record delta swing for mix mode power tracking */
- pDM_Odm->Absolute_OFDMSwingIdx[RF_PATH_B] =
- -1 * deltaSwingTableIdx_TDOWN_B[delta];
- }
- }
-
- for (p = RF_PATH_A; p < c.RfPathCount; p++) {
- if (
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] ==
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p]
- ) /* If Thermal value changes but lookup table value still the same */
- pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
- else
- pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] - pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p]; /* Power Index Diff between 2 times Power Tracking */
-
- pDM_Odm->RFCalibrateInfo.OFDM_index[p] =
- pDM_Odm->BbSwingIdxOfdmBase[p] +
- pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p];
-
- pDM_Odm->RFCalibrateInfo.CCK_index =
- pDM_Odm->BbSwingIdxCckBase +
- pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p];
-
- pDM_Odm->BbSwingIdxCck =
- pDM_Odm->RFCalibrateInfo.CCK_index;
-
- pDM_Odm->BbSwingIdxOfdm[p] =
- pDM_Odm->RFCalibrateInfo.OFDM_index[p];
-
- /* 4 7.1 Handle boundary conditions of index. */
- if (pDM_Odm->RFCalibrateInfo.OFDM_index[p] > c.SwingTableSize_OFDM - 1)
- pDM_Odm->RFCalibrateInfo.OFDM_index[p] = c.SwingTableSize_OFDM - 1;
- else if (pDM_Odm->RFCalibrateInfo.OFDM_index[p] < OFDM_min_index)
- pDM_Odm->RFCalibrateInfo.OFDM_index[p] = OFDM_min_index;
- }
- if (pDM_Odm->RFCalibrateInfo.CCK_index > c.SwingTableSize_CCK - 1)
- pDM_Odm->RFCalibrateInfo.CCK_index = c.SwingTableSize_CCK - 1;
- /* else if (pDM_Odm->RFCalibrateInfo.CCK_index < 0) */
- /* pDM_Odm->RFCalibrateInfo.CCK_index = 0; */
- } else {
- for (p = RF_PATH_A; p < c.RfPathCount; p++)
- pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
- }
-
- if (
- (pDM_Odm->RFCalibrateInfo.PowerIndexOffset[RF_PATH_A] != 0 ||
- pDM_Odm->RFCalibrateInfo.PowerIndexOffset[RF_PATH_B] != 0) &&
- pDM_Odm->RFCalibrateInfo.TxPowerTrackControl
- ) {
- /* 4 7.2 Configure the Swing Table to adjust Tx Power. */
-
- pDM_Odm->RFCalibrateInfo.bTxPowerChanged = true; /* Always true after Tx Power is adjusted by power tracking. */
- /* */
- /* 2012/04/23 MH According to Luke's suggestion, we can not write BB digital */
- /* to increase TX power. Otherwise, EVM will be bad. */
- /* */
- /* 2012/04/25 MH Add for tx power tracking to set tx power in tx agc for 88E. */
-
- if (ThermalValue > pHalData->EEPROMThermalMeter) {
- for (p = RF_PATH_A; p < c.RfPathCount; p++)
- (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, MIX_MODE, p, 0);
- } else {
- for (p = RF_PATH_A; p < c.RfPathCount; p++)
- (*c.ODM_TxPwrTrackSetPwr)(pDM_Odm, MIX_MODE, p, Indexforchannel);
- }
-
- /* Record last time Power Tracking result as base. */
- pDM_Odm->BbSwingIdxCckBase = pDM_Odm->BbSwingIdxCck;
- for (p = RF_PATH_A; p < c.RfPathCount; p++)
- pDM_Odm->BbSwingIdxOfdmBase[p] = pDM_Odm->BbSwingIdxOfdm[p];
-
- /* Record last Power Tracking Thermal Value */
- pDM_Odm->RFCalibrateInfo.ThermalValue = ThermalValue;
- }
-
- pDM_Odm->RFCalibrateInfo.TXPowercount = 0;
-}
diff --git a/drivers/staging/rtl8723bs/hal/HalPhyRf.h b/drivers/staging/rtl8723bs/hal/HalPhyRf.h
deleted file mode 100644
index bd9430db968f..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalPhyRf.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
- #ifndef __HAL_PHY_RF_H__
- #define __HAL_PHY_RF_H__
-
-enum pwrtrack_method {
- BBSWING,
- TXAGC,
- MIX_MODE
-};
-
-typedef void (*FuncSetPwr)(struct dm_odm_t *, enum pwrtrack_method, u8, u8);
-typedef void (*FuncLCK)(struct dm_odm_t *);
-typedef void (*FuncSwing)(struct dm_odm_t *, u8 **, u8 **, u8 **, u8 **);
-
-struct txpwrtrack_cfg {
- u8 SwingTableSize_CCK;
- u8 SwingTableSize_OFDM;
- u8 Threshold_IQK;
- u8 AverageThermalNum;
- u8 RfPathCount;
- u32 ThermalRegAddr;
- FuncSetPwr ODM_TxPwrTrackSetPwr;
- FuncLCK PHY_LCCalibrate;
- FuncSwing GetDeltaSwingTable;
-};
-
-void ConfigureTxpowerTrack(struct dm_odm_t *pDM_Odm, struct txpwrtrack_cfg *pConfig);
-
-void ODM_ClearTxPowerTrackingState(struct dm_odm_t *pDM_Odm);
-
-void ODM_TXPowerTrackingCallback_ThermalMeter(struct adapter *Adapter);
-
-#endif /* #ifndef __HAL_PHY_RF_H__ */
diff --git a/drivers/staging/rtl8723bs/hal/HalPhyRf_8723B.c b/drivers/staging/rtl8723bs/hal/HalPhyRf_8723B.c
deleted file mode 100644
index 6c5f56d5a1f4..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalPhyRf_8723B.c
+++ /dev/null
@@ -1,1767 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*****************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-#include "odm_precomp.h"
-
-/* MACRO definition for pRFCalibrateInfo->TxIQC_8723B[0] */
-#define PATH_S0 1 /* RF_PATH_B */
-#define IDX_0xC94 0
-#define IDX_0xC80 1
-#define IDX_0xC14 0
-#define IDX_0xCA0 1
-#define KEY 0
-#define VAL 1
-
-/* MACRO definition for pRFCalibrateInfo->TxIQC_8723B[1] */
-#define PATH_S1 0 /* RF_PATH_A */
-#define IDX_0xC4C 2
-
-/*---------------------------Define Local Constant---------------------------*/
-
-/* In the case that we fail to read TxPowerTrack.txt, we use the table for
- * 88E as the default table.
- */
-static u8 DeltaSwingTableIdx_2GA_N_8188E[] = {
- 0, 0, 0, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6,
- 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11
-};
-static u8 DeltaSwingTableIdx_2GA_P_8188E[] = {
- 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4,
- 4, 4, 4, 5, 5, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9
-};
-
-/* 3 ============================================================ */
-/* 3 Tx Power Tracking */
-/* 3 ============================================================ */
-
-static void setIqkMatrix_8723B(
- struct dm_odm_t *pDM_Odm,
- u8 OFDM_index,
- u8 RFPath,
- s32 IqkResult_X,
- s32 IqkResult_Y
-)
-{
- s32 ele_A = 0, ele_D, ele_C = 0, value32;
-
- if (OFDM_index >= OFDM_TABLE_SIZE)
- OFDM_index = OFDM_TABLE_SIZE-1;
-
- ele_D = (OFDMSwingTable_New[OFDM_index] & 0xFFC00000)>>22;
-
- /* new element A = element D x X */
- if (IqkResult_X != 0) {
- if ((IqkResult_X & 0x00000200) != 0) /* consider minus */
- IqkResult_X = IqkResult_X | 0xFFFFFC00;
- ele_A = ((IqkResult_X * ele_D)>>8)&0x000003FF;
-
- /* new element C = element D x Y */
- if ((IqkResult_Y & 0x00000200) != 0)
- IqkResult_Y = IqkResult_Y | 0xFFFFFC00;
- ele_C = ((IqkResult_Y * ele_D)>>8)&0x000003FF;
-
- /* if (RFPath == RF_PATH_A) */
- switch (RFPath) {
- case RF_PATH_A:
- /* write new elements A, C, D to regC80 and regC94,
- * element B is always 0
- */
- value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, value32);
-
- value32 = (ele_C&0x000003C0)>>6;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, value32);
-
- value32 = ((IqkResult_X * ele_D)>>7)&0x01;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT(24), value32);
- break;
- case RF_PATH_B:
- /* write new elements A, C, D to regC88 and regC9C,
- * element B is always 0
- */
- value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, value32);
-
- value32 = (ele_C&0x000003C0)>>6;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32);
-
- value32 = ((IqkResult_X * ele_D)>>7)&0x01;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT(28), value32);
-
- break;
- default:
- break;
- }
- } else {
- switch (RFPath) {
- case RF_PATH_A:
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XATxIQImbalance, bMaskDWord, OFDMSwingTable_New[OFDM_index]);
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, 0x00);
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT(24), 0x00);
- break;
-
- case RF_PATH_B:
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord, OFDMSwingTable_New[OFDM_index]);
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, 0x00);
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT(28), 0x00);
- break;
-
- default:
- break;
- }
- }
-}
-
-static void setCCKFilterCoefficient(struct dm_odm_t *pDM_Odm, u8 CCKSwingIndex)
-{
- u8 (*swingtable)[8];
-
- if (!pDM_Odm->RFCalibrateInfo.bCCKinCH14)
- swingtable = CCKSwingTable_Ch1_Ch13_New;
- else
- swingtable = CCKSwingTable_Ch14_New;
-
- for (int i = 0; i < 8; i++)
- rtw_write8(pDM_Odm->Adapter, 0xa22 + i, swingtable[CCKSwingIndex][i]);
-}
-
-/*-----------------------------------------------------------------------------
- * 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.
- *
- *---------------------------------------------------------------------------
- */
-void ODM_TxPwrTrackSetPwr_8723B(
- struct dm_odm_t *pDM_Odm,
- enum pwrtrack_method Method,
- u8 RFPath,
- u8 ChannelMappedIndex
-)
-{
- struct adapter *Adapter = pDM_Odm->Adapter;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- u8 PwrTrackingLimit_OFDM = 34; /* 0dB */
- u8 PwrTrackingLimit_CCK = 28; /* 2dB */
- u8 TxRate = 0xFF;
- u8 Final_OFDM_Swing_Index = 0;
- u8 Final_CCK_Swing_Index = 0;
-
- {
- u16 rate = *(pDM_Odm->pForcedDataRate);
-
- if (!rate) { /* auto rate */
- if (pDM_Odm->TxRate != 0xFF)
- TxRate = HwRateToMRate(pDM_Odm->TxRate);
- } else /* force rate */
- TxRate = (u8)rate;
-
- }
-
- if (TxRate != 0xFF) {
- /* 2 CCK */
- if ((TxRate >= MGN_1M) && (TxRate <= MGN_11M))
- PwrTrackingLimit_CCK = 28; /* 2dB */
- /* 2 OFDM */
- else if ((TxRate >= MGN_6M) && (TxRate <= MGN_48M))
- PwrTrackingLimit_OFDM = 36; /* 3dB */
- else if (TxRate == MGN_54M)
- PwrTrackingLimit_OFDM = 34; /* 2dB */
-
- /* 2 HT */
- else if ((TxRate >= MGN_MCS0) && (TxRate <= MGN_MCS2)) /* QPSK/BPSK */
- PwrTrackingLimit_OFDM = 38; /* 4dB */
- else if ((TxRate >= MGN_MCS3) && (TxRate <= MGN_MCS4)) /* 16QAM */
- PwrTrackingLimit_OFDM = 36; /* 3dB */
- else if ((TxRate >= MGN_MCS5) && (TxRate <= MGN_MCS7)) /* 64QAM */
- PwrTrackingLimit_OFDM = 34; /* 2dB */
-
- else
- PwrTrackingLimit_OFDM = pDM_Odm->DefaultOfdmIndex; /* Default OFDM index = 30 */
- }
-
- if (Method == TXAGC) {
- pDM_Odm->Remnant_OFDMSwingIdx[RFPath] = pDM_Odm->Absolute_OFDMSwingIdx[RFPath];
-
- pDM_Odm->Modify_TxAGC_Flag_PathA = true;
- pDM_Odm->Modify_TxAGC_Flag_PathA_CCK = true;
-
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK);
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM);
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7);
- } else if (Method == BBSWING) {
- Final_OFDM_Swing_Index = pDM_Odm->DefaultOfdmIndex + pDM_Odm->Absolute_OFDMSwingIdx[RFPath];
- Final_CCK_Swing_Index = pDM_Odm->DefaultCckIndex + pDM_Odm->Absolute_OFDMSwingIdx[RFPath];
-
- /* Adjust BB swing by OFDM IQ matrix */
- if (Final_OFDM_Swing_Index >= PwrTrackingLimit_OFDM)
- Final_OFDM_Swing_Index = PwrTrackingLimit_OFDM;
- else if (Final_OFDM_Swing_Index <= 0)
- Final_OFDM_Swing_Index = 0;
-
- if (Final_CCK_Swing_Index >= CCK_TABLE_SIZE)
- Final_CCK_Swing_Index = CCK_TABLE_SIZE-1;
- else if (pDM_Odm->BbSwingIdxCck <= 0)
- Final_CCK_Swing_Index = 0;
-
- setIqkMatrix_8723B(pDM_Odm, Final_OFDM_Swing_Index, RFPath,
- pDM_Odm->RFCalibrateInfo.iqk_matrix_regs_setting_value[ChannelMappedIndex][0],
- pDM_Odm->RFCalibrateInfo.iqk_matrix_regs_setting_value[ChannelMappedIndex][1]);
-
- setCCKFilterCoefficient(pDM_Odm, Final_CCK_Swing_Index);
-
- } else if (Method == MIX_MODE) {
- Final_OFDM_Swing_Index = pDM_Odm->DefaultOfdmIndex + pDM_Odm->Absolute_OFDMSwingIdx[RFPath];
- Final_CCK_Swing_Index = pDM_Odm->DefaultCckIndex + pDM_Odm->Absolute_OFDMSwingIdx[RFPath];
-
- if (Final_OFDM_Swing_Index > PwrTrackingLimit_OFDM) { /* BBSwing higher then Limit */
- pDM_Odm->Remnant_OFDMSwingIdx[RFPath] = Final_OFDM_Swing_Index - PwrTrackingLimit_OFDM;
-
- setIqkMatrix_8723B(pDM_Odm, PwrTrackingLimit_OFDM, RFPath,
- pDM_Odm->RFCalibrateInfo.iqk_matrix_regs_setting_value[ChannelMappedIndex][0],
- pDM_Odm->RFCalibrateInfo.iqk_matrix_regs_setting_value[ChannelMappedIndex][1]);
-
- pDM_Odm->Modify_TxAGC_Flag_PathA = true;
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM);
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7);
- } else if (Final_OFDM_Swing_Index <= 0) {
- pDM_Odm->Remnant_OFDMSwingIdx[RFPath] = Final_OFDM_Swing_Index;
-
- setIqkMatrix_8723B(pDM_Odm, 0, RFPath,
- pDM_Odm->RFCalibrateInfo.iqk_matrix_regs_setting_value[ChannelMappedIndex][0],
- pDM_Odm->RFCalibrateInfo.iqk_matrix_regs_setting_value[ChannelMappedIndex][1]);
-
- pDM_Odm->Modify_TxAGC_Flag_PathA = true;
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM);
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7);
- } else {
- setIqkMatrix_8723B(pDM_Odm, Final_OFDM_Swing_Index, RFPath,
- pDM_Odm->RFCalibrateInfo.iqk_matrix_regs_setting_value[ChannelMappedIndex][0],
- pDM_Odm->RFCalibrateInfo.iqk_matrix_regs_setting_value[ChannelMappedIndex][1]);
-
- if (pDM_Odm->Modify_TxAGC_Flag_PathA) { /* If TxAGC has changed, reset TxAGC again */
- pDM_Odm->Remnant_OFDMSwingIdx[RFPath] = 0;
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, OFDM);
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, HT_MCS0_MCS7);
- pDM_Odm->Modify_TxAGC_Flag_PathA = false;
- }
- }
-
- if (Final_CCK_Swing_Index > PwrTrackingLimit_CCK) {
- pDM_Odm->Remnant_CCKSwingIdx = Final_CCK_Swing_Index - PwrTrackingLimit_CCK;
- setCCKFilterCoefficient(pDM_Odm, PwrTrackingLimit_CCK);
- pDM_Odm->Modify_TxAGC_Flag_PathA_CCK = true;
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK);
- } else if (Final_CCK_Swing_Index <= 0) { /* Lowest CCK Index = 0 */
- pDM_Odm->Remnant_CCKSwingIdx = Final_CCK_Swing_Index;
- setCCKFilterCoefficient(pDM_Odm, 0);
- pDM_Odm->Modify_TxAGC_Flag_PathA_CCK = true;
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK);
- } else {
- setCCKFilterCoefficient(pDM_Odm, Final_CCK_Swing_Index);
-
- if (pDM_Odm->Modify_TxAGC_Flag_PathA_CCK) { /* If TxAGC has changed, reset TxAGC again */
- pDM_Odm->Remnant_CCKSwingIdx = 0;
- PHY_SetTxPowerIndexByRateSection(Adapter, RFPath, pHalData->CurrentChannel, CCK);
- pDM_Odm->Modify_TxAGC_Flag_PathA_CCK = false;
- }
- }
- } else
- return; /* This method is not supported. */
-}
-
-static void GetDeltaSwingTable_8723B(
- struct dm_odm_t *pDM_Odm,
- u8 **TemperatureUP_A,
- u8 **TemperatureDOWN_A,
- u8 **TemperatureUP_B,
- u8 **TemperatureDOWN_B
-)
-{
- struct adapter *Adapter = pDM_Odm->Adapter;
- struct odm_rf_cal_t *pRFCalibrateInfo = &pDM_Odm->RFCalibrateInfo;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- u16 rate = *(pDM_Odm->pForcedDataRate);
- u8 channel = pHalData->CurrentChannel;
-
- if (channel >= 1 && channel <= 14) {
- if (IS_CCK_RATE(rate)) {
- *TemperatureUP_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_P;
- *TemperatureDOWN_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKA_N;
- *TemperatureUP_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_P;
- *TemperatureDOWN_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GCCKB_N;
- } else {
- *TemperatureUP_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GA_P;
- *TemperatureDOWN_A = pRFCalibrateInfo->DeltaSwingTableIdx_2GA_N;
- *TemperatureUP_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GB_P;
- *TemperatureDOWN_B = pRFCalibrateInfo->DeltaSwingTableIdx_2GB_N;
- }
- } else {
- *TemperatureUP_A = (u8 *)DeltaSwingTableIdx_2GA_P_8188E;
- *TemperatureDOWN_A = (u8 *)DeltaSwingTableIdx_2GA_N_8188E;
- *TemperatureUP_B = (u8 *)DeltaSwingTableIdx_2GA_P_8188E;
- *TemperatureDOWN_B = (u8 *)DeltaSwingTableIdx_2GA_N_8188E;
- }
-}
-
-void ConfigureTxpowerTrack_8723B(struct txpwrtrack_cfg *pConfig)
-{
- pConfig->SwingTableSize_CCK = CCK_TABLE_SIZE;
- pConfig->SwingTableSize_OFDM = OFDM_TABLE_SIZE;
- pConfig->Threshold_IQK = IQK_THRESHOLD;
- pConfig->AverageThermalNum = AVG_THERMAL_NUM_8723B;
- pConfig->RfPathCount = MAX_PATH_NUM_8723B;
- pConfig->ThermalRegAddr = RF_T_METER_8723B;
-
- pConfig->ODM_TxPwrTrackSetPwr = ODM_TxPwrTrackSetPwr_8723B;
- pConfig->PHY_LCCalibrate = PHY_LCCalibrate_8723B;
- pConfig->GetDeltaSwingTable = GetDeltaSwingTable_8723B;
-}
-
-/* 1 7. IQK */
-#define MAX_TOLERANCE 5
-
-/* bit0 = 1 => Tx OK, bit1 = 1 => Rx OK */
-static u8 phy_PathA_IQK_8723B(
- struct adapter *padapter, bool configPathB, u8 RF_Path
-)
-{
- u32 regEAC, regE94, regE9C, tmp, Path_SEL_BB /*, regEA4*/;
- u8 result = 0x00;
-
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- /* Save RF Path */
- Path_SEL_BB = PHY_QueryBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord);
-
- /* leave IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
-
- /* enable path A PA in TXIQK mode */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_WE_LUT, 0x80000, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_RCK_OS, bRFRegOffsetMask, 0x18000);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G1, bRFRegOffsetMask, 0x0003f);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G2, bRFRegOffsetMask, 0xc7f87);
- /* disable path B PA in TXIQK mode */
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xed, bRFRegOffsetMask, 0x00020); */
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0x43, bRFRegOffsetMask, 0x40ec1); */
-
- /* 1 Tx IQK */
- /* IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK, bMaskDWord, 0x01007c00);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK, bMaskDWord, 0x01004800);
- /* path-A IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_A, bMaskDWord, 0x18008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_A, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
-/* PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_A, bMaskDWord, 0x8214010a); */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_A, bMaskDWord, 0x821303ea);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_A, bMaskDWord, 0x28110000);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_B, bMaskDWord, 0x82110000);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_B, bMaskDWord, 0x28110000);
-
- /* LO calibration setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Rsp, bMaskDWord, 0x00462911);
-
- /* enter IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x808000);
-
- /* Ant switch */
- if (configPathB || (RF_Path == 0))
- /* wifi switch to S1 */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, 0x00000000);
- else
- /* wifi switch to S0 */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, 0x00000280);
-
- /* GNT_BT = 0 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00000800);
-
- /* One shot, path A LOK & IQK */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-
- /* delay x ms */
- /* PlatformStallExecution(IQK_DELAY_TIME_8723B*1000); */
- mdelay(IQK_DELAY_TIME_8723B);
-
- /* restore Ant Path */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, Path_SEL_BB);
- /* GNT_BT = 1 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00001800);
-
- /* leave IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
-
- /* Check failed */
- regEAC = PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_After_IQK_A_2, bMaskDWord);
- regE94 = PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_Before_IQK_A, bMaskDWord);
- regE9C = PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_After_IQK_A, bMaskDWord);
-
- /* Allen 20131125 */
- tmp = (regE9C & 0x03FF0000)>>16;
- if ((tmp & 0x200) > 0)
- tmp = 0x400 - tmp;
-
- if (
- !(regEAC & BIT(28)) &&
- (((regE94 & 0x03FF0000)>>16) != 0x142) &&
- (((regE9C & 0x03FF0000)>>16) != 0x42) &&
- (((regE94 & 0x03FF0000)>>16) < 0x110) &&
- (((regE94 & 0x03FF0000)>>16) > 0xf0) &&
- (tmp < 0xf)
- )
- result |= 0x01;
- else /* if Tx not OK, ignore Rx */
- return result;
-
- return result;
-}
-
-/* bit0 = 1 => Tx OK, bit1 = 1 => Rx OK */
-static u8 phy_PathA_RxIQK8723B(
- struct adapter *padapter, bool configPathB, u8 RF_Path
-)
-{
- u32 regEAC, regE94, regE9C, regEA4, u4tmp, tmp, Path_SEL_BB;
- u8 result = 0x00;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- /* Save RF Path */
- Path_SEL_BB = PHY_QueryBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord);
-
- /* leave IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
- /* 1 Get TXIMR setting */
- /* modify RXIQK mode table */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_WE_LUT, 0x80000, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_RCK_OS, bRFRegOffsetMask, 0x18000);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G1, bRFRegOffsetMask, 0x0001f);
- /* LNA2 off, PA on for Dcut */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G2, bRFRegOffsetMask, 0xf7fb7);
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_WE_LUT, 0x80000, 0x0); */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x808000);
-
- /* IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK, bMaskDWord, 0x01007c00);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK, bMaskDWord, 0x01004800);
-
- /* path-A IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_A, bMaskDWord, 0x18008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_A, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
-
-/* PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_A, bMaskDWord, 0x82160c1f); */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_A, bMaskDWord, 0x82130ff0);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_A, bMaskDWord, 0x28110000);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_B, bMaskDWord, 0x82110000);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_B, bMaskDWord, 0x28110000);
-
- /* LO calibration setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Rsp, bMaskDWord, 0x0046a911);
-
- /* enter IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x808000);
-
- /* Ant switch */
- if (configPathB || (RF_Path == 0))
- /* wifi switch to S1 */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, 0x00000000);
- else
- /* wifi switch to S0 */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, 0x00000280);
-
- /* GNT_BT = 0 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00000800);
-
- /* One shot, path A LOK & IQK */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-
- /* delay x ms */
- /* PlatformStallExecution(IQK_DELAY_TIME_8723B*1000); */
- mdelay(IQK_DELAY_TIME_8723B);
-
- /* restore Ant Path */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, Path_SEL_BB);
- /* GNT_BT = 1 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00001800);
-
- /* leave IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
-
- /* Check failed */
- regEAC = PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_After_IQK_A_2, bMaskDWord);
- regE94 = PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_Before_IQK_A, bMaskDWord);
- regE9C = PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_After_IQK_A, bMaskDWord);
-
- /* Allen 20131125 */
- tmp = (regE9C & 0x03FF0000)>>16;
- if ((tmp & 0x200) > 0)
- tmp = 0x400 - tmp;
-
- if (
- !(regEAC & BIT(28)) &&
- (((regE94 & 0x03FF0000)>>16) != 0x142) &&
- (((regE9C & 0x03FF0000)>>16) != 0x42) &&
- (((regE94 & 0x03FF0000)>>16) < 0x110) &&
- (((regE94 & 0x03FF0000)>>16) > 0xf0) &&
- (tmp < 0xf)
- )
- result |= 0x01;
- else /* if Tx not OK, ignore Rx */
- return result;
-
- u4tmp = 0x80007C00 | (regE94&0x3FF0000) | ((regE9C&0x3FF0000) >> 16);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK, bMaskDWord, u4tmp);
-
- /* modify RXIQK mode table */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_WE_LUT, 0x80000, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_RCK_OS, bRFRegOffsetMask, 0x18000);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G1, bRFRegOffsetMask, 0x0001f);
- /* LAN2 on, PA off for Dcut */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G2, bRFRegOffsetMask, 0xf7d77);
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_WE_LUT, 0x80000, 0x0); */
-
- /* PA, PAD setting */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xdf, bRFRegOffsetMask, 0xf80);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0x55, bRFRegOffsetMask, 0x4021f);
-
- /* IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK, bMaskDWord, 0x01004800);
-
- /* path-A IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_A, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_A, bMaskDWord, 0x18008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
-
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_A, bMaskDWord, 0x82110000);
-/* PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_A, bMaskDWord, 0x281604c2); */
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_A, bMaskDWord, 0x2813001f);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_B, bMaskDWord, 0x82110000);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_B, bMaskDWord, 0x28110000);
-
- /* LO calibration setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Rsp, bMaskDWord, 0x0046a8d1);
-
- /* enter IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x808000);
-
- /* Ant switch */
- if (configPathB || (RF_Path == 0))
- /* wifi switch to S1 */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, 0x00000000);
- else
- /* wifi switch to S0 */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, 0x00000280);
-
- /* GNT_BT = 0 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00000800);
-
- /* One shot, path A LOK & IQK */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-
- /* delay x ms */
- /* PlatformStallExecution(IQK_DELAY_TIME_8723B*1000); */
- mdelay(IQK_DELAY_TIME_8723B);
-
- /* restore Ant Path */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, Path_SEL_BB);
- /* GNT_BT = 1 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00001800);
-
- /* leave IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
-
- /* Check failed */
- regEAC = PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_After_IQK_A_2, bMaskDWord);
- regEA4 = PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_Before_IQK_A_2, bMaskDWord);
-
- /* PA/PAD controlled by 0x0 */
- /* leave IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xdf, bRFRegOffsetMask, 0x780);
-
- /* Allen 20131125 */
- tmp = (regEAC & 0x03FF0000)>>16;
- if ((tmp & 0x200) > 0)
- tmp = 0x400 - tmp;
-
- if (
- !(regEAC & BIT(27)) && /* if Tx is OK, check whether Rx is OK */
- (((regEA4 & 0x03FF0000)>>16) != 0x132) &&
- (((regEAC & 0x03FF0000)>>16) != 0x36) &&
- (((regEA4 & 0x03FF0000)>>16) < 0x110) &&
- (((regEA4 & 0x03FF0000)>>16) > 0xf0) &&
- (tmp < 0xf)
- )
- result |= 0x02;
-
- return result;
-}
-
-/* bit0 = 1 => Tx OK, bit1 = 1 => Rx OK */
-static u8 phy_PathB_IQK_8723B(struct adapter *padapter)
-{
- u32 regEAC, regE94, regE9C, tmp, Path_SEL_BB/*, regEC4, regECC, Path_SEL_BB*/;
- u8 result = 0x00;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- /* Save RF Path */
- Path_SEL_BB = PHY_QueryBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord);
-
- /* leave IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
-
- /* in TXIQK mode */
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_WE_LUT, 0x80000, 0x1); */
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_RCK_OS, bRFRegOffsetMask, 0x20000); */
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G1, bRFRegOffsetMask, 0x0003f); */
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G2, bRFRegOffsetMask, 0xc7f87); */
- /* enable path B PA in TXIQK mode */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xed, 0x20, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0x43, bRFRegOffsetMask, 0x30fc1);
-
- /* 1 Tx IQK */
- /* IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK, bMaskDWord, 0x01007c00);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK, bMaskDWord, 0x01004800);
- /* path-A IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_A, bMaskDWord, 0x18008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_A, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
-
-/* PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_A, bMaskDWord, 0x82140114); */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_A, bMaskDWord, 0x821303ea);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_A, bMaskDWord, 0x28110000);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_B, bMaskDWord, 0x82110000);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_B, bMaskDWord, 0x28110000);
-
- /* LO calibration setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Rsp, bMaskDWord, 0x00462911);
-
- /* enter IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x808000);
-
- /* switch to path B */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, 0x00000280);
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xb0, bRFRegOffsetMask, 0xeffe0); */
-
- /* GNT_BT = 0 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00000800);
-
- /* One shot, path B LOK & IQK */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-
- /* delay x ms */
- /* PlatformStallExecution(IQK_DELAY_TIME_88E*1000); */
- mdelay(IQK_DELAY_TIME_8723B);
-
- /* restore Ant Path */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, Path_SEL_BB);
- /* GNT_BT = 1 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00001800);
-
- /* leave IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
-
- /* Check failed */
- regEAC = PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_After_IQK_A_2, bMaskDWord);
- regE94 = PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_Before_IQK_A, bMaskDWord);
- regE9C = PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_After_IQK_A, bMaskDWord);
-
- /* Allen 20131125 */
- tmp = (regE9C & 0x03FF0000)>>16;
- if ((tmp & 0x200) > 0)
- tmp = 0x400 - tmp;
-
- if (
- !(regEAC & BIT(28)) &&
- (((regE94 & 0x03FF0000)>>16) != 0x142) &&
- (((regE9C & 0x03FF0000)>>16) != 0x42) &&
- (((regE94 & 0x03FF0000)>>16) < 0x110) &&
- (((regE94 & 0x03FF0000)>>16) > 0xf0) &&
- (tmp < 0xf)
- )
- result |= 0x01;
-
- return result;
-}
-
-/* bit0 = 1 => Tx OK, bit1 = 1 => Rx OK */
-static u8 phy_PathB_RxIQK8723B(struct adapter *padapter, bool configPathB)
-{
- u32 regE94, regE9C, regEA4, regEAC, u4tmp, tmp, Path_SEL_BB;
- u8 result = 0x00;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- /* Save RF Path */
- Path_SEL_BB = PHY_QueryBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord);
- /* leave IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
-
- /* switch to path B */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, 0x00000280);
- /* modify RXIQK mode table */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_WE_LUT, 0x80000, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_RCK_OS, bRFRegOffsetMask, 0x18000);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G1, bRFRegOffsetMask, 0x0001f);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G2, bRFRegOffsetMask, 0xf7fb7);
- /* open PA S1 & SMIXER */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xed, 0x20, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0x43, bRFRegOffsetMask, 0x30fcd);
-
- /* IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK, bMaskDWord, 0x01007c00);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK, bMaskDWord, 0x01004800);
-
- /* path-B IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_A, bMaskDWord, 0x18008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_A, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
-
-/* PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_A, bMaskDWord, 0x82160c1f); */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_A, bMaskDWord, 0x82130ff0);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_A, bMaskDWord, 0x28110000);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_B, bMaskDWord, 0x82110000);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_B, bMaskDWord, 0x28110000);
-
- /* LO calibration setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Rsp, bMaskDWord, 0x0046a911);
-
- /* enter IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x808000);
-
- /* switch to path B */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, 0x00000280);
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xb0, bRFRegOffsetMask, 0xeffe0); */
-
- /* GNT_BT = 0 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00000800);
-
- /* One shot, path B TXIQK @ RXIQK */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-
- /* delay x ms */
- /* PlatformStallExecution(IQK_DELAY_TIME_88E*1000); */
- mdelay(IQK_DELAY_TIME_8723B);
-
- /* restore Ant Path */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, Path_SEL_BB);
- /* GNT_BT = 1 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00001800);
-
- /* leave IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
-
- /* Check failed */
- regEAC = PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_After_IQK_A_2, bMaskDWord);
- regE94 = PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_Before_IQK_A, bMaskDWord);
- regE9C = PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_After_IQK_A, bMaskDWord);
-
- /* Allen 20131125 */
- tmp = (regE9C & 0x03FF0000)>>16;
- if ((tmp & 0x200) > 0)
- tmp = 0x400 - tmp;
-
- if (
- !(regEAC & BIT(28)) &&
- (((regE94 & 0x03FF0000)>>16) != 0x142) &&
- (((regE9C & 0x03FF0000)>>16) != 0x42) &&
- (((regE94 & 0x03FF0000)>>16) < 0x110) &&
- (((regE94 & 0x03FF0000)>>16) > 0xf0) &&
- (tmp < 0xf)
- )
- result |= 0x01;
- else /* if Tx not OK, ignore Rx */
- return result;
-
- u4tmp = 0x80007C00 | (regE94&0x3FF0000) | ((regE9C&0x3FF0000) >> 16);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK, bMaskDWord, u4tmp);
-
- /* modify RXIQK mode table */
- /* 20121009, Kordan> RF Mode = 3 */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_WE_LUT, 0x80000, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_RCK_OS, bRFRegOffsetMask, 0x18000);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G1, bRFRegOffsetMask, 0x0001f);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G2, bRFRegOffsetMask, 0xf7d77);
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_WE_LUT, 0x80000, 0x0); */
-
- /* open PA S1 & close SMIXER */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xed, 0x20, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0x43, bRFRegOffsetMask, 0x30ebd);
-
- /* PA, PAD setting */
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xdf, bRFRegOffsetMask, 0xf80); */
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0x56, bRFRegOffsetMask, 0x51000); */
-
- /* IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK, bMaskDWord, 0x01004800);
-
- /* path-B IQK setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_A, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_A, bMaskDWord, 0x18008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_B, bMaskDWord, 0x38008c1c);
-
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_A, bMaskDWord, 0x82110000);
-/* PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_A, bMaskDWord, 0x281604c2); */
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_A, bMaskDWord, 0x2813001f);
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_PI_B, bMaskDWord, 0x82110000);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_PI_B, bMaskDWord, 0x28110000);
-
- /* LO calibration setting */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Rsp, bMaskDWord, 0x0046a8d1);
-
- /* enter IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x808000);
-
- /* switch to path B */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, 0x00000280);
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xb0, bRFRegOffsetMask, 0xeffe0); */
-
- /* GNT_BT = 0 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00000800);
-
- /* One shot, path B LOK & IQK */
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf9000000);
- PHY_SetBBReg(pDM_Odm->Adapter, rIQK_AGC_Pts, bMaskDWord, 0xf8000000);
-
- /* delay x ms */
- /* PlatformStallExecution(IQK_DELAY_TIME_88E*1000); */
- mdelay(IQK_DELAY_TIME_8723B);
-
- /* restore Ant Path */
- PHY_SetBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskDWord, Path_SEL_BB);
- /* GNT_BT = 1 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, 0x00001800);
-
- /* leave IQK mode */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
-
- /* Check failed */
- regEAC = PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_After_IQK_A_2, bMaskDWord);
- regEA4 = PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_Before_IQK_A_2, bMaskDWord);
-
- /* PA/PAD controlled by 0x0 */
- /* leave IQK mode */
-/* PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, 0xffffff00, 0x00000000); */
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_B, 0xdf, bRFRegOffsetMask, 0x180); */
-
- /* Allen 20131125 */
- tmp = (regEAC & 0x03FF0000)>>16;
- if ((tmp & 0x200) > 0)
- tmp = 0x400 - tmp;
-
- if (
- !(regEAC & BIT(27)) && /* if Tx is OK, check whether Rx is OK */
- (((regEA4 & 0x03FF0000)>>16) != 0x132) &&
- (((regEAC & 0x03FF0000)>>16) != 0x36) &&
- (((regEA4 & 0x03FF0000)>>16) < 0x110) &&
- (((regEA4 & 0x03FF0000)>>16) > 0xf0) &&
- (tmp < 0xf)
- )
- result |= 0x02;
-
- return result;
-}
-
-static void _PHY_PathAFillIQKMatrix8723B(
- struct adapter *padapter,
- bool bIQKOK,
- s32 result[][8],
- u8 final_candidate,
- bool bTxOnly
-)
-{
- u32 Oldval_0, X, TX0_A, reg;
- s32 Y, TX0_C;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- struct odm_rf_cal_t *pRFCalibrateInfo = &pDM_Odm->RFCalibrateInfo;
-
- if (final_candidate == 0xFF)
- return;
-
- else if (bIQKOK) {
- Oldval_0 = (PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_XATxIQImbalance, bMaskDWord) >> 22) & 0x3FF;
-
- X = result[final_candidate][0];
- if ((X & 0x00000200) != 0)
- X = X | 0xFFFFFC00;
- TX0_A = (X * Oldval_0) >> 8;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XATxIQImbalance, 0x3FF, TX0_A);
-
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT(31), ((X*Oldval_0>>7) & 0x1));
-
- Y = result[final_candidate][1];
- if ((Y & 0x00000200) != 0)
- Y = Y | 0xFFFFFC00;
-
- /* 2 Tx IQC */
- TX0_C = (Y * Oldval_0) >> 8;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XCTxAFE, 0xF0000000, ((TX0_C&0x3C0)>>6));
- pRFCalibrateInfo->TxIQC_8723B[PATH_S1][IDX_0xC94][KEY] = rOFDM0_XCTxAFE;
- pRFCalibrateInfo->TxIQC_8723B[PATH_S1][IDX_0xC94][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_XCTxAFE, bMaskDWord);
-
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XATxIQImbalance, 0x003F0000, (TX0_C&0x3F));
- pRFCalibrateInfo->TxIQC_8723B[PATH_S1][IDX_0xC80][KEY] = rOFDM0_XATxIQImbalance;
- pRFCalibrateInfo->TxIQC_8723B[PATH_S1][IDX_0xC80][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_XATxIQImbalance, bMaskDWord);
-
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT(29), ((Y*Oldval_0>>7) & 0x1));
- pRFCalibrateInfo->TxIQC_8723B[PATH_S1][IDX_0xC4C][KEY] = rOFDM0_ECCAThreshold;
- pRFCalibrateInfo->TxIQC_8723B[PATH_S1][IDX_0xC4C][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, bMaskDWord);
-
- if (bTxOnly) {
- /* <20130226, Kordan> Saving RxIQC, otherwise not initialized. */
- pRFCalibrateInfo->RxIQC_8723B[PATH_S1][IDX_0xCA0][KEY] = rOFDM0_RxIQExtAnta;
- pRFCalibrateInfo->RxIQC_8723B[PATH_S1][IDX_0xCA0][VAL] = 0xfffffff & PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_RxIQExtAnta, bMaskDWord);
- pRFCalibrateInfo->RxIQC_8723B[PATH_S1][IDX_0xC14][KEY] = rOFDM0_XARxIQImbalance;
-/* pRFCalibrateInfo->RxIQC_8723B[PATH_S1][IDX_0xC14][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_XARxIQImbalance, bMaskDWord); */
- pRFCalibrateInfo->RxIQC_8723B[PATH_S1][IDX_0xC14][VAL] = 0x40000100;
- return;
- }
-
- reg = result[final_candidate][2];
-
- /* 2 Rx IQC */
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XARxIQImbalance, 0x3FF, reg);
- reg = result[final_candidate][3] & 0x3F;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XARxIQImbalance, 0xFC00, reg);
- pRFCalibrateInfo->RxIQC_8723B[PATH_S1][IDX_0xC14][KEY] = rOFDM0_XARxIQImbalance;
- pRFCalibrateInfo->RxIQC_8723B[PATH_S1][IDX_0xC14][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_XARxIQImbalance, bMaskDWord);
-
- reg = (result[final_candidate][3] >> 6) & 0xF;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_RxIQExtAnta, 0xF0000000, reg);
- pRFCalibrateInfo->RxIQC_8723B[PATH_S1][IDX_0xCA0][KEY] = rOFDM0_RxIQExtAnta;
- pRFCalibrateInfo->RxIQC_8723B[PATH_S1][IDX_0xCA0][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_RxIQExtAnta, bMaskDWord);
-
- }
-}
-
-static void _PHY_PathBFillIQKMatrix8723B(
- struct adapter *padapter,
- bool bIQKOK,
- s32 result[][8],
- u8 final_candidate,
- bool bTxOnly /* do Tx only */
-)
-{
- u32 Oldval_1, X, TX1_A, reg;
- s32 Y, TX1_C;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- struct odm_rf_cal_t *pRFCalibrateInfo = &pDM_Odm->RFCalibrateInfo;
-
- if (final_candidate == 0xFF)
- return;
-
- else if (bIQKOK) {
- Oldval_1 = (PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord) >> 22) & 0x3FF;
-
- X = result[final_candidate][4];
- if ((X & 0x00000200) != 0)
- X = X | 0xFFFFFC00;
- TX1_A = (X * Oldval_1) >> 8;
-
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XBTxIQImbalance, 0x3FF, TX1_A);
-
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT(27), ((X*Oldval_1>>7) & 0x1));
-
- Y = result[final_candidate][5];
- if ((Y & 0x00000200) != 0)
- Y = Y | 0xFFFFFC00;
-
- TX1_C = (Y * Oldval_1) >> 8;
-
- /* 2 Tx IQC */
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XDTxAFE, 0xF0000000, ((TX1_C&0x3C0)>>6));
-/* pRFCalibrateInfo->TxIQC_8723B[PATH_S0][IDX_0xC9C][KEY] = rOFDM0_XDTxAFE; */
-/* pRFCalibrateInfo->TxIQC_8723B[PATH_S0][IDX_0xC9C][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_XDTxAFE, bMaskDWord); */
- pRFCalibrateInfo->TxIQC_8723B[PATH_S0][IDX_0xC94][KEY] = rOFDM0_XCTxAFE;
- pRFCalibrateInfo->TxIQC_8723B[PATH_S0][IDX_0xC94][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_XDTxAFE, bMaskDWord);
-
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XBTxIQImbalance, 0x003F0000, (TX1_C&0x3F));
- pRFCalibrateInfo->TxIQC_8723B[PATH_S0][IDX_0xC80][KEY] = rOFDM0_XATxIQImbalance;
- pRFCalibrateInfo->TxIQC_8723B[PATH_S0][IDX_0xC80][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_XBTxIQImbalance, bMaskDWord);
-
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, BIT(25), ((Y*Oldval_1>>7) & 0x1));
- pRFCalibrateInfo->TxIQC_8723B[PATH_S0][IDX_0xC4C][KEY] = rOFDM0_ECCAThreshold;
- pRFCalibrateInfo->TxIQC_8723B[PATH_S0][IDX_0xC4C][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, bMaskDWord);
-
- if (bTxOnly) {
- pRFCalibrateInfo->RxIQC_8723B[PATH_S0][IDX_0xC14][KEY] = rOFDM0_XARxIQImbalance;
-/* pRFCalibrateInfo->RxIQC_8723B[PATH_S0][IDX_0xC14][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_XARxIQImbalance, bMaskDWord); */
- pRFCalibrateInfo->RxIQC_8723B[PATH_S0][IDX_0xC14][VAL] = 0x40000100;
- pRFCalibrateInfo->RxIQC_8723B[PATH_S0][IDX_0xCA0][KEY] = rOFDM0_RxIQExtAnta;
- pRFCalibrateInfo->RxIQC_8723B[PATH_S0][IDX_0xCA0][VAL] = 0x0fffffff & PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_RxIQExtAnta, bMaskDWord);
- return;
- }
-
- /* 2 Rx IQC */
- reg = result[final_candidate][6];
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XBRxIQImbalance, 0x3FF, reg);
- reg = result[final_candidate][7] & 0x3F;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_XBRxIQImbalance, 0xFC00, reg);
- pRFCalibrateInfo->RxIQC_8723B[PATH_S0][IDX_0xC14][KEY] = rOFDM0_XARxIQImbalance;
- pRFCalibrateInfo->RxIQC_8723B[PATH_S0][IDX_0xC14][VAL] = PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_XBRxIQImbalance, bMaskDWord);
-
- reg = (result[final_candidate][7] >> 6) & 0xF;
-/* PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_AGCRSSITable, 0x0000F000, reg); */
- pRFCalibrateInfo->RxIQC_8723B[PATH_S0][IDX_0xCA0][KEY] = rOFDM0_RxIQExtAnta;
- pRFCalibrateInfo->RxIQC_8723B[PATH_S0][IDX_0xCA0][VAL] = (reg << 28)|(PHY_QueryBBReg(pDM_Odm->Adapter, rOFDM0_RxIQExtAnta, bMaskDWord)&0x0fffffff);
- }
-}
-
-/* */
-/* 2011/07/26 MH Add an API for testing IQK fail case. */
-/* */
-/* MP Already declare in odm.c */
-
-void ODM_SetIQCbyRFpath(struct dm_odm_t *pDM_Odm, u32 RFpath)
-{
-
- struct odm_rf_cal_t *pRFCalibrateInfo = &pDM_Odm->RFCalibrateInfo;
- u8 path;
-
- if (
- (pRFCalibrateInfo->TxIQC_8723B[PATH_S0][IDX_0xC80][VAL] != 0x0) &&
- (pRFCalibrateInfo->RxIQC_8723B[PATH_S0][IDX_0xC14][VAL] != 0x0) &&
- (pRFCalibrateInfo->TxIQC_8723B[PATH_S1][IDX_0xC80][VAL] != 0x0) &&
- (pRFCalibrateInfo->RxIQC_8723B[PATH_S1][IDX_0xC14][VAL] != 0x0)
- ) {
- if (RFpath)
- path = PATH_S0;
- else
- path = PATH_S1;
-
- /* TX IQC */
- PHY_SetBBReg(pDM_Odm->Adapter, pRFCalibrateInfo->TxIQC_8723B[path][IDX_0xC94][KEY], bMaskDWord, pRFCalibrateInfo->TxIQC_8723B[path][IDX_0xC94][VAL]);
- PHY_SetBBReg(pDM_Odm->Adapter, pRFCalibrateInfo->TxIQC_8723B[path][IDX_0xC80][KEY], bMaskDWord, pRFCalibrateInfo->TxIQC_8723B[path][IDX_0xC80][VAL]);
- PHY_SetBBReg(pDM_Odm->Adapter, pRFCalibrateInfo->TxIQC_8723B[path][IDX_0xC4C][KEY], bMaskDWord, pRFCalibrateInfo->TxIQC_8723B[path][IDX_0xC4C][VAL]);
- /* RX IQC */
- PHY_SetBBReg(pDM_Odm->Adapter, pRFCalibrateInfo->RxIQC_8723B[path][IDX_0xC14][KEY], bMaskDWord, pRFCalibrateInfo->RxIQC_8723B[path][IDX_0xC14][VAL]);
- PHY_SetBBReg(pDM_Odm->Adapter, pRFCalibrateInfo->RxIQC_8723B[path][IDX_0xCA0][KEY], bMaskDWord, pRFCalibrateInfo->RxIQC_8723B[path][IDX_0xCA0][VAL]);
- }
-}
-
-static bool ODM_CheckPowerStatus(struct adapter *Adapter)
-{
- return true;
-}
-
-static void _PHY_SaveADDARegisters8723B(
- struct adapter *padapter,
- u32 *ADDAReg,
- u32 *ADDABackup,
- u32 RegisterNum
-)
-{
- u32 i;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- if (!ODM_CheckPowerStatus(padapter))
- return;
-
- for (i = 0 ; i < RegisterNum ; i++) {
- ADDABackup[i] = PHY_QueryBBReg(pDM_Odm->Adapter, ADDAReg[i], bMaskDWord);
- }
-}
-
-static void _PHY_SaveMACRegisters8723B(
- struct adapter *padapter, u32 *MACReg, u32 *MACBackup
-)
-{
- u32 i;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- for (i = 0 ; i < (IQK_MAC_REG_NUM - 1); i++) {
- MACBackup[i] = rtw_read8(pDM_Odm->Adapter, MACReg[i]);
- }
- MACBackup[i] = rtw_read32(pDM_Odm->Adapter, MACReg[i]);
-
-}
-
-static void _PHY_ReloadADDARegisters8723B(
- struct adapter *padapter,
- u32 *ADDAReg,
- u32 *ADDABackup,
- u32 RegiesterNum
-)
-{
- u32 i;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- for (i = 0 ; i < RegiesterNum; i++) {
- PHY_SetBBReg(pDM_Odm->Adapter, ADDAReg[i], bMaskDWord, ADDABackup[i]);
- }
-}
-
-static void _PHY_ReloadMACRegisters8723B(
- struct adapter *padapter, u32 *MACReg, u32 *MACBackup
-)
-{
- u32 i;
-
- for (i = 0 ; i < (IQK_MAC_REG_NUM - 1); i++) {
- rtw_write8(padapter, MACReg[i], (u8)MACBackup[i]);
- }
- rtw_write32(padapter, MACReg[i], MACBackup[i]);
-}
-
-static void _PHY_PathADDAOn8723B(
- struct adapter *padapter,
- u32 *ADDAReg,
- bool is2T
-)
-{
- u32 pathOn;
- u32 i;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- pathOn = 0x01c00014;
- if (!is2T) {
- pathOn = 0x01c00014;
- PHY_SetBBReg(pDM_Odm->Adapter, ADDAReg[0], bMaskDWord, 0x01c00014);
- } else {
- PHY_SetBBReg(pDM_Odm->Adapter, ADDAReg[0], bMaskDWord, pathOn);
- }
-
- for (i = 1 ; i < IQK_ADDA_REG_NUM ; i++) {
- PHY_SetBBReg(pDM_Odm->Adapter, ADDAReg[i], bMaskDWord, pathOn);
- }
-
-}
-
-static void _PHY_MACSettingCalibration8723B(
- struct adapter *padapter, u32 *MACReg, u32 *MACBackup
-)
-{
- u32 i = 0;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- rtw_write8(pDM_Odm->Adapter, MACReg[i], 0x3F);
-
- for (i = 1 ; i < (IQK_MAC_REG_NUM - 1); i++) {
- rtw_write8(pDM_Odm->Adapter, MACReg[i], (u8)(MACBackup[i]&(~BIT(3))));
- }
- rtw_write8(pDM_Odm->Adapter, MACReg[i], (u8)(MACBackup[i]&(~BIT(5))));
-
-}
-
-static bool phy_SimularityCompare_8723B(
- struct adapter *padapter,
- s32 result[][8],
- u8 c1,
- u8 c2
-)
-{
- u32 i, j, diff, SimularityBitMap, bound = 0;
- u8 final_candidate[2] = {0xFF, 0xFF}; /* for path A and path B */
- bool bResult = true;
- s32 tmp1 = 0, tmp2 = 0;
-
- bound = 8;
- SimularityBitMap = 0;
-
- for (i = 0; i < bound; i++) {
-
- if ((i == 1) || (i == 3) || (i == 5) || (i == 7)) {
- if ((result[c1][i] & 0x00000200) != 0)
- tmp1 = result[c1][i] | 0xFFFFFC00;
- else
- tmp1 = result[c1][i];
-
- if ((result[c2][i] & 0x00000200) != 0)
- tmp2 = result[c2][i] | 0xFFFFFC00;
- else
- tmp2 = result[c2][i];
- } else {
- tmp1 = result[c1][i];
- tmp2 = result[c2][i];
- }
-
- diff = (tmp1 > tmp2) ? (tmp1 - tmp2) : (tmp2 - tmp1);
-
- if (diff > MAX_TOLERANCE) {
- if ((i == 2 || i == 6) && !SimularityBitMap) {
- if (result[c1][i]+result[c1][i+1] == 0)
- final_candidate[(i/4)] = c2;
- else if (result[c2][i]+result[c2][i+1] == 0)
- final_candidate[(i/4)] = c1;
- else
- SimularityBitMap = SimularityBitMap|(1<<i);
- } else
- SimularityBitMap = SimularityBitMap|(1<<i);
- }
- }
-
- if (SimularityBitMap == 0) {
- for (i = 0; i < (bound/4); i++) {
- if (final_candidate[i] != 0xFF) {
- for (j = i*4; j < (i+1)*4-2; j++)
- result[3][j] = result[final_candidate[i]][j];
- bResult = false;
- }
- }
- return bResult;
- } else {
-
- if (!(SimularityBitMap & 0x03)) { /* path A TX OK */
- for (i = 0; i < 2; i++)
- result[3][i] = result[c1][i];
- }
-
- if (!(SimularityBitMap & 0x0c)) { /* path A RX OK */
- for (i = 2; i < 4; i++)
- result[3][i] = result[c1][i];
- }
-
- if (!(SimularityBitMap & 0x30)) { /* path B TX OK */
- for (i = 4; i < 6; i++)
- result[3][i] = result[c1][i];
- }
-
- if (!(SimularityBitMap & 0xc0)) { /* path B RX OK */
- for (i = 6; i < 8; i++)
- result[3][i] = result[c1][i];
- }
- return false;
- }
-}
-
-static void phy_IQCalibrate_8723B(
- struct adapter *padapter,
- s32 result[][8],
- u8 t,
- bool is2T,
- u8 RF_Path
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- u32 i;
- u8 PathAOK, PathBOK;
- u8 tmp0xc50 = (u8)PHY_QueryBBReg(pDM_Odm->Adapter, 0xC50, bMaskByte0);
- u8 tmp0xc58 = (u8)PHY_QueryBBReg(pDM_Odm->Adapter, 0xC58, bMaskByte0);
- 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,
- rCCK0_AFESetting
- };
- const u32 retryCount = 2;
-
- /* Note: IQ calibration must be performed after loading */
- /* PHY_REG.txt , and radio_a, radio_b.txt */
-
- /* u32 bbvalue; */
-
- if (t == 0) {
-
- /* Save ADDA parameters, turn Path A ADDA on */
- _PHY_SaveADDARegisters8723B(padapter, ADDA_REG, pDM_Odm->RFCalibrateInfo.ADDA_backup, IQK_ADDA_REG_NUM);
- _PHY_SaveMACRegisters8723B(padapter, IQK_MAC_REG, pDM_Odm->RFCalibrateInfo.IQK_MAC_backup);
- _PHY_SaveADDARegisters8723B(padapter, IQK_BB_REG_92C, pDM_Odm->RFCalibrateInfo.IQK_BB_backup, IQK_BB_REG_NUM);
- }
-
- _PHY_PathADDAOn8723B(padapter, ADDA_REG, is2T);
-
-/* no serial mode */
-
- /* save RF path for 8723B */
-/* Path_SEL_BB = PHY_QueryBBReg(pDM_Odm->Adapter, 0x948, bMaskDWord); */
-/* Path_SEL_RF = PHY_QueryRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xb0, 0xfffff); */
-
- /* MAC settings */
- _PHY_MACSettingCalibration8723B(padapter, IQK_MAC_REG, pDM_Odm->RFCalibrateInfo.IQK_MAC_backup);
-
- /* BB setting */
- /* PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_RFMOD, BIT24, 0x00); */
- PHY_SetBBReg(pDM_Odm->Adapter, rCCK0_AFESetting, 0x0f000000, 0xf);
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_TRxPathEnable, bMaskDWord, 0x03a05600);
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_TRMuxPar, bMaskDWord, 0x000800e4);
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_XCD_RFInterfaceSW, bMaskDWord, 0x22204000);
-
-/* PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_XAB_RFInterfaceSW, BIT10, 0x01); */
-/* PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_XAB_RFInterfaceSW, BIT26, 0x01); */
-/* PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_XA_RFInterfaceOE, BIT10, 0x00); */
-/* PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_XB_RFInterfaceOE, BIT10, 0x00); */
-
-/* RX IQ calibration setting for 8723B D cut large current issue when leaving IPS */
-
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_WE_LUT, 0x80000, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_RCK_OS, bRFRegOffsetMask, 0x30000);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G1, bRFRegOffsetMask, 0x0001f);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G2, bRFRegOffsetMask, 0xf7fb7);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xed, 0x20, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0x43, bRFRegOffsetMask, 0x60fbd);
-
-/* path A TX IQK */
- for (i = 0 ; i < retryCount ; i++) {
- PathAOK = phy_PathA_IQK_8723B(padapter, is2T, RF_Path);
-/* if (PathAOK == 0x03) { */
- if (PathAOK == 0x01) {
- /* Path A Tx IQK Success */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
- pDM_Odm->RFCalibrateInfo.TxLOK[RF_PATH_A] = PHY_QueryRFReg(pDM_Odm->Adapter, RF_PATH_A, 0x8, bRFRegOffsetMask);
-
- result[t][0] = (PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_Before_IQK_A,
- bMaskDWord) & 0x3FF0000) >> 16;
- result[t][1] = (PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_After_IQK_A,
- bMaskDWord) & 0x3FF0000) >> 16;
- break;
- }
- }
-
-/* path A RXIQK */
- for (i = 0 ; i < retryCount ; i++) {
- PathAOK = phy_PathA_RxIQK8723B(padapter, is2T, RF_Path);
- if (PathAOK == 0x03) {
-/* result[t][0] = (PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_Before_IQK_A, bMaskDWord)&0x3FF0000)>>16; */
-/* result[t][1] = (PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_After_IQK_A, bMaskDWord)&0x3FF0000)>>16; */
- result[t][2] = (PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_Before_IQK_A_2, bMaskDWord)&0x3FF0000)>>16;
- result[t][3] = (PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_After_IQK_A_2, bMaskDWord)&0x3FF0000)>>16;
- break;
- }
- }
-
-/* path B IQK */
- if (is2T) {
-
- /* path B TX IQK */
- for (i = 0 ; i < retryCount ; i++) {
- PathBOK = phy_PathB_IQK_8723B(padapter);
- if (PathBOK == 0x01) {
- /* Path B Tx IQK Success */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0x000000);
- pDM_Odm->RFCalibrateInfo.TxLOK[RF_PATH_B] = PHY_QueryRFReg(pDM_Odm->Adapter, RF_PATH_B, 0x8, bRFRegOffsetMask);
-
- result[t][4] = (PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_Before_IQK_A, bMaskDWord)&0x3FF0000)>>16;
- result[t][5] = (PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_After_IQK_A, bMaskDWord)&0x3FF0000)>>16;
- break;
- }
- }
-
-/* path B RX IQK */
- for (i = 0 ; i < retryCount ; i++) {
- PathBOK = phy_PathB_RxIQK8723B(padapter, is2T);
- if (PathBOK == 0x03) {
-/* result[t][0] = (PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_Before_IQK_A, bMaskDWord)&0x3FF0000)>>16; */
-/* result[t][1] = (PHY_QueryBBReg(pDM_Odm->Adapter, rTx_Power_After_IQK_A, bMaskDWord)&0x3FF0000)>>16; */
- result[t][6] = (PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_Before_IQK_A_2, bMaskDWord)&0x3FF0000)>>16;
- result[t][7] = (PHY_QueryBBReg(pDM_Odm->Adapter, rRx_Power_After_IQK_A_2, bMaskDWord)&0x3FF0000)>>16;
- break;
- }
- }
-
-/* Allen end */
- }
-
- /* Back to BB mode, load original value */
- PHY_SetBBReg(pDM_Odm->Adapter, rFPGA0_IQK, bMaskH3Bytes, 0);
-
- if (t != 0) {
- /* Reload ADDA power saving parameters */
- _PHY_ReloadADDARegisters8723B(padapter, ADDA_REG, pDM_Odm->RFCalibrateInfo.ADDA_backup, IQK_ADDA_REG_NUM);
-
- /* Reload MAC parameters */
- _PHY_ReloadMACRegisters8723B(padapter, IQK_MAC_REG, pDM_Odm->RFCalibrateInfo.IQK_MAC_backup);
-
- _PHY_ReloadADDARegisters8723B(padapter, IQK_BB_REG_92C, pDM_Odm->RFCalibrateInfo.IQK_BB_backup, IQK_BB_REG_NUM);
-
- /* Reload RF path */
-/* PHY_SetBBReg(pDM_Odm->Adapter, 0x948, bMaskDWord, Path_SEL_BB); */
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xb0, 0xfffff, Path_SEL_RF); */
-
- /* Allen initial gain 0xc50 */
- /* Restore RX initial gain */
- PHY_SetBBReg(pDM_Odm->Adapter, 0xc50, bMaskByte0, 0x50);
- PHY_SetBBReg(pDM_Odm->Adapter, 0xc50, bMaskByte0, tmp0xc50);
- if (is2T) {
- PHY_SetBBReg(pDM_Odm->Adapter, 0xc58, bMaskByte0, 0x50);
- PHY_SetBBReg(pDM_Odm->Adapter, 0xc58, bMaskByte0, tmp0xc58);
- }
-
- /* load 0xe30 IQC default value */
- PHY_SetBBReg(pDM_Odm->Adapter, rTx_IQK_Tone_A, bMaskDWord, 0x01008c00);
- PHY_SetBBReg(pDM_Odm->Adapter, rRx_IQK_Tone_A, bMaskDWord, 0x01008c00);
-
- }
-
-}
-
-static void phy_LCCalibrate_8723B(struct dm_odm_t *pDM_Odm, bool is2T)
-{
- u8 tmpReg;
- u32 RF_Amode = 0, RF_Bmode = 0, LC_Cal;
- struct adapter *padapter = pDM_Odm->Adapter;
-
- /* Check continuous TX and Packet TX */
- tmpReg = rtw_read8(pDM_Odm->Adapter, 0xd03);
-
- if ((tmpReg&0x70) != 0) /* Deal with contisuous TX case */
- rtw_write8(pDM_Odm->Adapter, 0xd03, tmpReg&0x8F); /* disable all continuous TX */
- else /* Deal with Packet TX case */
- rtw_write8(pDM_Odm->Adapter, REG_TXPAUSE, 0xFF); /* block all queues */
-
- if ((tmpReg&0x70) != 0) {
- /* 1. Read original RF mode */
- /* Path-A */
- RF_Amode = PHY_QueryRFReg(padapter, RF_PATH_A, RF_AC, bMask12Bits);
-
- /* Path-B */
- if (is2T)
- RF_Bmode = PHY_QueryRFReg(padapter, RF_PATH_B, RF_AC, bMask12Bits);
-
- /* 2. Set RF mode = standby mode */
- /* Path-A */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_AC, bMask12Bits, (RF_Amode&0x8FFFF)|0x10000);
-
- /* Path-B */
- if (is2T)
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_B, RF_AC, bMask12Bits, (RF_Bmode&0x8FFFF)|0x10000);
- }
-
- /* 3. Read RF reg18 */
- LC_Cal = PHY_QueryRFReg(padapter, RF_PATH_A, RF_CHNLBW, bMask12Bits);
-
- /* 4. Set LC calibration begin bit15 */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xB0, bRFRegOffsetMask, 0xDFBE0); /* LDO ON */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_CHNLBW, bMask12Bits, LC_Cal|0x08000);
-
- mdelay(100);
-
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xB0, bRFRegOffsetMask, 0xDFFE0); /* LDO OFF */
-
- /* Channel 10 LC calibration issue for 8723bs with 26M xtal */
- if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO && pDM_Odm->PackageType >= 0x2) {
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_CHNLBW, bMask12Bits, LC_Cal);
- }
-
- /* Restore original situation */
- if ((tmpReg&0x70) != 0) { /* Deal with contisuous TX case */
- /* Path-A */
- rtw_write8(pDM_Odm->Adapter, 0xd03, tmpReg);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_AC, bMask12Bits, RF_Amode);
-
- /* Path-B */
- if (is2T)
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_B, RF_AC, bMask12Bits, RF_Bmode);
- } else /* Deal with Packet TX case */
- rtw_write8(pDM_Odm->Adapter, REG_TXPAUSE, 0x00);
-}
-
-/* IQK version:V2.5 20140123 */
-/* IQK is controlled by Is2ant, RF path */
-void PHY_IQCalibrate_8723B(
- struct adapter *padapter,
- bool bReCovery,
- bool bRestore,
- bool Is2ant, /* false:1ant, true:2-ant */
- u8 RF_Path /* 0:S1, 1:S0 */
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- s32 result[4][8]; /* last is final result */
- u8 i, final_candidate;
- bool bPathAOK, bPathBOK;
- s32 RegE94, RegE9C, RegEA4, RegEB4, RegEBC, RegEC4, RegTmp = 0;
- bool is12simular, is13simular, is23simular;
- bool bSingleTone = false, bCarrierSuppression = false;
- 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
- };
-/* u32 Path_SEL_BB = 0; */
- u32 GNT_BT_default;
-
- if (!ODM_CheckPowerStatus(padapter))
- return;
-
- if (!(pDM_Odm->SupportAbility & ODM_RF_CALIBRATION))
- return;
-
- /* 20120213<Kordan> Turn on when continuous Tx to pass lab testing. (required by Edlu) */
- if (bSingleTone || bCarrierSuppression)
- return;
-
- if (pDM_Odm->RFCalibrateInfo.bIQKInProgress)
- return;
-
- pDM_Odm->RFCalibrateInfo.bIQKInProgress = true;
-
- if (bRestore) {
- u32 offset, data;
- u8 path, bResult = SUCCESS;
- struct odm_rf_cal_t *pRFCalibrateInfo = &pDM_Odm->RFCalibrateInfo;
-
- path = (PHY_QueryBBReg(pDM_Odm->Adapter, rS0S1_PathSwitch, bMaskByte0) == 0x00) ? RF_PATH_A : RF_PATH_B;
-
- /* Restore TX IQK */
- for (i = 0; i < 3; ++i) {
- offset = pRFCalibrateInfo->TxIQC_8723B[path][i][0];
- data = pRFCalibrateInfo->TxIQC_8723B[path][i][1];
- if ((offset == 0) || (data == 0)) {
- bResult = FAIL;
- break;
- }
- PHY_SetBBReg(pDM_Odm->Adapter, offset, bMaskDWord, data);
- }
-
- /* Restore RX IQK */
- for (i = 0; i < 2; ++i) {
- offset = pRFCalibrateInfo->RxIQC_8723B[path][i][0];
- data = pRFCalibrateInfo->RxIQC_8723B[path][i][1];
- if ((offset == 0) || (data == 0)) {
- bResult = FAIL;
- break;
- }
- PHY_SetBBReg(pDM_Odm->Adapter, offset, bMaskDWord, data);
- }
-
- if (pDM_Odm->RFCalibrateInfo.TxLOK[RF_PATH_A] == 0) {
- bResult = FAIL;
- } else {
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXM_IDAC, bRFRegOffsetMask, pDM_Odm->RFCalibrateInfo.TxLOK[RF_PATH_A]);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_B, RF_TXM_IDAC, bRFRegOffsetMask, pDM_Odm->RFCalibrateInfo.TxLOK[RF_PATH_B]);
- }
-
- if (bResult == SUCCESS)
- return;
- }
-
- if (bReCovery) {
- _PHY_ReloadADDARegisters8723B(padapter, IQK_BB_REG_92C, pDM_Odm->RFCalibrateInfo.IQK_BB_backup_recover, 9);
- return;
- }
-
- /* save default GNT_BT */
- GNT_BT_default = PHY_QueryBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord);
- /* Save RF Path */
-/* Path_SEL_BB = PHY_QueryBBReg(pDM_Odm->Adapter, 0x948, bMaskDWord); */
-/* Path_SEL_RF = PHY_QueryRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xb0, 0xfffff); */
-
- /* set GNT_BT = 0, pause BT traffic */
-/* PHY_SetBBReg(pDM_Odm->Adapter, 0x764, BIT12, 0x0); */
-/* PHY_SetBBReg(pDM_Odm->Adapter, 0x764, BIT11, 0x1); */
-
- for (i = 0; i < 8; i++) {
- result[0][i] = 0;
- result[1][i] = 0;
- result[2][i] = 0;
- result[3][i] = 0;
- }
-
- final_candidate = 0xff;
- bPathAOK = false;
- bPathBOK = false;
- is12simular = false;
- is23simular = false;
- is13simular = false;
-
- for (i = 0; i < 3; i++) {
- phy_IQCalibrate_8723B(padapter, result, i, Is2ant, RF_Path);
-
- if (i == 1) {
- is12simular = phy_SimularityCompare_8723B(padapter, result, 0, 1);
- if (is12simular) {
- final_candidate = 0;
- break;
- }
- }
-
- if (i == 2) {
- is13simular = phy_SimularityCompare_8723B(padapter, result, 0, 2);
- if (is13simular) {
- final_candidate = 0;
-
- break;
- }
-
- is23simular = phy_SimularityCompare_8723B(padapter, result, 1, 2);
- if (is23simular) {
- final_candidate = 1;
- } else {
- for (i = 0; i < 8; i++)
- RegTmp += result[3][i];
-
- if (RegTmp != 0)
- final_candidate = 3;
- else
- final_candidate = 0xFF;
- }
- }
- }
-
- 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];
- RegEC4 = result[i][6];
- }
-
- if (final_candidate != 0xff) {
- pDM_Odm->RFCalibrateInfo.RegE94 = RegE94 = result[final_candidate][0];
- pDM_Odm->RFCalibrateInfo.RegE9C = RegE9C = result[final_candidate][1];
- RegEA4 = result[final_candidate][2];
- pDM_Odm->RFCalibrateInfo.RegEB4 = RegEB4 = result[final_candidate][4];
- pDM_Odm->RFCalibrateInfo.RegEBC = RegEBC = result[final_candidate][5];
- RegEC4 = result[final_candidate][6];
- bPathAOK = bPathBOK = true;
- } else {
- pDM_Odm->RFCalibrateInfo.RegE94 = pDM_Odm->RFCalibrateInfo.RegEB4 = 0x100; /* X default value */
- pDM_Odm->RFCalibrateInfo.RegE9C = pDM_Odm->RFCalibrateInfo.RegEBC = 0x0; /* Y default value */
- }
-
- {
- if (RegE94 != 0)
- _PHY_PathAFillIQKMatrix8723B(padapter, bPathAOK, result, final_candidate, (RegEA4 == 0));
- }
- {
- if (RegEB4 != 0)
- _PHY_PathBFillIQKMatrix8723B(padapter, bPathBOK, result, final_candidate, (RegEC4 == 0));
- }
-
-/* To Fix BSOD when final_candidate is 0xff */
-/* by sherry 20120321 */
- if (final_candidate < 4) {
- for (i = 0; i < IQK_MATRIX_REG_NUM; i++)
- pDM_Odm->RFCalibrateInfo.iqk_matrix_regs_setting_value[0][i] = result[final_candidate][i];
- }
-
- _PHY_SaveADDARegisters8723B(padapter, IQK_BB_REG_92C, pDM_Odm->RFCalibrateInfo.IQK_BB_backup_recover, 9);
-
- /* restore GNT_BT */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x764, bMaskDWord, GNT_BT_default);
- /* Restore RF Path */
-/* PHY_SetBBReg(pDM_Odm->Adapter, 0x948, bMaskDWord, Path_SEL_BB); */
-/* PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xb0, 0xfffff, Path_SEL_RF); */
-
- /* Resotr RX mode table parameter */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_WE_LUT, 0x80000, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_RCK_OS, bRFRegOffsetMask, 0x18000);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G1, bRFRegOffsetMask, 0x0001f);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_TXPA_G2, bRFRegOffsetMask, 0xe6177);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0xed, 0x20, 0x1);
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, 0x43, bRFRegOffsetMask, 0x300bd);
-
- /* set GNT_BT = HW control */
-/* PHY_SetBBReg(pDM_Odm->Adapter, 0x764, BIT12, 0x0); */
-/* PHY_SetBBReg(pDM_Odm->Adapter, 0x764, BIT11, 0x0); */
-
- if (Is2ant) {
- if (RF_Path == 0x0) /* S1 */
- ODM_SetIQCbyRFpath(pDM_Odm, 0);
- else /* S0 */
- ODM_SetIQCbyRFpath(pDM_Odm, 1);
- }
-
- pDM_Odm->RFCalibrateInfo.bIQKInProgress = false;
-}
-
-void PHY_LCCalibrate_8723B(struct dm_odm_t *pDM_Odm)
-{
- bool bSingleTone = false, bCarrierSuppression = false;
- u32 timeout = 2000, timecount = 0;
-
- if (!(pDM_Odm->SupportAbility & ODM_RF_CALIBRATION))
- return;
-
- /* 20120213<Kordan> Turn on when continuous Tx to pass lab testing. (required by Edlu) */
- if (bSingleTone || bCarrierSuppression)
- return;
-
- while (*(pDM_Odm->pbScanInProcess) && timecount < timeout) {
- mdelay(50);
- timecount += 50;
- }
-
- pDM_Odm->RFCalibrateInfo.bLCKInProgress = true;
-
- phy_LCCalibrate_8723B(pDM_Odm, false);
-
- pDM_Odm->RFCalibrateInfo.bLCKInProgress = false;
-}
diff --git a/drivers/staging/rtl8723bs/hal/HalPhyRf_8723B.h b/drivers/staging/rtl8723bs/hal/HalPhyRf_8723B.h
deleted file mode 100644
index 14b328378b8b..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalPhyRf_8723B.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __HAL_PHY_RF_8723B_H__
-#define __HAL_PHY_RF_8723B_H__
-
-/*--------------------------Define Parameters-------------------------------*/
-#define IQK_DELAY_TIME_8723B 20 /* ms */
-#define IQK_DEFERRED_TIME_8723B 4
-#define index_mapping_NUM_8723B 15
-#define AVG_THERMAL_NUM_8723B 4
-#define RF_T_METER_8723B 0x42 /* */
-
-void ConfigureTxpowerTrack_8723B(struct txpwrtrack_cfg *pConfig);
-
-void ODM_TxPwrTrackSetPwr_8723B(
- struct dm_odm_t *pDM_Odm,
- enum pwrtrack_method Method,
- u8 RFPath,
- u8 ChannelMappedIndex
-);
-
-/* 1 7. IQK */
-void PHY_IQCalibrate_8723B(
- struct adapter *Adapter,
- bool bReCovery,
- bool bRestore,
- bool Is2ant,
- u8 RF_Path
-);
-
-void ODM_SetIQCbyRFpath(struct dm_odm_t *pDM_Odm, u32 RFpath);
-
-/* */
-/* LC calibrate */
-/* */
-void PHY_LCCalibrate_8723B(struct dm_odm_t *pDM_Odm);
-
-/* */
-/* AP calibrate */
-/* */
-void PHY_DigitalPredistortion_8723B(struct adapter *padapter);
-
-void _PHY_SaveADDARegisters_8723B(
- struct adapter *padapter,
- u32 *ADDAReg,
- u32 *ADDABackup,
- u32 RegisterNum
-);
-
-void _PHY_PathADDAOn_8723B(
- struct adapter *padapter,
- u32 *ADDAReg,
- bool isPathAOn,
- bool is2T
-);
-
-void _PHY_MACSettingCalibration_8723B(
- struct adapter *padapter, u32 *MACReg, u32 *MACBackup
-);
-
-#endif /* #ifndef __HAL_PHY_RF_8188E_H__ */
diff --git a/drivers/staging/rtl8723bs/hal/HalPwrSeqCmd.c b/drivers/staging/rtl8723bs/hal/HalPwrSeqCmd.c
deleted file mode 100644
index c254e3481cc2..000000000000
--- a/drivers/staging/rtl8723bs/hal/HalPwrSeqCmd.c
+++ /dev/null
@@ -1,144 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-/*
- * Copyright (c) Realtek Semiconductor Corp. All rights reserved.
- *
- * Module Name:
- * HalPwrSeqCmd.c
- *
- * Abstract:
- * Implement HW Power sequence configuration CMD handling routine for Realtek devices.
- *
- * Major Change History:
- * When Who What
- * ---------- --------------- -------------------------------
- * 2011-10-26 Lucas Modify to be compatible with SD4-CE driver.
- * 2011-07-07 Roger Create.
- *
- */
-#include <drv_types.h>
-#include <HalPwrSeqCmd.h>
-
-/* */
-/* Description: */
-/* This routine deal with the Power Configuration CMDs parsing for RTL8723/RTL8188E Series IC. */
-/* */
-/* Assumption: */
-/* We should follow specific format which was released from HW SD. */
-/* */
-/* 2011.07.07, added by Roger. */
-/* */
-u8 HalPwrSeqCmdParsing(
- struct adapter *padapter,
- u8 CutVersion,
- u8 FabVersion,
- u8 InterfaceType,
- struct wlan_pwr_cfg PwrSeqCmd[]
-)
-{
- struct wlan_pwr_cfg PwrCfgCmd;
- u8 bPollingBit = false;
- u32 AryIdx = 0;
- u8 value = 0;
- u32 offset = 0;
- u32 pollingCount = 0; /* polling autoload done. */
- u32 maxPollingCnt = 5000;
-
- do {
- PwrCfgCmd = PwrSeqCmd[AryIdx];
-
- /* 2 Only Handle the command whose FAB, CUT, and Interface are matched */
- if (
- (GET_PWR_CFG_FAB_MASK(PwrCfgCmd) & FabVersion) &&
- (GET_PWR_CFG_CUT_MASK(PwrCfgCmd) & CutVersion) &&
- (GET_PWR_CFG_INTF_MASK(PwrCfgCmd) & InterfaceType)
- ) {
- switch (GET_PWR_CFG_CMD(PwrCfgCmd)) {
- case PWR_CMD_READ:
- break;
-
- case PWR_CMD_WRITE:
- offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
-
- /* */
- /* <Roger_Notes> We should deal with interface specific address mapping for some interfaces, e.g., SDIO interface */
- /* 2011.07.07. */
- /* */
- if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO) {
- /* Read Back SDIO Local value */
- value = SdioLocalCmd52Read1Byte(padapter, offset);
-
- value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
- value |= (
- GET_PWR_CFG_VALUE(PwrCfgCmd) &
- GET_PWR_CFG_MASK(PwrCfgCmd)
- );
-
- /* Write Back SDIO Local value */
- SdioLocalCmd52Write1Byte(padapter, offset, value);
- } else {
- /* Read the value from system register */
- value = rtw_read8(padapter, offset);
-
- 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:
-
- bPollingBit = false;
- offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
- do {
- if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
- value = SdioLocalCmd52Read1Byte(padapter, offset);
- else
- value = rtw_read8(padapter, offset);
-
- value = value & GET_PWR_CFG_MASK(PwrCfgCmd);
- if (
- value == (GET_PWR_CFG_VALUE(PwrCfgCmd) &
- GET_PWR_CFG_MASK(PwrCfgCmd))
- )
- bPollingBit = true;
- else
- udelay(10);
-
- if (pollingCount++ > maxPollingCnt)
- return false;
-
- } while (!bPollingBit);
-
- break;
-
- case PWR_CMD_DELAY:
- if (GET_PWR_CFG_VALUE(PwrCfgCmd) == PWRSEQ_DELAY_US)
- udelay(GET_PWR_CFG_OFFSET(PwrCfgCmd));
- else
- udelay(GET_PWR_CFG_OFFSET(PwrCfgCmd) * 1000);
- break;
-
- case PWR_CMD_END:
- /* When this command is parsed, end the process */
- return true;
-
- default:
- break;
- }
- }
-
- AryIdx++;/* Add Array Index */
- } while (1);
-
- return true;
-}
diff --git a/drivers/staging/rtl8723bs/hal/Mp_Precomp.h b/drivers/staging/rtl8723bs/hal/Mp_Precomp.h
deleted file mode 100644
index f08823a8dd7b..000000000000
--- a/drivers/staging/rtl8723bs/hal/Mp_Precomp.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2013 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __MP_PRECOMP_H__
-#define __MP_PRECOMP_H__
-
-#include <drv_types.h>
-#include <hal_data.h>
-
-#define BT_TMP_BUF_SIZE 100
-
-#ifdef bEnable
-#undef bEnable
-#endif
-
-#include "HalBtcOutSrc.h"
-#include "HalBtc8723b1Ant.h"
-#include "HalBtc8723b2Ant.h"
-
-#endif /* __MP_PRECOMP_H__ */
diff --git a/drivers/staging/rtl8723bs/hal/hal_btcoex.c b/drivers/staging/rtl8723bs/hal/hal_btcoex.c
deleted file mode 100644
index 61cdc27a64ac..000000000000
--- a/drivers/staging/rtl8723bs/hal/hal_btcoex.c
+++ /dev/null
@@ -1,1303 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2013 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <hal_data.h>
-#include <hal_btcoex.h>
-#include <Mp_Precomp.h>
-
-/* Global variables */
-
-struct btc_coexist GLBtCoexist;
-static u8 GLBtcWiFiInScanState;
-static u8 GLBtcWiFiInIQKState;
-
-/* */
-/* Debug related function */
-/* */
-static u8 halbtcoutsrc_IsBtCoexistAvailable(struct btc_coexist *pBtCoexist)
-{
- if (!pBtCoexist->bBinded || !pBtCoexist->Adapter)
- return false;
-
- return true;
-}
-
-static void halbtcoutsrc_LeaveLps(struct btc_coexist *pBtCoexist)
-{
- struct adapter *padapter;
-
- padapter = pBtCoexist->Adapter;
-
- pBtCoexist->btInfo.bBtCtrlLps = true;
- pBtCoexist->btInfo.bBtLpsOn = false;
-
- rtw_btcoex_lps_leave(padapter);
-}
-
-static void halbtcoutsrc_EnterLps(struct btc_coexist *pBtCoexist)
-{
- struct adapter *padapter;
-
- padapter = pBtCoexist->Adapter;
-
- pBtCoexist->btInfo.bBtCtrlLps = true;
- pBtCoexist->btInfo.bBtLpsOn = true;
-
- rtw_btcoex_lps_enter(padapter);
-}
-
-static void halbtcoutsrc_NormalLps(struct btc_coexist *pBtCoexist)
-{
- struct adapter *padapter;
-
- padapter = pBtCoexist->Adapter;
-
- if (pBtCoexist->btInfo.bBtCtrlLps) {
- pBtCoexist->btInfo.bBtLpsOn = false;
- rtw_btcoex_lps_leave(padapter);
- pBtCoexist->btInfo.bBtCtrlLps = false;
-
- /* recover the LPS state to the original */
- }
-}
-
-/*
- * Constraint:
- * 1. this function will request pwrctrl->lock
- */
-static void halbtcoutsrc_LeaveLowPower(struct btc_coexist *pBtCoexist)
-{
- struct adapter *padapter;
- s32 ready;
- unsigned long stime;
- unsigned long utime;
- u32 timeout; /* unit: ms */
-
- padapter = pBtCoexist->Adapter;
- ready = _FAIL;
-#ifdef LPS_RPWM_WAIT_MS
- timeout = LPS_RPWM_WAIT_MS;
-#else /* !LPS_RPWM_WAIT_MS */
- timeout = 30;
-#endif /* !LPS_RPWM_WAIT_MS */
-
- stime = jiffies;
- do {
- ready = rtw_register_task_alive(padapter, BTCOEX_ALIVE);
- if (ready == _SUCCESS)
- break;
-
- utime = jiffies_to_msecs(jiffies - stime);
- if (utime > timeout)
- break;
-
- msleep(1);
- } while (1);
-}
-
-/*
- * Constraint:
- * 1. this function will request pwrctrl->lock
- */
-static void halbtcoutsrc_NormalLowPower(struct btc_coexist *pBtCoexist)
-{
- struct adapter *padapter;
-
- padapter = pBtCoexist->Adapter;
- rtw_unregister_task_alive(padapter, BTCOEX_ALIVE);
-}
-
-static void halbtcoutsrc_DisableLowPower(struct btc_coexist *pBtCoexist, u8 bLowPwrDisable)
-{
- pBtCoexist->btInfo.bBtDisableLowPwr = bLowPwrDisable;
- if (bLowPwrDisable)
- halbtcoutsrc_LeaveLowPower(pBtCoexist); /* leave 32k low power. */
- else
- halbtcoutsrc_NormalLowPower(pBtCoexist); /* original 32k low power behavior. */
-}
-
-static void halbtcoutsrc_AggregationCheck(struct btc_coexist *pBtCoexist)
-{
- struct adapter *padapter;
- bool bNeedToAct;
-
- padapter = pBtCoexist->Adapter;
- bNeedToAct = false;
-
- if (pBtCoexist->btInfo.bRejectAggPkt) {
- rtw_btcoex_reject_ap_aggregated_packet(padapter, true);
- } else {
- if (pBtCoexist->btInfo.bPreBtCtrlAggBufSize !=
- pBtCoexist->btInfo.bBtCtrlAggBufSize) {
- bNeedToAct = true;
- pBtCoexist->btInfo.bPreBtCtrlAggBufSize = pBtCoexist->btInfo.bBtCtrlAggBufSize;
- }
-
- if (pBtCoexist->btInfo.bBtCtrlAggBufSize) {
- if (pBtCoexist->btInfo.preAggBufSize !=
- pBtCoexist->btInfo.aggBufSize){
- bNeedToAct = true;
- }
- pBtCoexist->btInfo.preAggBufSize = pBtCoexist->btInfo.aggBufSize;
- }
-
- if (bNeedToAct) {
- rtw_btcoex_reject_ap_aggregated_packet(padapter, true);
- rtw_btcoex_reject_ap_aggregated_packet(padapter, false);
- }
- }
-}
-
-static u8 halbtcoutsrc_IsWifiBusy(struct adapter *padapter)
-{
- struct mlme_priv *pmlmepriv;
-
- pmlmepriv = &padapter->mlmepriv;
-
- if (check_fwstate(pmlmepriv, WIFI_ASOC_STATE)) {
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
- return true;
- if (pmlmepriv->link_detect_info.busy_traffic)
- return true;
- }
-
- return false;
-}
-
-static u32 _halbtcoutsrc_GetWifiLinkStatus(struct adapter *padapter)
-{
- struct mlme_priv *pmlmepriv;
- u8 bp2p;
- u32 portConnectedStatus;
-
- pmlmepriv = &padapter->mlmepriv;
- bp2p = false;
- portConnectedStatus = 0;
-
- if (check_fwstate(pmlmepriv, WIFI_ASOC_STATE)) {
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- if (bp2p)
- portConnectedStatus |= WIFI_P2P_GO_CONNECTED;
- else
- portConnectedStatus |= WIFI_AP_CONNECTED;
- } else {
- if (bp2p)
- portConnectedStatus |= WIFI_P2P_GC_CONNECTED;
- else
- portConnectedStatus |= WIFI_STA_CONNECTED;
- }
- }
-
- return portConnectedStatus;
-}
-
-static u32 halbtcoutsrc_GetWifiLinkStatus(struct btc_coexist *pBtCoexist)
-{
- /* */
- /* return value: */
- /* [31:16]=> connected port number */
- /* [15:0]=> port connected bit define */
- /* */
-
- struct adapter *padapter;
- u32 retVal;
- u32 portConnectedStatus, numOfConnectedPort;
-
- padapter = pBtCoexist->Adapter;
- portConnectedStatus = 0;
- numOfConnectedPort = 0;
-
- retVal = _halbtcoutsrc_GetWifiLinkStatus(padapter);
- if (retVal) {
- portConnectedStatus |= retVal;
- numOfConnectedPort++;
- }
-
- retVal = (numOfConnectedPort << 16) | portConnectedStatus;
-
- return retVal;
-}
-
-static u32 halbtcoutsrc_GetBtPatchVer(struct btc_coexist *pBtCoexist)
-{
- return pBtCoexist->btInfo.btRealFwVer;
-}
-
-static s32 halbtcoutsrc_GetWifiRssi(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- return pHalData->dmpriv.EntryMinUndecoratedSmoothedPWDB;
-}
-
-static u8 halbtcoutsrc_GetWifiScanAPNum(struct adapter *padapter)
-{
- struct mlme_ext_priv *pmlmeext;
- static u8 scan_AP_num;
-
- pmlmeext = &padapter->mlmeextpriv;
-
- if (!GLBtcWiFiInScanState) {
- if (pmlmeext->sitesurvey_res.bss_cnt > 0xFF)
- scan_AP_num = 0xFF;
- else
- scan_AP_num = (u8)pmlmeext->sitesurvey_res.bss_cnt;
- }
-
- return scan_AP_num;
-}
-
-static u8 halbtcoutsrc_Get(void *pBtcContext, u8 getType, void *pOutBuf)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
- struct hal_com_data *pHalData;
- struct mlme_ext_priv *mlmeext;
- u8 *pu8;
- s32 *pS4Tmp;
- u32 *pU4Tmp;
- u8 ret;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return false;
-
- padapter = pBtCoexist->Adapter;
- pHalData = GET_HAL_DATA(padapter);
- mlmeext = &padapter->mlmeextpriv;
- pu8 = pOutBuf;
- pS4Tmp = pOutBuf;
- pU4Tmp = pOutBuf;
- ret = true;
-
- switch (getType) {
- case BTC_GET_BL_HS_OPERATION:
- *pu8 = false;
- ret = false;
- break;
-
- case BTC_GET_BL_HS_CONNECTING:
- *pu8 = false;
- ret = false;
- break;
-
- case BTC_GET_BL_WIFI_CONNECTED:
- *pu8 = check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE);
- break;
-
- case BTC_GET_BL_WIFI_BUSY:
- *pu8 = halbtcoutsrc_IsWifiBusy(padapter);
- break;
-
- case BTC_GET_BL_WIFI_SCAN:
- /* Use the value of the new variable GLBtcWiFiInScanState to judge whether WiFi is in scan state or not, since the originally used flag
- WIFI_SITE_MONITOR in fwstate may not be cleared in time */
- *pu8 = GLBtcWiFiInScanState;
- break;
-
- case BTC_GET_BL_WIFI_LINK:
- *pu8 = check_fwstate(&padapter->mlmepriv, WIFI_UNDER_LINKING);
- break;
-
- case BTC_GET_BL_WIFI_ROAM:
- *pu8 = check_fwstate(&padapter->mlmepriv, WIFI_UNDER_LINKING);
- break;
-
- case BTC_GET_BL_WIFI_4_WAY_PROGRESS:
- *pu8 = false;
- break;
-
- case BTC_GET_BL_WIFI_AP_MODE_ENABLE:
- *pu8 = check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE);
- break;
-
- case BTC_GET_BL_WIFI_ENABLE_ENCRYPTION:
- *pu8 = padapter->securitypriv.dot11_privacy_algrthm != 0;
- break;
-
- case BTC_GET_BL_WIFI_UNDER_B_MODE:
- if (mlmeext->cur_wireless_mode == WIRELESS_11B)
- *pu8 = true;
- else
- *pu8 = false;
- break;
-
- case BTC_GET_BL_WIFI_IS_IN_MP_MODE:
- *pu8 = false;
- break;
-
- case BTC_GET_BL_EXT_SWITCH:
- *pu8 = false;
- break;
-
- case BTC_GET_S4_WIFI_RSSI:
- *pS4Tmp = halbtcoutsrc_GetWifiRssi(padapter);
- break;
-
- case BTC_GET_S4_HS_RSSI:
- *pS4Tmp = 0;
- ret = false;
- break;
-
- case BTC_GET_U4_WIFI_BW:
- if (is_legacy_only(mlmeext->cur_wireless_mode))
- *pU4Tmp = BTC_WIFI_BW_LEGACY;
- else if (pHalData->CurrentChannelBW == CHANNEL_WIDTH_20)
- *pU4Tmp = BTC_WIFI_BW_HT20;
- else
- *pU4Tmp = BTC_WIFI_BW_HT40;
- break;
-
- case BTC_GET_U4_WIFI_TRAFFIC_DIRECTION:
- {
- struct rt_link_detect_t *plinkinfo;
-
- plinkinfo = &padapter->mlmepriv.link_detect_info;
-
- if (plinkinfo->num_tx_ok_in_period > plinkinfo->num_rx_ok_in_period)
- *pU4Tmp = BTC_WIFI_TRAFFIC_TX;
- else
- *pU4Tmp = BTC_WIFI_TRAFFIC_RX;
- }
- break;
-
- case BTC_GET_U4_WIFI_FW_VER:
- *pU4Tmp = pHalData->FirmwareVersion << 16;
- *pU4Tmp |= pHalData->FirmwareSubVersion;
- break;
-
- case BTC_GET_U4_WIFI_LINK_STATUS:
- *pU4Tmp = halbtcoutsrc_GetWifiLinkStatus(pBtCoexist);
- break;
-
- case BTC_GET_U4_BT_PATCH_VER:
- *pU4Tmp = halbtcoutsrc_GetBtPatchVer(pBtCoexist);
- break;
-
- case BTC_GET_U1_WIFI_DOT11_CHNL:
- *pu8 = padapter->mlmeextpriv.cur_channel;
- break;
-
- case BTC_GET_U1_WIFI_CENTRAL_CHNL:
- *pu8 = pHalData->CurrentChannel;
- break;
-
- case BTC_GET_U1_WIFI_HS_CHNL:
- *pu8 = 0;
- ret = false;
- break;
-
- case BTC_GET_U1_MAC_PHY_MODE:
- *pu8 = BTC_SMSP;
- break;
-
- case BTC_GET_U1_AP_NUM:
- *pu8 = halbtcoutsrc_GetWifiScanAPNum(padapter);
- break;
-
- /* 1Ant =========== */
- case BTC_GET_U1_LPS_MODE:
- *pu8 = padapter->dvobj->pwrctl_priv.pwr_mode;
- break;
-
- default:
- ret = false;
- break;
- }
-
- return ret;
-}
-
-static u8 halbtcoutsrc_Set(void *pBtcContext, u8 setType, void *pInBuf)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
- u8 *pu8;
- u32 *pU4Tmp;
- u8 ret;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
- pu8 = pInBuf;
- pU4Tmp = pInBuf;
- ret = true;
-
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return false;
-
- switch (setType) {
- /* set some u8 type variables. */
- case BTC_SET_BL_BT_DISABLE:
- pBtCoexist->btInfo.bBtDisabled = *pu8;
- break;
-
- case BTC_SET_BL_BT_TRAFFIC_BUSY:
- pBtCoexist->btInfo.bBtBusy = *pu8;
- break;
-
- case BTC_SET_BL_BT_LIMITED_DIG:
- pBtCoexist->btInfo.bLimitedDig = *pu8;
- break;
-
- case BTC_SET_BL_FORCE_TO_ROAM:
- pBtCoexist->btInfo.bForceToRoam = *pu8;
- break;
-
- case BTC_SET_BL_TO_REJ_AP_AGG_PKT:
- pBtCoexist->btInfo.bRejectAggPkt = *pu8;
- break;
-
- case BTC_SET_BL_BT_CTRL_AGG_SIZE:
- pBtCoexist->btInfo.bBtCtrlAggBufSize = *pu8;
- break;
-
- case BTC_SET_BL_INC_SCAN_DEV_NUM:
- pBtCoexist->btInfo.bIncreaseScanDevNum = *pu8;
- break;
-
- case BTC_SET_BL_BT_TX_RX_MASK:
- pBtCoexist->btInfo.bBtTxRxMask = *pu8;
- break;
-
- /* set some u8 type variables. */
- case BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON:
- pBtCoexist->btInfo.rssiAdjustForAgcTableOn = *pu8;
- break;
-
- case BTC_SET_U1_AGG_BUF_SIZE:
- pBtCoexist->btInfo.aggBufSize = *pu8;
- break;
-
- /* the following are some action which will be triggered */
- case BTC_SET_ACT_GET_BT_RSSI:
- ret = false;
- break;
-
- case BTC_SET_ACT_AGGREGATE_CTRL:
- halbtcoutsrc_AggregationCheck(pBtCoexist);
- break;
-
- /* 1Ant =========== */
- /* set some u8 type variables. */
- case BTC_SET_U1_RSSI_ADJ_VAL_FOR_1ANT_COEX_TYPE:
- pBtCoexist->btInfo.rssiAdjustFor1AntCoexType = *pu8;
- break;
-
- case BTC_SET_U1_LPS_VAL:
- pBtCoexist->btInfo.lpsVal = *pu8;
- break;
-
- case BTC_SET_U1_RPWM_VAL:
- pBtCoexist->btInfo.rpwmVal = *pu8;
- break;
-
- /* the following are some action which will be triggered */
- case BTC_SET_ACT_LEAVE_LPS:
- halbtcoutsrc_LeaveLps(pBtCoexist);
- break;
-
- case BTC_SET_ACT_ENTER_LPS:
- halbtcoutsrc_EnterLps(pBtCoexist);
- break;
-
- case BTC_SET_ACT_NORMAL_LPS:
- halbtcoutsrc_NormalLps(pBtCoexist);
- break;
-
- case BTC_SET_ACT_DISABLE_LOW_POWER:
- halbtcoutsrc_DisableLowPower(pBtCoexist, *pu8);
- break;
-
- case BTC_SET_ACT_UPDATE_RAMASK:
- pBtCoexist->btInfo.raMask = *pU4Tmp;
-
- if (check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE)) {
- struct sta_info *psta;
- struct wlan_bssid_ex *cur_network;
-
- cur_network = &padapter->mlmeextpriv.mlmext_info.network;
- psta = rtw_get_stainfo(&padapter->stapriv, cur_network->mac_address);
- rtw_hal_update_ra_mask(psta, 0);
- }
- break;
-
- case BTC_SET_ACT_SEND_MIMO_PS:
- ret = false;
- break;
-
- case BTC_SET_ACT_CTRL_BT_INFO:
- ret = false;
- break;
-
- case BTC_SET_ACT_CTRL_BT_COEX:
- ret = false;
- break;
- case BTC_SET_ACT_CTRL_8723B_ANT:
- ret = false;
- break;
- /* */
- default:
- ret = false;
- break;
- }
-
- return ret;
-}
-
-/* */
-/* IO related function */
-/* */
-static u8 halbtcoutsrc_Read1Byte(void *pBtcContext, u32 RegAddr)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- return rtw_read8(padapter, RegAddr);
-}
-
-static u16 halbtcoutsrc_Read2Byte(void *pBtcContext, u32 RegAddr)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- return rtw_read16(padapter, RegAddr);
-}
-
-static u32 halbtcoutsrc_Read4Byte(void *pBtcContext, u32 RegAddr)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- return rtw_read32(padapter, RegAddr);
-}
-
-static void halbtcoutsrc_Write1Byte(void *pBtcContext, u32 RegAddr, u8 Data)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- rtw_write8(padapter, RegAddr, Data);
-}
-
-static void halbtcoutsrc_BitMaskWrite1Byte(void *pBtcContext, u32 regAddr, u8 bitMask, u8 data1b)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
- u8 originalValue, bitShift;
- u8 i;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
- originalValue = 0;
- bitShift = 0;
-
- if (bitMask != 0xFF) {
- originalValue = rtw_read8(padapter, regAddr);
-
- for (i = 0; i <= 7; i++) {
- if ((bitMask >> i) & 0x1)
- break;
- }
- bitShift = i;
-
- data1b = (originalValue & ~bitMask) | ((data1b << bitShift) & bitMask);
- }
-
- rtw_write8(padapter, regAddr, data1b);
-}
-
-static void halbtcoutsrc_Write2Byte(void *pBtcContext, u32 RegAddr, u16 Data)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- rtw_write16(padapter, RegAddr, Data);
-}
-
-static void halbtcoutsrc_Write4Byte(void *pBtcContext, u32 RegAddr, u32 Data)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- rtw_write32(padapter, RegAddr, Data);
-}
-
-static void halbtcoutsrc_WriteLocalReg1Byte(void *pBtcContext, u32 RegAddr, u8 Data)
-{
- struct btc_coexist *pBtCoexist = (struct btc_coexist *)pBtcContext;
- struct adapter *Adapter = pBtCoexist->Adapter;
-
- if (pBtCoexist->chipInterface == BTC_INTF_SDIO)
- rtw_write8(Adapter, SDIO_LOCAL_BASE | RegAddr, Data);
- else
- rtw_write8(Adapter, RegAddr, Data);
-}
-
-static void halbtcoutsrc_SetBbReg(void *pBtcContext, u32 RegAddr, u32 BitMask, u32 Data)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- PHY_SetBBReg(padapter, RegAddr, BitMask, Data);
-}
-
-static u32 halbtcoutsrc_GetBbReg(void *pBtcContext, u32 RegAddr, u32 BitMask)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- return PHY_QueryBBReg(padapter, RegAddr, BitMask);
-}
-
-static void halbtcoutsrc_SetRfReg(void *pBtcContext, u8 eRFPath, u32 RegAddr, u32 BitMask, u32 Data)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- PHY_SetRFReg(padapter, eRFPath, RegAddr, BitMask, Data);
-}
-
-static u32 halbtcoutsrc_GetRfReg(void *pBtcContext, u8 eRFPath, u32 RegAddr, u32 BitMask)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- return PHY_QueryRFReg(padapter, eRFPath, RegAddr, BitMask);
-}
-
-static void halbtcoutsrc_SetBtReg(void *pBtcContext, u8 RegType, u32 RegAddr, u32 Data)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
- u8 CmdBuffer1[4] = {0};
- u8 CmdBuffer2[4] = {0};
- u8 *AddrToSet = (u8 *)&RegAddr;
- u8 *ValueToSet = (u8 *)&Data;
- u8 OperVer = 0;
- u8 ReqNum = 0;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- CmdBuffer1[0] |= (OperVer & 0x0f); /* Set OperVer */
- CmdBuffer1[0] |= ((ReqNum << 4) & 0xf0); /* Set ReqNum */
- CmdBuffer1[1] = 0x0d; /* Set OpCode to BT_LO_OP_WRITE_REG_VALUE */
- CmdBuffer1[2] = ValueToSet[0]; /* Set WriteRegValue */
- rtw_hal_fill_h2c_cmd(padapter, 0x67, 4, &(CmdBuffer1[0]));
-
- msleep(200);
- ReqNum++;
-
- CmdBuffer2[0] |= (OperVer & 0x0f); /* Set OperVer */
- CmdBuffer2[0] |= ((ReqNum << 4) & 0xf0); /* Set ReqNum */
- CmdBuffer2[1] = 0x0c; /* Set OpCode of BT_LO_OP_WRITE_REG_ADDR */
- CmdBuffer2[3] = AddrToSet[0]; /* Set WriteRegAddr */
- rtw_hal_fill_h2c_cmd(padapter, 0x67, 4, &(CmdBuffer2[0]));
-}
-
-static u32 halbtcoutsrc_GetBtReg(void *pBtcContext, u8 RegType, u32 RegAddr)
-{
- /* To be implemented. Always return 0 temporarily */
- return 0;
-}
-
-static void halbtcoutsrc_FillH2cCmd(void *pBtcContext, u8 elementId, u32 cmdLen, u8 *pCmdBuffer)
-{
- struct btc_coexist *pBtCoexist;
- struct adapter *padapter;
-
- pBtCoexist = (struct btc_coexist *)pBtcContext;
- padapter = pBtCoexist->Adapter;
-
- rtw_hal_fill_h2c_cmd(padapter, elementId, cmdLen, pCmdBuffer);
-}
-
-/* */
-/* Extern functions called by other module */
-/* */
-static u8 EXhalbtcoutsrc_BindBtCoexWithAdapter(void *padapter)
-{
- struct btc_coexist *pBtCoexist = &GLBtCoexist;
-
- if (pBtCoexist->bBinded)
- return false;
- else
- pBtCoexist->bBinded = true;
-
- pBtCoexist->statistics.cntBind++;
-
- pBtCoexist->Adapter = padapter;
-
- pBtCoexist->stackInfo.bProfileNotified = false;
-
- pBtCoexist->btInfo.bBtCtrlAggBufSize = false;
- pBtCoexist->btInfo.aggBufSize = 5;
-
- pBtCoexist->btInfo.bIncreaseScanDevNum = false;
-
- /* set default antenna position to main port */
- pBtCoexist->boardInfo.btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT;
-
- return true;
-}
-
-void hal_btcoex_Initialize(void *padapter)
-{
- struct btc_coexist *pBtCoexist;
-
- memset(&GLBtCoexist, 0, sizeof(GLBtCoexist));
-
- pBtCoexist = &GLBtCoexist;
-
- /* pBtCoexist->statistics.cntBind++; */
-
- pBtCoexist->chipInterface = BTC_INTF_SDIO;
-
- EXhalbtcoutsrc_BindBtCoexWithAdapter(padapter);
-
- pBtCoexist->fBtcRead1Byte = halbtcoutsrc_Read1Byte;
- pBtCoexist->fBtcWrite1Byte = halbtcoutsrc_Write1Byte;
- pBtCoexist->fBtcWrite1ByteBitMask = halbtcoutsrc_BitMaskWrite1Byte;
- pBtCoexist->fBtcRead2Byte = halbtcoutsrc_Read2Byte;
- pBtCoexist->fBtcWrite2Byte = halbtcoutsrc_Write2Byte;
- pBtCoexist->fBtcRead4Byte = halbtcoutsrc_Read4Byte;
- pBtCoexist->fBtcWrite4Byte = halbtcoutsrc_Write4Byte;
- pBtCoexist->fBtcWriteLocalReg1Byte = halbtcoutsrc_WriteLocalReg1Byte;
-
- pBtCoexist->fBtcSetBbReg = halbtcoutsrc_SetBbReg;
- pBtCoexist->fBtcGetBbReg = halbtcoutsrc_GetBbReg;
-
- pBtCoexist->fBtcSetRfReg = halbtcoutsrc_SetRfReg;
- pBtCoexist->fBtcGetRfReg = halbtcoutsrc_GetRfReg;
-
- pBtCoexist->fBtcFillH2c = halbtcoutsrc_FillH2cCmd;
-
- pBtCoexist->fBtcGet = halbtcoutsrc_Get;
- pBtCoexist->fBtcSet = halbtcoutsrc_Set;
- pBtCoexist->fBtcGetBtReg = halbtcoutsrc_GetBtReg;
- pBtCoexist->fBtcSetBtReg = halbtcoutsrc_SetBtReg;
-
- pBtCoexist->boardInfo.singleAntPath = 0;
-
- GLBtcWiFiInScanState = false;
-
- GLBtcWiFiInIQKState = false;
-}
-
-void EXhalbtcoutsrc_PowerOnSetting(struct btc_coexist *pBtCoexist)
-{
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
-
- /* Power on setting function is only added in 8723B currently */
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_PowerOnSetting(pBtCoexist);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_PowerOnSetting(pBtCoexist);
-}
-
-void EXhalbtcoutsrc_InitHwConfig(struct btc_coexist *pBtCoexist, u8 bWifiOnly)
-{
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
-
- pBtCoexist->statistics.cntInitHwConfig++;
-
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_InitHwConfig(pBtCoexist, bWifiOnly);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_InitHwConfig(pBtCoexist, bWifiOnly);
-}
-
-void EXhalbtcoutsrc_InitCoexDm(struct btc_coexist *pBtCoexist)
-{
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
-
- pBtCoexist->statistics.cntInitCoexDm++;
-
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_InitCoexDm(pBtCoexist);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_InitCoexDm(pBtCoexist);
-
- pBtCoexist->bInitilized = true;
-}
-
-void EXhalbtcoutsrc_IpsNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- u8 ipsType;
-
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
-
- pBtCoexist->statistics.cntIpsNotify++;
- if (pBtCoexist->bManualControl)
- return;
-
- if (type == IPS_NONE)
- ipsType = BTC_IPS_LEAVE;
- else
- ipsType = BTC_IPS_ENTER;
-
- /* All notify is called in cmd thread, don't need to leave low power again */
-/* halbtcoutsrc_LeaveLowPower(pBtCoexist); */
-
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_IpsNotify(pBtCoexist, ipsType);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_IpsNotify(pBtCoexist, ipsType);
-
-/* halbtcoutsrc_NormalLowPower(pBtCoexist); */
-}
-
-void EXhalbtcoutsrc_LpsNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- u8 lpsType;
-
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
-
- pBtCoexist->statistics.cntLpsNotify++;
- if (pBtCoexist->bManualControl)
- return;
-
- if (type == PS_MODE_ACTIVE)
- lpsType = BTC_LPS_DISABLE;
- else
- lpsType = BTC_LPS_ENABLE;
-
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_LpsNotify(pBtCoexist, lpsType);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_LpsNotify(pBtCoexist, lpsType);
-}
-
-void EXhalbtcoutsrc_ScanNotify(struct btc_coexist *pBtCoexist, u8 type)
-{
- u8 scanType;
-
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
- pBtCoexist->statistics.cntScanNotify++;
- if (pBtCoexist->bManualControl)
- return;
-
- if (type) {
- scanType = BTC_SCAN_START;
- GLBtcWiFiInScanState = true;
- } else {
- scanType = BTC_SCAN_FINISH;
- GLBtcWiFiInScanState = false;
- }
-
- /* All notify is called in cmd thread, don't need to leave low power again */
-/* halbtcoutsrc_LeaveLowPower(pBtCoexist); */
-
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_ScanNotify(pBtCoexist, scanType);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_ScanNotify(pBtCoexist, scanType);
-
-/* halbtcoutsrc_NormalLowPower(pBtCoexist); */
-}
-
-void EXhalbtcoutsrc_ConnectNotify(struct btc_coexist *pBtCoexist, u8 action)
-{
- u8 assoType;
-
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
- pBtCoexist->statistics.cntConnectNotify++;
- if (pBtCoexist->bManualControl)
- return;
-
- if (action)
- assoType = BTC_ASSOCIATE_START;
- else
- assoType = BTC_ASSOCIATE_FINISH;
-
- /* All notify is called in cmd thread, don't need to leave low power again */
-/* halbtcoutsrc_LeaveLowPower(pBtCoexist); */
-
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_ConnectNotify(pBtCoexist, assoType);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_ConnectNotify(pBtCoexist, assoType);
-
-/* halbtcoutsrc_NormalLowPower(pBtCoexist); */
-}
-
-void EXhalbtcoutsrc_MediaStatusNotify(struct btc_coexist *pBtCoexist, enum
- rt_media_status mediaStatus)
-{
- u8 mStatus;
-
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
-
- pBtCoexist->statistics.cntMediaStatusNotify++;
- if (pBtCoexist->bManualControl)
- return;
-
- if (mediaStatus == RT_MEDIA_CONNECT)
- mStatus = BTC_MEDIA_CONNECT;
- else
- mStatus = BTC_MEDIA_DISCONNECT;
-
- /* All notify is called in cmd thread, don't need to leave low power again */
-/* halbtcoutsrc_LeaveLowPower(pBtCoexist); */
-
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_MediaStatusNotify(pBtCoexist, mStatus);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_MediaStatusNotify(pBtCoexist, mStatus);
-
-/* halbtcoutsrc_NormalLowPower(pBtCoexist); */
-}
-
-void EXhalbtcoutsrc_SpecialPacketNotify(struct btc_coexist *pBtCoexist, u8 pktType)
-{
- u8 packetType;
-
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
- pBtCoexist->statistics.cntSpecialPacketNotify++;
- if (pBtCoexist->bManualControl)
- return;
-
- if (pktType == PACKET_DHCP) {
- packetType = BTC_PACKET_DHCP;
- } else if (pktType == PACKET_EAPOL) {
- packetType = BTC_PACKET_EAPOL;
- } else if (pktType == PACKET_ARP) {
- packetType = BTC_PACKET_ARP;
- } else {
- return;
- }
-
- /* All notify is called in cmd thread, don't need to leave low power again */
-/* halbtcoutsrc_LeaveLowPower(pBtCoexist); */
-
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_SpecialPacketNotify(pBtCoexist, packetType);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_SpecialPacketNotify(pBtCoexist, packetType);
-
-/* halbtcoutsrc_NormalLowPower(pBtCoexist); */
-}
-
-void EXhalbtcoutsrc_BtInfoNotify(struct btc_coexist *pBtCoexist, u8 *tmpBuf, u8 length)
-{
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
-
- pBtCoexist->statistics.cntBtInfoNotify++;
-
- /* All notify is called in cmd thread, don't need to leave low power again */
-/* halbtcoutsrc_LeaveLowPower(pBtCoexist); */
-
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_BtInfoNotify(pBtCoexist, tmpBuf, length);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_BtInfoNotify(pBtCoexist, tmpBuf, length);
-
-/* halbtcoutsrc_NormalLowPower(pBtCoexist); */
-}
-
-void EXhalbtcoutsrc_HaltNotify(struct btc_coexist *pBtCoexist)
-{
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
-
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_HaltNotify(pBtCoexist);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_HaltNotify(pBtCoexist);
-
- pBtCoexist->bBinded = false;
-}
-
-void EXhalbtcoutsrc_PnpNotify(struct btc_coexist *pBtCoexist, u8 pnpState)
-{
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
-
- /* */
- /* currently only 1ant we have to do the notification, */
- /* once pnp is notified to sleep state, we have to leave LPS that we can sleep normally. */
- /* */
-
- if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_PnpNotify(pBtCoexist, pnpState);
- else if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_PnpNotify(pBtCoexist, pnpState);
-}
-
-void EXhalbtcoutsrc_Periodical(struct btc_coexist *pBtCoexist)
-{
- if (!halbtcoutsrc_IsBtCoexistAvailable(pBtCoexist))
- return;
- pBtCoexist->statistics.cntPeriodical++;
-
- /* Periodical should be called in cmd thread, */
- /* don't need to leave low power again */
-/* halbtcoutsrc_LeaveLowPower(pBtCoexist); */
-
- if (pBtCoexist->boardInfo.btdmAntNum == 2)
- EXhalbtc8723b2ant_Periodical(pBtCoexist);
- else if (pBtCoexist->boardInfo.btdmAntNum == 1)
- EXhalbtc8723b1ant_Periodical(pBtCoexist);
-
-/* halbtcoutsrc_NormalLowPower(pBtCoexist); */
-}
-
-void EXhalbtcoutsrc_SetAntNum(u8 type, u8 antNum)
-{
- if (type == BT_COEX_ANT_TYPE_PG) {
- GLBtCoexist.boardInfo.pgAntNum = antNum;
- GLBtCoexist.boardInfo.btdmAntNum = antNum;
- } else if (type == BT_COEX_ANT_TYPE_ANTDIV) {
- GLBtCoexist.boardInfo.btdmAntNum = antNum;
- /* GLBtCoexist.boardInfo.btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT; */
- } else if (type == BT_COEX_ANT_TYPE_DETECTED) {
- GLBtCoexist.boardInfo.btdmAntNum = antNum;
- /* GLBtCoexist.boardInfo.btdmAntPos = BTC_ANTENNA_AT_MAIN_PORT; */
- }
-}
-
-/* */
-/* Currently used by 8723b only, S0 or S1 */
-/* */
-void EXhalbtcoutsrc_SetSingleAntPath(u8 singleAntPath)
-{
- GLBtCoexist.boardInfo.singleAntPath = singleAntPath;
-}
-
-/*
- * Description:
- *Run BT-Coexist mechanism or not
- *
- */
-void hal_btcoex_SetBTCoexist(struct adapter *padapter, u8 bBtExist)
-{
- struct hal_com_data *pHalData;
-
- pHalData = GET_HAL_DATA(padapter);
- pHalData->bt_coexist.bBtExist = bBtExist;
-}
-
-/*
- * Dewcription:
- *Check is co-exist mechanism enabled or not
- *
- * Return:
- *true Enable BT co-exist mechanism
- *false Disable BT co-exist mechanism
- */
-bool hal_btcoex_IsBtExist(struct adapter *padapter)
-{
- struct hal_com_data *pHalData;
-
- pHalData = GET_HAL_DATA(padapter);
- return pHalData->bt_coexist.bBtExist;
-}
-
-bool hal_btcoex_IsBtDisabled(struct adapter *padapter)
-{
- if (!hal_btcoex_IsBtExist(padapter))
- return true;
-
- if (GLBtCoexist.btInfo.bBtDisabled)
- return true;
- else
- return false;
-}
-
-void hal_btcoex_SetPgAntNum(struct adapter *padapter, u8 antNum)
-{
- struct hal_com_data *pHalData;
-
- pHalData = GET_HAL_DATA(padapter);
-
- pHalData->bt_coexist.btTotalAntNum = antNum;
- EXhalbtcoutsrc_SetAntNum(BT_COEX_ANT_TYPE_PG, antNum);
-}
-
-void hal_btcoex_SetSingleAntPath(struct adapter *padapter, u8 singleAntPath)
-{
- EXhalbtcoutsrc_SetSingleAntPath(singleAntPath);
-}
-
-void hal_btcoex_PowerOnSetting(struct adapter *padapter)
-{
- EXhalbtcoutsrc_PowerOnSetting(&GLBtCoexist);
-}
-
-void hal_btcoex_InitHwConfig(struct adapter *padapter, u8 bWifiOnly)
-{
- if (!hal_btcoex_IsBtExist(padapter))
- return;
-
- EXhalbtcoutsrc_InitHwConfig(&GLBtCoexist, bWifiOnly);
- EXhalbtcoutsrc_InitCoexDm(&GLBtCoexist);
-}
-
-void hal_btcoex_IpsNotify(struct adapter *padapter, u8 type)
-{
- EXhalbtcoutsrc_IpsNotify(&GLBtCoexist, type);
-}
-
-void hal_btcoex_LpsNotify(struct adapter *padapter, u8 type)
-{
- EXhalbtcoutsrc_LpsNotify(&GLBtCoexist, type);
-}
-
-void hal_btcoex_ScanNotify(struct adapter *padapter, u8 type)
-{
- EXhalbtcoutsrc_ScanNotify(&GLBtCoexist, type);
-}
-
-void hal_btcoex_ConnectNotify(struct adapter *padapter, u8 action)
-{
- EXhalbtcoutsrc_ConnectNotify(&GLBtCoexist, action);
-}
-
-void hal_btcoex_MediaStatusNotify(struct adapter *padapter, u8 mediaStatus)
-{
- EXhalbtcoutsrc_MediaStatusNotify(&GLBtCoexist, mediaStatus);
-}
-
-void hal_btcoex_SpecialPacketNotify(struct adapter *padapter, u8 pktType)
-{
- EXhalbtcoutsrc_SpecialPacketNotify(&GLBtCoexist, pktType);
-}
-
-void hal_btcoex_IQKNotify(struct adapter *padapter, u8 state)
-{
- GLBtcWiFiInIQKState = state;
-}
-
-void hal_btcoex_BtInfoNotify(struct adapter *padapter, u8 length, u8 *tmpBuf)
-{
- if (GLBtcWiFiInIQKState)
- return;
-
- EXhalbtcoutsrc_BtInfoNotify(&GLBtCoexist, tmpBuf, length);
-}
-
-void hal_btcoex_SuspendNotify(struct adapter *padapter, u8 state)
-{
- if (state == 1)
- state = BTC_WIFI_PNP_SLEEP;
- else
- state = BTC_WIFI_PNP_WAKE_UP;
-
- EXhalbtcoutsrc_PnpNotify(&GLBtCoexist, state);
-}
-
-void hal_btcoex_HaltNotify(struct adapter *padapter)
-{
- EXhalbtcoutsrc_HaltNotify(&GLBtCoexist);
-}
-
-void hal_btcoex_Handler(struct adapter *padapter)
-{
- EXhalbtcoutsrc_Periodical(&GLBtCoexist);
-}
-
-s32 hal_btcoex_IsBTCoexCtrlAMPDUSize(struct adapter *padapter)
-{
- return (s32)GLBtCoexist.btInfo.bBtCtrlAggBufSize;
-}
-
-bool hal_btcoex_IsBtControlLps(struct adapter *padapter)
-{
- if (!hal_btcoex_IsBtExist(padapter))
- return false;
-
- if (GLBtCoexist.btInfo.bBtDisabled)
- return false;
-
- if (GLBtCoexist.btInfo.bBtCtrlLps)
- return true;
-
- return false;
-}
-
-bool hal_btcoex_IsLpsOn(struct adapter *padapter)
-{
- if (!hal_btcoex_IsBtExist(padapter))
- return false;
-
- if (GLBtCoexist.btInfo.bBtDisabled)
- return false;
-
- if (GLBtCoexist.btInfo.bBtLpsOn)
- return true;
-
- return false;
-}
-
-u8 hal_btcoex_RpwmVal(struct adapter *padapter)
-{
- return GLBtCoexist.btInfo.rpwmVal;
-}
-
-u8 hal_btcoex_LpsVal(struct adapter *padapter)
-{
- return GLBtCoexist.btInfo.lpsVal;
-}
-
-u32 hal_btcoex_GetRaMask(struct adapter *padapter)
-{
- if (!hal_btcoex_IsBtExist(padapter))
- return 0;
-
- if (GLBtCoexist.btInfo.bBtDisabled)
- return 0;
-
- if (GLBtCoexist.boardInfo.btdmAntNum != 1)
- return 0;
-
- return GLBtCoexist.btInfo.raMask;
-}
-
-void hal_btcoex_RecordPwrMode(struct adapter *padapter, u8 *pCmdBuf, u8 cmdLen)
-{
- memcpy(GLBtCoexist.pwrModeVal, pCmdBuf, cmdLen);
-}
diff --git a/drivers/staging/rtl8723bs/hal/hal_com.c b/drivers/staging/rtl8723bs/hal/hal_com.c
deleted file mode 100644
index 2c856a2721b2..000000000000
--- a/drivers/staging/rtl8723bs/hal/hal_com.c
+++ /dev/null
@@ -1,767 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <linux/kernel.h>
-#include <drv_types.h>
-#include "hal_com_h2c.h"
-
-#include "odm_precomp.h"
-
-u8 rtw_hal_data_init(struct adapter *padapter)
-{
- padapter->hal_data_sz = sizeof(struct hal_com_data);
- padapter->HalData = vzalloc(padapter->hal_data_sz);
- if (!padapter->HalData)
- return _FAIL;
-
- return _SUCCESS;
-}
-
-void rtw_hal_data_deinit(struct adapter *padapter)
-{
- if (padapter->HalData) {
- vfree(padapter->HalData);
- padapter->HalData = NULL;
- padapter->hal_data_sz = 0;
- }
-}
-
-#define EEPROM_CHANNEL_PLAN_BY_HW_MASK 0x80
-
-/*
- * Description:
- *Use hardware(efuse), driver parameter(registry) and default channel plan
- *to decide which one should be used.
- *
- * Parameters:
- *padapter pointer of adapter
- *hw_channel_plan channel plan from HW (efuse/eeprom)
- * BIT[7] software configure mode; 0:Enable, 1:disable
- * BIT[6:0] Channel Plan
- *sw_channel_plan channel plan from SW (registry/module param)
- *def_channel_plan channel plan used when HW/SW both invalid
- *auto_load_fail efuse autoload fail or not
- *
- * Return:
- *Final channel plan decision
- *
- */
-u8 hal_com_config_channel_plan(
- struct adapter *padapter,
- u8 hw_channel_plan,
- u8 sw_channel_plan,
- u8 def_channel_plan,
- bool auto_load_fail
-)
-{
- struct hal_com_data *pHalData;
- u8 chnlPlan;
-
- pHalData = GET_HAL_DATA(padapter);
- pHalData->bDisableSWChannelPlan = false;
- chnlPlan = def_channel_plan;
-
- if (hw_channel_plan == 0xFF)
- auto_load_fail = true;
-
- if (!auto_load_fail) {
- u8 hw_chnlPlan;
-
- hw_chnlPlan = hw_channel_plan & (~EEPROM_CHANNEL_PLAN_BY_HW_MASK);
- if (rtw_is_channel_plan_valid(hw_chnlPlan)) {
- if (hw_channel_plan & EEPROM_CHANNEL_PLAN_BY_HW_MASK)
- pHalData->bDisableSWChannelPlan = true;
-
- chnlPlan = hw_chnlPlan;
- }
- }
-
- if (
- (false == pHalData->bDisableSWChannelPlan) &&
- rtw_is_channel_plan_valid(sw_channel_plan)
- )
- chnlPlan = sw_channel_plan;
-
- return chnlPlan;
-}
-
-bool HAL_IsLegalChannel(struct adapter *adapter, u32 Channel)
-{
- bool bLegalChannel = true;
-
- if ((Channel <= 14) && (Channel >= 1)) {
- if (!is_supported_24g(adapter->registrypriv.wireless_mode))
- bLegalChannel = false;
- } else {
- bLegalChannel = false;
- }
-
- return bLegalChannel;
-}
-
-u8 MRateToHwRate(u8 rate)
-{
- u8 ret = DESC_RATE1M;
-
- switch (rate) {
- case MGN_1M:
- ret = DESC_RATE1M;
- break;
- case MGN_2M:
- ret = DESC_RATE2M;
- break;
- case MGN_5_5M:
- ret = DESC_RATE5_5M;
- break;
- case MGN_11M:
- ret = DESC_RATE11M;
- break;
- case MGN_6M:
- ret = DESC_RATE6M;
- break;
- case MGN_9M:
- ret = DESC_RATE9M;
- break;
- case MGN_12M:
- ret = DESC_RATE12M;
- break;
- case MGN_18M:
- ret = DESC_RATE18M;
- break;
- case MGN_24M:
- ret = DESC_RATE24M;
- break;
- case MGN_36M:
- ret = DESC_RATE36M;
- break;
- case MGN_48M:
- ret = DESC_RATE48M;
- break;
- case MGN_54M:
- ret = DESC_RATE54M;
- break;
- case MGN_MCS0:
- ret = DESC_RATEMCS0;
- break;
- case MGN_MCS1:
- ret = DESC_RATEMCS1;
- break;
- case MGN_MCS2:
- ret = DESC_RATEMCS2;
- break;
- case MGN_MCS3:
- ret = DESC_RATEMCS3;
- break;
- case MGN_MCS4:
- ret = DESC_RATEMCS4;
- break;
- case MGN_MCS5:
- ret = DESC_RATEMCS5;
- break;
- case MGN_MCS6:
- ret = DESC_RATEMCS6;
- break;
- case MGN_MCS7:
- ret = DESC_RATEMCS7;
- break;
- default:
- break;
- }
-
- return ret;
-}
-
-u8 HwRateToMRate(u8 rate)
-{
- u8 ret_rate = MGN_1M;
-
- switch (rate) {
- case DESC_RATE1M:
- ret_rate = MGN_1M;
- break;
- case DESC_RATE2M:
- ret_rate = MGN_2M;
- break;
- case DESC_RATE5_5M:
- ret_rate = MGN_5_5M;
- break;
- case DESC_RATE11M:
- ret_rate = MGN_11M;
- break;
- case DESC_RATE6M:
- ret_rate = MGN_6M;
- break;
- case DESC_RATE9M:
- ret_rate = MGN_9M;
- break;
- case DESC_RATE12M:
- ret_rate = MGN_12M;
- break;
- case DESC_RATE18M:
- ret_rate = MGN_18M;
- break;
- case DESC_RATE24M:
- ret_rate = MGN_24M;
- break;
- case DESC_RATE36M:
- ret_rate = MGN_36M;
- break;
- case DESC_RATE48M:
- ret_rate = MGN_48M;
- break;
- case DESC_RATE54M:
- ret_rate = MGN_54M;
- break;
- case DESC_RATEMCS0:
- ret_rate = MGN_MCS0;
- break;
- case DESC_RATEMCS1:
- ret_rate = MGN_MCS1;
- break;
- case DESC_RATEMCS2:
- ret_rate = MGN_MCS2;
- break;
- case DESC_RATEMCS3:
- ret_rate = MGN_MCS3;
- break;
- case DESC_RATEMCS4:
- ret_rate = MGN_MCS4;
- break;
- case DESC_RATEMCS5:
- ret_rate = MGN_MCS5;
- break;
- case DESC_RATEMCS6:
- ret_rate = MGN_MCS6;
- break;
- case DESC_RATEMCS7:
- ret_rate = MGN_MCS7;
- break;
- default:
- break;
- }
-
- return ret_rate;
-}
-
-void HalSetBrateCfg(struct adapter *Adapter, u8 *mBratesOS, u16 *pBrateCfg)
-{
- u8 i, is_brate, brate;
-
- for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
- is_brate = mBratesOS[i] & IEEE80211_BASIC_RATE_MASK;
- brate = mBratesOS[i] & 0x7f;
-
- if (is_brate) {
- switch (brate) {
- case IEEE80211_CCK_RATE_1MB:
- *pBrateCfg |= RATE_1M;
- break;
- case IEEE80211_CCK_RATE_2MB:
- *pBrateCfg |= RATE_2M;
- break;
- case IEEE80211_CCK_RATE_5MB:
- *pBrateCfg |= RATE_5_5M;
- break;
- case IEEE80211_CCK_RATE_11MB:
- *pBrateCfg |= RATE_11M;
- break;
- case IEEE80211_OFDM_RATE_6MB:
- *pBrateCfg |= RATE_6M;
- break;
- case IEEE80211_OFDM_RATE_9MB:
- *pBrateCfg |= RATE_9M;
- break;
- case IEEE80211_OFDM_RATE_12MB:
- *pBrateCfg |= RATE_12M;
- break;
- case IEEE80211_OFDM_RATE_18MB:
- *pBrateCfg |= RATE_18M;
- break;
- case IEEE80211_OFDM_RATE_24MB:
- *pBrateCfg |= RATE_24M;
- break;
- case IEEE80211_OFDM_RATE_36MB:
- *pBrateCfg |= RATE_36M;
- break;
- case IEEE80211_OFDM_RATE_48MB:
- *pBrateCfg |= RATE_48M;
- break;
- case IEEE80211_OFDM_RATE_54MB:
- *pBrateCfg |= RATE_54M;
- break;
- }
- }
- }
-}
-
-static void _OneOutPipeMapping(struct adapter *padapter)
-{
- struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-
- 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 */
-
- 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 */
-}
-
-static void _TwoOutPipeMapping(struct adapter *padapter, bool bWIFICfg)
-{
- struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-
- if (bWIFICfg) { /* WMM */
-
- /* BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA */
- /* 0, 1, 0, 1, 0, 0, 0, 0, 0 }; */
- /* 0:ep_0 num, 1:ep_1 num */
-
- pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[1];/* VO */
- pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0];/* VI */
- pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[1];/* BE */
- pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[0];/* BK */
-
- 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 */
-
- } else { /* typical setting */
-
- /* BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA */
- /* 1, 1, 0, 0, 0, 0, 0, 0, 0 }; */
- /* 0:ep_0 num, 1:ep_1 num */
-
- pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];/* VO */
- pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0];/* VI */
- pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[1];/* BE */
- pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[1];/* BK */
-
- 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 */
-
- }
-
-}
-
-static void _ThreeOutPipeMapping(struct adapter *padapter, bool bWIFICfg)
-{
- struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-
- if (bWIFICfg) { /* for WMM */
-
- /* BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA */
- /* 1, 2, 1, 0, 0, 0, 0, 0, 0 }; */
- /* 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] = pdvobjpriv->RtOutPipe[1];/* BK */
-
- 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 */
-
- } else { /* typical setting */
-
- /* BK, BE, VI, VO, BCN, CMD, MGT, HIGH, HCCA */
- /* 2, 2, 1, 0, 0, 0, 0, 0, 0 }; */
- /* 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] = pdvobjpriv->RtOutPipe[2];/* BK */
-
- 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 */
- }
-
-}
-
-bool Hal_MappingOutPipe(struct adapter *padapter, u8 NumOutPipe)
-{
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
-
- bool bWIFICfg = (pregistrypriv->wifi_spec) ? true : false;
-
- bool result = true;
-
- switch (NumOutPipe) {
- case 2:
- _TwoOutPipeMapping(padapter, bWIFICfg);
- break;
- case 3:
- case 4:
- _ThreeOutPipeMapping(padapter, bWIFICfg);
- break;
- case 1:
- _OneOutPipeMapping(padapter);
- break;
- default:
- result = false;
- break;
- }
-
- return result;
-
-}
-
-void hal_init_macaddr(struct adapter *adapter)
-{
- rtw_hal_set_hwreg(adapter, HW_VAR_MAC_ADDR, adapter->eeprompriv.mac_addr);
-}
-
-void rtw_init_hal_com_default_value(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- pHalData->AntDetection = 1;
-}
-
-/*
- * C2H event format:
- * Field TRIGGER CONTENT CMD_SEQ CMD_LEN CMD_ID
- * BITS [127:120] [119:16] [15:8] [7:4] [3:0]
- */
-
-void c2h_evt_clear(struct adapter *adapter)
-{
- rtw_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE);
-}
-
-/*
- * C2H event format:
- * Field TRIGGER CMD_LEN CONTENT CMD_SEQ CMD_ID
- * BITS [127:120] [119:112] [111:16] [15:8] [7:0]
- */
-s32 c2h_evt_read_88xx(struct adapter *adapter, u8 *buf)
-{
- s32 ret = _FAIL;
- struct c2h_evt_hdr_88xx *c2h_evt;
- int i;
- u8 trigger;
-
- if (!buf)
- goto exit;
-
- trigger = rtw_read8(adapter, REG_C2HEVT_CLEAR);
-
- 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_88xx *)buf;
-
- memset(c2h_evt, 0, 16);
-
- c2h_evt->id = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL);
- c2h_evt->seq = rtw_read8(adapter, REG_C2HEVT_CMD_SEQ_88XX);
- c2h_evt->plen = rtw_read8(adapter, REG_C2HEVT_CMD_LEN_88XX);
-
- /* Read the content */
- for (i = 0; i < c2h_evt->plen; i++)
- c2h_evt->payload[i] = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + 2 + i);
-
- 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.
- */
- c2h_evt_clear(adapter);
-exit:
- return ret;
-}
-
-u8 rtw_get_mgntframe_raid(struct adapter *adapter, unsigned char network_type)
-{
- return (network_type & WIRELESS_11B) ? RATEID_IDX_B : RATEID_IDX_G;
-}
-
-void rtw_hal_update_sta_rate_mask(struct adapter *padapter, struct sta_info *psta)
-{
- u8 i, limit;
- u32 tx_ra_bitmap;
-
- if (!psta)
- return;
-
- tx_ra_bitmap = 0;
-
- /* 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->htpriv.ht_option) {
- limit = 8; /* 1R */
-
- for (i = 0; i < limit; i++) {
- if (psta->htpriv.ht_cap.mcs.rx_mask[i/8] & BIT(i%8))
- tx_ra_bitmap |= BIT(i+12);
- }
- }
-
- psta->ra_mask = tx_ra_bitmap;
- psta->init_rate = get_highest_rate_idx(tx_ra_bitmap)&0x3f;
-}
-
-void SetHwReg(struct adapter *adapter, u8 variable, u8 *val)
-{
- struct hal_com_data *hal_data = GET_HAL_DATA(adapter);
- struct dm_odm_t *odm = &(hal_data->odmpriv);
-
- switch (variable) {
- case HW_VAR_INIT_RTS_RATE:
- WARN_ON(1);
- break;
- case HW_VAR_SEC_CFG:
- {
- u16 reg_scr;
-
- reg_scr = rtw_read16(adapter, REG_SECCFG);
- rtw_write16(adapter, REG_SECCFG, reg_scr|SCR_CHK_KEYID|SCR_RxDecEnable|SCR_TxEncEnable);
- }
- break;
- case HW_VAR_SEC_DK_CFG:
- {
- struct security_priv *sec = &adapter->securitypriv;
- u8 reg_scr = rtw_read8(adapter, REG_SECCFG);
-
- if (val) { /* Enable default key related setting */
- reg_scr |= SCR_TXBCUSEDK;
- if (sec->dot11_auth_algrthm != dot11_auth_algrthm_8021x)
- reg_scr |= (SCR_RxUseDK|SCR_TxUseDK);
- } else /* Disable default key related setting */
- reg_scr &= ~(SCR_RXBCUSEDK|SCR_TXBCUSEDK|SCR_RxUseDK|SCR_TxUseDK);
-
- rtw_write8(adapter, REG_SECCFG, reg_scr);
- }
- break;
- case HW_VAR_DM_FLAG:
- odm->SupportAbility = *((u32 *)val);
- break;
- case HW_VAR_DM_FUNC_OP:
- if (*((u8 *)val)) {
- /* save dm flag */
- odm->BK_SupportAbility = odm->SupportAbility;
- } else {
- /* restore dm flag */
- odm->SupportAbility = odm->BK_SupportAbility;
- }
- break;
- case HW_VAR_DM_FUNC_SET:
- if (*((u32 *)val) == DYNAMIC_ALL_FUNC_ENABLE) {
- struct dm_priv *dm = &hal_data->dmpriv;
-
- dm->DMFlag = dm->InitDMFlag;
- odm->SupportAbility = dm->InitODMFlag;
- } else {
- odm->SupportAbility |= *((u32 *)val);
- }
- break;
- case HW_VAR_DM_FUNC_CLR:
- /*
- * input is already a mask to clear function
- * don't invert it again! George, Lucas@20130513
- */
- odm->SupportAbility &= *((u32 *)val);
- break;
- case HW_VAR_AMPDU_MIN_SPACE:
- /* TODO - Is something needed here? */
- break;
- case HW_VAR_WIRELESS_MODE:
- /* TODO - Is something needed here? */
- break;
- default:
- netdev_dbg(adapter->pnetdev,
- FUNC_ADPT_FMT " variable(%d) not defined!\n",
- FUNC_ADPT_ARG(adapter), variable);
- break;
- }
-}
-
-void GetHwReg(struct adapter *adapter, u8 variable, u8 *val)
-{
- struct hal_com_data *hal_data = GET_HAL_DATA(adapter);
- struct dm_odm_t *odm = &(hal_data->odmpriv);
-
- switch (variable) {
- case HW_VAR_BASIC_RATE:
- *((u16 *)val) = hal_data->BasicRateSet;
- break;
- case HW_VAR_DM_FLAG:
- *((u32 *)val) = odm->SupportAbility;
- break;
- default:
- netdev_dbg(adapter->pnetdev,
- FUNC_ADPT_FMT " variable(%d) not defined!\n",
- FUNC_ADPT_ARG(adapter), variable);
- break;
- }
-}
-
-u8 GetHalDefVar(
- struct adapter *adapter, enum hal_def_variable variable, void *value
-)
-{
- struct hal_com_data *hal_data = GET_HAL_DATA(adapter);
- u8 bResult = _SUCCESS;
-
- switch (variable) {
- case HAL_DEF_UNDERCORATEDSMOOTHEDPWDB:
- {
- struct mlme_priv *pmlmepriv;
- struct sta_priv *pstapriv;
- struct sta_info *psta;
-
- pmlmepriv = &adapter->mlmepriv;
- pstapriv = &adapter->stapriv;
- psta = rtw_get_stainfo(pstapriv, pmlmepriv->cur_network.network.mac_address);
- if (psta)
- *((int *)value) = psta->rssi_stat.UndecoratedSmoothedPWDB;
- }
- break;
- case HAL_DEF_DBG_DM_FUNC:
- *((u32 *)value) = hal_data->odmpriv.SupportAbility;
- break;
- case HAL_DEF_ANT_DETECT:
- *((u8 *)value) = hal_data->AntDetection;
- break;
- case HAL_DEF_MACID_SLEEP:
- *(u8 *)value = false;
- break;
- case HAL_DEF_TX_PAGE_SIZE:
- *((u32 *)value) = PAGE_SIZE_128;
- break;
- default:
- netdev_dbg(adapter->pnetdev,
- "%s: [WARNING] HAL_DEF_VARIABLE(%d) not defined!\n",
- __func__, variable);
- bResult = _FAIL;
- break;
- }
-
- return bResult;
-}
-
-void SetHalODMVar(
- struct adapter *Adapter,
- enum hal_odm_variable eVariable,
- void *pValue1,
- bool bSet
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct dm_odm_t *podmpriv = &pHalData->odmpriv;
- /* _irqL irqL; */
- switch (eVariable) {
- case HAL_ODM_STA_INFO:
- {
- struct sta_info *psta = pValue1;
-
- if (bSet) {
- ODM_CmnInfoPtrArrayHook(podmpriv, ODM_CMNINFO_STA_STATUS, psta->mac_id, psta);
- } else {
- /* spin_lock_bh(&pHalData->odm_stainfo_lock); */
- ODM_CmnInfoPtrArrayHook(podmpriv, ODM_CMNINFO_STA_STATUS, psta->mac_id, NULL);
-
- /* spin_unlock_bh(&pHalData->odm_stainfo_lock); */
- }
- }
- break;
- case HAL_ODM_P2P_STATE:
- ODM_CmnInfoUpdate(podmpriv, ODM_CMNINFO_WIFI_DIRECT, bSet);
- break;
- case HAL_ODM_WIFI_DISPLAY_STATE:
- ODM_CmnInfoUpdate(podmpriv, ODM_CMNINFO_WIFI_DISPLAY, bSet);
- break;
-
- default:
- break;
- }
-}
-
-bool GetU1ByteIntegerFromStringInDecimal(char *Str, u8 *pInt)
-{
- u16 i = 0;
- *pInt = 0;
-
- while (Str[i] != '\0') {
- if (Str[i] >= '0' && Str[i] <= '9') {
- *pInt *= 10;
- *pInt += (Str[i] - '0');
- } else
- return false;
-
- ++i;
- }
-
- return true;
-}
-
-void rtw_hal_check_rxfifo_full(struct adapter *adapter)
-{
- /* switch counter to RX fifo */
- rtw_write8(adapter, REG_RXERR_RPT+3, rtw_read8(adapter, REG_RXERR_RPT+3)|0xf0);
-}
-
-static u32 Array_kfreemap[] = {
- 0xf8, 0xe,
- 0xf6, 0xc,
- 0xf4, 0xa,
- 0xf2, 0x8,
- 0xf0, 0x6,
- 0xf3, 0x4,
- 0xf5, 0x2,
- 0xf7, 0x0,
- 0xf9, 0x0,
- 0xfc, 0x0,
-};
-
-#define REG_RF_BB_GAIN_OFFSET 0x7f
-//#define RF_GAIN_OFFSET_MASK 0xfffff
-
-void rtw_bb_rf_gain_offset(struct adapter *padapter)
-{
- u8 value = padapter->eeprompriv.EEPROMRFGainOffset;
- u32 *Array = Array_kfreemap;
- u32 v1 = 0, v2 = 0, target = 0;
- u32 i = 0;
-
- if (value & BIT(4)) {
- if (padapter->eeprompriv.EEPROMRFGainVal != 0xff) {
- rtw_hal_read_rfreg(padapter, RF_PATH_A, 0x7f, 0xffffffff);
-
- for (i = 0; i < ARRAY_SIZE(Array_kfreemap); i += 2) {
- v1 = Array[i];
- v2 = Array[i+1];
- if (v1 == padapter->eeprompriv.EEPROMRFGainVal) {
- target = v2;
- break;
- }
- }
- PHY_SetRFReg(padapter, RF_PATH_A, REG_RF_BB_GAIN_OFFSET, BIT(18)|BIT(17)|BIT(16)|BIT(15), target);
-
- rtw_hal_read_rfreg(padapter, RF_PATH_A, 0x7f, 0xffffffff);
- }
- }
-}
diff --git a/drivers/staging/rtl8723bs/hal/hal_com_phycfg.c b/drivers/staging/rtl8723bs/hal/hal_com_phycfg.c
deleted file mode 100644
index df0eaff4c841..000000000000
--- a/drivers/staging/rtl8723bs/hal/hal_com_phycfg.c
+++ /dev/null
@@ -1,973 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-#include <hal_data.h>
-#include <linux/kernel.h>
-#include <linux/string.h>
-
-u8 PHY_GetTxPowerByRateBase(struct adapter *Adapter, u8 RfPath,
- enum rate_section RateSection)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- u8 value = 0;
-
- if (RfPath >= RF_PATH_MAX)
- return 0;
-
- switch (RateSection) {
- case CCK:
- value = pHalData->TxPwrByRateBase2_4G[RfPath][0];
- break;
- case OFDM:
- value = pHalData->TxPwrByRateBase2_4G[RfPath][1];
- break;
- case HT_MCS0_MCS7:
- value = pHalData->TxPwrByRateBase2_4G[RfPath][2];
- break;
- default:
- break;
- }
-
- return value;
-}
-
-static void
-phy_SetTxPowerByRateBase(struct adapter *Adapter, u8 RfPath,
- enum rate_section RateSection, u8 Value)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- if (RfPath >= RF_PATH_MAX)
- return;
-
- switch (RateSection) {
- case CCK:
- pHalData->TxPwrByRateBase2_4G[RfPath][0] = Value;
- break;
- case OFDM:
- pHalData->TxPwrByRateBase2_4G[RfPath][1] = Value;
- break;
- case HT_MCS0_MCS7:
- pHalData->TxPwrByRateBase2_4G[RfPath][2] = Value;
- break;
- default:
- break;
- }
-}
-
-static void phy_StoreTxPowerByRateBase(struct adapter *padapter)
-{
- u8 path, base;
-
- for (path = RF_PATH_A; path <= RF_PATH_B; ++path) {
- base = PHY_GetTxPowerByRate(padapter, path, MGN_11M);
- phy_SetTxPowerByRateBase(padapter, path, CCK, base);
-
- base = PHY_GetTxPowerByRate(padapter, path, MGN_54M);
- phy_SetTxPowerByRateBase(padapter, path, OFDM, base);
-
- base = PHY_GetTxPowerByRate(padapter, path, MGN_MCS7);
- phy_SetTxPowerByRateBase(padapter, path, HT_MCS0_MCS7, base);
- }
-}
-
-u8 PHY_GetRateSectionIndexOfTxPowerByRate(
- struct adapter *padapter, u32 RegAddr, u32 BitMask
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
- u8 index = 0;
-
- if (pDM_Odm->PhyRegPgVersion == 0) {
- switch (RegAddr) {
- case rTxAGC_A_Rate18_06:
- index = 0;
- break;
- case rTxAGC_A_Rate54_24:
- index = 1;
- break;
- case rTxAGC_A_CCK1_Mcs32:
- index = 6;
- break;
- case rTxAGC_B_CCK11_A_CCK2_11:
- if (BitMask == bMaskH3Bytes)
- index = 7;
- else if (BitMask == 0x000000ff)
- index = 15;
- break;
-
- case rTxAGC_A_Mcs03_Mcs00:
- index = 2;
- break;
- case rTxAGC_A_Mcs07_Mcs04:
- index = 3;
- break;
- case rTxAGC_B_Rate18_06:
- index = 8;
- break;
- case rTxAGC_B_Rate54_24:
- index = 9;
- break;
- case rTxAGC_B_CCK1_55_Mcs32:
- index = 14;
- break;
- case rTxAGC_B_Mcs03_Mcs00:
- index = 10;
- break;
- case rTxAGC_B_Mcs07_Mcs04:
- index = 11;
- break;
- default:
- break;
- }
- }
-
- return index;
-}
-
-void
-PHY_GetRateValuesOfTxPowerByRate(
- struct adapter *padapter,
- u32 RegAddr,
- u32 BitMask,
- u32 Value,
- u8 *RateIndex,
- s8 *PwrByRateVal,
- u8 *RateNum
-)
-{
- u8 i = 0;
-
- switch (RegAddr) {
- case rTxAGC_A_Rate18_06:
- case rTxAGC_B_Rate18_06:
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_6M);
- RateIndex[1] = PHY_GetRateIndexOfTxPowerByRate(MGN_9M);
- RateIndex[2] = PHY_GetRateIndexOfTxPowerByRate(MGN_12M);
- RateIndex[3] = PHY_GetRateIndexOfTxPowerByRate(MGN_18M);
- for (i = 0; i < 4; ++i) {
- PwrByRateVal[i] = (s8) ((((Value >> (i * 8 + 4)) & 0xF)) * 10 +
- ((Value >> (i * 8)) & 0xF));
- }
- *RateNum = 4;
- break;
-
- case rTxAGC_A_Rate54_24:
- case rTxAGC_B_Rate54_24:
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_24M);
- RateIndex[1] = PHY_GetRateIndexOfTxPowerByRate(MGN_36M);
- RateIndex[2] = PHY_GetRateIndexOfTxPowerByRate(MGN_48M);
- RateIndex[3] = PHY_GetRateIndexOfTxPowerByRate(MGN_54M);
- for (i = 0; i < 4; ++i) {
- PwrByRateVal[i] = (s8) ((((Value >> (i * 8 + 4)) & 0xF)) * 10 +
- ((Value >> (i * 8)) & 0xF));
- }
- *RateNum = 4;
- break;
-
- case rTxAGC_A_CCK1_Mcs32:
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_1M);
- PwrByRateVal[0] = (s8) ((((Value >> (8 + 4)) & 0xF)) * 10 +
- ((Value >> 8) & 0xF));
- *RateNum = 1;
- break;
-
- case rTxAGC_B_CCK11_A_CCK2_11:
- if (BitMask == 0xffffff00) {
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_2M);
- RateIndex[1] = PHY_GetRateIndexOfTxPowerByRate(MGN_5_5M);
- RateIndex[2] = PHY_GetRateIndexOfTxPowerByRate(MGN_11M);
- for (i = 1; i < 4; ++i) {
- PwrByRateVal[i - 1] = (s8) ((((Value >> (i * 8 + 4)) & 0xF)) * 10 +
- ((Value >> (i * 8)) & 0xF));
- }
- *RateNum = 3;
- } else if (BitMask == 0x000000ff) {
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_11M);
- PwrByRateVal[0] = (s8) ((((Value >> 4) & 0xF)) * 10 + (Value & 0xF));
- *RateNum = 1;
- }
- break;
-
- case rTxAGC_A_Mcs03_Mcs00:
- case rTxAGC_B_Mcs03_Mcs00:
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS0);
- RateIndex[1] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS1);
- RateIndex[2] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS2);
- RateIndex[3] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS3);
- for (i = 0; i < 4; ++i) {
- PwrByRateVal[i] = (s8) ((((Value >> (i * 8 + 4)) & 0xF)) * 10 +
- ((Value >> (i * 8)) & 0xF));
- }
- *RateNum = 4;
- break;
-
- case rTxAGC_A_Mcs07_Mcs04:
- case rTxAGC_B_Mcs07_Mcs04:
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS4);
- RateIndex[1] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS5);
- RateIndex[2] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS6);
- RateIndex[3] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS7);
- for (i = 0; i < 4; ++i) {
- PwrByRateVal[i] = (s8) ((((Value >> (i * 8 + 4)) & 0xF)) * 10 +
- ((Value >> (i * 8)) & 0xF));
- }
- *RateNum = 4;
- break;
-
- case rTxAGC_B_CCK1_55_Mcs32:
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_1M);
- RateIndex[1] = PHY_GetRateIndexOfTxPowerByRate(MGN_2M);
- RateIndex[2] = PHY_GetRateIndexOfTxPowerByRate(MGN_5_5M);
- for (i = 1; i < 4; ++i) {
- PwrByRateVal[i - 1] = (s8) ((((Value >> (i * 8 + 4)) & 0xF)) * 10 +
- ((Value >> (i * 8)) & 0xF));
- }
- *RateNum = 3;
- break;
-
- case 0xC20:
- case 0xE20:
- case 0x1820:
- case 0x1a20:
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_1M);
- RateIndex[1] = PHY_GetRateIndexOfTxPowerByRate(MGN_2M);
- RateIndex[2] = PHY_GetRateIndexOfTxPowerByRate(MGN_5_5M);
- RateIndex[3] = PHY_GetRateIndexOfTxPowerByRate(MGN_11M);
- for (i = 0; i < 4; ++i) {
- PwrByRateVal[i] = (s8) ((((Value >> (i * 8 + 4)) & 0xF)) * 10 +
- ((Value >> (i * 8)) & 0xF));
- }
- *RateNum = 4;
- break;
-
- case 0xC24:
- case 0xE24:
- case 0x1824:
- case 0x1a24:
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_6M);
- RateIndex[1] = PHY_GetRateIndexOfTxPowerByRate(MGN_9M);
- RateIndex[2] = PHY_GetRateIndexOfTxPowerByRate(MGN_12M);
- RateIndex[3] = PHY_GetRateIndexOfTxPowerByRate(MGN_18M);
- for (i = 0; i < 4; ++i) {
- PwrByRateVal[i] = (s8) ((((Value >> (i * 8 + 4)) & 0xF)) * 10 +
- ((Value >> (i * 8)) & 0xF));
- }
- *RateNum = 4;
- break;
-
- case 0xC28:
- case 0xE28:
- case 0x1828:
- case 0x1a28:
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_24M);
- RateIndex[1] = PHY_GetRateIndexOfTxPowerByRate(MGN_36M);
- RateIndex[2] = PHY_GetRateIndexOfTxPowerByRate(MGN_48M);
- RateIndex[3] = PHY_GetRateIndexOfTxPowerByRate(MGN_54M);
- for (i = 0; i < 4; ++i) {
- PwrByRateVal[i] = (s8) ((((Value >> (i * 8 + 4)) & 0xF)) * 10 +
- ((Value >> (i * 8)) & 0xF));
- }
- *RateNum = 4;
- break;
-
- case 0xC2C:
- case 0xE2C:
- case 0x182C:
- case 0x1a2C:
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS0);
- RateIndex[1] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS1);
- RateIndex[2] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS2);
- RateIndex[3] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS3);
- for (i = 0; i < 4; ++i) {
- PwrByRateVal[i] = (s8) ((((Value >> (i * 8 + 4)) & 0xF)) * 10 +
- ((Value >> (i * 8)) & 0xF));
- }
- *RateNum = 4;
- break;
-
- case 0xC30:
- case 0xE30:
- case 0x1830:
- case 0x1a30:
- RateIndex[0] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS4);
- RateIndex[1] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS5);
- RateIndex[2] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS6);
- RateIndex[3] = PHY_GetRateIndexOfTxPowerByRate(MGN_MCS7);
- for (i = 0; i < 4; ++i) {
- PwrByRateVal[i] = (s8) ((((Value >> (i * 8 + 4)) & 0xF)) * 10 +
- ((Value >> (i * 8)) & 0xF));
- }
- *RateNum = 4;
- break;
-
- default:
- break;
- }
-}
-
-static void PHY_StoreTxPowerByRateNew(struct adapter *padapter, u32 RfPath,
- u32 RegAddr, u32 BitMask, u32 Data)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u8 i = 0, rateIndex[4] = {0}, rateNum = 0;
- s8 PwrByRateVal[4] = {0};
-
- PHY_GetRateValuesOfTxPowerByRate(padapter, RegAddr, BitMask, Data, rateIndex, PwrByRateVal, &rateNum);
-
- if (RfPath >= RF_PATH_MAX)
- return;
-
- for (i = 0; i < rateNum; ++i) {
- pHalData->TxPwrByRateOffset[RfPath][rateIndex[i]] = PwrByRateVal[i];
- }
-}
-
-void PHY_InitTxPowerByRate(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u8 rfPath, rate;
-
- for (rfPath = RF_PATH_A; rfPath < MAX_RF_PATH_NUM; ++rfPath)
- for (rate = 0; rate < TX_PWR_BY_RATE_NUM_RATE; ++rate)
- pHalData->TxPwrByRateOffset[rfPath][rate] = 0;
-}
-
-void PHY_StoreTxPowerByRate(
- struct adapter *padapter,
- u32 RfPath,
- u32 RegAddr,
- u32 BitMask,
- u32 Data
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- if (pDM_Odm->PhyRegPgVersion > 0)
- PHY_StoreTxPowerByRateNew(padapter, RfPath, RegAddr, BitMask, Data);
-}
-
-static void
-phy_ConvertTxPowerByRateInDbmToRelativeValues(
-struct adapter *padapter
- )
-{
- u8 base = 0, i = 0, value = 0, path = 0;
- u8 cckRates[4] = {
- MGN_1M, MGN_2M, MGN_5_5M, MGN_11M
- };
- u8 ofdmRates[8] = {
- MGN_6M, MGN_9M, MGN_12M, MGN_18M, MGN_24M, MGN_36M, MGN_48M, MGN_54M
- };
- u8 mcs0_7Rates[8] = {
- MGN_MCS0, MGN_MCS1, MGN_MCS2, MGN_MCS3, MGN_MCS4, MGN_MCS5, MGN_MCS6, MGN_MCS7
- };
- for (path = RF_PATH_A; path < RF_PATH_MAX; ++path) {
- /* CCK */
- base = PHY_GetTxPowerByRate(padapter, path, MGN_11M);
- for (i = 0; i < ARRAY_SIZE(cckRates); ++i) {
- value = PHY_GetTxPowerByRate(padapter, path, cckRates[i]);
- PHY_SetTxPowerByRate(padapter, path, cckRates[i], value - base);
- }
-
- /* OFDM */
- base = PHY_GetTxPowerByRate(padapter, path, MGN_54M);
- for (i = 0; i < sizeof(ofdmRates); ++i) {
- value = PHY_GetTxPowerByRate(padapter, path, ofdmRates[i]);
- PHY_SetTxPowerByRate(padapter, path, ofdmRates[i], value - base);
- }
-
- /* HT MCS0~7 */
- base = PHY_GetTxPowerByRate(padapter, path, MGN_MCS7);
- for (i = 0; i < sizeof(mcs0_7Rates); ++i) {
- value = PHY_GetTxPowerByRate(padapter, path, mcs0_7Rates[i]);
- PHY_SetTxPowerByRate(padapter, path, mcs0_7Rates[i], value - base);
- }
- }
-}
-
-/*
- * This function must be called if the value in the PHY_REG_PG.txt(or header)
- * is exact dBm values
- */
-void PHY_TxPowerByRateConfiguration(struct adapter *padapter)
-{
- phy_StoreTxPowerByRateBase(padapter);
- phy_ConvertTxPowerByRateInDbmToRelativeValues(padapter);
-}
-
-void PHY_SetTxPowerIndexByRateSection(
- struct adapter *padapter, u8 RFPath, u8 Channel, u8 RateSection
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- if (RateSection == CCK) {
- u8 cckRates[] = {MGN_1M, MGN_2M, MGN_5_5M, MGN_11M};
-
- PHY_SetTxPowerIndexByRateArray(padapter, RFPath,
- pHalData->CurrentChannelBW,
- Channel, cckRates,
- ARRAY_SIZE(cckRates));
-
- } else if (RateSection == OFDM) {
- u8 ofdmRates[] = {MGN_6M, MGN_9M, MGN_12M, MGN_18M, MGN_24M, MGN_36M, MGN_48M, MGN_54M};
-
- PHY_SetTxPowerIndexByRateArray(padapter, RFPath,
- pHalData->CurrentChannelBW,
- Channel, ofdmRates,
- ARRAY_SIZE(ofdmRates));
-
- } else if (RateSection == HT_MCS0_MCS7) {
- u8 htRates1T[] = {MGN_MCS0, MGN_MCS1, MGN_MCS2, MGN_MCS3, MGN_MCS4, MGN_MCS5, MGN_MCS6, MGN_MCS7};
-
- PHY_SetTxPowerIndexByRateArray(padapter, RFPath,
- pHalData->CurrentChannelBW,
- Channel, htRates1T,
- ARRAY_SIZE(htRates1T));
-
- }
-}
-
-u8 PHY_GetTxPowerIndexBase(
- struct adapter *padapter,
- u8 RFPath,
- u8 Rate,
- enum channel_width BandWidth,
- u8 Channel
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u8 txPower = 0;
- u8 chnlIdx = (Channel - 1);
-
- if (!HAL_IsLegalChannel(padapter, Channel))
- chnlIdx = 0;
-
- if (IS_CCK_RATE(Rate))
- txPower = pHalData->Index24G_CCK_Base[RFPath][chnlIdx];
- else if (Rate >= MGN_6M)
- txPower = pHalData->Index24G_BW40_Base[RFPath][chnlIdx];
-
- /* OFDM-1T */
- if ((Rate >= MGN_6M && Rate <= MGN_54M) && !IS_CCK_RATE(Rate))
- txPower += pHalData->OFDM_24G_Diff[RFPath][TX_1S];
-
- if (Rate >= MGN_MCS0 && Rate <= MGN_MCS7) {
- if (BandWidth == CHANNEL_WIDTH_20) /* BW20-1S, BW20-2S */
- txPower += pHalData->BW20_24G_Diff[RFPath][TX_1S];
- else if (BandWidth == CHANNEL_WIDTH_40) /* BW40-1S, BW40-2S */
- txPower += pHalData->BW40_24G_Diff[RFPath][TX_1S];
- }
-
- return txPower;
-}
-
-s8 PHY_GetTxPowerTrackingOffset(struct adapter *padapter, u8 RFPath, u8 Rate)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
- s8 offset = 0;
-
- if (!pDM_Odm->RFCalibrateInfo.TxPowerTrackControl)
- return offset;
-
- if ((Rate == MGN_1M) || (Rate == MGN_2M) || (Rate == MGN_5_5M) || (Rate == MGN_11M))
- offset = pDM_Odm->Remnant_CCKSwingIdx;
- else
- offset = pDM_Odm->Remnant_OFDMSwingIdx[RFPath];
-
- return offset;
-}
-
-u8 PHY_GetRateIndexOfTxPowerByRate(u8 Rate)
-{
- u8 index = 0;
-
- switch (Rate) {
- case MGN_1M:
- index = 0;
- break;
- case MGN_2M:
- index = 1;
- break;
- case MGN_5_5M:
- index = 2;
- break;
- case MGN_11M:
- index = 3;
- break;
- case MGN_6M:
- index = 4;
- break;
- case MGN_9M:
- index = 5;
- break;
- case MGN_12M:
- index = 6;
- break;
- case MGN_18M:
- index = 7;
- break;
- case MGN_24M:
- index = 8;
- break;
- case MGN_36M:
- index = 9;
- break;
- case MGN_48M:
- index = 10;
- break;
- case MGN_54M:
- index = 11;
- break;
- case MGN_MCS0:
- index = 12;
- break;
- case MGN_MCS1:
- index = 13;
- break;
- case MGN_MCS2:
- index = 14;
- break;
- case MGN_MCS3:
- index = 15;
- break;
- case MGN_MCS4:
- index = 16;
- break;
- case MGN_MCS5:
- index = 17;
- break;
- case MGN_MCS6:
- index = 18;
- break;
- case MGN_MCS7:
- index = 19;
- break;
- default:
- break;
- }
- return index;
-}
-
-s8 PHY_GetTxPowerByRate(struct adapter *padapter, u8 RFPath, u8 Rate)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- s8 value = 0;
- u8 rateIndex = PHY_GetRateIndexOfTxPowerByRate(Rate);
-
- if ((padapter->registrypriv.reg_enable_tx_power_by_rate == 2 &&
- pHalData->EEPROMRegulatory == 2) ||
- padapter->registrypriv.reg_enable_tx_power_by_rate == 0)
- return 0;
-
- if (RFPath >= RF_PATH_MAX)
- return value;
-
- if (rateIndex >= TX_PWR_BY_RATE_NUM_RATE)
- return value;
-
- return pHalData->TxPwrByRateOffset[RFPath][rateIndex];
-
-}
-
-void PHY_SetTxPowerByRate(
- struct adapter *padapter,
- u8 RFPath,
- u8 Rate,
- s8 Value
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u8 rateIndex = PHY_GetRateIndexOfTxPowerByRate(Rate);
-
- if (RFPath >= RF_PATH_MAX)
- return;
-
- if (rateIndex >= TX_PWR_BY_RATE_NUM_RATE)
- return;
-
- pHalData->TxPwrByRateOffset[RFPath][rateIndex] = Value;
-}
-
-void PHY_SetTxPowerLevelByPath(struct adapter *Adapter, u8 channel, u8 path)
-{
- PHY_SetTxPowerIndexByRateSection(Adapter, path, channel, CCK);
-
- PHY_SetTxPowerIndexByRateSection(Adapter, path, channel, OFDM);
- PHY_SetTxPowerIndexByRateSection(Adapter, path, channel, HT_MCS0_MCS7);
-}
-
-void PHY_SetTxPowerIndexByRateArray(
- struct adapter *padapter,
- u8 RFPath,
- enum channel_width BandWidth,
- u8 Channel,
- u8 *Rates,
- u8 RateArraySize
-)
-{
- u32 powerIndex = 0;
- int i = 0;
-
- for (i = 0; i < RateArraySize; ++i) {
- powerIndex = PHY_GetTxPowerIndex(padapter, RFPath, Rates[i], BandWidth, Channel);
- PHY_SetTxPowerIndex(padapter, powerIndex, RFPath, Rates[i]);
- }
-}
-
-static s8 phy_GetWorldWideLimit(s8 *LimitTable)
-{
- s8 min = LimitTable[0];
- u8 i = 0;
-
- for (i = 0; i < MAX_REGULATION_NUM; ++i) {
- if (LimitTable[i] < min)
- min = LimitTable[i];
- }
-
- return min;
-}
-
-static s8 phy_GetChannelIndexOfTxPowerLimit(u8 Channel)
-{
- return Channel - 1;
-}
-
-static s16 get_bandwidth_idx(const enum channel_width bandwidth)
-{
- switch (bandwidth) {
- case CHANNEL_WIDTH_20:
- return 0;
- case CHANNEL_WIDTH_40:
- return 1;
- default:
- return -1;
- }
-}
-
-static s16 get_rate_sctn_idx(const u8 rate)
-{
- switch (rate) {
- case MGN_1M: case MGN_2M: case MGN_5_5M: case MGN_11M:
- return 0;
- case MGN_6M: case MGN_9M: case MGN_12M: case MGN_18M:
- case MGN_24M: case MGN_36M: case MGN_48M: case MGN_54M:
- return 1;
- case MGN_MCS0: case MGN_MCS1: case MGN_MCS2: case MGN_MCS3:
- case MGN_MCS4: case MGN_MCS5: case MGN_MCS6: case MGN_MCS7:
- return 2;
- default:
- return -1;
- }
-}
-
-s8 phy_get_tx_pwr_lmt(struct adapter *adapter, u32 reg_pwr_tbl_sel,
- enum channel_width bandwidth,
- u8 rf_path, u8 data_rate, u8 channel)
-{
- s16 idx_regulation = -1;
- s16 idx_bandwidth = -1;
- s16 idx_rate_sctn = -1;
- s16 idx_channel = -1;
- s8 pwr_lmt = MAX_POWER_INDEX;
- struct hal_com_data *hal_data = GET_HAL_DATA(adapter);
- s8 limits[10] = {0}; u8 i = 0;
-
- if (((adapter->registrypriv.reg_enable_tx_power_limit == 2) &&
- (hal_data->EEPROMRegulatory != 1)) ||
- (adapter->registrypriv.reg_enable_tx_power_limit == 0))
- return MAX_POWER_INDEX;
-
- switch (adapter->registrypriv.reg_pwr_tbl_sel) {
- case 1:
- idx_regulation = TXPWR_LMT_ETSI;
- break;
- case 2:
- idx_regulation = TXPWR_LMT_MKK;
- break;
- case 3:
- idx_regulation = TXPWR_LMT_FCC;
- break;
- case 4:
- idx_regulation = TXPWR_LMT_WW;
- break;
- default:
- idx_regulation = hal_data->Regulation2_4G;
- break;
- }
-
- idx_bandwidth = get_bandwidth_idx(bandwidth);
- idx_rate_sctn = get_rate_sctn_idx(data_rate);
-
- /* workaround for wrong index combination to obtain tx power limit, */
- /* OFDM only exists in BW 20M */
- /* CCK table will only be given in BW 20M */
- /* HT on 80M will reference to HT on 40M */
- if (idx_rate_sctn == 0 || idx_rate_sctn == 1)
- idx_bandwidth = 0;
-
- channel = phy_GetChannelIndexOfTxPowerLimit(channel);
-
- if (idx_regulation == -1 || idx_bandwidth == -1 ||
- idx_rate_sctn == -1 || idx_channel == -1)
- return MAX_POWER_INDEX;
-
- for (i = 0; i < MAX_REGULATION_NUM; i++)
- limits[i] = hal_data->TxPwrLimit_2_4G[i]
- [idx_bandwidth]
- [idx_rate_sctn]
- [idx_channel]
- [rf_path];
-
- pwr_lmt = (idx_regulation == TXPWR_LMT_WW) ?
- phy_GetWorldWideLimit(limits) :
- hal_data->TxPwrLimit_2_4G[idx_regulation]
- [idx_bandwidth]
- [idx_rate_sctn]
- [idx_channel]
- [rf_path];
-
- return pwr_lmt;
-}
-
-void PHY_ConvertTxPowerLimitToPowerIndex(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct registry_priv *r = &Adapter->registrypriv;
- u8 BW40PwrBasedBm2_4G = 0x2E;
- u8 regulation, bw, channel, rateSection;
- s8 tempValue = 0, tempPwrLmt = 0;
- u8 rfPath = 0;
-
- for (regulation = 0; regulation < MAX_REGULATION_NUM; ++regulation) {
- for (bw = 0; bw < MAX_2_4G_BANDWIDTH_NUM; ++bw) {
- for (channel = 0; channel < CHANNEL_MAX_NUMBER_2G; ++channel) {
- for (rateSection = 0; rateSection < MAX_RATE_SECTION_NUM; ++rateSection) {
- tempPwrLmt = pHalData->TxPwrLimit_2_4G[regulation][bw][rateSection][channel][RF_PATH_A];
-
- for (rfPath = RF_PATH_A; rfPath < MAX_RF_PATH_NUM; ++rfPath) {
- if (pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE) {
- if (rateSection == 2) /* HT 1T */
- BW40PwrBasedBm2_4G = PHY_GetTxPowerByRateBase(Adapter, rfPath, HT_MCS0_MCS7);
- else if (rateSection == 1) /* OFDM */
- BW40PwrBasedBm2_4G = PHY_GetTxPowerByRateBase(Adapter, rfPath, OFDM);
- else if (rateSection == 0) /* CCK */
- BW40PwrBasedBm2_4G = PHY_GetTxPowerByRateBase(Adapter, rfPath, CCK);
- } else
- BW40PwrBasedBm2_4G = r->reg_power_base * 2;
-
- if (tempPwrLmt != MAX_POWER_INDEX) {
- tempValue = tempPwrLmt - BW40PwrBasedBm2_4G;
- pHalData->TxPwrLimit_2_4G[regulation][bw][rateSection][channel][rfPath] = tempValue;
- }
- }
- }
- }
- }
- }
-}
-
-void PHY_InitTxPowerLimit(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- u8 i, j, k, l, m;
-
- for (i = 0; i < MAX_REGULATION_NUM; ++i) {
- for (j = 0; j < MAX_2_4G_BANDWIDTH_NUM; ++j)
- for (k = 0; k < MAX_RATE_SECTION_NUM; ++k)
- for (m = 0; m < CHANNEL_MAX_NUMBER_2G; ++m)
- for (l = 0; l < MAX_RF_PATH_NUM; ++l)
- pHalData->TxPwrLimit_2_4G[i][j][k][m][l] = MAX_POWER_INDEX;
- }
-}
-
-void PHY_SetTxPowerLimit(
- struct adapter *Adapter,
- u8 *Regulation,
- u8 *Bandwidth,
- u8 *RateSection,
- u8 *RfPath,
- u8 *Channel,
- u8 *PowerLimit
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- u8 regulation = 0, bandwidth = 0, rateSection = 0, channel;
- s8 powerLimit = 0, prevPowerLimit, channelIndex;
-
- GetU1ByteIntegerFromStringInDecimal((s8 *)Channel, &channel);
- GetU1ByteIntegerFromStringInDecimal((s8 *)PowerLimit, &powerLimit);
-
- powerLimit = powerLimit > MAX_POWER_INDEX ? MAX_POWER_INDEX : powerLimit;
-
- if (strcmp(Regulation, "FCC") == 0)
- regulation = 0;
- else if (strcmp(Regulation, "MKK") == 0)
- regulation = 1;
- else if (strcmp(Regulation, "ETSI") == 0)
- regulation = 2;
- else if (strcmp(Regulation, "WW13") == 0)
- regulation = 3;
-
- if (strcmp(RateSection, "CCK") == 0 && strcmp(RfPath, "1T") == 0)
- rateSection = 0;
- else if (strcmp(RateSection, "OFDM") == 0 && strcmp(RfPath, "1T") == 0)
- rateSection = 1;
- else if (strcmp(RateSection, "HT") == 0 && strcmp(RfPath, "1T") == 0)
- rateSection = 2;
- else
- return;
-
- if (strcmp(Bandwidth, "20M") == 0)
- bandwidth = 0;
- else if (strcmp(Bandwidth, "40M") == 0)
- bandwidth = 1;
-
- channelIndex = phy_GetChannelIndexOfTxPowerLimit(channel);
-
- if (channelIndex == -1)
- return;
-
- prevPowerLimit = pHalData->TxPwrLimit_2_4G[regulation][bandwidth][rateSection][channelIndex][RF_PATH_A];
-
- if (powerLimit < prevPowerLimit)
- pHalData->TxPwrLimit_2_4G[regulation][bandwidth][rateSection][channelIndex][RF_PATH_A] = powerLimit;
-}
-
-void Hal_ChannelPlanToRegulation(struct adapter *Adapter, u16 ChannelPlan)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- pHalData->Regulation2_4G = TXPWR_LMT_WW;
-
- switch (ChannelPlan) {
- case RT_CHANNEL_DOMAIN_WORLD_NULL:
- pHalData->Regulation2_4G = TXPWR_LMT_WW;
- break;
- case RT_CHANNEL_DOMAIN_ETSI1_NULL:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_FCC1_NULL:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_MKK1_NULL:
- pHalData->Regulation2_4G = TXPWR_LMT_MKK;
- break;
- case RT_CHANNEL_DOMAIN_ETSI2_NULL:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_FCC1_FCC1:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI1:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_MKK1_MKK1:
- pHalData->Regulation2_4G = TXPWR_LMT_MKK;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_KCC1:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_FCC2:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_FCC3:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_FCC4:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_FCC5:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_FCC6:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_FCC1_FCC7:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI2:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI3:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_MKK1_MKK2:
- pHalData->Regulation2_4G = TXPWR_LMT_MKK;
- break;
- case RT_CHANNEL_DOMAIN_MKK1_MKK3:
- pHalData->Regulation2_4G = TXPWR_LMT_MKK;
- break;
- case RT_CHANNEL_DOMAIN_FCC1_NCC1:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_FCC1_NCC2:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_GLOBAL_NULL:
- pHalData->Regulation2_4G = TXPWR_LMT_WW;
- break;
- case RT_CHANNEL_DOMAIN_ETSI1_ETSI4:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_FCC1_FCC2:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_FCC1_NCC3:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI5:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_FCC1_FCC8:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI6:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI7:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI8:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI9:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI10:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI11:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_FCC1_NCC4:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI12:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_FCC1_FCC9:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_WORLD_ETSI13:
- pHalData->Regulation2_4G = TXPWR_LMT_ETSI;
- break;
- case RT_CHANNEL_DOMAIN_FCC1_FCC10:
- pHalData->Regulation2_4G = TXPWR_LMT_FCC;
- break;
- case RT_CHANNEL_DOMAIN_REALTEK_DEFINE: /* Realtek Reserve */
- pHalData->Regulation2_4G = TXPWR_LMT_WW;
- break;
- default:
- break;
- }
-}
diff --git a/drivers/staging/rtl8723bs/hal/hal_intf.c b/drivers/staging/rtl8723bs/hal/hal_intf.c
deleted file mode 100644
index 2caade1a8bdd..000000000000
--- a/drivers/staging/rtl8723bs/hal/hal_intf.c
+++ /dev/null
@@ -1,283 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <hal_data.h>
-
-static void rtw_hal_init_opmode(struct adapter *padapter)
-{
- enum nl80211_iftype networkType = NL80211_IFTYPE_UNSPECIFIED;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- signed int fw_state;
-
- fw_state = get_fwstate(pmlmepriv);
-
- if (fw_state & WIFI_ADHOC_STATE)
- networkType = NL80211_IFTYPE_ADHOC;
- else if (fw_state & WIFI_STATION_STATE)
- networkType = NL80211_IFTYPE_STATION;
- else if (fw_state & WIFI_AP_STATE)
- networkType = NL80211_IFTYPE_AP;
- else
- return;
-
- rtw_setopmode_cmd(padapter, networkType, false);
-}
-
-uint rtw_hal_init(struct adapter *padapter)
-{
- uint status;
- struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
-
- status = rtl8723bs_hal_init(padapter);
-
- if (status == _SUCCESS) {
- rtw_hal_init_opmode(padapter);
-
- dvobj->padapters->hw_init_completed = true;
-
- if (padapter->registrypriv.notch_filter == 1)
- rtw_hal_notch_filter(padapter, 1);
-
- rtw_sec_restore_wep_key(dvobj->padapters);
-
- init_hw_mlme_ext(padapter);
-
- rtw_bb_rf_gain_offset(padapter);
- } else {
- dvobj->padapters->hw_init_completed = false;
- }
-
- return status;
-}
-
-uint rtw_hal_deinit(struct adapter *padapter)
-{
- uint status = _SUCCESS;
- struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
-
- status = rtl8723bs_hal_deinit(padapter);
-
- if (status == _SUCCESS) {
- padapter = dvobj->padapters;
- padapter->hw_init_completed = false;
- }
-
- return status;
-}
-
-void rtw_hal_set_hwreg(struct adapter *padapter, u8 variable, u8 *val)
-{
- SetHwReg8723BS(padapter, variable, val);
-}
-
-void rtw_hal_get_hwreg(struct adapter *padapter, u8 variable, u8 *val)
-{
- GetHwReg8723BS(padapter, variable, val);
-}
-
-void rtw_hal_set_hwreg_with_buf(struct adapter *padapter, u8 variable, u8 *pbuf, int len)
-{
- SetHwRegWithBuf8723B(padapter, variable, pbuf, len);
-}
-
-u8 rtw_hal_get_def_var(struct adapter *padapter, enum hal_def_variable eVariable, void *pValue)
-{
- return GetHalDefVar8723BSDIO(padapter, eVariable, pValue);
-}
-
-void rtw_hal_set_odm_var(struct adapter *padapter, enum hal_odm_variable eVariable, void *pValue1, bool bSet)
-{
- SetHalODMVar(padapter, eVariable, pValue1, bSet);
-}
-
-u8 rtw_hal_check_ips_status(struct adapter *padapter)
-{
- return CheckIPSStatus(padapter);
-}
-
-int rtw_hal_xmitframe_enqueue(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
- return rtl8723bs_hal_xmitframe_enqueue(padapter, pxmitframe);
-}
-
-s32 rtw_hal_xmit(struct adapter *padapter, struct xmit_frame *pxmitframe)
-{
- if (rtl8723bs_hal_xmit(padapter, pxmitframe))
- return _FAIL;
-
- return _SUCCESS;
-}
-
-/*
- * [IMPORTANT] This function would be run in interrupt context.
- */
-s32 rtw_hal_mgnt_xmit(struct adapter *padapter, struct xmit_frame *pmgntframe)
-{
- update_mgntframe_attrib_addr(padapter, pmgntframe);
- /* pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET; */
- /* pwlanhdr = (struct rtw_ieee80211_hdr *)pframe; */
- /* memcpy(pmgntframe->attrib.ra, pwlanhdr->addr1, ETH_ALEN); */
-
- if (padapter->securitypriv.binstallBIPkey) {
- if (is_multicast_ether_addr(pmgntframe->attrib.ra)) {
- pmgntframe->attrib.encrypt = _BIP_;
- /* pmgntframe->attrib.bswenc = true; */
- } else {
- pmgntframe->attrib.encrypt = _AES_;
- pmgntframe->attrib.bswenc = true;
- }
- rtw_mgmt_xmitframe_coalesce(padapter, pmgntframe->pkt, pmgntframe);
- }
-
- return rtl8723bs_mgnt_xmit(padapter, pmgntframe);
-}
-
-s32 rtw_hal_init_xmit_priv(struct adapter *padapter)
-{
- return rtl8723bs_init_xmit_priv(padapter);
-}
-
-void rtw_hal_free_xmit_priv(struct adapter *padapter)
-{
- rtl8723bs_free_xmit_priv(padapter);
-}
-
-s32 rtw_hal_init_recv_priv(struct adapter *padapter)
-{
- return rtl8723bs_init_recv_priv(padapter);
-}
-
-void rtw_hal_free_recv_priv(struct adapter *padapter)
-{
- rtl8723bs_free_recv_priv(padapter);
-}
-
-void rtw_hal_update_ra_mask(struct sta_info *psta, u8 rssi_level)
-{
- struct adapter *padapter;
- struct mlme_priv *pmlmepriv;
-
- if (!psta)
- return;
-
- padapter = psta->padapter;
-
- pmlmepriv = &(padapter->mlmepriv);
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
- add_ratid(padapter, psta, rssi_level);
- else
- UpdateHalRAMask8723B(padapter, psta->mac_id, rssi_level);
-}
-
-void rtw_hal_add_ra_tid(struct adapter *padapter, u32 bitmap, u8 *arg, u8 rssi_level)
-{
- rtl8723b_Add_RateATid(padapter, bitmap, arg, rssi_level);
-}
-
-u32 rtw_hal_read_bbreg(struct adapter *padapter, u32 RegAddr, u32 BitMask)
-{
- return PHY_QueryBBReg_8723B(padapter, RegAddr, BitMask);
-}
-void rtw_hal_write_bbreg(struct adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data)
-{
- PHY_SetBBReg_8723B(padapter, RegAddr, BitMask, Data);
-}
-
-u32 rtw_hal_read_rfreg(struct adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask)
-{
- return PHY_QueryRFReg_8723B(padapter, eRFPath, RegAddr, BitMask);
-}
-void rtw_hal_write_rfreg(struct adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data)
-{
- PHY_SetRFReg_8723B(padapter, eRFPath, RegAddr, BitMask, Data);
-}
-
-void rtw_hal_set_chan(struct adapter *padapter, u8 channel)
-{
- PHY_SwChnl8723B(padapter, channel);
-}
-
-void rtw_hal_set_chnl_bw(struct adapter *padapter, u8 channel,
- enum channel_width Bandwidth, u8 Offset40, u8 Offset80)
-{
- PHY_SetSwChnlBWMode8723B(padapter, channel, Bandwidth, Offset40, Offset80);
-}
-
-void rtw_hal_dm_watchdog(struct adapter *padapter)
-{
- rtl8723b_HalDmWatchDog(padapter);
-}
-
-void rtw_hal_dm_watchdog_in_lps(struct adapter *padapter)
-{
- if (adapter_to_pwrctl(padapter)->fw_current_in_ps_mode)
- rtl8723b_HalDmWatchDog_in_LPS(padapter); /* this function caller is in interrupt context */
-}
-
-void beacon_timing_control(struct adapter *padapter)
-{
- rtl8723b_SetBeaconRelatedRegisters(padapter);
-}
-
-s32 rtw_hal_xmit_thread_handler(struct adapter *padapter)
-{
- return rtl8723bs_xmit_buf_handler(padapter);
-}
-
-void rtw_hal_notch_filter(struct adapter *adapter, bool enable)
-{
- hal_notch_filter_8723b(adapter, enable);
-}
-
-bool rtw_hal_c2h_valid(struct adapter *adapter, u8 *buf)
-{
- return c2h_evt_valid((struct c2h_evt_hdr_88xx *)buf);
-}
-
-s32 rtw_hal_c2h_handler(struct adapter *adapter, u8 *c2h_evt)
-{
- return c2h_handler_8723b(adapter, c2h_evt);
-}
-
-c2h_id_filter rtw_hal_c2h_id_filter_ccx(struct adapter *adapter)
-{
- return c2h_id_filter_ccx_8723b;
-}
-
-s32 rtw_hal_macid_sleep(struct adapter *padapter, u32 macid)
-{
- u8 support;
-
- support = false;
- rtw_hal_get_def_var(padapter, HAL_DEF_MACID_SLEEP, &support);
- if (false == support)
- return _FAIL;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_MACID_SLEEP, (u8 *)&macid);
-
- return _SUCCESS;
-}
-
-s32 rtw_hal_macid_wakeup(struct adapter *padapter, u32 macid)
-{
- u8 support;
-
- support = false;
- rtw_hal_get_def_var(padapter, HAL_DEF_MACID_SLEEP, &support);
- if (false == support)
- return _FAIL;
-
- rtw_hal_set_hwreg(padapter, HW_VAR_MACID_WAKEUP, (u8 *)&macid);
-
- return _SUCCESS;
-}
-
-s32 rtw_hal_fill_h2c_cmd(struct adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer)
-{
- return FillH2CCmd8723B(padapter, ElementID, CmdLen, pCmdBuffer);
-}
diff --git a/drivers/staging/rtl8723bs/hal/hal_pwr_seq.c b/drivers/staging/rtl8723bs/hal/hal_pwr_seq.c
deleted file mode 100644
index 0b60eba128af..000000000000
--- a/drivers/staging/rtl8723bs/hal/hal_pwr_seq.c
+++ /dev/null
@@ -1,128 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-/*
- * This file includes all kinds of Power Action event for RTL8723B
- * and corresponding hardware configurations which are released from HW SD.
- *
- * Major Change History:
- * When Who What
- * ---------- --------------- -------------------------------
- * 2011-08-08 Roger Create.
- */
-
-#include "hal_pwr_seq.h"
-
-/* drivers should parse below arrays and do the corresponding actions */
-/* 3 Power on Array */
-struct wlan_pwr_cfg rtl8723B_power_on_flow[
- RTL8723B_TRANS_CARDEMU_TO_ACT_STEPS+
- RTL8723B_TRANS_END_STEPS
-] = {
- RTL8723B_TRANS_CARDEMU_TO_ACT
- RTL8723B_TRANS_END
-};
-
-/* 3Radio off GPIO Array */
-struct wlan_pwr_cfg rtl8723B_radio_off_flow[
- RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+
- RTL8723B_TRANS_END_STEPS
-] = {
- RTL8723B_TRANS_ACT_TO_CARDEMU
- RTL8723B_TRANS_END
-};
-
-/* 3Card Disable Array */
-struct wlan_pwr_cfg rtl8723B_card_disable_flow[
- RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+
- RTL8723B_TRANS_CARDEMU_TO_PDN_STEPS+
- RTL8723B_TRANS_END_STEPS
-] = {
- RTL8723B_TRANS_ACT_TO_CARDEMU
- RTL8723B_TRANS_CARDEMU_TO_CARDDIS
- RTL8723B_TRANS_END
-};
-
-/* 3 Card Enable Array */
-struct wlan_pwr_cfg rtl8723B_card_enable_flow[
- RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+
- RTL8723B_TRANS_CARDEMU_TO_PDN_STEPS+
- RTL8723B_TRANS_END_STEPS
-] = {
- RTL8723B_TRANS_CARDDIS_TO_CARDEMU
- RTL8723B_TRANS_CARDEMU_TO_ACT
- RTL8723B_TRANS_END
-};
-
-/* 3Suspend Array */
-struct wlan_pwr_cfg rtl8723B_suspend_flow[
- RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+
- RTL8723B_TRANS_CARDEMU_TO_SUS_STEPS+
- RTL8723B_TRANS_END_STEPS
-] = {
- RTL8723B_TRANS_ACT_TO_CARDEMU
- RTL8723B_TRANS_CARDEMU_TO_SUS
- RTL8723B_TRANS_END
-};
-
-/* 3 Resume Array */
-struct wlan_pwr_cfg rtl8723B_resume_flow[
- RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+
- RTL8723B_TRANS_CARDEMU_TO_SUS_STEPS+
- RTL8723B_TRANS_END_STEPS
-] = {
- RTL8723B_TRANS_SUS_TO_CARDEMU
- RTL8723B_TRANS_CARDEMU_TO_ACT
- RTL8723B_TRANS_END
-};
-
-/* 3HWPDN Array */
-struct wlan_pwr_cfg rtl8723B_hwpdn_flow[
- RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+
- RTL8723B_TRANS_CARDEMU_TO_PDN_STEPS+
- RTL8723B_TRANS_END_STEPS
-] = {
- RTL8723B_TRANS_ACT_TO_CARDEMU
- RTL8723B_TRANS_CARDEMU_TO_PDN
- RTL8723B_TRANS_END
-};
-
-/* 3 Enter LPS */
-struct wlan_pwr_cfg rtl8723B_enter_lps_flow[
- RTL8723B_TRANS_ACT_TO_LPS_STEPS+RTL8723B_TRANS_END_STEPS
-] = {
- /* FW behavior */
- RTL8723B_TRANS_ACT_TO_LPS
- RTL8723B_TRANS_END
-};
-
-/* 3 Leave LPS */
-struct wlan_pwr_cfg rtl8723B_leave_lps_flow[
- RTL8723B_TRANS_LPS_TO_ACT_STEPS+RTL8723B_TRANS_END_STEPS
-] = {
- /* FW behavior */
- RTL8723B_TRANS_LPS_TO_ACT
- RTL8723B_TRANS_END
-};
-
-/* 3 Enter SW LPS */
-struct wlan_pwr_cfg rtl8723B_enter_swlps_flow[
- RTL8723B_TRANS_ACT_TO_SWLPS_STEPS+RTL8723B_TRANS_END_STEPS
-] = {
- /* SW behavior */
- RTL8723B_TRANS_ACT_TO_SWLPS
- RTL8723B_TRANS_END
-};
-
-/* 3 Leave SW LPS */
-struct wlan_pwr_cfg rtl8723B_leave_swlps_flow[
- RTL8723B_TRANS_SWLPS_TO_ACT_STEPS+RTL8723B_TRANS_END_STEPS
-] = {
- /* SW behavior */
- RTL8723B_TRANS_SWLPS_TO_ACT
- RTL8723B_TRANS_END
-};
diff --git a/drivers/staging/rtl8723bs/hal/hal_sdio.c b/drivers/staging/rtl8723bs/hal/hal_sdio.c
deleted file mode 100644
index 7cead9664c99..000000000000
--- a/drivers/staging/rtl8723bs/hal/hal_sdio.c
+++ /dev/null
@@ -1,100 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-#include <hal_data.h>
-
-u8 rtw_hal_sdio_max_txoqt_free_space(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- if (pHalData->SdioTxOQTMaxFreeSpace < 8)
- pHalData->SdioTxOQTMaxFreeSpace = 8;
-
- return pHalData->SdioTxOQTMaxFreeSpace;
-}
-
-u8 rtw_hal_sdio_query_tx_freepage(
- struct adapter *padapter, u8 PageIdx, u8 RequiredPageNum
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- if ((pHalData->SdioTxFIFOFreePage[PageIdx] + pHalData->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX]) >= (RequiredPageNum))
- return true;
- else
- return false;
-}
-
-void rtw_hal_sdio_update_tx_freepage(
- struct adapter *padapter, u8 PageIdx, u8 RequiredPageNum
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u8 DedicatedPgNum = 0;
- u8 RequiredPublicFreePgNum = 0;
- /* _irqL irql; */
-
- DedicatedPgNum = pHalData->SdioTxFIFOFreePage[PageIdx];
- if (RequiredPageNum <= DedicatedPgNum) {
- pHalData->SdioTxFIFOFreePage[PageIdx] -= RequiredPageNum;
- } else {
- pHalData->SdioTxFIFOFreePage[PageIdx] = 0;
- RequiredPublicFreePgNum = RequiredPageNum - DedicatedPgNum;
- pHalData->SdioTxFIFOFreePage[PUBLIC_QUEUE_IDX] -= RequiredPublicFreePgNum;
- }
-}
-
-void rtw_hal_set_sdio_tx_max_length(
- struct adapter *padapter, u8 numHQ, u8 numNQ, u8 numLQ, u8 numPubQ
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u32 page_size;
- u32 lenHQ, lenNQ, lenLQ;
-
- rtw_hal_get_def_var(padapter, HAL_DEF_TX_PAGE_SIZE, &page_size);
-
- lenHQ = ((numHQ + numPubQ) >> 1) * page_size;
- lenNQ = ((numNQ + numPubQ) >> 1) * page_size;
- lenLQ = ((numLQ + numPubQ) >> 1) * page_size;
-
- pHalData->sdio_tx_max_len[HI_QUEUE_IDX] =
- (lenHQ > MAX_XMITBUF_SZ) ? MAX_XMITBUF_SZ : lenHQ;
- pHalData->sdio_tx_max_len[MID_QUEUE_IDX] =
- (lenNQ > MAX_XMITBUF_SZ) ? MAX_XMITBUF_SZ : lenNQ;
- pHalData->sdio_tx_max_len[LOW_QUEUE_IDX] =
- (lenLQ > MAX_XMITBUF_SZ) ? MAX_XMITBUF_SZ : lenLQ;
-}
-
-u32 rtw_hal_get_sdio_tx_max_length(struct adapter *padapter, u8 queue_idx)
-{
- struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u32 deviceId, max_len;
-
- deviceId = ffaddr2deviceId(pdvobjpriv, queue_idx);
- switch (deviceId) {
- case WLAN_TX_HIQ_DEVICE_ID:
- max_len = pHalData->sdio_tx_max_len[HI_QUEUE_IDX];
- break;
-
- case WLAN_TX_MIQ_DEVICE_ID:
- max_len = pHalData->sdio_tx_max_len[MID_QUEUE_IDX];
- break;
-
- case WLAN_TX_LOQ_DEVICE_ID:
- max_len = pHalData->sdio_tx_max_len[LOW_QUEUE_IDX];
- break;
-
- default:
- max_len = pHalData->sdio_tx_max_len[MID_QUEUE_IDX];
- break;
- }
-
- return max_len;
-}
diff --git a/drivers/staging/rtl8723bs/hal/odm.c b/drivers/staging/rtl8723bs/hal/odm.c
deleted file mode 100644
index d18df407e365..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm.c
+++ /dev/null
@@ -1,988 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-
-/* Global var */
-
-u32 OFDMSwingTable_New[OFDM_TABLE_SIZE] = {
- 0x0b40002d, /* 0, -15.0dB */
- 0x0c000030, /* 1, -14.5dB */
- 0x0cc00033, /* 2, -14.0dB */
- 0x0d800036, /* 3, -13.5dB */
- 0x0e400039, /* 4, -13.0dB */
- 0x0f00003c, /* 5, -12.5dB */
- 0x10000040, /* 6, -12.0dB */
- 0x11000044, /* 7, -11.5dB */
- 0x12000048, /* 8, -11.0dB */
- 0x1300004c, /* 9, -10.5dB */
- 0x14400051, /* 10, -10.0dB */
- 0x15800056, /* 11, -9.5dB */
- 0x16c0005b, /* 12, -9.0dB */
- 0x18000060, /* 13, -8.5dB */
- 0x19800066, /* 14, -8.0dB */
- 0x1b00006c, /* 15, -7.5dB */
- 0x1c800072, /* 16, -7.0dB */
- 0x1e400079, /* 17, -6.5dB */
- 0x20000080, /* 18, -6.0dB */
- 0x22000088, /* 19, -5.5dB */
- 0x24000090, /* 20, -5.0dB */
- 0x26000098, /* 21, -4.5dB */
- 0x288000a2, /* 22, -4.0dB */
- 0x2ac000ab, /* 23, -3.5dB */
- 0x2d4000b5, /* 24, -3.0dB */
- 0x300000c0, /* 25, -2.5dB */
- 0x32c000cb, /* 26, -2.0dB */
- 0x35c000d7, /* 27, -1.5dB */
- 0x390000e4, /* 28, -1.0dB */
- 0x3c8000f2, /* 29, -0.5dB */
- 0x40000100, /* 30, +0dB */
- 0x43c0010f, /* 31, +0.5dB */
- 0x47c0011f, /* 32, +1.0dB */
- 0x4c000130, /* 33, +1.5dB */
- 0x50800142, /* 34, +2.0dB */
- 0x55400155, /* 35, +2.5dB */
- 0x5a400169, /* 36, +3.0dB */
- 0x5fc0017f, /* 37, +3.5dB */
- 0x65400195, /* 38, +4.0dB */
- 0x6b8001ae, /* 39, +4.5dB */
- 0x71c001c7, /* 40, +5.0dB */
- 0x788001e2, /* 41, +5.5dB */
- 0x7f8001fe /* 42, +6.0dB */
-};
-
-u8 CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8] = {
- {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}, /* 0, -16.0dB */
- {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /* 1, -15.5dB */
- {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 2, -15.0dB */
- {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /* 3, -14.5dB */
- {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 4, -14.0dB */
- {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /* 5, -13.5dB */
- {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /* 6, -13.0dB */
- {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /* 7, -12.5dB */
- {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /* 8, -12.0dB */
- {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /* 9, -11.5dB */
- {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 10, -11.0dB */
- {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /* 11, -10.5dB */
- {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 12, -10.0dB */
- {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /* 13, -9.5dB */
- {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /* 14, -9.0dB */
- {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /* 15, -8.5dB */
- {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /* 16, -8.0dB */
- {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /* 17, -7.5dB */
- {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /* 18, -7.0dB */
- {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /* 19, -6.5dB */
- {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, /* 20, -6.0dB */
- {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /* 21, -5.5dB */
- {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /* 22, -5.0dB */
- {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /* 23, -4.5dB */
- {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /* 24, -4.0dB */
- {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /* 25, -3.5dB */
- {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /* 26, -3.0dB */
- {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /* 27, -2.5dB */
- {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /* 28, -2.0dB */
- {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /* 29, -1.5dB */
- {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /* 30, -1.0dB */
- {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /* 31, -0.5dB */
- {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04} /* 32, +0dB */
-};
-
-u8 CCKSwingTable_Ch14_New[CCK_TABLE_SIZE][8] = {
- {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}, /* 0, -16.0dB */
- {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 1, -15.5dB */
- {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 2, -15.0dB */
- {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 3, -14.5dB */
- {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /* 4, -14.0dB */
- {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 5, -13.5dB */
- {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 6, -13.0dB */
- {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /* 7, -12.5dB */
- {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 8, -12.0dB */
- {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /* 9, -11.5dB */
- {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 10, -11.0dB */
- {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /* 11, -10.5dB */
- {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 12, -10.0dB */
- {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /* 13, -9.5dB */
- {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 14, -9.0dB */
- {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /* 15, -8.5dB */
- {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 16, -8.0dB */
- {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /* 17, -7.5dB */
- {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /* 18, -7.0dB */
- {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /* 19, -6.5dB */
- {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 20, -6.0dB */
- {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /* 21, -5.5dB */
- {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /* 22, -5.0dB */
- {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /* 23, -4.5dB */
- {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /* 24, -4.0dB */
- {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /* 25, -3.5dB */
- {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /* 26, -3.0dB */
- {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /* 27, -2.5dB */
- {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /* 28, -2.0dB */
- {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /* 29, -1.5dB */
- {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /* 30, -1.0dB */
- {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /* 31, -0.5dB */
- {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00} /* 32, +0dB */
-};
-
-/* Remove Edca by Yu Chen */
-
-static void odm_CommonInfoSelfInit(struct dm_odm_t *pDM_Odm)
-{
- pDM_Odm->bCckHighPower = (bool) PHY_QueryBBReg(pDM_Odm->Adapter, ODM_REG(CCK_RPT_FORMAT), ODM_BIT(CCK_RPT_FORMAT));
- pDM_Odm->RFPathRxEnable = (u8) PHY_QueryBBReg(pDM_Odm->Adapter, ODM_REG(BB_RX_PATH), ODM_BIT(BB_RX_PATH));
-
- pDM_Odm->TxRate = 0xFF;
-}
-
-static void odm_CommonInfoSelfUpdate(struct dm_odm_t *pDM_Odm)
-{
- u8 EntryCnt = 0;
- u8 i;
- PSTA_INFO_T pEntry;
-
- if (*(pDM_Odm->pBandWidth) == ODM_BW40M) {
- 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;
-}
-
-/* 3 ============================================================ */
-/* 3 RATR MASK */
-/* 3 ============================================================ */
-/* 3 ============================================================ */
-/* 3 Rate Adaptive */
-/* 3 ============================================================ */
-
-static void odm_RateAdaptiveMaskInit(struct dm_odm_t *pDM_Odm)
-{
- struct odm_rate_adaptive *pOdmRA = &pDM_Odm->RateAdaptive;
-
- pOdmRA->Type = DM_Type_ByDriver;
- if (pOdmRA->Type == DM_Type_ByDriver)
- pDM_Odm->bUseRAMask = true;
- else
- pDM_Odm->bUseRAMask = false;
-
- pOdmRA->RATRState = DM_RATR_STA_INIT;
- pOdmRA->LdpcThres = 35;
- pOdmRA->bUseLdpc = false;
- pOdmRA->HighRSSIThresh = 50;
- pOdmRA->LowRSSIThresh = 20;
-}
-
-u32 ODM_Get_Rate_Bitmap(
- struct dm_odm_t *pDM_Odm,
- u32 macid,
- u32 ra_mask,
- u8 rssi_level
-)
-{
- PSTA_INFO_T pEntry;
- u32 rate_bitmap = 0;
- 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_G):
- if (rssi_level == DM_RATR_STA_HIGH)
- rate_bitmap = 0x00000f00;
- else
- rate_bitmap = 0x00000ff0;
- 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):
- case (ODM_WM_B|ODM_WM_N24G):
- case (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) == ODM_BW40M)
- rate_bitmap = 0x000ff015;
- else
- rate_bitmap = 0x000ff005;
- }
- break;
-
- default:
- rate_bitmap = 0x0fffffff;
- break;
- }
-
- return ra_mask & rate_bitmap;
-
-}
-
-static void odm_RefreshRateAdaptiveMaskCE(struct dm_odm_t *pDM_Odm)
-{
- u8 i;
- struct adapter *padapter = pDM_Odm->Adapter;
-
- if (padapter->driver_stopped)
- return;
-
- if (!pDM_Odm->bUseRAMask)
- return;
-
- for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {
- PSTA_INFO_T pstat = pDM_Odm->pODM_StaInfo[i];
-
- if (IS_STA_VALID(pstat)) {
- if (is_multicast_ether_addr(pstat->hwaddr)) /* if (psta->mac_id == 1) */
- continue;
-
- if (true == ODM_RAStateCheck(pDM_Odm, pstat->rssi_stat.UndecoratedSmoothedPWDB, false, &pstat->rssi_level)) {
- rtw_hal_update_ra_mask(pstat, pstat->rssi_level);
- }
-
- }
- }
-}
-
-/*-----------------------------------------------------------------------------
- * Function: odm_RefreshRateAdaptiveMask()
- *
- * Overview: Update rate table mask according to rssi
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- *When Who Remark
- *05/27/2009 hpfan Create Version 0.
- *
- * --------------------------------------------------------------------------
- */
-static void odm_RefreshRateAdaptiveMask(struct dm_odm_t *pDM_Odm)
-{
-
- if (!(pDM_Odm->SupportAbility & ODM_BB_RA_MASK))
- return;
-
- odm_RefreshRateAdaptiveMaskCE(pDM_Odm);
-}
-
-/* Return Value: bool */
-/* - true: RATRState is changed. */
-bool ODM_RAStateCheck(
- struct dm_odm_t *pDM_Odm,
- s32 RSSI,
- bool bForceUpdate,
- u8 *pRATRState
-)
-{
- struct odm_rate_adaptive *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:
- netdev_dbg(pDM_Odm->Adapter->pnetdev,
- "wrong rssi level setting %d !", *pRATRState);
- 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;
-}
-
-/* */
-
-/* 3 ============================================================ */
-/* 3 RSSI Monitor */
-/* 3 ============================================================ */
-
-static void odm_RSSIMonitorInit(struct dm_odm_t *pDM_Odm)
-{
- struct ra_t *pRA_Table = &pDM_Odm->DM_RA_Table;
-
- pRA_Table->firstconnect = false;
-
-}
-
-static void FindMinimumRSSI(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- /* 1 1.Determine the minimum RSSI */
-
- if (!pDM_Odm->bLinked && (pdmpriv->EntryMinUndecoratedSmoothedPWDB == 0))
- pdmpriv->MinUndecoratedPWDBForDM = 0;
- else
- pdmpriv->MinUndecoratedPWDBForDM = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-}
-
-static void odm_RSSIMonitorCheckCE(struct dm_odm_t *pDM_Odm)
-{
- struct adapter *Adapter = pDM_Odm->Adapter;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- 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 ra_t *pRA_Table = &pDM_Odm->DM_RA_Table;
-
- if (!pDM_Odm->bLinked)
- return;
-
- pRA_Table->firstconnect = pDM_Odm->bLinked;
-
- /* if (check_fwstate(&Adapter->mlmepriv, WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) == true) */
- {
- struct sta_info *psta;
-
- for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {
- psta = pDM_Odm->pODM_StaInfo[i];
- if (IS_STA_VALID(psta)) {
- if (is_multicast_ether_addr(psta->hwaddr)) /* if (psta->mac_id == 1) */
- continue;
-
- if (psta->rssi_stat.UndecoratedSmoothedPWDB == (-1))
- continue;
-
- 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 */
- rtl8723b_set_rssi_cmd(Adapter, (u8 *)(&PWDB_rssi[i]));
- }
- }
- }
-
- if (tmpEntryMaxPWDB != 0) /* If associated entry is found */
- pdmpriv->EntryMaxUndecoratedSmoothedPWDB = tmpEntryMaxPWDB;
- else
- pdmpriv->EntryMaxUndecoratedSmoothedPWDB = 0;
-
- if (tmpEntryMinPWDB != 0xff) /* If associated entry is found */
- pdmpriv->EntryMinUndecoratedSmoothedPWDB = tmpEntryMinPWDB;
- else
- pdmpriv->EntryMinUndecoratedSmoothedPWDB = 0;
-
- FindMinimumRSSI(Adapter);/* get pdmpriv->MinUndecoratedPWDBForDM */
-
- pDM_Odm->RSSI_Min = pdmpriv->MinUndecoratedPWDBForDM;
- /* ODM_CmnInfoUpdate(&pHalData->odmpriv , ODM_CMNINFO_RSSI_MIN, pdmpriv->MinUndecoratedPWDBForDM); */
-}
-
-static void odm_RSSIMonitorCheck(struct dm_odm_t *pDM_Odm)
-{
- if (!(pDM_Odm->SupportAbility & ODM_BB_RSSI_MONITOR))
- return;
-
- odm_RSSIMonitorCheckCE(pDM_Odm);
-
-} /* odm_RSSIMonitorCheck */
-
-/* 3 ============================================================ */
-/* 3 SW Antenna Diversity */
-/* 3 ============================================================ */
-static void odm_SwAntDetectInit(struct dm_odm_t *pDM_Odm)
-{
- struct swat_t *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-
- pDM_SWAT_Table->SWAS_NoLink_BK_Reg92c = rtw_read32(pDM_Odm->Adapter, rDPDT_control);
- pDM_SWAT_Table->PreAntenna = MAIN_ANT;
- pDM_SWAT_Table->CurAntenna = MAIN_ANT;
- pDM_SWAT_Table->SWAS_NoLink_State = 0;
-}
-
-/* 3 ============================================================ */
-/* 3 Tx Power Tracking */
-/* 3 ============================================================ */
-
-static u8 getSwingIndex(struct dm_odm_t *pDM_Odm)
-{
- struct adapter *Adapter = pDM_Odm->Adapter;
- u8 i = 0;
- u32 bbSwing;
- u32 swingTableSize;
- u32 *pSwingTable;
-
- bbSwing = PHY_QueryBBReg(Adapter, rOFDM0_XATxIQImbalance, 0xFFC00000);
-
- pSwingTable = OFDMSwingTable_New;
- swingTableSize = OFDM_TABLE_SIZE;
-
- for (i = 0; i < swingTableSize; ++i) {
- u32 tableValue = pSwingTable[i];
-
- if (tableValue >= 0x100000)
- tableValue >>= 22;
- if (bbSwing == tableValue)
- break;
- }
- return i;
-}
-
-void odm_TXPowerTrackingInit(struct dm_odm_t *pDM_Odm)
-{
- u8 defaultSwingIndex = getSwingIndex(pDM_Odm);
- u8 p = 0;
- struct adapter *Adapter = pDM_Odm->Adapter;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
-
- pdmpriv->bTXPowerTracking = true;
- pdmpriv->TXPowercount = 0;
- pdmpriv->bTXPowerTrackingInit = false;
-
- if (*(pDM_Odm->mp_mode) != 1)
- pdmpriv->TxPowerTrackControl = true;
- else
- pdmpriv->TxPowerTrackControl = false;
-
- /* pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = true; */
- pDM_Odm->RFCalibrateInfo.ThermalValue = pHalData->EEPROMThermalMeter;
- pDM_Odm->RFCalibrateInfo.ThermalValue_IQK = pHalData->EEPROMThermalMeter;
- pDM_Odm->RFCalibrateInfo.ThermalValue_LCK = pHalData->EEPROMThermalMeter;
-
- /* The index of "0 dB" in SwingTable. */
- pDM_Odm->DefaultOfdmIndex = (defaultSwingIndex >= OFDM_TABLE_SIZE) ? 30 : defaultSwingIndex;
- pDM_Odm->DefaultCckIndex = 20;
-
- pDM_Odm->BbSwingIdxCckBase = pDM_Odm->DefaultCckIndex;
- pDM_Odm->RFCalibrateInfo.CCK_index = pDM_Odm->DefaultCckIndex;
-
- for (p = RF_PATH_A; p < MAX_RF_PATH; ++p) {
- pDM_Odm->BbSwingIdxOfdmBase[p] = pDM_Odm->DefaultOfdmIndex;
- pDM_Odm->RFCalibrateInfo.OFDM_index[p] = pDM_Odm->DefaultOfdmIndex;
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] = 0;
- pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p] = 0;
- pDM_Odm->RFCalibrateInfo.PowerIndexOffset[p] = 0;
- }
-
-}
-
-void ODM_TXPowerTrackingCheck(struct dm_odm_t *pDM_Odm)
-{
- struct adapter *Adapter = pDM_Odm->Adapter;
-
- if (!(pDM_Odm->SupportAbility & ODM_RF_TX_PWR_TRACK))
- return;
-
- if (!pDM_Odm->RFCalibrateInfo.TM_Trigger) { /* at least delay 1 sec */
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH_A, RF_T_METER_NEW, (BIT(17) | BIT(16)), 0x03);
-
- pDM_Odm->RFCalibrateInfo.TM_Trigger = 1;
- return;
- } else {
- ODM_TXPowerTrackingCallback_ThermalMeter(Adapter);
- pDM_Odm->RFCalibrateInfo.TM_Trigger = 0;
- }
-}
-
-/* */
-/* 3 Export Interface */
-/* */
-
-/* */
-/* 2011/09/21 MH Add to describe different team necessary resource allocate?? */
-/* */
-void ODM_DMInit(struct dm_odm_t *pDM_Odm)
-{
-
- odm_CommonInfoSelfInit(pDM_Odm);
- odm_DIGInit(pDM_Odm);
- odm_NHMCounterStatisticsInit(pDM_Odm);
- odm_AdaptivityInit(pDM_Odm);
- odm_RateAdaptiveMaskInit(pDM_Odm);
- ODM_CfoTrackingInit(pDM_Odm);
- ODM_EdcaTurboInit(pDM_Odm);
- odm_RSSIMonitorInit(pDM_Odm);
- odm_TXPowerTrackingInit(pDM_Odm);
-
- ODM_ClearTxPowerTrackingState(pDM_Odm);
-
- odm_DynamicBBPowerSavingInit(pDM_Odm);
- odm_DynamicTxPowerInit(pDM_Odm);
-
- odm_SwAntDetectInit(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 dm_odm_t *pDM_Odm)
-{
- odm_CommonInfoSelfUpdate(pDM_Odm);
- odm_FalseAlarmCounterStatistics(pDM_Odm);
- odm_NHMCounterStatistics(pDM_Odm);
-
- odm_RSSIMonitorCheck(pDM_Odm);
-
- /* For CE Platform(SPRD or Tablet) */
- /* 8723A or 8189ES platform */
- /* NeilChen--2012--08--24-- */
- /* Fix Leave LPS issue */
- if (adapter_to_pwrctl(pDM_Odm->Adapter)->pwr_mode != PS_MODE_ACTIVE) {
- /* in LPS mode */
- odm_DIGbyRSSI_LPS(pDM_Odm);
- } else {
- odm_DIG(pDM_Odm);
- }
-
- {
- struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable;
-
- odm_Adaptivity(pDM_Odm, pDM_DigTable->CurIGValue);
- }
- odm_CCKPacketDetectionThresh(pDM_Odm);
-
- if (*pDM_Odm->pbPowerSaving)
- return;
-
- odm_RefreshRateAdaptiveMask(pDM_Odm);
- odm_EdcaTurboCheck(pDM_Odm);
- ODM_CfoTracking(pDM_Odm);
-
- ODM_TXPowerTrackingCheck(pDM_Odm);
-
- /* odm_EdcaTurboCheck(pDM_Odm); */
-
- /* 2010.05.30 LukeLee: For CE platform, files in IC subfolders may not be included to be compiled, */
- /* so compile flags must be left here to prevent from compile errors */
- pDM_Odm->PhyDbgInfo.NumQryBeaconPkt = 0;
-}
-
-/* */
-/* Init /.. Fixed HW value. Only init time. */
-/* */
-void ODM_CmnInfoInit(struct dm_odm_t *pDM_Odm, enum odm_cmninfo_e CmnInfo, u32 Value)
-{
- /* */
- /* This section is used for init value */
- /* */
- switch (CmnInfo) {
- /* */
- /* Fixed ODM value. */
- /* */
- case ODM_CMNINFO_ABILITY:
- pDM_Odm->SupportAbility = (u32)Value;
- break;
-
- case ODM_CMNINFO_PLATFORM:
- pDM_Odm->SupportPlatform = (u8)Value;
- break;
-
- case ODM_CMNINFO_INTERFACE:
- pDM_Odm->SupportInterface = (u8)Value;
- break;
-
- case ODM_CMNINFO_IC_TYPE:
- pDM_Odm->SupportICType = Value;
- break;
-
- case ODM_CMNINFO_CUT_VER:
- pDM_Odm->CutVersion = (u8)Value;
- break;
-
- case ODM_CMNINFO_FAB_VER:
- pDM_Odm->FabVersion = (u8)Value;
- break;
-
- case ODM_CMNINFO_RFE_TYPE:
- pDM_Odm->RFEType = (u8)Value;
- break;
-
- case ODM_CMNINFO_RF_ANTENNA_TYPE:
- pDM_Odm->AntDivType = (u8)Value;
- break;
-
- case ODM_CMNINFO_PACKAGE_TYPE:
- pDM_Odm->PackageType = (u8)Value;
- break;
-
- case ODM_CMNINFO_EXT_LNA:
- pDM_Odm->ExtLNA = (u8)Value;
- break;
-
- case ODM_CMNINFO_EXT_PA:
- pDM_Odm->ExtPA = (u8)Value;
- break;
-
- case ODM_CMNINFO_GPA:
- pDM_Odm->TypeGPA = (enum odm_type_gpa_e)Value;
- break;
- case ODM_CMNINFO_APA:
- pDM_Odm->TypeAPA = (enum odm_type_apa_e)Value;
- break;
- case ODM_CMNINFO_GLNA:
- pDM_Odm->TypeGLNA = (enum odm_type_glna_e)Value;
- break;
- case ODM_CMNINFO_ALNA:
- pDM_Odm->TypeALNA = (enum odm_type_alna_e)Value;
- break;
-
- case ODM_CMNINFO_EXT_TRSW:
- pDM_Odm->ExtTRSW = (u8)Value;
- break;
- case ODM_CMNINFO_PATCH_ID:
- pDM_Odm->PatchID = (u8)Value;
- break;
- case ODM_CMNINFO_BINHCT_TEST:
- pDM_Odm->bInHctTest = (bool)Value;
- break;
- case ODM_CMNINFO_BWIFI_TEST:
- pDM_Odm->bWIFITest = (bool)Value;
- break;
-
- case ODM_CMNINFO_SMART_CONCURRENT:
- pDM_Odm->bDualMacSmartConcurrent = (bool)Value;
- break;
-
- /* To remove the compiler warning, must add an empty default statement to handle the other values. */
- default:
- /* do nothing */
- break;
- }
-
-}
-
-void ODM_CmnInfoHook(struct dm_odm_t *pDM_Odm, enum odm_cmninfo_e CmnInfo, void *pValue)
-{
- /* */
- /* Hook call by reference pointer. */
- /* */
- switch (CmnInfo) {
- /* */
- /* Dynamic call by reference pointer. */
- /* */
- case ODM_CMNINFO_MAC_PHY_MODE:
- pDM_Odm->pMacPhyMode = pValue;
- break;
-
- case ODM_CMNINFO_TX_UNI:
- pDM_Odm->pNumTxBytesUnicast = pValue;
- break;
-
- case ODM_CMNINFO_RX_UNI:
- pDM_Odm->pNumRxBytesUnicast = pValue;
- break;
-
- case ODM_CMNINFO_WM_MODE:
- pDM_Odm->pwirelessmode = pValue;
- break;
-
- case ODM_CMNINFO_SEC_CHNL_OFFSET:
- pDM_Odm->pSecChOffset = pValue;
- break;
-
- case ODM_CMNINFO_SEC_MODE:
- pDM_Odm->pSecurity = pValue;
- break;
-
- case ODM_CMNINFO_BW:
- pDM_Odm->pBandWidth = pValue;
- break;
-
- case ODM_CMNINFO_CHNL:
- pDM_Odm->pChannel = pValue;
- break;
-
- case ODM_CMNINFO_DMSP_GET_VALUE:
- pDM_Odm->pbGetValueFromOtherMac = pValue;
- break;
-
- case ODM_CMNINFO_BUDDY_ADAPTOR:
- pDM_Odm->pBuddyAdapter = pValue;
- break;
-
- case ODM_CMNINFO_DMSP_IS_MASTER:
- pDM_Odm->pbMasterOfDMSP = pValue;
- break;
-
- case ODM_CMNINFO_SCAN:
- pDM_Odm->pbScanInProcess = pValue;
- break;
-
- case ODM_CMNINFO_POWER_SAVING:
- pDM_Odm->pbPowerSaving = pValue;
- break;
-
- case ODM_CMNINFO_ONE_PATH_CCA:
- pDM_Odm->pOnePathCCA = pValue;
- break;
-
- case ODM_CMNINFO_DRV_STOP:
- pDM_Odm->pbDriverStopped = pValue;
- break;
-
- case ODM_CMNINFO_PNP_IN:
- pDM_Odm->pbDriverIsGoingToPnpSetPowerSleep = pValue;
- break;
-
- case ODM_CMNINFO_INIT_ON:
- pDM_Odm->pinit_adpt_in_progress = pValue;
- break;
-
- case ODM_CMNINFO_ANT_TEST:
- pDM_Odm->pAntennaTest = pValue;
- break;
-
- case ODM_CMNINFO_NET_CLOSED:
- pDM_Odm->pbNet_closed = pValue;
- break;
-
- case ODM_CMNINFO_FORCED_RATE:
- pDM_Odm->pForcedDataRate = pValue;
- break;
-
- case ODM_CMNINFO_FORCED_IGI_LB:
- pDM_Odm->pu1ForcedIgiLb = pValue;
- break;
-
- case ODM_CMNINFO_MP_MODE:
- pDM_Odm->mp_mode = pValue;
- break;
-
- /* case ODM_CMNINFO_RTSTA_AID: */
- /* pDM_Odm->pAidMap = (u8 *)pValue; */
- /* break; */
-
- /* case ODM_CMNINFO_BT_COEXIST: */
- /* pDM_Odm->BTCoexist = (bool *)pValue; */
-
- /* case ODM_CMNINFO_STA_STATUS: */
- /* pDM_Odm->pODM_StaInfo[] = (PSTA_INFO_T)pValue; */
- /* break; */
-
- /* case ODM_CMNINFO_PHY_STATUS: */
- /* pDM_Odm->pPhyInfo = (ODM_PHY_INFO *)pValue; */
- /* break; */
-
- /* case ODM_CMNINFO_MAC_STATUS: */
- /* pDM_Odm->pMacInfo = (struct odm_mac_status_info *)pValue; */
- /* break; */
- /* To remove the compiler warning, must add an empty default statement to handle the other values. */
- default:
- /* do nothing */
- break;
- }
-
-}
-
-void ODM_CmnInfoPtrArrayHook(
- struct dm_odm_t *pDM_Odm,
- enum odm_cmninfo_e CmnInfo,
- u16 Index,
- void *pValue
-)
-{
- /* */
- /* Hook call by reference pointer. */
- /* */
- switch (CmnInfo) {
- /* */
- /* Dynamic call by reference pointer. */
- /* */
- case ODM_CMNINFO_STA_STATUS:
- pDM_Odm->pODM_StaInfo[Index] = (PSTA_INFO_T)pValue;
- break;
- /* To remove the compiler warning, must add an empty default statement to handle the other values. */
- default:
- /* do nothing */
- break;
- }
-
-}
-
-/* */
-/* Update Band/CHannel/.. The values are dynamic but non-per-packet. */
-/* */
-void ODM_CmnInfoUpdate(struct dm_odm_t *pDM_Odm, u32 CmnInfo, u64 Value)
-{
- /* */
- /* This init variable may be changed in run time. */
- /* */
- switch (CmnInfo) {
- case ODM_CMNINFO_LINK_IN_PROGRESS:
- pDM_Odm->bLinkInProcess = (bool)Value;
- break;
-
- case ODM_CMNINFO_ABILITY:
- pDM_Odm->SupportAbility = (u32)Value;
- break;
-
- case ODM_CMNINFO_WIFI_DIRECT:
- pDM_Odm->bWIFI_Direct = (bool)Value;
- break;
-
- case ODM_CMNINFO_WIFI_DISPLAY:
- pDM_Odm->bWIFI_Display = (bool)Value;
- break;
-
- case ODM_CMNINFO_LINK:
- pDM_Odm->bLinked = (bool)Value;
- break;
-
- case ODM_CMNINFO_STATION_STATE:
- pDM_Odm->bsta_state = (bool)Value;
- break;
-
- case ODM_CMNINFO_RSSI_MIN:
- pDM_Odm->RSSI_Min = (u8)Value;
- break;
-
- case ODM_CMNINFO_RA_THRESHOLD_HIGH:
- pDM_Odm->RateAdaptive.HighRSSIThresh = (u8)Value;
- break;
-
- case ODM_CMNINFO_RA_THRESHOLD_LOW:
- pDM_Odm->RateAdaptive.LowRSSIThresh = (u8)Value;
- break;
- /* The following is for BT HS mode and BT coexist mechanism. */
- case ODM_CMNINFO_BT_ENABLED:
- pDM_Odm->bBtEnabled = (bool)Value;
- break;
-
- case ODM_CMNINFO_BT_HS_CONNECT_PROCESS:
- pDM_Odm->bBtConnectProcess = (bool)Value;
- break;
-
- case ODM_CMNINFO_BT_HS_RSSI:
- pDM_Odm->btHsRssi = (u8)Value;
- break;
-
- case ODM_CMNINFO_BT_OPERATION:
- pDM_Odm->bBtHsOperation = (bool)Value;
- break;
-
- case ODM_CMNINFO_BT_LIMITED_DIG:
- pDM_Odm->bBtLimitedDig = (bool)Value;
- break;
-
- case ODM_CMNINFO_BT_DISABLE_EDCA:
- pDM_Odm->bBtDisableEdcaTurbo = (bool)Value;
- break;
-
- default:
- /* do nothing */
- break;
- }
-}
-
-/* 3 ============================================================ */
-/* 3 DIG */
-/* 3 ============================================================ */
-/*-----------------------------------------------------------------------------
- * Function: odm_DIGInit()
- *
- * Overview: Set DIG scheme init value.
- *
- * Input: NONE
- *
- * Output: NONE
- *
- * Return: NONE
- *
- * Revised History:
- *When Who Remark
- *
- *---------------------------------------------------------------------------
- */
-
-/* Remove DIG by yuchen */
-
-/* Remove DIG and FA check by Yu Chen */
-
-/* 3 ============================================================ */
-/* 3 BB Power Save */
-/* 3 ============================================================ */
-
-/* Remove BB power saving by Yuchen */
-
-/* 3 ============================================================ */
-/* 3 Dynamic Tx Power */
-/* 3 ============================================================ */
-
-/* Remove BY YuChen */
-
diff --git a/drivers/staging/rtl8723bs/hal/odm.h b/drivers/staging/rtl8723bs/hal/odm.h
deleted file mode 100644
index a20b48660e63..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm.h
+++ /dev/null
@@ -1,1109 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __HALDMOUTSRC_H__
-#define __HALDMOUTSRC_H__
-
-#include "odm_EdcaTurboCheck.h"
-#include "odm_DIG.h"
-#include "odm_DynamicBBPowerSaving.h"
-#include "odm_DynamicTxPower.h"
-#include "odm_CfoTracking.h"
-
-#define TP_MODE 0
-#define RSSI_MODE 1
-#define TRAFFIC_LOW 0
-#define TRAFFIC_HIGH 1
-#define NONE 0
-
-/* 3 Tx Power Tracking */
-/* 3 ============================================================ */
-#define DPK_DELTA_MAPPING_NUM 13
-#define index_mapping_HP_NUM 15
-#define OFDM_TABLE_SIZE 43
-#define CCK_TABLE_SIZE 33
-#define TXSCALE_TABLE_SIZE 37
-#define TXPWR_TRACK_TABLE_SIZE 30
-#define DELTA_SWINGIDX_SIZE 30
-#define BAND_NUM 4
-
-/* 3 PSD Handler */
-/* 3 ============================================================ */
-
-#define AFH_PSD 1 /* 0:normal PSD scan, 1: only do 20 pts PSD */
-#define MODE_40M 0 /* 0:20M, 1:40M */
-#define PSD_TH2 3
-#define PSD_CHMIN 20 /* Minimum channel number for BT AFH */
-#define SIR_STEP_SIZE 3
-#define Smooth_Size_1 5
-#define Smooth_TH_1 3
-#define Smooth_Size_2 10
-#define Smooth_TH_2 4
-#define Smooth_Size_3 20
-#define Smooth_TH_3 4
-#define Smooth_Step_Size 5
-#define Adaptive_SIR 1
-#define PSD_RESCAN 4
-#define PSD_SCAN_INTERVAL 700 /* ms */
-
-/* 8723A High Power IGI Setting */
-#define DM_DIG_HIGH_PWR_IGI_LOWER_BOUND 0x22
-#define DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND 0x28
-#define DM_DIG_HIGH_PWR_THRESHOLD 0x3a
-#define DM_DIG_LOW_PWR_THRESHOLD 0x14
-
-/* ANT Test */
-#define ANTTESTALL 0x00 /* Ant A or B will be Testing */
-#define ANTTESTA 0x01 /* Ant A will be Testing */
-#define ANTTESTB 0x02 /* Ant B will be testing */
-
-#define PS_MODE_ACTIVE 0x01
-
-/* for 8723A Ant Definition--2012--06--07 due to different IC may be different ANT define */
-#define MAIN_ANT 1 /* Ant A or Ant Main */
-#define AUX_ANT 2 /* AntB or Ant Aux */
-#define MAX_ANT 3 /* 3 for AP using */
-
-/* Antenna Diversity Type */
-#define SW_ANTDIV 0
-#define HW_ANTDIV 1
-/* structure and define */
-
-/* Remove DIG by Yuchen */
-
-/* Remove BB power saving by Yuchn */
-
-/* Remove DIG by yuchen */
-
-struct dynamic_primary_CCA {
- u8 PriCCA_flag;
- u8 intf_flag;
- u8 intf_type;
- u8 DupRTS_flag;
- u8 Monitor_flag;
- u8 CH_offset;
- u8 MF_state;
-};
-
-struct ra_t {
- u8 firstconnect;
-};
-
-struct rxhp_t {
- u8 RXHP_flag;
- u8 PSD_func_trigger;
- u8 PSD_bitmap_RXHP[80];
- u8 Pre_IGI;
- u8 Cur_IGI;
- u8 Pre_pw_th;
- u8 Cur_pw_th;
- bool First_time_enter;
- bool RXHP_enable;
- u8 TP_Mode;
- struct timer_list PSDTimer;
-};
-
-#define ASSOCIATE_ENTRY_NUM 32 /* Max size of AsocEntry[]. */
-#define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM
-
-/* This indicates two different the steps. */
-/* In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air. */
-/* In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK */
-/* with original RSSI to determine if it is necessary to switch antenna. */
-#define SWAW_STEP_PEAK 0
-#define SWAW_STEP_DETERMINE 1
-
-#define TP_MODE 0
-#define RSSI_MODE 1
-#define TRAFFIC_LOW 0
-#define TRAFFIC_HIGH 1
-#define TRAFFIC_UltraLOW 2
-
-struct swat_t { /* _SW_Antenna_Switch_ */
- u8 Double_chk_flag;
- u8 try_flag;
- s32 PreRSSI;
- u8 CurAntenna;
- u8 PreAntenna;
- u8 RSSI_Trying;
- u8 TestMode;
- u8 bTriggerAntennaSwitch;
- u8 SelectAntennaMap;
- u8 RSSI_target;
- u8 reset_idx;
- u16 Single_Ant_Counter;
- u16 Dual_Ant_Counter;
- u16 Aux_FailDetec_Counter;
- u16 Retry_Counter;
-
- /* Before link Antenna Switch check */
- u8 SWAS_NoLink_State;
- u32 SWAS_NoLink_BK_Reg860;
- u32 SWAS_NoLink_BK_Reg92c;
- u32 SWAS_NoLink_BK_Reg948;
- bool ANTA_ON; /* To indicate Ant A is or not */
- bool ANTB_ON; /* To indicate Ant B is on or not */
- bool Pre_Aux_FailDetec;
- bool RSSI_AntDect_bResult;
- u8 Ant2G;
-
- s32 RSSI_sum_A;
- s32 RSSI_sum_B;
- s32 RSSI_cnt_A;
- s32 RSSI_cnt_B;
-
- u64 lastTxOkCnt;
- u64 lastRxOkCnt;
- u64 TXByteCnt_A;
- u64 TXByteCnt_B;
- u64 RXByteCnt_A;
- u64 RXByteCnt_B;
- u8 TrafficLoad;
- u8 Train_time;
- u8 Train_time_flag;
- struct timer_list SwAntennaSwitchTimer;
- struct timer_list SwAntennaSwitchTimer_8723B;
- u32 PktCnt_SWAntDivByCtrlFrame;
- bool bSWAntDivByCtrlFrame;
-};
-
-/* Remove Edca by YuChen */
-
-struct odm_rate_adaptive {
- u8 Type; /* DM_Type_ByFW/DM_Type_ByDriver */
- u8 LdpcThres; /* if RSSI > LdpcThres => switch from LPDC to BCC */
- bool bUseLdpc;
- bool bLowerRtsRate;
- 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 */
-
-};
-
-#define IQK_MAC_REG_NUM 4
-#define IQK_ADDA_REG_NUM 16
-#define IQK_BB_REG_NUM_MAX 10
-#define IQK_BB_REG_NUM 9
-#define HP_THERMAL_NUM 8
-
-#define AVG_THERMAL_NUM 8
-#define IQK_MATRIX_REG_NUM 8
-#define IQK_MATRIX_SETTINGS_NUM 14 /* Channels_2_4G_NUM */
-
-#define DM_Type_ByFW 0
-#define DM_Type_ByDriver 1
-
-/* */
-/* Declare for common info */
-/* */
-#define MAX_PATH_NUM_8723B 1
-
-#define IQK_THRESHOLD 8
-#define DPK_THRESHOLD 4
-
-struct odm_phy_info {
- /*
- * Be care, if you want to add any element, please insert it between
- * rx_pwd_ball and signal_strength.
- */
- u8 rx_pwd_ba11;
-
- u8 signal_quality; /* in 0-100 index. */
- s8 rx_mimo_signal_quality[4]; /* per-path's EVM */
- u8 rx_mimo_evm_dbm[4]; /* per-path's EVM dbm */
-
- u8 rx_mimo_signal_strength[4]; /* in 0~100 index */
-
- u16 cfo_short[4]; /* per-path's Cfo_short */
- u16 cfo_tail[4]; /* per-path's Cfo_tail */
-
- s8 rx_power; /* 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 recv_signal_power;
- u8 bt_rx_rssi_percentage;
- u8 signal_strength; /* in 0-100 index. */
-
- s8 rx_pwr[4]; /* per-path's pwdb */
-
- u8 rx_snr[4]; /* per-path's SNR */
- u8 band_width;
- u8 bt_coex_pwr_adjust;
-};
-
-struct odm_packet_info {
- u8 data_rate;
- u8 station_id;
- bool bssid_match;
- bool to_self;
- bool is_beacon;
-};
-
-struct odm_phy_dbg_info {
- /* ODM Write, debug info */
- s8 RxSNRdB[4];
- u32 NumQryPhyStatus;
- u32 NumQryPhyStatusCCK;
- u32 NumQryPhyStatusOFDM;
- u8 NumQryBeaconPkt;
- /* Others */
- s32 RxEVM[4];
-
-};
-
-struct odm_mac_status_info {
- u8 test;
-};
-
-/* */
-/* 2011/10/20 MH Define Common info enum for all team. */
-/* */
-enum odm_cmninfo_e {
- /* Fixed value: */
-
- /* HOOK BEFORE REG INIT----------- */
- ODM_CMNINFO_PLATFORM = 0,
- ODM_CMNINFO_ABILITY, /* ODM_ABILITY_E */
- ODM_CMNINFO_INTERFACE, /* ODM_INTERFACE_E */
- ODM_CMNINFO_IC_TYPE, /* ODM_IC_TYPE_E */
- ODM_CMNINFO_CUT_VER, /* ODM_CUT_VERSION_E */
- ODM_CMNINFO_FAB_VER, /* ODM_FAB_E */
- ODM_CMNINFO_RFE_TYPE,
- ODM_CMNINFO_PACKAGE_TYPE,
- ODM_CMNINFO_EXT_LNA, /* true */
- ODM_CMNINFO_EXT_PA,
- ODM_CMNINFO_GPA,
- ODM_CMNINFO_APA,
- ODM_CMNINFO_GLNA,
- ODM_CMNINFO_ALNA,
- ODM_CMNINFO_EXT_TRSW,
- ODM_CMNINFO_PATCH_ID, /* CUSTOMER ID */
- ODM_CMNINFO_BINHCT_TEST,
- ODM_CMNINFO_BWIFI_TEST,
- ODM_CMNINFO_SMART_CONCURRENT,
- /* HOOK BEFORE REG INIT----------- */
-
- /* Dynamic value: */
-/* POINTER REFERENCE----------- */
- ODM_CMNINFO_MAC_PHY_MODE, /* ODM_MAC_PHY_MODE_E */
- ODM_CMNINFO_TX_UNI,
- ODM_CMNINFO_RX_UNI,
- ODM_CMNINFO_WM_MODE, /* ODM_WIRELESS_MODE_E */
- ODM_CMNINFO_SEC_CHNL_OFFSET, /* ODM_SEC_CHNL_OFFSET_E */
- ODM_CMNINFO_SEC_MODE, /* ODM_SECURITY_E */
- ODM_CMNINFO_BW, /* ODM_BW_E */
- ODM_CMNINFO_CHNL,
- ODM_CMNINFO_FORCED_RATE,
-
- ODM_CMNINFO_DMSP_GET_VALUE,
- ODM_CMNINFO_BUDDY_ADAPTOR,
- ODM_CMNINFO_DMSP_IS_MASTER,
- ODM_CMNINFO_SCAN,
- ODM_CMNINFO_POWER_SAVING,
- ODM_CMNINFO_ONE_PATH_CCA, /* ODM_CCA_PATH_E */
- ODM_CMNINFO_DRV_STOP,
- ODM_CMNINFO_PNP_IN,
- ODM_CMNINFO_INIT_ON,
- ODM_CMNINFO_ANT_TEST,
- ODM_CMNINFO_NET_CLOSED,
- ODM_CMNINFO_MP_MODE,
- /* ODM_CMNINFO_RTSTA_AID, For win driver only? */
- ODM_CMNINFO_FORCED_IGI_LB,
- ODM_CMNINFO_IS1ANTENNA,
- ODM_CMNINFO_RFDEFAULTPATH,
-/* POINTER REFERENCE----------- */
-
-/* CALL BY VALUE------------- */
- ODM_CMNINFO_WIFI_DIRECT,
- ODM_CMNINFO_WIFI_DISPLAY,
- ODM_CMNINFO_LINK_IN_PROGRESS,
- ODM_CMNINFO_LINK,
- ODM_CMNINFO_STATION_STATE,
- ODM_CMNINFO_RSSI_MIN,
- ODM_CMNINFO_DBG_COMP, /* u64 */
- ODM_CMNINFO_DBG_LEVEL, /* u32 */
- ODM_CMNINFO_RA_THRESHOLD_HIGH, /* u8 */
- ODM_CMNINFO_RA_THRESHOLD_LOW, /* u8 */
- ODM_CMNINFO_RF_ANTENNA_TYPE, /* u8 */
- ODM_CMNINFO_BT_ENABLED,
- ODM_CMNINFO_BT_HS_CONNECT_PROCESS,
- ODM_CMNINFO_BT_HS_RSSI,
- ODM_CMNINFO_BT_OPERATION,
- ODM_CMNINFO_BT_LIMITED_DIG, /* Need to Limited Dig or not */
- ODM_CMNINFO_BT_DISABLE_EDCA,
-/* CALL BY VALUE------------- */
-
- /* Dynamic ptr array hook itms. */
- ODM_CMNINFO_STA_STATUS,
- ODM_CMNINFO_PHY_STATUS,
- ODM_CMNINFO_MAC_STATUS,
-
- ODM_CMNINFO_MAX,
-};
-
-/* 2011/10/20 MH Define ODM support ability. ODM_CMNINFO_ABILITY */
-enum { /* _ODM_Support_Ability_Definition */
- /* */
- /* BB ODM section BIT 0-15 */
- /* */
- ODM_BB_DIG = BIT(0),
- ODM_BB_RA_MASK = BIT(1),
- ODM_BB_DYNAMIC_TXPWR = BIT(2),
- ODM_BB_FA_CNT = BIT(3),
- ODM_BB_RSSI_MONITOR = BIT(4),
- ODM_BB_CCK_PD = BIT(5),
- ODM_BB_ANT_DIV = BIT(6),
- ODM_BB_PWR_SAVE = BIT(7),
- ODM_BB_PWR_TRAIN = BIT(8),
- ODM_BB_RATE_ADAPTIVE = BIT(9),
- ODM_BB_PATH_DIV = BIT(10),
- ODM_BB_PSD = BIT(11),
- ODM_BB_RXHP = BIT(12),
- ODM_BB_ADAPTIVITY = BIT(13),
- ODM_BB_CFO_TRACKING = BIT(14),
-
- /* MAC DM section BIT 16-23 */
- ODM_MAC_EDCA_TURBO = BIT(16),
- ODM_MAC_EARLY_MODE = BIT(17),
-
- /* RF ODM section BIT 24-31 */
- ODM_RF_TX_PWR_TRACK = BIT(24),
- ODM_RF_RX_GAIN_TRACK = BIT(25),
- ODM_RF_CALIBRATION = BIT(26),
-};
-
-/* ODM_CMNINFO_INTERFACE */
-enum { /* tag_ODM_Support_Interface_Definition */
- ODM_ITRF_SDIO = 0x4,
- ODM_ITRF_ALL = 0x7,
-};
-
-/* ODM_CMNINFO_IC_TYPE */
-enum { /* tag_ODM_Support_IC_Type_Definition */
- ODM_RTL8723B = BIT(8),
-};
-
-/* ODM_CMNINFO_CUT_VER */
-enum { /* tag_ODM_Cut_Version_Definition */
- ODM_CUT_A = 0,
- ODM_CUT_B = 1,
- ODM_CUT_C = 2,
- ODM_CUT_D = 3,
- ODM_CUT_E = 4,
- ODM_CUT_F = 5,
-
- ODM_CUT_I = 8,
- ODM_CUT_J = 9,
- ODM_CUT_K = 10,
- ODM_CUT_TEST = 15,
-};
-
-/* ODM_CMNINFO_FAB_VER */
-enum { /* tag_ODM_Fab_Version_Definition */
- ODM_TSMC = 0,
- ODM_UMC = 1,
-};
-
-/* */
-/* For example 1T2R (A+AB = BIT0|BIT4|BIT5) */
-/* */
-enum { /* tag_ODM_RF_Type_Definition */
- ODM_1T1R = 0,
- ODM_1T2R = 1,
- ODM_2T2R = 2,
- ODM_2T3R = 3,
- ODM_2T4R = 4,
- ODM_3T3R = 5,
- ODM_3T4R = 6,
- ODM_4T4R = 7,
-};
-
-/* */
-/* ODM Dynamic common info value definition */
-/* */
-
-/* ODM_CMNINFO_WM_MODE */
-enum { /* tag_Wireless_Mode_Definition */
- ODM_WM_UNKNOWN = 0x0,
- ODM_WM_B = BIT(0),
- ODM_WM_G = BIT(1),
- ODM_WM_N24G = BIT(3),
- ODM_WM_AUTO = BIT(5),
-};
-
-/* ODM_CMNINFO_BW */
-enum { /* tag_Bandwidth_Definition */
- ODM_BW20M = 0,
- ODM_BW40M = 1,
-};
-
-/* For AC-series IC, external PA & LNA can be individually added on 2.4G */
-
-enum odm_type_gpa_e { /* tag_ODM_TYPE_GPA_Definition */
- TYPE_GPA0 = 0,
- TYPE_GPA1 = BIT(1)|BIT(0)
-};
-
-enum odm_type_apa_e { /* tag_ODM_TYPE_APA_Definition */
- TYPE_APA0 = 0,
- TYPE_APA1 = BIT(1)|BIT(0)
-};
-
-enum odm_type_glna_e { /* tag_ODM_TYPE_GLNA_Definition */
- TYPE_GLNA0 = 0,
- TYPE_GLNA1 = BIT(2)|BIT(0),
- TYPE_GLNA2 = BIT(3)|BIT(1),
- TYPE_GLNA3 = BIT(3)|BIT(2)|BIT(1)|BIT(0)
-};
-
-enum odm_type_alna_e { /* tag_ODM_TYPE_ALNA_Definition */
- TYPE_ALNA0 = 0,
- TYPE_ALNA1 = BIT(2)|BIT(0),
- TYPE_ALNA2 = BIT(3)|BIT(1),
- TYPE_ALNA3 = BIT(3)|BIT(2)|BIT(1)|BIT(0)
-};
-
-/* Remove PATHDIV_PARA struct to odm_PathDiv.h */
-
-struct odm_rf_cal_t { /* ODM_RF_Calibration_Structure */
- /* for tx power tracking */
-
- u32 RegA24; /* for TempCCK */
- s32 RegE94;
- s32 RegE9C;
- s32 RegEB4;
- s32 RegEBC;
-
- u8 TXPowercount;
- bool bTXPowerTrackingInit;
- bool bTXPowerTracking;
- u8 TxPowerTrackControl; /* for mp mode, turn off txpwrtracking as default */
- u8 TM_Trigger;
-
- 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 bReloadtxpowerindex;
- u8 bRfPiEnable;
- u32 TXPowerTrackingCallbackCnt; /* cosa add for debug */
-
- /* Tx power Tracking ------------------------- */
- u8 bCCKinCH14;
- u8 CCK_index;
- u8 OFDM_index[MAX_RF_PATH];
- s8 PowerIndexOffset[MAX_RF_PATH];
- s8 DeltaPowerIndex[MAX_RF_PATH];
- s8 DeltaPowerIndexLast[MAX_RF_PATH];
- bool bTxPowerChanged;
-
- u8 ThermalValue_HP[HP_THERMAL_NUM];
- u8 ThermalValue_HP_index;
- s32 iqk_matrix_regs_setting_value[IQK_MATRIX_SETTINGS_NUM][IQK_MATRIX_REG_NUM];
- bool bNeedIQK;
- bool bIQKInProgress;
- u8 Delta_IQK;
- u8 Delta_LCK;
- s8 BBSwingDiff2G; /* Unit: dB */
- u8 DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE];
- u8 DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE];
- u8 DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE];
- u8 DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE];
- u8 DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE];
- u8 DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE];
- u8 DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE];
- u8 DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE];
- u8 DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE];
- u8 DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE];
-
- /* */
-
- /* for IQK */
- u32 RegC04;
- u32 Reg874;
- u32 RegC08;
- u32 RegB68;
- u32 RegB6C;
- u32 Reg870;
- u32 Reg860;
- u32 Reg864;
-
- bool bIQKInitialized;
- bool bLCKInProgress;
- 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];
- u32 TxIQC_8723B[2][3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */
- u32 RxIQC_8723B[2][2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} */
-
- /* for APK */
- u32 APKoutput[2][2]; /* path A/B; output1_1a/output1_2a */
- u8 bAPKdone;
- u8 bAPKThermalMeterIgnore;
-
- /* DPK */
- bool bDPKFail;
- u8 bDPdone;
- u8 bDPPathAOK;
- u8 bDPPathBOK;
-
- u32 TxLOK[2];
-
-};
-/* */
-/* ODM Dynamic common info value definition */
-/* */
-
-struct fat_t { /* _FAST_ANTENNA_TRAINNING_ */
- u8 Bssid[6];
- u8 antsel_rx_keep_0;
- u8 antsel_rx_keep_1;
- u8 antsel_rx_keep_2;
- u8 antsel_rx_keep_3;
- u32 antSumRSSI[7];
- u32 antRSSIcnt[7];
- u32 antAveRSSI[7];
- u8 FAT_State;
- u32 TrainIdx;
- 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;
- u32 MinMaxRSSI;
- u8 idx_AntDiv_counter_2G;
- u32 CCK_counter_main;
- u32 CCK_counter_aux;
- u32 OFDM_counter_main;
- u32 OFDM_counter_aux;
-
- u32 CCK_CtrlFrame_Cnt_main;
- u32 CCK_CtrlFrame_Cnt_aux;
- u32 OFDM_CtrlFrame_Cnt_main;
- u32 OFDM_CtrlFrame_Cnt_aux;
- u32 MainAnt_CtrlFrame_Sum;
- u32 AuxAnt_CtrlFrame_Sum;
- u32 MainAnt_CtrlFrame_Cnt;
- u32 AuxAnt_CtrlFrame_Cnt;
-
-};
-
-enum {
- NO_ANTDIV = 0xFF,
- CG_TRX_HW_ANTDIV = 0x01,
- CGCS_RX_HW_ANTDIV = 0x02,
- FIXED_HW_ANTDIV = 0x03,
- CG_TRX_SMART_ANTDIV = 0x04,
- CGCS_RX_SW_ANTDIV = 0x05,
- S0S1_SW_ANTDIV = 0x06 /* 8723B intrnal switch S0 S1 */
-};
-
-struct pathdiv_t { /* _ODM_PATH_DIVERSITY_ */
- u8 RespTxPath;
- u8 PathSel[ODM_ASSOCIATE_ENTRY_NUM];
- u32 PathA_Sum[ODM_ASSOCIATE_ENTRY_NUM];
- u32 PathB_Sum[ODM_ASSOCIATE_ENTRY_NUM];
- u32 PathA_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
- u32 PathB_Cnt[ODM_ASSOCIATE_ENTRY_NUM];
-};
-
-enum phy_reg_pg_type { /* _BASEBAND_CONFIG_PHY_REG_PG_VALUE_TYPE */
- PHY_REG_PG_RELATIVE_VALUE = 0,
- PHY_REG_PG_EXACT_VALUE = 1
-};
-
-/* */
-/* Antenna detection information from single tone mechanism, added by Roger, 2012.11.27. */
-/* */
-struct ant_detected_info {
- bool bAntDetected;
- u32 dBForAntA;
- u32 dBForAntB;
- u32 dBForAntO;
-};
-
-/* */
-/* 2011/09/22 MH Copy from SD4 defined structure. We use to support PHY DM integration. */
-/* */
-struct dm_odm_t { /* DM_Out_Source_Dynamic_Mechanism_Structure */
- struct adapter *Adapter; /* For CE/NIC team */
- /* WHen you use Adapter or priv pointer, you must make sure the pointer is ready. */
- bool odm_ready;
-
- enum phy_reg_pg_type PhyRegPgValueType;
- u8 PhyRegPgVersion;
-
- u32 NumQryPhyStatusAll; /* CCK + OFDM */
- u32 LastNumQryPhyStatusAll;
- u32 RxPWDBAve;
- bool MPDIG_2G; /* off MPDIG */
- u8 Times_2G;
-
-/* 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 Platform info AP/ADSL/CE/MP = 1/2/3/4 */
- u8 SupportPlatform;
- /* ODM Support Ability DIG/RATR/TX_PWR_TRACK/... = 1/2/3/... */
- u32 SupportAbility;
- /* ODM PCIE/USB/SDIO = 1/2/3 */
- u8 SupportInterface;
- /* ODM composite or independent. Bit oriented/ 92C+92D+ .... or any other type = 1/2/3/... */
- u32 SupportICType;
- /* Cut Version TestChip/A-cut/B-cut... = 0/1/2/3/... */
- u8 CutVersion;
- /* Fab Version TSMC/UMC = 0/1 */
- u8 FabVersion;
- /* RF Type 4T4R/3T3R/2T2R/1T2R/1T1R/... */
- u8 RFEType;
- /* Board Type Normal/HighPower/MiniCard/SLIM/Combo/... = 0/1/2/3/4/... */
- u8 BoardType;
- u8 PackageType;
- u8 TypeGLNA;
- u8 TypeGPA;
- u8 TypeALNA;
- u8 TypeAPA;
- /* with external LNA NO/Yes = 0/1 */
- u8 ExtLNA;
- /* with external PA NO/Yes = 0/1 */
- u8 ExtPA;
- /* with external TRSW NO/Yes = 0/1 */
- u8 ExtTRSW;
- u8 PatchID; /* Customer ID */
- bool bInHctTest;
- bool bWIFITest;
-
- bool bDualMacSmartConcurrent;
- u32 BK_SupportAbility;
- u8 AntDivType;
-/* HOOK BEFORE REG INIT----------- */
-
- /* */
- /* Dynamic Value */
- /* */
-/* POINTER REFERENCE----------- */
-
- u8 u8_temp;
- bool bool_temp;
- struct adapter *adapter_temp;
-
- /* MAC PHY Mode SMSP/DMSP/DMDP = 0/1/2 */
- u8 *pMacPhyMode;
- /* TX Unicast byte count */
- u64 *pNumTxBytesUnicast;
- /* RX Unicast byte count */
- u64 *pNumRxBytesUnicast;
- /* Wireless mode B/G/A/N = BIT0/BIT1/BIT2/BIT3 */
- u8 *pwirelessmode; /* ODM_WIRELESS_MODE_E */
- /* Secondary channel offset don't_care/below/above = 0/1/2 */
- u8 *pSecChOffset;
- /* Security mode Open/WEP/AES/TKIP = 0/1/2/3 */
- u8 *pSecurity;
- /* BW info 20M/40M/80M = 0/1/2 */
- u8 *pBandWidth;
- /* Central channel location Ch1/Ch2/.... */
- u8 *pChannel; /* central channel number */
- bool DPK_Done;
- /* Common info for 92D DMSP */
-
- bool *pbGetValueFromOtherMac;
- struct adapter **pBuddyAdapter;
- bool *pbMasterOfDMSP; /* MAC0: master, MAC1: slave */
- /* Common info for Status */
- bool *pbScanInProcess;
- bool *pbPowerSaving;
- /* CCA Path 2-path/path-A/path-B = 0/1/2; using ODM_CCA_PATH_E. */
- u8 *pOnePathCCA;
- /* pMgntInfo->AntennaTest */
- u8 *pAntennaTest;
- bool *pbNet_closed;
- u8 *mp_mode;
- u8 *pu1ForcedIgiLb;
-/* For 8723B IQK----------- */
- bool *pIs1Antenna;
- u8 *pRFDefaultPath;
- /* 0:S1, 1:S0 */
-
-/* POINTER REFERENCE----------- */
- u16 *pForcedDataRate;
-/* CALL BY VALUE------------- */
- bool bLinkInProcess;
- bool bWIFI_Direct;
- bool bWIFI_Display;
- bool bLinked;
-
- bool bsta_state;
- u8 RSSI_Min;
- u8 InterfaceIndex; /* Add for 92D dual MAC: 0--Mac0 1--Mac1 */
- bool bOneEntryOnly;
- /* Common info for BTDM */
- bool bBtEnabled; /* BT is disabled */
- bool bBtConnectProcess; /* BT HS is under connection progress. */
- u8 btHsRssi; /* BT HS mode wifi rssi value. */
- bool bBtHsOperation; /* BT HS mode is under progress */
- bool bBtDisableEdcaTurbo; /* Under some condition, don't enable the EDCA Turbo */
- bool bBtLimitedDig; /* BT is busy. */
-/* CALL BY VALUE------------- */
- u8 RSSI_A;
- u8 RSSI_B;
- u64 RSSI_TRSW;
- u64 RSSI_TRSW_H;
- u64 RSSI_TRSW_L;
- u64 RSSI_TRSW_iso;
-
- u8 RxRate;
- bool bNoisyState;
- u8 TxRate;
- u8 LinkedInterval;
- u8 preChannel;
- u32 TxagcOffsetValueA;
- bool IsTxagcOffsetPositiveA;
- u32 TxagcOffsetValueB;
- bool IsTxagcOffsetPositiveB;
- u64 lastTxOkCnt;
- u64 lastRxOkCnt;
- u32 BbSwingOffsetA;
- bool IsBbSwingOffsetPositiveA;
- u32 BbSwingOffsetB;
- bool IsBbSwingOffsetPositiveB;
- s8 TH_L2H_ini;
- s8 TH_EDCCA_HL_diff;
- s8 IGI_Base;
- u8 IGI_target;
- bool ForceEDCCA;
- u8 AdapEn_RSSI;
- s8 Force_TH_H;
- s8 Force_TH_L;
- u8 IGI_LowerBound;
- u8 antdiv_rssi;
- u8 AntType;
- u8 pre_AntType;
- u8 antdiv_period;
- u8 antdiv_select;
- u8 NdpaPeriod;
- bool H2C_RARpt_connect;
-
- /* add by Yu Cehn for adaptivtiy */
- bool adaptivity_flag;
- bool NHM_disable;
- bool TxHangFlg;
- bool Carrier_Sense_enable;
- u8 tolerance_cnt;
- u64 NHMCurTxOkcnt;
- u64 NHMCurRxOkcnt;
- u64 NHMLastTxOkcnt;
- u64 NHMLastRxOkcnt;
- u8 txEdcca1;
- u8 txEdcca0;
- s8 H2L_lb;
- s8 L2H_lb;
- u8 Adaptivity_IGI_upper;
- u8 NHM_cnt_0;
-
- /* */
- /* 2 Define STA info. */
- /* _ODM_STA_INFO */
- /* 2012/01/12 MH For MP, we need to reduce one array pointer for default port.?? */
- PSTA_INFO_T pODM_StaInfo[ODM_ASSOCIATE_ENTRY_NUM];
-
- /* */
- /* 2012/02/14 MH Add to share 88E ra with other SW team. */
- /* We need to colelct all support abilit to a proper area. */
- /* */
- bool RaSupport88E;
-
- /* Define ........... */
-
- /* Latest packet phy info (ODM write) */
- struct odm_phy_dbg_info PhyDbgInfo;
-
- /* Latest packet phy info (ODM write) */
- struct odm_mac_status_info *pMacInfo;
-
- /* */
- /* ODM Structure */
- /* */
- struct fat_t DM_FatTable;
- struct dig_t DM_DigTable;
- struct ps_t DM_PSTable;
- struct dynamic_primary_CCA DM_PriCCA;
- struct rxhp_t dM_RXHP_Table;
- struct ra_t DM_RA_Table;
- struct false_ALARM_STATISTICS FalseAlmCnt;
- struct false_ALARM_STATISTICS FlaseAlmCntBuddyAdapter;
- struct swat_t DM_SWAT_Table;
- bool RSSI_test;
- struct cfo_tracking DM_CfoTrack;
-
- struct edca_t DM_EDCA_Table;
- u32 WMMEDCA_BE;
- struct pathdiv_t DM_PathDiv;
- /* Copy from SD4 structure */
- /* */
- /* ================================================== */
- /* */
-
- /* common */
-
- bool *pbDriverStopped;
- bool *pbDriverIsGoingToPnpSetPowerSleep;
- bool *pinit_adpt_in_progress;
-
- /* PSD */
- bool bUserAssignLevel;
- struct timer_list PSDTimer;
- u8 RSSI_BT; /* come from BT */
- bool bPSDinProcess;
- bool bPSDactive;
- bool bDMInitialGainEnable;
-
- /* MPT DIG */
- struct timer_list MPT_DIGTimer;
-
- /* for rate adaptive, in fact, 88c/92c fw will handle this */
- u8 bUseRAMask;
-
- struct odm_rate_adaptive RateAdaptive;
-
- struct ant_detected_info AntDetectedInfo; /* Antenna detected information for RSSI tool */
-
- struct odm_rf_cal_t RFCalibrateInfo;
-
- /* */
- /* TX power tracking */
- /* */
- u8 BbSwingIdxOfdm[MAX_RF_PATH];
- u8 BbSwingIdxOfdmCurrent;
- u8 BbSwingIdxOfdmBase[MAX_RF_PATH];
- bool BbSwingFlagOfdm;
- u8 BbSwingIdxCck;
- u8 BbSwingIdxCckCurrent;
- u8 BbSwingIdxCckBase;
- u8 DefaultOfdmIndex;
- u8 DefaultCckIndex;
- bool BbSwingFlagCck;
-
- s8 Absolute_OFDMSwingIdx[MAX_RF_PATH];
- s8 Remnant_OFDMSwingIdx[MAX_RF_PATH];
- s8 Remnant_CCKSwingIdx;
- s8 Modify_TxAGC_Value; /* Remnat compensate value at TxAGC */
- bool Modify_TxAGC_Flag_PathA;
- bool Modify_TxAGC_Flag_PathB;
- bool Modify_TxAGC_Flag_PathC;
- bool Modify_TxAGC_Flag_PathD;
- bool Modify_TxAGC_Flag_PathA_CCK;
-
- s8 KfreeOffset[MAX_RF_PATH];
- /* */
- /* ODM system resource. */
- /* */
-
- /* ODM relative time. */
- struct timer_list PathDivSwitchTimer;
- /* 2011.09.27 add for Path Diversity */
- struct timer_list CCKPathDiversityTimer;
- struct timer_list FastAntTrainingTimer;
-
- /* ODM relative workitem. */
-
- #if (BEAMFORMING_SUPPORT == 1)
- RT_BEAMFORMING_INFO BeamformingInfo;
- #endif
-};
-
-enum ODM_BB_Config_Type {
- CONFIG_BB_PHY_REG,
- CONFIG_BB_AGC_TAB,
- CONFIG_BB_AGC_TAB_2G,
- CONFIG_BB_PHY_REG_PG,
- CONFIG_BB_PHY_REG_MP,
- CONFIG_BB_AGC_TAB_DIFF,
-};
-
-enum ODM_RF_Config_Type {
- CONFIG_RF_RADIO,
- CONFIG_RF_TXPWR_LMT,
-};
-
-enum ODM_FW_Config_Type {
- CONFIG_FW_NIC,
- CONFIG_FW_NIC_2,
- CONFIG_FW_AP,
- CONFIG_FW_WoWLAN,
- CONFIG_FW_WoWLAN_2,
- CONFIG_FW_AP_WoWLAN,
- CONFIG_FW_BT,
-};
-
-/* include "odm_function.h" */
-
-/* 3 =========================================================== */
-/* 3 DIG */
-/* 3 =========================================================== */
-
-/* Remove DIG by Yuchen */
-
-/* 3 =========================================================== */
-/* 3 AGC RX High Power Mode */
-/* 3 =========================================================== */
-#define LNA_Low_Gain_1 0x64
-#define LNA_Low_Gain_2 0x5A
-#define LNA_Low_Gain_3 0x58
-
-#define FA_RXHP_TH1 5000
-#define FA_RXHP_TH2 1500
-#define FA_RXHP_TH3 800
-#define FA_RXHP_TH4 600
-#define FA_RXHP_TH5 500
-
-/* 3 =========================================================== */
-/* 3 EDCA */
-/* 3 =========================================================== */
-
-/* 3 =========================================================== */
-/* 3 Dynamic Tx Power */
-/* 3 =========================================================== */
-/* Dynamic Tx Power Control Threshold */
-
-/* 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 { /* tag_1R_CCA_Type_Definition */
- CCA_1R = 0,
- CCA_2R = 1,
- CCA_MAX = 2,
-};
-
-enum { /* tag_RF_Type_Definition */
- RF_Save = 0,
- RF_Normal = 1,
- RF_MAX = 2,
-};
-
-/* Maximal number of antenna detection mechanism needs to perform, added by Roger, 2011.12.28. */
-#define MAX_ANTENNA_DETECTION_CNT 10
-
-/* */
-/* Extern Global Variables. */
-/* */
-extern u32 OFDMSwingTable_New[OFDM_TABLE_SIZE];
-extern u8 CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8];
-extern u8 CCKSwingTable_Ch14_New[CCK_TABLE_SIZE][8];
-
-/* */
-/* check Sta pointer valid or not */
-/* */
-#define IS_STA_VALID(pSta) (pSta)
-/* 20100514 Joseph: Add definition for antenna switching test after link. */
-/* This indicates two different the steps. */
-/* In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air. */
-/* In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK */
-/* with original RSSI to determine if it is necessary to switch antenna. */
-#define SWAW_STEP_PEAK 0
-#define SWAW_STEP_DETERMINE 1
-
-/* Remove BB power saving by Yuchen */
-
-#define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck
-void ODM_TXPowerTrackingCheck(struct dm_odm_t *pDM_Odm);
-
-bool ODM_RAStateCheck(
- struct dm_odm_t *pDM_Odm,
- s32 RSSI,
- bool bForceUpdate,
- u8 *pRATRState
-);
-
-#define dm_SWAW_RSSI_Check ODM_SwAntDivChkPerPktRssi
-void ODM_SwAntDivChkPerPktRssi(
- struct dm_odm_t *pDM_Odm,
- u8 StationID,
- struct odm_phy_info *pPhyInfo
-);
-
-u32 ODM_Get_Rate_Bitmap(
- struct dm_odm_t *pDM_Odm,
- u32 macid,
- u32 ra_mask,
- u8 rssi_level
-);
-
-#if (BEAMFORMING_SUPPORT == 1)
-BEAMFORMING_CAP Beamforming_GetEntryBeamCapByMacId(PMGNT_INFO pMgntInfo, u8 MacId);
-#endif
-
-void odm_TXPowerTrackingInit(struct dm_odm_t *pDM_Odm);
-
-void ODM_DMInit(struct dm_odm_t *pDM_Odm);
-
-void ODM_DMWatchdog(struct dm_odm_t *pDM_Odm); /* For common use in the future */
-
-void ODM_CmnInfoInit(struct dm_odm_t *pDM_Odm, enum odm_cmninfo_e CmnInfo, u32 Value);
-
-void ODM_CmnInfoHook(struct dm_odm_t *pDM_Odm, enum odm_cmninfo_e CmnInfo, void *pValue);
-
-void ODM_CmnInfoPtrArrayHook(
- struct dm_odm_t *pDM_Odm,
- enum odm_cmninfo_e CmnInfo,
- u16 Index,
- void *pValue
-);
-
-void ODM_CmnInfoUpdate(struct dm_odm_t *pDM_Odm, u32 CmnInfo, u64 Value);
-
-void ODM_InitAllTimers(struct dm_odm_t *pDM_Odm);
-
-void ODM_CancelAllTimers(struct dm_odm_t *pDM_Odm);
-
-void ODM_ReleaseAllTimers(struct dm_odm_t *pDM_Odm);
-
-void ODM_AntselStatistics_88C(
- struct dm_odm_t *pDM_Odm,
- u8 MacId,
- u32 PWDBAll,
- bool isCCKrate
-);
-
-void ODM_DynamicARFBSelect(struct dm_odm_t *pDM_Odm, u8 rate, bool Collision_State);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/odm_CfoTracking.c b/drivers/staging/rtl8723bs/hal/odm_CfoTracking.c
deleted file mode 100644
index 7e6b49399abb..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_CfoTracking.c
+++ /dev/null
@@ -1,210 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-
-static void odm_SetCrystalCap(void *pDM_VOID, u8 CrystalCap)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct cfo_tracking *pCfoTrack = &pDM_Odm->DM_CfoTrack;
-
- if (pCfoTrack->CrystalCap == CrystalCap)
- return;
-
- pCfoTrack->CrystalCap = CrystalCap;
-
- /* 0x2C[23:18] = 0x2C[17:12] = CrystalCap */
- CrystalCap = CrystalCap & 0x3F;
- PHY_SetBBReg(
- pDM_Odm->Adapter,
- REG_MAC_PHY_CTRL,
- 0x00FFF000,
- (CrystalCap | (CrystalCap << 6))
- );
-}
-
-static u8 odm_GetDefaultCrytaltalCap(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- struct adapter *Adapter = pDM_Odm->Adapter;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- return pHalData->CrystalCap & 0x3f;
-}
-
-static void odm_SetATCStatus(void *pDM_VOID, bool ATCStatus)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct cfo_tracking *pCfoTrack = &pDM_Odm->DM_CfoTrack;
-
- if (pCfoTrack->bATCStatus == ATCStatus)
- return;
-
- PHY_SetBBReg(
- pDM_Odm->Adapter,
- ODM_REG(BB_ATC),
- ODM_BIT(BB_ATC),
- ATCStatus
- );
- pCfoTrack->bATCStatus = ATCStatus;
-}
-
-static bool odm_GetATCStatus(void *pDM_VOID)
-{
- bool ATCStatus;
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- ATCStatus = (bool)PHY_QueryBBReg(
- pDM_Odm->Adapter,
- ODM_REG(BB_ATC),
- ODM_BIT(BB_ATC)
- );
- return ATCStatus;
-}
-
-void ODM_CfoTrackingReset(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct cfo_tracking *pCfoTrack = &pDM_Odm->DM_CfoTrack;
-
- pCfoTrack->DefXCap = odm_GetDefaultCrytaltalCap(pDM_Odm);
- pCfoTrack->bAdjust = true;
-
- odm_SetCrystalCap(pDM_Odm, pCfoTrack->DefXCap);
- odm_SetATCStatus(pDM_Odm, true);
-}
-
-void ODM_CfoTrackingInit(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct cfo_tracking *pCfoTrack = &pDM_Odm->DM_CfoTrack;
-
- pCfoTrack->DefXCap =
- pCfoTrack->CrystalCap = odm_GetDefaultCrytaltalCap(pDM_Odm);
- pCfoTrack->bATCStatus = odm_GetATCStatus(pDM_Odm);
- pCfoTrack->bAdjust = true;
-}
-
-void ODM_CfoTracking(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct cfo_tracking *pCfoTrack = &pDM_Odm->DM_CfoTrack;
- int CFO_kHz_A, CFO_ave = 0;
- int CFO_ave_diff;
- int CrystalCap = (int)pCfoTrack->CrystalCap;
- u8 Adjust_Xtal = 1;
-
- /* 4 Support ability */
- if (!(pDM_Odm->SupportAbility & ODM_BB_CFO_TRACKING))
- return;
-
- if (!pDM_Odm->bLinked || !pDM_Odm->bOneEntryOnly) {
- /* 4 No link or more than one entry */
- ODM_CfoTrackingReset(pDM_Odm);
- } else {
- /* 3 1. CFO Tracking */
- /* 4 1.1 No new packet */
- if (pCfoTrack->packetCount == pCfoTrack->packetCount_pre)
- return;
-
- pCfoTrack->packetCount_pre = pCfoTrack->packetCount;
-
- /* 4 1.2 Calculate CFO */
- CFO_kHz_A = (int)(pCfoTrack->CFO_tail[0] * 3125) / 1280;
-
- CFO_ave = CFO_kHz_A;
-
- /* 4 1.3 Avoid abnormal large CFO */
- CFO_ave_diff =
- (pCfoTrack->CFO_ave_pre >= CFO_ave) ?
- (pCfoTrack->CFO_ave_pre-CFO_ave) :
- (CFO_ave-pCfoTrack->CFO_ave_pre);
-
- if (
- CFO_ave_diff > 20 &&
- pCfoTrack->largeCFOHit == 0 &&
- !pCfoTrack->bAdjust
- ) {
- pCfoTrack->largeCFOHit = 1;
- return;
- }
-
- pCfoTrack->largeCFOHit = 0;
- pCfoTrack->CFO_ave_pre = CFO_ave;
-
- /* 4 1.4 Dynamic Xtal threshold */
- if (!pCfoTrack->bAdjust) {
- if (CFO_ave > CFO_TH_XTAL_HIGH || CFO_ave < (-CFO_TH_XTAL_HIGH))
- pCfoTrack->bAdjust = true;
- } else {
- if (CFO_ave < CFO_TH_XTAL_LOW && CFO_ave > (-CFO_TH_XTAL_LOW))
- pCfoTrack->bAdjust = false;
- }
-
- /* 4 1.5 BT case: Disable CFO tracking */
- if (pDM_Odm->bBtEnabled) {
- pCfoTrack->bAdjust = false;
- odm_SetCrystalCap(pDM_Odm, pCfoTrack->DefXCap);
- }
-
- /* 4 1.6 Big jump */
- if (pCfoTrack->bAdjust) {
- if (CFO_ave > CFO_TH_XTAL_LOW)
- Adjust_Xtal = Adjust_Xtal + ((CFO_ave - CFO_TH_XTAL_LOW) >> 2);
- else if (CFO_ave < (-CFO_TH_XTAL_LOW))
- Adjust_Xtal = Adjust_Xtal + ((CFO_TH_XTAL_LOW - CFO_ave) >> 2);
- }
-
- /* 4 1.7 Adjust Crystal Cap. */
- if (pCfoTrack->bAdjust) {
- if (CFO_ave > CFO_TH_XTAL_LOW)
- CrystalCap = CrystalCap + Adjust_Xtal;
- else if (CFO_ave < (-CFO_TH_XTAL_LOW))
- CrystalCap = CrystalCap - Adjust_Xtal;
-
- if (CrystalCap > 0x3f)
- CrystalCap = 0x3f;
- else if (CrystalCap < 0)
- CrystalCap = 0;
-
- odm_SetCrystalCap(pDM_Odm, (u8)CrystalCap);
- }
-
- /* 3 2. Dynamic ATC switch */
- if (CFO_ave < CFO_TH_ATC && CFO_ave > -CFO_TH_ATC)
- odm_SetATCStatus(pDM_Odm, false);
- else
- odm_SetATCStatus(pDM_Odm, true);
- }
-}
-
-void odm_parsing_cfo(void *dm_void, void *pkt_info_void, s8 *cfotail)
-{
- struct dm_odm_t *dm_odm = (struct dm_odm_t *)dm_void;
- struct odm_packet_info *pkt_info = pkt_info_void;
- struct cfo_tracking *cfo_track = &dm_odm->DM_CfoTrack;
- u8 i;
-
- if (!(dm_odm->SupportAbility & ODM_BB_CFO_TRACKING))
- return;
-
- if (pkt_info->station_id != 0) {
- /*
- * 3 Update CFO report for path-A & path-B
- * Only paht-A and path-B have CFO tail and short CFO
- */
- for (i = RF_PATH_A; i <= RF_PATH_B; i++)
- cfo_track->CFO_tail[i] = (int)cfotail[i];
-
- /* 3 Update packet counter */
- if (cfo_track->packetCount == 0xffffffff)
- cfo_track->packetCount = 0;
- else
- cfo_track->packetCount++;
- }
-}
diff --git a/drivers/staging/rtl8723bs/hal/odm_CfoTracking.h b/drivers/staging/rtl8723bs/hal/odm_CfoTracking.h
deleted file mode 100644
index 8fa6d9ec5880..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_CfoTracking.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __ODMCFOTRACK_H__
-#define __ODMCFOTRACK_H__
-
-#define CFO_TH_XTAL_HIGH 20 /* kHz */
-#define CFO_TH_XTAL_LOW 10 /* kHz */
-#define CFO_TH_ATC 80 /* kHz */
-
-struct cfo_tracking {
- bool bATCStatus;
- bool largeCFOHit;
- bool bAdjust;
- u8 CrystalCap;
- u8 DefXCap;
- int CFO_tail[2];
- int CFO_ave_pre;
- u32 packetCount;
- u32 packetCount_pre;
-
- bool bForceXtalCap;
- bool bReset;
-};
-
-void ODM_CfoTrackingReset(void *pDM_VOID
-);
-
-void ODM_CfoTrackingInit(void *pDM_VOID);
-
-void ODM_CfoTracking(void *pDM_VOID);
-
-void odm_parsing_cfo(void *pDM_VOID, void *pPktinfo_VOID, s8 *pcfotail);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/odm_DIG.c b/drivers/staging/rtl8723bs/hal/odm_DIG.c
deleted file mode 100644
index c862c86b7695..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_DIG.c
+++ /dev/null
@@ -1,799 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-
-void odm_NHMCounterStatisticsInit(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- /* PHY parameters initialize for n series */
- rtw_write16(pDM_Odm->Adapter, ODM_REG_NHM_TIMER_11N+2, 0x2710); /* 0x894[31:16]= 0x2710 Time duration for NHM unit: 4us, 0x2710 =40ms */
- /* rtw_write16(pDM_Odm->Adapter, ODM_REG_NHM_TIMER_11N+2, 0x4e20); 0x894[31:16]= 0x4e20 Time duration for NHM unit: 4us, 0x4e20 =80ms */
- rtw_write16(pDM_Odm->Adapter, ODM_REG_NHM_TH9_TH10_11N+2, 0xffff); /* 0x890[31:16]= 0xffff th_9, th_10 */
- /* rtw_write32(pDM_Odm->Adapter, ODM_REG_NHM_TH3_TO_TH0_11N, 0xffffff5c); 0x898 = 0xffffff5c th_3, th_2, th_1, th_0 */
- rtw_write32(pDM_Odm->Adapter, ODM_REG_NHM_TH3_TO_TH0_11N, 0xffffff52); /* 0x898 = 0xffffff52 th_3, th_2, th_1, th_0 */
- rtw_write32(pDM_Odm->Adapter, ODM_REG_NHM_TH7_TO_TH4_11N, 0xffffffff); /* 0x89c = 0xffffffff th_7, th_6, th_5, th_4 */
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG_FPGA0_IQK_11N, bMaskByte0, 0xff); /* 0xe28[7:0]= 0xff th_8 */
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG_NHM_TH9_TH10_11N, BIT(10)|BIT(9)|BIT(8), 0x7); /* 0x890[9:8]=3 enable CCX */
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG_OFDM_FA_RSTC_11N, BIT(7), 0x1); /* 0xc0c[7]= 1 max power among all RX ants */
-}
-
-void odm_NHMCounterStatistics(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- /* Get NHM report */
- odm_GetNHMCounterStatistics(pDM_Odm);
-
- /* Reset NHM counter */
- odm_NHMCounterStatisticsReset(pDM_Odm);
-}
-
-void odm_GetNHMCounterStatistics(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- u32 value32 = 0;
-
- value32 = PHY_QueryBBReg(pDM_Odm->Adapter, ODM_REG_NHM_CNT_11N, bMaskDWord);
-
- pDM_Odm->NHM_cnt_0 = (u8)(value32 & bMaskByte0);
-}
-
-void odm_NHMCounterStatisticsReset(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG_NHM_TH9_TH10_11N, BIT(1), 0);
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG_NHM_TH9_TH10_11N, BIT(1), 1);
-}
-
-void odm_NHMBBInit(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- pDM_Odm->adaptivity_flag = false;
- pDM_Odm->tolerance_cnt = 3;
- pDM_Odm->NHMLastTxOkcnt = 0;
- pDM_Odm->NHMLastRxOkcnt = 0;
- pDM_Odm->NHMCurTxOkcnt = 0;
- pDM_Odm->NHMCurRxOkcnt = 0;
-}
-
-/* */
-void odm_NHMBB(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- /* u8 test_status; */
- /* struct false_ALARM_STATISTICS *pFalseAlmCnt = &pDM_Odm->FalseAlmCnt; */
-
- pDM_Odm->NHMCurTxOkcnt =
- *(pDM_Odm->pNumTxBytesUnicast)-pDM_Odm->NHMLastTxOkcnt;
- pDM_Odm->NHMCurRxOkcnt =
- *(pDM_Odm->pNumRxBytesUnicast)-pDM_Odm->NHMLastRxOkcnt;
- pDM_Odm->NHMLastTxOkcnt =
- *(pDM_Odm->pNumTxBytesUnicast);
- pDM_Odm->NHMLastRxOkcnt =
- *(pDM_Odm->pNumRxBytesUnicast);
-
- if ((pDM_Odm->NHMCurTxOkcnt) + 1 > (u64)(pDM_Odm->NHMCurRxOkcnt<<2) + 1) { /* Tx > 4*Rx possible for adaptivity test */
- if (pDM_Odm->NHM_cnt_0 >= 190 || pDM_Odm->adaptivity_flag) {
- /* Enable EDCCA since it is possible running Adaptivity testing */
- /* test_status = 1; */
- pDM_Odm->adaptivity_flag = true;
- pDM_Odm->tolerance_cnt = 0;
- } else {
- if (pDM_Odm->tolerance_cnt < 3)
- pDM_Odm->tolerance_cnt = pDM_Odm->tolerance_cnt + 1;
- else
- pDM_Odm->tolerance_cnt = 4;
- /* test_status = 5; */
- if (pDM_Odm->tolerance_cnt > 3) {
- /* test_status = 3; */
- pDM_Odm->adaptivity_flag = false;
- }
- }
- } else { /* TX<RX */
- if (pDM_Odm->adaptivity_flag && pDM_Odm->NHM_cnt_0 <= 200) {
- /* test_status = 2; */
- pDM_Odm->tolerance_cnt = 0;
- } else {
- if (pDM_Odm->tolerance_cnt < 3)
- pDM_Odm->tolerance_cnt = pDM_Odm->tolerance_cnt + 1;
- else
- pDM_Odm->tolerance_cnt = 4;
- /* test_status = 5; */
- if (pDM_Odm->tolerance_cnt > 3) {
- /* test_status = 4; */
- pDM_Odm->adaptivity_flag = false;
- }
- }
- }
-}
-
-void odm_SearchPwdBLowerBound(void *pDM_VOID, u8 IGI_target)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- u32 value32 = 0;
- u8 cnt, IGI;
- bool bAdjust = true;
- s8 TH_L2H_dmc, TH_H2L_dmc;
- s8 Diff;
-
- IGI = 0x50; /* find H2L, L2H lower bound */
- ODM_Write_DIG(pDM_Odm, IGI);
-
- Diff = IGI_target-(s8)IGI;
- TH_L2H_dmc = pDM_Odm->TH_L2H_ini + Diff;
- if (TH_L2H_dmc > 10)
- TH_L2H_dmc = 10;
- TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, bMaskByte0, (u8)TH_L2H_dmc);
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, bMaskByte2, (u8)TH_H2L_dmc);
-
- mdelay(5);
-
- while (bAdjust) {
- for (cnt = 0; cnt < 20; cnt++) {
- value32 = PHY_QueryBBReg(pDM_Odm->Adapter, ODM_REG_RPT_11N, bMaskDWord);
-
- if (value32 & BIT(30))
- pDM_Odm->txEdcca1 = pDM_Odm->txEdcca1 + 1;
- else if (value32 & BIT(29))
- pDM_Odm->txEdcca1 = pDM_Odm->txEdcca1 + 1;
- else
- pDM_Odm->txEdcca0 = pDM_Odm->txEdcca0 + 1;
- }
-
- if (pDM_Odm->txEdcca1 > 5) {
- IGI = IGI-1;
- TH_L2H_dmc = TH_L2H_dmc + 1;
- if (TH_L2H_dmc > 10)
- TH_L2H_dmc = 10;
- TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, bMaskByte0, (u8)TH_L2H_dmc);
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, bMaskByte2, (u8)TH_H2L_dmc);
-
- pDM_Odm->TxHangFlg = true;
- pDM_Odm->txEdcca1 = 0;
- pDM_Odm->txEdcca0 = 0;
-
- if (TH_L2H_dmc == 10) {
- bAdjust = false;
- pDM_Odm->TxHangFlg = false;
- pDM_Odm->txEdcca1 = 0;
- pDM_Odm->txEdcca0 = 0;
- pDM_Odm->H2L_lb = TH_H2L_dmc;
- pDM_Odm->L2H_lb = TH_L2H_dmc;
- pDM_Odm->Adaptivity_IGI_upper = IGI;
- }
- } else {
- bAdjust = false;
- pDM_Odm->TxHangFlg = false;
- pDM_Odm->txEdcca1 = 0;
- pDM_Odm->txEdcca0 = 0;
- pDM_Odm->H2L_lb = TH_H2L_dmc;
- pDM_Odm->L2H_lb = TH_L2H_dmc;
- pDM_Odm->Adaptivity_IGI_upper = IGI;
- }
- }
-}
-
-void odm_AdaptivityInit(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- if (!pDM_Odm->Carrier_Sense_enable)
- pDM_Odm->TH_L2H_ini = 0xf7; /* -7 */
- else
- pDM_Odm->TH_L2H_ini = 0xa;
-
- pDM_Odm->AdapEn_RSSI = 20;
- pDM_Odm->TH_EDCCA_HL_diff = 7;
-
- pDM_Odm->IGI_Base = 0x32;
- pDM_Odm->IGI_target = 0x1c;
- pDM_Odm->ForceEDCCA = 0;
- pDM_Odm->NHM_disable = false;
- pDM_Odm->TxHangFlg = true;
- pDM_Odm->txEdcca0 = 0;
- pDM_Odm->txEdcca1 = 0;
- pDM_Odm->H2L_lb = 0;
- pDM_Odm->L2H_lb = 0;
- pDM_Odm->Adaptivity_IGI_upper = 0;
- odm_NHMBBInit(pDM_Odm);
-
- PHY_SetBBReg(pDM_Odm->Adapter, REG_RD_CTRL, BIT(11), 1); /* stop counting if EDCCA is asserted */
-}
-
-void odm_Adaptivity(void *pDM_VOID, u8 IGI)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- s8 TH_L2H_dmc, TH_H2L_dmc;
- s8 Diff, IGI_target;
- bool EDCCA_State = false;
-
- if (!(pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY))
- return;
-
- if (*pDM_Odm->pBandWidth == ODM_BW20M) /* CHANNEL_WIDTH_20 */
- IGI_target = pDM_Odm->IGI_Base;
- else if (*pDM_Odm->pBandWidth == ODM_BW40M)
- IGI_target = pDM_Odm->IGI_Base + 2;
- else
- IGI_target = pDM_Odm->IGI_Base;
- pDM_Odm->IGI_target = (u8) IGI_target;
-
- /* Search pwdB lower bound */
- if (pDM_Odm->TxHangFlg) {
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG_DBG_RPT_11N, bMaskDWord, 0x208);
- odm_SearchPwdBLowerBound(pDM_Odm, pDM_Odm->IGI_target);
- }
-
- if ((!pDM_Odm->bLinked) || (*pDM_Odm->pChannel > 149)) { /* Band4 doesn't need adaptivity */
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, bMaskByte0, 0x7f);
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, bMaskByte2, 0x7f);
- return;
- }
-
- if (!pDM_Odm->ForceEDCCA) {
- if (pDM_Odm->RSSI_Min > pDM_Odm->AdapEn_RSSI)
- EDCCA_State = true;
- else if (pDM_Odm->RSSI_Min < (pDM_Odm->AdapEn_RSSI - 5))
- EDCCA_State = false;
- } else
- EDCCA_State = true;
-
- if (pDM_Odm->bLinked &&
- !pDM_Odm->Carrier_Sense_enable &&
- !pDM_Odm->NHM_disable &&
- !pDM_Odm->TxHangFlg)
- odm_NHMBB(pDM_Odm);
-
- if (EDCCA_State) {
- Diff = IGI_target-(s8)IGI;
- TH_L2H_dmc = pDM_Odm->TH_L2H_ini + Diff;
- if (TH_L2H_dmc > 10)
- TH_L2H_dmc = 10;
-
- TH_H2L_dmc = TH_L2H_dmc - pDM_Odm->TH_EDCCA_HL_diff;
-
- /* replace lower bound to prevent EDCCA always equal */
- if (TH_H2L_dmc < pDM_Odm->H2L_lb)
- TH_H2L_dmc = pDM_Odm->H2L_lb;
- if (TH_L2H_dmc < pDM_Odm->L2H_lb)
- TH_L2H_dmc = pDM_Odm->L2H_lb;
- } else {
- TH_L2H_dmc = 0x7f;
- TH_H2L_dmc = 0x7f;
- }
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, bMaskByte0, (u8)TH_L2H_dmc);
- PHY_SetBBReg(pDM_Odm->Adapter, rOFDM0_ECCAThreshold, bMaskByte2, (u8)TH_H2L_dmc);
-}
-
-void ODM_Write_DIG(void *pDM_VOID, u8 CurrentIGI)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable;
-
- if (pDM_DigTable->bStopDIG)
- return;
-
- if (pDM_DigTable->CurIGValue != CurrentIGI) {
- /* 1 Check initial gain by upper bound */
- if (!pDM_DigTable->bPSDInProgress) {
- if (CurrentIGI > pDM_DigTable->rx_gain_range_max)
- CurrentIGI = pDM_DigTable->rx_gain_range_max;
-
- }
-
- /* 1 Set IGI value */
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG(IGI_A), ODM_BIT(IGI), CurrentIGI);
-
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG(IGI_B), ODM_BIT(IGI), CurrentIGI);
-
- pDM_DigTable->CurIGValue = CurrentIGI;
- }
-
-}
-
-bool odm_DigAbort(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- /* SupportAbility */
- if (!(pDM_Odm->SupportAbility & ODM_BB_FA_CNT))
- return true;
-
- /* SupportAbility */
- if (!(pDM_Odm->SupportAbility & ODM_BB_DIG))
- return true;
-
- /* ScanInProcess */
- if (*(pDM_Odm->pbScanInProcess))
- return true;
-
- /* add by Neil Chen to avoid PSD is processing */
- if (!pDM_Odm->bDMInitialGainEnable)
- return true;
-
- return false;
-}
-
-void odm_DIGInit(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable;
-
- pDM_DigTable->bStopDIG = false;
- pDM_DigTable->bPSDInProgress = false;
- pDM_DigTable->CurIGValue = (u8) PHY_QueryBBReg(pDM_Odm->Adapter, ODM_REG(IGI_A), ODM_BIT(IGI));
- pDM_DigTable->RssiLowThresh = DM_DIG_THRESH_LOW;
- pDM_DigTable->RssiHighThresh = DM_DIG_THRESH_HIGH;
- pDM_DigTable->FALowThresh = DMfalseALARM_THRESH_LOW;
- pDM_DigTable->FAHighThresh = DMfalseALARM_THRESH_HIGH;
- pDM_DigTable->BackoffVal = DM_DIG_BACKOFF_DEFAULT;
- pDM_DigTable->BackoffVal_range_max = DM_DIG_BACKOFF_MAX;
- pDM_DigTable->BackoffVal_range_min = DM_DIG_BACKOFF_MIN;
- pDM_DigTable->PreCCK_CCAThres = 0xFF;
- pDM_DigTable->CurCCK_CCAThres = 0x83;
- pDM_DigTable->ForbiddenIGI = DM_DIG_MIN_NIC;
- pDM_DigTable->LargeFAHit = 0;
- pDM_DigTable->Recover_cnt = 0;
- pDM_DigTable->bMediaConnect_0 = false;
- pDM_DigTable->bMediaConnect_1 = false;
-
- /* To Initialize pDM_Odm->bDMInitialGainEnable == false to avoid DIG error */
- pDM_Odm->bDMInitialGainEnable = true;
-
- pDM_DigTable->DIG_Dynamic_MIN_0 = DM_DIG_MIN_NIC;
- pDM_DigTable->DIG_Dynamic_MIN_1 = DM_DIG_MIN_NIC;
-
- /* To Initi BT30 IGI */
- pDM_DigTable->BT30_CurIGI = 0x32;
-
- pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;
- pDM_DigTable->rx_gain_range_min = DM_DIG_MIN_NIC;
-}
-
-void odm_DIG(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- /* Common parameters */
- struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable;
- struct false_ALARM_STATISTICS *pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;
- bool FirstConnect, FirstDisConnect;
- u8 DIG_MaxOfMin, DIG_Dynamic_MIN;
- u8 dm_dig_max, dm_dig_min;
- u8 CurrentIGI = pDM_DigTable->CurIGValue;
- u8 offset;
- u32 dm_FA_thres[3];
- u8 Adap_IGI_Upper = 0;
- u32 TxTp = 0, RxTp = 0;
- bool bDFSBand = false;
- bool bPerformance = true, bFirstTpTarget = false, bFirstCoverage = false;
-
- if (odm_DigAbort(pDM_Odm))
- return;
-
- if (pDM_Odm->adaptivity_flag)
- Adap_IGI_Upper = pDM_Odm->Adaptivity_IGI_upper;
-
- /* 1 Update status */
- 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 */
- /* 2 For WIN\CE */
- dm_dig_max = 0x5A;
- dm_dig_min = DM_DIG_MIN_NIC;
- DIG_MaxOfMin = DM_DIG_MAX_AP;
-
- /* 1 Adjust boundary by RSSI */
- if (pDM_Odm->bLinked && bPerformance) {
- /* 2 Modify DIG upper bound */
- /* 4 Modify DIG upper bound for 92E, 8723A\B, 8821 & 8812 BT */
- if (pDM_Odm->bBtLimitedDig == 1)
- offset = 10;
- else
- offset = 15;
-
- if ((pDM_Odm->RSSI_Min + offset) > dm_dig_max)
- pDM_DigTable->rx_gain_range_max = dm_dig_max;
- else if ((pDM_Odm->RSSI_Min + offset) < dm_dig_min)
- pDM_DigTable->rx_gain_range_max = dm_dig_min;
- else
- pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + offset;
-
- /* 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 {
- pDM_DigTable->rx_gain_range_max = dm_dig_max;
- DIG_Dynamic_MIN = dm_dig_min;
- }
-
- /* 1 Force Lower Bound for AntDiv */
- if (pDM_Odm->bLinked && !pDM_Odm->bOneEntryOnly) {
- if (pDM_Odm->SupportAbility & ODM_BB_ANT_DIV) {
- if (
- pDM_Odm->AntDivType == CG_TRX_HW_ANTDIV ||
- pDM_Odm->AntDivType == CG_TRX_SMART_ANTDIV ||
- pDM_Odm->AntDivType == S0S1_SW_ANTDIV
- ) {
- if (pDM_DigTable->AntDiv_RSSI_max > DIG_MaxOfMin)
- DIG_Dynamic_MIN = DIG_MaxOfMin;
- else
- DIG_Dynamic_MIN = (u8) pDM_DigTable->AntDiv_RSSI_max;
- }
- }
- }
-
- /* 1 Modify DIG lower bound, deal with abnormal case */
- /* 2 Abnormal false alarm case */
- if (FirstDisConnect) {
- pDM_DigTable->rx_gain_range_min = DIG_Dynamic_MIN;
- pDM_DigTable->ForbiddenIGI = DIG_Dynamic_MIN;
- } else
- pDM_DigTable->rx_gain_range_min =
- odm_ForbiddenIGICheck(pDM_Odm, DIG_Dynamic_MIN, CurrentIGI);
-
- if (pDM_Odm->bLinked && !FirstConnect) {
- if (
- (pDM_Odm->PhyDbgInfo.NumQryBeaconPkt < 5) &&
- pDM_Odm->bsta_state
- ) {
- pDM_DigTable->rx_gain_range_min = dm_dig_min;
- }
- }
-
- /* 2 Abnormal lower bound case */
- if (pDM_DigTable->rx_gain_range_min > pDM_DigTable->rx_gain_range_max)
- pDM_DigTable->rx_gain_range_min = pDM_DigTable->rx_gain_range_max;
-
- /* 1 False alarm threshold decision */
- odm_FAThresholdCheck(pDM_Odm, bDFSBand, bPerformance, RxTp, TxTp, dm_FA_thres);
-
- /* 1 Adjust initial gain by false alarm */
- if (pDM_Odm->bLinked && bPerformance) {
-
- if (bFirstTpTarget || FirstConnect) {
- pDM_DigTable->LargeFAHit = 0;
-
- if (pDM_Odm->RSSI_Min < DIG_MaxOfMin) {
- if (CurrentIGI < pDM_Odm->RSSI_Min)
- CurrentIGI = pDM_Odm->RSSI_Min;
- } else {
- if (CurrentIGI < DIG_MaxOfMin)
- CurrentIGI = DIG_MaxOfMin;
- }
-
- } else {
- if (pFalseAlmCnt->Cnt_all > dm_FA_thres[2])
- CurrentIGI = CurrentIGI + 4;
- else if (pFalseAlmCnt->Cnt_all > dm_FA_thres[1])
- CurrentIGI = CurrentIGI + 2;
- else if (pFalseAlmCnt->Cnt_all < dm_FA_thres[0])
- CurrentIGI = CurrentIGI - 2;
-
- if (
- (pDM_Odm->PhyDbgInfo.NumQryBeaconPkt < 5) &&
- (pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH1) &&
- (pDM_Odm->bsta_state)
- ) {
- CurrentIGI = pDM_DigTable->rx_gain_range_min;
- }
- }
- } else {
-
- if (FirstDisConnect || bFirstCoverage) {
- CurrentIGI = dm_dig_min;
- } else {
- if (pFalseAlmCnt->Cnt_all > dm_FA_thres[2])
- CurrentIGI = CurrentIGI + 4;
- else if (pFalseAlmCnt->Cnt_all > dm_FA_thres[1])
- CurrentIGI = CurrentIGI + 2;
- else if (pFalseAlmCnt->Cnt_all < dm_FA_thres[0])
- CurrentIGI = CurrentIGI - 2;
- }
- }
-
- /* 1 Check initial gain by upper/lower bound */
- if (CurrentIGI < pDM_DigTable->rx_gain_range_min)
- CurrentIGI = pDM_DigTable->rx_gain_range_min;
-
- if (CurrentIGI > pDM_DigTable->rx_gain_range_max)
- CurrentIGI = pDM_DigTable->rx_gain_range_max;
-
- /* 1 Force upper bound and lower bound for adaptivity */
- if (pDM_Odm->SupportAbility & ODM_BB_ADAPTIVITY &&
- pDM_Odm->adaptivity_flag) {
- if (CurrentIGI > Adap_IGI_Upper)
- CurrentIGI = Adap_IGI_Upper;
-
- if (pDM_Odm->IGI_LowerBound != 0) {
- if (CurrentIGI < pDM_Odm->IGI_LowerBound)
- CurrentIGI = pDM_Odm->IGI_LowerBound;
- }
- }
-
- /* 1 Update status */
- if (pDM_Odm->bBtHsOperation) {
- if (pDM_Odm->bLinked) {
- if (pDM_DigTable->BT30_CurIGI > (CurrentIGI))
- ODM_Write_DIG(pDM_Odm, CurrentIGI);
- else
- ODM_Write_DIG(pDM_Odm, pDM_DigTable->BT30_CurIGI);
-
- pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;
- pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;
- } else {
- if (pDM_Odm->bLinkInProcess)
- ODM_Write_DIG(pDM_Odm, 0x1c);
- else if (pDM_Odm->bBtConnectProcess)
- ODM_Write_DIG(pDM_Odm, 0x28);
- else
- ODM_Write_DIG(pDM_Odm, pDM_DigTable->BT30_CurIGI);/* ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue); */
- }
- } else { /* BT is not using */
- 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;
- }
-}
-
-void odm_DIGbyRSSI_LPS(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct false_ALARM_STATISTICS *pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;
-
- u8 RSSI_Lower = DM_DIG_MIN_NIC; /* 0x1E or 0x1C */
- u8 CurrentIGI = pDM_Odm->RSSI_Min;
-
- CurrentIGI = CurrentIGI+RSSI_OFFSET_DIG;
-
- /* Using FW PS mode to make IGI */
- /* Adjust by FA in LPS MODE */
- if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH2_LPS)
- CurrentIGI = CurrentIGI+4;
- else if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH1_LPS)
- CurrentIGI = CurrentIGI+2;
- else if (pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH0_LPS)
- CurrentIGI = CurrentIGI-2;
-
- /* Lower bound checking */
-
- /* RSSI Lower bound check */
- RSSI_Lower = max(pDM_Odm->RSSI_Min - 10, DM_DIG_MIN_NIC);
-
- /* Upper and Lower Bound checking */
- if (CurrentIGI > DM_DIG_MAX_NIC)
- CurrentIGI = DM_DIG_MAX_NIC;
- else if (CurrentIGI < RSSI_Lower)
- CurrentIGI = RSSI_Lower;
-
- ODM_Write_DIG(pDM_Odm, CurrentIGI);
- /* ODM_Write_DIG(pDM_Odm, pDM_DigTable->CurIGValue); */
-}
-
-/* 3 ============================================================ */
-/* 3 FALSE ALARM CHECK */
-/* 3 ============================================================ */
-
-void odm_FalseAlarmCounterStatistics(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct false_ALARM_STATISTICS *FalseAlmCnt = &pDM_Odm->FalseAlmCnt;
- u32 ret_value;
-
- if (!(pDM_Odm->SupportAbility & ODM_BB_FA_CNT))
- return;
-
- /* hold ofdm counter */
- /* hold page C counter */
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG_OFDM_FA_HOLDC_11N, BIT(31), 1);
- /* hold page D counter */
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG_OFDM_FA_RSTD_11N, BIT(31), 1);
-
- ret_value = PHY_QueryBBReg(
- pDM_Odm->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 = PHY_QueryBBReg(
- pDM_Odm->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 = PHY_QueryBBReg(
- pDM_Odm->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 = PHY_QueryBBReg(
- pDM_Odm->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;
-
- {
- /* hold cck counter */
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG_CCK_FA_RST_11N, BIT(12), 1);
- PHY_SetBBReg(pDM_Odm->Adapter, ODM_REG_CCK_FA_RST_11N, BIT(14), 1);
-
- ret_value = PHY_QueryBBReg(
- pDM_Odm->Adapter, ODM_REG_CCK_FA_LSB_11N, bMaskByte0
- );
- FalseAlmCnt->Cnt_Cck_fail = ret_value;
-
- ret_value = PHY_QueryBBReg(
- pDM_Odm->Adapter, ODM_REG_CCK_FA_MSB_11N, bMaskByte3
- );
- FalseAlmCnt->Cnt_Cck_fail += (ret_value&0xff)<<8;
-
- ret_value = PHY_QueryBBReg(
- pDM_Odm->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;
-}
-
-void odm_FAThresholdCheck(
- void *pDM_VOID,
- bool bDFSBand,
- bool bPerformance,
- u32 RxTp,
- u32 TxTp,
- u32 *dm_FA_thres
-)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- if (pDM_Odm->bLinked && (bPerformance || bDFSBand)) {
- /* For NIC */
- dm_FA_thres[0] = DM_DIG_FA_TH0;
- dm_FA_thres[1] = DM_DIG_FA_TH1;
- dm_FA_thres[2] = DM_DIG_FA_TH2;
- } else {
- dm_FA_thres[0] = 2000;
- dm_FA_thres[1] = 4000;
- dm_FA_thres[2] = 5000;
- }
-}
-
-u8 odm_ForbiddenIGICheck(void *pDM_VOID, u8 DIG_Dynamic_MIN, u8 CurrentIGI)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable;
- struct false_ALARM_STATISTICS *pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;
- u8 rx_gain_range_min = pDM_DigTable->rx_gain_range_min;
-
- if (pFalseAlmCnt->Cnt_all > 10000) {
- if (pDM_DigTable->LargeFAHit != 3)
- pDM_DigTable->LargeFAHit++;
-
- /* if (pDM_DigTable->ForbiddenIGI < pDM_DigTable->CurIGValue) */
- if (pDM_DigTable->ForbiddenIGI < CurrentIGI) {
- pDM_DigTable->ForbiddenIGI = CurrentIGI;
- /* pDM_DigTable->ForbiddenIGI = pDM_DigTable->CurIGValue; */
- pDM_DigTable->LargeFAHit = 1;
- }
-
- if (pDM_DigTable->LargeFAHit >= 3) {
- if ((pDM_DigTable->ForbiddenIGI + 2) > pDM_DigTable->rx_gain_range_max)
- rx_gain_range_min = pDM_DigTable->rx_gain_range_max;
- else
- rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 2);
- pDM_DigTable->Recover_cnt = 1800;
- }
- } else {
- if (pDM_DigTable->Recover_cnt != 0) {
- pDM_DigTable->Recover_cnt--;
- } else {
- if (pDM_DigTable->LargeFAHit < 3) {
- if ((pDM_DigTable->ForbiddenIGI - 2) < DIG_Dynamic_MIN) { /* DM_DIG_MIN) */
- pDM_DigTable->ForbiddenIGI = DIG_Dynamic_MIN; /* DM_DIG_MIN; */
- rx_gain_range_min = DIG_Dynamic_MIN; /* DM_DIG_MIN; */
- } else {
- pDM_DigTable->ForbiddenIGI -= 2;
- rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 2);
- }
- } else
- pDM_DigTable->LargeFAHit = 0;
- }
- }
-
- return rx_gain_range_min;
-
-}
-
-/* 3 ============================================================ */
-/* 3 CCK Packet Detect Threshold */
-/* 3 ============================================================ */
-
-void odm_CCKPacketDetectionThresh(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct false_ALARM_STATISTICS *FalseAlmCnt = &pDM_Odm->FalseAlmCnt;
- u8 CurCCK_CCAThres;
-
- if (
- !(pDM_Odm->SupportAbility & ODM_BB_CCK_PD) ||
- !(pDM_Odm->SupportAbility & ODM_BB_FA_CNT)
- ) {
- return;
- }
-
- if (pDM_Odm->ExtLNA)
- return;
-
- 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);
-}
-
-void ODM_Write_CCK_CCA_Thres(void *pDM_VOID, u8 CurCCK_CCAThres)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable;
-
- /* modify by Guo.Mingzhi 2012-01-03 */
- if (pDM_DigTable->CurCCK_CCAThres != CurCCK_CCAThres)
- rtw_write8(pDM_Odm->Adapter, ODM_REG(CCK_CCA), CurCCK_CCAThres);
-
- pDM_DigTable->PreCCK_CCAThres = pDM_DigTable->CurCCK_CCAThres;
- pDM_DigTable->CurCCK_CCAThres = CurCCK_CCAThres;
-}
diff --git a/drivers/staging/rtl8723bs/hal/odm_DIG.h b/drivers/staging/rtl8723bs/hal/odm_DIG.h
deleted file mode 100644
index 5517ef79bdf5..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_DIG.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __ODMDIG_H__
-#define __ODMDIG_H__
-
-struct dig_t { /* _Dynamic_Initial_Gain_Threshold_ */
- bool bStopDIG;
- bool bPSDInProgress;
-
- u8 Dig_Enable_Flag;
- u8 Dig_Ext_Port_Stage;
-
- int RssiLowThresh;
- int RssiHighThresh;
-
- u32 FALowThresh;
- u32 FAHighThresh;
-
- u8 CurSTAConnectState;
- u8 PreSTAConnectState;
- u8 CurMultiSTAConnectState;
-
- u8 PreIGValue;
- u8 CurIGValue;
- u8 BackupIGValue; /* MP DIG */
- u8 BT30_CurIGI;
- u8 IGIBackup;
-
- s8 BackoffVal;
- s8 BackoffVal_range_max;
- s8 BackoffVal_range_min;
- u8 rx_gain_range_max;
- u8 rx_gain_range_min;
- u8 Rssi_val_min;
-
- u8 PreCCK_CCAThres;
- u8 CurCCK_CCAThres;
- u8 PreCCKPDState;
- u8 CurCCKPDState;
- u8 CCKPDBackup;
-
- u8 LargeFAHit;
- u8 ForbiddenIGI;
- u32 Recover_cnt;
-
- u8 DIG_Dynamic_MIN_0;
- u8 DIG_Dynamic_MIN_1;
- bool bMediaConnect_0;
- bool bMediaConnect_1;
-
- u32 AntDiv_RSSI_max;
- u32 RSSI_max;
-
- u8 *pbP2pLinkInProgress;
-};
-
-struct false_ALARM_STATISTICS {
- u32 Cnt_Parity_Fail;
- u32 Cnt_Rate_Illegal;
- u32 Cnt_Crc8_fail;
- u32 Cnt_Mcs_fail;
- u32 Cnt_Ofdm_fail;
- u32 Cnt_Ofdm_fail_pre; /* For RTL8881A */
- 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 DM_DIG_THRESH_HIGH 40
-#define DM_DIG_THRESH_LOW 35
-
-#define DMfalseALARM_THRESH_LOW 400
-#define DMfalseALARM_THRESH_HIGH 1000
-
-#define DM_DIG_MAX_NIC 0x3e
-#define DM_DIG_MIN_NIC 0x1e /* 0x22//0x1c */
-#define DM_DIG_MAX_OF_MIN_NIC 0x3e
-
-#define DM_DIG_MAX_AP 0x3e
-#define DM_DIG_MIN_AP 0x1c
-#define DM_DIG_MAX_OF_MIN 0x2A /* 0x32 */
-#define DM_DIG_MIN_AP_DFS 0x20
-
-#define DM_DIG_MAX_NIC_HP 0x46
-#define DM_DIG_MIN_NIC_HP 0x2e
-
-#define DM_DIG_MAX_AP_HP 0x42
-#define DM_DIG_MIN_AP_HP 0x30
-
-#define DM_DIG_FA_TH0 0x200/* 0x20 */
-
-#define DM_DIG_FA_TH1 0x300
-#define DM_DIG_FA_TH2 0x400
-/* this is for 92d */
-#define DM_DIG_FA_TH0_92D 0x100
-#define DM_DIG_FA_TH1_92D 0x400
-#define DM_DIG_FA_TH2_92D 0x600
-
-#define DM_DIG_BACKOFF_MAX 12
-#define DM_DIG_BACKOFF_MIN -4
-#define DM_DIG_BACKOFF_DEFAULT 10
-
-#define DM_DIG_FA_TH0_LPS 4 /* 4 in lps */
-#define DM_DIG_FA_TH1_LPS 15 /* 15 lps */
-#define DM_DIG_FA_TH2_LPS 30 /* 30 lps */
-#define RSSI_OFFSET_DIG 0x05
-
-void odm_NHMCounterStatisticsInit(void *pDM_VOID);
-
-void odm_NHMCounterStatistics(void *pDM_VOID);
-
-void odm_NHMBBInit(void *pDM_VOID);
-
-void odm_NHMBB(void *pDM_VOID);
-
-void odm_NHMCounterStatisticsReset(void *pDM_VOID);
-
-void odm_GetNHMCounterStatistics(void *pDM_VOID);
-
-void odm_SearchPwdBLowerBound(void *pDM_VOID, u8 IGI_target);
-
-void odm_AdaptivityInit(void *pDM_VOID);
-
-void odm_Adaptivity(void *pDM_VOID, u8 IGI);
-
-void ODM_Write_DIG(void *pDM_VOID, u8 CurrentIGI);
-
-void odm_DIGInit(void *pDM_VOID);
-
-void odm_DIG(void *pDM_VOID);
-
-void odm_DIGbyRSSI_LPS(void *pDM_VOID);
-
-void odm_FalseAlarmCounterStatistics(void *pDM_VOID);
-
-void odm_FAThresholdCheck(
- void *pDM_VOID,
- bool bDFSBand,
- bool bPerformance,
- u32 RxTp,
- u32 TxTp,
- u32 *dm_FA_thres
-);
-
-u8 odm_ForbiddenIGICheck(void *pDM_VOID, u8 DIG_Dynamic_MIN, u8 CurrentIGI);
-
-bool odm_DigAbort(void *pDM_VOID);
-
-void odm_CCKPacketDetectionThresh(void *pDM_VOID);
-
-void ODM_Write_CCK_CCA_Thres(void *pDM_VOID, u8 CurCCK_CCAThres);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/odm_DynamicBBPowerSaving.c b/drivers/staging/rtl8723bs/hal/odm_DynamicBBPowerSaving.c
deleted file mode 100644
index ba6357c6a7ed..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_DynamicBBPowerSaving.c
+++ /dev/null
@@ -1,81 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-
-void odm_DynamicBBPowerSavingInit(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct ps_t *pDM_PSTable = &pDM_Odm->DM_PSTable;
-
- pDM_PSTable->PreCCAState = CCA_MAX;
- pDM_PSTable->CurCCAState = CCA_MAX;
- pDM_PSTable->PreRFState = RF_MAX;
- pDM_PSTable->CurRFState = RF_MAX;
- pDM_PSTable->Rssi_val_min = 0;
- pDM_PSTable->initialize = 0;
-}
-
-void ODM_RF_Saving(void *pDM_VOID, u8 bForceInNormal)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct ps_t *pDM_PSTable = &pDM_Odm->DM_PSTable;
- u8 Rssi_Up_bound = 30;
- u8 Rssi_Low_bound = 25;
-
- if (pDM_Odm->PatchID == 40) { /* RT_CID_819x_FUNAI_TV */
- Rssi_Up_bound = 50;
- Rssi_Low_bound = 45;
- }
-
- if (pDM_PSTable->initialize == 0) {
-
- pDM_PSTable->Reg874 = (PHY_QueryBBReg(pDM_Odm->Adapter, 0x874, bMaskDWord)&0x1CC000)>>14;
- pDM_PSTable->RegC70 = (PHY_QueryBBReg(pDM_Odm->Adapter, 0xc70, bMaskDWord)&BIT(3))>>3;
- pDM_PSTable->Reg85C = (PHY_QueryBBReg(pDM_Odm->Adapter, 0x85c, bMaskDWord)&0xFF000000)>>24;
- pDM_PSTable->RegA74 = (PHY_QueryBBReg(pDM_Odm->Adapter, 0xa74, bMaskDWord)&0xF000)>>12;
- /* Reg818 = PHY_QueryBBReg(padapter, 0x818, bMaskDWord); */
- pDM_PSTable->initialize = 1;
- }
-
- if (!bForceInNormal) {
- if (pDM_Odm->RSSI_Min != 0xFF) {
- if (pDM_PSTable->PreRFState == RF_Normal) {
- if (pDM_Odm->RSSI_Min >= Rssi_Up_bound)
- pDM_PSTable->CurRFState = RF_Save;
- else
- pDM_PSTable->CurRFState = RF_Normal;
- } else {
- if (pDM_Odm->RSSI_Min <= Rssi_Low_bound)
- pDM_PSTable->CurRFState = RF_Normal;
- else
- pDM_PSTable->CurRFState = RF_Save;
- }
- } else
- pDM_PSTable->CurRFState = RF_MAX;
- } else
- pDM_PSTable->CurRFState = RF_Normal;
-
- if (pDM_PSTable->PreRFState != pDM_PSTable->CurRFState) {
- if (pDM_PSTable->CurRFState == RF_Save) {
- PHY_SetBBReg(pDM_Odm->Adapter, 0x874, 0x1C0000, 0x2); /* Reg874[20:18]=3'b010 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0xc70, BIT(3), 0); /* RegC70[3]= 1'b0 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x85c, 0xFF000000, 0x63); /* Reg85C[31:24]= 0x63 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x874, 0xC000, 0x2); /* Reg874[15:14]=2'b10 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0xa74, 0xF000, 0x3); /* RegA75[7:4]= 0x3 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x818, BIT(28), 0x0); /* Reg818[28]= 1'b0 */
- PHY_SetBBReg(pDM_Odm->Adapter, 0x818, BIT(28), 0x1); /* Reg818[28]= 1'b1 */
- } else {
- PHY_SetBBReg(pDM_Odm->Adapter, 0x874, 0x1CC000, pDM_PSTable->Reg874);
- PHY_SetBBReg(pDM_Odm->Adapter, 0xc70, BIT(3), pDM_PSTable->RegC70);
- PHY_SetBBReg(pDM_Odm->Adapter, 0x85c, 0xFF000000, pDM_PSTable->Reg85C);
- PHY_SetBBReg(pDM_Odm->Adapter, 0xa74, 0xF000, pDM_PSTable->RegA74);
- PHY_SetBBReg(pDM_Odm->Adapter, 0x818, BIT(28), 0x0);
- }
- pDM_PSTable->PreRFState = pDM_PSTable->CurRFState;
- }
-}
diff --git a/drivers/staging/rtl8723bs/hal/odm_DynamicBBPowerSaving.h b/drivers/staging/rtl8723bs/hal/odm_DynamicBBPowerSaving.h
deleted file mode 100644
index 3ebbbfd1dd1f..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_DynamicBBPowerSaving.h
+++ /dev/null
@@ -1,31 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __ODMDYNAMICBBPOWERSAVING_H__
-#define __ODMDYNAMICBBPOWERSAVING_H__
-
-struct ps_t { /* _Dynamic_Power_Saving_ */
- u8 PreCCAState;
- u8 CurCCAState;
-
- u8 PreRFState;
- u8 CurRFState;
-
- int Rssi_val_min;
-
- u8 initialize;
- u32 Reg874, RegC70, Reg85C, RegA74;
-
-};
-
-#define dm_RF_Saving ODM_RF_Saving
-
-void ODM_RF_Saving(void *pDM_VOID, u8 bForceInNormal);
-
-void odm_DynamicBBPowerSavingInit(void *pDM_VOID);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/odm_DynamicTxPower.c b/drivers/staging/rtl8723bs/hal/odm_DynamicTxPower.c
deleted file mode 100644
index 398dfa13449d..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_DynamicTxPower.c
+++ /dev/null
@@ -1,22 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-
-void odm_DynamicTxPowerInit(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- struct adapter *Adapter = pDM_Odm->Adapter;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
-
- pdmpriv->bDynamicTxPowerEnable = false;
-
- pdmpriv->LastDTPLvl = TxHighPwrLevel_Normal;
- pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-}
diff --git a/drivers/staging/rtl8723bs/hal/odm_DynamicTxPower.h b/drivers/staging/rtl8723bs/hal/odm_DynamicTxPower.h
deleted file mode 100644
index e2d244324ebe..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_DynamicTxPower.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __ODMDYNAMICTXPOWER_H__
-#define __ODMDYNAMICTXPOWER_H__
-
-#define TX_POWER_NEAR_FIELD_THRESH_LVL2 74
-#define TX_POWER_NEAR_FIELD_THRESH_LVL1 67
-#define TX_POWER_NEAR_FIELD_THRESH_AP 0x3F
-#define TX_POWER_NEAR_FIELD_THRESH_8812 60
-
-#define TxHighPwrLevel_Normal 0
-#define TxHighPwrLevel_Level1 1
-#define TxHighPwrLevel_Level2 2
-#define TxHighPwrLevel_BT1 3
-#define TxHighPwrLevel_BT2 4
-#define TxHighPwrLevel_15 5
-#define TxHighPwrLevel_35 6
-#define TxHighPwrLevel_50 7
-#define TxHighPwrLevel_70 8
-#define TxHighPwrLevel_100 9
-
-void odm_DynamicTxPowerInit(void *pDM_VOID);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/odm_EdcaTurboCheck.c b/drivers/staging/rtl8723bs/hal/odm_EdcaTurboCheck.c
deleted file mode 100644
index 9baca2aea80e..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_EdcaTurboCheck.c
+++ /dev/null
@@ -1,158 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-
-static u32 edca_setting_DL_GMode[HT_IOT_PEER_MAX] = {
-/*UNKNOWN, REALTEK_90, ALTEK_92SE BROADCOM, LINK ATHEROS,
- *CISCO, MERU, MARVELL, 92U_AP, SELF_AP
- */
- 0x4322, 0xa44f, 0x5e4322, 0xa42b, 0x5e4322, 0x4322,
- 0xa42b, 0x5ea42b, 0xa44f, 0x5e4322, 0x5ea42b
-};
-
-static u32 edca_setting_UL[HT_IOT_PEER_MAX] = {
-/*UNKNOWN, REALTEK_90, REALTEK_92SE, BROADCOM, RALINK, ATHEROS,
- *CISCO, MERU, MARVELL, 92U_AP, SELF_AP(DownLink/Tx)
- */
- 0x5e4322, 0xa44f, 0x5e4322, 0x5ea32b, 0x5ea422, 0x5ea322,
- 0x3ea430, 0x5ea42b, 0x5ea44f, 0x5e4322, 0x5e4322};
-
-static u32 edca_setting_DL[HT_IOT_PEER_MAX] = {
-/*UNKNOWN, REALTEK_90, REALTEK_92SE, BROADCOM, RALINK, ATHEROS,
- *CISCO, MERU, MARVELL, 92U_AP, SELF_AP(UpLink/Rx)
- */
- 0xa44f, 0x5ea44f, 0x5e4322, 0x5ea42b, 0xa44f, 0xa630,
- 0x5ea630, 0x5ea42b, 0xa44f, 0xa42b, 0xa42b};
-
-void ODM_EdcaTurboInit(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct adapter *Adapter = pDM_Odm->Adapter;
-
- pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = false;
- pDM_Odm->DM_EDCA_Table.bIsCurRDLState = false;
- Adapter->recvpriv.bIsAnyNonBEPkts = false;
-} /* ODM_InitEdcaTurbo */
-
-void odm_EdcaTurboCheck(void *pDM_VOID)
-{
- /* In HW integration first stage, we provide 4 different handles to
- * operate at the same time. In stage2/3, we need to prove universal
- * interface and merge all HW dynamic mechanism.
- */
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
-
- if (!(pDM_Odm->SupportAbility & ODM_MAC_EDCA_TURBO))
- return;
-
- odm_EdcaTurboCheckCE(pDM_Odm);
-} /* odm_CheckEdcaTurbo */
-
-void odm_EdcaTurboCheckCE(void *pDM_VOID)
-{
- struct dm_odm_t *pDM_Odm = (struct dm_odm_t *)pDM_VOID;
- struct adapter *Adapter = pDM_Odm->Adapter;
- struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(Adapter);
- 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);
- u32 EDCA_BE_UL = 0x5ea42b;
- u32 EDCA_BE_DL = 0x5ea42b;
- u32 iot_peer = 0;
- u8 wirelessmode = 0xFF; /* invalid value */
- u32 trafficIndex;
- u32 edca_param;
- u64 cur_tx_bytes = 0;
- u64 cur_rx_bytes = 0;
- u8 bbtchange = false;
- u8 biasonrx = false;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- if (!pDM_Odm->bLinked) {
- precvpriv->bIsAnyNonBEPkts = false;
- return;
- }
-
- if (pregpriv->wifi_spec == 1) {
- precvpriv->bIsAnyNonBEPkts = false;
- return;
- }
-
- if (pDM_Odm->pwirelessmode)
- wirelessmode = *(pDM_Odm->pwirelessmode);
-
- iot_peer = pmlmeinfo->assoc_AP_vendor;
-
- if (iot_peer >= HT_IOT_PEER_MAX) {
- precvpriv->bIsAnyNonBEPkts = false;
- return;
- }
-
- /* Check if the status needs to be changed. */
- if ((bbtchange) || (!precvpriv->bIsAnyNonBEPkts)) {
- cur_tx_bytes = pdvobjpriv->traffic_stat.cur_tx_bytes;
- cur_rx_bytes = pdvobjpriv->traffic_stat.cur_rx_bytes;
-
- /* traffic, TX or RX */
- if (biasonrx) {
- 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;
- }
- }
-
- /* 92D txop can't be set to 0x3e for cisco1250 */
- if ((iot_peer == HT_IOT_PEER_CISCO) &&
- (wirelessmode == ODM_WM_N24G)) {
- EDCA_BE_DL = edca_setting_DL[iot_peer];
- EDCA_BE_UL = edca_setting_UL[iot_peer];
- } else if ((iot_peer == HT_IOT_PEER_CISCO) &&
- ((wirelessmode == ODM_WM_G) ||
- (wirelessmode == (ODM_WM_B | ODM_WM_G)) ||
- (wirelessmode == ODM_WM_B))) {
- EDCA_BE_DL = edca_setting_DL_GMode[iot_peer];
- } else if ((iot_peer == HT_IOT_PEER_AIRGO) &&
- (wirelessmode == ODM_WM_G)) {
- EDCA_BE_DL = 0xa630;
- } else if (iot_peer == HT_IOT_PEER_MARVELL) {
- EDCA_BE_DL = edca_setting_DL[iot_peer];
- EDCA_BE_UL = edca_setting_UL[iot_peer];
- } else if (iot_peer == HT_IOT_PEER_ATHEROS) {
- /* Set DL EDCA for Atheros peer to 0x3ea42b. */
- EDCA_BE_DL = edca_setting_DL[iot_peer];
- }
-
- if (trafficIndex == DOWN_LINK)
- edca_param = EDCA_BE_DL;
- else
- edca_param = EDCA_BE_UL;
-
- 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;
- }
- }
-}
diff --git a/drivers/staging/rtl8723bs/hal/odm_EdcaTurboCheck.h b/drivers/staging/rtl8723bs/hal/odm_EdcaTurboCheck.h
deleted file mode 100644
index e9f9f07221f2..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_EdcaTurboCheck.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __ODMEDCATURBOCHECK_H__
-#define __ODMEDCATURBOCHECK_H__
-
-struct edca_t { /* _EDCA_TURBO_ */
- bool bCurrentTurboEDCA;
- bool bIsCurRDLState;
-
- u32 prv_traffic_idx; /* edca turbo */
-};
-
-void odm_EdcaTurboCheck(void *pDM_VOID);
-void ODM_EdcaTurboInit(void *pDM_VOID);
-
-void odm_EdcaTurboCheckCE(void *pDM_VOID);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/odm_HWConfig.c b/drivers/staging/rtl8723bs/hal/odm_HWConfig.c
deleted file mode 100644
index 1716252641d3..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_HWConfig.c
+++ /dev/null
@@ -1,439 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-
-static u8 odm_query_rx_pwr_percentage(s8 ant_power)
-{
- if ((ant_power <= -100) || (ant_power >= 20))
- return 0;
- else if (ant_power >= 0)
- return 100;
- else
- return 100 + ant_power;
-
-}
-
-s32 odm_signal_scale_mapping(struct dm_odm_t *dm_odm, s32 curr_sig)
-{
- s32 ret_sig = 0;
-
- if (dm_odm->SupportInterface == ODM_ITRF_SDIO) {
- if (curr_sig >= 51 && curr_sig <= 100)
- ret_sig = 100;
- else if (curr_sig >= 41 && curr_sig <= 50)
- ret_sig = 80 + ((curr_sig - 40)*2);
- else if (curr_sig >= 31 && curr_sig <= 40)
- ret_sig = 66 + (curr_sig - 30);
- else if (curr_sig >= 21 && curr_sig <= 30)
- ret_sig = 54 + (curr_sig - 20);
- else if (curr_sig >= 10 && curr_sig <= 20)
- ret_sig = 42 + (((curr_sig - 10) * 2) / 3);
- else if (curr_sig >= 5 && curr_sig <= 9)
- ret_sig = 22 + (((curr_sig - 5) * 3) / 2);
- else if (curr_sig >= 1 && curr_sig <= 4)
- ret_sig = 6 + (((curr_sig - 1) * 3) / 2);
- else
- ret_sig = curr_sig;
- }
-
- return ret_sig;
-}
-
-static u8 odm_evm_db_to_percentage(s8 value)
-{
- /* */
- /* -33dB~0dB to 0%~99% */
- /* */
- s8 ret_val;
-
- ret_val = value;
- ret_val /= 2;
-
- if (ret_val >= 0)
- ret_val = 0;
- if (ret_val <= -33)
- ret_val = -33;
-
- ret_val = 0 - ret_val;
- ret_val *= 3;
-
- if (ret_val == 99)
- ret_val = 100;
-
- return ret_val;
-}
-
-static s8 odm_cck_rssi(u8 lna_idx, u8 vga_idx)
-{
- s8 rx_pwr_all = 0x00;
-
- switch (lna_idx) {
- /* 46 53 73 95 201301231630 */
- /* 46 53 77 99 201301241630 */
-
- case 6:
- rx_pwr_all = -34 - (2 * vga_idx);
- break;
- case 4:
- rx_pwr_all = -14 - (2 * vga_idx);
- break;
- case 1:
- rx_pwr_all = 6 - (2 * vga_idx);
- break;
- case 0:
- rx_pwr_all = 16 - (2 * vga_idx);
- break;
- default:
- /* rx_pwr_all = -53+(2*(31-VGA_idx)); */
- break;
- }
- return rx_pwr_all;
-}
-
-static void odm_rx_phy_status_parsing(struct dm_odm_t *dm_odm,
- struct odm_phy_info *phy_info,
- u8 *phy_status,
- struct odm_packet_info *pkt_info)
-{
- u8 i;
- s8 rx_pwr[4], rx_pwr_all = 0;
- u8 evm, pwdb_all = 0, pwdb_all_bt;
- u8 rssi, total_rssi = 0;
- bool is_cck_rate = false;
- u8 rf_rx_num = 0;
- u8 lna_idx, vga_idx;
- struct phy_status_rpt_8192cd_t *phy_sta_rpt = (struct phy_status_rpt_8192cd_t *)phy_status;
-
- is_cck_rate = pkt_info->data_rate <= DESC_RATE11M;
- phy_info->rx_mimo_signal_quality[RF_PATH_A] = -1;
- phy_info->rx_mimo_signal_quality[RF_PATH_B] = -1;
-
- if (is_cck_rate) {
- u8 cck_agc_rpt;
-
- dm_odm->PhyDbgInfo.NumQryPhyStatusCCK++;
-
- /*
- * (1)Hardware does not provide RSSI for CCK/
- * (2)PWDB, Average PWDB calculated by
- * hardware (for rate adaptive)
- */
-
- cck_agc_rpt = phy_sta_rpt->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
- */
- lna_idx = ((cck_agc_rpt & 0xE0)>>5);
- vga_idx = (cck_agc_rpt & 0x1F);
- rx_pwr_all = odm_cck_rssi(lna_idx, vga_idx);
- pwdb_all = odm_query_rx_pwr_percentage(rx_pwr_all);
- if (pwdb_all > 100)
- pwdb_all = 100;
-
- phy_info->rx_pwd_ba11 = pwdb_all;
- phy_info->bt_rx_rssi_percentage = pwdb_all;
- phy_info->recv_signal_power = rx_pwr_all;
-
- /* (3) Get Signal Quality (EVM) */
-
- /* if (pPktinfo->bPacketMatchBSSID) */
- {
- u8 sq, sq_rpt;
-
- if (phy_info->rx_pwd_ba11 > 40 && !dm_odm->bInHctTest)
- sq = 100;
- else {
- sq_rpt = phy_sta_rpt->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;
-
- }
-
- phy_info->signal_quality = sq;
- phy_info->rx_mimo_signal_quality[RF_PATH_A] = sq;
- phy_info->rx_mimo_signal_quality[RF_PATH_B] = -1;
- }
- } else { /* is OFDM rate */
- dm_odm->PhyDbgInfo.NumQryPhyStatusOFDM++;
-
- /*
- * (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++;
- /* else */
- /* continue; */
-
- rx_pwr[i] = ((phy_sta_rpt->path_agc[i].gain & 0x3F) * 2) - 110;
-
- phy_info->rx_pwr[i] = rx_pwr[i];
-
- /* Translate DBM to percentage. */
- rssi = odm_query_rx_pwr_percentage(rx_pwr[i]);
- total_rssi += rssi;
-
- phy_info->rx_mimo_signal_strength[i] = (u8)rssi;
-
- /* Get Rx snr value in DB */
- phy_info->rx_snr[i] = dm_odm->PhyDbgInfo.RxSNRdB[i] = (s32)(phy_sta_rpt->path_rxsnr[i]/2);
- }
-
- /*
- * (2)PWDB, Average PWDB calculated by hardware (for rate adaptive)
- */
- rx_pwr_all = ((phy_sta_rpt->cck_sig_qual_ofdm_pwdb_all >> 1) & 0x7f) - 110;
-
- pwdb_all_bt = pwdb_all = odm_query_rx_pwr_percentage(rx_pwr_all);
-
- phy_info->rx_pwd_ba11 = pwdb_all;
- phy_info->bt_rx_rssi_percentage = pwdb_all_bt;
- phy_info->rx_power = rx_pwr_all;
- phy_info->recv_signal_power = rx_pwr_all;
-
- /*
- * (3)EVM of HT rate
- *
- * Only spatial stream 1 makes sense
- *
- * Do not use shift operation like "rx_evmX >>= 1"
- * because the compiler 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(phy_sta_rpt->stream_rxevm[0]); /* dbm */
-
- /* Fill value in RFD, Get the first spatial stream only */
- phy_info->signal_quality = (u8)(evm & 0xff);
-
- phy_info->rx_mimo_signal_quality[RF_PATH_A] = (u8)(evm & 0xff);
-
- odm_parsing_cfo(dm_odm, pkt_info, phy_sta_rpt->path_cfotail);
- }
-
- /*
- * UI BSS List signal strength(in percentage), make it good
- * looking, from 0~100.
- * It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp().
- */
- if (is_cck_rate) {
- phy_info->signal_strength = (u8)(odm_signal_scale_mapping(dm_odm, pwdb_all));
- } else {
- if (rf_rx_num != 0)
- phy_info->signal_strength = (u8)(odm_signal_scale_mapping(dm_odm, total_rssi /= rf_rx_num));
- }
-}
-
-static void odm_Process_RSSIForDM(
- struct dm_odm_t *pDM_Odm, struct odm_phy_info *pPhyInfo, struct odm_packet_info *pPktinfo
-)
-{
-
- s32 UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK, UndecoratedSmoothedOFDM, RSSI_Ave;
- u8 isCCKrate = 0;
- u8 RSSI_max, RSSI_min, i;
- u32 OFDM_pkt = 0;
- u32 Weighting = 0;
- PSTA_INFO_T pEntry;
-
- if (pPktinfo->station_id == 0xFF)
- return;
-
- pEntry = pDM_Odm->pODM_StaInfo[pPktinfo->station_id];
-
- if (!IS_STA_VALID(pEntry))
- return;
-
- if ((!pPktinfo->bssid_match))
- return;
-
- if (pPktinfo->is_beacon)
- pDM_Odm->PhyDbgInfo.NumQryBeaconPkt++;
-
- isCCKrate = ((pPktinfo->data_rate <= DESC_RATE11M)) ? true : false;
- pDM_Odm->RxRate = pPktinfo->data_rate;
-
- /* Statistic for antenna/path diversity------------------ */
- if (pDM_Odm->SupportAbility & ODM_BB_ANT_DIV) {
-
- }
-
- /* Smart Antenna Debug Message------------------ */
-
- UndecoratedSmoothedCCK = pEntry->rssi_stat.UndecoratedSmoothedCCK;
- UndecoratedSmoothedOFDM = pEntry->rssi_stat.UndecoratedSmoothedOFDM;
- UndecoratedSmoothedPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;
-
- if (pPktinfo->to_self || pPktinfo->is_beacon) {
-
- if (!isCCKrate) { /* ofdm rate */
- if (pPhyInfo->rx_mimo_signal_strength[RF_PATH_B] == 0) {
- RSSI_Ave = pPhyInfo->rx_mimo_signal_strength[RF_PATH_A];
- pDM_Odm->RSSI_A = pPhyInfo->rx_mimo_signal_strength[RF_PATH_A];
- pDM_Odm->RSSI_B = 0;
- } else {
- pDM_Odm->RSSI_A = pPhyInfo->rx_mimo_signal_strength[RF_PATH_A];
- pDM_Odm->RSSI_B = pPhyInfo->rx_mimo_signal_strength[RF_PATH_B];
-
- if (
- pPhyInfo->rx_mimo_signal_strength[RF_PATH_A] >
- pPhyInfo->rx_mimo_signal_strength[RF_PATH_B]
- ) {
- RSSI_max = pPhyInfo->rx_mimo_signal_strength[RF_PATH_A];
- RSSI_min = pPhyInfo->rx_mimo_signal_strength[RF_PATH_B];
- } else {
- RSSI_max = pPhyInfo->rx_mimo_signal_strength[RF_PATH_B];
- RSSI_min = pPhyInfo->rx_mimo_signal_strength[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->rx_pwd_ba11;
- else {
- if (pPhyInfo->rx_pwd_ba11 > (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->rx_pwd_ba11;
- pDM_Odm->RSSI_A = (u8) pPhyInfo->rx_pwd_ba11;
- pDM_Odm->RSSI_B = 0;
-
- /* 1 Process CCK RSSI */
- if (UndecoratedSmoothedCCK <= 0) /* initialize */
- UndecoratedSmoothedCCK = pPhyInfo->rx_pwd_ba11;
- else {
- if (pPhyInfo->rx_pwd_ba11 > (u32)UndecoratedSmoothedCCK) {
- UndecoratedSmoothedCCK =
- ((UndecoratedSmoothedCCK*(Rx_Smooth_Factor-1)) +
- pPhyInfo->rx_pwd_ba11)/Rx_Smooth_Factor;
- UndecoratedSmoothedCCK = UndecoratedSmoothedCCK + 1;
- } else {
- UndecoratedSmoothedCCK =
- ((UndecoratedSmoothedCCK*(Rx_Smooth_Factor-1)) +
- pPhyInfo->rx_pwd_ba11)/Rx_Smooth_Factor;
- }
- }
- pEntry->rssi_stat.PacketMap = pEntry->rssi_stat.PacketMap<<1;
- }
-
- /* if (pEntry) */
- {
- /* 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_phy_status_query(struct dm_odm_t *dm_odm, struct odm_phy_info *phy_info,
- u8 *phy_status, struct odm_packet_info *pkt_info)
-{
-
- odm_rx_phy_status_parsing(dm_odm, phy_info, phy_status, pkt_info);
-
- if (!dm_odm->RSSI_test)
- odm_Process_RSSIForDM(dm_odm, phy_info, pkt_info);
-}
-
-/* */
-/* If you want to add a new IC, Please follow below template and generate a new one. */
-/* */
-/* */
-
-enum hal_status ODM_ConfigRFWithHeaderFile(
- struct dm_odm_t *pDM_Odm,
- enum ODM_RF_Config_Type ConfigType,
- enum rf_path eRFPath
-)
-{
- if (ConfigType == CONFIG_RF_RADIO)
- ODM_ReadAndConfig_MP_8723B_RadioA(pDM_Odm);
- else if (ConfigType == CONFIG_RF_TXPWR_LMT)
- ODM_ReadAndConfig_MP_8723B_TXPWR_LMT(pDM_Odm);
-
- return HAL_STATUS_SUCCESS;
-}
-
-enum hal_status ODM_ConfigRFWithTxPwrTrackHeaderFile(struct dm_odm_t *pDM_Odm)
-{
- if (pDM_Odm->SupportInterface == ODM_ITRF_SDIO)
- ODM_ReadAndConfig_MP_8723B_TxPowerTrack_SDIO(pDM_Odm);
-
- return HAL_STATUS_SUCCESS;
-}
-
-enum hal_status ODM_ConfigBBWithHeaderFile(
- struct dm_odm_t *pDM_Odm, enum ODM_BB_Config_Type ConfigType
-)
-{
- if (ConfigType == CONFIG_BB_PHY_REG)
- ODM_ReadAndConfig_MP_8723B_PHY_REG(pDM_Odm);
- else if (ConfigType == CONFIG_BB_AGC_TAB)
- ODM_ReadAndConfig_MP_8723B_AGC_TAB(pDM_Odm);
- else if (ConfigType == CONFIG_BB_PHY_REG_PG)
- ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(pDM_Odm);
-
- return HAL_STATUS_SUCCESS;
-}
-
diff --git a/drivers/staging/rtl8723bs/hal/odm_HWConfig.h b/drivers/staging/rtl8723bs/hal/odm_HWConfig.h
deleted file mode 100644
index 615145812ed2..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_HWConfig.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __HALHWOUTSRC_H__
-#define __HALHWOUTSRC_H__
-
-/* */
-/* structure and define */
-/* */
-
-struct phy_rx_agc_info_t {
- #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
- u8 gain:7, trsw:1;
- #else
- u8 trsw:1, gain:7;
- #endif
-};
-
-struct phy_status_rpt_8192cd_t {
- struct phy_rx_agc_info_t path_agc[2];
- 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;
- s8 path_cfotail[2];
- u8 pcts_mask[2];
- s8 stream_rxevm[2];
- u8 path_rxsnr[2];
- u8 noise_power_db_lsb;
- u8 rsvd_2[3];
- u8 stream_csi[2];
- u8 stream_target_csi[2];
- s8 sig_evm;
- u8 rsvd_3;
-
-#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE)
- 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_phy_status_query(struct dm_odm_t *dm_odm, struct odm_phy_info *phy_info,
- u8 *phy_status, struct odm_packet_info *pkt_info);
-
-enum hal_status ODM_ConfigRFWithTxPwrTrackHeaderFile(struct dm_odm_t *pDM_Odm);
-
-enum hal_status ODM_ConfigRFWithHeaderFile(
- struct dm_odm_t *pDM_Odm,
- enum ODM_RF_Config_Type ConfigType,
- enum rf_path eRFPath
-);
-
-enum hal_status ODM_ConfigBBWithHeaderFile(
- struct dm_odm_t *pDM_Odm, enum ODM_BB_Config_Type ConfigType
-);
-
-enum hal_status ODM_ConfigFWWithHeaderFile(
- struct dm_odm_t *pDM_Odm,
- enum ODM_FW_Config_Type ConfigType,
- u8 *pFirmware,
- u32 *pSize
-);
-
-s32 odm_signal_scale_mapping(struct dm_odm_t *pDM_Odm, s32 CurrSig);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/odm_RegConfig8723B.c b/drivers/staging/rtl8723bs/hal/odm_RegConfig8723B.c
deleted file mode 100644
index 6514a711e6bd..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_RegConfig8723B.c
+++ /dev/null
@@ -1,176 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-
-void odm_ConfigRFReg_8723B(
- struct dm_odm_t *pDM_Odm,
- u32 Addr,
- u32 Data,
- enum rf_path RF_PATH,
- u32 RegAddr
-)
-{
- if (Addr == 0xfe || Addr == 0xffe)
- msleep(50);
- else {
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
- /* Add 1us delay between BB/RF register setting. */
- udelay(1);
-
- /* For disable/enable test in high temperature, the B6 value will fail to fill. Suggestion by BB Stanley, 2013.06.25. */
- if (Addr == 0xb6) {
- u32 getvalue = 0;
- u8 count = 0;
-
- getvalue = PHY_QueryRFReg(
- pDM_Odm->Adapter, RF_PATH, Addr, bMaskDWord
- );
-
- udelay(1);
-
- while ((getvalue>>8) != (Data>>8)) {
- count++;
- PHY_SetRFReg(pDM_Odm->Adapter, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
- udelay(1);
- getvalue = PHY_QueryRFReg(pDM_Odm->Adapter, RF_PATH, Addr, bMaskDWord);
- if (count > 5)
- break;
- }
- }
-
- if (Addr == 0xb2) {
- u32 getvalue = 0;
- u8 count = 0;
-
- getvalue = PHY_QueryRFReg(
- pDM_Odm->Adapter, RF_PATH, Addr, bMaskDWord
- );
-
- udelay(1);
-
- while (getvalue != Data) {
- count++;
- PHY_SetRFReg(
- pDM_Odm->Adapter,
- RF_PATH,
- RegAddr,
- bRFRegOffsetMask,
- Data
- );
- udelay(1);
- /* Do LCK againg */
- PHY_SetRFReg(
- pDM_Odm->Adapter,
- RF_PATH,
- 0x18,
- bRFRegOffsetMask,
- 0x0fc07
- );
- udelay(1);
- getvalue = PHY_QueryRFReg(
- pDM_Odm->Adapter, RF_PATH, Addr, bMaskDWord
- );
-
- if (count > 5)
- break;
- }
- }
- }
-}
-
-void odm_ConfigRF_RadioA_8723B(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Data)
-{
- u32 content = 0x1000; /* RF_Content: radioa_txt */
- u32 maskforPhySet = (u32)(content&0xE000);
-
- odm_ConfigRFReg_8723B(
- pDM_Odm,
- Addr,
- Data,
- RF_PATH_A,
- Addr|maskforPhySet
- );
-}
-
-void odm_ConfigMAC_8723B(struct dm_odm_t *pDM_Odm, u32 Addr, u8 Data)
-{
- rtw_write8(pDM_Odm->Adapter, Addr, Data);
-}
-
-void odm_ConfigBB_AGC_8723B(
- struct dm_odm_t *pDM_Odm,
- u32 Addr,
- u32 Bitmask,
- u32 Data
-)
-{
- PHY_SetBBReg(pDM_Odm->Adapter, Addr, Bitmask, Data);
- /* Add 1us delay between BB/RF register setting. */
- udelay(1);
-}
-
-void odm_ConfigBB_PHY_REG_PG_8723B(
- struct dm_odm_t *pDM_Odm,
- u32 RfPath,
- u32 Addr,
- u32 Bitmask,
- u32 Data
-)
-{
- if (Addr == 0xfe || Addr == 0xffe)
- msleep(50);
- else
- PHY_StoreTxPowerByRate(pDM_Odm->Adapter, RfPath, Addr, Bitmask, Data);
-}
-
-void odm_ConfigBB_PHY_8723B(
- struct dm_odm_t *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
- PHY_SetBBReg(pDM_Odm->Adapter, Addr, Bitmask, Data);
-
- /* Add 1us delay between BB/RF register setting. */
- udelay(1);
-}
-
-void odm_ConfigBB_TXPWR_LMT_8723B(
- struct dm_odm_t *pDM_Odm,
- u8 *Regulation,
- u8 *Bandwidth,
- u8 *RateSection,
- u8 *RfPath,
- u8 *Channel,
- u8 *PowerLimit
-)
-{
- PHY_SetTxPowerLimit(
- pDM_Odm->Adapter,
- Regulation,
- Bandwidth,
- RateSection,
- RfPath,
- Channel,
- PowerLimit
- );
-}
diff --git a/drivers/staging/rtl8723bs/hal/odm_RegConfig8723B.h b/drivers/staging/rtl8723bs/hal/odm_RegConfig8723B.h
deleted file mode 100644
index fba7053ee3e1..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_RegConfig8723B.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __INC_ODM_REGCONFIG_H_8723B
-#define __INC_ODM_REGCONFIG_H_8723B
-
-void odm_ConfigRFReg_8723B(struct dm_odm_t *pDM_Odm,
- u32 Addr,
- u32 Data,
- enum rf_path RF_PATH,
- u32 RegAddr
-);
-
-void odm_ConfigRF_RadioA_8723B(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Data);
-
-void odm_ConfigMAC_8723B(struct dm_odm_t *pDM_Odm, u32 Addr, u8 Data);
-
-void odm_ConfigBB_AGC_8723B(struct dm_odm_t *pDM_Odm,
- u32 Addr,
- u32 Bitmask,
- u32 Data
-);
-
-void odm_ConfigBB_PHY_REG_PG_8723B(struct dm_odm_t *pDM_Odm, u32 RfPath, u32 Addr,
- u32 Bitmask, u32 Data);
-
-void odm_ConfigBB_PHY_8723B(struct dm_odm_t *pDM_Odm,
- u32 Addr,
- u32 Bitmask,
- u32 Data
-);
-
-void odm_ConfigBB_TXPWR_LMT_8723B(struct dm_odm_t *pDM_Odm,
- u8 *Regulation,
- u8 *Bandwidth,
- u8 *RateSection,
- u8 *RfPath,
- u8 *Channel,
- u8 *PowerLimit
-);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/odm_RegDefine11N.h b/drivers/staging/rtl8723bs/hal/odm_RegDefine11N.h
deleted file mode 100644
index 9ba8e06e5ad5..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_RegDefine11N.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __ODM_REGDEFINE11N_H__
-#define __ODM_REGDEFINE11N_H__
-
-/* 2 RF REG LIST */
-#define ODM_REG_RF_MODE_11N 0x00
-#define ODM_REG_RF_0B_11N 0x0B
-#define ODM_REG_CHNBW_11N 0x18
-#define ODM_REG_T_METER_11N 0x24
-#define ODM_REG_RF_25_11N 0x25
-#define ODM_REG_RF_26_11N 0x26
-#define ODM_REG_RF_27_11N 0x27
-#define ODM_REG_RF_2B_11N 0x2B
-#define ODM_REG_RF_2C_11N 0x2C
-#define ODM_REG_RXRF_A3_11N 0x3C
-#define ODM_REG_T_METER_92D_11N 0x42
-#define ODM_REG_T_METER_88E_11N 0x42
-
-/* 2 BB REG LIST */
-/* PAGE 8 */
-#define ODM_REG_BB_CTRL_11N 0x800
-#define ODM_REG_RF_PIN_11N 0x804
-#define ODM_REG_PSD_CTRL_11N 0x808
-#define ODM_REG_TX_ANT_CTRL_11N 0x80C
-#define ODM_REG_BB_PWR_SAV5_11N 0x818
-#define ODM_REG_CCK_RPT_FORMAT_11N 0x824
-#define ODM_REG_RX_DEFAULT_A_11N 0x858
-#define ODM_REG_RX_DEFAULT_B_11N 0x85A
-#define ODM_REG_BB_PWR_SAV3_11N 0x85C
-#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_BB_PWR_SAV1_11N 0x874
-#define ODM_REG_ANTSEL_PATH_11N 0x878
-#define ODM_REG_BB_3WIRE_11N 0x88C
-#define ODM_REG_SC_CNT_11N 0x8C4
-#define ODM_REG_PSD_DATA_11N 0x8B4
-#define ODM_REG_PSD_DATA_11N 0x8B4
-#define ODM_REG_NHM_TIMER_11N 0x894
-#define ODM_REG_NHM_TH9_TH10_11N 0x890
-#define ODM_REG_NHM_TH3_TO_TH0_11N 0x898
-#define ODM_REG_NHM_TH7_TO_TH4_11N 0x89c
-#define ODM_REG_NHM_CNT_11N 0x8d8
-/* PAGE 9 */
-#define ODM_REG_DBG_RPT_11N 0x908
-#define ODM_REG_ANT_MAPPING1_11N 0x914
-#define ODM_REG_ANT_MAPPING2_11N 0x918
-/* 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_ANTDIV_PARA3_11N 0xA10
-#define ODM_REG_CCK_ANTDIV_PARA4_11N 0xA14
-#define ODM_REG_CCK_FILTER_PARA1_11N 0xA22
-#define ODM_REG_CCK_FILTER_PARA2_11N 0xA23
-#define ODM_REG_CCK_FILTER_PARA3_11N 0xA24
-#define ODM_REG_CCK_FILTER_PARA4_11N 0xA25
-#define ODM_REG_CCK_FILTER_PARA5_11N 0xA26
-#define ODM_REG_CCK_FILTER_PARA6_11N 0xA27
-#define ODM_REG_CCK_FILTER_PARA7_11N 0xA28
-#define ODM_REG_CCK_FILTER_PARA8_11N 0xA29
-#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
-#define ODM_REG_PATH_SWITCH_11N 0xB30
-#define ODM_REG_RSSI_CTRL_11N 0xB38
-#define ODM_REG_CONFIG_ANTA_11N 0xB68
-#define ODM_REG_RSSI_BT_11N 0xB9C
-/* PAGE C */
-#define ODM_REG_OFDM_FA_HOLDC_11N 0xC00
-#define ODM_REG_BB_RX_PATH_11N 0xC04
-#define ODM_REG_TRMUX_11N 0xC08
-#define ODM_REG_OFDM_FA_RSTC_11N 0xC0C
-#define ODM_REG_RXIQI_MATRIX_11N 0xC14
-#define ODM_REG_TXIQK_MATRIX_LSB1_11N 0xC4C
-#define ODM_REG_IGI_A_11N 0xC50
-#define ODM_REG_ANTDIV_PARA2_11N 0xC54
-#define ODM_REG_IGI_B_11N 0xC58
-#define ODM_REG_ANTDIV_PARA3_11N 0xC5C
-#define ODM_REG_L1SBD_PD_CH_11N 0XC6C
-#define ODM_REG_BB_PWR_SAV2_11N 0xC70
-#define ODM_REG_RX_OFF_11N 0xC7C
-#define ODM_REG_TXIQK_MATRIXA_11N 0xC80
-#define ODM_REG_TXIQK_MATRIXB_11N 0xC88
-#define ODM_REG_TXIQK_MATRIXA_LSB2_11N 0xC94
-#define ODM_REG_TXIQK_MATRIXB_LSB2_11N 0xC9C
-#define ODM_REG_RXIQK_MATRIX_LSB_11N 0xCA0
-#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_BB_ATC_11N 0xD2C
-#define ODM_REG_OFDM_FA_TYPE2_11N 0xDA0
-#define ODM_REG_OFDM_FA_TYPE3_11N 0xDA4
-#define ODM_REG_OFDM_FA_TYPE4_11N 0xDA8
-#define ODM_REG_RPT_11N 0xDF4
-/* PAGE E */
-#define ODM_REG_TXAGC_A_6_18_11N 0xE00
-#define ODM_REG_TXAGC_A_24_54_11N 0xE04
-#define ODM_REG_TXAGC_A_1_MCS32_11N 0xE08
-#define ODM_REG_TXAGC_A_MCS0_3_11N 0xE10
-#define ODM_REG_TXAGC_A_MCS4_7_11N 0xE14
-#define ODM_REG_FPGA0_IQK_11N 0xE28
-#define ODM_REG_TXIQK_TONE_A_11N 0xE30
-#define ODM_REG_RXIQK_TONE_A_11N 0xE34
-#define ODM_REG_TXIQK_PI_A_11N 0xE38
-#define ODM_REG_RXIQK_PI_A_11N 0xE3C
-#define ODM_REG_TXIQK_11N 0xE40
-#define ODM_REG_RXIQK_11N 0xE44
-#define ODM_REG_IQK_AGC_PTS_11N 0xE48
-#define ODM_REG_IQK_AGC_RSP_11N 0xE4C
-#define ODM_REG_BLUETOOTH_11N 0xE6C
-#define ODM_REG_RX_WAIT_CCA_11N 0xE70
-#define ODM_REG_TX_CCK_RFON_11N 0xE74
-#define ODM_REG_TX_CCK_BBON_11N 0xE78
-#define ODM_REG_OFDM_RFON_11N 0xE7C
-#define ODM_REG_OFDM_BBON_11N 0xE80
-#define ODM_REG_TX2RX_11N 0xE84
-#define ODM_REG_TX2TX_11N 0xE88
-#define ODM_REG_RX_CCK_11N 0xE8C
-#define ODM_REG_RX_OFDM_11N 0xED0
-#define ODM_REG_RX_WAIT_RIFS_11N 0xED4
-#define ODM_REG_RX2RX_11N 0xED8
-#define ODM_REG_STANDBY_11N 0xEDC
-#define ODM_REG_SLEEP_11N 0xEE0
-#define ODM_REG_PMPD_ANAEN_11N 0xEEC
-#define ODM_REG_IGI_C_11N 0xF84
-#define ODM_REG_IGI_D_11N 0xF88
-
-/* 2 MAC REG LIST */
-#define ODM_REG_BB_RST_11N 0x02
-#define ODM_REG_ANTSEL_PIN_11N 0x4C
-#define ODM_REG_EARLY_MODE_11N 0x4D0
-#define ODM_REG_RSSI_MONITOR_11N 0x4FE
-#define ODM_REG_EDCA_VO_11N 0x500
-#define ODM_REG_EDCA_VI_11N 0x504
-#define ODM_REG_EDCA_BE_11N 0x508
-#define ODM_REG_EDCA_BK_11N 0x50C
-#define ODM_REG_TXPAUSE_11N 0x522
-#define ODM_REG_RESP_TX_11N 0x6D8
-#define ODM_REG_ANT_TRAIN_PARA1_11N 0x7b0
-#define ODM_REG_ANT_TRAIN_PARA2_11N 0x7b4
-
-/* DIG Related */
-#define ODM_BIT_IGI_11N 0x0000007F
-#define ODM_BIT_CCK_RPT_FORMAT_11N BIT(9)
-#define ODM_BIT_BB_RX_PATH_11N 0xF
-#define ODM_BIT_BB_ATC_11N BIT(11)
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/odm_interface.h b/drivers/staging/rtl8723bs/hal/odm_interface.h
deleted file mode 100644
index f79c3d57edff..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_interface.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __ODM_INTERFACE_H__
-#define __ODM_INTERFACE_H__
-
-/* =========== Macro Define */
-
-#define _reg_all(_name) ODM_##_name
-#define _reg_ic(_name, _ic) ODM_##_name##_ic
-#define _bit_all(_name) BIT_##_name
-#define _bit_ic(_name, _ic) BIT_##_name##_ic
-
-#define _reg_11N(_name) ODM_REG_##_name##_11N
-#define _bit_11N(_name) ODM_BIT_##_name##_11N
-
-#define _cat(_name, _func) _func##_11N(_name)
-
-/* _name: name of register or bit. */
-/* Example: "ODM_REG(R_A_AGC_CORE1)" */
-/* gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C". */
-#define ODM_REG(_name) _cat(_name, _reg)
-#define ODM_BIT(_name) _cat(_name, _bit)
-
-#endif /* __ODM_INTERFACE_H__ */
diff --git a/drivers/staging/rtl8723bs/hal/odm_precomp.h b/drivers/staging/rtl8723bs/hal/odm_precomp.h
deleted file mode 100644
index 2987857a8761..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_precomp.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __ODM_PRECOMP_H__
-#define __ODM_PRECOMP_H__
-
-#include "odm_types.h"
-
-#define TEST_FALG___ 1
-
-/* 2 Config Flags and Structs - defined by each ODM Type */
-
- /* include <basic_types.h> */
- /* include <osdep_service.h> */
- /* include <drv_types.h> */
- /* include <rtw_byteorder.h> */
- /* include <hal_intf.h> */
-#define BEAMFORMING_SUPPORT 0
-
-/* 2 Hardware Parameter Files */
-
-/* 2 OutSrc Header Files */
-
-#include "odm.h"
-#include "odm_HWConfig.h"
-#include "odm_RegDefine11N.h"
-#include "odm_EdcaTurboCheck.h"
-#include "odm_DIG.h"
-#include "odm_DynamicBBPowerSaving.h"
-#include "odm_DynamicTxPower.h"
-#include "odm_CfoTracking.h"
-#include "HalPhyRf.h"
-#include "HalPhyRf_8723B.h"/* for IQK, LCK, Power-tracking */
-#include "rtl8723b_hal.h"
-#include "odm_interface.h"
-#include "odm_reg.h"
-#include "HalHWImg8723B_MAC.h"
-#include "HalHWImg8723B_RF.h"
-#include "HalHWImg8723B_BB.h"
-#include "Hal8723BReg.h"
-#include "odm_RegConfig8723B.h"
-
-#endif /* __ODM_PRECOMP_H__ */
diff --git a/drivers/staging/rtl8723bs/hal/odm_reg.h b/drivers/staging/rtl8723bs/hal/odm_reg.h
deleted file mode 100644
index a3b1f673774c..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_reg.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-/* File Name: odm_reg.h */
-/* Description: */
-/* This file is for general register definition. */
-#ifndef __HAL_ODM_REG_H__
-#define __HAL_ODM_REG_H__
-
-/* Register Definition */
-
-/* MAC REG */
-#define ODM_BB_RESET 0x002
-#define ODM_DUMMY 0x4fe
-#define RF_T_METER_OLD 0x24
-#define RF_T_METER_NEW 0x42
-
-#define ODM_EDCA_VO_PARAM 0x500
-#define ODM_EDCA_VI_PARAM 0x504
-#define ODM_EDCA_BE_PARAM 0x508
-#define ODM_EDCA_BK_PARAM 0x50C
-#define ODM_TXPAUSE 0x522
-
-/* BB REG */
-#define ODM_FPGA_PHY0_PAGE8 0x800
-#define ODM_PSD_SETTING 0x808
-#define ODM_AFE_SETTING 0x818
-#define ODM_TXAGC_B_24_54 0x834
-#define ODM_TXAGC_B_MCS32_5 0x838
-#define ODM_TXAGC_B_MCS0_MCS3 0x83c
-#define ODM_TXAGC_B_MCS4_MCS7 0x848
-#define ODM_ANALOG_REGISTER 0x85c
-#define ODM_RF_INTERFACE_OUTPUT 0x860
-#define ODM_TXAGC_B_11_A_2_11 0x86c
-#define ODM_AD_DA_LSB_MASK 0x874
-#define ODM_ENABLE_3_WIRE 0x88c
-#define ODM_PSD_REPORT 0x8b4
-#define ODM_R_ANT_SELECT 0x90c
-#define ODM_CCK_ANT_SELECT 0xa07
-#define ODM_CCK_PD_THRESH 0xa0a
-#define ODM_CCK_RF_REG1 0xa11
-#define ODM_CCK_MATCH_FILTER 0xa20
-#define ODM_CCK_RAKE_MAC 0xa2e
-#define ODM_CCK_CNT_RESET 0xa2d
-#define ODM_CCK_TX_DIVERSITY 0xa2f
-#define ODM_CCK_FA_CNT_MSB 0xa5b
-#define ODM_CCK_FA_CNT_LSB 0xa5c
-#define ODM_CCK_NEW_FUNCTION 0xa75
-#define ODM_OFDM_PHY0_PAGE_C 0xc00
-#define ODM_OFDM_RX_ANT 0xc04
-#define ODM_R_A_RXIQI 0xc14
-#define ODM_R_A_AGC_CORE1 0xc50
-#define ODM_R_A_AGC_CORE2 0xc54
-#define ODM_R_B_AGC_CORE1 0xc58
-#define ODM_R_AGC_PAR 0xc70
-#define ODM_R_HTSTF_AGC_PAR 0xc7c
-#define ODM_TX_PWR_TRAINING_A 0xc90
-#define ODM_TX_PWR_TRAINING_B 0xc98
-#define ODM_OFDM_FA_CNT1 0xcf0
-#define ODM_OFDM_PHY0_PAGE_D 0xd00
-#define ODM_OFDM_FA_CNT2 0xda0
-#define ODM_OFDM_FA_CNT3 0xda4
-#define ODM_OFDM_FA_CNT4 0xda8
-#define ODM_TXAGC_A_6_18 0xe00
-#define ODM_TXAGC_A_24_54 0xe04
-#define ODM_TXAGC_A_1_MCS32 0xe08
-#define ODM_TXAGC_A_MCS0_MCS3 0xe10
-#define ODM_TXAGC_A_MCS4_MCS7 0xe14
-
-/* RF REG */
-#define ODM_GAIN_SETTING 0x00
-#define ODM_CHANNEL 0x18
-
-/* Ant Detect Reg */
-#define ODM_DPDT 0x300
-
-/* PSD Init */
-#define ODM_PSDREG 0x808
-
-/* 92D Path Div */
-#define PATHDIV_REG 0xB30
-#define PATHDIV_TRI 0xBA0
-
-/* Bitmap Definition */
-
-#define BIT_FA_RESET BIT0
-
-#endif
diff --git a/drivers/staging/rtl8723bs/hal/odm_types.h b/drivers/staging/rtl8723bs/hal/odm_types.h
deleted file mode 100644
index 25f0edd716cc..000000000000
--- a/drivers/staging/rtl8723bs/hal/odm_types.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __ODM_TYPES_H__
-#define __ODM_TYPES_H__
-
-#include <drv_types.h>
-
-/* Deifne HW endian support */
-#define ODM_ENDIAN_BIG 0
-#define ODM_ENDIAN_LITTLE 1
-
-#define GET_ODM(__padapter) ((PDM_ODM_T)(&((GET_HAL_DATA(__padapter))->odmpriv)))
-
-enum hal_status {
- HAL_STATUS_SUCCESS,
- HAL_STATUS_FAILURE,
-};
-
- #if defined(__LITTLE_ENDIAN)
- #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE
- #else
- #define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG
- #endif
-
- #define STA_INFO_T struct sta_info
- #define PSTA_INFO_T struct sta_info *
-
- /* define useless flag to avoid compile warning */
- #define USE_WORKITEM 0
- #define FPGA_TWO_MAC_VERIFICATION 0
-
-#define READ_NEXT_PAIR(v1, v2, i) do { if (i+2 >= ArrayLen) break; i += 2; v1 = Array[i]; v2 = Array[i+1]; } while (0)
-#define COND_ELSE 2
-#define COND_ENDIF 3
-
-#endif /* __ODM_TYPES_H__ */
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c b/drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c
deleted file mode 100644
index d2b44ad60a4c..000000000000
--- a/drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c
+++ /dev/null
@@ -1,933 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-#include <rtl8723b_hal.h>
-#include <linux/etherdevice.h>
-#include <linux/iopoll.h>
-#include "hal_com_h2c.h"
-
-#define MAX_H2C_BOX_NUMS 4
-#define MESSAGE_BOX_SIZE 4
-
-#define RTL8723B_MAX_CMD_LEN 7
-#define RTL8723B_EX_MESSAGE_BOX_SIZE 4
-
-static u8 _is_fw_read_cmd_down(struct adapter *padapter, u8 msgbox_num)
-{
- u8 valid;
- int ret;
-
- ret = read_poll_timeout_atomic(rtw_read8,
- valid, !(valid & BIT(msgbox_num)),
- 0, 500, false,
- padapter, REG_HMETFR);
-
- return !ret;
-}
-
-/*****************************************
- * H2C Msg format :
- *| 31 - 8 |7-5 | 4 - 0 |
- *| h2c_msg |Class |CMD_ID |
- *| 31-0 |
- *| Ext msg |
- *
- ******************************************/
-s32 FillH2CCmd8723B(struct adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer)
-{
- u8 h2c_box_num;
- u32 msgbox_addr;
- u32 msgbox_ex_addr = 0;
- struct hal_com_data *pHalData;
- u32 h2c_cmd = 0;
- u32 h2c_cmd_ex = 0;
- s32 ret = _FAIL;
-
- padapter = GET_PRIMARY_ADAPTER(padapter);
- pHalData = GET_HAL_DATA(padapter);
- if (mutex_lock_interruptible(&(adapter_to_dvobj(padapter)->h2c_fwcmd_mutex)))
- return ret;
-
- if (!pCmdBuffer)
- goto exit;
-
- if (CmdLen > RTL8723B_MAX_CMD_LEN)
- goto exit;
-
- if (padapter->bSurpriseRemoved)
- goto exit;
-
- /* pay attention to if race condition happened in H2C cmd setting. */
- do {
- h2c_box_num = pHalData->LastHMEBoxNum;
-
- if (!_is_fw_read_cmd_down(padapter, h2c_box_num))
- goto exit;
-
- if (CmdLen <= 3) {
- memcpy((u8 *)(&h2c_cmd) + 1, pCmdBuffer, CmdLen);
- } else {
- memcpy((u8 *)(&h2c_cmd) + 1, pCmdBuffer, 3);
- memcpy((u8 *)(&h2c_cmd_ex), pCmdBuffer + 3, CmdLen - 3);
- }
-
- *(u8 *)(&h2c_cmd) |= ElementID;
-
- if (CmdLen > 3) {
- msgbox_ex_addr = REG_HMEBOX_EXT0_8723B + (h2c_box_num * RTL8723B_EX_MESSAGE_BOX_SIZE);
- rtw_write32(padapter, msgbox_ex_addr, h2c_cmd_ex);
- }
- msgbox_addr = REG_HMEBOX_0 + (h2c_box_num * MESSAGE_BOX_SIZE);
- rtw_write32(padapter, msgbox_addr, h2c_cmd);
-
- pHalData->LastHMEBoxNum = (h2c_box_num + 1) % MAX_H2C_BOX_NUMS;
-
- } while (0);
-
- ret = _SUCCESS;
-
-exit:
-
- mutex_unlock(&(adapter_to_dvobj(padapter)->h2c_fwcmd_mutex));
- return ret;
-}
-
-static void ConstructBeacon(struct adapter *padapter, u8 *pframe, u32 *pLength)
-{
- struct ieee80211_hdr *pwlanhdr;
- __le16 *fctrl;
- u32 rate_len, pktlen;
- struct mlme_ext_priv *pmlmeext = &padapter->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);
- ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
- ether_addr_copy(pwlanhdr->addr3, get_my_bssid(cur_network));
-
- SetSeqNum(pwlanhdr, 0);
- 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->ie_length - sizeof(struct ndis_802_11_fix_ie);
- memcpy(pframe, cur_network->ies + sizeof(struct ndis_802_11_fix_ie), pktlen);
-
- goto _ConstructBeacon;
- }
-
- /* below for ad-hoc mode */
-
- /* SSID */
- pframe = rtw_set_ie(pframe, WLAN_EID_SSID, cur_network->ssid.ssid_length, cur_network->ssid.ssid, &pktlen);
-
- /* supported rates... */
- rate_len = rtw_get_rateset_len(cur_network->supported_rates);
- pframe = rtw_set_ie(pframe, WLAN_EID_SUPP_RATES, ((rate_len > 8) ? 8 : rate_len), cur_network->supported_rates, &pktlen);
-
- /* DS parameter set */
- pframe = rtw_set_ie(pframe, WLAN_EID_DS_PARAMS, 1, (unsigned char *)&cur_network->configuration.ds_config, &pktlen);
-
- if ((pmlmeinfo->state & 0x03) == WIFI_FW_ADHOC_STATE) {
- u32 ATIMWindow;
- /* IBSS Parameter Set... */
- ATIMWindow = 0;
- pframe = rtw_set_ie(pframe, WLAN_EID_IBSS_PARAMS, 2, (unsigned char *)(&ATIMWindow), &pktlen);
- }
-
- /* todo: ERP IE */
-
- /* EXTERNDED SUPPORTED RATE */
- if (rate_len > 8)
- pframe = rtw_set_ie(pframe, WLAN_EID_EXT_SUPP_RATES, (rate_len - 8), (cur_network->supported_rates + 8), &pktlen);
-
- /* todo:HT for adhoc */
-
-_ConstructBeacon:
-
- if ((pktlen + TXDESC_SIZE) > 512)
- return;
-
- *pLength = pktlen;
-
-}
-
-static void ConstructPSPoll(struct adapter *padapter, u8 *pframe, u32 *pLength)
-{
- struct ieee80211_hdr *pwlanhdr;
- __le16 *fctrl;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
- 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. */
- ether_addr_copy(pwlanhdr->addr1, get_my_bssid(&pmlmeinfo->network));
-
- /* TA. */
- ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
-
- *pLength = 16;
-}
-
-static void ConstructNullFunctionData(struct adapter *padapter,
- 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 = &padapter->mlmepriv;
- struct wlan_network *cur_network = &pmlmepriv->cur_network;
- struct mlme_ext_priv *pmlmeext = &padapter->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.infrastructure_mode) {
- case NL80211_IFTYPE_STATION:
- SetToDs(fctrl);
- ether_addr_copy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)));
- ether_addr_copy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)));
- ether_addr_copy(pwlanhdr->addr3, StaAddr);
- break;
- case NL80211_IFTYPE_AP:
- SetFrDs(fctrl);
- ether_addr_copy(pwlanhdr->addr1, StaAddr);
- ether_addr_copy(pwlanhdr->addr2, get_my_bssid(&(pmlmeinfo->network)));
- ether_addr_copy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)));
- break;
- case NL80211_IFTYPE_ADHOC:
- default:
- ether_addr_copy(pwlanhdr->addr1, StaAddr);
- ether_addr_copy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)));
- ether_addr_copy(pwlanhdr->addr3, get_my_bssid(&(pmlmeinfo->network)));
- 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_hdr_3addr);
- }
-
- *pLength = pktlen;
-}
-
-static void rtl8723b_set_FwRsvdPage_cmd(struct adapter *padapter, struct rsvdpage_loc *rsvdpageloc)
-{
- u8 u1H2CRsvdPageParm[H2C_RSVDPAGE_LOC_LEN] = {0};
-
- SET_8723B_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(u1H2CRsvdPageParm, rsvdpageloc->LocProbeRsp);
- SET_8723B_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1H2CRsvdPageParm, rsvdpageloc->LocPsPoll);
- SET_8723B_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1H2CRsvdPageParm, rsvdpageloc->LocNullData);
- SET_8723B_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(u1H2CRsvdPageParm, rsvdpageloc->LocQosNull);
- SET_8723B_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(u1H2CRsvdPageParm, rsvdpageloc->LocBTQosNull);
-
- FillH2CCmd8723B(padapter, H2C_8723B_RSVD_PAGE, H2C_RSVDPAGE_LOC_LEN, u1H2CRsvdPageParm);
-}
-
-void rtl8723b_set_FwMediaStatusRpt_cmd(struct adapter *padapter, u8 mstatus, u8 macid)
-{
- u8 u1H2CMediaStatusRptParm[H2C_MEDIA_STATUS_RPT_LEN] = {0};
- u8 macid_end = 0;
-
- SET_8723B_H2CCMD_MSRRPT_PARM_OPMODE(u1H2CMediaStatusRptParm, mstatus);
- SET_8723B_H2CCMD_MSRRPT_PARM_MACID_IND(u1H2CMediaStatusRptParm, 0);
- SET_8723B_H2CCMD_MSRRPT_PARM_MACID(u1H2CMediaStatusRptParm, macid);
- SET_8723B_H2CCMD_MSRRPT_PARM_MACID_END(u1H2CMediaStatusRptParm, macid_end);
-
- FillH2CCmd8723B(padapter, H2C_8723B_MEDIA_STATUS_RPT, H2C_MEDIA_STATUS_RPT_LEN, u1H2CMediaStatusRptParm);
-}
-
-void rtl8723b_set_FwMacIdConfig_cmd(struct adapter *padapter, u8 mac_id, u8 raid, u8 bw, u8 sgi, u32 mask)
-{
- u8 u1H2CMacIdConfigParm[H2C_MACID_CFG_LEN] = {0};
-
- SET_8723B_H2CCMD_MACID_CFG_MACID(u1H2CMacIdConfigParm, mac_id);
- SET_8723B_H2CCMD_MACID_CFG_RAID(u1H2CMacIdConfigParm, raid);
- SET_8723B_H2CCMD_MACID_CFG_SGI_EN(u1H2CMacIdConfigParm, sgi ? 1 : 0);
- SET_8723B_H2CCMD_MACID_CFG_BW(u1H2CMacIdConfigParm, bw);
- SET_8723B_H2CCMD_MACID_CFG_RATE_MASK0(u1H2CMacIdConfigParm, (u8)(mask & 0x000000ff));
- SET_8723B_H2CCMD_MACID_CFG_RATE_MASK1(u1H2CMacIdConfigParm, (u8)((mask & 0x0000ff00) >> 8));
- SET_8723B_H2CCMD_MACID_CFG_RATE_MASK2(u1H2CMacIdConfigParm, (u8)((mask & 0x00ff0000) >> 16));
- SET_8723B_H2CCMD_MACID_CFG_RATE_MASK3(u1H2CMacIdConfigParm, (u8)((mask & 0xff000000) >> 24));
-
- FillH2CCmd8723B(padapter, H2C_8723B_MACID_CFG, H2C_MACID_CFG_LEN, u1H2CMacIdConfigParm);
-}
-
-void rtl8723b_set_rssi_cmd(struct adapter *padapter, u8 *param)
-{
- u8 u1H2CRssiSettingParm[H2C_RSSI_SETTING_LEN] = {0};
- u8 mac_id = *param;
- u8 rssi = *(param + 2);
- u8 uldl_state = 0;
-
- SET_8723B_H2CCMD_RSSI_SETTING_MACID(u1H2CRssiSettingParm, mac_id);
- SET_8723B_H2CCMD_RSSI_SETTING_RSSI(u1H2CRssiSettingParm, rssi);
- SET_8723B_H2CCMD_RSSI_SETTING_ULDL_STATE(u1H2CRssiSettingParm, uldl_state);
-
- FillH2CCmd8723B(padapter, H2C_8723B_RSSI_SETTING, H2C_RSSI_SETTING_LEN, u1H2CRssiSettingParm);
-}
-
-void rtl8723b_set_FwPwrMode_cmd(struct adapter *padapter, u8 psmode)
-{
- int i;
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- u8 u1H2CPwrModeParm[H2C_PWRMODE_LEN] = {0};
- u8 PowerState = 0, awake_intvl = 1, byte5 = 0, rlbm = 0;
-
- if (pwrpriv->dtim > 0 && pwrpriv->dtim < 16)
- awake_intvl = pwrpriv->dtim + 1;
- else
- awake_intvl = 3;
-
- rlbm = 2;
-
- if (padapter->registrypriv.wifi_spec == 1) {
- awake_intvl = 2;
- rlbm = 2;
- }
-
- if (psmode > 0) {
- if (hal_btcoex_IsBtControlLps(padapter)) {
- PowerState = hal_btcoex_RpwmVal(padapter);
- byte5 = hal_btcoex_LpsVal(padapter);
-
- if ((rlbm == 2) && (byte5 & BIT(4))) {
- /* Keep awake interval to 1 to prevent from */
- /* decreasing coex performance */
- awake_intvl = 2;
- rlbm = 2;
- }
- } else {
- PowerState = 0x00;/* AllON(0x0C), RFON(0x04), RFOFF(0x00) */
- byte5 = 0x40;
- }
- } else {
- PowerState = 0x0C;/* AllON(0x0C), RFON(0x04), RFOFF(0x00) */
- byte5 = 0x40;
- }
-
- SET_8723B_H2CCMD_PWRMODE_PARM_MODE(u1H2CPwrModeParm, (psmode > 0) ? 1 : 0);
- SET_8723B_H2CCMD_PWRMODE_PARM_SMART_PS(u1H2CPwrModeParm, pwrpriv->smart_ps);
- SET_8723B_H2CCMD_PWRMODE_PARM_RLBM(u1H2CPwrModeParm, rlbm);
- SET_8723B_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(u1H2CPwrModeParm, awake_intvl);
- SET_8723B_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(u1H2CPwrModeParm, padapter->registrypriv.uapsd_enable);
- SET_8723B_H2CCMD_PWRMODE_PARM_PWR_STATE(u1H2CPwrModeParm, PowerState);
- SET_8723B_H2CCMD_PWRMODE_PARM_BYTE5(u1H2CPwrModeParm, byte5);
- if (psmode != PS_MODE_ACTIVE) {
- if (!pmlmeext->adaptive_tsf_done && pmlmeext->bcn_cnt > 0) {
- u8 ratio_20_delay, ratio_80_delay;
-
- /* byte 6 for adaptive_early_32k */
- /* 0:3] = DrvBcnEarly (ms) , [4:7] = DrvBcnTimeOut (ms) */
- /* 20% for DrvBcnEarly, 80% for DrvBcnTimeOut */
- ratio_20_delay = 0;
- ratio_80_delay = 0;
- pmlmeext->DrvBcnEarly = 0xff;
- pmlmeext->DrvBcnTimeOut = 0xff;
-
- for (i = 0; i < 9; i++) {
- pmlmeext->bcn_delay_ratio[i] = (pmlmeext->bcn_delay_cnt[i] * 100) / pmlmeext->bcn_cnt;
-
- ratio_20_delay += pmlmeext->bcn_delay_ratio[i];
- ratio_80_delay += pmlmeext->bcn_delay_ratio[i];
-
- if (ratio_20_delay > 20 && pmlmeext->DrvBcnEarly == 0xff)
- pmlmeext->DrvBcnEarly = i;
-
- if (ratio_80_delay > 80 && pmlmeext->DrvBcnTimeOut == 0xff)
- pmlmeext->DrvBcnTimeOut = i;
-
- /* reset adaptive_early_32k cnt */
- pmlmeext->bcn_delay_cnt[i] = 0;
- pmlmeext->bcn_delay_ratio[i] = 0;
-
- }
-
- pmlmeext->bcn_cnt = 0;
- pmlmeext->adaptive_tsf_done = true;
-
- }
-
- }
-
- hal_btcoex_RecordPwrMode(padapter, u1H2CPwrModeParm, H2C_PWRMODE_LEN);
-
- FillH2CCmd8723B(padapter, H2C_8723B_SET_PWR_MODE, H2C_PWRMODE_LEN, u1H2CPwrModeParm);
-}
-
-void rtl8723b_set_FwPsTuneParam_cmd(struct adapter *padapter)
-{
- u8 u1H2CPsTuneParm[H2C_PSTUNEPARAM_LEN] = {0};
- u8 bcn_to_limit = 10; /* 10 * 100 * awakeinterval (ms) */
- u8 dtim_timeout = 5; /* ms wait broadcast data timer */
- u8 ps_timeout = 20; /* ms Keep awake when tx */
- u8 dtim_period = 3;
-
- SET_8723B_H2CCMD_PSTUNE_PARM_BCN_TO_LIMIT(u1H2CPsTuneParm, bcn_to_limit);
- SET_8723B_H2CCMD_PSTUNE_PARM_DTIM_TIMEOUT(u1H2CPsTuneParm, dtim_timeout);
- SET_8723B_H2CCMD_PSTUNE_PARM_PS_TIMEOUT(u1H2CPsTuneParm, ps_timeout);
- SET_8723B_H2CCMD_PSTUNE_PARM_ADOPT(u1H2CPsTuneParm, 1);
- SET_8723B_H2CCMD_PSTUNE_PARM_DTIM_PERIOD(u1H2CPsTuneParm, dtim_period);
-
- FillH2CCmd8723B(padapter, H2C_8723B_PS_TUNING_PARA, H2C_PSTUNEPARAM_LEN, u1H2CPsTuneParm);
-}
-
-void rtl8723b_set_FwPwrModeInIPS_cmd(struct adapter *padapter, u8 cmd_param)
-{
-
- FillH2CCmd8723B(padapter, H2C_8723B_FWLPS_IN_IPS_, 1, &cmd_param);
-}
-
-/*
- * 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 rtl8723b_set_FwRsvdPagePkt(struct adapter *padapter, bool bDLFinished)
-{
- struct xmit_frame *pcmdframe;
- struct pkt_attrib *pattrib;
- struct xmit_priv *pxmitpriv;
- struct mlme_ext_priv *pmlmeext;
- struct mlme_ext_info *pmlmeinfo;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- u32 BeaconLength = 0, PSPollLength = 0;
- u32 NullDataLength = 0, QosNullLength = 0, BTQosNullLength = 0;
- u8 *ReservedPagePacket;
- u8 TxDescLen = TXDESC_SIZE, TxDescOffset = TXDESC_OFFSET;
- u8 TotalPageNum = 0, CurtPktPageNum = 0, RsvdPageNum = 0;
- u16 BufIndex, PageSize = 128;
- u32 TotalPacketLen, MaxRsvdPageBufSize = 0;
-
- struct rsvdpage_loc RsvdPageLoc;
-
- pxmitpriv = &padapter->xmitpriv;
- pmlmeext = &padapter->mlmeextpriv;
- pmlmeinfo = &pmlmeext->mlmext_info;
-
- RsvdPageNum = BCNQ_PAGE_NUM_8723B + WOWLAN_PAGE_NUM_8723B;
- MaxRsvdPageBufSize = RsvdPageNum * PageSize;
-
- pcmdframe = rtw_alloc_cmdxmitframe(pxmitpriv);
- if (!pcmdframe)
- return;
-
- ReservedPagePacket = pcmdframe->buf_addr;
- memset(&RsvdPageLoc, 0, sizeof(struct rsvdpage_loc));
-
- /* 3 (1) beacon */
- BufIndex = TxDescOffset;
- ConstructBeacon(padapter, &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. */
- CurtPktPageNum = (u8)PageNum_128(TxDescLen + BeaconLength);
- /* If we don't add 1 more page, the WOWLAN function has a problem. Baron thinks it's a bug of firmware */
- if (CurtPktPageNum == 1)
- CurtPktPageNum += 1;
-
- TotalPageNum += CurtPktPageNum;
-
- BufIndex += (CurtPktPageNum * PageSize);
-
- /* 3 (2) ps-poll */
- RsvdPageLoc.LocPsPoll = TotalPageNum;
- ConstructPSPoll(padapter, &ReservedPagePacket[BufIndex], &PSPollLength);
- rtl8723b_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex - TxDescLen], PSPollLength, true, false, false);
-
- CurtPktPageNum = (u8)PageNum_128(TxDescLen + PSPollLength);
-
- TotalPageNum += CurtPktPageNum;
-
- BufIndex += (CurtPktPageNum * PageSize);
-
- /* 3 (3) null data */
- RsvdPageLoc.LocNullData = TotalPageNum;
- ConstructNullFunctionData(padapter,
- &ReservedPagePacket[BufIndex],
- &NullDataLength,
- get_my_bssid(&pmlmeinfo->network),
- false, 0, 0, false);
-
- rtl8723b_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex - TxDescLen], NullDataLength, false, false, false);
-
- CurtPktPageNum = (u8)PageNum_128(TxDescLen + NullDataLength);
-
- TotalPageNum += CurtPktPageNum;
-
- BufIndex += (CurtPktPageNum * PageSize);
-
- /* 3 (5) Qos null data */
- RsvdPageLoc.LocQosNull = TotalPageNum;
- ConstructNullFunctionData(padapter,
- &ReservedPagePacket[BufIndex],
- &QosNullLength,
- get_my_bssid(&pmlmeinfo->network),
- true, 0, 0, false);
-
- rtl8723b_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex - TxDescLen], QosNullLength, false, false, false);
-
- CurtPktPageNum = (u8)PageNum_128(TxDescLen + QosNullLength);
-
- TotalPageNum += CurtPktPageNum;
-
- BufIndex += (CurtPktPageNum * PageSize);
-
- /* 3 (6) BT Qos null data */
- RsvdPageLoc.LocBTQosNull = TotalPageNum;
- ConstructNullFunctionData(padapter,
- &ReservedPagePacket[BufIndex],
- &BTQosNullLength,
- get_my_bssid(&pmlmeinfo->network),
- true, 0, 0, false);
-
- rtl8723b_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex - TxDescLen], BTQosNullLength, false, true, false);
-
- CurtPktPageNum = (u8)PageNum_128(TxDescLen + BTQosNullLength);
-
- TotalPageNum += CurtPktPageNum;
-
- BufIndex += (CurtPktPageNum * PageSize);
-
- TotalPacketLen = BufIndex + BTQosNullLength;
-
- if (TotalPacketLen > MaxRsvdPageBufSize) {
- goto error;
- } else {
- /* update attribute */
- pattrib = &pcmdframe->attrib;
- update_mgntframe_attrib(padapter, pattrib);
- pattrib->qsel = 0x10;
- pattrib->pktlen = pattrib->last_txcmdsz = TotalPacketLen - TxDescOffset;
- dump_mgntframe_and_wait(padapter, pcmdframe, 100);
- }
-
- if (check_fwstate(pmlmepriv, _FW_LINKED))
- rtl8723b_set_FwRsvdPage_cmd(padapter, &RsvdPageLoc);
-
- return;
-
-error:
-
- rtw_free_xmitframe(pxmitpriv, pcmdframe);
-}
-
-void rtl8723b_download_rsvd_page(struct adapter *padapter, u8 mstatus)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- bool bcn_valid = false;
- u8 DLBcnCount = 0;
- u32 poll = 0;
- u8 val8;
-
- if (mstatus == RT_MEDIA_CONNECT) {
- bool bRecover = false;
- u8 v8;
-
- /* 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(padapter, REG_BCN_PSR_RPT, (0xC000 | pmlmeinfo->aid));
-
- /* set REG_CR bit 8 */
- v8 = rtw_read8(padapter, REG_CR + 1);
- v8 |= BIT(0); /* ENSWBCN */
- rtw_write8(padapter, REG_CR + 1, v8);
-
- /* 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. */
- val8 = rtw_read8(padapter, REG_BCN_CTRL);
- val8 &= ~EN_BCN_FUNCTION;
- val8 |= DIS_TSF_UDT;
- rtw_write8(padapter, REG_BCN_CTRL, val8);
-
- /* Set FWHW_TXQ_CTRL 0x422[6]= 0 to tell Hw the packet is not a real beacon frame. */
- if (pHalData->RegFwHwTxQCtrl & BIT(6))
- bRecover = true;
-
- /* To tell Hw the packet is not a real beacon frame. */
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL + 2, pHalData->RegFwHwTxQCtrl & ~BIT(6));
- pHalData->RegFwHwTxQCtrl &= ~BIT(6);
-
- /* Clear beacon valid check bit. */
- rtw_hal_set_hwreg(padapter, HW_VAR_BCN_VALID, NULL);
- rtw_hal_set_hwreg(padapter, HW_VAR_DL_BCN_SEL, NULL);
-
- DLBcnCount = 0;
- poll = 0;
- do {
- /* download rsvd page. */
- rtl8723b_set_FwRsvdPagePkt(padapter, 0);
- DLBcnCount++;
- do {
- yield();
- /* mdelay(10); */
- /* check rsvd page download OK. */
- rtw_hal_get_hwreg(padapter, HW_VAR_BCN_VALID, (u8 *)(&bcn_valid));
- poll++;
- } while (!bcn_valid && (poll % 10) != 0 && !padapter->bSurpriseRemoved &&
- !padapter->driver_stopped);
-
- } while (!bcn_valid && DLBcnCount <= 100 && !padapter->bSurpriseRemoved &&
- !padapter->driver_stopped);
-
- if (padapter->bSurpriseRemoved || padapter->driver_stopped) {
- } else {
- struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(padapter);
-
- pwrctl->fw_psmode_iface_id = padapter->iface_id;
- }
-
- /* 2010.05.11. Added by tynli. */
- val8 = rtw_read8(padapter, REG_BCN_CTRL);
- val8 |= EN_BCN_FUNCTION;
- val8 &= ~DIS_TSF_UDT;
- rtw_write8(padapter, REG_BCN_CTRL, val8);
-
- /* To make sure that if there exists an adapter which would like to send beacon. */
- /* If exists, the original 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 (bRecover) {
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL + 2, pHalData->RegFwHwTxQCtrl | BIT(6));
- pHalData->RegFwHwTxQCtrl |= BIT(6);
- }
-
- /* Clear CR[8] or beacon packet will not be send to TxBuf anymore. */
- v8 = rtw_read8(padapter, REG_CR + 1);
- v8 &= ~BIT(0); /* ~ENSWBCN */
- rtw_write8(padapter, REG_CR + 1, v8);
- }
-}
-
-void rtl8723b_set_FwJoinBssRpt_cmd(struct adapter *padapter, u8 mstatus)
-{
- if (mstatus == 1)
- rtl8723b_download_rsvd_page(padapter, RT_MEDIA_CONNECT);
-}
-
-/* arg[0] = macid */
-/* arg[1] = raid */
-/* arg[2] = shortGIrate */
-/* arg[3] = init_rate */
-void rtl8723b_Add_RateATid(struct adapter *padapter, u32 bitmap, u8 *arg, u8 rssi_level)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- struct sta_info *psta;
- u8 mac_id = arg[0];
- u8 raid = arg[1];
- u8 shortGI = arg[2];
- u8 bw;
- u32 mask = bitmap & 0x0FFFFFFF;
-
- psta = pmlmeinfo->FW_sta_info[mac_id].psta;
- if (!psta)
- return;
-
- bw = psta->bw_mode;
-
- if (rssi_level != DM_RATR_STA_INIT)
- mask = ODM_Get_Rate_Bitmap(&pHalData->odmpriv, mac_id, mask, rssi_level);
-
- rtl8723b_set_FwMacIdConfig_cmd(padapter, mac_id, raid, bw, shortGI, mask);
-}
-
-static void ConstructBtNullFunctionData(struct adapter *padapter,
- u8 *pframe,
- u32 *pLength,
- u8 *StaAddr,
- u8 bQoS,
- u8 AC,
- u8 bEosp,
- u8 bForcePowerSave)
-{
- struct ieee80211_hdr *pwlanhdr;
- __le16 *fctrl;
- u32 pktlen;
- u8 bssid[ETH_ALEN];
-
- pwlanhdr = (struct ieee80211_hdr *)pframe;
-
- if (!StaAddr) {
- memcpy(bssid, myid(&padapter->eeprompriv), ETH_ALEN);
- StaAddr = bssid;
- }
-
- fctrl = &pwlanhdr->frame_control;
- *fctrl = 0;
- if (bForcePowerSave)
- SetPwrMgt(fctrl);
-
- SetFrDs(fctrl);
- ether_addr_copy(pwlanhdr->addr1, StaAddr);
- ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
- ether_addr_copy(pwlanhdr->addr3, myid(&padapter->eeprompriv));
-
- SetDuration(pwlanhdr, 0);
- 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_hdr_3addr);
- }
-
- *pLength = pktlen;
-}
-
-static void SetFwRsvdPagePkt_BTCoex(struct adapter *padapter)
-{
- struct xmit_frame *pcmdframe;
- struct pkt_attrib *pattrib;
- struct xmit_priv *pxmitpriv;
- u32 BeaconLength = 0;
- u32 BTQosNullLength = 0;
- u8 *ReservedPagePacket;
- u8 TxDescLen, TxDescOffset;
- u8 TotalPageNum = 0, CurtPktPageNum = 0, RsvdPageNum = 0;
- u16 BufIndex, PageSize;
- u32 TotalPacketLen, MaxRsvdPageBufSize = 0;
- struct rsvdpage_loc RsvdPageLoc;
-
- pxmitpriv = &padapter->xmitpriv;
- TxDescLen = TXDESC_SIZE;
- TxDescOffset = TXDESC_OFFSET;
- PageSize = PAGE_SIZE_TX_8723B;
-
- RsvdPageNum = BCNQ_PAGE_NUM_8723B;
- MaxRsvdPageBufSize = RsvdPageNum * PageSize;
-
- pcmdframe = rtw_alloc_cmdxmitframe(pxmitpriv);
- if (!pcmdframe)
- return;
-
- ReservedPagePacket = pcmdframe->buf_addr;
- memset(&RsvdPageLoc, 0, sizeof(struct rsvdpage_loc));
-
- /* 3 (1) beacon */
- BufIndex = TxDescOffset;
- ConstructBeacon(padapter, &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. */
- CurtPktPageNum = (u8)PageNum_128(TxDescLen + BeaconLength);
- /* If we don't add 1 more page, the WOWLAN function has a problem. Baron thinks it's a bug of firmware */
- if (CurtPktPageNum == 1)
- CurtPktPageNum += 1;
- TotalPageNum += CurtPktPageNum;
-
- BufIndex += (CurtPktPageNum * PageSize);
-
- /* Jump to lastest page */
- if (BufIndex < (MaxRsvdPageBufSize - PageSize)) {
- BufIndex = TxDescOffset + (MaxRsvdPageBufSize - PageSize);
- TotalPageNum = BCNQ_PAGE_NUM_8723B - 1;
- }
-
- /* 3 (6) BT Qos null data */
- RsvdPageLoc.LocBTQosNull = TotalPageNum;
- ConstructBtNullFunctionData(padapter,
- &ReservedPagePacket[BufIndex],
- &BTQosNullLength,
- NULL,
- true, 0, 0, false);
-
- rtl8723b_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex - TxDescLen], BTQosNullLength, false, true, false);
-
- CurtPktPageNum = (u8)PageNum_128(TxDescLen + BTQosNullLength);
-
- TotalPageNum += CurtPktPageNum;
-
- TotalPacketLen = BufIndex + BTQosNullLength;
- if (TotalPacketLen > MaxRsvdPageBufSize)
- goto error;
-
- /* update attribute */
- pattrib = &pcmdframe->attrib;
- update_mgntframe_attrib(padapter, pattrib);
- pattrib->qsel = 0x10;
- pattrib->pktlen = pattrib->last_txcmdsz = TotalPacketLen - TxDescOffset;
- dump_mgntframe_and_wait(padapter, pcmdframe, 100);
-
- rtl8723b_set_FwRsvdPage_cmd(padapter, &RsvdPageLoc);
-
- return;
-
-error:
- rtw_free_xmitframe(pxmitpriv, pcmdframe);
-}
-
-void rtl8723b_download_BTCoex_AP_mode_rsvd_page(struct adapter *padapter)
-{
- struct hal_com_data *pHalData;
- struct mlme_ext_priv *pmlmeext;
- struct mlme_ext_info *pmlmeinfo;
- u8 bRecover = false;
- u8 bcn_valid = false;
- u8 DLBcnCount = 0;
- u32 poll = 0;
- u8 val8;
-
- pHalData = GET_HAL_DATA(padapter);
- pmlmeext = &padapter->mlmeextpriv;
- pmlmeinfo = &pmlmeext->mlmext_info;
-
- /* 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(padapter, REG_BCN_PSR_RPT, (0xC000 | pmlmeinfo->aid));
-
- /* set REG_CR bit 8 */
- val8 = rtw_read8(padapter, REG_CR + 1);
- val8 |= BIT(0); /* ENSWBCN */
- rtw_write8(padapter, REG_CR + 1, val8);
-
- /* 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. */
- val8 = rtw_read8(padapter, REG_BCN_CTRL);
- val8 &= ~EN_BCN_FUNCTION;
- val8 |= DIS_TSF_UDT;
- rtw_write8(padapter, REG_BCN_CTRL, val8);
-
- /* Set FWHW_TXQ_CTRL 0x422[6]= 0 to tell Hw the packet is not a real beacon frame. */
- if (pHalData->RegFwHwTxQCtrl & BIT(6))
- bRecover = true;
-
- /* To tell Hw the packet is not a real beacon frame. */
- pHalData->RegFwHwTxQCtrl &= ~BIT(6);
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL + 2, pHalData->RegFwHwTxQCtrl);
-
- /* Clear beacon valid check bit. */
- rtw_hal_set_hwreg(padapter, HW_VAR_BCN_VALID, NULL);
- rtw_hal_set_hwreg(padapter, HW_VAR_DL_BCN_SEL, NULL);
-
- DLBcnCount = 0;
- poll = 0;
- do {
- SetFwRsvdPagePkt_BTCoex(padapter);
- DLBcnCount++;
- do {
- yield();
-/* mdelay(10); */
- /* check rsvd page download OK. */
- rtw_hal_get_hwreg(padapter, HW_VAR_BCN_VALID, &bcn_valid);
- poll++;
- } while (!bcn_valid && (poll % 10) != 0 && !padapter->bSurpriseRemoved &&
- !padapter->driver_stopped);
- } while (!bcn_valid && (DLBcnCount <= 100) && !padapter->bSurpriseRemoved &&
- !padapter->driver_stopped);
-
- if (bcn_valid) {
- struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(padapter);
-
- pwrctl->fw_psmode_iface_id = padapter->iface_id;
- }
-
- /* 2010.05.11. Added by tynli. */
- val8 = rtw_read8(padapter, REG_BCN_CTRL);
- val8 |= EN_BCN_FUNCTION;
- val8 &= ~DIS_TSF_UDT;
- rtw_write8(padapter, REG_BCN_CTRL, val8);
-
- /* To make sure that if there exists an adapter which would like to send beacon. */
- /* If exists, the original 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 (bRecover) {
- pHalData->RegFwHwTxQCtrl |= BIT(6);
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL + 2, pHalData->RegFwHwTxQCtrl);
- }
-
- /* Clear CR[8] or beacon packet will not be send to TxBuf anymore. */
- val8 = rtw_read8(padapter, REG_CR + 1);
- val8 &= ~BIT(0); /* ~ENSWBCN */
- rtw_write8(padapter, REG_CR + 1, val8);
-}
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723b_dm.c b/drivers/staging/rtl8723bs/hal/rtl8723b_dm.c
deleted file mode 100644
index 13efbfa5b58a..000000000000
--- a/drivers/staging/rtl8723bs/hal/rtl8723b_dm.c
+++ /dev/null
@@ -1,256 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-/* Description: */
-/* This file is for 92CE/92CU dynamic mechanism only */
-
-#include <drv_types.h>
-#include <rtl8723b_hal.h>
-
-/* Global var */
-
-/* */
-/* functions */
-/* */
-static void Init_ODM_ComInfo_8723b(struct adapter *Adapter)
-{
-
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- u8 cut_ver, fab_ver;
-
- /* */
- /* Init Value */
- /* */
- memset(pDM_Odm, 0, sizeof(*pDM_Odm));
-
- pDM_Odm->Adapter = Adapter;
-#define ODM_CE 0x04
- ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_PLATFORM, ODM_CE);
- ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_INTERFACE, RTW_SDIO);
- ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_PACKAGE_TYPE, pHalData->PackageType);
- ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_IC_TYPE, ODM_RTL8723B);
-
- fab_ver = ODM_TSMC;
- cut_ver = ODM_CUT_A;
-
- ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_FAB_VER, fab_ver);
- ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_CUT_VER, cut_ver);
-
- ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_PATCH_ID, pHalData->CustomerID);
- /* ODM_CMNINFO_BINHCT_TEST only for MP Team */
- ODM_CmnInfoInit(pDM_Odm, ODM_CMNINFO_BWIFI_TEST, Adapter->registrypriv.wifi_spec);
-
- pdmpriv->InitODMFlag = ODM_RF_CALIBRATION|ODM_RF_TX_PWR_TRACK;
-
- ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_ABILITY, pdmpriv->InitODMFlag);
-}
-
-static void Update_ODM_ComInfo_8723b(struct adapter *Adapter)
-{
- struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
- struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
- struct dvobj_priv *dvobj = adapter_to_dvobj(Adapter);
- struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(Adapter);
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- int i;
- u8 zero = 0;
-
- pdmpriv->InitODMFlag = 0
- | ODM_BB_DIG
- | ODM_BB_RA_MASK
- | ODM_BB_DYNAMIC_TXPWR
- | ODM_BB_FA_CNT
- | ODM_BB_RSSI_MONITOR
- | ODM_BB_CCK_PD
- | ODM_BB_PWR_SAVE
- | ODM_BB_CFO_TRACKING
- | ODM_MAC_EDCA_TURBO
- | ODM_RF_TX_PWR_TRACK
- | ODM_RF_CALIBRATION
- ;
-
- /* */
- /* Pointer reference */
- /* */
- /* ODM_CMNINFO_MAC_PHY_MODE pHalData->MacPhyMode92D */
- /* ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_MAC_PHY_MODE,&(pDM_Odm->u8_temp)); */
-
- ODM_CmnInfoUpdate(pDM_Odm, ODM_CMNINFO_ABILITY, pdmpriv->InitODMFlag);
-
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_TX_UNI, &(dvobj->traffic_stat.tx_bytes));
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_RX_UNI, &(dvobj->traffic_stat.rx_bytes));
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_WM_MODE, &(pmlmeext->cur_wireless_mode));
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_CHNL_OFFSET, &(pHalData->nCur40MhzPrimeSC));
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SEC_MODE, &(Adapter->securitypriv.dot11_privacy_algrthm));
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_BW, &(pHalData->CurrentChannelBW));
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_CHNL, &(pHalData->CurrentChannel));
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_NET_CLOSED, &(Adapter->net_closed));
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_MP_MODE, &zero);
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_FORCED_IGI_LB, &(pHalData->u1ForcedIgiLb));
-
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_SCAN, &(pmlmepriv->bScanInProcess));
- ODM_CmnInfoHook(pDM_Odm, ODM_CMNINFO_POWER_SAVING, &(pwrctrlpriv->bpower_saving));
-
- for (i = 0; i < NUM_STA; i++)
- ODM_CmnInfoPtrArrayHook(pDM_Odm, ODM_CMNINFO_STA_STATUS, i, NULL);
-}
-
-void rtl8723b_InitHalDm(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
- pdmpriv->DM_Type = DM_Type_ByDriver;
- pdmpriv->DMFlag = DYNAMIC_FUNC_DISABLE;
-
- pdmpriv->DMFlag |= DYNAMIC_FUNC_BT;
-
- pdmpriv->InitDMFlag = pdmpriv->DMFlag;
-
- Update_ODM_ComInfo_8723b(Adapter);
-
- ODM_DMInit(pDM_Odm);
-}
-
-void rtl8723b_HalDmWatchDog(struct adapter *Adapter)
-{
- bool fw_current_in_ps_mode = false;
- bool bFwPSAwake = true;
- u8 hw_init_completed = false;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- hw_init_completed = Adapter->hw_init_completed;
-
- if (!hw_init_completed)
- goto skip_dm;
-
- fw_current_in_ps_mode = adapter_to_pwrctl(Adapter)->fw_current_in_ps_mode;
- rtw_hal_get_hwreg(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&bFwPSAwake));
-
- if (hw_init_completed &&
- (!fw_current_in_ps_mode && bFwPSAwake)) {
- rtw_hal_check_rxfifo_full(Adapter);
- }
-
- /* ODM */
- if (hw_init_completed) {
- u8 bLinked = false;
- u8 bsta_state = false;
- bool bBtDisabled = true;
-
- if (rtw_linked_check(Adapter)) {
- bLinked = true;
- if (check_fwstate(&Adapter->mlmepriv, WIFI_STATION_STATE))
- bsta_state = true;
- }
-
- ODM_CmnInfoUpdate(&pHalData->odmpriv, ODM_CMNINFO_LINK, bLinked);
- ODM_CmnInfoUpdate(&pHalData->odmpriv, ODM_CMNINFO_STATION_STATE, bsta_state);
-
- /* ODM_CmnInfoUpdate(&pHalData->odmpriv , ODM_CMNINFO_RSSI_MIN, pdmpriv->MinUndecoratedPWDBForDM); */
-
- bBtDisabled = hal_btcoex_IsBtDisabled(Adapter);
-
- ODM_CmnInfoUpdate(&pHalData->odmpriv, ODM_CMNINFO_BT_ENABLED,
- !bBtDisabled);
-
- ODM_DMWatchdog(&pHalData->odmpriv);
- }
-
-skip_dm:
- return;
-}
-
-void rtl8723b_hal_dm_in_lps(struct adapter *padapter)
-{
- u32 PWDB_rssi = 0;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
- struct sta_priv *pstapriv = &padapter->stapriv;
- struct sta_info *psta = NULL;
-
- /* update IGI */
- ODM_Write_DIG(pDM_Odm, pDM_Odm->RSSI_Min);
-
- /* set rssi to fw */
- psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));
- if (psta && (psta->rssi_stat.UndecoratedSmoothedPWDB > 0)) {
- PWDB_rssi = (psta->mac_id | (psta->rssi_stat.UndecoratedSmoothedPWDB<<16));
-
- rtl8723b_set_rssi_cmd(padapter, (u8 *)&PWDB_rssi);
- }
-
-}
-
-void rtl8723b_HalDmWatchDog_in_LPS(struct adapter *Adapter)
-{
- u8 bLinked = false;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
- struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable;
- struct sta_priv *pstapriv = &Adapter->stapriv;
- struct sta_info *psta = NULL;
-
- if (!Adapter->hw_init_completed)
- goto skip_lps_dm;
-
- if (rtw_linked_check(Adapter))
- bLinked = true;
-
- ODM_CmnInfoUpdate(&pHalData->odmpriv, ODM_CMNINFO_LINK, bLinked);
-
- if (!bLinked)
- goto skip_lps_dm;
-
- if (!(pDM_Odm->SupportAbility & ODM_BB_RSSI_MONITOR))
- goto skip_lps_dm;
-
- /* ODM_DMWatchdog(&pHalData->odmpriv); */
- /* Do DIG by RSSI In LPS-32K */
-
- /* 1 Find MIN-RSSI */
- psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));
- if (!psta)
- goto skip_lps_dm;
-
- pdmpriv->EntryMinUndecoratedSmoothedPWDB = psta->rssi_stat.UndecoratedSmoothedPWDB;
-
- if (pdmpriv->EntryMinUndecoratedSmoothedPWDB <= 0)
- goto skip_lps_dm;
-
- pdmpriv->MinUndecoratedPWDBForDM = pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-
- pDM_Odm->RSSI_Min = pdmpriv->MinUndecoratedPWDBForDM;
-
- /* if (pDM_DigTable->CurIGValue != pDM_Odm->RSSI_Min) */
- if (
- (pDM_DigTable->CurIGValue > pDM_Odm->RSSI_Min + 5) ||
- (pDM_DigTable->CurIGValue < pDM_Odm->RSSI_Min - 5)
- )
- rtw_dm_in_lps_wk_cmd(Adapter);
-
-skip_lps_dm:
-
- return;
-
-}
-
-void rtl8723b_init_dm_priv(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
-
- memset(pdmpriv, 0, sizeof(struct dm_priv));
- Init_ODM_ComInfo_8723b(Adapter);
-}
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723b_hal_init.c b/drivers/staging/rtl8723bs/hal/rtl8723b_hal_init.c
deleted file mode 100644
index 6a4a13544ca1..000000000000
--- a/drivers/staging/rtl8723bs/hal/rtl8723b_hal_init.c
+++ /dev/null
@@ -1,2826 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2013 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <linux/firmware.h>
-#include <linux/slab.h>
-#include <drv_types.h>
-#include <rtl8723b_hal.h>
-#include "hal_com_h2c.h"
-
-static void _FWDownloadEnable(struct adapter *padapter, bool enable)
-{
- u8 tmp, count = 0;
-
- if (enable) {
- /* 8051 enable */
- tmp = rtw_read8(padapter, REG_SYS_FUNC_EN + 1);
- rtw_write8(padapter, REG_SYS_FUNC_EN + 1, tmp | 0x04);
-
- tmp = rtw_read8(padapter, REG_MCUFWDL);
- rtw_write8(padapter, REG_MCUFWDL, tmp|0x01);
-
- do {
- tmp = rtw_read8(padapter, REG_MCUFWDL);
- if (tmp & 0x01)
- break;
- rtw_write8(padapter, REG_MCUFWDL, tmp|0x01);
- msleep(1);
- } while (count++ < 100);
-
- /* 8051 reset */
- tmp = rtw_read8(padapter, REG_MCUFWDL+2);
- rtw_write8(padapter, REG_MCUFWDL+2, tmp&0xf7);
- } else {
- /* MCU firmware download disable. */
- tmp = rtw_read8(padapter, REG_MCUFWDL);
- rtw_write8(padapter, REG_MCUFWDL, tmp&0xfe);
- }
-}
-
-static int _BlockWrite(struct adapter *padapter, void *buffer, u32 buffSize)
-{
- int ret = _SUCCESS;
-
- u32 blockSize_p1 = 4; /* (Default) Phase #1 : PCI muse use 4-byte write to download FW */
- u32 blockSize_p2 = 8; /* Phase #2 : Use 8-byte, if Phase#1 use big size to write FW. */
- u32 blockSize_p3 = 1; /* Phase #3 : Use 1-byte, the remnant of FW image. */
- u32 blockCount_p1 = 0, blockCount_p2 = 0, blockCount_p3 = 0;
- u32 remainSize_p1 = 0, remainSize_p2 = 0;
- u8 *bufferPtr = buffer;
- u32 i = 0, offset = 0;
-
- /* 3 Phase #1 */
- blockCount_p1 = buffSize / blockSize_p1;
- remainSize_p1 = buffSize % blockSize_p1;
-
- for (i = 0; i < blockCount_p1; i++) {
- ret = rtw_write32(padapter, (FW_8723B_START_ADDRESS + i * blockSize_p1), *((u32 *)(bufferPtr + i * blockSize_p1)));
- if (ret == _FAIL) {
- netdev_dbg(padapter->pnetdev, "write failed at %s %d, block:%d\n",
- __func__, __LINE__, i);
- goto exit;
- }
- }
-
- /* 3 Phase #2 */
- if (remainSize_p1) {
- blockCount_p2 = remainSize_p1/blockSize_p2;
- remainSize_p2 = remainSize_p1%blockSize_p2;
- }
-
- /* 3 Phase #3 */
- if (remainSize_p2) {
- offset = (blockCount_p1 * blockSize_p1) + (blockCount_p2 * blockSize_p2);
-
- blockCount_p3 = remainSize_p2 / blockSize_p3;
-
- for (i = 0; i < blockCount_p3; i++) {
- ret = rtw_write8(padapter, (FW_8723B_START_ADDRESS + offset + i), *(bufferPtr + offset + i));
-
- if (ret == _FAIL) {
- netdev_dbg(padapter->pnetdev, "write failed at %s %d, block:%d\n",
- __func__, __LINE__, i);
- goto exit;
- }
- }
- }
-exit:
- return ret;
-}
-
-static int _PageWrite(
- struct adapter *padapter,
- u32 page,
- void *buffer,
- u32 size
-)
-{
- u8 value8;
- u8 u8Page = (u8) (page & 0x07);
-
- value8 = (rtw_read8(padapter, REG_MCUFWDL+2) & 0xF8) | u8Page;
- rtw_write8(padapter, REG_MCUFWDL+2, value8);
-
- return _BlockWrite(padapter, buffer, size);
-}
-
-static int _WriteFW(struct adapter *padapter, void *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;
- u8 *bufferPtr = buffer;
-
- pageNums = size / MAX_DLFW_PAGE_SIZE;
- remainSize = size % MAX_DLFW_PAGE_SIZE;
-
- for (page = 0; page < pageNums; page++) {
- offset = page * MAX_DLFW_PAGE_SIZE;
- ret = _PageWrite(padapter, page, bufferPtr+offset, MAX_DLFW_PAGE_SIZE);
-
- if (ret == _FAIL) {
- netdev_dbg(padapter->pnetdev, "page write failed at %s %d\n",
- __func__, __LINE__);
- goto exit;
- }
- }
-
- if (remainSize) {
- offset = pageNums * MAX_DLFW_PAGE_SIZE;
- page = pageNums;
- ret = _PageWrite(padapter, page, bufferPtr+offset, remainSize);
-
- if (ret == _FAIL) {
- netdev_dbg(padapter->pnetdev, "remaining page write failed at %s %d\n",
- __func__, __LINE__);
- goto exit;
- }
- }
-
-exit:
- return ret;
-}
-
-void _8051Reset8723(struct adapter *padapter)
-{
- u8 cpu_rst;
- u8 io_rst;
-
- /* Reset 8051(WLMCU) IO wrapper */
- /* 0x1c[8] = 0 */
- /* Suggested by Isaac@SD1 and Gimmy@SD1, coding by Lucas@20130624 */
- io_rst = rtw_read8(padapter, REG_RSV_CTRL + 1);
- io_rst &= ~BIT(0);
- rtw_write8(padapter, REG_RSV_CTRL + 1, io_rst);
-
- cpu_rst = rtw_read8(padapter, REG_SYS_FUNC_EN + 1);
- cpu_rst &= ~BIT(2);
- rtw_write8(padapter, REG_SYS_FUNC_EN + 1, cpu_rst);
-
- /* Enable 8051 IO wrapper */
- /* 0x1c[8] = 1 */
- io_rst = rtw_read8(padapter, REG_RSV_CTRL + 1);
- io_rst |= BIT(0);
- rtw_write8(padapter, REG_RSV_CTRL + 1, io_rst);
-
- cpu_rst = rtw_read8(padapter, REG_SYS_FUNC_EN + 1);
- cpu_rst |= BIT(2);
- rtw_write8(padapter, REG_SYS_FUNC_EN + 1, cpu_rst);
-}
-
-u8 g_fwdl_chksum_fail;
-
-static s32 polling_fwdl_chksum(
- struct adapter *adapter, u32 min_cnt, u32 timeout_ms
-)
-{
- s32 ret = _FAIL;
- u32 value32;
- unsigned long start = jiffies;
- u32 cnt = 0;
-
- /* polling CheckSum report */
- do {
- cnt++;
- value32 = rtw_read32(adapter, REG_MCUFWDL);
- if (value32 & FWDL_ChkSum_rpt || adapter->bSurpriseRemoved ||
- adapter->driver_stopped)
- break;
- yield();
- } while (jiffies_to_msecs(jiffies-start) < timeout_ms || cnt < min_cnt);
-
- if (!(value32 & FWDL_ChkSum_rpt))
- goto exit;
-
- if (g_fwdl_chksum_fail) {
- g_fwdl_chksum_fail--;
- goto exit;
- }
-
- ret = _SUCCESS;
-
-exit:
-
- return ret;
-}
-
-u8 g_fwdl_wintint_rdy_fail;
-
-static s32 _FWFreeToGo(struct adapter *adapter, u32 min_cnt, u32 timeout_ms)
-{
- s32 ret = _FAIL;
- u32 value32;
- unsigned long start = jiffies;
- u32 cnt = 0;
-
- value32 = rtw_read32(adapter, REG_MCUFWDL);
- value32 |= MCUFWDL_RDY;
- value32 &= ~WINTINI_RDY;
- rtw_write32(adapter, REG_MCUFWDL, value32);
-
- _8051Reset8723(adapter);
-
- /* polling for FW ready */
- do {
- cnt++;
- value32 = rtw_read32(adapter, REG_MCUFWDL);
- if (value32 & WINTINI_RDY || adapter->bSurpriseRemoved || adapter->driver_stopped)
- break;
- yield();
- } while (jiffies_to_msecs(jiffies - start) < timeout_ms || cnt < min_cnt);
-
- if (!(value32 & WINTINI_RDY))
- goto exit;
-
- if (g_fwdl_wintint_rdy_fail) {
- g_fwdl_wintint_rdy_fail--;
- goto exit;
- }
-
- ret = _SUCCESS;
-
-exit:
-
- return ret;
-}
-
-#define IS_FW_81xxC(padapter) (((GET_HAL_DATA(padapter))->FirmwareSignature & 0xFFF0) == 0x88C0)
-
-void rtl8723b_FirmwareSelfReset(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u8 val;
- u8 Delay = 100;
-
- if (
- !(IS_FW_81xxC(padapter) && ((pHalData->FirmwareVersion < 0x21) || (pHalData->FirmwareVersion == 0x21 && pHalData->FirmwareSubVersion < 0x01)))
- ) { /* after 88C Fw v33.1 */
- /* 0x1cf = 0x20. Inform 8051 to reset. 2009.12.25. tynli_test */
- rtw_write8(padapter, REG_HMETFR+3, 0x20);
-
- val = rtw_read8(padapter, REG_SYS_FUNC_EN + 1);
- while (val & BIT(2)) {
- Delay--;
- if (Delay == 0)
- break;
- udelay(50);
- val = rtw_read8(padapter, REG_SYS_FUNC_EN + 1);
- }
-
- if (Delay == 0) {
- /* force firmware reset */
- val = rtw_read8(padapter, REG_SYS_FUNC_EN + 1);
- rtw_write8(padapter, REG_SYS_FUNC_EN + 1, val & (~BIT(2)));
- }
- }
-}
-
-/* */
-/* Description: */
-/* Download 8192C firmware code. */
-/* */
-/* */
-s32 rtl8723b_FirmwareDownload(struct adapter *padapter, bool bUsedWoWLANFw)
-{
- s32 rtStatus = _SUCCESS;
- u8 write_fw = 0;
- unsigned long fwdl_start_time;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct rt_firmware *pFirmware;
- struct rt_firmware *pBTFirmware;
- struct rt_firmware_hdr *pFwHdr = NULL;
- u8 *pFirmwareBuf;
- u32 FirmwareLen;
- const struct firmware *fw;
- struct device *device = dvobj_to_dev(padapter->dvobj);
- u8 *fwfilepath;
- u8 tmp_ps;
-
- pFirmware = kzalloc_obj(struct rt_firmware);
- if (!pFirmware)
- return _FAIL;
- pBTFirmware = kzalloc_obj(struct rt_firmware);
- if (!pBTFirmware) {
- kfree(pFirmware);
- return _FAIL;
- }
- tmp_ps = rtw_read8(padapter, 0xa3);
- tmp_ps &= 0xf8;
- tmp_ps |= 0x02;
- /* 1. write 0xA3[:2:0] = 3b'010 */
- rtw_write8(padapter, 0xa3, tmp_ps);
- /* 2. read power_state = 0xA0[1:0] */
- tmp_ps = rtw_read8(padapter, 0xa0);
- tmp_ps &= 0x03;
-
- fwfilepath = "rtlwifi/rtl8723bs_nic.bin";
-
- pr_info("rtl8723bs: acquire FW from file:%s\n", fwfilepath);
-
- rtStatus = request_firmware(&fw, fwfilepath, device);
- if (rtStatus) {
- pr_err("Request firmware failed with error 0x%x\n", rtStatus);
- rtStatus = _FAIL;
- goto exit;
- }
-
- if (!fw) {
- pr_err("Firmware %s not available\n", fwfilepath);
- rtStatus = _FAIL;
- goto exit;
- }
-
- if (fw->size > FW_8723B_SIZE) {
- rtStatus = _FAIL;
- release_firmware(fw);
- goto exit;
- }
-
- pFirmware->fw_buffer_sz = kmemdup(fw->data, fw->size, GFP_KERNEL);
- if (!pFirmware->fw_buffer_sz) {
- rtStatus = _FAIL;
- release_firmware(fw);
- goto exit;
- }
-
- pFirmware->fw_length = fw->size;
- release_firmware(fw);
- if (pFirmware->fw_length > FW_8723B_SIZE) {
- rtStatus = _FAIL;
- netdev_emerg(padapter->pnetdev,
- "Firmware size:%u exceed %u\n",
- pFirmware->fw_length, FW_8723B_SIZE);
- goto release_fw1;
- }
-
- pFirmwareBuf = pFirmware->fw_buffer_sz;
- FirmwareLen = pFirmware->fw_length;
-
- /* To Check Fw header. Added by tynli. 2009.12.04. */
- pFwHdr = (struct rt_firmware_hdr *)pFirmwareBuf;
-
- pHalData->FirmwareVersion = le16_to_cpu(pFwHdr->version);
- pHalData->FirmwareSubVersion = le16_to_cpu(pFwHdr->subversion);
- pHalData->FirmwareSignature = le16_to_cpu(pFwHdr->signature);
-
- if (IS_FW_HEADER_EXIST_8723B(pFwHdr)) {
- /* Shift 32 bytes for FW header */
- pFirmwareBuf = pFirmwareBuf + 32;
- FirmwareLen = FirmwareLen - 32;
- }
-
- /* 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. */
- if (rtw_read8(padapter, REG_MCUFWDL) & RAM_DL_SEL) { /* 8051 RAM code */
- rtw_write8(padapter, REG_MCUFWDL, 0x00);
- rtl8723b_FirmwareSelfReset(padapter);
- }
-
- _FWDownloadEnable(padapter, true);
- fwdl_start_time = jiffies;
- while (
- !padapter->driver_stopped &&
- !padapter->bSurpriseRemoved &&
- (write_fw++ < 3 || jiffies_to_msecs(jiffies - fwdl_start_time) < 500)
- ) {
- /* reset FWDL chksum */
- rtw_write8(padapter, REG_MCUFWDL, rtw_read8(padapter, REG_MCUFWDL)|FWDL_ChkSum_rpt);
-
- rtStatus = _WriteFW(padapter, pFirmwareBuf, FirmwareLen);
- if (rtStatus != _SUCCESS)
- continue;
-
- rtStatus = polling_fwdl_chksum(padapter, 5, 50);
- if (rtStatus == _SUCCESS)
- break;
- }
- _FWDownloadEnable(padapter, false);
- if (rtStatus != _SUCCESS)
- goto fwdl_stat;
-
- rtStatus = _FWFreeToGo(padapter, 10, 200);
- if (rtStatus != _SUCCESS)
- goto fwdl_stat;
-
-fwdl_stat:
-
-exit:
- kfree(pFirmware->fw_buffer_sz);
- kfree(pFirmware);
-release_fw1:
- kfree(pBTFirmware);
- return rtStatus;
-}
-
-void rtl8723b_InitializeFirmwareVars(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- /* Init Fw LPS related. */
- adapter_to_pwrctl(padapter)->fw_current_in_ps_mode = false;
-
- /* Init H2C cmd. */
- rtw_write8(padapter, REG_HMETFR, 0x0f);
-
- /* Init H2C counter. by tynli. 2009.12.09. */
- pHalData->LastHMEBoxNum = 0;
-/* pHalData->H2CQueueHead = 0; */
-/* pHalData->H2CQueueTail = 0; */
-/* pHalData->H2CStopInsertQueue = false; */
-}
-
-/* */
-/* Efuse related code */
-/* */
-static u8 hal_EfuseSwitchToBank(
- struct adapter *padapter, u8 bank
-)
-{
- u8 bRet = true;
- u32 value32 = rtw_read32(padapter, EFUSE_TEST);
-
- switch (bank) {
- case 0:
- value32 = (value32 & ~EFUSE_SEL_MASK) | EFUSE_SEL(EFUSE_WIFI_SEL_0);
- break;
- case 1:
- value32 = (value32 & ~EFUSE_SEL_MASK) | EFUSE_SEL(EFUSE_BT_SEL_0);
- break;
- case 2:
- value32 = (value32 & ~EFUSE_SEL_MASK) | EFUSE_SEL(EFUSE_BT_SEL_1);
- break;
- case 3:
- value32 = (value32 & ~EFUSE_SEL_MASK) | EFUSE_SEL(EFUSE_BT_SEL_2);
- break;
- default:
- value32 = (value32 & ~EFUSE_SEL_MASK) | EFUSE_SEL(EFUSE_WIFI_SEL_0);
- bRet = false;
- break;
- }
- rtw_write32(padapter, EFUSE_TEST, value32);
-
- return bRet;
-}
-
-void Hal_GetEfuseDefinition(
- struct adapter *padapter,
- u8 efuseType,
- u8 type,
- void *pOut
-)
-{
- switch (type) {
- case TYPE_EFUSE_MAX_SECTION:
- {
- u8 *pMax_section = pOut;
-
- if (efuseType == EFUSE_WIFI)
- *pMax_section = EFUSE_MAX_SECTION_8723B;
- else
- *pMax_section = EFUSE_BT_MAX_SECTION;
- }
- break;
-
- case TYPE_EFUSE_REAL_CONTENT_LEN:
- {
- u16 *pu2Tmp = pOut;
-
- if (efuseType == EFUSE_WIFI)
- *pu2Tmp = EFUSE_REAL_CONTENT_LEN_8723B;
- else
- *pu2Tmp = EFUSE_BT_REAL_CONTENT_LEN;
- }
- break;
-
- case TYPE_AVAILABLE_EFUSE_BYTES_BANK:
- {
- u16 *pu2Tmp = pOut;
-
- if (efuseType == EFUSE_WIFI)
- *pu2Tmp = (EFUSE_REAL_CONTENT_LEN_8723B-EFUSE_OOB_PROTECT_BYTES);
- else
- *pu2Tmp = (EFUSE_BT_REAL_BANK_CONTENT_LEN-EFUSE_PROTECT_BYTES_BANK);
- }
- break;
-
- case TYPE_AVAILABLE_EFUSE_BYTES_TOTAL:
- {
- u16 *pu2Tmp = pOut;
-
- if (efuseType == EFUSE_WIFI)
- *pu2Tmp = (EFUSE_REAL_CONTENT_LEN_8723B-EFUSE_OOB_PROTECT_BYTES);
- else
- *pu2Tmp = (EFUSE_BT_REAL_CONTENT_LEN-(EFUSE_PROTECT_BYTES_BANK*3));
- }
- break;
-
- case TYPE_EFUSE_MAP_LEN:
- {
- u16 *pu2Tmp = pOut;
-
- if (efuseType == EFUSE_WIFI)
- *pu2Tmp = EFUSE_MAX_MAP_LEN;
- else
- *pu2Tmp = EFUSE_BT_MAP_LEN;
- }
- break;
-
- case TYPE_EFUSE_PROTECT_BYTES_BANK:
- {
- u8 *pu1Tmp = pOut;
-
- if (efuseType == EFUSE_WIFI)
- *pu1Tmp = EFUSE_OOB_PROTECT_BYTES;
- else
- *pu1Tmp = EFUSE_PROTECT_BYTES_BANK;
- }
- break;
-
- case TYPE_EFUSE_CONTENT_LEN_BANK:
- {
- u16 *pu2Tmp = pOut;
-
- if (efuseType == EFUSE_WIFI)
- *pu2Tmp = EFUSE_REAL_CONTENT_LEN_8723B;
- else
- *pu2Tmp = EFUSE_BT_REAL_BANK_CONTENT_LEN;
- }
- break;
-
- default:
- {
- u8 *pu1Tmp = pOut;
- *pu1Tmp = 0;
- }
- break;
- }
-}
-
-void Hal_EfusePowerSwitch(
- struct adapter *padapter, u8 PwrState
-)
-{
- u8 tempval;
- u16 tmpV16;
-
- if (PwrState) {
- /* To avoid cannot access efuse registers after disable/enable several times during DTM test. */
- /* Suggested by SD1 IsaacHsu. 2013.07.08, added by tynli. */
- tempval = rtw_read8(padapter, SDIO_LOCAL_BASE|SDIO_REG_HSUS_CTRL);
- if (tempval & BIT(0)) { /* SDIO local register is suspend */
- u8 count = 0;
-
- tempval &= ~BIT(0);
- rtw_write8(padapter, SDIO_LOCAL_BASE|SDIO_REG_HSUS_CTRL, tempval);
-
- /* check 0x86[1:0]= 10'2h, wait power state to leave suspend */
- do {
- tempval = rtw_read8(padapter, SDIO_LOCAL_BASE|SDIO_REG_HSUS_CTRL);
- tempval &= 0x3;
- if (tempval == 0x02)
- break;
-
- count++;
- if (count >= 100)
- break;
-
- mdelay(10);
- } while (1);
- }
-
- rtw_write8(padapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON);
-
- /* Reset: 0x0000h[28], default valid */
- tmpV16 = rtw_read16(padapter, REG_SYS_FUNC_EN);
- 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 */
- tmpV16 = rtw_read16(padapter, REG_SYS_CLKR);
- 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_ReadEFuse_WiFi(
- struct adapter *padapter,
- u16 _offset,
- u16 _size_byte,
- u8 *pbuf
-)
-{
- u8 *efuseTbl = NULL;
- u16 eFuse_Addr = 0;
- u8 offset, wden;
- u8 efuseHeader, efuseExtHdr, efuseData;
- u16 i, total, used;
- u8 efuse_usage = 0;
-
- /* */
- /* Do NOT excess total size of EFuse table. Added by Roger, 2008.11.10. */
- /* */
- if ((_offset + _size_byte) > EFUSE_MAX_MAP_LEN)
- return;
-
- efuseTbl = kmalloc(EFUSE_MAX_MAP_LEN, GFP_ATOMIC);
- if (!efuseTbl)
- return;
-
- /* 0xff will be efuse default value instead of 0x00. */
- memset(efuseTbl, 0xFF, EFUSE_MAX_MAP_LEN);
-
- /* switch bank back to bank 0 for later BT and wifi use. */
- hal_EfuseSwitchToBank(padapter, 0);
-
- while (AVAILABLE_EFUSE_ADDR(eFuse_Addr)) {
- rtw_efuse_one_byte_read(padapter, eFuse_Addr++, &efuseHeader);
- if (efuseHeader == 0xFF)
- break;
-
- /* Check PG header for section num. */
- if (EXT_HEADER(efuseHeader)) { /* extended header */
- offset = GET_HDR_OFFSET_2_0(efuseHeader);
-
- rtw_efuse_one_byte_read(padapter, eFuse_Addr++, &efuseExtHdr);
- if (ALL_WORDS_DISABLED(efuseExtHdr))
- continue;
-
- offset |= ((efuseExtHdr & 0xF0) >> 1);
- wden = (efuseExtHdr & 0x0F);
- } else {
- offset = ((efuseHeader >> 4) & 0x0f);
- wden = (efuseHeader & 0x0f);
- }
-
- if (offset < EFUSE_MAX_SECTION_8723B) {
- u16 addr;
- /* Get word enable value from PG header */
-
- addr = offset * PGPKT_DATA_SIZE;
- for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {
- /* Check word enable condition in the section */
- if (!(wden & (0x01<<i))) {
- rtw_efuse_one_byte_read(padapter, eFuse_Addr++,
- &efuseData);
- efuseTbl[addr] = efuseData;
-
- rtw_efuse_one_byte_read(padapter, eFuse_Addr++,
- &efuseData);
- efuseTbl[addr+1] = efuseData;
- }
- addr += 2;
- }
- } else {
- eFuse_Addr += rtw_efuse_calculate_word_counts(wden)*2;
- }
- }
-
- /* Copy from Efuse map to output pointer memory!!! */
- for (i = 0; i < _size_byte; i++)
- pbuf[i] = efuseTbl[_offset+i];
-
- /* Calculate Efuse utilization */
- Hal_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, &total);
- used = eFuse_Addr - 1;
- efuse_usage = (u8)((used*100)/total);
-
- rtw_hal_set_hwreg(padapter, HW_VAR_EFUSE_BYTES, (u8 *)&used);
- rtw_hal_set_hwreg(padapter, HW_VAR_EFUSE_USAGE, (u8 *)&efuse_usage);
-
- kfree(efuseTbl);
-}
-
-static void hal_ReadEFuse_BT(
- struct adapter *padapter,
- u16 _offset,
- u16 _size_byte,
- u8 *pbuf
-)
-{
- u8 *efuseTbl;
- u8 bank;
- u16 eFuse_Addr;
- u8 efuseHeader, efuseExtHdr, efuseData;
- u8 offset, wden;
- u16 i, total, used;
- u8 efuse_usage;
-
- /* */
- /* Do NOT excess total size of EFuse table. Added by Roger, 2008.11.10. */
- /* */
- if ((_offset + _size_byte) > EFUSE_BT_MAP_LEN)
- return;
-
- efuseTbl = kmalloc(EFUSE_BT_MAP_LEN, GFP_ATOMIC);
- if (!efuseTbl)
- return;
-
- /* 0xff will be efuse default value instead of 0x00. */
- memset(efuseTbl, 0xFF, EFUSE_BT_MAP_LEN);
-
- Hal_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_BANK, &total);
-
- for (bank = 1; bank < 3; bank++) { /* 8723b Max bake 0~2 */
- if (!hal_EfuseSwitchToBank(padapter, bank))
- goto exit;
-
- eFuse_Addr = 0;
-
- while (AVAILABLE_EFUSE_ADDR(eFuse_Addr)) {
- rtw_efuse_one_byte_read(padapter, eFuse_Addr++, &efuseHeader);
- if (efuseHeader == 0xFF)
- break;
-
- /* Check PG header for section num. */
- if (EXT_HEADER(efuseHeader)) { /* extended header */
- offset = GET_HDR_OFFSET_2_0(efuseHeader);
-
- rtw_efuse_one_byte_read(padapter, eFuse_Addr++, &efuseExtHdr);
- if (ALL_WORDS_DISABLED(efuseExtHdr))
- continue;
-
- offset |= ((efuseExtHdr & 0xF0) >> 1);
- wden = (efuseExtHdr & 0x0F);
- } else {
- offset = ((efuseHeader >> 4) & 0x0f);
- wden = (efuseHeader & 0x0f);
- }
-
- if (offset < EFUSE_BT_MAX_SECTION) {
- u16 addr = offset * PGPKT_DATA_SIZE;
-
- for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {
- /* Check word enable condition in the section */
- if (!(wden & (0x01<<i))) {
- rtw_efuse_one_byte_read(padapter, eFuse_Addr++,
- &efuseData);
- efuseTbl[addr] = efuseData;
-
- rtw_efuse_one_byte_read(padapter, eFuse_Addr++,
- &efuseData);
- efuseTbl[addr+1] = efuseData;
- }
- addr += 2;
- }
- } else {
- eFuse_Addr += rtw_efuse_calculate_word_counts(wden)*2;
- }
- }
-
- if ((eFuse_Addr - 1) < total)
- break;
-
- }
-
- /* switch bank back to bank 0 for later BT and wifi use. */
- hal_EfuseSwitchToBank(padapter, 0);
-
- /* Copy from Efuse map to output pointer memory!!! */
- for (i = 0; i < _size_byte; i++)
- pbuf[i] = efuseTbl[_offset+i];
-
- /* */
- /* Calculate Efuse utilization. */
- /* */
- Hal_GetEfuseDefinition(padapter, EFUSE_BT, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, &total);
- used = (EFUSE_BT_REAL_BANK_CONTENT_LEN*(bank-1)) + eFuse_Addr - 1;
- efuse_usage = (u8)((used*100)/total);
-
- rtw_hal_set_hwreg(padapter, HW_VAR_EFUSE_BT_BYTES, (u8 *)&used);
- rtw_hal_set_hwreg(padapter, HW_VAR_EFUSE_BT_USAGE, (u8 *)&efuse_usage);
-
-exit:
- kfree(efuseTbl);
-}
-
-void Hal_ReadEFuse(
- struct adapter *padapter,
- u8 efuseType,
- u16 _offset,
- u16 _size_byte,
- u8 *pbuf
-)
-{
- if (efuseType == EFUSE_WIFI)
- hal_ReadEFuse_WiFi(padapter, _offset, _size_byte, pbuf);
- else
- hal_ReadEFuse_BT(padapter, _offset, _size_byte, pbuf);
-}
-
-void rtl8723b_read_chip_version(struct adapter *padapter)
-{
- u32 value32;
- struct hal_com_data *pHalData;
-
-/* YJ, TODO, move read chip type here */
- pHalData = GET_HAL_DATA(padapter);
-
- value32 = rtw_read32(padapter, REG_SYS_CFG);
- pHalData->chip_normal = ((value32 & RTL_ID) ? false : true);
-}
-
-void rtl8723b_InitBeaconParameters(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u16 val16;
- u8 val8 = DIS_TSF_UDT;
-
- val16 = val8 | (val8 << 8); /* port0 and port1 */
-
- /* Enable prot0 beacon function for PSTDMA */
- val16 |= EN_BCN_FUNCTION;
-
- rtw_write16(padapter, REG_BCN_CTRL, val16);
-
- rtw_write16(padapter, REG_TBTT_PROHIBIT, TBTT_PROHIBIT_TIME_8723B);
- /* Firmware will control REG_DRVERLYINT when power saving is enable, */
- /* so don't set this register on STA mode. */
- if (!check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE))
- rtw_write8(padapter, REG_DRVERLYINT, DRIVER_EARLY_INT_TIME_8723B); /* 5ms */
- rtw_write8(padapter, REG_BCNDMATIM, BCN_DMA_ATIME_INT_TIME_8723B); /* 2ms */
-
- /* Suggested by designer timchen. Change beacon AIFS to the largest number */
- /* because test chip does not contension before sending beacon. by tynli. 2009.11.03 */
- rtw_write16(padapter, REG_BCNTCFG, BCNTCFG_8723B);
-
- pHalData->RegFwHwTxQCtrl = rtw_read8(padapter, REG_FWHW_TXQ_CTRL+2);
- pHalData->RegReg542 = rtw_read8(padapter, REG_TBTT_PROHIBIT+2);
-}
-
-void _InitBurstPktLen_8723BS(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- rtw_write8(Adapter, 0x4c7, rtw_read8(Adapter, 0x4c7)|BIT(7)); /* enable single pkt ampdu */
- rtw_write8(Adapter, REG_RX_PKT_LIMIT_8723B, 0x18); /* for VHT packet length 11K */
- rtw_write8(Adapter, REG_MAX_AGGR_NUM_8723B, 0x1F);
- rtw_write8(Adapter, REG_PIFS_8723B, 0x00);
- rtw_write8(Adapter, REG_FWHW_TXQ_CTRL_8723B, rtw_read8(Adapter, REG_FWHW_TXQ_CTRL)&(~BIT(7)));
- if (pHalData->AMPDUBurstMode)
- rtw_write8(Adapter, REG_AMPDU_BURST_MODE_8723B, 0x5F);
- rtw_write8(Adapter, REG_AMPDU_MAX_TIME_8723B, 0x70);
-
- /* ARFB table 9 for 11ac 5G 2SS */
- rtw_write32(Adapter, REG_ARFR0_8723B, 0x00000010);
- if (pHalData->chip_normal)
- rtw_write32(Adapter, REG_ARFR0_8723B+4, 0xfffff000);
- else
- rtw_write32(Adapter, REG_ARFR0_8723B+4, 0x3e0ff000);
-
- /* ARFB table 10 for 11ac 5G 1SS */
- rtw_write32(Adapter, REG_ARFR1_8723B, 0x00000010);
- rtw_write32(Adapter, REG_ARFR1_8723B+4, 0x003ff000);
-}
-
-static void ResumeTxBeacon(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- pHalData->RegFwHwTxQCtrl |= BIT(6);
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl);
- rtw_write8(padapter, REG_TBTT_PROHIBIT+1, 0xff);
- pHalData->RegReg542 |= BIT(0);
- rtw_write8(padapter, REG_TBTT_PROHIBIT+2, pHalData->RegReg542);
-}
-
-static void StopTxBeacon(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- pHalData->RegFwHwTxQCtrl &= ~BIT(6);
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, pHalData->RegFwHwTxQCtrl);
- rtw_write8(padapter, REG_TBTT_PROHIBIT+1, 0x64);
- pHalData->RegReg542 &= ~BIT(0);
- rtw_write8(padapter, REG_TBTT_PROHIBIT+2, pHalData->RegReg542);
-}
-
-static void _BeaconFunctionEnable(struct adapter *padapter, u8 Enable, u8 Linked)
-{
- rtw_write8(padapter, REG_BCN_CTRL, DIS_TSF_UDT | EN_BCN_FUNCTION | DIS_BCNQ_SUB);
- rtw_write8(padapter, REG_RD_CTRL+1, 0x6F);
-}
-
-void rtl8723b_SetBeaconRelatedRegisters(struct adapter *padapter)
-{
- u8 val8;
- u32 value32;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- u32 bcn_ctrl_reg;
-
- /* reset TSF, enable update TSF, correcting TSF On Beacon */
-
- /* REG_BCN_INTERVAL */
- /* REG_BCNDMATIM */
- /* REG_ATIMWND */
- /* REG_TBTT_PROHIBIT */
- /* REG_DRVERLYINT */
- /* REG_BCN_MAX_ERR */
- /* REG_BCNTCFG (0x510) */
- /* REG_DUAL_TSF_RST */
- /* REG_BCN_CTRL (0x550) */
-
- bcn_ctrl_reg = REG_BCN_CTRL;
-
- /* */
- /* ATIM window */
- /* */
- rtw_write16(padapter, REG_ATIMWND, 2);
-
- /* */
- /* Beacon interval (in unit of TU). */
- /* */
- rtw_write16(padapter, REG_BCN_INTERVAL, pmlmeinfo->bcn_interval);
-
- rtl8723b_InitBeaconParameters(padapter);
-
- rtw_write8(padapter, REG_SLOT, 0x09);
-
- /* */
- /* Reset TSF Timer to zero, added by Roger. 2008.06.24 */
- /* */
- value32 = rtw_read32(padapter, REG_TCR);
- value32 &= ~TSFRST;
- rtw_write32(padapter, REG_TCR, value32);
-
- value32 |= TSFRST;
- rtw_write32(padapter, REG_TCR, value32);
-
- /* NOTE: Fix test chip's bug (about contention windows's randomness) */
- if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE |
- WIFI_ADHOC_MASTER_STATE | WIFI_AP_STATE)) {
- rtw_write8(padapter, REG_RXTSF_OFFSET_CCK, 0x50);
- rtw_write8(padapter, REG_RXTSF_OFFSET_OFDM, 0x50);
- }
-
- _BeaconFunctionEnable(padapter, true, true);
-
- ResumeTxBeacon(padapter);
- val8 = rtw_read8(padapter, bcn_ctrl_reg);
- val8 |= DIS_BCNQ_SUB;
- rtw_write8(padapter, bcn_ctrl_reg, val8);
-}
-
-void hal_notch_filter_8723b(struct adapter *adapter, bool enable)
-{
- if (enable)
- rtw_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) | BIT(1));
- else
- rtw_write8(adapter, rOFDM0_RxDSP+1, rtw_read8(adapter, rOFDM0_RxDSP+1) & ~BIT(1));
-}
-
-void UpdateHalRAMask8723B(struct adapter *padapter, u32 mac_id, u8 rssi_level)
-{
- u32 mask, rate_bitmap;
- u8 short_gi_rate = false;
- struct sta_info *psta;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dm_priv *pdmpriv = &pHalData->dmpriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- if (mac_id >= NUM_STA) /* CAM_SIZE */
- return;
-
- psta = pmlmeinfo->FW_sta_info[mac_id].psta;
- if (!psta)
- return;
-
- short_gi_rate = query_ra_short_GI(psta);
-
- mask = psta->ra_mask;
-
- rate_bitmap = 0xffffffff;
- rate_bitmap = ODM_Get_Rate_Bitmap(&pHalData->odmpriv, mac_id, mask, rssi_level);
-
- mask &= rate_bitmap;
-
- rate_bitmap = hal_btcoex_GetRaMask(padapter);
- mask &= ~rate_bitmap;
-
- if (pHalData->fw_ractrl)
- rtl8723b_set_FwMacIdConfig_cmd(padapter, mac_id, psta->raid, psta->bw_mode, short_gi_rate, mask);
-
- /* set correct initial date rate for each mac_id */
- pdmpriv->INIDATA_RATE[mac_id] = psta->init_rate;
-}
-
-void rtl8723b_InitAntenna_Selection(struct adapter *padapter)
-{
- u8 val;
-
- val = rtw_read8(padapter, REG_LEDCFG2);
- /* Let 8051 take control antenna setting */
- val |= BIT(7); /* DPDT_SEL_EN, 0x4C[23] */
- rtw_write8(padapter, REG_LEDCFG2, val);
-}
-
-void rtl8723b_init_default_value(struct adapter *padapter)
-{
- struct hal_com_data *pHalData;
- struct dm_priv *pdmpriv;
- u8 i;
-
- pHalData = GET_HAL_DATA(padapter);
- pdmpriv = &pHalData->dmpriv;
-
- padapter->registrypriv.wireless_mode = WIRELESS_11BG_24N;
-
- /* init default value */
- pHalData->fw_ractrl = false;
- if (!adapter_to_pwrctl(padapter)->bkeepfwalive)
- pHalData->LastHMEBoxNum = 0;
-
- /* init dm default value */
- pdmpriv->TM_Trigger = 0;/* for IQK */
-/* pdmpriv->binitialized = false; */
-/* pdmpriv->prv_traffic_idx = 3; */
-/* pdmpriv->initialize = 0; */
-
- pdmpriv->ThermalValue_HP_index = 0;
- for (i = 0; i < HP_THERMAL_NUM; i++)
- pdmpriv->ThermalValue_HP[i] = 0;
-
- /* init Efuse variables */
- pHalData->EfuseUsedBytes = 0;
- pHalData->EfuseUsedPercentage = 0;
-#ifdef HAL_EFUSE_MEMORY
- pHalData->EfuseHal.fakeEfuseBank = 0;
- pHalData->EfuseHal.fakeEfuseUsedBytes = 0;
- memset(pHalData->EfuseHal.fakeEfuseContent, 0xFF, EFUSE_MAX_HW_SIZE);
- memset(pHalData->EfuseHal.fakeEfuseInitMap, 0xFF, EFUSE_MAX_MAP_LEN);
- memset(pHalData->EfuseHal.fakeEfuseModifiedMap, 0xFF, EFUSE_MAX_MAP_LEN);
- pHalData->EfuseHal.BTEfuseUsedBytes = 0;
- pHalData->EfuseHal.BTEfuseUsedPercentage = 0;
- memset(pHalData->EfuseHal.BTEfuseContent, 0xFF, EFUSE_MAX_BT_BANK*EFUSE_MAX_HW_SIZE);
- memset(pHalData->EfuseHal.BTEfuseInitMap, 0xFF, EFUSE_BT_MAX_MAP_LEN);
- memset(pHalData->EfuseHal.BTEfuseModifiedMap, 0xFF, EFUSE_BT_MAX_MAP_LEN);
- pHalData->EfuseHal.fakeBTEfuseUsedBytes = 0;
- memset(pHalData->EfuseHal.fakeBTEfuseContent, 0xFF, EFUSE_MAX_BT_BANK*EFUSE_MAX_HW_SIZE);
- memset(pHalData->EfuseHal.fakeBTEfuseInitMap, 0xFF, EFUSE_BT_MAX_MAP_LEN);
- memset(pHalData->EfuseHal.fakeBTEfuseModifiedMap, 0xFF, EFUSE_BT_MAX_MAP_LEN);
-#endif
-}
-
-u8 GetEEPROMSize8723B(struct adapter *padapter)
-{
- u8 size = 0;
- u32 cr;
-
- cr = rtw_read16(padapter, REG_9346CR);
- /* 6: EEPROM used is 93C46, 4: boot from E-Fuse. */
- size = (cr & BOOT_FROM_EEPROM) ? 6 : 4;
-
- return size;
-}
-
-/* */
-/* */
-/* LLT R/W/Init function */
-/* */
-/* */
-s32 rtl8723b_InitLLTTable(struct adapter *padapter)
-{
- unsigned long start, passing_time;
- u32 val32;
- s32 ret = _FAIL;
-
- val32 = rtw_read32(padapter, REG_AUTO_LLT);
- val32 |= BIT_AUTO_INIT_LLT;
- rtw_write32(padapter, REG_AUTO_LLT, val32);
-
- start = jiffies;
-
- do {
- val32 = rtw_read32(padapter, REG_AUTO_LLT);
- if (!(val32 & BIT_AUTO_INIT_LLT)) {
- ret = _SUCCESS;
- break;
- }
-
- passing_time = jiffies_to_msecs(jiffies - start);
- if (passing_time > 1000)
- break;
-
- msleep(1);
- } while (1);
-
- return ret;
-}
-
-static void hal_get_chnl_group_8723b(u8 channel, u8 *group)
-{
- if (channel >= 1 && channel <= 2)
- *group = 0;
- else if (channel >= 3 && channel <= 5)
- *group = 1;
- else if (channel >= 6 && channel <= 8)
- *group = 2;
- else if (channel >= 9 && channel <= 11)
- *group = 3;
- else if (channel >= 12 && channel <= 14)
- *group = 4;
-}
-
-void Hal_InitPGData(struct adapter *padapter, u8 *PROMContent)
-{
- struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-
- if (!pEEPROM->bautoload_fail_flag) { /* autoload OK. */
- if (!pEEPROM->EepromOrEfuse) {
- /* Read EFUSE real map to shadow. */
- rtw_efuse_shadow_map_update(padapter, EFUSE_WIFI);
- memcpy(PROMContent, pEEPROM->efuse_eeprom_data, HWSET_MAX_SIZE_8723B);
- }
- } else {/* autoload fail */
- if (!pEEPROM->EepromOrEfuse)
- rtw_efuse_shadow_map_update(padapter, EFUSE_WIFI);
- memcpy(PROMContent, pEEPROM->efuse_eeprom_data, HWSET_MAX_SIZE_8723B);
- }
-}
-
-void Hal_EfuseParseIDCode(struct adapter *padapter, u8 *hwinfo)
-{
- struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-/* struct hal_com_data *pHalData = GET_HAL_DATA(padapter); */
- u16 EEPROMId;
-
- /* Check 0x8129 again for making sure autoload status!! */
- EEPROMId = le16_to_cpu(*((__le16 *)hwinfo));
- if (EEPROMId != RTL_EEPROM_ID) {
- pEEPROM->bautoload_fail_flag = true;
- } else
- pEEPROM->bautoload_fail_flag = false;
-}
-
-static void Hal_ReadPowerValueFromPROM_8723B(
- struct adapter *Adapter,
- struct TxPowerInfo24G *pwrInfo24G,
- u8 *PROMContent,
- bool AutoLoadFail
-)
-{
- u32 rfPath, eeAddr = EEPROM_TX_PWR_INX_8723B, group, TxCount = 0;
-
- memset(pwrInfo24G, 0, sizeof(struct TxPowerInfo24G));
-
- if (PROMContent[eeAddr+1] == 0xFF)
- AutoLoadFail = true;
-
- if (AutoLoadFail) {
- for (rfPath = 0; rfPath < MAX_RF_PATH; 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 < MAX_RF_PATH; rfPath++) {
- /* 2 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++;
- }
- }
- }
-}
-
-void Hal_EfuseParseTxPowerInfo_8723B(
- struct adapter *padapter, u8 *PROMContent, bool AutoLoadFail
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct TxPowerInfo24G pwrInfo24G;
- u8 rfPath, ch, TxCount = 1;
-
- Hal_ReadPowerValueFromPROM_8723B(padapter, &pwrInfo24G, PROMContent, AutoLoadFail);
- for (rfPath = 0 ; rfPath < MAX_RF_PATH ; rfPath++) {
- for (ch = 0 ; ch < CHANNEL_MAX_NUMBER; ch++) {
- u8 group = 0;
-
- hal_get_chnl_group_8723b(ch + 1, &group);
-
- if (ch == 14-1) {
- pHalData->Index24G_CCK_Base[rfPath][ch] = pwrInfo24G.IndexCCK_Base[rfPath][5];
- pHalData->Index24G_BW40_Base[rfPath][ch] = pwrInfo24G.IndexBW40_Base[rfPath][group];
- } else {
- pHalData->Index24G_CCK_Base[rfPath][ch] = pwrInfo24G.IndexCCK_Base[rfPath][group];
- pHalData->Index24G_BW40_Base[rfPath][ch] = pwrInfo24G.IndexBW40_Base[rfPath][group];
- }
- }
-
- for (TxCount = 0; TxCount < MAX_TX_COUNT; TxCount++) {
- pHalData->OFDM_24G_Diff[rfPath][TxCount] = pwrInfo24G.OFDM_Diff[rfPath][TxCount];
- pHalData->BW20_24G_Diff[rfPath][TxCount] = pwrInfo24G.BW20_Diff[rfPath][TxCount];
- pHalData->BW40_24G_Diff[rfPath][TxCount] = pwrInfo24G.BW40_Diff[rfPath][TxCount];
- }
- }
-
- /* 2010/10/19 MH Add Regulator recognize for CU. */
- if (!AutoLoadFail) {
- pHalData->EEPROMRegulatory = (PROMContent[EEPROM_RF_BOARD_OPTION_8723B]&0x7); /* bit0~2 */
- if (PROMContent[EEPROM_RF_BOARD_OPTION_8723B] == 0xFF)
- pHalData->EEPROMRegulatory = (EEPROM_DEFAULT_BOARD_OPTION&0x7); /* bit0~2 */
- } else
- pHalData->EEPROMRegulatory = 0;
-}
-
-void Hal_EfuseParseBTCoexistInfo_8723B(
- struct adapter *padapter, u8 *hwinfo, bool AutoLoadFail
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u8 tempval;
- u32 tmpu4;
-
- if (!AutoLoadFail) {
- tmpu4 = rtw_read32(padapter, REG_MULTI_FUNC_CTRL);
- if (tmpu4 & BT_FUNC_EN)
- pHalData->EEPROMBluetoothCoexist = true;
- else
- pHalData->EEPROMBluetoothCoexist = false;
-
- tempval = hwinfo[EEPROM_RF_BT_SETTING_8723B];
- if (tempval != 0xFF) {
- pHalData->EEPROMBluetoothAntNum = tempval & BIT(0);
- /* EFUSE_0xC3[6] == 0, S1(Main)-RF_PATH_A; */
- /* EFUSE_0xC3[6] == 1, S0(Aux)-RF_PATH_B */
- if (tempval & BIT(6))
- pHalData->ant_path = RF_PATH_B;
- else
- pHalData->ant_path = RF_PATH_A;
- } else {
- pHalData->EEPROMBluetoothAntNum = Ant_x1;
- if (pHalData->PackageType == PACKAGE_QFN68)
- pHalData->ant_path = RF_PATH_B;
- else
- pHalData->ant_path = RF_PATH_A;
- }
- } else {
- pHalData->EEPROMBluetoothCoexist = false;
- pHalData->EEPROMBluetoothAntNum = Ant_x1;
- pHalData->ant_path = RF_PATH_A;
- }
-
- if (padapter->registrypriv.ant_num > 0) {
- switch (padapter->registrypriv.ant_num) {
- case 1:
- pHalData->EEPROMBluetoothAntNum = Ant_x1;
- break;
- case 2:
- pHalData->EEPROMBluetoothAntNum = Ant_x2;
- break;
- default:
- break;
- }
- }
-
- hal_btcoex_SetBTCoexist(padapter, pHalData->EEPROMBluetoothCoexist);
- hal_btcoex_SetPgAntNum(padapter, pHalData->EEPROMBluetoothAntNum == Ant_x2 ? 2 : 1);
- if (pHalData->EEPROMBluetoothAntNum == Ant_x1)
- hal_btcoex_SetSingleAntPath(padapter, pHalData->ant_path);
-}
-
-void Hal_EfuseParsePackageType_8723B(
- struct adapter *padapter, u8 *hwinfo, bool AutoLoadFail
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u8 package;
- u8 efuseContent;
-
- Hal_EfusePowerSwitch(padapter, true);
- rtw_efuse_one_byte_read(padapter, 0x1FB, &efuseContent);
- Hal_EfusePowerSwitch(padapter, false);
-
- package = efuseContent & 0x7;
- switch (package) {
- case 0x4:
- pHalData->PackageType = PACKAGE_TFBGA79;
- break;
- case 0x5:
- pHalData->PackageType = PACKAGE_TFBGA90;
- break;
- case 0x6:
- pHalData->PackageType = PACKAGE_QFN68;
- break;
- case 0x7:
- pHalData->PackageType = PACKAGE_TFBGA80;
- break;
-
- default:
- pHalData->PackageType = PACKAGE_DEFAULT;
- break;
- }
-}
-
-void Hal_EfuseParseVoltage_8723B(
- struct adapter *padapter, u8 *hwinfo, bool AutoLoadFail
-)
-{
- struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-
- /* memcpy(pEEPROM->adjuseVoltageVal, &hwinfo[EEPROM_Voltage_ADDR_8723B], 1); */
- pEEPROM->adjuseVoltageVal = (hwinfo[EEPROM_Voltage_ADDR_8723B] & 0xf0) >> 4;
-}
-
-void Hal_EfuseParseChnlPlan_8723B(
- struct adapter *padapter, u8 *hwinfo, bool AutoLoadFail
-)
-{
- padapter->mlmepriv.ChannelPlan = hal_com_config_channel_plan(
- padapter,
- hwinfo ? hwinfo[EEPROM_ChannelPlan_8723B] : 0xFF,
- padapter->registrypriv.channel_plan,
- RT_CHANNEL_DOMAIN_WORLD_NULL,
- AutoLoadFail
- );
-
- Hal_ChannelPlanToRegulation(padapter, padapter->mlmepriv.ChannelPlan);
-}
-
-void Hal_EfuseParseXtal_8723B(
- struct adapter *padapter, u8 *hwinfo, bool AutoLoadFail
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- if (!AutoLoadFail) {
- pHalData->CrystalCap = hwinfo[EEPROM_XTAL_8723B];
- if (pHalData->CrystalCap == 0xFF)
- pHalData->CrystalCap = EEPROM_Default_CrystalCap_8723B; /* what value should 8812 set? */
- } else
- pHalData->CrystalCap = EEPROM_Default_CrystalCap_8723B;
-}
-
-void Hal_EfuseParseThermalMeter_8723B(
- struct adapter *padapter, u8 *PROMContent, u8 AutoLoadFail
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- /* */
- /* ThermalMeter from EEPROM */
- /* */
- if (!AutoLoadFail)
- pHalData->EEPROMThermalMeter = PROMContent[EEPROM_THERMAL_METER_8723B];
- else
- pHalData->EEPROMThermalMeter = EEPROM_Default_ThermalMeter_8723B;
-
- if ((pHalData->EEPROMThermalMeter == 0xff) || AutoLoadFail)
- pHalData->EEPROMThermalMeter = EEPROM_Default_ThermalMeter_8723B;
-}
-
-void Hal_ReadRFGainOffset(
- struct adapter *Adapter, u8 *PROMContent, bool AutoloadFail
-)
-{
- /* */
- /* BB_RF Gain Offset from EEPROM */
- /* */
-
- if (!AutoloadFail) {
- Adapter->eeprompriv.EEPROMRFGainOffset = PROMContent[EEPROM_RF_GAIN_OFFSET];
- Adapter->eeprompriv.EEPROMRFGainVal = rtw_efuse_read_1_byte(Adapter,
- EEPROM_RF_GAIN_VAL);
- } else {
- Adapter->eeprompriv.EEPROMRFGainOffset = 0;
- Adapter->eeprompriv.EEPROMRFGainVal = 0xFF;
- }
-}
-
-u8 BWMapping_8723B(struct adapter *Adapter, struct pkt_attrib *pattrib)
-{
- u8 BWSettingOfDesc = 0;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- if (pHalData->CurrentChannelBW == CHANNEL_WIDTH_40) {
- if (pattrib->bwmode == CHANNEL_WIDTH_40)
- BWSettingOfDesc = 1;
- else
- BWSettingOfDesc = 0;
- } else
- BWSettingOfDesc = 0;
-
- /* if (pTcb->bBTTxPacket) */
- /* BWSettingOfDesc = 0; */
-
- return BWSettingOfDesc;
-}
-
-u8 SCMapping_8723B(struct adapter *Adapter, struct pkt_attrib *pattrib)
-{
- u8 SCSettingOfDesc = 0;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- if (pHalData->CurrentChannelBW == CHANNEL_WIDTH_40) {
- if (pattrib->bwmode == CHANNEL_WIDTH_40) {
- SCSettingOfDesc = HT_DATA_SC_DONOT_CARE;
- } else if (pattrib->bwmode == CHANNEL_WIDTH_20) {
- if (pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_UPPER) {
- SCSettingOfDesc = HT_DATA_SC_20_UPPER_OF_40MHZ;
- } else if (pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER) {
- SCSettingOfDesc = HT_DATA_SC_20_LOWER_OF_40MHZ;
- } else {
- SCSettingOfDesc = HT_DATA_SC_DONOT_CARE;
- }
- }
- } else {
- SCSettingOfDesc = HT_DATA_SC_DONOT_CARE;
- }
-
- return SCSettingOfDesc;
-}
-
-static void rtl8723b_cal_txdesc_chksum(struct tx_desc *ptxdesc)
-{
- u16 *usPtr = (u16 *)ptxdesc;
- u32 count;
- u32 index;
- u16 checksum = 0;
-
- /* Clear first */
- ptxdesc->txdw7 &= cpu_to_le32(0xffff0000);
-
- /* checksum is always calculated by first 32 bytes, */
- /* and it doesn't depend on TX DESC length. */
- /* Thomas, Lucas@SD4, 20130515 */
- count = 16;
-
- for (index = 0; index < count; index++)
- checksum |= le16_to_cpu(*(__le16 *)(usPtr + index));
-
- ptxdesc->txdw7 |= cpu_to_le32(checksum & 0x0000ffff);
-}
-
-static u8 fill_txdesc_sectype(struct pkt_attrib *pattrib)
-{
- u8 sectype = 0;
-
- if ((pattrib->encrypt > 0) && !pattrib->bswenc) {
- switch (pattrib->encrypt) {
- /* SEC_TYPE */
- case _WEP40_:
- case _WEP104_:
- case _TKIP_:
- case _TKIP_WTMIC_:
- sectype = 1;
- break;
-
- case _AES_:
- sectype = 3;
- break;
-
- case _NO_PRIVACY_:
- default:
- break;
- }
- }
- return sectype;
-}
-
-static void fill_txdesc_vcs_8723b(struct adapter *padapter, struct pkt_attrib *pattrib, struct txdesc_8723b *ptxdesc)
-{
- if (pattrib->vcs_mode) {
- switch (pattrib->vcs_mode) {
- case RTS_CTS:
- ptxdesc->rtsen = 1;
- /* ENABLE HW RTS */
- ptxdesc->hw_rts_en = 1;
- break;
-
- case CTS_TO_SELF:
- ptxdesc->cts2self = 1;
- break;
-
- case NONE_VCS:
- default:
- break;
- }
-
- ptxdesc->rtsrate = 8; /* RTS Rate =24M */
- ptxdesc->rts_ratefb_lmt = 0xF;
-
- if (padapter->mlmeextpriv.mlmext_info.preamble_mode == PREAMBLE_SHORT)
- ptxdesc->rts_short = 1;
-
- /* Set RTS BW */
- if (pattrib->ht_en)
- ptxdesc->rts_sc = SCMapping_8723B(padapter, pattrib);
- }
-}
-
-static void fill_txdesc_phy_8723b(struct adapter *padapter, struct pkt_attrib *pattrib, struct txdesc_8723b *ptxdesc)
-{
- if (pattrib->ht_en) {
- ptxdesc->data_bw = BWMapping_8723B(padapter, pattrib);
-
- ptxdesc->data_sc = SCMapping_8723B(padapter, pattrib);
- }
-}
-
-static void rtl8723b_fill_default_txdesc(
- struct xmit_frame *pxmitframe, u8 *pbuf
-)
-{
- struct adapter *padapter;
- struct hal_com_data *pHalData;
- struct mlme_ext_priv *pmlmeext;
- struct mlme_ext_info *pmlmeinfo;
- struct pkt_attrib *pattrib;
- struct txdesc_8723b *ptxdesc;
- s32 bmcst;
-
- memset(pbuf, 0, TXDESC_SIZE);
-
- padapter = pxmitframe->padapter;
- pHalData = GET_HAL_DATA(padapter);
- pmlmeext = &padapter->mlmeextpriv;
- pmlmeinfo = &(pmlmeext->mlmext_info);
-
- pattrib = &pxmitframe->attrib;
- bmcst = is_multicast_ether_addr(pattrib->ra);
-
- ptxdesc = (struct txdesc_8723b *)pbuf;
-
- if (pxmitframe->frame_tag == DATA_FRAMETAG) {
- u8 drv_userate = 0;
-
- ptxdesc->macid = pattrib->mac_id; /* CAM_ID(MAC_ID) */
- ptxdesc->rate_id = pattrib->raid;
- ptxdesc->qsel = pattrib->qsel;
- ptxdesc->seq = pattrib->seqnum;
-
- ptxdesc->sectype = fill_txdesc_sectype(pattrib);
- fill_txdesc_vcs_8723b(padapter, pattrib, ptxdesc);
-
- if (pattrib->icmp_pkt == 1 && padapter->registrypriv.wifi_spec == 1)
- drv_userate = 1;
-
- if (
- (pattrib->ether_type != 0x888e) &&
- (pattrib->ether_type != 0x0806) &&
- (pattrib->ether_type != 0x88B4) &&
- (pattrib->dhcp_pkt != 1) &&
- (drv_userate != 1)
- ) {
- /* Non EAP & ARP & DHCP type data packet */
-
- if (pattrib->ampdu_en) {
- ptxdesc->agg_en = 1; /* AGG EN */
- ptxdesc->max_agg_num = 0x1f;
- ptxdesc->ampdu_density = pattrib->ampdu_spacing;
- } else
- ptxdesc->bk = 1; /* AGG BK */
-
- fill_txdesc_phy_8723b(padapter, pattrib, ptxdesc);
-
- ptxdesc->data_ratefb_lmt = 0x1F;
-
- if (!pHalData->fw_ractrl) {
- ptxdesc->userate = 1;
-
- if (pHalData->dmpriv.INIDATA_RATE[pattrib->mac_id] & BIT(7))
- ptxdesc->data_short = 1;
-
- ptxdesc->datarate = pHalData->dmpriv.INIDATA_RATE[pattrib->mac_id] & 0x7F;
- }
-
- if (padapter->fix_rate != 0xFF) { /* modify data rate by iwpriv */
- ptxdesc->userate = 1;
- if (padapter->fix_rate & BIT(7))
- ptxdesc->data_short = 1;
-
- ptxdesc->datarate = (padapter->fix_rate & 0x7F);
- ptxdesc->disdatafb = 1;
- }
-
- if (pattrib->ldpc)
- ptxdesc->data_ldpc = 1;
- if (pattrib->stbc)
- ptxdesc->data_stbc = 1;
- } else {
- /* EAP data packet and ARP packet. */
- /* Use the 1M data rate to send the EAP/ARP packet. */
- /* This will maybe make the handshake smooth. */
-
- ptxdesc->bk = 1; /* AGG BK */
- ptxdesc->userate = 1; /* driver uses rate */
- if (pmlmeinfo->preamble_mode == PREAMBLE_SHORT)
- ptxdesc->data_short = 1;/* DATA_SHORT */
- ptxdesc->datarate = MRateToHwRate(pmlmeext->tx_rate);
- }
-
- ptxdesc->usb_txagg_num = pxmitframe->agg_num;
- } else if (pxmitframe->frame_tag == MGNT_FRAMETAG) {
- ptxdesc->macid = pattrib->mac_id; /* CAM_ID(MAC_ID) */
- ptxdesc->qsel = pattrib->qsel;
- ptxdesc->rate_id = pattrib->raid; /* Rate ID */
- ptxdesc->seq = pattrib->seqnum;
- ptxdesc->userate = 1; /* driver uses rate, 1M */
-
- ptxdesc->mbssid = pattrib->mbssid & 0xF;
-
- ptxdesc->rty_lmt_en = 1; /* retry limit enable */
- if (pattrib->retry_ctrl) {
- ptxdesc->data_rt_lmt = 6;
- } else {
- ptxdesc->data_rt_lmt = 12;
- }
-
- ptxdesc->datarate = MRateToHwRate(pmlmeext->tx_rate);
-
- /* CCX-TXRPT ack for xmit mgmt frames. */
- if (pxmitframe->ack_report) {
- ptxdesc->spe_rpt = 1;
- ptxdesc->sw_define = (u8)(GET_PRIMARY_ADAPTER(padapter)->xmitpriv.seq_no);
- }
- } else {
- ptxdesc->macid = pattrib->mac_id; /* CAM_ID(MAC_ID) */
- ptxdesc->rate_id = pattrib->raid; /* Rate ID */
- ptxdesc->qsel = pattrib->qsel;
- ptxdesc->seq = pattrib->seqnum;
- ptxdesc->userate = 1; /* driver uses rate */
- ptxdesc->datarate = MRateToHwRate(pmlmeext->tx_rate);
- }
-
- ptxdesc->pktlen = pattrib->last_txcmdsz;
- ptxdesc->offset = TXDESC_SIZE + OFFSET_SZ;
-
- if (bmcst)
- ptxdesc->bmc = 1;
-
- /* 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 sequence 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) /* Hw set sequence number */
- ptxdesc->en_hwseq = 1; /* HWSEQ_EN */
-}
-
-/* Description:
- *
- * Parameters:
- * pxmitframe xmitframe
- * pbuf where to fill tx desc
- */
-void rtl8723b_update_txdesc(struct xmit_frame *pxmitframe, u8 *pbuf)
-{
- struct tx_desc *pdesc;
-
- rtl8723b_fill_default_txdesc(pxmitframe, pbuf);
- pdesc = (struct tx_desc *)pbuf;
- rtl8723b_cal_txdesc_chksum(pdesc);
-}
-
-/* */
-/* 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. */
-/* Added by tynli. 2009.10.15. */
-/* */
-/* type1:pspoll, type2:null */
-void rtl8723b_fill_fake_txdesc(
- struct adapter *padapter,
- u8 *pDesc,
- u32 BufferLen,
- u8 IsPsPoll,
- u8 IsBTQosNull,
- u8 bDataFrame
-)
-{
- /* Clear all status */
- memset(pDesc, 0, TXDESC_SIZE);
-
- SET_TX_DESC_FIRST_SEG_8723B(pDesc, 1); /* bFirstSeg; */
- SET_TX_DESC_LAST_SEG_8723B(pDesc, 1); /* bLastSeg; */
-
- SET_TX_DESC_OFFSET_8723B(pDesc, 0x28); /* Offset = 32 */
-
- SET_TX_DESC_PKT_SIZE_8723B(pDesc, BufferLen); /* Buffer size + command header */
- SET_TX_DESC_QUEUE_SEL_8723B(pDesc, QSLT_MGNT); /* Fixed queue of Mgnt queue */
-
- /* Set NAVUSEHDR to prevent Ps-poll AId filed to be changed to error value by Hw. */
- if (IsPsPoll) {
- SET_TX_DESC_NAV_USE_HDR_8723B(pDesc, 1);
- } else {
- SET_TX_DESC_HWSEQ_EN_8723B(pDesc, 1); /* Hw set sequence number */
- SET_TX_DESC_HWSEQ_SEL_8723B(pDesc, 0);
- }
-
- if (IsBTQosNull)
- SET_TX_DESC_BT_INT_8723B(pDesc, 1);
-
- SET_TX_DESC_USE_RATE_8723B(pDesc, 1); /* use data rate which is set by Sw */
- SET_TX_DESC_OWN_8723B((u8 *)pDesc, 1);
-
- SET_TX_DESC_TX_RATE_8723B(pDesc, DESC8723B_RATE1M);
-
- /* */
- /* Encrypt the data frame if under security mode excepct null data. Suggested by CCW. */
- /* */
- if (bDataFrame) {
- u32 EncAlg = padapter->securitypriv.dot11_privacy_algrthm;
-
- switch (EncAlg) {
- case _NO_PRIVACY_:
- SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x0);
- break;
- case _WEP40_:
- case _WEP104_:
- case _TKIP_:
- SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x1);
- break;
- case _SMS4_:
- SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x2);
- break;
- case _AES_:
- SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x3);
- break;
- default:
- SET_TX_DESC_SEC_TYPE_8723B(pDesc, 0x0);
- break;
- }
- }
-
- /* 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.). */
- rtl8723b_cal_txdesc_chksum((struct tx_desc *)pDesc);
-}
-
-static void hw_var_set_opmode(struct adapter *padapter, u8 variable, u8 *val)
-{
- u8 val8;
- u8 mode = *((u8 *)val);
-
- {
- /* disable Port0 TSF update */
- val8 = rtw_read8(padapter, REG_BCN_CTRL);
- val8 |= DIS_TSF_UDT;
- rtw_write8(padapter, REG_BCN_CTRL, val8);
-
- /* set net_type */
- set_msr(padapter, mode);
-
- if ((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_)) {
- {
- StopTxBeacon(padapter);
- }
-
- /* disable atim wnd */
- rtw_write8(padapter, REG_BCN_CTRL, DIS_TSF_UDT|EN_BCN_FUNCTION|DIS_ATIM);
- /* rtw_write8(padapter, REG_BCN_CTRL, 0x18); */
- } else if (mode == _HW_STATE_ADHOC_) {
- ResumeTxBeacon(padapter);
- rtw_write8(padapter, REG_BCN_CTRL, DIS_TSF_UDT|EN_BCN_FUNCTION|DIS_BCNQ_SUB);
- } else if (mode == _HW_STATE_AP_) {
-
- ResumeTxBeacon(padapter);
-
- rtw_write8(padapter, REG_BCN_CTRL, DIS_TSF_UDT|DIS_BCNQ_SUB);
-
- /* Set RCR */
- rtw_write32(padapter, REG_RCR, 0x7000208e);/* CBSSID_DATA must set to 0, reject ICV_ERR packet */
- /* enable to rx data frame */
- rtw_write16(padapter, REG_RXFLTMAP2, 0xFFFF);
- /* enable to rx ps-poll */
- rtw_write16(padapter, REG_RXFLTMAP1, 0x0400);
-
- /* Beacon Control related register for first time */
- rtw_write8(padapter, REG_BCNDMATIM, 0x02); /* 2ms */
-
- /* rtw_write8(padapter, REG_BCN_MAX_ERR, 0xFF); */
- rtw_write8(padapter, REG_ATIMWND, 0x0a); /* 10ms */
- rtw_write16(padapter, REG_BCNTCFG, 0x00);
- rtw_write16(padapter, REG_TBTT_PROHIBIT, 0xff04);
- rtw_write16(padapter, REG_TSFTR_SYN_OFFSET, 0x7fff);/* +32767 (~32ms) */
-
- /* reset TSF */
- rtw_write8(padapter, REG_DUAL_TSF_RST, BIT(0));
-
- /* enable BCN0 Function for if1 */
- /* don't enable update TSF0 for if1 (due to TSF update when beacon/probe rsp are received) */
- rtw_write8(padapter, REG_BCN_CTRL, (DIS_TSF_UDT|EN_BCN_FUNCTION|EN_TXBCN_RPT|DIS_BCNQ_SUB));
-
- /* SW_BCN_SEL - Port0 */
- /* rtw_write8(Adapter, REG_DWBCN1_CTRL_8192E+2, rtw_read8(Adapter, REG_DWBCN1_CTRL_8192E+2) & ~BIT4); */
- rtw_hal_set_hwreg(padapter, HW_VAR_DL_BCN_SEL, NULL);
-
- /* select BCN on port 0 */
- rtw_write8(
- padapter,
- REG_CCK_CHECK_8723B,
- (rtw_read8(padapter, REG_CCK_CHECK_8723B)&~BIT_BCN_PORT_SEL)
- );
-
- /* dis BCN1 ATIM WND if if2 is station */
- val8 = rtw_read8(padapter, REG_BCN_CTRL_1);
- val8 |= DIS_ATIM;
- rtw_write8(padapter, REG_BCN_CTRL_1, val8);
- }
- }
-}
-
-static void hw_var_set_macaddr(struct adapter *padapter, u8 variable, u8 *val)
-{
- u8 idx = 0;
- u32 reg_macid = REG_MACID;
-
- for (idx = 0 ; idx < 6; idx++)
- rtw_write8(GET_PRIMARY_ADAPTER(padapter), (reg_macid+idx), val[idx]);
-}
-
-static void hw_var_set_bssid(struct adapter *padapter, u8 variable, u8 *val)
-{
- u8 idx = 0;
- u32 reg_bssid = REG_BSSID;
-
- for (idx = 0 ; idx < 6; idx++)
- rtw_write8(padapter, (reg_bssid+idx), val[idx]);
-}
-
-static void hw_var_set_bcn_func(struct adapter *padapter, u8 variable, u8 *val)
-{
- u32 bcn_ctrl_reg = REG_BCN_CTRL;
-
- if (*(u8 *)val)
- rtw_write8(padapter, bcn_ctrl_reg, (EN_BCN_FUNCTION | EN_TXBCN_RPT));
- else {
- u8 val8;
-
- val8 = rtw_read8(padapter, bcn_ctrl_reg);
- val8 &= ~(EN_BCN_FUNCTION | EN_TXBCN_RPT);
-
- /* Always enable port0 beacon function for PSTDMA */
- if (bcn_ctrl_reg == REG_BCN_CTRL)
- val8 |= EN_BCN_FUNCTION;
-
- rtw_write8(padapter, bcn_ctrl_reg, val8);
- }
-}
-
-static void hw_var_set_correct_tsf(struct adapter *padapter, u8 variable, u8 *val)
-{
- u8 val8;
- 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)
- )
- StopTxBeacon(padapter);
-
- {
- /* disable related TSF function */
- val8 = rtw_read8(padapter, REG_BCN_CTRL);
- val8 &= ~EN_BCN_FUNCTION;
- rtw_write8(padapter, REG_BCN_CTRL, val8);
-
- rtw_write32(padapter, REG_TSFTR, tsf);
- rtw_write32(padapter, REG_TSFTR+4, tsf>>32);
-
- /* enable related TSF function */
- val8 = rtw_read8(padapter, REG_BCN_CTRL);
- val8 |= EN_BCN_FUNCTION;
- rtw_write8(padapter, REG_BCN_CTRL, val8);
- }
-
- if (
- ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) ||
- ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
- )
- ResumeTxBeacon(padapter);
-}
-
-static void hw_var_set_mlme_disconnect(struct adapter *padapter, u8 variable, u8 *val)
-{
- u8 val8;
-
- /* Set RCR to not to receive data frame when NO LINK state */
- /* rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR) & ~RCR_ADF); */
- /* reject all data frames */
- rtw_write16(padapter, REG_RXFLTMAP2, 0);
-
- /* reset TSF */
- rtw_write8(padapter, REG_DUAL_TSF_RST, BIT(0));
-
- /* disable update TSF */
- val8 = rtw_read8(padapter, REG_BCN_CTRL);
- val8 |= DIS_TSF_UDT;
- rtw_write8(padapter, REG_BCN_CTRL, val8);
-}
-
-static void hw_var_set_mlme_sitesurvey(struct adapter *padapter, u8 variable, u8 *val)
-{
- u32 value_rcr, rcr_clear_bit, reg_bcn_ctl;
- u16 value_rxfltmap2;
- u8 val8;
- struct hal_com_data *pHalData;
- struct mlme_priv *pmlmepriv;
-
- pHalData = GET_HAL_DATA(padapter);
- pmlmepriv = &padapter->mlmepriv;
-
- reg_bcn_ctl = REG_BCN_CTRL;
-
- rcr_clear_bit = RCR_CBSSID_BCN;
-
- /* config RCR to receive different BSSID & not to receive data frame */
- value_rxfltmap2 = 0;
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
- rcr_clear_bit = RCR_CBSSID_BCN;
-
- value_rcr = rtw_read32(padapter, REG_RCR);
-
- if (*((u8 *)val)) {
- /* under sitesurvey */
- value_rcr &= ~(rcr_clear_bit);
- rtw_write32(padapter, REG_RCR, value_rcr);
-
- rtw_write16(padapter, REG_RXFLTMAP2, value_rxfltmap2);
-
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE)) {
- /* disable update TSF */
- val8 = rtw_read8(padapter, reg_bcn_ctl);
- val8 |= DIS_TSF_UDT;
- rtw_write8(padapter, reg_bcn_ctl, val8);
- }
-
- /* Save original RRSR setting. */
- pHalData->RegRRSR = rtw_read16(padapter, REG_RRSR);
- } else {
- /* sitesurvey done */
- if (check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)))
- /* enable to rx data frame */
- rtw_write16(padapter, REG_RXFLTMAP2, 0xFFFF);
-
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE)) {
- /* enable update TSF */
- val8 = rtw_read8(padapter, reg_bcn_ctl);
- val8 &= ~DIS_TSF_UDT;
- rtw_write8(padapter, reg_bcn_ctl, val8);
- }
-
- value_rcr |= rcr_clear_bit;
- rtw_write32(padapter, REG_RCR, value_rcr);
-
- /* Restore original RRSR setting. */
- rtw_write16(padapter, REG_RRSR, pHalData->RegRRSR);
- }
-}
-
-static void hw_var_set_mlme_join(struct adapter *padapter, u8 variable, u8 *val)
-{
- u8 val8;
- u16 val16;
- u32 val32;
- u8 RetryLimit = 0x30;
- u8 type = *(u8 *)val;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct eeprom_priv *pEEPROM;
-
- pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-
- if (type == 0) { /* prepare to join */
- /* enable to rx data frame.Accept all data frame */
- /* rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF); */
- rtw_write16(padapter, REG_RXFLTMAP2, 0xFFFF);
-
- val32 = rtw_read32(padapter, REG_RCR);
- if (padapter->in_cta_test)
- val32 &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);/* RCR_ADF */
- else
- val32 |= RCR_CBSSID_DATA|RCR_CBSSID_BCN;
- rtw_write32(padapter, REG_RCR, val32);
-
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
- RetryLimit = (pEEPROM->CustomerID == RT_CID_CCX) ? 7 : 48;
- else /* Ad-hoc Mode */
- RetryLimit = 0x7;
- } else if (type == 1) /* joinbss_event call back when join res < 0 */
- rtw_write16(padapter, REG_RXFLTMAP2, 0x00);
- else if (type == 2) { /* sta add event call back */
- /* enable update TSF */
- val8 = rtw_read8(padapter, REG_BCN_CTRL);
- val8 &= ~DIS_TSF_UDT;
- rtw_write8(padapter, REG_BCN_CTRL, val8);
-
- if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE))
- RetryLimit = 0x7;
- }
-
- val16 = (RetryLimit << RETRY_LIMIT_SHORT_SHIFT) | (RetryLimit << RETRY_LIMIT_LONG_SHIFT);
- rtw_write16(padapter, REG_RL, val16);
-}
-
-void CCX_FwC2HTxRpt_8723b(struct adapter *padapter, u8 *pdata, u8 len)
-{
-
-#define GET_8723B_C2H_TX_RPT_LIFE_TIME_OVER(_Header) LE_BITS_TO_1BYTE((_Header + 0), 6, 1)
-#define GET_8723B_C2H_TX_RPT_RETRY_OVER(_Header) LE_BITS_TO_1BYTE((_Header + 0), 7, 1)
-
- if (GET_8723B_C2H_TX_RPT_RETRY_OVER(pdata) | GET_8723B_C2H_TX_RPT_LIFE_TIME_OVER(pdata))
- rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_CCX_PKT_FAIL);
-
-/*
- else if (seq_no != padapter->xmitpriv.seq_no) {
- rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_CCX_PKT_FAIL);
- }
-*/
- else
- rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_SUCCESS);
-}
-
-s32 c2h_id_filter_ccx_8723b(u8 *buf)
-{
- struct c2h_evt_hdr_88xx *c2h_evt = (struct c2h_evt_hdr_88xx *)buf;
- s32 ret = false;
-
- if (c2h_evt->id == C2H_CCX_TX_RPT)
- ret = true;
-
- return ret;
-}
-
-s32 c2h_handler_8723b(struct adapter *padapter, u8 *buf)
-{
- struct c2h_evt_hdr_88xx *pC2hEvent = (struct c2h_evt_hdr_88xx *)buf;
- s32 ret = _SUCCESS;
-
- if (!pC2hEvent) {
- ret = _FAIL;
- goto exit;
- }
-
- switch (pC2hEvent->id) {
- case C2H_AP_RPT_RSP:
- break;
- case C2H_DBG:
- {
- }
- break;
-
- case C2H_CCX_TX_RPT:
-/* CCX_FwC2HTxRpt(padapter, QueueID, pC2hEvent->payload); */
- break;
-
- case C2H_EXT_RA_RPT:
-/* C2HExtRaRptHandler(padapter, pC2hEvent->payload, C2hEvent.CmdLen); */
- break;
-
- case C2H_HW_INFO_EXCH:
- break;
-
- case C2H_8723B_BT_INFO:
- hal_btcoex_BtInfoNotify(padapter, pC2hEvent->plen, pC2hEvent->payload);
- break;
-
- default:
- break;
- }
-
- /* Clear event to notify FW we have read the command. */
- /* Note: */
- /* If this field isn't clear, the FW won't update the next command message. */
-/* rtw_write8(padapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE); */
-exit:
- return ret;
-}
-
-static void process_c2h_event(struct adapter *padapter, struct c2h_evt_hdr_t *pC2hEvent, u8 *c2hBuf)
-{
- if (!c2hBuf)
- return;
-
- switch (pC2hEvent->CmdID) {
- case C2H_AP_RPT_RSP:
- break;
- case C2H_DBG:
- {
- }
- break;
-
- case C2H_CCX_TX_RPT:
-/* CCX_FwC2HTxRpt(padapter, QueueID, tmpBuf); */
- break;
-
- case C2H_EXT_RA_RPT:
-/* C2HExtRaRptHandler(padapter, tmpBuf, C2hEvent.CmdLen); */
- break;
-
- case C2H_HW_INFO_EXCH:
- break;
-
- case C2H_8723B_BT_INFO:
- hal_btcoex_BtInfoNotify(padapter, pC2hEvent->CmdLen, c2hBuf);
- break;
-
- default:
- break;
- }
-}
-
-void C2HPacketHandler_8723B(struct adapter *padapter, u8 *pbuffer, u16 length)
-{
- struct c2h_evt_hdr_t C2hEvent;
- u8 *tmpBuf = NULL;
-
- C2hEvent.CmdID = pbuffer[0];
- C2hEvent.CmdSeq = pbuffer[1];
- C2hEvent.CmdLen = length-2;
- tmpBuf = pbuffer+2;
-
- process_c2h_event(padapter, &C2hEvent, tmpBuf);
- /* c2h_handler_8723b(padapter,&C2hEvent); */
-}
-
-void SetHwReg8723B(struct adapter *padapter, u8 variable, u8 *val)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u8 val8;
- u32 val32;
-
- switch (variable) {
- case HW_VAR_MEDIA_STATUS:
- val8 = rtw_read8(padapter, MSR) & 0x0c;
- val8 |= *val;
- rtw_write8(padapter, MSR, val8);
- break;
-
- case HW_VAR_MEDIA_STATUS1:
- val8 = rtw_read8(padapter, MSR) & 0x03;
- val8 |= *val << 2;
- rtw_write8(padapter, MSR, val8);
- break;
-
- case HW_VAR_SET_OPMODE:
- hw_var_set_opmode(padapter, variable, val);
- break;
-
- case HW_VAR_MAC_ADDR:
- hw_var_set_macaddr(padapter, variable, val);
- break;
-
- case HW_VAR_BSSID:
- hw_var_set_bssid(padapter, variable, val);
- break;
-
- case HW_VAR_BASIC_RATE:
- {
- struct mlme_ext_info *mlmext_info = &padapter->mlmeextpriv.mlmext_info;
- u16 BrateCfg = 0;
- u16 rrsr_2g_force_mask = (RRSR_11M|RRSR_5_5M|RRSR_1M);
- u16 rrsr_2g_allow_mask = (RRSR_24M|RRSR_12M|RRSR_6M|RRSR_CCK_RATES);
-
- HalSetBrateCfg(padapter, val, &BrateCfg);
-
- /* apply force and allow mask */
- BrateCfg |= rrsr_2g_force_mask;
- BrateCfg &= rrsr_2g_allow_mask;
-
- /* IOT consideration */
- if (mlmext_info->assoc_AP_vendor == HT_IOT_PEER_CISCO) {
- /* if peer is cisco and didn't use ofdm rate, we enable 6M ack */
- if ((BrateCfg & (RRSR_24M|RRSR_12M|RRSR_6M)) == 0)
- BrateCfg |= RRSR_6M;
- }
-
- pHalData->BasicRateSet = BrateCfg;
-
- /* Set RRSR rate table. */
- rtw_write16(padapter, REG_RRSR, BrateCfg);
- rtw_write8(padapter, REG_RRSR+2, rtw_read8(padapter, REG_RRSR+2)&0xf0);
- }
- break;
-
- case HW_VAR_TXPAUSE:
- rtw_write8(padapter, REG_TXPAUSE, *val);
- break;
-
- case HW_VAR_BCN_FUNC:
- hw_var_set_bcn_func(padapter, variable, val);
- break;
-
- case HW_VAR_CORRECT_TSF:
- hw_var_set_correct_tsf(padapter, variable, val);
- break;
-
- case HW_VAR_CHECK_BSSID:
- {
- u32 val32;
-
- val32 = rtw_read32(padapter, REG_RCR);
- if (*val)
- val32 |= RCR_CBSSID_DATA|RCR_CBSSID_BCN;
- else
- val32 &= ~(RCR_CBSSID_DATA|RCR_CBSSID_BCN);
- rtw_write32(padapter, REG_RCR, val32);
- }
- break;
-
- case HW_VAR_MLME_DISCONNECT:
- hw_var_set_mlme_disconnect(padapter, variable, val);
- break;
-
- case HW_VAR_MLME_SITESURVEY:
- hw_var_set_mlme_sitesurvey(padapter, variable, val);
-
- hal_btcoex_ScanNotify(padapter, *val?true:false);
- break;
-
- case HW_VAR_MLME_JOIN:
- hw_var_set_mlme_join(padapter, variable, val);
-
- switch (*val) {
- case 0:
- /* prepare to join */
- hal_btcoex_ConnectNotify(padapter, true);
- break;
- case 1:
- /* joinbss_event callback when join res < 0 */
- hal_btcoex_ConnectNotify(padapter, false);
- break;
- case 2:
- /* sta add event callback */
-/* rtw_btcoex_MediaStatusNotify(padapter, RT_MEDIA_CONNECT); */
- break;
- }
- break;
-
- case HW_VAR_ON_RCR_AM:
- val32 = rtw_read32(padapter, REG_RCR);
- val32 |= RCR_AM;
- rtw_write32(padapter, REG_RCR, val32);
- break;
-
- case HW_VAR_OFF_RCR_AM:
- val32 = rtw_read32(padapter, REG_RCR);
- val32 &= ~RCR_AM;
- rtw_write32(padapter, REG_RCR, val32);
- break;
-
- case HW_VAR_BEACON_INTERVAL:
- rtw_write16(padapter, REG_BCN_INTERVAL, *((u16 *)val));
- break;
-
- case HW_VAR_SLOT_TIME:
- rtw_write8(padapter, REG_SLOT, *val);
- break;
-
- case HW_VAR_RESP_SIFS:
- /* SIFS_Timer = 0x0a0a0808; */
- /* RESP_SIFS for CCK */
- rtw_write8(padapter, REG_RESP_SIFS_CCK, val[0]); /* SIFS_T2T_CCK (0x08) */
- rtw_write8(padapter, REG_RESP_SIFS_CCK+1, val[1]); /* SIFS_R2T_CCK(0x08) */
- /* RESP_SIFS for OFDM */
- rtw_write8(padapter, REG_RESP_SIFS_OFDM, val[2]); /* SIFS_T2T_OFDM (0x0a) */
- rtw_write8(padapter, REG_RESP_SIFS_OFDM+1, val[3]); /* SIFS_R2T_OFDM(0x0a) */
- break;
-
- case HW_VAR_ACK_PREAMBLE:
- {
- u8 regTmp = 0;
- u8 bShortPreamble = *val;
-
- /* Joseph marked out for Netgear 3500 TKIP channel 7 issue.(Temporarily) */
- /* regTmp = (pHalData->nCur40MhzPrimeSC)<<5; */
- if (bShortPreamble)
- regTmp |= 0x80;
- rtw_write8(padapter, REG_RRSR+2, regTmp);
- }
- break;
-
- case HW_VAR_CAM_EMPTY_ENTRY:
- {
- u8 ucIndex = *val;
- u8 i;
- u32 ulCommand = 0;
- u32 ulContent = 0;
- u32 ulEncAlgo = CAM_AES;
-
- for (i = 0; i < CAM_CONTENT_COUNT; i++) {
- /* filled id in CAM config 2 byte */
- if (i == 0) {
- ulContent |= (ucIndex & 0x03) | ((u16)(ulEncAlgo)<<2);
- /* ulContent |= CAM_VALID; */
- } else
- ulContent = 0;
-
- /* polling bit, and No Write enable, and address */
- ulCommand = CAM_CONTENT_COUNT*ucIndex+i;
- ulCommand = ulCommand | CAM_POLLINIG | CAM_WRITE;
- /* write content 0 is equal to mark as invalid */
- rtw_write32(padapter, WCAMI, ulContent); /* mdelay(40); */
- rtw_write32(padapter, RWCAM, ulCommand); /* mdelay(40); */
- }
- }
- break;
-
- case HW_VAR_CAM_INVALID_ALL:
- rtw_write32(padapter, RWCAM, BIT(31)|BIT(30));
- break;
-
- case HW_VAR_CAM_WRITE:
- {
- u32 cmd;
- u32 *cam_val = (u32 *)val;
-
- rtw_write32(padapter, WCAMI, cam_val[0]);
-
- cmd = CAM_POLLINIG | CAM_WRITE | cam_val[1];
- rtw_write32(padapter, RWCAM, cmd);
- }
- break;
-
- case HW_VAR_AC_PARAM_VO:
- rtw_write32(padapter, REG_EDCA_VO_PARAM, *((u32 *)val));
- break;
-
- case HW_VAR_AC_PARAM_VI:
- rtw_write32(padapter, REG_EDCA_VI_PARAM, *((u32 *)val));
- break;
-
- case HW_VAR_AC_PARAM_BE:
- pHalData->AcParam_BE = ((u32 *)(val))[0];
- rtw_write32(padapter, REG_EDCA_BE_PARAM, *((u32 *)val));
- break;
-
- case HW_VAR_AC_PARAM_BK:
- rtw_write32(padapter, REG_EDCA_BK_PARAM, *((u32 *)val));
- break;
-
- case HW_VAR_ACM_CTRL:
- {
- u8 ctrl = *((u8 *)val);
- u8 hwctrl = 0;
-
- if (ctrl != 0) {
- hwctrl |= AcmHw_HwEn;
-
- if (ctrl & BIT(1)) /* BE */
- hwctrl |= AcmHw_BeqEn;
-
- if (ctrl & BIT(2)) /* VI */
- hwctrl |= AcmHw_ViqEn;
-
- if (ctrl & BIT(3)) /* VO */
- hwctrl |= AcmHw_VoqEn;
- }
-
- rtw_write8(padapter, REG_ACMHWCTRL, hwctrl);
- }
- break;
-
- case HW_VAR_AMPDU_FACTOR:
- {
- u32 AMPDULen = (*((u8 *)val));
-
- if (AMPDULen < HT_AGG_SIZE_32K)
- AMPDULen = (0x2000 << (*((u8 *)val)))-1;
- else
- AMPDULen = 0x7fff;
-
- rtw_write32(padapter, REG_AMPDU_MAX_LENGTH_8723B, AMPDULen);
- }
- break;
-
- case HW_VAR_H2C_FW_PWRMODE:
- {
- u8 psmode = *val;
-
- /* Forece leave RF low power mode for 1T1R to prevent conficting setting in Fw power */
- /* saving sequence. 2010.06.07. Added by tynli. Suggested by SD3 yschang. */
- if (psmode != PS_MODE_ACTIVE)
- ODM_RF_Saving(&pHalData->odmpriv, true);
-
- /* if (psmode != PS_MODE_ACTIVE) { */
- /* rtl8723b_set_lowpwr_lps_cmd(padapter, true); */
- /* else { */
- /* rtl8723b_set_lowpwr_lps_cmd(padapter, false); */
- /* */
- rtl8723b_set_FwPwrMode_cmd(padapter, psmode);
- }
- break;
- case HW_VAR_H2C_PS_TUNE_PARAM:
- rtl8723b_set_FwPsTuneParam_cmd(padapter);
- break;
-
- case HW_VAR_H2C_FW_JOINBSSRPT:
- rtl8723b_set_FwJoinBssRpt_cmd(padapter, *val);
- break;
-
- case HW_VAR_INITIAL_GAIN:
- {
- struct dig_t *pDigTable = &pHalData->odmpriv.DM_DigTable;
- u32 rx_gain = *(u32 *)val;
-
- if (rx_gain == 0xff) {/* restore rx gain */
- ODM_Write_DIG(&pHalData->odmpriv, pDigTable->BackupIGValue);
- } else {
- pDigTable->BackupIGValue = pDigTable->CurIGValue;
- ODM_Write_DIG(&pHalData->odmpriv, rx_gain);
- }
- }
- break;
-
- case HW_VAR_EFUSE_USAGE:
- pHalData->EfuseUsedPercentage = *val;
- break;
-
- case HW_VAR_EFUSE_BYTES:
- pHalData->EfuseUsedBytes = *((u16 *)val);
- break;
-
- case HW_VAR_EFUSE_BT_USAGE:
-#ifdef HAL_EFUSE_MEMORY
- pHalData->EfuseHal.BTEfuseUsedPercentage = *val;
-#endif
- break;
-
- case HW_VAR_EFUSE_BT_BYTES:
-#ifdef HAL_EFUSE_MEMORY
- pHalData->EfuseHal.BTEfuseUsedBytes = *((u16 *)val);
-#else
- BTEfuseUsedBytes = *((u16 *)val);
-#endif
- break;
-
- case HW_VAR_FIFO_CLEARN_UP:
- {
- #define RW_RELEASE_EN BIT(18)
- #define RXDMA_IDLE BIT(17)
-
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
- u8 trycnt = 100;
-
- /* pause tx */
- rtw_write8(padapter, REG_TXPAUSE, 0xff);
-
- /* keep sn */
- padapter->xmitpriv.nqos_ssn = rtw_read16(padapter, REG_NQOS_SEQ);
-
- if (!pwrpriv->bkeepfwalive) {
- /* RX DMA stop */
- val32 = rtw_read32(padapter, REG_RXPKT_NUM);
- val32 |= RW_RELEASE_EN;
- rtw_write32(padapter, REG_RXPKT_NUM, val32);
- do {
- val32 = rtw_read32(padapter, REG_RXPKT_NUM);
- val32 &= RXDMA_IDLE;
- if (val32)
- break;
- } while (--trycnt);
-
- /* RQPN Load 0 */
- rtw_write16(padapter, REG_RQPN_NPQ, 0);
- rtw_write32(padapter, REG_RQPN, 0x80000000);
- mdelay(2);
- }
- }
- break;
-
- case HW_VAR_APFM_ON_MAC:
- pHalData->bMacPwrCtrlOn = *val;
- break;
-
- case HW_VAR_NAV_UPPER:
- {
- u32 usNavUpper = *((u32 *)val);
-
- if (usNavUpper > HAL_NAV_UPPER_UNIT_8723B * 0xFF)
- break;
-
- usNavUpper = DIV_ROUND_UP(usNavUpper,
- HAL_NAV_UPPER_UNIT_8723B);
- rtw_write8(padapter, REG_NAV_UPPER, (u8)usNavUpper);
- }
- break;
-
- case HW_VAR_H2C_MEDIA_STATUS_RPT:
- {
- u16 mstatus_rpt = (*(u16 *)val);
- u8 mstatus, macId;
-
- mstatus = (u8) (mstatus_rpt & 0xFF);
- macId = (u8)(mstatus_rpt >> 8);
- rtl8723b_set_FwMediaStatusRpt_cmd(padapter, mstatus, macId);
- }
- break;
- case HW_VAR_BCN_VALID:
- {
- /* BCN_VALID, BIT16 of REG_TDECTRL = BIT0 of REG_TDECTRL+2, write 1 to clear, Clear by sw */
- val8 = rtw_read8(padapter, REG_TDECTRL+2);
- val8 |= BIT(0);
- rtw_write8(padapter, REG_TDECTRL+2, val8);
- }
- break;
-
- case HW_VAR_DL_BCN_SEL:
- {
- /* SW_BCN_SEL - Port0 */
- val8 = rtw_read8(padapter, REG_DWBCN1_CTRL_8723B+2);
- val8 &= ~BIT(4);
- rtw_write8(padapter, REG_DWBCN1_CTRL_8723B+2, val8);
- }
- break;
-
- case HW_VAR_DL_RSVD_PAGE:
- if (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE))
- rtl8723b_download_BTCoex_AP_mode_rsvd_page(padapter);
- else
- rtl8723b_download_rsvd_page(padapter, RT_MEDIA_CONNECT);
- break;
-
- case HW_VAR_MACID_SLEEP:
- /* Input is MACID */
- val32 = *(u32 *)val;
- if (val32 > 31)
- break;
-
- val8 = (u8)val32; /* macid is between 0~31 */
-
- val32 = rtw_read32(padapter, REG_MACID_SLEEP);
- if (val32 & BIT(val8))
- break;
- val32 |= BIT(val8);
- rtw_write32(padapter, REG_MACID_SLEEP, val32);
- break;
-
- case HW_VAR_MACID_WAKEUP:
- /* Input is MACID */
- val32 = *(u32 *)val;
- if (val32 > 31)
- break;
-
- val8 = (u8)val32; /* macid is between 0~31 */
-
- val32 = rtw_read32(padapter, REG_MACID_SLEEP);
- if (!(val32 & BIT(val8)))
- break;
- val32 &= ~BIT(val8);
- rtw_write32(padapter, REG_MACID_SLEEP, val32);
- break;
-
- default:
- SetHwReg(padapter, variable, val);
- break;
- }
-}
-
-void GetHwReg8723B(struct adapter *padapter, u8 variable, u8 *val)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u8 val8;
- u16 val16;
-
- switch (variable) {
- case HW_VAR_TXPAUSE:
- *val = rtw_read8(padapter, REG_TXPAUSE);
- break;
-
- case HW_VAR_BCN_VALID:
- {
- /* BCN_VALID, BIT16 of REG_TDECTRL = BIT0 of REG_TDECTRL+2 */
- val8 = rtw_read8(padapter, REG_TDECTRL+2);
- *val = (BIT(0) & val8) ? true : false;
- }
- break;
-
- case HW_VAR_FWLPS_RF_ON:
- {
- /* When we halt NIC, we should check if FW LPS is leave. */
- u32 valRCR;
-
- if (
- padapter->bSurpriseRemoved ||
- (adapter_to_pwrctl(padapter)->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. */
- *val = true;
- } else {
- valRCR = rtw_read32(padapter, REG_RCR);
- valRCR &= 0x00070000;
- if (valRCR)
- *val = false;
- else
- *val = true;
- }
- }
- break;
-
- case HW_VAR_EFUSE_USAGE:
- *val = pHalData->EfuseUsedPercentage;
- break;
-
- case HW_VAR_EFUSE_BYTES:
- *((u16 *)val) = pHalData->EfuseUsedBytes;
- break;
-
- case HW_VAR_EFUSE_BT_USAGE:
-#ifdef HAL_EFUSE_MEMORY
- *val = pHalData->EfuseHal.BTEfuseUsedPercentage;
-#endif
- break;
-
- case HW_VAR_EFUSE_BT_BYTES:
-#ifdef HAL_EFUSE_MEMORY
- *((u16 *)val) = pHalData->EfuseHal.BTEfuseUsedBytes;
-#else
- *((u16 *)val) = BTEfuseUsedBytes;
-#endif
- break;
-
- case HW_VAR_APFM_ON_MAC:
- *val = pHalData->bMacPwrCtrlOn;
- break;
- case HW_VAR_CHK_HI_QUEUE_EMPTY:
- val16 = rtw_read16(padapter, REG_TXPKT_EMPTY);
- *val = (val16 & BIT(10)) ? true : false;
- break;
- default:
- GetHwReg(padapter, variable, val);
- break;
- }
-}
-
-/* Description:
- * Query setting of specified variable.
- */
-u8 GetHalDefVar8723B(struct adapter *padapter, enum hal_def_variable variable, void *pval)
-{
- u8 bResult = _SUCCESS;
-
- switch (variable) {
- case HAL_DEF_MAX_RECVBUF_SZ:
- *((u32 *)pval) = MAX_RECVBUF_SZ;
- break;
-
- case HAL_DEF_RX_PACKET_OFFSET:
- *((u32 *)pval) = RXDESC_SIZE + DRVINFO_SZ*8;
- break;
-
- case HW_VAR_MAX_RX_AMPDU_FACTOR:
- /* Stanley@BB.SD3 suggests 16K can get stable performance */
- /* The experiment was done on SDIO interface */
- /* coding by Lucas@20130730 */
- *(u32 *)pval = IEEE80211_HT_MAX_AMPDU_16K;
- break;
- case HAL_DEF_TX_LDPC:
- case HAL_DEF_RX_LDPC:
- *((u8 *)pval) = false;
- break;
- case HAL_DEF_TX_STBC:
- *((u8 *)pval) = 0;
- break;
- case HAL_DEF_RX_STBC:
- *((u8 *)pval) = 1;
- break;
- case HAL_DEF_EXPLICIT_BEAMFORMER:
- case HAL_DEF_EXPLICIT_BEAMFORMEE:
- *((u8 *)pval) = false;
- break;
-
- case HW_DEF_RA_INFO_DUMP:
- {
- u8 mac_id = *(u8 *)pval;
- u32 cmd = 0x40000100 | mac_id;
-
- rtw_write32(padapter, REG_HMEBOX_DBG_2_8723B, cmd);
- msleep(10);
- rtw_read32(padapter, 0x2F0); // info 1
-
- cmd = 0x40000400 | mac_id;
- rtw_write32(padapter, REG_HMEBOX_DBG_2_8723B, cmd);
- msleep(10);
- rtw_read32(padapter, 0x2F0); // info 1
- rtw_read32(padapter, 0x2F4); // info 2
- rtw_read32(padapter, 0x2F8); // rate mask 1
- rtw_read32(padapter, 0x2FC); // rate mask 2
- }
- break;
-
- case HAL_DEF_TX_PAGE_BOUNDARY:
- if (!padapter->registrypriv.wifi_spec) {
- *(u8 *)pval = TX_PAGE_BOUNDARY_8723B;
- } else {
- *(u8 *)pval = WMM_NORMAL_TX_PAGE_BOUNDARY_8723B;
- }
- break;
-
- case HAL_DEF_MACID_SLEEP:
- *(u8 *)pval = true; /* support macid sleep */
- break;
-
- default:
- bResult = GetHalDefVar(padapter, variable, pval);
- break;
- }
-
- return bResult;
-}
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723b_phycfg.c b/drivers/staging/rtl8723bs/hal/rtl8723b_phycfg.c
deleted file mode 100644
index 737e2a818c18..000000000000
--- a/drivers/staging/rtl8723bs/hal/rtl8723b_phycfg.c
+++ /dev/null
@@ -1,759 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-#include <rtl8723b_hal.h>
-
-/**
- * phy_CalculateBitShift - Get shifted position of the BitMask.
- * @BitMask: Bitmask.
- *
- * Return: Return the shift bit position of the mask
- */
-static u32 phy_CalculateBitShift(u32 BitMask)
-{
- u32 i;
-
- for (i = 0; i <= 31; i++) {
- if (((BitMask >> i) & 0x1) == 1)
- break;
- }
- return i;
-}
-
-/**
- * PHY_QueryBBReg_8723B - Read "specific bits" from BB register.
- * @Adapter:
- * @RegAddr: The target address to be readback
- * @BitMask: The target bit position in the target address
- * to be readback
- *
- * Return: The readback register value
- *
- * .. Note:: This function is equal to "GetRegSetting" in PHY programming
- * guide
- */
-u32 PHY_QueryBBReg_8723B(struct adapter *Adapter, u32 RegAddr, u32 BitMask)
-{
- u32 OriginalValue, BitShift;
-
- OriginalValue = rtw_read32(Adapter, RegAddr);
- BitShift = phy_CalculateBitShift(BitMask);
-
- return (OriginalValue & BitMask) >> BitShift;
-}
-
-/**
- * PHY_SetBBReg_8723B - Write "Specific bits" to BB register (page 8~).
- * @Adapter:
- * @RegAddr: The target address to be modified
- * @BitMask: The target bit position in the target address
- * to be modified
- * @Data: The new register value in the target bit position
- * of the target address
- *
- * .. Note:: This function is equal to "PutRegSetting" in PHY programming
- * guide
- */
-
-void PHY_SetBBReg_8723B(
- struct adapter *Adapter,
- u32 RegAddr,
- u32 BitMask,
- u32 Data
-)
-{
- /* u16 BBWaitCounter = 0; */
- u32 OriginalValue, BitShift;
-
- if (BitMask != bMaskDWord) { /* if not "double word" write */
- OriginalValue = rtw_read32(Adapter, RegAddr);
- BitShift = phy_CalculateBitShift(BitMask);
- Data = ((OriginalValue & (~BitMask)) | ((Data << BitShift) & BitMask));
- }
-
- rtw_write32(Adapter, RegAddr, Data);
-}
-
-/* */
-/* 2. RF register R/W API */
-/* */
-
-static u32 phy_RFSerialRead_8723B(
- struct adapter *Adapter, enum rf_path eRFPath, u32 Offset
-)
-{
- u32 retValue = 0;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct bb_register_def *pPhyReg = &pHalData->PHYRegDef[eRFPath];
- u32 NewOffset;
- u32 tmplong2;
- u8 RfPiEnable = 0;
- u32 MaskforPhySet = 0;
- int i = 0;
-
- /* */
- /* Make sure RF register offset is correct */
- /* */
- Offset &= 0xff;
-
- NewOffset = Offset;
-
- if (eRFPath == RF_PATH_A) {
- tmplong2 = PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter2 | MaskforPhySet, bMaskDWord);
- tmplong2 = (tmplong2 & (~bLSSIReadAddress)) | (NewOffset << 23) | bLSSIReadEdge; /* T65 RF */
- PHY_SetBBReg(Adapter, rFPGA0_XA_HSSIParameter2 | MaskforPhySet, bMaskDWord, tmplong2 & (~bLSSIReadEdge));
- } else {
- tmplong2 = PHY_QueryBBReg(Adapter, rFPGA0_XB_HSSIParameter2 | MaskforPhySet, bMaskDWord);
- tmplong2 = (tmplong2 & (~bLSSIReadAddress)) | (NewOffset << 23) | bLSSIReadEdge; /* T65 RF */
- PHY_SetBBReg(Adapter, rFPGA0_XB_HSSIParameter2 | MaskforPhySet, bMaskDWord, tmplong2 & (~bLSSIReadEdge));
- }
-
- tmplong2 = PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter2 | MaskforPhySet, bMaskDWord);
- PHY_SetBBReg(Adapter, rFPGA0_XA_HSSIParameter2 | MaskforPhySet, bMaskDWord, tmplong2 & (~bLSSIReadEdge));
- PHY_SetBBReg(Adapter, rFPGA0_XA_HSSIParameter2 | MaskforPhySet, bMaskDWord, tmplong2 | bLSSIReadEdge);
-
- udelay(10);
-
- for (i = 0; i < 2; i++)
- udelay(MAX_STALL_TIME);
- udelay(10);
-
- if (eRFPath == RF_PATH_A)
- RfPiEnable = (u8)PHY_QueryBBReg(Adapter, rFPGA0_XA_HSSIParameter1 | MaskforPhySet, BIT(8));
- else if (eRFPath == RF_PATH_B)
- RfPiEnable = (u8)PHY_QueryBBReg(Adapter, rFPGA0_XB_HSSIParameter1 | MaskforPhySet, BIT(8));
-
- if (RfPiEnable) {
- /* Read from BBreg8b8, 12 bits for 8190, 20bits for T65 RF */
- retValue = PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBackPi | MaskforPhySet, bLSSIReadBackData);
- } else {
- /* Read from BBreg8a0, 12 bits for 8190, 20 bits for T65 RF */
- retValue = PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBack | MaskforPhySet, bLSSIReadBackData);
- }
- return retValue;
-}
-
-/**
- * phy_RFSerialWrite_8723B - Write data to RF register (page 8~).
- * @Adapter:
- * @eRFPath: Radio path of A/B/C/D
- * @Offset: The target address to be read
- * @Data: The new register Data in the target bit position
- * of the target to be read
- *
- * .. Note:: There 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_8723B(
- struct adapter *Adapter,
- enum rf_path eRFPath,
- u32 Offset,
- u32 Data
-)
-{
- u32 DataAndAddr = 0;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct bb_register_def *pPhyReg = &pHalData->PHYRegDef[eRFPath];
- u32 NewOffset;
-
- 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 */
- /* */
- PHY_SetBBReg(Adapter, pPhyReg->rf3wireOffset, bMaskDWord, DataAndAddr);
-}
-
-/**
- * PHY_QueryRFReg_8723B - Query "Specific bits" to RF register (page 8~).
- * @Adapter:
- * @eRFPath: Radio path of A/B/C/D
- * @RegAddr: The target address to be read
- * @BitMask: The target bit position in the target address
- * to be read
- *
- * Return: Readback value
- *
- * .. Note:: This function is equal to "GetRFRegSetting" in PHY
- * programming guide
- */
-u32 PHY_QueryRFReg_8723B(
- struct adapter *Adapter,
- u8 eRFPath,
- u32 RegAddr,
- u32 BitMask
-)
-{
- u32 Original_Value, BitShift;
-
- Original_Value = phy_RFSerialRead_8723B(Adapter, eRFPath, RegAddr);
- BitShift = phy_CalculateBitShift(BitMask);
-
- return (Original_Value & BitMask) >> BitShift;
-}
-
-/**
- * PHY_SetRFReg_8723B - Write "Specific bits" to RF register (page 8~).
- * @Adapter:
- * @eRFPath: Radio path of A/B/C/D
- * @RegAddr: The target address to be modified
- * @BitMask: The target bit position in the target address
- * to be modified
- * @Data: The new register Data in the target bit position
- * of the target address
- *
- * .. Note:: This function is equal to "PutRFRegSetting" in PHY
- * programming guide.
- */
-void PHY_SetRFReg_8723B(
- struct adapter *Adapter,
- u8 eRFPath,
- u32 RegAddr,
- u32 BitMask,
- u32 Data
-)
-{
- u32 Original_Value, BitShift;
-
- /* RF data is 12 bits only */
- if (BitMask != bRFRegOffsetMask) {
- Original_Value = phy_RFSerialRead_8723B(Adapter, eRFPath, RegAddr);
- BitShift = phy_CalculateBitShift(BitMask);
- Data = ((Original_Value & (~BitMask)) | (Data << BitShift));
- }
-
- phy_RFSerialWrite_8723B(Adapter, eRFPath, RegAddr, Data);
-}
-
-/* */
-/* 3. Initial MAC/BB/RF config by reading MAC/BB/RF txt. */
-/* */
-
-/*-----------------------------------------------------------------------------
- * PHY_MACConfig8192C - Config MAC by header file or parameter file.
- *
- * Revised History:
- * When Who Remark
- * 08/12/2008 MHC Create Version 0.
- *
- *---------------------------------------------------------------------------
- */
-s32 PHY_MACConfig8723B(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- ODM_ReadAndConfig_MP_8723B_MAC_REG(&pHalData->odmpriv);
- return _SUCCESS;
-}
-
-/**
- * phy_InitBBRFRegisterDefinition - Initialize Register definition offset for
- * Radio Path A/B/C/D
- * @Adapter:
- *
- * .. Note:: The initialization value is constant and it should never be changes
- */
-static void phy_InitBBRFRegisterDefinition(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- /* RF Interface Sowrtware Control */
- pHalData->PHYRegDef[RF_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW; /* 16 LSBs if read 32-bit from 0x870 */
- pHalData->PHYRegDef[RF_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW; /* 16 MSBs if read 32-bit from 0x870 (16-bit for 0x872) */
-
- /* RF Interface Output (and Enable) */
- pHalData->PHYRegDef[RF_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE; /* 16 LSBs if read 32-bit from 0x860 */
- pHalData->PHYRegDef[RF_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE; /* 16 LSBs if read 32-bit from 0x864 */
-
- /* RF Interface (Output and) Enable */
- pHalData->PHYRegDef[RF_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE; /* 16 MSBs if read 32-bit from 0x860 (16-bit for 0x862) */
- pHalData->PHYRegDef[RF_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE; /* 16 MSBs if read 32-bit from 0x864 (16-bit for 0x866) */
-
- pHalData->PHYRegDef[RF_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter; /* LSSI Parameter */
- pHalData->PHYRegDef[RF_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter;
-
- pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2; /* wire control parameter2 */
- pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2; /* wire control parameter2 */
-
- /* Transceiver Readback LSSI/HSPI mode */
- pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
- pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;
- pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBackPi = TransceiverA_HSPI_Readback;
- pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBackPi = TransceiverB_HSPI_Readback;
-}
-
-static int phy_BB8723b_Config_ParaFile(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- /* Read Tx Power Limit File */
- PHY_InitTxPowerLimit(Adapter);
- if (Adapter->registrypriv.reg_enable_tx_power_limit == 1 ||
- (Adapter->registrypriv.reg_enable_tx_power_limit == 2 &&
- pHalData->EEPROMRegulatory == 1))
- ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv, CONFIG_RF_TXPWR_LMT, 0);
-
- /* */
- /* 1. Read PHY_REG.TXT BB INIT!! */
- /* */
- ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_PHY_REG);
-
- /* If EEPROM or EFUSE autoload OK, We must config by PHY_REG_PG.txt */
- PHY_InitTxPowerByRate(Adapter);
-
- if (Adapter->registrypriv.reg_enable_tx_power_by_rate == 1 ||
- (Adapter->registrypriv.reg_enable_tx_power_by_rate == 2 &&
- pHalData->EEPROMRegulatory != 2)) {
- ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_PHY_REG_PG);
-
- if (pHalData->odmpriv.PhyRegPgValueType == PHY_REG_PG_EXACT_VALUE)
- PHY_TxPowerByRateConfiguration(Adapter);
-
- if (Adapter->registrypriv.reg_enable_tx_power_limit == 1 ||
- (Adapter->registrypriv.reg_enable_tx_power_limit == 2 &&
- pHalData->EEPROMRegulatory == 1))
- PHY_ConvertTxPowerLimitToPowerIndex(Adapter);
- }
-
- /* */
- /* 2. Read BB AGC table Initialization */
- /* */
- ODM_ConfigBBWithHeaderFile(&pHalData->odmpriv, CONFIG_BB_AGC_TAB);
-
- return _SUCCESS;
-}
-
-int PHY_BBConfig8723B(struct adapter *Adapter)
-{
- int rtStatus = _SUCCESS;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- u32 RegVal;
- u8 CrystalCap;
-
- phy_InitBBRFRegisterDefinition(Adapter);
-
- /* Enable BB and RF */
- RegVal = rtw_read16(Adapter, REG_SYS_FUNC_EN);
- rtw_write16(Adapter, REG_SYS_FUNC_EN, (u16)(RegVal | BIT(13) | BIT(0) | BIT(1)));
-
- rtw_write32(Adapter, rS0S1_PathSwitch, 0x280); /* Others use Antenna S1 */
-
- rtw_write8(Adapter, REG_RF_CTRL, RF_EN | RF_RSTB | RF_SDMRSTB);
-
- msleep(1);
-
- PHY_SetRFReg(Adapter, RF_PATH_A, 0x1, 0xfffff, 0x780);
-
- rtw_write8(Adapter, REG_SYS_FUNC_EN,
- FEN_PPLL | FEN_PCIEA | FEN_DIO_PCIE | FEN_BB_GLB_RSTn | FEN_BBRSTB);
-
- rtw_write8(Adapter, REG_AFE_XTAL_CTRL + 1, 0x80);
-
- /* */
- /* Config BB and AGC */
- /* */
- rtStatus = phy_BB8723b_Config_ParaFile(Adapter);
-
- /* 0x2C[23:18] = 0x2C[17:12] = CrystalCap */
- CrystalCap = pHalData->CrystalCap & 0x3F;
- PHY_SetBBReg(Adapter, REG_MAC_PHY_CTRL, 0xFFF000, (CrystalCap | (CrystalCap << 6)));
-
- return rtStatus;
-}
-
-static void phy_LCK_8723B(struct adapter *Adapter)
-{
- PHY_SetRFReg(Adapter, RF_PATH_A, 0xB0, bRFRegOffsetMask, 0xDFBE0);
- PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, 0x8C01);
- mdelay(200);
- PHY_SetRFReg(Adapter, RF_PATH_A, 0xB0, bRFRegOffsetMask, 0xDFFE0);
-}
-
-int PHY_RFConfig8723B(struct adapter *Adapter)
-{
- int rtStatus = _SUCCESS;
-
- /* */
- /* RF config */
- /* */
- rtStatus = PHY_RF6052_Config8723B(Adapter);
-
- phy_LCK_8723B(Adapter);
-
- return rtStatus;
-}
-
-/**************************************************************************************************************
- * Description:
- * The low-level interface to set TxAGC , called by both MP and Normal Driver.
- *
- * <20120830, Kordan>
- **************************************************************************************************************/
-
-void PHY_SetTxPowerIndex(
- struct adapter *Adapter,
- u32 PowerIndex,
- u8 RFPath,
- u8 Rate
-)
-{
- if (RFPath == RF_PATH_A || RFPath == RF_PATH_B) {
- switch (Rate) {
- case MGN_1M:
- PHY_SetBBReg(Adapter, rTxAGC_A_CCK1_Mcs32, bMaskByte1, PowerIndex);
- break;
- case MGN_2M:
- PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte1, PowerIndex);
- break;
- case MGN_5_5M:
- PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte2, PowerIndex);
- break;
- case MGN_11M:
- PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte3, PowerIndex);
- break;
-
- case MGN_6M:
- PHY_SetBBReg(Adapter, rTxAGC_A_Rate18_06, bMaskByte0, PowerIndex);
- break;
- case MGN_9M:
- PHY_SetBBReg(Adapter, rTxAGC_A_Rate18_06, bMaskByte1, PowerIndex);
- break;
- case MGN_12M:
- PHY_SetBBReg(Adapter, rTxAGC_A_Rate18_06, bMaskByte2, PowerIndex);
- break;
- case MGN_18M:
- PHY_SetBBReg(Adapter, rTxAGC_A_Rate18_06, bMaskByte3, PowerIndex);
- break;
-
- case MGN_24M:
- PHY_SetBBReg(Adapter, rTxAGC_A_Rate54_24, bMaskByte0, PowerIndex);
- break;
- case MGN_36M:
- PHY_SetBBReg(Adapter, rTxAGC_A_Rate54_24, bMaskByte1, PowerIndex);
- break;
- case MGN_48M:
- PHY_SetBBReg(Adapter, rTxAGC_A_Rate54_24, bMaskByte2, PowerIndex);
- break;
- case MGN_54M:
- PHY_SetBBReg(Adapter, rTxAGC_A_Rate54_24, bMaskByte3, PowerIndex);
- break;
-
- case MGN_MCS0:
- PHY_SetBBReg(Adapter, rTxAGC_A_Mcs03_Mcs00, bMaskByte0, PowerIndex);
- break;
- case MGN_MCS1:
- PHY_SetBBReg(Adapter, rTxAGC_A_Mcs03_Mcs00, bMaskByte1, PowerIndex);
- break;
- case MGN_MCS2:
- PHY_SetBBReg(Adapter, rTxAGC_A_Mcs03_Mcs00, bMaskByte2, PowerIndex);
- break;
- case MGN_MCS3:
- PHY_SetBBReg(Adapter, rTxAGC_A_Mcs03_Mcs00, bMaskByte3, PowerIndex);
- break;
-
- case MGN_MCS4:
- PHY_SetBBReg(Adapter, rTxAGC_A_Mcs07_Mcs04, bMaskByte0, PowerIndex);
- break;
- case MGN_MCS5:
- PHY_SetBBReg(Adapter, rTxAGC_A_Mcs07_Mcs04, bMaskByte1, PowerIndex);
- break;
- case MGN_MCS6:
- PHY_SetBBReg(Adapter, rTxAGC_A_Mcs07_Mcs04, bMaskByte2, PowerIndex);
- break;
- case MGN_MCS7:
- PHY_SetBBReg(Adapter, rTxAGC_A_Mcs07_Mcs04, bMaskByte3, PowerIndex);
- break;
-
- default:
- break;
- }
- }
-}
-
-u8 PHY_GetTxPowerIndex(
- struct adapter *padapter,
- u8 RFPath,
- u8 Rate,
- enum channel_width BandWidth,
- u8 Channel
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- s8 txPower = 0, powerDiffByRate = 0, limit = 0;
-
- txPower = (s8)PHY_GetTxPowerIndexBase(padapter, RFPath, Rate, BandWidth, Channel);
- powerDiffByRate = PHY_GetTxPowerByRate(padapter, RF_PATH_A, Rate);
-
- limit = phy_get_tx_pwr_lmt(
- padapter,
- padapter->registrypriv.reg_pwr_tbl_sel,
- pHalData->CurrentChannelBW,
- RFPath,
- Rate,
- pHalData->CurrentChannel
- );
-
- powerDiffByRate = powerDiffByRate > limit ? limit : powerDiffByRate;
- txPower += powerDiffByRate;
-
- txPower += PHY_GetTxPowerTrackingOffset(padapter, RFPath, Rate);
-
- if (txPower > MAX_POWER_INDEX)
- txPower = MAX_POWER_INDEX;
-
- return (u8)txPower;
-}
-
-void PHY_SetTxPowerLevel8723B(struct adapter *Adapter, u8 Channel)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
- struct fat_t *pDM_FatTable = &pDM_Odm->DM_FatTable;
- u8 RFPath = RF_PATH_A;
-
- if (pHalData->AntDivCfg) {/* antenna diversity Enable */
- RFPath = ((pDM_FatTable->RxIdleAnt == MAIN_ANT) ? RF_PATH_A : RF_PATH_B);
- } else { /* antenna diversity disable */
- RFPath = pHalData->ant_path;
- }
-
- PHY_SetTxPowerLevelByPath(Adapter, Channel, RFPath);
-}
-
-static void phy_SetRegBW_8723B(
- struct adapter *Adapter, enum channel_width CurrentBW
-)
-{
- u16 RegRfMod_BW, u2tmp = 0;
-
- RegRfMod_BW = rtw_read16(Adapter, REG_TRXPTCL_CTL_8723B);
-
- switch (CurrentBW) {
- case CHANNEL_WIDTH_20:
- rtw_write16(Adapter, REG_TRXPTCL_CTL_8723B, (RegRfMod_BW & 0xFE7F)); /* BIT 7 = 0, BIT 8 = 0 */
- break;
-
- case CHANNEL_WIDTH_40:
- u2tmp = RegRfMod_BW | BIT(7);
- rtw_write16(Adapter, REG_TRXPTCL_CTL_8723B, (u2tmp & 0xFEFF)); /* BIT 7 = 1, BIT 8 = 0 */
- break;
-
- default:
- break;
- }
-}
-
-static u8 phy_GetSecondaryChnl_8723B(struct adapter *Adapter)
-{
- u8 SCSettingOf40 = 0, SCSettingOf20 = 0;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- if (pHalData->CurrentChannelBW == CHANNEL_WIDTH_40) {
- if (pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_UPPER)
- SCSettingOf20 = HT_DATA_SC_20_UPPER_OF_40MHZ;
- else if (pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER)
- SCSettingOf20 = HT_DATA_SC_20_LOWER_OF_40MHZ;
- }
-
- return (SCSettingOf40 << 4) | SCSettingOf20;
-}
-
-static void phy_PostSetBwMode8723B(struct adapter *Adapter)
-{
- u8 SubChnlNum = 0;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- /* 3 Set Reg668 Reg440 BW */
- phy_SetRegBW_8723B(Adapter, pHalData->CurrentChannelBW);
-
- /* 3 Set Reg483 */
- SubChnlNum = phy_GetSecondaryChnl_8723B(Adapter);
- rtw_write8(Adapter, REG_DATA_SC_8723B, SubChnlNum);
-
- /* 3 */
- /* 3<2>Set PHY related register */
- /* 3 */
- switch (pHalData->CurrentChannelBW) {
- /* 20 MHz channel*/
- case CHANNEL_WIDTH_20:
- PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bRFMOD, 0x0);
-
- PHY_SetBBReg(Adapter, rFPGA1_RFMOD, bRFMOD, 0x0);
-
- PHY_SetBBReg(Adapter, rOFDM0_TxPseudoNoiseWgt, (BIT(31) | BIT(30)), 0x0);
- break;
-
- /* 40 MHz channel*/
- case CHANNEL_WIDTH_40:
- PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bRFMOD, 0x1);
-
- PHY_SetBBReg(Adapter, rFPGA1_RFMOD, bRFMOD, 0x1);
-
- /* Set Control channel to upper or lower. These settings are required only for 40MHz */
- PHY_SetBBReg(Adapter, rCCK0_System, bCCKSideBand, (pHalData->nCur40MhzPrimeSC >> 1));
-
- PHY_SetBBReg(Adapter, rOFDM1_LSTF, 0xC00, pHalData->nCur40MhzPrimeSC);
-
- PHY_SetBBReg(Adapter, 0x818, (BIT(26) | BIT(27)), (pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER) ? 2 : 1);
- break;
- default:
- break;
- }
-
- /* 3<3>Set RF related register */
- PHY_RF6052SetBandwidth8723B(Adapter, pHalData->CurrentChannelBW);
-}
-
-static void phy_SwChnl8723B(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- u8 channelToSW = pHalData->CurrentChannel;
-
- pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff00) | channelToSW);
- PHY_SetRFReg(padapter, RF_PATH_A, RF_CHNLBW, 0x3FF, pHalData->RfRegChnlVal[0]);
- PHY_SetRFReg(padapter, RF_PATH_B, RF_CHNLBW, 0x3FF, pHalData->RfRegChnlVal[0]);
-}
-
-static void phy_SwChnlAndSetBwMode8723B(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- if (Adapter->driver_stopped || Adapter->bSurpriseRemoved)
- return;
-
- if (pHalData->bSwChnl) {
- phy_SwChnl8723B(Adapter);
- pHalData->bSwChnl = false;
- }
-
- if (pHalData->bSetChnlBW) {
- phy_PostSetBwMode8723B(Adapter);
- pHalData->bSetChnlBW = false;
- }
-
- PHY_SetTxPowerLevel8723B(Adapter, pHalData->CurrentChannel);
-}
-
-static void PHY_HandleSwChnlAndSetBW8723B(
- struct adapter *Adapter,
- bool bSwitchChannel,
- bool bSetBandWidth,
- u8 ChannelNum,
- enum channel_width ChnlWidth,
- enum extchnl_offset ExtChnlOffsetOf40MHz,
- enum extchnl_offset ExtChnlOffsetOf80MHz,
- u8 CenterFrequencyIndex1
-)
-{
- /* static bool bInitialzed = false; */
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- u8 tmpChannel = pHalData->CurrentChannel;
- enum channel_width tmpBW = pHalData->CurrentChannelBW;
- u8 tmpnCur40MhzPrimeSC = pHalData->nCur40MhzPrimeSC;
- u8 tmpnCur80MhzPrimeSC = pHalData->nCur80MhzPrimeSC;
- u8 tmpCenterFrequencyIndex1 = pHalData->CurrentCenterFrequencyIndex1;
-
- /* check is swchnl or setbw */
- if (!bSwitchChannel && !bSetBandWidth)
- return;
-
- /* skip change for channel or bandwidth is the same */
- if (bSwitchChannel) {
- {
- if (HAL_IsLegalChannel(Adapter, ChannelNum))
- pHalData->bSwChnl = true;
- }
- }
-
- if (bSetBandWidth)
- pHalData->bSetChnlBW = true;
-
- if (!pHalData->bSetChnlBW && !pHalData->bSwChnl)
- return;
-
- if (pHalData->bSwChnl) {
- pHalData->CurrentChannel = ChannelNum;
- pHalData->CurrentCenterFrequencyIndex1 = ChannelNum;
- }
-
- if (pHalData->bSetChnlBW) {
- pHalData->CurrentChannelBW = ChnlWidth;
- pHalData->nCur40MhzPrimeSC = ExtChnlOffsetOf40MHz;
- pHalData->nCur80MhzPrimeSC = ExtChnlOffsetOf80MHz;
- pHalData->CurrentCenterFrequencyIndex1 = CenterFrequencyIndex1;
- }
-
- /* Switch workitem or set timer to do switch channel or setbandwidth operation */
- if ((!Adapter->driver_stopped) && (!Adapter->bSurpriseRemoved)) {
- phy_SwChnlAndSetBwMode8723B(Adapter);
- } else {
- if (pHalData->bSwChnl) {
- pHalData->CurrentChannel = tmpChannel;
- pHalData->CurrentCenterFrequencyIndex1 = tmpChannel;
- }
-
- if (pHalData->bSetChnlBW) {
- pHalData->CurrentChannelBW = tmpBW;
- pHalData->nCur40MhzPrimeSC = tmpnCur40MhzPrimeSC;
- pHalData->nCur80MhzPrimeSC = tmpnCur80MhzPrimeSC;
- pHalData->CurrentCenterFrequencyIndex1 = tmpCenterFrequencyIndex1;
- }
- }
-}
-
-/* Call after initialization */
-void PHY_SwChnl8723B(struct adapter *Adapter, u8 channel)
-{
- PHY_HandleSwChnlAndSetBW8723B(Adapter, true, false, channel, 0, 0, 0, channel);
-}
-
-void PHY_SetSwChnlBWMode8723B(
- struct adapter *Adapter,
- u8 channel,
- enum channel_width Bandwidth,
- u8 Offset40,
- u8 Offset80
-)
-{
- PHY_HandleSwChnlAndSetBW8723B(Adapter, true, true, channel, Bandwidth, Offset40, Offset80, channel);
-}
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723b_rf6052.c b/drivers/staging/rtl8723bs/hal/rtl8723b_rf6052.c
deleted file mode 100644
index fac1270853de..000000000000
--- a/drivers/staging/rtl8723bs/hal/rtl8723b_rf6052.c
+++ /dev/null
@@ -1,135 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-/******************************************************************************
- *
- *
- * 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.
- *
- *
- ******************************************************************************/
-
-#include <rtl8723b_hal.h>
-
-/*---------------------------Define Local Constant---------------------------*/
-/*---------------------------Define Local Constant---------------------------*/
-
-/*------------------------Define global variable-----------------------------*/
-/*------------------------Define global variable-----------------------------*/
-
-/*------------------------Define local variable------------------------------*/
-/* 2008/11/20 MH For Debug only, RF */
-/*------------------------Define local variable------------------------------*/
-
-/*-----------------------------------------------------------------------------
- * 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 PHY_RF6052SetBandwidth8723B(
- struct adapter *Adapter, enum channel_width Bandwidth
-) /* 20M or 40M */
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- switch (Bandwidth) {
- case CHANNEL_WIDTH_20:
- pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | BIT(10) | BIT(11));
- PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
- PHY_SetRFReg(Adapter, RF_PATH_B, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
- break;
-
- case CHANNEL_WIDTH_40:
- pHalData->RfRegChnlVal[0] = ((pHalData->RfRegChnlVal[0] & 0xfffff3ff) | BIT(10));
- PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
- PHY_SetRFReg(Adapter, RF_PATH_B, RF_CHNLBW, bRFRegOffsetMask, pHalData->RfRegChnlVal[0]);
- break;
-
- default:
- break;
- }
-
-}
-
-static int phy_RF6052_Config_ParaFile(struct adapter *Adapter)
-{
- u32 u4RegValue = 0;
- struct bb_register_def *pPhyReg;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- /* 3----------------------------------------------------------------- */
- /* 3 <2> Initialize RF */
- /* 3----------------------------------------------------------------- */
-
- pPhyReg = &pHalData->PHYRegDef[RF_PATH_A];
-
- /*----Store original RFENV control type----*/
- u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV);
-
- /*----Set RF_ENV enable----*/
- PHY_SetBBReg(Adapter, pPhyReg->rfintfe, bRFSI_RFENV << 16, 0x1);
- udelay(1);/* PlatformStallExecution(1); */
-
- /*----Set RF_ENV output high----*/
- PHY_SetBBReg(Adapter, pPhyReg->rfintfo, bRFSI_RFENV, 0x1);
- udelay(1);/* PlatformStallExecution(1); */
-
- /* Set bit number of Address and Data for RF register */
- PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireAddressLength, 0x0); /* Set 1 to 4 bits for 8255 */
- udelay(1);/* PlatformStallExecution(1); */
-
- PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireDataLength, 0x0); /* Set 0 to 12 bits for 8255 */
- udelay(1);/* PlatformStallExecution(1); */
-
- /*----Initialize RF fom connfiguration file----*/
- ODM_ConfigRFWithHeaderFile(&pHalData->odmpriv, CONFIG_RF_RADIO, RF_PATH_A);
-
- /*----Restore RFENV control type----*/
- PHY_SetBBReg(Adapter, pPhyReg->rfintfs, bRFSI_RFENV, u4RegValue);
-
- /* 3 ----------------------------------------------------------------- */
- /* 3 Configuration of Tx Power Tracking */
- /* 3 ----------------------------------------------------------------- */
-
- ODM_ConfigRFWithTxPwrTrackHeaderFile(&pHalData->odmpriv);
-
- return _SUCCESS;
-}
-
-int PHY_RF6052_Config8723B(struct adapter *Adapter)
-{
- /* */
- /* Config BB and RF */
- /* */
- return phy_RF6052_Config_ParaFile(Adapter);
-
-}
-
-/* End of HalRf6052.c */
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723b_rxdesc.c b/drivers/staging/rtl8723bs/hal/rtl8723b_rxdesc.c
deleted file mode 100644
index ac1249676794..000000000000
--- a/drivers/staging/rtl8723bs/hal/rtl8723b_rxdesc.c
+++ /dev/null
@@ -1,69 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <rtl8723b_hal.h>
-
-static void process_rssi(struct adapter *padapter, union recv_frame *prframe)
-{
- struct rx_pkt_attrib *pattrib = &prframe->u.hdr.attrib;
- struct signal_stat *signal_stat = &padapter->recvpriv.signal_strength_data;
-
- /* if (pRfd->Status.bPacketToSelf || pRfd->Status.bPacketBeacon) */
- {
- 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, union recv_frame *prframe)
-{
- struct rx_pkt_attrib *pattrib;
- struct signal_stat *signal_stat;
-
- if (!prframe || !padapter)
- return;
-
- pattrib = &prframe->u.hdr.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;
-} /* Process_UiLinkQuality8192S */
-
-void rtl8723b_process_phy_info(struct adapter *padapter, void *prframe)
-{
- union recv_frame *precvframe = prframe;
- /* */
- /* Check RSSI */
- /* */
- process_rssi(padapter, precvframe);
- /* */
- /* Check PWDB. */
- /* */
- /* process_PWDB(padapter, precvframe); */
-
- /* UpdateRxSignalStatistics8192C(Adapter, pRfd); */
- /* */
- /* Check EVM */
- /* */
- process_link_qual(padapter, precvframe);
-}
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
deleted file mode 100644
index e943c304950e..000000000000
--- a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
+++ /dev/null
@@ -1,477 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-#include <rtl8723b_hal.h>
-
-static void initrecvbuf(struct recv_buf *precvbuf, struct adapter *padapter)
-{
- INIT_LIST_HEAD(&precvbuf->list);
- spin_lock_init(&precvbuf->recvbuf_lock);
-
- precvbuf->adapter = padapter;
-}
-
-static void update_recvframe_attrib(struct adapter *padapter,
- union recv_frame *precvframe,
- struct recv_stat *prxstat)
-{
- struct rx_pkt_attrib *pattrib;
- struct recv_stat report;
- struct rxreport_8723b *prxreport = (struct rxreport_8723b *)&report;
-
- report.rxdw0 = prxstat->rxdw0;
- report.rxdw1 = prxstat->rxdw1;
- report.rxdw2 = prxstat->rxdw2;
- report.rxdw3 = prxstat->rxdw3;
- report.rxdw4 = prxstat->rxdw4;
- report.rxdw5 = prxstat->rxdw5;
-
- pattrib = &precvframe->u.hdr.attrib;
- memset(pattrib, 0, sizeof(struct rx_pkt_attrib));
-
- /* update rx report to recv_frame attribute */
- pattrib->pkt_rpt_type = prxreport->c2h_ind ? C2H_PACKET : NORMAL_RX;
-
- if (pattrib->pkt_rpt_type == NORMAL_RX) {
- /* Normal rx packet */
- /* update rx report to recv_frame attribute */
- pattrib->pkt_len = (u16)prxreport->pktlen;
- pattrib->drvinfo_sz = (u8)(prxreport->drvinfosize << 3);
- pattrib->physt = (u8)prxreport->physt;
-
- pattrib->crc_err = (u8)prxreport->crc32;
- pattrib->icv_err = (u8)prxreport->icverr;
-
- pattrib->bdecrypted = (u8)(prxreport->swdec ? 0 : 1);
- pattrib->encrypt = (u8)prxreport->security;
-
- pattrib->qos = (u8)prxreport->qos;
- pattrib->priority = (u8)prxreport->tid;
-
- pattrib->amsdu = (u8)prxreport->amsdu;
-
- pattrib->seq_num = (u16)prxreport->seq;
- pattrib->frag_num = (u8)prxreport->frag;
- pattrib->mfrag = (u8)prxreport->mf;
- pattrib->mdata = (u8)prxreport->md;
-
- pattrib->data_rate = (u8)prxreport->rx_rate;
- } else {
- pattrib->pkt_len = (u16)prxreport->pktlen;
- }
-}
-
-/*
- * Notice:
- *Before calling this function,
- *precvframe->u.hdr.rx_data should be ready!
- */
-static void update_recvframe_phyinfo(union recv_frame *precvframe,
- struct phy_stat *pphy_status)
-{
- struct adapter *padapter = precvframe->u.hdr.adapter;
- struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib;
- struct hal_com_data *p_hal_data = GET_HAL_DATA(padapter);
- struct odm_phy_info *p_phy_info =
- (struct odm_phy_info *)(&pattrib->phy_info);
-
- u8 *wlanhdr = precvframe->u.hdr.rx_data;
- u8 *my_bssid;
- u8 *rx_bssid;
- u8 *rx_ra;
- u8 *my_hwaddr;
- u8 *sa = NULL;
-
- struct odm_packet_info pkt_info = {
- .data_rate = 0x00,
- .station_id = 0x00,
- .bssid_match = false,
- .to_self = false,
- .is_beacon = false,
- };
-
- /* unsigned long irqL; */
- struct sta_priv *pstapriv;
- struct sta_info *psta;
-
- my_bssid = get_bssid(&padapter->mlmepriv);
- rx_bssid = get_hdr_bssid(wlanhdr);
- pkt_info.bssid_match = ((!IsFrameTypeCtrl(wlanhdr)) &&
- !pattrib->icv_err && !pattrib->crc_err &&
- ether_addr_equal(rx_bssid, my_bssid));
-
- rx_ra = rtl8723bs_get_ra(wlanhdr);
- my_hwaddr = myid(&padapter->eeprompriv);
- pkt_info.to_self = pkt_info.bssid_match &&
- ether_addr_equal(rx_ra, my_hwaddr);
-
- pkt_info.is_beacon = pkt_info.bssid_match &&
- (GetFrameSubType(wlanhdr) == WIFI_BEACON);
-
- sa = get_ta(wlanhdr);
-
- pkt_info.station_id = 0xFF;
-
- pstapriv = &padapter->stapriv;
- psta = rtw_get_stainfo(pstapriv, sa);
- if (psta)
- pkt_info.station_id = psta->mac_id;
-
- pkt_info.data_rate = pattrib->data_rate;
-
- /* rtl8723b_query_rx_phy_status(precvframe, pphy_status); */
- /* spin_lock_bh(&p_hal_data->odm_stainfo_lock); */
- odm_phy_status_query(&p_hal_data->odmpriv, p_phy_info,
- (u8 *)pphy_status, &(pkt_info));
- if (psta)
- psta->rssi = pattrib->phy_info.RecvSignalPower;
- /* spin_unlock_bh(&p_hal_data->odm_stainfo_lock); */
- precvframe->u.hdr.psta = NULL;
- if (
- pkt_info.bssid_match &&
- (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE))
- ) {
- if (psta) {
- precvframe->u.hdr.psta = psta;
- rtl8723b_process_phy_info(padapter, precvframe);
- }
- } else if (pkt_info.to_self || pkt_info.is_beacon) {
- u32 adhoc_state = WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE;
-
- if (check_fwstate(&padapter->mlmepriv, adhoc_state))
- if (psta)
- precvframe->u.hdr.psta = psta;
- rtl8723b_process_phy_info(padapter, precvframe);
- }
-}
-
-static void rtl8723bs_c2h_packet_handler(struct adapter *padapter,
- u8 *pbuf, u16 length)
-{
- u8 *tmp = NULL;
- u8 res = false;
-
- if (length == 0)
- return;
-
- tmp = kmemdup(pbuf, length, GFP_ATOMIC);
- if (!tmp)
- return;
-
- res = rtw_c2h_packet_wk_cmd(padapter, tmp, length);
-
- if (!res)
- kfree(tmp);
-}
-
-static inline union recv_frame *try_alloc_recvframe(struct recv_priv *precvpriv,
- struct recv_buf *precvbuf)
-{
- union recv_frame *precvframe;
-
- precvframe = rtw_alloc_recvframe(&precvpriv->free_recv_queue);
- if (!precvframe) {
- rtw_enqueue_recvbuf_to_head(precvbuf,
- &precvpriv->recv_buf_pending_queue);
-
- /* The case of can't allocate recvframe should be temporary, */
- /* schedule again and hope recvframe is available next time. */
- tasklet_schedule(&precvpriv->recv_tasklet);
- }
-
- return precvframe;
-}
-
-static inline bool rx_crc_err(struct recv_priv *precvpriv,
- struct hal_com_data *p_hal_data,
- struct rx_pkt_attrib *pattrib,
- union recv_frame *precvframe)
-{
- /* fix Hardware RX data error, drop whole recv_buffer */
- if ((!(p_hal_data->ReceiveConfig & RCR_ACRC32)) && pattrib->crc_err) {
- rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
- return true;
- }
-
- return false;
-}
-
-static inline bool pkt_exceeds_tail(struct recv_priv *precvpriv,
- u8 *end, u8 *tail,
- union recv_frame *precvframe)
-{
- if (end > tail) {
- rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
- return true;
- }
-
- return false;
-}
-
-static void rtl8723bs_recv_tasklet(struct tasklet_struct *t)
-{
- struct adapter *padapter = from_tasklet(padapter, t,
- recvpriv.recv_tasklet);
- struct hal_com_data *p_hal_data;
- struct recv_priv *precvpriv;
- struct recv_buf *precvbuf;
- union recv_frame *precvframe;
- struct rx_pkt_attrib *pattrib;
- struct __queue *recv_buf_queue;
- u8 *ptr;
- u32 pkt_offset, skb_len, alloc_sz;
- struct sk_buff *pkt_copy = NULL;
- u8 shift_sz = 0, rx_report_sz = 0;
-
- p_hal_data = GET_HAL_DATA(padapter);
- precvpriv = &padapter->recvpriv;
- recv_buf_queue = &precvpriv->recv_buf_pending_queue;
-
- do {
- precvbuf = rtw_dequeue_recvbuf(recv_buf_queue);
- if (!precvbuf)
- break;
-
- ptr = precvbuf->pdata;
-
- while (ptr < precvbuf->ptail) {
- precvframe = try_alloc_recvframe(precvpriv, precvbuf);
- if (!precvframe)
- return;
-
- /* rx desc parsing */
- update_recvframe_attrib(padapter, precvframe,
- (struct recv_stat *)ptr);
-
- pattrib = &precvframe->u.hdr.attrib;
-
- if (rx_crc_err(precvpriv, p_hal_data,
- pattrib, precvframe))
- break;
-
- rx_report_sz = RXDESC_SIZE + pattrib->drvinfo_sz;
- pkt_offset = rx_report_sz +
- pattrib->shift_sz +
- pattrib->pkt_len;
-
- if (pkt_exceeds_tail(precvpriv, ptr + pkt_offset,
- precvbuf->ptail, precvframe))
- break;
-
- if ((pattrib->crc_err) || (pattrib->icv_err)) {
- rtw_free_recvframe(precvframe,
- &precvpriv->free_recv_queue);
- } else {
- /* 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 = __dev_alloc_skb(alloc_sz, GFP_ATOMIC);
- if (!pkt_copy) {
- rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
- break;
- }
-
- pkt_copy->dev = padapter->pnetdev;
- precvframe->u.hdr.pkt = pkt_copy;
- skb_reserve(pkt_copy, 8 - ((SIZE_PTR)(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, (ptr + rx_report_sz + pattrib->shift_sz), skb_len);
- precvframe->u.hdr.rx_head = pkt_copy->head;
- precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pkt_copy->data;
- precvframe->u.hdr.rx_end = skb_end_pointer(pkt_copy);
-
- recvframe_put(precvframe, skb_len);
- /* recvframe_pull(precvframe, drvinfo_sz + RXDESC_SIZE); */
-
- if (p_hal_data->ReceiveConfig & RCR_APPFCS)
- recvframe_pull_tail(precvframe, IEEE80211_FCS_LEN);
-
- /* move to drv info position */
- ptr += RXDESC_SIZE;
-
- /* update drv info */
- if (p_hal_data->ReceiveConfig & RCR_APP_BA_SSN) {
- /* rtl8723s_update_bassn(padapter, pdrvinfo); */
- ptr += 4;
- }
-
- if (pattrib->pkt_rpt_type == NORMAL_RX) { /* Normal rx packet */
- if (pattrib->physt)
- update_recvframe_phyinfo(precvframe, (struct phy_stat *)ptr);
-
- rtw_recv_entry(precvframe);
- } else if (pattrib->pkt_rpt_type == C2H_PACKET) {
- struct c2h_evt_hdr_t C2hEvent;
-
- u16 len_c2h = pattrib->pkt_len;
- u8 *pbuf_c2h = precvframe->u.hdr.rx_data;
- u8 *pdata_c2h;
-
- C2hEvent.CmdID = pbuf_c2h[0];
- C2hEvent.CmdSeq = pbuf_c2h[1];
- C2hEvent.CmdLen = (len_c2h-2);
- pdata_c2h = pbuf_c2h+2;
-
- if (C2hEvent.CmdID == C2H_CCX_TX_RPT)
- CCX_FwC2HTxRpt_8723b(padapter, pdata_c2h, C2hEvent.CmdLen);
- else
- rtl8723bs_c2h_packet_handler(padapter, precvframe->u.hdr.rx_data, pattrib->pkt_len);
-
- rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue);
- }
- }
-
- pkt_offset = round_up(pkt_offset, 8);
- precvbuf->pdata += pkt_offset;
- ptr = precvbuf->pdata;
- precvframe = NULL;
- pkt_copy = NULL;
- }
-
- rtw_enqueue_recvbuf(precvbuf, &precvpriv->free_recv_buf_queue);
- } while (1);
-}
-
-/*
- * Initialize recv private variable for hardware dependent
- * 1. recv buf
- * 2. recv tasklet
- *
- */
-s32 rtl8723bs_init_recv_priv(struct adapter *padapter)
-{
- s32 res;
- u32 i, n;
- struct recv_priv *precvpriv;
- struct recv_buf *precvbuf;
-
- res = _SUCCESS;
- precvpriv = &padapter->recvpriv;
-
- /* 3 1. init recv buffer */
- INIT_LIST_HEAD(&precvpriv->free_recv_buf_queue.queue);
- spin_lock_init(&precvpriv->free_recv_buf_queue.lock);
- INIT_LIST_HEAD(&precvpriv->recv_buf_pending_queue.queue);
- spin_lock_init(&precvpriv->recv_buf_pending_queue.lock);
-
- n = NR_RECVBUFF * sizeof(struct recv_buf) + 4;
- precvpriv->pallocated_recv_buf = kzalloc(n, GFP_KERNEL);
- if (!precvpriv->pallocated_recv_buf) {
- res = _FAIL;
- goto exit;
- }
-
- precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4);
-
- /* init each recv buffer */
- precvbuf = (struct recv_buf *)precvpriv->precv_buf;
- for (i = 0; i < NR_RECVBUFF; i++) {
- initrecvbuf(precvbuf, padapter);
-
- if (!precvbuf->pskb) {
- SIZE_PTR tmpaddr = 0;
- SIZE_PTR alignment = 0;
-
- precvbuf->pskb = __dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_ATOMIC);
- if (precvbuf->pskb) {
- precvbuf->pskb->dev = padapter->pnetdev;
-
- tmpaddr = (SIZE_PTR)precvbuf->pskb->data;
- alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
- skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment));
- }
- }
-
- list_add_tail(&precvbuf->list, &precvpriv->free_recv_buf_queue.queue);
-
- precvbuf++;
- }
- precvpriv->free_recv_buf_queue_cnt = i;
-
- if (res == _FAIL)
- goto initbuferror;
-
- /* 3 2. init tasklet */
- tasklet_setup(&precvpriv->recv_tasklet, rtl8723bs_recv_tasklet);
-
- goto exit;
-
-initbuferror:
- precvbuf = (struct recv_buf *)precvpriv->precv_buf;
- if (precvbuf) {
- n = precvpriv->free_recv_buf_queue_cnt;
- precvpriv->free_recv_buf_queue_cnt = 0;
- for (i = 0; i < n ; i++) {
- list_del_init(&precvbuf->list);
- if (precvbuf->pskb)
- dev_kfree_skb_any(precvbuf->pskb);
- precvbuf++;
- }
- precvpriv->precv_buf = NULL;
- }
-
- kfree(precvpriv->pallocated_recv_buf);
- precvpriv->pallocated_recv_buf = NULL;
-
-exit:
- return res;
-}
-
-/*
- * Free recv private variable of hardware dependent
- * 1. recv buf
- * 2. recv tasklet
- *
- */
-void rtl8723bs_free_recv_priv(struct adapter *padapter)
-{
- u32 i;
- struct recv_priv *precvpriv;
- struct recv_buf *precvbuf;
-
- precvpriv = &padapter->recvpriv;
-
- /* 3 1. kill tasklet */
- tasklet_kill(&precvpriv->recv_tasklet);
-
- /* 3 2. free all recv buffers */
- precvbuf = (struct recv_buf *)precvpriv->precv_buf;
- if (precvbuf) {
- precvpriv->free_recv_buf_queue_cnt = 0;
- for (i = 0; i < NR_RECVBUFF; i++) {
- list_del_init(&precvbuf->list);
- if (precvbuf->pskb)
- dev_kfree_skb_any(precvbuf->pskb);
- precvbuf++;
- }
- precvpriv->precv_buf = NULL;
- }
-
- kfree(precvpriv->pallocated_recv_buf);
- precvpriv->pallocated_recv_buf = NULL;
-}
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c b/drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c
deleted file mode 100644
index 7f55448d544e..000000000000
--- a/drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c
+++ /dev/null
@@ -1,568 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <drv_types.h>
-#include <rtl8723b_hal.h>
-
-static u8 rtw_sdio_wait_enough_TxOQT_space(struct adapter *padapter, u8 agg_num)
-{
- u32 n = 0;
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- while (pHalData->SdioTxOQTFreeSpace < agg_num) {
- if (
- (padapter->bSurpriseRemoved) ||
- (padapter->driver_stopped)
- )
- return false;
-
- HalQueryTxOQTBufferStatus8723BSdio(padapter);
-
- if ((++n % 60) == 0) {
- msleep(1);
- /* yield(); */
- }
- }
-
- pHalData->SdioTxOQTFreeSpace -= agg_num;
-
- return true;
-}
-
-static s32 rtl8723_dequeue_writeport(struct adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
- struct xmit_buf *pxmitbuf;
- struct adapter *pri_padapter = padapter;
- s32 ret = 0;
- u8 PageIdx = 0;
- u32 deviceId;
- u8 bUpdatePageNum = false;
-
- ret = ret || check_fwstate(pmlmepriv, _FW_UNDER_SURVEY);
-
- if (ret)
- pxmitbuf = dequeue_pending_xmitbuf_under_survey(pxmitpriv);
- else
- pxmitbuf = dequeue_pending_xmitbuf(pxmitpriv);
-
- if (!pxmitbuf)
- return true;
-
- deviceId = ffaddr2deviceId(pdvobjpriv, pxmitbuf->ff_hwaddr);
-
- /* translate fifo addr to queue index */
- switch (deviceId) {
- case WLAN_TX_HIQ_DEVICE_ID:
- PageIdx = HI_QUEUE_IDX;
- break;
-
- case WLAN_TX_MIQ_DEVICE_ID:
- PageIdx = MID_QUEUE_IDX;
- break;
-
- case WLAN_TX_LOQ_DEVICE_ID:
- PageIdx = LOW_QUEUE_IDX;
- break;
- }
-
-query_free_page:
- /* check if hardware tx fifo page is enough */
- if (!rtw_hal_sdio_query_tx_freepage(pri_padapter, PageIdx, pxmitbuf->pg_num)) {
- if (!bUpdatePageNum) {
- /* Total page count is not available, so update current FIFO status */
- HalQueryTxBufferStatus8723BSdio(padapter);
- bUpdatePageNum = true;
- goto query_free_page;
- } else {
- bUpdatePageNum = false;
- enqueue_pending_xmitbuf_to_head(pxmitpriv, pxmitbuf);
- return true;
- }
- }
-
- if (
- (padapter->bSurpriseRemoved) ||
- (padapter->driver_stopped)
- )
- goto free_xmitbuf;
-
- if (!rtw_sdio_wait_enough_TxOQT_space(padapter, pxmitbuf->agg_num))
- goto free_xmitbuf;
-
- traffic_check_for_leave_lps(padapter, true, pxmitbuf->agg_num);
-
- rtw_write_port(padapter, deviceId, pxmitbuf->len, (u8 *)pxmitbuf);
-
- rtw_hal_sdio_update_tx_freepage(pri_padapter, PageIdx, pxmitbuf->pg_num);
-
-free_xmitbuf:
- /* rtw_free_xmitframe(pxmitpriv, pframe); */
- /* pxmitbuf->priv_data = NULL; */
- rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
-
- return _FAIL;
-}
-
-/*
- * Description
- *Transmit xmitbuf to hardware tx fifo
- *
- * Return
- *_SUCCESS ok
- *_FAIL something error
- */
-s32 rtl8723bs_xmit_buf_handler(struct adapter *padapter)
-{
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- u8 queue_empty, queue_pending;
- s32 ret;
-
- if (wait_for_completion_interruptible(&pxmitpriv->xmit_comp)) {
- netdev_emerg(padapter->pnetdev,
- "%s: down SdioXmitBufSema fail!\n", __func__);
- return _FAIL;
- }
-
- ret = (padapter->driver_stopped) || (padapter->bSurpriseRemoved);
- if (ret)
- return _FAIL;
-
- queue_pending = check_pending_xmitbuf(pxmitpriv);
-
- if (!queue_pending)
- return _SUCCESS;
-
- ret = rtw_register_tx_alive(padapter);
- if (ret != _SUCCESS) {
- return _SUCCESS;
- }
-
- do {
- queue_empty = rtl8723_dequeue_writeport(padapter);
-/* dump secondary adapter xmitbuf */
- } while (!queue_empty);
-
- rtw_unregister_tx_alive(padapter);
-
- return _SUCCESS;
-}
-
-/*
- * Description:
- *Aggregation packets and send to hardware
- *
- * Return:
- *0 Success
- *-1 Hardware resource(TX FIFO) not ready
- *-2 Software resource(xmitbuf) not ready
- */
-static s32 xmit_xmitframes(struct adapter *padapter, struct xmit_priv *pxmitpriv)
-{
- s32 err, ret;
- u32 k = 0;
- struct hw_xmit *hwxmits, *phwxmit;
- u8 idx, hwentry;
- struct tx_servq *ptxservq;
- struct list_head *sta_plist, *sta_phead, *frame_plist, *frame_phead, *tmp;
- struct xmit_frame *pxmitframe;
- struct __queue *pframe_queue;
- struct xmit_buf *pxmitbuf;
- u32 txlen, max_xmit_len;
- u8 txdesc_size = TXDESC_SIZE;
- int inx[4];
-
- err = 0;
- hwxmits = pxmitpriv->hwxmits;
- hwentry = pxmitpriv->hwxmit_entry;
- ptxservq = NULL;
- pxmitframe = NULL;
- pframe_queue = NULL;
- pxmitbuf = NULL;
-
- if (padapter->registrypriv.wifi_spec == 1) {
- for (idx = 0; idx < 4; idx++)
- inx[idx] = pxmitpriv->wmm_para_seq[idx];
- } else {
- inx[0] = 0;
- inx[1] = 1;
- inx[2] = 2;
- inx[3] = 3;
- }
-
- /* 0(VO), 1(VI), 2(BE), 3(BK) */
- for (idx = 0; idx < hwentry; idx++) {
- phwxmit = hwxmits + inx[idx];
-
- if (
- (check_pending_xmitbuf(pxmitpriv)) &&
- (padapter->mlmepriv.link_detect_info.higher_busy_tx_traffic)
- ) {
- if ((phwxmit->accnt > 0) && (phwxmit->accnt < 5)) {
- err = -2;
- break;
- }
- }
-
- max_xmit_len = rtw_hal_get_sdio_tx_max_length(padapter, inx[idx]);
-
- spin_lock_bh(&pxmitpriv->lock);
-
- sta_phead = get_list_head(phwxmit->sta_queue);
- /* because stop_sta_xmit may delete sta_plist at any time */
- /* so we should add lock here, or while loop can not exit */
- list_for_each_safe(sta_plist, tmp, sta_phead) {
- ptxservq = list_entry(sta_plist, struct tx_servq,
- tx_pending);
-
- pframe_queue = &ptxservq->sta_pending;
-
- frame_phead = get_list_head(pframe_queue);
-
- while (!list_empty(frame_phead)) {
- frame_plist = get_next(frame_phead);
- pxmitframe = container_of(frame_plist, struct xmit_frame, list);
-
- /* check xmit_buf size enough or not */
- txlen = txdesc_size + rtw_wlan_pkt_size(pxmitframe);
- if (!pxmitbuf ||
- ((_RND(pxmitbuf->len, 8) + txlen) > max_xmit_len) ||
- (k >= (rtw_hal_sdio_max_txoqt_free_space(padapter) - 1))
- ) {
- if (pxmitbuf) {
- /* pxmitbuf->priv_data will be NULL, and will crash here */
- if (pxmitbuf->len > 0 &&
- pxmitbuf->priv_data) {
- struct xmit_frame *pframe;
-
- pframe = (struct xmit_frame *)pxmitbuf->priv_data;
- pframe->agg_num = k;
- pxmitbuf->agg_num = k;
- rtl8723b_update_txdesc(pframe, pframe->buf_addr);
- rtw_free_xmitframe(pxmitpriv, pframe);
- pxmitbuf->priv_data = NULL;
- enqueue_pending_xmitbuf(pxmitpriv, pxmitbuf);
- /* can not yield under lock */
- /* yield(); */
- } else
- rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
- }
-
- pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv);
- if (!pxmitbuf) {
- err = -2;
- complete(&(pxmitpriv->xmit_comp));
- break;
- }
- k = 0;
- }
-
- /* ok to send, remove frame from queue */
- if (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE))
- if (
- (pxmitframe->attrib.psta->state & WIFI_SLEEP_STATE) &&
- (pxmitframe->attrib.triggered == 0)
- )
- break;
-
- list_del_init(&pxmitframe->list);
- ptxservq->qcnt--;
- phwxmit->accnt--;
-
- if (k == 0) {
- pxmitbuf->ff_hwaddr = rtw_get_ff_hwaddr(pxmitframe);
- pxmitbuf->priv_data = (u8 *)pxmitframe;
- }
-
- /* coalesce the xmitframe to xmitbuf */
- pxmitframe->pxmitbuf = pxmitbuf;
- pxmitframe->buf_addr = pxmitbuf->ptail;
-
- ret = rtw_xmitframe_coalesce(padapter, pxmitframe->pkt, pxmitframe);
- if (ret) {
- netdev_err(padapter->pnetdev,
- "%s: coalesce failed with error %d\n",
- __func__, ret);
- /* Todo: error handler */
- } else {
- k++;
- if (k != 1)
- rtl8723b_update_txdesc(pxmitframe, pxmitframe->buf_addr);
- rtw_count_tx_stats(padapter, pxmitframe, pxmitframe->attrib.last_txcmdsz);
-
- txlen = txdesc_size + pxmitframe->attrib.last_txcmdsz;
- pxmitframe->pg_num = (txlen + 127) / 128;
- pxmitbuf->pg_num += (txlen + 127) / 128;
- pxmitbuf->ptail += _RND(txlen, 8); /* round to 8 bytes alignment */
- pxmitbuf->len = _RND(pxmitbuf->len, 8) + txlen;
- }
-
- if (k != 1)
- rtw_free_xmitframe(pxmitpriv, pxmitframe);
- pxmitframe = NULL;
- }
-
- if (list_empty(&pframe_queue->queue))
- list_del_init(&ptxservq->tx_pending);
-
- if (err)
- break;
- }
- spin_unlock_bh(&pxmitpriv->lock);
-
- /* dump xmit_buf to hw tx fifo */
- if (pxmitbuf) {
- if (pxmitbuf->len > 0) {
- struct xmit_frame *pframe;
-
- pframe = (struct xmit_frame *)pxmitbuf->priv_data;
- pframe->agg_num = k;
- pxmitbuf->agg_num = k;
- rtl8723b_update_txdesc(pframe, pframe->buf_addr);
- rtw_free_xmitframe(pxmitpriv, pframe);
- pxmitbuf->priv_data = NULL;
- enqueue_pending_xmitbuf(pxmitpriv, pxmitbuf);
- yield();
- } else
- rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
- pxmitbuf = NULL;
- }
-
- if (err)
- break;
- }
-
- return err;
-}
-
-/*
- * Description
- *Transmit xmitframe from queue
- *
- * Return
- *_SUCCESS ok
- *_FAIL something error
- */
-static s32 rtl8723bs_xmit_handler(struct adapter *padapter)
-{
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- s32 ret;
-
- if (wait_for_completion_interruptible(&pxmitpriv->SdioXmitStart)) {
- netdev_emerg(padapter->pnetdev, "%s: SdioXmitStart fail!\n",
- __func__);
- return _FAIL;
- }
-
-next:
- if (
- (padapter->driver_stopped) ||
- (padapter->bSurpriseRemoved)
- )
- return _FAIL;
-
- spin_lock_bh(&pxmitpriv->lock);
- ret = rtw_txframes_pending(padapter);
- spin_unlock_bh(&pxmitpriv->lock);
- if (ret == 0) {
- return _SUCCESS;
- }
-
- /* dequeue frame and write to hardware */
-
- ret = xmit_xmitframes(padapter, pxmitpriv);
- if (ret == -2) {
- /* here sleep 1ms will cause big TP loss of TX */
- /* from 50+ to 40+ */
- if (padapter->registrypriv.wifi_spec)
- msleep(1);
- else
- yield();
- goto next;
- }
-
- spin_lock_bh(&pxmitpriv->lock);
- ret = rtw_txframes_pending(padapter);
- spin_unlock_bh(&pxmitpriv->lock);
- if (ret == 1)
- goto next;
-
- return _SUCCESS;
-}
-
-int rtl8723bs_xmit_thread(void *context)
-{
- s32 ret = _SUCCESS;
- struct adapter *padapter = context;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
- allow_signal(SIGTERM);
-
- do {
- ret = rtl8723bs_xmit_handler(padapter);
- if (signal_pending(current)) {
- flush_signals(current);
- }
- } while (ret == _SUCCESS);
-
- complete(&pxmitpriv->SdioXmitTerminate);
-
- return 0;
-}
-
-s32 rtl8723bs_mgnt_xmit(
- struct adapter *padapter, struct xmit_frame *pmgntframe
-)
-{
- s32 ret = _SUCCESS;
- struct pkt_attrib *pattrib = &pmgntframe->attrib;
- struct xmit_buf *pxmitbuf = pmgntframe->pxmitbuf;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
- u8 *pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
- u8 txdesc_size = TXDESC_SIZE;
-
- rtl8723b_update_txdesc(pmgntframe, pmgntframe->buf_addr);
-
- pxmitbuf->len = txdesc_size + pattrib->last_txcmdsz;
- pxmitbuf->pg_num = (pxmitbuf->len + 127) / 128; /* 128 is tx page size */
- pxmitbuf->ptail = pmgntframe->buf_addr + pxmitbuf->len;
- pxmitbuf->ff_hwaddr = rtw_get_ff_hwaddr(pmgntframe);
-
- rtw_count_tx_stats(padapter, pmgntframe, pattrib->last_txcmdsz);
-
- rtw_free_xmitframe(pxmitpriv, pmgntframe);
-
- pxmitbuf->priv_data = NULL;
-
- if (GetFrameSubType(pframe) == WIFI_BEACON) { /* dump beacon directly */
- ret = rtw_write_port(padapter, pdvobjpriv->Queue2Pipe[pxmitbuf->ff_hwaddr], pxmitbuf->len, (u8 *)pxmitbuf);
- if (ret != _SUCCESS)
- rtw_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_WRITE_PORT_ERR);
-
- rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
- } else
- enqueue_pending_xmitbuf(pxmitpriv, pxmitbuf);
-
- return ret;
-}
-
-/*
- * Description:
- *Handle xmitframe(packet) come from rtw_xmit()
- *
- * Return:
- * true dump packet directly ok
- * false enqueue, temporary can't transmit packets to hardware
- */
-s32 rtl8723bs_hal_xmit(
- struct adapter *padapter, struct xmit_frame *pxmitframe
-)
-{
- struct xmit_priv *pxmitpriv;
- s32 err;
-
- pxmitframe->attrib.qsel = pxmitframe->attrib.priority;
- pxmitpriv = &padapter->xmitpriv;
-
- if (
- (pxmitframe->frame_tag == DATA_FRAMETAG) &&
- (pxmitframe->attrib.ether_type != 0x0806) &&
- (pxmitframe->attrib.ether_type != 0x888e) &&
- (pxmitframe->attrib.dhcp_pkt != 1)
- ) {
- if (padapter->mlmepriv.link_detect_info.busy_traffic)
- rtw_issue_addbareq_cmd(padapter, pxmitframe);
- }
-
- spin_lock_bh(&pxmitpriv->lock);
- err = rtw_xmitframe_enqueue(padapter, pxmitframe);
- spin_unlock_bh(&pxmitpriv->lock);
- if (err) {
- rtw_free_xmitframe(pxmitpriv, pxmitframe);
-
- pxmitpriv->tx_drop++;
- return true;
- }
-
- complete(&pxmitpriv->SdioXmitStart);
-
- return false;
-}
-
-s32 rtl8723bs_hal_xmitframe_enqueue(
- struct adapter *padapter, struct xmit_frame *pxmitframe
-)
-{
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- s32 err;
-
- err = rtw_xmitframe_enqueue(padapter, pxmitframe);
- if (err) {
- rtw_free_xmitframe(pxmitpriv, pxmitframe);
-
- pxmitpriv->tx_drop++;
- } else {
- complete(&pxmitpriv->SdioXmitStart);
- }
-
- return err;
-
-}
-
-/*
- * Return
- *_SUCCESS start thread ok
- *_FAIL start thread fail
- *
- */
-s32 rtl8723bs_init_xmit_priv(struct adapter *padapter)
-{
- struct xmit_priv *xmitpriv = &padapter->xmitpriv;
- struct hal_com_data *phal;
-
- phal = GET_HAL_DATA(padapter);
-
- init_completion(&xmitpriv->SdioXmitStart);
- init_completion(&xmitpriv->SdioXmitTerminate);
-
- return _SUCCESS;
-}
-
-void rtl8723bs_free_xmit_priv(struct adapter *padapter)
-{
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- struct xmit_buf *pxmitbuf;
- struct __queue *pqueue = &pxmitpriv->pending_xmitbuf_queue;
- struct list_head *plist, *phead;
- struct list_head tmplist;
-
- phead = get_list_head(pqueue);
- INIT_LIST_HEAD(&tmplist);
-
- spin_lock_bh(&pqueue->lock);
- if (!list_empty(&pqueue->queue)) {
- /* Insert tmplist to end of queue, and delete phead */
- /* then tmplist become head of queue. */
- list_add_tail(&tmplist, phead);
- list_del_init(phead);
- }
- spin_unlock_bh(&pqueue->lock);
-
- phead = &tmplist;
- while (!list_empty(phead)) {
- plist = get_next(phead);
- list_del_init(plist);
-
- pxmitbuf = container_of(plist, struct xmit_buf, list);
- rtw_free_xmitframe(pxmitpriv, (struct xmit_frame *)pxmitbuf->priv_data);
- pxmitbuf->priv_data = NULL;
- rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
- }
-}
diff --git a/drivers/staging/rtl8723bs/hal/sdio_halinit.c b/drivers/staging/rtl8723bs/hal/sdio_halinit.c
deleted file mode 100644
index 57d2925642e7..000000000000
--- a/drivers/staging/rtl8723bs/hal/sdio_halinit.c
+++ /dev/null
@@ -1,1192 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <rtl8723b_hal.h>
-
-#include "hal_com_h2c.h"
-/*
- * Description:
- *Call power on sequence to enable card
- *
- * Return:
- *_SUCCESS enable success
- *_FAIL enable fail
- */
-static u8 CardEnable(struct adapter *padapter)
-{
- u8 bMacPwrCtrlOn;
- u8 ret = _FAIL;
-
- rtw_hal_get_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn);
- if (!bMacPwrCtrlOn) {
- /* RSV_CTRL 0x1C[7:0] = 0x00 */
- /* unlock ISO/CLK/Power control register */
- rtw_write8(padapter, REG_RSV_CTRL, 0x0);
-
- ret = HalPwrSeqCmdParsing(padapter,
- PWR_CUT_ALL_MSK,
- PWR_FAB_ALL_MSK,
- PWR_INTF_SDIO_MSK,
- rtl8723B_card_enable_flow);
- if (ret == _SUCCESS) {
- bMacPwrCtrlOn = true;
- rtw_hal_set_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn);
- }
- } else {
- ret = _SUCCESS;
- }
-
- return ret;
-}
-
-static
-u8 _InitPowerOn_8723BS(struct adapter *padapter)
-{
- u8 value8;
- u16 value16;
- u32 value32;
- u8 ret;
-
- /* all of these MUST be configured before power on */
-
- /* only cmd52 can be used before power on(card enable) */
- ret = CardEnable(padapter);
- if (!ret)
- return _FAIL;
-
- /* Radio-Off Pin Trigger */
- value8 = rtw_read8(padapter, REG_GPIO_INTM + 1);
- value8 |= BIT(1); /* Enable falling edge triggering interrupt */
- rtw_write8(padapter, REG_GPIO_INTM + 1, value8);
- value8 = rtw_read8(padapter, REG_GPIO_IO_SEL_2 + 1);
- value8 |= BIT(1);
- rtw_write8(padapter, REG_GPIO_IO_SEL_2 + 1, value8);
-
- /* Enable power down and GPIO interrupt */
- value16 = rtw_read16(padapter, REG_APS_FSMCO);
- value16 |= EnPDN; /* Enable HW power down and RF on */
- rtw_write16(padapter, REG_APS_FSMCO, value16);
-
- rtw_write8(padapter, REG_CR, 0x00);
- /* Enable MAC DMA/WMAC/SCHEDULE/SEC block */
- value16 = rtw_read16(padapter, REG_CR);
- value16 |= (
- HCI_TXDMA_EN |
- HCI_RXDMA_EN |
- TXDMA_EN |
- RXDMA_EN |
- PROTOCOL_EN |
- SCHEDULE_EN |
- ENSEC |
- CALTMR_EN
- );
- rtw_write16(padapter, REG_CR, value16);
-
- hal_btcoex_PowerOnSetting(padapter);
-
- /* external switch to S1 */
- /* 0x38[11] = 0x1 */
- /* 0x4c[23] = 0x1 */
- /* 0x64[0] = 0 */
- value16 = rtw_read16(padapter, REG_PWR_DATA);
- /* Switch the control of EESK, EECS to RFC for DPDT or Antenna switch */
- value16 |= BIT(11); /* BIT_EEPRPAD_RFE_CTRL_EN */
- rtw_write16(padapter, REG_PWR_DATA, value16);
-
- value32 = rtw_read32(padapter, REG_LEDCFG0);
- value32 |= BIT(23); /* DPDT_SEL_EN, 1 for SW control */
- rtw_write32(padapter, REG_LEDCFG0, value32);
-
- value8 = rtw_read8(padapter, REG_PAD_CTRL1_8723B);
- value8 &= ~BIT(0); /* BIT_SW_DPDT_SEL_DATA, DPDT_SEL default configuration */
- rtw_write8(padapter, REG_PAD_CTRL1_8723B, value8);
-
- return _SUCCESS;
-}
-
-/* Tx Page FIFO threshold */
-static void _init_available_page_threshold(struct adapter *padapter,
- u8 numHQ,
- u8 numNQ,
- u8 numLQ,
- u8 numPubQ)
-{
- u16 HQ_threshold, NQ_threshold, LQ_threshold;
-
- HQ_threshold = (numPubQ + numHQ + 1) >> 1;
- HQ_threshold |= (HQ_threshold << 8);
-
- NQ_threshold = (numPubQ + numNQ + 1) >> 1;
- NQ_threshold |= (NQ_threshold << 8);
-
- LQ_threshold = (numPubQ + numLQ + 1) >> 1;
- LQ_threshold |= (LQ_threshold << 8);
-
- rtw_write16(padapter, 0x218, HQ_threshold);
- rtw_write16(padapter, 0x21A, NQ_threshold);
- rtw_write16(padapter, 0x21C, LQ_threshold);
-}
-
-static void _InitQueueReservedPage(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
- u32 numHQ = 0;
- u32 numLQ = 0;
- u32 numNQ = 0;
- u32 numPubQ;
- u32 value32;
- u8 value8;
- bool bWiFiConfig = pregistrypriv->wifi_spec;
-
- if (pHalData->OutEpQueueSel & TX_SELE_HQ)
- numHQ = bWiFiConfig ? WMM_NORMAL_PAGE_NUM_HPQ_8723B : NORMAL_PAGE_NUM_HPQ_8723B;
-
- if (pHalData->OutEpQueueSel & TX_SELE_LQ)
- numLQ = bWiFiConfig ? WMM_NORMAL_PAGE_NUM_LPQ_8723B : NORMAL_PAGE_NUM_LPQ_8723B;
-
- /* NOTE: This step shall be proceed before writing REG_RQPN. */
- if (pHalData->OutEpQueueSel & TX_SELE_NQ)
- numNQ = bWiFiConfig ? WMM_NORMAL_PAGE_NUM_NPQ_8723B : NORMAL_PAGE_NUM_NPQ_8723B;
-
- numPubQ = TX_TOTAL_PAGE_NUMBER_8723B - numHQ - numLQ - numNQ;
-
- value8 = (u8)_NPQ(numNQ);
- rtw_write8(padapter, REG_RQPN_NPQ, value8);
-
- /* TX DMA */
- value32 = _HPQ(numHQ) | _LPQ(numLQ) | _PUBQ(numPubQ) | LD_RQPN;
- rtw_write32(padapter, REG_RQPN, value32);
-
- rtw_hal_set_sdio_tx_max_length(padapter, numHQ, numNQ, numLQ, numPubQ);
-
- _init_available_page_threshold(padapter, numHQ, numNQ, numLQ, numPubQ);
-}
-
-static void _InitTxBufferBoundary(struct adapter *padapter)
-{
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
-
- /* u16 txdmactrl; */
- u8 txpktbuf_bndy;
-
- if (!pregistrypriv->wifi_spec) {
- txpktbuf_bndy = TX_PAGE_BOUNDARY_8723B;
- } else {
- /* for WMM */
- txpktbuf_bndy = WMM_NORMAL_TX_PAGE_BOUNDARY_8723B;
- }
-
- rtw_write8(padapter, REG_TXPKTBUF_BCNQ_BDNY_8723B, txpktbuf_bndy);
- rtw_write8(padapter, REG_TXPKTBUF_MGQ_BDNY_8723B, txpktbuf_bndy);
- rtw_write8(padapter, REG_TXPKTBUF_WMAC_LBK_BF_HD_8723B, txpktbuf_bndy);
- rtw_write8(padapter, REG_TRXFF_BNDY, txpktbuf_bndy);
- rtw_write8(padapter, REG_TDECTRL + 1, txpktbuf_bndy);
-}
-
-static void _InitNormalChipRegPriority(
- struct adapter *Adapter,
- u16 beQ,
- u16 bkQ,
- u16 viQ,
- u16 voQ,
- u16 mgtQ,
- u16 hiQ
-)
-{
- u16 value16 = (rtw_read16(Adapter, REG_TRXDMA_CTRL) & 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 _InitNormalChipOneOutEpPriority(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- u16 value = 0;
-
- switch (pHalData->OutEpQueueSel) {
- case TX_SELE_HQ:
- value = QUEUE_HIGH;
- break;
- case TX_SELE_LQ:
- value = QUEUE_LOW;
- break;
- case TX_SELE_NQ:
- value = QUEUE_NORMAL;
- break;
- default:
- break;
- }
-
- _InitNormalChipRegPriority(
- Adapter, value, value, value, value, value, value
- );
-
-}
-
-static void _InitNormalChipTwoOutEpPriority(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct registry_priv *pregistrypriv = &Adapter->registrypriv;
- u16 beQ, bkQ, viQ, voQ, mgtQ, hiQ;
-
- u16 valueHi = 0;
- u16 valueLow = 0;
-
- switch (pHalData->OutEpQueueSel) {
- case (TX_SELE_HQ | TX_SELE_LQ):
- valueHi = QUEUE_HIGH;
- valueLow = QUEUE_LOW;
- break;
- case (TX_SELE_NQ | TX_SELE_LQ):
- valueHi = QUEUE_NORMAL;
- valueLow = QUEUE_LOW;
- break;
- case (TX_SELE_HQ | TX_SELE_NQ):
- valueHi = QUEUE_HIGH;
- valueLow = QUEUE_NORMAL;
- break;
- default:
- break;
- }
-
- if (!pregistrypriv->wifi_spec) {
- beQ = valueLow;
- bkQ = valueLow;
- viQ = valueHi;
- voQ = valueHi;
- mgtQ = valueHi;
- hiQ = valueHi;
- } else {
- /* for WMM , CONFIG_OUT_EP_WIFI_MODE */
- beQ = valueLow;
- bkQ = valueHi;
- viQ = valueHi;
- voQ = valueLow;
- mgtQ = valueHi;
- hiQ = valueHi;
- }
-
- _InitNormalChipRegPriority(Adapter, beQ, bkQ, viQ, voQ, mgtQ, hiQ);
-
-}
-
-static void _InitNormalChipThreeOutEpPriority(struct adapter *padapter)
-{
- struct registry_priv *pregistrypriv = &padapter->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(padapter, beQ, bkQ, viQ, voQ, mgtQ, hiQ);
-}
-
-static void _InitQueuePriority(struct adapter *Adapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
-
- switch (pHalData->OutEpNumber) {
- case 1:
- _InitNormalChipOneOutEpPriority(Adapter);
- break;
- case 2:
- _InitNormalChipTwoOutEpPriority(Adapter);
- break;
- case 3:
- _InitNormalChipThreeOutEpPriority(Adapter);
- break;
- default:
- break;
- }
-}
-
-static void _InitPageBoundary(struct adapter *padapter)
-{
- /* RX Page Boundary */
- u16 rxff_bndy = RX_DMA_BOUNDARY_8723B;
-
- rtw_write16(padapter, (REG_TRXFF_BNDY + 2), rxff_bndy);
-}
-
-static void _InitTransferPageSize(struct adapter *padapter)
-{
- /* Tx page size is always 128. */
-
- u8 value8;
-
- value8 = _PSRX(PBP_128) | _PSTX(PBP_128);
- rtw_write8(padapter, REG_PBP, value8);
-}
-
-static void _InitDriverInfoSize(struct adapter *padapter, u8 drvInfoSize)
-{
- rtw_write8(padapter, REG_RX_DRVINFO_SZ, drvInfoSize);
-}
-
-static void _InitNetworkType(struct adapter *padapter)
-{
- u32 value32;
-
- value32 = rtw_read32(padapter, REG_CR);
-
- /* TODO: use the other function to set network type */
- value32 = (value32 & ~MASK_NETTYPE) | _NETTYPE(NT_LINK_AP);
-
- rtw_write32(padapter, REG_CR, value32);
-}
-
-static void _InitWMACSetting(struct adapter *padapter)
-{
- struct hal_com_data *pHalData;
- u16 value16;
-
- pHalData = GET_HAL_DATA(padapter);
-
- pHalData->ReceiveConfig = 0;
- pHalData->ReceiveConfig |= RCR_APM | RCR_AM | RCR_AB;
- pHalData->ReceiveConfig |= RCR_CBSSID_DATA | RCR_CBSSID_BCN | RCR_AMF;
- pHalData->ReceiveConfig |= RCR_HTC_LOC_CTRL;
- pHalData->ReceiveConfig |= RCR_APP_PHYST_RXFF | RCR_APP_ICV | RCR_APP_MIC;
- rtw_write32(padapter, REG_RCR, pHalData->ReceiveConfig);
-
- /* Accept all multicast address */
- rtw_write32(padapter, REG_MAR, 0xFFFFFFFF); /* Offset 0x0620-0x0623 */
- rtw_write32(padapter, REG_MAR + 4, 0xFFFFFFFF); /* Offset 0x0624-0x0627 */
-
- /* Accept all data frames */
- value16 = 0xFFFF;
- rtw_write16(padapter, REG_RXFLTMAP2, value16);
-
- /* 2010.09.08 hpfan */
- /* Since ADF is removed from RCR, ps-poll will not be indicate to driver, */
- /* RxFilterMap should mask ps-poll to guarantee AP mode can rx ps-poll. */
- value16 = 0x400;
- rtw_write16(padapter, REG_RXFLTMAP1, value16);
-
- /* Accept all management frames */
- value16 = 0xFFFF;
- rtw_write16(padapter, REG_RXFLTMAP0, value16);
-}
-
-static void _InitAdaptiveCtrl(struct adapter *padapter)
-{
- u16 value16;
- u32 value32;
-
- /* Response Rate Set */
- value32 = rtw_read32(padapter, REG_RRSR);
- value32 &= ~RATE_BITMAP_ALL;
- value32 |= RATE_RRSR_CCK_ONLY_1M;
- rtw_write32(padapter, REG_RRSR, value32);
-
- /* SIFS (used in NAV) */
- value16 = _SPEC_SIFS_CCK(0x10) | _SPEC_SIFS_OFDM(0x10);
- rtw_write16(padapter, REG_SPEC_SIFS, value16);
-
- /* Retry Limit */
- value16 = _LRL(0x30) | _SRL(0x30);
- rtw_write16(padapter, REG_RL, value16);
-}
-
-static void _InitEDCA(struct adapter *padapter)
-{
- /* Set Spec SIFS (used in NAV) */
- rtw_write16(padapter, REG_SPEC_SIFS, 0x100a);
- rtw_write16(padapter, REG_MAC_SPEC_SIFS, 0x100a);
-
- /* Set SIFS for CCK */
- rtw_write16(padapter, REG_SIFS_CTX, 0x100a);
-
- /* Set SIFS for OFDM */
- rtw_write16(padapter, REG_SIFS_TRX, 0x100a);
-
- /* TXOP */
- rtw_write32(padapter, REG_EDCA_BE_PARAM, 0x005EA42B);
- rtw_write32(padapter, REG_EDCA_BK_PARAM, 0x0000A44F);
- rtw_write32(padapter, REG_EDCA_VI_PARAM, 0x005EA324);
- rtw_write32(padapter, REG_EDCA_VO_PARAM, 0x002FA226);
-}
-
-static void _InitRetryFunction(struct adapter *padapter)
-{
- u8 value8;
-
- value8 = rtw_read8(padapter, REG_FWHW_TXQ_CTRL);
- value8 |= EN_AMPDU_RTY_NEW;
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL, value8);
-
- /* Set ACK timeout */
- rtw_write8(padapter, REG_ACKTO, 0x40);
-}
-
-static void HalRxAggr8723BSdio(struct adapter *padapter)
-{
- u8 valueDMATimeout;
- u8 valueDMAPageCount;
-
- valueDMATimeout = 0x06;
- valueDMAPageCount = 0x06;
-
- rtw_write8(padapter, REG_RXDMA_AGG_PG_TH + 1, valueDMATimeout);
- rtw_write8(padapter, REG_RXDMA_AGG_PG_TH, valueDMAPageCount);
-}
-
-static void sdio_AggSettingRxUpdate(struct adapter *padapter)
-{
- u8 valueDMA;
- u8 valueRxAggCtrl = 0;
- u8 aggBurstNum = 3; /* 0:1, 1:2, 2:3, 3:4 */
- u8 aggBurstSize = 0; /* 0:1K, 1:512Byte, 2:256Byte... */
-
- valueDMA = rtw_read8(padapter, REG_TRXDMA_CTRL);
- valueDMA |= RXDMA_AGG_EN;
- rtw_write8(padapter, REG_TRXDMA_CTRL, valueDMA);
-
- valueRxAggCtrl |= RXDMA_AGG_MODE_EN;
- valueRxAggCtrl |= ((aggBurstNum << 2) & 0x0C);
- valueRxAggCtrl |= ((aggBurstSize << 4) & 0x30);
- rtw_write8(padapter, REG_RXDMA_MODE_CTRL_8723B, valueRxAggCtrl);/* RxAggLowThresh = 4*1K */
-}
-
-static void _initSdioAggregationSetting(struct adapter *padapter)
-{
- /* Rx aggregation setting */
- HalRxAggr8723BSdio(padapter);
-
- sdio_AggSettingRxUpdate(padapter);
-}
-
-static void _InitOperationMode(struct adapter *padapter)
-{
- struct mlme_ext_priv *pmlmeext;
- u8 regBwOpMode = 0;
-
- pmlmeext = &padapter->mlmeextpriv;
-
- /* 1 This part need to modified according to the rate set we filtered!! */
- /* */
- /* Set RRSR, RATR, and REG_BWOPMODE registers */
- /* */
- switch (pmlmeext->cur_wireless_mode) {
- case WIRELESS_MODE_B:
- regBwOpMode = BW_OPMODE_20MHZ;
- break;
- case WIRELESS_MODE_G:
- regBwOpMode = BW_OPMODE_20MHZ;
- break;
- case WIRELESS_MODE_AUTO:
- regBwOpMode = BW_OPMODE_20MHZ;
- break;
- case WIRELESS_MODE_N_24G:
- /* It support CCK rate by default. */
- /* CCK rate will be filtered out only when associated AP does not support it. */
- regBwOpMode = BW_OPMODE_20MHZ;
- break;
-
- default: /* for MacOSX compiler warning. */
- break;
- }
-
- rtw_write8(padapter, REG_BWOPMODE, regBwOpMode);
-
-}
-
-static void _InitInterrupt(struct adapter *padapter)
-{
- /* HISR - turn all off */
- rtw_write32(padapter, REG_HISR, 0);
-
- /* HIMR - turn all off */
- rtw_write32(padapter, REG_HIMR, 0);
-
- /* */
- /* Initialize and enable SDIO Host Interrupt. */
- /* */
- InitInterrupt8723BSdio(padapter);
-}
-
-static void _RfPowerSave(struct adapter *padapter)
-{
-/* YJ, TODO */
-}
-
-/* */
-/* 2010/08/09 MH Add for power down check. */
-/* */
-static bool HalDetectPwrDownMode(struct adapter *Adapter)
-{
- u8 tmpvalue;
- struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
- struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(Adapter);
-
- rtw_efuse_shadow_read(Adapter, 1, 0x7B/*EEPROM_RF_OPT3_92C*/, (u32 *)&tmpvalue);
-
- /* 2010/08/25 MH INF priority > PDN Efuse value. */
- if (tmpvalue & BIT(4) && pwrctrlpriv->reg_pdnmode)
- pHalData->pwrdown = true;
- else
- pHalData->pwrdown = false;
-
- return pHalData->pwrdown;
-} /* HalDetectPwrDownMode */
-
-u32 rtl8723bs_hal_init(struct adapter *padapter)
-{
- s32 ret;
- struct hal_com_data *pHalData;
- struct pwrctrl_priv *pwrctrlpriv;
- u32 NavUpper = WiFiNavUpperUs;
- u8 val;
-
- pHalData = GET_HAL_DATA(padapter);
- pwrctrlpriv = adapter_to_pwrctl(padapter);
-
- if (adapter_to_pwrctl(padapter)->bips_processing &&
- adapter_to_pwrctl(padapter)->pre_ips_type == 0) {
- unsigned long start_time;
- u8 cpwm_orig, cpwm_now;
- u8 val8, bMacPwrCtrlOn = true;
-
- /* for polling cpwm */
- cpwm_orig = 0;
- rtw_hal_get_hwreg(padapter, HW_VAR_CPWM, &cpwm_orig);
-
- /* set rpwm */
- val8 = rtw_read8(padapter, SDIO_LOCAL_BASE | SDIO_REG_HRPWM1);
- val8 &= 0x80;
- val8 += 0x80;
- val8 |= BIT(6);
- rtw_write8(padapter, SDIO_LOCAL_BASE | SDIO_REG_HRPWM1, val8);
- adapter_to_pwrctl(padapter)->tog = (val8 + 0x80) & 0x80;
-
- /* do polling cpwm */
- start_time = jiffies;
- do {
-
- mdelay(1);
-
- rtw_hal_get_hwreg(padapter, HW_VAR_CPWM, &cpwm_now);
- if ((cpwm_orig ^ cpwm_now) & 0x80)
- break;
-
- if (jiffies_to_msecs(jiffies - start_time) > 100)
- break;
-
- } while (1);
-
- rtl8723b_set_FwPwrModeInIPS_cmd(padapter, 0);
-
- rtw_hal_set_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn);
-
- hal_btcoex_InitHwConfig(padapter, false);
-
- return _SUCCESS;
- }
-
- ret = _InitPowerOn_8723BS(padapter);
- if (ret == _FAIL)
- return _FAIL;
-
- rtw_write8(padapter, REG_EARLY_MODE_CONTROL, 0);
-
- ret = rtl8723b_FirmwareDownload(padapter, false);
- if (ret != _SUCCESS) {
- padapter->bFWReady = false;
- pHalData->fw_ractrl = false;
- return ret;
- }
-
- padapter->bFWReady = true;
- pHalData->fw_ractrl = true;
-
- rtl8723b_InitializeFirmwareVars(padapter);
-
- if (pwrctrlpriv->reg_rfoff)
- pwrctrlpriv->rf_pwrstate = rf_off;
-
- /* 2010/08/09 MH We need to check if we need to turnon or off RF after detecting */
- /* HW GPIO pin. Before PHY_RFConfig8192C. */
- HalDetectPwrDownMode(padapter);
-
- /* Save target channel */
- /* <Roger_Notes> Current Channel will be updated again later. */
- pHalData->CurrentChannel = 6;
-
- ret = PHY_MACConfig8723B(padapter);
- if (ret != _SUCCESS)
- return ret;
- /* */
- /* d. Initialize BB related configurations. */
- /* */
- ret = PHY_BBConfig8723B(padapter);
- if (ret != _SUCCESS)
- return ret;
-
- /* If RF is on, we need to init RF. Otherwise, skip the procedure. */
- /* We need to follow SU method to change the RF cfg.txt. Default disable RF TX/RX mode. */
- /* if (pHalData->eRFPowerState == eRfOn) */
- {
- ret = PHY_RFConfig8723B(padapter);
- if (ret != _SUCCESS)
- return ret;
- }
-
- /* */
- /* Joseph Note: Keep RfRegChnlVal for later use. */
- /* */
- pHalData->RfRegChnlVal[0] =
- PHY_QueryRFReg(padapter, (enum rf_path)0, RF_CHNLBW, bRFRegOffsetMask);
- pHalData->RfRegChnlVal[1] =
- PHY_QueryRFReg(padapter, (enum rf_path)1, RF_CHNLBW, bRFRegOffsetMask);
-
- _InitQueueReservedPage(padapter);
- _InitTxBufferBoundary(padapter);
-
- /* init LLT after tx buffer boundary is defined */
- ret = rtl8723b_InitLLTTable(padapter);
- if (ret != _SUCCESS)
- return _FAIL;
-
- /* */
- _InitQueuePriority(padapter);
- _InitPageBoundary(padapter);
- _InitTransferPageSize(padapter);
-
- /* Get Rx PHY status in order to report RSSI and others. */
- _InitDriverInfoSize(padapter, DRVINFO_SZ);
- hal_init_macaddr(padapter);
- _InitNetworkType(padapter);
- _InitWMACSetting(padapter);
- _InitAdaptiveCtrl(padapter);
- _InitEDCA(padapter);
- _InitRetryFunction(padapter);
- _initSdioAggregationSetting(padapter);
- _InitOperationMode(padapter);
- rtl8723b_InitBeaconParameters(padapter);
- _InitInterrupt(padapter);
- _InitBurstPktLen_8723BS(padapter);
-
- /* YJ, TODO */
- rtw_write8(padapter, REG_SECONDARY_CCA_CTRL_8723B, 0x3); /* CCA */
- rtw_write8(padapter, 0x976, 0); /* hpfan_todo: 2nd CCA related */
-
- rtw_write16(padapter, REG_PKT_VO_VI_LIFE_TIME, 0x0400); /* unit: 256us. 256ms */
- rtw_write16(padapter, REG_PKT_BE_BK_LIFE_TIME, 0x0400); /* unit: 256us. 256ms */
-
- invalidate_cam_all(padapter);
-
- rtw_hal_set_chnl_bw(padapter, padapter->registrypriv.channel,
- CHANNEL_WIDTH_20, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HAL_PRIME_CHNL_OFFSET_DONT_CARE);
-
- rtl8723b_InitAntenna_Selection(padapter);
-
- /* */
- /* Disable BAR, suggested by Scott */
- /* 2010.04.09 add by hpfan */
- /* */
- rtw_write32(padapter, REG_BAR_MODE_CTRL, 0x0201ffff);
-
- /* HW SEQ CTRL */
- /* set 0x0 to 0xFF by tynli. Default enable HW SEQ NUM. */
- rtw_write8(padapter, REG_HWSEQ_CTRL, 0xFF);
-
- /* */
- /* Configure SDIO TxRx Control to enable Rx DMA timer masking. */
- /* 2010.02.24. */
- /* */
- rtw_write32(padapter, SDIO_LOCAL_BASE | SDIO_REG_TX_CTRL, 0);
-
- _RfPowerSave(padapter);
-
- rtl8723b_InitHalDm(padapter);
-
- /* */
- /* Update current Tx FIFO page status. */
- /* */
- HalQueryTxBufferStatus8723BSdio(padapter);
- HalQueryTxOQTBufferStatus8723BSdio(padapter);
- pHalData->SdioTxOQTMaxFreeSpace = pHalData->SdioTxOQTFreeSpace;
-
- /* Enable MACTXEN/MACRXEN block */
- val = rtw_read8(padapter, REG_CR);
- val |= (MACTXEN | MACRXEN);
- rtw_write8(padapter, REG_CR, val);
-
- rtw_hal_set_hwreg(padapter, HW_VAR_NAV_UPPER, (u8 *)&NavUpper);
-
- /* ack for xmit mgmt frames. */
- rtw_write32(padapter, REG_FWHW_TXQ_CTRL, rtw_read32(padapter, REG_FWHW_TXQ_CTRL) | BIT(12));
-
- {
- pwrctrlpriv->rf_pwrstate = rf_on;
-
- if (pwrctrlpriv->rf_pwrstate == rf_on) {
- struct pwrctrl_priv *pwrpriv;
- unsigned long start_time;
- u8 restore_iqk_rst;
- u8 b2Ant;
- u8 h2cCmdBuf;
-
- pwrpriv = adapter_to_pwrctl(padapter);
-
- PHY_LCCalibrate_8723B(&pHalData->odmpriv);
-
- /* Inform WiFi FW that it is the beginning of IQK */
- h2cCmdBuf = 1;
- FillH2CCmd8723B(padapter, H2C_8723B_BT_WLAN_CALIBRATION, 1, &h2cCmdBuf);
-
- start_time = jiffies;
- do {
- if (rtw_read8(padapter, 0x1e7) & 0x01)
- break;
-
- msleep(50);
- } while (jiffies_to_msecs(jiffies - start_time) <= 400);
-
- hal_btcoex_IQKNotify(padapter, true);
-
- restore_iqk_rst = pwrpriv->bips_processing;
- b2Ant = pHalData->EEPROMBluetoothAntNum == Ant_x2;
- PHY_IQCalibrate_8723B(padapter,
- false,
- restore_iqk_rst,
- b2Ant,
- pHalData->ant_path);
- pHalData->odmpriv.RFCalibrateInfo.bIQKInitialized = true;
-
- hal_btcoex_IQKNotify(padapter, false);
-
- /* Inform WiFi FW that it is the finish of IQK */
- h2cCmdBuf = 0;
- FillH2CCmd8723B(padapter, H2C_8723B_BT_WLAN_CALIBRATION, 1, &h2cCmdBuf);
-
- ODM_TXPowerTrackingCheck(&pHalData->odmpriv);
- }
- }
-
- /* Init BT hw config. */
- hal_btcoex_InitHwConfig(padapter, false);
-
- return _SUCCESS;
-}
-
-/* */
-/* Description: */
-/* RTL8723e card disable power sequence v003 which suggested by Scott. */
-/* */
-/* First created by tynli. 2011.01.28. */
-/* */
-static void CardDisableRTL8723BSdio(struct adapter *padapter)
-{
- u8 val;
- u8 bMacPwrCtrlOn;
-
- /* Run LPS WL RFOFF flow */
- HalPwrSeqCmdParsing(padapter,
- PWR_CUT_ALL_MSK,
- PWR_FAB_ALL_MSK,
- PWR_INTF_SDIO_MSK,
- rtl8723B_enter_lps_flow);
-
- /* ==== Reset digital sequence ====== */
-
- val = rtw_read8(padapter, REG_MCUFWDL);
- if ((val & RAM_DL_SEL) && padapter->bFWReady) /* 8051 RAM code */
- rtl8723b_FirmwareSelfReset(padapter);
-
- /* Reset MCU 0x2[10]= 0. Suggested by Filen. 2011.01.26. by tynli. */
- val = rtw_read8(padapter, REG_SYS_FUNC_EN + 1);
- val &= ~BIT(2); /* 0x2[10], FEN_CPUEN */
- rtw_write8(padapter, REG_SYS_FUNC_EN + 1, val);
-
- /* MCUFWDL 0x80[1:0]= 0 */
- /* reset MCU ready status */
- rtw_write8(padapter, REG_MCUFWDL, 0);
-
- /* Reset MCU IO Wrapper, added by Roger, 2011.08.30 */
- val = rtw_read8(padapter, REG_RSV_CTRL + 1);
- val &= ~BIT(0);
- rtw_write8(padapter, REG_RSV_CTRL + 1, val);
- val = rtw_read8(padapter, REG_RSV_CTRL + 1);
- val |= BIT(0);
- rtw_write8(padapter, REG_RSV_CTRL + 1, val);
-
- /* ==== Reset digital sequence end ====== */
-
- bMacPwrCtrlOn = false; /* Disable CMD53 R/W */
- rtw_hal_set_hwreg(padapter, HW_VAR_APFM_ON_MAC, &bMacPwrCtrlOn);
- HalPwrSeqCmdParsing(padapter,
- PWR_CUT_ALL_MSK,
- PWR_FAB_ALL_MSK,
- PWR_INTF_SDIO_MSK,
- rtl8723B_card_disable_flow);
-}
-
-u32 rtl8723bs_hal_deinit(struct adapter *padapter)
-{
- if (padapter->hw_init_completed) {
- if (adapter_to_pwrctl(padapter)->bips_processing) {
- if (padapter->netif_up) {
- int cnt = 0;
- u8 val8 = 0;
-
- rtl8723b_set_FwPwrModeInIPS_cmd(padapter, 0x3);
- /*
- * poll 0x1cc to make sure H2C command already finished by FW;
- * MAC_0x1cc = 0 means H2C done by FW.
- */
- do {
- val8 = rtw_read8(padapter, REG_HMETFR);
- cnt++;
- mdelay(10);
- } while (cnt < 100 && (val8 != 0));
- /* H2C done, enter 32k */
- if (val8 == 0) {
- /* set rpwm to enter 32k */
- val8 = rtw_read8(padapter,
- SDIO_LOCAL_BASE | SDIO_REG_HRPWM1);
- val8 += 0x80;
- val8 |= BIT(0);
- rtw_write8(padapter,
- SDIO_LOCAL_BASE | SDIO_REG_HRPWM1,
- val8);
- adapter_to_pwrctl(padapter)->tog = (val8 + 0x80) & 0x80;
- cnt = val8 = 0;
- do {
- val8 = rtw_read8(padapter, REG_CR);
- cnt++;
- mdelay(10);
- } while (cnt < 100 && (val8 != 0xEA));
- }
-
- adapter_to_pwrctl(padapter)->pre_ips_type = 0;
-
- } else {
- CardDisableRTL8723BSdio(padapter);
-
- adapter_to_pwrctl(padapter)->pre_ips_type = 1;
- }
-
- } else {
- CardDisableRTL8723BSdio(padapter);
- }
- }
-
- return _SUCCESS;
-}
-
-void rtl8723bs_init_default_value(struct adapter *padapter)
-{
- struct hal_com_data *pHalData;
-
- pHalData = GET_HAL_DATA(padapter);
-
- rtl8723b_init_default_value(padapter);
-
- /* interface related variable */
- pHalData->SdioRxFIFOCnt = 0;
-}
-
-void rtl8723bs_interface_configure(struct adapter *padapter)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
- struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
- struct registry_priv *pregistrypriv = &padapter->registrypriv;
- bool bWiFiConfig = pregistrypriv->wifi_spec;
-
- pdvobjpriv->RtOutPipe[0] = WLAN_TX_HIQ_DEVICE_ID;
- pdvobjpriv->RtOutPipe[1] = WLAN_TX_MIQ_DEVICE_ID;
- pdvobjpriv->RtOutPipe[2] = WLAN_TX_LOQ_DEVICE_ID;
-
- if (bWiFiConfig)
- pHalData->OutEpNumber = 2;
- else
- pHalData->OutEpNumber = SDIO_MAX_TX_QUEUE;
-
- switch (pHalData->OutEpNumber) {
- case 3:
- pHalData->OutEpQueueSel = TX_SELE_HQ | TX_SELE_LQ | TX_SELE_NQ;
- break;
- case 2:
- pHalData->OutEpQueueSel = TX_SELE_HQ | TX_SELE_NQ;
- break;
- case 1:
- pHalData->OutEpQueueSel = TX_SELE_HQ;
- break;
- default:
- break;
- }
-
- Hal_MappingOutPipe(padapter, pHalData->OutEpNumber);
-}
-
-/* */
-/* Description: */
-/* We should set Efuse cell selection to WiFi cell in default. */
-/* */
-/* Assumption: */
-/* PASSIVE_LEVEL */
-/* */
-/* Added by Roger, 2010.11.23. */
-/* */
-static void _EfuseCellSel(struct adapter *padapter)
-{
- u32 value32;
-
- value32 = rtw_read32(padapter, EFUSE_TEST);
- value32 = (value32 & ~EFUSE_SEL_MASK) | EFUSE_SEL(EFUSE_WIFI_SEL_0);
- rtw_write32(padapter, EFUSE_TEST, value32);
-}
-
-static void Hal_EfuseParseMACAddr_8723BS(
- struct adapter *padapter, u8 *hwinfo, bool AutoLoadFail
-)
-{
- struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-
- if (AutoLoadFail) {
- eth_random_addr(pEEPROM->mac_addr);
- } else {
- /* Read Permanent MAC address */
- memcpy(pEEPROM->mac_addr, &hwinfo[EEPROM_MAC_ADDR_8723BS], ETH_ALEN);
- }
-}
-
-static void Hal_EfuseParseBoardType_8723BS(
- struct adapter *padapter, u8 *hwinfo, bool AutoLoadFail
-)
-{
- struct hal_com_data *pHalData = GET_HAL_DATA(padapter);
-
- if (!AutoLoadFail) {
- pHalData->BoardType = (hwinfo[EEPROM_RF_BOARD_OPTION_8723B] & 0xE0) >> 5;
- if (pHalData->BoardType == 0xFF)
- pHalData->BoardType = (EEPROM_DEFAULT_BOARD_OPTION & 0xE0) >> 5;
- } else {
- pHalData->BoardType = 0;
- }
-}
-
-static void _ReadEfuseInfo8723BS(struct adapter *padapter)
-{
- struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
- u8 *hwinfo = NULL;
-
- /* */
- /* This part read and parse the eeprom/efuse content */
- /* */
-
- hwinfo = pEEPROM->efuse_eeprom_data;
-
- Hal_InitPGData(padapter, hwinfo);
-
- Hal_EfuseParseIDCode(padapter, hwinfo);
-
- Hal_EfuseParseMACAddr_8723BS(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-
- Hal_EfuseParseTxPowerInfo_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
- Hal_EfuseParseBoardType_8723BS(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-
- /* */
- /* Read Bluetooth co-exist and initialize */
- /* */
- Hal_EfuseParsePackageType_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
- Hal_EfuseParseBTCoexistInfo_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
- Hal_EfuseParseChnlPlan_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
- Hal_EfuseParseXtal_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
- Hal_EfuseParseThermalMeter_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-
- Hal_EfuseParseVoltage_8723B(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-
- Hal_ReadRFGainOffset(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-}
-
-static void _ReadPROMContent(struct adapter *padapter)
-{
- struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
- u8 eeValue;
-
- eeValue = rtw_read8(padapter, REG_9346CR);
- /* To check system boot selection. */
- pEEPROM->EepromOrEfuse = (eeValue & BOOT_FROM_EEPROM) ? true : false;
- pEEPROM->bautoload_fail_flag = (eeValue & EEPROM_EN) ? false : true;
-
- _ReadEfuseInfo8723BS(padapter);
-}
-
-/* */
-/* Description: */
-/* Read HW adapter information by E-Fuse or EEPROM according CR9346 reported. */
-/* */
-/* Assumption: */
-/* PASSIVE_LEVEL (SDIO interface) */
-/* */
-/* */
-static s32 _ReadAdapterInfo8723BS(struct adapter *padapter)
-{
- u8 val8;
-
- /* before access eFuse, make sure card enable has been called */
- if (!padapter->hw_init_completed)
- _InitPowerOn_8723BS(padapter);
-
- val8 = rtw_read8(padapter, 0x4e);
- val8 |= BIT(6);
- rtw_write8(padapter, 0x4e, val8);
-
- _EfuseCellSel(padapter);
- _ReadPROMContent(padapter);
-
- if (!padapter->hw_init_completed) {
- /* for BT, Switch Ant control to BT */
- rtw_write8(padapter, 0x67, 0x00);
-
- /*
- * for the power consumption issue, wifi ko module is loaded during booting,
- * but wifi GUI is off
- */
- CardDisableRTL8723BSdio(padapter);
- }
-
- return _SUCCESS;
-}
-
-void rtw_read_adapter_info(struct adapter *padapter)
-{
- /* Read EEPROM size before call any EEPROM function */
- padapter->EepromAddressSize = GetEEPROMSize8723B(padapter);
-
- _ReadAdapterInfo8723BS(padapter);
-}
-
-/*
- * If variable not handled here,
- * some variables will be processed in SetHwReg8723B()
- */
-void SetHwReg8723BS(struct adapter *padapter, u8 variable, u8 *val)
-{
- u8 val8;
-
- switch (variable) {
- case HW_VAR_SET_RPWM:
- /* rpwm value only use BIT0(clock bit) , BIT6(Ack bit), and BIT7(Toggle bit) */
- /* BIT0 value - 1: 32k, 0:40MHz. */
- /* BIT6 value - 1: report cpwm value after success set, 0:do not report. */
- /* BIT7 value - Toggle bit change. */
- {
- val8 = *val;
- val8 &= 0xC1;
- rtw_write8(padapter, SDIO_LOCAL_BASE | SDIO_REG_HRPWM1, val8);
- }
- break;
- case HW_VAR_SET_REQ_FW_PS:
- {
- u8 req_fw_ps = 0;
-
- req_fw_ps = rtw_read8(padapter, 0x8f);
- req_fw_ps |= 0x10;
- rtw_write8(padapter, 0x8f, req_fw_ps);
- }
- break;
- case HW_VAR_RXDMA_AGG_PG_TH:
- val8 = *val;
- break;
-
- case HW_VAR_DM_IN_LPS:
- rtl8723b_hal_dm_in_lps(padapter);
- break;
- default:
- SetHwReg8723B(padapter, variable, val);
- break;
- }
-}
-
-/*
- * If variable not handled here,
- * some variables will be processed in GetHwReg8723B()
- */
-void GetHwReg8723BS(struct adapter *padapter, u8 variable, u8 *val)
-{
- switch (variable) {
- case HW_VAR_CPWM:
- *val = rtw_read8(padapter, SDIO_LOCAL_BASE | SDIO_REG_HCPWM1_8723B);
- break;
-
- case HW_VAR_FW_PS_STATE:
- {
- /* 3. read dword 0x88 driver read fw ps state */
- *((u16 *)val) = rtw_read16(padapter, 0x88);
- }
- break;
- default:
- GetHwReg8723B(padapter, variable, val);
- break;
- }
-}
-
-void SetHwRegWithBuf8723B(struct adapter *padapter, u8 variable, u8 *pbuf, int len)
-{
- switch (variable) {
- case HW_VAR_C2H_HANDLE:
- C2HPacketHandler_8723B(padapter, pbuf, len);
- break;
- default:
- break;
- }
-}
-
-/* */
-/* Description: */
-/* Query setting of specified variable. */
-/* */
-u8 GetHalDefVar8723BSDIO(
- struct adapter *Adapter, enum hal_def_variable eVariable, void *pValue
-)
-{
- u8 bResult = _SUCCESS;
-
- switch (eVariable) {
- case HAL_DEF_IS_SUPPORT_ANT_DIV:
- break;
- case HAL_DEF_CURRENT_ANTENNA:
- break;
- case HW_VAR_MAX_RX_AMPDU_FACTOR:
- /* Stanley@BB.SD3 suggests 16K can get stable performance */
- /* coding by Lucas@20130730 */
- *(u32 *)pValue = IEEE80211_HT_MAX_AMPDU_16K;
- break;
- default:
- bResult = GetHalDefVar8723B(Adapter, eVariable, pValue);
- break;
- }
-
- return bResult;
-}
diff --git a/drivers/staging/rtl8723bs/hal/sdio_ops.c b/drivers/staging/rtl8723bs/hal/sdio_ops.c
deleted file mode 100644
index da2d9088ab5a..000000000000
--- a/drivers/staging/rtl8723bs/hal/sdio_ops.c
+++ /dev/null
@@ -1,859 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- *******************************************************************************/
-#include <drv_types.h>
-#include <rtl8723b_hal.h>
-
-/* */
-/* Description: */
-/* The following mapping is for SDIO host local register space. */
-/* */
-/* Creadted by Roger, 2011.01.31. */
-/* */
-static void hal_sdio_get_cmd_addr_8723b(struct adapter *adapter, u8 device_id,
- u32 addr, u32 *cmdaddr)
-{
- switch (device_id) {
- case SDIO_LOCAL_DEVICE_ID:
- *cmdaddr = ((SDIO_LOCAL_DEVICE_ID << 13) | (addr & SDIO_LOCAL_MSK));
- break;
-
- case WLAN_IOREG_DEVICE_ID:
- *cmdaddr = ((WLAN_IOREG_DEVICE_ID << 13) | (addr & WLAN_IOREG_MSK));
- break;
-
- case WLAN_TX_HIQ_DEVICE_ID:
- *cmdaddr = ((WLAN_TX_HIQ_DEVICE_ID << 13) | (addr & WLAN_FIFO_MSK));
- break;
-
- case WLAN_TX_MIQ_DEVICE_ID:
- *cmdaddr = ((WLAN_TX_MIQ_DEVICE_ID << 13) | (addr & WLAN_FIFO_MSK));
- break;
-
- case WLAN_TX_LOQ_DEVICE_ID:
- *cmdaddr = ((WLAN_TX_LOQ_DEVICE_ID << 13) | (addr & WLAN_FIFO_MSK));
- break;
-
- case WLAN_RX0FF_DEVICE_ID:
- *cmdaddr = ((WLAN_RX0FF_DEVICE_ID << 13) | (addr & WLAN_RX0FF_MSK));
- break;
-
- default:
- break;
- }
-}
-
-static u8 get_deviceid(u32 addr)
-{
- u8 devide_id;
- u16 pseudo_id;
-
- pseudo_id = (u16)(addr >> 16);
- switch (pseudo_id) {
- case 0x1025:
- devide_id = SDIO_LOCAL_DEVICE_ID;
- break;
-
- case 0x1026:
- devide_id = WLAN_IOREG_DEVICE_ID;
- break;
-
- case 0x1031:
- devide_id = WLAN_TX_HIQ_DEVICE_ID;
- break;
-
- case 0x1032:
- devide_id = WLAN_TX_MIQ_DEVICE_ID;
- break;
-
- case 0x1033:
- devide_id = WLAN_TX_LOQ_DEVICE_ID;
- break;
-
- case 0x1034:
- devide_id = WLAN_RX0FF_DEVICE_ID;
- break;
-
- default:
- devide_id = WLAN_IOREG_DEVICE_ID;
- break;
- }
-
- return devide_id;
-}
-
-static u32 _cvrt2ftaddr(const u32 addr, u8 *pdevice_id, u16 *poffset)
-{
- u8 device_id;
- u16 offset;
- u32 ftaddr;
-
- device_id = get_deviceid(addr);
- offset = 0;
-
- switch (device_id) {
- case SDIO_LOCAL_DEVICE_ID:
- offset = addr & SDIO_LOCAL_MSK;
- break;
-
- case WLAN_TX_HIQ_DEVICE_ID:
- case WLAN_TX_MIQ_DEVICE_ID:
- case WLAN_TX_LOQ_DEVICE_ID:
- offset = addr & WLAN_FIFO_MSK;
- break;
-
- case WLAN_RX0FF_DEVICE_ID:
- offset = addr & WLAN_RX0FF_MSK;
- break;
-
- case WLAN_IOREG_DEVICE_ID:
- default:
- device_id = WLAN_IOREG_DEVICE_ID;
- offset = addr & WLAN_IOREG_MSK;
- break;
- }
- ftaddr = (device_id << 13) | offset;
-
- if (pdevice_id)
- *pdevice_id = device_id;
- if (poffset)
- *poffset = offset;
-
- return ftaddr;
-}
-
-static u8 sdio_read8(struct intf_hdl *intfhdl, u32 addr)
-{
- u32 ftaddr;
-
- ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
-
- return sd_read8(intfhdl, ftaddr, NULL);
-}
-
-static u16 sdio_read16(struct intf_hdl *intfhdl, u32 addr)
-{
- u32 ftaddr;
- __le16 le_tmp;
-
- ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
- sd_cmd52_read(intfhdl, ftaddr, 2, (u8 *)&le_tmp);
-
- return le16_to_cpu(le_tmp);
-}
-
-static u32 sdio_read32(struct intf_hdl *intfhdl, u32 addr)
-{
- struct adapter *adapter;
- u8 mac_pwr_ctrl_on;
- u8 device_id;
- u16 offset;
- u32 ftaddr;
- u8 shift;
- u32 val;
- s32 __maybe_unused err;
- __le32 le_tmp;
-
- adapter = intfhdl->padapter;
- ftaddr = _cvrt2ftaddr(addr, &device_id, &offset);
-
- rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
- if (
- ((device_id == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) ||
- (!mac_pwr_ctrl_on) ||
- (adapter_to_pwrctl(adapter)->fw_current_in_ps_mode)
- ) {
- err = sd_cmd52_read(intfhdl, ftaddr, 4, (u8 *)&le_tmp);
- return le32_to_cpu(le_tmp);
- }
-
- /* 4 bytes alignment */
- shift = ftaddr & 0x3;
- if (shift == 0) {
- val = sd_read32(intfhdl, ftaddr, NULL);
- } else {
- u8 *tmpbuf;
-
- tmpbuf = kmalloc(8, GFP_ATOMIC);
- if (!tmpbuf)
- return SDIO_ERR_VAL32;
-
- ftaddr &= ~(u16)0x3;
- sd_read(intfhdl, ftaddr, 8, tmpbuf);
- memcpy(&le_tmp, tmpbuf + shift, 4);
- val = le32_to_cpu(le_tmp);
-
- kfree(tmpbuf);
- }
- return val;
-}
-
-static s32 sdio_write8(struct intf_hdl *intfhdl, u32 addr, u8 val)
-{
- u32 ftaddr;
- s32 err;
-
- ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
- sd_write8(intfhdl, ftaddr, val, &err);
-
- return err;
-}
-
-static s32 sdio_write16(struct intf_hdl *intfhdl, u32 addr, u16 val)
-{
- u32 ftaddr;
- __le16 le_tmp;
-
- ftaddr = _cvrt2ftaddr(addr, NULL, NULL);
- le_tmp = cpu_to_le16(val);
- return sd_cmd52_write(intfhdl, ftaddr, 2, (u8 *)&le_tmp);
-}
-
-static s32 sdio_write32(struct intf_hdl *intfhdl, u32 addr, u32 val)
-{
- struct adapter *adapter;
- u8 mac_pwr_ctrl_on;
- u8 device_id;
- u16 offset;
- u32 ftaddr;
- u8 shift;
- s32 err;
- __le32 le_tmp;
-
- adapter = intfhdl->padapter;
- err = 0;
-
- ftaddr = _cvrt2ftaddr(addr, &device_id, &offset);
-
- rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
- if (
- ((device_id == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) ||
- (!mac_pwr_ctrl_on) ||
- (adapter_to_pwrctl(adapter)->fw_current_in_ps_mode)
- ) {
- le_tmp = cpu_to_le32(val);
-
- return sd_cmd52_write(intfhdl, ftaddr, 4, (u8 *)&le_tmp);
- }
-
- /* 4 bytes alignment */
- shift = ftaddr & 0x3;
- if (shift == 0) {
- sd_write32(intfhdl, ftaddr, val, &err);
- } else {
- le_tmp = cpu_to_le32(val);
- err = sd_cmd52_write(intfhdl, ftaddr, 4, (u8 *)&le_tmp);
- }
- return err;
-}
-
-/*
- * Description:
- *Read from RX FIFO
- *Round read size to block size,
- *and make sure data transfer will be done in one command.
- *
- * Parameters:
- *intfhdl a pointer of intf_hdl
- *addr port ID
- *cnt size to read
- *rmem address to put data
- *
- * Return:
- *_SUCCESS(1) Success
- *_FAIL(0) Fail
- */
-static u32 sdio_read_port(
- struct intf_hdl *intfhdl,
- u32 addr,
- u32 cnt,
- u8 *mem
-)
-{
- struct adapter *adapter;
- struct sdio_data *psdio;
- struct hal_com_data *hal;
- s32 err;
-
- adapter = intfhdl->padapter;
- psdio = &adapter_to_dvobj(adapter)->intf_data;
- hal = GET_HAL_DATA(adapter);
-
- hal_sdio_get_cmd_addr_8723b(adapter, addr, hal->SdioRxFIFOCnt++, &addr);
-
- if (cnt > psdio->block_transfer_len)
- cnt = _RND(cnt, psdio->block_transfer_len);
-
- err = _sd_read(intfhdl, addr, cnt, mem);
-
- if (err)
- return _FAIL;
- return _SUCCESS;
-}
-
-/*
- * Description:
- *Write to TX FIFO
- *Align write size block size,
- *and make sure data could be written in one command.
- *
- * Parameters:
- *intfhdl a pointer of intf_hdl
- *addr port ID
- *cnt size to write
- *wmem data pointer to write
- *
- * Return:
- *_SUCCESS(1) Success
- *_FAIL(0) Fail
- */
-static u32 sdio_write_port(
- struct intf_hdl *intfhdl,
- u32 addr,
- u32 cnt,
- u8 *mem
-)
-{
- struct adapter *adapter;
- struct sdio_data *psdio;
- s32 err;
- struct xmit_buf *xmitbuf = (struct xmit_buf *)mem;
-
- adapter = intfhdl->padapter;
- psdio = &adapter_to_dvobj(adapter)->intf_data;
-
- if (!adapter->hw_init_completed)
- return _FAIL;
-
- cnt = round_up(cnt, 4);
- hal_sdio_get_cmd_addr_8723b(adapter, addr, cnt >> 2, &addr);
-
- if (cnt > psdio->block_transfer_len)
- cnt = _RND(cnt, psdio->block_transfer_len);
-
- err = sd_write(intfhdl, addr, cnt, xmitbuf->pdata);
-
- rtw_sctx_done_err(
- &xmitbuf->sctx,
- err ? RTW_SCTX_DONE_WRITE_PORT_ERR : RTW_SCTX_DONE_SUCCESS
- );
-
- if (err)
- return _FAIL;
- return _SUCCESS;
-}
-
-void sdio_set_intf_ops(struct adapter *adapter, struct _io_ops *ops)
-{
- ops->_read8 = &sdio_read8;
- ops->_read16 = &sdio_read16;
- ops->_read32 = &sdio_read32;
-
- ops->_write8 = &sdio_write8;
- ops->_write16 = &sdio_write16;
- ops->_write32 = &sdio_write32;
- ops->_write_port = &sdio_write_port;
-}
-
-/*
- * Todo: align address to 4 bytes.
- */
-static s32 _sdio_local_read(
- struct adapter *adapter,
- u32 addr,
- u32 cnt,
- u8 *buf
-)
-{
- struct intf_hdl *intfhdl;
- u8 mac_pwr_ctrl_on;
- s32 err;
- u8 *tmpbuf;
- u32 n;
-
- intfhdl = &adapter->iopriv.intf;
-
- hal_sdio_get_cmd_addr_8723b(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
-
- rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
- if (!mac_pwr_ctrl_on)
- return _sd_cmd52_read(intfhdl, addr, cnt, buf);
-
- n = round_up(cnt, 4);
- tmpbuf = kmalloc(n, GFP_ATOMIC);
- if (!tmpbuf)
- return -ENOMEM;
-
- err = _sd_read(intfhdl, addr, n, tmpbuf);
- if (!err)
- memcpy(buf, tmpbuf, cnt);
-
- kfree(tmpbuf);
-
- return err;
-}
-
-/*
- * Todo: align address to 4 bytes.
- */
-s32 sdio_local_read(
- struct adapter *adapter,
- u32 addr,
- u32 cnt,
- u8 *buf
-)
-{
- struct intf_hdl *intfhdl;
- u8 mac_pwr_ctrl_on;
- s32 err;
- u8 *tmpbuf;
- u32 n;
-
- intfhdl = &adapter->iopriv.intf;
-
- hal_sdio_get_cmd_addr_8723b(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
-
- rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
- if (
- (!mac_pwr_ctrl_on) ||
- (adapter_to_pwrctl(adapter)->fw_current_in_ps_mode)
- )
- return sd_cmd52_read(intfhdl, addr, cnt, buf);
-
- n = round_up(cnt, 4);
- tmpbuf = kmalloc(n, GFP_ATOMIC);
- if (!tmpbuf)
- return -ENOMEM;
-
- err = sd_read(intfhdl, addr, n, tmpbuf);
- if (!err)
- memcpy(buf, tmpbuf, cnt);
-
- kfree(tmpbuf);
-
- return err;
-}
-
-/*
- * Todo: align address to 4 bytes.
- */
-s32 sdio_local_write(
- struct adapter *adapter,
- u32 addr,
- u32 cnt,
- u8 *buf
-)
-{
- struct intf_hdl *intfhdl;
- u8 mac_pwr_ctrl_on;
- s32 err;
- u8 *tmpbuf;
-
- intfhdl = &adapter->iopriv.intf;
-
- hal_sdio_get_cmd_addr_8723b(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
-
- rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
- if (
- (!mac_pwr_ctrl_on) ||
- (adapter_to_pwrctl(adapter)->fw_current_in_ps_mode)
- )
- return sd_cmd52_write(intfhdl, addr, cnt, buf);
-
- tmpbuf = kmemdup(buf, cnt, GFP_ATOMIC);
- if (!tmpbuf)
- return -ENOMEM;
-
- err = sd_write(intfhdl, addr, cnt, tmpbuf);
-
- kfree(tmpbuf);
-
- return err;
-}
-
-u8 SdioLocalCmd52Read1Byte(struct adapter *adapter, u32 addr)
-{
- u8 val = 0;
- struct intf_hdl *intfhdl = &adapter->iopriv.intf;
-
- hal_sdio_get_cmd_addr_8723b(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
- sd_cmd52_read(intfhdl, addr, 1, &val);
-
- return val;
-}
-
-static u16 sdio_local_cmd52_read2byte(struct adapter *adapter, u32 addr)
-{
- __le16 val = 0;
- struct intf_hdl *intfhdl = &adapter->iopriv.intf;
-
- hal_sdio_get_cmd_addr_8723b(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
- sd_cmd52_read(intfhdl, addr, 2, (u8 *)&val);
-
- return le16_to_cpu(val);
-}
-
-static u32 sdio_local_cmd53_read4byte(struct adapter *adapter, u32 addr)
-{
-
- u8 mac_pwr_ctrl_on;
- u32 val = 0;
- struct intf_hdl *intfhdl = &adapter->iopriv.intf;
- __le32 le_tmp;
-
- hal_sdio_get_cmd_addr_8723b(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
- rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
- if (!mac_pwr_ctrl_on || adapter_to_pwrctl(adapter)->fw_current_in_ps_mode) {
- sd_cmd52_read(intfhdl, addr, 4, (u8 *)&le_tmp);
- val = le32_to_cpu(le_tmp);
- } else {
- val = sd_read32(intfhdl, addr, NULL);
- }
- return val;
-}
-
-void SdioLocalCmd52Write1Byte(struct adapter *adapter, u32 addr, u8 v)
-{
- struct intf_hdl *intfhdl = &adapter->iopriv.intf;
-
- hal_sdio_get_cmd_addr_8723b(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
- sd_cmd52_write(intfhdl, addr, 1, &v);
-}
-
-static void sdio_local_cmd52_write4byte(struct adapter *adapter, u32 addr, u32 v)
-{
- struct intf_hdl *intfhdl = &adapter->iopriv.intf;
- __le32 le_tmp;
-
- hal_sdio_get_cmd_addr_8723b(adapter, SDIO_LOCAL_DEVICE_ID, addr, &addr);
- le_tmp = cpu_to_le32(v);
- sd_cmd52_write(intfhdl, addr, 4, (u8 *)&le_tmp);
-}
-
-static s32 read_interrupt_8723b_sdio(struct adapter *adapter, u32 *phisr)
-{
- u32 hisr, himr;
- u8 val8, hisr_len;
-
- if (!phisr)
- return false;
-
- himr = GET_HAL_DATA(adapter)->sdio_himr;
-
- /* decide how many bytes need to be read */
- hisr_len = 0;
- while (himr) {
- hisr_len++;
- himr >>= 8;
- }
-
- hisr = 0;
- while (hisr_len != 0) {
- hisr_len--;
- val8 = SdioLocalCmd52Read1Byte(adapter, SDIO_REG_HISR + hisr_len);
- hisr |= (val8 << (8 * hisr_len));
- }
-
- *phisr = hisr;
-
- return true;
-}
-
-/* */
-/* Description: */
-/* Initialize SDIO Host Interrupt Mask configuration variables for future use. */
-/* */
-/* Assumption: */
-/* Using SDIO Local register ONLY for configuration. */
-/* */
-/* Created by Roger, 2011.02.11. */
-/* */
-void InitInterrupt8723BSdio(struct adapter *adapter)
-{
- struct hal_com_data *haldata;
-
- haldata = GET_HAL_DATA(adapter);
- haldata->sdio_himr = (u32)(SDIO_HIMR_RX_REQUEST_MSK |
- SDIO_HIMR_AVAL_MSK |
- 0);
-}
-
-/*
- * Enable SDIO Host Interrupt Mask configuration on SDIO local domain.
- *
- * Assumption:
- * 1. Using SDIO Local register ONLY for configuration.
- * 2. PASSIVE LEVEL
- */
-void rtw_sdio_enable_interrupt(struct adapter *adapter)
-{
- struct hal_com_data *haldata;
- __le32 himr;
-
- haldata = GET_HAL_DATA(adapter);
-
- himr = cpu_to_le32(haldata->sdio_himr);
- sdio_local_write(adapter, SDIO_REG_HIMR, 4, (u8 *)&himr);
-
- /* */
- /* <Roger_Notes> There are some C2H CMDs have been sent before system interrupt is enabled, e.g., C2H, CPWM. */
- /* So we need to clear all C2H events that FW has notified, otherwise FW won't schedule any commands anymore. */
- /* 2011.10.19. */
- /* */
- rtw_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE);
-}
-
-/*
- * Disable SDIO Host IMR configuration to mask unnecessary interrupt service.
- *
- * Assumption:
- * Using SDIO Local register ONLY for configuration.
- */
-void rtw_sdio_disable_interrupt(struct adapter *adapter)
-{
- __le32 himr;
-
- himr = cpu_to_le32(SDIO_HIMR_DISABLED);
- sdio_local_write(adapter, SDIO_REG_HIMR, 4, (u8 *)&himr);
-}
-
-/* */
-/* Description: */
-/* Using 0x100 to check the power status of FW. */
-/* */
-/* Assumption: */
-/* Using SDIO Local register ONLY for configuration. */
-/* */
-/* Created by Isaac, 2013.09.10. */
-/* */
-u8 CheckIPSStatus(struct adapter *adapter)
-{
- if (rtw_read8(adapter, 0x100) == 0xEA)
- return true;
- else
- return false;
-}
-
-static struct recv_buf *sd_recv_rxfifo(struct adapter *adapter, u32 size)
-{
- u32 readsize, ret;
- u8 *readbuf;
- struct recv_priv *recv_priv;
- struct recv_buf *recvbuf;
-
- /* Patch for some SDIO Host 4 bytes issue */
- /* ex. RK3188 */
- readsize = round_up(size, 4);
-
- /* 3 1. alloc recvbuf */
- recv_priv = &adapter->recvpriv;
- recvbuf = rtw_dequeue_recvbuf(&recv_priv->free_recv_buf_queue);
- if (!recvbuf) {
- netdev_err(adapter->pnetdev, "%s: alloc recvbuf FAIL!\n",
- __func__);
- return NULL;
- }
-
- /* 3 2. alloc skb */
- if (!recvbuf->pskb) {
- SIZE_PTR tmpaddr = 0;
- SIZE_PTR alignment = 0;
-
- recvbuf->pskb = __dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_ATOMIC);
- if (!recvbuf->pskb)
- return NULL;
-
- recvbuf->pskb->dev = adapter->pnetdev;
-
- tmpaddr = (SIZE_PTR)recvbuf->pskb->data;
- alignment = tmpaddr & (RECVBUFF_ALIGN_SZ - 1);
- skb_reserve(recvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment));
- }
-
- /* 3 3. read data from rxfifo */
- readbuf = recvbuf->pskb->data;
- ret = sdio_read_port(&adapter->iopriv.intf, WLAN_RX0FF_DEVICE_ID, readsize, readbuf);
- if (ret == _FAIL)
- return NULL;
-
- /* 3 4. init recvbuf */
- recvbuf->len = size;
- recvbuf->phead = recvbuf->pskb->head;
- recvbuf->pdata = recvbuf->pskb->data;
- skb_set_tail_pointer(recvbuf->pskb, size);
- recvbuf->ptail = skb_tail_pointer(recvbuf->pskb);
- recvbuf->pend = skb_end_pointer(recvbuf->pskb);
-
- return recvbuf;
-}
-
-static void sd_rxhandler(struct adapter *adapter, struct recv_buf *recvbuf)
-{
- struct recv_priv *recv_priv;
- struct __queue *pending_queue;
-
- recv_priv = &adapter->recvpriv;
- pending_queue = &recv_priv->recv_buf_pending_queue;
-
- /* 3 1. enqueue recvbuf */
- rtw_enqueue_recvbuf(recvbuf, pending_queue);
-
- /* 3 2. schedule tasklet */
- tasklet_schedule(&recv_priv->recv_tasklet);
-}
-
-void sd_int_dpc(struct adapter *adapter)
-{
- struct hal_com_data *hal;
- struct dvobj_priv *dvobj;
- struct intf_hdl *intfhdl = &adapter->iopriv.intf;
- struct pwrctrl_priv *pwrctl;
-
- hal = GET_HAL_DATA(adapter);
- dvobj = adapter_to_dvobj(adapter);
- pwrctl = dvobj_to_pwrctl(dvobj);
-
- if (hal->sdio_hisr & SDIO_HISR_AVAL) {
- u8 freepage[4];
-
- _sdio_local_read(adapter, SDIO_REG_FREE_TXPG, 4, freepage);
- complete(&(adapter->xmitpriv.xmit_comp));
- }
-
- if (hal->sdio_hisr & SDIO_HISR_CPWM1) {
- timer_delete_sync(&(pwrctl->pwr_rpwm_timer));
-
- SdioLocalCmd52Read1Byte(adapter, SDIO_REG_HCPWM1_8723B);
-
- _set_workitem(&(pwrctl->cpwm_event));
- }
-
- if (hal->sdio_hisr & SDIO_HISR_TXERR) {
- u8 *status;
- u32 addr;
-
- status = kmalloc(4, GFP_ATOMIC);
- if (status) {
- addr = REG_TXDMA_STATUS;
- hal_sdio_get_cmd_addr_8723b(adapter, WLAN_IOREG_DEVICE_ID, addr, &addr);
- _sd_read(intfhdl, addr, 4, status);
- _sd_write(intfhdl, addr, 4, status);
- kfree(status);
- }
- }
-
- if (hal->sdio_hisr & SDIO_HISR_C2HCMD) {
- struct c2h_evt_hdr_88xx *c2h_evt;
-
- c2h_evt = kzalloc(16, GFP_ATOMIC);
- if (c2h_evt) {
- if (c2h_evt_read_88xx(adapter, (u8 *)c2h_evt) == _SUCCESS) {
- if (c2h_id_filter_ccx_8723b((u8 *)c2h_evt)) {
- /* Handle CCX report here */
- rtw_hal_c2h_handler(adapter, (u8 *)c2h_evt);
- kfree(c2h_evt);
- } else {
- rtw_c2h_wk_cmd(adapter, (u8 *)c2h_evt);
- }
- } else {
- kfree(c2h_evt);
- }
- } else {
- /* Error handling for malloc fail */
- rtw_cbuf_push(adapter->evtpriv.c2h_queue, NULL);
- _set_workitem(&adapter->evtpriv.c2h_wk);
- }
- }
-
- if (hal->sdio_hisr & SDIO_HISR_RX_REQUEST) {
- struct recv_buf *recvbuf;
- int alloc_fail_time = 0;
- u32 hisr;
-
- hal->sdio_hisr ^= SDIO_HISR_RX_REQUEST;
- do {
- hal->SdioRxFIFOSize = sdio_local_cmd52_read2byte(adapter, SDIO_REG_RX0_REQ_LEN);
- if (hal->SdioRxFIFOSize != 0) {
- recvbuf = sd_recv_rxfifo(adapter, hal->SdioRxFIFOSize);
- if (recvbuf)
- sd_rxhandler(adapter, recvbuf);
- else {
- alloc_fail_time++;
- if (alloc_fail_time >= 10)
- break;
- }
- hal->SdioRxFIFOSize = 0;
- } else
- break;
-
- hisr = 0;
- read_interrupt_8723b_sdio(adapter, &hisr);
- hisr &= SDIO_HISR_RX_REQUEST;
- if (!hisr)
- break;
- } while (1);
- }
-}
-
-void sd_int_hdl(struct adapter *adapter)
-{
- struct hal_com_data *hal;
-
- if (
- (adapter->driver_stopped) || (adapter->bSurpriseRemoved)
- )
- return;
-
- hal = GET_HAL_DATA(adapter);
-
- hal->sdio_hisr = 0;
- read_interrupt_8723b_sdio(adapter, &hal->sdio_hisr);
-
- if (hal->sdio_hisr & hal->sdio_himr) {
- u32 v32;
-
- hal->sdio_hisr &= hal->sdio_himr;
-
- /* clear HISR */
- v32 = hal->sdio_hisr & MASK_SDIO_HISR_CLEAR;
- if (v32)
- sdio_local_cmd52_write4byte(adapter, SDIO_REG_HISR, v32);
-
- sd_int_dpc(adapter);
- }
-}
-
-/* */
-/* Description: */
-/* Query SDIO Local register to query current the number of Free TxPacketBuffer page. */
-/* */
-/* Assumption: */
-/* 1. Running at PASSIVE_LEVEL */
-/* 2. RT_TX_SPINLOCK is NOT acquired. */
-/* */
-/* Created by Roger, 2011.01.28. */
-/* */
-u8 HalQueryTxBufferStatus8723BSdio(struct adapter *adapter)
-{
- struct hal_com_data *hal;
- u32 numof_free_page;
-
- hal = GET_HAL_DATA(adapter);
-
- numof_free_page = sdio_local_cmd53_read4byte(adapter, SDIO_REG_FREE_TXPG);
-
- memcpy(hal->SdioTxFIFOFreePage, &numof_free_page, 4);
-
- return true;
-}
-
-/* Read the TX OQT free page count from the SDIO local register. */
-void HalQueryTxOQTBufferStatus8723BSdio(struct adapter *adapter)
-{
- struct hal_com_data *haldata = GET_HAL_DATA(adapter);
-
- haldata->SdioTxOQTFreeSpace = SdioLocalCmd52Read1Byte(adapter, SDIO_REG_OQT_FREE_PG);
-}
diff --git a/drivers/staging/rtl8723bs/include/Hal8192CPhyReg.h b/drivers/staging/rtl8723bs/include/Hal8192CPhyReg.h
deleted file mode 100644
index f8cf2aee5157..000000000000
--- a/drivers/staging/rtl8723bs/include/Hal8192CPhyReg.h
+++ /dev/null
@@ -1,232 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-/*****************************************************************************
- *
- * Module: __INC_HAL8192CPHYREG_H
- *
- *
- * Note: 1. Define PMAC/BB register map
- * 2. Define RF register map
- * 3. PMAC/BB register bit mask.
- * 4. RF reg bit mask.
- * 5. Other BB/RF relative definition.
- *
- *
- * Export: Constants, macro, functions(API), global variables(None).
- *
- * Abbrev:
- *
- * History:
- * Data Who Remark
- * 08/07/2007 MHC 1. Porting from 9x series PHYCFG.h.
- * 2. Reorganize code architecture.
- *09/25/2008 MH 1. Add RL6052 register definition
- *
- *****************************************************************************/
-#ifndef __INC_HAL8192CPHYREG_H
-#define __INC_HAL8192CPHYREG_H
-
-
-/*--------------------------Define Parameters-------------------------------*/
-
-/* */
-/* 8192S Register offset definition */
-/* */
-
-/* */
-/* 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 */
-/* */
-
-/* */
-/* 3. Page8(0x800) */
-/* */
-#define rFPGA0_RFMOD 0x800 /* RF mode & CCK TxSC RF BW Setting?? */
-
-#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 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 rFPGA0_XA_LSSIParameter 0x840
-#define rFPGA0_XB_LSSIParameter 0x844
-
-#define rFPGA0_XCD_SwitchControl 0x85c
-
-#define rFPGA0_XA_RFInterfaceOE 0x860 /* RF Channel switch */
-#define rFPGA0_XB_RFInterfaceOE 0x864
-
-#define rTxAGC_B_CCK11_A_CCK2_11 0x86c
-
-#define rFPGA0_XAB_RFInterfaceSW 0x870 /* RF Interface Software Control */
-#define rFPGA0_XCD_RFInterfaceSW 0x874
-
-#define rFPGA0_XA_LSSIReadBack 0x8a0 /* Transceiver LSSI Readback */
-#define rFPGA0_XB_LSSIReadBack 0x8a4
-
-#define TransceiverA_HSPI_Readback 0x8b8 /* Transceiver A HSPI Readback */
-#define TransceiverB_HSPI_Readback 0x8bc /* Transceiver B HSPI Readback */
-
-/* */
-/* 4. Page9(0x900) */
-/* */
-#define rFPGA1_RFMOD 0x900 /* RF mode & OFDM TxSC RF BW Setting?? */
-
-#define rS0S1_PathSwitch 0x948
-
-/* */
-/* 5. PageA(0xA00) */
-/* */
-/* Set Control channel to upper or lower. These settings are required only for 40MHz */
-#define rCCK0_System 0xa00
-
-#define rCCK0_AFESetting 0xa04 /* Disable init gain now Select RX path by RSSI */
-
-/* */
-/* PageB(0xB00) */
-/* */
-#define rConfig_AntA 0xb68
-#define rConfig_AntB 0xb6c
-
-/* */
-/* 6. PageC(0xC00) */
-/* */
-#define rOFDM0_TRxPathEnable 0xc04
-#define rOFDM0_TRMuxPar 0xc08
-
-#define rOFDM0_XARxIQImbalance 0xc14 /* RxIQ imbalance matrix */
-#define rOFDM0_XBRxIQImbalance 0xc1c
-
-#define rOFDM0_RxDSP 0xc40 /* Rx Sync Path */
-#define rOFDM0_ECCAThreshold 0xc4c /* energy CCA */
-
-#define rOFDM0_AGCRSSITable 0xc78
-
-#define rOFDM0_XATxIQImbalance 0xc80 /* TX PWR TRACK and DIG */
-#define rOFDM0_XBTxIQImbalance 0xc88
-#define rOFDM0_XCTxAFE 0xc94
-#define rOFDM0_XDTxAFE 0xc9c
-
-#define rOFDM0_RxIQExtAnta 0xca0
-#define rOFDM0_TxPseudoNoiseWgt 0xce4
-
-/* */
-/* 7. PageD(0xD00) */
-/* */
-#define rOFDM1_LSTF 0xd00
-
-/* */
-/* 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 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 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_2 0xea4
-#define rRx_Power_After_IQK_A_2 0xeac
-
-#define rRx_OFDM 0xed0
-#define rRx_Wait_RIFS 0xed4
-#define rRx_TO_Rx 0xed8
-#define rStandby 0xedc
-#define rSleep 0xee0
-#define rPMPD_ANAEN 0xeec
-
-/* */
-/* RL6052 Register definition */
-/* */
-#define RF_AC 0x00 /* */
-
-#define RF_TXM_IDAC 0x08 /* */
-
-#define RF_CHNLBW 0x18 /* RF channel and BW switch */
-
-#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_WE_LUT 0xEF
-
-/* 2. Page8(0x800) */
-#define bRFMOD 0x1 /* Reg 0x800 rFPGA0_RFMOD */
-
-#define b3WireDataLength 0x800 /* Reg 0x820~84f rFPGA0_XA_HSSIParameter1 */
-#define b3WireAddressLength 0x400
-
-#define bRFSI_RFENV 0x10 /* Reg 0x870 rFPGA0_XAB_RFInterfaceSW */
-
-#define bLSSIReadAddress 0x7f800000 /* T65 RF */
-
-#define bLSSIReadEdge 0x80000000 /* LSSI "Read" edge signal */
-
-#define bLSSIReadBackData 0xfffff /* T65 RF */
-
-/* 4. PageA(0xA00) */
-#define bCCKSideBand 0x10 /* Reg 0xa00 rCCK0_System 20/40 switch */
-
-/* */
-/* Other Definition */
-/* */
-
-/* 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 bMaskH3Bytes 0xffffff00
-#define bMask12Bits 0xfff
-#define bMaskH4Bits 0xf0000000
-
-#define bEnable 0x1 /* Useless */
-
-#define rDPDT_control 0x92c
-
-#endif /* __INC_HAL8192SPHYREG_H */
diff --git a/drivers/staging/rtl8723bs/include/HalPwrSeqCmd.h b/drivers/staging/rtl8723bs/include/HalPwrSeqCmd.h
deleted file mode 100644
index b81252d374ef..000000000000
--- a/drivers/staging/rtl8723bs/include/HalPwrSeqCmd.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __HALPWRSEQCMD_H__
-#define __HALPWRSEQCMD_H__
-
-#include <drv_types.h>
-
-/*---------------------------------------------*/
-/* 3 The value of cmd: 4 bits */
-/*---------------------------------------------*/
-#define PWR_CMD_READ 0x00
- /* offset: the read register offset */
- /* msk: the mask of the read value */
- /* value: N/A, left by 0 */
- /* note: dirver shall implement this function by read & msk */
-
-#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 */
- /* msk: N/A */
- /* value: the unit of delay, 0: us, 1: ms */
-
-#define PWR_CMD_END 0x04
- /* offset: N/A */
- /* msk: N/A */
- /* value: N/A */
-
-/*---------------------------------------------*/
-/* 3 The value of base: 4 bits */
-/*---------------------------------------------*/
- /* define the base address of each block */
-#define PWR_BASEADDR_MAC 0x00
-#define PWR_BASEADDR_SDIO 0x03
-
-/*---------------------------------------------*/
-/* 3 The value of interface_msk: 4 bits */
-/*---------------------------------------------*/
-#define PWR_INTF_SDIO_MSK BIT(0)
-#define PWR_INTF_USB_MSK BIT(1)
-#define PWR_INTF_PCI_MSK BIT(2)
-#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
-
-/*---------------------------------------------*/
-/* 3 The value of fab_msk: 4 bits */
-/*---------------------------------------------*/
-#define PWR_FAB_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
-
-/*---------------------------------------------*/
-/* 3 The value of cut_msk: 8 bits */
-/*---------------------------------------------*/
-#define PWR_CUT_TESTCHIP_MSK BIT(0)
-#define PWR_CUT_ALL_MSK 0xFF
-
-
-enum {
- PWRSEQ_DELAY_US,
- PWRSEQ_DELAY_MS,
-};
-
-struct wlan_pwr_cfg {
- u16 offset;
- u8 cut_msk;
- u8 fab_msk:4;
- u8 interface_msk:4;
- u8 base:4;
- u8 cmd:4;
- u8 msk;
- u8 value;
-};
-
-
-#define GET_PWR_CFG_OFFSET(__PWR_CMD) __PWR_CMD.offset
-#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) __PWR_CMD.cut_msk
-#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) __PWR_CMD.fab_msk
-#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) __PWR_CMD.interface_msk
-#define GET_PWR_CFG_BASE(__PWR_CMD) __PWR_CMD.base
-#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
-
-
-/* */
-/* Prototype of protected function. */
-/* */
-u8 HalPwrSeqCmdParsing(
- struct adapter *padapter,
- u8 CutVersion,
- u8 FabVersion,
- u8 InterfaceType,
- struct wlan_pwr_cfg PwrCfgCmd[]);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/basic_types.h b/drivers/staging/rtl8723bs/include/basic_types.h
deleted file mode 100644
index b6b1afaa9ab8..000000000000
--- a/drivers/staging/rtl8723bs/include/basic_types.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __BASIC_TYPES_H__
-#define __BASIC_TYPES_H__
-
-#define SUCCESS 0
-#define FAIL (-1)
-
-#include <linux/types.h>
-#include <linux/stddef.h>
-
-#define SIZE_PTR __kernel_size_t
-#define SSIZE_PTR __kernel_ssize_t
-
-/* port from fw by thomas */
-/* TODO: Belows are Sync from SD7-Driver. It is necessary to check correctness */
-
-/*
- * Call endian free function when
- * 1. Read/write packet content.
- * 2. Before write integer to IO.
- * 3. After read integer from IO.
- */
-
-/* */
-/* Byte Swapping routine. */
-/* */
-#define EF1Byte (u8)
-#define EF2Byte le16_to_cpu
-#define EF4Byte le32_to_cpu
-
-/* Convert little data endian to host ordering */
-#define EF1BYTE(_val) \
- ((u8)(_val))
-#define EF2BYTE(_val) \
- (le16_to_cpu(_val))
-#define EF4BYTE(_val) \
- (le32_to_cpu(_val))
-
-/*
- * Create a bit mask
- * Examples:
- * BIT_LEN_MASK_32(0) => 0x00000000
- * BIT_LEN_MASK_32(1) => 0x00000001
- * BIT_LEN_MASK_32(2) => 0x00000003
- * BIT_LEN_MASK_32(32) => 0xFFFFFFFF
- */
-#define BIT_LEN_MASK_32(__bitlen) \
- (0xFFFFFFFF >> (32 - (__bitlen)))
-#define BIT_LEN_MASK_16(__bitlen) \
- (0xFFFF >> (16 - (__bitlen)))
-#define BIT_LEN_MASK_8(__bitlen) \
- (0xFF >> (8 - (__bitlen)))
-
-/*
- * Create an offset bit mask
- * Examples:
- * BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003
- * BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000
- */
-#define BIT_OFFSET_LEN_MASK_32(__bitoffset, __bitlen) \
- (BIT_LEN_MASK_32(__bitlen) << (__bitoffset))
-#define BIT_OFFSET_LEN_MASK_16(__bitoffset, __bitlen) \
- (BIT_LEN_MASK_16(__bitlen) << (__bitoffset))
-#define BIT_OFFSET_LEN_MASK_8(__bitoffset, __bitlen) \
- (BIT_LEN_MASK_8(__bitlen) << (__bitoffset))
-
-/*
- * Description:
- * Return 4-byte value in host byte ordering from
- * 4-byte pointer in little-endian system.
- */
-#define LE_P4BYTE_TO_HOST_4BYTE(__pstart) \
- (EF4BYTE(*((__le32 *)(__pstart))))
-#define LE_P2BYTE_TO_HOST_2BYTE(__pstart) \
- (EF2BYTE(*((__le16 *)(__pstart))))
-#define LE_P1BYTE_TO_HOST_1BYTE(__pstart) \
- (EF1BYTE(*((u8 *)(__pstart))))
-
-/*
- * Description:
- * Translate subfield (continuous bits in little-endian) of 4-byte value in
- * little byte to 4-byte value in host byte ordering.
- */
-#define LE_BITS_TO_4BYTE(__pstart, __bitoffset, __bitlen) \
- (\
- (LE_P4BYTE_TO_HOST_4BYTE(__pstart) >> (__bitoffset)) & \
- BIT_LEN_MASK_32(__bitlen) \
- )
-#define LE_BITS_TO_2BYTE(__pstart, __bitoffset, __bitlen) \
- (\
- (LE_P2BYTE_TO_HOST_2BYTE(__pstart) >> (__bitoffset)) & \
- BIT_LEN_MASK_16(__bitlen) \
- )
-#define LE_BITS_TO_1BYTE(__pstart, __bitoffset, __bitlen) \
- (\
- (LE_P1BYTE_TO_HOST_1BYTE(__pstart) >> (__bitoffset)) & \
- BIT_LEN_MASK_8(__bitlen) \
- )
-
-/*
- * Description:
- * Mask subfield (continuous bits in little-endian) of 4-byte value in little
- * byte ordering and return the result in 4-byte value in host byte ordering.
- */
-#define LE_BITS_CLEARED_TO_4BYTE(__pstart, __bitoffset, __bitlen) \
- (\
- LE_P4BYTE_TO_HOST_4BYTE(__pstart) & \
- (~BIT_OFFSET_LEN_MASK_32(__bitoffset, __bitlen)) \
- )
-#define LE_BITS_CLEARED_TO_2BYTE(__pstart, __bitoffset, __bitlen) \
- (\
- LE_P2BYTE_TO_HOST_2BYTE(__pstart) & \
- (~BIT_OFFSET_LEN_MASK_16(__bitoffset, __bitlen)) \
- )
-#define LE_BITS_CLEARED_TO_1BYTE(__pstart, __bitoffset, __bitlen) \
- (\
- LE_P1BYTE_TO_HOST_1BYTE(__pstart) & \
- (~BIT_OFFSET_LEN_MASK_8(__bitoffset, __bitlen)) \
- )
-
-/*
- * Description:
- * Set subfield of little-endian 4-byte value to specified value.
- */
-#define SET_BITS_TO_LE_4BYTE(__pstart, __bitoffset, __bitlen, __val) \
- (*((u32 *)(__pstart)) = \
- ( \
- LE_BITS_CLEARED_TO_4BYTE(__pstart, __bitoffset, __bitlen) | \
- ((((u32)__val) & BIT_LEN_MASK_32(__bitlen)) << (__bitoffset)) \
- ))
-
-#define SET_BITS_TO_LE_2BYTE(__pstart, __bitoffset, __bitlen, __val) \
- (*((u16 *)(__pstart)) = \
- ( \
- LE_BITS_CLEARED_TO_2BYTE(__pstart, __bitoffset, __bitlen) | \
- ((((u16)__val) & BIT_LEN_MASK_16(__bitlen)) << (__bitoffset)) \
- ))
-
-#define SET_BITS_TO_LE_1BYTE(__pstart, __bitoffset, __bitlen, __val) \
- (*((u8 *)(__pstart)) = EF1BYTE \
- ( \
- LE_BITS_CLEARED_TO_1BYTE(__pstart, __bitoffset, __bitlen) | \
- ((((u8)__val) & BIT_LEN_MASK_8(__bitlen)) << (__bitoffset)) \
- ))
-
-#define LE_BITS_CLEARED_TO_1BYTE_8BIT(__pStart, __BitOffset, __BitLen) \
- (\
- LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
- )
-
-#define SET_BITS_TO_LE_1BYTE_8BIT(__pStart, __BitOffset, __BitLen, __Value) \
-{ \
- *((u8 *)(__pStart)) = \
- EF1Byte(\
- LE_BITS_CLEARED_TO_1BYTE_8BIT(__pStart, __BitOffset, __BitLen) \
- | \
- ((u8)__Value) \
- ); \
-}
-
-/* Get the N-bytes alignent offset from the current length */
-#define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment))
-
-#define TEST_FLAG(__Flag, __testFlag) (((__Flag) & (__testFlag)) != 0)
-#define SET_FLAG(__Flag, __setFlag) ((__Flag) |= __setFlag)
-#define CLEAR_FLAG(__Flag, __clearFlag) ((__Flag) &= ~(__clearFlag))
-#define CLEAR_FLAGS(__Flag) ((__Flag) = 0)
-#define TEST_FLAGS(__Flag, __testFlags) (((__Flag) & (__testFlags)) == (__testFlags))
-
-#endif /* __BASIC_TYPES_H__ */
diff --git a/drivers/staging/rtl8723bs/include/cmd_osdep.h b/drivers/staging/rtl8723bs/include/cmd_osdep.h
deleted file mode 100644
index 91d933d71945..000000000000
--- a/drivers/staging/rtl8723bs/include/cmd_osdep.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __CMD_OSDEP_H_
-#define __CMD_OSDEP_H_
-
-int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv);
-int rtw_init_evt_priv(struct evt_priv *pevtpriv);
-extern void _rtw_free_evt_priv(struct evt_priv *pevtpriv);
-extern void _rtw_free_cmd_priv(struct cmd_priv *pcmdpriv);
-extern struct cmd_obj *_rtw_dequeue_cmd(struct __queue *queue);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/drv_types.h b/drivers/staging/rtl8723bs/include/drv_types.h
deleted file mode 100644
index 20265770ed77..000000000000
--- a/drivers/staging/rtl8723bs/include/drv_types.h
+++ /dev/null
@@ -1,431 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-/*-------------------------------------------------------------------------------
-
- For type defines and data structure defines
-
---------------------------------------------------------------------------------*/
-
-
-#ifndef __DRV_TYPES_H__
-#define __DRV_TYPES_H__
-
-#include <linux/sched/signal.h>
-#include <basic_types.h>
-#include <osdep_service.h>
-#include <rtw_byteorder.h>
-#include <wlan_bssdef.h>
-#include <wifi.h>
-#include <ieee80211.h>
-
-#include <rtw_rf.h>
-
-#include <rtw_ht.h>
-
-#include <rtw_cmd.h>
-#include <cmd_osdep.h>
-#include <rtw_security.h>
-#include <rtw_xmit.h>
-#include <xmit_osdep.h>
-#include <rtw_recv.h>
-
-#include <rtw_efuse.h>
-#include <hal_intf.h>
-#include <hal_com.h>
-#include <rtw_qos.h>
-#include <rtw_pwrctrl.h>
-#include <rtw_mlme.h>
-#include <rtw_io.h>
-#include <rtw_ioctl_set.h>
-#include <osdep_intf.h>
-#include <rtw_eeprom.h>
-#include <sta_info.h>
-#include <rtw_event.h>
-#include <rtw_mlme_ext.h>
-#include <rtw_ap.h>
-#include <rtw_version.h>
-
-#include "ioctl_cfg80211.h"
-
-#include <linux/ip.h>
-#include <linux/if_ether.h>
-
-#define SPEC_DEV_ID_NONE BIT(0)
-#define SPEC_DEV_ID_DISABLE_HT BIT(1)
-#define SPEC_DEV_ID_ENABLE_PS BIT(2)
-#define SPEC_DEV_ID_RF_CONFIG_1T1R BIT(3)
-#define SPEC_DEV_ID_RF_CONFIG_2T2R BIT(4)
-#define SPEC_DEV_ID_ASSIGN_IFNAME BIT(5)
-
-struct registry_priv {
- u8 chip_version;
- 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 usb_rxagg_mode;
- u8 long_retry_lmt;
- u8 short_retry_lmt;
- u16 busy_thresh;
- u8 ack_policy;
- u8 mp_dm;
- 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;
-
- struct wlan_bssid_ex dev_network;
-
- u8 ht_enable;
- /*
- * 0: 20 MHz, 1: 40 MHz
- * 2.4G use bit 0 ~ 3
- * 0x01 means enable 2.4G 40MHz
- */
- u8 bw_mode;
- u8 ampdu_enable;/* for tx */
- u8 rx_stbc;
- u8 ampdu_amsdu;/* A-MPDU Supports A-MSDU is permitted */
- /* Short GI support Bit Map */
- /* BIT0 - 20MHz, 1: support, 0: non-support */
- /* BIT1 - 40MHz, 1: support, 0: non-support */
- /* BIT2 - 80MHz, 1: support, 0: non-support */
- /* BIT3 - 160MHz, 1: support, 0: non-support */
- u8 short_gi;
- /* BIT0: Enable VHT LDPC Rx, BIT1: Enable VHT LDPC Tx, BIT4: Enable HT LDPC Rx, BIT5: Enable HT LDPC Tx */
- u8 ldpc_cap;
- /* BIT0: Enable VHT STBC Rx, BIT1: Enable VHT STBC Tx, BIT4: Enable HT STBC Rx, BIT5: Enable HT STBC Tx */
- u8 stbc_cap;
- /* BIT0: Enable VHT Beamformer, BIT1: Enable VHT Beamformee, BIT4: Enable HT Beamformer, BIT5: Enable HT Beamformee */
- u8 beamform_cap;
-
- u8 lowrate_two_xmit;
-
- u8 low_power;
-
- u8 wifi_spec;/* !turbo_mode */
-
- u8 channel_plan;
-
- s8 ant_num;
-
- /* false:Reject AP's Add BA req, true:accept AP's Add BA req */
- bool accept_addba_req;
-
- 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 to roaming */
-
- u8 enable80211d;
-
- u8 ifname[16];
-
- u8 notch_filter;
-
- /* define for tx power adjust */
- u8 reg_enable_tx_power_limit;
- u8 reg_enable_tx_power_by_rate;
- u8 reg_power_base;
- u8 reg_pwr_tbl_sel;
- u8 check_fw_ps;
-
- u8 qos_opt_enable;
-
- u8 hiq_filter;
-};
-
-#include <drv_types_sdio.h>
-
-#define GET_PRIMARY_ADAPTER(padapter) (((struct adapter *)padapter)->dvobj->if1)
-#define GET_IFACE_NUMS(padapter) (((struct adapter *)padapter)->dvobj->iface_nums)
-#define GET_ADAPTER(padapter, iface_id) (((struct adapter *)padapter)->dvobj->padapters[iface_id])
-
-struct rtw_traffic_statistics {
- /* tx statistics */
- u64 tx_bytes;
- u64 tx_pkts;
- u64 tx_drop;
- u64 cur_tx_bytes;
- u64 last_tx_bytes;
- u32 cur_tx_tp; /* Tx throughput in MBps. */
-
- /* rx statistics */
- u64 rx_bytes;
- u64 rx_pkts;
- u64 rx_drop;
- u64 cur_rx_bytes;
- u64 last_rx_bytes;
- u32 cur_rx_tp; /* Rx throughput in MBps. */
-};
-
-struct cam_ctl_t {
- spinlock_t lock;
- u64 bitmap;
-};
-
-struct cam_entry_cache {
- u16 ctrl;
- u8 mac[ETH_ALEN];
- u8 key[16];
-};
-
-struct dvobj_priv {
- /*-------- below is common data --------*/
- struct adapter *if1; /* PRIMARY_ADAPTER */
-
- s32 processing_dev_remove;
-
- /* for local/global synchronization */
- /* */
- spinlock_t lock;
- int macid[NUM_STA];
-
- struct mutex hw_init_mutex;
- struct mutex h2c_fwcmd_mutex;
- struct mutex setch_mutex;
- struct mutex setbw_mutex;
-
- unsigned char oper_channel; /* saved channel info when call set_channel_bw */
- unsigned char oper_bwmode;
- unsigned char oper_ch_offset;/* PRIME_CHNL_OFFSET */
- unsigned long on_oper_ch_time;
-
- struct adapter *padapters;
-
- struct cam_ctl_t cam_ctl;
- struct cam_entry_cache cam_cache[TOTAL_CAM_ENTRY];
-
- /* In /Out Pipe information */
- int RtInPipe[2];
- int RtOutPipe[4];
- u8 Queue2Pipe[HW_QUEUE_ENTRY];/* for out pipe mapping */
-
- u8 irq_alloc;
- atomic_t continual_io_error;
-
- atomic_t disable_func;
-
- struct pwrctrl_priv pwrctl_priv;
-
- struct rtw_traffic_statistics traffic_stat;
-
-/*-------- below is for SDIO INTERFACE --------*/
-
-struct sdio_data intf_data;
-
-};
-
-#define dvobj_to_pwrctl(dvobj) (&(dvobj->pwrctl_priv))
-
-static inline struct dvobj_priv *pwrctl_to_dvobj(struct pwrctrl_priv *pwrctl_priv)
-{
- return container_of(pwrctl_priv, struct dvobj_priv, pwrctl_priv);
-}
-
-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->intf_data.func->dev;
-}
-
-enum {
- DRIVER_NORMAL = 0,
- DRIVER_DISAPPEAR = 1,
- DRIVER_REPLACE_DONGLE = 2,
-};
-
-struct adapter {
- int DriverState;/* for disable driver using module, use dongle to replace module. */
- int pid[3];/* process id from UI, 0:wps, 1:hostapd, 2:dhcpcd */
- int bDongle;/* build-in module or external dongle */
-
- struct dvobj_priv *dvobj;
- struct mlme_priv mlmepriv;
- struct mlme_ext_priv mlmeextpriv;
- struct cmd_priv cmdpriv;
- struct evt_priv evtpriv;
- /* struct io_queue *pio_queue; */
- struct io_priv iopriv;
- struct xmit_priv xmitpriv;
- struct recv_priv recvpriv;
- struct sta_priv stapriv;
- struct security_priv securitypriv;
- spinlock_t security_key_mutex;
- struct registry_priv registrypriv;
- struct eeprom_priv eeprompriv;
-
- struct hostapd_priv *phostapdpriv;
-
- u32 setband;
-
- void *HalData;
- u32 hal_data_sz;
-
- bool driver_stopped;
- s32 bSurpriseRemoved;
- s32 bCardDisableWOHSM;
-
- u32 IsrContent;
- u32 ImrContent;
-
- u8 EepromAddressSize;
- u8 hw_init_completed;
- u8 bDriverIsGoingToUnload;
- u8 init_adpt_in_progress;
- u8 bHaltInProgress;
-
- void *cmdThread;
- void *evtThread;
- void *xmitThread;
- void *recvThread;
-
- u32 (*intf_init)(struct dvobj_priv *dvobj);
- void (*intf_deinit)(struct dvobj_priv *dvobj);
- int (*intf_alloc_irq)(struct dvobj_priv *dvobj);
- void (*intf_free_irq)(struct dvobj_priv *dvobj);
-
-
- void (*intf_start)(struct adapter *adapter);
- void (*intf_stop)(struct adapter *adapter);
-
- struct net_device *pnetdev;
- char old_ifname[IFNAMSIZ];
-
- /* used by rtw_rereg_nd_name related function */
- struct rereg_nd_name_data {
- struct net_device *old_pnetdev;
- char old_ifname[IFNAMSIZ];
- u8 old_bRegUseLed;
- } rereg_nd_name_priv;
-
- int bup;
- struct net_device_stats stats;
- struct iw_statistics iwstats;
-
- struct wireless_dev *rtw_wdev;
- struct rtw_wdev_priv wdev_data;
-
- int net_closed;
-
- u8 netif_up;
-
- u8 bFWReady;
- u8 bBTFWReady;
- u8 bLinkInfoDump;
- u8 bRxRSSIDisplay;
- /* Added by Albert 2012/10/26 */
- /* The driver will show up the desired channel number when this flag is 1. */
- u8 bNotifyChannelChange;
-
- /* pbuddystruct adapter is used only in two interface case, (iface_nums =2 in struct dvobj_priv) */
- /* PRIMARY ADAPTER's buddy is SECONDARY_ADAPTER */
- /* SECONDARY_ADAPTER's buddy is PRIMARY_ADAPTER */
- /* for iface_id > SECONDARY_ADAPTER(IFACE_ID1), refer to padapters[iface_id] in struct dvobj_priv */
- /* and their pbuddystruct adapter is PRIMARY_ADAPTER. */
- /* for PRIMARY_ADAPTER(IFACE_ID0) can directly refer to if1 in struct dvobj_priv */
- struct adapter *pbuddy_adapter;
-
- /* extend to support multi interface */
- /* IFACE_ID0 is equals to PRIMARY_ADAPTER */
- /* IFACE_ID1 is equals to SECONDARY_ADAPTER */
- u8 iface_id;
-
- /* for debug purpose */
- u8 fix_rate;
- u8 driver_vcs_en; /* Enable = 1, Disable = 0 driver control vrtl_carrier_sense for tx */
- u8 driver_vcs_type;/* force 0:disable VCS, 1:RTS-CTS, 2:CTS-to-self when vcs_en = 1. */
- u8 driver_ampdu_spacing;/* driver control AMPDU Density for peer sta's rx */
- u8 driver_rx_ampdu_factor;/* 0xff: disable drv ctrl, 0:8k, 1:16k, 2:32k, 3:64k; */
-
- unsigned char in_cta_test;
-};
-
-#define adapter_to_dvobj(adapter) (adapter->dvobj)
-#define adapter_to_pwrctl(adapter) (dvobj_to_pwrctl(adapter->dvobj))
-#define adapter_wdev_data(adapter) (&((adapter)->wdev_data))
-
-/* */
-/* Function disabled. */
-/* */
-#define DF_TX_BIT BIT(0)
-#define DF_RX_BIT BIT(1)
-#define DF_IO_BIT BIT(2)
-
-/* define RTW_ENABLE_FUNC(padapter, func) (atomic_sub(&adapter_to_dvobj(padapter)->disable_func, (func))) */
-
-static inline void RTW_ENABLE_FUNC(struct adapter *padapter, int func_bit)
-{
- int df = atomic_read(&adapter_to_dvobj(padapter)->disable_func);
-
- df &= ~(func_bit);
- atomic_set(&adapter_to_dvobj(padapter)->disable_func, df);
-}
-
-#define RTW_IS_FUNC_DISABLED(padapter, func_bit) (atomic_read(&adapter_to_dvobj(padapter)->disable_func) & (func_bit))
-
-#define RTW_CANNOT_IO(padapter) \
- ((padapter)->bSurpriseRemoved || \
- RTW_IS_FUNC_DISABLED((padapter), DF_IO_BIT))
-
-#define RTW_CANNOT_RX(padapter) \
- ((padapter)->driver_stopped || \
- (padapter)->bSurpriseRemoved || \
- RTW_IS_FUNC_DISABLED((padapter), DF_RX_BIT))
-
-#define RTW_CANNOT_TX(padapter) \
- ((padapter)->driver_stopped || \
- (padapter)->bSurpriseRemoved || \
- RTW_IS_FUNC_DISABLED((padapter), DF_TX_BIT))
-
-static inline u8 *myid(struct eeprom_priv *peepriv)
-{
- return peepriv->mac_addr;
-}
-
-/* HCI Related header file */
-#include <sdio_ops.h>
-#include <sdio_hal.h>
-
-#include <rtw_btcoex.h>
-
-extern char *rtw_initmac;
-extern int rtw_mc2u_disable;
-extern int rtw_ht_enable;
-extern u32 g_wait_hiq_empty;
-extern u8 g_fwdl_wintint_rdy_fail;
-extern u8 g_fwdl_chksum_fail;
-
-#endif /* __DRV_TYPES_H__ */
diff --git a/drivers/staging/rtl8723bs/include/drv_types_sdio.h b/drivers/staging/rtl8723bs/include/drv_types_sdio.h
deleted file mode 100644
index 25b3c3a39ee4..000000000000
--- a/drivers/staging/rtl8723bs/include/drv_types_sdio.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __DRV_TYPES_SDIO_H__
-#define __DRV_TYPES_SDIO_H__
-
-/* SDIO Header Files */
- #include <linux/mmc/sdio_func.h>
- #include <linux/mmc/sdio_ids.h>
-
-struct sdio_data {
- u8 func_number;
-
- u8 tx_block_mode;
- u8 rx_block_mode;
- u32 block_transfer_len;
-
- struct sdio_func *func;
- void *sys_sdio_irq_thd;
-};
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/hal_btcoex.h b/drivers/staging/rtl8723bs/include/hal_btcoex.h
deleted file mode 100644
index 525cce3574fe..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_btcoex.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2013 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __HAL_BTCOEX_H__
-#define __HAL_BTCOEX_H__
-
-#include <drv_types.h>
-
-#define LPS_RPWM_WAIT_MS 300
-
-/* Some variables can't get from outsrc BT-Coex, */
-/* so we need to save here */
-struct bt_coexist {
- u8 bBtExist;
- u8 btTotalAntNum;
- u8 btChipType;
- u8 bInitlized;
-};
-
-void hal_btcoex_SetBTCoexist(struct adapter *padapter, u8 bBtExist);
-bool hal_btcoex_IsBtExist(struct adapter *padapter);
-bool hal_btcoex_IsBtDisabled(struct adapter *);
-void hal_btcoex_SetPgAntNum(struct adapter *padapter, u8 antNum);
-void hal_btcoex_SetSingleAntPath(struct adapter *padapter, u8 singleAntPath);
-
-void hal_btcoex_Initialize(void *padapter);
-void hal_btcoex_PowerOnSetting(struct adapter *padapter);
-void hal_btcoex_InitHwConfig(struct adapter *padapter, u8 bWifiOnly);
-
-void hal_btcoex_IpsNotify(struct adapter *padapter, u8 type);
-void hal_btcoex_LpsNotify(struct adapter *padapter, u8 type);
-void hal_btcoex_ScanNotify(struct adapter *padapter, u8 type);
-void hal_btcoex_ConnectNotify(struct adapter *padapter, u8 action);
-void hal_btcoex_MediaStatusNotify(struct adapter *padapter, u8 mediaStatus);
-void hal_btcoex_SpecialPacketNotify(struct adapter *padapter, u8 pktType);
-void hal_btcoex_IQKNotify(struct adapter *padapter, u8 state);
-void hal_btcoex_BtInfoNotify(struct adapter *padapter, u8 length, u8 *tmpBuf);
-void hal_btcoex_SuspendNotify(struct adapter *padapter, u8 state);
-void hal_btcoex_HaltNotify(struct adapter *padapter);
-
-void hal_btcoex_Handler(struct adapter *padapter);
-
-s32 hal_btcoex_IsBTCoexCtrlAMPDUSize(struct adapter *padapter);
-bool hal_btcoex_IsBtControlLps(struct adapter *padapter);
-bool hal_btcoex_IsLpsOn(struct adapter *padapter);
-u8 hal_btcoex_RpwmVal(struct adapter *);
-u8 hal_btcoex_LpsVal(struct adapter *);
-u32 hal_btcoex_GetRaMask(struct adapter *);
-void hal_btcoex_RecordPwrMode(struct adapter *padapter, u8 *pCmdBuf, u8 cmdLen);
-
-#endif /* !__HAL_BTCOEX_H__ */
diff --git a/drivers/staging/rtl8723bs/include/hal_com.h b/drivers/staging/rtl8723bs/include/hal_com.h
deleted file mode 100644
index 7bbf62cfd825..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_com.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __HAL_COMMON_H__
-#define __HAL_COMMON_H__
-
-#include "hal_pg.h"
-#include "hal_phy.h"
-#include "hal_phy_reg.h"
-#include "hal_com_reg.h"
-#include "hal_com_phycfg.h"
-
-/*------------------------------ 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 HDATA_RATE(rate)\
-(rate == DESC_RATE1M) ? "CCK_1M" : \
-(rate == DESC_RATE2M) ? "CCK_2M" : \
-(rate == DESC_RATE5_5M) ? "CCK5_5M" : \
-(rate == DESC_RATE11M) ? "CCK_11M" : \
-(rate == DESC_RATE6M) ? "OFDM_6M" : \
-(rate == DESC_RATE9M) ? "OFDM_9M" : \
-(rate == DESC_RATE12M) ? "OFDM_12M" : \
-(rate == DESC_RATE18M) ? "OFDM_18M" : \
-(rate == DESC_RATE24M) ? "OFDM_24M" : \
-(rate == DESC_RATE36M) ? "OFDM_36M" : \
-(rate == DESC_RATE48M) ? "OFDM_48M" : \
-(rate == DESC_RATE54M) ? "OFDM_54M" : \
-(rate == DESC_RATEMCS0) ? "MCS0" : \
-(rate == DESC_RATEMCS1) ? "MCS1" : \
-(rate == DESC_RATEMCS2) ? "MCS2" : \
-(rate == DESC_RATEMCS3) ? "MCS3" : \
-(rate == DESC_RATEMCS4) ? "MCS4" : \
-(rate == DESC_RATEMCS5) ? "MCS5" : \
-(rate == DESC_RATEMCS6) ? "MCS6" : \
-(rate == DESC_RATEMCS7) ? "MCS7" : "UNKNOWN"
-
-enum{
- UP_LINK,
- DOWN_LINK,
-};
-enum rt_media_status {
- RT_MEDIA_DISCONNECT = 0,
- RT_MEDIA_CONNECT = 1
-};
-
-#define MAX_DLFW_PAGE_SIZE 4096 /* @ page : 4k bytes */
-
-/* BK, BE, VI, VO, HCCA, MANAGEMENT, COMMAND, HIGH, BEACON. */
-/* define MAX_TX_QUEUE 9 */
-
-#define TX_SELE_HQ BIT(0) /* High Queue */
-#define TX_SELE_LQ BIT(1) /* Low Queue */
-#define TX_SELE_NQ BIT(2) /* Normal Queue */
-#define TX_SELE_EQ BIT(3) /* Extern Queue */
-
-#define PageNum_128(_Len) ((u32)(((_Len) >> 7) + ((_Len) & 0x7F ? 1 : 0)))
-
-u8 rtw_hal_data_init(struct adapter *padapter);
-void rtw_hal_data_deinit(struct adapter *padapter);
-
-u8 /* return the final channel plan decision */
-hal_com_config_channel_plan(
-struct adapter *padapter,
-u8 hw_channel_plan, /* channel plan from HW (efuse/eeprom) */
-u8 sw_channel_plan, /* channel plan from SW (registry/module param) */
-u8 def_channel_plan, /* channel plan used when the former two is invalid */
-bool AutoLoadFail
- );
-
-bool
-HAL_IsLegalChannel(
-struct adapter *Adapter,
-u32 Channel
- );
-
-u8 MRateToHwRate(u8 rate);
-
-u8 HwRateToMRate(u8 rate);
-
-void HalSetBrateCfg(
- struct adapter *Adapter,
- u8 *mBratesOS,
- u16 *pBrateCfg);
-
-bool
-Hal_MappingOutPipe(
-struct adapter *padapter,
-u8 NumOutPipe
- );
-
-void hal_init_macaddr(struct adapter *adapter);
-
-void rtw_init_hal_com_default_value(struct adapter *Adapter);
-
-void c2h_evt_clear(struct adapter *adapter);
-s32 c2h_evt_read_88xx(struct adapter *adapter, u8 *buf);
-
-u8 rtw_get_mgntframe_raid(struct adapter *adapter, unsigned char network_type);
-void rtw_hal_update_sta_rate_mask(struct adapter *padapter, struct sta_info *psta);
-
-void SetHwReg(struct adapter *padapter, u8 variable, u8 *val);
-void GetHwReg(struct adapter *padapter, u8 variable, u8 *val);
-void rtw_hal_check_rxfifo_full(struct adapter *adapter);
-
-u8 GetHalDefVar(struct adapter *adapter, enum hal_def_variable variable,
- void *value);
-
-bool GetU1ByteIntegerFromStringInDecimal(char *str, u8 *in);
-
-#define HWSET_MAX_SIZE 512
-
-void rtw_bb_rf_gain_offset(struct adapter *padapter);
-
-void SetHalODMVar(
- struct adapter *Adapter,
- enum hal_odm_variable eVariable,
- void *pValue1,
- bool bSet);
-#endif /* __HAL_COMMON_H__ */
diff --git a/drivers/staging/rtl8723bs/include/hal_com_h2c.h b/drivers/staging/rtl8723bs/include/hal_com_h2c.h
deleted file mode 100644
index a59d13090565..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_com_h2c.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __COMMON_H2C_H__
-#define __COMMON_H2C_H__
-
-#define H2C_RSVDPAGE_LOC_LEN 5
-#define H2C_MEDIA_STATUS_RPT_LEN 3
-#define H2C_PWRMODE_LEN 7
-#define H2C_PSTUNEPARAM_LEN 4
-#define H2C_MACID_CFG_LEN 7
-#define H2C_RSSI_SETTING_LEN 4
-
-/* */
-/* Structure -------------------------------------------------- */
-/* */
-struct rsvdpage_loc {
- u8 LocProbeRsp;
- u8 LocPsPoll;
- u8 LocNullData;
- u8 LocQosNull;
- u8 LocBTQosNull;
-};
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/hal_com_phycfg.h b/drivers/staging/rtl8723bs/include/hal_com_phycfg.h
deleted file mode 100644
index cb7c7ed74146..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_com_phycfg.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __HAL_COM_PHYCFG_H__
-#define __HAL_COM_PHYCFG_H__
-
-#define PathA 0x0 /* Useless */
-#define PathB 0x1
-#define PathC 0x2
-#define PathD 0x3
-
-enum rate_section {
- CCK = 0,
- OFDM,
- HT_MCS0_MCS7,
-};
-
-#define MAX_POWER_INDEX 0x3F
-
-enum {
- TXPWR_LMT_FCC = 0,
- TXPWR_LMT_MKK,
- TXPWR_LMT_ETSI,
- TXPWR_LMT_WW,
- TXPWR_LMT_MAX_REGULATION_NUM,
-};
-
-/*------------------------------Define structure----------------------------*/
-struct bb_register_def {
- u32 rfintfs; /* set software control: */
- /* 0x870~0x877[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 rfHSSIPara2; /* wire parameter control2 : */
- /* 0x824~0x827, 0x82c~0x82f,
- * 0x834~0x837, 0x83c~0x83f
- */
- 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 */
-
-};
-
-u8 PHY_GetTxPowerByRateBase(struct adapter *Adapter, u8 RfPath,
- enum rate_section RateSection);
-
-u8 PHY_GetRateSectionIndexOfTxPowerByRate(struct adapter *padapter, u32 RegAddr,
- u32 BitMask);
-
-void PHY_GetRateValuesOfTxPowerByRate(struct adapter *padapter, u32 RegAddr,
- u32 BitMask, u32 Value, u8 *RateIndex,
- s8 *PwrByRateVal, u8 *RateNum);
-
-u8 PHY_GetRateIndexOfTxPowerByRate(u8 Rate);
-
-void PHY_SetTxPowerIndexByRateSection(struct adapter *padapter, u8 RFPath, u8 Channel,
- u8 RateSection);
-
-s8 PHY_GetTxPowerByRate(struct adapter *padapter, u8 RFPath, u8 RateIndex);
-
-void PHY_SetTxPowerByRate(struct adapter *padapter, u8 RFPath, u8 Rate,
- s8 Value);
-
-void PHY_SetTxPowerLevelByPath(struct adapter *Adapter, u8 channel, u8 path);
-
-void PHY_SetTxPowerIndexByRateArray(struct adapter *padapter, u8 RFPath,
- enum channel_width BandWidth, u8 Channel,
- u8 *Rates, u8 RateArraySize);
-
-void PHY_InitTxPowerByRate(struct adapter *padapter);
-
-void PHY_StoreTxPowerByRate(struct adapter *padapter, u32 RfPath,
- u32 RegAddr, u32 BitMask, u32 Data);
-
-void PHY_TxPowerByRateConfiguration(struct adapter *padapter);
-
-u8 PHY_GetTxPowerIndexBase(struct adapter *padapter, u8 RFPath, u8 Rate,
- enum channel_width BandWidth, u8 Channel);
-
-s8 phy_get_tx_pwr_lmt(struct adapter *adapter, u32 RegPwrTblSel,
- enum channel_width Bandwidth, u8 RfPath, u8 DataRate,
- u8 Channel);
-
-void PHY_SetTxPowerLimit(struct adapter *Adapter, u8 *Regulation, u8 *Bandwidth,
- u8 *RateSection, u8 *RfPath, u8 *Channel, u8 *PowerLimit);
-
-void PHY_ConvertTxPowerLimitToPowerIndex(struct adapter *Adapter);
-
-void PHY_InitTxPowerLimit(struct adapter *Adapter);
-
-s8 PHY_GetTxPowerTrackingOffset(struct adapter *padapter, u8 Rate, u8 RFPath);
-
-void Hal_ChannelPlanToRegulation(struct adapter *Adapter, u16 ChannelPlan);
-
-#endif /* __HAL_COMMON_H__ */
diff --git a/drivers/staging/rtl8723bs/include/hal_com_reg.h b/drivers/staging/rtl8723bs/include/hal_com_reg.h
deleted file mode 100644
index 4671fdfff916..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_com_reg.h
+++ /dev/null
@@ -1,594 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __HAL_COMMON_REG_H__
-#define __HAL_COMMON_REG_H__
-
-/* */
-/* */
-/* 0x0000h ~ 0x00FFh System Configuration */
-/* */
-/* */
-#define REG_SYS_FUNC_EN 0x0002
-#define REG_APS_FSMCO 0x0004
-#define REG_SYS_CLKR 0x0008
-#define REG_9346CR 0x000A
-#define REG_SYS_EEPROM_CTRL 0x000A
-#define REG_RSV_CTRL 0x001C
-#define REG_RF_CTRL 0x001F
-#define REG_AFE_XTAL_CTRL 0x0024
-#define REG_MAC_PHY_CTRL 0x002c /* for 92d, DMDP, SMSP, DMSP control */
-#define REG_EFUSE_CTRL 0x0030
-#define REG_EFUSE_TEST 0x0034
-#define REG_PWR_DATA 0x0038
-#define REG_GPIO_MUXCFG 0x0040
-#define REG_GPIO_INTM 0x0048
-#define REG_LEDCFG0 0x004C
-#define REG_LEDCFG2 0x004E
-#define REG_HSIMR 0x0058
-#define REG_GPIO_IO_SEL_2 0x0062 /* RTL8723 WIFI/BT/GPS Multi-Function GPIO Select. */
-#define REG_MULTI_FUNC_CTRL 0x0068 /* RTL8723 WIFI/BT/GPS Multi-Function control source. */
-#define REG_MCUFWDL 0x0080
-#define REG_EFUSE_ACCESS 0x00CF /* Efuse access protection for RTL8723 */
-#define REG_SYS_CFG 0x00F0
-#define REG_GPIO_OUTSTS 0x00F4 /* For RTL8723 only. */
-
-/* */
-/* */
-/* 0x0100h ~ 0x01FFh MACTOP General Configuration */
-/* */
-/* */
-#define REG_CR 0x0100
-#define REG_PBP 0x0104
-#define REG_TRXDMA_CTRL 0x010C
-#define REG_TRXFF_BNDY 0x0114
-#define REG_HIMR 0x0120
-#define REG_HISR 0x0124
-
-#define REG_C2HEVT_MSG_NORMAL 0x01A0
-#define REG_C2HEVT_CLEAR 0x01AF
-#define REG_HMETFR 0x01CC
-#define REG_HMEBOX_0 0x01D0
-
-/* */
-/* */
-/* 0x0200h ~ 0x027Fh TXDMA Configuration */
-/* */
-/* */
-#define REG_RQPN 0x0200
-#define REG_TDECTRL 0x0208
-#define REG_TXDMA_STATUS 0x0210
-#define REG_RQPN_NPQ 0x0214
-#define REG_AUTO_LLT 0x0224
-
-
-/* */
-/* */
-/* 0x0280h ~ 0x02FFh RXDMA Configuration */
-/* */
-/* */
-#define REG_RXDMA_AGG_PG_TH 0x0280
-#define REG_RXPKT_NUM 0x0284
-
-/* */
-/* */
-/* 0x0400h ~ 0x047Fh Protocol Configuration */
-/* */
-/* */
-#define REG_TXPKT_EMPTY 0x041A
-#define REG_FWHW_TXQ_CTRL 0x0420
-#define REG_HWSEQ_CTRL 0x0423
-#define REG_SPEC_SIFS 0x0428
-#define REG_RL 0x042A
-#define REG_RRSR 0x0440
-
-#define REG_PKT_VO_VI_LIFE_TIME 0x04C0
-#define REG_PKT_BE_BK_LIFE_TIME 0x04C2
-#define REG_BAR_MODE_CTRL 0x04CC
-#define REG_EARLY_MODE_CONTROL 0x04D0
-#define REG_MACID_SLEEP 0x04D4
-#define REG_NQOS_SEQ 0x04DC
-
-/* */
-/* */
-/* 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_SIFS_CTX 0x0514
-#define REG_SIFS_TRX 0x0516
-#define REG_TSFTR_SYN_OFFSET 0x0518
-#define REG_SLOT 0x051B
-#define REG_TXPAUSE 0x0522
-#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. */
-/* Described by Designer Tim and Bruce, 2011-01-14. */
-/* */
-#define REG_TBTT_PROHIBIT 0x0540
-#define REG_BCN_CTRL 0x0550
-#define REG_BCN_CTRL_1 0x0551
-#define REG_DUAL_TSF_RST 0x0553
-#define REG_BCN_INTERVAL 0x0554 /* The same as REG_MBSSID_BCN_SPACE */
-#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_ACMHWCTRL 0x05C0
-
-/* */
-/* */
-/* 0x0600h ~ 0x07FFh WMAC Configuration */
-/* */
-/* */
-#define REG_BWOPMODE 0x0603
-#define REG_TCR 0x0604
-#define REG_RCR 0x0608
-#define REG_RX_DRVINFO_SZ 0x060F
-
-#define REG_MACID 0x0610
-#define REG_BSSID 0x0618
-#define REG_MAR 0x0620
-
-#define REG_MAC_SPEC_SIFS 0x063A
-/* 20100719 Joseph: Hardware register definition change. (HW datasheet v54) */
-#define REG_RESP_SIFS_CCK 0x063C /* [15:8]SIFS_R2T_OFDM, [7:0]SIFS_R2T_CCK */
-#define REG_RESP_SIFS_OFDM 0x063E /* [15:8]SIFS_T2T_OFDM, [7:0]SIFS_T2T_CCK */
-
-#define REG_ACKTO 0x0640
-
-/* */
-/* 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. Commented */
-/* by SD1 Scott. */
-/* By Bruce, 2011-07-18. */
-/* */
-#define REG_NAV_UPPER 0x0652 /* unit of 128 */
-
-/* WMA, BA, CCX */
-#define REG_RXERR_RPT 0x0664
-
-/* Security */
-#define REG_CAMCMD 0x0670
-#define REG_CAMWRITE 0x0674
-#define REG_CAMREAD 0x0678
-#define REG_SECCFG 0x0680
-
-/* Power */
-#define REG_RXFLTMAP0 0x06A0
-#define REG_RXFLTMAP1 0x06A2
-#define REG_RXFLTMAP2 0x06A4
-#define REG_BCN_PSR_RPT 0x06A8
-
-/* */
-/* */
-/* Redefine 8192C register definition for compatibility */
-/* */
-/* */
-#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 register */
-
-#define PBP REG_PBP
-
-/* */
-/* 9. Security Control Registers (Offset:) */
-/* */
-#define RWCAM REG_CAMCMD /* IN 8190 Data Sheet is called CAMcmd */
-#define WCAMI REG_CAMWRITE /* Software write CAM input content */
-
-/* */
-/* 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 BIT(6)
-#define HSISR_PDNINT BIT(7)
-#define HSISR_GPIO9_INT BIT(25)
-
-/* */
-/* Response Rate Set Register (offset 0x440, 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_12M BIT(6)
-#define RRSR_24M BIT(8)
-
-#define RRSR_CCK_RATES (RRSR_11M|RRSR_5_5M|RRSR_2M|RRSR_1M)
-
-/* */
-/* Rate Definition */
-/* */
-/* 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)
-
-/* ALL CCK Rate */
-#define RATE_BITMAP_ALL 0xFFFFF
-
-/* Only use CCK 1M rate for ACK */
-#define RATE_RRSR_CCK_ONLY_1M 0xFFFF1
-
-/* */
-/* BW_OPMODE bits (Offset 0x603, 8bit) */
-/* */
-#define BW_OPMODE_20MHZ BIT(2)
-
-/* */
-/* CAM Config Setting (offset 0x680, 1 byte) */
-/* */
-#define CAM_VALID BIT(15)
-
-#define CAM_CONTENT_COUNT 8
-
-#define CAM_AES 0x04
-
-#define TOTAL_CAM_ENTRY 32
-
-#define CAM_WRITE BIT(16)
-#define CAM_POLLINIG BIT(31)
-
-/* */
-/* 12. Host Interrupt Status Registers */
-/* */
-
-/* */
-/* 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) /* MACRX will retain the MIC at the bottom of the packet. */
-#define RCR_APP_ICV BIT(29) /* MACRX will retain the ICV at the bottom of the packet. */
-#define RCR_APP_PHYST_RXFF BIT(28) /* PHY Status is appended before RX packet in RXFF */
-#define RCR_APP_BA_SSN BIT(27) /* SSN of previous TXBA is appended as after original RXDESC as the 4-th DW of RXDESC. */
-#define RCR_HTC_LOC_CTRL BIT(14) /* MFC<--HTC = 1 MFC-->HTC = 0 */
-#define RCR_AMF BIT(13) /* Accept management type frame */
-#define RCR_ADF BIT(11) /* Accept data type frame. This bit also regulates BA, BAR, and PS-Poll (AP mode only). */
-#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 packet (Data) */
-#define RCR_AB BIT(3) /* Accept broadcast packet */
-#define RCR_AM BIT(2) /* Accept multicast packet */
-#define RCR_APM BIT(1) /* Accept physical match packet */
-
-
-/* */
-/* */
-/* 0x0000h ~ 0x00FFh System Configuration */
-/* */
-/* */
-
-/* 2 SYS_FUNC_EN */
-#define FEN_BBRSTB BIT(0)
-#define FEN_BB_GLB_RSTn BIT(1)
-#define FEN_DIO_PCIE BIT(5)
-#define FEN_PCIEA BIT(6)
-#define FEN_PPLL BIT(7)
-#define FEN_CPUEN BIT(10)
-#define FEN_ELDR BIT(12)
-
-/* 2 APS_FSMCO */
-#define EnPDN BIT(4)
-
-/* 2 SYS_CLKR */
-#define ANA8M BIT(1)
-#define LOADER_CLK_EN BIT(5)
-
-
-/* 2 9346CR /REG_SYS_EEPROM_CTRL */
-#define BOOT_FROM_EEPROM BIT(4)
-#define EEPROM_EN BIT(5)
-
-
-/* 2 RF_CTRL */
-#define RF_EN BIT(0)
-#define RF_RSTB BIT(1)
-#define RF_SDMRSTB BIT(2)
-
-/* 2 EFUSE_TEST (For RTL8723 partially) */
-#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
-
-
-/* 2 8051FWDL */
-/* 2 MCUFWDL */
-#define MCUFWDL_RDY BIT(1)
-#define FWDL_ChkSum_rpt BIT(2)
-#define WINTINI_RDY BIT(6)
-#define RAM_DL_SEL BIT(7)
-
-/* 2 REG_SYS_CFG */
-#define VENDOR_ID BIT(19)
-
-#define RTL_ID BIT(23) /* TestChip ID, 1:Test(RLE); 0:MP(RL) */
-
-
-#define CHIP_VER_RTL_MASK 0xF000 /* Bit 12 ~ 15 */
-#define CHIP_VER_RTL_SHIFT 12
-
-/* 2 REG_GPIO_OUTSTS (For RTL8723 only) */
-#define RF_RL_ID (BIT(31)|BIT(30)|BIT(29)|BIT(28))
-
-/* */
-/* */
-/* 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_LINK_AD_HOC 0x1
-#define NT_LINK_AP 0x2
-
-/* 2 PBP - Page Size Register */
-#define _PSRX(x) (x)
-#define _PSTX(x) ((x) << 4)
-
-#define PBP_128 0x1
-
-/* 2 TX/RXDMA */
-#define RXDMA_AGG_EN BIT(2)
-
-/* 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
-
-/* */
-/* */
-/* 0x0200h ~ 0x027Fh TXDMA Configuration */
-/* */
-/* */
-/* 2 RQPN */
-#define _HPQ(x) ((x) & 0xFF)
-#define _LPQ(x) (((x) & 0xFF) << 8)
-#define _PUBQ(x) (((x) & 0xFF) << 16)
-#define _NPQ(x) ((x) & 0xFF) /* NOTE: in RQPN_NPQ register */
-
-#define LD_RQPN BIT(31)
-
-/* 2 AUTO_LLT */
-#define BIT_AUTO_INIT_LLT BIT(16)
-
-/* */
-/* */
-/* 0x0280h ~ 0x028Bh RX DMA Configuration */
-/* */
-/* */
-
-/* 2 REG_RXDMA_CONTROL, 0x0286h */
-/* Write only. When this bit is set, RXDMA will decrease RX PKT counter by one. Before */
-/* this bit is polled, FW shall update RXFF_RD_PTR first. This register is write pulse and auto clear. */
-/* define RXPKT_RELEASE_POLL BIT(0) */
-/* Read only. When RXMA finishes on-going DMA operation, RXMDA will report idle state in */
-/* this bit. FW can start releasing packets after RXDMA entering idle mode. */
-/* define RXDMA_IDLE BIT(1) */
-/* When this bit is set, RXDMA will enter this mode after on-going RXDMA packet to host */
-/* completed, and stop DMA packet to host. RXDMA will then report Default: 0; */
-/* define RW_RELEASE_EN BIT(2) */
-
-/* 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 */
-/* */
-/* */
-
-#define _LRL(x) ((x) & 0x3F)
-#define _SRL(x) (((x) & 0x3F) << 8)
-
-
-/* 2 BCN_CTRL */
-#define EN_TXBCN_RPT BIT(2)
-#define EN_BCN_FUNCTION BIT(3)
-
-#define DIS_ATIM BIT(0)
-#define DIS_BCNQ_SUB BIT(1)
-#define DIS_TSF_UDT BIT(4)
-
-/* 2 ACMHWCTRL */
-#define AcmHw_HwEn BIT(0)
-#define AcmHw_BeqEn BIT(1)
-#define AcmHw_ViqEn BIT(2)
-#define AcmHw_VoqEn BIT(3)
-
-/* */
-/* */
-/* 0x0600h ~ 0x07FFh WMAC Configuration */
-/* */
-/* */
-
-/* 2 TCR */
-#define TSFRST BIT(0)
-
-/* 2 RCR */
-#define AB BIT(3)
-
-/* 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_TXBCUSEDK BIT(6) /* Force Tx Broadcast packets Use Default Key */
-#define SCR_RXBCUSEDK BIT(7) /* Force Rx Broadcast packets Use Default Key */
-#define SCR_CHK_KEYID BIT(8)
-
-/* */
-/* */
-/* SDIO Bus Specification */
-/* */
-/* */
-
-/* I/O bus domain address mapping */
-#define SDIO_LOCAL_BASE 0x10250000
-
-/* SDIO host local register space mapping. */
-#define SDIO_LOCAL_MSK 0x0FFF
-#define WLAN_IOREG_MSK 0x7FFF
-#define WLAN_FIFO_MSK 0x1FFF /* Aggregation Length[12:0] */
-#define WLAN_RX0FF_MSK 0x0003
-
-#define SDIO_LOCAL_DEVICE_ID 0 /* 0b[16], 000b[15:13] */
-#define WLAN_TX_HIQ_DEVICE_ID 4 /* 0b[16], 100b[15:13] */
-#define WLAN_TX_MIQ_DEVICE_ID 5 /* 0b[16], 101b[15:13] */
-#define WLAN_TX_LOQ_DEVICE_ID 6 /* 0b[16], 110b[15:13] */
-#define WLAN_RX0FF_DEVICE_ID 7 /* 0b[16], 111b[15:13] */
-#define WLAN_IOREG_DEVICE_ID 8 /* 1b[16] */
-
-/* SDIO Tx Free Page Index */
-#define HI_QUEUE_IDX 0
-#define MID_QUEUE_IDX 1
-#define LOW_QUEUE_IDX 2
-#define PUBLIC_QUEUE_IDX 3
-
-#define SDIO_MAX_TX_QUEUE 3 /* HIQ, MIQ and LOQ */
-
-#define SDIO_REG_TX_CTRL 0x0000 /* SDIO Tx Control */
-#define SDIO_REG_HIMR 0x0014 /* SDIO Host Interrupt Mask */
-#define SDIO_REG_HISR 0x0018 /* SDIO Host Interrupt Service Routine */
-#define SDIO_REG_RX0_REQ_LEN 0x001C /* RXDMA Request Length */
-#define SDIO_REG_OQT_FREE_PG 0x001E /* OQT Free Page */
-#define SDIO_REG_FREE_TXPG 0x0020 /* Free Tx Buffer Page */
-#define SDIO_REG_HRPWM1 0x0080 /* HCI Request Power Mode 1 */
-#define SDIO_REG_HSUS_CTRL 0x0086 /* SDIO HCI Suspend Control */
-
-#define SDIO_HIMR_DISABLED 0
-
-/* RTL8723/RTL8188E SDIO Host Interrupt Mask Register */
-#define SDIO_HIMR_RX_REQUEST_MSK BIT(0)
-#define SDIO_HIMR_AVAL_MSK BIT(1)
-
-/* SDIO Host Interrupt Service Routine */
-#define SDIO_HISR_RX_REQUEST BIT(0)
-#define SDIO_HISR_AVAL BIT(1)
-#define SDIO_HISR_TXERR BIT(2)
-#define SDIO_HISR_RXERR BIT(3)
-#define SDIO_HISR_TXFOVW BIT(4)
-#define SDIO_HISR_RXFOVW BIT(5)
-#define SDIO_HISR_TXBCNOK BIT(6)
-#define SDIO_HISR_TXBCNERR BIT(7)
-#define SDIO_HISR_C2HCMD BIT(17)
-#define SDIO_HISR_CPWM1 BIT(18)
-#define SDIO_HISR_CPWM2 BIT(19)
-#define SDIO_HISR_HSISR_IND BIT(20)
-#define SDIO_HISR_GTINT3_IND BIT(21)
-#define SDIO_HISR_GTINT4_IND BIT(22)
-#define SDIO_HISR_PSTIMEOUT BIT(23)
-#define SDIO_HISR_OCPINT BIT(24)
-
-#define MASK_SDIO_HISR_CLEAR (SDIO_HISR_TXERR |\
- SDIO_HISR_RXERR |\
- SDIO_HISR_TXFOVW |\
- SDIO_HISR_RXFOVW |\
- SDIO_HISR_TXBCNOK |\
- SDIO_HISR_TXBCNERR |\
- SDIO_HISR_C2HCMD |\
- SDIO_HISR_CPWM1 |\
- SDIO_HISR_CPWM2 |\
- SDIO_HISR_HSISR_IND |\
- SDIO_HISR_GTINT3_IND |\
- SDIO_HISR_GTINT4_IND |\
- SDIO_HISR_PSTIMEOUT |\
- SDIO_HISR_OCPINT)
-
-/* SDIO Tx FIFO related */
-#define SDIO_TX_FREE_PG_QUEUE 4 /* The number of Tx FIFO free page */
-
-/* */
-/* */
-/* 0xFE00h ~ 0xFE55h USB Configuration */
-/* */
-/* */
-
-/* 2REG_C2HEVT_CLEAR */
-#define C2H_EVT_HOST_CLOSE 0x00 /* Set by driver and notify FW that the driver has read the C2H command message */
-#define C2H_EVT_FW_CLOSE 0xFF /* Set by FW indicating that FW had set the C2H command message and it's not yet read by driver. */
-
-/* 2REG_MULTI_FUNC_CTRL(For RTL8723 Only) */
-#define BT_FUNC_EN BIT(18) /* BT function enable */
-
-#endif /* __HAL_COMMON_H__ */
diff --git a/drivers/staging/rtl8723bs/include/hal_data.h b/drivers/staging/rtl8723bs/include/hal_data.h
deleted file mode 100644
index f67ca496902a..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_data.h
+++ /dev/null
@@ -1,276 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __HAL_DATA_H__
-#define __HAL_DATA_H__
-
-#include "odm_precomp.h"
-#include <hal_btcoex.h>
-
-#include <hal_sdio.h>
-
-enum rt_ampdu_burst {
- RT_AMPDU_BURST_NONE = 0,
- RT_AMPDU_BURST_92D = 1,
- RT_AMPDU_BURST_88E = 2,
- RT_AMPDU_BURST_8812_4 = 3,
- RT_AMPDU_BURST_8812_8 = 4,
- RT_AMPDU_BURST_8812_12 = 5,
- RT_AMPDU_BURST_8812_15 = 6,
- RT_AMPDU_BURST_8723B = 7,
-};
-
-#define CHANNEL_MAX_NUMBER (14) /* 14 is the max channel number */
-#define CHANNEL_MAX_NUMBER_2G 14
-#define MAX_PG_GROUP 13
-
-/* Tx Power Limit Table Size */
-#define MAX_REGULATION_NUM 4
-#define MAX_2_4G_BANDWIDTH_NUM 2
-#define MAX_RATE_SECTION_NUM 3 /* CCK:1, OFDM:1, HT:1 */
-
-/* duplicate code, will move to ODM ######### */
-/* define IQK_MAC_REG_NUM 4 */
-/* define IQK_ADDA_REG_NUM 16 */
-
-/* define IQK_BB_REG_NUM 10 */
-
-/* define HP_THERMAL_NUM 8 */
-/* duplicate code, will move to ODM ######### */
-
-enum {
- SINGLEMAC_SINGLEPHY, /* SMSP */
- DUALMAC_DUALPHY, /* DMDP */
- DUALMAC_SINGLEPHY, /* DMSP */
-};
-
-#define PAGE_SIZE_128 128
-#define PAGE_SIZE_256 256
-#define PAGE_SIZE_512 512
-
-struct dm_priv {
- u8 DM_Type;
-
-#define DYNAMIC_FUNC_BT BIT(0)
-
- u8 DMFlag;
- u8 InitDMFlag;
- /* u8 RSVD_1; */
-
- u32 InitODMFlag;
- /* Upper and Lower Signal threshold for Rate Adaptive */
- int UndecoratedSmoothedPWDB;
- int UndecoratedSmoothedCCK;
- int EntryMinUndecoratedSmoothedPWDB;
- int EntryMaxUndecoratedSmoothedPWDB;
- int MinUndecoratedPWDBForDM;
- int LastMinUndecoratedPWDBForDM;
-
- s32 UndecoratedSmoothedBeacon;
-
-/* duplicate code, will move to ODM ######### */
- /* for High Power */
- u8 bDynamicTxPowerEnable;
- u8 LastDTPLvl;
- u8 DynamicTxHighPowerLvl;/* Add by Jacken Tx Power Control for Near/Far Range 2008/03/06 */
-
- /* for tx power tracking */
- u8 bTXPowerTracking;
- u8 TXPowercount;
- u8 bTXPowerTrackingInit;
- u8 TxPowerTrackControl; /* for mp mode, turn off txpwrtracking as default */
- u8 TM_Trigger;
-
- u8 ThermalMeter[2]; /* ThermalMeter, index 0 for RFIC0, and 1 for RFIC1 */
- u8 ThermalValue;
- u8 ThermalValue_LCK;
- u8 ThermalValue_IQK;
- u8 ThermalValue_DPK;
- u8 bRfPiEnable;
- /* u8 RSVD_2; */
-
- /* for APK */
- u32 APKoutput[2][2]; /* path A/B; output1_1a/output1_2a */
- u8 bAPKdone;
- u8 bAPKThermalMeterIgnore;
- u8 bDPdone;
- u8 bDPPathAOK;
- u8 bDPPathBOK;
- /* u8 RSVD_3; */
- /* u8 RSVD_4; */
- /* u8 RSVD_5; */
-
- /* for IQK */
- 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];
-
- u8 PowerIndex_backup[6];
- u8 OFDM_index[2];
-
- u8 bCCKinCH14;
- u8 CCK_index;
- u8 bDoneTxpower;
- u8 CCK_index_HP;
-
- u8 OFDM_index_HP[2];
- u8 ThermalValue_HP[HP_THERMAL_NUM];
- u8 ThermalValue_HP_index;
- /* u8 RSVD_6; */
-
- /* for TxPwrTracking2 */
- s32 RegE94;
- s32 RegE9C;
- s32 RegEB4;
- s32 RegEBC;
-
- u32 TXPowerTrackingCallbackCnt; /* cosa add for debug */
-
- u32 prv_traffic_idx; /* edca turbo */
-/* duplicate code, will move to ODM ######### */
-
- /* Add for Reading Initial Data Rate SEL Register 0x484 during watchdog. Using for fill tx desc. 2011.3.21 by Thomas */
- u8 INIDATA_RATE[32];
-};
-
-
-struct hal_com_data {
- u16 FirmwareVersion;
- u16 FirmwareVersionRev;
- u16 FirmwareSubVersion;
- u16 FirmwareSignature;
-
- /* current WIFI_PHY values */
- enum wireless_mode CurrentWirelessMode;
- enum channel_width CurrentChannelBW;
- u8 CurrentChannel;
- u8 CurrentCenterFrequencyIndex1;
- u8 nCur40MhzPrimeSC;/* Control channel sub-carrier */
- u8 nCur80MhzPrimeSC; /* used for primary 40MHz of 80MHz mode */
-
- u16 CustomerID;
- u16 BasicRateSet;
- u32 ReceiveConfig;
-
- /* rf_ctrl */
- u8 PackageType;
-
- /* EEPROM setting. */
- u8 EEPROMRegulatory;
- u8 EEPROMThermalMeter;
- u8 EEPROMBluetoothCoexist;
- u8 EEPROMBluetoothAntNum;
- u8 bDisableSWChannelPlan; /* flag of disable software change channel plan */
-
- bool EepromOrEfuse;
- u8 EfuseUsedPercentage;
- u16 EfuseUsedBytes;
- struct efuse_hal EfuseHal;
-
- /* 3 [2.4G] */
- u8 Index24G_CCK_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
- u8 Index24G_BW40_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER];
- /* If only one tx, only BW20 and OFDM are used. */
- s8 OFDM_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
- s8 BW20_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
- s8 BW40_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT];
-
- u8 Regulation2_4G;
-
- /* TX power by rate table */
- /* RF: at most 2 = AB = 0/1 */
- /* CCK = 0 OFDM = 1 HT-MCS 0-7 = 2 */
- s8 TxPwrByRateOffset[MAX_RF_PATH_NUM][TX_PWR_BY_RATE_NUM_RATE];
- /* */
-
- /* Power Limit Table for 2.4G */
- s8 TxPwrLimit_2_4G[MAX_REGULATION_NUM]
- [MAX_2_4G_BANDWIDTH_NUM]
- [MAX_RATE_SECTION_NUM]
- [CHANNEL_MAX_NUMBER_2G]
- [MAX_RF_PATH_NUM];
-
- /* Store the original power by rate value of the base of each rate section of rf path A & B */
- u8 TxPwrByRateBase2_4G[MAX_RF_PATH_NUM][MAX_RATE_SECTION_NUM];
-
- u8 CrystalCap;
-
- u8 TypeGLNA;
- u8 TypeGPA;
- u8 TypeALNA;
- u8 TypeAPA;
- u8 RFEType;
- u8 BoardType;
- bool bLCKInProgress;
-
- bool bSwChnl;
- bool bSetChnlBW;
-
- u8 TxPowerTrackControl; /* for mp mode, turn off txpwrtracking as default */
-
- u32 AcParam_BE; /* Original parameter for BE, use for EDCA turbo. */
-
- struct bb_register_def PHYRegDef[4]; /* Radio A/B/C/D */
-
- u32 RfRegChnlVal[2];
-
- /* for host message to fw */
- u8 LastHMEBoxNum;
-
- u8 fw_ractrl;
- /* Beacon function related global variable. */
- u8 RegFwHwTxQCtrl;
- u8 RegReg542;
- u16 RegRRSR;
-
- u8 CurAntenna;
- u8 AntDivCfg;
- u8 AntDetection;
- u8 ant_path; /* for 8723B s0/s1 selection */
-
- u8 u1ForcedIgiLb; /* forced IGI lower bound */
-
- /* 2010/08/09 MH Add CU power down mode. */
- bool pwrdown;
-
- u8 OutEpQueueSel;
- u8 OutEpNumber;
-
- /* Auto FSM to Turn On, include clock, isolation, power control for MAC only */
- u8 bMacPwrCtrlOn;
-
- enum rt_ampdu_burst AMPDUBurstMode; /* 92C maybe not use, but for compile successfully */
-
- u32 sdio_himr;
- u32 sdio_hisr;
-
- /* SDIO Tx FIFO related. */
- /* HIQ, MID, LOW, PUB free pages; padapter->xmitpriv.free_txpg */
- u8 SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE];
- u8 SdioTxOQTMaxFreeSpace;
- u8 SdioTxOQTFreeSpace;
-
-
- /* SDIO Rx FIFO related. */
- u8 SdioRxFIFOCnt;
- u16 SdioRxFIFOSize;
-
- u32 sdio_tx_max_len[SDIO_MAX_TX_QUEUE];/* H, N, L, used for sdio tx aggregation max length per queue */
-
- struct dm_priv dmpriv;
- struct dm_odm_t odmpriv;
-
- /* For bluetooth co-existence */
- struct bt_coexist bt_coexist;
-
- /* Chip version information */
- bool chip_normal; /* true - normal chip, false - test chip */
-};
-
-#define GET_HAL_DATA(__padapter) ((struct hal_com_data *)((__padapter)->HalData))
-
-#endif /* __HAL_DATA_H__ */
diff --git a/drivers/staging/rtl8723bs/include/hal_intf.h b/drivers/staging/rtl8723bs/include/hal_intf.h
deleted file mode 100644
index a7ae8c006f0c..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_intf.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __HAL_INTF_H__
-#define __HAL_INTF_H__
-
-
-enum {
- RTW_PCIE = BIT(0),
- RTW_USB = BIT(1),
- RTW_SDIO = BIT(2),
- RTW_GSPI = BIT(3),
-};
-
-enum {
- HW_VAR_MEDIA_STATUS,
- HW_VAR_MEDIA_STATUS1,
- HW_VAR_SET_OPMODE,
- HW_VAR_MAC_ADDR,
- HW_VAR_BSSID,
- HW_VAR_INIT_RTS_RATE,
- HW_VAR_BASIC_RATE,
- HW_VAR_TXPAUSE,
- HW_VAR_BCN_FUNC,
- HW_VAR_CORRECT_TSF,
- HW_VAR_CHECK_BSSID,
- HW_VAR_MLME_DISCONNECT,
- HW_VAR_MLME_SITESURVEY,
- HW_VAR_MLME_JOIN,
- HW_VAR_ON_RCR_AM,
- HW_VAR_OFF_RCR_AM,
- HW_VAR_BEACON_INTERVAL,
- HW_VAR_SLOT_TIME,
- HW_VAR_RESP_SIFS,
- HW_VAR_ACK_PREAMBLE,
- HW_VAR_SEC_CFG,
- HW_VAR_SEC_DK_CFG,
- HW_VAR_BCN_VALID,
- HW_VAR_RF_TYPE,
- HW_VAR_DM_FLAG,
- HW_VAR_DM_FUNC_OP,
- HW_VAR_DM_FUNC_SET,
- HW_VAR_DM_FUNC_CLR,
- HW_VAR_CAM_EMPTY_ENTRY,
- HW_VAR_CAM_INVALID_ALL,
- HW_VAR_CAM_WRITE,
- HW_VAR_CAM_READ,
- HW_VAR_AC_PARAM_VO,
- HW_VAR_AC_PARAM_VI,
- HW_VAR_AC_PARAM_BE,
- HW_VAR_AC_PARAM_BK,
- HW_VAR_ACM_CTRL,
- HW_VAR_AMPDU_MIN_SPACE,
- HW_VAR_AMPDU_FACTOR,
- HW_VAR_RXDMA_AGG_PG_TH,
- HW_VAR_SET_RPWM,
- HW_VAR_CPWM,
- HW_VAR_H2C_FW_PWRMODE,
- HW_VAR_H2C_PS_TUNE_PARAM,
- HW_VAR_H2C_FW_JOINBSSRPT,
- HW_VAR_FWLPS_RF_ON,
- HW_VAR_H2C_FW_P2P_PS_OFFLOAD,
- HW_VAR_TDLS_WRCR,
- HW_VAR_TDLS_INIT_CH_SEN,
- HW_VAR_TDLS_RS_RCR,
- HW_VAR_TDLS_DONE_CH_SEN,
- HW_VAR_INITIAL_GAIN,
- HW_VAR_TRIGGER_GPIO_0,
- HW_VAR_BT_SET_COEXIST,
- HW_VAR_BT_ISSUE_DELBA,
- HW_VAR_CURRENT_ANTENNA,
- HW_VAR_ANTENNA_DIVERSITY_LINK,
- HW_VAR_ANTENNA_DIVERSITY_SELECT,
- HW_VAR_SWITCH_EPHY_WoWLAN,
- HW_VAR_EFUSE_USAGE,
- HW_VAR_EFUSE_BYTES,
- HW_VAR_EFUSE_BT_USAGE,
- HW_VAR_EFUSE_BT_BYTES,
- HW_VAR_FIFO_CLEARN_UP,
- HW_VAR_CHECK_TXBUF,
- HW_VAR_PCIE_STOP_TX_DMA,
- HW_VAR_APFM_ON_MAC, /* Auto FSM to Turn On, include clock, isolation, power control for MAC only */
- /* The valid upper nav range for the HW updating, if the true value is larger than the upper range, the HW won't update it. */
- /* Unit in microsecond. 0 means disable this function. */
- HW_VAR_SYS_CLKR,
- HW_VAR_NAV_UPPER,
- HW_VAR_C2H_HANDLE,
- HW_VAR_RPT_TIMER_SETTING,
- HW_VAR_TX_RPT_MAX_MACID,
- HW_VAR_H2C_MEDIA_STATUS_RPT,
- HW_VAR_CHK_HI_QUEUE_EMPTY,
- HW_VAR_DL_BCN_SEL,
- HW_VAR_AMPDU_MAX_TIME,
- HW_VAR_WIRELESS_MODE,
- HW_VAR_USB_MODE,
- HW_VAR_PORT_SWITCH,
- HW_VAR_DM_IN_LPS,
- HW_VAR_SET_REQ_FW_PS,
- HW_VAR_FW_PS_STATE,
- HW_VAR_SOUNDING_ENTER,
- HW_VAR_SOUNDING_LEAVE,
- HW_VAR_SOUNDING_RATE,
- HW_VAR_SOUNDING_STATUS,
- HW_VAR_SOUNDING_FW_NDPA,
- HW_VAR_SOUNDING_CLK,
- HW_VAR_DL_RSVD_PAGE,
- HW_VAR_MACID_SLEEP,
- HW_VAR_MACID_WAKEUP,
-};
-
-enum hal_def_variable {
- HAL_DEF_UNDERCORATEDSMOOTHEDPWDB,
- HAL_DEF_IS_SUPPORT_ANT_DIV,
- HAL_DEF_CURRENT_ANTENNA,
- HAL_DEF_DRVINFO_SZ,
- HAL_DEF_MAX_RECVBUF_SZ,
- HAL_DEF_RX_PACKET_OFFSET,
- HAL_DEF_DBG_DUMP_RXPKT,/* for dbg */
- HAL_DEF_DBG_DM_FUNC,/* for dbg */
- HAL_DEF_RA_DECISION_RATE,
- HAL_DEF_RA_SGI,
- HAL_DEF_PT_PWR_STATUS,
- HAL_DEF_TX_LDPC, /* LDPC support */
- HAL_DEF_RX_LDPC, /* LDPC support */
- HAL_DEF_TX_STBC, /* TX STBC support */
- HAL_DEF_RX_STBC, /* RX STBC support */
- HAL_DEF_EXPLICIT_BEAMFORMER,/* Explicit Compressed Steering Capable */
- HAL_DEF_EXPLICIT_BEAMFORMEE,/* Explicit Compressed Beamforming Feedback Capable */
- HW_VAR_MAX_RX_AMPDU_FACTOR,
- HW_DEF_RA_INFO_DUMP,
- HAL_DEF_DBG_DUMP_TXPKT,
- HW_DEF_FA_CNT_DUMP,
- HW_DEF_ODM_DBG_FLAG,
- HW_DEF_ODM_DBG_LEVEL,
- HAL_DEF_TX_PAGE_SIZE,
- HAL_DEF_TX_PAGE_BOUNDARY,
- HAL_DEF_TX_PAGE_BOUNDARY_WOWLAN,
- HAL_DEF_ANT_DETECT,/* to do for 8723a */
- HAL_DEF_PCI_SUUPORT_L1_BACKDOOR, /* Determine if the L1 Backdoor setting is turned on. */
- HAL_DEF_PCI_AMD_L1_SUPPORT,
- HAL_DEF_PCI_ASPM_OSC, /* Support for ASPM OSC, added by Roger, 2013.03.27. */
- HAL_DEF_MACID_SLEEP, /* Support for MACID sleep */
-};
-
-enum hal_odm_variable {
- HAL_ODM_STA_INFO,
- HAL_ODM_P2P_STATE,
- HAL_ODM_WIFI_DISPLAY_STATE,
- HAL_ODM_NOISE_MONITOR,
-};
-
-typedef s32 (*c2h_id_filter)(u8 *c2h_evt);
-
-#define RF_CHANGE_BY_INIT 0
-#define RF_CHANGE_BY_IPS BIT(28)
-#define RF_CHANGE_BY_PS BIT(29)
-#define RF_CHANGE_BY_HW BIT(30)
-#define RF_CHANGE_BY_SW BIT(31)
-
-#define GET_EEPROM_EFUSE_PRIV(adapter) (&adapter->eeprompriv)
-#define is_boot_from_eeprom(adapter) (adapter->eeprompriv.EepromOrEfuse)
-
-#define Rx_Pairwisekey 0x01
-#define Rx_GTK 0x02
-#define Rx_DisAssoc 0x04
-#define Rx_DeAuth 0x08
-#define Rx_ARPReq 0x09
-#define FWDecisionDisconnect 0x10
-#define Rx_MagicPkt 0x21
-#define Rx_UnicastPkt 0x22
-#define Rx_PatternPkt 0x23
-#define RX_PNOWakeUp 0x55
-#define AP_WakeUp 0x66
-
-uint rtw_hal_init(struct adapter *padapter);
-uint rtw_hal_deinit(struct adapter *padapter);
-void rtw_hal_stop(struct adapter *padapter);
-void rtw_hal_set_hwreg(struct adapter *padapter, u8 variable, u8 *val);
-void rtw_hal_get_hwreg(struct adapter *padapter, u8 variable, u8 *val);
-
-void rtw_hal_set_hwreg_with_buf(struct adapter *padapter, u8 variable, u8 *pbuf, int len);
-
-u8 rtw_hal_get_def_var(struct adapter *padapter, enum hal_def_variable eVariable, void *pValue);
-
-void rtw_hal_set_odm_var(struct adapter *padapter, enum hal_odm_variable eVariable, void *pValue1, bool bSet);
-
-u8 rtw_hal_check_ips_status(struct adapter *padapter);
-
-int rtw_hal_xmitframe_enqueue(struct adapter *padapter, struct xmit_frame *pxmitframe);
-s32 rtw_hal_xmit(struct adapter *padapter, struct xmit_frame *pxmitframe);
-s32 rtw_hal_mgnt_xmit(struct adapter *padapter, struct xmit_frame *pmgntframe);
-
-s32 rtw_hal_init_xmit_priv(struct adapter *padapter);
-void rtw_hal_free_xmit_priv(struct adapter *padapter);
-
-s32 rtw_hal_init_recv_priv(struct adapter *padapter);
-void rtw_hal_free_recv_priv(struct adapter *padapter);
-
-void rtw_hal_update_ra_mask(struct sta_info *psta, u8 rssi_level);
-void rtw_hal_add_ra_tid(struct adapter *padapter, u32 bitmap, u8 *arg, u8 rssi_level);
-
-void beacon_timing_control(struct adapter *padapter);
-
-u32 rtw_hal_read_bbreg(struct adapter *padapter, u32 RegAddr, u32 BitMask);
-void rtw_hal_write_bbreg(struct adapter *padapter, u32 RegAddr, u32 BitMask, u32 Data);
-u32 rtw_hal_read_rfreg(struct adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask);
-void rtw_hal_write_rfreg(struct adapter *padapter, u32 eRFPath, u32 RegAddr, u32 BitMask, u32 Data);
-
-#define PHY_QueryBBReg(Adapter, RegAddr, BitMask) rtw_hal_read_bbreg((Adapter), (RegAddr), (BitMask))
-#define PHY_SetBBReg(Adapter, RegAddr, BitMask, Data) rtw_hal_write_bbreg((Adapter), (RegAddr), (BitMask), (Data))
-#define PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask) rtw_hal_read_rfreg((Adapter), (eRFPath), (RegAddr), (BitMask))
-#define PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data) rtw_hal_write_rfreg((Adapter), (eRFPath), (RegAddr), (BitMask), (Data))
-
-#define PHY_SetMacReg PHY_SetBBReg
-#define PHY_QueryMacReg PHY_QueryBBReg
-
-void rtw_hal_set_chan(struct adapter *padapter, u8 channel);
-void rtw_hal_set_chnl_bw(struct adapter *padapter, u8 channel, enum channel_width Bandwidth, u8 Offset40, u8 Offset80);
-void rtw_hal_dm_watchdog(struct adapter *padapter);
-void rtw_hal_dm_watchdog_in_lps(struct adapter *padapter);
-
-s32 rtw_hal_xmit_thread_handler(struct adapter *padapter);
-
-void rtw_hal_notch_filter(struct adapter *adapter, bool enable);
-
-bool rtw_hal_c2h_valid(struct adapter *adapter, u8 *buf);
-s32 rtw_hal_c2h_handler(struct adapter *adapter, u8 *c2h_evt);
-c2h_id_filter rtw_hal_c2h_id_filter_ccx(struct adapter *adapter);
-
-s32 rtw_hal_macid_sleep(struct adapter *padapter, u32 macid);
-s32 rtw_hal_macid_wakeup(struct adapter *padapter, u32 macid);
-
-s32 rtw_hal_fill_h2c_cmd(struct adapter *adapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
-
-void SetHwReg8723BS(struct adapter *padapter, u8 variable, u8 *val);
-void GetHwReg8723BS(struct adapter *padapter, u8 variable, u8 *val);
-void SetHwRegWithBuf8723B(struct adapter *padapter, u8 variable, u8 *pbuf, int len);
-u8 GetHalDefVar8723BSDIO(struct adapter *Adapter, enum hal_def_variable eVariable, void *pValue);
-void UpdateHalRAMask8723B(struct adapter *padapter, u32 mac_id, u8 rssi_level);
-void rtl8723b_SetBeaconRelatedRegisters(struct adapter *padapter);
-void Hal_EfusePowerSwitch(struct adapter *padapter, u8 PwrState);
-void Hal_ReadEFuse(struct adapter *padapter, u8 efuseType, u16 _offset,
- u16 _size_byte, u8 *pbuf);
-void Hal_GetEfuseDefinition(struct adapter *padapter, u8 efuseType, u8 type,
- void *pOut);
-void hal_notch_filter_8723b(struct adapter *adapter, bool enable);
-#endif /* __HAL_INTF_H__ */
diff --git a/drivers/staging/rtl8723bs/include/hal_pg.h b/drivers/staging/rtl8723bs/include/hal_pg.h
deleted file mode 100644
index 32e66fe451b0..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_pg.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __HAL_PG_H__
-#define __HAL_PG_H__
-
-#define MAX_RF_PATH 4
-/* MAX_TX_COUNT must always be set to 4, otherwise the read efuse table
- * sequence will be wrong.
- */
-#define MAX_TX_COUNT 4
-
-/* TX power by rate table. */
-/* RF: = AB = 0/1 */
-/* CCK = 0 OFDM = 1 HT-MCS 0-7 = 2 */
-#define TX_PWR_BY_RATE_NUM_RATE 84
-#define MAX_RF_PATH_NUM 2
-#define MAX_CHNL_GROUP_24G 6
-#define EEPROM_DEFAULT_BOARD_OPTION 0x00
-
-/* EEPROM/Efuse PG Offset for 8723BE/8723BU/8723BS */
-/* 0x10 ~ 0x63 = TX power area. */
-#define EEPROM_TX_PWR_INX_8723B 0x10
-/* 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_ThermalMeter_8723B 0x18
-#define EEPROM_Default_CrystalCap_8723B 0x20
-
-#define EEPROM_ChannelPlan_8723B 0xB8
-#define EEPROM_XTAL_8723B 0xB9
-#define EEPROM_THERMAL_METER_8723B 0xBA
-
-#define EEPROM_RF_BOARD_OPTION_8723B 0xC1
-#define EEPROM_RF_BT_SETTING_8723B 0xC3
-#define EEPROM_DEFAULT_DIFF 0XFE
-
-/* RTL8723BS */
-#define EEPROM_MAC_ADDR_8723BS 0x11A
-#define EEPROM_Voltage_ADDR_8723B 0x8
-#define RTL_EEPROM_ID 0x8129
-
-struct TxPowerInfo24G {
- u8 IndexCCK_Base[MAX_RF_PATH][MAX_CHNL_GROUP_24G];
- u8 IndexBW40_Base[MAX_RF_PATH][MAX_CHNL_GROUP_24G];
- /* If only one tx, only BW20 and OFDM are used. */
- s8 CCK_Diff[MAX_RF_PATH][MAX_TX_COUNT];
- s8 OFDM_Diff[MAX_RF_PATH][MAX_TX_COUNT];
- s8 BW20_Diff[MAX_RF_PATH][MAX_TX_COUNT];
- s8 BW40_Diff[MAX_RF_PATH][MAX_TX_COUNT];
-};
-
-enum {
- Ant_x2 = 0,
- Ant_x1 = 1
-};
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/hal_phy.h b/drivers/staging/rtl8723bs/include/hal_phy.h
deleted file mode 100644
index abc0f27fdaa4..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_phy.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __HAL_PHY_H__
-#define __HAL_PHY_H__
-/* */
-/* Antenna detection method, i.e., using single tone detection or RSSI reported from each antenna detected. */
-/* Added by Roger, 2013.05.22. */
-/* */
-#define ANT_DETECT_BY_SINGLE_TONE BIT(0)
-#define ANT_DETECT_BY_RSSI BIT(1)
-#define IS_ANT_DETECT_SUPPORT_SINGLE_TONE(__Adapter) ((GET_HAL_DATA(__Adapter)->AntDetection) & ANT_DETECT_BY_SINGLE_TONE)
-#define IS_ANT_DETECT_SUPPORT_RSSI(__Adapter) ((GET_HAL_DATA(__Adapter)->AntDetection) & ANT_DETECT_BY_RSSI)
-
-
-/*--------------------------Define Parameters-------------------------------*/
-enum {
- RF_TYPE_MIN = 0, /* 0 */
- RF_8225 = 1, /* 1 11b/g RF for verification only */
- RF_8256 = 2, /* 2 11b/g/n */
- RF_8258 = 3, /* 3 11a/b/g/n RF */
- RF_6052 = 4, /* 4 11b/g/n RF */
- RF_PSEUDO_11N = 5, /* 5, It is a temporality RF. */
- RF_TYPE_MAX
-};
-
-enum rf_path {
- RF_PATH_A = 0,
- RF_PATH_B,
- RF_PATH_MAX
-};
-
-#define TX_1S 0
-#define TX_2S 1
-#define TX_3S 2
-#define TX_4S 3
-
-#define RF_PATH_MAX_92C_88E 2
-#define RF_PATH_MAX_90_8812 4 /* Max RF number 90 support */
-
-enum wireless_mode {
- WIRELESS_MODE_UNKNOWN = 0x00,
- WIRELESS_MODE_B = 0x02,
- WIRELESS_MODE_G = 0x04,
- WIRELESS_MODE_AUTO = 0x08,
- WIRELESS_MODE_N_24G = 0x10,
- WIRELESS_MODE_AC_24G = 0x80,
- WIRELESS_MODE_AC_ONLY = 0x100,
-};
-
-enum SwChnlCmdID {
- CmdID_End,
- CmdID_SetTxPowerLevel,
- CmdID_BBRegWrite10,
- CmdID_WritePortUlong,
- CmdID_WritePortUshort,
- CmdID_WritePortUchar,
- CmdID_RF_WriteReg,
-};
-
-struct SwChnlCmd {
- enum SwChnlCmdID CmdID;
- u32 Para1;
- u32 Para2;
- u32 msDelay;
-};
-
-/*--------------------------Exported Function prototype---------------------*/
-
-#endif /* __HAL_COMMON_H__ */
diff --git a/drivers/staging/rtl8723bs/include/hal_phy_cfg.h b/drivers/staging/rtl8723bs/include/hal_phy_cfg.h
deleted file mode 100644
index 07bf0a8d019a..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_phy_cfg.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __INC_HAL8723BPHYCFG_H__
-#define __INC_HAL8723BPHYCFG_H__
-
-/*--------------------------Define Parameters-------------------------------*/
-#define LOOP_LIMIT 5
-#define MAX_STALL_TIME 50 /* us */
-#define AntennaDiversityValue 0x80 /* Adapter->bSoftwareAntennaDiversity ? 0x00:0x80) */
-#define MAX_TXPWR_IDX_NMODE_92S 63
-#define Reset_Cnt_Limit 3
-
-#define MAX_AGGR_NUM 0x07
-
-
-/*--------------------------Define Parameters End-------------------------------*/
-
-
-/*------------------------------Define structure----------------------------*/
-
-/*------------------------------Define structure End----------------------------*/
-
-/*--------------------------Exported Function prototype---------------------*/
-u32 PHY_QueryBBReg_8723B(struct adapter *Adapter, u32 RegAddr, u32 BitMask);
-
-void PHY_SetBBReg_8723B(struct adapter *Adapter, u32 RegAddr,
- u32 BitMask, u32 Data);
-
-u32 PHY_QueryRFReg_8723B(struct adapter *Adapter, u8 eRFPath,
- u32 RegAddr, u32 BitMask);
-
-void PHY_SetRFReg_8723B(struct adapter *Adapter, u8 eRFPath,
- u32 RegAddr, u32 BitMask, u32 Data);
-
-/* MAC/BB/RF HAL config */
-int PHY_BBConfig8723B(struct adapter *Adapter);
-
-int PHY_RFConfig8723B(struct adapter *Adapter);
-
-s32 PHY_MACConfig8723B(struct adapter *padapter);
-
-void PHY_SetTxPowerIndex(struct adapter *Adapter, u32 PowerIndex,
- u8 RFPath, u8 Rate);
-
-u8 PHY_GetTxPowerIndex(struct adapter *padapter, u8 RFPath, u8 Rate,
- enum channel_width BandWidth, u8 Channel);
-
-void PHY_SetTxPowerLevel8723B(struct adapter *Adapter, u8 channel);
-
-/* Call after initialization */
-void PHY_SwChnl8723B(struct adapter *Adapter, u8 channel);
-
-void PHY_SetSwChnlBWMode8723B(struct adapter *Adapter, u8 channel,
- enum channel_width Bandwidth,
- u8 Offset40, u8 Offset80);
-
-/*--------------------------Exported Function prototype End---------------------*/
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/hal_phy_reg.h b/drivers/staging/rtl8723bs/include/hal_phy_reg.h
deleted file mode 100644
index 682cdd6655ab..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_phy_reg.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __HAL_PHY_REG_H__
-#define __HAL_PHY_REG_H__
-
-/* for PutRFRegsetting & GetRFRegSetting BitMask */
-/* if (RTL92SE_FPGA_VERIFY == 1) */
-/* define bRFRegOffsetMask 0xfff */
-/* else */
-#define bRFRegOffsetMask 0xfffff
-/* endif */
-
-#endif /* __HAL_PHY_REG_H__ */
diff --git a/drivers/staging/rtl8723bs/include/hal_pwr_seq.h b/drivers/staging/rtl8723bs/include/hal_pwr_seq.h
deleted file mode 100644
index 9639eef8a51d..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_pwr_seq.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#ifndef REALTEK_POWER_SEQUENCE_8723B
-#define REALTEK_POWER_SEQUENCE_8723B
-
-#include "HalPwrSeqCmd.h"
-
-/*
- Check document WM-20130815-JackieLau-RTL8723B_Power_Architecture v08.vsd
- There are 6 HW Power States:
- 0: POFF--Power Off
- 1: PDN--Power Down
- 2: CARDEMU--Card Emulation
- 3: ACT--Active Mode
- 4: LPS--Low Power State
- 5: SUS--Suspend
-
- The transition from different states are defined below
- TRANS_CARDEMU_TO_ACT
- TRANS_ACT_TO_CARDEMU
- TRANS_CARDEMU_TO_SUS
- TRANS_SUS_TO_CARDEMU
- TRANS_CARDEMU_TO_PDN
- TRANS_ACT_TO_LPS
- TRANS_LPS_TO_ACT
-
- TRANS_END
-*/
-#define RTL8723B_TRANS_CARDEMU_TO_ACT_STEPS 26
-#define RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS 15
-#define RTL8723B_TRANS_CARDEMU_TO_SUS_STEPS 15
-#define RTL8723B_TRANS_CARDEMU_TO_PDN_STEPS 15
-#define RTL8723B_TRANS_ACT_TO_LPS_STEPS 15
-#define RTL8723B_TRANS_LPS_TO_ACT_STEPS 15
-#define RTL8723B_TRANS_ACT_TO_SWLPS_STEPS 22
-#define RTL8723B_TRANS_SWLPS_TO_ACT_STEPS 15
-#define RTL8723B_TRANS_END_STEPS 1
-
-
-#define RTL8723B_TRANS_CARDEMU_TO_ACT \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
- {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)}, /*0x20[0] = 1b'1 enable LDOA12 MACRO block for all interface*/ \
- {0x0067, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0}, /*0x67[0] = 0 to disable BT_GPS_SEL pins*/ \
- {0x0001, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_DELAY, 1, PWRSEQ_DELAY_MS},/*Delay 1ms*/ \
- {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(5), 0}, /*0x00[5] = 1b'0 release analog Ips to digital , 1:isolation*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, (BIT(4)|BIT(3)|BIT(2)), 0},/* disable SW LPS 0x04[10]= 0 and WLSUS_EN 0x04[11]= 0*/ \
- {0x0075, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/* Disable USB suspend */ \
- {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(1), BIT(1)},/* wait till 0x04[17] = 1 power ready*/ \
- {0x0075, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), (0)},/* Enable USB suspend */ \
- {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/* release WLON reset 0x04[16]= 1*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 0},/* disable HWPDN 0x04[15]= 0*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, (BIT(4)|BIT(3)), 0},/* disable WL suspend*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/* polling until return 0*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(0), 0},/**/ \
- {0x0010, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(6), BIT(6)},/* Enable WL control XTAL setting*/ \
- {0x0049, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)},/*Enable falling edge triggering interrupt*/\
- {0x0063, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)},/*Enable GPIO9 interrupt mode*/\
- {0x0062, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0},/*Enable GPIO9 input mode*/\
- {0x0058, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/*Enable HSISR GPIO[C:0] interrupt*/\
- {0x005A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)},/*Enable HSISR GPIO9 interrupt*/\
- {0x0068, PWR_CUT_TESTCHIP_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3), BIT(3)},/*For GPIO9 internal pull high setting by test chip*/\
- {0x0069, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(6), BIT(6)},/*For GPIO9 internal pull high setting*/\
-
-
-#define RTL8723B_TRANS_ACT_TO_CARDEMU \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
- {0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0},/*0x1F[7:0] = 0 turn off RF*/ \
- {0x0049, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0},/*Enable rising edge triggering interrupt*/ \
- {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/* release WLON reset 0x04[16]= 1*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)}, /*0x04[9] = 1 turn off MAC by HW state machine*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(1), 0}, /*wait till 0x04[9] = 0 polling until return 0 to disable*/ \
- {0x0010, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(6), 0},/* Enable BT control XTAL setting*/\
- {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(5), BIT(5)}, /*0x00[5] = 1b'1 analog Ips to digital , 1:isolation*/ \
- {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0}, /*0x20[0] = 1b'0 disable LDOA12 MACRO block*/\
-
-
-#define RTL8723B_TRANS_CARDEMU_TO_SUS \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4)|BIT(3), (BIT(4)|BIT(3))}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4)}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
- {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SDIO SOP option to disable BG/MB/ACK/SWR*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)|BIT(4)}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), BIT(0)}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), 0}, /*wait power state to suspend*/
-
-#define RTL8723B_TRANS_SUS_TO_CARDEMU \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3) | BIT(7), 0}, /*clear suspend enable and power down enable*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), 0}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), BIT(1)}, /*wait power state to suspend*/\
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), 0}, /*0x04[12:11] = 2b'01enable WL suspend*/
-
-#define RTL8723B_TRANS_CARDEMU_TO_CARDDIS \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, omments here*/ \
- {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07 = 0x20 , SOP option to disable BG/MB*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(2), BIT(2)}, /*0x04[10] = 1, enable SW LPS*/ \
- {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 1}, /*0x48[16] = 1 to enable GPIO9 as EXT WAKEUP*/ \
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4)}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), BIT(0)}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), 0}, /*wait power state to suspend*/
-
-#define RTL8723B_TRANS_CARDDIS_TO_CARDEMU \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3) | BIT(7), 0}, /*clear suspend enable and power down enable*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), 0}, /*Set SDIO suspend local register*/ \
- {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), BIT(1)}, /*wait power state to suspend*/\
- {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0}, /*0x48[16] = 0 to disable GPIO9 as EXT WAKEUP*/ \
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), 0}, /*0x04[12:11] = 2b'01enable WL suspend*/\
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \
- {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0},/*PCIe DMA start*/
-
-
-#define RTL8723B_TRANS_CARDEMU_TO_PDN \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
- {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4)}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \
- {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK|PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SOP option to disable BG/MB/ACK/SWR*/ \
- {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},/* 0x04[16] = 0*/\
- {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), BIT(7)},/* 0x04[15] = 1*/
-
-#define RTL8723B_TRANS_ACT_TO_LPS \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
- {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0xFF},/*PCIe DMA stop*/ \
- {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0xFF},/*Tx Pause*/ \
- {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},/*CCK and OFDM are disabled, and clock are gated*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},/*Delay 1us*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0},/*Whole BB is reset*/ \
- {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x03},/*Reset MAC TRX*/ \
- {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0},/*check if removed later*/ \
- {0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x00},/*When driver enter Sus/ Disable, enable LOP for BT*/ \
- {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(5), BIT(5)},/*Respond TxOK to scheduler*/ \
-
-
-#define RTL8723B_TRANS_LPS_TO_ACT \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
- {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_SDIO, PWR_CMD_WRITE, 0xFF, 0x84}, /*SDIO RPWM*/\
- {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x84}, /*USB RPWM*/\
- {0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x84}, /*PCIe RPWM*/\
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS}, /*Delay*/\
- {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0}, /*. 0x08[4] = 0 switch TSF to 40M*/\
- {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(7), 0}, /*Polling 0x109[7]= 0 TSF in 40M*/\
- {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(6)|BIT(7), 0}, /*. 0x29[7:6] = 2b'00 enable BB clock*/\
- {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)}, /*. 0x101[1] = 1*/\
- {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1)|BIT(0), BIT(1)|BIT(0)}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\
- {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/
-
-
- #define RTL8723B_TRANS_ACT_TO_SWLPS \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
- {0x0194, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/*enable 32 K source*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},/*CCK and OFDM are disabled, and clock are gated*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 1},/*CCK and OFDM are enable*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},/*CCK and OFDM are disabled, and clock are gated*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 1},/*CCK and OFDM are enable*/ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},/*CCK and OFDM are disabled, and clock are gated*/ \
- {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x3F},/*Reset MAC TRX*/ \
- {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0},/*disable security engine*/ \
- {0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x40},/*When driver enter Sus/ Disable, enable LOP for BT*/ \
- {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(5), BIT(5)},/*reset dual TSF*/ \
- {0x0003, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(2), 0},/*Reset CPU*/ \
- {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0},/*Reset MCUFWDL register*/ \
- {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},/*Reset CPU IO Wrapper*/ \
- {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 1},/*Reset CPU IO Wrapper*/ \
- {0x0287, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},/*polling RXFF packet number = 0 */ \
- {0x0286, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(1), BIT(1)},/*polling RXDMA idle */ \
- {0x013D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/*Clear FW RPWM interrupt */\
- {0x0139, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/*Set FW RPWM interrupt source*/\
- {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4)},/*switch TSF to 32K*/\
- {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), BIT(7)},/*polling TSF stable*/\
- {0x0090, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/*Set FW LPS*/ \
- {0x0090, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(0), 0},/*polling FW LPS ready */
-
-
-#define RTL8723B_TRANS_SWLPS_TO_ACT \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
- {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0},/*switch TSF to 32K*/\
- {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 0},/*polling TSF stable*/\
- {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)}, /*. 0x101[1] = 1, enable security engine*/\
- {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\
- {0x06B7, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x09}, /*. reset MAC rx state machine*/\
- {0x06B4, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x86}, /*. reset MAC rx state machine*/\
- {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)},/* set CPU RAM code ready*/ \
- {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},/*Reset CPU IO Wrapper*/ \
- {0x0003, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(2), 0},/* Enable CPU*/ \
- {0x001D, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/*enable CPU IO Wrapper*/ \
- {0x0003, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(2), BIT(2)},/* Enable CPU*/ \
- {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(7), BIT(7)},/*polling FW init ready */ \
- {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(6), BIT(6)},/*polling FW init ready */ \
- {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\
- {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/
-
-#define RTL8723B_TRANS_END \
- /* format */ \
- /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, comments here*/ \
- {0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, 0, PWR_CMD_END, 0, 0},
-
-
-extern struct wlan_pwr_cfg rtl8723B_power_on_flow[RTL8723B_TRANS_CARDEMU_TO_ACT_STEPS+RTL8723B_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723B_radio_off_flow[RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723B_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723B_card_disable_flow[RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723B_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723B_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723B_card_enable_flow[RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723B_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723B_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723B_suspend_flow[RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723B_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723B_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723B_resume_flow[RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723B_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723B_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723B_hwpdn_flow[RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723B_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723B_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723B_enter_lps_flow[RTL8723B_TRANS_ACT_TO_LPS_STEPS+RTL8723B_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723B_leave_lps_flow[RTL8723B_TRANS_LPS_TO_ACT_STEPS+RTL8723B_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723B_enter_swlps_flow[RTL8723B_TRANS_ACT_TO_SWLPS_STEPS+RTL8723B_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723B_leave_swlps_flow[RTL8723B_TRANS_SWLPS_TO_ACT_STEPS+RTL8723B_TRANS_END_STEPS];
-#endif
diff --git a/drivers/staging/rtl8723bs/include/hal_sdio.h b/drivers/staging/rtl8723bs/include/hal_sdio.h
deleted file mode 100644
index 3fc8acb430e5..000000000000
--- a/drivers/staging/rtl8723bs/include/hal_sdio.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __HAL_SDIO_H_
-#define __HAL_SDIO_H_
-
-#define ffaddr2deviceId(pdvobj, addr) (pdvobj->Queue2Pipe[addr])
-
-u8 rtw_hal_sdio_max_txoqt_free_space(struct adapter *padapter);
-u8 rtw_hal_sdio_query_tx_freepage(struct adapter *padapter, u8 PageIdx, u8 RequiredPageNum);
-void rtw_hal_sdio_update_tx_freepage(struct adapter *padapter, u8 PageIdx, u8 RequiredPageNum);
-void rtw_hal_set_sdio_tx_max_length(struct adapter *padapter, u8 numHQ, u8 numNQ, u8 numLQ, u8 numPubQ);
-u32 rtw_hal_get_sdio_tx_max_length(struct adapter *padapter, u8 queue_idx);
-
-#endif /* __RTW_LED_H_ */
diff --git a/drivers/staging/rtl8723bs/include/ieee80211.h b/drivers/staging/rtl8723bs/include/ieee80211.h
deleted file mode 100644
index 9f421e4875b7..000000000000
--- a/drivers/staging/rtl8723bs/include/ieee80211.h
+++ /dev/null
@@ -1,748 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __IEEE80211_H
-#define __IEEE80211_H
-
-#include <linux/ieee80211.h>
-
-#define MGMT_QUEUE_NUM 5
-
-#define ETH_TYPE_LEN 2
-#define PAYLOAD_TYPE_LEN 1
-
-#define RTL_IOCTL_HOSTAPD (SIOCIWFIRSTPRIV + 28)
-
-/* RTL871X_IOCTL_HOSTAPD ioctl() cmd: */
-enum {
- RTL871X_HOSTAPD_FLUSH = 1,
- RTL871X_HOSTAPD_ADD_STA = 2,
- RTL871X_HOSTAPD_REMOVE_STA = 3,
- RTL871X_HOSTAPD_GET_INFO_STA = 4,
- /* REMOVED: PRISM2_HOSTAPD_RESET_TXEXC_STA = 5, */
- RTL871X_HOSTAPD_GET_WPAIE_STA = 5,
- RTL871X_SET_ENCRYPTION = 6,
- RTL871X_GET_ENCRYPTION = 7,
- RTL871X_HOSTAPD_SET_FLAGS_STA = 8,
- RTL871X_HOSTAPD_GET_RID = 9,
- RTL871X_HOSTAPD_SET_RID = 10,
- RTL871X_HOSTAPD_SET_ASSOC_AP_ADDR = 11,
- RTL871X_HOSTAPD_SET_GENERIC_ELEMENT = 12,
- RTL871X_HOSTAPD_MLME = 13,
- RTL871X_HOSTAPD_SCAN_REQ = 14,
- RTL871X_HOSTAPD_STA_CLEAR_STATS = 15,
- RTL871X_HOSTAPD_SET_BEACON = 16,
- RTL871X_HOSTAPD_SET_WPS_BEACON = 17,
- RTL871X_HOSTAPD_SET_WPS_PROBE_RESP = 18,
- RTL871X_HOSTAPD_SET_WPS_ASSOC_RESP = 19,
- RTL871X_HOSTAPD_SET_HIDDEN_SSID = 20,
- RTL871X_HOSTAPD_SET_MACADDR_ACL = 21,
- RTL871X_HOSTAPD_ACL_ADD_STA = 22,
- RTL871X_HOSTAPD_ACL_REMOVE_STA = 23,
-};
-
-/* 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 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 {
- RATEID_IDX_BGN_40M_2SS = 0,
- RATEID_IDX_BGN_40M_1SS = 1,
- RATEID_IDX_BGN_20M_2SS_BN = 2,
- RATEID_IDX_BGN_20M_1SS_BN = 3,
- RATEID_IDX_GN_N2SS = 4,
- RATEID_IDX_GN_N1SS = 5,
- RATEID_IDX_BG = 6,
- RATEID_IDX_G = 7,
- RATEID_IDX_B = 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 */
- WIRELESS_AUTO = BIT(5),
-
- /* Combination */
- /* Type for current wireless mode */
- WIRELESS_11BG = (WIRELESS_11B|WIRELESS_11G), /* tx: cck & ofdm, rx: cck & ofdm & MCS, hw: cck & ofdm */
- WIRELESS_11G_24N = (WIRELESS_11G|WIRELESS_11_24N), /* tx: ofdm & MCS, rx: ofdm & cck & MCS, hw: cck & ofdm */
- WIRELESS_11B_24N = (WIRELESS_11B|WIRELESS_11_24N), /* tx: ofdm & cck & MCS, rx: ofdm & cck & MCS, hw: ofdm & cck */
- WIRELESS_11BG_24N = (WIRELESS_11B|WIRELESS_11G|WIRELESS_11_24N), /* tx: ofdm & cck & MCS, rx: ofdm & cck & MCS, hw: ofdm & cck */
-};
-
-#define SUPPORTED_24G_NETTYPE_MSK (WIRELESS_11B | WIRELESS_11G | WIRELESS_11_24N)
-
-#define is_legacy_only(net_type) ((net_type) == ((net_type) & (WIRELESS_11BG)))
-
-#define is_supported_24g(net_type) ((net_type) & SUPPORTED_24G_NETTYPE_MSK ? true : false)
-
-#define is_supported_tx_cck(net_type) (((net_type) & (WIRELESS_11B)) ? true : false)
-#define is_supported_ht(net_type) (((net_type) & (WIRELESS_11_24N)) ? true : false)
-
-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;
-};
-
-struct ieee_param_ex {
- u32 cmd;
- u8 sta_addr[ETH_ALEN];
- u8 data[];
-};
-
-struct sta_data {
- u16 aid;
- u16 capability;
- int flags;
- u32 sta_set;
- u8 tx_supp_rates[16];
- u32 tx_supp_rates_len;
- struct ieee80211_ht_cap ht_cap;
- u64 rx_pkts;
- u64 rx_bytes;
- u64 rx_drops;
- u64 tx_pkts;
- u64 tx_bytes;
- u64 tx_drops;
-};
-
-/* this is stolen from ipw2200 driver */
-#define IEEE_IBSS_MAC_HASH_SIZE 31
-
-struct eapol {
- u8 snap[6];
- u16 ethertype;
- u8 version;
- u8 type;
- u16 length;
-} __packed;
-
-#define IEEE80211_FCS_LEN 4
-
-#define MIN_FRAG_THRESHOLD 256U
-#define MAX_FRAG_THRESHOLD 2346U
-
-/* 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) & IEEE80211_FCTL_FTYPE)
-#define WLAN_FC_GET_STYPE(fc) ((fc) & 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)
-
-/* Reason codes */
-#define WLAN_REASON_ACTIVE_ROAM 65533
-#define WLAN_REASON_JOIN_WRONG_CHANNEL 65534
-#define WLAN_REASON_EXPIRATION_CHK 65535
-
-#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
-
-
-enum {
- MGN_1M = 0x02,
- MGN_2M = 0x04,
- MGN_5_5M = 0x0B,
- MGN_6M = 0x0C,
- MGN_9M = 0x12,
- MGN_11M = 0x16,
- MGN_12M = 0x18,
- MGN_18M = 0x24,
- MGN_24M = 0x30,
- MGN_36M = 0x48,
- MGN_48M = 0x60,
- MGN_54M = 0x6C,
- MGN_MCS32 = 0x7F,
- MGN_MCS0,
- MGN_MCS1,
- MGN_MCS2,
- MGN_MCS3,
- MGN_MCS4,
- MGN_MCS5,
- MGN_MCS6,
- MGN_MCS7,
- MGN_UNKNOWN
-};
-
-#define IS_HT_RATE(_rate) (_rate >= MGN_MCS0 && _rate <= MGN_MCS31)
-#define IS_CCK_RATE(_rate) (_rate == MGN_1M || _rate == MGN_2M || _rate == MGN_5_5M || _rate == MGN_11M)
-#define IS_OFDM_RATE(_rate) (_rate >= MGN_6M && _rate <= MGN_54M && _rate != MGN_11M)
-
-
-/* NOTE: This data is for statistical purposes; not all hardware provides this
- * information for frames received. Not setting these will not cause
- * any adverse affects.
- */
-
-/* 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
-
-#define BIP_MAX_KEYID 5
-#define BIP_AAD_SIZE 20
-
-/*
- * 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
-
-/* 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
-#define IP_ARG(x) (x)
-
-#define CFG_IEEE80211_RESERVE_FCS (1<<0)
-#define CFG_IEEE80211_COMPUTE_FCS (1<<1)
-
-#define MAXTID 16
-
-#define IEEE_A (1<<0)
-#define IEEE_B (1<<1)
-#define IEEE_G (1<<2)
-#define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G)
-
-/* Action category code */
-enum {
- RTW_WLAN_CATEGORY_SPECTRUM_MGMT = 0,
- RTW_WLAN_CATEGORY_QOS = 1,
- RTW_WLAN_CATEGORY_DLS = 2,
- RTW_WLAN_CATEGORY_BACK = 3,
- RTW_WLAN_CATEGORY_PUBLIC = 4, /* IEEE 802.11 public action frames */
- RTW_WLAN_CATEGORY_RADIO_MEASUREMENT = 5,
- RTW_WLAN_CATEGORY_FT = 6,
- RTW_WLAN_CATEGORY_HT = 7,
- RTW_WLAN_CATEGORY_SA_QUERY = 8,
- RTW_WLAN_CATEGORY_UNPROTECTED_WNM = 11,
- RTW_WLAN_CATEGORY_TDLS = 12,
- RTW_WLAN_CATEGORY_SELF_PROTECTED = 15,
- RTW_WLAN_CATEGORY_WMM = 17,
- RTW_WLAN_CATEGORY_P2P = 0x7f,/* P2P action frames */
-};
-
-enum {
- 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 OUI (also used in Wi-Fi specs) */
-#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 {
- /* enum nl80211_band band; */
- /* u16 center_freq; */
- u16 hw_value;
- u32 flags;
- /* int max_antenna_gain; */
- /* int max_power; */
- /* int max_reg_power; */
- /* bool beacon_found; */
- /* u32 orig_flags; */
- /* int orig_mag; */
- /* int orig_mpwr; */
-};
-
-/* 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;
- u8 *vht_capabilities;
- u8 vht_capabilities_len;
- u8 *vht_operation;
- u8 vht_operation_len;
- u8 *vht_op_mode_notify;
- u8 vht_op_mode_notify_len;
-};
-
-enum parse_result {
- PARSE_OK = 0,
- PARSE_UNKNOWN = 1,
- PARSE_FAILED = -1
-};
-
-enum parse_result 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, signed int index, uint len, u8 *source, uint *frlen);
-
-u8 *rtw_get_ie(u8 *pbuf, signed int index, signed int *len, signed int limit);
-u8 *rtw_get_ie_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui, u8 oui_len, u8 *ie, uint *ielen);
-int rtw_ies_remove_ie(u8 *ies, uint *ies_len, uint offset, u8 eid, u8 *oui, u8 oui_len);
-
-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);
-
-void rtw_get_sec_ie(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len, u8 *wpa_ie, u16 *wpa_len);
-
-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))
-
-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 channel);
-
-void rtw_get_bcn_info(struct wlan_network *pnetwork);
-
-void rtw_macaddr_cfg(struct device *dev, u8 *mac_addr);
-
-u16 rtw_mcs_rate(u8 bw_40MHz, u8 short_GI, unsigned char *MCS_rate);
-
-int rtw_action_frame_parse(const u8 *frame, u32 frame_len, u8 *category, u8 *action);
-const char *action_public_str(u8 action);
-
-#endif /* IEEE80211_H */
diff --git a/drivers/staging/rtl8723bs/include/ioctl_cfg80211.h b/drivers/staging/rtl8723bs/include/ioctl_cfg80211.h
deleted file mode 100644
index a1fc18cd247b..000000000000
--- a/drivers/staging/rtl8723bs/include/ioctl_cfg80211.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __IOCTL_CFG80211_H__
-#define __IOCTL_CFG80211_H__
-
-struct rtw_wdev_priv {
- struct wireless_dev *rtw_wdev;
-
- struct adapter *padapter;
-
- struct cfg80211_scan_request *scan_request;
- spinlock_t scan_req_lock;
-
- struct net_device *pmon_ndev;/* for monitor interface */
- char ifname_mon[IFNAMSIZ + 1]; /* interface name for monitor interface */
-
- bool block;
- bool power_mgmt;
-};
-
-#define wiphy_to_adapter(x) (*((struct adapter **)wiphy_priv(x)))
-
-#define wdev_to_ndev(w) ((w)->netdev)
-
-int rtw_wdev_alloc(struct adapter *padapter, struct device *dev);
-void rtw_wdev_free(struct wireless_dev *wdev);
-void rtw_wdev_unregister(struct wireless_dev *wdev);
-
-void rtw_cfg80211_init_wiphy(struct adapter *padapter);
-
-void rtw_cfg80211_unlink_bss(struct adapter *padapter, struct wlan_network *pnetwork);
-void rtw_cfg80211_surveydone_event_callback(struct adapter *padapter);
-int rtw_ieee80211_channel_to_frequency(int chan);
-struct cfg80211_bss *rtw_cfg80211_inform_bss(struct adapter *padapter, struct wlan_network *pnetwork);
-int rtw_cfg80211_check_bss(struct adapter *padapter);
-void rtw_cfg80211_ibss_indicate_connect(struct adapter *padapter);
-void rtw_cfg80211_indicate_connect(struct adapter *padapter);
-void rtw_cfg80211_indicate_disconnect(struct adapter *padapter);
-void rtw_cfg80211_indicate_scan_done(struct adapter *adapter, bool aborted);
-
-void rtw_cfg80211_indicate_sta_assoc(struct adapter *padapter, u8 *pmgmt_frame, unsigned int frame_len);
-void rtw_cfg80211_indicate_sta_disassoc(struct adapter *padapter, unsigned char *da, unsigned short reason);
-
-void rtw_cfg80211_rx_action(struct adapter *adapter, u8 *frame, unsigned int frame_len, const char *msg);
-
-bool rtw_cfg80211_pwr_mgmt(struct adapter *adapter);
-
-#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, 0)
-#define rtw_cfg80211_send_rx_assoc(adapter, bss, buf, len) cfg80211_send_rx_assoc((adapter)->pnetdev, bss, buf, len)
-#define rtw_cfg80211_mgmt_tx_status(adapter, cookie, buf, len, ack, gfp) cfg80211_mgmt_tx_status((adapter)->rtw_wdev, cookie, buf, len, ack, gfp)
-#define rtw_cfg80211_ready_on_channel(adapter, cookie, chan, channel_type, duration, gfp) cfg80211_ready_on_channel((adapter)->rtw_wdev, cookie, chan, duration, gfp)
-#define rtw_cfg80211_remain_on_channel_expired(adapter, cookie, chan, chan_type, gfp) cfg80211_remain_on_channel_expired((adapter)->rtw_wdev, cookie, chan, gfp)
-
-#endif /* __IOCTL_CFG80211_H__ */
diff --git a/drivers/staging/rtl8723bs/include/osdep_intf.h b/drivers/staging/rtl8723bs/include/osdep_intf.h
deleted file mode 100644
index 83a25598e962..000000000000
--- a/drivers/staging/rtl8723bs/include/osdep_intf.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef __OSDEP_INTF_H_
-#define __OSDEP_INTF_H_
-
-struct dvobj_priv *devobj_init(void);
-void devobj_deinit(struct dvobj_priv *pdvobj);
-
-u8 rtw_init_drv_sw(struct adapter *padapter);
-u8 rtw_free_drv_sw(struct adapter *padapter);
-void rtw_reset_drv_sw(struct adapter *padapter);
-void rtw_dev_unload(struct adapter *padapter);
-
-u32 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);
-void rtw_unregister_netdevs(struct dvobj_priv *dvobj);
-
-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);
-
-int rtw_drv_register_netdev(struct adapter *padapter);
-void rtw_ndev_destructor(struct net_device *ndev);
-
-void rtw_suspend_common(struct adapter *padapter);
-int rtw_resume_common(struct adapter *padapter);
-
-int netdev_open(struct net_device *pnetdev);
-
-#endif /* _OSDEP_INTF_H_ */
diff --git a/drivers/staging/rtl8723bs/include/osdep_service.h b/drivers/staging/rtl8723bs/include/osdep_service.h
deleted file mode 100644
index 2f5011a8210c..000000000000
--- a/drivers/staging/rtl8723bs/include/osdep_service.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2013 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __OSDEP_SERVICE_H_
-#define __OSDEP_SERVICE_H_
-
-
-#define _FAIL 0
-#define _SUCCESS 1
-#define RTW_RX_HANDLED 2
-
-#include <osdep_service_linux.h>
-
-
-extern int RTW_STATUS_CODE(int error_code);
-
-int _rtw_netif_rx(struct net_device *ndev, struct sk_buff *skb);
-
-#define rtw_netif_rx(ndev, skb) _rtw_netif_rx(ndev, skb)
-
-static inline void flush_signals_thread(void)
-{
- if (signal_pending(current))
- flush_signals(current);
-}
-
-#define _RND(sz, r) ((((sz)+((r)-1))/(r))*(r))
-
-extern void rtw_free_netdev(struct net_device *netdev);
-
-/* Macros for handling unaligned memory accesses */
-
-void rtw_buf_free(u8 **buf, u32 *buf_len);
-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_full(struct rtw_cbuf *cbuf);
-bool rtw_cbuf_empty(struct rtw_cbuf *cbuf);
-bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf);
-void *rtw_cbuf_pop(struct rtw_cbuf *cbuf);
-struct rtw_cbuf *rtw_cbuf_alloc(u32 size);
-
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/osdep_service_linux.h b/drivers/staging/rtl8723bs/include/osdep_service_linux.h
deleted file mode 100644
index c8274da940ff..000000000000
--- a/drivers/staging/rtl8723bs/include/osdep_service_linux.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2013 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __OSDEP_LINUX_SERVICE_H_
-#define __OSDEP_LINUX_SERVICE_H_
-
-#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/uaccess.h>
-#include <asm/byteorder.h>
-#include <linux/atomic.h>
-#include <linux/io.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/interrupt.h> /* for struct tasklet_struct */
-#include <linux/ip.h>
-#include <linux/kthread.h>
-#include <linux/list.h>
-#include <linux/vmalloc.h>
-
-#include <net/ieee80211_radiotap.h>
-#include <net/cfg80211.h>
-
-struct __queue {
- struct list_head queue;
- spinlock_t lock;
-};
-
-static inline struct list_head *get_next(struct list_head *list)
-{
- return list->next;
-}
-
-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 + (delay_time * HZ / 1000)));
-}
-
-static inline void _init_workitem(struct work_struct *pwork, void *pfunc, void *cntx)
-{
- INIT_WORK(pwork, pfunc);
-}
-
-static inline void _set_workitem(struct work_struct *pwork)
-{
- schedule_work(pwork);
-}
-
-static inline void _cancel_workitem_sync(struct work_struct *pwork)
-{
- cancel_work_sync(pwork);
-}
-
-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)));
-}
-
-static inline void rtw_netif_wake_queue(struct net_device *pnetdev)
-{
- netif_tx_wake_all_queues(pnetdev);
-}
-
-static inline void rtw_netif_start_queue(struct net_device *pnetdev)
-{
- netif_tx_start_all_queues(pnetdev);
-}
-
-static inline void rtw_netif_stop_queue(struct net_device *pnetdev)
-{
- netif_tx_stop_all_queues(pnetdev);
-}
-
-#define rtw_signal_process(pid, sig) kill_pid(find_vpid((pid)), (sig), 1)
-
-#define ADPT_ARG(adapter) adapter->pnetdev->name
-#define FUNC_ADPT_FMT "%s(%s)"
-#define FUNC_ADPT_ARG(adapter) __func__, adapter->pnetdev->name
-
-struct rtw_netdev_priv_indicator {
- void *priv;
- u32 sizeof_priv;
-};
-
-static inline struct adapter *rtw_netdev_priv(struct net_device *netdev)
-{
- return ((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv;
-}
-
-struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, void *old_priv);
-extern struct net_device *rtw_alloc_etherdev(int sizeof_priv);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtl8192c_recv.h b/drivers/staging/rtl8723bs/include/rtl8192c_recv.h
deleted file mode 100644
index b63625ab4e45..000000000000
--- a/drivers/staging/rtl8723bs/include/rtl8192c_recv.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef _RTL8192C_RECV_H_
-#define _RTL8192C_RECV_H_
-
-#define MAX_RECVBUF_SZ (10240)
-
-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)
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_cmd.h b/drivers/staging/rtl8723bs/include/rtl8723b_cmd.h
deleted file mode 100644
index 6b2d79e19088..000000000000
--- a/drivers/staging/rtl8723bs/include/rtl8723b_cmd.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTL8723B_CMD_H__
-#define __RTL8723B_CMD_H__
-
-/* */
-/* H2C CMD DEFINITION ------------------------------------------------ */
-/* */
-
-enum {
- /* Common Class: 000 */
- H2C_8723B_RSVD_PAGE = 0x00,
- H2C_8723B_MEDIA_STATUS_RPT = 0x01,
- H2C_8723B_SCAN_ENABLE = 0x02,
- H2C_8723B_KEEP_ALIVE = 0x03,
- H2C_8723B_DISCON_DECISION = 0x04,
- H2C_8723B_PSD_OFFLOAD = 0x05,
- H2C_8723B_AP_OFFLOAD = 0x08,
- H2C_8723B_BCN_RSVDPAGE = 0x09,
- H2C_8723B_PROBERSP_RSVDPAGE = 0x0A,
- H2C_8723B_FCS_RSVDPAGE = 0x10,
- H2C_8723B_FCS_INFO = 0x11,
- H2C_8723B_AP_WOW_GPIO_CTRL = 0x13,
-
- /* PoweSave Class: 001 */
- H2C_8723B_SET_PWR_MODE = 0x20,
- H2C_8723B_PS_TUNING_PARA = 0x21,
- H2C_8723B_PS_TUNING_PARA2 = 0x22,
- H2C_8723B_P2P_LPS_PARAM = 0x23,
- H2C_8723B_P2P_PS_OFFLOAD = 0x24,
- H2C_8723B_PS_SCAN_ENABLE = 0x25,
- H2C_8723B_SAP_PS_ = 0x26,
- H2C_8723B_INACTIVE_PS_ = 0x27, /* Inactive_PS */
- H2C_8723B_FWLPS_IN_IPS_ = 0x28,
-
- /* Dynamic Mechanism Class: 010 */
- H2C_8723B_MACID_CFG = 0x40,
- H2C_8723B_TXBF = 0x41,
- H2C_8723B_RSSI_SETTING = 0x42,
- H2C_8723B_AP_REQ_TXRPT = 0x43,
- H2C_8723B_INIT_RATE_COLLECT = 0x44,
-
- /* BT Class: 011 */
- H2C_8723B_B_TYPE_TDMA = 0x60,
- H2C_8723B_BT_INFO = 0x61,
- H2C_8723B_FORCE_BT_TXPWR = 0x62,
- H2C_8723B_BT_IGNORE_WLANACT = 0x63,
- H2C_8723B_DAC_SWING_VALUE = 0x64,
- H2C_8723B_ANT_SEL_RSV = 0x65,
- H2C_8723B_WL_OPMODE = 0x66,
- H2C_8723B_BT_MP_OPER = 0x67,
- H2C_8723B_BT_CONTROL = 0x68,
- H2C_8723B_BT_WIFI_CTRL = 0x69,
- H2C_8723B_BT_FW_PATCH = 0x6A,
- H2C_8723B_BT_WLAN_CALIBRATION = 0x6D,
-
- /* WOWLAN Class: 100 */
- H2C_8723B_WOWLAN = 0x80,
- H2C_8723B_REMOTE_WAKE_CTRL = 0x81,
- H2C_8723B_AOAC_GLOBAL_INFO = 0x82,
- H2C_8723B_AOAC_RSVD_PAGE = 0x83,
- H2C_8723B_AOAC_RSVD_PAGE2 = 0x84,
- H2C_8723B_D0_SCAN_OFFLOAD_CTRL = 0x85,
- H2C_8723B_D0_SCAN_OFFLOAD_INFO = 0x86,
- H2C_8723B_CHNL_SWITCH_OFFLOAD = 0x87,
-
- H2C_8723B_RESET_TSF = 0xC0,
- H2C_8723B_MAXID,
-};
-/* */
-/* H2C CMD CONTENT -------------------------------------------------- */
-/* */
-/* _RSVDPAGE_LOC_CMD_0x00 */
-#define SET_8723B_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd, 0, 8, __Value)
-#define SET_8723B_H2CCMD_RSVDPAGE_LOC_PSPOLL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+1, 0, 8, __Value)
-#define SET_8723B_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+2, 0, 8, __Value)
-#define SET_8723B_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+3, 0, 8, __Value)
-#define SET_8723B_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+4, 0, 8, __Value)
-
-/* _MEDIA_STATUS_RPT_PARM_CMD_0x01 */
-#define SET_8723B_H2CCMD_MSRRPT_PARM_OPMODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
-#define SET_8723B_H2CCMD_MSRRPT_PARM_MACID_IND(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
-#define SET_8723B_H2CCMD_MSRRPT_PARM_MACID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd+1, 0, 8, __Value)
-#define SET_8723B_H2CCMD_MSRRPT_PARM_MACID_END(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd+2, 0, 8, __Value)
-
-/* _KEEP_ALIVE_CMD_0x03 */
-#define SET_8723B_H2CCMD_KEEPALIVE_PARM_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
-#define SET_8723B_H2CCMD_KEEPALIVE_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
-#define SET_8723B_H2CCMD_KEEPALIVE_PARM_PKT_TYPE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value)
-#define SET_8723B_H2CCMD_KEEPALIVE_PARM_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd+1, 0, 8, __Value)
-
-/* _DISCONNECT_DECISION_CMD_0x04 */
-#define SET_8723B_H2CCMD_DISCONDECISION_PARM_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value)
-#define SET_8723B_H2CCMD_DISCONDECISION_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value)
-#define SET_8723B_H2CCMD_DISCONDECISION_PARM_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd+1, 0, 8, __Value)
-#define SET_8723B_H2CCMD_DISCONDECISION_PARM_TRY_PKT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd+2, 0, 8, __Value)
-
-/* _PWR_MOD_CMD_0x20 */
-#define SET_8723B_H2CCMD_PWRMODE_PARM_MODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd, 0, 8, __Value)
-#define SET_8723B_H2CCMD_PWRMODE_PARM_RLBM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 4, __Value)
-#define SET_8723B_H2CCMD_PWRMODE_PARM_SMART_PS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 4, 4, __Value)
-#define SET_8723B_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+2, 0, 8, __Value)
-#define SET_8723B_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+3, 0, 8, __Value)
-#define SET_8723B_H2CCMD_PWRMODE_PARM_PWR_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+4, 0, 8, __Value)
-#define SET_8723B_H2CCMD_PWRMODE_PARM_BYTE5(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT((__pH2CCmd)+5, 0, 8, __Value)
-
-#define GET_8723B_H2CCMD_PWRMODE_PARM_MODE(__pH2CCmd) LE_BITS_TO_1BYTE(__pH2CCmd, 0, 8)
-
-/* _PS_TUNE_PARAM_CMD_0x21 */
-#define SET_8723B_H2CCMD_PSTUNE_PARM_BCN_TO_LIMIT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
-#define SET_8723B_H2CCMD_PSTUNE_PARM_DTIM_TIMEOUT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value)
-#define SET_8723B_H2CCMD_PSTUNE_PARM_ADOPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 1, __Value)
-#define SET_8723B_H2CCMD_PSTUNE_PARM_PS_TIMEOUT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 1, 7, __Value)
-#define SET_8723B_H2CCMD_PSTUNE_PARM_DTIM_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+3, 0, 8, __Value)
-
-/* _MACID_CFG_CMD_0x40 */
-#define SET_8723B_H2CCMD_MACID_CFG_MACID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
-#define SET_8723B_H2CCMD_MACID_CFG_RAID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 5, __Value)
-#define SET_8723B_H2CCMD_MACID_CFG_SGI_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 7, 1, __Value)
-#define SET_8723B_H2CCMD_MACID_CFG_BW(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 2, __Value)
-#define SET_8723B_H2CCMD_MACID_CFG_NO_UPDATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 3, 1, __Value)
-#define SET_8723B_H2CCMD_MACID_CFG_VHT_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 4, 2, __Value)
-#define SET_8723B_H2CCMD_MACID_CFG_DISPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 6, 1, __Value)
-#define SET_8723B_H2CCMD_MACID_CFG_DISRA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 7, 1, __Value)
-#define SET_8723B_H2CCMD_MACID_CFG_RATE_MASK0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+3, 0, 8, __Value)
-#define SET_8723B_H2CCMD_MACID_CFG_RATE_MASK1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+4, 0, 8, __Value)
-#define SET_8723B_H2CCMD_MACID_CFG_RATE_MASK2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+5, 0, 8, __Value)
-#define SET_8723B_H2CCMD_MACID_CFG_RATE_MASK3(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+6, 0, 8, __Value)
-
-/* _RSSI_SETTING_CMD_0x42 */
-#define SET_8723B_H2CCMD_RSSI_SETTING_MACID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
-#define SET_8723B_H2CCMD_RSSI_SETTING_RSSI(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 7, __Value)
-#define SET_8723B_H2CCMD_RSSI_SETTING_ULDL_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+3, 0, 8, __Value)
-
-/* _AP_REQ_TXRPT_CMD_0x43 */
-#define SET_8723B_H2CCMD_APREQRPT_PARM_MACID1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value)
-#define SET_8723B_H2CCMD_APREQRPT_PARM_MACID2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value)
-
-/* _FORCE_BT_TXPWR_CMD_0x62 */
-#define SET_8723B_H2CCMD_BT_PWR_IDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd, 0, 8, __Value)
-
-/* _FORCE_BT_MP_OPER_CMD_0x67 */
-#define SET_8723B_H2CCMD_BT_MPOPER_VER(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value)
-#define SET_8723B_H2CCMD_BT_MPOPER_REQNUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 4, __Value)
-#define SET_8723B_H2CCMD_BT_MPOPER_IDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value)
-#define SET_8723B_H2CCMD_BT_MPOPER_PARAM1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 8, __Value)
-#define SET_8723B_H2CCMD_BT_MPOPER_PARAM2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+3, 0, 8, __Value)
-#define SET_8723B_H2CCMD_BT_MPOPER_PARAM3(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+4, 0, 8, __Value)
-
-/* _BT_FW_PATCH_0x6A */
-#define SET_8723B_H2CCMD_BT_FW_PATCH_SIZE(__pH2CCmd, __Value) SET_BITS_TO_LE_2BYTE((u8 *)(__pH2CCmd), 0, 16, __Value)
-#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value)
-#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value)
-#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value)
-#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR3(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value)
-
-/* */
-/* Function Statement -------------------------------------------------- */
-/* */
-
-/* host message to firmware cmd */
-void rtl8723b_set_FwPwrMode_cmd(struct adapter *padapter, u8 Mode);
-void rtl8723b_set_FwJoinBssRpt_cmd(struct adapter *padapter, u8 mstatus);
-void rtl8723b_set_rssi_cmd(struct adapter *padapter, u8 *param);
-void rtl8723b_Add_RateATid(struct adapter *padapter, u32 bitmap, u8 *arg, u8 rssi_level);
-void rtl8723b_fw_try_ap_cmd(struct adapter *padapter, u32 need_ack);
-/* s32 rtl8723b_set_lowpwr_lps_cmd(struct adapter *padapter, u8 enable); */
-void rtl8723b_set_FwPsTuneParam_cmd(struct adapter *padapter);
-void rtl8723b_set_FwMacIdConfig_cmd(struct adapter *padapter, u8 mac_id, u8 raid, u8 bw, u8 sgi, u32 mask);
-void rtl8723b_set_FwMediaStatusRpt_cmd(struct adapter *padapter, u8 mstatus, u8 macid);
-void rtl8723b_download_rsvd_page(struct adapter *padapter, u8 mstatus);
-void rtl8723b_download_BTCoex_AP_mode_rsvd_page(struct adapter *padapter);
-
-void rtl8723b_set_FwPwrModeInIPS_cmd(struct adapter *padapter, u8 cmd_param);
-
-s32 FillH2CCmd8723B(struct adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_dm.h b/drivers/staging/rtl8723bs/include/rtl8723b_dm.h
deleted file mode 100644
index 50ab7aed079e..000000000000
--- a/drivers/staging/rtl8723bs/include/rtl8723b_dm.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTL8723B_DM_H__
-#define __RTL8723B_DM_H__
-/* */
-/* Description: */
-/* */
-/* This file is for 8723B dynamic mechanism only */
-/* */
-/* */
-/* */
-
-/* */
-/* structure and define */
-/* */
-
-/* */
-/* function prototype */
-/* */
-
-void rtl8723b_init_dm_priv(struct adapter *padapter);
-
-void rtl8723b_InitHalDm(struct adapter *padapter);
-void rtl8723b_HalDmWatchDog(struct adapter *padapter);
-void rtl8723b_HalDmWatchDog_in_LPS(struct adapter *padapter);
-void rtl8723b_hal_dm_in_lps(struct adapter *padapter);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_hal.h b/drivers/staging/rtl8723bs/include/rtl8723b_hal.h
deleted file mode 100644
index c442f01aa585..000000000000
--- a/drivers/staging/rtl8723bs/include/rtl8723b_hal.h
+++ /dev/null
@@ -1,246 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTL8723B_HAL_H__
-#define __RTL8723B_HAL_H__
-
-#include "hal_data.h"
-
-#include "rtl8723b_spec.h"
-#include "rtl8723b_rf.h"
-#include "rtl8723b_dm.h"
-#include "rtl8723b_recv.h"
-#include "rtl8723b_xmit.h"
-#include "rtl8723b_cmd.h"
-#include "hal_pwr_seq.h"
-#include "Hal8192CPhyReg.h"
-#include "hal_phy_cfg.h"
-
-/* */
-/* RTL8723B From header */
-/* */
-
-#define FW_8723B_SIZE 0x8000
-#define FW_8723B_START_ADDRESS 0x1000
-#define FW_8723B_END_ADDRESS 0x1FFF /* 0x5FFF */
-
-#define IS_FW_HEADER_EXIST_8723B(fw_hdr) \
- ((le16_to_cpu(fw_hdr->signature) & 0xFFF0) == 0x5300)
-
-struct rt_firmware {
- u32 fw_length;
- u8 *fw_buffer_sz;
-};
-
-/* This structure must be carefully byte-ordered. */
-struct rt_firmware_hdr {
- /* 8-byte alignment required */
-
- /* LONG WORD 0 ---- */
- __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 indications,
- * for further use when driver needs to download
- * different FW in different conditions.
- */
- __le16 version; /* FW Version */
- __le16 subversion; /* FW Subversion, default 0x00 */
-
- /* LONG WORD 1 ---- */
- 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 ram_code_size; /* The size of RAM code */
- __le16 rsvd2;
-
- /* LONG WORD 2 ---- */
- __le32 svn_idx; /* The SVN entry index */
- __le32 rsvd3;
-
- /* LONG WORD 3 ---- */
- __le32 rsvd4;
- __le32 rsvd5;
-};
-
-#define DRIVER_EARLY_INT_TIME_8723B 0x05
-#define BCN_DMA_ATIME_INT_TIME_8723B 0x02
-
-/* REG_TBTT_PROHIBIT (0x0540) - TBTT prohibit hold/setup in 32us units */
-#define TBTT_PROHIBIT_SETUP_8723B 0x04
-#define TBTT_PROHIBIT_HOLD_8723B 0x64
-#define TBTT_PROHIBIT_TIME_8723B \
- ((TBTT_PROHIBIT_HOLD_8723B << 8) | TBTT_PROHIBIT_SETUP_8723B)
-
-/* REG_BCNTCFG (0x0510) - beacon AIFS, CWmin, CWmax (EDCA-like layout) */
-#define BCN_AIFS_8723B 0x0F
-#define BCN_CW_MIN_8723B 0x06
-#define BCN_CW_MAX_8723B 0x06
-#define BCNTCFG_8723B \
- ((BCN_CW_MAX_8723B << 12) | (BCN_CW_MIN_8723B << 8) | BCN_AIFS_8723B)
-
-/* for 8723B */
-/* TX 32K, RX 16K, Page size 128B for TX, 8B for RX */
-#define PAGE_SIZE_TX_8723B 128
-#define PAGE_SIZE_RX_8723B 8
-
-#define RX_DMA_SIZE_8723B 0x4000 /* 16K */
-#define RX_DMA_RESERVED_SIZE_8723B 0x80 /* 128B, reserved for tx report */
-#define RX_DMA_BOUNDARY_8723B \
- (RX_DMA_SIZE_8723B - RX_DMA_RESERVED_SIZE_8723B - 1)
-
-/* Note: We will divide number of pages equally for each queue other than the
- * public queue!
- */
-
-/* For General Reserved Page Number(Beacon Queue is reserved page) */
-/* Beacon:2, PS-Poll:1, Null Data:1, Qos Null Data:1, BT Qos Null Data:1 */
-#define BCNQ_PAGE_NUM_8723B 0x08
-#define BCNQ1_PAGE_NUM_8723B 0x00
-
-#define MAX_RX_DMA_BUFFER_SIZE_8723B 0x2800 /* RX 10K */
-
-/* For WoWLan, more reserved page */
-/* ARP Rsp:1, RWC:1, GTK Info:1, GTK RSP:2, GTK EXT MEM:2, PNO: 6 */
-#define WOWLAN_PAGE_NUM_8723B 0x00
-
-#define TX_TOTAL_PAGE_NUMBER_8723B \
- (0xFF - BCNQ_PAGE_NUM_8723B - \
- BCNQ1_PAGE_NUM_8723B - \
- WOWLAN_PAGE_NUM_8723B)
-#define TX_PAGE_BOUNDARY_8723B (TX_TOTAL_PAGE_NUMBER_8723B + 1)
-
-#define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER_8723B TX_TOTAL_PAGE_NUMBER_8723B
-#define WMM_NORMAL_TX_PAGE_BOUNDARY_8723B \
- (WMM_NORMAL_TX_TOTAL_PAGE_NUMBER_8723B + 1)
-
-/* For Normal Chip Setting */
-/* (HPQ + LPQ + NPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER_8723B */
-#define NORMAL_PAGE_NUM_HPQ_8723B 0x0C
-#define NORMAL_PAGE_NUM_LPQ_8723B 0x02
-#define NORMAL_PAGE_NUM_NPQ_8723B 0x02
-
-/* Note: For Normal Chip Setting, modify later */
-#define WMM_NORMAL_PAGE_NUM_HPQ_8723B 0x30
-#define WMM_NORMAL_PAGE_NUM_LPQ_8723B 0x20
-#define WMM_NORMAL_PAGE_NUM_NPQ_8723B 0x20
-
-#include "hal_com.h"
-
-#define EFUSE_OOB_PROTECT_BYTES 15
-
-#define HAL_EFUSE_MEMORY
-
-#define HWSET_MAX_SIZE_8723B 512
-#define EFUSE_REAL_CONTENT_LEN_8723B 512
-#define EFUSE_MAP_LEN_8723B 512
-#define EFUSE_MAX_SECTION_8723B 64
-
-#define EFUSE_IC_ID_OFFSET 506 /* For some inferiority IC purpose.
- * Added by Roger, 2009.09.02.
- */
-#define AVAILABLE_EFUSE_ADDR(addr) (addr < EFUSE_REAL_CONTENT_LEN_8723B)
-
-#define EFUSE_ACCESS_ON 0x69 /* For RTL8723 only. */
-#define EFUSE_ACCESS_OFF 0x00 /* For RTL8723 only. */
-
-/* */
-/* EFUSE for BT definition */
-/* */
-#define EFUSE_BT_REAL_BANK_CONTENT_LEN 512
-#define EFUSE_BT_REAL_CONTENT_LEN 1536 /* 512*3 */
-#define EFUSE_BT_MAP_LEN 1024 /* 1k bytes */
-#define EFUSE_BT_MAX_SECTION 128 /* 1024/8 */
-
-#define EFUSE_PROTECT_BYTES_BANK 16
-
-/* Description: Determine the types of C2H events that are the same in driver
- * and FW; First constructed by tynli. 2009.10.09.
- */
-enum {
- C2H_DBG = 0,
- C2H_TSF = 1,
- C2H_AP_RPT_RSP = 2,
- C2H_CCX_TX_RPT = 3, /* The FW notify the report
- * of the specific tx packet.
- */
- C2H_BT_RSSI = 4,
- C2H_BT_OP_MODE = 5,
- C2H_EXT_RA_RPT = 6,
- C2H_8723B_BT_INFO = 9,
- C2H_HW_INFO_EXCH = 10,
- C2H_8723B_BT_MP_INFO = 11,
- MAX_C2HEVENT
-};
-
-struct c2h_evt_hdr_t {
- u8 CmdID;
- u8 CmdLen;
- u8 CmdSeq;
-} __packed;
-
-enum { /* tag_Package_Definition */
- PACKAGE_DEFAULT,
- PACKAGE_QFN68,
- PACKAGE_TFBGA90,
- PACKAGE_TFBGA80,
- PACKAGE_TFBGA79
-};
-
-/* rtl8723a_hal_init.c */
-s32 rtl8723b_FirmwareDownload(struct adapter *padapter, bool bUsedWoWLANFw);
-void rtl8723b_FirmwareSelfReset(struct adapter *padapter);
-void rtl8723b_InitializeFirmwareVars(struct adapter *padapter);
-
-void rtl8723b_InitAntenna_Selection(struct adapter *padapter);
-void rtl8723b_init_default_value(struct adapter *padapter);
-
-s32 rtl8723b_InitLLTTable(struct adapter *padapter);
-
-/* EFuse */
-u8 GetEEPROMSize8723B(struct adapter *padapter);
-void Hal_InitPGData(struct adapter *padapter, u8 *PROMContent);
-void Hal_EfuseParseIDCode(struct adapter *padapter, u8 *hwinfo);
-void Hal_EfuseParseTxPowerInfo_8723B(struct adapter *padapter, u8 *PROMContent,
- bool AutoLoadFail);
-void Hal_EfuseParseBTCoexistInfo_8723B(struct adapter *padapter, u8 *hwinfo,
- bool AutoLoadFail);
-void Hal_EfuseParseChnlPlan_8723B(struct adapter *padapter, u8 *hwinfo,
- bool AutoLoadFail);
-void Hal_EfuseParseXtal_8723B(struct adapter *padapter, u8 *hwinfo,
- bool AutoLoadFail);
-void Hal_EfuseParseThermalMeter_8723B(struct adapter *padapter, u8 *hwinfo,
- u8 AutoLoadFail);
-void Hal_EfuseParsePackageType_8723B(struct adapter *padapter, u8 *hwinfo,
- bool AutoLoadFail);
-void Hal_EfuseParseVoltage_8723B(struct adapter *padapter, u8 *hwinfo,
- bool AutoLoadFail);
-
-void C2HPacketHandler_8723B(struct adapter *padapter, u8 *pbuffer, u16 length);
-
-void SetHwReg8723B(struct adapter *padapter, u8 variable, u8 *val);
-void GetHwReg8723B(struct adapter *padapter, u8 variable, u8 *val);
-u8 GetHalDefVar8723B(struct adapter *padapter, enum hal_def_variable variable,
- void *pval);
-
-/* register */
-void rtl8723b_InitBeaconParameters(struct adapter *padapter);
-void _InitBurstPktLen_8723BS(struct adapter *adapter);
-void _8051Reset8723(struct adapter *padapter);
-
-int FirmwareDownloadBT(struct adapter *adapter, struct rt_firmware *firmware);
-
-void CCX_FwC2HTxRpt_8723b(struct adapter *padapter, u8 *pdata, u8 len);
-s32 c2h_id_filter_ccx_8723b(u8 *buf);
-s32 c2h_handler_8723b(struct adapter *padapter, u8 *pC2hEvent);
-
-void Hal_ReadRFGainOffset(struct adapter *padapter, u8 *hwinfo,
- bool AutoLoadFail);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_recv.h b/drivers/staging/rtl8723bs/include/rtl8723b_recv.h
deleted file mode 100644
index e9ebecb224a6..000000000000
--- a/drivers/staging/rtl8723bs/include/rtl8723b_recv.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTL8723B_RECV_H__
-#define __RTL8723B_RECV_H__
-
-#include <rtl8192c_recv.h>
-
-struct rxreport_8723b {
- /* DWORD 0 */
- u32 pktlen:14;
- u32 crc32:1;
- u32 icverr:1;
- u32 drvinfosize:4;
- u32 security:3;
- u32 qos:1;
- u32 shift:2;
- u32 physt:1;
- u32 swdec:1;
- u32 rsvd0028:2;
- u32 eor:1;
- u32 rsvd0031:1;
-
- /* DWORD 1 */
- u32 macid:7;
- u32 rsvd0407:1;
- u32 tid:4;
- u32 macid_vld:1;
- u32 amsdu:1;
- u32 rxid_match:1;
- u32 paggr:1;
- u32 a1fit:4;
- u32 chkerr:1; /* 20 */
- u32 rx_ipv:1;
- u32 rx_is_tcp_udp:1;
- u32 chk_vld:1; /* 23 */
- u32 pam:1;
- u32 pwr:1;
- u32 md:1;
- u32 mf:1;
- u32 type:2;
- u32 mc:1;
- u32 bc:1;
-
- /* DWORD 2 */
- u32 seq:12;
- u32 frag:4;
- u32 rx_is_qos:1;
- u32 rsvd0817:1;
- u32 wlanhd_iv_len:6;
- u32 hwrsvd0824:4;
- u32 c2h_ind:1;
- u32 rsvd0829:2;
- u32 fcs_ok:1;
-
- /* DWORD 3 */
- u32 rx_rate:7;
- u32 rsvd1207:3;
- u32 htc:1;
- u32 esop:1;
- u32 bssid_fit:2;
- u32 rsvd1214:2;
- u32 dma_agg_num:8;
- u32 rsvd1224:5;
- u32 patternmatch:1;
- u32 unicastwake:1;
- u32 magicwake:1;
-
- /* DWORD 4 */
- u32 splcp:1; /* Ofdm sgi or cck_splcp */
- u32 ldpc:1;
- u32 stbc:1;
- u32 not_sounding:1;
- u32 bw:2;
- u32 rsvd1606:26;
-
- /* DWORD 5 */
- u32 tsfl;
-};
-
-s32 rtl8723bs_init_recv_priv(struct adapter *padapter);
-void rtl8723bs_free_recv_priv(struct adapter *padapter);
-
-void rtl8723b_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat);
-void rtl8723b_process_phy_info(struct adapter *padapter, void *prframe);
-
-void rtl8723b_read_chip_version(struct adapter *padapter);
-void rtl8723bs_init_default_value(struct adapter *padapter);
-void rtl8723bs_interface_configure(struct adapter *padapter);
-void rtw_read_adapter_info(struct adapter *padapter);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_rf.h b/drivers/staging/rtl8723bs/include/rtl8723b_rf.h
deleted file mode 100644
index 525eb2facca0..000000000000
--- a/drivers/staging/rtl8723bs/include/rtl8723b_rf.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTL8723B_RF_H__
-#define __RTL8723B_RF_H__
-
-
-int PHY_RF6052_Config8723B(struct adapter *Adapter);
-
-void
-PHY_RF6052SetBandwidth8723B(struct adapter *Adapter,
- enum channel_width Bandwidth);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_spec.h b/drivers/staging/rtl8723bs/include/rtl8723b_spec.h
deleted file mode 100644
index 7f749e32a5b9..000000000000
--- a/drivers/staging/rtl8723bs/include/rtl8723b_spec.h
+++ /dev/null
@@ -1,237 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- *******************************************************************************/
-#ifndef __RTL8723B_SPEC_H__
-#define __RTL8723B_SPEC_H__
-
-#define HAL_NAV_UPPER_UNIT_8723B 128 /* micro-second */
-
-/* */
-/* */
-/* 0x0000h ~ 0x00FFh System Configuration */
-/* */
-/* */
-#define REG_RSV_CTRL_8723B 0x001C /* 3 Byte */
-#define REG_BT_WIFI_ANTENNA_SWITCH_8723B 0x0038
-#define REG_HSISR_8723B 0x005c
-#define REG_PAD_CTRL1_8723B 0x0064
-#define REG_AFE_CTRL_4_8723B 0x0078
-#define REG_HMEBOX_DBG_0_8723B 0x0088
-#define REG_HMEBOX_DBG_1_8723B 0x008A
-#define REG_HMEBOX_DBG_2_8723B 0x008C
-#define REG_HMEBOX_DBG_3_8723B 0x008E
-#define REG_HIMR0_8723B 0x00B0
-#define REG_HISR0_8723B 0x00B4
-#define REG_HIMR1_8723B 0x00B8
-#define REG_HISR1_8723B 0x00BC
-#define REG_PMC_DBG_CTRL2_8723B 0x00CC
-
-/* */
-/* */
-/* 0x0100h ~ 0x01FFh MACTOP General Configuration */
-/* */
-/* */
-#define REG_C2HEVT_CMD_ID_8723B 0x01A0
-#define REG_C2HEVT_CMD_LEN_8723B 0x01AE
-#define REG_WOWLAN_WAKE_REASON 0x01C7
-#define REG_WOWLAN_GTK_DBG1 0x630
-#define REG_WOWLAN_GTK_DBG2 0x634
-
-#define REG_HMEBOX_EXT0_8723B 0x01F0
-#define REG_HMEBOX_EXT1_8723B 0x01F4
-#define REG_HMEBOX_EXT2_8723B 0x01F8
-#define REG_HMEBOX_EXT3_8723B 0x01FC
-
-/* */
-/* */
-/* 0x0200h ~ 0x027Fh TXDMA Configuration */
-/* */
-/* */
-
-/* */
-/* */
-/* 0x0280h ~ 0x02FFh RXDMA Configuration */
-/* */
-/* */
-#define REG_RXDMA_CONTROL_8723B 0x0286 /* Control the RX DMA. */
-#define REG_RXDMA_MODE_CTRL_8723B 0x0290
-
-/* */
-/* */
-/* 0x0300h ~ 0x03FFh PCIe */
-/* */
-/* */
-#define REG_PCIE_CTRL_REG_8723B 0x0300
-#define REG_INT_MIG_8723B 0x0304 /* Interrupt Migration */
-#define REG_BCNQ_DESA_8723B 0x0308 /* TX Beacon Descriptor Address */
-#define REG_HQ_DESA_8723B 0x0310 /* TX High Queue Descriptor Address */
-#define REG_MGQ_DESA_8723B 0x0318 /* TX Manage Queue Descriptor Address */
-#define REG_VOQ_DESA_8723B 0x0320 /* TX VO Queue Descriptor Address */
-#define REG_VIQ_DESA_8723B 0x0328 /* TX VI Queue Descriptor Address */
-#define REG_BEQ_DESA_8723B 0x0330 /* TX BE Queue Descriptor Address */
-#define REG_BKQ_DESA_8723B 0x0338 /* TX BK Queue Descriptor Address */
-#define REG_RX_DESA_8723B 0x0340 /* RX Queue Descriptor Address */
-#define REG_DBI_WDATA_8723B 0x0348 /* DBI Write Data */
-#define REG_DBI_RDATA_8723B 0x034C /* DBI Read Data */
-#define REG_DBI_ADDR_8723B 0x0350 /* DBI Address */
-#define REG_DBI_FLAG_8723B 0x0352 /* DBI Read/Write Flag */
-#define REG_MDIO_WDATA_8723B 0x0354 /* MDIO for Write PCIE PHY */
-#define REG_MDIO_RDATA_8723B 0x0356 /* MDIO for Reads PCIE PHY */
-#define REG_MDIO_CTL_8723B 0x0358 /* MDIO for Control */
-#define REG_DBG_SEL_8723B 0x0360 /* Debug Selection Register */
-#define REG_PCIE_HRPWM_8723B 0x0361 /* PCIe RPWM */
-#define REG_PCIE_HCPWM_8723B 0x0363 /* PCIe CPWM */
-#define REG_PCIE_MULTIFET_CTRL_8723B 0x036A /* PCIE Multi-Fethc Control */
-
-/* */
-/* */
-/* 0x0400h ~ 0x047Fh Protocol Configuration */
-/* */
-/* */
-#define REG_TXPKTBUF_BCNQ_BDNY_8723B 0x0424
-#define REG_TXPKTBUF_MGQ_BDNY_8723B 0x0425
-#define REG_TXPKTBUF_WMAC_LBK_BF_HD_8723B 0x045D
-#define REG_AMPDU_BURST_MODE_8723B 0x04BC
-
-/* */
-/* */
-/* 0x0500h ~ 0x05FFh EDCA Configuration */
-/* */
-/* */
-#define REG_SECONDARY_CCA_CTRL_8723B 0x0577
-
-/* */
-/* */
-/* 0x0600h ~ 0x07FFh WMAC Configuration */
-/* */
-/* */
-
-/* */
-/* SDIO Bus Specification */
-/* */
-
-/* */
-/* SDIO CMD Address Mapping */
-/* */
-
-/* */
-/* I/O bus domain (Host) */
-/* */
-
-/* */
-/* SDIO register */
-/* */
-#define SDIO_REG_HCPWM1_8723B 0x025 /* HCI Current Power Mode 1 */
-
-/* */
-/* 8723 Register Bit and Content definition */
-/* */
-
-/* 2 HSISR */
-/* interrupt mask which needs to clear */
-#define MASK_HSISR_CLEAR (HSISR_GPIO12_0_INT |\
- HSISR_SPS_OCP_INT |\
- HSISR_RON_INT |\
- HSISR_PDNINT |\
- HSISR_GPIO9_INT)
-
-/* */
-/* */
-/* 0x0100h ~ 0x01FFh MACTOP General Configuration */
-/* */
-/* */
-
-/* */
-/* */
-/* 0x0200h ~ 0x027Fh TXDMA Configuration */
-/* */
-/* */
-
-/* */
-/* */
-/* 0x0280h ~ 0x02FFh RXDMA Configuration */
-/* */
-/* */
-#define BIT_USB_RXDMA_AGG_EN BIT(31)
-#define RXDMA_AGG_MODE_EN BIT(1)
-
-/* */
-/* */
-/* 0x0400h ~ 0x047Fh Protocol Configuration */
-/* */
-/* */
-
-/* */
-/* 8723B REG_CCK_CHECK (offset 0x454) */
-/* */
-#define BIT_BCN_PORT_SEL BIT(5)
-
-/* */
-/* */
-/* 0x0500h ~ 0x05FFh EDCA Configuration */
-/* */
-/* */
-
-/* */
-/* */
-/* 0x0600h ~ 0x07FFh WMAC Configuration */
-/* */
-/* */
-#define EEPROM_RF_GAIN_OFFSET 0xC1
-#define EEPROM_RF_GAIN_VAL 0x1F6
-
-/* */
-/* 8195 IMR/ISR bits (offset 0xB0, 8bits) */
-/* */
-#define IMR_DISABLED_8723B 0
-/* IMR DW0(0x00B0-00B3) Bit 0-31 */
-#define IMR_TIMER2_8723B BIT(31) /* Timeout interrupt 2 */
-#define IMR_TIMER1_8723B BIT(30) /* Timeout interrupt 1 */
-#define IMR_PSTIMEOUT_8723B BIT(29) /* Power Save Time Out Interrupt */
-#define IMR_GTINT4_8723B BIT(28) /* When GTIMER4 expires, this bit is set to 1 */
-#define IMR_GTINT3_8723B BIT(27) /* When GTIMER3 expires, this bit is set to 1 */
-#define IMR_TXBCN0ERR_8723B BIT(26) /* Transmit Beacon0 Error */
-#define IMR_TXBCN0OK_8723B BIT(25) /* Transmit Beacon0 OK */
-#define IMR_TSF_BIT32_TOGGLE_8723B BIT(24) /* TSF Timer BIT32 toggle indication interrupt */
-#define IMR_BCNDMAINT0_8723B BIT(20) /* Beacon DMA Interrupt 0 */
-#define IMR_BCNDERR0_8723B BIT(16) /* Beacon Queue DMA OK0 */
-#define IMR_HSISR_IND_ON_INT_8723B BIT(15) /* HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1) */
-#define IMR_BCNDMAINT_E_8723B BIT(14) /* Beacon DMA Interrupt Extension for Win7 */
-#define IMR_ATIMEND_8723B BIT(12) /* CTWidnow End or ATIM Window End */
-#define IMR_C2HCMD_8723B BIT(10) /* CPU to Host Command INT Status, Write 1 clear */
-#define IMR_CPWM2_8723B BIT(9) /* CPU power Mode exchange INT Status, Write 1 clear */
-#define IMR_CPWM_8723B BIT(8) /* CPU power Mode exchange INT Status, Write 1 clear */
-#define IMR_HIGHDOK_8723B BIT(7) /* High Queue DMA OK */
-#define IMR_MGNTDOK_8723B BIT(6) /* Management Queue DMA OK */
-#define IMR_BKDOK_8723B BIT(5) /* AC_BK DMA OK */
-#define IMR_BEDOK_8723B BIT(4) /* AC_BE DMA OK */
-#define IMR_VIDOK_8723B BIT(3) /* AC_VI DMA OK */
-#define IMR_VODOK_8723B BIT(2) /* AC_VO DMA OK */
-#define IMR_RDU_8723B BIT(1) /* Rx Descriptor Unavailable */
-#define IMR_ROK_8723B BIT(0) /* Receive DMA OK */
-
-/* IMR DW1(0x00B4-00B7) Bit 0-31 */
-#define IMR_BCNDMAINT7_8723B BIT(27) /* Beacon DMA Interrupt 7 */
-#define IMR_BCNDMAINT6_8723B BIT(26) /* Beacon DMA Interrupt 6 */
-#define IMR_BCNDMAINT5_8723B BIT(25) /* Beacon DMA Interrupt 5 */
-#define IMR_BCNDMAINT4_8723B BIT(24) /* Beacon DMA Interrupt 4 */
-#define IMR_BCNDMAINT3_8723B BIT(23) /* Beacon DMA Interrupt 3 */
-#define IMR_BCNDMAINT2_8723B BIT(22) /* Beacon DMA Interrupt 2 */
-#define IMR_BCNDMAINT1_8723B BIT(21) /* Beacon DMA Interrupt 1 */
-#define IMR_BCNDOK7_8723B BIT(20) /* Beacon Queue DMA OK Interrupt 7 */
-#define IMR_BCNDOK6_8723B BIT(19) /* Beacon Queue DMA OK Interrupt 6 */
-#define IMR_BCNDOK5_8723B BIT(18) /* Beacon Queue DMA OK Interrupt 5 */
-#define IMR_BCNDOK4_8723B BIT(17) /* Beacon Queue DMA OK Interrupt 4 */
-#define IMR_BCNDOK3_8723B BIT(16) /* Beacon Queue DMA OK Interrupt 3 */
-#define IMR_BCNDOK2_8723B BIT(15) /* Beacon Queue DMA OK Interrupt 2 */
-#define IMR_BCNDOK1_8723B BIT(14) /* Beacon Queue DMA OK Interrupt 1 */
-#define IMR_ATIMEND_E_8723B BIT(13) /* ATIM Window End Extension for Win7 */
-#define IMR_TXERR_8723B BIT(11) /* Tx Error Flag Interrupt Status, write 1 clear. */
-#define IMR_RXERR_8723B BIT(10) /* Rx Error Flag INT Status, Write 1 clear */
-#define IMR_TXFOVW_8723B BIT(9) /* Transmit FIFO Overflow */
-#define IMR_RXFOVW_8723B BIT(8) /* Receive FIFO Overflow */
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_xmit.h b/drivers/staging/rtl8723bs/include/rtl8723b_xmit.h
deleted file mode 100644
index ddf868c7899b..000000000000
--- a/drivers/staging/rtl8723bs/include/rtl8723b_xmit.h
+++ /dev/null
@@ -1,421 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTL8723B_XMIT_H__
-#define __RTL8723B_XMIT_H__
-
-/* */
-/* Queue Select Value in TxDesc */
-/* */
-#define QSLT_BK 0x2/* 0x01 */
-#define QSLT_BE 0x0
-#define QSLT_VI 0x5/* 0x4 */
-#define QSLT_VO 0x7/* 0x6 */
-#define QSLT_BEACON 0x10
-#define QSLT_HIGH 0x11
-#define QSLT_MGNT 0x12
-#define QSLT_CMD 0x13
-
-#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 BK BIT(6)
-#define QSEL_SHT 8
-#define Rate_ID_SHT 16
-#define NAVUSEHDR BIT(20)
-#define PKT_OFFSET_SHT 26
-#define HWPC BIT(31)
-
-/* OFFSET 8 */
-#define AGG_EN BIT(29)
-
-/* OFFSET 12 */
-#define SEQ_SHT 16
-
-/* OFFSET 16 */
-#define QoS BIT(6)
-#define HW_SEQ_EN BIT(7)
-#define USERATE BIT(8)
-#define DISDATAFB BIT(10)
-#define DATA_SHORT BIT(24)
-#define DATA_BW BIT(25)
-
-/* OFFSET 20 */
-#define SGI BIT(6)
-
-/* */
-/* defined for TX DESC Operation */
-/* */
-struct txdesc_8723b {
- /* Offset 0 */
- u32 pktlen:16;
- u32 offset:8;
- u32 bmc:1;
- u32 htc:1;
- u32 rsvd0026:1;
- u32 rsvd0027:1;
- u32 linip:1;
- u32 noacm:1;
- u32 gf:1;
- u32 rsvd0031:1;
-
- /* Offset 4 */
- u32 macid:7;
- u32 rsvd0407:1;
- u32 qsel:5;
- u32 rdg_nav_ext:1;
- u32 lsig_txop_en:1;
- u32 pifs:1;
- u32 rate_id:5;
- u32 en_desc_id:1;
- u32 sectype:2;
- u32 pkt_offset:5; /* unit: 8 bytes */
- u32 moredata:1;
- u32 txop_ps_cap:1;
- u32 txop_ps_mode:1;
-
- /* Offset 8 */
- u32 p_aid:9;
- u32 rsvd0809:1;
- u32 cca_rts:2;
- u32 agg_en:1;
- u32 rdg_en:1;
- u32 null_0:1;
- u32 null_1:1;
- u32 bk:1;
- u32 morefrag:1;
- u32 raw:1;
- u32 spe_rpt:1;
- u32 ampdu_density:3;
- u32 bt_null:1;
- u32 g_id:6;
- u32 rsvd0830:2;
-
- /* Offset 12 */
- u32 wheader_len:4;
- u32 chk_en:1;
- u32 early_rate:1;
- u32 hw_ssn_sel:2;
- u32 userate:1;
- u32 disrtsfb:1;
- u32 disdatafb:1;
- u32 cts2self:1;
- u32 rtsen:1;
- u32 hw_rts_en:1;
- u32 port_id:1;
- u32 navusehdr:1;
- u32 use_max_len:1;
- u32 max_agg_num:5;
- u32 ndpa:2;
- u32 ampdu_max_time:8;
-
- /* Offset 16 */
- u32 datarate:7;
- u32 try_rate:1;
- u32 data_ratefb_lmt:5;
- u32 rts_ratefb_lmt:4;
- u32 rty_lmt_en:1;
- u32 data_rt_lmt:6;
- u32 rtsrate:5;
- u32 pcts_en:1;
- u32 pcts_mask_idx:2;
-
- /* Offset 20 */
- u32 data_sc:4;
- u32 data_short:1;
- u32 data_bw:2;
- u32 data_ldpc:1;
- u32 data_stbc:2;
- u32 vcs_stbc:2;
- u32 rts_short:1;
- u32 rts_sc:4;
- u32 rsvd2016:7;
- u32 tx_ant:4;
- u32 txpwr_offset:3;
- u32 rsvd2031:1;
-
- /* Offset 24 */
- u32 sw_define:12;
- u32 mbssid:4;
- u32 antsel_A:3;
- u32 antsel_B:3;
- u32 antsel_C:3;
- u32 antsel_D:3;
- u32 rsvd2428:4;
-
- /* Offset 28 */
- u32 checksum:16;
- u32 rsvd2816:8;
- u32 usb_txagg_num:8;
-
- /* Offset 32 */
- u32 rts_rc:6;
- u32 bar_rty_th:2;
- u32 data_rc:6;
- u32 rsvd3214:1;
- u32 en_hwseq:1;
- u32 nextneadpage:8;
- u32 tailpage:8;
-
- /* Offset 36 */
- u32 padding_len:11;
- u32 txbf_path:1;
- u32 seq:12;
- u32 final_data_rate:8;
-};
-
-#ifndef __INC_HAL8723BDESC_H
-#define __INC_HAL8723BDESC_H
-
-#define RX_STATUS_DESC_SIZE_8723B 24
-#define RX_DRV_INFO_SIZE_UNIT_8723B 8
-
-
-/* DWORD 0 */
-#define SET_RX_STATUS_DESC_PKT_LEN_8723B(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE(__pRxStatusDesc, 0, 14, __Value)
-#define SET_RX_STATUS_DESC_EOR_8723B(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE(__pRxStatusDesc, 30, 1, __Value)
-#define SET_RX_STATUS_DESC_OWN_8723B(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE(__pRxStatusDesc, 31, 1, __Value)
-
-#define GET_RX_STATUS_DESC_PKT_LEN_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 0, 14)
-#define GET_RX_STATUS_DESC_CRC32_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 14, 1)
-#define GET_RX_STATUS_DESC_ICV_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 15, 1)
-#define GET_RX_STATUS_DESC_DRVINFO_SIZE_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 16, 4)
-#define GET_RX_STATUS_DESC_SECURITY_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 20, 3)
-#define GET_RX_STATUS_DESC_QOS_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 23, 1)
-#define GET_RX_STATUS_DESC_SHIFT_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 24, 2)
-#define GET_RX_STATUS_DESC_PHY_STATUS_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 26, 1)
-#define GET_RX_STATUS_DESC_SWDEC_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 27, 1)
-#define GET_RX_STATUS_DESC_LAST_SEG_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 28, 1)
-#define GET_RX_STATUS_DESC_FIRST_SEG_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 29, 1)
-#define GET_RX_STATUS_DESC_EOR_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 30, 1)
-#define GET_RX_STATUS_DESC_OWN_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc, 31, 1)
-
-/* DWORD 1 */
-#define GET_RX_STATUS_DESC_MACID_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 0, 7)
-#define GET_RX_STATUS_DESC_TID_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 8, 4)
-#define GET_RX_STATUS_DESC_AMSDU_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 13, 1)
-#define GET_RX_STATUS_DESC_RXID_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 14, 1)
-#define GET_RX_STATUS_DESC_PAGGR_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 15, 1)
-#define GET_RX_STATUS_DESC_A1_FIT_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 16, 4)
-#define GET_RX_STATUS_DESC_CHKERR_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 20, 1)
-#define GET_RX_STATUS_DESC_IPVER_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 21, 1)
-#define GET_RX_STATUS_DESC_IS_TCPUDP__8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 22, 1)
-#define GET_RX_STATUS_DESC_CHK_VLD_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 23, 1)
-#define GET_RX_STATUS_DESC_PAM_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 24, 1)
-#define GET_RX_STATUS_DESC_PWR_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 25, 1)
-#define GET_RX_STATUS_DESC_MORE_DATA_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 26, 1)
-#define GET_RX_STATUS_DESC_MORE_FRAG_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 27, 1)
-#define GET_RX_STATUS_DESC_TYPE_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 28, 2)
-#define GET_RX_STATUS_DESC_MC_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 30, 1)
-#define GET_RX_STATUS_DESC_BC_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 31, 1)
-
-/* DWORD 2 */
-#define GET_RX_STATUS_DESC_SEQ_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc+8, 0, 12)
-#define GET_RX_STATUS_DESC_FRAG_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc+8, 12, 4)
-#define GET_RX_STATUS_DESC_RX_IS_QOS_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc+8, 16, 1)
-#define GET_RX_STATUS_DESC_WLANHD_IV_LEN_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc+8, 18, 6)
-#define GET_RX_STATUS_DESC_RPT_SEL_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc+8, 28, 1)
-
-/* DWORD 3 */
-#define GET_RX_STATUS_DESC_RX_RATE_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc+12, 0, 7)
-#define GET_RX_STATUS_DESC_HTC_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc+12, 10, 1)
-#define GET_RX_STATUS_DESC_EOSP_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc+12, 11, 1)
-#define GET_RX_STATUS_DESC_BSSID_FIT_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc+12, 12, 2)
-#define GET_RX_STATUS_DESC_PATTERN_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+12, 29, 1)
-#define GET_RX_STATUS_DESC_UNICAST_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+12, 30, 1)
-#define GET_RX_STATUS_DESC_MAGIC_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+12, 31, 1)
-
-/* DWORD 6 */
-#define GET_RX_STATUS_DESC_SPLCP_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+16, 0, 1)
-#define GET_RX_STATUS_DESC_LDPC_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+16, 1, 1)
-#define GET_RX_STATUS_DESC_STBC_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+16, 2, 1)
-#define GET_RX_STATUS_DESC_BW_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+16, 4, 2)
-
-/* DWORD 5 */
-#define GET_RX_STATUS_DESC_TSFL_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE(__pRxStatusDesc+20, 0, 32)
-
-#define GET_RX_STATUS_DESC_BUFF_ADDR_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+24, 0, 32)
-#define GET_RX_STATUS_DESC_BUFF_ADDR64_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+28, 0, 32)
-
-#define SET_RX_STATUS_DESC_BUFF_ADDR_8723B(__pRxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pRxDesc+24, 0, 32, __Value)
-
-
-/* Dword 0 */
-#define GET_TX_DESC_OWN_8723B(__pTxDesc) LE_BITS_TO_4BYTE(__pTxDesc, 31, 1)
-
-#define SET_TX_DESC_PKT_SIZE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 0, 16, __Value)
-#define SET_TX_DESC_OFFSET_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 16, 8, __Value)
-#define SET_TX_DESC_BMC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 24, 1, __Value)
-#define SET_TX_DESC_HTC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 25, 1, __Value)
-#define SET_TX_DESC_LAST_SEG_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 26, 1, __Value)
-#define SET_TX_DESC_FIRST_SEG_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 27, 1, __Value)
-#define SET_TX_DESC_LINIP_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 28, 1, __Value)
-#define SET_TX_DESC_NO_ACM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 29, 1, __Value)
-#define SET_TX_DESC_GF_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 30, 1, __Value)
-#define SET_TX_DESC_OWN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 31, 1, __Value)
-
-/* Dword 1 */
-#define SET_TX_DESC_MACID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 0, 7, __Value)
-#define SET_TX_DESC_QUEUE_SEL_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 8, 5, __Value)
-#define SET_TX_DESC_RDG_NAV_EXT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 13, 1, __Value)
-#define SET_TX_DESC_LSIG_TXOP_EN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 14, 1, __Value)
-#define SET_TX_DESC_PIFS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 15, 1, __Value)
-#define SET_TX_DESC_RATE_ID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 16, 5, __Value)
-#define SET_TX_DESC_EN_DESC_ID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 21, 1, __Value)
-#define SET_TX_DESC_SEC_TYPE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 22, 2, __Value)
-#define SET_TX_DESC_PKT_OFFSET_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 24, 5, __Value)
-
-
-/* Dword 2 */
-#define SET_TX_DESC_PAID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 0, 9, __Value)
-#define SET_TX_DESC_CCA_RTS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 10, 2, __Value)
-#define SET_TX_DESC_AGG_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 12, 1, __Value)
-#define SET_TX_DESC_RDG_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 13, 1, __Value)
-#define SET_TX_DESC_AGG_BREAK_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 16, 1, __Value)
-#define SET_TX_DESC_MORE_FRAG_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 17, 1, __Value)
-#define SET_TX_DESC_RAW_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 18, 1, __Value)
-#define SET_TX_DESC_SPE_RPT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 19, 1, __Value)
-#define SET_TX_DESC_AMPDU_DENSITY_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 20, 3, __Value)
-#define SET_TX_DESC_BT_INT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 23, 1, __Value)
-#define SET_TX_DESC_GID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 24, 6, __Value)
-
-
-/* Dword 3 */
-#define SET_TX_DESC_WHEADER_LEN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 0, 4, __Value)
-#define SET_TX_DESC_CHK_EN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 4, 1, __Value)
-#define SET_TX_DESC_EARLY_MODE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 5, 1, __Value)
-#define SET_TX_DESC_HWSEQ_SEL_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 6, 2, __Value)
-#define SET_TX_DESC_USE_RATE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 8, 1, __Value)
-#define SET_TX_DESC_DISABLE_RTS_FB_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 9, 1, __Value)
-#define SET_TX_DESC_DISABLE_FB_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 10, 1, __Value)
-#define SET_TX_DESC_CTS2SELF_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 11, 1, __Value)
-#define SET_TX_DESC_RTS_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 12, 1, __Value)
-#define SET_TX_DESC_HW_RTS_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 13, 1, __Value)
-#define SET_TX_DESC_NAV_USE_HDR_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 15, 1, __Value)
-#define SET_TX_DESC_USE_MAX_LEN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 16, 1, __Value)
-#define SET_TX_DESC_MAX_AGG_NUM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 17, 5, __Value)
-#define SET_TX_DESC_NDPA_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 22, 2, __Value)
-#define SET_TX_DESC_AMPDU_MAX_TIME_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 24, 8, __Value)
-
-/* Dword 4 */
-#define SET_TX_DESC_TX_RATE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 0, 7, __Value)
-#define SET_TX_DESC_DATA_RATE_FB_LIMIT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 8, 5, __Value)
-#define SET_TX_DESC_RTS_RATE_FB_LIMIT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 13, 4, __Value)
-#define SET_TX_DESC_RETRY_LIMIT_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 17, 1, __Value)
-#define SET_TX_DESC_DATA_RETRY_LIMIT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 18, 6, __Value)
-#define SET_TX_DESC_RTS_RATE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 24, 5, __Value)
-
-
-/* Dword 5 */
-#define SET_TX_DESC_DATA_SC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 0, 4, __Value)
-#define SET_TX_DESC_DATA_SHORT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 4, 1, __Value)
-#define SET_TX_DESC_DATA_BW_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 5, 2, __Value)
-#define SET_TX_DESC_DATA_LDPC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 7, 1, __Value)
-#define SET_TX_DESC_DATA_STBC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 8, 2, __Value)
-#define SET_TX_DESC_CTROL_STBC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 10, 2, __Value)
-#define SET_TX_DESC_RTS_SHORT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 12, 1, __Value)
-#define SET_TX_DESC_RTS_SC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 13, 4, __Value)
-
-
-/* Dword 6 */
-#define SET_TX_DESC_SW_DEFINE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 0, 12, __Value)
-#define SET_TX_DESC_ANTSEL_A_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 16, 3, __Value)
-#define SET_TX_DESC_ANTSEL_B_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 19, 3, __Value)
-#define SET_TX_DESC_ANTSEL_C_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 22, 3, __Value)
-#define SET_TX_DESC_ANTSEL_D_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 25, 3, __Value)
-
-/* Dword 7 */
-#define SET_TX_DESC_TX_DESC_CHECKSUM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 0, 16, __Value)
-#define SET_TX_DESC_USB_TXAGG_NUM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 24, 8, __Value)
-#define SET_TX_DESC_SDIO_TXSEQ_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 16, 8, __Value)
-
-/* Dword 8 */
-#define SET_TX_DESC_HWSEQ_EN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+32, 15, 1, __Value)
-
-/* Dword 9 */
-#define SET_TX_DESC_SEQ_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+36, 12, 12, __Value)
-
-/* Dword 10 */
-#define SET_TX_DESC_TX_BUFFER_ADDRESS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+40, 0, 32, __Value)
-#define GET_TX_DESC_TX_BUFFER_ADDRESS_8723B(__pTxDesc) LE_BITS_TO_4BYTE(__pTxDesc+40, 0, 32)
-
-/* Dword 11 */
-#define SET_TX_DESC_NEXT_DESC_ADDRESS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+48, 0, 32, __Value)
-
-
-#define SET_EARLYMODE_PKTNUM_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 0, 4, __Value)
-#define SET_EARLYMODE_LEN0_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 4, 15, __Value)
-#define SET_EARLYMODE_LEN1_1_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 19, 13, __Value)
-#define SET_EARLYMODE_LEN1_2_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 0, 2, __Value)
-#define SET_EARLYMODE_LEN2_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 2, 15, __Value)
-#define SET_EARLYMODE_LEN3_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 17, 15, __Value)
-
-#endif
-/* */
-/* */
-/* Rate */
-/* */
-/* */
-/* CCK Rates, TxHT = 0 */
-#define DESC8723B_RATE1M 0x00
-#define DESC8723B_RATE2M 0x01
-#define DESC8723B_RATE5_5M 0x02
-#define DESC8723B_RATE11M 0x03
-
-/* OFDM Rates, TxHT = 0 */
-#define DESC8723B_RATE6M 0x04
-#define DESC8723B_RATE9M 0x05
-#define DESC8723B_RATE12M 0x06
-#define DESC8723B_RATE18M 0x07
-#define DESC8723B_RATE24M 0x08
-#define DESC8723B_RATE36M 0x09
-#define DESC8723B_RATE48M 0x0a
-#define DESC8723B_RATE54M 0x0b
-
-/* MCS Rates, TxHT = 1 */
-#define DESC8723B_RATEMCS0 0x0c
-#define DESC8723B_RATEMCS1 0x0d
-#define DESC8723B_RATEMCS2 0x0e
-#define DESC8723B_RATEMCS3 0x0f
-#define DESC8723B_RATEMCS4 0x10
-#define DESC8723B_RATEMCS5 0x11
-#define DESC8723B_RATEMCS6 0x12
-#define DESC8723B_RATEMCS7 0x13
-
-#define RX_HAL_IS_CCK_RATE_8723B(pDesc)\
- (GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC8723B_RATE1M ||\
- GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC8723B_RATE2M ||\
- GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC8723B_RATE5_5M ||\
- GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC8723B_RATE11M)
-
-
-void rtl8723b_update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem);
-void rtl8723b_fill_fake_txdesc(struct adapter *padapter, u8 *pDesc, u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull, u8 bDataFrame);
-
-u32 rtl8723bs_hal_init(struct adapter *padapter);
-u32 rtl8723bs_hal_deinit(struct adapter *padapter);
-s32 rtl8723bs_init_xmit_priv(struct adapter *padapter);
-void rtl8723bs_free_xmit_priv(struct adapter *padapter);
-s32 rtl8723bs_hal_xmit(struct adapter *padapter, struct xmit_frame *pxmitframe);
-s32 rtl8723bs_mgnt_xmit(struct adapter *padapter, struct xmit_frame *pmgntframe);
-s32 rtl8723bs_hal_xmitframe_enqueue(struct adapter *padapter, struct xmit_frame *pxmitframe);
-s32 rtl8723bs_xmit_buf_handler(struct adapter *padapter);
-int rtl8723bs_xmit_thread(void *context);
-
-u8 BWMapping_8723B(struct adapter *Adapter, struct pkt_attrib *pattrib);
-u8 SCMapping_8723B(struct adapter *Adapter, struct pkt_attrib *pattrib);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtw_ap.h b/drivers/staging/rtl8723bs/include/rtw_ap.h
deleted file mode 100644
index 866aa8386931..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_ap.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTW_AP_H_
-#define __RTW_AP_H_
-
-void init_mlme_ap_info(struct adapter *padapter);
-void free_mlme_ap_info(struct adapter *padapter);
-/* void update_BCNTIM(struct adapter *padapter); */
-void update_beacon(struct adapter *padapter, u8 ie_id, 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 start_bss_network(struct adapter *padapter);
-int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len);
-void rtw_ap_restore_network(struct adapter *padapter);
-void rtw_set_macaddr_acl(struct adapter *padapter, int mode);
-int rtw_acl_add_sta(struct adapter *padapter, u8 *addr);
-void rtw_acl_remove_sta(struct adapter *padapter, u8 *addr);
-
-u8 rtw_ap_set_pairwise_key(struct adapter *padapter, struct sta_info *psta);
-int rtw_ap_set_group_key(struct adapter *padapter, u8 *key, u8 alg, int keyid);
-int rtw_ap_set_wep_key(struct adapter *padapter, u8 *key, u8 keylen, int keyid, u8 set_tx);
-
-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);
-void ap_sta_info_defer_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);
-
-#endif
-void update_bmc_sta(struct adapter *padapter);
diff --git a/drivers/staging/rtl8723bs/include/rtw_btcoex.h b/drivers/staging/rtl8723bs/include/rtw_btcoex.h
deleted file mode 100644
index 765103498789..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_btcoex.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2013 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTW_BTCOEX_H__
-#define __RTW_BTCOEX_H__
-
-#include <drv_types.h>
-
-#define PACKET_NORMAL 0
-#define PACKET_DHCP 1
-#define PACKET_ARP 2
-#define PACKET_EAPOL 3
-
-void rtw_btcoex_media_status_notify(struct adapter *padapter, u8 media_status);
-void rtw_btcoex_halt_notify(struct adapter *padapter);
-
-/* ================================================== */
-/* Below Functions are called by BT-Coex */
-/* ================================================== */
-void rtw_btcoex_reject_ap_aggregated_packet(struct adapter *padapter, u8 enable);
-void rtw_btcoex_lps_enter(struct adapter *padapter);
-void rtw_btcoex_lps_leave(struct adapter *padapter);
-
-#endif /* __RTW_BTCOEX_H__ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_byteorder.h b/drivers/staging/rtl8723bs/include/rtw_byteorder.h
deleted file mode 100644
index c3a65f971793..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_byteorder.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef _RTL871X_BYTEORDER_H_
-#define _RTL871X_BYTEORDER_H_
-
-#if defined(__LITTLE_ENDIAN)
-#include <linux/byteorder/little_endian.h>
-#else
-# include <linux/byteorder/big_endian.h>
-#endif
-
-#endif /* _RTL871X_BYTEORDER_H_ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_cmd.h b/drivers/staging/rtl8723bs/include/rtw_cmd.h
deleted file mode 100644
index 2e791da7e815..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_cmd.h
+++ /dev/null
@@ -1,705 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTW_CMD_H_
-#define __RTW_CMD_H_
-
-#include <linux/completion.h>
-
-#define C2H_MEM_SZ (16*1024)
-
- #define FREE_CMDOBJ_SZ 128
-
- #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 submit_ctx *sctx;
- struct list_head list;
- };
-
- /* cmd flags */
- enum {
- RTW_CMDF_DIRECTLY = BIT(0),
- RTW_CMDF_WAIT_ACK = BIT(1),
- };
-
- struct cmd_priv {
- struct completion cmd_queue_comp;
- struct completion terminate_cmdthread_comp;
- struct __queue cmd_queue;
- u8 cmd_seq;
- 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 */
- u32 cmd_issued_cnt;
- u32 cmd_done_cnt;
- u32 rsp_cnt;
- atomic_t cmdthd_running;
- /* u8 cmdthd_running; */
- u8 stop_req;
- struct adapter *padapter;
- struct mutex sctx_mutex;
- };
-
- 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 */
- u8 *evt_allocated_buf;
- u32 evt_done_cnt;
- u8 *c2h_mem;
- u8 *allocated_c2h_mem;
- };
-
-#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)
-
-#define init_h2fwcmd_w_parm_no_parm_rsp(pcmd, code) \
-do {\
- INIT_LIST_HEAD(&pcmd->list);\
- pcmd->cmdcode = code;\
- pcmd->parmbuf = NULL;\
- pcmd->cmdsz = 0;\
- pcmd->rsp = NULL;\
- pcmd->rspsz = 0;\
-} while (0)
-
-struct c2h_evt_hdr {
- u8 id:4;
- u8 plen:4;
- u8 seq;
- u8 payload[];
-};
-
-struct c2h_evt_hdr_88xx {
- u8 id;
- u8 seq;
- u8 payload[12];
- u8 plen;
- u8 trigger;
-};
-
-#define c2h_evt_valid(c2h_evt) ((c2h_evt)->id || (c2h_evt)->plen)
-
-int rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj);
-extern struct cmd_obj *rtw_dequeue_cmd(struct cmd_priv *pcmdpriv);
-extern void rtw_free_cmd_obj(struct cmd_obj *pcmd);
-
-void rtw_stop_cmd_thread(struct adapter *adapter);
-int rtw_cmd_thread(void *context);
-
-extern void rtw_free_cmd_priv(struct cmd_priv *pcmdpriv);
-
-extern void rtw_free_evt_priv(struct evt_priv *pevtpriv);
-extern void rtw_evt_notify_isr(struct evt_priv *pevtpriv);
-
-enum {
- 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,
- RESET_SECURITYPRIV,
- FREE_ASSOC_RESOURCES,
- DM_IN_LPS_WK_CID,
- DM_RA_MSK_WK_CID, /* add for STA update RAMask when bandwidth change. */
- BEAMFORMING_WK_CID,
- LPS_CHANGE_DTIM_CID,
- BTINFO_WK_CID,
- MAX_WK_CID
-};
-
-enum {
- 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,
- LPS_CTRL_TRAFFIC_BUSY = 6,
-};
-
-enum {
- 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;
-};
-
-/*
-Caller Mode: AP, Ad-HoC, Infra
-
-Notes: To set the NIC mode of RTL8711
-
-Command Mode
-
-The definition of mode:
-
-#define IW_MODE_AUTO 0 Let the driver decides which AP to join
-#define IW_MODE_ADHOC 1 Single cell network (Ad-Hoc Clients)
-#define IW_MODE_INFRA 2 Multi cell network, roaming, ..
-#define IW_MODE_MASTER 3 Synchronisation master or Access Point
-#define IW_MODE_REPEAT 4 Wireless Repeater (forwarder)
-#define IW_MODE_SECOND 5 Secondary master/repeater (backup)
-#define IW_MODE_MONITOR 6 Passive monitor (listen only)
-
-*/
-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 {
- signed 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; /* encryption 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 keyid;
- 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;
-};
-
-/*
-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;
-
-};
-
-/*
-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;
-};
-
-/*
-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 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 sequence number, 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 Formart for driver extra cmd handler */
-struct drvextra_cmd_parm {
- int ec_id; /* extra cmd id */
- int type; /* Can use this field as the type id or command size */
- int size; /* buffer size */
- unsigned char *pbuf;
-};
-
-/*------------------- Below are used for RF/BB tuning ---------------------*/
-
-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: 61 */
-struct SetChannelSwitch_param {
- u8 new_ch_no;
-};
-
-/*H2C Handler index: 62 */
-struct TDLSoption_param {
- u8 addr[ETH_ALEN];
- u8 option;
-};
-
-/*H2C Handler index: 64 */
-struct RunInThread_param {
- void (*func)(void *);
- void *context;
-};
-
-
-/*
-
-Result:
-0x00: success
-0x01: success, and check Response.
-0x02: cmd ignored due to duplicated sequence 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, struct rtw_ieee80211_channel *ch, int ch_num);
-extern u8 rtw_createbss_cmd(struct adapter *padapter);
-int rtw_startbss_cmd(struct adapter *padapter, int flags);
-
-struct sta_info;
-extern u8 rtw_setstakey_cmd(struct adapter *padapter, struct sta_info *sta, u8 unicast_key, bool enqueue);
-extern u8 rtw_clearstakey_cmd(struct adapter *padapter, struct sta_info *sta, u8 enqueue);
-
-extern u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network *pnetwork);
-u8 rtw_disassoc_cmd(struct adapter *padapter, u32 deauth_timeout_ms, bool enqueue);
-extern u8 rtw_setopmode_cmd(struct adapter *padapter, enum nl80211_iftype networktype, bool enqueue);
-extern u8 rtw_setrfintfs_cmd(struct adapter *padapter, u8 mode);
-
-extern u8 rtw_gettssi_cmd(struct adapter *padapter, u8 offset, u8 *pval);
-extern u8 rtw_setfwdig_cmd(struct adapter *padapter, u8 type);
-extern u8 rtw_setfwra_cmd(struct adapter *padapter, u8 type);
-
-extern u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr);
-extern u8 rtw_reset_securitypriv_cmd(struct adapter *padapter);
-extern u8 rtw_free_assoc_resources_cmd(struct adapter *padapter);
-extern 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_dm_in_lps_wk_cmd(struct adapter *padapter);
-
-u8 rtw_dm_ra_mask_wk_cmd(struct adapter *padapter, u8 *psta);
-
-extern u8 rtw_ps_cmd(struct adapter *padapter);
-
-u8 rtw_chk_hi_queue_cmd(struct adapter *padapter);
-
-extern u8 rtw_c2h_packet_wk_cmd(struct adapter *padapter, u8 *pbuf, u16 length);
-extern u8 rtw_c2h_wk_cmd(struct adapter *padapter, u8 *c2h_evt);
-
-u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf);
-
-extern void rtw_survey_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_disassoc_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_joinbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_createbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_getbbrfreg_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *pcmd);
-
-extern void rtw_setstaKey_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_setassocsta_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *pcmd);
-extern void rtw_getrttbl_cmdrsp_callback(struct adapter *padapter, struct cmd_obj *pcmd);
-
-
-struct _cmd_callback {
- u32 cmd_code;
- void (*callback)(struct adapter *padapter, struct cmd_obj *cmd);
-};
-
-enum {
- READ_MACREG_CMD, /*0*/
- WRITE_MACREG_CMD,
- READ_BBREG_CMD,
- WRITE_BBREG_CMD,
- READ_RFREG_CMD,
- WRITE_RFREG_CMD, /*5*/
- READ_EEPROM_CMD,
- WRITE_EEPROM_CMD,
- READ_EFUSE_CMD,
- WRITE_EFUSE_CMD,
-
- READ_CAM_CMD, /*10*/
- WRITE_CAM_CMD,
- SET_BCNITV_CMD,
- SET_MBIDCFG_CMD,
- JOIN_BSS_CMD, /*14*/
- DISCONNECT_CMD, /*15*/
- CREATE_BSS_CMD,
- SET_OP_MODE_CMD,
- SITE_SURVEY_CMD, /*18*/
- SET_AUTH_CMD,
-
- SET_KEY_CMD, /*20*/
- SET_STA_KEY_CMD,
- SET_ASSOC_STA_CMD,
- DEL_ASSOC_STA_CMD,
- SET_STA_PWR_STATE_CMD,
- SET_BASIC_RATE_CMD, /*25*/
- GET_BASIC_RATE_CMD,
- SET_DATA_RATE_CMD,
- GET_DATA_RATE_CMD,
- SET_PHY_INFO_CMD,
-
- GET_PHY_INFO_CMD, /*30*/
- SET_PHY_CMD,
- GET_PHY_CMD,
- READ_RSSI_CMD,
- READ_GAIN_CMD,
- SET_ATIM_CMD, /*35*/
- SET_PWR_MODE_CMD,
- JOIN_BSS_RPT_CMD,
- SET_RA_TABLE_CMD,
- GET_RA_TABLE_CMD,
-
- GET_CCX_REPORT_CMD, /*40*/
- GET_DTM_REPORT_CMD,
- GET_TX_RATE_STATISTICS_CMD,
- SET_USB_SUSPEND_CMD,
- SET_H2C_LBK_CMD,
- ADD_BA_REQ_CMD, /*45*/
- SET_CHANNEL_CMD, /*46*/
- SET_TX_POWER_CMD,
- SWITCH_ANTENNA_CMD,
- SET_CRYSTAL_CAP_CMD,
- SET_SINGLE_CARRIER_TX_CMD, /*50*/
-
- SET_SINGLE_TONE_TX_CMD, /*51*/
- SET_CARRIER_SUPPRESSION_TX_CMD,
- SET_CONTINUOUS_TX_CMD,
- SWITCH_BANDWIDTH_CMD, /*54*/
- TX_BEACON_CMD, /*55*/
-
- SET_MLME_EVT_CMD, /*56*/
- SET_DRV_EXTRA_CMD, /*57*/
- SET_H2C_MSG_CMD, /*58*/
-
- SET_CHANNEL_PLAN_CMD, /*59*/
-
- SET_CHANNEL_SWITCH_CMD, /*60*/
- TDLS_CMD, /*61*/
- CHK_BMC_SLEEPQ_CMD, /*62*/
-
- RUN_IN_THREAD_CMD, /*63*/
-
- MAX_H2CCMD
-};
-
-#endif /* __RTW_CMD_H_ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_eeprom.h b/drivers/staging/rtl8723bs/include/rtw_eeprom.h
deleted file mode 100644
index 9b84105af816..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_eeprom.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTW_EEPROM_H__
-#define __RTW_EEPROM_H__
-
-
-#define RTL8712_EEPROM_ID 0x8712
-/* define EEPROM_MAX_SIZE 256 */
-
-#define HWSET_MAX_SIZE_128 128
-#define HWSET_MAX_SIZE_256 256
-#define HWSET_MAX_SIZE_512 512
-
-#define EEPROM_MAX_SIZE HWSET_MAX_SIZE_512
-
-#define CLOCK_RATE 50 /* 100us */
-
-/* EEPROM opcodes */
-#define EEPROM_READ_OPCODE 06
-#define EEPROM_WRITE_OPCODE 05
-#define EEPROM_ERASE_OPCODE 07
-#define EEPROM_EWEN_OPCODE 19 /* Erase/write enable */
-#define EEPROM_EWDS_OPCODE 16 /* Erase/write disable */
-
-/* Country codes */
-#define USA 0x555320
-#define EUROPE 0x1 /* temp, should be provided later */
-#define JAPAN 0x2 /* temp, should be provided later */
-
-#define eeprom_cis0_sz 17
-#define eeprom_cis1_sz 50
-
-/* */
-/* Customer ID, note that: */
-/* This variable is initiailzed through EEPROM or registry, */
-/* however, its definition may be different with that in EEPROM for */
-/* EEPROM size consideration. So, we have to perform proper translation between them. */
-/* Besides, CustomerID of registry has precedence of that of EEPROM. */
-/* defined below. 060703, by rcnjko. */
-/* */
-enum {
- RT_CID_DEFAULT = 0,
- RT_CID_8187_ALPHA0 = 1,
- RT_CID_8187_SERCOMM_PS = 2,
- RT_CID_8187_HW_LED = 3,
- RT_CID_8187_NETGEAR = 4,
- RT_CID_WHQL = 5,
- RT_CID_819x_CAMEO = 6,
- RT_CID_819x_RUNTOP = 7,
- RT_CID_819x_Senao = 8,
- RT_CID_TOSHIBA = 9, /* Merge by Jacken, 2008/01/31. */
- RT_CID_819x_Netcore = 10,
- RT_CID_Nettronix = 11,
- RT_CID_DLINK = 12,
- RT_CID_PRONET = 13,
- RT_CID_COREGA = 14,
- RT_CID_CHINA_MOBILE = 15,
- RT_CID_819x_ALPHA = 16,
- RT_CID_819x_Sitecom = 17,
- RT_CID_CCX = 18, /* It's set under CCX logo test and isn't demanded for CCX functions, but for test behavior like retry limit and tx report. By Bruce, 2009-02-17. */
- RT_CID_819x_Lenovo = 19,
- RT_CID_819x_QMI = 20,
- RT_CID_819x_Edimax_Belkin = 21,
- RT_CID_819x_Sercomm_Belkin = 22,
- RT_CID_819x_CAMEO1 = 23,
- RT_CID_819x_MSI = 24,
- RT_CID_819x_Acer = 25,
- RT_CID_819x_AzWave_ASUS = 26,
- RT_CID_819x_AzWave = 27, /* For AzWave in PCIe, The ID is AzWave use and not only Asus */
- RT_CID_819x_HP = 28,
- RT_CID_819x_WNC_COREGA = 29,
- RT_CID_819x_Arcadyan_Belkin = 30,
- RT_CID_819x_SAMSUNG = 31,
- RT_CID_819x_CLEVO = 32,
- RT_CID_819x_DELL = 33,
- RT_CID_819x_PRONETS = 34,
- RT_CID_819x_Edimax_ASUS = 35,
- RT_CID_NETGEAR = 36,
- RT_CID_PLANEX = 37,
- RT_CID_CC_C = 38,
- RT_CID_819x_Xavi = 39,
- RT_CID_LENOVO_CHINA = 40,
- RT_CID_INTEL_CHINA = 41,
- RT_CID_TPLINK_HPWR = 42,
- RT_CID_819x_Sercomm_Netgear = 43,
- RT_CID_819x_ALPHA_Dlink = 44,/* add by ylb 20121012 for customer led for alpha */
- RT_CID_WNC_NEC = 45,/* add by page for NEC */
- RT_CID_DNI_BUFFALO = 46,/* add by page for NEC */
-};
-
-struct eeprom_priv {
- u8 bautoload_fail_flag;
- u8 bloadfile_fail_flag;
- u8 bloadmac_fail_flag;
- u8 EepromOrEfuse;
-
- u8 mac_addr[6]; /* PermanentAddress */
-
- u16 channel_plan;
- u16 CustomerID;
-
- u8 efuse_eeprom_data[EEPROM_MAX_SIZE]; /* 92C:256bytes, 88E:512bytes, we use union set (512bytes) */
- u8 adjuseVoltageVal;
-
- u8 EEPROMRFGainOffset;
- u8 EEPROMRFGainVal;
-
- u8 sdio_setting;
- u32 ocr;
- u8 cis0[eeprom_cis0_sz];
- u8 cis1[eeprom_cis1_sz];
-};
-
-#endif /* __RTL871X_EEPROM_H__ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_efuse.h b/drivers/staging/rtl8723bs/include/rtw_efuse.h
deleted file mode 100644
index 808ba94a5998..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_efuse.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. */
-
-#ifndef __RTW_EFUSE_H__
-#define __RTW_EFUSE_H__
-
-#define PGPKT_DATA_SIZE 8
-
-#define EFUSE_WIFI 0
-#define EFUSE_BT 1
-
-enum {
- TYPE_EFUSE_MAX_SECTION = 0,
- TYPE_EFUSE_REAL_CONTENT_LEN = 1,
- TYPE_AVAILABLE_EFUSE_BYTES_BANK = 2,
- TYPE_AVAILABLE_EFUSE_BYTES_TOTAL = 3,
- TYPE_EFUSE_MAP_LEN = 4,
- TYPE_EFUSE_PROTECT_BYTES_BANK = 5,
- TYPE_EFUSE_CONTENT_LEN_BANK = 6,
-};
-
-#define EFUSE_MAX_MAP_LEN 512
-
-#define EFUSE_MAX_HW_SIZE 512
-#define EFUSE_MAX_SECTION_BASE 16
-
-#define EXT_HEADER(header) ((header & 0x1F) == 0x0F)
-#define ALL_WORDS_DISABLED(wde) ((wde & 0x0F) == 0x0F)
-#define GET_HDR_OFFSET_2_0(header) ((header & 0xE0) >> 5)
-
-#define EFUSE_REPEAT_THRESHOLD_ 3
-
-/* */
-/* The following is for BT Efuse definition */
-/* */
-#define EFUSE_BT_MAX_MAP_LEN 1024
-#define EFUSE_MAX_BANK 4
-#define EFUSE_MAX_BT_BANK (EFUSE_MAX_BANK-1)
-/* */
-/*--------------------------Define Parameters-------------------------------*/
-#define EFUSE_MAX_WORD_UNIT 4
-
-/*------------------------------Define structure----------------------------*/
-struct pgpkt_struct {
- u8 offset;
- u8 word_en;
- u8 data[8];
- u8 word_cnts;
-};
-
-/*------------------------------Define structure----------------------------*/
-struct efuse_hal {
- u8 fakeEfuseBank;
- u32 fakeEfuseUsedBytes;
- u8 fakeEfuseContent[EFUSE_MAX_HW_SIZE];
- u8 fakeEfuseInitMap[EFUSE_MAX_MAP_LEN];
- u8 fakeEfuseModifiedMap[EFUSE_MAX_MAP_LEN];
-
- u16 BTEfuseUsedBytes;
- u8 BTEfuseUsedPercentage;
- u8 BTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
- u8 BTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN];
- u8 BTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN];
-
- u16 fakeBTEfuseUsedBytes;
- u8 fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE];
- u8 fakeBTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN];
- u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN];
-};
-
-u8 rtw_efuse_calculate_word_counts(u8 word_en);
-u8 rtw_efuse_one_byte_read(struct adapter *padapter, u16 addr, u8 *data);
-
-u8 rtw_efuse_read_1_byte(struct adapter *padapter, u16 Address);
-void rtw_efuse_shadow_map_update(struct adapter *padapter, u8 efuseType);
-void rtw_efuse_shadow_read(struct adapter *padapter, u8 Type, u16 Offset, u32 *Value);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtw_event.h b/drivers/staging/rtl8723bs/include/rtw_event.h
deleted file mode 100644
index e5cb46c2a731..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_event.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef _RTW_EVENT_H_
-#define _RTW_EVENT_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 joining 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 wmm_event {
- unsigned char wmm;
-};
-
-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;
- volatile int *caller_ff_tail;
- int caller_ff_sz;
-};
-
-#define NETWORK_QUEUE_SZ 4
-
-struct network_queue {
- volatile int head;
- volatile int tail;
- struct wlan_bssid_ex networks[NETWORK_QUEUE_SZ];
-};
-
-
-#endif /* _WLANEVENT_H_ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_ht.h b/drivers/staging/rtl8723bs/include/rtw_ht.h
deleted file mode 100644
index da3efba7112a..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_ht.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef _RTW_HT_H_
-#define _RTW_HT_H_
-
-
-struct ht_priv {
- u8 ht_option;
- u8 ampdu_enable;/* for enable Tx A-MPDU */
- u8 tx_amsdu_enable;/* for enable Tx A-MSDU */
- u8 bss_coexist;/* for 20/40 Bss coexist */
-
- /* u8 baddbareq_issued[16]; */
- u32 tx_amsdu_maxlen; /* 1: 8k, 0:4k ; default:8k, for tx */
- u32 rx_ampdu_maxlen; /* for rx reordering ctrl win_sz, updated when join_callback. */
-
- u8 rx_ampdu_min_spacing;
-
- u8 ch_offset;/* PRIME_CHNL_OFFSET */
- u8 sgi_20m;
- u8 sgi_40m;
-
- /* for processing Tx A-MPDU */
- u8 agg_enable_bitmap;
- /* u8 ADDBA_retry_count; */
- u8 candidate_tid_bitmap;
-
- u8 ldpc_cap;
- u8 stbc_cap;
- u8 beamform_cap;
-
- struct ieee80211_ht_cap ht_cap;
-
-};
-
-enum {
- HT_AGG_SIZE_8K = 0,
- HT_AGG_SIZE_16K = 1,
- HT_AGG_SIZE_32K = 2,
- HT_AGG_SIZE_64K = 3,
-};
-
-enum {
- RT_HT_CAP_USE_TURBO_AGGR = 0x01,
- RT_HT_CAP_USE_LONG_PREAMBLE = 0x02,
- RT_HT_CAP_USE_AMPDU = 0x04,
- RT_HT_CAP_USE_WOW = 0x8,
- RT_HT_CAP_USE_SOFTAP = 0x10,
- RT_HT_CAP_USE_92SE = 0x20,
- RT_HT_CAP_USE_88C_92C = 0x40,
- RT_HT_CAP_USE_AP_CLIENT_MODE = 0x80, /* AP team request to reserve this bit, by Emily */
-};
-
-enum {
- RT_HT_CAP_USE_VIDEO_CLIENT = 0x01,
- RT_HT_CAP_USE_JAGUAR_BCUT = 0x02,
- RT_HT_CAP_USE_JAGUAR_CCUT = 0x04,
-};
-
-#define LDPC_HT_ENABLE_RX BIT(0)
-#define LDPC_HT_ENABLE_TX BIT(1)
-#define LDPC_HT_CAP_TX BIT(3)
-
-#define STBC_HT_ENABLE_RX BIT(0)
-#define STBC_HT_ENABLE_TX BIT(1)
-#define STBC_HT_CAP_TX BIT(3)
-
-#define BEAMFORMING_HT_BEAMFORMER_ENABLE BIT(0) /* Declare our NIC supports beamformer */
-#define BEAMFORMING_HT_BEAMFORMEE_ENABLE BIT(1) /* Declare our NIC supports beamformee */
-
-/* 20/40 BSS Coexist */
-#define SET_EXT_CAPABILITY_ELE_BSS_COEXIST(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart), 0, 1, _val)
-
-#define GET_HT_CAPABILITY_ELE_LDPC_CAP(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 0, 1)
-#define GET_HT_CAPABILITY_ELE_TX_STBC(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 7, 1)
-
-#define GET_HT_CAPABILITY_ELE_RX_STBC(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 0, 2)
-
-#endif /* _RTL871X_HT_H_ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_io.h b/drivers/staging/rtl8723bs/include/rtw_io.h
deleted file mode 100644
index 3c99a2bc19bd..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_io.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef _RTW_IO_H_
-#define _RTW_IO_H_
-
-struct intf_hdl;
-
-struct _io_ops {
- u8 (*_read8)(struct intf_hdl *pintfhdl, u32 addr);
- u16 (*_read16)(struct intf_hdl *pintfhdl, u32 addr);
- u32 (*_read32)(struct intf_hdl *pintfhdl, u32 addr);
-
- int (*_write8)(struct intf_hdl *pintfhdl, u32 addr, u8 val);
- int (*_write16)(struct intf_hdl *pintfhdl, u32 addr, u16 val);
- int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val);
-
- u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
-};
-
-struct intf_hdl {
- struct adapter *padapter;
- struct dvobj_priv *pintf_dev;/* pointer to &(padapter->dvobjpriv); */
-
- struct _io_ops io_ops;
-};
-
-#define SD_IO_TRY_CNT (8)
-#define MAX_CONTINUAL_IO_ERR SD_IO_TRY_CNT
-
-int rtw_inc_and_chk_continual_io_error(struct dvobj_priv *dvobj);
-void rtw_reset_continual_io_error(struct dvobj_priv *dvobj);
-
-struct io_priv {
-
- struct adapter *padapter;
-
- struct intf_hdl intf;
-
-};
-
-extern u8 rtw_read8(struct adapter *adapter, u32 addr);
-extern u16 rtw_read16(struct adapter *adapter, u32 addr);
-extern u32 rtw_read32(struct adapter *adapter, u32 addr);
-
-extern int rtw_write8(struct adapter *adapter, u32 addr, u8 val);
-extern int rtw_write16(struct adapter *adapter, u32 addr, u16 val);
-extern int rtw_write32(struct adapter *adapter, u32 addr, u32 val);
-
-extern u32 rtw_write_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *pmem);
-
-int rtw_init_io_priv(struct adapter *padapter, void (*set_intf_ops)(struct adapter *padapter, struct _io_ops *pops));
-
-#endif /* _RTL8711_IO_H_ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_ioctl_set.h b/drivers/staging/rtl8723bs/include/rtw_ioctl_set.h
deleted file mode 100644
index 768e4868ecfd..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_ioctl_set.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTW_IOCTL_SET_H_
-#define __RTW_IOCTL_SET_H_
-
-typedef u8 NDIS_802_11_PMKID_VALUE[16];
-
-u8 rtw_set_802_11_authentication_mode(struct adapter *pdapter, enum ndis_802_11_authentication_mode authmode);
-u8 rtw_set_802_11_add_wep(struct adapter *padapter, struct ndis_802_11_wep *wep);
-u8 rtw_set_802_11_disassociate(struct adapter *padapter);
-u8 rtw_set_802_11_bssid_list_scan(struct adapter *padapter, struct ndis_802_11_ssid *pssid, int ssid_max_num);
-u8 rtw_set_802_11_infrastructure_mode(struct adapter *padapter, enum nl80211_iftype networktype);
-u8 rtw_set_802_11_ssid(struct adapter *padapter, struct ndis_802_11_ssid *ssid);
-u8 rtw_set_802_11_connect(struct adapter *padapter, u8 *bssid, struct ndis_802_11_ssid *ssid);
-
-u8 rtw_validate_bssid(u8 *bssid);
-u8 rtw_validate_ssid(struct ndis_802_11_ssid *ssid);
-
-u8 rtw_do_join(struct adapter *padapter);
-
-u16 rtw_get_cur_max_rate(struct adapter *adapter);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtw_mlme.h b/drivers/staging/rtl8723bs/include/rtw_mlme.h
deleted file mode 100644
index 6faa13535b62..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_mlme.h
+++ /dev/null
@@ -1,397 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTW_MLME_H_
-#define __RTW_MLME_H_
-
-
-#define MAX_BSS_CNT 128
-/* define MAX_JOIN_TIMEOUT 2000 */
-/* define MAX_JOIN_TIMEOUT 2500 */
-#define MAX_JOIN_TIMEOUT 6500
-
-/* Commented by Albert 20101105 */
-/* Increase the scanning timeout because of increasing the SURVEY_TO value. */
-
-#define SCANNING_TIMEOUT 8000
-
-#define SCANQUEUE_LIFETIME 20000 /* 20sec, unit:msec */
-
-#define WIFI_NULL_STATE 0x00000000
-#define WIFI_ASOC_STATE 0x00000001 /* Under Linked state... */
-#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 */
-
-/* ifdef UNDER_MPTEST */
-#define WIFI_MP_STATE 0x00010000
-/* endif */
-
-/* define _FW_UNDER_CMD WIFI_UNDER_CMD */
-#define _FW_UNDER_LINKING WIFI_UNDER_LINKING
-#define _FW_LINKED WIFI_ASOC_STATE
-#define _FW_UNDER_SURVEY WIFI_SITE_MONITOR
-
-
-enum {
- dot11_auth_algrthm_open = 0,
- dot11_auth_algrthm_shared,
- dot11_auth_algrthm_8021x,
- dot11_auth_algrthm_auto,
- dot11_auth_algrthm_wapi,
- dot11_auth_algrthm_maxnum
-};
-
-/* Scan type including active and passive scan. */
-enum rt_scan_type {
- SCAN_PASSIVE,
- SCAN_ACTIVE,
- SCAN_MIX,
-};
-
-enum {
- GHZ24_50 = 0,
- GHZ_50,
- GHZ_24,
- GHZ_MAX,
-};
-
-/*
- * 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 struct __queue has its own locks, already.
- * Other items in mlme_priv are protected by mlme_priv.lock, while items in
- * xmit_priv are protected by xmit_priv.lock.
- *
- * To avoid possible dead lock, any thread trying to modifying mlme_priv
- * SHALL not lock up more than one locks at a time!
- *
- * The only exception is that queue functions which take the __queue.lock
- * may be called with the xmit_priv.lock held. In this case the order
- * MUST always be first lock xmit_priv.lock and then call any queue functions
- * which take __queue.lock.
- */
-
-struct sitesurvey_ctrl {
- u64 last_tx_pkts;
- uint last_rx_pkts;
- signed int traffic_busy;
- struct timer_list sitesurvey_ctrl_timer;
-};
-
-struct rt_link_detect_t {
- u32 num_tx_ok_in_period;
- u32 num_rx_ok_in_period;
- u32 num_rx_unicast_ok_in_period;
- bool busy_traffic;
- bool tx_busy_traffic;
- bool rx_busy_traffic;
- /* For interrupt migration purpose. */
- bool higher_busy_traffic;
- /* We may disable Tx interrupt according as Rx traffic. */
- bool higher_busy_rx_traffic;
- /* We may disable Tx interrupt according as Tx traffic. */
- bool higher_busy_tx_traffic;
- u8 traffic_transition_count;
- u32 low_power_transition_count;
-};
-
-/* used for mlme_priv.roam_flags */
-enum {
- RTW_ROAM_ON_EXPIRED = BIT(0),
- RTW_ROAM_ON_RESUME = BIT(1),
- RTW_ROAM_ACTIVE = BIT(2),
-};
-
-struct mlme_priv {
-
- spinlock_t lock;
- signed int fw_state; /* shall we protect this variable? maybe not necessarily... */
- u8 bScanInProcess;
- u8 to_join; /* flag */
-
- u8 to_roam; /* roaming trying times */
- struct wlan_network *roam_network; /* the target of active roam */
- u8 roam_flags;
- u8 roam_rssi_diff_th; /* rssi difference threshold for active scan candidate selection */
- u32 roam_scan_int_ms; /* scan interval for active roam */
- u32 roam_scanr_exp_ms; /* scan result expire time in ms for roam */
- u8 roam_tgt_addr[ETH_ALEN]; /* request to roam to specific target without other consideration */
-
- u8 *nic_hdl;
-
- u8 not_indic_disco;
- struct list_head *pscanned;
- struct __queue free_bss_pool;
- struct __queue scanned_queue;
- u8 *free_bss_buf;
-
- struct ndis_802_11_ssid assoc_ssid;
- u8 assoc_bssid[6];
-
- struct wlan_network cur_network;
- struct wlan_network *cur_network_scanned;
-
- /* uint wireless_mode; no used, remove it */
-
- u32 auto_scan_int_ms;
-
- 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. */
- unsigned long scan_start_time; /* used to evaluate the time spent in scanning */
-
- struct timer_list set_scan_deny_timer;
- atomic_t set_scan_deny; /* 0: allowed, 1: deny */
-
- 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_t link_detect_info;
- 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 *wps_probe_req_ie;
- u32 wps_probe_req_ie_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 associated stations 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 *assoc_req;
- u32 assoc_req_len;
- u8 *assoc_rsp;
- u32 assoc_rsp_len;
-
- u8 *wps_beacon_ie;
- /* u8 *wps_probe_req_ie; */
- u8 *wps_probe_resp_ie;
- u8 *wps_assoc_resp_ie; /* this IE could include p2p ie / wfd ie */
-
- u32 wps_beacon_ie_len;
- /* u32 wps_probe_req_ie_len; */
- u32 wps_probe_resp_ie_len;
- u32 wps_assoc_resp_ie_len; /* this IE len could include p2p ie / wfd ie */
-
- 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;
-
- u8 NumOfBcnInfoChkFail;
- unsigned long timeBcnInfoChkStart;
-};
-
-void rtw_mlme_reset_auto_scan_int(struct adapter *adapter);
-
-struct hostapd_priv {
- struct adapter *padapter;
-};
-
-extern int hostapd_mode_init(struct adapter *padapter);
-extern void hostapd_mode_unload(struct adapter *padapter);
-
-extern void rtw_joinbss_event_prehandle(struct adapter *adapter, u8 *pbuf);
-extern void rtw_survey_event_callback(struct adapter *adapter, u8 *pbuf);
-extern void rtw_surveydone_event_callback(struct adapter *adapter, u8 *pbuf);
-extern void rtw_joinbss_event_callback(struct adapter *adapter, u8 *pbuf);
-extern void rtw_stassoc_event_callback(struct adapter *adapter, u8 *pbuf);
-extern void rtw_stadel_event_callback(struct adapter *adapter, u8 *pbuf);
-extern void rtw_cpwm_event_callback(struct adapter *adapter, u8 *pbuf);
-extern void rtw_wmm_event_callback(struct adapter *padapter, u8 *pbuf);
-
-extern void rtw_join_timeout_handler(struct timer_list *t);
-extern void _rtw_scan_timeout_handler(struct timer_list *t);
-
-int event_thread(void *context);
-
-extern void rtw_free_network_queue(struct adapter *adapter, u8 isfreeall);
-extern int rtw_init_mlme_priv(struct adapter *adapter);/* (struct mlme_priv *pmlmepriv); */
-
-extern void rtw_free_mlme_priv(struct mlme_priv *pmlmepriv);
-
-
-extern signed int rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv);
-extern signed int rtw_set_key(struct adapter *adapter, struct security_priv *psecuritypriv, signed int keyid, u8 set_tx, bool enqueue);
-extern signed 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.mac_address => bssid */
- /* if adhoc_mode:pmlmepriv->cur_network.network.mac_address => ibss mac address */
- return pmlmepriv->cur_network.network.mac_address;
-}
-
-static inline signed int check_fwstate(struct mlme_priv *pmlmepriv, signed int state)
-{
- if (pmlmepriv->fw_state & state)
- return true;
-
- return false;
-}
-
-static inline signed int get_fwstate(struct mlme_priv *pmlmepriv)
-{
- return pmlmepriv->fw_state;
-}
-
-/*
- * 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, signed int state)
-{
- pmlmepriv->fw_state |= state;
- /* FOR HW integration */
- if (state == _FW_UNDER_SURVEY)
- pmlmepriv->bScanInProcess = true;
-}
-
-static inline void _clr_fwstate_(struct mlme_priv *pmlmepriv, signed int state)
-{
- pmlmepriv->fw_state &= ~state;
- /* FOR HW integration */
- if (state == _FW_UNDER_SURVEY)
- pmlmepriv->bScanInProcess = false;
-}
-
-extern u16 rtw_get_capability(struct wlan_bssid_ex *bss);
-extern void rtw_update_scanned_network(struct adapter *adapter, struct wlan_bssid_ex *target);
-extern void rtw_disconnect_hdl_under_linked(struct adapter *adapter, struct sta_info *psta, u8 free_assoc);
-extern void rtw_generate_random_ibss(u8 *pibss);
-extern struct wlan_network *rtw_find_network(struct __queue *scanned_queue, u8 *addr);
-extern struct wlan_network *rtw_get_oldest_wlan_network(struct __queue *scanned_queue);
-struct wlan_network *_rtw_find_same_network(struct __queue *scanned_queue, struct wlan_network *network);
-
-extern void rtw_free_assoc_resources(struct adapter *adapter, int lock_scanned_queue);
-extern void rtw_indicate_disconnect(struct adapter *adapter);
-extern void rtw_indicate_connect(struct adapter *adapter);
-void rtw_indicate_scan_done(struct adapter *padapter, bool aborted);
-void rtw_scan_abort(struct adapter *adapter);
-
-extern int rtw_restruct_sec_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_len);
-extern int rtw_restruct_wmm_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_len, uint initial_out_len);
-extern void rtw_init_registrypriv_dev_network(struct adapter *adapter);
-
-extern void rtw_update_registrypriv_dev_network(struct adapter *adapter);
-
-extern void _rtw_join_timeout_handler(struct timer_list *t);
-extern void rtw_scan_timeout_handler(struct timer_list *t);
-
-extern void rtw_dynamic_check_timer_handler(struct adapter *adapter);
-bool rtw_is_scan_deny(struct adapter *adapter);
-void rtw_clear_scan_deny(struct adapter *adapter);
-void rtw_set_scan_deny(struct adapter *adapter, u32 ms);
-
-void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv);
-
-extern void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv);
-
-/* extern struct wlan_network* _rtw_dequeue_network(struct __queue *queue); */
-
-extern struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv);
-
-
-extern void _rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, u8 isfreeall);
-extern void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork);
-
-
-extern struct wlan_network *_rtw_find_network(struct __queue *scanned_queue, u8 *addr);
-
-bool rtw_if_up(struct adapter *padapter);
-
-bool rtw_linked_check(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);
-
-void rtw_ht_use_default_setting(struct adapter *padapter);
-void rtw_build_wmm_ie_ht(struct adapter *padapter, u8 *out_ie, uint *pout_len);
-unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len, u8 channel);
-void rtw_update_ht_cap(struct adapter *padapter, u8 *pie, uint ie_len, u8 channel);
-void rtw_issue_addbareq_cmd(struct adapter *padapter, struct xmit_frame *pxmitframe);
-void rtw_append_exented_cap(struct adapter *padapter, u8 *out_ie, uint *pout_len);
-
-bool 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, u8 feature);
-
-#define rtw_roam_flags(adapter) ((adapter)->mlmepriv.roam_flags)
-#define rtw_chk_roam_flags(adapter, flags) ((adapter)->mlmepriv.roam_flags & flags)
-
-void _rtw_roaming(struct adapter *adapter, struct wlan_network *tgt_network);
-void rtw_roaming(struct adapter *adapter, struct wlan_network *tgt_network);
-void rtw_set_to_roam(struct adapter *adapter, u8 to_roam);
-u8 rtw_dec_to_roam(struct adapter *adapter);
-u8 rtw_to_roam(struct adapter *adapter);
-int rtw_select_roaming_candidate(struct mlme_priv *pmlmepriv);
-
-void rtw_sta_media_status_rpt(struct adapter *adapter, struct sta_info *psta, u32 mstatus);
-void rtw_reset_securitypriv(struct adapter *adapter);
-
-#endif /* __RTL871X_MLME_H_ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_mlme_ext.h b/drivers/staging/rtl8723bs/include/rtw_mlme_ext.h
deleted file mode 100644
index 179fae4d8fcc..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_mlme_ext.h
+++ /dev/null
@@ -1,708 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTW_MLME_EXT_H_
-#define __RTW_MLME_EXT_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 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) /* ODM_BB_DIG */
-#define DYNAMIC_BB_DYNAMIC_TXPWR BIT(2) /* ODM_BB_DYNAMIC_TXPWR */
-#define DYNAMIC_BB_ANT_DIV BIT(6) /* ODM_BB_ANT_DIV */
-
-/* RF ODM section BIT 24-31 */
-#define DYNAMIC_RF_CALIBRATION BIT(26)/* ODM_RF_CALIBRATION */
-
-#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
-
-/********************************************************
-MCS rate definitions
-*********************************************************/
-#define MCS_RATE_1R (0x000000ff)
-
-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 rt_channel_info in the RT_CHANNEL_LIST. */
-/* */
-enum {
- /* 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_WORLD_WIDE_5G = 0x13,
- 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_NULL = 0x41,
- RT_CHANNEL_DOMAIN_ETSI1_ETSI4 = 0x42,
- RT_CHANNEL_DOMAIN_FCC1_FCC2 = 0x43,
- RT_CHANNEL_DOMAIN_FCC1_NCC3 = 0x44,
- RT_CHANNEL_DOMAIN_WORLD_ETSI5 = 0x45,
- RT_CHANNEL_DOMAIN_FCC1_FCC8 = 0x46,
- RT_CHANNEL_DOMAIN_WORLD_ETSI6 = 0x47,
- RT_CHANNEL_DOMAIN_WORLD_ETSI7 = 0x48,
- RT_CHANNEL_DOMAIN_WORLD_ETSI8 = 0x49,
- RT_CHANNEL_DOMAIN_WORLD_ETSI9 = 0x50,
- RT_CHANNEL_DOMAIN_WORLD_ETSI10 = 0x51,
- RT_CHANNEL_DOMAIN_WORLD_ETSI11 = 0x52,
- RT_CHANNEL_DOMAIN_FCC1_NCC4 = 0x53,
- RT_CHANNEL_DOMAIN_WORLD_ETSI12 = 0x54,
- RT_CHANNEL_DOMAIN_FCC1_FCC9 = 0x55,
- RT_CHANNEL_DOMAIN_WORLD_ETSI13 = 0x56,
- RT_CHANNEL_DOMAIN_FCC1_FCC10 = 0x57,
- /* Add new channel plan above this line =============== */
- RT_CHANNEL_DOMAIN_MAX,
- RT_CHANNEL_DOMAIN_REALTEK_DEFINE = 0x7F,
-};
-
-enum {
- RT_CHANNEL_DOMAIN_2G_WORLD = 0x00, /* Worldwird 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_GLOBAL = 0x05, /* Global domain */
- RT_CHANNEL_DOMAIN_2G_NULL = 0x06,
- /* 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_2g {
- unsigned char Channel[MAX_CHANNEL_NUM_2G];
- unsigned char Len;
-};
-
-struct rt_channel_plan_map {
- unsigned char Index2G;
-};
-
-enum {
- 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, by Bohn, 2009.12.17 */
- 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_REALTEK_JAGUAR_BCUTAP = 16,
- HT_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 17,
- HT_IOT_PEER_MAX = 18
-};
-
-
-enum {
- SCAN_DISABLE = 0,
- SCAN_START = 1,
- SCAN_TXNULL = 2,
- SCAN_PROCESS = 3,
- SCAN_COMPLETE = 4,
- SCAN_STATE_MAX,
-};
-
-struct mlme_handler {
- unsigned int num;
- char *str;
- unsigned int (*func)(struct adapter *padapter, union recv_frame *precv_frame);
-};
-
-struct action_handler {
- unsigned int num;
- char *str;
- unsigned int (*func)(struct adapter *padapter, union recv_frame *precv_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;
- NDIS_802_11_RATES_EX SupportedRates;
-};
-
-/*
- * 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 and AP mode is operating in channel 1,
- * RTW_SCAN_NUM_OF_CH is 8, RTW_STAY_AP_CH_MILLISECOND 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
- * 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 legendary 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 accept_addba_req;
- u8 bwmode_updated;
- u8 hidden_ssid_mode;
- u8 VHT_enable;
-
- struct ADDBA_request ADDBA_req;
- 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 to 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 channel_num; /* The channel number. */
- enum rt_scan_type scan_type; /* Scan type such as passive or active scan. */
-};
-
-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 channels 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, IEEE80211A} 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;
- u16 sa_query_seq;
- u64 mgnt_80211w_IPN;
- u64 mgnt_80211w_IPN_rx;
- /* struct fw_priv fwpriv; */
-
- 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 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];
- unsigned char default_supported_mcs_set[16];
-
- struct ss_res sitesurvey_res;
- struct mlme_ext_info mlmext_info; /* for sta/adhoc mode, including current scanning/connecting/connected related info. */
- /* for ap mode, network includes ap's cap_info */
- struct timer_list survey_timer;
- struct timer_list link_timer;
- struct timer_list sa_query_timer;
- /* struct timer_list ADDBA_timer; */
- u16 chan_scan_time;
- unsigned long last_scan_time;
- u8 scan_abort;
- u8 tx_rate; /* TXRATE when USERATE is set. */
-
- u32 retry; /* retry for issue probereq */
-
- u64 TSFValue;
-
- /* for LPS-32K to adaptive bcn early and timeout */
- u8 adaptive_tsf_done;
- u32 bcn_delay_cnt[9];
- u32 bcn_delay_ratio[9];
- u32 bcn_cnt;
- u8 DrvBcnEarly;
- u8 DrvBcnTimeOut;
-
- 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_default_rate_set(struct adapter *padapter);
-void init_mlme_ext_priv(struct adapter *padapter);
-void init_hw_mlme_ext(struct adapter *padapter);
-void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext);
-extern struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv);
-
-/* void fill_fwpriv(struct adapter *padapter, struct fw_priv *pfwpriv); */
-
-u8 networktype_to_raid_ex(struct adapter *adapter, struct sta_info *psta);
-
-void get_rate_set(struct adapter *padapter, unsigned char *pbssrate, int *bssrate_len);
-void set_mcs_rate_by_mask(u8 *mcs_set, u32 mask);
-void update_basic_rate_table(struct adapter *padapter, u8 *mBratesOS);
-void update_basic_rate_table_soft_ap(u8 *bssrateset, u32 bssratelen);
-
-void save_dm_func_flag(struct adapter *padapter);
-void restore_dm_func_flag(struct adapter *padapter);
-void switch_dm_func(struct adapter *padapter, u32 mode, u8 enable);
-
-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);
-u8 rtw_get_center_ch(u8 channel, u8 chnl_bw, u8 chnl_offset);
-unsigned long rtw_get_on_cur_ch_time(struct adapter *adapter);
-
-void set_channel_bwmode(struct adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode);
-void r8723bs_select_channel(struct adapter *padapter, unsigned char channel);
-
-unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval);
-
-/* modify HW only */
-void _write_cam(struct adapter *padapter, u8 entry, u16 ctrl, u8 *mac, u8 *key);
-void _clear_cam_entry(struct adapter *padapter, u8 entry);
-
-/* modify both HW and cache */
-void write_cam(struct adapter *padapter, u8 id, u16 ctrl, u8 *mac, u8 *key);
-void clear_cam_entry(struct adapter *padapter, u8 id);
-
-/* modify cache only */
-void write_cam_cache(struct adapter *adapter, u8 id, u16 ctrl, u8 *mac, u8 *key);
-void clear_cam_cache(struct adapter *adapter, u8 id);
-
-void invalidate_cam_all(struct adapter *padapter);
-
-
-int allocate_fw_sta_entry(struct adapter *padapter);
-void flush_all_cam_entry(struct adapter *padapter);
-
-void site_survey(struct adapter *padapter);
-u8 collect_bss_info(struct adapter *padapter, union recv_frame *precv_frame, struct wlan_bssid_ex *bssid);
-void update_network(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src, struct adapter *padapter, bool update_ie);
-
-u8 *get_my_bssid(struct wlan_bssid_ex *pnetwork);
-u16 get_beacon_interval(struct wlan_bssid_ex *bss);
-
-int is_client_associated_to_ap(struct adapter *padapter);
-int is_client_associated_to_ibss(struct adapter *padapter);
-int is_IBSS_empty(struct adapter *padapter);
-
-unsigned char check_assoc_AP(u8 *pframe, uint len);
-
-int WMM_param_handler(struct adapter *padapter, struct ndis_80211_var_ie *pIE);
-void WMMOnAssocRsp(struct adapter *padapter);
-
-void HT_caps_handler(struct adapter *padapter, struct ndis_80211_var_ie *pIE);
-void HT_info_handler(struct adapter *padapter, struct ndis_80211_var_ie *pIE);
-void HTOnAssocRsp(struct adapter *padapter);
-
-void ERP_IE_handler(struct adapter *padapter, struct ndis_80211_var_ie *pIE);
-void VCS_update(struct adapter *padapter, struct sta_info *psta);
-void update_ldpc_stbc_cap(struct sta_info *psta);
-
-void update_beacon_info(struct adapter *padapter, u8 *pframe, uint 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 update_sta_basic_rate(struct sta_info *psta, u8 wireless_mode);
-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);
-void update_ra_entry(struct adapter *padapter, struct sta_info *psta);
-void set_sta_rate(struct adapter *padapter, struct sta_info *psta);
-
-unsigned int 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 *pHT_caps, u8 bwmode);
-unsigned int is_ap_in_tkip(struct adapter *padapter);
-
-s16 rtw_camid_search(struct adapter *adapter, u8 *addr, s16 kid);
-s16 rtw_camid_alloc(struct adapter *adapter, struct sta_info *sta, u8 kid);
-void rtw_camid_free(struct adapter *adapter, u8 cam_id);
-
-extern void rtw_alloc_macid(struct adapter *padapter, struct sta_info *psta);
-extern void rtw_release_macid(struct adapter *padapter, struct sta_info *psta);
-
-void report_join_res(struct adapter *padapter, int res);
-void report_survey_event(struct adapter *padapter, union recv_frame *precv_frame);
-void report_surveydone_event(struct adapter *padapter);
-void report_del_sta_event(struct adapter *padapter, unsigned char *MacAddr, unsigned short reason);
-void report_add_sta_event(struct adapter *padapter, unsigned char *MacAddr, int cam_idx);
-void report_wmm_edca_update(struct adapter *padapter);
-
-u8 chk_bmc_sleepq_cmd(struct adapter *padapter);
-extern 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 update_mgntframe_attrib_addr(struct adapter *padapter, struct xmit_frame *pmgntframe);
-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_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);
-s32 issue_probereq_ex(struct adapter *padapter, struct ndis_802_11_ssid *pssid, u8 *da, u8 ch, bool append_wps, int try_cnt, int wait_ms);
-int issue_nulldata(struct adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms);
-s32 issue_nulldata_in_interrupt(struct adapter *padapter, u8 *da);
-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, unsigned char action, unsigned short status);
-void issue_action_SA_Query(struct adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid);
-unsigned int send_delba(struct adapter *padapter, u8 initiator, u8 *addr);
-unsigned int send_beacon(struct adapter *padapter);
-
-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);
-
-unsigned int OnAssocReq(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnAssocRsp(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnProbeReq(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnProbeRsp(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int DoReserved(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnBeacon(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnAtim(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnDisassoc(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnAuth(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnAuthClient(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnDeAuth(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnAction(struct adapter *padapter, union recv_frame *precv_frame);
-
-unsigned int on_action_spct(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnAction_back(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int on_action_public(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnAction_ht(struct adapter *padapter, union recv_frame *precv_frame);
-unsigned int OnAction_sa_query(struct adapter *padapter, union recv_frame *precv_frame);
-
-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 _linked_info_dump(struct adapter *padapter);
-
-void survey_timer_hdl(struct timer_list *t);
-void link_timer_hdl(struct timer_list *t);
-void addba_timer_hdl(struct timer_list *t);
-void sa_query_timer_hdl(struct timer_list *t);
-/* void reauth_timer_hdl(struct adapter *padapter); */
-/* void reassoc_timer_hdl(struct adapter *padapter); */
-
-#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)
-#define set_sa_query_timer(mlmeext, ms) \
- do { \
- _set_timer(&(mlmeext)->sa_query_timer, (ms)); \
- } while (0)
-
-extern void process_addba_req(struct adapter *padapter, u8 *paddba_req, u8 *addr);
-
-extern void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len);
-extern void correct_TSF(struct adapter *padapter, struct mlme_ext_priv *pmlmeext);
-extern void adaptive_early_32k(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len);
-extern bool traffic_status_watchdog(struct adapter *padapter, bool from_timer);
-
-int rtw_chk_start_clnt_join(struct adapter *padapter, u8 *ch, u8 *bw, u8 *offset);
-
-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 chk_bmc_sleepq_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 set_csa_hdl(struct adapter *padapter, unsigned char *pbuf); /* Kurt: Handling DFS channel switch announcement ie. */
-u8 tdls_hdl(struct adapter *padapter, unsigned char *pbuf);
-u8 run_in_thread_hdl(struct adapter *padapter, u8 *pbuf);
-
-
-#define GEN_DRV_CMD_HANDLER(size, cmd) {size, &cmd ## _hdl},
-#define GEN_MLME_EXT_HANDLER(size, cmd) {size, cmd},
-
-struct C2HEvent_Header {
-
-#ifdef __LITTLE_ENDIAN
-
- unsigned int len:16;
- unsigned int ID:8;
- unsigned int seq:8;
-#else
- unsigned int seq:8;
- unsigned int ID:8;
- unsigned int len:16;
-#endif
- unsigned int rsvd;
-};
-
-void rtw_dummy_event_callback(struct adapter *adapter, u8 *pbuf);
-void rtw_fwdbg_event_callback(struct adapter *adapter, u8 *pbuf);
-
-enum {
- READ_MACREG_EVENT = 0, /*0*/
- READ_BBREG_EVENT,
- READ_RFREG_EVENT,
- READ_EEPROM_EVENT,
- READ_EFUSE_EVENT,
- READ_CAM_EVENT, /*5*/
- GET_BASICRATE_EVENT,
- GET_DATARATE_EVENT,
- SURVEY_EVENT, /*8*/
- SURVEY_DONE_EVENT, /*9*/
-
- JOIN_BSS_EVENT, /*10*/
- ADD_STA_EVENT,
- DEL_STA_EVENT,
- ATIM_DONE_EVENT,
- TX_REPORT_EVENT,
- CCX_REPORT_EVENT, /*15*/
- DTM_REPORT_EVENT,
- TX_RATE_STATISTICS_EVENT,
- C2HLBK_EVENT,
- FWDBG_EVENT,
- C2HFEEDBACK_EVENT, /*20*/
- ADDBA_EVENT,
- C2HBCN_EVENT,
- REPORT_PWR_STATE_EVENT, /* filen: only for PCIE, USB */
- CLOSE_RF_EVENT, /* filen: only for PCIE, work around ASPM */
- WMM_EVENT, /*25*/
- MAX_C2HEVT
-};
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtw_pwrctrl.h b/drivers/staging/rtl8723bs/include/rtw_pwrctrl.h
deleted file mode 100644
index 182b8c88ccc8..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_pwrctrl.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTW_PWRCTRL_H_
-#define __RTW_PWRCTRL_H_
-
-#include <linux/mutex.h>
-
-#define XMIT_ALIVE BIT(0)
-#define CMD_ALIVE BIT(2)
-#define BTCOEX_ALIVE BIT(4)
-
-
-enum {
- PS_MODE_ACTIVE = 0,
- PS_MODE_MIN,
- PS_MODE_MAX,
- PS_MODE_DTIM, /* PS_MODE_SELF_DEFINED */
- PS_MODE_VOIP,
- PS_MODE_UAPSD_WMM,
- PS_MODE_UAPSD,
- PS_MODE_IBSS,
- PS_MODE_WWLAN,
- PM_Radio_Off,
- PM_Card_Disable,
- PS_MODE_NUM,
-};
-
-/*
- BIT[2:0] = HW state
- BIT[3] = Protocol PS state, 0: register active state , 1: register sleep state
- BIT[4] = sub-state
-*/
-
-#define PS_DPS BIT(0)
-#define PS_LCLK (PS_DPS)
-#define PS_RF_OFF BIT(1)
-#define PS_ALL_ON BIT(2)
-#define PS_ST_ACTIVE BIT(3)
-
-#define PS_ACK BIT(6)
-#define PS_TOGGLE BIT(7)
-
-#define PS_STATE_MASK (0x0F)
-
-#define PS_STATE(x) (PS_STATE_MASK & (x))
-
-#define PS_STATE_S0 (PS_DPS)
-#define PS_STATE_S2 (PS_RF_OFF)
-#define PS_STATE_S4 ((PS_ST_ACTIVE) | (PS_ALL_ON))
-
-struct reportpwrstate_parm {
- unsigned char mode;
- unsigned char state; /* the CPWM value */
- unsigned short rsvd;
-};
-
-#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
-};
-
-/* RF Off Level for IPS or HW/SW radio off */
-#define RT_RF_OFF_LEVL_ASPM BIT(0) /* PCI ASPM */
-#define RT_RF_OFF_LEVL_CLK_REQ BIT(1) /* PCI clock request */
-#define RT_RF_OFF_LEVL_PCI_D3 BIT(2) /* PCI D3 mode */
-#define RT_RF_OFF_LEVL_HALT_NIC BIT(3) /* NIC halt, re-initialize hw parameters */
-#define RT_RF_OFF_LEVL_FREE_FW BIT(4) /* FW free, re-download the FW */
-#define RT_RF_OFF_LEVL_FW_32K BIT(5) /* FW in 32k */
-#define RT_RF_PS_LEVEL_ALWAYS_ASPM BIT(6) /* Always enable ASPM and Clock Req in initialization. */
-#define RT_RF_LPS_DISALBE_2R BIT(30) /* When LPS is on, disable 2R if no packet is received or transmitted. */
-#define RT_RF_LPS_LEVEL_ASPM BIT(31) /* LPS with ASPM */
-
-#define RT_IN_PS_LEVEL(ppsc, _PS_FLAG) ((ppsc->cur_ps_level & _PS_FLAG) ? true : false)
-#define RT_CLEAR_PS_LEVEL(ppsc, _PS_FLAG) (ppsc->cur_ps_level &= (~(_PS_FLAG)))
-#define RT_SET_PS_LEVEL(ppsc, _PS_FLAG) (ppsc->cur_ps_level |= _PS_FLAG)
-
-/* ASPM OSC Control bit, added by Roger, 2013.03.29. */
-#define RT_PCI_ASPM_OSC_IGNORE 0 /* PCI ASPM ignore OSC control in default */
-#define RT_PCI_ASPM_OSC_ENABLE BIT(0) /* PCI ASPM controlled by OS according to ACPI Spec 5.0 */
-#define RT_PCI_ASPM_OSC_DISABLE BIT(1) /* PCI ASPM controlled by driver or BIOS, i.e., force enable ASPM */
-
-enum {
- PSBBREG_RF0 = 0,
- PSBBREG_RF1,
- PSBBREG_RF2,
- PSBBREG_AFE0,
- PSBBREG_TOTALCNT
-};
-
-enum { /* for ips_mode */
- IPS_NONE = 0,
- IPS_NORMAL,
- IPS_LEVEL_2,
- IPS_NUM
-};
-
-/* Design for pwrctrl_priv.ips_deny, 32 bits for 32 reasons at most */
-enum ps_deny_reason {
- PS_DENY_DRV_INITIAL = 0,
- PS_DENY_SCAN,
- PS_DENY_JOIN,
- PS_DENY_DISCONNECT,
- PS_DENY_SUSPEND,
- PS_DENY_IOCTL,
- PS_DENY_MGNT_TX,
- PS_DENY_DRV_REMOVE = 30,
- PS_DENY_OTHERS = 31
-};
-
-struct pwrctrl_priv {
- struct mutex lock;
- volatile u8 rpwm; /* requested power state for fw */
- volatile u8 cpwm; /* fw current power state. updated when 1. read from HCPWM 2. driver lowers power level */
- volatile u8 tog; /* toggling */
- volatile u8 cpwm_tog; /* toggling */
-
- u8 pwr_mode;
- u8 smart_ps;
- u8 bcn_ant_mode;
- u8 dtim;
-
- u32 alives;
- struct work_struct cpwm_event;
- u8 brpwmtimeout;
- struct work_struct rpwmtimeoutwi;
- struct timer_list pwr_rpwm_timer;
- u8 bpower_saving; /* for LPS/IPS */
-
- u8 b_hw_radio_off;
- u8 reg_rfoff;
- u8 reg_pdnmode; /* powerdown mode */
- u32 rfoff_reason;
-
- /* RF OFF Level */
- u32 cur_ps_level;
- u32 reg_rfps_level;
-
- uint ips_enter_cnts;
- uint ips_leave_cnts;
-
- u8 ips_mode;
- u8 ips_org_mode;
- u8 ips_mode_req; /* used to accept the mode setting request, will update to ipsmode later */
- bool bips_processing;
- unsigned long ips_deny_time; /* will deny IPS when system time is smaller than this */
- u8 pre_ips_type;/* 0: default flow, 1: carddisbale flow */
-
- /* ps_deny: if 0, power save is free to go; otherwise deny all kinds of power save. */
- /* Use enum ps_deny_reason to decide reason. */
- /* Don't access this variable directly without control function, */
- /* and this variable should be protected by lock. */
- u32 ps_deny;
-
- u8 ps_processing; /* temporarily used to mark whether in rtw_ps_processor */
-
- u8 fw_psmode_iface_id;
- u8 bLeisurePs;
- u8 LpsIdleCount;
- u8 power_mgnt;
- u8 org_power_mgnt;
- bool fw_current_in_ps_mode;
- unsigned long delay_lps_last_time_stamp;
- s32 pnp_current_pwr_state;
- u8 pnp_bstop_trx;
-
-
- u8 bInternalAutoSuspend;
- u8 bInSuspend;
-
- u8 bAutoResume;
- u8 autopm_cnt;
-
- u8 bSupportRemoteWakeup;
- u8 wowlan_wake_reason;
- u8 wowlan_ap_mode;
- u8 wowlan_mode;
- struct timer_list pwr_state_check_timer;
- struct adapter *adapter;
- int pwr_state_check_interval;
- u8 pwr_state_check_cnts;
-
- int ps_flag; /* used by autosuspend */
-
- enum rt_rf_power_state rf_pwrstate;/* cur power state, only for IPS */
- /* rt_rf_power_state current_rfpwrstate; */
- enum rt_rf_power_state change_rfpwrstate;
-
- u8 bHWPowerdown; /* power down mode selection. 0:radio off, 1:power down */
- u8 bHWPwrPindetect; /* come from registrypriv.hwpwrp_detect. enable power down function. 0:disable, 1:enable */
- u8 bkeepfwalive;
- u8 brfoffbyhw;
- unsigned long PS_BBRegBackup[PSBBREG_TOTALCNT];
-};
-
-#define rtw_ips_mode_req(pwrctl, ips_mode) \
- ((pwrctl)->ips_mode_req = (ips_mode))
-
-#define RTW_PWR_STATE_CHK_INTERVAL 2000
-
-#define _rtw_set_pwr_state_check_timer(pwrctl, ms) \
- do { \
- _set_timer(&(pwrctl)->pwr_state_check_timer, (ms)); \
- } while (0)
-
-extern void rtw_init_pwrctrl_priv(struct adapter *adapter);
-extern void rtw_free_pwrctrl_priv(struct adapter *adapter);
-
-s32 rtw_register_task_alive(struct adapter *adapter, u32 task);
-void rtw_unregister_task_alive(struct adapter *adapter, u32 task);
-extern s32 rtw_register_tx_alive(struct adapter *padapter);
-extern void rtw_unregister_tx_alive(struct adapter *padapter);
-extern s32 rtw_register_cmd_alive(struct adapter *padapter);
-extern void rtw_unregister_cmd_alive(struct adapter *padapter);
-extern void cpwm_int_hdl(struct adapter *padapter, struct reportpwrstate_parm *preportpwrstate);
-extern void LPS_Leave_check(struct adapter *padapter);
-
-extern void LeaveAllPowerSaveMode(struct adapter *Adapter);
-extern void LeaveAllPowerSaveModeDirect(struct adapter *Adapter);
-void _ips_enter(struct adapter *padapter);
-void ips_enter(struct adapter *padapter);
-int _ips_leave(struct adapter *padapter);
-int ips_leave(struct adapter *padapter);
-
-void rtw_ps_processor(struct adapter *padapter);
-
-int LPS_RF_ON_check(struct adapter *padapter, u32 delay_ms);
-void LPS_Enter(struct adapter *padapter, const char *msg);
-void LPS_Leave(struct adapter *padapter, const char *msg);
-void traffic_check_for_leave_lps(struct adapter *padapter, u8 tx, u32 tx_packets);
-void rtw_set_ps_mode(struct adapter *padapter, u8 ps_mode, u8 smart_ps, u8 bcn_ant_mode, const char *msg);
-void rtw_set_rpwm(struct adapter *padapter, u8 val8);
-
-void rtw_set_ips_deny(struct adapter *padapter, u32 ms);
-int _rtw_pwr_wakeup(struct adapter *padapter, u32 ips_deffer_ms, const char *caller);
-#define rtw_pwr_wakeup(adapter) _rtw_pwr_wakeup(adapter, RTW_PWR_STATE_CHK_INTERVAL, __func__)
-#define rtw_pwr_wakeup_ex(adapter, ips_deffer_ms) _rtw_pwr_wakeup(adapter, ips_deffer_ms, __func__)
-int rtw_pm_set_ips(struct adapter *padapter, u8 mode);
-int rtw_pm_set_lps(struct adapter *padapter, u8 mode);
-
-void rtw_ps_deny(struct adapter *padapter, enum ps_deny_reason reason);
-void rtw_ps_deny_cancel(struct adapter *padapter, enum ps_deny_reason reason);
-u32 rtw_ps_deny_get(struct adapter *padapter);
-
-#endif /* __RTL871X_PWRCTRL_H_ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_qos.h b/drivers/staging/rtl8723bs/include/rtw_qos.h
deleted file mode 100644
index 733bfacef0b9..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_qos.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#ifndef _RTW_QOS_H_
-#define _RTW_QOS_H_
-
-struct qos_priv {
- unsigned int qos_option; /* bit mask option: u-apsd, s-apsd, ts, block ack... */
-};
-
-#endif /* _RTL871X_QOS_H_ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_recv.h b/drivers/staging/rtl8723bs/include/rtw_recv.h
deleted file mode 100644
index 9c32d480a20a..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_recv.h
+++ /dev/null
@@ -1,457 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef _RTW_RECV_H_
-#define _RTW_RECV_H_
-
-#define NR_RECVBUFF (8)
-
-#define NR_RECVFRAME 256
-
-#define RXFRAME_ALIGN 8
-#define RXFRAME_ALIGN_SZ (1<<RXFRAME_ALIGN)
-
-#define DRVINFO_SZ 4 /* unit is 8bytes */
-
-#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_LENGTH 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 */
-};
-
-struct phy_info {
- u8 rx_pwd_ba11;
-
- u8 SignalQuality; /* in 0-100 index. */
- s8 rx_mimo_signal_quality[4]; /* per-path's EVM */
- u8 RxMIMOEVMdbm[4]; /* per-path's EVM dbm */
-
- u8 rx_mimo_signal_strength[4];/* in 0~100 index */
-
- u16 Cfo_short[4]; /* per-path's Cfo_short */
- u16 Cfo_tail[4]; /* per-path's Cfo_tail */
-
- s8 RxPower; /* in dBm Translate from PWdB */
- s8 RecvSignalPower;/* Real power in dBm for this packet, no beautification and aggregation. Keep this raw info to be used for the other procedures. */
- u8 bt_rx_rssi_percentage;
- u8 SignalStrength; /* in 0-100 index. */
-
- s8 RxPwr[4]; /* per-path's pwdb */
- u8 RxSNR[4]; /* per-path's SNR */
- u8 BandWidth;
- u8 btCoexPwrAdjust;
-};
-
-struct rx_pkt_attrib {
- u16 pkt_len;
- u8 physt;
- u8 drvinfo_sz;
- u8 shift_sz;
- u8 hdrlen; /* the WLAN Header Len */
- u8 to_fr_ds;
- u8 amsdu;
- u8 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 indicates no encryption; when non-zero, indicates the encryption algorithm */
- u8 iv_len;
- u8 icv_len;
- u8 crc_err;
- u8 icv_err;
-
- u16 eth_type;
-
- u8 dst[ETH_ALEN];
- u8 src[ETH_ALEN];
- u8 ta[ETH_ALEN];
- u8 ra[ETH_ALEN];
- u8 bssid[ETH_ALEN];
-
- u8 ack_policy;
-
- u8 key_index;
-
- u8 data_rate;
- u8 sgi;
- u8 pkt_rpt_type;
- u32 MacIDValidEntry[2]; /* 64 bits present 64 entry. */
-
-/*
- u8 signal_qual;
- s8 rx_mimo_signal_qual[2];
- u8 signal_strength;
- u32 rx_pwd_ba11;
- s32 RecvSignalPower;
-*/
- 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_WIN_SIZE 128 */
-/* define REORDER_ENTRY_NUM 128 */
-#define REORDER_WAIT_TIME (50) /* (ms) */
-
-#define RECVBUFF_ALIGN_SZ 8
-
-#define RXDESC_SIZE 24
-
-struct recv_stat {
- __le32 rxdw0;
- __le32 rxdw1;
- __le32 rxdw2;
- __le32 rxdw3;
-#ifndef BUF_DESC_ARCH
- __le32 rxdw4;
- __le32 rxdw5;
-#endif /* if BUF_DESC_ARCH is defined, rx_buf_desc occupy 4 double words */
-};
-
-/*
-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;
- uint rx_icv_err;
- uint rx_largepacket_crcerr;
- uint rx_smallpacket_crcerr;
- uint rx_middlepacket_crcerr;
-
- struct tasklet_struct irq_prepare_beacon_tasklet;
- 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;
-
- struct __queue recv_buf_pending_queue;
-
- /* For display the phy information */
- u8 is_signal_dbg; /* for debug */
- u8 signal_strength_dbg; /* for debug */
-
- u8 signal_strength;
- u8 signal_qual;
- s8 rssi; /* translate_percentage_to_dbm(ptarget_wlan->network.PhyInfo.SignalStrength); */
- /* s8 rxpwdb; */
- s16 noise;
- /* int RxSNRdB[2]; */
- /* s8 RxRssi[2]; */
- /* int FalseAlmCnt_all; */
-
-
- struct timer_list signal_stat_timer;
- u32 signal_stat_sampling_interval;
- /* u32 signal_stat_converging_constant; */
- 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;
- signed int option;
-
- /* struct __queue blk_strms[MAX_RX_NUMBLKS]; */
- struct __queue defrag_q; /* keeping the fragment frame until defrag */
-
- struct stainfo_rxcache rxcache;
-
- /* uint sta_rx_bytes; */
- /* uint sta_rx_pkts; */
- /* uint sta_rx_fail; */
-
-};
-
-
-struct recv_buf {
- struct list_head list;
-
- spinlock_t recvbuf_lock;
-
- u32 ref_cnt;
-
- struct adapter *adapter;
-
- u8 *pbuf;
- u8 *pallocated_buf;
-
- u32 len;
- u8 *phead;
- u8 *pdata;
- u8 *ptail;
- u8 *pend;
-
- struct sk_buff *pskb;
- u8 reuse;
-};
-
-
-/*
- head ----->
-
- data ----->
-
- payload
-
- tail ----->
-
-
- end ----->
-
- len = (unsigned int)(tail - data);
-
-*/
-struct recv_frame_hdr {
- struct list_head list;
- struct sk_buff *pkt;
- struct sk_buff *pkt_newalloc;
-
- 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;
-};
-
-
-union recv_frame {
- union{
- struct list_head list;
- struct recv_frame_hdr hdr;
- uint mem[RECVFRAME_HDR_ALIGN>>2];
- } u;
-
- /* uint mem[MAX_RXSZ>>2]; */
-
-};
-
-enum {
- NORMAL_RX,/* Normal rx packet */
- TX_REPORT1,/* CCX */
- TX_REPORT2,/* TX RPT */
- HIS_REPORT,/* USB HISR RPT */
- C2H_PACKET
-};
-
-extern union recv_frame *_rtw_alloc_recvframe(struct __queue *pfree_recv_queue); /* get a free recv_frame from pfree_recv_queue */
-extern union recv_frame *rtw_alloc_recvframe(struct __queue *pfree_recv_queue); /* get a free recv_frame from pfree_recv_queue */
-extern int rtw_free_recvframe(union recv_frame *precvframe, struct __queue *pfree_recv_queue);
-
-extern int _rtw_enqueue_recvframe(union recv_frame *precvframe, struct __queue *queue);
-extern int rtw_enqueue_recvframe(union recv_frame *precvframe, struct __queue *queue);
-
-extern void rtw_free_recvframe_queue(struct __queue *pframequeue, struct __queue *pfree_recv_queue);
-u32 rtw_free_uc_swdec_pending_queue(struct adapter *adapter);
-
-signed int rtw_enqueue_recvbuf_to_head(struct recv_buf *precvbuf, struct __queue *queue);
-signed int rtw_enqueue_recvbuf(struct recv_buf *precvbuf, struct __queue *queue);
-struct recv_buf *rtw_dequeue_recvbuf(struct __queue *queue);
-
-void rtw_reordering_ctrl_timeout_handler(struct timer_list *t);
-
-signed 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(union recv_frame *precv_frame);
-
-static inline u8 *get_rxmem(union recv_frame *precvframe)
-{
- /* always return rx_head... */
- if (!precvframe)
- return NULL;
-
- return precvframe->u.hdr.rx_head;
-}
-
-static inline u8 *recvframe_pull(union recv_frame *precvframe, signed 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)
- return NULL;
-
-
- precvframe->u.hdr.rx_data += sz;
-
- if (precvframe->u.hdr.rx_data > precvframe->u.hdr.rx_tail) {
- precvframe->u.hdr.rx_data -= sz;
- return NULL;
- }
-
- precvframe->u.hdr.len -= sz;
-
- return precvframe->u.hdr.rx_data;
-
-}
-
-static inline u8 *recvframe_put(union recv_frame *precvframe, signed int sz)
-{
- /* rx_tai += sz; move rx_tail sz bytes hereafter */
-
- /* 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. */
- unsigned char *prev_rx_tail;
-
- if (!precvframe)
- return NULL;
-
- prev_rx_tail = precvframe->u.hdr.rx_tail;
-
- precvframe->u.hdr.rx_tail += sz;
-
- if (precvframe->u.hdr.rx_tail > precvframe->u.hdr.rx_end) {
- precvframe->u.hdr.rx_tail = prev_rx_tail;
- return NULL;
- }
-
- precvframe->u.hdr.len += sz;
-
- return precvframe->u.hdr.rx_tail;
-
-}
-
-
-
-static inline u8 *recvframe_pull_tail(union recv_frame *precvframe, signed 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)
- return NULL;
-
- precvframe->u.hdr.rx_tail -= sz;
-
- if (precvframe->u.hdr.rx_tail < precvframe->u.hdr.rx_data) {
- precvframe->u.hdr.rx_tail += sz;
- return NULL;
- }
-
- precvframe->u.hdr.len -= sz;
-
- return precvframe->u.hdr.rx_tail;
-
-}
-
-static inline signed int get_recvframe_len(union recv_frame *precvframe)
-{
- return precvframe->u.hdr.len;
-}
-
-
-static inline s32 translate_percentage_to_dbm(u32 SignalStrengthIndex)
-{
- s32 SignalPower; /* in dBm. */
-
- /* Translate to dBm (x = 0.5y-95). */
- SignalPower = (s32)((SignalStrengthIndex + 1) >> 1);
- SignalPower -= 95;
-
- return SignalPower;
-}
-
-
-struct sta_info;
-
-extern void _rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv);
-
-extern void mgt_dispatcher(struct adapter *padapter, union recv_frame *precv_frame);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtw_rf.h b/drivers/staging/rtl8723bs/include/rtw_rf.h
deleted file mode 100644
index 9f98b3f5a2e3..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_rf.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTW_RF_H_
-#define __RTW_RF_H_
-
-
-#define OFDM_PHY 1
-#define MIXED_PHY 2
-#define CCK_PHY 3
-
-#define NumRates 13
-
-/* slot time for 11g */
-#define SHORT_SLOT_TIME 9
-#define NON_SHORT_SLOT_TIME 20
-
-#define RTL8711_RF_MAX_SENS 6
-#define RTL8711_RF_DEF_SENS 4
-
-/*
- * We now define the following channels as the max channels in each channel plan.
- * 2G, total 14 chnls
- * {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
- */
-#define MAX_CHANNEL_NUM_2G 14
-#define MAX_CHANNEL_NUM 14
-
-#define NUM_REGULATORYS 1
-
-/* Country codes */
-#define USA 0x555320
-#define EUROPE 0x1 /* temp, should be provided later */
-#define JAPAN 0x2 /* temp, should be provided later */
-
-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 {
- 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 {
- 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 channel_width {
- CHANNEL_WIDTH_20 = 0,
- CHANNEL_WIDTH_40 = 1,
-};
-
-/* Represent Extension Channel Offset in HT Capabilities */
-/* This is available only in 40Mhz mode. */
-enum extchnl_offset {
- EXTCHNL_OFFSET_NO_EXT = 0,
- EXTCHNL_OFFSET_UPPER = 1,
- EXTCHNL_OFFSET_NO_DEF = 2,
- EXTCHNL_OFFSET_LOWER = 3,
-};
-
-enum {
- HT_DATA_SC_DONOT_CARE = 0,
- HT_DATA_SC_20_UPPER_OF_40MHZ = 1,
- HT_DATA_SC_20_LOWER_OF_40MHZ = 2,
-};
-
-#endif /* _RTL8711_RF_H_ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_security.h b/drivers/staging/rtl8723bs/include/rtw_security.h
deleted file mode 100644
index a3bbc605e2ba..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_security.h
+++ /dev/null
@@ -1,272 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __RTW_SECURITY_H_
-#define __RTW_SECURITY_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 _WEP_WPA_MIXED_ 0x07 /* WEP + WPA */
-#define _SMS4_ 0x06
-#define _BIP_ 0x8
-#define is_wep_enc(alg) (((alg) == _WEP40_) || ((alg) == _WEP104_))
-
-const char *security_type_str(u8 value);
-
-#define AES_BLOCK_SIZE 16
-#define AES_PRIV_SIZE (4 * 44)
-
-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_;
-#else
-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 dot11_auth_algrthm; /* 802.11 auth, could be open, shared, 8021x and authswitch */
- u32 dot11_privacy_algrthm; /* 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];
- u8 key_mask; /* use to restore wep key after hal_init */
-
- 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[BIP_MAX_KEYID + 1]; /* 802.1x Group Key, for inx0 and inx1 */
- union Keytype dot118021XGrptxmickey[BIP_MAX_KEYID + 1];
- union Keytype dot118021XGrprxmickey[BIP_MAX_KEYID + 1];
- union pn48 dot11Grptxpn; /* PN48 used for Grp Key xmit. */
- union pn48 dot11Grprxpn; /* PN48 used for Grp Key recv. */
- u32 dot11wBIPKeyid; /* key id used for BIP Key (tx key index) */
- union Keytype dot11wBIPKey[BIP_MAX_KEYID + 1]; /* BIP Key, for index4 and index5 */
- union pn48 dot11wBIPtxpn; /* PN48 used for Grp Key xmit. */
- union pn48 dot11wBIPrxpn; /* PN48 used for Grp Key recv. */
-
- /* 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;
-
- struct arc4_ctx xmit_arc4_ctx;
- struct arc4_ctx recv_arc4_ctx;
-
- u8 binstallGrpkey;
- u8 binstallBIPkey;
- u8 busetkipkey;
- /* _timer tkip_timer; */
- 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, it means the hw has not been ready. */
-
-
- /* keeps the auth_type & enc_status from upper layer ioctl(wpa_supplicant or wzc) */
- u32 ndisauthtype; /* enum 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 */
- unsigned long 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]; /* Renamed from PreAuthKey[NUM_PRE_AUTH_KEY]. Annie, 2006-10-13. */
- u8 PMKIDIndex;
-
- u8 bWepDefaultKeyIdxSet;
-
-};
-
-#define GET_ENCRY_ALGO(psecuritypriv, psta, encry_algo, bmcst)\
-do {\
- switch (psecuritypriv->dot11_auth_algrthm) {\
- case dot11_auth_algrthm_open:\
- case dot11_auth_algrthm_shared:\
- case dot11_auth_algrthm_auto:\
- encry_algo = (u8)psecuritypriv->dot11_privacy_algrthm;\
- break;\
- case dot11_auth_algrthm_8021x:\
- if (bmcst)\
- encry_algo = (u8)psecuritypriv->dot118021XGrpPrivacy;\
- else\
- encry_algo = (u8)psta->dot118021XPrivacy;\
- break;\
- case dot11_auth_algrthm_wapi:\
- encry_algo = (u8)psecuritypriv->dot11_privacy_algrthm;\
- 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 */
-};
-
-/* ===== start - public domain SHA256 implementation ===== */
-
-/* This is based on SHA256 implementation in LibTomCrypt that was released into
- * public domain by Tom St Denis.
- */
-
-int omac1_aes_128(u8 *key, u8 *data, size_t data_len, u8 *mac);
-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, u8 *pxmitframe);
-u32 rtw_tkip_encrypt(struct adapter *padapter, u8 *pxmitframe);
-void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe);
-
-u32 rtw_aes_decrypt(struct adapter *padapter, u8 *precvframe);
-u32 rtw_tkip_decrypt(struct adapter *padapter, u8 *precvframe);
-void rtw_wep_decrypt(struct adapter *padapter, u8 *precvframe);
-u32 rtw_BIP_verify(struct adapter *padapter, u8 *precvframe);
-
-void rtw_sec_restore_wep_key(struct adapter *adapter);
-u8 rtw_handle_tkip_countermeasure(struct adapter *adapter, const char *caller);
-
-#endif /* __RTL871X_SECURITY_H_ */
diff --git a/drivers/staging/rtl8723bs/include/rtw_version.h b/drivers/staging/rtl8723bs/include/rtw_version.h
deleted file mode 100644
index 55e907b097ae..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_version.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-#define DRIVERVERSION "v4.3.5.5_12290.20140916_BTCOEX20140507-4E40"
-#define BTCOEXVERSION "BTCOEX20140507-4E40"
diff --git a/drivers/staging/rtl8723bs/include/rtw_wifi_regd.h b/drivers/staging/rtl8723bs/include/rtw_wifi_regd.h
deleted file mode 100644
index e4d8fe9bf68d..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_wifi_regd.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2009-2010 Realtek Corporation.
- *
- *****************************************************************************/
-
-#ifndef __RTW_WIFI_REGD_H__
-#define __RTW_WIFI_REGD_H__
-
-void rtw_regd_init(struct wiphy *wiphy,
- void (*reg_notifier)(struct wiphy *wiphy,
- struct regulatory_request *request));
-void rtw_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request);
-
-#endif
diff --git a/drivers/staging/rtl8723bs/include/rtw_xmit.h b/drivers/staging/rtl8723bs/include/rtw_xmit.h
deleted file mode 100644
index 917e846e9ce2..000000000000
--- a/drivers/staging/rtl8723bs/include/rtw_xmit.h
+++ /dev/null
@@ -1,470 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef _RTW_XMIT_H_
-#define _RTW_XMIT_H_
-
-#include <linux/completion.h>
-
-#define MAX_XMITBUF_SZ (20480) /* 20k */
-
-#define NR_XMITBUFF (16)
-
-#define XMITBUF_ALIGN_SZ 512
-
-/* xmit extension buff definition */
-#define MAX_XMIT_EXTBUF_SZ (1536)
-#define NR_XMIT_EXTBUFF (32)
-
-#define MAX_CMDBUF_SZ (5120) /* 4096) */
-
-#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 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
-
-/* For Buffer Descriptor ring architecture */
-#define TXDESC_SIZE 40
-
-#define TXDESC_OFFSET TXDESC_SIZE
-
-#define TXDESC_40_BYTES
-
-struct tx_desc {
- __le32 txdw0;
- __le32 txdw1;
- __le32 txdw2;
- __le32 txdw3;
- __le32 txdw4;
- __le32 txdw5;
- __le32 txdw6;
- __le32 txdw7;
-
-#ifdef TXDESC_40_BYTES
- __le32 txdw8;
- __le32 txdw9;
-#endif
-};
-
-union txdesc {
- struct tx_desc txdesc;
- unsigned int value[TXDESC_SIZE>>2];
-};
-
-struct hw_xmit {
- /* spinlock_t xmit_lock; */
- /* struct list_head pending; */
- struct __queue *sta_queue;
- /* struct hw_txqueue *phwtxqueue; */
- /* signed int txcmdcnt; */
- 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 indicates no encryption; when non-zero, indicates the encryption 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];
- u8 src[ETH_ALEN];
- u8 ta[ETH_ALEN];
- u8 ra[ETH_ALEN];
- 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 ampdu_spacing; /* ampdu_min_spacing for peer sta's rx */
- u8 mdata;/* more data bit */
- u8 pctrl;/* per packet txdesc control enable */
- u8 triggered;/* for ap mode handling Power Saving sta */
- u8 qsel;
- u8 order;/* order bit */
- u8 eosp;
- u8 rate;
- u8 intel_proxim;
- u8 retry_ctrl;
- u8 mbssid;
- u8 ldpc;
- u8 stbc;
- struct sta_info *psta;
-
- u8 rtsen;
- u8 cts2self;
- union Keytype dot11tkiptxmickey;
- /* union Keytype dot11tkiprxmickey; */
- union Keytype dot118021x_UncstKey;
-
- u8 icmp_pkt;
-
-};
-
-#define WLANHDR_OFFSET 64
-
-#define NULL_FRAMETAG (0x0)
-#define DATA_FRAMETAG 0x01
-#define MGNT_FRAMETAG 0x03
-
-enum {
- XMITBUF_DATA = 0,
- XMITBUF_MGNT = 1,
- XMITBUF_CMD = 2,
-};
-
-struct submit_ctx {
- unsigned long 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,
- RTW_SCTX_DONE_CMD_ERROR,
-};
-
-
-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);
-void rtw_sctx_done(struct submit_ctx **sctx);
-
-struct xmit_buf {
- struct list_head list;
-
- struct adapter *padapter;
-
- u8 *pallocated_buf;
-
- u8 *pbuf;
-
- void *priv_data;
-
- u16 buf_tag; /* 0: Normal xmitbuf, 1: extension xmitbuf, 2:cmd xmitbuf */
- u16 flags;
- u32 alloc_sz;
-
- u32 len;
-
- struct submit_ctx *sctx;
-
- u8 *phead;
- u8 *pdata;
- u8 *ptail;
- u8 *pend;
- u32 ff_hwaddr;
- u8 pg_num;
- u8 agg_num;
-};
-
-
-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 pg_num;
- u8 agg_num;
-
- u8 ack_report;
-
- u8 *alloc_addr; /* the actual address this xmitframe allocated */
- u8 ext_tag; /* 0:data, 1:mgmt */
-
-};
-
-struct tx_servq {
- struct list_head tx_pending;
- struct __queue sta_pending;
- int qcnt;
-};
-
-
-struct sta_xmit_priv {
- spinlock_t lock;
- signed int option;
- signed int apsd_setting; /* When bit mask is on, the associated edca queue supports APSD. */
-
-
- /* struct tx_servq blk_q[MAX_NUMBLKS]; */
- 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 */
- struct list_head legacy_dz;
- struct list_head apsd;
-
- u16 txseq_tid[16];
-
- /* uint sta_tx_bytes; */
- /* u64 sta_tx_pkts; */
- /* uint sta_tx_fail; */
-
-
-};
-
-
-struct hw_txqueue {
- volatile signed int head;
- volatile signed int tail;
- volatile signed int free_sz; /* in units of 64 bytes */
- volatile signed int free_cmdsz;
- volatile signed int txsz[8];
- uint ff_hwaddr;
- uint cmd_hwaddr;
- signed int ac_tag;
-};
-
-enum cmdbuf_type {
- CMDBUF_BEACON = 0x00,
- CMDBUF_RSVD,
- CMDBUF_MAX
-};
-
-struct xmit_priv {
-
- spinlock_t lock;
-
- struct completion xmit_comp;
- struct completion terminate_xmitthread_comp;
-
- /* struct __queue blk_strms[MAX_NUMBLKS]; */
- struct __queue be_pending;
- struct __queue bk_pending;
- struct __queue vi_pending;
- struct __queue vo_pending;
- struct __queue bm_pending;
-
- /* struct __queue legacy_dz_queue; */
- /* struct __queue apsd_queue; */
-
- u8 *pallocated_frame_buf;
- u8 *pxmit_frame_buf;
- uint free_xmitframe_cnt;
- struct __queue free_xmit_queue;
-
- /* uint mapping_addr; */
- /* uint pkt_sz; */
-
- u8 *xframe_ext_alloc_addr;
- u8 *xframe_ext;
- uint free_xframe_ext_cnt;
- struct __queue free_xframe_ext_queue;
-
- /* struct hw_txqueue be_txqueue; */
- /* struct hw_txqueue bk_txqueue; */
- /* struct hw_txqueue vi_txqueue; */
- /* struct hw_txqueue vo_txqueue; */
- /* struct hw_txqueue bmc_txqueue; */
-
- uint frag_len;
-
- struct adapter *adapter;
-
- u8 vcs_setting;
- u8 vcs;
- u8 vcs_type;
- /* u16 rts_thresh; */
-
- u64 tx_bytes;
- u64 tx_pkts;
- u64 tx_drop;
- u64 last_tx_pkts;
-
- struct hw_xmit *hwxmits;
- u8 hwxmit_entry;
-
- 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. */
-
- void *SdioXmitThread;
- struct completion SdioXmitStart;
- struct completion SdioXmitTerminate;
-
- 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;
-
- struct xmit_buf pcmd_xmitbuf[CMDBUF_MAX];
-
- u16 nqos_ssn;
-
- int ack_tx;
- struct mutex ack_tx_mutex;
- struct submit_ctx ack_tx_ops;
- u8 seq_no;
- spinlock_t lock_sctx;
-};
-
-extern struct xmit_frame *__rtw_alloc_cmdxmitframe(struct xmit_priv *pxmitpriv,
- enum cmdbuf_type buf_type);
-#define rtw_alloc_cmdxmitframe(p) __rtw_alloc_cmdxmitframe(p, CMDBUF_RSVD)
-#define rtw_alloc_bcnxmitframe(p) __rtw_alloc_cmdxmitframe(p, CMDBUF_BEACON)
-
-extern struct xmit_buf *rtw_alloc_xmitbuf_ext(struct xmit_priv *pxmitpriv);
-extern s32 rtw_free_xmitbuf_ext(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
-
-extern struct xmit_buf *rtw_alloc_xmitbuf(struct xmit_priv *pxmitpriv);
-extern 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);
-extern void rtw_update_protection(struct adapter *padapter, u8 *ie, uint ie_len);
-extern int rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattrib);
-extern s32 rtw_put_snap(u8 *data, u16 h_proto);
-
-extern struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv);
-struct xmit_frame *rtw_alloc_xmitframe_ext(struct xmit_priv *pxmitpriv);
-struct xmit_frame *rtw_alloc_xmitframe_once(struct xmit_priv *pxmitpriv);
-extern s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe);
-extern void rtw_free_xmitframe_queue(struct xmit_priv *pxmitpriv, struct __queue *pframequeue);
-struct tx_servq *rtw_get_sta_pending(struct adapter *padapter, struct sta_info *psta, signed int up, u8 *ac);
-int rtw_xmitframe_enqueue(struct adapter *padapter, struct xmit_frame *pxmitframe);
-
-extern u32 rtw_calculate_wlan_pkt_size_by_attribue(struct pkt_attrib *pattrib);
-#define rtw_wlan_pkt_size(f) rtw_calculate_wlan_pkt_size_by_attribue(&f->attrib)
-extern int rtw_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, struct xmit_frame *pxmitframe);
-extern s32 rtw_mgmt_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);
-void rtw_init_hwxmits(struct hw_xmit *phwxmit, signed int entry);
-
-
-s32 _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter);
-void _rtw_free_xmit_priv(struct xmit_priv *pxmitpriv);
-
-
-void rtw_free_hwxmits(struct adapter *padapter);
-
-
-s32 rtw_xmit(struct adapter *padapter, struct sk_buff **pkt);
-bool xmitframe_hiq_filter(struct xmit_frame *xmitframe);
-
-signed 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 query_ra_short_GI(struct sta_info *psta);
-
-u8 qos_acm(u8 acm_mask, u8 priority);
-
-void enqueue_pending_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
-void enqueue_pending_xmitbuf_to_head(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
-struct xmit_buf *dequeue_pending_xmitbuf(struct xmit_priv *pxmitpriv);
-struct xmit_buf *dequeue_pending_xmitbuf_under_survey(struct xmit_priv *pxmitpriv);
-signed int check_pending_xmitbuf(struct xmit_priv *pxmitpriv);
-int rtw_xmit_thread(void *context);
-
-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);
-
-/* include after declaring struct xmit_buf, in order to avoid warning */
-#include <xmit_osdep.h>
-
-#endif /* _RTL871X_XMIT_H_ */
diff --git a/drivers/staging/rtl8723bs/include/sdio_hal.h b/drivers/staging/rtl8723bs/include/sdio_hal.h
deleted file mode 100644
index 6538253765f1..000000000000
--- a/drivers/staging/rtl8723bs/include/sdio_hal.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __SDIO_HAL_H__
-#define __SDIO_HAL_H__
-
-u8 sd_int_isr(struct adapter *padapter);
-void sd_int_dpc(struct adapter *padapter);
-void rtw_set_hal_ops(struct adapter *padapter);
-
-#endif /* __SDIO_HAL_H__ */
diff --git a/drivers/staging/rtl8723bs/include/sdio_ops.h b/drivers/staging/rtl8723bs/include/sdio_ops.h
deleted file mode 100644
index 252b0e1646e5..000000000000
--- a/drivers/staging/rtl8723bs/include/sdio_ops.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __SDIO_OPS_H__
-#define __SDIO_OPS_H__
-
-
-#include <sdio_ops_linux.h>
-
-extern void sdio_set_intf_ops(struct adapter *padapter, struct _io_ops *pops);
-
-/* extern void sdio_func1cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem); */
-/* extern void sdio_func1cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem); */
-extern u8 SdioLocalCmd52Read1Byte(struct adapter *padapter, u32 addr);
-extern void SdioLocalCmd52Write1Byte(struct adapter *padapter, u32 addr, u8 v);
-extern s32 sdio_local_read(struct adapter *padapter, u32 addr, u32 cnt, u8 *pbuf);
-extern s32 sdio_local_write(struct adapter *padapter, u32 addr, u32 cnt, u8 *pbuf);
-
-u32 _sdio_read32(struct adapter *padapter, u32 addr);
-s32 _sdio_write32(struct adapter *padapter, u32 addr, u32 val);
-
-extern void sd_int_hdl(struct adapter *padapter);
-extern u8 CheckIPSStatus(struct adapter *padapter);
-
-extern void InitInterrupt8723BSdio(struct adapter *padapter);
-void rtw_sdio_enable_interrupt(struct adapter *padapter);
-void rtw_sdio_disable_interrupt(struct adapter *padapter);
-extern u8 HalQueryTxBufferStatus8723BSdio(struct adapter *padapter);
-extern void HalQueryTxOQTBufferStatus8723BSdio(struct adapter *padapter);
-#endif /* !__SDIO_OPS_H__ */
diff --git a/drivers/staging/rtl8723bs/include/sdio_ops_linux.h b/drivers/staging/rtl8723bs/include/sdio_ops_linux.h
deleted file mode 100644
index cd67a7201065..000000000000
--- a/drivers/staging/rtl8723bs/include/sdio_ops_linux.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __SDIO_OPS_LINUX_H__
-#define __SDIO_OPS_LINUX_H__
-
-#define SDIO_ERR_VAL8 0xEA
-#define SDIO_ERR_VAL16 0xEAEA
-#define SDIO_ERR_VAL32 0xEAEAEAEA
-
-s32 _sd_cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata);
-s32 _sd_cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata);
-s32 sd_cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata);
-s32 sd_cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata);
-
-u8 sd_read8(struct intf_hdl *pintfhdl, u32 addr, s32 *err);
-u32 sd_read32(struct intf_hdl *pintfhdl, u32 addr, s32 *err);
-s32 _sd_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
-s32 sd_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
-void sd_write8(struct intf_hdl *pintfhdl, u32 addr, u8 v, s32 *err);
-void sd_write32(struct intf_hdl *pintfhdl, u32 addr, u32 v, s32 *err);
-s32 _sd_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
-s32 sd_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata);
-
-void rtw_sdio_set_irq_thd(struct dvobj_priv *dvobj, void *thd_hdl);
-#endif
diff --git a/drivers/staging/rtl8723bs/include/sta_info.h b/drivers/staging/rtl8723bs/include/sta_info.h
deleted file mode 100644
index 0f53e77c110c..000000000000
--- a/drivers/staging/rtl8723bs/include/sta_info.h
+++ /dev/null
@@ -1,330 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __STA_INFO_H_
-#define __STA_INFO_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_mgnt_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 adapter *padapter;
-
- 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];
-
- bool ieee8021x_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 dot11wtxpn; /* PN48 used for Unicast mgmt 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 */
- u8 bw_mode;
-
- u8 ldpc;
- u8 stbc;
-
- 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;
-
- u8 under_exist_checking;
-
- u8 keep_alive_trycnt;
-
- u8 *passoc_req;
- u32 assoc_req_len;
-
- /* for DM */
- struct rssi_sta rssi_stat;
-
- /* ODM_STA_INFO_T */
- /* ================ODM Relative Info ======================= */
- /* Please be care, dont 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 */
- /* ODM Write */
- /* 1 PHY_STATUS_INFO */
- u8 RSSI_Path[4]; /* */
- u8 RSSI_Ave;
- u8 RXEVM[4];
- u8 RXSNR[4];
-
- u8 rssi_level; /* for Refresh RA mask */
- /* ODM Write */
- /* 1 TX_INFO (may changed by IC) */
- /* TX_INFO_T pTxInfo; Define in IC folder. Move lower layer. */
- /* */
- /* ================ODM Relative Info ======================= */
- /* */
-
- /* To store the sequence number of received management frame */
- u16 rx_mgmt_frame_seq_num;
-};
-
-#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_mgnt_pkts = sta->sta_stats.rx_mgnt_pkts; \
- 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)
-
-#define STA_PKTS_FMT "(m:%llu, c:%llu, d:%llu)"
-
-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;
-
- struct list_head asoc_list;
- struct list_head auth_list;
- spinlock_t asoc_list_lock;
- 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 for 15 stations, aid bitmap for sleeping stations. */
- 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;
-}
-
-
-extern u32 _rtw_init_sta_priv(struct sta_priv *pstapriv);
-extern u32 _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 offset);
-
-extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr);
-extern u32 rtw_free_stainfo(struct adapter *padapter, struct sta_info *psta);
-extern void rtw_free_all_stainfo(struct adapter *padapter);
-extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr);
-extern u32 rtw_init_bcmc_stainfo(struct adapter *padapter);
-extern struct sta_info *rtw_get_bcmc_stainfo(struct adapter *padapter);
-extern u8 rtw_access_ctrl(struct adapter *padapter, u8 *mac_addr);
-
-#endif /* _STA_INFO_H_ */
diff --git a/drivers/staging/rtl8723bs/include/wifi.h b/drivers/staging/rtl8723bs/include/wifi.h
deleted file mode 100644
index 93cb83488d5d..000000000000
--- a/drivers/staging/rtl8723bs/include/wifi.h
+++ /dev/null
@@ -1,409 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef _WIFI_H_
-#define _WIFI_H_
-
-#define WLAN_HDR_A3_LEN 24
-#define WLAN_HDR_A3_QOS_LEN 26
-
-#define WLAN_WMM_LEN 24
-
-/* This value is tested by WiFi 11n Test Plan 5.2.3. */
-/* This test verifies the WLAN NIC can update the NAV through sending the CTS with large duration. */
-#define WiFiNavUpperUs 30000 /* 30 ms */
-
-enum {
- WIFI_MGT_TYPE = (0),
- WIFI_CTRL_TYPE = (BIT(2)),
- WIFI_DATA_TYPE = (BIT(3)),
- WIFI_QOS_DATA_TYPE = (BIT(7)|BIT(3)), /* QoS Data */
-};
-
-enum {
-
- /* below is for mgt frame */
- WIFI_ASSOCREQ = (0 | WIFI_MGT_TYPE),
- WIFI_ASSOCRSP = (BIT(4) | WIFI_MGT_TYPE),
- WIFI_REASSOCREQ = (BIT(5) | WIFI_MGT_TYPE),
- WIFI_REASSOCRSP = (BIT(5) | BIT(4) | WIFI_MGT_TYPE),
- WIFI_PROBEREQ = (BIT(6) | WIFI_MGT_TYPE),
- WIFI_PROBERSP = (BIT(6) | BIT(4) | WIFI_MGT_TYPE),
- WIFI_BEACON = (BIT(7) | WIFI_MGT_TYPE),
- WIFI_ATIM = (BIT(7) | BIT(4) | WIFI_MGT_TYPE),
- WIFI_DISASSOC = (BIT(7) | BIT(5) | WIFI_MGT_TYPE),
- WIFI_AUTH = (BIT(7) | BIT(5) | BIT(4) | WIFI_MGT_TYPE),
- WIFI_DEAUTH = (BIT(7) | BIT(6) | WIFI_MGT_TYPE),
- WIFI_ACTION = (BIT(7) | BIT(6) | BIT(4) | WIFI_MGT_TYPE),
- WIFI_ACTION_NOACK = (BIT(7) | BIT(6) | BIT(5) | WIFI_MGT_TYPE),
-
- /* below is for control frame */
- WIFI_NDPA = (BIT(6) | BIT(4) | WIFI_CTRL_TYPE),
- WIFI_PSPOLL = (BIT(7) | BIT(5) | WIFI_CTRL_TYPE),
- WIFI_RTS = (BIT(7) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE),
- WIFI_CTS = (BIT(7) | BIT(6) | WIFI_CTRL_TYPE),
- WIFI_ACK = (BIT(7) | BIT(6) | BIT(4) | WIFI_CTRL_TYPE),
- WIFI_CFEND = (BIT(7) | BIT(6) | BIT(5) | WIFI_CTRL_TYPE),
- WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE),
-
- /* below is for data frame */
- WIFI_DATA = (0 | WIFI_DATA_TYPE),
- WIFI_DATA_CFACK = (BIT(4) | WIFI_DATA_TYPE),
- WIFI_DATA_CFPOLL = (BIT(5) | WIFI_DATA_TYPE),
- WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | WIFI_DATA_TYPE),
- WIFI_DATA_NULL = (BIT(6) | WIFI_DATA_TYPE),
- WIFI_CF_ACK = (BIT(6) | BIT(4) | WIFI_DATA_TYPE),
- WIFI_CF_POLL = (BIT(6) | BIT(5) | WIFI_DATA_TYPE),
- WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | WIFI_DATA_TYPE),
- WIFI_QOS_DATA_NULL = (BIT(6) | WIFI_QOS_DATA_TYPE),
-};
-
-#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 _ORDER_ BIT(15)
-
-#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 get_tofr_ds(pframe) ((GetToDs(pframe) << 1) | GetFrDs(pframe))
-
-#define SetMFrag(pbuf) \
- (*(__le16 *)(pbuf) |= cpu_to_le16(_MORE_FRAG_))
-
-#define GetMFrag(pbuf) (((*(__le16 *)(pbuf)) & cpu_to_le16(_MORE_FRAG_)) != 0)
-
-#define ClearMFrag(pbuf) \
- (*(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_FRAG_)))
-
-#define GetRetry(pbuf) (((*(__le16 *)(pbuf)) & cpu_to_le16(_RETRY_)) != 0)
-
-#define ClearRetry(pbuf) \
- (*(__le16 *)(pbuf) &= (~cpu_to_le16(_RETRY_)))
-
-#define SetPwrMgt(pbuf) \
- (*(__le16 *)(pbuf) |= cpu_to_le16(_PWRMGT_))
-
-#define GetPwrMgt(pbuf) (((*(__le16 *)(pbuf)) & cpu_to_le16(_PWRMGT_)) != 0)
-
-#define ClearPwrMgt(pbuf) \
- (*(__le16 *)(pbuf) &= (~cpu_to_le16(_PWRMGT_)))
-
-#define SetMData(pbuf) \
- (*(__le16 *)(pbuf) |= cpu_to_le16(_MORE_DATA_))
-
-#define GetMData(pbuf) (((*(__le16 *)(pbuf)) & cpu_to_le16(_MORE_DATA_)) != 0)
-
-#define ClearMData(pbuf) \
- (*(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_DATA_)))
-
-#define SetPrivacy(pbuf) \
- (*(__le16 *)(pbuf) |= cpu_to_le16(_PRIVACY_))
-
-#define GetPrivacy(pbuf) \
- (((*(__le16 *)(pbuf)) & cpu_to_le16(_PRIVACY_)) != 0)
-
-#define GetOrder(pbuf) \
- (((*(__le16 *)(pbuf)) & cpu_to_le16(_ORDER_)) != 0)
-
-#define GetFrameType(pbuf) \
- (le16_to_cpu(*(__le16 *)(pbuf)) & (BIT(3) | BIT(2)))
-
-#define SetFrameType(pbuf, type) \
- do { \
- *(unsigned short *)(pbuf) &= cpu_to_le16(~(BIT(3) | BIT(2))); \
- *(unsigned short *)(pbuf) |= cpu_to_le16(type); \
- } while (0)
-
-#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 GetSequence(pbuf) \
- (le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) >> 4)
-
-#define GetFragNum(pbuf) \
- (le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) & 0x0f)
-
-#define SetFragNum(pbuf, num) \
- do { \
- *(unsigned short *)((size_t)(pbuf) + 22) = \
- ((*(unsigned short *)((size_t)(pbuf) + 22)) & \
- le16_to_cpu(~(0x000f))) | \
- cpu_to_le16(0x0f & (num)); \
- } 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 GetPriority(pbuf) ((le16_to_cpu(*(__le16 *)(pbuf))) & 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 GetAid(pbuf) (le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 2)) & 0x3fff)
-
-#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 *rtl8723bs_get_ra(unsigned char *pframe)
-{
- unsigned char *ra;
-
- ra = GetAddr1Ptr(pframe);
- return ra;
-}
-
-static inline unsigned char *get_ta(unsigned char *pframe)
-{
- unsigned char *ta;
-
- ta = GetAddr2Ptr(pframe);
- return ta;
-}
-
-static inline unsigned char *get_da(unsigned char *pframe)
-{
- unsigned char *da;
- unsigned int to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
-
- switch (to_fr_ds) {
- case 0x00: /* ToDs = 0, FromDs = 0 */
- da = GetAddr1Ptr(pframe);
- break;
- case 0x01: /* ToDs = 0, FromDs = 1 */
- da = GetAddr1Ptr(pframe);
- break;
- case 0x02: /* ToDs = 1, FromDs = 0 */
- da = GetAddr3Ptr(pframe);
- break;
- default: /* ToDs = 1, FromDs = 1 */
- da = GetAddr3Ptr(pframe);
- break;
- }
-
- return da;
-}
-
-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 = NULL;
- 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;
- }
-
- return sa;
-}
-
-static inline int IsFrameTypeCtrl(unsigned char *pframe)
-{
- return GetFrameType(pframe) == WIFI_CTRL_TYPE;
-}
-
-/*-----------------------------------------------------------------------------
- Below is for the security related definition
-------------------------------------------------------------------------------*/
-
-#define _ASOCREQ_IE_OFFSET_ 4 /* excluding wlan_hdr */
-#define _REASOCREQ_IE_OFFSET_ 10
-#define _PROBEREQ_IE_OFFSET_ 0
-#define _PROBERSP_IE_OFFSET_ 12
-#define _AUTH_IE_OFFSET_ 6
-#define _BEACON_IE_OFFSET_ 12
-
-#define _FIXED_IE_LENGTH_ _BEACON_IE_OFFSET_
-
-/* ---------------------------------------------------------------------------
- Below is the fixed elements...
------------------------------------------------------------------------------*/
-#define _AUTH_ALGM_NUM_ 2
-#define _AUTH_SEQ_NUM_ 2
-#define _BEACON_ITERVAL_ 2
-#define _CAPABILITY_ 2
-#define _RSON_CODE_ 2
-#define _ASOC_ID_ 2
-#define _STATUS_CODE_ 2
-#define _TIMESTAMP_ 8
-
-/*-----------------------------------------------------------------------------
- Below is the definition for 802.11i / 802.1x
-------------------------------------------------------------------------------*/
-#define _IEEE8021X_MGT_ 1 /* WPA */
-#define _IEEE8021X_PSK_ 2 /* WPA with pre-shared key */
-
-#define _MME_IE_LENGTH_ 18
-/*-----------------------------------------------------------------------------
- Below is the definition for WMM
-------------------------------------------------------------------------------*/
-#define _WMM_IE_Length_ 7 /* for WMM STA */
-
-/*-----------------------------------------------------------------------------
- Below is the definition for 802.11n
-------------------------------------------------------------------------------*/
-#define GetOrderBit(pbuf) (((*(unsigned short *)(pbuf)) & cpu_to_le16(_ORDER_)) != 0)
-
-#define ACT_CAT_VENDOR 0x7F/* 127 */
-
-/**
- * struct rtw_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;
-
-struct ADDBA_request {
- unsigned char dialog_token;
- __le16 BA_para_set;
- __le16 BA_timeout_value;
- __le16 BA_starting_seqctrl;
-} __packed;
-
-/* 802.11n HT capabilities masks */
-#define IEEE80211_HT_CAP_LDPC_CODING 0x0001
-#define IEEE80211_HT_CAP_SUP_WIDTH 0x0002
-#define IEEE80211_HT_CAP_SM_PS 0x000C
-#define IEEE80211_HT_CAP_GRN_FLD 0x0010
-#define IEEE80211_HT_CAP_SGI_20 0x0020
-#define IEEE80211_HT_CAP_SGI_40 0x0040
-#define IEEE80211_HT_CAP_TX_STBC 0x0080
-#define IEEE80211_HT_CAP_RX_STBC_1R 0x0100
-#define IEEE80211_HT_CAP_RX_STBC_3R 0x0300
-#define IEEE80211_HT_CAP_MAX_AMSDU 0x0800
-#define IEEE80211_HT_CAP_DSSSCCK40 0x1000
-/* 802.11n HT capability AMPDU settings */
-#define IEEE80211_HT_CAP_AMPDU_FACTOR 0x03
-#define IEEE80211_HT_CAP_AMPDU_DENSITY 0x1C
-
-/* endif */
-
-/* ===============WPS Section =============== */
-/* WPS attribute ID */
-#define WPS_ATTR_SELECTED_REGISTRAR 0x1041
-
-#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))
-
-/* Regulatroy Domain */
-struct regd_pair_mapping {
- u16 reg_dmnenum;
- u16 reg_2ghz_ctl;
-};
-
-#endif /* _WIFI_H_ */
diff --git a/drivers/staging/rtl8723bs/include/wlan_bssdef.h b/drivers/staging/rtl8723bs/include/wlan_bssdef.h
deleted file mode 100644
index f4c1456f1476..000000000000
--- a/drivers/staging/rtl8723bs/include/wlan_bssdef.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#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
-
-typedef unsigned char NDIS_802_11_RATES[NDIS_802_11_LENGTH_RATES]; /* Set of 8 data rates */
-typedef unsigned char NDIS_802_11_RATES_EX[NDIS_802_11_LENGTH_RATES_EX]; /* Set of 16 data rates */
-
-struct ndis_802_11_ssid {
- u32 ssid_length;
- u8 ssid[32];
-};
-
-/*
- * FW will only save the channel number in DSConfig.
- * ODI Handler will convert the channel number to freq. number.
- */
-struct ndis_802_11_conf {
- u32 length; /* Length of structure */
- u32 beacon_period; /* units are Kusec */
- u32 atim_window; /* units are Kusec */
- u32 ds_config; /* Frequency, units are kHz */
-};
-
-struct ndis_802_11_fix_ie {
- u8 time_stamp[8];
- u16 beacon_interval;
- u16 capabilities;
-};
-
-struct ndis_80211_var_ie {
- u8 element_id;
- u8 length;
- u8 data[];
-};
-
-/* Length is the 4 bytes multiples of the sum of
- * ETH_ALEN + 2 +
- * sizeof (struct ndis_802_11_ssid) + sizeof (u32) +
- * sizeof (long) +
- * sizeof (struct ndis_802_11_conf) + sizeof (NDIS_802_11_RATES_EX) + ie_length
- *
- * Except for ie_length, all other fields are fixed length. Therefore, we can
- * define a macro to present the partial sum.
- */
-enum ndis_802_11_authentication_mode {
- Ndis802_11AuthModeOpen,
- Ndis802_11AuthModeShared,
- Ndis802_11AuthModeAutoSwitch,
- Ndis802_11AuthModeWPA,
- Ndis802_11AuthModeWPAPSK,
- Ndis802_11AuthModeWPANone,
- Ndis802_11AuthModeWAPI,
- Ndis802_11AuthModeMax /* Not a real mode, defined as upper bound */
-};
-
-enum {
- 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_EncrypteionWAPI
-};
-
-#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
-
-/* Key mapping keys require a BSSID */
-
-struct ndis_802_11_wep {
- u32 length; /* Length of this structure */
- u32 key_index; /* 0 is the per-client key, 1-N are the global keys */
- u32 key_length; /* length of key in bytes */
- u8 key_material[16];/* variable length depending on above field */
-};
-
-/* 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
-
-struct wlan_phy_info {
- u8 signal_strength;/* in percentage) */
- u8 signal_quality;/* 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_wlan_bssid_ex_sz()
- */
-struct wlan_bssid_ex {
- u32 length;
- u8 mac_address[ETH_ALEN];
- u8 reserved[2];/* 0]: IS beacon frame */
- struct ndis_802_11_ssid ssid;
- u32 privacy;
- long rssi;/* in dBM, raw data , get from PHY) */
- struct ndis_802_11_conf configuration;
- enum nl80211_iftype infrastructure_mode;
- NDIS_802_11_RATES_EX supported_rates;
- struct wlan_phy_info phy_info;
- u32 ie_length;
- 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->ie_length);
-}
-
-struct wlan_network {
- struct list_head list;
- int network_type; /* refer to ieee80211.h for WIRELESS_11A/B/G */
- int fixed; /* set to fixed when not to be removed as 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 bcn_info;
-};
-
-enum {
- DISABLE_VCS,
- ENABLE_VCS,
- AUTO_VCS
-};
-
-enum {
- 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 {
- NO_LIMIT,
- TWO_MSDU,
- FOUR_MSDU,
- SIX_MSDU
-};
-
-#define NUM_PRE_AUTH_KEY 16
-#define NUM_PMKID_CACHE NUM_PRE_AUTH_KEY
-
-#endif /* ifndef WLAN_BSSDEF_H_ */
diff --git a/drivers/staging/rtl8723bs/include/xmit_osdep.h b/drivers/staging/rtl8723bs/include/xmit_osdep.h
deleted file mode 100644
index ee6616880d41..000000000000
--- a/drivers/staging/rtl8723bs/include/xmit_osdep.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#ifndef __XMIT_OSDEP_H_
-#define __XMIT_OSDEP_H_
-
-
-struct pkt_file {
- struct sk_buff *pkt;
- __kernel_size_t pkt_len; /* the remainder length of the open_file */
- unsigned char *cur_buffer;
- u8 *buf_start;
- u8 *cur_addr;
- __kernel_size_t buf_len;
-};
-
-#define NR_XMITFRAME 256
-
-struct xmit_priv;
-struct pkt_attrib;
-struct sta_xmit_priv;
-struct xmit_frame;
-struct xmit_buf;
-
-extern void _rtw_xmit_entry(struct sk_buff *pkt, struct net_device *pnetdev);
-extern netdev_tx_t rtw_xmit_entry(struct sk_buff *pkt, struct net_device *pnetdev);
-
-void rtw_os_xmit_schedule(struct adapter *padapter);
-
-void rtw_os_xmit_resource_free(struct adapter *padapter, struct xmit_buf *pxmitbuf, u32 free_sz, u8 flag);
-
-extern unsigned int rtw_remainder_len(struct pkt_file *pfile);
-extern void _rtw_open_pktfile(struct sk_buff *pkt, struct pkt_file *pfile);
-int _rtw_pktfile_read(struct pkt_file *pfile, u8 *rmem, unsigned int rlen);
-extern signed int rtw_endofpktfile(struct pkt_file *pfile);
-
-extern void rtw_os_pkt_complete(struct adapter *padapter, struct sk_buff *pkt);
-extern void rtw_os_xmit_complete(struct adapter *padapter, struct xmit_frame *pxframe);
-
-#endif /* __XMIT_OSDEP_H_ */
diff --git a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
deleted file mode 100644
index 3468d4114f60..000000000000
--- a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
+++ /dev/null
@@ -1,2795 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-
-#include <linux/etherdevice.h>
-#include <drv_types.h>
-#include <linux/jiffies.h>
-
-#include <rtw_wifi_regd.h>
-
-#define RTW_MAX_MGMT_TX_CNT (8)
-
-#define RTW_SCAN_IE_LEN_MAX 2304
-#define RTW_MAX_REMAIN_ON_CHANNEL_DURATION 5000 /* ms */
-#define RTW_MAX_NUM_PMKIDS 4
-
-static const u32 rtw_cipher_suites[] = {
- WLAN_CIPHER_SUITE_WEP40,
- WLAN_CIPHER_SUITE_WEP104,
- WLAN_CIPHER_SUITE_TKIP,
- WLAN_CIPHER_SUITE_CCMP,
- WLAN_CIPHER_SUITE_AES_CMAC,
-};
-
-#define RATETAB_ENT(_rate, _rateid, _flags) \
- { \
- .bitrate = (_rate), \
- .hw_value = (_rateid), \
- .flags = (_flags), \
- }
-
-#define CHAN2G(_channel, _freq, _flags) { \
- .band = NL80211_BAND_2GHZ, \
- .center_freq = (_freq), \
- .hw_value = (_channel), \
- .flags = (_flags), \
- .max_antenna_gain = 0, \
- .max_power = 30, \
-}
-
-/* if wowlan is not supported, kernel generate a disconnect at each suspend
- * cf: /net/wireless/sysfs.c, so register a stub wowlan.
- * Moreover wowlan has to be enabled via a the nl80211_set_wowlan callback.
- * (from user space, e.g. iw phy0 wowlan enable)
- */
-static __maybe_unused const struct wiphy_wowlan_support wowlan_stub = {
- .flags = WIPHY_WOWLAN_ANY,
- .n_patterns = 0,
- .pattern_max_len = 0,
- .pattern_min_len = 0,
- .max_pkt_offset = 0,
-};
-
-static struct ieee80211_rate rtw_rates[] = {
- RATETAB_ENT(10, 0x1, 0),
- RATETAB_ENT(20, 0x2, 0),
- RATETAB_ENT(55, 0x4, 0),
- RATETAB_ENT(110, 0x8, 0),
- RATETAB_ENT(60, 0x10, 0),
- RATETAB_ENT(90, 0x20, 0),
- RATETAB_ENT(120, 0x40, 0),
- RATETAB_ENT(180, 0x80, 0),
- RATETAB_ENT(240, 0x100, 0),
- RATETAB_ENT(360, 0x200, 0),
- RATETAB_ENT(480, 0x400, 0),
- RATETAB_ENT(540, 0x800, 0),
-};
-
-#define rtw_g_rates (rtw_rates + 0)
-#define RTW_G_RATES_NUM 12
-
-#define RTW_2G_CHANNELS_NUM 14
-
-static struct ieee80211_channel rtw_2ghz_channels[] = {
- CHAN2G(1, 2412, 0),
- CHAN2G(2, 2417, 0),
- CHAN2G(3, 2422, 0),
- CHAN2G(4, 2427, 0),
- CHAN2G(5, 2432, 0),
- CHAN2G(6, 2437, 0),
- CHAN2G(7, 2442, 0),
- CHAN2G(8, 2447, 0),
- CHAN2G(9, 2452, 0),
- CHAN2G(10, 2457, 0),
- CHAN2G(11, 2462, 0),
- CHAN2G(12, 2467, 0),
- CHAN2G(13, 2472, 0),
- CHAN2G(14, 2484, 0),
-};
-
-static void rtw_2g_channels_init(struct ieee80211_channel *channels)
-{
- memcpy(channels, rtw_2ghz_channels,
- sizeof(struct ieee80211_channel) * RTW_2G_CHANNELS_NUM
- );
-}
-
-static void rtw_2g_rates_init(struct ieee80211_rate *rates)
-{
- memcpy(rates, rtw_g_rates,
- sizeof(struct ieee80211_rate) * RTW_G_RATES_NUM
- );
-}
-
-static struct ieee80211_supported_band *rtw_spt_band_alloc(
- enum nl80211_band band
- )
-{
- struct ieee80211_supported_band *spt_band = NULL;
- size_t channels_sz, bitrate_size;
-
- if (band != NL80211_BAND_2GHZ)
- goto exit;
-
- channels_sz = array_size(RTW_2G_CHANNELS_NUM, sizeof(struct ieee80211_channel));
- bitrate_size = array_size(RTW_G_RATES_NUM, sizeof(struct ieee80211_rate));
-
- spt_band = kzalloc(sizeof(*spt_band) + channels_sz + bitrate_size, GFP_KERNEL);
- if (!spt_band)
- goto exit;
-
- spt_band->channels = (void *)spt_band + sizeof(*spt_band);
- spt_band->bitrates = (void *)spt_band + sizeof(*spt_band) + channels_sz;
- spt_band->band = band;
- spt_band->n_channels = RTW_2G_CHANNELS_NUM;
- spt_band->n_bitrates = RTW_G_RATES_NUM;
-
- rtw_2g_channels_init(spt_band->channels);
- rtw_2g_rates_init(spt_band->bitrates);
-
- /* spt_band.ht_cap */
-
-exit:
-
- return spt_band;
-}
-
-static const struct ieee80211_txrx_stypes
-rtw_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = {
- [NL80211_IFTYPE_ADHOC] = {
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ACTION >> 4)
- },
- [NL80211_IFTYPE_STATION] = {
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
- BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
- },
- [NL80211_IFTYPE_AP] = {
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
- BIT(IEEE80211_STYPE_DISASSOC >> 4) |
- BIT(IEEE80211_STYPE_AUTH >> 4) |
- BIT(IEEE80211_STYPE_DEAUTH >> 4) |
- BIT(IEEE80211_STYPE_ACTION >> 4)
- },
- [NL80211_IFTYPE_AP_VLAN] = {
- /* copy AP */
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
- BIT(IEEE80211_STYPE_DISASSOC >> 4) |
- BIT(IEEE80211_STYPE_AUTH >> 4) |
- BIT(IEEE80211_STYPE_DEAUTH >> 4) |
- BIT(IEEE80211_STYPE_ACTION >> 4)
- },
- [NL80211_IFTYPE_P2P_CLIENT] = {
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
- BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
- },
- [NL80211_IFTYPE_P2P_GO] = {
- .tx = 0xffff,
- .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
- BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
- BIT(IEEE80211_STYPE_DISASSOC >> 4) |
- BIT(IEEE80211_STYPE_AUTH >> 4) |
- BIT(IEEE80211_STYPE_DEAUTH >> 4) |
- BIT(IEEE80211_STYPE_ACTION >> 4)
- },
-};
-
-int rtw_ieee80211_channel_to_frequency(int chan)
-{
- /* NL80211_BAND_2GHZ */
- if (chan == 14)
- return 2484;
-
- if (chan < 14)
- return 2407 + chan * 5;
-
- return 0; /* not supported */
-}
-
-#define MAX_BSSINFO_LEN 1000
-struct cfg80211_bss *rtw_cfg80211_inform_bss(struct adapter *padapter, struct wlan_network *pnetwork)
-{
- struct ieee80211_channel *notify_channel;
- struct cfg80211_bss *bss = NULL;
- /* struct ieee80211_supported_band *band; */
- u16 channel;
- u32 freq;
- u64 notify_timestamp;
- s32 notify_signal;
- u8 *buf = NULL, *pbuf;
- size_t len, bssinf_len = 0;
- struct ieee80211_hdr *pwlanhdr;
- __le16 *fctrl;
-
- struct wireless_dev *wdev = padapter->rtw_wdev;
- struct wiphy *wiphy = wdev->wiphy;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
- bssinf_len = pnetwork->network.ie_length + sizeof(struct ieee80211_hdr_3addr);
- if (bssinf_len > MAX_BSSINFO_LEN)
- goto exit;
-
- {
- u16 wapi_len = 0;
-
- if (rtw_get_wapi_ie(pnetwork->network.ies, pnetwork->network.ie_length, NULL, &wapi_len) > 0) {
- if (wapi_len > 0)
- goto exit;
- }
- }
-
- /* To reduce PBC Overlap rate */
- /* spin_lock_bh(&pwdev_priv->scan_req_lock); */
- if (adapter_wdev_data(padapter)->scan_request) {
- u8 *psr = NULL, sr = 0;
- struct ndis_802_11_ssid *pssid = &pnetwork->network.ssid;
- struct cfg80211_scan_request *request = adapter_wdev_data(padapter)->scan_request;
- struct cfg80211_ssid *ssids = request->ssids;
- u32 wpsielen = 0;
- u8 *wpsie = NULL;
-
- wpsie = rtw_get_wps_ie(pnetwork->network.ies + _FIXED_IE_LENGTH_, pnetwork->network.ie_length - _FIXED_IE_LENGTH_, NULL, &wpsielen);
-
- if (wpsie && wpsielen > 0)
- psr = rtw_get_wps_attr_content(wpsie, wpsielen, WPS_ATTR_SELECTED_REGISTRAR, (u8 *)(&sr), NULL);
-
- if (sr != 0) {
- /* it means under processing WPS */
- if (request->n_ssids == 1 && request->n_channels == 1) {
- if (ssids[0].ssid_len != 0 &&
- (pssid->ssid_length != ssids[0].ssid_len ||
- memcmp(pssid->ssid, ssids[0].ssid, ssids[0].ssid_len))) {
- if (psr)
- *psr = 0; /* clear sr */
- }
- }
- }
- }
- /* spin_unlock_bh(&pwdev_priv->scan_req_lock); */
-
- channel = pnetwork->network.configuration.ds_config;
- freq = rtw_ieee80211_channel_to_frequency(channel);
-
- notify_channel = ieee80211_get_channel(wiphy, freq);
-
- notify_timestamp = ktime_to_us(ktime_get_boottime());
-
- /* We've set wiphy's signal_type as CFG80211_SIGNAL_TYPE_MBM: signal strength in mBm (100*dBm) */
- if (check_fwstate(pmlmepriv, _FW_LINKED) &&
- is_same_network(&pmlmepriv->cur_network.network, &pnetwork->network, 0)) {
- notify_signal = 100 * translate_percentage_to_dbm(padapter->recvpriv.signal_strength);/* dbm */
- } else {
- notify_signal = 100 * translate_percentage_to_dbm(pnetwork->network.phy_info.signal_strength);/* dbm */
- }
-
- buf = kzalloc(MAX_BSSINFO_LEN, GFP_ATOMIC);
- if (!buf)
- goto exit;
- pbuf = buf;
-
- pwlanhdr = (struct ieee80211_hdr *)pbuf;
- fctrl = &(pwlanhdr->frame_control);
- *(fctrl) = 0;
-
- SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
- /* pmlmeext->mgnt_seq++; */
-
- if (pnetwork->network.reserved[0] == 1) { /* WIFI_BEACON */
- eth_broadcast_addr(pwlanhdr->addr1);
- SetFrameSubType(pbuf, WIFI_BEACON);
- } else {
- memcpy(pwlanhdr->addr1, myid(&(padapter->eeprompriv)), ETH_ALEN);
- SetFrameSubType(pbuf, WIFI_PROBERSP);
- }
-
- memcpy(pwlanhdr->addr2, pnetwork->network.mac_address, ETH_ALEN);
- memcpy(pwlanhdr->addr3, pnetwork->network.mac_address, ETH_ALEN);
-
- pbuf += sizeof(struct ieee80211_hdr_3addr);
- len = sizeof(struct ieee80211_hdr_3addr);
-
- memcpy(pbuf, pnetwork->network.ies, pnetwork->network.ie_length);
- len += pnetwork->network.ie_length;
-
- *((__le64 *)pbuf) = cpu_to_le64(notify_timestamp);
-
- bss = cfg80211_inform_bss_frame(wiphy, notify_channel, (struct ieee80211_mgmt *)buf,
- len, notify_signal, GFP_ATOMIC);
-
- if (unlikely(!bss))
- goto free_buf;
-
- cfg80211_put_bss(wiphy, bss);
-free_buf:
- kfree(buf);
-
-exit:
- return bss;
-}
-
-/*
- * Check the given bss is valid by kernel API cfg80211_get_bss()
- * @padapter : the given adapter
- *
- * return true if bss is valid, false for not found.
- */
-int rtw_cfg80211_check_bss(struct adapter *padapter)
-{
- struct wlan_bssid_ex *pnetwork = &(padapter->mlmeextpriv.mlmext_info.network);
- struct cfg80211_bss *bss = NULL;
- struct ieee80211_channel *notify_channel = NULL;
- u32 freq;
-
- if (!(pnetwork) || !(padapter->rtw_wdev))
- return false;
-
- freq = rtw_ieee80211_channel_to_frequency(pnetwork->configuration.ds_config);
-
- notify_channel = ieee80211_get_channel(padapter->rtw_wdev->wiphy, freq);
- bss = cfg80211_get_bss(padapter->rtw_wdev->wiphy, notify_channel,
- pnetwork->mac_address, pnetwork->ssid.ssid,
- pnetwork->ssid.ssid_length,
- IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY);
-
- cfg80211_put_bss(padapter->rtw_wdev->wiphy, bss);
-
- return (bss != NULL);
-}
-
-void rtw_cfg80211_ibss_indicate_connect(struct adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wlan_network *cur_network = &(pmlmepriv->cur_network);
- struct wireless_dev *pwdev = padapter->rtw_wdev;
- struct wiphy *wiphy = pwdev->wiphy;
- int freq = (int)cur_network->network.configuration.ds_config;
- struct ieee80211_channel *chan;
-
- if (pwdev->iftype != NL80211_IFTYPE_ADHOC)
- return;
-
- if (!rtw_cfg80211_check_bss(padapter)) {
- struct wlan_bssid_ex *pnetwork = &(padapter->mlmeextpriv.mlmext_info.network);
- struct wlan_network *scanned = pmlmepriv->cur_network_scanned;
-
- if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
- memcpy(&cur_network->network, pnetwork, sizeof(struct wlan_bssid_ex));
- rtw_cfg80211_inform_bss(padapter, cur_network);
- } else {
- if (!scanned) {
- WARN_ON(1);
- return;
- }
- if (!memcmp(&scanned->network.ssid, &pnetwork->ssid,
- sizeof(struct ndis_802_11_ssid)) &&
- !memcmp(scanned->network.mac_address, pnetwork->mac_address, ETH_ALEN))
- rtw_cfg80211_inform_bss(padapter, scanned);
- else
- WARN_ON(1);
- }
-
- if (!rtw_cfg80211_check_bss(padapter))
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " BSS not found !!\n",
- FUNC_ADPT_ARG(padapter));
- }
- /* notify cfg80211 that device joined an IBSS */
- chan = ieee80211_get_channel(wiphy, freq);
- cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.mac_address, chan, GFP_ATOMIC);
-}
-
-void rtw_cfg80211_indicate_connect(struct adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wlan_network *cur_network = &(pmlmepriv->cur_network);
- struct wireless_dev *pwdev = padapter->rtw_wdev;
-
- if (pwdev->iftype != NL80211_IFTYPE_STATION
- && pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT
- ) {
- return;
- }
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
- return;
-
- {
- struct wlan_bssid_ex *pnetwork = &(padapter->mlmeextpriv.mlmext_info.network);
- struct wlan_network *scanned = pmlmepriv->cur_network_scanned;
-
- if (!scanned) {
- WARN_ON(1);
- goto check_bss;
- }
-
- if (!memcmp(scanned->network.mac_address, pnetwork->mac_address, ETH_ALEN) &&
- !memcmp(&scanned->network.ssid, &pnetwork->ssid,
- sizeof(struct ndis_802_11_ssid)))
- rtw_cfg80211_inform_bss(padapter, scanned);
- else
- WARN_ON(1);
- }
-
-check_bss:
- if (!rtw_cfg80211_check_bss(padapter))
- netdev_dbg(padapter->pnetdev,
- FUNC_ADPT_FMT " BSS not found !!\n",
- FUNC_ADPT_ARG(padapter));
-
- if (rtw_to_roam(padapter) > 0) {
- struct wiphy *wiphy = pwdev->wiphy;
- struct ieee80211_channel *notify_channel;
- u32 freq;
- u16 channel = cur_network->network.configuration.ds_config;
- struct cfg80211_roam_info roam_info = {};
-
- freq = rtw_ieee80211_channel_to_frequency(channel);
-
- notify_channel = ieee80211_get_channel(wiphy, freq);
-
- roam_info.links[0].channel = notify_channel;
- roam_info.links[0].bssid = cur_network->network.mac_address;
- roam_info.req_ie =
- pmlmepriv->assoc_req + sizeof(struct ieee80211_hdr_3addr) + 2;
- roam_info.req_ie_len =
- pmlmepriv->assoc_req_len - sizeof(struct ieee80211_hdr_3addr) - 2;
- roam_info.resp_ie =
- pmlmepriv->assoc_rsp + sizeof(struct ieee80211_hdr_3addr) + 6;
- roam_info.resp_ie_len =
- pmlmepriv->assoc_rsp_len - sizeof(struct ieee80211_hdr_3addr) - 6;
- cfg80211_roamed(padapter->pnetdev, &roam_info, GFP_ATOMIC);
- } else {
- cfg80211_connect_result(padapter->pnetdev, cur_network->network.mac_address
- , pmlmepriv->assoc_req + sizeof(struct ieee80211_hdr_3addr) + 2
- , pmlmepriv->assoc_req_len - sizeof(struct ieee80211_hdr_3addr) - 2
- , pmlmepriv->assoc_rsp + sizeof(struct ieee80211_hdr_3addr) + 6
- , pmlmepriv->assoc_rsp_len - sizeof(struct ieee80211_hdr_3addr) - 6
- , WLAN_STATUS_SUCCESS, GFP_ATOMIC);
- }
-}
-
-void rtw_cfg80211_indicate_disconnect(struct adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wireless_dev *pwdev = padapter->rtw_wdev;
-
- if (pwdev->iftype != NL80211_IFTYPE_STATION
- && pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT
- ) {
- return;
- }
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
- return;
-
- if (!padapter->mlmepriv.not_indic_disco) {
- if (check_fwstate(&padapter->mlmepriv, _FW_LINKED)) {
- cfg80211_disconnected(padapter->pnetdev, 0,
- NULL, 0, true, GFP_ATOMIC);
- } else {
- cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0,
- WLAN_STATUS_UNSPECIFIED_FAILURE, GFP_ATOMIC/*GFP_KERNEL*/);
- }
- }
-}
-
-static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, struct ieee_param *param, u32 param_len)
-{
- int ret = 0;
- u32 wep_key_idx, wep_key_len;
- struct sta_info *psta = NULL, *pbcmc_sta = NULL;
- struct adapter *padapter = rtw_netdev_priv(dev);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct security_priv *psecuritypriv = &(padapter->securitypriv);
- struct sta_priv *pstapriv = &padapter->stapriv;
- char *grpkey = padapter->securitypriv.dot118021XGrpKey[param->u.crypt.idx].skey;
- char *txkey = padapter->securitypriv.dot118021XGrptxmickey[param->u.crypt.idx].skey;
- char *rxkey = padapter->securitypriv.dot118021XGrprxmickey[param->u.crypt.idx].skey;
-
- param->u.crypt.err = 0;
- param->u.crypt.alg[IEEE_CRYPT_ALG_NAME_LEN - 1] = '\0';
-
- if (param_len != sizeof(struct ieee_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 {
- psta = rtw_get_stainfo(pstapriv, param->sta_addr);
- if (!psta)
- /* ret = -EINVAL; */
- goto exit;
- }
-
- if (strcmp(param->u.crypt.alg, "none") == 0 && !psta)
- goto exit;
-
- if (strcmp(param->u.crypt.alg, "WEP") == 0 && !psta) {
- wep_key_idx = param->u.crypt.idx;
- wep_key_len = param->u.crypt.key_len;
-
- if ((wep_key_idx >= WEP_KEYS) || (wep_key_len <= 0)) {
- ret = -EINVAL;
- goto exit;
- }
-
- if (wep_key_len > 0)
- wep_key_len = wep_key_len <= 5 ? 5 : 13;
-
- if (psecuritypriv->bWepDefaultKeyIdxSet == 0) {
- /* wep default key has not been set, so use this key index as default key. */
-
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_auto;
- psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
- psecuritypriv->dot11_privacy_algrthm = _WEP40_;
- psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
-
- if (wep_key_len == 13) {
- psecuritypriv->dot11_privacy_algrthm = _WEP104_;
- psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
- }
-
- psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx;
- }
-
- memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), param->u.crypt.key, wep_key_len);
-
- psecuritypriv->dot11DefKeylen[wep_key_idx] = wep_key_len;
-
- rtw_ap_set_wep_key(padapter, param->u.crypt.key, wep_key_len, wep_key_idx, 1);
-
- goto exit;
- }
-
- /* group key */
- if (!psta && check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- /* group key */
- if (param->u.crypt.set_tx == 0) {
- if (strcmp(param->u.crypt.alg, "WEP") == 0) {
- memcpy(grpkey, param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len));
-
- psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
- if (param->u.crypt.key_len == 13)
- psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
-
- } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) {
- psecuritypriv->dot118021XGrpPrivacy = _TKIP_;
-
- memcpy(grpkey, param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len));
-
- /* set mic key */
- memcpy(txkey, &(param->u.crypt.key[16]), 8);
- memcpy(rxkey, &(param->u.crypt.key[24]), 8);
-
- psecuritypriv->busetkipkey = true;
-
- } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) {
- psecuritypriv->dot118021XGrpPrivacy = _AES_;
-
- memcpy(grpkey, param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len));
- } else {
- psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
- }
-
- psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx;
-
- psecuritypriv->binstallGrpkey = true;
-
- psecuritypriv->dot11_privacy_algrthm = psecuritypriv->dot118021XGrpPrivacy;/* */
-
- rtw_ap_set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, param->u.crypt.idx);
-
- pbcmc_sta = rtw_get_bcmc_stainfo(padapter);
- if (pbcmc_sta) {
- pbcmc_sta->ieee8021x_blocked = false;
- pbcmc_sta->dot118021XPrivacy = psecuritypriv->dot118021XGrpPrivacy;/* rx will use bmc_sta's dot118021XPrivacy */
- }
- }
-
- goto exit;
- }
-
- if (psecuritypriv->dot11_auth_algrthm == dot11_auth_algrthm_8021x && psta) {/* psk/802_1x */
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- 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, "WEP") == 0) {
- psta->dot118021XPrivacy = _WEP40_;
- if (param->u.crypt.key_len == 13)
- psta->dot118021XPrivacy = _WEP104_;
- } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) {
- psta->dot118021XPrivacy = _TKIP_;
-
- /* set mic key */
- memcpy(psta->dot11tkiptxmickey.skey, &(param->u.crypt.key[16]), 8);
- memcpy(psta->dot11tkiprxmickey.skey, &(param->u.crypt.key[24]), 8);
-
- psecuritypriv->busetkipkey = true;
-
- } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) {
- psta->dot118021XPrivacy = _AES_;
- } else {
- psta->dot118021XPrivacy = _NO_PRIVACY_;
- }
-
- rtw_ap_set_pairwise_key(padapter, psta);
-
- psta->ieee8021x_blocked = false;
-
- psta->bpairwise_key_installed = true;
-
- } else { /* group key??? */
- if (strcmp(param->u.crypt.alg, "WEP") == 0) {
- memcpy(grpkey, param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len));
-
- psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
- if (param->u.crypt.key_len == 13)
- psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
- } else if (strcmp(param->u.crypt.alg, "TKIP") == 0) {
- psecuritypriv->dot118021XGrpPrivacy = _TKIP_;
-
- memcpy(grpkey, param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len));
-
- /* set mic key */
- memcpy(txkey, &(param->u.crypt.key[16]), 8);
- memcpy(rxkey, &(param->u.crypt.key[24]), 8);
-
- psecuritypriv->busetkipkey = true;
-
- } else if (strcmp(param->u.crypt.alg, "CCMP") == 0) {
- psecuritypriv->dot118021XGrpPrivacy = _AES_;
-
- memcpy(grpkey, param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len));
- } else {
- psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
- }
-
- psecuritypriv->dot118021XGrpKeyid = param->u.crypt.idx;
-
- psecuritypriv->binstallGrpkey = true;
-
- psecuritypriv->dot11_privacy_algrthm = psecuritypriv->dot118021XGrpPrivacy;/* */
-
- rtw_ap_set_group_key(padapter, param->u.crypt.key, psecuritypriv->dot118021XGrpPrivacy, param->u.crypt.idx);
-
- pbcmc_sta = rtw_get_bcmc_stainfo(padapter);
- if (pbcmc_sta) {
- pbcmc_sta->ieee8021x_blocked = false;
- pbcmc_sta->dot118021XPrivacy = psecuritypriv->dot118021XGrpPrivacy;/* rx will use bmc_sta's dot118021XPrivacy */
- }
- }
- }
- }
-
-exit:
-
- return ret;
-}
-
-static int rtw_cfg80211_set_encryption(struct net_device *dev, struct ieee_param *param, u32 param_len)
-{
- int ret = 0;
- u8 max_idx;
- u32 wep_key_idx, wep_key_len;
- struct adapter *padapter = rtw_netdev_priv(dev);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- 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) {
- ret = -EINVAL;
- goto exit;
- }
-
- if (strcmp(param->u.crypt.alg, "WEP") == 0)
- max_idx = WEP_KEYS - 1;
- else
- max_idx = BIP_MAX_KEYID;
-
- if (param->u.crypt.idx > max_idx) {
- netdev_err(dev, "Error crypt.idx %d > %d\n", param->u.crypt.idx, max_idx);
- ret = -EINVAL;
- goto exit;
- }
-
- if (strcmp(param->u.crypt.alg, "WEP") == 0) {
- wep_key_idx = param->u.crypt.idx;
- wep_key_len = param->u.crypt.key_len;
-
- if (wep_key_len <= 0) {
- ret = -EINVAL;
- goto exit;
- }
-
- if (psecuritypriv->bWepDefaultKeyIdxSet == 0) {
- /* wep default key has not been set, so use this key index as default key. */
-
- wep_key_len = wep_key_len <= 5 ? 5 : 13;
-
- psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
- psecuritypriv->dot11_privacy_algrthm = _WEP40_;
- psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
-
- if (wep_key_len == 13) {
- psecuritypriv->dot11_privacy_algrthm = _WEP104_;
- psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
- }
-
- psecuritypriv->dot11PrivacyKeyIndex = wep_key_idx;
- }
-
- memcpy(&(psecuritypriv->dot11DefKey[wep_key_idx].skey[0]), param->u.crypt.key, wep_key_len);
-
- psecuritypriv->dot11DefKeylen[wep_key_idx] = wep_key_len;
-
- rtw_set_key(padapter, psecuritypriv, wep_key_idx, 0, true);
-
- goto exit;
- }
-
- if (padapter->securitypriv.dot11_auth_algrthm == dot11_auth_algrthm_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) {
- /* Jeff: don't disable ieee8021x_blocked while clearing key */
- 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.dot11_privacy_algrthm;
- }
-
- 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;
- /* _set_timer(&padapter->securitypriv.tkip_timer, 50); */
- }
-
- rtw_setstakey_cmd(padapter, psta, true, true);
- } else { /* group key */
- if (strcmp(param->u.crypt.alg, "TKIP") == 0 || strcmp(param->u.crypt.alg, "CCMP") == 0) {
- 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, true);
- } else if (strcmp(param->u.crypt.alg, "BIP") == 0) {
- /* save the IGTK key, length 16 bytes */
- memcpy(padapter->securitypriv.dot11wBIPKey[param->u.crypt.idx].skey, param->u.crypt.key, (param->u.crypt.key_len > 16 ? 16 : param->u.crypt.key_len));
- padapter->securitypriv.dot11wBIPKeyid = param->u.crypt.idx;
- padapter->securitypriv.binstallBIPkey = true;
- }
- }
- }
-
- pbcmc_sta = rtw_get_bcmc_stainfo(padapter);
- if (pbcmc_sta) {
- /* 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.dot11_privacy_algrthm;
- }
- }
- } else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) { /* adhoc mode */
- }
- }
-
-exit:
-
- return ret;
-}
-
-static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct wireless_dev *wdev,
- int link_id, u8 key_index, bool pairwise,
- const u8 *mac_addr, struct key_params *params)
-{
- char *alg_name;
- u32 param_len;
- struct ieee_param *param = NULL;
- int ret = 0;
- struct net_device *ndev = wdev->netdev;
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- param_len = sizeof(struct ieee_param) + params->key_len;
- param = kzalloc(param_len, GFP_KERNEL);
- if (!param)
- return -ENOMEM;
-
- param->cmd = IEEE_CMD_SET_ENCRYPTION;
- eth_broadcast_addr(param->sta_addr);
-
- switch (params->cipher) {
- case IW_AUTH_CIPHER_NONE:
- /* todo: remove key */
- /* remove = 1; */
- alg_name = "none";
- break;
- case WLAN_CIPHER_SUITE_WEP40:
- case WLAN_CIPHER_SUITE_WEP104:
- alg_name = "WEP";
- break;
- case WLAN_CIPHER_SUITE_TKIP:
- alg_name = "TKIP";
- break;
- case WLAN_CIPHER_SUITE_CCMP:
- alg_name = "CCMP";
- break;
- case WLAN_CIPHER_SUITE_AES_CMAC:
- alg_name = "BIP";
- break;
- default:
- ret = -ENOTSUPP;
- goto addkey_end;
- }
-
- strscpy(param->u.crypt.alg, alg_name);
-
- if (!mac_addr || is_broadcast_ether_addr(mac_addr))
- param->u.crypt.set_tx = 0; /* for wpa/wpa2 group key */
- else
- param->u.crypt.set_tx = 1; /* for wpa/wpa2 pairwise key */
-
- param->u.crypt.idx = key_index;
-
- if (params->seq_len && params->seq)
- memcpy(param->u.crypt.seq, (u8 *)params->seq, params->seq_len);
-
- if (params->key_len && params->key) {
- param->u.crypt.key_len = params->key_len;
- memcpy(param->u.crypt.key, (u8 *)params->key, params->key_len);
- }
-
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
- ret = rtw_cfg80211_set_encryption(ndev, param, param_len);
- } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- if (mac_addr)
- memcpy(param->sta_addr, mac_addr, ETH_ALEN);
-
- ret = rtw_cfg80211_ap_set_encryption(ndev, param, param_len);
- } else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
- check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
- ret = rtw_cfg80211_set_encryption(ndev, param, param_len);
- }
-
-addkey_end:
- kfree(param);
-
- return ret;
-}
-
-static int cfg80211_rtw_get_key(struct wiphy *wiphy, struct wireless_dev *wdev,
- int link_id, u8 key_index, bool pairwise,
- const u8 *mac_addr, void *cookie,
- void (*callback)(void *cookie,
- struct key_params*))
-{
- return 0;
-}
-
-static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct wireless_dev *wdev,
- int link_id, u8 key_index, bool pairwise,
- const u8 *mac_addr)
-{
- struct adapter *padapter = rtw_netdev_priv(wdev->netdev);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- if (key_index == psecuritypriv->dot11PrivacyKeyIndex) {
- /* clear the flag of wep default key set. */
- psecuritypriv->bWepDefaultKeyIdxSet = 0;
- }
-
- return 0;
-}
-
-static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
- struct net_device *ndev, int link_id,
- u8 key_index, bool unicast,
- bool multicast)
-{
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- if ((key_index < WEP_KEYS) && ((psecuritypriv->dot11_privacy_algrthm == _WEP40_) || (psecuritypriv->dot11_privacy_algrthm == _WEP104_))) { /* set wep default key */
- psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
-
- psecuritypriv->dot11PrivacyKeyIndex = key_index;
-
- psecuritypriv->dot11_privacy_algrthm = _WEP40_;
- psecuritypriv->dot118021XGrpPrivacy = _WEP40_;
- if (psecuritypriv->dot11DefKeylen[key_index] == 13) {
- psecuritypriv->dot11_privacy_algrthm = _WEP104_;
- psecuritypriv->dot118021XGrpPrivacy = _WEP104_;
- }
-
- psecuritypriv->bWepDefaultKeyIdxSet = 1; /* set the flag to represent that wep default key has been set */
- }
-
- return 0;
-}
-
-static int cfg80211_rtw_get_station(struct wiphy *wiphy,
- struct wireless_dev *wdev,
- const u8 *mac,
- struct station_info *sinfo)
-{
- int ret = 0;
- struct net_device *ndev = wdev_to_ndev(wdev);
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct sta_info *psta = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
-
- sinfo->filled = 0;
-
- if (!mac) {
- ret = -ENOENT;
- goto exit;
- }
-
- psta = rtw_get_stainfo(pstapriv, (u8 *)mac);
- if (!psta) {
- ret = -ENOENT;
- goto exit;
- }
-
- /* for infra./P2PClient mode */
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)
- && check_fwstate(pmlmepriv, _FW_LINKED)) {
- struct wlan_network *cur_network = &(pmlmepriv->cur_network);
-
- if (memcmp((u8 *)mac, cur_network->network.mac_address, ETH_ALEN)) {
- ret = -ENOENT;
- goto exit;
- }
-
- sinfo->filled |= BIT_ULL(NL80211_STA_INFO_SIGNAL);
- sinfo->signal = translate_percentage_to_dbm(padapter->recvpriv.signal_strength);
-
- sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_BITRATE);
- sinfo->txrate.legacy = rtw_get_cur_max_rate(padapter);
-
- sinfo->filled |= BIT_ULL(NL80211_STA_INFO_RX_PACKETS);
- sinfo->rx_packets = sta_rx_data_pkts(psta);
-
- sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_PACKETS);
- sinfo->tx_packets = psta->sta_stats.tx_pkts;
- sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_FAILED);
- }
-
- /* for Ad-Hoc/AP mode */
- if ((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
- check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
- check_fwstate(pmlmepriv, WIFI_AP_STATE)) &&
- check_fwstate(pmlmepriv, _FW_LINKED)) {
- /* TODO: should acquire station info... */
- }
-
-exit:
- return ret;
-}
-
-static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
- struct net_device *ndev,
- enum nl80211_iftype type,
- struct vif_params *params)
-{
- enum nl80211_iftype old_type;
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct wireless_dev *rtw_wdev = padapter->rtw_wdev;
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- int ret = 0;
-
- if (adapter_to_dvobj(padapter)->processing_dev_remove) {
- ret = -EPERM;
- goto exit;
- }
-
- {
- if (netdev_open(ndev) != 0) {
- ret = -EPERM;
- goto exit;
- }
- }
-
- if (rtw_pwr_wakeup(padapter) == _FAIL) {
- ret = -EPERM;
- goto exit;
- }
-
- old_type = rtw_wdev->iftype;
-
- if (old_type != type) {
- pmlmeext->action_public_rxseq = 0xffff;
- pmlmeext->action_public_dialog_token = 0xff;
- }
-
- if (type != NL80211_IFTYPE_ADHOC &&
- type != NL80211_IFTYPE_STATION &&
- type != NL80211_IFTYPE_AP) {
- ret = -EOPNOTSUPP;
- goto exit;
- }
-
- rtw_wdev->iftype = type;
-
- if (!rtw_set_802_11_infrastructure_mode(padapter, type)) {
- rtw_wdev->iftype = old_type;
- ret = -EPERM;
- goto exit;
- }
-
- rtw_setopmode_cmd(padapter, type, true);
-
-exit:
-
- return ret;
-}
-
-void rtw_cfg80211_indicate_scan_done(struct adapter *adapter, bool aborted)
-{
- struct rtw_wdev_priv *pwdev_priv = adapter_wdev_data(adapter);
- struct cfg80211_scan_info info = {
- .aborted = aborted
- };
-
- spin_lock_bh(&pwdev_priv->scan_req_lock);
- if (pwdev_priv->scan_request) {
- /* avoid WARN_ON(request != wiphy_to_dev(request->wiphy)->scan_req); */
- if (pwdev_priv->scan_request->wiphy == pwdev_priv->rtw_wdev->wiphy)
- cfg80211_scan_done(pwdev_priv->scan_request, &info);
-
- pwdev_priv->scan_request = NULL;
- }
- spin_unlock_bh(&pwdev_priv->scan_req_lock);
-}
-
-void rtw_cfg80211_unlink_bss(struct adapter *padapter, struct wlan_network *pnetwork)
-{
- struct wireless_dev *pwdev = padapter->rtw_wdev;
- struct wiphy *wiphy = pwdev->wiphy;
- struct cfg80211_bss *bss = NULL;
- struct wlan_bssid_ex *select_network = &pnetwork->network;
-
- bss = cfg80211_get_bss(wiphy, NULL/*notify_channel*/,
- select_network->mac_address,
- select_network->ssid.ssid,
- select_network->ssid.ssid_length,
- IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY);
-
- if (bss) {
- cfg80211_unlink_bss(wiphy, bss);
- cfg80211_put_bss(padapter->rtw_wdev->wiphy, bss);
- }
-}
-
-void rtw_cfg80211_surveydone_event_callback(struct adapter *padapter)
-{
- struct list_head *plist, *phead;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct __queue *queue = &(pmlmepriv->scanned_queue);
- struct wlan_network *pnetwork = NULL;
-
- spin_lock_bh(&(pmlmepriv->scanned_queue.lock));
-
- phead = get_list_head(queue);
- list_for_each(plist, phead)
- {
- pnetwork = list_entry(plist, struct wlan_network, list);
-
- /* report network only if the current channel set contains the channel to which this network belongs */
- if (rtw_ch_set_search_ch(padapter->mlmeextpriv.channel_set, pnetwork->network.configuration.ds_config) >= 0
- && true == rtw_validate_ssid(&(pnetwork->network.ssid))) {
- /* ev =translate_scan(padapter, a, pnetwork, ev, stop); */
- rtw_cfg80211_inform_bss(padapter, pnetwork);
- }
- }
-
- spin_unlock_bh(&(pmlmepriv->scanned_queue.lock));
-}
-
-static int rtw_cfg80211_set_probe_req_wpsp2pie(struct adapter *padapter, char *buf, int len)
-{
- int ret = 0;
- unsigned int wps_ielen = 0;
- u8 *wps_ie;
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
-
- if (len > 0) {
- wps_ie = rtw_get_wps_ie(buf, len, NULL, &wps_ielen);
- if (wps_ie) {
- if (pmlmepriv->wps_probe_req_ie) {
- pmlmepriv->wps_probe_req_ie_len = 0;
- kfree(pmlmepriv->wps_probe_req_ie);
- pmlmepriv->wps_probe_req_ie = NULL;
- }
-
- pmlmepriv->wps_probe_req_ie = kmemdup(wps_ie, wps_ielen, GFP_KERNEL);
- if (!pmlmepriv->wps_probe_req_ie)
- return -EINVAL;
-
- pmlmepriv->wps_probe_req_ie_len = wps_ielen;
- }
- }
-
- return ret;
-}
-
-static int cfg80211_rtw_scan(struct wiphy *wiphy
- , struct cfg80211_scan_request *request)
-{
- struct net_device *ndev = wdev_to_ndev(request->wdev);
- int i;
- u8 _status = false;
- int ret = 0;
- struct ndis_802_11_ssid *ssid = NULL;
- struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
- u8 survey_times = 3;
- u8 survey_times_for_one_ch = 6;
- struct cfg80211_ssid *ssids = request->ssids;
- int j = 0;
- bool need_indicate_scan_done = false;
-
- struct adapter *padapter;
- struct rtw_wdev_priv *pwdev_priv;
- struct mlme_priv *pmlmepriv;
-
- if (!ndev) {
- ret = -EINVAL;
- goto exit;
- }
-
- padapter = rtw_netdev_priv(ndev);
- pwdev_priv = adapter_wdev_data(padapter);
- pmlmepriv = &padapter->mlmepriv;
-/* endif */
-
- spin_lock_bh(&pwdev_priv->scan_req_lock);
- pwdev_priv->scan_request = request;
- spin_unlock_bh(&pwdev_priv->scan_req_lock);
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS | _FW_UNDER_SURVEY |
- _FW_UNDER_LINKING)) {
- need_indicate_scan_done = true;
- goto check_need_indicate_scan_done;
- }
- }
-
- rtw_ps_deny(padapter, PS_DENY_SCAN);
- if (rtw_pwr_wakeup(padapter) == _FAIL) {
- need_indicate_scan_done = true;
- goto check_need_indicate_scan_done;
- }
-
- if (request->ie && request->ie_len > 0)
- rtw_cfg80211_set_probe_req_wpsp2pie(padapter, (u8 *)request->ie, request->ie_len);
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
- need_indicate_scan_done = true;
- goto check_need_indicate_scan_done;
- } else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
- ret = -EBUSY;
- goto check_need_indicate_scan_done;
- }
-
- if (pmlmepriv->link_detect_info.busy_traffic) {
- static unsigned long lastscantime;
- unsigned long passtime;
-
- passtime = jiffies_to_msecs(jiffies - lastscantime);
- lastscantime = jiffies;
- if (passtime > 12000) {
- need_indicate_scan_done = true;
- goto check_need_indicate_scan_done;
- }
- }
-
- if (rtw_is_scan_deny(padapter)) {
- need_indicate_scan_done = true;
- goto check_need_indicate_scan_done;
- }
-
- ssid = kzalloc_objs(*ssid, RTW_SSID_SCAN_AMOUNT);
- if (!ssid) {
- ret = -ENOMEM;
- goto check_need_indicate_scan_done;
- }
-
- /* parsing request ssids, n_ssids */
- for (i = 0; i < request->n_ssids && i < RTW_SSID_SCAN_AMOUNT; i++) {
- memcpy(ssid[i].ssid, ssids[i].ssid, ssids[i].ssid_len);
- ssid[i].ssid_length = ssids[i].ssid_len;
- }
-
- /* parsing channels, n_channels */
- memset(ch, 0, sizeof(struct rtw_ieee80211_channel) * RTW_CHANNEL_SCAN_AMOUNT);
- for (i = 0; i < request->n_channels && i < RTW_CHANNEL_SCAN_AMOUNT; i++) {
- ch[i].hw_value = request->channels[i]->hw_value;
- ch[i].flags = request->channels[i]->flags;
- }
-
- spin_lock_bh(&pmlmepriv->lock);
- if (request->n_channels == 1) {
- for (i = 1; i < survey_times_for_one_ch; i++)
- memcpy(&ch[i], &ch[0], sizeof(struct rtw_ieee80211_channel));
- _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, ch, survey_times_for_one_ch);
- } else if (request->n_channels <= 4) {
- for (j = request->n_channels - 1; j >= 0; j--)
- for (i = 0; i < survey_times; i++)
- memcpy(&ch[j * survey_times + i], &ch[j], sizeof(struct rtw_ieee80211_channel));
- _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, ch, survey_times * request->n_channels);
- } else {
- _status = rtw_sitesurvey_cmd(padapter, ssid, RTW_SSID_SCAN_AMOUNT, NULL, 0);
- }
- spin_unlock_bh(&pmlmepriv->lock);
-
- if (!_status)
- ret = -1;
-
-check_need_indicate_scan_done:
- kfree(ssid);
- if (need_indicate_scan_done) {
- rtw_cfg80211_surveydone_event_callback(padapter);
- rtw_cfg80211_indicate_scan_done(padapter, false);
- }
-
- rtw_ps_deny_cancel(padapter, PS_DENY_SCAN);
-
-exit:
- return ret;
-}
-
-static int cfg80211_rtw_set_wiphy_params(struct wiphy *wiphy, int radio_idx,
- u32 changed)
-{
- return 0;
-}
-
-static int rtw_cfg80211_set_wpa_version(struct security_priv *psecuritypriv, u32 wpa_version)
-{
- if (!wpa_version) {
- psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
- return 0;
- }
-
- if (wpa_version & (NL80211_WPA_VERSION_1 | NL80211_WPA_VERSION_2))
- psecuritypriv->ndisauthtype = Ndis802_11AuthModeWPAPSK;
-
- return 0;
-}
-
-static int rtw_cfg80211_set_auth_type(struct security_priv *psecuritypriv,
- enum nl80211_auth_type sme_auth_type)
-{
- switch (sme_auth_type) {
- case NL80211_AUTHTYPE_AUTOMATIC:
-
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_auto;
-
- break;
- case NL80211_AUTHTYPE_OPEN_SYSTEM:
-
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_open;
-
- if (psecuritypriv->ndisauthtype > Ndis802_11AuthModeWPA)
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_8021x;
-
- break;
- case NL80211_AUTHTYPE_SHARED_KEY:
-
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_shared;
-
- psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
-
- break;
- default:
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_open;
- /* return -ENOTSUPP; */
- }
-
- return 0;
-}
-
-static int rtw_cfg80211_set_cipher(struct security_priv *psecuritypriv, u32 cipher, bool ucast)
-{
- u32 ndisencryptstatus = Ndis802_11EncryptionDisabled;
-
- u32 *profile_cipher = ucast ? &psecuritypriv->dot11_privacy_algrthm :
- &psecuritypriv->dot118021XGrpPrivacy;
-
- if (!cipher) {
- *profile_cipher = _NO_PRIVACY_;
- psecuritypriv->ndisencryptstatus = ndisencryptstatus;
- return 0;
- }
-
- switch (cipher) {
- case IW_AUTH_CIPHER_NONE:
- *profile_cipher = _NO_PRIVACY_;
- ndisencryptstatus = Ndis802_11EncryptionDisabled;
- break;
- case WLAN_CIPHER_SUITE_WEP40:
- *profile_cipher = _WEP40_;
- ndisencryptstatus = Ndis802_11Encryption1Enabled;
- break;
- case WLAN_CIPHER_SUITE_WEP104:
- *profile_cipher = _WEP104_;
- ndisencryptstatus = Ndis802_11Encryption1Enabled;
- break;
- case WLAN_CIPHER_SUITE_TKIP:
- *profile_cipher = _TKIP_;
- ndisencryptstatus = Ndis802_11Encryption2Enabled;
- break;
- case WLAN_CIPHER_SUITE_CCMP:
- *profile_cipher = _AES_;
- ndisencryptstatus = Ndis802_11Encryption3Enabled;
- break;
- default:
- return -ENOTSUPP;
- }
-
- if (ucast) {
- psecuritypriv->ndisencryptstatus = ndisencryptstatus;
-
- /* if (psecuritypriv->dot11_privacy_algrthm >= _AES_) */
- /* psecuritypriv->ndisauthtype = Ndis802_11AuthModeWPA2PSK; */
- }
-
- return 0;
-}
-
-static int rtw_cfg80211_set_key_mgt(struct security_priv *psecuritypriv, u32 key_mgt)
-{
- if (key_mgt == WLAN_AKM_SUITE_8021X)
- /* auth_type = UMAC_AUTH_TYPE_8021X; */
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_8021x;
- else if (key_mgt == WLAN_AKM_SUITE_PSK) {
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_8021x;
- }
-
- return 0;
-}
-
-static int rtw_cfg80211_set_wpa_ie(struct adapter *padapter, u8 *pie, size_t ielen)
-{
- u8 *buf = NULL;
- int group_cipher = 0, pairwise_cipher = 0;
- int ret = 0;
- int wpa_ielen = 0;
- int wpa2_ielen = 0;
- u8 *pwpa, *pwpa2;
- u8 null_addr[] = {0, 0, 0, 0, 0, 0};
-
- if (!pie || !ielen) {
- /* Treat this as normal case, but need to clear WIFI_UNDER_WPS */
- _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
- goto exit;
- }
-
- if (ielen > MAX_WPA_IE_LEN + MAX_WPS_IE_LEN + MAX_P2P_IE_LEN) {
- ret = -EINVAL;
- goto exit;
- }
-
- buf = kmemdup(pie, ielen, GFP_KERNEL);
- if (!buf) {
- ret = -ENOMEM;
- goto exit;
- }
-
- if (ielen < RSN_HEADER_LEN) {
- ret = -1;
- goto exit;
- }
-
- pwpa = rtw_get_wpa_ie(buf, &wpa_ielen, ielen);
- if (pwpa && wpa_ielen > 0) {
- if (wpa_ielen + 2 > sizeof(padapter->securitypriv.supplicant_ie)) {
- ret = -EINVAL;
- goto exit;
- }
- if (rtw_parse_wpa_ie(pwpa, wpa_ielen + 2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) {
- padapter->securitypriv.dot11_auth_algrthm = dot11_auth_algrthm_8021x;
- padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeWPAPSK;
- memcpy(padapter->securitypriv.supplicant_ie, &pwpa[0], wpa_ielen + 2);
- }
- }
-
- pwpa2 = rtw_get_wpa2_ie(buf, &wpa2_ielen, ielen);
- if (pwpa2 && wpa2_ielen > 0) {
- if (wpa2_ielen + 2 > sizeof(padapter->securitypriv.supplicant_ie)) {
- ret = -EINVAL;
- goto exit;
- }
- if (rtw_parse_wpa2_ie(pwpa2, wpa2_ielen + 2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) {
- padapter->securitypriv.dot11_auth_algrthm = dot11_auth_algrthm_8021x;
- padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeWPA2PSK;
- memcpy(padapter->securitypriv.supplicant_ie, &pwpa2[0], wpa2_ielen + 2);
- }
- }
-
- if (group_cipher == 0)
- group_cipher = WPA_CIPHER_NONE;
-
- if (pairwise_cipher == 0)
- pairwise_cipher = WPA_CIPHER_NONE;
-
- 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.dot11_privacy_algrthm = _NO_PRIVACY_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11EncryptionDisabled;
- break;
- case WPA_CIPHER_WEP40:
- padapter->securitypriv.dot11_privacy_algrthm = _WEP40_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
- break;
- case WPA_CIPHER_TKIP:
- padapter->securitypriv.dot11_privacy_algrthm = _TKIP_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption2Enabled;
- break;
- case WPA_CIPHER_CCMP:
- padapter->securitypriv.dot11_privacy_algrthm = _AES_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption3Enabled;
- break;
- case WPA_CIPHER_WEP104:
- padapter->securitypriv.dot11_privacy_algrthm = _WEP104_;
- padapter->securitypriv.ndisencryptstatus = Ndis802_11Encryption1Enabled;
- break;
- }
-
- {/* handle wps_ie */
- unsigned int wps_ielen;
- u8 *wps_ie;
-
- wps_ie = rtw_get_wps_ie(buf, ielen, NULL, &wps_ielen);
- if (wps_ie && wps_ielen > 0) {
- padapter->securitypriv.wps_ie_len = min_t(unsigned int, wps_ielen, MAX_WPS_IE_LEN);
- memcpy(padapter->securitypriv.wps_ie, wps_ie, padapter->securitypriv.wps_ie_len);
- set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
- } else {
- _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
- }
- }
-
- /* TKIP and AES disallow multicast packets until installing group key */
- if (padapter->securitypriv.dot11_privacy_algrthm == _TKIP_
- || padapter->securitypriv.dot11_privacy_algrthm == _TKIP_WTMIC_
- || padapter->securitypriv.dot11_privacy_algrthm == _AES_)
- /* WPS open need to enable multicast */
- /* check_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS) == true) */
- rtw_hal_set_hwreg(padapter, HW_VAR_OFF_RCR_AM, null_addr);
-
-exit:
- kfree(buf);
- if (ret)
- _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
- return ret;
-}
-
-static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
- struct cfg80211_ibss_params *params)
-{
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct ndis_802_11_ssid ndis_ssid;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- int ret = 0;
-
- if (rtw_pwr_wakeup(padapter) == _FAIL) {
- ret = -EPERM;
- goto exit;
- }
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- ret = -EPERM;
- goto exit;
- }
-
- if (!params->ssid || !params->ssid_len) {
- ret = -EINVAL;
- goto exit;
- }
-
- if (params->ssid_len > IW_ESSID_MAX_SIZE) {
- ret = -E2BIG;
- goto exit;
- }
-
- memset(&ndis_ssid, 0, sizeof(struct ndis_802_11_ssid));
- ndis_ssid.ssid_length = params->ssid_len;
- memcpy(ndis_ssid.ssid, (u8 *)params->ssid, params->ssid_len);
-
- psecuritypriv->ndisencryptstatus = Ndis802_11EncryptionDisabled;
- psecuritypriv->dot11_privacy_algrthm = _NO_PRIVACY_;
- psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_open; /* open system */
- psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
-
- ret = rtw_cfg80211_set_auth_type(psecuritypriv, NL80211_AUTHTYPE_OPEN_SYSTEM);
- rtw_set_802_11_authentication_mode(padapter, psecuritypriv->ndisauthtype);
-
- if (!rtw_set_802_11_ssid(padapter, &ndis_ssid)) {
- ret = -1;
- goto exit;
- }
-
-exit:
- return ret;
-}
-
-static int cfg80211_rtw_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
-{
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct wireless_dev *rtw_wdev = padapter->rtw_wdev;
- enum nl80211_iftype old_type;
- int ret = 0;
-
- old_type = rtw_wdev->iftype;
-
- rtw_set_to_roam(padapter, 0);
-
- if (check_fwstate(&padapter->mlmepriv, _FW_LINKED)) {
- rtw_scan_abort(padapter);
- LeaveAllPowerSaveMode(padapter);
-
- rtw_wdev->iftype = NL80211_IFTYPE_STATION;
-
- if (!rtw_set_802_11_infrastructure_mode(padapter, NL80211_IFTYPE_STATION)) {
- rtw_wdev->iftype = old_type;
- ret = -EPERM;
- goto leave_ibss;
- }
- rtw_setopmode_cmd(padapter, NL80211_IFTYPE_STATION, true);
- }
-
-leave_ibss:
- return ret;
-}
-
-static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
- struct cfg80211_connect_params *sme)
-{
- int ret = 0;
- enum ndis_802_11_authentication_mode authmode;
- struct ndis_802_11_ssid ndis_ssid;
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- padapter->mlmepriv.not_indic_disco = true;
-
- if (adapter_wdev_data(padapter)->block) {
- ret = -EBUSY;
- goto exit;
- }
-
- rtw_ps_deny(padapter, PS_DENY_JOIN);
- if (rtw_pwr_wakeup(padapter) == _FAIL) {
- ret = -EPERM;
- goto exit;
- }
-
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- ret = -EPERM;
- goto exit;
- }
-
- if (!sme->ssid || !sme->ssid_len) {
- ret = -EINVAL;
- goto exit;
- }
-
- if (sme->ssid_len > IW_ESSID_MAX_SIZE) {
- ret = -E2BIG;
- goto exit;
- }
-
- memset(&ndis_ssid, 0, sizeof(struct ndis_802_11_ssid));
- ndis_ssid.ssid_length = sme->ssid_len;
- memcpy(ndis_ssid.ssid, (u8 *)sme->ssid, sme->ssid_len);
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
- ret = -EBUSY;
- goto exit;
- }
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
- rtw_scan_abort(padapter);
-
- psecuritypriv->ndisencryptstatus = Ndis802_11EncryptionDisabled;
- psecuritypriv->dot11_privacy_algrthm = _NO_PRIVACY_;
- psecuritypriv->dot118021XGrpPrivacy = _NO_PRIVACY_;
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_open; /* open system */
- psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
-
- ret = rtw_cfg80211_set_wpa_version(psecuritypriv, sme->crypto.wpa_versions);
- if (ret < 0)
- goto exit;
-
- ret = rtw_cfg80211_set_auth_type(psecuritypriv, sme->auth_type);
-
- if (ret < 0)
- goto exit;
-
- ret = rtw_cfg80211_set_wpa_ie(padapter, (u8 *)sme->ie, sme->ie_len);
- if (ret < 0)
- goto exit;
-
- if (sme->crypto.n_ciphers_pairwise) {
- ret = rtw_cfg80211_set_cipher(psecuritypriv, sme->crypto.ciphers_pairwise[0], true);
- if (ret < 0)
- goto exit;
- }
-
- /* For WEP Shared auth */
- if ((psecuritypriv->dot11_auth_algrthm == dot11_auth_algrthm_shared ||
- psecuritypriv->dot11_auth_algrthm == dot11_auth_algrthm_auto) && sme->key) {
- u32 wep_key_idx, wep_key_len, wep_total_len;
- struct ndis_802_11_wep *pwep = NULL;
-
- wep_key_idx = sme->key_idx;
- wep_key_len = sme->key_len;
-
- if (sme->key_idx > WEP_KEYS) {
- ret = -EINVAL;
- goto exit;
- }
-
- if (wep_key_len > 0) {
- wep_key_len = wep_key_len <= 5 ? 5 : 13;
- wep_total_len = wep_key_len +
- offsetof(struct ndis_802_11_wep, key_material);
- pwep = kzalloc(wep_total_len, GFP_KERNEL);
- if (!pwep) {
- ret = -ENOMEM;
- goto exit;
- }
-
- pwep->key_length = wep_key_len;
- pwep->length = wep_total_len;
-
- if (wep_key_len == 13) {
- padapter->securitypriv.dot11_privacy_algrthm = _WEP104_;
- padapter->securitypriv.dot118021XGrpPrivacy = _WEP104_;
- }
- } else {
- ret = -EINVAL;
- goto exit;
- }
-
- pwep->key_index = wep_key_idx;
- pwep->key_index |= 0x80000000;
-
- memcpy(pwep->key_material, sme->key, pwep->key_length);
-
- if (rtw_set_802_11_add_wep(padapter, pwep) == (u8)_FAIL)
- ret = -EOPNOTSUPP;
-
- kfree(pwep);
-
- if (ret < 0)
- goto exit;
- }
-
- ret = rtw_cfg80211_set_cipher(psecuritypriv, sme->crypto.cipher_group, false);
- if (ret < 0)
- return ret;
-
- if (sme->crypto.n_akm_suites) {
- ret = rtw_cfg80211_set_key_mgt(psecuritypriv, sme->crypto.akm_suites[0]);
- if (ret < 0)
- goto exit;
- }
-
- authmode = psecuritypriv->ndisauthtype;
- rtw_set_802_11_authentication_mode(padapter, authmode);
-
- /* rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus); */
-
- if (!rtw_set_802_11_connect(padapter, (u8 *)sme->bssid, &ndis_ssid)) {
- ret = -1;
- goto exit;
- }
-
-exit:
-
- rtw_ps_deny_cancel(padapter, PS_DENY_JOIN);
-
- padapter->mlmepriv.not_indic_disco = false;
-
- return ret;
-}
-
-static int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *ndev,
- u16 reason_code)
-{
- struct adapter *padapter = rtw_netdev_priv(ndev);
-
- rtw_set_to_roam(padapter, 0);
-
- rtw_scan_abort(padapter);
- LeaveAllPowerSaveMode(padapter);
- rtw_disassoc_cmd(padapter, 500, false);
-
- rtw_indicate_disconnect(padapter);
-
- rtw_free_assoc_resources(padapter, 1);
- rtw_pwr_wakeup(padapter);
-
- return 0;
-}
-
-static int cfg80211_rtw_set_txpower(struct wiphy *wiphy,
- struct wireless_dev *wdev, int radio_idx,
- enum nl80211_tx_power_setting type, int mbm)
-{
- return 0;
-}
-
-static int cfg80211_rtw_get_txpower(struct wiphy *wiphy,
- struct wireless_dev *wdev,
- int radio_idx,
- unsigned int link_id, int *dbm)
-{
- *dbm = (12);
-
- return 0;
-}
-
-inline bool rtw_cfg80211_pwr_mgmt(struct adapter *adapter)
-{
- struct rtw_wdev_priv *rtw_wdev_priv = adapter_wdev_data(adapter);
-
- return rtw_wdev_priv->power_mgmt;
-}
-
-static int cfg80211_rtw_set_power_mgmt(struct wiphy *wiphy,
- struct net_device *ndev,
- bool enabled, int timeout)
-{
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct rtw_wdev_priv *rtw_wdev_priv = adapter_wdev_data(padapter);
-
- rtw_wdev_priv->power_mgmt = enabled;
-
- if (!enabled)
- LPS_Leave(padapter, "CFG80211_PWRMGMT");
-
- return 0;
-}
-
-static int cfg80211_rtw_set_pmksa(struct wiphy *wiphy,
- struct net_device *ndev,
- struct cfg80211_pmksa *pmksa)
-{
- u8 index, blInserted = false;
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- if (is_zero_ether_addr((u8 *)pmksa->bssid))
- return -EINVAL;
-
- blInserted = false;
-
- /* overwrite PMKID */
- for (index = 0 ; index < NUM_PMKID_CACHE; index++) {
- if (!memcmp(psecuritypriv->PMKIDList[index].Bssid, (u8 *)pmksa->bssid, ETH_ALEN)) {
- memcpy(psecuritypriv->PMKIDList[index].PMKID, (u8 *)pmksa->pmkid, WLAN_PMKID_LEN);
- psecuritypriv->PMKIDList[index].bUsed = true;
- psecuritypriv->PMKIDIndex = index + 1;
- blInserted = true;
- break;
- }
- }
-
- if (!blInserted) {
- memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, (u8 *)pmksa->bssid, ETH_ALEN);
- memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].PMKID, (u8 *)pmksa->pmkid, WLAN_PMKID_LEN);
-
- psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].bUsed = true;
- psecuritypriv->PMKIDIndex++;
- if (psecuritypriv->PMKIDIndex == 16)
- psecuritypriv->PMKIDIndex = 0;
- }
-
- return 0;
-}
-
-static int cfg80211_rtw_del_pmksa(struct wiphy *wiphy,
- struct net_device *ndev,
- struct cfg80211_pmksa *pmksa)
-{
- u8 index, bMatched = false;
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- for (index = 0 ; index < NUM_PMKID_CACHE; index++) {
- if (!memcmp(psecuritypriv->PMKIDList[index].Bssid, (u8 *)pmksa->bssid, ETH_ALEN)) {
- /*
- * BSSID is matched, the same AP => Remove this PMKID information
- * and reset it.
- */
- eth_zero_addr(psecuritypriv->PMKIDList[index].Bssid);
- memset(psecuritypriv->PMKIDList[index].PMKID, 0x00, WLAN_PMKID_LEN);
- psecuritypriv->PMKIDList[index].bUsed = false;
- bMatched = true;
- break;
- }
- }
-
- if (!bMatched)
- return -EINVAL;
-
- return 0;
-}
-
-static int cfg80211_rtw_flush_pmksa(struct wiphy *wiphy,
- struct net_device *ndev)
-{
- struct adapter *padapter = rtw_netdev_priv(ndev);
- struct security_priv *psecuritypriv = &padapter->securitypriv;
-
- memset(&psecuritypriv->PMKIDList[0], 0x00, sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE);
- psecuritypriv->PMKIDIndex = 0;
-
- return 0;
-}
-
-void rtw_cfg80211_indicate_sta_assoc(struct adapter *padapter, u8 *pmgmt_frame, unsigned int frame_len)
-{
- struct wireless_dev *wdev = padapter->rtw_wdev;
-
- {
- struct station_info sinfo = {};
- u8 ie_offset;
-
- if (GetFrameSubType(pmgmt_frame) == WIFI_ASSOCREQ)
- ie_offset = _ASOCREQ_IE_OFFSET_;
- else /* WIFI_REASSOCREQ */
- ie_offset = _REASOCREQ_IE_OFFSET_;
-
- sinfo.filled = 0;
- sinfo.assoc_req_ies = pmgmt_frame + WLAN_HDR_A3_LEN + ie_offset;
- sinfo.assoc_req_ies_len = frame_len - WLAN_HDR_A3_LEN - ie_offset;
- cfg80211_new_sta(wdev, GetAddr2Ptr(pmgmt_frame), &sinfo, GFP_ATOMIC);
- }
-}
-
-void rtw_cfg80211_indicate_sta_disassoc(struct adapter *padapter, unsigned char *da, unsigned short reason)
-{
- struct wireless_dev *wdev = padapter->rtw_wdev;
-
- cfg80211_del_sta(wdev, da, GFP_ATOMIC);
-}
-
-static u8 rtw_get_chan_type(struct adapter *adapter)
-{
- struct mlme_ext_priv *mlme_ext = &adapter->mlmeextpriv;
-
- switch (mlme_ext->cur_bwmode) {
- case CHANNEL_WIDTH_20:
- if (is_supported_ht(adapter->registrypriv.wireless_mode))
- return NL80211_CHAN_HT20;
- else
- return NL80211_CHAN_NO_HT;
- case CHANNEL_WIDTH_40:
- if (mlme_ext->cur_ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
- return NL80211_CHAN_HT40PLUS;
- else
- return NL80211_CHAN_HT40MINUS;
- default:
- return NL80211_CHAN_HT20;
- }
-
- return NL80211_CHAN_HT20;
-}
-
-static int cfg80211_rtw_get_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
- unsigned int link_id,
- struct cfg80211_chan_def *chandef)
-{
- struct adapter *adapter = wiphy_to_adapter(wiphy);
- struct registry_priv *registrypriv = &adapter->registrypriv;
- enum nl80211_channel_type chan_type;
- struct ieee80211_channel *chan = NULL;
- int channel;
- int freq;
-
- if (!adapter->rtw_wdev)
- return -ENODEV;
-
- channel = rtw_get_oper_ch(adapter);
- if (!channel)
- return -ENODATA;
-
- freq = rtw_ieee80211_channel_to_frequency(channel);
-
- chan = ieee80211_get_channel(adapter->rtw_wdev->wiphy, freq);
-
- if (registrypriv->ht_enable) {
- chan_type = rtw_get_chan_type(adapter);
- cfg80211_chandef_create(chandef, chan, chan_type);
- } else {
- cfg80211_chandef_create(chandef, chan, NL80211_CHAN_NO_HT);
- }
-
- return 0;
-}
-
-static netdev_tx_t rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb, struct net_device *ndev)
-{
- int rtap_len;
- int qos_len = 0;
- int dot11_hdr_len = 24;
- int snap_len = 6;
- unsigned char *pdata;
- u16 frame_control;
- unsigned char src_mac_addr[6];
- unsigned char dst_mac_addr[6];
- struct ieee80211_hdr *dot11_hdr;
- struct ieee80211_radiotap_header *rtap_hdr;
- struct adapter *padapter = rtw_netdev_priv(ndev);
-
- if (!skb)
- goto fail;
-
- if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header)))
- goto fail;
-
- rtap_hdr = (struct ieee80211_radiotap_header *)skb->data;
- if (unlikely(rtap_hdr->it_version))
- goto fail;
-
- rtap_len = ieee80211_get_radiotap_len(skb->data);
- if (unlikely(skb->len < rtap_len))
- goto fail;
-
- if (rtap_len != 14)
- goto fail;
-
- /* Skip the ratio tap header */
- skb_pull(skb, rtap_len);
- if (skb->len < dot11_hdr_len)
- goto fail;
-
- dot11_hdr = (struct ieee80211_hdr *)skb->data;
- frame_control = le16_to_cpu(dot11_hdr->frame_control);
- /* Check if the QoS bit is set */
- if ((frame_control & IEEE80211_FCTL_FTYPE) == IEEE80211_FTYPE_DATA) {
- /* Check if this ia a Wireless Distribution System (WDS) frame
- * which has 4 MAC addresses
- */
- if (frame_control & 0x0080)
- qos_len = 2;
- if ((frame_control & 0x0300) == 0x0300)
- dot11_hdr_len += 6;
- if (skb->len < dot11_hdr_len + qos_len + snap_len)
- goto fail;
-
- memcpy(dst_mac_addr, dot11_hdr->addr1, sizeof(dst_mac_addr));
- memcpy(src_mac_addr, dot11_hdr->addr2, sizeof(src_mac_addr));
-
- /* Skip the 802.11 header, QoS (if any) and SNAP, but leave spaces for
- * two MAC addresses
- */
- skb_pull(skb, dot11_hdr_len + qos_len + snap_len - sizeof(src_mac_addr) * 2);
- pdata = (unsigned char *)skb->data;
- memcpy(pdata, dst_mac_addr, sizeof(dst_mac_addr));
- memcpy(pdata + sizeof(dst_mac_addr), src_mac_addr, sizeof(src_mac_addr));
-
- /* Use the real net device to transmit the packet */
- _rtw_xmit_entry(skb, padapter->pnetdev);
- return NETDEV_TX_OK;
-
- } else if ((frame_control & (IEEE80211_FCTL_FTYPE | IEEE80211_FCTL_STYPE)) ==
- (IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION)) {
- /* only for action frames */
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- unsigned char *pframe;
- /* u8 category, action, OUI_Subtype, dialogToken = 0; */
- /* unsigned char *frame_body; */
- struct ieee80211_hdr *pwlanhdr;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
- u8 *buf = skb->data;
- u32 len = skb->len;
- u8 category, action;
-
- if (!rtw_action_frame_parse(buf, len, &category, &action))
- goto fail;
-
- /* starting alloc mgmt frame to dump it */
- pmgntframe = alloc_mgtxmitframe(pxmitpriv);
- if (!pmgntframe)
- goto fail;
-
- /* 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;
-
- memcpy(pframe, buf, len);
- pattrib->pktlen = len;
-
- pwlanhdr = (struct ieee80211_hdr *)pframe;
- /* update seq number */
- pmlmeext->mgnt_seq = GetSequence(pwlanhdr);
- pattrib->seqnum = pmlmeext->mgnt_seq;
- pmlmeext->mgnt_seq++;
-
- pattrib->last_txcmdsz = pattrib->pktlen;
-
- dump_mgntframe(padapter, pmgntframe);
- }
-
-fail:
-
- dev_kfree_skb_any(skb);
-
- return NETDEV_TX_OK;
-}
-
-static const struct net_device_ops rtw_cfg80211_monitor_if_ops = {
- .ndo_start_xmit = rtw_cfg80211_monitor_if_xmit_entry,
-};
-
-static int rtw_cfg80211_add_monitor_if(struct adapter *padapter, char *name, struct net_device **ndev)
-{
- int ret = 0;
- struct net_device *mon_ndev = NULL;
- struct wireless_dev *mon_wdev = NULL;
- struct rtw_netdev_priv_indicator *pnpi;
- struct rtw_wdev_priv *pwdev_priv = adapter_wdev_data(padapter);
-
- if (!name) {
- ret = -EINVAL;
- goto out;
- }
-
- if (pwdev_priv->pmon_ndev) {
- ret = -EBUSY;
- goto out;
- }
-
- mon_ndev = alloc_etherdev(sizeof(struct rtw_netdev_priv_indicator));
- if (!mon_ndev) {
- ret = -ENOMEM;
- goto out;
- }
-
- mon_ndev->type = ARPHRD_IEEE80211_RADIOTAP;
- strscpy(mon_ndev->name, name);
- mon_ndev->needs_free_netdev = true;
- mon_ndev->priv_destructor = rtw_ndev_destructor;
-
- mon_ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops;
-
- pnpi = netdev_priv(mon_ndev);
- pnpi->priv = padapter;
- pnpi->sizeof_priv = sizeof(struct adapter);
-
- /* wdev */
- mon_wdev = kzalloc_obj(*mon_wdev);
- if (!mon_wdev) {
- ret = -ENOMEM;
- goto out;
- }
-
- mon_wdev->wiphy = padapter->rtw_wdev->wiphy;
- mon_wdev->netdev = mon_ndev;
- mon_wdev->iftype = NL80211_IFTYPE_MONITOR;
- mon_ndev->ieee80211_ptr = mon_wdev;
-
- ret = cfg80211_register_netdevice(mon_ndev);
- if (ret)
- goto out;
-
- *ndev = pwdev_priv->pmon_ndev = mon_ndev;
- memcpy(pwdev_priv->ifname_mon, name, IFNAMSIZ + 1);
-
-out:
- if (ret && mon_wdev) {
- kfree(mon_wdev);
- mon_wdev = NULL;
- }
-
- if (ret && mon_ndev) {
- free_netdev(mon_ndev);
- *ndev = mon_ndev = NULL;
- }
-
- return ret;
-}
-
-static struct wireless_dev *
- cfg80211_rtw_add_virtual_intf(
- struct wiphy *wiphy,
- const char *name,
- unsigned char name_assign_type,
- enum nl80211_iftype type, struct vif_params *params)
-{
- int ret = 0;
- struct net_device *ndev = NULL;
- struct adapter *padapter = wiphy_to_adapter(wiphy);
-
- switch (type) {
- case NL80211_IFTYPE_ADHOC:
- case NL80211_IFTYPE_AP_VLAN:
- case NL80211_IFTYPE_WDS:
- case NL80211_IFTYPE_MESH_POINT:
- ret = -ENODEV;
- break;
- case NL80211_IFTYPE_MONITOR:
- ret = rtw_cfg80211_add_monitor_if(padapter, (char *)name, &ndev);
- break;
- case NL80211_IFTYPE_P2P_CLIENT:
- case NL80211_IFTYPE_STATION:
- ret = -ENODEV;
- break;
- case NL80211_IFTYPE_P2P_GO:
- case NL80211_IFTYPE_AP:
- ret = -ENODEV;
- break;
- default:
- ret = -ENODEV;
- break;
- }
-
- return ndev ? ndev->ieee80211_ptr : ERR_PTR(ret);
-}
-
-static int cfg80211_rtw_del_virtual_intf(struct wiphy *wiphy,
- struct wireless_dev *wdev
-)
-{
- struct net_device *ndev = wdev_to_ndev(wdev);
- int ret = 0;
- struct adapter *adapter;
- struct rtw_wdev_priv *pwdev_priv;
-
- if (!ndev) {
- ret = -EINVAL;
- goto exit;
- }
-
- adapter = rtw_netdev_priv(ndev);
- pwdev_priv = adapter_wdev_data(adapter);
-
- cfg80211_unregister_netdevice(ndev);
-
- if (ndev == pwdev_priv->pmon_ndev) {
- pwdev_priv->pmon_ndev = NULL;
- pwdev_priv->ifname_mon[0] = '\0';
- }
-
-exit:
- return ret;
-}
-
-static int rtw_add_beacon(struct adapter *adapter, const u8 *head, size_t head_len, const u8 *tail, size_t tail_len)
-{
- int ret = 0;
- u8 *pbuf = NULL;
- unsigned int len, wps_ielen = 0;
- struct mlme_priv *pmlmepriv = &(adapter->mlmepriv);
-
- if (!check_fwstate(pmlmepriv, WIFI_AP_STATE))
- return -EINVAL;
-
- if (head_len < 24)
- return -EINVAL;
-
- pbuf = kzalloc(head_len + tail_len, GFP_KERNEL);
- if (!pbuf)
- return -ENOMEM;
-
- memcpy(pbuf, head + 24, head_len - 24);/* 24 =beacon header len. */
- memcpy(pbuf + head_len - 24, tail, tail_len);
-
- len = head_len + tail_len - 24;
-
- /* check wps ie if inclued */
- rtw_get_wps_ie(pbuf + _FIXED_IE_LENGTH_, len - _FIXED_IE_LENGTH_, NULL, &wps_ielen);
-
- /* pbss_network->ies will not include p2p_ie, wfd ie */
- rtw_ies_remove_ie(pbuf, &len, _BEACON_IE_OFFSET_, WLAN_EID_VENDOR_SPECIFIC, P2P_OUI, 4);
- rtw_ies_remove_ie(pbuf, &len, _BEACON_IE_OFFSET_, WLAN_EID_VENDOR_SPECIFIC, WFD_OUI, 4);
-
- if (rtw_check_beacon_data(adapter, pbuf, len) == _SUCCESS)
- ret = 0;
- else
- ret = -EINVAL;
-
- kfree(pbuf);
-
- return ret;
-}
-
-static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev,
- struct cfg80211_ap_settings *settings)
-{
- int ret = 0;
- struct adapter *adapter = rtw_netdev_priv(ndev);
-
- ret = rtw_add_beacon(adapter, settings->beacon.head,
- settings->beacon.head_len, settings->beacon.tail,
- settings->beacon.tail_len);
-
- adapter->mlmeextpriv.mlmext_info.hidden_ssid_mode = settings->hidden_ssid;
-
- if (settings->ssid && settings->ssid_len) {
- struct wlan_bssid_ex *pbss_network = &adapter->mlmepriv.cur_network.network;
- struct wlan_bssid_ex *pbss_network_ext = &adapter->mlmeextpriv.mlmext_info.network;
-
- memcpy(pbss_network->ssid.ssid, settings->ssid, settings->ssid_len);
- pbss_network->ssid.ssid_length = settings->ssid_len;
- memcpy(pbss_network_ext->ssid.ssid, settings->ssid, settings->ssid_len);
- pbss_network_ext->ssid.ssid_length = settings->ssid_len;
- }
-
- return ret;
-}
-
-static int cfg80211_rtw_change_beacon(struct wiphy *wiphy, struct net_device *ndev,
- struct cfg80211_ap_update *info)
-{
- struct adapter *adapter = rtw_netdev_priv(ndev);
-
- return rtw_add_beacon(adapter, info->beacon.head,
- info->beacon.head_len, info->beacon.tail,
- info->beacon.tail_len);
-}
-
-static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev,
- unsigned int link_id)
-{
- return 0;
-}
-
-static int cfg80211_rtw_add_station(struct wiphy *wiphy,
- struct wireless_dev *wdev,
- const u8 *mac,
- struct station_parameters *params)
-{
- return 0;
-}
-
-static int cfg80211_rtw_del_station(struct wiphy *wiphy,
- struct wireless_dev *wdev,
- struct station_del_parameters *params)
-{
- int ret = 0;
- struct list_head *phead, *plist, *tmp;
- u8 updated = false;
- struct sta_info *psta = NULL;
- struct adapter *padapter = rtw_netdev_priv(wdev->netdev);
- struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
- struct sta_priv *pstapriv = &padapter->stapriv;
- const u8 *mac = params->mac;
-
- if (!check_fwstate(pmlmepriv, _FW_LINKED | WIFI_AP_STATE))
- return -EINVAL;
-
- if (!mac) {
- flush_all_cam_entry(padapter); /* clear CAM */
-
- rtw_sta_flush(padapter);
-
- return 0;
- }
-
- if (mac[0] == 0xff && mac[1] == 0xff &&
- mac[2] == 0xff && mac[3] == 0xff &&
- mac[4] == 0xff && mac[5] == 0xff) {
- return -EINVAL;
- }
-
- spin_lock_bh(&pstapriv->asoc_list_lock);
-
- phead = &pstapriv->asoc_list;
- /* check asoc_queue */
- list_for_each_safe(plist, tmp, phead) {
- psta = list_entry(plist, struct sta_info, asoc_list);
-
- if (!memcmp((u8 *)mac, psta->hwaddr, ETH_ALEN)) {
- if (psta->dot8021xalg != 1 || psta->bpairwise_key_installed) {
- list_del_init(&psta->asoc_list);
- pstapriv->asoc_list_cnt--;
-
- updated = ap_free_sta(padapter, psta, true, WLAN_REASON_DEAUTH_LEAVING);
-
- psta = NULL;
-
- break;
- }
- }
- }
-
- spin_unlock_bh(&pstapriv->asoc_list_lock);
-
- associated_clients_update(padapter, updated);
-
- return ret;
-}
-
-static int cfg80211_rtw_change_station(struct wiphy *wiphy,
- struct wireless_dev *wdev,
- const u8 *mac,
- struct station_parameters *params)
-{
- return 0;
-}
-
-static struct sta_info *rtw_sta_info_get_by_idx(const int idx, struct sta_priv *pstapriv)
-
-{
- struct list_head *phead, *plist;
- struct sta_info *psta = NULL;
- int i = 0;
-
- phead = &pstapriv->asoc_list;
- plist = get_next(phead);
-
- /* check asoc_queue */
- while (phead != plist) {
- if (idx == i)
- psta = container_of(plist, struct sta_info, asoc_list);
- plist = get_next(plist);
- i++;
- }
- return psta;
-}
-
-static int cfg80211_rtw_dump_station(struct wiphy *wiphy,
- struct wireless_dev *wdev,
- int idx, u8 *mac,
- struct station_info *sinfo)
-{
- int ret = 0;
- struct adapter *padapter = rtw_netdev_priv(wdev_to_ndev(wdev));
- struct sta_info *psta = NULL;
- struct sta_priv *pstapriv = &padapter->stapriv;
-
- spin_lock_bh(&pstapriv->asoc_list_lock);
- psta = rtw_sta_info_get_by_idx(idx, pstapriv);
- spin_unlock_bh(&pstapriv->asoc_list_lock);
- if (!psta) {
- ret = -ENOENT;
- goto exit;
- }
- memcpy(mac, psta->hwaddr, ETH_ALEN);
- sinfo->filled = BIT_ULL(NL80211_STA_INFO_SIGNAL);
- sinfo->signal = psta->rssi;
-
-exit:
- return ret;
-}
-
-void rtw_cfg80211_rx_action(struct adapter *adapter, u8 *frame, unsigned int frame_len, const char *msg)
-{
- s32 freq;
- int channel;
- u8 category, action;
-
- channel = rtw_get_oper_ch(adapter);
-
- rtw_action_frame_parse(frame, frame_len, &category, &action);
-
- freq = rtw_ieee80211_channel_to_frequency(channel);
-
- rtw_cfg80211_rx_mgmt(adapter, freq, 0, frame, frame_len, GFP_ATOMIC);
-}
-
-static int _cfg80211_rtw_mgmt_tx(struct adapter *padapter, u8 tx_ch, const u8 *buf, size_t len)
-{
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- unsigned char *pframe;
- int ret = _FAIL;
- bool __maybe_unused ack = true;
- struct ieee80211_hdr *pwlanhdr;
- struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
- struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
-
- rtw_set_scan_deny(padapter, 1000);
-
- rtw_scan_abort(padapter);
- if (tx_ch != rtw_get_oper_ch(padapter)) {
- if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED))
- pmlmeext->cur_channel = tx_ch;
- set_channel_bwmode(padapter, tx_ch, HAL_PRIME_CHNL_OFFSET_DONT_CARE, CHANNEL_WIDTH_20);
- }
-
- /* starting alloc mgmt frame to dump it */
- pmgntframe = alloc_mgtxmitframe(pxmitpriv);
- if (!pmgntframe) {
- /* ret = -ENOMEM; */
- ret = _FAIL;
- 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;
-
- memcpy(pframe, buf, len);
- pattrib->pktlen = len;
-
- pwlanhdr = (struct ieee80211_hdr *)pframe;
- /* update seq number */
- pmlmeext->mgnt_seq = GetSequence(pwlanhdr);
- pattrib->seqnum = pmlmeext->mgnt_seq;
- pmlmeext->mgnt_seq++;
-
- pattrib->last_txcmdsz = pattrib->pktlen;
-
- if (dump_mgntframe_and_wait_ack(padapter, pmgntframe) != _SUCCESS) {
- ack = false;
- ret = _FAIL;
-
- } else {
- msleep(50);
-
- ret = _SUCCESS;
- }
-
-exit:
-
- return ret;
-}
-
-static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
- struct cfg80211_mgmt_tx_params *params,
- u64 cookie)
-{
- struct net_device *ndev = wdev_to_ndev(wdev);
- struct ieee80211_channel *chan = params->chan;
- const u8 *buf = params->buf;
- size_t len = params->len;
- int ret = 0;
- int tx_ret;
- u32 dump_limit = RTW_MAX_MGMT_TX_CNT;
- u32 dump_cnt = 0;
- bool ack = true;
- u8 tx_ch = (u8)ieee80211_frequency_to_channel(chan->center_freq);
- u8 category, action;
- struct adapter *padapter;
-
- if (!ndev) {
- ret = -EINVAL;
- goto exit;
- }
-
- padapter = rtw_netdev_priv(ndev);
-
- /* indicate ack before issue frame to avoid racing with rsp frame */
- rtw_cfg80211_mgmt_tx_status(padapter, cookie, buf, len, ack, GFP_KERNEL);
-
- if (!rtw_action_frame_parse(buf, len, &category, &action))
- goto exit;
-
- rtw_ps_deny(padapter, PS_DENY_MGNT_TX);
- if (rtw_pwr_wakeup(padapter) == _FAIL) {
- ret = -EFAULT;
- goto cancel_ps_deny;
- }
-
- do {
- dump_cnt++;
- tx_ret = _cfg80211_rtw_mgmt_tx(padapter, tx_ch, buf, len);
- } while (dump_cnt < dump_limit && tx_ret != _SUCCESS);
-
-cancel_ps_deny:
- rtw_ps_deny_cancel(padapter, PS_DENY_MGNT_TX);
-exit:
- return ret;
-}
-
-static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum nl80211_band band)
-{
-#define MAX_BIT_RATE_40MHZ_MCS7 150 /* Mbps */
-
- ht_cap->ht_supported = true;
-
- ht_cap->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
- IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_SGI_20 |
- IEEE80211_HT_CAP_DSSSCCK40 | IEEE80211_HT_CAP_MAX_AMSDU;
-
- /*
- *Maximum length of AMPDU that the STA can receive.
- *Length = 2 ^ (13 + max_ampdu_length_exp) - 1 (octets)
- */
- ht_cap->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
-
- /*Minimum MPDU start spacing , */
- ht_cap->ampdu_density = IEEE80211_HT_MPDU_DENSITY_16;
-
- ht_cap->mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
-
- /*
- *hw->wiphy->bands[NL80211_BAND_2GHZ]
- *base on ant_num
- *rx_mask: RX mask
- *if rx_ant = 1 rx_mask[0]= 0xff;==>MCS0-MCS7
- *if rx_ant =2 rx_mask[1]= 0xff;==>MCS8-MCS15
- *if rx_ant >=3 rx_mask[2]= 0xff;
- *if BW_40 rx_mask[4]= 0x01;
- *highest supported RX rate
- */
- ht_cap->mcs.rx_mask[0] = 0xFF;
- ht_cap->mcs.rx_mask[1] = 0x00;
- ht_cap->mcs.rx_mask[4] = 0x01;
-
- ht_cap->mcs.rx_highest = cpu_to_le16(MAX_BIT_RATE_40MHZ_MCS7);
-}
-
-void rtw_cfg80211_init_wiphy(struct adapter *padapter)
-{
- struct ieee80211_supported_band *bands;
- struct wireless_dev *pwdev = padapter->rtw_wdev;
- struct wiphy *wiphy = pwdev->wiphy;
-
- {
- bands = wiphy->bands[NL80211_BAND_2GHZ];
- if (bands)
- rtw_cfg80211_init_ht_capab(&bands->ht_cap, NL80211_BAND_2GHZ);
- }
-
- /* copy mac_addr to wiphy */
- memcpy(wiphy->perm_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
-}
-
-static void rtw_cfg80211_preinit_wiphy(struct adapter *padapter, struct wiphy *wiphy)
-{
- wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
-
- wiphy->max_scan_ssids = RTW_SSID_SCAN_AMOUNT;
- wiphy->max_scan_ie_len = RTW_SCAN_IE_LEN_MAX;
- wiphy->max_num_pmkids = RTW_MAX_NUM_PMKIDS;
-
- wiphy->max_remain_on_channel_duration = RTW_MAX_REMAIN_ON_CHANNEL_DURATION;
-
- wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION)
- | BIT(NL80211_IFTYPE_ADHOC)
- | BIT(NL80211_IFTYPE_AP)
- | BIT(NL80211_IFTYPE_MONITOR)
- ;
-
- wiphy->mgmt_stypes = rtw_cfg80211_default_mgmt_stypes;
-
- wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR);
-
- wiphy->cipher_suites = rtw_cipher_suites;
- wiphy->n_cipher_suites = ARRAY_SIZE(rtw_cipher_suites);
-
- /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
- wiphy->bands[NL80211_BAND_2GHZ] = rtw_spt_band_alloc(NL80211_BAND_2GHZ);
-
- wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
- wiphy->flags |= WIPHY_FLAG_OFFCHAN_TX | WIPHY_FLAG_HAVE_AP_SME;
-
-#if defined(CONFIG_PM)
- wiphy->max_sched_scan_reqs = 1;
-#endif
-
-#if defined(CONFIG_PM)
- wiphy->wowlan = &wowlan_stub;
-#endif
-
- if (padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
- wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
- else
- wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
-}
-
-static struct cfg80211_ops rtw_cfg80211_ops = {
- .change_virtual_intf = cfg80211_rtw_change_iface,
- .add_key = cfg80211_rtw_add_key,
- .get_key = cfg80211_rtw_get_key,
- .del_key = cfg80211_rtw_del_key,
- .set_default_key = cfg80211_rtw_set_default_key,
- .get_station = cfg80211_rtw_get_station,
- .scan = cfg80211_rtw_scan,
- .set_wiphy_params = cfg80211_rtw_set_wiphy_params,
- .connect = cfg80211_rtw_connect,
- .disconnect = cfg80211_rtw_disconnect,
- .join_ibss = cfg80211_rtw_join_ibss,
- .leave_ibss = cfg80211_rtw_leave_ibss,
- .set_tx_power = cfg80211_rtw_set_txpower,
- .get_tx_power = cfg80211_rtw_get_txpower,
- .set_power_mgmt = cfg80211_rtw_set_power_mgmt,
- .set_pmksa = cfg80211_rtw_set_pmksa,
- .del_pmksa = cfg80211_rtw_del_pmksa,
- .flush_pmksa = cfg80211_rtw_flush_pmksa,
- .get_channel = cfg80211_rtw_get_channel,
- .add_virtual_intf = cfg80211_rtw_add_virtual_intf,
- .del_virtual_intf = cfg80211_rtw_del_virtual_intf,
-
- .start_ap = cfg80211_rtw_start_ap,
- .change_beacon = cfg80211_rtw_change_beacon,
- .stop_ap = cfg80211_rtw_stop_ap,
-
- .add_station = cfg80211_rtw_add_station,
- .del_station = cfg80211_rtw_del_station,
- .change_station = cfg80211_rtw_change_station,
- .dump_station = cfg80211_rtw_dump_station,
-
- .mgmt_tx = cfg80211_rtw_mgmt_tx,
-};
-
-int rtw_wdev_alloc(struct adapter *padapter, struct device *dev)
-{
- int ret = 0;
- struct wiphy *wiphy;
- struct wireless_dev *wdev;
- struct rtw_wdev_priv *pwdev_priv;
- struct net_device *pnetdev = padapter->pnetdev;
-
- /* wiphy */
- wiphy = wiphy_new(&rtw_cfg80211_ops, sizeof(struct adapter *));
- if (!wiphy) {
- ret = -ENOMEM;
- goto exit;
- }
- set_wiphy_dev(wiphy, dev);
- *((struct adapter **)wiphy_priv(wiphy)) = padapter;
- rtw_cfg80211_preinit_wiphy(padapter, wiphy);
-
- /* init regulary domain */
- rtw_regd_init(wiphy, rtw_reg_notifier);
-
- ret = wiphy_register(wiphy);
- if (ret < 0)
- goto free_wiphy;
-
- /* wdev */
- wdev = kzalloc_obj(*wdev);
- if (!wdev) {
- ret = -ENOMEM;
- goto unregister_wiphy;
- }
- wdev->wiphy = wiphy;
- wdev->netdev = pnetdev;
-
- wdev->iftype = NL80211_IFTYPE_STATION; /* will be init in rtw_hal_init() */
- /* Must sync with _rtw_init_mlme_priv() */
- /* pmlmepriv->fw_state = WIFI_STATION_STATE */
- padapter->rtw_wdev = wdev;
- pnetdev->ieee80211_ptr = wdev;
-
- /* init pwdev_priv */
- pwdev_priv = adapter_wdev_data(padapter);
- pwdev_priv->rtw_wdev = wdev;
- pwdev_priv->pmon_ndev = NULL;
- pwdev_priv->ifname_mon[0] = '\0';
- pwdev_priv->padapter = padapter;
- pwdev_priv->scan_request = NULL;
- spin_lock_init(&pwdev_priv->scan_req_lock);
-
- if (padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
- pwdev_priv->power_mgmt = true;
- else
- pwdev_priv->power_mgmt = false;
-
- return ret;
-
-unregister_wiphy:
- wiphy_unregister(wiphy);
- free_wiphy:
- wiphy_free(wiphy);
-exit:
- return ret;
-}
-
-void rtw_wdev_free(struct wireless_dev *wdev)
-{
- if (!wdev)
- return;
-
- kfree(wdev->wiphy->bands[NL80211_BAND_2GHZ]);
-
- wiphy_free(wdev->wiphy);
-
- kfree(wdev);
-}
-
-void rtw_wdev_unregister(struct wireless_dev *wdev)
-{
- struct net_device *ndev;
- struct adapter *adapter;
- struct rtw_wdev_priv *pwdev_priv;
-
- if (!wdev)
- return;
- ndev = wdev_to_ndev(wdev);
- if (!ndev)
- return;
-
- adapter = rtw_netdev_priv(ndev);
- pwdev_priv = adapter_wdev_data(adapter);
-
- rtw_cfg80211_indicate_scan_done(adapter, true);
-
- if (pwdev_priv->pmon_ndev)
- unregister_netdev(pwdev_priv->pmon_ndev);
-
- wiphy_unregister(wdev->wiphy);
-}
diff --git a/drivers/staging/rtl8723bs/os_dep/os_intfs.c b/drivers/staging/rtl8723bs/os_dep/os_intfs.c
deleted file mode 100644
index c15056ee207c..000000000000
--- a/drivers/staging/rtl8723bs/os_dep/os_intfs.c
+++ /dev/null
@@ -1,1189 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <hal_data.h>
-#include <rtl8723b_xmit.h>
-
-MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
-MODULE_AUTHOR("Realtek Semiconductor Corp.");
-MODULE_VERSION(DRIVERVERSION);
-
-/* module param defaults */
-static int rtw_chip_version;
-static int rtw_rfintfs = HWPI;
-static int rtw_lbkmode;/* RTL8712_AIR_TRX; */
-
-
-static int rtw_network_mode = NL80211_IFTYPE_ADHOC;/* infra, ad-hoc, auto */
-/* struct ndis_802_11_ssid ssid; */
-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;
-/* int smart_ps = 1; */
-static int rtw_power_mgnt = 1;
-static int rtw_ips_mode = IPS_NORMAL;
-module_param(rtw_ips_mode, int, 0644);
-MODULE_PARM_DESC(rtw_ips_mode, "The default IPS mode");
-
-static int rtw_smart_ps = 2;
-
-static int rtw_check_fw_ps = 1;
-
-static int rtw_usb_rxagg_mode = 2;/* USB_RX_AGG_DMA = 1, USB_RX_AGG_USB =2 */
-module_param(rtw_usb_rxagg_mode, int, 0644);
-
-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;
-/* int qos_enable = 0; */
-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;
-
-int rtw_ht_enable = 1;
-/*
- * 0: 20 MHz, 1: 40 MHz
- * 2.4G use bit 0 ~ 3
- * 0x01 means enable 2.4G 40MHz
- */
-static int rtw_bw_mode = 0x01;
-static int rtw_ampdu_enable = 1;/* for enable tx_ampdu ,0: disable, 0x1:enable (but wifi_spec should be 0), 0x2: force enable (don't care wifi_spec) */
-static int rtw_rx_stbc = 1;/* 0: disable, 1:enable 2.4g */
-static int rtw_ampdu_amsdu;/* 0: disabled, 1:enabled, 2:auto . There is an IOT issu with DLINK DIR-629 when the flag turn on */
-/* Short GI support Bit Map */
-/* BIT0 - 20MHz, 0: non-support, 1: support */
-/* BIT1 - 40MHz, 0: non-support, 1: support */
-/* BIT2 - 80MHz, 0: non-support, 1: support */
-/* BIT3 - 160MHz, 0: non-support, 1: support */
-static int rtw_short_gi = 0xf;
-/* BIT0: Enable VHT LDPC Rx, BIT1: Enable VHT LDPC Tx, BIT4: Enable HT LDPC Rx, BIT5: Enable HT LDPC Tx */
-static int rtw_ldpc_cap = 0x33;
-/* BIT0: Enable VHT STBC Rx, BIT1: Enable VHT STBC Tx, BIT4: Enable HT STBC Rx, BIT5: Enable HT STBC Tx */
-static int rtw_stbc_cap = 0x13;
-/* BIT0: Enable VHT Beamformer, BIT1: Enable VHT Beamformee, BIT4: Enable HT Beamformer, BIT5: Enable HT Beamformee */
-static int rtw_beamform_cap = 0x2;
-
-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_ant_num = -1; /* <0: undefined, >0: Antenna number */
-module_param(rtw_ant_num, int, 0644);
-MODULE_PARM_DESC(rtw_ant_num, "Antenna number setting");
-
-static int rtw_antdiv_cfg = 1; /* 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_hw_wps_pbc;
-
-int rtw_mc2u_disable;
-
-static int rtw_80211d;
-
-static int rtw_qos_opt_enable;/* 0: disable, 1:enable */
-module_param(rtw_qos_opt_enable, int, 0644);
-
-static char *ifname = "wlan%d";
-module_param(ifname, charp, 0644);
-MODULE_PARM_DESC(ifname, "The default name to allocate for first 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_chip_version, 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_ht_enable, int, 0644);
-module_param(rtw_bw_mode, 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_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");
-
-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;
-module_param(rtw_notch_filter, uint, 0644);
-MODULE_PARM_DESC(rtw_notch_filter, "0:Disable, 1:Enable, 2:Enable only for P2P");
-
-#define CONFIG_RTW_HIQ_FILTER 1
-
-static uint rtw_hiq_filter = CONFIG_RTW_HIQ_FILTER;
-module_param(rtw_hiq_filter, uint, 0644);
-MODULE_PARM_DESC(rtw_hiq_filter, "0:allow all, 1:allow special, 2:deny all");
-
-static int rtw_tx_pwr_lmt_enable;
-static int rtw_tx_pwr_by_rate;
-
-module_param(rtw_tx_pwr_lmt_enable, int, 0644);
-MODULE_PARM_DESC(rtw_tx_pwr_lmt_enable, "0:Disable, 1:Enable, 2: Depend on efuse");
-
-module_param(rtw_tx_pwr_by_rate, int, 0644);
-MODULE_PARM_DESC(rtw_tx_pwr_by_rate, "0:Disable, 1:Enable, 2: Depend on efuse");
-
-static int netdev_close(struct net_device *pnetdev);
-
-static void loadparam(struct adapter *padapter)
-{
- struct registry_priv *registry_par = &padapter->registrypriv;
-
- registry_par->chip_version = (u8)rtw_chip_version;
- registry_par->rfintfs = (u8)rtw_rfintfs;
- registry_par->lbkmode = (u8)rtw_lbkmode;
- /* registry_par->hci = (u8)hci; */
- registry_par->network_mode = (u8)rtw_network_mode;
-
- memcpy(registry_par->ssid.ssid, "ANY", 3);
- registry_par->ssid.ssid_length = 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->check_fw_ps = (u8)rtw_check_fw_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->qos_enable = (u8)rtw_qos_enable; */
- 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;
- registry_par->usb_rxagg_mode = (u8)rtw_usb_rxagg_mode;
-
- /* 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->ht_enable = (u8)rtw_ht_enable;
- registry_par->bw_mode = (u8)rtw_bw_mode;
- 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->short_gi = (u8)rtw_short_gi;
- registry_par->ldpc_cap = (u8)rtw_ldpc_cap;
- registry_par->stbc_cap = (u8)rtw_stbc_cap;
- registry_par->beamform_cap = (u8)rtw_beamform_cap;
-
- 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->ant_num = (s8)rtw_ant_num;
-
- registry_par->accept_addba_req = true;
-
- registry_par->antdiv_cfg = (u8)rtw_antdiv_cfg;
- registry_par->antdiv_type = (u8)rtw_antdiv_type;
-
- registry_par->hw_wps_pbc = (u8)rtw_hw_wps_pbc;
-
- registry_par->max_roaming_times = (u8)rtw_max_roaming_times;
-
- registry_par->enable80211d = (u8)rtw_80211d;
-
- snprintf(registry_par->ifname, 16, "%s", ifname);
-
- registry_par->notch_filter = (u8)rtw_notch_filter;
-
- registry_par->reg_enable_tx_power_limit = (u8)rtw_tx_pwr_lmt_enable;
- registry_par->reg_enable_tx_power_by_rate = (u8)rtw_tx_pwr_by_rate;
-
- registry_par->reg_power_base = 14;
-
- registry_par->qos_opt_enable = (u8)rtw_qos_opt_enable;
-
- registry_par->hiq_filter = (u8)rtw_hiq_filter;
-}
-
-static int rtw_net_set_mac_address(struct net_device *pnetdev, void *p)
-{
- struct adapter *padapter = rtw_netdev_priv(pnetdev);
- struct sockaddr *addr = p;
-
- if (!padapter->bup) {
- /* addr->sa_data[4], addr->sa_data[5]); */
- memcpy(padapter->eeprompriv.mac_addr, addr->sa_data, ETH_ALEN);
- /* eth_hw_addr_set(pnetdev, addr->sa_data); */
- /* padapter->bset_hwaddr = true; */
- }
-
- return 0;
-}
-
-static struct net_device_stats *rtw_net_get_stats(struct net_device *pnetdev)
-{
- struct adapter *padapter = 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(ð_type, pdata + (ETH_ALEN << 1), 2);
-
- switch (be16_to_cpu(eth_type)) {
- case 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 int rtw_ndev_init(struct net_device *dev)
-{
- struct adapter *adapter = rtw_netdev_priv(dev);
-
- netdev_dbg(dev, FUNC_ADPT_FMT "\n", FUNC_ADPT_ARG(adapter));
- strscpy(adapter->old_ifname, dev->name);
-
- return 0;
-}
-
-static void rtw_ndev_uninit(struct net_device *dev)
-{
- struct adapter *adapter = rtw_netdev_priv(dev);
-
- netdev_dbg(dev, FUNC_ADPT_FMT "\n", FUNC_ADPT_ARG(adapter));
-}
-
-static const struct net_device_ops rtw_netdev_ops = {
- .ndo_init = rtw_ndev_init,
- .ndo_uninit = rtw_ndev_uninit,
- .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)
-{
- if (dev_alloc_name(pnetdev, ifname) < 0) {
- pr_err("dev_alloc_name, fail for %s\n", ifname);
- return 1;
- }
- netif_carrier_off(pnetdev);
- /* rtw_netif_stop_queue(pnetdev); */
-
- return 0;
-}
-
-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));
-
- pr_info("pnetdev = %p\n", pnetdev);
- if (!pnetdev)
- return NULL;
-
- padapter = rtw_netdev_priv(pnetdev);
- padapter->pnetdev = pnetdev;
-
- /* pnetdev->init = NULL; */
-
- pnetdev->netdev_ops = &rtw_netdev_ops;
-
- /* pnetdev->tx_timeout = NULL; */
- pnetdev->watchdog_timeo = HZ * 3; /* 3 second timeout */
-
- /* step 2. */
- loadparam(padapter);
-
- return pnetdev;
-}
-
-void rtw_unregister_netdevs(struct dvobj_priv *dvobj)
-{
- struct adapter *padapter = NULL;
- struct net_device *pnetdev = NULL;
-
- padapter = dvobj->padapters;
-
- if (!padapter)
- return;
-
- pnetdev = padapter->pnetdev;
-
- if ((padapter->DriverState != DRIVER_DISAPPEAR) && pnetdev)
- unregister_netdev(pnetdev); /* will call netdev_close() */
- rtw_wdev_unregister(padapter->rtw_wdev);
-}
-
-u32 rtw_start_drv_threads(struct adapter *padapter)
-{
- u32 _status = _SUCCESS;
-
- padapter->xmitThread = kthread_run(rtw_xmit_thread, padapter, "RTW_XMIT_THREAD");
- if (IS_ERR(padapter->xmitThread))
- _status = _FAIL;
-
- padapter->cmdThread = kthread_run(rtw_cmd_thread, padapter, "RTW_CMD_THREAD");
- if (IS_ERR(padapter->cmdThread))
- _status = _FAIL;
- else
- wait_for_completion(&padapter->cmdpriv.terminate_cmdthread_comp); /* wait for cmd_thread to run */
-
- padapter->xmitpriv.SdioXmitThread = kthread_run(rtl8723bs_xmit_thread,
- padapter, "RTWHALXT");
- if (IS_ERR(padapter->xmitpriv.SdioXmitThread)) {
- padapter->xmitpriv.SdioXmitThread = NULL;
- _status = _FAIL;
- }
-
- return _status;
-}
-
-void rtw_stop_drv_threads(struct adapter *padapter)
-{
- rtw_stop_cmd_thread(padapter);
-
- /* Below is to terminate tx_thread... */
- complete(&padapter->xmitpriv.xmit_comp);
- wait_for_completion(&padapter->xmitpriv.terminate_xmitthread_comp);
-
- /* stop SdioXmitThread */
- if (padapter->xmitpriv.SdioXmitThread) {
- complete(&padapter->xmitpriv.SdioXmitStart);
- wait_for_completion(&padapter->xmitpriv.SdioXmitTerminate);
- padapter->xmitpriv.SdioXmitThread = NULL;
- }
-}
-
-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->vcs_setting = pregistrypriv->vrtl_carrier_sense;
- pxmitpriv->vcs = pregistrypriv->vcs_type;
- pxmitpriv->vcs_type = pregistrypriv->vcs_type;
- /* pxmitpriv->rts_thresh = pregistrypriv->rts_thresh; */
- pxmitpriv->frag_len = pregistrypriv->frag_thresh;
-
- /* recv_priv */
-
- /* mlme_priv */
- pmlmepriv->scan_mode = SCAN_ACTIVE;
-
- /* qos_priv */
- /* pmlmepriv->qospriv.qos_option = pregistrypriv->wmm_enable; */
-
- /* ht_priv */
- pmlmepriv->htpriv.ampdu_enable = false;/* set to disabled */
-
- /* security_priv */
- psecuritypriv->binstallGrpkey = _FAIL;
- psecuritypriv->sw_encrypt = pregistrypriv->software_encrypt;
- psecuritypriv->sw_decrypt = pregistrypriv->software_decrypt;
-
- psecuritypriv->dot11_auth_algrthm = dot11_auth_algrthm_open; /* open system */
- psecuritypriv->dot11_privacy_algrthm = _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 */
- rtl8723bs_init_default_value(padapter);
-
- /* misc. */
- RTW_ENABLE_FUNC(padapter, DF_RX_BIT);
- RTW_ENABLE_FUNC(padapter, DF_TX_BIT);
- padapter->bLinkInfoDump = 0;
- padapter->bNotifyChannelChange = 0;
-
- /* for debug purpose */
- padapter->fix_rate = 0xFF;
- padapter->driver_ampdu_spacing = 0xFF;
- padapter->driver_rx_ampdu_factor = 0xFF;
-}
-
-struct dvobj_priv *devobj_init(void)
-{
- struct dvobj_priv *pdvobj = NULL;
-
- pdvobj = kzalloc_obj(*pdvobj);
- if (!pdvobj)
- return NULL;
-
- mutex_init(&pdvobj->hw_init_mutex);
- mutex_init(&pdvobj->h2c_fwcmd_mutex);
- mutex_init(&pdvobj->setch_mutex);
- mutex_init(&pdvobj->setbw_mutex);
-
- spin_lock_init(&pdvobj->lock);
-
- pdvobj->macid[1] = true; /* macid = 1 for bc/mc stainfo */
-
- pdvobj->processing_dev_remove = false;
-
- atomic_set(&pdvobj->disable_func, 0);
-
- spin_lock_init(&pdvobj->cam_ctl.lock);
-
- return pdvobj;
-}
-
-void devobj_deinit(struct dvobj_priv *pdvobj)
-{
- if (!pdvobj)
- return;
-
- mutex_destroy(&pdvobj->hw_init_mutex);
- mutex_destroy(&pdvobj->h2c_fwcmd_mutex);
- mutex_destroy(&pdvobj->setch_mutex);
- mutex_destroy(&pdvobj->setbw_mutex);
-
- kfree(pdvobj);
-}
-
-void rtw_reset_drv_sw(struct adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
-
- /* hal_priv */
- rtl8723bs_init_default_value(padapter);
-
- RTW_ENABLE_FUNC(padapter, DF_RX_BIT);
- RTW_ENABLE_FUNC(padapter, DF_TX_BIT);
- padapter->bLinkInfoDump = 0;
-
- padapter->xmitpriv.tx_pkts = 0;
- padapter->recvpriv.rx_pkts = 0;
-
- pmlmepriv->link_detect_info.busy_traffic = false;
-
- pmlmepriv->link_detect_info.traffic_transition_count = 0;
- pmlmepriv->link_detect_info.low_power_transition_count = 0;
-
- _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING);
-
- pwrctrlpriv->pwr_state_check_cnts = 0;
-
- /* mlmeextpriv */
- padapter->mlmeextpriv.sitesurvey_res.state = SCAN_DISABLE;
-
- rtw_set_signal_stat_timer(&padapter->recvpriv);
-}
-
-u8 rtw_init_drv_sw(struct adapter *padapter)
-{
- int res;
-
- rtw_init_default_value(padapter);
-
- rtw_init_hal_com_default_value(padapter);
-
- if (rtw_init_cmd_priv(&padapter->cmdpriv))
- return _FAIL;
-
- padapter->cmdpriv.padapter = padapter;
-
- if (rtw_init_evt_priv(&padapter->evtpriv))
- goto free_cmd_priv;
-
- if (rtw_init_mlme_priv(padapter) == _FAIL)
- goto free_evt_priv;
-
- init_mlme_ext_priv(padapter);
-
- res = _rtw_init_xmit_priv(&padapter->xmitpriv, padapter);
- if (res)
- goto free_mlme_ext;
-
- if (_rtw_init_recv_priv(&padapter->recvpriv, padapter) == _FAIL)
- goto free_xmit_priv;
- spin_lock_init(&padapter->security_key_mutex);
-
- /* We don't need to memset padapter->XXX to zero, because adapter is allocated by vzalloc(). */
- /* memset((unsigned char *)&padapter->securitypriv, 0, sizeof (struct security_priv)); */
-
- if (_rtw_init_sta_priv(&padapter->stapriv) == _FAIL)
- goto free_recv_priv;
-
- padapter->stapriv.padapter = padapter;
- padapter->setband = GHZ24_50;
- padapter->fix_rate = 0xFF;
- rtw_init_bcmc_stainfo(padapter);
-
- rtw_init_pwrctrl_priv(padapter);
-
- rtl8723b_init_dm_priv(padapter);
-
- 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)
-{
- timer_delete_sync(&padapter->mlmepriv.assoc_timer);
-
- timer_delete_sync(&padapter->mlmepriv.scan_to_timer);
-
- timer_delete_sync(&padapter->mlmepriv.dynamic_chk_timer);
-
- timer_delete_sync(&(adapter_to_pwrctl(padapter)->pwr_state_check_timer));
-
- timer_delete_sync(&padapter->mlmepriv.set_scan_deny_timer);
- rtw_clear_scan_deny(padapter);
-
- timer_delete_sync(&padapter->recvpriv.signal_stat_timer);
-}
-
-u8 rtw_free_drv_sw(struct adapter *padapter)
-{
- 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);
-
- rtw_free_pwrctrl_priv(padapter);
-
- /* kfree((void *)padapter); */
-
- rtw_hal_data_deinit(padapter);
-
- /* 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;
-
- return _SUCCESS;
-}
-
-static int _rtw_drv_register_netdev(struct adapter *padapter, char *name)
-{
- int ret = _SUCCESS;
- struct net_device *pnetdev = padapter->pnetdev;
-
- /* alloc netdev name */
- if (rtw_init_netdev_name(pnetdev, name))
- return _FAIL;
-
- eth_hw_addr_set(pnetdev, padapter->eeprompriv.mac_addr);
-
- /* Tell the network stack we exist */
- if (register_netdev(pnetdev) != 0) {
- ret = _FAIL;
- goto error_register_netdev;
- }
-
- return ret;
-
-error_register_netdev:
-
- rtw_free_drv_sw(padapter);
-
- rtw_free_netdev(pnetdev);
-
- return ret;
-}
-
-int rtw_drv_register_netdev(struct adapter *if1)
-{
- struct dvobj_priv *dvobj = if1->dvobj;
- struct adapter *padapter = dvobj->padapters;
- char *name = if1->registrypriv.ifname;
-
- return _rtw_drv_register_netdev(padapter, name);
-}
-
-static int _netdev_open(struct net_device *pnetdev)
-{
- unsigned int status;
- struct adapter *padapter = rtw_netdev_priv(pnetdev);
- struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
-
- padapter->netif_up = true;
-
- if (pwrctrlpriv->ps_flag) {
- padapter->net_closed = false;
- goto netdev_open_normal_process;
- }
-
- if (!padapter->bup) {
- padapter->driver_stopped = false;
- padapter->bSurpriseRemoved = false;
- padapter->bCardDisableWOHSM = false;
-
- status = rtw_hal_init(padapter);
- if (status == _FAIL)
- goto netdev_open_error;
-
- status = rtw_start_drv_threads(padapter);
- if (status == _FAIL)
- goto netdev_open_error;
-
- if (padapter->intf_start)
- padapter->intf_start(padapter);
-
- rtw_cfg80211_init_wiphy(padapter);
-
- padapter->bup = true;
- pwrctrlpriv->bips_processing = false;
- }
- padapter->net_closed = false;
-
- _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
-
- if (!rtw_netif_queue_stopped(pnetdev))
- rtw_netif_start_queue(pnetdev);
- else
- rtw_netif_wake_queue(pnetdev);
-
-netdev_open_normal_process:
-
- return 0;
-
-netdev_open_error:
-
- padapter->bup = false;
-
- netif_carrier_off(pnetdev);
- rtw_netif_stop_queue(pnetdev);
-
- return (-1);
-}
-
-int netdev_open(struct net_device *pnetdev)
-{
- int ret;
- struct adapter *padapter = rtw_netdev_priv(pnetdev);
- struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
-
- if (pwrctrlpriv->bInSuspend)
- return 0;
-
- if (mutex_lock_interruptible(&(adapter_to_dvobj(padapter)->hw_init_mutex)))
- return -1;
-
- ret = _netdev_open(pnetdev);
- mutex_unlock(&(adapter_to_dvobj(padapter)->hw_init_mutex));
-
- return ret;
-}
-
-static int ips_netdrv_open(struct adapter *padapter)
-{
- int status = _SUCCESS;
- /* struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter); */
-
- padapter->net_closed = false;
-
- padapter->driver_stopped = false;
- padapter->bCardDisableWOHSM = false;
- /* padapter->bup = true; */
-
- status = rtw_hal_init(padapter);
- if (status == _FAIL)
- goto netdev_open_error;
-
- if (padapter->intf_start)
- padapter->intf_start(padapter);
-
- _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);
-
- return _SUCCESS;
-
-netdev_open_error:
-
- return _FAIL;
-}
-
-int rtw_ips_pwr_up(struct adapter *padapter)
-{
- return ips_netdrv_open(padapter);
-}
-
-void rtw_ips_pwr_down(struct adapter *padapter)
-{
- padapter->bCardDisableWOHSM = true;
- padapter->net_closed = true;
-
- rtw_ips_dev_unload(padapter);
- padapter->bCardDisableWOHSM = false;
-}
-
-void rtw_ips_dev_unload(struct adapter *padapter)
-{
- if (!padapter->bSurpriseRemoved)
- rtw_hal_deinit(padapter);
-}
-
-static int pm_netdev_open(struct net_device *pnetdev, u8 bnormal)
-{
- int status = -1;
-
- struct adapter *padapter = rtw_netdev_priv(pnetdev);
-
- if (bnormal) {
- if (mutex_lock_interruptible(&(adapter_to_dvobj(padapter)->hw_init_mutex)) == 0) {
- status = _netdev_open(pnetdev);
- mutex_unlock(&(adapter_to_dvobj(padapter)->hw_init_mutex));
- }
- } else {
- status = (ips_netdrv_open(padapter) == _SUCCESS) ? (0) : (-1);
- }
-
- return status;
-}
-
-static int netdev_close(struct net_device *pnetdev)
-{
- struct adapter *padapter = rtw_netdev_priv(pnetdev);
- struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(padapter);
-
- if (pwrctl->bInternalAutoSuspend) {
- /* rtw_pwr_wakeup(padapter); */
- if (pwrctl->rf_pwrstate == rf_off)
- pwrctl->ps_flag = true;
- }
- padapter->net_closed = true;
- padapter->netif_up = false;
-
- if (pwrctl->rf_pwrstate == rf_on) {
- /* s1. */
- if (pnetdev) {
- if (!rtw_netif_queue_stopped(pnetdev))
- rtw_netif_stop_queue(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);
- }
-
- rtw_scan_abort(padapter);
-
- return 0;
-}
-
-void rtw_ndev_destructor(struct net_device *ndev)
-{
- kfree(ndev->ieee80211_ptr);
-}
-
-void rtw_dev_unload(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrctl = adapter_to_pwrctl(padapter);
- struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- u8 cnt = 0;
-
- if (padapter->bup) {
- padapter->driver_stopped = true;
- if (padapter->xmitpriv.ack_tx)
- rtw_ack_tx_done(&padapter->xmitpriv, RTW_SCTX_DONE_DRV_STOP);
-
- if (padapter->intf_stop)
- padapter->intf_stop(padapter);
-
- if (!pwrctl->bInternalAutoSuspend)
- rtw_stop_drv_threads(padapter);
-
- while (atomic_read(&pcmdpriv->cmdthd_running)) {
- if (cnt > 5)
- break;
- cnt++;
- msleep(10);
- }
-
- /* check the status of IPS */
- if (rtw_hal_check_ips_status(padapter) || pwrctl->rf_pwrstate == rf_off) {
- /* check HW status and SW state */
- netdev_dbg(padapter->pnetdev,
- "%s: driver in IPS-FWLPS\n", __func__);
- LeaveAllPowerSaveMode(padapter);
- } else {
- netdev_dbg(padapter->pnetdev,
- "%s: driver not in IPS\n", __func__);
- }
-
- if (!padapter->bSurpriseRemoved) {
- hal_btcoex_IpsNotify(padapter, pwrctl->ips_mode_req);
-
- /* amy modify 20120221 for power seq is different between driver open and ips */
- rtw_hal_deinit(padapter);
-
- padapter->bSurpriseRemoved = true;
- }
-
- padapter->bup = false;
- }
-}
-
-static int rtw_suspend_free_assoc_resource(struct adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- if (rtw_chk_roam_flags(padapter, RTW_ROAM_ON_RESUME)) {
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) &&
- check_fwstate(pmlmepriv, _FW_LINKED)) {
- rtw_set_to_roam(padapter, 1);
- }
- }
-
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) && check_fwstate(pmlmepriv, _FW_LINKED)) {
- rtw_disassoc_cmd(padapter, 0, false);
- /* s2-2. indicate disconnect to os */
- rtw_indicate_disconnect(padapter);
- } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- rtw_sta_flush(padapter);
- }
-
- /* s2-3. */
- rtw_free_assoc_resources(padapter, 1);
-
- /* s2-4. */
- rtw_free_network_queue(padapter, true);
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
- rtw_indicate_scan_done(padapter, 1);
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
- netdev_dbg(padapter->pnetdev, "%s: fw_under_linking\n",
- __func__);
- rtw_indicate_disconnect(padapter);
- }
-
- return _SUCCESS;
-}
-
-static void rtw_suspend_normal(struct adapter *padapter)
-{
- struct net_device *pnetdev = padapter->pnetdev;
-
- if (pnetdev) {
- netif_carrier_off(pnetdev);
- rtw_netif_stop_queue(pnetdev);
- }
-
- rtw_suspend_free_assoc_resource(padapter);
-
- if ((rtw_hal_check_ips_status(padapter)) || (adapter_to_pwrctl(padapter)->rf_pwrstate == rf_off))
- netdev_dbg(padapter->pnetdev,
- "%s: ### ERROR #### driver in IPS ####ERROR###!!!\n",
- __func__);
-
- rtw_dev_unload(padapter);
-
- /* sdio_deinit(adapter_to_dvobj(padapter)); */
- if (padapter->intf_deinit)
- padapter->intf_deinit(adapter_to_dvobj(padapter));
-}
-
-void rtw_suspend_common(struct adapter *padapter)
-{
- struct dvobj_priv *psdpriv = padapter->dvobj;
- struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(psdpriv);
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- unsigned long start_time = jiffies;
-
- netdev_dbg(padapter->pnetdev, " suspend start\n");
-
- pwrpriv->bInSuspend = true;
-
- while (pwrpriv->bips_processing)
- msleep(1);
-
- if ((!padapter->bup) || (padapter->driver_stopped) || (padapter->bSurpriseRemoved))
- return;
-
- rtw_ps_deny(padapter, PS_DENY_SUSPEND);
-
- rtw_cancel_all_timer(padapter);
-
- LeaveAllPowerSaveModeDirect(padapter);
-
- rtw_stop_cmd_thread(padapter);
-
- /* wait for the latest FW to remove this condition. */
- if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
- hal_btcoex_SuspendNotify(padapter, 0);
- else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
- hal_btcoex_SuspendNotify(padapter, 1);
-
- rtw_ps_deny_cancel(padapter, PS_DENY_SUSPEND);
-
- rtw_suspend_normal(padapter);
-
- netdev_dbg(padapter->pnetdev, "rtw suspend success in %d ms\n",
- jiffies_to_msecs(jiffies - start_time));
-}
-
-static int rtw_resume_process_normal(struct adapter *padapter)
-{
- struct net_device *pnetdev;
- struct pwrctrl_priv *pwrpriv;
- struct mlme_priv *pmlmepriv;
-
- int ret = _SUCCESS;
-
- if (!padapter) {
- ret = -1;
- goto exit;
- }
-
- pnetdev = padapter->pnetdev;
- pwrpriv = adapter_to_pwrctl(padapter);
- pmlmepriv = &padapter->mlmepriv;
- /* interface init */
- if (padapter->intf_init) {
- ret = padapter->intf_init(adapter_to_dvobj(padapter));
- if (ret)
- goto exit;
- }
- rtw_sdio_disable_interrupt(padapter);
- /* if (sdio_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS) */
- if ((padapter->intf_alloc_irq) && (padapter->intf_alloc_irq(adapter_to_dvobj(padapter)) != _SUCCESS)) {
- ret = -1;
- goto exit;
- }
-
- rtw_reset_drv_sw(padapter);
- pwrpriv->bkeepfwalive = false;
-
- if (pm_netdev_open(pnetdev, true) != 0) {
- ret = -1;
- goto exit;
- }
-
- netif_device_attach(pnetdev);
- netif_carrier_on(pnetdev);
-
- if (padapter->pid[1] != 0)
- rtw_signal_process(padapter->pid[1], SIGUSR2);
-
- if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
- if (rtw_chk_roam_flags(padapter, RTW_ROAM_ON_RESUME))
- rtw_roaming(padapter, NULL);
- } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- rtw_ap_restore_network(padapter);
- }
-
-exit:
- return ret;
-}
-
-int rtw_resume_common(struct adapter *padapter)
-{
- int ret = 0;
- unsigned long start_time = jiffies;
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
-
- netdev_dbg(padapter->pnetdev, "resume start\n");
-
- rtw_resume_process_normal(padapter);
-
- hal_btcoex_SuspendNotify(padapter, 0);
-
- if (pwrpriv)
- pwrpriv->bInSuspend = false;
-
- netdev_dbg(padapter->pnetdev, "%s:%d in %d ms\n", __func__, ret,
- jiffies_to_msecs(jiffies - start_time));
-
- return ret;
-}
diff --git a/drivers/staging/rtl8723bs/os_dep/osdep_service.c b/drivers/staging/rtl8723bs/os_dep/osdep_service.c
deleted file mode 100644
index 4cfdf7c62344..000000000000
--- a/drivers/staging/rtl8723bs/os_dep/osdep_service.c
+++ /dev/null
@@ -1,201 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-
-/* Translate the OS dependent error_code to RTW_STATUS_CODE */
-inline int RTW_STATUS_CODE(int error_code)
-{
- if (error_code >= 0)
- return _SUCCESS;
- return _FAIL;
-}
-
-inline int _rtw_netif_rx(struct net_device *ndev, struct sk_buff *skb)
-{
- skb->dev = ndev;
- return netif_rx(skb);
-}
-
-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)
- goto RETURN;
-
- pnpi = netdev_priv(pnetdev);
- pnpi->priv = old_priv;
- pnpi->sizeof_priv = sizeof_priv;
-
-RETURN:
- 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)
- goto RETURN;
-
- pnpi = netdev_priv(pnetdev);
-
- pnpi->priv = vzalloc(sizeof_priv);
- if (!pnpi->priv) {
- free_netdev(pnetdev);
- pnetdev = NULL;
- goto RETURN;
- }
-
- pnpi->sizeof_priv = sizeof_priv;
-RETURN:
- return pnetdev;
-}
-
-void rtw_free_netdev(struct net_device *netdev)
-{
- struct rtw_netdev_priv_indicator *pnpi;
-
- if (!netdev)
- goto RETURN;
-
- pnpi = netdev_priv(netdev);
-
- if (!pnpi->priv)
- goto RETURN;
-
- vfree(pnpi->priv);
- free_netdev(netdev);
-
-RETURN:
- return;
-}
-
-void rtw_buf_free(u8 **buf, u32 *buf_len)
-{
- if (!buf || !buf_len)
- return;
-
- if (*buf) {
- *buf_len = 0;
- kfree(*buf);
- *buf = NULL;
- }
-}
-
-void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len)
-{
- u32 ori_len = 0, dup_len = 0;
- u8 *ori = NULL;
- u8 *dup = NULL;
-
- if (!buf || !buf_len)
- return;
-
- if (!src || !src_len)
- goto keep_ori;
-
- /* duplicate src */
- dup = kmemdup(src, src_len, GFP_ATOMIC);
- if (dup)
- dup_len = src_len;
-
-keep_ori:
- ori = *buf;
- ori_len = *buf_len;
-
- /* replace buf with dup */
- *buf_len = 0;
- *buf = dup;
- *buf_len = dup_len;
-
- /* free ori */
- if (ori && ori_len > 0)
- kfree(ori);
-}
-
-/**
- * rtw_cbuf_full - test if cbuf is full
- * @cbuf: pointer of struct rtw_cbuf
- *
- * Returns: true if cbuf is full
- */
-inline bool rtw_cbuf_full(struct rtw_cbuf *cbuf)
-{
- return (cbuf->write == cbuf->read - 1) ? true : false;
-}
-
-/**
- * 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) ? true : false;
-}
-
-/**
- * rtw_cbuf_push - push a pointer into cbuf
- * @cbuf: pointer of struct rtw_cbuf
- * @buf: pointer to push in
- *
- * Lock free operation, be careful of the use scheme
- * Returns: true push success
- */
-bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf)
-{
- if (rtw_cbuf_full(cbuf))
- return _FAIL;
-
- cbuf->bufs[cbuf->write] = buf;
- cbuf->write = (cbuf->write + 1) % cbuf->size;
-
- return _SUCCESS;
-}
-
-/**
- * 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 = kzalloc_flex(*cbuf, bufs, size);
- if (cbuf)
- cbuf->size = size;
-
- return cbuf;
-}
diff --git a/drivers/staging/rtl8723bs/os_dep/sdio_intf.c b/drivers/staging/rtl8723bs/os_dep/sdio_intf.c
deleted file mode 100644
index c61d3d12df7f..000000000000
--- a/drivers/staging/rtl8723bs/os_dep/sdio_intf.c
+++ /dev/null
@@ -1,465 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <hal_btcoex.h>
-#include <hal_data.h>
-#include <linux/jiffies.h>
-
-#ifndef dev_to_sdio_func
-#define dev_to_sdio_func(d) container_of(d, struct sdio_func, dev)
-#endif
-
-static const struct sdio_device_id sdio_ids[] = {
- { SDIO_DEVICE(0x024c, 0x0523), },
- { SDIO_DEVICE(0x024c, 0x0525), },
- { SDIO_DEVICE(0x024c, 0x0623), },
- { SDIO_DEVICE(0x024c, 0x0626), },
- { SDIO_DEVICE(0x024c, 0x0627), },
- { SDIO_DEVICE(0x024c, 0xb723), },
- { /* end: all zeroes */ },
-};
-MODULE_DEVICE_TABLE(sdio, sdio_ids);
-
-static int rtw_drv_init(struct sdio_func *func, const struct sdio_device_id *id);
-static void rtw_dev_remove(struct sdio_func *func);
-static int rtw_sdio_resume(struct device *dev);
-static int rtw_sdio_suspend(struct device *dev);
-
-static const struct dev_pm_ops rtw_sdio_pm_ops = {
- .suspend = rtw_sdio_suspend,
- .resume = rtw_sdio_resume,
-};
-
-static struct sdio_driver rtl8723bs_sdio_driver = {
- .probe = rtw_drv_init,
- .remove = rtw_dev_remove,
- .name = "rtl8723bs",
- .id_table = sdio_ids,
- .drv = {
- .pm = &rtw_sdio_pm_ops,
- }
-};
-
-static void sd_sync_int_hdl(struct sdio_func *func)
-{
- struct dvobj_priv *psdpriv;
-
-
- psdpriv = sdio_get_drvdata(func);
-
- if (!psdpriv->if1)
- return;
-
- rtw_sdio_set_irq_thd(psdpriv, current);
- sd_int_hdl(psdpriv->if1);
- rtw_sdio_set_irq_thd(psdpriv, NULL);
-}
-
-static int sdio_alloc_irq(struct dvobj_priv *dvobj)
-{
- struct sdio_data *psdio_data;
- struct sdio_func *func;
- int err;
-
- psdio_data = &dvobj->intf_data;
- func = psdio_data->func;
-
- sdio_claim_host(func);
-
- err = sdio_claim_irq(func, &sd_sync_int_hdl);
- if (err)
- netdev_crit(dvobj->if1->pnetdev, "%s: sdio_claim_irq FAIL(%d)!\n", __func__, err);
- else
- dvobj->irq_alloc = 1;
-
- sdio_release_host(func);
-
- return err ? _FAIL : _SUCCESS;
-}
-
-static void sdio_free_irq(struct dvobj_priv *dvobj)
-{
- struct sdio_data *psdio_data;
- struct sdio_func *func;
- int err;
-
- if (dvobj->irq_alloc) {
- psdio_data = &dvobj->intf_data;
- func = psdio_data->func;
-
- if (func) {
- sdio_claim_host(func);
- err = sdio_release_irq(func);
- if (err) {
- netdev_err(dvobj->if1->pnetdev,
- "%s: sdio_release_irq FAIL(%d)!\n",
- __func__, err);
- }
- sdio_release_host(func);
- }
- dvobj->irq_alloc = 0;
- }
-}
-
-static u32 sdio_init(struct dvobj_priv *dvobj)
-{
- struct sdio_data *psdio_data;
- struct sdio_func *func;
- int err;
-
- psdio_data = &dvobj->intf_data;
- func = psdio_data->func;
-
- /* 3 1. init SDIO bus */
- sdio_claim_host(func);
-
- err = sdio_enable_func(func);
- if (err)
- goto release;
-
- err = sdio_set_block_size(func, 512);
- if (err)
- goto release;
-
- psdio_data->block_transfer_len = 512;
- psdio_data->tx_block_mode = 1;
- psdio_data->rx_block_mode = 1;
-
-release:
- sdio_release_host(func);
-
- return err;
-}
-
-static void sdio_deinit(struct dvobj_priv *dvobj)
-{
- struct sdio_func *func;
-
- func = dvobj->intf_data.func;
-
- if (func) {
- sdio_claim_host(func);
- sdio_disable_func(func);
-
- if (dvobj->irq_alloc)
- sdio_release_irq(func);
-
- sdio_release_host(func);
- }
-}
-static struct dvobj_priv *sdio_dvobj_init(struct sdio_func *func)
-{
- struct dvobj_priv *dvobj = NULL;
- struct sdio_data *psdio;
- int ret;
-
- dvobj = devobj_init();
- if (!dvobj)
- return NULL;
-
- sdio_set_drvdata(func, dvobj);
-
- psdio = &dvobj->intf_data;
- psdio->func = func;
-
- ret = sdio_init(dvobj);
- if (ret)
- goto free_dvobj;
-
- rtw_reset_continual_io_error(dvobj);
-
- return dvobj;
-
-free_dvobj:
- sdio_set_drvdata(func, NULL);
- devobj_deinit(dvobj);
-
- return NULL;
-}
-
-static void sdio_dvobj_deinit(struct sdio_func *func)
-{
- struct dvobj_priv *dvobj = sdio_get_drvdata(func);
-
- sdio_set_drvdata(func, NULL);
- if (dvobj) {
- sdio_deinit(dvobj);
- devobj_deinit(dvobj);
- }
-}
-
-void rtw_set_hal_ops(struct adapter *padapter)
-{
- /* alloc memory for HAL DATA */
- rtw_hal_data_init(padapter);
-}
-
-static void sd_intf_start(struct adapter *padapter)
-{
- if (!padapter)
- return;
-
- rtw_sdio_enable_interrupt(padapter);
-}
-
-static void sd_intf_stop(struct adapter *padapter)
-{
- if (!padapter)
- return;
-
- rtw_sdio_disable_interrupt(padapter);
-}
-
-
-static struct adapter *rtw_sdio_if1_init(struct dvobj_priv *dvobj)
-{
- int status = _FAIL;
- struct net_device *pnetdev;
- struct adapter *padapter = NULL;
- struct sdio_data *psdio = &dvobj->intf_data;
-
- padapter = vzalloc(sizeof(*padapter));
- if (!padapter)
- goto exit;
-
- padapter->dvobj = dvobj;
- dvobj->if1 = padapter;
-
- padapter->driver_stopped = true;
-
- dvobj->padapters = padapter;
- padapter->iface_id = 0;
-
- /* 3 1. init network device data */
- pnetdev = rtw_init_netdev(padapter);
- if (!pnetdev)
- goto free_adapter;
-
- SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
-
- padapter = rtw_netdev_priv(pnetdev);
-
- /* 3 3. init driver special setting, interface, OS and hardware relative */
-
- /* 4 3.1 set hardware operation functions */
- rtw_set_hal_ops(padapter);
-
-
- /* 3 5. initialize Chip version */
- padapter->intf_start = &sd_intf_start;
- padapter->intf_stop = &sd_intf_stop;
-
- padapter->intf_init = &sdio_init;
- padapter->intf_deinit = &sdio_deinit;
- padapter->intf_alloc_irq = &sdio_alloc_irq;
- padapter->intf_free_irq = &sdio_free_irq;
-
- if (rtw_init_io_priv(padapter, sdio_set_intf_ops) == _FAIL)
- goto free_hal_data;
-
- rtl8723b_read_chip_version(padapter);
-
- rtl8723bs_interface_configure(padapter);
-
- hal_btcoex_Initialize((void *)padapter);
-
- /* 3 6. read efuse/eeprom data */
- rtw_read_adapter_info(padapter);
-
- /* 3 7. init driver common data */
- if (rtw_init_drv_sw(padapter) == _FAIL)
- goto free_hal_data;
-
- rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj));
-
- /* 3 8. get WLan MAC address */
- /* set mac addr */
- rtw_macaddr_cfg(&psdio->func->dev, padapter->eeprompriv.mac_addr);
-
- rtw_sdio_disable_interrupt(padapter);
-
- status = _SUCCESS;
-
-free_hal_data:
- if (status != _SUCCESS)
- rtw_hal_data_deinit(padapter);
-
- if (status != _SUCCESS) {
- rtw_wdev_unregister(padapter->rtw_wdev);
- rtw_wdev_free(padapter->rtw_wdev);
- }
-
-free_adapter:
- if (status != _SUCCESS) {
- if (pnetdev)
- rtw_free_netdev(pnetdev);
- else
- vfree((u8 *)padapter);
- padapter = NULL;
- }
-exit:
- return padapter;
-}
-
-static void rtw_sdio_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);
-
- rtw_cancel_all_timer(if1);
-
- rtw_dev_unload(if1);
-
- if (if1->rtw_wdev)
- rtw_wdev_free(if1->rtw_wdev);
-
- rtw_free_drv_sw(if1);
-
- if (pnetdev)
- rtw_free_netdev(pnetdev);
-}
-
-/*
- * 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_drv_init(struct sdio_func *func,
- const struct sdio_device_id *id)
-{
- int status = _FAIL;
- struct adapter *if1 = NULL;
- struct dvobj_priv *dvobj;
-
- dvobj = sdio_dvobj_init(func);
- if (!dvobj)
- goto exit;
-
- if1 = rtw_sdio_if1_init(dvobj);
- if (!if1)
- goto free_dvobj;
-
- /* dev_alloc_name && register_netdev */
- status = rtw_drv_register_netdev(if1);
- if (status != _SUCCESS)
- goto free_if1;
-
- status = sdio_alloc_irq(dvobj);
- if (status != _SUCCESS)
- goto free_netdev;
-
- status = _SUCCESS;
-
-free_netdev:
- if (status != _SUCCESS)
- rtw_unregister_netdevs(dvobj);
-free_if1:
- if (status != _SUCCESS && if1)
- rtw_sdio_if1_deinit(if1);
-
-free_dvobj:
- if (status != _SUCCESS)
- sdio_dvobj_deinit(func);
-exit:
- return status == _SUCCESS ? 0 : -ENODEV;
-}
-
-static void rtw_dev_remove(struct sdio_func *func)
-{
- struct dvobj_priv *dvobj = sdio_get_drvdata(func);
- struct adapter *padapter = dvobj->if1;
-
- dvobj->processing_dev_remove = true;
-
- rtw_unregister_netdevs(dvobj);
-
- if (!padapter->bSurpriseRemoved) {
- int err;
-
- /* test surprise remove */
- sdio_claim_host(func);
- sdio_readb(func, 0, &err);
- sdio_release_host(func);
- if (err == -ENOMEDIUM)
- padapter->bSurpriseRemoved = true;
- }
-
- rtw_ps_deny(padapter, PS_DENY_DRV_REMOVE);
-
- rtw_pm_set_ips(padapter, IPS_NONE);
- rtw_pm_set_lps(padapter, PS_MODE_ACTIVE);
-
- LeaveAllPowerSaveMode(padapter);
-
- rtw_btcoex_halt_notify(padapter);
-
- rtw_sdio_if1_deinit(padapter);
-
- sdio_dvobj_deinit(func);
-}
-
-static int rtw_sdio_suspend(struct device *dev)
-{
- struct sdio_func *func = dev_to_sdio_func(dev);
- struct dvobj_priv *psdpriv = sdio_get_drvdata(func);
- struct pwrctrl_priv *pwrpriv = dvobj_to_pwrctl(psdpriv);
- struct adapter *padapter = psdpriv->if1;
-
- if (padapter->driver_stopped)
- return 0;
-
- if (pwrpriv->bInSuspend)
- return 0;
-
- rtw_suspend_common(padapter);
-
- return 0;
-}
-
-static int rtw_resume_process(struct adapter *padapter)
-{
- struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(padapter);
-
- if (!pwrpriv->bInSuspend)
- return -1;
-
- return rtw_resume_common(padapter);
-}
-
-static int rtw_sdio_resume(struct device *dev)
-{
- struct sdio_func *func = dev_to_sdio_func(dev);
- struct dvobj_priv *psdpriv = sdio_get_drvdata(func);
- struct adapter *padapter = psdpriv->if1;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- int ret = 0;
-
- ret = rtw_resume_process(padapter);
-
- pmlmeext->last_scan_time = jiffies;
- return ret;
-}
-
-static int __init rtw_drv_entry(void)
-{
- return sdio_register_driver(&rtl8723bs_sdio_driver);
-}
-module_init(rtw_drv_entry);
-
-static void __exit rtw_drv_halt(void)
-{
- sdio_unregister_driver(&rtl8723bs_sdio_driver);
-}
-module_exit(rtw_drv_halt);
-
-MODULE_DESCRIPTION("Realtek RTL8723BS SDIO WiFi driver");
diff --git a/drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c b/drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c
deleted file mode 100644
index e9a2f3f7ec74..000000000000
--- a/drivers/staging/rtl8723bs/os_dep/sdio_ops_linux.c
+++ /dev/null
@@ -1,495 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- *******************************************************************************/
-
-#include <drv_types.h>
-
-static bool rtw_sdio_claim_host_needed(struct sdio_func *func)
-{
- struct dvobj_priv *dvobj = sdio_get_drvdata(func);
- struct sdio_data *sdio_data = &dvobj->intf_data;
-
- if (sdio_data->sys_sdio_irq_thd && sdio_data->sys_sdio_irq_thd == current)
- return false;
- return true;
-}
-
-inline void rtw_sdio_set_irq_thd(struct dvobj_priv *dvobj, void *thd_hdl)
-{
- struct sdio_data *sdio_data = &dvobj->intf_data;
-
- sdio_data->sys_sdio_irq_thd = thd_hdl;
-}
-
-/*
- * Return:
- *0 Success
- *others Fail
- */
-s32 _sd_cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
-
- int err = 0, i;
- struct sdio_func *func;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return err;
-
- func = psdio->func;
-
- for (i = 0; i < cnt; i++) {
- pdata[i] = sdio_readb(func, addr + i, &err);
- if (err)
- break;
- }
- return err;
-}
-
-/*
- * Return:
- *0 Success
- *others Fail
- */
-s32 sd_cmd52_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
-
- int err = 0;
- struct sdio_func *func;
- bool claim_needed;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return err;
-
- func = psdio->func;
- claim_needed = rtw_sdio_claim_host_needed(func);
-
- if (claim_needed)
- sdio_claim_host(func);
- err = _sd_cmd52_read(pintfhdl, addr, cnt, pdata);
- if (claim_needed)
- sdio_release_host(func);
- return err;
-}
-
-/*
- * Return:
- *0 Success
- *others Fail
- */
-s32 _sd_cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
-
- int err = 0, i;
- struct sdio_func *func;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return err;
-
- func = psdio->func;
-
- for (i = 0; i < cnt; i++) {
- sdio_writeb(func, pdata[i], addr + i, &err);
- if (err)
- break;
- }
- return err;
-}
-
-/*
- * Return:
- *0 Success
- *others Fail
- */
-s32 sd_cmd52_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pdata)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
-
- int err = 0;
- struct sdio_func *func;
- bool claim_needed;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return err;
-
- func = psdio->func;
- claim_needed = rtw_sdio_claim_host_needed(func);
-
- if (claim_needed)
- sdio_claim_host(func);
- err = _sd_cmd52_write(pintfhdl, addr, cnt, pdata);
- if (claim_needed)
- sdio_release_host(func);
- return err;
-}
-
-u8 sd_read8(struct intf_hdl *pintfhdl, u32 addr, s32 *err)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
-
- u8 v = 0;
- struct sdio_func *func;
- bool claim_needed;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return v;
-
- func = psdio->func;
- claim_needed = rtw_sdio_claim_host_needed(func);
-
- if (claim_needed)
- sdio_claim_host(func);
- v = sdio_readb(func, addr, err);
- if (claim_needed)
- sdio_release_host(func);
- return v;
-}
-
-u32 sd_read32(struct intf_hdl *pintfhdl, u32 addr, s32 *err)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
- u32 v = 0;
- struct sdio_func *func;
- bool claim_needed;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return v;
-
- func = psdio->func;
- claim_needed = rtw_sdio_claim_host_needed(func);
-
- if (claim_needed)
- sdio_claim_host(func);
- v = sdio_readl(func, addr, err);
- if (claim_needed)
- sdio_release_host(func);
-
- if (err && *err) {
- int i;
-
- *err = 0;
- for (i = 0; i < SD_IO_TRY_CNT; i++) {
- if (claim_needed)
- sdio_claim_host(func);
- v = sdio_readl(func, addr, err);
- if (claim_needed)
- sdio_release_host(func);
-
- if (*err == 0) {
- rtw_reset_continual_io_error(psdiodev);
- break;
- }
-
- if ((-ESHUTDOWN == *err) || (-ENODEV == *err))
- padapter->bSurpriseRemoved = true;
-
- if (rtw_inc_and_chk_continual_io_error(psdiodev)) {
- padapter->bSurpriseRemoved = true;
- break;
- }
- }
- }
- return v;
-}
-
-void sd_write8(struct intf_hdl *pintfhdl, u32 addr, u8 v, s32 *err)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
- struct sdio_func *func;
- bool claim_needed;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return;
-
- func = psdio->func;
- claim_needed = rtw_sdio_claim_host_needed(func);
-
- if (claim_needed)
- sdio_claim_host(func);
- sdio_writeb(func, v, addr, err);
- if (claim_needed)
- sdio_release_host(func);
-}
-
-void sd_write32(struct intf_hdl *pintfhdl, u32 addr, u32 v, s32 *err)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
- struct sdio_func *func;
- bool claim_needed;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return;
-
- func = psdio->func;
- claim_needed = rtw_sdio_claim_host_needed(func);
-
- if (claim_needed)
- sdio_claim_host(func);
- sdio_writel(func, v, addr, err);
- if (claim_needed)
- sdio_release_host(func);
-
- if (err && *err) {
- int i;
-
- *err = 0;
- for (i = 0; i < SD_IO_TRY_CNT; i++) {
- if (claim_needed)
- sdio_claim_host(func);
- sdio_writel(func, v, addr, err);
- if (claim_needed)
- sdio_release_host(func);
- if (*err == 0) {
- rtw_reset_continual_io_error(psdiodev);
- break;
- }
-
- if ((-ESHUTDOWN == *err) || (-ENODEV == *err))
- padapter->bSurpriseRemoved = true;
-
- if (rtw_inc_and_chk_continual_io_error(psdiodev)) {
- padapter->bSurpriseRemoved = true;
- break;
- }
- }
- }
-}
-
-/*
- * Use CMD53 to read data from SDIO device.
- * This function MUST be called after sdio_claim_host() or
- * in SDIO ISR(host had been claimed).
- *
- * Parameters:
- *psdio pointer of SDIO_DATA
- *addr address to read
- *cnt amount to read
- *pdata pointer to put data, this should be a "DMA:able scratch buffer"!
- *
- * Return:
- *0 Success
- *others Fail
- */
-s32 _sd_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
-
- int err = -EPERM;
- struct sdio_func *func;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return err;
-
- func = psdio->func;
-
- if (unlikely((cnt == 1) || (cnt == 2))) {
- int i;
- u8 *pbuf = pdata;
-
- for (i = 0; i < cnt; i++) {
- *(pbuf + i) = sdio_readb(func, addr + i, &err);
-
- if (err)
- break;
- }
- return err;
- }
-
- err = sdio_memcpy_fromio(func, pdata, addr, cnt);
-
- return err;
-}
-
-/*
- * Use CMD53 to read data from SDIO device.
- *
- * Parameters:
- *psdio pointer of SDIO_DATA
- *addr address to read
- *cnt amount to read
- *pdata pointer to put data, this should be a "DMA:able scratch buffer"!
- *
- * Return:
- *0 Success
- *others Fail
- */
-s32 sd_read(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
-
- struct sdio_func *func;
- bool claim_needed;
- s32 err = -EPERM;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return err;
-
- func = psdio->func;
- claim_needed = rtw_sdio_claim_host_needed(func);
-
- if (claim_needed)
- sdio_claim_host(func);
- err = _sd_read(pintfhdl, addr, cnt, pdata);
- if (claim_needed)
- sdio_release_host(func);
- return err;
-}
-
-/*
- * Use CMD53 to write data to SDIO device.
- * This function MUST be called after sdio_claim_host() or
- * in SDIO ISR(host had been claimed).
- *
- * Parameters:
- *psdio pointer of SDIO_DATA
- *addr address to write
- *cnt amount to write
- *pdata data pointer, this should be a "DMA:able scratch buffer"!
- *
- * Return:
- *0 Success
- *others Fail
- */
-s32 _sd_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
-
- struct sdio_func *func;
- u32 size;
- s32 err = -EPERM;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return err;
-
- func = psdio->func;
-/* size = sdio_align_size(func, cnt); */
-
- if (unlikely((cnt == 1) || (cnt == 2))) {
- int i;
- u8 *pbuf = pdata;
-
- for (i = 0; i < cnt; i++) {
- sdio_writeb(func, *(pbuf + i), addr + i, &err);
- if (err)
- break;
- }
-
- return err;
- }
-
- size = cnt;
- err = sdio_memcpy_toio(func, addr, pdata, size);
-
- return err;
-}
-
-/*
- * Use CMD53 to write data to SDIO device.
- *
- * Parameters:
- * psdio pointer of SDIO_DATA
- * addr address to write
- * cnt amount to write
- * pdata data pointer, this should be a "DMA:able scratch buffer"!
- *
- * Return:
- * 0 Success
- * others Fail
- */
-s32 sd_write(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, void *pdata)
-{
- struct adapter *padapter;
- struct dvobj_priv *psdiodev;
- struct sdio_data *psdio;
- struct sdio_func *func;
- bool claim_needed;
- s32 err = -EPERM;
-
- padapter = pintfhdl->padapter;
- psdiodev = pintfhdl->pintf_dev;
- psdio = &psdiodev->intf_data;
-
- if (padapter->bSurpriseRemoved)
- return err;
-
- func = psdio->func;
- claim_needed = rtw_sdio_claim_host_needed(func);
-
- if (claim_needed)
- sdio_claim_host(func);
- err = _sd_write(pintfhdl, addr, cnt, pdata);
- if (claim_needed)
- sdio_release_host(func);
- return err;
-}
diff --git a/drivers/staging/rtl8723bs/os_dep/wifi_regd.c b/drivers/staging/rtl8723bs/os_dep/wifi_regd.c
deleted file mode 100644
index d201a18d78b0..000000000000
--- a/drivers/staging/rtl8723bs/os_dep/wifi_regd.c
+++ /dev/null
@@ -1,129 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2009-2010 Realtek Corporation.
- *
- *****************************************************************************/
-
-#include <drv_types.h>
-
-#include <rtw_wifi_regd.h>
-
-/*
- * REG_RULE(freq start, freq end, bandwidth, max gain, eirp, reg_flags)
- */
-
-/*
- * Only these channels all allow active
- * scan on all world regulatory domains
- */
-
-/* 2G chan 01 - chan 11 */
-#define RTW_2GHZ_CH01_11 \
- REG_RULE(2412 - 10, 2462 + 10, 40, 0, 20, 0)
-
-/*
- * We enable active scan on these a case
- * by case basis by regulatory domain
- */
-
-/* 2G chan 12 - chan 13, PASSIV SCAN */
-#define RTW_2GHZ_CH12_13 \
- REG_RULE(2467 - 10, 2472 + 10, 40, 0, 20, \
- NL80211_RRF_PASSIVE_SCAN)
-
-static const struct ieee80211_regdomain rtw_regdom_rd = {
- .n_reg_rules = 2,
- .alpha2 = "99",
- .reg_rules = {
- RTW_2GHZ_CH01_11,
- RTW_2GHZ_CH12_13,
- }
-};
-
-static void _rtw_reg_apply_flags(struct wiphy *wiphy)
-{
- struct adapter *padapter = wiphy_to_adapter(wiphy);
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct rt_channel_info *channel_set = pmlmeext->channel_set;
- u8 max_chan_nums = pmlmeext->max_chan_nums;
-
- struct ieee80211_supported_band *sband;
- struct ieee80211_channel *ch;
- unsigned int i, j;
- u16 channel;
- u32 freq;
-
- /* all channels disable */
- for (i = 0; i < NUM_NL80211_BANDS; i++) {
- sband = wiphy->bands[i];
-
- if (sband) {
- for (j = 0; j < sband->n_channels; j++) {
- ch = &sband->channels[j];
-
- if (ch)
- ch->flags = IEEE80211_CHAN_DISABLED;
- }
- }
- }
-
- /* channels apply by channel plans. */
- for (i = 0; i < max_chan_nums; i++) {
- channel = channel_set[i].channel_num;
- freq = rtw_ieee80211_channel_to_frequency(channel);
- ch = ieee80211_get_channel(wiphy, freq);
- if (ch) {
- if (channel_set[i].scan_type == SCAN_PASSIVE)
- ch->flags = IEEE80211_CHAN_NO_IR;
- else
- ch->flags = 0;
- }
- }
-}
-
-static int _rtw_reg_notifier_apply(struct wiphy *wiphy,
- struct regulatory_request *request)
-{
- /* Hard code flags */
- _rtw_reg_apply_flags(wiphy);
- return 0;
-}
-
-static const struct ieee80211_regdomain *_rtw_regdomain_select(void)
-{
- return &rtw_regdom_rd;
-}
-
-static void _rtw_regd_init_wiphy(struct wiphy *wiphy,
- void (*reg_notifier)(struct wiphy *wiphy,
- struct
- regulatory_request *
- request))
-{
- const struct ieee80211_regdomain *regd;
-
- wiphy->reg_notifier = reg_notifier;
-
- wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG;
- wiphy->regulatory_flags &= ~REGULATORY_STRICT_REG;
- wiphy->regulatory_flags &= ~REGULATORY_DISABLE_BEACON_HINTS;
-
- regd = _rtw_regdomain_select();
- wiphy_apply_custom_regulatory(wiphy, regd);
-
- /* Hard code flags */
- _rtw_reg_apply_flags(wiphy);
-}
-
-void rtw_regd_init(struct wiphy *wiphy,
- void (*reg_notifier)(struct wiphy *wiphy,
- struct regulatory_request *request))
-{
- _rtw_regd_init_wiphy(wiphy, reg_notifier);
-}
-
-void rtw_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request)
-{
- _rtw_reg_notifier_apply(wiphy, request);
-}
diff --git a/drivers/staging/rtl8723bs/os_dep/xmit_linux.c b/drivers/staging/rtl8723bs/os_dep/xmit_linux.c
deleted file mode 100644
index 3b6029c20d50..000000000000
--- a/drivers/staging/rtl8723bs/os_dep/xmit_linux.c
+++ /dev/null
@@ -1,216 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- ******************************************************************************/
-#include <drv_types.h>
-
-
-unsigned int rtw_remainder_len(struct pkt_file *pfile)
-{
- return (pfile->buf_len - ((SIZE_PTR)(pfile->cur_addr) - (SIZE_PTR)(pfile->buf_start)));
-}
-
-void _rtw_open_pktfile(struct sk_buff *pktptr, struct pkt_file *pfile)
-{
- pfile->pkt = pktptr;
- pfile->buf_start = pktptr->data;
- pfile->cur_addr = pktptr->data;
- pfile->buf_len = pktptr->len;
- pfile->pkt_len = pktptr->len;
-
- pfile->cur_buffer = pfile->buf_start;
-}
-
-int _rtw_pktfile_read(struct pkt_file *pfile, u8 *rmem, unsigned int rlen)
-{
- int ret;
- unsigned int remain = rtw_remainder_len(pfile);
-
- /* clamp to bytes remaining; the coalesce loop relies on short reads */
- if (rlen > remain)
- rlen = remain;
-
- if (rmem) {
- ret = skb_copy_bits(pfile->pkt, pfile->buf_len - pfile->pkt_len, rmem, rlen);
- if (ret < 0)
- return ret;
- }
-
- pfile->cur_addr += rlen;
- pfile->pkt_len -= rlen;
- return rlen;
-}
-
-signed int rtw_endofpktfile(struct pkt_file *pfile)
-{
- if (pfile->pkt_len == 0)
- return true;
- return false;
-}
-
-void rtw_os_xmit_resource_free(struct adapter *padapter,
- struct xmit_buf *pxmitbuf,
- u32 free_sz, u8 flag)
-{
- if (free_sz > 0)
- kfree(pxmitbuf->pallocated_buf);
-}
-
-#define WMM_XMIT_THRESHOLD (NR_XMITFRAME * 2 / 5)
-
-void rtw_os_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_os_xmit_complete(struct adapter *padapter, struct xmit_frame *pxframe)
-{
- if (pxframe->pkt)
- rtw_os_pkt_complete(padapter, pxframe->pkt);
-
- pxframe->pkt = NULL;
-}
-
-void rtw_os_xmit_schedule(struct adapter *padapter)
-{
- struct adapter *pri_adapter = padapter;
-
- if (!padapter)
- return;
-
- if (!list_empty(&padapter->xmitpriv.pending_xmitbuf_queue.queue))
- complete(&pri_adapter->xmitpriv.xmit_comp);
-}
-
-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;
- u8 chk_alive_num = 0;
- char chk_alive_list[NUM_STA];
- u8 bc_addr[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
- u8 null_addr[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
- int i;
- s32 res;
-
- spin_lock_bh(&pstapriv->asoc_list_lock);
- phead = &pstapriv->asoc_list;
- /* free sta asoc_queue */
- list_for_each(plist, phead) {
- int stainfo_offset;
-
- psta = list_entry(plist, struct sta_info, asoc_list);
-
- stainfo_offset = rtw_stainfo_offset(pstapriv, psta);
- if (stainfo_offset_valid(stainfo_offset))
- chk_alive_list[chk_alive_num++] = stainfo_offset;
- }
- spin_unlock_bh(&pstapriv->asoc_list_lock);
-
- for (i = 0; i < chk_alive_num; i++) {
- psta = rtw_get_stainfo_by_offset(pstapriv, chk_alive_list[i]);
- if (!(psta->state & _FW_LINKED))
- continue;
-
- /* avoid come from STA1 and send back STA1 */
- if (!memcmp(psta->hwaddr, &skb->data[6], 6) ||
- !memcmp(psta->hwaddr, null_addr, 6) ||
- !memcmp(psta->hwaddr, bc_addr, 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_drop++;
- /* dev_kfree_skb_any(skb); */
- return false; /* Caller shall tx this multicast frame via normal way. */
- }
- }
-
- dev_kfree_skb_any(skb);
- return true;
-}
-
-void _rtw_xmit_entry(struct sk_buff *pkt, struct net_device *pnetdev)
-{
- struct adapter *padapter = 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) {
- if (pxmitpriv->free_xmitframe_cnt > (NR_XMITFRAME / 4)) {
- res = rtw_mlcst2unicst(padapter, pkt);
- if (res)
- return;
- }
- }
-
- res = rtw_xmit(padapter, &pkt);
- if (res < 0)
- goto drop_packet;
-
- return;
-
-drop_packet:
- pxmitpriv->tx_drop++;
- dev_kfree_skb_any(pkt);
-}
-
-netdev_tx_t rtw_xmit_entry(struct sk_buff *pkt, struct net_device *pnetdev)
-{
- if (pkt)
- _rtw_xmit_entry(pkt, pnetdev);
-
- return NETDEV_TX_OK;
-}
--
2.53.0
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-10-07 10:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-07 10:28 [PATCH] staging: rtl8723bs: remove the obsolete driver Luka Gejak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®