wifi: rtlwifi: Move code from rtl8192de to rtl8192d-common
authorBitterblue Smith <rtl8821cerfe2@gmail.com>
Thu, 25 Apr 2024 18:14:04 +0000 (21:14 +0300)
committerPing-Ke Shih <pkshih@realtek.com>
Thu, 2 May 2024 02:39:07 +0000 (10:39 +0800)
Create the new module rtl8192d-common and move some code into it from
rtl8192de. Now the rtl8192de driver (PCI) and the new rtl8192du driver
(USB) can share some of the code.

This is mostly the code that required little effort to make it
shareable. There are a few more functions which they could share, with
more changes.

Add phy_iq_calibrate member to struct rtl_hal_ops to allow moving the
TX power tracking code from dm.c.

The other changes in this patch are adjusting whitespace, renaming some
functions, making some arrays const, and making checkpatch.pl less
unhappy.

rtl8192de is compile-tested only. rtl8192d-common is tested with the
new rtl8192du driver.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://msgid.link/69c4358a-6fbf-4433-92a6-341c83e9dd48@gmail.com
37 files changed:
drivers/net/wireless/realtek/rtlwifi/Kconfig
drivers/net/wireless/realtek/rtlwifi/Makefile
drivers/net/wireless/realtek/rtlwifi/cam.c
drivers/net/wireless/realtek/rtlwifi/cam.h
drivers/net/wireless/realtek/rtlwifi/rtl8192d/Makefile [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/def.h [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/dm_common.c [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/dm_common.h [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.c [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.h [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.c [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.h [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/main.c [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.c [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.h [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/reg.h [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/rf_common.c [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/rf_common.h [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.c [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.h [new file with mode: 0644]
drivers/net/wireless/realtek/rtlwifi/rtl8192de/def.h [deleted file]
drivers/net/wireless/realtek/rtlwifi/rtl8192de/dm.c
drivers/net/wireless/realtek/rtlwifi/rtl8192de/dm.h
drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.h
drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.h
drivers/net/wireless/realtek/rtlwifi/rtl8192de/led.c
drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.c
drivers/net/wireless/realtek/rtlwifi/rtl8192de/phy.h
drivers/net/wireless/realtek/rtlwifi/rtl8192de/reg.h [deleted file]
drivers/net/wireless/realtek/rtlwifi/rtl8192de/rf.c
drivers/net/wireless/realtek/rtlwifi/rtl8192de/rf.h
drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h
drivers/net/wireless/realtek/rtlwifi/wifi.h

index 9f6a4e3..cfe63f7 100644 (file)
@@ -37,6 +37,7 @@ config RTL8192SE
 config RTL8192DE
        tristate "Realtek RTL8192DE/RTL8188DE PCIe Wireless Network Adapter"
        depends on PCI
+       select RTL8192D_COMMON
        select RTLWIFI
        select RTLWIFI_PCI
        help
@@ -142,6 +143,9 @@ config RTL8192C_COMMON
        depends on RTL8192CE || RTL8192CU
        default y
 
+config RTL8192D_COMMON
+       tristate
+
 config RTL8723_COMMON
        tristate
        depends on RTL8723AE || RTL8723BE
index 09c30e4..423981b 100644 (file)
@@ -23,6 +23,7 @@ obj-$(CONFIG_RTL8192C_COMMON) += rtl8192c/
 obj-$(CONFIG_RTL8192CE)                += rtl8192ce/
 obj-$(CONFIG_RTL8192CU)                += rtl8192cu/
 obj-$(CONFIG_RTL8192SE)                += rtl8192se/
+obj-$(CONFIG_RTL8192D_COMMON)  += rtl8192d/
 obj-$(CONFIG_RTL8192DE)                += rtl8192de/
 obj-$(CONFIG_RTL8723AE)                += rtl8723ae/
 obj-$(CONFIG_RTL8723BE)                += rtl8723be/
index 32970ea..f9d0d13 100644 (file)
@@ -18,7 +18,8 @@ void rtl_cam_reset_sec_info(struct ieee80211_hw *hw)
 }
 
 static void rtl_cam_program_entry(struct ieee80211_hw *hw, u32 entry_no,
-                          u8 *mac_addr, u8 *key_cont_128, u16 us_config)
+                                 const u8 *mac_addr, u8 *key_cont_128,
+                                 u16 us_config)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
@@ -94,7 +95,7 @@ static void rtl_cam_program_entry(struct ieee80211_hw *hw, u32 entry_no,
                "after set key, usconfig:%x\n", us_config);
 }
 
-u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, u8 *mac_addr,
+u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, const u8 *mac_addr,
                         u32 ul_key_id, u32 ul_entry_idx, u32 ul_enc_alg,
                         u32 ul_default_key, u8 *key_content)
 {
index 2461fa9..144807a 100644 (file)
@@ -14,9 +14,9 @@
 #define        CAM_CONFIG_NO_USEDK                             0
 
 void rtl_cam_reset_all_entry(struct ieee80211_hw *hw);
-u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, u8 *mac_addr,
-                               u32 ul_key_id, u32 ul_entry_idx, u32 ul_enc_alg,
-                               u32 ul_default_key, u8 *key_content);
+u8 rtl_cam_add_one_entry(struct ieee80211_hw *hw, const u8 *mac_addr,
+                        u32 ul_key_id, u32 ul_entry_idx, u32 ul_enc_alg,
+                        u32 ul_default_key, u8 *key_content);
 int rtl_cam_delete_one_entry(struct ieee80211_hw *hw, u8 *mac_addr,
                             u32 ul_key_id);
 void rtl_cam_mark_invalid(struct ieee80211_hw *hw, u8 uc_index);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/Makefile
new file mode 100644 (file)
index 0000000..beebdfa
--- /dev/null
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: GPL-2.0
+rtl8192d-common-objs :=                \
+               dm_common.o \
+               fw_common.o \
+               hw_common.o \
+               main.o \
+               phy_common.o \
+               rf_common.o \
+               trx_common.o
+
+obj-$(CONFIG_RTL8192D_COMMON) += rtl8192d-common.o
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/def.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/def.h
new file mode 100644 (file)
index 0000000..21726d9
--- /dev/null
@@ -0,0 +1,175 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#ifndef __RTL92D_DEF_H__
+#define __RTL92D_DEF_H__
+
+/* Min Spacing related settings. */
+#define        MAX_MSS_DENSITY_2T                              0x13
+#define        MAX_MSS_DENSITY_1T                              0x0A
+
+#define RF6052_MAX_TX_PWR                              0x3F
+#define RF6052_MAX_PATH                                        2
+
+#define        PHY_RSSI_SLID_WIN_MAX                           100
+#define        PHY_LINKQUALITY_SLID_WIN_MAX                    20
+#define        PHY_BEACON_RSSI_SLID_WIN_MAX                    10
+
+#define RT_AC_INT_MASKS                (IMR_VIDOK | IMR_VODOK | IMR_BEDOK|IMR_BKDOK)
+
+#define RX_SMOOTH_FACTOR                               20
+
+#define HAL_PRIME_CHNL_OFFSET_DONT_CARE                        0
+#define HAL_PRIME_CHNL_OFFSET_LOWER                    1
+#define HAL_PRIME_CHNL_OFFSET_UPPER                    2
+
+#define RX_MPDU_QUEUE                                  0
+#define RX_CMD_QUEUE                                   1
+
+enum version_8192d {
+       VERSION_TEST_CHIP_88C = 0x0000,
+       VERSION_TEST_CHIP_92C = 0x0020,
+       VERSION_TEST_UMC_CHIP_8723 = 0x0081,
+       VERSION_NORMAL_TSMC_CHIP_88C = 0x0008,
+       VERSION_NORMAL_TSMC_CHIP_92C = 0x0028,
+       VERSION_NORMAL_TSMC_CHIP_92C_1T2R = 0x0018,
+       VERSION_NORMAL_UMC_CHIP_88C_A_CUT = 0x0088,
+       VERSION_NORMAL_UMC_CHIP_92C_A_CUT = 0x00a8,
+       VERSION_NORMAL_UMC_CHIP_92C_1T2R_A_CUT = 0x0098,
+       VERSION_NORMAL_UMC_CHIP_8723_1T1R_A_CUT = 0x0089,
+       VERSION_NORMAL_UMC_CHIP_8723_1T1R_B_CUT = 0x1089,
+       VERSION_NORMAL_UMC_CHIP_88C_B_CUT = 0x1088,
+       VERSION_NORMAL_UMC_CHIP_92C_B_CUT = 0x10a8,
+       VERSION_NORMAL_UMC_CHIP_92C_1T2R_B_CUT = 0x1090,
+       VERSION_TEST_CHIP_92D_SINGLEPHY = 0x0022,
+       VERSION_TEST_CHIP_92D_DUALPHY = 0x0002,
+       VERSION_NORMAL_CHIP_92D_SINGLEPHY = 0x002a,
+       VERSION_NORMAL_CHIP_92D_DUALPHY = 0x000a,
+       VERSION_NORMAL_CHIP_92D_C_CUT_SINGLEPHY = 0x202a,
+       VERSION_NORMAL_CHIP_92D_C_CUT_DUALPHY = 0x200a,
+       VERSION_NORMAL_CHIP_92D_D_CUT_SINGLEPHY = 0x302a,
+       VERSION_NORMAL_CHIP_92D_D_CUT_DUALPHY = 0x300a,
+       VERSION_NORMAL_CHIP_92D_E_CUT_SINGLEPHY = 0x402a,
+       VERSION_NORMAL_CHIP_92D_E_CUT_DUALPHY = 0x400a,
+};
+
+/* for 92D */
+#define CHIP_92D_SINGLEPHY             BIT(9)
+
+/* Chip specific */
+#define CHIP_BONDING_IDENTIFIER(_value)        (((_value)>>22)&0x3)
+#define CHIP_BONDING_92C_1T2R                  0x1
+#define CHIP_BONDING_88C_USB_MCARD             0x2
+#define CHIP_BONDING_88C_USB_HP                        0x1
+
+/* [15:12] IC version(CUT): A-cut=0, B-cut=1, C-cut=2, D-cut=3 */
+/* [7] Manufacturer: TSMC=0, UMC=1 */
+/* [6:4] RF type: 1T1R=0, 1T2R=1, 2T2R=2 */
+/* [3] Chip type: TEST=0, NORMAL=1 */
+/* [2:0] IC type: 81xxC=0, 8723=1, 92D=2 */
+#define CHIP_8723                      BIT(0)
+#define CHIP_92D                       BIT(1)
+#define NORMAL_CHIP                    BIT(3)
+#define RF_TYPE_1T1R                   (~(BIT(4)|BIT(5)|BIT(6)))
+#define RF_TYPE_1T2R                   BIT(4)
+#define RF_TYPE_2T2R                   BIT(5)
+#define CHIP_VENDOR_UMC                        BIT(7)
+#define CHIP_92D_B_CUT                 BIT(12)
+#define CHIP_92D_C_CUT                 BIT(13)
+#define CHIP_92D_D_CUT                 (BIT(13)|BIT(12))
+#define CHIP_92D_E_CUT                 BIT(14)
+
+/* MASK */
+#define IC_TYPE_MASK                   (BIT(0)|BIT(1)|BIT(2))
+#define CHIP_TYPE_MASK                 BIT(3)
+#define RF_TYPE_MASK                   (BIT(4)|BIT(5)|BIT(6))
+#define MANUFACTUER_MASK               BIT(7)
+#define ROM_VERSION_MASK               (BIT(11)|BIT(10)|BIT(9)|BIT(8))
+#define CUT_VERSION_MASK               (BIT(15)|BIT(14)|BIT(13)|BIT(12))
+
+
+/* Get element */
+#define GET_CVID_IC_TYPE(version)      ((version) & IC_TYPE_MASK)
+#define GET_CVID_CHIP_TYPE(version)    ((version) & CHIP_TYPE_MASK)
+#define GET_CVID_RF_TYPE(version)      ((version) & RF_TYPE_MASK)
+#define GET_CVID_MANUFACTUER(version)  ((version) & MANUFACTUER_MASK)
+#define GET_CVID_ROM_VERSION(version)  ((version) & ROM_VERSION_MASK)
+#define GET_CVID_CUT_VERSION(version)  ((version) & CUT_VERSION_MASK)
+
+#define IS_1T1R(version)               ((GET_CVID_RF_TYPE(version)) ?  \
+                                        false : true)
+#define IS_1T2R(version)               ((GET_CVID_RF_TYPE(version) ==  \
+                                        RF_TYPE_1T2R) ? true : false)
+#define IS_2T2R(version)               ((GET_CVID_RF_TYPE(version) ==  \
+                                        RF_TYPE_2T2R) ? true : false)
+
+#define IS_92D_SINGLEPHY(version)      ((IS_92D(version)) ?            \
+                                (IS_2T2R(version) ? true : false) : false)
+#define IS_92D(version)                        ((GET_CVID_IC_TYPE(version) ==  \
+                                        CHIP_92D) ? true : false)
+#define IS_92D_C_CUT(version)          ((IS_92D(version)) ?            \
+                                ((GET_CVID_CUT_VERSION(version) ==     \
+                                CHIP_92D_C_CUT) ? true : false) : false)
+#define IS_92D_D_CUT(version)                  ((IS_92D(version)) ?    \
+                                ((GET_CVID_CUT_VERSION(version) ==     \
+                                CHIP_92D_D_CUT) ? true : false) : false)
+#define IS_92D_E_CUT(version)          ((IS_92D(version)) ?            \
+                                ((GET_CVID_CUT_VERSION(version) ==     \
+                                CHIP_92D_E_CUT) ? true : false) : false)
+
+enum rf_optype {
+       RF_OP_BY_SW_3WIRE = 0,
+       RF_OP_BY_FW,
+       RF_OP_MAX
+};
+
+enum rtl_desc_qsel {
+       QSLT_BK = 0x2,
+       QSLT_BE = 0x0,
+       QSLT_VI = 0x5,
+       QSLT_VO = 0x7,
+       QSLT_BEACON = 0x10,
+       QSLT_HIGH = 0x11,
+       QSLT_MGNT = 0x12,
+       QSLT_CMD = 0x13,
+};
+
+enum channel_plan {
+       CHPL_FCC        = 0,
+       CHPL_IC         = 1,
+       CHPL_ETSI       = 2,
+       CHPL_SPAIN      = 3,
+       CHPL_FRANCE     = 4,
+       CHPL_MKK        = 5,
+       CHPL_MKK1       = 6,
+       CHPL_ISRAEL     = 7,
+       CHPL_TELEC      = 8,
+       CHPL_GLOBAL     = 9,
+       CHPL_WORLD      = 10,
+};
+
+struct phy_sts_cck_8192d {
+       u8 adc_pwdb_X[4];
+       u8 sq_rpt;
+       u8 cck_agc_rpt;
+};
+
+struct h2c_cmd_8192c {
+       u8 element_id;
+       u32 cmd_len;
+       u8 *p_cmdbuffer;
+};
+
+struct txpower_info {
+       u8 cck_index[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
+       u8 ht40_1sindex[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
+       u8 ht40_2sindexdiff[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
+       u8 ht20indexdiff[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
+       u8 ofdmindexdiff[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
+       u8 ht40maxoffset[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
+       u8 ht20maxoffset[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
+       u8 tssi_a[3];           /* 5GL/5GM/5GH */
+       u8 tssi_b[3];
+};
+
+#endif
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/dm_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/dm_common.c
new file mode 100644 (file)
index 0000000..d376e45
--- /dev/null
@@ -0,0 +1,1079 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#include "../wifi.h"
+#include "../base.h"
+#include "../core.h"
+#include "reg.h"
+#include "def.h"
+#include "phy_common.h"
+#include "dm_common.h"
+
+#define UNDEC_SM_PWDB  entry_min_undec_sm_pwdb
+
+static const u32 ofdmswing_table[OFDM_TABLE_SIZE_92D] = {
+       0x7f8001fe,             /* 0, +6.0dB */
+       0x788001e2,             /* 1, +5.5dB */
+       0x71c001c7,             /* 2, +5.0dB */
+       0x6b8001ae,             /* 3, +4.5dB */
+       0x65400195,             /* 4, +4.0dB */
+       0x5fc0017f,             /* 5, +3.5dB */
+       0x5a400169,             /* 6, +3.0dB */
+       0x55400155,             /* 7, +2.5dB */
+       0x50800142,             /* 8, +2.0dB */
+       0x4c000130,             /* 9, +1.5dB */
+       0x47c0011f,             /* 10, +1.0dB */
+       0x43c0010f,             /* 11, +0.5dB */
+       0x40000100,             /* 12, +0dB */
+       0x3c8000f2,             /* 13, -0.5dB */
+       0x390000e4,             /* 14, -1.0dB */
+       0x35c000d7,             /* 15, -1.5dB */
+       0x32c000cb,             /* 16, -2.0dB */
+       0x300000c0,             /* 17, -2.5dB */
+       0x2d4000b5,             /* 18, -3.0dB */
+       0x2ac000ab,             /* 19, -3.5dB */
+       0x288000a2,             /* 20, -4.0dB */
+       0x26000098,             /* 21, -4.5dB */
+       0x24000090,             /* 22, -5.0dB */
+       0x22000088,             /* 23, -5.5dB */
+       0x20000080,             /* 24, -6.0dB */
+       0x1e400079,             /* 25, -6.5dB */
+       0x1c800072,             /* 26, -7.0dB */
+       0x1b00006c,             /* 27. -7.5dB */
+       0x19800066,             /* 28, -8.0dB */
+       0x18000060,             /* 29, -8.5dB */
+       0x16c0005b,             /* 30, -9.0dB */
+       0x15800056,             /* 31, -9.5dB */
+       0x14400051,             /* 32, -10.0dB */
+       0x1300004c,             /* 33, -10.5dB */
+       0x12000048,             /* 34, -11.0dB */
+       0x11000044,             /* 35, -11.5dB */
+       0x10000040,             /* 36, -12.0dB */
+       0x0f00003c,             /* 37, -12.5dB */
+       0x0e400039,             /* 38, -13.0dB */
+       0x0d800036,             /* 39, -13.5dB */
+       0x0cc00033,             /* 40, -14.0dB */
+       0x0c000030,             /* 41, -14.5dB */
+       0x0b40002d,             /* 42, -15.0dB */
+};
+
+static const u8 cckswing_table_ch1ch13[CCK_TABLE_SIZE][8] = {
+       {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04},    /* 0, +0dB */
+       {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},    /* 1, -0.5dB */
+       {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},    /* 2, -1.0dB */
+       {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},    /* 3, -1.5dB */
+       {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},    /* 4, -2.0dB */
+       {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},    /* 5, -2.5dB */
+       {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},    /* 6, -3.0dB */
+       {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},    /* 7, -3.5dB */
+       {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},    /* 8, -4.0dB */
+       {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},    /* 9, -4.5dB */
+       {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},    /* 10, -5.0dB */
+       {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},    /* 11, -5.5dB */
+       {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},    /* 12, -6.0dB */
+       {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},    /* 13, -6.5dB */
+       {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},    /* 14, -7.0dB */
+       {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},    /* 15, -7.5dB */
+       {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},    /* 16, -8.0dB */
+       {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},    /* 17, -8.5dB */
+       {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},    /* 18, -9.0dB */
+       {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},    /* 19, -9.5dB */
+       {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},    /* 20, -10.0dB */
+       {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},    /* 21, -10.5dB */
+       {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},    /* 22, -11.0dB */
+       {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},    /* 23, -11.5dB */
+       {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},    /* 24, -12.0dB */
+       {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},    /* 25, -12.5dB */
+       {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},    /* 26, -13.0dB */
+       {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},    /* 27, -13.5dB */
+       {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},    /* 28, -14.0dB */
+       {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},    /* 29, -14.5dB */
+       {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},    /* 30, -15.0dB */
+       {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},    /* 31, -15.5dB */
+       {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}     /* 32, -16.0dB */
+};
+
+static const u8 cckswing_table_ch14[CCK_TABLE_SIZE][8] = {
+       {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00},    /* 0, +0dB */
+       {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},    /* 1, -0.5dB */
+       {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},    /* 2, -1.0dB */
+       {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},    /* 3, -1.5dB */
+       {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},    /* 4, -2.0dB */
+       {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},    /* 5, -2.5dB */
+       {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},    /* 6, -3.0dB */
+       {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},    /* 7, -3.5dB */
+       {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},    /* 8, -4.0dB */
+       {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},    /* 9, -4.5dB */
+       {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},    /* 10, -5.0dB */
+       {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},    /* 11, -5.5dB */
+       {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},    /* 12, -6.0dB */
+       {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},    /* 13, -6.5dB */
+       {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},    /* 14, -7.0dB */
+       {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},    /* 15, -7.5dB */
+       {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},    /* 16, -8.0dB */
+       {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},    /* 17, -8.5dB */
+       {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},    /* 18, -9.0dB */
+       {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},    /* 19, -9.5dB */
+       {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},    /* 20, -10.0dB */
+       {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},    /* 21, -10.5dB */
+       {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},    /* 22, -11.0dB */
+       {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},    /* 23, -11.5dB */
+       {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},    /* 24, -12.0dB */
+       {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},    /* 25, -12.5dB */
+       {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},    /* 26, -13.0dB */
+       {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},    /* 27, -13.5dB */
+       {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},    /* 28, -14.0dB */
+       {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},    /* 29, -14.5dB */
+       {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},    /* 30, -15.0dB */
+       {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},    /* 31, -15.5dB */
+       {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}     /* 32, -16.0dB */
+};
+
+static void rtl92d_dm_rxgain_tracking_thermalmeter(struct ieee80211_hw *hw)
+{
+       static const u8 index_mapping[RX_INDEX_MAPPING_NUM] = {
+               0x0f, 0x0f, 0x0d, 0x0c, 0x0b,
+               0x0a, 0x09, 0x08, 0x07, 0x06,
+               0x05, 0x04, 0x04, 0x03, 0x02
+       };
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u32 u4tmp;
+       int i;
+
+       u4tmp = (index_mapping[(rtlpriv->efuse.eeprom_thermalmeter -
+                               rtlpriv->dm.thermalvalue_rxgain)]) << 12;
+       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+               "===> Rx Gain %x\n", u4tmp);
+       for (i = RF90_PATH_A; i < rtlpriv->phy.num_total_rfpath; i++)
+               rtl_set_rfreg(hw, i, 0x3C, RFREG_OFFSET_MASK,
+                             (rtlpriv->phy.reg_rf3c[i] & (~(0xF000))) | u4tmp);
+}
+
+static void rtl92d_bandtype_2_4G(struct ieee80211_hw *hw, long *temp_cckg,
+                                u8 *cck_index_old)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       unsigned long flag = 0;
+       const u8 *cckswing;
+       long temp_cck;
+       int i;
+
+       /* Query CCK default setting From 0xa24 */
+       rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
+       temp_cck = rtl_get_bbreg(hw, RCCK0_TXFILTER2,
+                                MASKDWORD) & MASKCCK;
+       rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
+       for (i = 0; i < CCK_TABLE_LENGTH; i++) {
+               if (rtlpriv->dm.cck_inch14)
+                       cckswing = &cckswing_table_ch14[i][2];
+               else
+                       cckswing = &cckswing_table_ch1ch13[i][2];
+
+               if (temp_cck == le32_to_cpu(*((__le32 *)cckswing))) {
+                       *cck_index_old = (u8)i;
+                       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+                               "Initial reg0x%x = 0x%lx, cck_index = 0x%x, ch14 %d\n",
+                               RCCK0_TXFILTER2, temp_cck,
+                               *cck_index_old,
+                               rtlpriv->dm.cck_inch14);
+                       break;
+               }
+       }
+       *temp_cckg = temp_cck;
+}
+
+static void rtl92d_bandtype_5G(struct rtl_hal *rtlhal, u8 *ofdm_index,
+                              bool *internal_pa, u8 thermalvalue, u8 delta,
+                              u8 rf, struct rtl_efuse *rtlefuse,
+                              struct rtl_priv *rtlpriv, struct rtl_phy *rtlphy,
+                              const u8 index_mapping[5][INDEX_MAPPING_NUM],
+                              const u8 index_mapping_pa[8][INDEX_MAPPING_NUM])
+{
+       u8 offset = 0;
+       u8 index;
+       int i;
+
+       for (i = 0; i < rf; i++) {
+               if (rtlhal->macphymode == DUALMAC_DUALPHY &&
+                   rtlhal->interfaceindex == 1) /* MAC 1 5G */
+                       *internal_pa = rtlefuse->internal_pa_5g[1];
+               else
+                       *internal_pa = rtlefuse->internal_pa_5g[i];
+               if (*internal_pa) {
+                       if (rtlhal->interfaceindex == 1 || i == rf)
+                               offset = 4;
+                       else
+                               offset = 0;
+                       if (rtlphy->current_channel >= 100 &&
+                           rtlphy->current_channel <= 165)
+                               offset += 2;
+               } else {
+                       if (rtlhal->interfaceindex == 1 || i == rf)
+                               offset = 2;
+                       else
+                               offset = 0;
+               }
+               if (thermalvalue > rtlefuse->eeprom_thermalmeter)
+                       offset++;
+               if (*internal_pa) {
+                       if (delta > INDEX_MAPPING_NUM - 1)
+                               index = index_mapping_pa[offset]
+                                                   [INDEX_MAPPING_NUM - 1];
+                       else
+                               index =
+                                    index_mapping_pa[offset][delta];
+               } else {
+                       if (delta > INDEX_MAPPING_NUM - 1)
+                               index =
+                                  index_mapping[offset][INDEX_MAPPING_NUM - 1];
+                       else
+                               index = index_mapping[offset][delta];
+               }
+               if (thermalvalue > rtlefuse->eeprom_thermalmeter) {
+                       if (*internal_pa && thermalvalue > 0x12) {
+                               ofdm_index[i] = rtlpriv->dm.ofdm_index[i] -
+                                               ((delta / 2) * 3 + (delta % 2));
+                       } else {
+                               ofdm_index[i] -= index;
+                       }
+               } else {
+                       ofdm_index[i] += index;
+               }
+       }
+}
+
+static void
+rtl92d_dm_txpower_tracking_callback_thermalmeter(struct ieee80211_hw *hw)
+{
+       static const u8 index_mapping[5][INDEX_MAPPING_NUM] = {
+               /* 5G, path A/MAC 0, decrease power  */
+               {0, 1, 3, 6, 8, 9,      11, 13, 14, 16, 17, 18, 18},
+               /* 5G, path A/MAC 0, increase power  */
+               {0, 2, 4, 5, 7, 10,     12, 14, 16, 18, 18, 18, 18},
+               /* 5G, path B/MAC 1, decrease power */
+               {0, 2, 3, 6, 8, 9,      11, 13, 14, 16, 17, 18, 18},
+               /* 5G, path B/MAC 1, increase power */
+               {0, 2, 4, 5, 7, 10,     13, 16, 16, 18, 18, 18, 18},
+               /* 2.4G, for decreas power */
+               {0, 1, 2, 3, 4, 5,      6, 7, 7, 8, 9, 10, 10},
+       };
+       static const u8 index_mapping_internal_pa[8][INDEX_MAPPING_NUM] = {
+               /* 5G, path A/MAC 0, ch36-64, decrease power  */
+               {0, 1, 2, 4, 6, 7,      9, 11, 12, 14, 15, 16, 16},
+               /* 5G, path A/MAC 0, ch36-64, increase power  */
+               {0, 2, 4, 5, 7, 10,     12, 14, 16, 18, 18, 18, 18},
+               /* 5G, path A/MAC 0, ch100-165, decrease power  */
+               {0, 1, 2, 3, 5, 6,      8, 10, 11, 13, 14, 15, 15},
+               /* 5G, path A/MAC 0, ch100-165, increase power  */
+               {0, 2, 4, 5, 7, 10,     12, 14, 16, 18, 18, 18, 18},
+               /* 5G, path B/MAC 1, ch36-64, decrease power */
+               {0, 1, 2, 4, 6, 7,      9, 11, 12, 14, 15, 16, 16},
+               /* 5G, path B/MAC 1, ch36-64, increase power */
+               {0, 2, 4, 5, 7, 10,     13, 16, 16, 18, 18, 18, 18},
+               /* 5G, path B/MAC 1, ch100-165, decrease power */
+               {0, 1, 2, 3, 5, 6,      8, 9, 10, 12, 13, 14, 14},
+               /* 5G, path B/MAC 1, ch100-165, increase power */
+               {0, 2, 4, 5, 7, 10,     13, 16, 16, 18, 18, 18, 18},
+       };
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtlpriv);
+       struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       u8 thermalvalue, delta, delta_lck, delta_iqk, delta_rxgain;
+       u8 offset, thermalvalue_avg_count = 0;
+       u32 thermalvalue_avg = 0;
+       bool internal_pa = false;
+       long ele_a = 0, ele_d, temp_cck, val_x, value32;
+       long val_y, ele_c = 0;
+       u8 ofdm_index[2];
+       s8 cck_index = 0;
+       u8 ofdm_index_old[2] = {0, 0};
+       s8 cck_index_old = 0;
+       u8 index;
+       int i;
+       bool is2t = IS_92D_SINGLEPHY(rtlhal->version);
+       u8 ofdm_min_index = 6, ofdm_min_index_internal_pa = 3, rf;
+       u8 indexforchannel =
+           rtl92d_get_rightchnlplace_for_iqk(rtlphy->current_channel);
+
+       rtlpriv->dm.txpower_trackinginit = true;
+       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, "\n");
+       thermalvalue = (u8)rtl_get_rfreg(hw, RF90_PATH_A, RF_T_METER, 0xf800);
+       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+               "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x\n",
+               thermalvalue,
+               rtlpriv->dm.thermalvalue, rtlefuse->eeprom_thermalmeter);
+
+       if (!thermalvalue)
+               goto exit;
+
+       if (is2t)
+               rf = 2;
+       else
+               rf = 1;
+
+       if (rtlpriv->dm.thermalvalue && !rtlhal->reloadtxpowerindex)
+               goto old_index_done;
+
+       ele_d = rtl_get_bbreg(hw, ROFDM0_XATXIQIMBALANCE,  MASKDWORD) & MASKOFDM_D;
+       for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) {
+               if (ele_d == (ofdmswing_table[i] & MASKOFDM_D)) {
+                       ofdm_index_old[0] = (u8)i;
+
+                       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+                               "Initial pathA ele_d reg0x%x = 0x%lx, ofdm_index=0x%x\n",
+                               ROFDM0_XATXIQIMBALANCE,
+                               ele_d, ofdm_index_old[0]);
+                       break;
+               }
+       }
+       if (is2t) {
+               ele_d = rtl_get_bbreg(hw, ROFDM0_XBTXIQIMBALANCE,
+                                     MASKDWORD) & MASKOFDM_D;
+               for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) {
+                       if (ele_d ==
+                           (ofdmswing_table[i] & MASKOFDM_D)) {
+                               ofdm_index_old[1] = (u8)i;
+                               rtl_dbg(rtlpriv, COMP_POWER_TRACKING,
+                                       DBG_LOUD,
+                                       "Initial pathB ele_d reg 0x%x = 0x%lx, ofdm_index = 0x%x\n",
+                                       ROFDM0_XBTXIQIMBALANCE, ele_d,
+                                       ofdm_index_old[1]);
+                               break;
+                       }
+               }
+       }
+       if (rtlhal->current_bandtype == BAND_ON_2_4G) {
+               rtl92d_bandtype_2_4G(hw, &temp_cck, &cck_index_old);
+       } else {
+               temp_cck = 0x090e1317;
+               cck_index_old = 12;
+       }
+
+       if (!rtlpriv->dm.thermalvalue) {
+               rtlpriv->dm.thermalvalue = rtlefuse->eeprom_thermalmeter;
+               rtlpriv->dm.thermalvalue_lck = thermalvalue;
+               rtlpriv->dm.thermalvalue_iqk = thermalvalue;
+               rtlpriv->dm.thermalvalue_rxgain = rtlefuse->eeprom_thermalmeter;
+               for (i = 0; i < rf; i++)
+                       rtlpriv->dm.ofdm_index[i] = ofdm_index_old[i];
+               rtlpriv->dm.cck_index = cck_index_old;
+       }
+       if (rtlhal->reloadtxpowerindex) {
+               for (i = 0; i < rf; i++)
+                       rtlpriv->dm.ofdm_index[i] = ofdm_index_old[i];
+               rtlpriv->dm.cck_index = cck_index_old;
+               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+                       "reload ofdm index for band switch\n");
+       }
+old_index_done:
+       for (i = 0; i < rf; i++)
+               ofdm_index[i] = rtlpriv->dm.ofdm_index[i];
+
+       rtlpriv->dm.thermalvalue_avg
+                   [rtlpriv->dm.thermalvalue_avg_index] = thermalvalue;
+       rtlpriv->dm.thermalvalue_avg_index++;
+       if (rtlpriv->dm.thermalvalue_avg_index == AVG_THERMAL_NUM)
+               rtlpriv->dm.thermalvalue_avg_index = 0;
+       for (i = 0; i < AVG_THERMAL_NUM; i++) {
+               if (rtlpriv->dm.thermalvalue_avg[i]) {
+                       thermalvalue_avg += rtlpriv->dm.thermalvalue_avg[i];
+                       thermalvalue_avg_count++;
+               }
+       }
+       if (thermalvalue_avg_count)
+               thermalvalue = (u8)(thermalvalue_avg / thermalvalue_avg_count);
+       if (rtlhal->reloadtxpowerindex) {
+               delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ?
+                   (thermalvalue - rtlefuse->eeprom_thermalmeter) :
+                   (rtlefuse->eeprom_thermalmeter - thermalvalue);
+               rtlhal->reloadtxpowerindex = false;
+               rtlpriv->dm.done_txpower = false;
+       } else if (rtlpriv->dm.done_txpower) {
+               delta = (thermalvalue > rtlpriv->dm.thermalvalue) ?
+                   (thermalvalue - rtlpriv->dm.thermalvalue) :
+                   (rtlpriv->dm.thermalvalue - thermalvalue);
+       } else {
+               delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ?
+                   (thermalvalue - rtlefuse->eeprom_thermalmeter) :
+                   (rtlefuse->eeprom_thermalmeter - thermalvalue);
+       }
+       delta_lck = (thermalvalue > rtlpriv->dm.thermalvalue_lck) ?
+           (thermalvalue - rtlpriv->dm.thermalvalue_lck) :
+           (rtlpriv->dm.thermalvalue_lck - thermalvalue);
+       delta_iqk = (thermalvalue > rtlpriv->dm.thermalvalue_iqk) ?
+           (thermalvalue - rtlpriv->dm.thermalvalue_iqk) :
+           (rtlpriv->dm.thermalvalue_iqk - thermalvalue);
+       delta_rxgain =
+               (thermalvalue > rtlpriv->dm.thermalvalue_rxgain) ?
+               (thermalvalue - rtlpriv->dm.thermalvalue_rxgain) :
+               (rtlpriv->dm.thermalvalue_rxgain - thermalvalue);
+       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+               "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x delta 0x%x delta_lck 0x%x delta_iqk 0x%x\n",
+               thermalvalue, rtlpriv->dm.thermalvalue,
+               rtlefuse->eeprom_thermalmeter, delta, delta_lck,
+               delta_iqk);
+       if (delta_lck > rtlefuse->delta_lck && rtlefuse->delta_lck != 0) {
+               rtlpriv->dm.thermalvalue_lck = thermalvalue;
+               rtlpriv->cfg->ops->phy_lc_calibrate(hw, is2t);
+       }
+
+       if (delta == 0 || !rtlpriv->dm.txpower_track_control)
+               goto check_delta;
+
+       rtlpriv->dm.done_txpower = true;
+       delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ?
+           (thermalvalue - rtlefuse->eeprom_thermalmeter) :
+           (rtlefuse->eeprom_thermalmeter - thermalvalue);
+       if (rtlhal->current_bandtype == BAND_ON_2_4G) {
+               offset = 4;
+               if (delta > INDEX_MAPPING_NUM - 1)
+                       index = index_mapping[offset][INDEX_MAPPING_NUM - 1];
+               else
+                       index = index_mapping[offset][delta];
+               if (thermalvalue > rtlpriv->dm.thermalvalue) {
+                       for (i = 0; i < rf; i++)
+                               ofdm_index[i] -= delta;
+                       cck_index -= delta;
+               } else {
+                       for (i = 0; i < rf; i++)
+                               ofdm_index[i] += index;
+                       cck_index += index;
+               }
+       } else if (rtlhal->current_bandtype == BAND_ON_5G) {
+               rtl92d_bandtype_5G(rtlhal, ofdm_index,
+                                  &internal_pa, thermalvalue,
+                                  delta, rf, rtlefuse, rtlpriv,
+                                  rtlphy, index_mapping,
+                                  index_mapping_internal_pa);
+       }
+       if (is2t) {
+               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+                       "temp OFDM_A_index=0x%x, OFDM_B_index = 0x%x,cck_index=0x%x\n",
+                       rtlpriv->dm.ofdm_index[0],
+                       rtlpriv->dm.ofdm_index[1],
+                       rtlpriv->dm.cck_index);
+       } else {
+               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+                       "temp OFDM_A_index=0x%x,cck_index = 0x%x\n",
+                       rtlpriv->dm.ofdm_index[0],
+                       rtlpriv->dm.cck_index);
+       }
+       for (i = 0; i < rf; i++) {
+               if (ofdm_index[i] > OFDM_TABLE_SIZE_92D - 1) {
+                       ofdm_index[i] = OFDM_TABLE_SIZE_92D - 1;
+               } else if (internal_pa ||
+                          rtlhal->current_bandtype == BAND_ON_2_4G) {
+                       if (ofdm_index[i] < ofdm_min_index_internal_pa)
+                               ofdm_index[i] = ofdm_min_index_internal_pa;
+               } else if (ofdm_index[i] < ofdm_min_index) {
+                       ofdm_index[i] = ofdm_min_index;
+               }
+       }
+       if (rtlhal->current_bandtype == BAND_ON_2_4G) {
+               if (cck_index > CCK_TABLE_SIZE - 1)
+                       cck_index = CCK_TABLE_SIZE - 1;
+               else if (cck_index < 0)
+                       cck_index = 0;
+       }
+       if (is2t) {
+               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+                       "new OFDM_A_index=0x%x, OFDM_B_index = 0x%x, cck_index=0x%x\n",
+                       ofdm_index[0], ofdm_index[1],
+                       cck_index);
+       } else {
+               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+                       "new OFDM_A_index=0x%x,cck_index = 0x%x\n",
+                       ofdm_index[0], cck_index);
+       }
+       ele_d = (ofdmswing_table[ofdm_index[0]] & 0xFFC00000) >> 22;
+       val_x = rtlphy->iqk_matrix[indexforchannel].value[0][0];
+       val_y = rtlphy->iqk_matrix[indexforchannel].value[0][1];
+       if (val_x != 0) {
+               if ((val_x & 0x00000200) != 0)
+                       val_x = val_x | 0xFFFFFC00;
+               ele_a = ((val_x * ele_d) >> 8) & 0x000003FF;
+
+               /* new element C = element D x Y */
+               if ((val_y & 0x00000200) != 0)
+                       val_y = val_y | 0xFFFFFC00;
+               ele_c = ((val_y * ele_d) >> 8) & 0x000003FF;
+
+               /* 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;
+               rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE,
+                             MASKDWORD, value32);
+
+               value32 = (ele_c & 0x000003C0) >> 6;
+               rtl_set_bbreg(hw, ROFDM0_XCTXAFE, MASKH4BITS,
+                             value32);
+
+               value32 = ((val_x * ele_d) >> 7) & 0x01;
+               rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(24),
+                             value32);
+
+       } else {
+               rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE,
+                             MASKDWORD,
+                             ofdmswing_table[(u8)ofdm_index[0]]);
+               rtl_set_bbreg(hw, ROFDM0_XCTXAFE, MASKH4BITS,
+                             0x00);
+               rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
+                             BIT(24), 0x00);
+       }
+
+       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+               "TxPwrTracking for interface %d path A: X = 0x%lx, Y = 0x%lx ele_A = 0x%lx ele_C = 0x%lx ele_D = 0x%lx 0xe94 = 0x%lx 0xe9c = 0x%lx\n",
+               rtlhal->interfaceindex,
+               val_x, val_y, ele_a, ele_c, ele_d,
+               val_x, val_y);
+
+       if (cck_index >= CCK_TABLE_SIZE)
+               cck_index = CCK_TABLE_SIZE - 1;
+       if (cck_index < 0)
+               cck_index = 0;
+       if (rtlhal->current_bandtype == BAND_ON_2_4G) {
+               /* Adjust CCK according to IQK result */
+               if (!rtlpriv->dm.cck_inch14) {
+                       rtl_write_byte(rtlpriv, 0xa22,
+                                      cckswing_table_ch1ch13[cck_index][0]);
+                       rtl_write_byte(rtlpriv, 0xa23,
+                                      cckswing_table_ch1ch13[cck_index][1]);
+                       rtl_write_byte(rtlpriv, 0xa24,
+                                      cckswing_table_ch1ch13[cck_index][2]);
+                       rtl_write_byte(rtlpriv, 0xa25,
+                                      cckswing_table_ch1ch13[cck_index][3]);
+                       rtl_write_byte(rtlpriv, 0xa26,
+                                      cckswing_table_ch1ch13[cck_index][4]);
+                       rtl_write_byte(rtlpriv, 0xa27,
+                                      cckswing_table_ch1ch13[cck_index][5]);
+                       rtl_write_byte(rtlpriv, 0xa28,
+                                      cckswing_table_ch1ch13[cck_index][6]);
+                       rtl_write_byte(rtlpriv, 0xa29,
+                                      cckswing_table_ch1ch13[cck_index][7]);
+               } else {
+                       rtl_write_byte(rtlpriv, 0xa22,
+                                      cckswing_table_ch14[cck_index][0]);
+                       rtl_write_byte(rtlpriv, 0xa23,
+                                      cckswing_table_ch14[cck_index][1]);
+                       rtl_write_byte(rtlpriv, 0xa24,
+                                      cckswing_table_ch14[cck_index][2]);
+                       rtl_write_byte(rtlpriv, 0xa25,
+                                      cckswing_table_ch14[cck_index][3]);
+                       rtl_write_byte(rtlpriv, 0xa26,
+                                      cckswing_table_ch14[cck_index][4]);
+                       rtl_write_byte(rtlpriv, 0xa27,
+                                      cckswing_table_ch14[cck_index][5]);
+                       rtl_write_byte(rtlpriv, 0xa28,
+                                      cckswing_table_ch14[cck_index][6]);
+                       rtl_write_byte(rtlpriv, 0xa29,
+                                      cckswing_table_ch14[cck_index][7]);
+               }
+       }
+       if (is2t) {
+               ele_d = (ofdmswing_table[ofdm_index[1]] & 0xFFC00000) >> 22;
+               val_x = rtlphy->iqk_matrix[indexforchannel].value[0][4];
+               val_y = rtlphy->iqk_matrix[indexforchannel].value[0][5];
+               if (val_x != 0) {
+                       if ((val_x & 0x00000200) != 0)
+                               /* consider minus */
+                               val_x = val_x | 0xFFFFFC00;
+                       ele_a = ((val_x * ele_d) >> 8) & 0x000003FF;
+                       /* new element C = element D x Y */
+                       if ((val_y & 0x00000200) != 0)
+                               val_y = val_y | 0xFFFFFC00;
+                       ele_c = ((val_y * ele_d) >> 8) & 0x00003FF;
+                       /* 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;
+                       rtl_set_bbreg(hw,
+                                     ROFDM0_XBTXIQIMBALANCE,
+                                     MASKDWORD, value32);
+                       value32 = (ele_c & 0x000003C0) >> 6;
+                       rtl_set_bbreg(hw, ROFDM0_XDTXAFE,
+                                     MASKH4BITS, value32);
+                       value32 = ((val_x * ele_d) >> 7) & 0x01;
+                       rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
+                                     BIT(28), value32);
+               } else {
+                       rtl_set_bbreg(hw,
+                                     ROFDM0_XBTXIQIMBALANCE,
+                                     MASKDWORD,
+                                     ofdmswing_table[ofdm_index[1]]);
+                       rtl_set_bbreg(hw, ROFDM0_XDTXAFE,
+                                     MASKH4BITS, 0x00);
+                       rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
+                                     BIT(28), 0x00);
+               }
+               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+                       "TxPwrTracking path B: X = 0x%lx, Y = 0x%lx ele_A = 0x%lx ele_C = 0x%lx ele_D = 0x%lx 0xeb4 = 0x%lx 0xebc = 0x%lx\n",
+                       val_x, val_y, ele_a, ele_c,
+                       ele_d, val_x, val_y);
+       }
+       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+               "TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n",
+               rtl_get_bbreg(hw, 0xc80, MASKDWORD),
+               rtl_get_bbreg(hw, 0xc94, MASKDWORD),
+               rtl_get_rfreg(hw, RF90_PATH_A, 0x24,
+                             RFREG_OFFSET_MASK));
+
+check_delta:
+       if (delta_iqk > rtlefuse->delta_iqk && rtlefuse->delta_iqk != 0) {
+               rtl92d_phy_reset_iqk_result(hw);
+               rtlpriv->dm.thermalvalue_iqk = thermalvalue;
+               rtlpriv->cfg->ops->phy_iq_calibrate(hw);
+       }
+       if (delta_rxgain > 0 && rtlhal->current_bandtype == BAND_ON_5G &&
+           thermalvalue <= rtlefuse->eeprom_thermalmeter) {
+               rtlpriv->dm.thermalvalue_rxgain = thermalvalue;
+               rtl92d_dm_rxgain_tracking_thermalmeter(hw);
+       }
+       if (rtlpriv->dm.txpower_track_control)
+               rtlpriv->dm.thermalvalue = thermalvalue;
+
+exit:
+       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, "<===\n");
+}
+
+void rtl92d_dm_initialize_txpower_tracking(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+
+       rtlpriv->dm.txpower_tracking = true;
+       rtlpriv->dm.txpower_trackinginit = false;
+       rtlpriv->dm.txpower_track_control = true;
+       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+               "pMgntInfo->txpower_tracking = %d\n",
+               rtlpriv->dm.txpower_tracking);
+}
+EXPORT_SYMBOL_GPL(rtl92d_dm_initialize_txpower_tracking);
+
+void rtl92d_dm_check_txpower_tracking_thermal_meter(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+
+       if (!rtlpriv->dm.txpower_tracking)
+               return;
+
+       if (!rtlpriv->dm.tm_trigger) {
+               rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, BIT(17) |
+                             BIT(16), 0x03);
+               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+                       "Trigger 92S Thermal Meter!!\n");
+               rtlpriv->dm.tm_trigger = 1;
+       } else {
+               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
+                       "Schedule TxPowerTracking direct call!!\n");
+               rtl92d_dm_txpower_tracking_callback_thermalmeter(hw);
+               rtlpriv->dm.tm_trigger = 0;
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_dm_check_txpower_tracking_thermal_meter);
+
+void rtl92d_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw)
+{
+       u32 ret_value;
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct false_alarm_statistics *falsealm_cnt = &rtlpriv->falsealm_cnt;
+       unsigned long flag = 0;
+
+       /* hold ofdm counter */
+       rtl_set_bbreg(hw, ROFDM0_LSTF, BIT(31), 1); /* hold page C counter */
+       rtl_set_bbreg(hw, ROFDM1_LSTF, BIT(31), 1); /*hold page D counter */
+
+       ret_value = rtl_get_bbreg(hw, ROFDM0_FRAMESYNC, MASKDWORD);
+       falsealm_cnt->cnt_fast_fsync_fail = (ret_value & 0xffff);
+       falsealm_cnt->cnt_sb_search_fail = ((ret_value & 0xffff0000) >> 16);
+       ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER1, MASKDWORD);
+       falsealm_cnt->cnt_parity_fail = ((ret_value & 0xffff0000) >> 16);
+       ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER2, MASKDWORD);
+       falsealm_cnt->cnt_rate_illegal = (ret_value & 0xffff);
+       falsealm_cnt->cnt_crc8_fail = ((ret_value & 0xffff0000) >> 16);
+       ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER3, MASKDWORD);
+       falsealm_cnt->cnt_mcs_fail = (ret_value & 0xffff);
+       falsealm_cnt->cnt_ofdm_fail = falsealm_cnt->cnt_parity_fail +
+                                     falsealm_cnt->cnt_rate_illegal +
+                                     falsealm_cnt->cnt_crc8_fail +
+                                     falsealm_cnt->cnt_mcs_fail +
+                                     falsealm_cnt->cnt_fast_fsync_fail +
+                                     falsealm_cnt->cnt_sb_search_fail;
+
+       if (rtlpriv->rtlhal.current_bandtype != BAND_ON_5G) {
+               /* hold cck counter */
+               rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
+               ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERLOWER, MASKBYTE0);
+               falsealm_cnt->cnt_cck_fail = ret_value;
+               ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERUPPER, MASKBYTE3);
+               falsealm_cnt->cnt_cck_fail += (ret_value & 0xff) << 8;
+               rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
+       } else {
+               falsealm_cnt->cnt_cck_fail = 0;
+       }
+
+       /* reset false alarm counter registers */
+       falsealm_cnt->cnt_all = falsealm_cnt->cnt_fast_fsync_fail +
+                               falsealm_cnt->cnt_sb_search_fail +
+                               falsealm_cnt->cnt_parity_fail +
+                               falsealm_cnt->cnt_rate_illegal +
+                               falsealm_cnt->cnt_crc8_fail +
+                               falsealm_cnt->cnt_mcs_fail +
+                               falsealm_cnt->cnt_cck_fail;
+
+       rtl_set_bbreg(hw, ROFDM1_LSTF, 0x08000000, 1);
+       /* update ofdm counter */
+       rtl_set_bbreg(hw, ROFDM1_LSTF, 0x08000000, 0);
+       /* update page C counter */
+       rtl_set_bbreg(hw, ROFDM0_LSTF, BIT(31), 0);
+       /* update page D counter */
+       rtl_set_bbreg(hw, ROFDM1_LSTF, BIT(31), 0);
+       if (rtlpriv->rtlhal.current_bandtype != BAND_ON_5G) {
+               /* reset cck counter */
+               rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
+               rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, 0x0000c000, 0);
+               /* enable cck counter */
+               rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, 0x0000c000, 2);
+               rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
+       }
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
+               "Cnt_Fast_Fsync_fail = %x, Cnt_SB_Search_fail = %x\n",
+               falsealm_cnt->cnt_fast_fsync_fail,
+               falsealm_cnt->cnt_sb_search_fail);
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
+               "Cnt_Parity_Fail = %x, Cnt_Rate_Illegal = %x, Cnt_Crc8_fail = %x, Cnt_Mcs_fail = %x\n",
+               falsealm_cnt->cnt_parity_fail,
+               falsealm_cnt->cnt_rate_illegal,
+               falsealm_cnt->cnt_crc8_fail,
+               falsealm_cnt->cnt_mcs_fail);
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
+               "Cnt_Ofdm_fail = %x, Cnt_Cck_fail = %x, Cnt_all = %x\n",
+               falsealm_cnt->cnt_ofdm_fail,
+               falsealm_cnt->cnt_cck_fail,
+               falsealm_cnt->cnt_all);
+}
+EXPORT_SYMBOL_GPL(rtl92d_dm_false_alarm_counter_statistics);
+
+void rtl92d_dm_find_minimum_rssi(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
+       struct rtl_mac *mac = rtl_mac(rtlpriv);
+
+       /* Determine the minimum RSSI  */
+       if (mac->link_state < MAC80211_LINKED &&
+           rtlpriv->dm.UNDEC_SM_PWDB == 0) {
+               de_digtable->min_undec_pwdb_for_dm = 0;
+               rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD,
+                       "Not connected to any\n");
+       }
+       if (mac->link_state >= MAC80211_LINKED) {
+               if (mac->opmode == NL80211_IFTYPE_AP ||
+                   mac->opmode == NL80211_IFTYPE_ADHOC) {
+                       de_digtable->min_undec_pwdb_for_dm =
+                           rtlpriv->dm.UNDEC_SM_PWDB;
+                       rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD,
+                               "AP Client PWDB = 0x%lx\n",
+                                rtlpriv->dm.UNDEC_SM_PWDB);
+               } else {
+                       de_digtable->min_undec_pwdb_for_dm =
+                           rtlpriv->dm.undec_sm_pwdb;
+                       rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD,
+                               "STA Default Port PWDB = 0x%x\n",
+                               de_digtable->min_undec_pwdb_for_dm);
+               }
+       } else {
+               de_digtable->min_undec_pwdb_for_dm = rtlpriv->dm.UNDEC_SM_PWDB;
+               rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD,
+                       "AP Ext Port or disconnect PWDB = 0x%x\n",
+                       de_digtable->min_undec_pwdb_for_dm);
+       }
+
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "MinUndecoratedPWDBForDM =%d\n",
+               de_digtable->min_undec_pwdb_for_dm);
+}
+EXPORT_SYMBOL_GPL(rtl92d_dm_find_minimum_rssi);
+
+static void rtl92d_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
+       unsigned long flag = 0;
+
+       if (de_digtable->cursta_cstate == DIG_STA_CONNECT) {
+               if (de_digtable->pre_cck_pd_state == CCK_PD_STAGE_LOWRSSI) {
+                       if (de_digtable->min_undec_pwdb_for_dm <= 25)
+                               de_digtable->cur_cck_pd_state =
+                                                        CCK_PD_STAGE_LOWRSSI;
+                       else
+                               de_digtable->cur_cck_pd_state =
+                                                        CCK_PD_STAGE_HIGHRSSI;
+               } else {
+                       if (de_digtable->min_undec_pwdb_for_dm <= 20)
+                               de_digtable->cur_cck_pd_state =
+                                                        CCK_PD_STAGE_LOWRSSI;
+                       else
+                               de_digtable->cur_cck_pd_state =
+                                                        CCK_PD_STAGE_HIGHRSSI;
+               }
+       } else {
+               de_digtable->cur_cck_pd_state = CCK_PD_STAGE_LOWRSSI;
+       }
+       if (de_digtable->pre_cck_pd_state != de_digtable->cur_cck_pd_state) {
+               if (de_digtable->cur_cck_pd_state == CCK_PD_STAGE_LOWRSSI) {
+                       rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
+                       rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, 0x83);
+                       rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
+               } else {
+                       rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
+                       rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, 0xcd);
+                       rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
+               }
+               de_digtable->pre_cck_pd_state = de_digtable->cur_cck_pd_state;
+       }
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "CurSTAConnectState=%s\n",
+               de_digtable->cursta_cstate == DIG_STA_CONNECT ?
+               "DIG_STA_CONNECT " : "DIG_STA_DISCONNECT");
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "CCKPDStage=%s\n",
+               de_digtable->cur_cck_pd_state == CCK_PD_STAGE_LOWRSSI ?
+               "Low RSSI " : "High RSSI ");
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "is92d single phy =%x\n",
+               IS_92D_SINGLEPHY(rtlpriv->rtlhal.version));
+}
+
+void rtl92d_dm_write_dig(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
+
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
+               "cur_igvalue = 0x%x, pre_igvalue = 0x%x, back_val = %d\n",
+               de_digtable->cur_igvalue, de_digtable->pre_igvalue,
+               de_digtable->back_val);
+       if (!de_digtable->dig_enable_flag) {
+               rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "DIG is disabled\n");
+               de_digtable->pre_igvalue = 0x17;
+               return;
+       }
+       if (de_digtable->pre_igvalue != de_digtable->cur_igvalue) {
+               rtl_set_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f,
+                             de_digtable->cur_igvalue);
+               rtl_set_bbreg(hw, ROFDM0_XBAGCCORE1, 0x7f,
+                             de_digtable->cur_igvalue);
+               de_digtable->pre_igvalue = de_digtable->cur_igvalue;
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_dm_write_dig);
+
+static void rtl92d_early_mode_enabled(struct rtl_priv *rtlpriv)
+{
+       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
+
+       if (rtlpriv->mac80211.link_state >= MAC80211_LINKED &&
+           rtlpriv->mac80211.vendor == PEER_CISCO) {
+               rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "IOT_PEER = CISCO\n");
+               if (de_digtable->last_min_undec_pwdb_for_dm >= 50 &&
+                   de_digtable->min_undec_pwdb_for_dm < 50) {
+                       rtl_write_byte(rtlpriv, REG_EARLY_MODE_CONTROL, 0x00);
+                       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
+                               "Early Mode Off\n");
+               } else if (de_digtable->last_min_undec_pwdb_for_dm <= 55 &&
+                          de_digtable->min_undec_pwdb_for_dm > 55) {
+                       rtl_write_byte(rtlpriv, REG_EARLY_MODE_CONTROL, 0x0f);
+                       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
+                               "Early Mode On\n");
+               }
+       } else if (!(rtl_read_byte(rtlpriv, REG_EARLY_MODE_CONTROL) & 0xf)) {
+               rtl_write_byte(rtlpriv, REG_EARLY_MODE_CONTROL, 0x0f);
+               rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "Early Mode On\n");
+       }
+}
+
+void rtl92d_dm_dig(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
+       u8 value_igi = de_digtable->cur_igvalue;
+       struct false_alarm_statistics *falsealm_cnt = &rtlpriv->falsealm_cnt;
+
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "==>\n");
+       if (rtlpriv->rtlhal.earlymode_enable) {
+               rtl92d_early_mode_enabled(rtlpriv);
+               de_digtable->last_min_undec_pwdb_for_dm =
+                                de_digtable->min_undec_pwdb_for_dm;
+       }
+       if (!rtlpriv->dm.dm_initialgain_enable)
+               return;
+
+       /* because we will send data pkt when scanning
+        * this will cause some ap like gear-3700 wep TP
+        * lower if we return here, this is the diff of
+        * mac80211 driver vs ieee80211 driver
+        */
+       /* if (rtlpriv->mac80211.act_scanning)
+        *      return;
+        */
+
+       /* Not STA mode return tmp */
+       if (rtlpriv->mac80211.opmode != NL80211_IFTYPE_STATION)
+               return;
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "progress\n");
+       /* Decide the current status and if modify initial gain or not */
+       if (rtlpriv->mac80211.link_state >= MAC80211_LINKED)
+               de_digtable->cursta_cstate = DIG_STA_CONNECT;
+       else
+               de_digtable->cursta_cstate = DIG_STA_DISCONNECT;
+
+       /* adjust initial gain according to false alarm counter */
+       if (falsealm_cnt->cnt_all < DM_DIG_FA_TH0)
+               value_igi--;
+       else if (falsealm_cnt->cnt_all < DM_DIG_FA_TH1)
+               value_igi += 0;
+       else if (falsealm_cnt->cnt_all < DM_DIG_FA_TH2)
+               value_igi++;
+       else if (falsealm_cnt->cnt_all >= DM_DIG_FA_TH2)
+               value_igi += 2;
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
+               "dm_DIG() Before: large_fa_hit=%d, forbidden_igi=%x\n",
+               de_digtable->large_fa_hit, de_digtable->forbidden_igi);
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
+               "dm_DIG() Before: Recover_cnt=%d, rx_gain_min=%x\n",
+               de_digtable->recover_cnt, de_digtable->rx_gain_min);
+
+       /* deal with abnormally large false alarm */
+       if (falsealm_cnt->cnt_all > 10000) {
+               rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
+                       "dm_DIG(): Abnormally false alarm case\n");
+
+               de_digtable->large_fa_hit++;
+               if (de_digtable->forbidden_igi < de_digtable->cur_igvalue) {
+                       de_digtable->forbidden_igi = de_digtable->cur_igvalue;
+                       de_digtable->large_fa_hit = 1;
+               }
+               if (de_digtable->large_fa_hit >= 3) {
+                       if ((de_digtable->forbidden_igi + 1) > DM_DIG_MAX)
+                               de_digtable->rx_gain_min = DM_DIG_MAX;
+                       else
+                               de_digtable->rx_gain_min =
+                                   (de_digtable->forbidden_igi + 1);
+                       de_digtable->recover_cnt = 3600;        /* 3600=2hr */
+               }
+       } else {
+               /* Recovery mechanism for IGI lower bound */
+               if (de_digtable->recover_cnt != 0) {
+                       de_digtable->recover_cnt--;
+               } else {
+                       if (de_digtable->large_fa_hit == 0) {
+                               if ((de_digtable->forbidden_igi - 1) <
+                                   DM_DIG_FA_LOWER) {
+                                       de_digtable->forbidden_igi =
+                                                        DM_DIG_FA_LOWER;
+                                       de_digtable->rx_gain_min =
+                                                        DM_DIG_FA_LOWER;
+
+                               } else {
+                                       de_digtable->forbidden_igi--;
+                                       de_digtable->rx_gain_min =
+                                           (de_digtable->forbidden_igi + 1);
+                               }
+                       } else if (de_digtable->large_fa_hit == 3) {
+                               de_digtable->large_fa_hit = 0;
+                       }
+               }
+       }
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
+               "dm_DIG() After: large_fa_hit=%d, forbidden_igi=%x\n",
+               de_digtable->large_fa_hit, de_digtable->forbidden_igi);
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
+               "dm_DIG() After: recover_cnt=%d, rx_gain_min=%x\n",
+               de_digtable->recover_cnt, de_digtable->rx_gain_min);
+
+       if (value_igi > DM_DIG_MAX)
+               value_igi = DM_DIG_MAX;
+       else if (value_igi < de_digtable->rx_gain_min)
+               value_igi = de_digtable->rx_gain_min;
+       de_digtable->cur_igvalue = value_igi;
+       rtl92d_dm_write_dig(hw);
+       if (rtlpriv->rtlhal.current_bandtype != BAND_ON_5G)
+               rtl92d_dm_cck_packet_detection_thresh(hw);
+       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "<<==\n");
+}
+EXPORT_SYMBOL_GPL(rtl92d_dm_dig);
+
+void rtl92d_dm_init_edca_turbo(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+
+       rtlpriv->dm.current_turbo_edca = false;
+       rtlpriv->dm.is_any_nonbepkts = false;
+       rtlpriv->dm.is_cur_rdlstate = false;
+}
+EXPORT_SYMBOL_GPL(rtl92d_dm_init_edca_turbo);
+
+void rtl92d_dm_check_edca_turbo(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
+       const u32 edca_be_ul = 0x5ea42b;
+       const u32 edca_be_dl = 0x5ea42b;
+       static u64 last_txok_cnt;
+       static u64 last_rxok_cnt;
+       u64 cur_txok_cnt;
+       u64 cur_rxok_cnt;
+
+       if (mac->link_state != MAC80211_LINKED) {
+               rtlpriv->dm.current_turbo_edca = false;
+               goto exit;
+       }
+
+       if (!rtlpriv->dm.is_any_nonbepkts &&
+           !rtlpriv->dm.disable_framebursting) {
+               cur_txok_cnt = rtlpriv->stats.txbytesunicast - last_txok_cnt;
+               cur_rxok_cnt = rtlpriv->stats.rxbytesunicast - last_rxok_cnt;
+               if (cur_rxok_cnt > 4 * cur_txok_cnt) {
+                       if (!rtlpriv->dm.is_cur_rdlstate ||
+                           !rtlpriv->dm.current_turbo_edca) {
+                               rtl_write_dword(rtlpriv, REG_EDCA_BE_PARAM,
+                                               edca_be_dl);
+                               rtlpriv->dm.is_cur_rdlstate = true;
+                       }
+               } else {
+                       if (rtlpriv->dm.is_cur_rdlstate ||
+                           !rtlpriv->dm.current_turbo_edca) {
+                               rtl_write_dword(rtlpriv, REG_EDCA_BE_PARAM,
+                                               edca_be_ul);
+                               rtlpriv->dm.is_cur_rdlstate = false;
+                       }
+               }
+               rtlpriv->dm.current_turbo_edca = true;
+       } else {
+               if (rtlpriv->dm.current_turbo_edca) {
+                       u8 tmp = AC0_BE;
+
+                       rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AC_PARAM,
+                                                     &tmp);
+                       rtlpriv->dm.current_turbo_edca = false;
+               }
+       }
+
+exit:
+       rtlpriv->dm.is_any_nonbepkts = false;
+       last_txok_cnt = rtlpriv->stats.txbytesunicast;
+       last_rxok_cnt = rtlpriv->stats.rxbytesunicast;
+}
+EXPORT_SYMBOL_GPL(rtl92d_dm_check_edca_turbo);
+
+void rtl92d_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rate_adaptive *ra = &rtlpriv->ra;
+
+       ra->ratr_state = DM_RATR_STA_INIT;
+       ra->pre_ratr_state = DM_RATR_STA_INIT;
+       if (rtlpriv->dm.dm_type == DM_TYPE_BYDRIVER)
+               rtlpriv->dm.useramask = true;
+       else
+               rtlpriv->dm.useramask = false;
+}
+EXPORT_SYMBOL_GPL(rtl92d_dm_init_rate_adaptive_mask);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/dm_common.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/dm_common.h
new file mode 100644 (file)
index 0000000..9dc0df5
--- /dev/null
@@ -0,0 +1,100 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#ifndef __RTL92D_DM_COMMON_H__
+#define __RTL92D_DM_COMMON_H__
+
+#define HAL_DM_DIG_DISABLE                     BIT(0)
+#define HAL_DM_HIPWR_DISABLE                   BIT(1)
+
+#define OFDM_TABLE_LENGTH                      37
+#define OFDM_TABLE_SIZE_92D                    43
+#define CCK_TABLE_LENGTH                       33
+
+#define CCK_TABLE_SIZE                         33
+
+#define BW_AUTO_SWITCH_HIGH_LOW                        25
+#define BW_AUTO_SWITCH_LOW_HIGH                        30
+
+#define DM_DIG_FA_UPPER                                0x32
+#define DM_DIG_FA_LOWER                                0x20
+#define DM_DIG_FA_TH0                          0x100
+#define DM_DIG_FA_TH1                          0x400
+#define DM_DIG_FA_TH2                          0x600
+
+#define RXPATHSELECTION_SS_TH_LOW              30
+#define RXPATHSELECTION_DIFF_TH                        18
+
+#define DM_RATR_STA_INIT                       0
+#define DM_RATR_STA_HIGH                       1
+#define DM_RATR_STA_MIDDLE                     2
+#define DM_RATR_STA_LOW                                3
+
+#define CTS2SELF_THVAL                         30
+#define REGC38_TH                              20
+
+#define WAIOTTHVAL                             25
+
+#define TXHIGHPWRLEVEL_NORMAL                  0
+#define TXHIGHPWRLEVEL_LEVEL1                  1
+#define TXHIGHPWRLEVEL_LEVEL2                  2
+#define TXHIGHPWRLEVEL_BT1                     3
+#define TXHIGHPWRLEVEL_BT2                     4
+
+#define DM_TYPE_BYFW                           0
+#define DM_TYPE_BYDRIVER                       1
+
+#define TX_POWER_NEAR_FIELD_THRESH_LVL2                74
+#define TX_POWER_NEAR_FIELD_THRESH_LVL1                67
+#define INDEX_MAPPING_NUM                      13
+
+struct swat {
+       u8 failure_cnt;
+       u8 try_flag;
+       u8 stop_trying;
+       long pre_rssi;
+       long trying_threshold;
+       u8 cur_antenna;
+       u8 pre_antenna;
+};
+
+enum tag_dynamic_init_gain_operation_type_definition {
+       DIG_TYPE_THRESH_HIGH = 0,
+       DIG_TYPE_THRESH_LOW = 1,
+       DIG_TYPE_BACKOFF = 2,
+       DIG_TYPE_RX_GAIN_MIN = 3,
+       DIG_TYPE_RX_GAIN_MAX = 4,
+       DIG_TYPE_ENABLE = 5,
+       DIG_TYPE_DISABLE = 6,
+       DIG_OP_TYPE_MAX
+};
+
+enum dm_1r_cca {
+       CCA_1R = 0,
+       CCA_2R = 1,
+       CCA_MAX = 2,
+};
+
+enum dm_rf {
+       RF_SAVE = 0,
+       RF_NORMAL = 1,
+       RF_MAX = 2,
+};
+
+enum dm_sw_ant_switch {
+       ANS_ANTENNA_B = 1,
+       ANS_ANTENNA_A = 2,
+       ANS_ANTENNA_MAX = 3,
+};
+
+void rtl92d_dm_initialize_txpower_tracking(struct ieee80211_hw *hw);
+void rtl92d_dm_check_txpower_tracking_thermal_meter(struct ieee80211_hw *hw);
+void rtl92d_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw);
+void rtl92d_dm_find_minimum_rssi(struct ieee80211_hw *hw);
+void rtl92d_dm_write_dig(struct ieee80211_hw *hw);
+void rtl92d_dm_dig(struct ieee80211_hw *hw);
+void rtl92d_dm_init_edca_turbo(struct ieee80211_hw *hw);
+void rtl92d_dm_check_edca_turbo(struct ieee80211_hw *hw);
+void rtl92d_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw);
+
+#endif
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.c
new file mode 100644 (file)
index 0000000..73cfa9a
--- /dev/null
@@ -0,0 +1,369 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#include "../wifi.h"
+#include "../pci.h"
+#include "../base.h"
+#include "../efuse.h"
+#include "def.h"
+#include "reg.h"
+#include "fw_common.h"
+
+bool rtl92d_is_fw_downloaded(struct rtl_priv *rtlpriv)
+{
+       return (rtl_read_dword(rtlpriv, REG_MCUFWDL) & MCUFWDL_RDY) ?
+               true : false;
+}
+EXPORT_SYMBOL_GPL(rtl92d_is_fw_downloaded);
+
+void rtl92d_enable_fw_download(struct ieee80211_hw *hw, bool enable)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u8 tmp;
+
+       if (enable) {
+               tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
+               rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, tmp | 0x04);
+               tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL);
+               rtl_write_byte(rtlpriv, REG_MCUFWDL, tmp | 0x01);
+               tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL + 2);
+               rtl_write_byte(rtlpriv, REG_MCUFWDL + 2, tmp & 0xf7);
+       } else {
+               tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL);
+               rtl_write_byte(rtlpriv, REG_MCUFWDL, tmp & 0xfe);
+               /* Reserved for fw extension.
+                * 0x81[7] is used for mac0 status ,
+                * so don't write this reg here
+                * rtl_write_byte(rtlpriv, REG_MCUFWDL + 1, 0x00);
+                */
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_enable_fw_download);
+
+void rtl92d_write_fw(struct ieee80211_hw *hw,
+                    enum version_8192d version, u8 *buffer, u32 size)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       u8 *bufferptr = buffer;
+       u32 pagenums, remainsize;
+       u32 page, offset;
+
+       rtl_dbg(rtlpriv, COMP_FW, DBG_TRACE, "FW size is %d bytes,\n", size);
+       if (rtlhal->hw_type == HARDWARE_TYPE_RTL8192DE)
+               rtl_fill_dummy(bufferptr, &size);
+       pagenums = size / FW_8192D_PAGE_SIZE;
+       remainsize = size % FW_8192D_PAGE_SIZE;
+       if (pagenums > 8)
+               pr_err("Page numbers should not greater then 8\n");
+       for (page = 0; page < pagenums; page++) {
+               offset = page * FW_8192D_PAGE_SIZE;
+               rtl_fw_page_write(hw, page, (bufferptr + offset),
+                                 FW_8192D_PAGE_SIZE);
+       }
+       if (remainsize) {
+               offset = pagenums * FW_8192D_PAGE_SIZE;
+               page = pagenums;
+               rtl_fw_page_write(hw, page, (bufferptr + offset), remainsize);
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_write_fw);
+
+int rtl92d_fw_free_to_go(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u32 counter = 0;
+       u32 value32;
+
+       do {
+               value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL);
+       } while ((counter++ < FW_8192D_POLLING_TIMEOUT_COUNT) &&
+                (!(value32 & FWDL_CHKSUM_RPT)));
+       if (counter >= FW_8192D_POLLING_TIMEOUT_COUNT) {
+               pr_err("chksum report fail! REG_MCUFWDL:0x%08x\n",
+                      value32);
+               return -EIO;
+       }
+       value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL);
+       value32 |= MCUFWDL_RDY;
+       rtl_write_dword(rtlpriv, REG_MCUFWDL, value32);
+       return 0;
+}
+EXPORT_SYMBOL_GPL(rtl92d_fw_free_to_go);
+
+void rtl92d_firmware_selfreset(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u8 u1b_tmp;
+       u8 delay = 100;
+
+       /* Set (REG_HMETFR + 3) to  0x20 is reset 8051 */
+       rtl_write_byte(rtlpriv, REG_HMETFR + 3, 0x20);
+       u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
+       while (u1b_tmp & BIT(2)) {
+               delay--;
+               if (delay == 0)
+                       break;
+               udelay(50);
+               u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
+       }
+       WARN_ONCE((delay <= 0), "rtl8192de: 8051 reset failed!\n");
+       rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
+               "=====> 8051 reset success (%d)\n", delay);
+}
+EXPORT_SYMBOL_GPL(rtl92d_firmware_selfreset);
+
+int rtl92d_fw_init(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       u32 counter;
+
+       rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG, "FW already have download\n");
+       /* polling for FW ready */
+       counter = 0;
+       do {
+               if (rtlhal->interfaceindex == 0) {
+                       if (rtl_read_byte(rtlpriv, FW_MAC0_READY) &
+                           MAC0_READY) {
+                               rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
+                                       "Polling FW ready success!! REG_MCUFWDL: 0x%x\n",
+                                       rtl_read_byte(rtlpriv,
+                                                     FW_MAC0_READY));
+                               return 0;
+                       }
+                       udelay(5);
+               } else {
+                       if (rtl_read_byte(rtlpriv, FW_MAC1_READY) &
+                           MAC1_READY) {
+                               rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
+                                       "Polling FW ready success!! REG_MCUFWDL: 0x%x\n",
+                                       rtl_read_byte(rtlpriv,
+                                                     FW_MAC1_READY));
+                               return 0;
+                       }
+                       udelay(5);
+               }
+       } while (counter++ < POLLING_READY_TIMEOUT_COUNT);
+
+       if (rtlhal->interfaceindex == 0) {
+               rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
+                       "Polling FW ready fail!! MAC0 FW init not ready: 0x%x\n",
+                       rtl_read_byte(rtlpriv, FW_MAC0_READY));
+       } else {
+               rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
+                       "Polling FW ready fail!! MAC1 FW init not ready: 0x%x\n",
+                       rtl_read_byte(rtlpriv, FW_MAC1_READY));
+       }
+       rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
+               "Polling FW ready fail!! REG_MCUFWDL:0x%08x\n",
+               rtl_read_dword(rtlpriv, REG_MCUFWDL));
+       return -1;
+}
+EXPORT_SYMBOL_GPL(rtl92d_fw_init);
+
+static bool _rtl92d_check_fw_read_last_h2c(struct ieee80211_hw *hw, u8 boxnum)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u8 val_hmetfr;
+       bool result = false;
+
+       val_hmetfr = rtl_read_byte(rtlpriv, REG_HMETFR);
+       if (((val_hmetfr >> boxnum) & BIT(0)) == 0)
+               result = true;
+       return result;
+}
+
+static void _rtl92d_fill_h2c_command(struct ieee80211_hw *hw,
+                                    u8 element_id, u32 cmd_len, u8 *cmdbuffer)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
+       u8 boxnum;
+       u16 box_reg = 0, box_extreg = 0;
+       u8 u1b_tmp;
+       bool isfw_read = false;
+       u8 buf_index = 0;
+       bool bwrite_success = false;
+       u8 wait_h2c_limmit = 100;
+       u8 wait_writeh2c_limmit = 100;
+       u8 boxcontent[4], boxextcontent[2];
+       u32 h2c_waitcounter = 0;
+       unsigned long flag;
+       u8 idx;
+
+       if (ppsc->rfpwr_state == ERFOFF || ppsc->inactive_pwrstate == ERFOFF) {
+               rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
+                       "Return as RF is off!!!\n");
+               return;
+       }
+       rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "come in\n");
+       while (true) {
+               spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag);
+               if (rtlhal->h2c_setinprogress) {
+                       rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
+                               "H2C set in progress! Wait to set..element_id(%d)\n",
+                               element_id);
+
+                       while (rtlhal->h2c_setinprogress) {
+                               spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock,
+                                                      flag);
+                               h2c_waitcounter++;
+                               rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
+                                       "Wait 100 us (%d times)...\n",
+                                       h2c_waitcounter);
+                               udelay(100);
+
+                               if (h2c_waitcounter > 1000)
+                                       return;
+
+                               spin_lock_irqsave(&rtlpriv->locks.h2c_lock,
+                                                 flag);
+                       }
+                       spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
+               } else {
+                       rtlhal->h2c_setinprogress = true;
+                       spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
+                       break;
+               }
+       }
+       while (!bwrite_success) {
+               wait_writeh2c_limmit--;
+               if (wait_writeh2c_limmit == 0) {
+                       pr_err("Write H2C fail because no trigger for FW INT!\n");
+                       break;
+               }
+               boxnum = rtlhal->last_hmeboxnum;
+               switch (boxnum) {
+               case 0:
+                       box_reg = REG_HMEBOX_0;
+                       box_extreg = REG_HMEBOX_EXT_0;
+                       break;
+               case 1:
+                       box_reg = REG_HMEBOX_1;
+                       box_extreg = REG_HMEBOX_EXT_1;
+                       break;
+               case 2:
+                       box_reg = REG_HMEBOX_2;
+                       box_extreg = REG_HMEBOX_EXT_2;
+                       break;
+               case 3:
+                       box_reg = REG_HMEBOX_3;
+                       box_extreg = REG_HMEBOX_EXT_3;
+                       break;
+               default:
+                       pr_err("switch case %#x not processed\n",
+                              boxnum);
+                       break;
+               }
+               isfw_read = _rtl92d_check_fw_read_last_h2c(hw, boxnum);
+               while (!isfw_read) {
+                       wait_h2c_limmit--;
+                       if (wait_h2c_limmit == 0) {
+                               rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
+                                       "Waiting too long for FW read clear HMEBox(%d)!\n",
+                                       boxnum);
+                               break;
+                       }
+                       udelay(10);
+                       isfw_read = _rtl92d_check_fw_read_last_h2c(hw, boxnum);
+                       u1b_tmp = rtl_read_byte(rtlpriv, 0x1BF);
+                       rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
+                               "Waiting for FW read clear HMEBox(%d)!!! 0x1BF = %2x\n",
+                               boxnum, u1b_tmp);
+               }
+               if (!isfw_read) {
+                       rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
+                               "Write H2C register BOX[%d] fail!!!!! Fw do not read.\n",
+                               boxnum);
+                       break;
+               }
+               memset(boxcontent, 0, sizeof(boxcontent));
+               memset(boxextcontent, 0, sizeof(boxextcontent));
+               boxcontent[0] = element_id;
+               rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
+                       "Write element_id box_reg(%4x) = %2x\n",
+                       box_reg, element_id);
+               switch (cmd_len) {
+               case 1:
+                       boxcontent[0] &= ~(BIT(7));
+                       memcpy(boxcontent + 1, cmdbuffer + buf_index, 1);
+                       for (idx = 0; idx < 4; idx++)
+                               rtl_write_byte(rtlpriv, box_reg + idx,
+                                              boxcontent[idx]);
+                       break;
+               case 2:
+                       boxcontent[0] &= ~(BIT(7));
+                       memcpy(boxcontent + 1, cmdbuffer + buf_index, 2);
+                       for (idx = 0; idx < 4; idx++)
+                               rtl_write_byte(rtlpriv, box_reg + idx,
+                                              boxcontent[idx]);
+                       break;
+               case 3:
+                       boxcontent[0] &= ~(BIT(7));
+                       memcpy(boxcontent + 1, cmdbuffer + buf_index, 3);
+                       for (idx = 0; idx < 4; idx++)
+                               rtl_write_byte(rtlpriv, box_reg + idx,
+                                              boxcontent[idx]);
+                       break;
+               case 4:
+                       boxcontent[0] |= (BIT(7));
+                       memcpy(boxextcontent, cmdbuffer + buf_index, 2);
+                       memcpy(boxcontent + 1, cmdbuffer + buf_index + 2, 2);
+                       for (idx = 0; idx < 2; idx++)
+                               rtl_write_byte(rtlpriv, box_extreg + idx,
+                                              boxextcontent[idx]);
+                       for (idx = 0; idx < 4; idx++)
+                               rtl_write_byte(rtlpriv, box_reg + idx,
+                                              boxcontent[idx]);
+                       break;
+               case 5:
+                       boxcontent[0] |= (BIT(7));
+                       memcpy(boxextcontent, cmdbuffer + buf_index, 2);
+                       memcpy(boxcontent + 1, cmdbuffer + buf_index + 2, 3);
+                       for (idx = 0; idx < 2; idx++)
+                               rtl_write_byte(rtlpriv, box_extreg + idx,
+                                              boxextcontent[idx]);
+                       for (idx = 0; idx < 4; idx++)
+                               rtl_write_byte(rtlpriv, box_reg + idx,
+                                              boxcontent[idx]);
+                       break;
+               default:
+                       pr_err("switch case %#x not processed\n",
+                              cmd_len);
+                       break;
+               }
+               bwrite_success = true;
+               rtlhal->last_hmeboxnum = boxnum + 1;
+               if (rtlhal->last_hmeboxnum == 4)
+                       rtlhal->last_hmeboxnum = 0;
+               rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
+                       "pHalData->last_hmeboxnum  = %d\n",
+                       rtlhal->last_hmeboxnum);
+       }
+       spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag);
+       rtlhal->h2c_setinprogress = false;
+       spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
+       rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "go out\n");
+}
+
+void rtl92d_fill_h2c_cmd(struct ieee80211_hw *hw,
+                        u8 element_id, u32 cmd_len, u8 *cmdbuffer)
+{
+       u32 tmp_cmdbuf[2];
+
+       memset(tmp_cmdbuf, 0, 8);
+       memcpy(tmp_cmdbuf, cmdbuffer, cmd_len);
+       _rtl92d_fill_h2c_command(hw, element_id, cmd_len, (u8 *)&tmp_cmdbuf);
+}
+EXPORT_SYMBOL_GPL(rtl92d_fill_h2c_cmd);
+
+void rtl92d_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus)
+{
+       u8 u1_joinbssrpt_parm[1] = {0};
+
+       u1_joinbssrpt_parm[0] = mstatus;
+       rtl92d_fill_h2c_cmd(hw, H2C_JOINBSSRPT, 1, u1_joinbssrpt_parm);
+}
+EXPORT_SYMBOL_GPL(rtl92d_set_fw_joinbss_report_cmd);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.h
new file mode 100644 (file)
index 0000000..4e8e2b7
--- /dev/null
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#ifndef __RTL92D_FW_COMMON_H__
+#define __RTL92D_FW_COMMON_H__
+
+#define FW_8192D_START_ADDRESS                 0x1000
+#define FW_8192D_PAGE_SIZE                     4096
+#define FW_8192D_POLLING_TIMEOUT_COUNT         1000
+
+#define IS_FW_HEADER_EXIST(_pfwhdr)    \
+               ((GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFF0) == 0x92C0 || \
+                (GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFF0) == 0x88C0 || \
+                (GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFFF) == 0x92D0 || \
+                (GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFFF) == 0x92D1 || \
+                (GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFFF) == 0x92D2 || \
+                (GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFFF) == 0x92D3)
+
+/* Firmware Header(8-byte alinment required) */
+/* --- LONG WORD 0 ---- */
+#define GET_FIRMWARE_HDR_SIGNATURE(__fwhdr)            \
+       le32_get_bits(*(__le32 *)__fwhdr, GENMASK(15, 0))
+#define GET_FIRMWARE_HDR_VERSION(__fwhdr)              \
+       le32_get_bits(*(__le32 *)((__fwhdr) + 4), GENMASK(15, 0))
+#define GET_FIRMWARE_HDR_SUB_VER(__fwhdr)              \
+       le32_get_bits(*(__le32 *)((__fwhdr) + 4), GENMASK(23, 16))
+
+bool rtl92d_is_fw_downloaded(struct rtl_priv *rtlpriv);
+void rtl92d_enable_fw_download(struct ieee80211_hw *hw, bool enable);
+void rtl92d_write_fw(struct ieee80211_hw *hw,
+                    enum version_8192d version, u8 *buffer, u32 size);
+int rtl92d_fw_free_to_go(struct ieee80211_hw *hw);
+void rtl92d_firmware_selfreset(struct ieee80211_hw *hw);
+int rtl92d_fw_init(struct ieee80211_hw *hw);
+void rtl92d_fill_h2c_cmd(struct ieee80211_hw *hw, u8 element_id,
+                        u32 cmd_len, u8 *p_cmdbuffer);
+void rtl92d_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus);
+
+#endif
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.c
new file mode 100644 (file)
index 0000000..e70e832
--- /dev/null
@@ -0,0 +1,1191 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#include "../wifi.h"
+#include "../base.h"
+#include "../cam.h"
+#include "../efuse.h"
+#include "../pci.h"
+#include "../regd.h"
+#include "def.h"
+#include "reg.h"
+#include "dm_common.h"
+#include "fw_common.h"
+#include "hw_common.h"
+#include "phy_common.h"
+
+void rtl92de_stop_tx_beacon(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u8 tmp1byte;
+
+       tmp1byte = rtl_read_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2);
+       rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2, tmp1byte & (~BIT(6)));
+       rtl_write_byte(rtlpriv, REG_BCN_MAX_ERR, 0xff);
+       rtl_write_byte(rtlpriv, REG_TBTT_PROHIBIT + 1, 0x64);
+       tmp1byte = rtl_read_byte(rtlpriv, REG_TBTT_PROHIBIT + 2);
+       tmp1byte &= ~(BIT(0));
+       rtl_write_byte(rtlpriv, REG_TBTT_PROHIBIT + 2, tmp1byte);
+}
+EXPORT_SYMBOL_GPL(rtl92de_stop_tx_beacon);
+
+void rtl92de_resume_tx_beacon(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u8 tmp1byte;
+
+       tmp1byte = rtl_read_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2);
+       rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2, tmp1byte | BIT(6));
+       rtl_write_byte(rtlpriv, REG_BCN_MAX_ERR, 0x0a);
+       rtl_write_byte(rtlpriv, REG_TBTT_PROHIBIT + 1, 0xff);
+       tmp1byte = rtl_read_byte(rtlpriv, REG_TBTT_PROHIBIT + 2);
+       tmp1byte |= BIT(0);
+       rtl_write_byte(rtlpriv, REG_TBTT_PROHIBIT + 2, tmp1byte);
+}
+EXPORT_SYMBOL_GPL(rtl92de_resume_tx_beacon);
+
+void rtl92d_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
+
+       switch (variable) {
+       case HW_VAR_RF_STATE:
+               *((enum rf_pwrstate *)(val)) = ppsc->rfpwr_state;
+               break;
+       case HW_VAR_FWLPS_RF_ON:{
+               enum rf_pwrstate rfstate;
+               u32 val_rcr;
+
+               rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_RF_STATE,
+                                             (u8 *)(&rfstate));
+               if (rfstate == ERFOFF) {
+                       *((bool *)(val)) = true;
+               } else {
+                       val_rcr = rtl_read_dword(rtlpriv, REG_RCR);
+                       val_rcr &= 0x00070000;
+                       if (val_rcr)
+                               *((bool *)(val)) = false;
+                       else
+                               *((bool *)(val)) = true;
+               }
+               break;
+       }
+       case HW_VAR_FW_PSMODE_STATUS:
+               *((bool *)(val)) = ppsc->fw_current_inpsmode;
+               break;
+       case HW_VAR_CORRECT_TSF:{
+               u64 tsf;
+               u32 *ptsf_low = (u32 *)&tsf;
+               u32 *ptsf_high = ((u32 *)&tsf) + 1;
+
+               *ptsf_high = rtl_read_dword(rtlpriv, (REG_TSFTR + 4));
+               *ptsf_low = rtl_read_dword(rtlpriv, REG_TSFTR);
+               *((u64 *)(val)) = tsf;
+               break;
+       }
+       case HW_VAR_INT_MIGRATION:
+               *((bool *)(val)) = rtlpriv->dm.interrupt_migration;
+               break;
+       case HW_VAR_INT_AC:
+               *((bool *)(val)) = rtlpriv->dm.disable_tx_int;
+               break;
+       case HAL_DEF_WOWLAN:
+               break;
+       default:
+               pr_err("switch case %#x not processed\n", variable);
+               break;
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_get_hw_reg);
+
+void rtl92d_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
+       u8 idx;
+
+       switch (variable) {
+       case HW_VAR_ETHER_ADDR:
+               for (idx = 0; idx < ETH_ALEN; idx++) {
+                       rtl_write_byte(rtlpriv, (REG_MACID + idx),
+                                      val[idx]);
+               }
+               break;
+       case HW_VAR_BASIC_RATE: {
+               u16 rate_cfg = ((u16 *)val)[0];
+               u8 rate_index = 0;
+
+               rate_cfg = rate_cfg & 0x15f;
+               if (mac->vendor == PEER_CISCO &&
+                   ((rate_cfg & 0x150) == 0))
+                       rate_cfg |= 0x01;
+               rtl_write_byte(rtlpriv, REG_RRSR, rate_cfg & 0xff);
+               rtl_write_byte(rtlpriv, REG_RRSR + 1,
+                              (rate_cfg >> 8) & 0xff);
+               while (rate_cfg > 0x1) {
+                       rate_cfg = (rate_cfg >> 1);
+                       rate_index++;
+               }
+               if (rtlhal->fw_version > 0xe)
+                       rtl_write_byte(rtlpriv, REG_INIRTS_RATE_SEL,
+                                      rate_index);
+               break;
+       }
+       case HW_VAR_BSSID:
+               for (idx = 0; idx < ETH_ALEN; idx++) {
+                       rtl_write_byte(rtlpriv, (REG_BSSID + idx),
+                                      val[idx]);
+               }
+               break;
+       case HW_VAR_SIFS:
+               rtl_write_byte(rtlpriv, REG_SIFS_CTX + 1, val[0]);
+               rtl_write_byte(rtlpriv, REG_SIFS_TRX + 1, val[1]);
+               rtl_write_byte(rtlpriv, REG_SPEC_SIFS + 1, val[0]);
+               rtl_write_byte(rtlpriv, REG_MAC_SPEC_SIFS + 1, val[0]);
+               if (!mac->ht_enable)
+                       rtl_write_word(rtlpriv, REG_RESP_SIFS_OFDM,
+                                      0x0e0e);
+               else
+                       rtl_write_word(rtlpriv, REG_RESP_SIFS_OFDM,
+                                      *((u16 *)val));
+               break;
+       case HW_VAR_SLOT_TIME: {
+               u8 e_aci;
+
+               rtl_dbg(rtlpriv, COMP_MLME, DBG_LOUD,
+                       "HW_VAR_SLOT_TIME %x\n", val[0]);
+               rtl_write_byte(rtlpriv, REG_SLOT, val[0]);
+               for (e_aci = 0; e_aci < AC_MAX; e_aci++)
+                       rtlpriv->cfg->ops->set_hw_reg(hw,
+                                                     HW_VAR_AC_PARAM,
+                                                     (&e_aci));
+               break;
+       }
+       case HW_VAR_ACK_PREAMBLE: {
+               u8 reg_tmp;
+               u8 short_preamble = (bool)(*val);
+
+               reg_tmp = (mac->cur_40_prime_sc) << 5;
+               if (short_preamble)
+                       reg_tmp |= 0x80;
+               rtl_write_byte(rtlpriv, REG_RRSR + 2, reg_tmp);
+               break;
+       }
+       case HW_VAR_AMPDU_MIN_SPACE: {
+               u8 min_spacing_to_set;
+
+               min_spacing_to_set = *val;
+               if (min_spacing_to_set <= 7) {
+                       mac->min_space_cfg = ((mac->min_space_cfg & 0xf8) |
+                                             min_spacing_to_set);
+                       *val = min_spacing_to_set;
+                       rtl_dbg(rtlpriv, COMP_MLME, DBG_LOUD,
+                               "Set HW_VAR_AMPDU_MIN_SPACE: %#x\n",
+                               mac->min_space_cfg);
+                       rtl_write_byte(rtlpriv, REG_AMPDU_MIN_SPACE,
+                                      mac->min_space_cfg);
+               }
+               break;
+       }
+       case HW_VAR_SHORTGI_DENSITY: {
+               u8 density_to_set;
+
+               density_to_set = *val;
+               mac->min_space_cfg = rtlpriv->rtlhal.minspace_cfg;
+               mac->min_space_cfg |= (density_to_set << 3);
+               rtl_dbg(rtlpriv, COMP_MLME, DBG_LOUD,
+                       "Set HW_VAR_SHORTGI_DENSITY: %#x\n",
+                       mac->min_space_cfg);
+               rtl_write_byte(rtlpriv, REG_AMPDU_MIN_SPACE,
+                              mac->min_space_cfg);
+               break;
+       }
+       case HW_VAR_AMPDU_FACTOR: {
+               u8 factor_toset;
+               u32 regtoset;
+               u8 *ptmp_byte = NULL;
+               u8 index;
+
+               if (rtlhal->macphymode == DUALMAC_DUALPHY)
+                       regtoset = 0xb9726641;
+               else if (rtlhal->macphymode == DUALMAC_SINGLEPHY)
+                       regtoset = 0x66626641;
+               else
+                       regtoset = 0xb972a841;
+               factor_toset = *val;
+               if (factor_toset <= 3) {
+                       factor_toset = (1 << (factor_toset + 2));
+                       if (factor_toset > 0xf)
+                               factor_toset = 0xf;
+                       for (index = 0; index < 4; index++) {
+                               ptmp_byte = (u8 *)(&regtoset) + index;
+                               if ((*ptmp_byte & 0xf0) >
+                                   (factor_toset << 4))
+                                       *ptmp_byte = (*ptmp_byte & 0x0f)
+                                                | (factor_toset << 4);
+                               if ((*ptmp_byte & 0x0f) > factor_toset)
+                                       *ptmp_byte = (*ptmp_byte & 0xf0)
+                                                    | (factor_toset);
+                       }
+                       rtl_write_dword(rtlpriv, REG_AGGLEN_LMT, regtoset);
+                       rtl_dbg(rtlpriv, COMP_MLME, DBG_LOUD,
+                               "Set HW_VAR_AMPDU_FACTOR: %#x\n",
+                               factor_toset);
+               }
+               break;
+       }
+       case HW_VAR_RETRY_LIMIT: {
+               u8 retry_limit = val[0];
+
+               rtl_write_word(rtlpriv, REG_RL,
+                              retry_limit << RETRY_LIMIT_SHORT_SHIFT |
+                              retry_limit << RETRY_LIMIT_LONG_SHIFT);
+               break;
+       }
+       case HW_VAR_DUAL_TSF_RST:
+               rtl_write_byte(rtlpriv, REG_DUAL_TSF_RST, (BIT(0) | BIT(1)));
+               break;
+       case HW_VAR_EFUSE_BYTES:
+               rtlefuse->efuse_usedbytes = *((u16 *)val);
+               break;
+       case HW_VAR_EFUSE_USAGE:
+               rtlefuse->efuse_usedpercentage = *val;
+               break;
+       case HW_VAR_IO_CMD:
+               rtl92d_phy_set_io_cmd(hw, (*(enum io_type *)val));
+               break;
+       case HW_VAR_WPA_CONFIG:
+               rtl_write_byte(rtlpriv, REG_SECCFG, *val);
+               break;
+       case HW_VAR_SET_RPWM:
+               rtl92d_fill_h2c_cmd(hw, H2C_PWRM, 1, (val));
+               break;
+       case HW_VAR_H2C_FW_PWRMODE:
+               break;
+       case HW_VAR_FW_PSMODE_STATUS:
+               ppsc->fw_current_inpsmode = *((bool *)val);
+               break;
+       case HW_VAR_AID: {
+               u16 u2btmp;
+
+               u2btmp = rtl_read_word(rtlpriv, REG_BCN_PSR_RPT);
+               u2btmp &= 0xC000;
+               rtl_write_word(rtlpriv, REG_BCN_PSR_RPT, (u2btmp |
+                              mac->assoc_id));
+               break;
+       }
+       default:
+               pr_err("switch case %#x not processed\n", variable);
+               break;
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_set_hw_reg);
+
+bool rtl92de_llt_write(struct ieee80211_hw *hw, u32 address, u32 data)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       bool status = true;
+       long count = 0;
+       u32 value = _LLT_INIT_ADDR(address) |
+           _LLT_INIT_DATA(data) | _LLT_OP(_LLT_WRITE_ACCESS);
+
+       rtl_write_dword(rtlpriv, REG_LLT_INIT, value);
+       do {
+               value = rtl_read_dword(rtlpriv, REG_LLT_INIT);
+               if (_LLT_OP_VALUE(value) == _LLT_NO_ACTIVE)
+                       break;
+               if (count > POLLING_LLT_THRESHOLD) {
+                       pr_err("Failed to polling write LLT done at address %d!\n",
+                              address);
+                       status = false;
+                       break;
+               }
+       } while (++count);
+       return status;
+}
+EXPORT_SYMBOL_GPL(rtl92de_llt_write);
+
+void rtl92de_enable_hw_security_config(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u8 sec_reg_value;
+
+       rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
+               "PairwiseEncAlgorithm = %d GroupEncAlgorithm = %d\n",
+               rtlpriv->sec.pairwise_enc_algorithm,
+               rtlpriv->sec.group_enc_algorithm);
+       if (rtlpriv->cfg->mod_params->sw_crypto || rtlpriv->sec.use_sw_sec) {
+               rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
+                       "not open hw encryption\n");
+               return;
+       }
+       sec_reg_value = SCR_TXENCENABLE | SCR_RXENCENABLE;
+       if (rtlpriv->sec.use_defaultkey) {
+               sec_reg_value |= SCR_TXUSEDK;
+               sec_reg_value |= SCR_RXUSEDK;
+       }
+       sec_reg_value |= (SCR_RXBCUSEDK | SCR_TXBCUSEDK);
+       rtl_write_byte(rtlpriv, REG_CR + 1, 0x02);
+       rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD,
+               "The SECR-value %x\n", sec_reg_value);
+       rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_WPA_CONFIG, &sec_reg_value);
+}
+EXPORT_SYMBOL_GPL(rtl92de_enable_hw_security_config);
+
+/* don't set REG_EDCA_BE_PARAM here because
+ * mac80211 will send pkt when scan
+ */
+void rtl92de_set_qos(struct ieee80211_hw *hw, int aci)
+{
+       rtl92d_dm_init_edca_turbo(hw);
+}
+EXPORT_SYMBOL_GPL(rtl92de_set_qos);
+
+static enum version_8192d _rtl92d_read_chip_version(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       enum version_8192d version = VERSION_NORMAL_CHIP_92D_SINGLEPHY;
+       u32 value32;
+
+       value32 = rtl_read_dword(rtlpriv, REG_SYS_CFG);
+       if (!(value32 & 0x000f0000)) {
+               version = VERSION_TEST_CHIP_92D_SINGLEPHY;
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "TEST CHIP!!!\n");
+       } else {
+               version = VERSION_NORMAL_CHIP_92D_SINGLEPHY;
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "Normal CHIP!!!\n");
+       }
+       return version;
+}
+
+static void _rtl92de_readpowervalue_fromprom(struct txpower_info *pwrinfo,
+                                            u8 *rom_content, bool autoloadfail)
+{
+       u32 rfpath, eeaddr, group, offset1, offset2;
+       u8 i;
+
+       memset(pwrinfo, 0, sizeof(struct txpower_info));
+       if (autoloadfail) {
+               for (group = 0; group < CHANNEL_GROUP_MAX; group++) {
+                       for (rfpath = 0; rfpath < RF6052_MAX_PATH; rfpath++) {
+                               if (group < CHANNEL_GROUP_MAX_2G) {
+                                       pwrinfo->cck_index[rfpath][group] =
+                                           EEPROM_DEFAULT_TXPOWERLEVEL_2G;
+                                       pwrinfo->ht40_1sindex[rfpath][group] =
+                                           EEPROM_DEFAULT_TXPOWERLEVEL_2G;
+                               } else {
+                                       pwrinfo->ht40_1sindex[rfpath][group] =
+                                           EEPROM_DEFAULT_TXPOWERLEVEL_5G;
+                               }
+                               pwrinfo->ht40_2sindexdiff[rfpath][group] =
+                                   EEPROM_DEFAULT_HT40_2SDIFF;
+                               pwrinfo->ht20indexdiff[rfpath][group] =
+                                   EEPROM_DEFAULT_HT20_DIFF;
+                               pwrinfo->ofdmindexdiff[rfpath][group] =
+                                   EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF;
+                               pwrinfo->ht40maxoffset[rfpath][group] =
+                                   EEPROM_DEFAULT_HT40_PWRMAXOFFSET;
+                               pwrinfo->ht20maxoffset[rfpath][group] =
+                                   EEPROM_DEFAULT_HT20_PWRMAXOFFSET;
+                       }
+               }
+               for (i = 0; i < 3; i++) {
+                       pwrinfo->tssi_a[i] = EEPROM_DEFAULT_TSSI;
+                       pwrinfo->tssi_b[i] = EEPROM_DEFAULT_TSSI;
+               }
+               return;
+       }
+
+       /* Maybe autoload OK,buf the tx power index value is not filled.
+        * If we find it, we set it to default value.
+        */
+       for (rfpath = 0; rfpath < RF6052_MAX_PATH; rfpath++) {
+               for (group = 0; group < CHANNEL_GROUP_MAX_2G; group++) {
+                       eeaddr = EEPROM_CCK_TX_PWR_INX_2G + (rfpath * 3)
+                                + group;
+                       pwrinfo->cck_index[rfpath][group] =
+                                       (rom_content[eeaddr] == 0xFF) ?
+                                            (eeaddr > 0x7B ?
+                                            EEPROM_DEFAULT_TXPOWERLEVEL_5G :
+                                            EEPROM_DEFAULT_TXPOWERLEVEL_2G) :
+                                            rom_content[eeaddr];
+               }
+       }
+       for (rfpath = 0; rfpath < RF6052_MAX_PATH; rfpath++) {
+               for (group = 0; group < CHANNEL_GROUP_MAX; group++) {
+                       offset1 = group / 3;
+                       offset2 = group % 3;
+                       eeaddr = EEPROM_HT40_1S_TX_PWR_INX_2G + (rfpath * 3) +
+                           offset2 + offset1 * 21;
+                       pwrinfo->ht40_1sindex[rfpath][group] =
+                           (rom_content[eeaddr] == 0xFF) ? (eeaddr > 0x7B ?
+                                            EEPROM_DEFAULT_TXPOWERLEVEL_5G :
+                                            EEPROM_DEFAULT_TXPOWERLEVEL_2G) :
+                                                rom_content[eeaddr];
+               }
+       }
+       /* These just for 92D efuse offset. */
+       for (group = 0; group < CHANNEL_GROUP_MAX; group++) {
+               for (rfpath = 0; rfpath < RF6052_MAX_PATH; rfpath++) {
+                       int base1 = EEPROM_HT40_2S_TX_PWR_INX_DIFF_2G;
+
+                       offset1 = group / 3;
+                       offset2 = group % 3;
+
+                       if (rom_content[base1 + offset2 + offset1 * 21] != 0xFF)
+                               pwrinfo->ht40_2sindexdiff[rfpath][group] =
+                                   (rom_content[base1 +
+                                    offset2 + offset1 * 21] >> (rfpath * 4))
+                                    & 0xF;
+                       else
+                               pwrinfo->ht40_2sindexdiff[rfpath][group] =
+                                   EEPROM_DEFAULT_HT40_2SDIFF;
+                       if (rom_content[EEPROM_HT20_TX_PWR_INX_DIFF_2G + offset2
+                           + offset1 * 21] != 0xFF)
+                               pwrinfo->ht20indexdiff[rfpath][group] =
+                                   (rom_content[EEPROM_HT20_TX_PWR_INX_DIFF_2G
+                                   + offset2 + offset1 * 21] >> (rfpath * 4))
+                                   & 0xF;
+                       else
+                               pwrinfo->ht20indexdiff[rfpath][group] =
+                                   EEPROM_DEFAULT_HT20_DIFF;
+                       if (rom_content[EEPROM_OFDM_TX_PWR_INX_DIFF_2G + offset2
+                           + offset1 * 21] != 0xFF)
+                               pwrinfo->ofdmindexdiff[rfpath][group] =
+                                   (rom_content[EEPROM_OFDM_TX_PWR_INX_DIFF_2G
+                                    + offset2 + offset1 * 21] >> (rfpath * 4))
+                                    & 0xF;
+                       else
+                               pwrinfo->ofdmindexdiff[rfpath][group] =
+                                   EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF;
+                       if (rom_content[EEPROM_HT40_MAX_PWR_OFFSET_2G + offset2
+                           + offset1 * 21] != 0xFF)
+                               pwrinfo->ht40maxoffset[rfpath][group] =
+                                   (rom_content[EEPROM_HT40_MAX_PWR_OFFSET_2G
+                                   + offset2 + offset1 * 21] >> (rfpath * 4))
+                                   & 0xF;
+                       else
+                               pwrinfo->ht40maxoffset[rfpath][group] =
+                                   EEPROM_DEFAULT_HT40_PWRMAXOFFSET;
+                       if (rom_content[EEPROM_HT20_MAX_PWR_OFFSET_2G + offset2
+                           + offset1 * 21] != 0xFF)
+                               pwrinfo->ht20maxoffset[rfpath][group] =
+                                   (rom_content[EEPROM_HT20_MAX_PWR_OFFSET_2G +
+                                    offset2 + offset1 * 21] >> (rfpath * 4)) &
+                                    0xF;
+                       else
+                               pwrinfo->ht20maxoffset[rfpath][group] =
+                                   EEPROM_DEFAULT_HT20_PWRMAXOFFSET;
+               }
+       }
+       if (rom_content[EEPROM_TSSI_A_5G] != 0xFF) {
+               /* 5GL */
+               pwrinfo->tssi_a[0] = rom_content[EEPROM_TSSI_A_5G] & 0x3F;
+               pwrinfo->tssi_b[0] = rom_content[EEPROM_TSSI_B_5G] & 0x3F;
+               /* 5GM */
+               pwrinfo->tssi_a[1] = rom_content[EEPROM_TSSI_AB_5G] & 0x3F;
+               pwrinfo->tssi_b[1] =
+                   (rom_content[EEPROM_TSSI_AB_5G] & 0xC0) >> 6 |
+                   (rom_content[EEPROM_TSSI_AB_5G + 1] & 0x0F) << 2;
+               /* 5GH */
+               pwrinfo->tssi_a[2] = (rom_content[EEPROM_TSSI_AB_5G + 1] &
+                                     0xF0) >> 4 |
+                   (rom_content[EEPROM_TSSI_AB_5G + 2] & 0x03) << 4;
+               pwrinfo->tssi_b[2] = (rom_content[EEPROM_TSSI_AB_5G + 2] &
+                                     0xFC) >> 2;
+       } else {
+               for (i = 0; i < 3; i++) {
+                       pwrinfo->tssi_a[i] = EEPROM_DEFAULT_TSSI;
+                       pwrinfo->tssi_b[i] = EEPROM_DEFAULT_TSSI;
+               }
+       }
+}
+
+static void _rtl92de_read_txpower_info(struct ieee80211_hw *hw,
+                                      bool autoload_fail, u8 *hwinfo)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       struct txpower_info pwrinfo;
+       u8 tempval[2], i, pwr, diff;
+       u32 ch, rfpath, group;
+
+       _rtl92de_readpowervalue_fromprom(&pwrinfo, hwinfo, autoload_fail);
+       if (!autoload_fail) {
+               /* bit0~2 */
+               rtlefuse->eeprom_regulatory = (hwinfo[EEPROM_RF_OPT1] & 0x7);
+               rtlefuse->eeprom_thermalmeter =
+                        hwinfo[EEPROM_THERMAL_METER] & 0x1f;
+               rtlefuse->crystalcap = hwinfo[EEPROM_XTAL_K];
+               tempval[0] = hwinfo[EEPROM_IQK_DELTA] & 0x03;
+               tempval[1] = (hwinfo[EEPROM_LCK_DELTA] & 0x0C) >> 2;
+               rtlefuse->txpwr_fromeprom = true;
+               if (IS_92D_D_CUT(rtlpriv->rtlhal.version) ||
+                   IS_92D_E_CUT(rtlpriv->rtlhal.version)) {
+                       rtlefuse->internal_pa_5g[0] =
+                               !((hwinfo[EEPROM_TSSI_A_5G] & BIT(6)) >> 6);
+                       rtlefuse->internal_pa_5g[1] =
+                               !((hwinfo[EEPROM_TSSI_B_5G] & BIT(6)) >> 6);
+                       rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
+                               "Is D cut,Internal PA0 %d Internal PA1 %d\n",
+                               rtlefuse->internal_pa_5g[0],
+                               rtlefuse->internal_pa_5g[1]);
+               }
+               rtlefuse->eeprom_c9 = hwinfo[EEPROM_RF_OPT6];
+               rtlefuse->eeprom_cc = hwinfo[EEPROM_RF_OPT7];
+       } else {
+               rtlefuse->eeprom_regulatory = 0;
+               rtlefuse->eeprom_thermalmeter = EEPROM_DEFAULT_THERMALMETER;
+               rtlefuse->crystalcap = EEPROM_DEFAULT_CRYSTALCAP;
+               tempval[0] = 3;
+               tempval[1] = tempval[0];
+       }
+
+       /* Use default value to fill parameters if
+        * efuse is not filled on some place.
+        */
+
+       /* ThermalMeter from EEPROM */
+       if (rtlefuse->eeprom_thermalmeter < 0x06 ||
+           rtlefuse->eeprom_thermalmeter > 0x1c)
+               rtlefuse->eeprom_thermalmeter = 0x12;
+       rtlefuse->thermalmeter[0] = rtlefuse->eeprom_thermalmeter;
+
+       /* check XTAL_K */
+       if (rtlefuse->crystalcap == 0xFF)
+               rtlefuse->crystalcap = 0;
+       if (rtlefuse->eeprom_regulatory > 3)
+               rtlefuse->eeprom_regulatory = 0;
+
+       for (i = 0; i < 2; i++) {
+               switch (tempval[i]) {
+               case 0:
+                       tempval[i] = 5;
+                       break;
+               case 1:
+                       tempval[i] = 4;
+                       break;
+               case 2:
+                       tempval[i] = 3;
+                       break;
+               case 3:
+               default:
+                       tempval[i] = 0;
+                       break;
+               }
+       }
+
+       rtlefuse->delta_iqk = tempval[0];
+       if (tempval[1] > 0)
+               rtlefuse->delta_lck = tempval[1] - 1;
+       if (rtlefuse->eeprom_c9 == 0xFF)
+               rtlefuse->eeprom_c9 = 0x00;
+       rtl_dbg(rtlpriv, COMP_INTR, DBG_LOUD,
+               "EEPROMRegulatory = 0x%x\n", rtlefuse->eeprom_regulatory);
+       rtl_dbg(rtlpriv, COMP_INTR, DBG_LOUD,
+               "ThermalMeter = 0x%x\n", rtlefuse->eeprom_thermalmeter);
+       rtl_dbg(rtlpriv, COMP_INTR, DBG_LOUD,
+               "CrystalCap = 0x%x\n", rtlefuse->crystalcap);
+       rtl_dbg(rtlpriv, COMP_INTR, DBG_LOUD,
+               "Delta_IQK = 0x%x Delta_LCK = 0x%x\n",
+               rtlefuse->delta_iqk, rtlefuse->delta_lck);
+
+       for (rfpath = 0; rfpath < RF6052_MAX_PATH; rfpath++) {
+               for (ch = 0; ch < CHANNEL_MAX_NUMBER; ch++) {
+                       group = rtl92d_get_chnlgroup_fromarray((u8)ch);
+                       if (ch < CHANNEL_MAX_NUMBER_2G)
+                               rtlefuse->txpwrlevel_cck[rfpath][ch] =
+                                   pwrinfo.cck_index[rfpath][group];
+                       rtlefuse->txpwrlevel_ht40_1s[rfpath][ch] =
+                                   pwrinfo.ht40_1sindex[rfpath][group];
+                       rtlefuse->txpwr_ht20diff[rfpath][ch] =
+                                   pwrinfo.ht20indexdiff[rfpath][group];
+                       rtlefuse->txpwr_legacyhtdiff[rfpath][ch] =
+                                   pwrinfo.ofdmindexdiff[rfpath][group];
+                       rtlefuse->pwrgroup_ht20[rfpath][ch] =
+                                   pwrinfo.ht20maxoffset[rfpath][group];
+                       rtlefuse->pwrgroup_ht40[rfpath][ch] =
+                                   pwrinfo.ht40maxoffset[rfpath][group];
+                       pwr = pwrinfo.ht40_1sindex[rfpath][group];
+                       diff = pwrinfo.ht40_2sindexdiff[rfpath][group];
+                       rtlefuse->txpwrlevel_ht40_2s[rfpath][ch] =
+                                   (pwr > diff) ? (pwr - diff) : 0;
+               }
+       }
+}
+
+static void _rtl92de_read_macphymode_from_prom(struct ieee80211_hw *hw,
+                                              u8 *content)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       u8 macphy_crvalue = content[EEPROM_MAC_FUNCTION];
+
+       if (macphy_crvalue & BIT(3)) {
+               rtlhal->macphymode = SINGLEMAC_SINGLEPHY;
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
+                       "MacPhyMode SINGLEMAC_SINGLEPHY\n");
+       } else {
+               rtlhal->macphymode = DUALMAC_DUALPHY;
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
+                       "MacPhyMode DUALMAC_DUALPHY\n");
+       }
+}
+
+static void _rtl92de_read_macphymode_and_bandtype(struct ieee80211_hw *hw,
+                                                 u8 *content)
+{
+       _rtl92de_read_macphymode_from_prom(hw, content);
+       rtl92d_phy_config_macphymode(hw);
+       rtl92d_phy_config_macphymode_info(hw);
+}
+
+static void _rtl92de_efuse_update_chip_version(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       enum version_8192d chipver = rtlpriv->rtlhal.version;
+       u8 cutvalue[2];
+       u16 chipvalue;
+
+       read_efuse_byte(hw, EEPROME_CHIP_VERSION_H, &cutvalue[1]);
+       read_efuse_byte(hw, EEPROME_CHIP_VERSION_L, &cutvalue[0]);
+       chipvalue = (cutvalue[1] << 8) | cutvalue[0];
+       switch (chipvalue) {
+       case 0xAA55:
+               chipver |= CHIP_92D_C_CUT;
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "C-CUT!!!\n");
+               break;
+       case 0x9966:
+               chipver |= CHIP_92D_D_CUT;
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "D-CUT!!!\n");
+               break;
+       case 0xCC33:
+               chipver |= CHIP_92D_E_CUT;
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "E-CUT!!!\n");
+               break;
+       default:
+               chipver |= CHIP_92D_D_CUT;
+               pr_err("Unknown CUT!\n");
+               break;
+       }
+       rtlpriv->rtlhal.version = chipver;
+}
+
+static void _rtl92de_read_adapter_info(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       int params[] = {RTL8190_EEPROM_ID, EEPROM_VID, EEPROM_DID,
+                       EEPROM_SVID, EEPROM_SMID, EEPROM_MAC_ADDR_MAC0_92D,
+                       EEPROM_CHANNEL_PLAN, EEPROM_VERSION, EEPROM_CUSTOMER_ID,
+                       COUNTRY_CODE_WORLD_WIDE_13};
+       int i;
+       u16 usvalue;
+       u8 *hwinfo;
+
+       hwinfo = kzalloc(HWSET_MAX_SIZE, GFP_KERNEL);
+       if (!hwinfo)
+               return;
+
+       if (rtl_get_hwinfo(hw, rtlpriv, HWSET_MAX_SIZE, hwinfo, params))
+               goto exit;
+
+       _rtl92de_efuse_update_chip_version(hw);
+       _rtl92de_read_macphymode_and_bandtype(hw, hwinfo);
+
+       /* Read Permanent MAC address for 2nd interface */
+       if (rtlhal->interfaceindex != 0) {
+               for (i = 0; i < 6; i += 2) {
+                       usvalue = *(u16 *)&hwinfo[EEPROM_MAC_ADDR_MAC1_92D + i];
+                       *((u16 *)(&rtlefuse->dev_addr[i])) = usvalue;
+               }
+       }
+       rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_ETHER_ADDR,
+                                     rtlefuse->dev_addr);
+       rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, "%pM\n", rtlefuse->dev_addr);
+       _rtl92de_read_txpower_info(hw, rtlefuse->autoload_failflag, hwinfo);
+
+       /* Read Channel Plan */
+       switch (rtlhal->bandset) {
+       case BAND_ON_2_4G:
+               rtlefuse->channel_plan = COUNTRY_CODE_TELEC;
+               break;
+       case BAND_ON_5G:
+               rtlefuse->channel_plan = COUNTRY_CODE_FCC;
+               break;
+       case BAND_ON_BOTH:
+               rtlefuse->channel_plan = COUNTRY_CODE_FCC;
+               break;
+       default:
+               rtlefuse->channel_plan = COUNTRY_CODE_FCC;
+               break;
+       }
+       rtlefuse->txpwr_fromeprom = true;
+exit:
+       kfree(hwinfo);
+}
+
+void rtl92de_read_eeprom_info(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       u8 tmp_u1b;
+
+       rtlhal->version = _rtl92d_read_chip_version(hw);
+       tmp_u1b = rtl_read_byte(rtlpriv, REG_9346CR);
+       rtlefuse->autoload_status = tmp_u1b;
+       if (tmp_u1b & BIT(4)) {
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, "Boot from EEPROM\n");
+               rtlefuse->epromtype = EEPROM_93C46;
+       } else {
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, "Boot from EFUSE\n");
+               rtlefuse->epromtype = EEPROM_BOOT_EFUSE;
+       }
+       if (tmp_u1b & BIT(5)) {
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "Autoload OK\n");
+
+               rtlefuse->autoload_failflag = false;
+               _rtl92de_read_adapter_info(hw);
+       } else {
+               pr_err("Autoload ERR!!\n");
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92de_read_eeprom_info);
+
+static void rtl92de_update_hal_rate_table(struct ieee80211_hw *hw,
+                                         struct ieee80211_sta *sta)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       u32 ratr_value;
+       u8 ratr_index = 0;
+       u8 nmode = mac->ht_enable;
+       u8 mimo_ps = IEEE80211_SMPS_OFF;
+       u16 shortgi_rate;
+       u32 tmp_ratr_value;
+       u8 curtxbw_40mhz = mac->bw_40;
+       u8 curshortgi_40mhz = (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ?
+                                                       1 : 0;
+       u8 curshortgi_20mhz = (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ?
+                                                       1 : 0;
+       enum wireless_mode wirelessmode = mac->mode;
+
+       if (rtlhal->current_bandtype == BAND_ON_5G)
+               ratr_value = sta->deflink.supp_rates[1] << 4;
+       else
+               ratr_value = sta->deflink.supp_rates[0];
+       ratr_value |= (sta->deflink.ht_cap.mcs.rx_mask[1] << 20 |
+                      sta->deflink.ht_cap.mcs.rx_mask[0] << 12);
+       switch (wirelessmode) {
+       case WIRELESS_MODE_A:
+               ratr_value &= 0x00000FF0;
+               break;
+       case WIRELESS_MODE_B:
+               if (ratr_value & 0x0000000c)
+                       ratr_value &= 0x0000000d;
+               else
+                       ratr_value &= 0x0000000f;
+               break;
+       case WIRELESS_MODE_G:
+               ratr_value &= 0x00000FF5;
+               break;
+       case WIRELESS_MODE_N_24G:
+       case WIRELESS_MODE_N_5G:
+               nmode = 1;
+               if (mimo_ps == IEEE80211_SMPS_STATIC) {
+                       ratr_value &= 0x0007F005;
+               } else {
+                       u32 ratr_mask;
+
+                       if (get_rf_type(rtlphy) == RF_1T2R ||
+                           get_rf_type(rtlphy) == RF_1T1R) {
+                               ratr_mask = 0x000ff005;
+                       } else {
+                               ratr_mask = 0x0f0ff005;
+                       }
+
+                       ratr_value &= ratr_mask;
+               }
+               break;
+       default:
+               if (rtlphy->rf_type == RF_1T2R)
+                       ratr_value &= 0x000ff0ff;
+               else
+                       ratr_value &= 0x0f0ff0ff;
+
+               break;
+       }
+       ratr_value &= 0x0FFFFFFF;
+       if (nmode && ((curtxbw_40mhz && curshortgi_40mhz) ||
+                     (!curtxbw_40mhz && curshortgi_20mhz))) {
+               ratr_value |= 0x10000000;
+               tmp_ratr_value = (ratr_value >> 12);
+               for (shortgi_rate = 15; shortgi_rate > 0; shortgi_rate--) {
+                       if ((1 << shortgi_rate) & tmp_ratr_value)
+                               break;
+               }
+               shortgi_rate = (shortgi_rate << 12) | (shortgi_rate << 8) |
+                   (shortgi_rate << 4) | (shortgi_rate);
+       }
+       rtl_write_dword(rtlpriv, REG_ARFR0 + ratr_index * 4, ratr_value);
+       rtl_dbg(rtlpriv, COMP_RATR, DBG_DMESG, "%x\n",
+               rtl_read_dword(rtlpriv, REG_ARFR0));
+}
+
+static void rtl92de_update_hal_rate_mask(struct ieee80211_hw *hw,
+                                        struct ieee80211_sta *sta,
+                                        u8 rssi_level, bool update_bw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       struct rtl_sta_info *sta_entry = NULL;
+       u32 ratr_bitmap;
+       u8 ratr_index;
+       u8 curtxbw_40mhz = (sta->deflink.bandwidth >= IEEE80211_STA_RX_BW_40) ? 1 : 0;
+       u8 curshortgi_40mhz = (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ?
+                                                       1 : 0;
+       u8 curshortgi_20mhz = (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ?
+                                                       1 : 0;
+       enum wireless_mode wirelessmode = 0;
+       bool shortgi = false;
+       u32 value[2];
+       u8 macid = 0;
+       u8 mimo_ps = IEEE80211_SMPS_OFF;
+
+       sta_entry = (struct rtl_sta_info *)sta->drv_priv;
+       mimo_ps = sta_entry->mimo_ps;
+       wirelessmode = sta_entry->wireless_mode;
+       if (mac->opmode == NL80211_IFTYPE_STATION)
+               curtxbw_40mhz = mac->bw_40;
+       else if (mac->opmode == NL80211_IFTYPE_AP ||
+                mac->opmode == NL80211_IFTYPE_ADHOC)
+               macid = sta->aid + 1;
+
+       if (rtlhal->current_bandtype == BAND_ON_5G)
+               ratr_bitmap = sta->deflink.supp_rates[1] << 4;
+       else
+               ratr_bitmap = sta->deflink.supp_rates[0];
+       ratr_bitmap |= (sta->deflink.ht_cap.mcs.rx_mask[1] << 20 |
+                       sta->deflink.ht_cap.mcs.rx_mask[0] << 12);
+       switch (wirelessmode) {
+       case WIRELESS_MODE_B:
+               ratr_index = RATR_INX_WIRELESS_B;
+               if (ratr_bitmap & 0x0000000c)
+                       ratr_bitmap &= 0x0000000d;
+               else
+                       ratr_bitmap &= 0x0000000f;
+               break;
+       case WIRELESS_MODE_G:
+               ratr_index = RATR_INX_WIRELESS_GB;
+
+               if (rssi_level == 1)
+                       ratr_bitmap &= 0x00000f00;
+               else if (rssi_level == 2)
+                       ratr_bitmap &= 0x00000ff0;
+               else
+                       ratr_bitmap &= 0x00000ff5;
+               break;
+       case WIRELESS_MODE_A:
+               ratr_index = RATR_INX_WIRELESS_G;
+               ratr_bitmap &= 0x00000ff0;
+               break;
+       case WIRELESS_MODE_N_24G:
+       case WIRELESS_MODE_N_5G:
+               if (wirelessmode == WIRELESS_MODE_N_24G)
+                       ratr_index = RATR_INX_WIRELESS_NGB;
+               else
+                       ratr_index = RATR_INX_WIRELESS_NG;
+               if (mimo_ps == IEEE80211_SMPS_STATIC) {
+                       if (rssi_level == 1)
+                               ratr_bitmap &= 0x00070000;
+                       else if (rssi_level == 2)
+                               ratr_bitmap &= 0x0007f000;
+                       else
+                               ratr_bitmap &= 0x0007f005;
+               } else {
+                       if (rtlphy->rf_type == RF_1T2R ||
+                           rtlphy->rf_type == RF_1T1R) {
+                               if (curtxbw_40mhz) {
+                                       if (rssi_level == 1)
+                                               ratr_bitmap &= 0x000f0000;
+                                       else if (rssi_level == 2)
+                                               ratr_bitmap &= 0x000ff000;
+                                       else
+                                               ratr_bitmap &= 0x000ff015;
+                               } else {
+                                       if (rssi_level == 1)
+                                               ratr_bitmap &= 0x000f0000;
+                                       else if (rssi_level == 2)
+                                               ratr_bitmap &= 0x000ff000;
+                                       else
+                                               ratr_bitmap &= 0x000ff005;
+                               }
+                       } else {
+                               if (curtxbw_40mhz) {
+                                       if (rssi_level == 1)
+                                               ratr_bitmap &= 0x0f0f0000;
+                                       else if (rssi_level == 2)
+                                               ratr_bitmap &= 0x0f0ff000;
+                                       else
+                                               ratr_bitmap &= 0x0f0ff015;
+                               } else {
+                                       if (rssi_level == 1)
+                                               ratr_bitmap &= 0x0f0f0000;
+                                       else if (rssi_level == 2)
+                                               ratr_bitmap &= 0x0f0ff000;
+                                       else
+                                               ratr_bitmap &= 0x0f0ff005;
+                               }
+                       }
+               }
+               if ((curtxbw_40mhz && curshortgi_40mhz) ||
+                   (!curtxbw_40mhz && curshortgi_20mhz)) {
+                       if (macid == 0)
+                               shortgi = true;
+                       else if (macid == 1)
+                               shortgi = false;
+               }
+               break;
+       default:
+               ratr_index = RATR_INX_WIRELESS_NGB;
+
+               if (rtlphy->rf_type == RF_1T2R)
+                       ratr_bitmap &= 0x000ff0ff;
+               else
+                       ratr_bitmap &= 0x0f0ff0ff;
+               break;
+       }
+
+       value[0] = (ratr_bitmap & 0x0fffffff) | (ratr_index << 28);
+       value[1] = macid | (shortgi ? 0x20 : 0x00) | 0x80;
+       rtl_dbg(rtlpriv, COMP_RATR, DBG_DMESG,
+               "ratr_bitmap :%x value0:%x value1:%x\n",
+               ratr_bitmap, value[0], value[1]);
+       rtl92d_fill_h2c_cmd(hw, H2C_RA_MASK, 5, (u8 *)value);
+       if (macid != 0)
+               sta_entry->ratr_index = ratr_index;
+}
+
+void rtl92de_update_hal_rate_tbl(struct ieee80211_hw *hw,
+                                struct ieee80211_sta *sta,
+                                u8 rssi_level, bool update_bw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+
+       if (rtlpriv->dm.useramask)
+               rtl92de_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
+       else
+               rtl92de_update_hal_rate_table(hw, sta);
+}
+EXPORT_SYMBOL_GPL(rtl92de_update_hal_rate_tbl);
+
+void rtl92de_update_channel_access_setting(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
+       u16 sifs_timer;
+
+       rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SLOT_TIME,
+                                     &mac->slot_time);
+       if (!mac->ht_enable)
+               sifs_timer = 0x0a0a;
+       else
+               sifs_timer = 0x1010;
+       rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SIFS, (u8 *)&sifs_timer);
+}
+EXPORT_SYMBOL_GPL(rtl92de_update_channel_access_setting);
+
+bool rtl92de_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
+       struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
+       enum rf_pwrstate e_rfpowerstate_toset;
+       u8 u1tmp;
+       bool actuallyset = false;
+       unsigned long flag;
+
+       if (rtlpci->being_init_adapter)
+               return false;
+       if (ppsc->swrf_processing)
+               return false;
+       spin_lock_irqsave(&rtlpriv->locks.rf_ps_lock, flag);
+       if (ppsc->rfchange_inprogress) {
+               spin_unlock_irqrestore(&rtlpriv->locks.rf_ps_lock, flag);
+               return false;
+       }
+
+       ppsc->rfchange_inprogress = true;
+       spin_unlock_irqrestore(&rtlpriv->locks.rf_ps_lock, flag);
+
+       rtl_write_byte(rtlpriv, REG_MAC_PINMUX_CFG,
+                      rtl_read_byte(rtlpriv, REG_MAC_PINMUX_CFG) & ~(BIT(3)));
+       u1tmp = rtl_read_byte(rtlpriv, REG_GPIO_IO_SEL);
+       e_rfpowerstate_toset = (u1tmp & BIT(3)) ? ERFON : ERFOFF;
+       if (ppsc->hwradiooff && e_rfpowerstate_toset == ERFON) {
+               rtl_dbg(rtlpriv, COMP_RF, DBG_DMESG,
+                       "GPIOChangeRF  - HW Radio ON, RF ON\n");
+               e_rfpowerstate_toset = ERFON;
+               ppsc->hwradiooff = false;
+               actuallyset = true;
+       } else if (!ppsc->hwradiooff && e_rfpowerstate_toset == ERFOFF) {
+               rtl_dbg(rtlpriv, COMP_RF, DBG_DMESG,
+                       "GPIOChangeRF  - HW Radio OFF, RF OFF\n");
+               e_rfpowerstate_toset = ERFOFF;
+               ppsc->hwradiooff = true;
+               actuallyset = true;
+       }
+       if (actuallyset) {
+               spin_lock_irqsave(&rtlpriv->locks.rf_ps_lock, flag);
+               ppsc->rfchange_inprogress = false;
+               spin_unlock_irqrestore(&rtlpriv->locks.rf_ps_lock, flag);
+       } else {
+               if (ppsc->reg_rfps_level & RT_RF_OFF_LEVL_HALT_NIC)
+                       RT_SET_PS_LEVEL(ppsc, RT_RF_OFF_LEVL_HALT_NIC);
+               spin_lock_irqsave(&rtlpriv->locks.rf_ps_lock, flag);
+               ppsc->rfchange_inprogress = false;
+               spin_unlock_irqrestore(&rtlpriv->locks.rf_ps_lock, flag);
+       }
+       *valid = 1;
+       return !ppsc->hwradiooff;
+}
+EXPORT_SYMBOL_GPL(rtl92de_gpio_radio_on_off_checking);
+
+void rtl92de_set_key(struct ieee80211_hw *hw, u32 key_index,
+                    u8 *p_macaddr, bool is_group, u8 enc_algo,
+                    bool is_wepkey, bool clear_all)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       const u8 *macaddr = p_macaddr;
+       u32 entry_id;
+       bool is_pairwise = false;
+       static const u8 cam_const_addr[4][6] = {
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
+               {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}
+       };
+       static const u8 cam_const_broad[] = {
+               0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+       };
+
+       if (clear_all) {
+               u8 idx;
+               u8 cam_offset = 0;
+               u8 clear_number = 5;
+
+               rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, "clear_all\n");
+               for (idx = 0; idx < clear_number; idx++) {
+                       rtl_cam_mark_invalid(hw, cam_offset + idx);
+                       rtl_cam_empty_entry(hw, cam_offset + idx);
+
+                       if (idx < 5) {
+                               memset(rtlpriv->sec.key_buf[idx], 0,
+                                      MAX_KEY_LEN);
+                               rtlpriv->sec.key_len[idx] = 0;
+                       }
+               }
+
+               return;
+       }
+
+       switch (enc_algo) {
+       case WEP40_ENCRYPTION:
+               enc_algo = CAM_WEP40;
+               break;
+       case WEP104_ENCRYPTION:
+               enc_algo = CAM_WEP104;
+               break;
+       case TKIP_ENCRYPTION:
+               enc_algo = CAM_TKIP;
+               break;
+       case AESCCMP_ENCRYPTION:
+               enc_algo = CAM_AES;
+               break;
+       default:
+               pr_err("switch case %#x not processed\n",
+                      enc_algo);
+               enc_algo = CAM_TKIP;
+               break;
+       }
+       if (is_wepkey || rtlpriv->sec.use_defaultkey) {
+               macaddr = cam_const_addr[key_index];
+               entry_id = key_index;
+       } else {
+               if (is_group) {
+                       macaddr = cam_const_broad;
+                       entry_id = key_index;
+               } else {
+                       if (mac->opmode == NL80211_IFTYPE_AP) {
+                               entry_id = rtl_cam_get_free_entry(hw, p_macaddr);
+                               if (entry_id >=  TOTAL_CAM_ENTRY) {
+                                       pr_err("Can not find free hw security cam entry\n");
+                                       return;
+                               }
+                       } else {
+                               entry_id = CAM_PAIRWISE_KEY_POSITION;
+                       }
+                       key_index = PAIRWISE_KEYIDX;
+                       is_pairwise = true;
+               }
+       }
+       if (rtlpriv->sec.key_len[key_index] == 0) {
+               rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
+                       "delete one entry, entry_id is %d\n",
+                       entry_id);
+               if (mac->opmode == NL80211_IFTYPE_AP)
+                       rtl_cam_del_entry(hw, p_macaddr);
+               rtl_cam_delete_one_entry(hw, p_macaddr, entry_id);
+       } else {
+               rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD,
+                       "The insert KEY length is %d\n",
+                       rtlpriv->sec.key_len[PAIRWISE_KEYIDX]);
+               rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD,
+                       "The insert KEY is %x %x\n",
+                       rtlpriv->sec.key_buf[0][0],
+                       rtlpriv->sec.key_buf[0][1]);
+               rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
+                       "add one entry\n");
+               if (is_pairwise) {
+                       RT_PRINT_DATA(rtlpriv, COMP_SEC, DBG_LOUD,
+                                     "Pairwise Key content",
+                                     rtlpriv->sec.pairwise_key,
+                                     rtlpriv->sec.key_len[PAIRWISE_KEYIDX]);
+                       rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
+                               "set Pairwise key\n");
+                       rtl_cam_add_one_entry(hw, macaddr, key_index,
+                                             entry_id, enc_algo,
+                                             CAM_CONFIG_NO_USEDK,
+                                             rtlpriv->sec.key_buf[key_index]);
+               } else {
+                       rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
+                               "set group key\n");
+                       if (mac->opmode == NL80211_IFTYPE_ADHOC) {
+                               rtl_cam_add_one_entry(hw,
+                                       rtlefuse->dev_addr,
+                                       PAIRWISE_KEYIDX,
+                                       CAM_PAIRWISE_KEY_POSITION,
+                                       enc_algo, CAM_CONFIG_NO_USEDK,
+                                       rtlpriv->sec.key_buf[entry_id]);
+                       }
+                       rtl_cam_add_one_entry(hw, macaddr, key_index,
+                                             entry_id, enc_algo,
+                                             CAM_CONFIG_NO_USEDK,
+                                             rtlpriv->sec.key_buf
+                                             [entry_id]);
+               }
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92de_set_key);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.h
new file mode 100644 (file)
index 0000000..2c07f5c
--- /dev/null
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#ifndef __RTL92D_HW_COMMON_H__
+#define __RTL92D_HW_COMMON_H__
+
+void rtl92de_stop_tx_beacon(struct ieee80211_hw *hw);
+void rtl92de_resume_tx_beacon(struct ieee80211_hw *hw);
+void rtl92d_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
+void rtl92d_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
+bool rtl92de_llt_write(struct ieee80211_hw *hw, u32 address, u32 data);
+void rtl92de_enable_hw_security_config(struct ieee80211_hw *hw);
+void rtl92de_set_qos(struct ieee80211_hw *hw, int aci);
+void rtl92de_read_eeprom_info(struct ieee80211_hw *hw);
+void rtl92de_update_hal_rate_tbl(struct ieee80211_hw *hw,
+                                struct ieee80211_sta *sta,
+                                u8 rssi_level, bool update_bw);
+void rtl92de_update_channel_access_setting(struct ieee80211_hw *hw);
+bool rtl92de_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid);
+void rtl92de_set_key(struct ieee80211_hw *hw, u32 key_index,
+                    u8 *p_macaddr, bool is_group, u8 enc_algo,
+                    bool is_wepkey, bool clear_all);
+
+#endif
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/main.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/main.c
new file mode 100644 (file)
index 0000000..e58dc40
--- /dev/null
@@ -0,0 +1,9 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#include "../wifi.h"
+#include <linux/module.h>
+
+MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>");
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("Realtek 8192D 802.11n common routines");
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.c
new file mode 100644 (file)
index 0000000..87c458b
--- /dev/null
@@ -0,0 +1,846 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#include "../wifi.h"
+#include "../core.h"
+#include "def.h"
+#include "reg.h"
+#include "dm_common.h"
+#include "phy_common.h"
+#include "rf_common.h"
+
+static const u8 channel_all[59] = {
+       1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+       36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
+       60, 62, 64, 100, 102, 104, 106, 108, 110, 112,
+       114, 116, 118, 120, 122, 124, 126, 128, 130,
+       132, 134, 136, 138, 140, 149, 151, 153, 155,
+       157, 159, 161, 163, 165
+};
+
+static u32 _rtl92d_phy_rf_serial_read(struct ieee80211_hw *hw,
+                                     enum radio_path rfpath, u32 offset)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath];
+       u32 newoffset;
+       u32 tmplong, tmplong2;
+       u8 rfpi_enable = 0;
+       u32 retvalue;
+
+       newoffset = offset;
+       tmplong = rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD);
+       if (rfpath == RF90_PATH_A)
+               tmplong2 = tmplong;
+       else
+               tmplong2 = rtl_get_bbreg(hw, pphyreg->rfhssi_para2, MASKDWORD);
+       tmplong2 = (tmplong2 & (~BLSSIREADADDRESS)) |
+               (newoffset << 23) | BLSSIREADEDGE;
+       rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD,
+                     tmplong & (~BLSSIREADEDGE));
+       udelay(10);
+       rtl_set_bbreg(hw, pphyreg->rfhssi_para2, MASKDWORD, tmplong2);
+       udelay(50);
+       udelay(50);
+       rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD,
+                     tmplong | BLSSIREADEDGE);
+       udelay(10);
+       if (rfpath == RF90_PATH_A)
+               rfpi_enable = (u8)rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER1,
+                                               BIT(8));
+       else if (rfpath == RF90_PATH_B)
+               rfpi_enable = (u8)rtl_get_bbreg(hw, RFPGA0_XB_HSSIPARAMETER1,
+                                               BIT(8));
+       if (rfpi_enable)
+               retvalue = rtl_get_bbreg(hw, pphyreg->rf_rbpi,
+                                        BLSSIREADBACKDATA);
+       else
+               retvalue = rtl_get_bbreg(hw, pphyreg->rf_rb,
+                                        BLSSIREADBACKDATA);
+       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE, "RFR-%d Addr[0x%x] = 0x%x\n",
+               rfpath, pphyreg->rf_rb, retvalue);
+       return retvalue;
+}
+
+static void _rtl92d_phy_rf_serial_write(struct ieee80211_hw *hw,
+                                       enum radio_path rfpath,
+                                       u32 offset, u32 data)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath];
+       u32 data_and_addr;
+       u32 newoffset;
+
+       newoffset = offset;
+       /* T65 RF */
+       data_and_addr = ((newoffset << 20) | (data & 0x000fffff)) & 0x0fffffff;
+       rtl_set_bbreg(hw, pphyreg->rf3wire_offset, MASKDWORD, data_and_addr);
+       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE, "RFW-%d Addr[0x%x]=0x%x\n",
+               rfpath, pphyreg->rf3wire_offset, data_and_addr);
+}
+
+u32 rtl92d_phy_query_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
+                           u32 regaddr, u32 bitmask)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u32 original_value, readback_value, bitshift;
+
+       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE,
+               "regaddr(%#x), rfpath(%#x), bitmask(%#x)\n",
+               regaddr, rfpath, bitmask);
+       spin_lock(&rtlpriv->locks.rf_lock);
+       original_value = _rtl92d_phy_rf_serial_read(hw, rfpath, regaddr);
+       bitshift = calculate_bit_shift(bitmask);
+       readback_value = (original_value & bitmask) >> bitshift;
+       spin_unlock(&rtlpriv->locks.rf_lock);
+       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE,
+               "regaddr(%#x), rfpath(%#x), bitmask(%#x), original_value(%#x)\n",
+               regaddr, rfpath, bitmask, original_value);
+       return readback_value;
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_query_rf_reg);
+
+void rtl92d_phy_set_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
+                          u32 regaddr, u32 bitmask, u32 data)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       u32 original_value, bitshift;
+
+       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE,
+               "regaddr(%#x), bitmask(%#x), data(%#x), rfpath(%#x)\n",
+               regaddr, bitmask, data, rfpath);
+       if (bitmask == 0)
+               return;
+       spin_lock(&rtlpriv->locks.rf_lock);
+       if (rtlphy->rf_mode != RF_OP_BY_FW) {
+               if (bitmask != RFREG_OFFSET_MASK) {
+                       original_value = _rtl92d_phy_rf_serial_read(hw,
+                                                                   rfpath,
+                                                                   regaddr);
+                       bitshift = calculate_bit_shift(bitmask);
+                       data = ((original_value & (~bitmask)) |
+                               (data << bitshift));
+               }
+               _rtl92d_phy_rf_serial_write(hw, rfpath, regaddr, data);
+       }
+       spin_unlock(&rtlpriv->locks.rf_lock);
+       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE,
+               "regaddr(%#x), bitmask(%#x), data(%#x), rfpath(%#x)\n",
+               regaddr, bitmask, data, rfpath);
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_set_rf_reg);
+
+void rtl92d_phy_init_bb_rf_register_definition(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+
+       /* RF Interface Sowrtware Control */
+       /* 16 LSBs if read 32-bit from 0x870 */
+       rtlphy->phyreg_def[RF90_PATH_A].rfintfs = RFPGA0_XAB_RFINTERFACESW;
+       /* 16 MSBs if read 32-bit from 0x870 (16-bit for 0x872) */
+       rtlphy->phyreg_def[RF90_PATH_B].rfintfs = RFPGA0_XAB_RFINTERFACESW;
+       /* 16 LSBs if read 32-bit from 0x874 */
+       rtlphy->phyreg_def[RF90_PATH_C].rfintfs = RFPGA0_XCD_RFINTERFACESW;
+       /* 16 MSBs if read 32-bit from 0x874 (16-bit for 0x876) */
+
+       rtlphy->phyreg_def[RF90_PATH_D].rfintfs = RFPGA0_XCD_RFINTERFACESW;
+       /* RF Interface Readback Value */
+       /* 16 LSBs if read 32-bit from 0x8E0 */
+       rtlphy->phyreg_def[RF90_PATH_A].rfintfi = RFPGA0_XAB_RFINTERFACERB;
+       /* 16 MSBs if read 32-bit from 0x8E0 (16-bit for 0x8E2) */
+       rtlphy->phyreg_def[RF90_PATH_B].rfintfi = RFPGA0_XAB_RFINTERFACERB;
+       /* 16 LSBs if read 32-bit from 0x8E4 */
+       rtlphy->phyreg_def[RF90_PATH_C].rfintfi = RFPGA0_XCD_RFINTERFACERB;
+       /* 16 MSBs if read 32-bit from 0x8E4 (16-bit for 0x8E6) */
+       rtlphy->phyreg_def[RF90_PATH_D].rfintfi = RFPGA0_XCD_RFINTERFACERB;
+
+       /* RF Interface Output (and Enable) */
+       /* 16 LSBs if read 32-bit from 0x860 */
+       rtlphy->phyreg_def[RF90_PATH_A].rfintfo = RFPGA0_XA_RFINTERFACEOE;
+       /* 16 LSBs if read 32-bit from 0x864 */
+       rtlphy->phyreg_def[RF90_PATH_B].rfintfo = RFPGA0_XB_RFINTERFACEOE;
+
+       /* RF Interface (Output and)  Enable */
+       /* 16 MSBs if read 32-bit from 0x860 (16-bit for 0x862) */
+       rtlphy->phyreg_def[RF90_PATH_A].rfintfe = RFPGA0_XA_RFINTERFACEOE;
+       /* 16 MSBs if read 32-bit from 0x864 (16-bit for 0x866) */
+       rtlphy->phyreg_def[RF90_PATH_B].rfintfe = RFPGA0_XB_RFINTERFACEOE;
+
+       /* Addr of LSSI. Write RF register by driver */
+       /* LSSI Parameter */
+       rtlphy->phyreg_def[RF90_PATH_A].rf3wire_offset =
+                                RFPGA0_XA_LSSIPARAMETER;
+       rtlphy->phyreg_def[RF90_PATH_B].rf3wire_offset =
+                                RFPGA0_XB_LSSIPARAMETER;
+
+       /* RF parameter */
+       /* BB Band Select */
+       rtlphy->phyreg_def[RF90_PATH_A].rflssi_select = RFPGA0_XAB_RFPARAMETER;
+       rtlphy->phyreg_def[RF90_PATH_B].rflssi_select = RFPGA0_XAB_RFPARAMETER;
+       rtlphy->phyreg_def[RF90_PATH_C].rflssi_select = RFPGA0_XCD_RFPARAMETER;
+       rtlphy->phyreg_def[RF90_PATH_D].rflssi_select = RFPGA0_XCD_RFPARAMETER;
+
+       /* Tx AGC Gain Stage (same for all path. Should we remove this?) */
+       /* Tx gain stage */
+       rtlphy->phyreg_def[RF90_PATH_A].rftxgain_stage = RFPGA0_TXGAINSTAGE;
+       /* Tx gain stage */
+       rtlphy->phyreg_def[RF90_PATH_B].rftxgain_stage = RFPGA0_TXGAINSTAGE;
+       /* Tx gain stage */
+       rtlphy->phyreg_def[RF90_PATH_C].rftxgain_stage = RFPGA0_TXGAINSTAGE;
+       /* Tx gain stage */
+       rtlphy->phyreg_def[RF90_PATH_D].rftxgain_stage = RFPGA0_TXGAINSTAGE;
+
+       /* Transceiver A~D HSSI Parameter-1 */
+       /* wire control parameter1 */
+       rtlphy->phyreg_def[RF90_PATH_A].rfhssi_para1 = RFPGA0_XA_HSSIPARAMETER1;
+       /* wire control parameter1 */
+       rtlphy->phyreg_def[RF90_PATH_B].rfhssi_para1 = RFPGA0_XB_HSSIPARAMETER1;
+
+       /* Transceiver A~D HSSI Parameter-2 */
+       /* wire control parameter2 */
+       rtlphy->phyreg_def[RF90_PATH_A].rfhssi_para2 = RFPGA0_XA_HSSIPARAMETER2;
+       /* wire control parameter2 */
+       rtlphy->phyreg_def[RF90_PATH_B].rfhssi_para2 = RFPGA0_XB_HSSIPARAMETER2;
+
+       /* RF switch Control */
+       /* TR/Ant switch control */
+       rtlphy->phyreg_def[RF90_PATH_A].rfsw_ctrl = RFPGA0_XAB_SWITCHCONTROL;
+       rtlphy->phyreg_def[RF90_PATH_B].rfsw_ctrl = RFPGA0_XAB_SWITCHCONTROL;
+       rtlphy->phyreg_def[RF90_PATH_C].rfsw_ctrl = RFPGA0_XCD_SWITCHCONTROL;
+       rtlphy->phyreg_def[RF90_PATH_D].rfsw_ctrl = RFPGA0_XCD_SWITCHCONTROL;
+
+       /* AGC control 1 */
+       rtlphy->phyreg_def[RF90_PATH_A].rfagc_control1 = ROFDM0_XAAGCCORE1;
+       rtlphy->phyreg_def[RF90_PATH_B].rfagc_control1 = ROFDM0_XBAGCCORE1;
+       rtlphy->phyreg_def[RF90_PATH_C].rfagc_control1 = ROFDM0_XCAGCCORE1;
+       rtlphy->phyreg_def[RF90_PATH_D].rfagc_control1 = ROFDM0_XDAGCCORE1;
+
+       /* AGC control 2  */
+       rtlphy->phyreg_def[RF90_PATH_A].rfagc_control2 = ROFDM0_XAAGCCORE2;
+       rtlphy->phyreg_def[RF90_PATH_B].rfagc_control2 = ROFDM0_XBAGCCORE2;
+       rtlphy->phyreg_def[RF90_PATH_C].rfagc_control2 = ROFDM0_XCAGCCORE2;
+       rtlphy->phyreg_def[RF90_PATH_D].rfagc_control2 = ROFDM0_XDAGCCORE2;
+
+       /* RX AFE control 1 */
+       rtlphy->phyreg_def[RF90_PATH_A].rfrxiq_imbal = ROFDM0_XARXIQIMBALANCE;
+       rtlphy->phyreg_def[RF90_PATH_B].rfrxiq_imbal = ROFDM0_XBRXIQIMBALANCE;
+       rtlphy->phyreg_def[RF90_PATH_C].rfrxiq_imbal = ROFDM0_XCRXIQIMBALANCE;
+       rtlphy->phyreg_def[RF90_PATH_D].rfrxiq_imbal = ROFDM0_XDRXIQIMBALANCE;
+
+       /*RX AFE control 1 */
+       rtlphy->phyreg_def[RF90_PATH_A].rfrx_afe = ROFDM0_XARXAFE;
+       rtlphy->phyreg_def[RF90_PATH_B].rfrx_afe = ROFDM0_XBRXAFE;
+       rtlphy->phyreg_def[RF90_PATH_C].rfrx_afe = ROFDM0_XCRXAFE;
+       rtlphy->phyreg_def[RF90_PATH_D].rfrx_afe = ROFDM0_XDRXAFE;
+
+       /* Tx AFE control 1 */
+       rtlphy->phyreg_def[RF90_PATH_A].rftxiq_imbal = ROFDM0_XATXIQIMBALANCE;
+       rtlphy->phyreg_def[RF90_PATH_B].rftxiq_imbal = ROFDM0_XBTXIQIMBALANCE;
+       rtlphy->phyreg_def[RF90_PATH_C].rftxiq_imbal = ROFDM0_XCTXIQIMBALANCE;
+       rtlphy->phyreg_def[RF90_PATH_D].rftxiq_imbal = ROFDM0_XDTXIQIMBALANCE;
+
+       /* Tx AFE control 2 */
+       rtlphy->phyreg_def[RF90_PATH_A].rftx_afe = ROFDM0_XATXAFE;
+       rtlphy->phyreg_def[RF90_PATH_B].rftx_afe = ROFDM0_XBTXAFE;
+       rtlphy->phyreg_def[RF90_PATH_C].rftx_afe = ROFDM0_XCTXAFE;
+       rtlphy->phyreg_def[RF90_PATH_D].rftx_afe = ROFDM0_XDTXAFE;
+
+       /* Transceiver LSSI Readback SI mode */
+       rtlphy->phyreg_def[RF90_PATH_A].rf_rb = RFPGA0_XA_LSSIREADBACK;
+       rtlphy->phyreg_def[RF90_PATH_B].rf_rb = RFPGA0_XB_LSSIREADBACK;
+       rtlphy->phyreg_def[RF90_PATH_C].rf_rb = RFPGA0_XC_LSSIREADBACK;
+       rtlphy->phyreg_def[RF90_PATH_D].rf_rb = RFPGA0_XD_LSSIREADBACK;
+
+       /* Transceiver LSSI Readback PI mode */
+       rtlphy->phyreg_def[RF90_PATH_A].rf_rbpi = TRANSCEIVERA_HSPI_READBACK;
+       rtlphy->phyreg_def[RF90_PATH_B].rf_rbpi = TRANSCEIVERB_HSPI_READBACK;
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_init_bb_rf_register_definition);
+
+void rtl92d_store_pwrindex_diffrate_offset(struct ieee80211_hw *hw,
+                                          u32 regaddr, u32 bitmask, u32 data)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       int index;
+
+       if (regaddr == RTXAGC_A_RATE18_06)
+               index = 0;
+       else if (regaddr == RTXAGC_A_RATE54_24)
+               index = 1;
+       else if (regaddr == RTXAGC_A_CCK1_MCS32)
+               index = 6;
+       else if (regaddr == RTXAGC_B_CCK11_A_CCK2_11 && bitmask == 0xffffff00)
+               index = 7;
+       else if (regaddr == RTXAGC_A_MCS03_MCS00)
+               index = 2;
+       else if (regaddr == RTXAGC_A_MCS07_MCS04)
+               index = 3;
+       else if (regaddr == RTXAGC_A_MCS11_MCS08)
+               index = 4;
+       else if (regaddr == RTXAGC_A_MCS15_MCS12)
+               index = 5;
+       else if (regaddr == RTXAGC_B_RATE18_06)
+               index = 8;
+       else if (regaddr == RTXAGC_B_RATE54_24)
+               index = 9;
+       else if (regaddr == RTXAGC_B_CCK1_55_MCS32)
+               index = 14;
+       else if (regaddr == RTXAGC_B_CCK11_A_CCK2_11 && bitmask == 0x000000ff)
+               index = 15;
+       else if (regaddr == RTXAGC_B_MCS03_MCS00)
+               index = 10;
+       else if (regaddr == RTXAGC_B_MCS07_MCS04)
+               index = 11;
+       else if (regaddr == RTXAGC_B_MCS11_MCS08)
+               index = 12;
+       else if (regaddr == RTXAGC_B_MCS15_MCS12)
+               index = 13;
+       else
+               return;
+
+       rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][index] = data;
+       rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE,
+               "MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n",
+               rtlphy->pwrgroup_cnt, index,
+               rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][index]);
+       if (index == 13)
+               rtlphy->pwrgroup_cnt++;
+}
+EXPORT_SYMBOL_GPL(rtl92d_store_pwrindex_diffrate_offset);
+
+void rtl92d_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+
+       rtlphy->default_initialgain[0] =
+           (u8)rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, MASKBYTE0);
+       rtlphy->default_initialgain[1] =
+           (u8)rtl_get_bbreg(hw, ROFDM0_XBAGCCORE1, MASKBYTE0);
+       rtlphy->default_initialgain[2] =
+           (u8)rtl_get_bbreg(hw, ROFDM0_XCAGCCORE1, MASKBYTE0);
+       rtlphy->default_initialgain[3] =
+           (u8)rtl_get_bbreg(hw, ROFDM0_XDAGCCORE1, MASKBYTE0);
+       rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE,
+               "Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x\n",
+               rtlphy->default_initialgain[0],
+               rtlphy->default_initialgain[1],
+               rtlphy->default_initialgain[2],
+               rtlphy->default_initialgain[3]);
+       rtlphy->framesync = (u8)rtl_get_bbreg(hw, ROFDM0_RXDETECTOR3,
+                                             MASKBYTE0);
+       rtlphy->framesync_c34 = rtl_get_bbreg(hw, ROFDM0_RXDETECTOR2,
+                                             MASKDWORD);
+       rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE,
+               "Default framesync (0x%x) = 0x%x\n",
+               ROFDM0_RXDETECTOR3, rtlphy->framesync);
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_get_hw_reg_originalvalue);
+
+static void _rtl92d_get_txpower_index(struct ieee80211_hw *hw, u8 channel,
+                                     u8 *cckpowerlevel, u8 *ofdmpowerlevel)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       struct rtl_hal *rtlhal = &rtlpriv->rtlhal;
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       u8 index = (channel - 1);
+
+       /* 1. CCK */
+       if (rtlhal->current_bandtype == BAND_ON_2_4G) {
+               /* RF-A */
+               cckpowerlevel[RF90_PATH_A] =
+                                rtlefuse->txpwrlevel_cck[RF90_PATH_A][index];
+               /* RF-B */
+               cckpowerlevel[RF90_PATH_B] =
+                                rtlefuse->txpwrlevel_cck[RF90_PATH_B][index];
+       } else {
+               cckpowerlevel[RF90_PATH_A] = 0;
+               cckpowerlevel[RF90_PATH_B] = 0;
+       }
+       /* 2. OFDM for 1S or 2S */
+       if (rtlphy->rf_type == RF_1T2R || rtlphy->rf_type == RF_1T1R) {
+               /*  Read HT 40 OFDM TX power */
+               ofdmpowerlevel[RF90_PATH_A] =
+                   rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_A][index];
+               ofdmpowerlevel[RF90_PATH_B] =
+                   rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_B][index];
+       } else if (rtlphy->rf_type == RF_2T2R) {
+               /* Read HT 40 OFDM TX power */
+               ofdmpowerlevel[RF90_PATH_A] =
+                   rtlefuse->txpwrlevel_ht40_2s[RF90_PATH_A][index];
+               ofdmpowerlevel[RF90_PATH_B] =
+                   rtlefuse->txpwrlevel_ht40_2s[RF90_PATH_B][index];
+       }
+}
+
+static void _rtl92d_ccxpower_index_check(struct ieee80211_hw *hw,
+                                        u8 channel, u8 *cckpowerlevel,
+                                        u8 *ofdmpowerlevel)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+
+       rtlphy->cur_cck_txpwridx = cckpowerlevel[0];
+       rtlphy->cur_ofdm24g_txpwridx = ofdmpowerlevel[0];
+}
+
+static u8 _rtl92c_phy_get_rightchnlplace(u8 chnl)
+{
+       u8 place = chnl;
+
+       if (chnl > 14) {
+               for (place = 14; place < ARRAY_SIZE(channel_all); place++) {
+                       if (channel_all[place] == chnl) {
+                               place++;
+                               break;
+                       }
+               }
+       }
+       return place;
+}
+
+void rtl92d_phy_set_txpower_level(struct ieee80211_hw *hw, u8 channel)
+{
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u8 cckpowerlevel[2], ofdmpowerlevel[2];
+
+       if (!rtlefuse->txpwr_fromeprom)
+               return;
+       channel = _rtl92c_phy_get_rightchnlplace(channel);
+       _rtl92d_get_txpower_index(hw, channel, &cckpowerlevel[0],
+                                 &ofdmpowerlevel[0]);
+       if (rtlpriv->rtlhal.current_bandtype == BAND_ON_2_4G)
+               _rtl92d_ccxpower_index_check(hw, channel, &cckpowerlevel[0],
+                                            &ofdmpowerlevel[0]);
+       if (rtlpriv->rtlhal.current_bandtype == BAND_ON_2_4G)
+               rtl92d_phy_rf6052_set_cck_txpower(hw, &cckpowerlevel[0]);
+       rtl92d_phy_rf6052_set_ofdm_txpower(hw, &ofdmpowerlevel[0], channel);
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_set_txpower_level);
+
+void rtl92d_phy_enable_rf_env(struct ieee80211_hw *hw, u8 rfpath,
+                             u32 *pu4_regval)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath];
+
+       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "====>\n");
+       /*----Store original RFENV control type----*/
+       switch (rfpath) {
+       case RF90_PATH_A:
+       case RF90_PATH_C:
+               *pu4_regval = rtl_get_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV);
+               break;
+       case RF90_PATH_B:
+       case RF90_PATH_D:
+               *pu4_regval =
+                   rtl_get_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV << 16);
+               break;
+       }
+       /*----Set RF_ENV enable----*/
+       rtl_set_bbreg(hw, pphyreg->rfintfe, BRFSI_RFENV << 16, 0x1);
+       udelay(1);
+       /*----Set RF_ENV output high----*/
+       rtl_set_bbreg(hw, pphyreg->rfintfo, BRFSI_RFENV, 0x1);
+       udelay(1);
+       /* Set bit number of Address and Data for RF register */
+       /* Set 1 to 4 bits for 8255 */
+       rtl_set_bbreg(hw, pphyreg->rfhssi_para2, B3WIREADDRESSLENGTH, 0x0);
+       udelay(1);
+       /*Set 0 to 12 bits for 8255 */
+       rtl_set_bbreg(hw, pphyreg->rfhssi_para2, B3WIREDATALENGTH, 0x0);
+       udelay(1);
+       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "<====\n");
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_enable_rf_env);
+
+void rtl92d_phy_restore_rf_env(struct ieee80211_hw *hw, u8 rfpath,
+                              u32 *pu4_regval)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath];
+
+       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "=====>\n");
+       /*----Restore RFENV control type----*/
+       switch (rfpath) {
+       case RF90_PATH_A:
+       case RF90_PATH_C:
+               rtl_set_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV, *pu4_regval);
+               break;
+       case RF90_PATH_B:
+       case RF90_PATH_D:
+               rtl_set_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV << 16,
+                             *pu4_regval);
+               break;
+       }
+       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "<=====\n");
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_restore_rf_env);
+
+u8 rtl92d_get_rightchnlplace_for_iqk(u8 chnl)
+{
+       u8 place;
+
+       if (chnl > 14) {
+               for (place = 14; place < ARRAY_SIZE(channel_all); place++) {
+                       if (channel_all[place] == chnl)
+                               return place - 13;
+               }
+       }
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(rtl92d_get_rightchnlplace_for_iqk);
+
+void rtl92d_phy_save_adda_registers(struct ieee80211_hw *hw, const u32 *adda_reg,
+                                   u32 *adda_backup, u32 regnum)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u32 i;
+
+       RTPRINT(rtlpriv, FINIT, INIT_IQK,  "Save ADDA parameters.\n");
+       for (i = 0; i < regnum; i++)
+               adda_backup[i] = rtl_get_bbreg(hw, adda_reg[i], MASKDWORD);
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_save_adda_registers);
+
+void rtl92d_phy_save_mac_registers(struct ieee80211_hw *hw,
+                                  const u32 *macreg, u32 *macbackup)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u32 i;
+
+       RTPRINT(rtlpriv, FINIT, INIT_IQK,  "Save MAC parameters.\n");
+       for (i = 0; i < (IQK_MAC_REG_NUM - 1); i++)
+               macbackup[i] = rtl_read_byte(rtlpriv, macreg[i]);
+       macbackup[i] = rtl_read_dword(rtlpriv, macreg[i]);
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_save_mac_registers);
+
+void rtl92d_phy_path_adda_on(struct ieee80211_hw *hw,
+                            const u32 *adda_reg, bool patha_on, bool is2t)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u32 pathon;
+       u32 i;
+
+       RTPRINT(rtlpriv, FINIT, INIT_IQK,  "ADDA ON.\n");
+       pathon = patha_on ? 0x04db25a4 : 0x0b1b25a4;
+       if (patha_on)
+               pathon = rtlpriv->rtlhal.interfaceindex == 0 ?
+                   0x04db25a4 : 0x0b1b25a4;
+       for (i = 0; i < IQK_ADDA_REG_NUM; i++)
+               rtl_set_bbreg(hw, adda_reg[i], MASKDWORD, pathon);
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_path_adda_on);
+
+void rtl92d_phy_mac_setting_calibration(struct ieee80211_hw *hw,
+                                       const u32 *macreg, u32 *macbackup)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u32 i;
+
+       RTPRINT(rtlpriv, FINIT, INIT_IQK, "MAC settings for Calibration.\n");
+       rtl_write_byte(rtlpriv, macreg[0], 0x3F);
+
+       for (i = 1; i < (IQK_MAC_REG_NUM - 1); i++)
+               rtl_write_byte(rtlpriv, macreg[i], (u8)(macbackup[i] &
+                              (~BIT(3))));
+       rtl_write_byte(rtlpriv, macreg[i], (u8)(macbackup[i] & (~BIT(5))));
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_mac_setting_calibration);
+
+static u32 _rtl92d_phy_get_abs(u32 val1, u32 val2)
+{
+       u32 ret;
+
+       if (val1 >= val2)
+               ret = val1 - val2;
+       else
+               ret = val2 - val1;
+       return ret;
+}
+
+static bool _rtl92d_is_legal_5g_channel(struct ieee80211_hw *hw, u8 channel)
+{
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(channel5g); i++)
+               if (channel == channel5g[i])
+                       return true;
+       return false;
+}
+
+void rtl92d_phy_calc_curvindex(struct ieee80211_hw *hw,
+                              const u32 *targetchnl, u32 *curvecount_val,
+                              bool is5g, u32 *curveindex)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u32 smallest_abs_val = 0xffffffff, u4tmp;
+       u8 i, j;
+       u8 chnl_num = is5g ? TARGET_CHNL_NUM_5G : TARGET_CHNL_NUM_2G;
+
+       for (i = 0; i < chnl_num; i++) {
+               if (is5g && !_rtl92d_is_legal_5g_channel(hw, i + 1))
+                       continue;
+               curveindex[i] = 0;
+               for (j = 0; j < (CV_CURVE_CNT * 2); j++) {
+                       u4tmp = _rtl92d_phy_get_abs(targetchnl[i],
+                                                   curvecount_val[j]);
+
+                       if (u4tmp < smallest_abs_val) {
+                               curveindex[i] = j;
+                               smallest_abs_val = u4tmp;
+                       }
+               }
+               smallest_abs_val = 0xffffffff;
+               RTPRINT(rtlpriv, FINIT, INIT_IQK, "curveindex[%d] = %x\n",
+                       i, curveindex[i]);
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_calc_curvindex);
+
+void rtl92d_phy_reset_iqk_result(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       u8 i;
+
+       rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
+               "settings regs %zu default regs %d\n",
+               ARRAY_SIZE(rtlphy->iqk_matrix),
+               IQK_MATRIX_REG_NUM);
+       /* 0xe94, 0xe9c, 0xea4, 0xeac, 0xeb4, 0xebc, 0xec4, 0xecc */
+       for (i = 0; i < IQK_MATRIX_SETTINGS_NUM; i++) {
+               rtlphy->iqk_matrix[i].value[0][0] = 0x100;
+               rtlphy->iqk_matrix[i].value[0][2] = 0x100;
+               rtlphy->iqk_matrix[i].value[0][4] = 0x100;
+               rtlphy->iqk_matrix[i].value[0][6] = 0x100;
+               rtlphy->iqk_matrix[i].value[0][1] = 0x0;
+               rtlphy->iqk_matrix[i].value[0][3] = 0x0;
+               rtlphy->iqk_matrix[i].value[0][5] = 0x0;
+               rtlphy->iqk_matrix[i].value[0][7] = 0x0;
+               rtlphy->iqk_matrix[i].iqk_done = false;
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_reset_iqk_result);
+
+static void rtl92d_phy_set_io(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+
+       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE,
+               "--->Cmd(%#x), set_io_inprogress(%d)\n",
+               rtlphy->current_io_type, rtlphy->set_io_inprogress);
+       switch (rtlphy->current_io_type) {
+       case IO_CMD_RESUME_DM_BY_SCAN:
+               de_digtable->cur_igvalue = rtlphy->initgain_backup.xaagccore1;
+               rtl92d_dm_write_dig(hw);
+               rtl92d_phy_set_txpower_level(hw, rtlphy->current_channel);
+               break;
+       case IO_CMD_PAUSE_DM_BY_SCAN:
+               rtlphy->initgain_backup.xaagccore1 = de_digtable->cur_igvalue;
+               de_digtable->cur_igvalue = 0x37;
+               rtl92d_dm_write_dig(hw);
+               break;
+       default:
+               pr_err("switch case %#x not processed\n",
+                      rtlphy->current_io_type);
+               break;
+       }
+       rtlphy->set_io_inprogress = false;
+       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE, "<---(%#x)\n",
+               rtlphy->current_io_type);
+}
+
+bool rtl92d_phy_set_io_cmd(struct ieee80211_hw *hw, enum io_type iotype)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       bool postprocessing = false;
+
+       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE,
+               "-->IO Cmd(%#x), set_io_inprogress(%d)\n",
+                iotype, rtlphy->set_io_inprogress);
+       do {
+               switch (iotype) {
+               case IO_CMD_RESUME_DM_BY_SCAN:
+                       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE,
+                               "[IO CMD] Resume DM after scan\n");
+                       postprocessing = true;
+                       break;
+               case IO_CMD_PAUSE_DM_BY_SCAN:
+                       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE,
+                               "[IO CMD] Pause DM before scan\n");
+                       postprocessing = true;
+                       break;
+               default:
+                       pr_err("switch case %#x not processed\n",
+                              iotype);
+                       break;
+               }
+       } while (false);
+       if (postprocessing && !rtlphy->set_io_inprogress) {
+               rtlphy->set_io_inprogress = true;
+               rtlphy->current_io_type = iotype;
+       } else {
+               return false;
+       }
+       rtl92d_phy_set_io(hw);
+       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE, "<--IO Type(%#x)\n", iotype);
+       return true;
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_set_io_cmd);
+
+void rtl92d_phy_config_macphymode(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       u8 offset = REG_MAC_PHY_CTRL_NORMAL;
+
+       switch (rtlhal->macphymode) {
+       case DUALMAC_DUALPHY:
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
+                       "MacPhyMode: DUALMAC_DUALPHY\n");
+               rtl_write_byte(rtlpriv, offset, 0xF3);
+               break;
+       case SINGLEMAC_SINGLEPHY:
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
+                       "MacPhyMode: SINGLEMAC_SINGLEPHY\n");
+               rtl_write_byte(rtlpriv, offset, 0xF4);
+               break;
+       case DUALMAC_SINGLEPHY:
+               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
+                       "MacPhyMode: DUALMAC_SINGLEPHY\n");
+               rtl_write_byte(rtlpriv, offset, 0xF1);
+               break;
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_config_macphymode);
+
+void rtl92d_phy_config_macphymode_info(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+
+       switch (rtlhal->macphymode) {
+       case DUALMAC_SINGLEPHY:
+               rtlphy->rf_type = RF_2T2R;
+               rtlhal->version |= RF_TYPE_2T2R;
+               rtlhal->bandset = BAND_ON_BOTH;
+               rtlhal->current_bandtype = BAND_ON_2_4G;
+               break;
+
+       case SINGLEMAC_SINGLEPHY:
+               rtlphy->rf_type = RF_2T2R;
+               rtlhal->version |= RF_TYPE_2T2R;
+               rtlhal->bandset = BAND_ON_BOTH;
+               rtlhal->current_bandtype = BAND_ON_2_4G;
+               break;
+
+       case DUALMAC_DUALPHY:
+               rtlphy->rf_type = RF_1T1R;
+               rtlhal->version &= RF_TYPE_1T1R;
+               /* Now we let MAC0 run on 5G band. */
+               if (rtlhal->interfaceindex == 0) {
+                       rtlhal->bandset = BAND_ON_5G;
+                       rtlhal->current_bandtype = BAND_ON_5G;
+               } else {
+                       rtlhal->bandset = BAND_ON_2_4G;
+                       rtlhal->current_bandtype = BAND_ON_2_4G;
+               }
+               break;
+       default:
+               break;
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_config_macphymode_info);
+
+u8 rtl92d_get_chnlgroup_fromarray(u8 chnl)
+{
+       u8 group;
+
+       if (channel_all[chnl] <= 3)
+               group = 0;
+       else if (channel_all[chnl] <= 9)
+               group = 1;
+       else if (channel_all[chnl] <= 14)
+               group = 2;
+       else if (channel_all[chnl] <= 44)
+               group = 3;
+       else if (channel_all[chnl] <= 54)
+               group = 4;
+       else if (channel_all[chnl] <= 64)
+               group = 5;
+       else if (channel_all[chnl] <= 112)
+               group = 6;
+       else if (channel_all[chnl] <= 126)
+               group = 7;
+       else if (channel_all[chnl] <= 140)
+               group = 8;
+       else if (channel_all[chnl] <= 153)
+               group = 9;
+       else if (channel_all[chnl] <= 159)
+               group = 10;
+       else
+               group = 11;
+       return group;
+}
+EXPORT_SYMBOL_GPL(rtl92d_get_chnlgroup_fromarray);
+
+u8 rtl92d_phy_get_chnlgroup_bypg(u8 chnlindex)
+{
+       u8 group;
+
+       if (channel_all[chnlindex] <= 3)        /* Chanel 1-3 */
+               group = 0;
+       else if (channel_all[chnlindex] <= 9)   /* Channel 4-9 */
+               group = 1;
+       else if (channel_all[chnlindex] <= 14)  /* Channel 10-14 */
+               group = 2;
+       else if (channel_all[chnlindex] <= 64)
+               group = 6;
+       else if (channel_all[chnlindex] <= 140)
+               group = 7;
+       else
+               group = 8;
+       return group;
+}
+
+void rtl92d_phy_config_maccoexist_rfpage(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+
+       switch (rtlpriv->rtlhal.macphymode) {
+       case DUALMAC_DUALPHY:
+               rtl_write_byte(rtlpriv, REG_DMC, 0x0);
+               rtl_write_byte(rtlpriv, REG_RX_PKT_LIMIT, 0x08);
+               rtl_write_word(rtlpriv, REG_TRXFF_BNDY + 2, 0x13ff);
+               break;
+       case DUALMAC_SINGLEPHY:
+               rtl_write_byte(rtlpriv, REG_DMC, 0xf8);
+               rtl_write_byte(rtlpriv, REG_RX_PKT_LIMIT, 0x08);
+               rtl_write_word(rtlpriv, REG_TRXFF_BNDY + 2, 0x13ff);
+               break;
+       case SINGLEMAC_SINGLEPHY:
+               rtl_write_byte(rtlpriv, REG_DMC, 0x0);
+               rtl_write_byte(rtlpriv, REG_RX_PKT_LIMIT, 0x10);
+               rtl_write_word(rtlpriv, (REG_TRXFF_BNDY + 2), 0x27FF);
+               break;
+       default:
+               break;
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_config_maccoexist_rfpage);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.h
new file mode 100644 (file)
index 0000000..f9b5d0d
--- /dev/null
@@ -0,0 +1,87 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#ifndef __RTL92D_PHY_COMMON_H__
+#define __RTL92D_PHY_COMMON_H__
+
+#define TARGET_CHNL_NUM_5G                     221
+#define TARGET_CHNL_NUM_2G                     14
+#define CV_CURVE_CNT                           64
+#define RT_CANNOT_IO(hw)                       false
+#define RX_INDEX_MAPPING_NUM                   15
+#define IQK_BB_REG_NUM                         10
+
+#define IQK_DELAY_TIME                         1
+#define MAX_TOLERANCE                          5
+#define MAX_TOLERANCE_92D                      3
+
+enum baseband_config_type {
+       BASEBAND_CONFIG_PHY_REG = 0,
+       BASEBAND_CONFIG_AGC_TAB = 1,
+};
+
+enum rf_content {
+       radioa_txt = 0,
+       radiob_txt = 1,
+       radioc_txt = 2,
+       radiod_txt = 3
+};
+
+static inline void rtl92d_acquire_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
+                                                    unsigned long *flag)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+
+       if (rtlpriv->rtlhal.interfaceindex == 1)
+               spin_lock_irqsave(&rtlpriv->locks.cck_and_rw_pagea_lock, *flag);
+}
+
+static inline void rtl92d_release_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
+                                                    unsigned long *flag)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+
+       if (rtlpriv->rtlhal.interfaceindex == 1)
+               spin_unlock_irqrestore(&rtlpriv->locks.cck_and_rw_pagea_lock,
+                                      *flag);
+}
+
+u32 rtl92d_phy_query_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
+                           u32 regaddr, u32 bitmask);
+void rtl92d_phy_set_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
+                          u32 regaddr, u32 bitmask, u32 data);
+void rtl92d_phy_init_bb_rf_register_definition(struct ieee80211_hw *hw);
+void rtl92d_store_pwrindex_diffrate_offset(struct ieee80211_hw *hw,
+                                          u32 regaddr, u32 bitmask, u32 data);
+void rtl92d_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw);
+void rtl92d_phy_set_txpower_level(struct ieee80211_hw *hw, u8 channel);
+void rtl92d_phy_enable_rf_env(struct ieee80211_hw *hw, u8 rfpath,
+                             u32 *pu4_regval);
+void rtl92d_phy_restore_rf_env(struct ieee80211_hw *hw, u8 rfpath,
+                              u32 *pu4_regval);
+u8 rtl92d_get_rightchnlplace_for_iqk(u8 chnl);
+void rtl92d_phy_save_adda_registers(struct ieee80211_hw *hw, const u32 *adda_reg,
+                                   u32 *adda_backup, u32 regnum);
+void rtl92d_phy_save_mac_registers(struct ieee80211_hw *hw,
+                                  const u32 *macreg, u32 *macbackup);
+void rtl92d_phy_path_adda_on(struct ieee80211_hw *hw,
+                            const u32 *adda_reg, bool patha_on, bool is2t);
+void rtl92d_phy_mac_setting_calibration(struct ieee80211_hw *hw,
+                                       const u32 *macreg, u32 *macbackup);
+void rtl92d_phy_calc_curvindex(struct ieee80211_hw *hw,
+                              const u32 *targetchnl, u32 *curvecount_val,
+                              bool is5g, u32 *curveindex);
+void rtl92d_phy_reset_iqk_result(struct ieee80211_hw *hw);
+bool rtl92d_phy_set_io_cmd(struct ieee80211_hw *hw, enum io_type iotype);
+void rtl92d_phy_config_macphymode(struct ieee80211_hw *hw);
+void rtl92d_phy_config_macphymode_info(struct ieee80211_hw *hw);
+u8 rtl92d_get_chnlgroup_fromarray(u8 chnl);
+u8 rtl92d_phy_get_chnlgroup_bypg(u8 chnlindex);
+void rtl92d_phy_config_maccoexist_rfpage(struct ieee80211_hw *hw);
+/* Without these declarations sparse warns about context imbalance. */
+void rtl92d_acquire_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
+                                      unsigned long *flag);
+void rtl92d_release_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
+                                      unsigned long *flag);
+
+#endif
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/reg.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/reg.h
new file mode 100644 (file)
index 0000000..2783d7e
--- /dev/null
@@ -0,0 +1,1273 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#ifndef __RTL92D_REG_H__
+#define __RTL92D_REG_H__
+
+/* ----------------------------------------------------- */
+/* 0x0000h ~ 0x00FFh System Configuration */
+/* ----------------------------------------------------- */
+#define REG_SYS_ISO_CTRL               0x0000
+#define REG_SYS_FUNC_EN                        0x0002
+#define REG_APS_FSMCO                  0x0004
+#define REG_SYS_CLKR                   0x0008
+#define REG_9346CR                     0x000A
+#define REG_EE_VPD                     0x000C
+#define REG_AFE_MISC                   0x0010
+#define REG_SPS0_CTRL                  0x0011
+#define REG_POWER_OFF_IN_PROCESS       0x0017
+#define REG_SPS_OCP_CFG                        0x0018
+#define REG_RSV_CTRL                   0x001C
+#define REG_RF_CTRL                    0x001F
+#define REG_LDOA15_CTRL                        0x0020
+#define REG_LDOV12D_CTRL               0x0021
+#define REG_LDOHCI12_CTRL              0x0022
+#define REG_LPLDO_CTRL                 0x0023
+#define REG_AFE_XTAL_CTRL              0x0024
+#define REG_AFE_PLL_CTRL               0x0028
+/* for 92d, DMDP,SMSP,DMSP contrl */
+#define REG_MAC_PHY_CTRL               0x002c
+#define REG_EFUSE_CTRL                 0x0030
+#define REG_EFUSE_TEST                 0x0034
+#define REG_PWR_DATA                   0x0038
+#define REG_CAL_TIMER                  0x003C
+#define REG_ACLK_MON                   0x003E
+#define REG_GPIO_MUXCFG                        0x0040
+#define REG_GPIO_IO_SEL                        0x0042
+#define REG_MAC_PINMUX_CFG             0x0043
+#define REG_GPIO_PIN_CTRL              0x0044
+#define REG_GPIO_INTM                  0x0048
+#define REG_LEDCFG0                    0x004C
+#define REG_LEDCFG1                    0x004D
+#define REG_LEDCFG2                    0x004E
+#define REG_LEDCFG3                    0x004F
+#define REG_FSIMR                      0x0050
+#define REG_FSISR                      0x0054
+
+#define REG_MCUFWDL                    0x0080
+
+#define REG_HMEBOX_EXT_0               0x0088
+#define REG_HMEBOX_EXT_1               0x008A
+#define REG_HMEBOX_EXT_2               0x008C
+#define REG_HMEBOX_EXT_3               0x008E
+
+#define REG_BIST_SCAN                  0x00D0
+#define REG_BIST_RPT                   0x00D4
+#define REG_BIST_ROM_RPT               0x00D8
+#define REG_USB_SIE_INTF               0x00E0
+#define REG_PCIE_MIO_INTF              0x00E4
+#define REG_PCIE_MIO_INTD              0x00E8
+#define REG_HPON_FSM                   0x00EC
+#define REG_SYS_CFG                    0x00F0
+#define REG_MAC_PHY_CTRL_NORMAL                0x00f8
+
+#define  REG_MAC0                      0x0081
+#define  REG_MAC1                      0x0053
+#define  FW_MAC0_READY                 0x18
+#define  FW_MAC1_READY                 0x1A
+#define  MAC0_ON                       BIT(7)
+#define  MAC1_ON                       BIT(0)
+#define  MAC0_READY                    BIT(0)
+#define  MAC1_READY                    BIT(0)
+
+/* ----------------------------------------------------- */
+/* 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_TRXFF_STATUS               0x0118
+#define REG_RXFF_PTR                   0x011C
+#define REG_HIMR                       0x0120
+#define REG_HISR                       0x0124
+#define REG_HIMRE                      0x0128
+#define REG_HISRE                      0x012C
+#define REG_CPWM                       0x012F
+#define REG_FWIMR                      0x0130
+#define REG_FWISR                      0x0134
+#define REG_PKTBUF_DBG_CTRL            0x0140
+#define REG_PKTBUF_DBG_DATA_L          0x0144
+#define REG_PKTBUF_DBG_DATA_H          0x0148
+
+#define REG_TC0_CTRL                   0x0150
+#define REG_TC1_CTRL                   0x0154
+#define REG_TC2_CTRL                   0x0158
+#define REG_TC3_CTRL                   0x015C
+#define REG_TC4_CTRL                   0x0160
+#define REG_TCUNIT_BASE                        0x0164
+#define REG_MBIST_START                        0x0174
+#define REG_MBIST_DONE                 0x0178
+#define REG_MBIST_FAIL                 0x017C
+#define REG_C2HEVT_MSG_NORMAL          0x01A0
+#define REG_C2HEVT_MSG_TEST            0x01B8
+#define REG_C2HEVT_CLEAR               0x01BF
+#define REG_MCUTST_1                   0x01c0
+#define REG_FMETHR                     0x01C8
+#define REG_HMETFR                     0x01CC
+#define REG_HMEBOX_0                   0x01D0
+#define REG_HMEBOX_1                   0x01D4
+#define REG_HMEBOX_2                   0x01D8
+#define REG_HMEBOX_3                   0x01DC
+
+#define REG_LLT_INIT                   0x01E0
+#define REG_BB_ACCEESS_CTRL            0x01E8
+#define REG_BB_ACCESS_DATA             0x01EC
+
+
+/* ----------------------------------------------------- */
+/*     0x0200h ~ 0x027Fh       TXDMA Configuration */
+/* ----------------------------------------------------- */
+#define REG_RQPN                       0x0200
+#define REG_FIFOPAGE                   0x0204
+#define REG_TDECTRL                    0x0208
+#define REG_TXDMA_OFFSET_CHK           0x020C
+#define REG_TXDMA_STATUS               0x0210
+#define REG_RQPN_NPQ                   0x0214
+
+/* ----------------------------------------------------- */
+/*     0x0280h ~ 0x02FFh       RXDMA Configuration */
+/* ----------------------------------------------------- */
+#define REG_RXDMA_AGG_PG_TH            0x0280
+#define REG_RXPKT_NUM                  0x0284
+#define REG_RXDMA_STATUS               0x0288
+
+/* ----------------------------------------------------- */
+/*     0x0300h ~ 0x03FFh       PCIe  */
+/* ----------------------------------------------------- */
+#define        REG_PCIE_CTRL_REG               0x0300
+#define        REG_INT_MIG                     0x0304
+#define        REG_BCNQ_DESA                   0x0308
+#define        REG_HQ_DESA                     0x0310
+#define        REG_MGQ_DESA                    0x0318
+#define        REG_VOQ_DESA                    0x0320
+#define        REG_VIQ_DESA                    0x0328
+#define        REG_BEQ_DESA                    0x0330
+#define        REG_BKQ_DESA                    0x0338
+#define        REG_RX_DESA                     0x0340
+#define        REG_DBI                         0x0348
+#define        REG_DBI_WDATA                   0x0348
+#define REG_DBI_RDATA                  0x034C
+#define REG_DBI_CTRL                   0x0350
+#define REG_DBI_FLAG                   0x0352
+#define        REG_MDIO                        0x0354
+#define        REG_DBG_SEL                     0x0360
+#define        REG_PCIE_HRPWM                  0x0361
+#define        REG_PCIE_HCPWM                  0x0363
+#define        REG_UART_CTRL                   0x0364
+#define        REG_UART_TX_DESA                0x0370
+#define        REG_UART_RX_DESA                0x0378
+
+/* ----------------------------------------------------- */
+/*     0x0400h ~ 0x047Fh       Protocol Configuration  */
+/* ----------------------------------------------------- */
+#define REG_VOQ_INFORMATION            0x0400
+#define REG_VIQ_INFORMATION            0x0404
+#define REG_BEQ_INFORMATION            0x0408
+#define REG_BKQ_INFORMATION            0x040C
+#define REG_MGQ_INFORMATION            0x0410
+#define REG_HGQ_INFORMATION            0x0414
+#define REG_BCNQ_INFORMATION           0x0418
+
+
+#define REG_CPU_MGQ_INFORMATION                0x041C
+#define REG_FWHW_TXQ_CTRL              0x0420
+#define REG_HWSEQ_CTRL                 0x0423
+#define REG_TXPKTBUF_BCNQ_BDNY         0x0424
+#define REG_TXPKTBUF_MGQ_BDNY          0x0425
+#define REG_MULTI_BCNQ_EN              0x0426
+#define REG_MULTI_BCNQ_OFFSET          0x0427
+#define REG_SPEC_SIFS                  0x0428
+#define REG_RL                         0x042A
+#define REG_DARFRC                     0x0430
+#define REG_RARFRC                     0x0438
+#define REG_RRSR                       0x0440
+#define REG_ARFR0                      0x0444
+#define REG_ARFR1                      0x0448
+#define REG_ARFR2                      0x044C
+#define REG_ARFR3                      0x0450
+#define REG_AGGLEN_LMT                 0x0458
+#define REG_AMPDU_MIN_SPACE            0x045C
+#define REG_TXPKTBUF_WMAC_LBK_BF_HD    0x045D
+#define REG_FAST_EDCA_CTRL             0x0460
+#define REG_RD_RESP_PKT_TH             0x0463
+#define REG_INIRTS_RATE_SEL            0x0480
+#define REG_INIDATA_RATE_SEL           0x0484
+#define REG_POWER_STATUS               0x04A4
+#define REG_POWER_STAGE1               0x04B4
+#define REG_POWER_STAGE2               0x04B8
+#define REG_PKT_LIFE_TIME              0x04C0
+#define REG_STBC_SETTING               0x04C4
+#define REG_PROT_MODE_CTRL             0x04C8
+#define REG_MAX_AGGR_NUM               0x04CA
+#define REG_RTS_MAX_AGGR_NUM           0x04CB
+#define REG_BAR_MODE_CTRL              0x04CC
+#define REG_RA_TRY_RATE_AGG_LMT                0x04CF
+#define REG_EARLY_MODE_CONTROL         0x4D0
+#define REG_NQOS_SEQ                   0x04DC
+#define REG_QOS_SEQ                    0x04DE
+#define REG_NEED_CPU_HANDLE            0x04E0
+#define REG_PKT_LOSE_RPT               0x04E1
+#define REG_PTCL_ERR_STATUS            0x04E2
+#define REG_DUMMY                      0x04FC
+
+/* ----------------------------------------------------- */
+/*     0x0500h ~ 0x05FFh       EDCA Configuration   */
+/* ----------------------------------------------------- */
+#define REG_EDCA_VO_PARAM              0x0500
+#define REG_EDCA_VI_PARAM              0x0504
+#define REG_EDCA_BE_PARAM              0x0508
+#define REG_EDCA_BK_PARAM              0x050C
+#define REG_BCNTCFG                    0x0510
+#define REG_PIFS                       0x0512
+#define REG_RDG_PIFS                   0x0513
+#define REG_SIFS_CTX                   0x0514
+#define REG_SIFS_TRX                   0x0516
+#define REG_AGGR_BREAK_TIME            0x051A
+#define REG_SLOT                       0x051B
+#define REG_TX_PTCL_CTRL               0x0520
+#define REG_TXPAUSE                    0x0522
+#define REG_DIS_TXREQ_CLR              0x0523
+#define REG_RD_CTRL                    0x0524
+#define REG_TBTT_PROHIBIT              0x0540
+#define REG_RD_NAV_NXT                 0x0544
+#define REG_NAV_PROT_LEN               0x0546
+#define REG_BCN_CTRL                   0x0550
+#define REG_MBID_NUM                   0x0552
+#define REG_DUAL_TSF_RST               0x0553
+#define REG_BCN_INTERVAL               0x0554
+#define REG_MBSSID_BCN_SPACE           0x0554
+#define REG_DRVERLYINT                 0x0558
+#define REG_BCNDMATIM                  0x0559
+#define REG_ATIMWND                    0x055A
+#define REG_USTIME_TSF                 0x055C
+#define REG_BCN_MAX_ERR                        0x055D
+#define REG_RXTSF_OFFSET_CCK           0x055E
+#define REG_RXTSF_OFFSET_OFDM          0x055F
+#define REG_TSFTR                      0x0560
+#define REG_INIT_TSFTR                 0x0564
+#define REG_PSTIMER                    0x0580
+#define REG_TIMER0                     0x0584
+#define REG_TIMER1                     0x0588
+#define REG_ACMHWCTRL                  0x05C0
+#define REG_ACMRSTCTRL                 0x05C1
+#define REG_ACMAVG                     0x05C2
+#define REG_VO_ADMTIME                 0x05C4
+#define REG_VI_ADMTIME                 0x05C6
+#define REG_BE_ADMTIME                 0x05C8
+#define REG_EDCA_RANDOM_GEN            0x05CC
+#define REG_SCH_TXCMD                  0x05D0
+
+/* Dual MAC Co-Existence Register  */
+#define REG_DMC                                0x05F0
+
+/* ----------------------------------------------------- */
+/*     0x0600h ~ 0x07FFh       WMAC Configuration */
+/* ----------------------------------------------------- */
+#define REG_APSD_CTRL                  0x0600
+#define REG_BWOPMODE                   0x0603
+#define REG_TCR                                0x0604
+#define REG_RCR                                0x0608
+#define REG_RX_PKT_LIMIT               0x060C
+#define REG_RX_DLK_TIME                        0x060D
+#define REG_RX_DRVINFO_SZ              0x060F
+
+#define REG_MACID                      0x0610
+#define REG_BSSID                      0x0618
+#define REG_MAR                                0x0620
+#define REG_MBIDCAMCFG                 0x0628
+
+#define REG_USTIME_EDCA                        0x0638
+#define REG_MAC_SPEC_SIFS              0x063A
+#define REG_RESP_SIFS_CCK              0x063C
+#define REG_RESP_SIFS_OFDM             0x063E
+#define REG_ACKTO                      0x0640
+#define REG_CTS2TO                     0x0641
+#define REG_EIFS                       0x0642
+
+
+/* WMA, BA, CCX */
+#define REG_NAV_CTRL                   0x0650
+#define REG_BACAMCMD                   0x0654
+#define REG_BACAMCONTENT               0x0658
+#define REG_LBDLY                      0x0660
+#define REG_FWDLY                      0x0661
+#define REG_RXERR_RPT                  0x0664
+#define REG_WMAC_TRXPTCL_CTL           0x0668
+
+
+/* Security  */
+#define REG_CAMCMD                     0x0670
+#define REG_CAMWRITE                   0x0674
+#define REG_CAMREAD                    0x0678
+#define REG_CAMDBG                     0x067C
+#define REG_SECCFG                     0x0680
+
+/* Power  */
+#define REG_WOW_CTRL                   0x0690
+#define REG_PSSTATUS                   0x0691
+#define REG_PS_RX_INFO                 0x0692
+#define REG_LPNAV_CTRL                 0x0694
+#define REG_WKFMCAM_CMD                        0x0698
+#define REG_WKFMCAM_RWD                        0x069C
+#define REG_RXFLTMAP0                  0x06A0
+#define REG_RXFLTMAP1                  0x06A2
+#define REG_RXFLTMAP2                  0x06A4
+#define REG_BCN_PSR_RPT                        0x06A8
+#define REG_CALB32K_CTRL               0x06AC
+#define REG_PKT_MON_CTRL               0x06B4
+#define REG_BT_COEX_TABLE              0x06C0
+#define REG_WMAC_RESP_TXINFO           0x06D8
+
+
+/* ----------------------------------------------------- */
+/*     Redifine 8192C register definition for compatibility */
+/* ----------------------------------------------------- */
+#define        CR9346                          REG_9346CR
+#define        MSR                             (REG_CR + 2)
+#define        ISR                             REG_HISR
+#define        TSFR                            REG_TSFTR
+
+#define        MACIDR0                         REG_MACID
+#define        MACIDR4                         (REG_MACID + 4)
+
+#define PBP                            REG_PBP
+
+#define        IDR0                            MACIDR0
+#define        IDR4                            MACIDR4
+
+/* ----------------------------------------------------- */
+/* 8192C (MSR) Media Status Register(Offset 0x4C, 8 bits)*/
+/* ----------------------------------------------------- */
+#define        MSR_NOLINK                      0x00
+#define        MSR_ADHOC                       0x01
+#define        MSR_INFRA                       0x02
+#define        MSR_AP                          0x03
+#define        MSR_MASK                        0x03
+
+/* 6. Adaptive Control Registers  (Offset: 0x0160 - 0x01CF) */
+/* ----------------------------------------------------- */
+/* 8192C Response Rate Set Register(offset 0x181, 24bits)*/
+/* ----------------------------------------------------- */
+#define        RRSR_RSC_OFFSET                 21
+#define        RRSR_SHORT_OFFSET               23
+#define        RRSR_RSC_BW_40M                 0x600000
+#define        RRSR_RSC_UPSUBCHNL              0x400000
+#define        RRSR_RSC_LOWSUBCHNL             0x200000
+#define        RRSR_SHORT                      0x800000
+#define        RRSR_1M                         BIT0
+#define        RRSR_2M                         BIT1
+#define        RRSR_5_5M                       BIT2
+#define        RRSR_11M                        BIT3
+#define        RRSR_6M                         BIT4
+#define        RRSR_9M                         BIT5
+#define        RRSR_12M                        BIT6
+#define        RRSR_18M                        BIT7
+#define        RRSR_24M                        BIT8
+#define        RRSR_36M                        BIT9
+#define        RRSR_48M                        BIT10
+#define        RRSR_54M                        BIT11
+#define        RRSR_MCS0                       BIT12
+#define        RRSR_MCS1                       BIT13
+#define        RRSR_MCS2                       BIT14
+#define        RRSR_MCS3                       BIT15
+#define        RRSR_MCS4                       BIT16
+#define        RRSR_MCS5                       BIT17
+#define        RRSR_MCS6                       BIT18
+#define        RRSR_MCS7                       BIT19
+#define        BRSR_ACKSHORTPMB                BIT23
+
+/* ----------------------------------------------------- */
+/*       8192C Rate Definition  */
+/* ----------------------------------------------------- */
+/* CCK */
+#define        RATR_1M                         0x00000001
+#define        RATR_2M                         0x00000002
+#define        RATR_55M                        0x00000004
+#define        RATR_11M                        0x00000008
+/* OFDM */
+#define        RATR_6M                         0x00000010
+#define        RATR_9M                         0x00000020
+#define        RATR_12M                        0x00000040
+#define        RATR_18M                        0x00000080
+#define        RATR_24M                        0x00000100
+#define        RATR_36M                        0x00000200
+#define        RATR_48M                        0x00000400
+#define        RATR_54M                        0x00000800
+/* MCS 1 Spatial Stream        */
+#define        RATR_MCS0                       0x00001000
+#define        RATR_MCS1                       0x00002000
+#define        RATR_MCS2                       0x00004000
+#define        RATR_MCS3                       0x00008000
+#define        RATR_MCS4                       0x00010000
+#define        RATR_MCS5                       0x00020000
+#define        RATR_MCS6                       0x00040000
+#define        RATR_MCS7                       0x00080000
+/* MCS 2 Spatial Stream */
+#define        RATR_MCS8                       0x00100000
+#define        RATR_MCS9                       0x00200000
+#define        RATR_MCS10                      0x00400000
+#define        RATR_MCS11                      0x00800000
+#define        RATR_MCS12                      0x01000000
+#define        RATR_MCS13                      0x02000000
+#define        RATR_MCS14                      0x04000000
+#define        RATR_MCS15                      0x08000000
+
+/* CCK */
+#define RATE_1M                                BIT(0)
+#define RATE_2M                                BIT(1)
+#define RATE_5_5M                      BIT(2)
+#define RATE_11M                       BIT(3)
+/* OFDM  */
+#define RATE_6M                                BIT(4)
+#define RATE_9M                                BIT(5)
+#define RATE_12M                       BIT(6)
+#define RATE_18M                       BIT(7)
+#define RATE_24M                       BIT(8)
+#define RATE_36M                       BIT(9)
+#define RATE_48M                       BIT(10)
+#define RATE_54M                       BIT(11)
+/* MCS 1 Spatial Stream */
+#define RATE_MCS0                      BIT(12)
+#define RATE_MCS1                      BIT(13)
+#define RATE_MCS2                      BIT(14)
+#define RATE_MCS3                      BIT(15)
+#define RATE_MCS4                      BIT(16)
+#define RATE_MCS5                      BIT(17)
+#define RATE_MCS6                      BIT(18)
+#define RATE_MCS7                      BIT(19)
+/* MCS 2 Spatial Stream */
+#define RATE_MCS8                      BIT(20)
+#define RATE_MCS9                      BIT(21)
+#define RATE_MCS10                     BIT(22)
+#define RATE_MCS11                     BIT(23)
+#define RATE_MCS12                     BIT(24)
+#define RATE_MCS13                     BIT(25)
+#define RATE_MCS14                     BIT(26)
+#define RATE_MCS15                     BIT(27)
+
+/* ALL CCK Rate */
+#define        RATE_ALL_CCK                    (RATR_1M | RATR_2M | RATR_55M | \
+                                       RATR_11M)
+#define        RATE_ALL_OFDM_AG                (RATR_6M | RATR_9M | RATR_12M | \
+                                       RATR_18M | RATR_24M | \
+                                       RATR_36M | RATR_48M | RATR_54M)
+#define        RATE_ALL_OFDM_1SS               (RATR_MCS0 | RATR_MCS1 | RATR_MCS2 | \
+                                       RATR_MCS3 | RATR_MCS4 | RATR_MCS5 | \
+                                       RATR_MCS6 | RATR_MCS7)
+#define        RATE_ALL_OFDM_2SS               (RATR_MCS8 | RATR_MCS9 | RATR_MCS10 | \
+                                       RATR_MCS11 | RATR_MCS12 | RATR_MCS13 | \
+                                       RATR_MCS14 | RATR_MCS15)
+
+/* ----------------------------------------------------- */
+/*    8192C BW_OPMODE bits             (Offset 0x203, 8bit)     */
+/* ----------------------------------------------------- */
+#define        BW_OPMODE_20MHZ                 BIT(2)
+#define        BW_OPMODE_5G                    BIT(1)
+#define        BW_OPMODE_11J                   BIT(0)
+
+
+/* ----------------------------------------------------- */
+/*     8192C CAM Config Setting (offset 0x250, 1 byte)   */
+/* ----------------------------------------------------- */
+#define        CAM_VALID                       BIT(15)
+#define        CAM_NOTVALID                    0x0000
+#define        CAM_USEDK                       BIT(5)
+
+#define        CAM_NONE                        0x0
+#define        CAM_WEP40                       0x01
+#define        CAM_TKIP                        0x02
+#define        CAM_AES                         0x04
+#define        CAM_WEP104                      0x05
+#define        CAM_SMS4                        0x6
+
+
+#define        TOTAL_CAM_ENTRY                 32
+#define        HALF_CAM_ENTRY                  16
+
+#define        CAM_WRITE                       BIT(16)
+#define        CAM_READ                        0x00000000
+#define        CAM_POLLINIG                    BIT(31)
+
+/* 10. Power Save Control Registers     (Offset: 0x0260 - 0x02DF) */
+#define        WOW_PMEN                        BIT0 /* Power management Enable. */
+#define        WOW_WOMEN                       BIT1 /* WoW function on or off. */
+#define        WOW_MAGIC                       BIT2 /* Magic packet */
+#define        WOW_UWF                         BIT3 /* Unicast Wakeup frame. */
+
+/* 12. Host Interrupt Status Registers  (Offset: 0x0300 - 0x030F) */
+/* ----------------------------------------------------- */
+/*      8190 IMR/ISR bits      (offset 0xfd,  8bits) */
+/* ----------------------------------------------------- */
+#define        IMR8190_DISABLED                0x0
+#define        IMR_BCNDMAINT6                  BIT(31)
+#define        IMR_BCNDMAINT5                  BIT(30)
+#define        IMR_BCNDMAINT4                  BIT(29)
+#define        IMR_BCNDMAINT3                  BIT(28)
+#define        IMR_BCNDMAINT2                  BIT(27)
+#define        IMR_BCNDMAINT1                  BIT(26)
+#define        IMR_BCNDOK8                     BIT(25)
+#define        IMR_BCNDOK7                     BIT(24)
+#define        IMR_BCNDOK6                     BIT(23)
+#define        IMR_BCNDOK5                     BIT(22)
+#define        IMR_BCNDOK4                     BIT(21)
+#define        IMR_BCNDOK3                     BIT(20)
+#define        IMR_BCNDOK2                     BIT(19)
+#define        IMR_BCNDOK1                     BIT(18)
+#define        IMR_TIMEOUT2                    BIT(17)
+#define        IMR_TIMEOUT1                    BIT(16)
+#define        IMR_TXFOVW                      BIT(15)
+#define        IMR_PSTIMEOUT                   BIT(14)
+#define        IMR_BCNINT                      BIT(13)
+#define        IMR_RXFOVW                      BIT(12)
+#define        IMR_RDU                         BIT(11)
+#define        IMR_ATIMEND                     BIT(10)
+#define        IMR_BDOK                        BIT(9)
+#define        IMR_HIGHDOK                     BIT(8)
+#define        IMR_TBDOK                       BIT(7)
+#define        IMR_MGNTDOK                     BIT(6)
+#define        IMR_TBDER                       BIT(5)
+#define        IMR_BKDOK                       BIT(4)
+#define        IMR_BEDOK                       BIT(3)
+#define        IMR_VIDOK                       BIT(2)
+#define        IMR_VODOK                       BIT(1)
+#define        IMR_ROK                         BIT(0)
+
+#define        IMR_TXERR                       BIT(11)
+#define        IMR_RXERR                       BIT(10)
+#define        IMR_C2HCMD                      BIT(9)
+#define        IMR_CPWM                        BIT(8)
+#define        IMR_OCPINT                      BIT(1)
+#define        IMR_WLANOFF                     BIT(0)
+
+/* ----------------------------------------------------- */
+/* 8192C EFUSE */
+/* ----------------------------------------------------- */
+#define        HWSET_MAX_SIZE                  256
+#define EFUSE_MAX_SECTION              32
+#define EFUSE_REAL_CONTENT_LEN         512
+
+/* ----------------------------------------------------- */
+/*     8192C EEPROM/EFUSE share register definition. */
+/* ----------------------------------------------------- */
+#define        EEPROM_DEFAULT_TSSI                     0x0
+#define EEPROM_DEFAULT_CRYSTALCAP              0x0
+#define        EEPROM_DEFAULT_THERMALMETER             0x12
+
+#define        EEPROM_DEFAULT_TXPOWERLEVEL_2G          0x2C
+#define        EEPROM_DEFAULT_TXPOWERLEVEL_5G          0x22
+
+#define        EEPROM_DEFAULT_HT40_2SDIFF              0x0
+/* HT20<->40 default Tx Power Index Difference */
+#define EEPROM_DEFAULT_HT20_DIFF               2
+/* OFDM Tx Power index diff */
+#define        EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF      0x4
+#define EEPROM_DEFAULT_HT40_PWRMAXOFFSET       0
+#define EEPROM_DEFAULT_HT20_PWRMAXOFFSET       0
+
+#define        EEPROM_CHANNEL_PLAN_FCC                 0x0
+#define        EEPROM_CHANNEL_PLAN_IC                  0x1
+#define        EEPROM_CHANNEL_PLAN_ETSI                0x2
+#define        EEPROM_CHANNEL_PLAN_SPAIN               0x3
+#define        EEPROM_CHANNEL_PLAN_FRANCE              0x4
+#define        EEPROM_CHANNEL_PLAN_MKK                 0x5
+#define        EEPROM_CHANNEL_PLAN_MKK1                0x6
+#define        EEPROM_CHANNEL_PLAN_ISRAEL              0x7
+#define        EEPROM_CHANNEL_PLAN_TELEC               0x8
+#define        EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN       0x9
+#define        EEPROM_CHANNEL_PLAN_WORLD_WIDE_13       0xA
+#define        EEPROM_CHANNEL_PLAN_NCC                 0xB
+#define        EEPROM_CHANNEL_PLAN_BY_HW_MASK          0x80
+
+#define EEPROM_CID_DEFAULT                     0x0
+#define EEPROM_CID_TOSHIBA                     0x4
+#define        EEPROM_CID_CCX                          0x10
+#define        EEPROM_CID_QMI                          0x0D
+#define EEPROM_CID_WHQL                                0xFE
+
+
+#define        RTL8192_EEPROM_ID                       0x8129
+#define        EEPROM_WAPI_SUPPORT                     0x78
+
+
+#define RTL8190_EEPROM_ID              0x8129  /* 0-1 */
+#define EEPROM_HPON                    0x02 /* LDO settings.2-5 */
+#define EEPROM_CLK                     0x06 /* Clock settings.6-7 */
+#define EEPROM_MAC_FUNCTION            0x08 /* SE Test mode.8 */
+
+#define EEPROM_VID                     0x28 /* SE Vendor ID.A-B */
+#define EEPROM_DID                     0x2A /* SE Device ID. C-D */
+#define EEPROM_SVID                    0x2C /* SE Vendor ID.E-F */
+#define EEPROM_SMID                    0x2E /* SE PCI Subsystem ID. 10-11 */
+
+#define EEPROM_MAC_ADDR                        0x16 /* SEMAC Address. 12-17 */
+#define EEPROM_MAC_ADDR_MAC0_92D       0x55
+#define EEPROM_MAC_ADDR_MAC1_92D       0x5B
+
+/* 2.4G band Tx power index setting */
+#define EEPROM_CCK_TX_PWR_INX_2G       0x61
+#define EEPROM_HT40_1S_TX_PWR_INX_2G   0x67
+#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_2G      0x6D
+#define EEPROM_HT20_TX_PWR_INX_DIFF_2G         0x70
+#define EEPROM_OFDM_TX_PWR_INX_DIFF_2G         0x73
+#define EEPROM_HT40_MAX_PWR_OFFSET_2G          0x76
+#define EEPROM_HT20_MAX_PWR_OFFSET_2G          0x79
+
+/*5GL channel 32-64 */
+#define EEPROM_HT40_1S_TX_PWR_INX_5GL          0x7C
+#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GL     0x82
+#define EEPROM_HT20_TX_PWR_INX_DIFF_5GL                0x85
+#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GL                0x88
+#define EEPROM_HT40_MAX_PWR_OFFSET_5GL         0x8B
+#define EEPROM_HT20_MAX_PWR_OFFSET_5GL         0x8E
+
+/* 5GM channel 100-140 */
+#define EEPROM_HT40_1S_TX_PWR_INX_5GM          0x91
+#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GM     0x97
+#define EEPROM_HT20_TX_PWR_INX_DIFF_5GM                0x9A
+#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GM                0x9D
+#define EEPROM_HT40_MAX_PWR_OFFSET_5GM         0xA0
+#define EEPROM_HT20_MAX_PWR_OFFSET_5GM         0xA3
+
+/* 5GH channel 149-165 */
+#define EEPROM_HT40_1S_TX_PWR_INX_5GH          0xA6
+#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GH     0xAC
+#define EEPROM_HT20_TX_PWR_INX_DIFF_5GH                0xAF
+#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GH                0xB2
+#define EEPROM_HT40_MAX_PWR_OFFSET_5GH         0xB5
+#define EEPROM_HT20_MAX_PWR_OFFSET_5GH         0xB8
+
+/* Map of supported channels. */
+#define EEPROM_CHANNEL_PLAN                    0xBB
+#define EEPROM_IQK_DELTA                       0xBC
+#define EEPROM_LCK_DELTA                       0xBC
+#define EEPROM_XTAL_K                          0xBD    /* [7:5] */
+#define EEPROM_TSSI_A_5G                       0xBE
+#define EEPROM_TSSI_B_5G                       0xBF
+#define EEPROM_TSSI_AB_5G                      0xC0
+#define EEPROM_THERMAL_METER                   0xC3    /* [4:0] */
+#define EEPROM_RF_OPT1                         0xC4
+#define EEPROM_RF_OPT2                         0xC5
+#define EEPROM_RF_OPT3                         0xC6
+#define EEPROM_RF_OPT4                         0xC7
+#define EEPROM_RF_OPT5                         0xC8
+#define EEPROM_RF_OPT6                         0xC9
+#define EEPROM_VERSION                         0xCA
+#define EEPROM_CUSTOMER_ID                     0xCB
+#define EEPROM_RF_OPT7                         0xCC
+
+#define EEPROM_DEF_PART_NO                     0x3FD    /* Byte */
+#define EEPROME_CHIP_VERSION_L                 0x3FF
+#define EEPROME_CHIP_VERSION_H                 0x3FE
+
+/*
+ * Current IOREG MAP
+ * 0x0000h ~ 0x00FFh   System Configuration (256 Bytes)
+ * 0x0100h ~ 0x01FFh   MACTOP General Configuration (256 Bytes)
+ * 0x0200h ~ 0x027Fh   TXDMA Configuration (128 Bytes)
+ * 0x0280h ~ 0x02FFh   RXDMA Configuration (128 Bytes)
+ * 0x0300h ~ 0x03FFh   PCIE EMAC Reserved Region (256 Bytes)
+ * 0x0400h ~ 0x04FFh   Protocol Configuration (256 Bytes)
+ * 0x0500h ~ 0x05FFh   EDCA Configuration (256 Bytes)
+ * 0x0600h ~ 0x07FFh   WMAC Configuration (512 Bytes)
+ * 0x2000h ~ 0x3FFFh   8051 FW Download Region (8196 Bytes)
+ */
+
+/* ----------------------------------------------------- */
+/* 8192C (RCR) (Offset 0x608, 32 bits) */
+/* ----------------------------------------------------- */
+#define        RCR_APPFCS                              BIT(31)
+#define        RCR_APP_MIC                             BIT(30)
+#define        RCR_APP_ICV                             BIT(29)
+#define        RCR_APP_PHYST_RXFF                      BIT(28)
+#define        RCR_APP_BA_SSN                          BIT(27)
+#define        RCR_ENMBID                              BIT(24)
+#define        RCR_LSIGEN                              BIT(23)
+#define        RCR_MFBEN                               BIT(22)
+#define        RCR_HTC_LOC_CTRL                        BIT(14)
+#define        RCR_AMF                                 BIT(13)
+#define        RCR_ACF                                 BIT(12)
+#define        RCR_ADF                                 BIT(11)
+#define        RCR_AICV                                BIT(9)
+#define        RCR_ACRC32                              BIT(8)
+#define        RCR_CBSSID_BCN                          BIT(7)
+#define        RCR_CBSSID_DATA                         BIT(6)
+#define        RCR_APWRMGT                             BIT(5)
+#define        RCR_ADD3                                BIT(4)
+#define        RCR_AB                                  BIT(3)
+#define        RCR_AM                                  BIT(2)
+#define        RCR_APM                                 BIT(1)
+#define        RCR_AAP                                 BIT(0)
+#define        RCR_MXDMA_OFFSET                        8
+#define        RCR_FIFO_OFFSET                         13
+
+/* ----------------------------------------------------- */
+/*       8192C Regsiter Bit and Content definition      */
+/* ----------------------------------------------------- */
+/* ----------------------------------------------------- */
+/*     0x0000h ~ 0x00FFh       System Configuration */
+/* ----------------------------------------------------- */
+
+/* SPS0_CTRL */
+#define SW18_FPWM                              BIT(3)
+
+
+/* SYS_ISO_CTRL */
+#define ISO_MD2PP                              BIT(0)
+#define ISO_UA2USB                             BIT(1)
+#define ISO_UD2CORE                            BIT(2)
+#define ISO_PA2PCIE                            BIT(3)
+#define ISO_PD2CORE                            BIT(4)
+#define ISO_IP2MAC                             BIT(5)
+#define ISO_DIOP                               BIT(6)
+#define ISO_DIOE                               BIT(7)
+#define ISO_EB2CORE                            BIT(8)
+#define ISO_DIOR                               BIT(9)
+
+#define PWC_EV25V                              BIT(14)
+#define PWC_EV12V                              BIT(15)
+
+
+/* SYS_FUNC_EN */
+#define FEN_BBRSTB                             BIT(0)
+#define FEN_BB_GLB_RSTN                                BIT(1)
+#define FEN_USBA                               BIT(2)
+#define FEN_UPLL                               BIT(3)
+#define FEN_USBD                               BIT(4)
+#define FEN_DIO_PCIE                           BIT(5)
+#define FEN_PCIEA                              BIT(6)
+#define FEN_PPLL                               BIT(7)
+#define FEN_PCIED                              BIT(8)
+#define FEN_DIOE                               BIT(9)
+#define FEN_CPUEN                              BIT(10)
+#define FEN_DCORE                              BIT(11)
+#define FEN_ELDR                               BIT(12)
+#define FEN_DIO_RF                             BIT(13)
+#define FEN_HWPDN                              BIT(14)
+#define FEN_MREGEN                             BIT(15)
+
+/* APS_FSMCO */
+#define PFM_LDALL                              BIT(0)
+#define PFM_ALDN                               BIT(1)
+#define PFM_LDKP                               BIT(2)
+#define PFM_WOWL                               BIT(3)
+#define ENPDN                                  BIT(4)
+#define PDN_PL                                 BIT(5)
+#define APFM_ONMAC                             BIT(8)
+#define APFM_OFF                               BIT(9)
+#define APFM_RSM                               BIT(10)
+#define AFSM_HSUS                              BIT(11)
+#define AFSM_PCIE                              BIT(12)
+#define APDM_MAC                               BIT(13)
+#define APDM_HOST                              BIT(14)
+#define APDM_HPDN                              BIT(15)
+#define RDY_MACON                              BIT(16)
+#define SUS_HOST                               BIT(17)
+#define ROP_ALD                                        BIT(20)
+#define ROP_PWR                                        BIT(21)
+#define ROP_SPS                                        BIT(22)
+#define SOP_MRST                               BIT(25)
+#define SOP_FUSE                               BIT(26)
+#define SOP_ABG                                        BIT(27)
+#define SOP_AMB                                        BIT(28)
+#define SOP_RCK                                        BIT(29)
+#define SOP_A8M                                        BIT(30)
+#define XOP_BTCK                               BIT(31)
+
+/* SYS_CLKR */
+#define ANAD16V_EN                             BIT(0)
+#define ANA8M                                  BIT(1)
+#define MACSLP                                 BIT(4)
+#define LOADER_CLK_EN                          BIT(5)
+#define _80M_SSC_DIS                           BIT(7)
+#define _80M_SSC_EN_HO                         BIT(8)
+#define PHY_SSC_RSTB                           BIT(9)
+#define SEC_CLK_EN                             BIT(10)
+#define MAC_CLK_EN                             BIT(11)
+#define SYS_CLK_EN                             BIT(12)
+#define RING_CLK_EN                            BIT(13)
+
+
+/* 9346CR */
+#define        BOOT_FROM_EEPROM                        BIT(4)
+#define        EEPROM_EN                               BIT(5)
+
+/* AFE_MISC */
+#define AFE_BGEN                               BIT(0)
+#define AFE_MBEN                               BIT(1)
+#define MAC_ID_EN                              BIT(7)
+
+/* RSV_CTRL */
+#define WLOCK_ALL                              BIT(0)
+#define WLOCK_00                               BIT(1)
+#define WLOCK_04                               BIT(2)
+#define WLOCK_08                               BIT(3)
+#define WLOCK_40                               BIT(4)
+#define R_DIS_PRST_0                           BIT(5)
+#define R_DIS_PRST_1                           BIT(6)
+#define LOCK_ALL_EN                            BIT(7)
+
+/* RF_CTRL */
+#define RF_EN                                  BIT(0)
+#define RF_RSTB                                        BIT(1)
+#define RF_SDMRSTB                             BIT(2)
+
+
+
+/* LDOA15_CTRL */
+#define LDA15_EN                               BIT(0)
+#define LDA15_STBY                             BIT(1)
+#define LDA15_OBUF                             BIT(2)
+#define LDA15_REG_VOS                          BIT(3)
+#define _LDA15_VOADJ(x)                                (((x) & 0x7) << 4)
+
+
+
+/* LDOV12D_CTRL */
+#define LDV12_EN                               BIT(0)
+#define LDV12_SDBY                             BIT(1)
+#define LPLDO_HSM                              BIT(2)
+#define LPLDO_LSM_DIS                          BIT(3)
+#define _LDV12_VADJ(x)                         (((x) & 0xF) << 4)
+
+
+/* AFE_XTAL_CTRL */
+#define XTAL_EN                                        BIT(0)
+#define XTAL_BSEL                              BIT(1)
+#define _XTAL_BOSC(x)                          (((x) & 0x3) << 2)
+#define _XTAL_CADJ(x)                          (((x) & 0xF) << 4)
+#define XTAL_GATE_USB                          BIT(8)
+#define _XTAL_USB_DRV(x)                       (((x) & 0x3) << 9)
+#define XTAL_GATE_AFE                          BIT(11)
+#define _XTAL_AFE_DRV(x)                       (((x) & 0x3) << 12)
+#define XTAL_RF_GATE                           BIT(14)
+#define _XTAL_RF_DRV(x)                                (((x) & 0x3) << 15)
+#define XTAL_GATE_DIG                          BIT(17)
+#define _XTAL_DIG_DRV(x)                       (((x) & 0x3) << 18)
+#define XTAL_BT_GATE                           BIT(20)
+#define _XTAL_BT_DRV(x)                                (((x) & 0x3) << 21)
+#define _XTAL_GPIO(x)                          (((x) & 0x7) << 23)
+
+
+#define CKDLY_AFE                              BIT(26)
+#define CKDLY_USB                              BIT(27)
+#define CKDLY_DIG                              BIT(28)
+#define CKDLY_BT                               BIT(29)
+
+
+/* AFE_PLL_CTRL */
+#define APLL_EN                                        BIT(0)
+#define APLL_320_EN                            BIT(1)
+#define APLL_FREF_SEL                          BIT(2)
+#define APLL_EDGE_SEL                          BIT(3)
+#define APLL_WDOGB                             BIT(4)
+#define APLL_LPFEN                             BIT(5)
+
+#define APLL_REF_CLK_13MHZ                     0x1
+#define APLL_REF_CLK_19_2MHZ                   0x2
+#define APLL_REF_CLK_20MHZ                     0x3
+#define APLL_REF_CLK_25MHZ                     0x4
+#define APLL_REF_CLK_26MHZ                     0x5
+#define APLL_REF_CLK_38_4MHZ                   0x6
+#define APLL_REF_CLK_40MHZ                     0x7
+
+#define APLL_320EN                             BIT(14)
+#define APLL_80EN                              BIT(15)
+#define APLL_1MEN                              BIT(24)
+
+
+/* EFUSE_CTRL */
+#define ALD_EN                                 BIT(18)
+#define EF_PD                                  BIT(19)
+#define EF_FLAG                                        BIT(31)
+
+/* EFUSE_TEST  */
+#define EF_TRPT                                        BIT(7)
+#define LDOE25_EN                              BIT(31)
+
+/* MCUFWDL  */
+#define MCUFWDL_EN                             BIT(0)
+#define MCUFWDL_RDY                            BIT(1)
+#define FWDL_CHKSUM_RPT                                BIT(2)
+#define MACINI_RDY                             BIT(3)
+#define BBINI_RDY                              BIT(4)
+#define RFINI_RDY                              BIT(5)
+#define WINTINI_RDY                            BIT(6)
+#define MAC1_WINTINI_RDY                       BIT(11)
+#define CPRST                                  BIT(23)
+
+/*  REG_SYS_CFG */
+#define XCLK_VLD                               BIT(0)
+#define ACLK_VLD                               BIT(1)
+#define UCLK_VLD                               BIT(2)
+#define PCLK_VLD                               BIT(3)
+#define PCIRSTB                                        BIT(4)
+#define V15_VLD                                        BIT(5)
+#define TRP_B15V_EN                            BIT(7)
+#define SIC_IDLE                               BIT(8)
+#define BD_MAC2                                        BIT(9)
+#define BD_MAC1                                        BIT(10)
+#define IC_MACPHY_MODE                         BIT(11)
+#define PAD_HWPD_IDN                           BIT(22)
+#define TRP_VAUX_EN                            BIT(23)
+#define TRP_BT_EN                              BIT(24)
+#define BD_PKG_SEL                             BIT(25)
+#define BD_HCI_SEL                             BIT(26)
+#define TYPE_ID                                        BIT(27)
+
+/* LLT_INIT */
+#define _LLT_NO_ACTIVE                         0x0
+#define _LLT_WRITE_ACCESS                      0x1
+#define _LLT_READ_ACCESS                       0x2
+
+#define _LLT_INIT_DATA(x)                      ((x) & 0xFF)
+#define _LLT_INIT_ADDR(x)                      (((x) & 0xFF) << 8)
+#define _LLT_OP(x)                             (((x) & 0x3) << 30)
+#define _LLT_OP_VALUE(x)                       (((x) >> 30) & 0x3)
+
+
+/* ----------------------------------------------------- */
+/*     0x0400h ~ 0x047Fh       Protocol Configuration   */
+/* ----------------------------------------------------- */
+#define        RETRY_LIMIT_SHORT_SHIFT                 8
+#define        RETRY_LIMIT_LONG_SHIFT                  0
+
+
+/* ----------------------------------------------------- */
+/*     0x0500h ~ 0x05FFh       EDCA Configuration */
+/* ----------------------------------------------------- */
+/* EDCA setting */
+#define AC_PARAM_TXOP_LIMIT_OFFSET             16
+#define AC_PARAM_ECW_MAX_OFFSET                        12
+#define AC_PARAM_ECW_MIN_OFFSET                        8
+#define AC_PARAM_AIFS_OFFSET                   0
+
+/* 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 */
+/* ----------------------------------------------------- */
+
+/* TCR */
+#define TSFRST                                 BIT(0)
+#define DIS_GCLK                               BIT(1)
+#define PAD_SEL                                        BIT(2)
+#define PWR_ST                                 BIT(6)
+#define PWRBIT_OW_EN                           BIT(7)
+#define ACRC                                   BIT(8)
+#define CFENDFORM                              BIT(9)
+#define ICV                                    BIT(10)
+
+/* SECCFG */
+#define        SCR_TXUSEDK                             BIT(0)
+#define        SCR_RXUSEDK                             BIT(1)
+#define        SCR_TXENCENABLE                         BIT(2)
+#define        SCR_RXENCENABLE                         BIT(3)
+#define        SCR_SKBYA2                              BIT(4)
+#define        SCR_NOSKMC                              BIT(5)
+#define SCR_TXBCUSEDK                          BIT(6)
+#define SCR_RXBCUSEDK                          BIT(7)
+
+/* General definitions */
+#define LAST_ENTRY_OF_TX_PKT_BUFFER            255
+#define LAST_ENTRY_OF_TX_PKT_BUFFER_DUAL_MAC   127
+
+#define POLLING_LLT_THRESHOLD                  20
+#define POLLING_READY_TIMEOUT_COUNT            1000
+
+/* Min Spacing related settings. */
+#define        MAX_MSS_DENSITY_2T                      0x13
+#define        MAX_MSS_DENSITY_1T                      0x0A
+
+
+/* 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 defintion for BB/RF R/W */
+
+/* 3. Page8(0x800) */
+#define        RFPGA0_RFMOD                            0x800
+
+#define        RFPGA0_TXINFO                           0x804
+#define        RFPGA0_PSDFUNCTION                      0x808
+
+#define        RFPGA0_TXGAINSTAGE                      0x80c
+
+#define        RFPGA0_RFTIMING1                        0x810
+#define        RFPGA0_RFTIMING2                        0x814
+
+#define        RFPGA0_XA_HSSIPARAMETER1                0x820
+#define        RFPGA0_XA_HSSIPARAMETER2                0x824
+#define        RFPGA0_XB_HSSIPARAMETER1                0x828
+#define        RFPGA0_XB_HSSIPARAMETER2                0x82c
+
+#define        RFPGA0_XA_LSSIPARAMETER                 0x840
+#define        RFPGA0_XB_LSSIPARAMETER                 0x844
+
+#define        RFPGA0_RFWAKEUPPARAMETER                0x850
+#define        RFPGA0_RFSLEEPUPPARAMETER               0x854
+
+#define        RFPGA0_XAB_SWITCHCONTROL                0x858
+#define        RFPGA0_XCD_SWITCHCONTROL                0x85c
+
+#define        RFPGA0_XA_RFINTERFACEOE                 0x860
+#define        RFPGA0_XB_RFINTERFACEOE                 0x864
+
+#define        RFPGA0_XAB_RFINTERFACESW                0x870
+#define        RFPGA0_XCD_RFINTERFACESW                0x874
+
+#define        RFPGA0_XAB_RFPARAMETER                  0x878
+#define        RFPGA0_XCD_RFPARAMETER                  0x87c
+
+#define        RFPGA0_ANALOGPARAMETER1                 0x880
+#define        RFPGA0_ANALOGPARAMETER2                 0x884
+#define        RFPGA0_ANALOGPARAMETER3                 0x888
+#define        RFPGA0_ADDALLOCKEN                      0x888
+#define        RFPGA0_ANALOGPARAMETER4                 0x88c
+
+#define        RFPGA0_XA_LSSIREADBACK                  0x8a0
+#define        RFPGA0_XB_LSSIREADBACK                  0x8a4
+#define        RFPGA0_XC_LSSIREADBACK                  0x8a8
+#define        RFPGA0_XD_LSSIREADBACK                  0x8ac
+
+#define        RFPGA0_PSDREPORT                        0x8b4
+#define        TRANSCEIVERA_HSPI_READBACK              0x8b8
+#define        TRANSCEIVERB_HSPI_READBACK              0x8bc
+#define        RFPGA0_XAB_RFINTERFACERB                0x8e0
+#define        RFPGA0_XCD_RFINTERFACERB                0x8e4
+
+/* 4. Page9(0x900) */
+#define        RFPGA1_RFMOD                            0x900
+
+#define        RFPGA1_TXBLOCK                          0x904
+#define        RFPGA1_DEBUGSELECT                      0x908
+#define        RFPGA1_TXINFO                           0x90c
+
+/* 5. PageA(0xA00)  */
+#define        RCCK0_SYSTEM                            0xa00
+
+#define        RCCK0_AFESSTTING                        0xa04
+#define        RCCK0_CCA                               0xa08
+
+#define        RCCK0_RXAGC1                            0xa0c
+#define        RCCK0_RXAGC2                            0xa10
+
+#define        RCCK0_RXHP                              0xa14
+
+#define        RCCK0_DSPPARAMETER1                     0xa18
+#define        RCCK0_DSPPARAMETER2                     0xa1c
+
+#define        RCCK0_TXFILTER1                         0xa20
+#define        RCCK0_TXFILTER2                         0xa24
+#define        RCCK0_DEBUGPORT                         0xa28
+#define        RCCK0_FALSEALARMREPORT                  0xa2c
+#define        RCCK0_TRSSIREPORT                       0xa50
+#define        RCCK0_RXREPORT                          0xa54
+#define        RCCK0_FACOUNTERLOWER                    0xa5c
+#define        RCCK0_FACOUNTERUPPER                    0xa58
+
+/* 6. PageC(0xC00) */
+#define        ROFDM0_LSTF                             0xc00
+
+#define        ROFDM0_TRXPATHENABLE                    0xc04
+#define        ROFDM0_TRMUXPAR                         0xc08
+#define        ROFDM0_TRSWISOLATION                    0xc0c
+
+#define        ROFDM0_XARXAFE                          0xc10
+#define        ROFDM0_XARXIQIMBALANCE                  0xc14
+#define        ROFDM0_XBRXAFE                          0xc18
+#define        ROFDM0_XBRXIQIMBALANCE                  0xc1c
+#define        ROFDM0_XCRXAFE                          0xc20
+#define        ROFDM0_XCRXIQIMBALANCE                  0xc24
+#define        ROFDM0_XDRXAFE                          0xc28
+#define        ROFDM0_XDRXIQIMBALANCE                  0xc2c
+
+#define        ROFDM0_RXDETECTOR1                      0xc30
+#define        ROFDM0_RXDETECTOR2                      0xc34
+#define        ROFDM0_RXDETECTOR3                      0xc38
+#define        ROFDM0_RXDETECTOR4                      0xc3c
+
+#define        ROFDM0_RXDSP                            0xc40
+#define        ROFDM0_CFOANDDAGC                       0xc44
+#define        ROFDM0_CCADROPTHRESHOLD                 0xc48
+#define        ROFDM0_ECCATHRESHOLD                    0xc4c
+
+#define        ROFDM0_XAAGCCORE1                       0xc50
+#define        ROFDM0_XAAGCCORE2                       0xc54
+#define        ROFDM0_XBAGCCORE1                       0xc58
+#define        ROFDM0_XBAGCCORE2                       0xc5c
+#define        ROFDM0_XCAGCCORE1                       0xc60
+#define        ROFDM0_XCAGCCORE2                       0xc64
+#define        ROFDM0_XDAGCCORE1                       0xc68
+#define        ROFDM0_XDAGCCORE2                       0xc6c
+
+#define        ROFDM0_AGCPARAMETER1                    0xc70
+#define        ROFDM0_AGCPARAMETER2                    0xc74
+#define        ROFDM0_AGCRSSITABLE                     0xc78
+#define        ROFDM0_HTSTFAGC                         0xc7c
+
+#define        ROFDM0_XATXIQIMBALANCE                  0xc80
+#define        ROFDM0_XATXAFE                          0xc84
+#define        ROFDM0_XBTXIQIMBALANCE                  0xc88
+#define        ROFDM0_XBTXAFE                          0xc8c
+#define        ROFDM0_XCTXIQIMBALANCE                  0xc90
+#define        ROFDM0_XCTXAFE                          0xc94
+#define        ROFDM0_XDTXIQIMBALANCE                  0xc98
+#define        ROFDM0_XDTXAFE                          0xc9c
+
+#define        ROFDM0_RXHPPARAMETER                    0xce0
+#define        ROFDM0_TXPSEUDONOISEWGT                 0xce4
+#define        ROFDM0_FRAMESYNC                        0xcf0
+#define        ROFDM0_DFSREPORT                        0xcf4
+#define        ROFDM0_TXCOEFF1                         0xca4
+#define        ROFDM0_TXCOEFF2                         0xca8
+#define        ROFDM0_TXCOEFF3                         0xcac
+#define        ROFDM0_TXCOEFF4                         0xcb0
+#define        ROFDM0_TXCOEFF5                         0xcb4
+#define        ROFDM0_TXCOEFF6                         0xcb8
+
+/* 7. PageD(0xD00) */
+#define        ROFDM1_LSTF                             0xd00
+#define        ROFDM1_TRXPATHENABLE                    0xd04
+
+#define        ROFDM1_CFO                              0xd08
+#define        ROFDM1_CSI1                             0xd10
+#define        ROFDM1_SBD                              0xd14
+#define        ROFDM1_CSI2                             0xd18
+#define        ROFDM1_CFOTRACKING                      0xd2c
+#define        ROFDM1_TRXMESAURE1                      0xd34
+#define        ROFDM1_INTFDET                          0xd3c
+#define        ROFDM1_PSEUDONOISESTATEAB               0xd50
+#define        ROFDM1_PSEUDONOISESTATECD               0xd54
+#define        ROFDM1_RXPSEUDONOISEWGT                 0xd58
+
+#define        ROFDM_PHYCOUNTER1                       0xda0
+#define        ROFDM_PHYCOUNTER2                       0xda4
+#define        ROFDM_PHYCOUNTER3                       0xda8
+
+#define        ROFDM_SHORTCFOAB                        0xdac
+#define        ROFDM_SHORTCFOCD                        0xdb0
+#define        ROFDM_LONGCFOAB                         0xdb4
+#define        ROFDM_LONGCFOCD                         0xdb8
+#define        ROFDM_TAILCFOAB                         0xdbc
+#define        ROFDM_TAILCFOCD                         0xdc0
+#define        ROFDM_PWMEASURE1                        0xdc4
+#define        ROFDM_PWMEASURE2                        0xdc8
+#define        ROFDM_BWREPORT                          0xdcc
+#define        ROFDM_AGCREPORT                         0xdd0
+#define        ROFDM_RXSNR                             0xdd4
+#define        ROFDM_RXEVMCSI                          0xdd8
+#define        ROFDM_SIGREPORT                         0xddc
+
+/* 8. PageE(0xE00) */
+#define        RTXAGC_A_RATE18_06                      0xe00
+#define        RTXAGC_A_RATE54_24                      0xe04
+#define        RTXAGC_A_CCK1_MCS32                     0xe08
+#define        RTXAGC_A_MCS03_MCS00                    0xe10
+#define        RTXAGC_A_MCS07_MCS04                    0xe14
+#define        RTXAGC_A_MCS11_MCS08                    0xe18
+#define        RTXAGC_A_MCS15_MCS12                    0xe1c
+
+#define        RTXAGC_B_RATE18_06                      0x830
+#define        RTXAGC_B_RATE54_24                      0x834
+#define        RTXAGC_B_CCK1_55_MCS32                  0x838
+#define        RTXAGC_B_MCS03_MCS00                    0x83c
+#define        RTXAGC_B_MCS07_MCS04                    0x848
+#define        RTXAGC_B_MCS11_MCS08                    0x84c
+#define        RTXAGC_B_MCS15_MCS12                    0x868
+#define        RTXAGC_B_CCK11_A_CCK2_11                0x86c
+
+/* RL6052 Register definition */
+#define        RF_AC                                   0x00
+
+#define        RF_IQADJ_G1                             0x01
+#define        RF_IQADJ_G2                             0x02
+#define        RF_POW_TRSW                             0x05
+
+#define        RF_GAIN_RX                              0x06
+#define        RF_GAIN_TX                              0x07
+
+#define        RF_TXM_IDAC                             0x08
+#define        RF_BS_IQGEN                             0x0F
+
+#define        RF_MODE1                                0x10
+#define        RF_MODE2                                0x11
+
+#define        RF_RX_AGC_HP                            0x12
+#define        RF_TX_AGC                               0x13
+#define        RF_BIAS                                 0x14
+#define        RF_IPA                                  0x15
+#define        RF_POW_ABILITY                          0x17
+#define        RF_MODE_AG                              0x18
+#define        rfchannel                               0x18
+#define        RF_CHNLBW                               0x18
+#define        RF_TOP                                  0x19
+
+#define        RF_RX_G1                                0x1A
+#define        RF_RX_G2                                0x1B
+
+#define        RF_RX_BB2                               0x1C
+#define        RF_RX_BB1                               0x1D
+
+#define        RF_RCK1                                 0x1E
+#define        RF_RCK2                                 0x1F
+
+#define        RF_TX_G1                                0x20
+#define        RF_TX_G2                                0x21
+#define        RF_TX_G3                                0x22
+
+#define        RF_TX_BB1                               0x23
+
+#define        RF_T_METER                              0x42
+
+#define        RF_SYN_G1                               0x25
+#define        RF_SYN_G2                               0x26
+#define        RF_SYN_G3                               0x27
+#define        RF_SYN_G4                               0x28
+#define        RF_SYN_G5                               0x29
+#define        RF_SYN_G6                               0x2A
+#define        RF_SYN_G7                               0x2B
+#define        RF_SYN_G8                               0x2C
+
+#define        RF_RCK_OS                               0x30
+
+#define        RF_TXPA_G1                              0x31
+#define        RF_TXPA_G2                              0x32
+#define        RF_TXPA_G3                              0x33
+
+/* Bit Mask */
+
+/* 2. Page8(0x800) */
+#define        BRFMOD                                  0x1
+#define        BCCKTXSC                                0x30
+#define        BCCKEN                                  0x1000000
+#define        BOFDMEN                                 0x2000000
+
+#define        B3WIREDATALENGTH                        0x800
+#define        B3WIREADDRESSLENGTH                     0x400
+
+#define        BRFSI_RFENV                             0x10
+
+#define        BLSSIREADADDRESS                        0x7f800000
+#define        BLSSIREADEDGE                           0x80000000
+#define        BLSSIREADBACKDATA                       0xfffff
+/* 4. PageA(0xA00) */
+#define BCCKSIDEBAND                           0x10
+
+/* Other Definition */
+#define        BBYTE0                                  0x1
+#define        BBYTE1                                  0x2
+#define        BBYTE2                                  0x4
+#define        BBYTE3                                  0x8
+#define        BWORD0                                  0x3
+#define        BWORD1                                  0xc
+#define        BDWORD                                  0xf
+
+#endif
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/rf_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/rf_common.c
new file mode 100644 (file)
index 0000000..8af1661
--- /dev/null
@@ -0,0 +1,353 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#include "../wifi.h"
+#include "def.h"
+#include "reg.h"
+#include "phy_common.h"
+#include "rf_common.h"
+
+void rtl92d_phy_rf6052_set_bandwidth(struct ieee80211_hw *hw, u8 bandwidth)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       u8 rfpath;
+
+       switch (bandwidth) {
+       case HT_CHANNEL_WIDTH_20:
+               for (rfpath = 0; rfpath < rtlphy->num_total_rfpath; rfpath++) {
+                       rtlphy->rfreg_chnlval[rfpath] = ((rtlphy->rfreg_chnlval
+                                       [rfpath] & 0xfffff3ff) | 0x0400);
+                       rtl_set_rfreg(hw, rfpath, RF_CHNLBW, BIT(10) |
+                                     BIT(11), 0x01);
+
+                       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD,
+                               "20M RF 0x18 = 0x%x\n",
+                               rtlphy->rfreg_chnlval[rfpath]);
+               }
+
+               break;
+       case HT_CHANNEL_WIDTH_20_40:
+               for (rfpath = 0; rfpath < rtlphy->num_total_rfpath; rfpath++) {
+                       rtlphy->rfreg_chnlval[rfpath] =
+                           ((rtlphy->rfreg_chnlval[rfpath] & 0xfffff3ff));
+                       rtl_set_rfreg(hw, rfpath, RF_CHNLBW, BIT(10) | BIT(11),
+                                     0x00);
+                       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD,
+                               "40M RF 0x18 = 0x%x\n",
+                               rtlphy->rfreg_chnlval[rfpath]);
+               }
+               break;
+       default:
+               pr_err("unknown bandwidth: %#X\n", bandwidth);
+               break;
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_rf6052_set_bandwidth);
+
+void rtl92d_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
+                                      u8 *ppowerlevel)
+{
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       u32 tx_agc[2] = {0, 0}, tmpval;
+       bool turbo_scanoff = false;
+       u8 idx1, idx2;
+       u8 *ptr;
+
+       if (rtlefuse->eeprom_regulatory != 0)
+               turbo_scanoff = true;
+       if (mac->act_scanning) {
+               tx_agc[RF90_PATH_A] = 0x3f3f3f3f;
+               tx_agc[RF90_PATH_B] = 0x3f3f3f3f;
+               if (turbo_scanoff) {
+                       for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
+                               tx_agc[idx1] = ppowerlevel[idx1] |
+                                   (ppowerlevel[idx1] << 8) |
+                                   (ppowerlevel[idx1] << 16) |
+                                   (ppowerlevel[idx1] << 24);
+                       }
+               }
+       } else {
+               for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
+                       tx_agc[idx1] = ppowerlevel[idx1] |
+                           (ppowerlevel[idx1] << 8) |
+                           (ppowerlevel[idx1] << 16) |
+                           (ppowerlevel[idx1] << 24);
+               }
+               if (rtlefuse->eeprom_regulatory == 0) {
+                       tmpval = (rtlphy->mcs_offset[0][6]) +
+                           (rtlphy->mcs_offset[0][7] << 8);
+                       tx_agc[RF90_PATH_A] += tmpval;
+                       tmpval = (rtlphy->mcs_offset[0][14]) +
+                           (rtlphy->mcs_offset[0][15] << 24);
+                       tx_agc[RF90_PATH_B] += tmpval;
+               }
+       }
+
+       for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
+               ptr = (u8 *)(&tx_agc[idx1]);
+               for (idx2 = 0; idx2 < 4; idx2++) {
+                       if (*ptr > RF6052_MAX_TX_PWR)
+                               *ptr = RF6052_MAX_TX_PWR;
+                       ptr++;
+               }
+       }
+
+       tmpval = tx_agc[RF90_PATH_A] & 0xff;
+       rtl_set_bbreg(hw, RTXAGC_A_CCK1_MCS32, MASKBYTE1, tmpval);
+       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+               "CCK PWR 1M (rf-A) = 0x%x (reg 0x%x)\n",
+               tmpval, RTXAGC_A_CCK1_MCS32);
+       tmpval = tx_agc[RF90_PATH_A] >> 8;
+       rtl_set_bbreg(hw, RTXAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
+       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+               "CCK PWR 2~11M (rf-A) = 0x%x (reg 0x%x)\n",
+               tmpval, RTXAGC_B_CCK11_A_CCK2_11);
+       tmpval = tx_agc[RF90_PATH_B] >> 24;
+       rtl_set_bbreg(hw, RTXAGC_B_CCK11_A_CCK2_11, MASKBYTE0, tmpval);
+       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+               "CCK PWR 11M (rf-B) = 0x%x (reg 0x%x)\n",
+               tmpval, RTXAGC_B_CCK11_A_CCK2_11);
+       tmpval = tx_agc[RF90_PATH_B] & 0x00ffffff;
+       rtl_set_bbreg(hw, RTXAGC_B_CCK1_55_MCS32, 0xffffff00, tmpval);
+       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+               "CCK PWR 1~5.5M (rf-B) = 0x%x (reg 0x%x)\n",
+               tmpval, RTXAGC_B_CCK1_55_MCS32);
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_rf6052_set_cck_txpower);
+
+static void _rtl92d_phy_get_power_base(struct ieee80211_hw *hw,
+                                      u8 *ppowerlevel, u8 channel,
+                                      u32 *ofdmbase, u32 *mcsbase)
+{
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       u32 powerbase0, powerbase1;
+       u8 legacy_pwrdiff, ht20_pwrdiff;
+       u8 i, powerlevel[2];
+
+       for (i = 0; i < 2; i++) {
+               powerlevel[i] = ppowerlevel[i];
+               legacy_pwrdiff = rtlefuse->txpwr_legacyhtdiff[i][channel - 1];
+               powerbase0 = powerlevel[i] + legacy_pwrdiff;
+               powerbase0 = (powerbase0 << 24) | (powerbase0 << 16) |
+                   (powerbase0 << 8) | powerbase0;
+               *(ofdmbase + i) = powerbase0;
+               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                       " [OFDM power base index rf(%c) = 0x%x]\n",
+                       i == 0 ? 'A' : 'B', *(ofdmbase + i));
+       }
+
+       for (i = 0; i < 2; i++) {
+               if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20) {
+                       ht20_pwrdiff = rtlefuse->txpwr_ht20diff[i][channel - 1];
+                       powerlevel[i] += ht20_pwrdiff;
+               }
+               powerbase1 = powerlevel[i];
+               powerbase1 = (powerbase1 << 24) | (powerbase1 << 16) |
+                            (powerbase1 << 8) | powerbase1;
+               *(mcsbase + i) = powerbase1;
+               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                       " [MCS power base index rf(%c) = 0x%x]\n",
+                       i == 0 ? 'A' : 'B', *(mcsbase + i));
+       }
+}
+
+static void _rtl92d_get_txpower_writeval_by_regulatory(struct ieee80211_hw *hw,
+                                                      u8 channel, u8 index,
+                                                      u32 *powerbase0,
+                                                      u32 *powerbase1,
+                                                      u32 *p_outwriteval)
+{
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       u8 i, chnlgroup = 0, pwr_diff_limit[4];
+       u32 writeval = 0, customer_limit, rf;
+
+       for (rf = 0; rf < 2; rf++) {
+               switch (rtlefuse->eeprom_regulatory) {
+               case 0:
+                       chnlgroup = 0;
+                       writeval = rtlphy->mcs_offset
+                                       [chnlgroup][index +
+                                       (rf ? 8 : 0)] + ((index < 2) ?
+                                       powerbase0[rf] :
+                                       powerbase1[rf]);
+                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                               "RTK better performance, writeval(%c) = 0x%x\n",
+                               rf == 0 ? 'A' : 'B', writeval);
+                       break;
+               case 1:
+                       if (rtlphy->pwrgroup_cnt == 1)
+                               chnlgroup = 0;
+                       if (rtlphy->pwrgroup_cnt >= MAX_PG_GROUP) {
+                               chnlgroup = rtl92d_phy_get_chnlgroup_bypg(channel - 1);
+                               if (rtlphy->current_chan_bw ==
+                                   HT_CHANNEL_WIDTH_20)
+                                       chnlgroup++;
+                               else
+                                       chnlgroup += 4;
+                               writeval = rtlphy->mcs_offset
+                                               [chnlgroup][index +
+                                               (rf ? 8 : 0)] + ((index < 2) ?
+                                               powerbase0[rf] :
+                                               powerbase1[rf]);
+                               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                                       "Realtek regulatory, 20MHz, writeval(%c) = 0x%x\n",
+                                       rf == 0 ? 'A' : 'B', writeval);
+                       }
+                       break;
+               case 2:
+                       writeval = ((index < 2) ? powerbase0[rf] :
+                                  powerbase1[rf]);
+                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                               "Better regulatory, writeval(%c) = 0x%x\n",
+                               rf == 0 ? 'A' : 'B', writeval);
+                       break;
+               case 3:
+                       chnlgroup = 0;
+                       if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20_40) {
+                               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                                       "customer's limit, 40MHz rf(%c) = 0x%x\n",
+                                       rf == 0 ? 'A' : 'B',
+                                       rtlefuse->pwrgroup_ht40[rf]
+                                       [channel - 1]);
+                       } else {
+                               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                                       "customer's limit, 20MHz rf(%c) = 0x%x\n",
+                                       rf == 0 ? 'A' : 'B',
+                                       rtlefuse->pwrgroup_ht20[rf]
+                                       [channel - 1]);
+                       }
+                       for (i = 0; i < 4; i++) {
+                               pwr_diff_limit[i] = (u8)((rtlphy->mcs_offset
+                                       [chnlgroup][index + (rf ? 8 : 0)] &
+                                       (0x7f << (i * 8))) >> (i * 8));
+                               if (rtlphy->current_chan_bw ==
+                                   HT_CHANNEL_WIDTH_20_40) {
+                                       if (pwr_diff_limit[i] >
+                                           rtlefuse->pwrgroup_ht40[rf]
+                                          [channel - 1])
+                                               pwr_diff_limit[i] =
+                                                       rtlefuse->pwrgroup_ht40
+                                                       [rf][channel - 1];
+                               } else {
+                                       if (pwr_diff_limit[i] >
+                                           rtlefuse->pwrgroup_ht20[rf][channel - 1])
+                                               pwr_diff_limit[i] =
+                                                  rtlefuse->pwrgroup_ht20[rf]
+                                                  [channel - 1];
+                               }
+                       }
+                       customer_limit = (pwr_diff_limit[3] << 24) |
+                                        (pwr_diff_limit[2] << 16) |
+                                        (pwr_diff_limit[1] << 8) |
+                                        (pwr_diff_limit[0]);
+                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                               "Customer's limit rf(%c) = 0x%x\n",
+                               rf == 0 ? 'A' : 'B', customer_limit);
+                       writeval = customer_limit + ((index < 2) ?
+                                  powerbase0[rf] : powerbase1[rf]);
+                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                               "Customer, writeval rf(%c)= 0x%x\n",
+                               rf == 0 ? 'A' : 'B', writeval);
+                       break;
+               default:
+                       chnlgroup = 0;
+                       writeval = rtlphy->mcs_offset[chnlgroup][index +
+                                  (rf ? 8 : 0)] + ((index < 2) ?
+                                  powerbase0[rf] : powerbase1[rf]);
+                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                               "RTK better performance, writeval rf(%c) = 0x%x\n",
+                               rf == 0 ? 'A' : 'B', writeval);
+                       break;
+               }
+               *(p_outwriteval + rf) = writeval;
+       }
+}
+
+static void _rtl92d_write_ofdm_power_reg(struct ieee80211_hw *hw,
+                                        u8 index, u32 *pvalue)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       static const u16 regoffset_a[6] = {
+               RTXAGC_A_RATE18_06, RTXAGC_A_RATE54_24,
+               RTXAGC_A_MCS03_MCS00, RTXAGC_A_MCS07_MCS04,
+               RTXAGC_A_MCS11_MCS08, RTXAGC_A_MCS15_MCS12
+       };
+       static const u16 regoffset_b[6] = {
+               RTXAGC_B_RATE18_06, RTXAGC_B_RATE54_24,
+               RTXAGC_B_MCS03_MCS00, RTXAGC_B_MCS07_MCS04,
+               RTXAGC_B_MCS11_MCS08, RTXAGC_B_MCS15_MCS12
+       };
+       u8 i, rf, pwr_val[4];
+       u32 writeval;
+       u16 regoffset;
+
+       for (rf = 0; rf < 2; rf++) {
+               writeval = pvalue[rf];
+               for (i = 0; i < 4; i++) {
+                       pwr_val[i] = (u8)((writeval & (0x7f <<
+                                    (i * 8))) >> (i * 8));
+                       if (pwr_val[i] > RF6052_MAX_TX_PWR)
+                               pwr_val[i] = RF6052_MAX_TX_PWR;
+               }
+               writeval = (pwr_val[3] << 24) | (pwr_val[2] << 16) |
+                          (pwr_val[1] << 8) | pwr_val[0];
+               if (rf == 0)
+                       regoffset = regoffset_a[index];
+               else
+                       regoffset = regoffset_b[index];
+               rtl_set_bbreg(hw, regoffset, MASKDWORD, writeval);
+               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                       "Set 0x%x = %08x\n", regoffset, writeval);
+               if (((get_rf_type(rtlphy) == RF_2T2R) &&
+                    (regoffset == RTXAGC_A_MCS15_MCS12 ||
+                     regoffset == RTXAGC_B_MCS15_MCS12)) ||
+                   ((get_rf_type(rtlphy) != RF_2T2R) &&
+                    (regoffset == RTXAGC_A_MCS07_MCS04 ||
+                     regoffset == RTXAGC_B_MCS07_MCS04))) {
+                       writeval = pwr_val[3];
+                       if (regoffset == RTXAGC_A_MCS15_MCS12 ||
+                           regoffset == RTXAGC_A_MCS07_MCS04)
+                               regoffset = 0xc90;
+                       if (regoffset == RTXAGC_B_MCS15_MCS12 ||
+                           regoffset == RTXAGC_B_MCS07_MCS04)
+                               regoffset = 0xc98;
+                       for (i = 0; i < 3; i++) {
+                               if (i != 2)
+                                       writeval = (writeval > 8) ?
+                                                  (writeval - 8) : 0;
+                               else
+                                       writeval = (writeval > 6) ?
+                                                  (writeval - 6) : 0;
+                               rtl_write_byte(rtlpriv, (u32)(regoffset + i),
+                                              (u8)writeval);
+                       }
+               }
+       }
+}
+
+void rtl92d_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw,
+                                       u8 *ppowerlevel, u8 channel)
+{
+       u32 writeval[2], powerbase0[2], powerbase1[2];
+       u8 index;
+
+       _rtl92d_phy_get_power_base(hw, ppowerlevel, channel,
+                                  &powerbase0[0], &powerbase1[0]);
+       for (index = 0; index < 6; index++) {
+               _rtl92d_get_txpower_writeval_by_regulatory(hw, channel, index,
+                                                          &powerbase0[0],
+                                                          &powerbase1[0],
+                                                          &writeval[0]);
+               _rtl92d_write_ofdm_power_reg(hw, index, &writeval[0]);
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92d_phy_rf6052_set_ofdm_txpower);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/rf_common.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/rf_common.h
new file mode 100644 (file)
index 0000000..c243ec0
--- /dev/null
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#ifndef __RTL92D_RF_COMMON_H__
+#define __RTL92D_RF_COMMON_H__
+
+void rtl92d_phy_rf6052_set_bandwidth(struct ieee80211_hw *hw, u8 bandwidth);
+void rtl92d_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
+                                      u8 *ppowerlevel);
+void rtl92d_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw,
+                                       u8 *ppowerlevel, u8 channel);
+
+#endif
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.c
new file mode 100644 (file)
index 0000000..5b8f404
--- /dev/null
@@ -0,0 +1,515 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#include "../wifi.h"
+#include "../base.h"
+#include "../stats.h"
+#include "def.h"
+#include "trx_common.h"
+
+static long _rtl92de_translate_todbm(struct ieee80211_hw *hw,
+                                    u8 signal_strength_index)
+{
+       long signal_power;
+
+       signal_power = (long)((signal_strength_index + 1) >> 1);
+       signal_power -= 95;
+       return signal_power;
+}
+
+static void _rtl92de_query_rxphystatus(struct ieee80211_hw *hw,
+                                      struct rtl_stats *pstats,
+                                      __le32 *pdesc,
+                                      struct rx_fwinfo_92d *p_drvinfo,
+                                      bool packet_match_bssid,
+                                      bool packet_toself,
+                                      bool packet_beacon)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       struct rtl_ps_ctl *ppsc = rtl_psc(rtlpriv);
+       struct phy_sts_cck_8192d *cck_buf;
+       s8 rx_pwr_all, rx_pwr[4];
+       u8 rf_rx_num = 0, evm, pwdb_all;
+       u8 i, max_spatial_stream;
+       u32 rssi, total_rssi = 0;
+       bool is_cck_rate;
+       u8 rxmcs;
+
+       rxmcs = get_rx_desc_rxmcs(pdesc);
+       is_cck_rate = rxmcs <= DESC_RATE11M;
+       pstats->packet_matchbssid = packet_match_bssid;
+       pstats->packet_toself = packet_toself;
+       pstats->packet_beacon = packet_beacon;
+       pstats->is_cck = is_cck_rate;
+       pstats->rx_mimo_sig_qual[0] = -1;
+       pstats->rx_mimo_sig_qual[1] = -1;
+
+       if (is_cck_rate) {
+               u8 report, cck_highpwr;
+
+               cck_buf = (struct phy_sts_cck_8192d *)p_drvinfo;
+               if (ppsc->rfpwr_state == ERFON)
+                       cck_highpwr = rtlphy->cck_high_power;
+               else
+                       cck_highpwr = false;
+               if (!cck_highpwr) {
+                       u8 cck_agc_rpt = cck_buf->cck_agc_rpt;
+
+                       report = cck_buf->cck_agc_rpt & 0xc0;
+                       report = report >> 6;
+                       switch (report) {
+                       case 0x3:
+                               rx_pwr_all = -46 - (cck_agc_rpt & 0x3e);
+                               break;
+                       case 0x2:
+                               rx_pwr_all = -26 - (cck_agc_rpt & 0x3e);
+                               break;
+                       case 0x1:
+                               rx_pwr_all = -12 - (cck_agc_rpt & 0x3e);
+                               break;
+                       case 0x0:
+                               rx_pwr_all = 16 - (cck_agc_rpt & 0x3e);
+                               break;
+                       }
+               } else {
+                       u8 cck_agc_rpt = cck_buf->cck_agc_rpt;
+
+                       report = p_drvinfo->cfosho[0] & 0x60;
+                       report = report >> 5;
+                       switch (report) {
+                       case 0x3:
+                               rx_pwr_all = -46 - ((cck_agc_rpt & 0x1f) << 1);
+                               break;
+                       case 0x2:
+                               rx_pwr_all = -26 - ((cck_agc_rpt & 0x1f) << 1);
+                               break;
+                       case 0x1:
+                               rx_pwr_all = -12 - ((cck_agc_rpt & 0x1f) << 1);
+                               break;
+                       case 0x0:
+                               rx_pwr_all = 16 - ((cck_agc_rpt & 0x1f) << 1);
+                               break;
+                       }
+               }
+               pwdb_all = rtl_query_rxpwrpercentage(rx_pwr_all);
+               /* CCK gain is smaller than OFDM/MCS gain,  */
+               /* so we add gain diff by experiences, the val is 6 */
+               pwdb_all += 6;
+               if (pwdb_all > 100)
+                       pwdb_all = 100;
+               /* modify the offset to make the same gain index with OFDM. */
+               if (pwdb_all > 34 && pwdb_all <= 42)
+                       pwdb_all -= 2;
+               else if (pwdb_all > 26 && pwdb_all <= 34)
+                       pwdb_all -= 6;
+               else if (pwdb_all > 14 && pwdb_all <= 26)
+                       pwdb_all -= 8;
+               else if (pwdb_all > 4 && pwdb_all <= 14)
+                       pwdb_all -= 4;
+               pstats->rx_pwdb_all = pwdb_all;
+               pstats->recvsignalpower = rx_pwr_all;
+               if (packet_match_bssid) {
+                       u8 sq;
+
+                       if (pstats->rx_pwdb_all > 40) {
+                               sq = 100;
+                       } else {
+                               sq = cck_buf->sq_rpt;
+                               if (sq > 64)
+                                       sq = 0;
+                               else if (sq < 20)
+                                       sq = 100;
+                               else
+                                       sq = ((64 - sq) * 100) / 44;
+                       }
+                       pstats->signalquality = sq;
+                       pstats->rx_mimo_sig_qual[0] = sq;
+                       pstats->rx_mimo_sig_qual[1] = -1;
+               }
+       } else {
+               rtlpriv->dm.rfpath_rxenable[0] = true;
+               rtlpriv->dm.rfpath_rxenable[1] = true;
+               for (i = RF90_PATH_A; i < RF6052_MAX_PATH; i++) {
+                       if (rtlpriv->dm.rfpath_rxenable[i])
+                               rf_rx_num++;
+                       rx_pwr[i] = ((p_drvinfo->gain_trsw[i] & 0x3f) * 2)
+                                   - 110;
+                       rssi = rtl_query_rxpwrpercentage(rx_pwr[i]);
+                       total_rssi += rssi;
+                       rtlpriv->stats.rx_snr_db[i] =
+                                        (long)(p_drvinfo->rxsnr[i] / 2);
+                       if (packet_match_bssid)
+                               pstats->rx_mimo_signalstrength[i] = (u8)rssi;
+               }
+               rx_pwr_all = ((p_drvinfo->pwdb_all >> 1) & 0x7f) - 106;
+               pwdb_all = rtl_query_rxpwrpercentage(rx_pwr_all);
+               pstats->rx_pwdb_all = pwdb_all;
+               pstats->rxpower = rx_pwr_all;
+               pstats->recvsignalpower = rx_pwr_all;
+               if (get_rx_desc_rxht(pdesc) && rxmcs >= DESC_RATEMCS8 &&
+                   rxmcs <= DESC_RATEMCS15)
+                       max_spatial_stream = 2;
+               else
+                       max_spatial_stream = 1;
+               for (i = 0; i < max_spatial_stream; i++) {
+                       evm = rtl_evm_db_to_percentage(p_drvinfo->rxevm[i]);
+                       if (packet_match_bssid) {
+                               if (i == 0)
+                                       pstats->signalquality =
+                                                (u8)(evm & 0xff);
+                               pstats->rx_mimo_sig_qual[i] =
+                                                (u8)(evm & 0xff);
+                       }
+               }
+       }
+       if (is_cck_rate)
+               pstats->signalstrength = (u8)(rtl_signal_scale_mapping(hw,
+                               pwdb_all));
+       else if (rf_rx_num != 0)
+               pstats->signalstrength = (u8)(rtl_signal_scale_mapping(hw,
+                               total_rssi /= rf_rx_num));
+}
+
+static void rtl92d_loop_over_paths(struct ieee80211_hw *hw,
+                                  struct rtl_stats *pstats)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       u8 rfpath;
+
+       for (rfpath = RF90_PATH_A; rfpath < rtlphy->num_total_rfpath;
+            rfpath++) {
+               if (rtlpriv->stats.rx_rssi_percentage[rfpath] == 0) {
+                       rtlpriv->stats.rx_rssi_percentage[rfpath] =
+                           pstats->rx_mimo_signalstrength[rfpath];
+               }
+               if (pstats->rx_mimo_signalstrength[rfpath] >
+                   rtlpriv->stats.rx_rssi_percentage[rfpath]) {
+                       rtlpriv->stats.rx_rssi_percentage[rfpath] =
+                           ((rtlpriv->stats.rx_rssi_percentage[rfpath] *
+                             (RX_SMOOTH_FACTOR - 1)) +
+                            (pstats->rx_mimo_signalstrength[rfpath])) /
+                           (RX_SMOOTH_FACTOR);
+                       rtlpriv->stats.rx_rssi_percentage[rfpath] =
+                           rtlpriv->stats.rx_rssi_percentage[rfpath] + 1;
+               } else {
+                       rtlpriv->stats.rx_rssi_percentage[rfpath] =
+                           ((rtlpriv->stats.rx_rssi_percentage[rfpath] *
+                             (RX_SMOOTH_FACTOR - 1)) +
+                            (pstats->rx_mimo_signalstrength[rfpath])) /
+                           (RX_SMOOTH_FACTOR);
+               }
+       }
+}
+
+static void _rtl92de_process_ui_rssi(struct ieee80211_hw *hw,
+                                    struct rtl_stats *pstats)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rt_smooth_data *ui_rssi;
+       u32 last_rssi, tmpval;
+
+       if (!pstats->packet_toself && !pstats->packet_beacon)
+               return;
+
+       ui_rssi = &rtlpriv->stats.ui_rssi;
+
+       rtlpriv->stats.rssi_calculate_cnt++;
+       if (ui_rssi->total_num++ >= PHY_RSSI_SLID_WIN_MAX) {
+               ui_rssi->total_num = PHY_RSSI_SLID_WIN_MAX;
+               last_rssi = ui_rssi->elements[ui_rssi->index];
+               ui_rssi->total_val -= last_rssi;
+       }
+       ui_rssi->total_val += pstats->signalstrength;
+       ui_rssi->elements[ui_rssi->index++] = pstats->signalstrength;
+       if (ui_rssi->index >= PHY_RSSI_SLID_WIN_MAX)
+               ui_rssi->index = 0;
+       tmpval = ui_rssi->total_val / ui_rssi->total_num;
+       rtlpriv->stats.signal_strength = _rtl92de_translate_todbm(hw, (u8)tmpval);
+       pstats->rssi = rtlpriv->stats.signal_strength;
+
+       if (!pstats->is_cck && pstats->packet_toself)
+               rtl92d_loop_over_paths(hw, pstats);
+}
+
+static void _rtl92de_update_rxsignalstatistics(struct ieee80211_hw *hw,
+                                              struct rtl_stats *pstats)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       int weighting = 0;
+
+       if (rtlpriv->stats.recv_signal_power == 0)
+               rtlpriv->stats.recv_signal_power = pstats->recvsignalpower;
+       if (pstats->recvsignalpower > rtlpriv->stats.recv_signal_power)
+               weighting = 5;
+       else if (pstats->recvsignalpower < rtlpriv->stats.recv_signal_power)
+               weighting = (-5);
+       rtlpriv->stats.recv_signal_power = (rtlpriv->stats.recv_signal_power *
+               5 + pstats->recvsignalpower + weighting) / 6;
+}
+
+static void _rtl92de_process_pwdb(struct ieee80211_hw *hw,
+                                 struct rtl_stats *pstats)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
+       long undec_sm_pwdb;
+
+       if (mac->opmode == NL80211_IFTYPE_ADHOC ||
+           mac->opmode == NL80211_IFTYPE_AP)
+               return;
+
+       undec_sm_pwdb = rtlpriv->dm.undec_sm_pwdb;
+
+       if (pstats->packet_toself || pstats->packet_beacon) {
+               if (undec_sm_pwdb < 0)
+                       undec_sm_pwdb = pstats->rx_pwdb_all;
+               if (pstats->rx_pwdb_all > (u32)undec_sm_pwdb) {
+                       undec_sm_pwdb = (((undec_sm_pwdb) *
+                             (RX_SMOOTH_FACTOR - 1)) +
+                             (pstats->rx_pwdb_all)) / (RX_SMOOTH_FACTOR);
+                       undec_sm_pwdb = undec_sm_pwdb + 1;
+               } else {
+                       undec_sm_pwdb = (((undec_sm_pwdb) *
+                             (RX_SMOOTH_FACTOR - 1)) +
+                             (pstats->rx_pwdb_all)) / (RX_SMOOTH_FACTOR);
+               }
+               rtlpriv->dm.undec_sm_pwdb = undec_sm_pwdb;
+               _rtl92de_update_rxsignalstatistics(hw, pstats);
+       }
+}
+
+static void rtl92d_loop_over_streams(struct ieee80211_hw *hw,
+                                    struct rtl_stats *pstats)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       int stream;
+
+       for (stream = 0; stream < 2; stream++) {
+               if (pstats->rx_mimo_sig_qual[stream] != -1) {
+                       if (rtlpriv->stats.rx_evm_percentage[stream] == 0) {
+                               rtlpriv->stats.rx_evm_percentage[stream] =
+                                   pstats->rx_mimo_sig_qual[stream];
+                       }
+                       rtlpriv->stats.rx_evm_percentage[stream] =
+                           ((rtlpriv->stats.rx_evm_percentage[stream]
+                             * (RX_SMOOTH_FACTOR - 1)) +
+                            (pstats->rx_mimo_sig_qual[stream] * 1)) /
+                           (RX_SMOOTH_FACTOR);
+               }
+       }
+}
+
+static void _rtl92de_process_ui_link_quality(struct ieee80211_hw *hw,
+                                            struct rtl_stats *pstats)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rt_smooth_data *ui_link_quality;
+       u32 last_evm, tmpval;
+
+       if (pstats->signalquality == 0)
+               return;
+       if (!pstats->packet_toself && !pstats->packet_beacon)
+               return;
+
+       ui_link_quality = &rtlpriv->stats.ui_link_quality;
+
+       if (ui_link_quality->total_num++ >= PHY_LINKQUALITY_SLID_WIN_MAX) {
+               ui_link_quality->total_num = PHY_LINKQUALITY_SLID_WIN_MAX;
+               last_evm = ui_link_quality->elements[ui_link_quality->index];
+               ui_link_quality->total_val -= last_evm;
+       }
+       ui_link_quality->total_val += pstats->signalquality;
+       ui_link_quality->elements[ui_link_quality->index++] = pstats->signalquality;
+       if (ui_link_quality->index >= PHY_LINKQUALITY_SLID_WIN_MAX)
+               ui_link_quality->index = 0;
+       tmpval = ui_link_quality->total_val / ui_link_quality->total_num;
+       rtlpriv->stats.signal_quality = tmpval;
+       rtlpriv->stats.last_sigstrength_inpercent = tmpval;
+       rtl92d_loop_over_streams(hw, pstats);
+}
+
+static void _rtl92de_process_phyinfo(struct ieee80211_hw *hw,
+                                    u8 *buffer,
+                                    struct rtl_stats *pcurrent_stats)
+{
+       if (!pcurrent_stats->packet_matchbssid &&
+           !pcurrent_stats->packet_beacon)
+               return;
+
+       _rtl92de_process_ui_rssi(hw, pcurrent_stats);
+       _rtl92de_process_pwdb(hw, pcurrent_stats);
+       _rtl92de_process_ui_link_quality(hw, pcurrent_stats);
+}
+
+static void _rtl92de_translate_rx_signal_stuff(struct ieee80211_hw *hw,
+                                              struct sk_buff *skb,
+                                              struct rtl_stats *pstats,
+                                              __le32 *pdesc,
+                                              struct rx_fwinfo_92d *p_drvinfo)
+{
+       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       struct ieee80211_hdr *hdr;
+       u8 *tmp_buf;
+       u8 *praddr;
+       u16 type, cfc;
+       __le16 fc;
+       bool packet_matchbssid, packet_toself, packet_beacon = false;
+
+       tmp_buf = skb->data + pstats->rx_drvinfo_size + pstats->rx_bufshift;
+       hdr = (struct ieee80211_hdr *)tmp_buf;
+       fc = hdr->frame_control;
+       cfc = le16_to_cpu(fc);
+       type = WLAN_FC_GET_TYPE(fc);
+       praddr = hdr->addr1;
+       packet_matchbssid = ((type != IEEE80211_FTYPE_CTL) &&
+            ether_addr_equal(mac->bssid,
+                             (cfc & IEEE80211_FCTL_TODS) ? hdr->addr1 :
+                             (cfc & IEEE80211_FCTL_FROMDS) ? hdr->addr2 :
+                             hdr->addr3) &&
+            (!pstats->hwerror) && (!pstats->crc) && (!pstats->icv));
+       packet_toself = packet_matchbssid &&
+                       ether_addr_equal(praddr, rtlefuse->dev_addr);
+       if (ieee80211_is_beacon(fc))
+               packet_beacon = true;
+       _rtl92de_query_rxphystatus(hw, pstats, pdesc, p_drvinfo,
+                                  packet_matchbssid, packet_toself,
+                                  packet_beacon);
+       _rtl92de_process_phyinfo(hw, tmp_buf, pstats);
+}
+
+bool rtl92de_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
+                          struct ieee80211_rx_status *rx_status,
+                          u8 *pdesc8, struct sk_buff *skb)
+{
+       __le32 *pdesc = (__le32 *)pdesc8;
+       struct rx_fwinfo_92d *p_drvinfo;
+       u32 phystatus = get_rx_desc_physt(pdesc);
+
+       stats->length = (u16)get_rx_desc_pkt_len(pdesc);
+       stats->rx_drvinfo_size = (u8)get_rx_desc_drv_info_size(pdesc) *
+                                RX_DRV_INFO_SIZE_UNIT;
+       stats->rx_bufshift = (u8)(get_rx_desc_shift(pdesc) & 0x03);
+       stats->icv = (u16)get_rx_desc_icv(pdesc);
+       stats->crc = (u16)get_rx_desc_crc32(pdesc);
+       stats->hwerror = (stats->crc | stats->icv);
+       stats->decrypted = !get_rx_desc_swdec(pdesc) &&
+                          get_rx_desc_enc_type(pdesc) != RX_DESC_ENC_NONE;
+       stats->rate = (u8)get_rx_desc_rxmcs(pdesc);
+       stats->shortpreamble = (u16)get_rx_desc_splcp(pdesc);
+       stats->isampdu = (bool)(get_rx_desc_paggr(pdesc) == 1);
+       stats->isfirst_ampdu = (bool)((get_rx_desc_paggr(pdesc) == 1) &&
+                                     (get_rx_desc_faggr(pdesc) == 1));
+       stats->timestamp_low = get_rx_desc_tsfl(pdesc);
+       stats->rx_is40mhzpacket = (bool)get_rx_desc_bw(pdesc);
+       stats->is_ht = (bool)get_rx_desc_rxht(pdesc);
+       rx_status->freq = hw->conf.chandef.chan->center_freq;
+       rx_status->band = hw->conf.chandef.chan->band;
+       if (get_rx_desc_crc32(pdesc))
+               rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
+       if (get_rx_desc_bw(pdesc))
+               rx_status->bw = RATE_INFO_BW_40;
+       if (get_rx_desc_rxht(pdesc))
+               rx_status->encoding = RX_ENC_HT;
+       rx_status->flag |= RX_FLAG_MACTIME_START;
+       if (stats->decrypted)
+               rx_status->flag |= RX_FLAG_DECRYPTED;
+       rx_status->rate_idx = rtlwifi_rate_mapping(hw, stats->is_ht,
+                                                  false, stats->rate);
+       rx_status->mactime = get_rx_desc_tsfl(pdesc);
+       if (phystatus) {
+               p_drvinfo = (struct rx_fwinfo_92d *)(skb->data +
+                                                    stats->rx_bufshift);
+               _rtl92de_translate_rx_signal_stuff(hw, skb, stats, pdesc,
+                                                  p_drvinfo);
+       }
+       /*rx_status->qual = stats->signal; */
+       rx_status->signal = stats->recvsignalpower + 10;
+       return true;
+}
+EXPORT_SYMBOL_GPL(rtl92de_rx_query_desc);
+
+void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc8, bool istx,
+                     u8 desc_name, u8 *val)
+{
+       __le32 *pdesc = (__le32 *)pdesc8;
+
+       if (istx) {
+               switch (desc_name) {
+               case HW_DESC_OWN:
+                       wmb();
+                       set_tx_desc_own(pdesc, 1);
+                       break;
+               case HW_DESC_TX_NEXTDESC_ADDR:
+                       set_tx_desc_next_desc_address(pdesc, *(u32 *)val);
+                       break;
+               default:
+                       WARN_ONCE(true, "rtl8192de: ERR txdesc :%d not processed\n",
+                                 desc_name);
+                       break;
+               }
+       } else {
+               switch (desc_name) {
+               case HW_DESC_RXOWN:
+                       wmb();
+                       set_rx_desc_own(pdesc, 1);
+                       break;
+               case HW_DESC_RXBUFF_ADDR:
+                       set_rx_desc_buff_addr(pdesc, *(u32 *)val);
+                       break;
+               case HW_DESC_RXPKT_LEN:
+                       set_rx_desc_pkt_len(pdesc, *(u32 *)val);
+                       break;
+               case HW_DESC_RXERO:
+                       set_rx_desc_eor(pdesc, 1);
+                       break;
+               default:
+                       WARN_ONCE(true, "rtl8192de: ERR rxdesc :%d not processed\n",
+                                 desc_name);
+                       break;
+               }
+       }
+}
+EXPORT_SYMBOL_GPL(rtl92de_set_desc);
+
+u64 rtl92de_get_desc(struct ieee80211_hw *hw,
+                    u8 *p_desc8, bool istx, u8 desc_name)
+{
+       __le32 *p_desc = (__le32 *)p_desc8;
+       u32 ret = 0;
+
+       if (istx) {
+               switch (desc_name) {
+               case HW_DESC_OWN:
+                       ret = get_tx_desc_own(p_desc);
+                       break;
+               case HW_DESC_TXBUFF_ADDR:
+                       ret = get_tx_desc_tx_buffer_address(p_desc);
+                       break;
+               default:
+                       WARN_ONCE(true, "rtl8192de: ERR txdesc :%d not processed\n",
+                                 desc_name);
+                       break;
+               }
+       } else {
+               switch (desc_name) {
+               case HW_DESC_OWN:
+                       ret = get_rx_desc_own(p_desc);
+                       break;
+               case HW_DESC_RXPKT_LEN:
+                       ret = get_rx_desc_pkt_len(p_desc);
+               break;
+               case HW_DESC_RXBUFF_ADDR:
+                       ret = get_rx_desc_buff_addr(p_desc);
+                       break;
+               default:
+                       WARN_ONCE(true, "rtl8192de: ERR rxdesc :%d not processed\n",
+                                 desc_name);
+                       break;
+               }
+       }
+       return ret;
+}
+EXPORT_SYMBOL_GPL(rtl92de_get_desc);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.h
new file mode 100644 (file)
index 0000000..87d956d
--- /dev/null
@@ -0,0 +1,405 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright(c) 2009-2012  Realtek Corporation.*/
+
+#ifndef __RTL92D_TRX_COMMON_H__
+#define __RTL92D_TRX_COMMON_H__
+
+#define RX_DRV_INFO_SIZE_UNIT                  8
+
+enum rtl92d_rx_desc_enc {
+       RX_DESC_ENC_NONE        = 0,
+       RX_DESC_ENC_WEP40       = 1,
+       RX_DESC_ENC_TKIP_WO_MIC = 2,
+       RX_DESC_ENC_TKIP_MIC    = 3,
+       RX_DESC_ENC_AES         = 4,
+       RX_DESC_ENC_WEP104      = 5,
+};
+
+/* macros to read/write various fields in RX or TX descriptors */
+
+static inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits(__pdesc, __val, GENMASK(15, 0));
+}
+
+static inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits(__pdesc, __val, GENMASK(23, 16));
+}
+
+static inline void set_tx_desc_htc(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits(__pdesc, __val, BIT(25));
+}
+
+static inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits(__pdesc, __val, BIT(26));
+}
+
+static inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits(__pdesc, __val, BIT(27));
+}
+
+static inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits(__pdesc, __val, BIT(28));
+}
+
+static inline void set_tx_desc_own(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits(__pdesc, __val, BIT(31));
+}
+
+static inline u32 get_tx_desc_own(__le32 *__pdesc)
+{
+       return le32_get_bits(*__pdesc, BIT(31));
+}
+
+static inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 1), __val, GENMASK(4, 0));
+}
+
+static inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 1), __val, BIT(5));
+}
+
+static inline void set_tx_desc_rdg_enable(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 1), __val, BIT(7));
+}
+
+static inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 1), __val, GENMASK(12, 8));
+}
+
+static inline void set_tx_desc_rate_id(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 1), __val, GENMASK(19, 16));
+}
+
+static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 1), __val, GENMASK(23, 22));
+}
+
+static inline void set_tx_desc_pkt_offset(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 1), __val, GENMASK(30, 26));
+}
+
+static inline void set_tx_desc_more_frag(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 2), __val, BIT(17));
+}
+
+static inline void set_tx_desc_ampdu_density(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 2), __val, GENMASK(22, 20));
+}
+
+static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 3), __val, GENMASK(27, 16));
+}
+
+static inline void set_tx_desc_pkt_id(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 3), __val, GENMASK(31, 28));
+}
+
+static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, GENMASK(4, 0));
+}
+
+static inline void set_tx_desc_qos(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, BIT(6));
+}
+
+static inline void set_tx_desc_hwseq_en(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, BIT(7));
+}
+
+static inline void set_tx_desc_use_rate(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, BIT(8));
+}
+
+static inline void set_tx_desc_disable_fb(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, BIT(10));
+}
+
+static inline void set_tx_desc_cts2self(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, BIT(11));
+}
+
+static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, BIT(12));
+}
+
+static inline void set_tx_desc_hw_rts_enable(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, BIT(13));
+}
+
+static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, GENMASK(21, 20));
+}
+
+static inline void set_tx_desc_data_bw(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, BIT(25));
+}
+
+static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, BIT(26));
+}
+
+static inline void set_tx_desc_rts_bw(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, BIT(27));
+}
+
+static inline void set_tx_desc_rts_sc(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, GENMASK(29, 28));
+}
+
+static inline void set_tx_desc_rts_stbc(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 4), __val, GENMASK(31, 30));
+}
+
+static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 5), __val, GENMASK(5, 0));
+}
+
+static inline void set_tx_desc_data_shortgi(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 5), __val, BIT(6));
+}
+
+static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 5), __val, GENMASK(12, 8));
+}
+
+static inline void set_tx_desc_rts_rate_fb_limit(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 5), __val, GENMASK(16, 13));
+}
+
+static inline void set_tx_desc_max_agg_num(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 6), __val, GENMASK(15, 11));
+}
+
+static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits((__pdesc + 7), __val, GENMASK(15, 0));
+}
+
+static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val)
+{
+       *(__pdesc + 8) = cpu_to_le32(__val);
+}
+
+static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc)
+{
+       return le32_to_cpu(*(__pdesc + 8));
+}
+
+static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val)
+{
+       *(__pdesc + 10) = cpu_to_le32(__val);
+}
+
+static inline u32 get_rx_desc_pkt_len(__le32 *__pdesc)
+{
+       return le32_get_bits(*__pdesc, GENMASK(13, 0));
+}
+
+static inline u32 get_rx_desc_crc32(__le32 *__pdesc)
+{
+       return le32_get_bits(*__pdesc, BIT(14));
+}
+
+static inline u32 get_rx_desc_icv(__le32 *__pdesc)
+{
+       return le32_get_bits(*__pdesc, BIT(15));
+}
+
+static inline u32 get_rx_desc_drv_info_size(__le32 *__pdesc)
+{
+       return le32_get_bits(*__pdesc, GENMASK(19, 16));
+}
+
+static inline u32 get_rx_desc_enc_type(__le32 *__pdesc)
+{
+       return le32_get_bits(*__pdesc, GENMASK(22, 20));
+}
+
+static inline u32 get_rx_desc_shift(__le32 *__pdesc)
+{
+       return le32_get_bits(*__pdesc, GENMASK(25, 24));
+}
+
+static inline u32 get_rx_desc_physt(__le32 *__pdesc)
+{
+       return le32_get_bits(*__pdesc, BIT(26));
+}
+
+static inline u32 get_rx_desc_swdec(__le32 *__pdesc)
+{
+       return le32_get_bits(*__pdesc, BIT(27));
+}
+
+static inline u32 get_rx_desc_own(__le32 *__pdesc)
+{
+       return le32_get_bits(*__pdesc, BIT(31));
+}
+
+static inline void set_rx_desc_pkt_len(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits(__pdesc, __val, GENMASK(13, 0));
+}
+
+static inline void set_rx_desc_eor(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits(__pdesc, __val, BIT(30));
+}
+
+static inline void set_rx_desc_own(__le32 *__pdesc, u32 __val)
+{
+       le32p_replace_bits(__pdesc, __val, BIT(31));
+}
+
+static inline u32 get_rx_desc_paggr(__le32 *__pdesc)
+{
+       return le32_get_bits(*(__pdesc + 1), BIT(14));
+}
+
+static inline u32 get_rx_desc_faggr(__le32 *__pdesc)
+{
+       return le32_get_bits(*(__pdesc + 1), BIT(15));
+}
+
+static inline u32 get_rx_desc_rxmcs(__le32 *__pdesc)
+{
+       return le32_get_bits(*(__pdesc + 3), GENMASK(5, 0));
+}
+
+static inline u32 get_rx_desc_rxht(__le32 *__pdesc)
+{
+       return le32_get_bits(*(__pdesc + 3), BIT(6));
+}
+
+static inline u32 get_rx_desc_splcp(__le32 *__pdesc)
+{
+       return le32_get_bits(*(__pdesc + 3), BIT(8));
+}
+
+static inline u32 get_rx_desc_bw(__le32 *__pdesc)
+{
+       return le32_get_bits(*(__pdesc + 3), BIT(9));
+}
+
+static inline u32 get_rx_desc_tsfl(__le32 *__pdesc)
+{
+       return le32_to_cpu(*(__pdesc + 5));
+}
+
+static inline u32 get_rx_desc_buff_addr(__le32 *__pdesc)
+{
+       return le32_to_cpu(*(__pdesc + 6));
+}
+
+static inline void set_rx_desc_buff_addr(__le32 *__pdesc, u32 __val)
+{
+       *(__pdesc + 6) = cpu_to_le32(__val);
+}
+
+/* For 92D early mode */
+static inline void set_earlymode_pktnum(__le32 *__paddr, u32 __value)
+{
+       le32p_replace_bits(__paddr, __value, GENMASK(2, 0));
+}
+
+static inline void set_earlymode_len0(__le32 *__paddr, u32 __value)
+{
+       le32p_replace_bits(__paddr, __value, GENMASK(15, 4));
+}
+
+static inline void set_earlymode_len1(__le32 *__paddr, u32 __value)
+{
+       le32p_replace_bits(__paddr, __value, GENMASK(27, 16));
+}
+
+static inline void set_earlymode_len2_1(__le32 *__paddr, u32 __value)
+{
+       le32p_replace_bits(__paddr, __value, GENMASK(31, 28));
+}
+
+static inline void set_earlymode_len2_2(__le32 *__paddr, u32 __value)
+{
+       le32p_replace_bits((__paddr + 1), __value, GENMASK(7, 0));
+}
+
+static inline void set_earlymode_len3(__le32 *__paddr, u32 __value)
+{
+       le32p_replace_bits((__paddr + 1), __value, GENMASK(19, 8));
+}
+
+static inline void set_earlymode_len4(__le32 *__paddr, u32 __value)
+{
+       le32p_replace_bits((__paddr + 1), __value, GENMASK(31, 20));
+}
+
+struct rx_fwinfo_92d {
+       u8 gain_trsw[4];
+       u8 pwdb_all;
+       u8 cfosho[4];
+       u8 cfotail[4];
+       s8 rxevm[2];
+       s8 rxsnr[4];
+       u8 pdsnr[2];
+       u8 csi_current[2];
+       u8 csi_target[2];
+       u8 sigevm;
+       u8 max_ex_pwr;
+#ifdef __LITTLE_ENDIAN
+       u8 ex_intf_flag:1;
+       u8 sgi_en:1;
+       u8 rxsc:2;
+       u8 reserve:4;
+#else
+       u8 reserve:4;
+       u8 rxsc:2;
+       u8 sgi_en:1;
+       u8 ex_intf_flag:1;
+#endif
+} __packed;
+
+bool rtl92de_rx_query_desc(struct ieee80211_hw *hw,
+                          struct rtl_stats *stats,
+                          struct ieee80211_rx_status *rx_status,
+                          u8 *pdesc, struct sk_buff *skb);
+void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
+                     u8 desc_name, u8 *val);
+u64 rtl92de_get_desc(struct ieee80211_hw *hw,
+                    u8 *p_desc, bool istx, u8 desc_name);
+
+#endif
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/def.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/def.h
deleted file mode 100644 (file)
index 21726d9..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright(c) 2009-2012  Realtek Corporation.*/
-
-#ifndef __RTL92D_DEF_H__
-#define __RTL92D_DEF_H__
-
-/* Min Spacing related settings. */
-#define        MAX_MSS_DENSITY_2T                              0x13
-#define        MAX_MSS_DENSITY_1T                              0x0A
-
-#define RF6052_MAX_TX_PWR                              0x3F
-#define RF6052_MAX_PATH                                        2
-
-#define        PHY_RSSI_SLID_WIN_MAX                           100
-#define        PHY_LINKQUALITY_SLID_WIN_MAX                    20
-#define        PHY_BEACON_RSSI_SLID_WIN_MAX                    10
-
-#define RT_AC_INT_MASKS                (IMR_VIDOK | IMR_VODOK | IMR_BEDOK|IMR_BKDOK)
-
-#define RX_SMOOTH_FACTOR                               20
-
-#define HAL_PRIME_CHNL_OFFSET_DONT_CARE                        0
-#define HAL_PRIME_CHNL_OFFSET_LOWER                    1
-#define HAL_PRIME_CHNL_OFFSET_UPPER                    2
-
-#define RX_MPDU_QUEUE                                  0
-#define RX_CMD_QUEUE                                   1
-
-enum version_8192d {
-       VERSION_TEST_CHIP_88C = 0x0000,
-       VERSION_TEST_CHIP_92C = 0x0020,
-       VERSION_TEST_UMC_CHIP_8723 = 0x0081,
-       VERSION_NORMAL_TSMC_CHIP_88C = 0x0008,
-       VERSION_NORMAL_TSMC_CHIP_92C = 0x0028,
-       VERSION_NORMAL_TSMC_CHIP_92C_1T2R = 0x0018,
-       VERSION_NORMAL_UMC_CHIP_88C_A_CUT = 0x0088,
-       VERSION_NORMAL_UMC_CHIP_92C_A_CUT = 0x00a8,
-       VERSION_NORMAL_UMC_CHIP_92C_1T2R_A_CUT = 0x0098,
-       VERSION_NORMAL_UMC_CHIP_8723_1T1R_A_CUT = 0x0089,
-       VERSION_NORMAL_UMC_CHIP_8723_1T1R_B_CUT = 0x1089,
-       VERSION_NORMAL_UMC_CHIP_88C_B_CUT = 0x1088,
-       VERSION_NORMAL_UMC_CHIP_92C_B_CUT = 0x10a8,
-       VERSION_NORMAL_UMC_CHIP_92C_1T2R_B_CUT = 0x1090,
-       VERSION_TEST_CHIP_92D_SINGLEPHY = 0x0022,
-       VERSION_TEST_CHIP_92D_DUALPHY = 0x0002,
-       VERSION_NORMAL_CHIP_92D_SINGLEPHY = 0x002a,
-       VERSION_NORMAL_CHIP_92D_DUALPHY = 0x000a,
-       VERSION_NORMAL_CHIP_92D_C_CUT_SINGLEPHY = 0x202a,
-       VERSION_NORMAL_CHIP_92D_C_CUT_DUALPHY = 0x200a,
-       VERSION_NORMAL_CHIP_92D_D_CUT_SINGLEPHY = 0x302a,
-       VERSION_NORMAL_CHIP_92D_D_CUT_DUALPHY = 0x300a,
-       VERSION_NORMAL_CHIP_92D_E_CUT_SINGLEPHY = 0x402a,
-       VERSION_NORMAL_CHIP_92D_E_CUT_DUALPHY = 0x400a,
-};
-
-/* for 92D */
-#define CHIP_92D_SINGLEPHY             BIT(9)
-
-/* Chip specific */
-#define CHIP_BONDING_IDENTIFIER(_value)        (((_value)>>22)&0x3)
-#define CHIP_BONDING_92C_1T2R                  0x1
-#define CHIP_BONDING_88C_USB_MCARD             0x2
-#define CHIP_BONDING_88C_USB_HP                        0x1
-
-/* [15:12] IC version(CUT): A-cut=0, B-cut=1, C-cut=2, D-cut=3 */
-/* [7] Manufacturer: TSMC=0, UMC=1 */
-/* [6:4] RF type: 1T1R=0, 1T2R=1, 2T2R=2 */
-/* [3] Chip type: TEST=0, NORMAL=1 */
-/* [2:0] IC type: 81xxC=0, 8723=1, 92D=2 */
-#define CHIP_8723                      BIT(0)
-#define CHIP_92D                       BIT(1)
-#define NORMAL_CHIP                    BIT(3)
-#define RF_TYPE_1T1R                   (~(BIT(4)|BIT(5)|BIT(6)))
-#define RF_TYPE_1T2R                   BIT(4)
-#define RF_TYPE_2T2R                   BIT(5)
-#define CHIP_VENDOR_UMC                        BIT(7)
-#define CHIP_92D_B_CUT                 BIT(12)
-#define CHIP_92D_C_CUT                 BIT(13)
-#define CHIP_92D_D_CUT                 (BIT(13)|BIT(12))
-#define CHIP_92D_E_CUT                 BIT(14)
-
-/* MASK */
-#define IC_TYPE_MASK                   (BIT(0)|BIT(1)|BIT(2))
-#define CHIP_TYPE_MASK                 BIT(3)
-#define RF_TYPE_MASK                   (BIT(4)|BIT(5)|BIT(6))
-#define MANUFACTUER_MASK               BIT(7)
-#define ROM_VERSION_MASK               (BIT(11)|BIT(10)|BIT(9)|BIT(8))
-#define CUT_VERSION_MASK               (BIT(15)|BIT(14)|BIT(13)|BIT(12))
-
-
-/* Get element */
-#define GET_CVID_IC_TYPE(version)      ((version) & IC_TYPE_MASK)
-#define GET_CVID_CHIP_TYPE(version)    ((version) & CHIP_TYPE_MASK)
-#define GET_CVID_RF_TYPE(version)      ((version) & RF_TYPE_MASK)
-#define GET_CVID_MANUFACTUER(version)  ((version) & MANUFACTUER_MASK)
-#define GET_CVID_ROM_VERSION(version)  ((version) & ROM_VERSION_MASK)
-#define GET_CVID_CUT_VERSION(version)  ((version) & CUT_VERSION_MASK)
-
-#define IS_1T1R(version)               ((GET_CVID_RF_TYPE(version)) ?  \
-                                        false : true)
-#define IS_1T2R(version)               ((GET_CVID_RF_TYPE(version) ==  \
-                                        RF_TYPE_1T2R) ? true : false)
-#define IS_2T2R(version)               ((GET_CVID_RF_TYPE(version) ==  \
-                                        RF_TYPE_2T2R) ? true : false)
-
-#define IS_92D_SINGLEPHY(version)      ((IS_92D(version)) ?            \
-                                (IS_2T2R(version) ? true : false) : false)
-#define IS_92D(version)                        ((GET_CVID_IC_TYPE(version) ==  \
-                                        CHIP_92D) ? true : false)
-#define IS_92D_C_CUT(version)          ((IS_92D(version)) ?            \
-                                ((GET_CVID_CUT_VERSION(version) ==     \
-                                CHIP_92D_C_CUT) ? true : false) : false)
-#define IS_92D_D_CUT(version)                  ((IS_92D(version)) ?    \
-                                ((GET_CVID_CUT_VERSION(version) ==     \
-                                CHIP_92D_D_CUT) ? true : false) : false)
-#define IS_92D_E_CUT(version)          ((IS_92D(version)) ?            \
-                                ((GET_CVID_CUT_VERSION(version) ==     \
-                                CHIP_92D_E_CUT) ? true : false) : false)
-
-enum rf_optype {
-       RF_OP_BY_SW_3WIRE = 0,
-       RF_OP_BY_FW,
-       RF_OP_MAX
-};
-
-enum rtl_desc_qsel {
-       QSLT_BK = 0x2,
-       QSLT_BE = 0x0,
-       QSLT_VI = 0x5,
-       QSLT_VO = 0x7,
-       QSLT_BEACON = 0x10,
-       QSLT_HIGH = 0x11,
-       QSLT_MGNT = 0x12,
-       QSLT_CMD = 0x13,
-};
-
-enum channel_plan {
-       CHPL_FCC        = 0,
-       CHPL_IC         = 1,
-       CHPL_ETSI       = 2,
-       CHPL_SPAIN      = 3,
-       CHPL_FRANCE     = 4,
-       CHPL_MKK        = 5,
-       CHPL_MKK1       = 6,
-       CHPL_ISRAEL     = 7,
-       CHPL_TELEC      = 8,
-       CHPL_GLOBAL     = 9,
-       CHPL_WORLD      = 10,
-};
-
-struct phy_sts_cck_8192d {
-       u8 adc_pwdb_X[4];
-       u8 sq_rpt;
-       u8 cck_agc_rpt;
-};
-
-struct h2c_cmd_8192c {
-       u8 element_id;
-       u32 cmd_len;
-       u8 *p_cmdbuffer;
-};
-
-struct txpower_info {
-       u8 cck_index[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
-       u8 ht40_1sindex[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
-       u8 ht40_2sindexdiff[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
-       u8 ht20indexdiff[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
-       u8 ofdmindexdiff[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
-       u8 ht40maxoffset[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
-       u8 ht20maxoffset[RF6052_MAX_PATH][CHANNEL_GROUP_MAX];
-       u8 tssi_a[3];           /* 5GL/5GM/5GH */
-       u8 tssi_b[3];
-};
-
-#endif
index cf4aca8..c6a2e8b 100644 (file)
 #include "../wifi.h"
 #include "../base.h"
 #include "../core.h"
-#include "reg.h"
-#include "def.h"
+#include "../rtl8192d/reg.h"
+#include "../rtl8192d/def.h"
+#include "../rtl8192d/dm_common.h"
+#include "../rtl8192d/phy_common.h"
+#include "../rtl8192d/fw_common.h"
 #include "phy.h"
 #include "dm.h"
-#include "fw.h"
 
 #define UNDEC_SM_PWDB  entry_min_undec_sm_pwdb
 
-static const u32 ofdmswing_table[OFDM_TABLE_SIZE_92D] = {
-       0x7f8001fe,             /* 0, +6.0dB */
-       0x788001e2,             /* 1, +5.5dB */
-       0x71c001c7,             /* 2, +5.0dB */
-       0x6b8001ae,             /* 3, +4.5dB */
-       0x65400195,             /* 4, +4.0dB */
-       0x5fc0017f,             /* 5, +3.5dB */
-       0x5a400169,             /* 6, +3.0dB */
-       0x55400155,             /* 7, +2.5dB */
-       0x50800142,             /* 8, +2.0dB */
-       0x4c000130,             /* 9, +1.5dB */
-       0x47c0011f,             /* 10, +1.0dB */
-       0x43c0010f,             /* 11, +0.5dB */
-       0x40000100,             /* 12, +0dB */
-       0x3c8000f2,             /* 13, -0.5dB */
-       0x390000e4,             /* 14, -1.0dB */
-       0x35c000d7,             /* 15, -1.5dB */
-       0x32c000cb,             /* 16, -2.0dB */
-       0x300000c0,             /* 17, -2.5dB */
-       0x2d4000b5,             /* 18, -3.0dB */
-       0x2ac000ab,             /* 19, -3.5dB */
-       0x288000a2,             /* 20, -4.0dB */
-       0x26000098,             /* 21, -4.5dB */
-       0x24000090,             /* 22, -5.0dB */
-       0x22000088,             /* 23, -5.5dB */
-       0x20000080,             /* 24, -6.0dB */
-       0x1e400079,             /* 25, -6.5dB */
-       0x1c800072,             /* 26, -7.0dB */
-       0x1b00006c,             /* 27. -7.5dB */
-       0x19800066,             /* 28, -8.0dB */
-       0x18000060,             /* 29, -8.5dB */
-       0x16c0005b,             /* 30, -9.0dB */
-       0x15800056,             /* 31, -9.5dB */
-       0x14400051,             /* 32, -10.0dB */
-       0x1300004c,             /* 33, -10.5dB */
-       0x12000048,             /* 34, -11.0dB */
-       0x11000044,             /* 35, -11.5dB */
-       0x10000040,             /* 36, -12.0dB */
-       0x0f00003c,             /* 37, -12.5dB */
-       0x0e400039,             /* 38, -13.0dB */
-       0x0d800036,             /* 39, -13.5dB */
-       0x0cc00033,             /* 40, -14.0dB */
-       0x0c000030,             /* 41, -14.5dB */
-       0x0b40002d,             /* 42, -15.0dB */
-};
-
-static const u8 cckswing_table_ch1ch13[CCK_TABLE_SIZE][8] = {
-       {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04},    /* 0, +0dB */
-       {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04},    /* 1, -0.5dB */
-       {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03},    /* 2, -1.0dB */
-       {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03},    /* 3, -1.5dB */
-       {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03},    /* 4, -2.0dB */
-       {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03},    /* 5, -2.5dB */
-       {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03},    /* 6, -3.0dB */
-       {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03},    /* 7, -3.5dB */
-       {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02},    /* 8, -4.0dB */
-       {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02},    /* 9, -4.5dB */
-       {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02},    /* 10, -5.0dB */
-       {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02},    /* 11, -5.5dB */
-       {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02},    /* 12, -6.0dB */
-       {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02},    /* 13, -6.5dB */
-       {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02},    /* 14, -7.0dB */
-       {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02},    /* 15, -7.5dB */
-       {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01},    /* 16, -8.0dB */
-       {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02},    /* 17, -8.5dB */
-       {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01},    /* 18, -9.0dB */
-       {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},    /* 19, -9.5dB */
-       {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01},    /* 20, -10.0dB */
-       {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01},    /* 21, -10.5dB */
-       {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01},    /* 22, -11.0dB */
-       {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01},    /* 23, -11.5dB */
-       {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01},    /* 24, -12.0dB */
-       {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01},    /* 25, -12.5dB */
-       {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01},    /* 26, -13.0dB */
-       {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01},    /* 27, -13.5dB */
-       {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01},    /* 28, -14.0dB */
-       {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01},    /* 29, -14.5dB */
-       {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01},    /* 30, -15.0dB */
-       {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01},    /* 31, -15.5dB */
-       {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}     /* 32, -16.0dB */
-};
-
-static const u8 cckswing_table_ch14[CCK_TABLE_SIZE][8] = {
-       {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00},    /* 0, +0dB */
-       {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00},    /* 1, -0.5dB */
-       {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00},    /* 2, -1.0dB */
-       {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00},    /* 3, -1.5dB */
-       {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00},    /* 4, -2.0dB */
-       {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00},    /* 5, -2.5dB */
-       {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00},    /* 6, -3.0dB */
-       {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00},    /* 7, -3.5dB */
-       {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00},    /* 8, -4.0dB */
-       {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00},    /* 9, -4.5dB */
-       {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00},    /* 10, -5.0dB */
-       {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00},    /* 11, -5.5dB */
-       {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00},    /* 12, -6.0dB */
-       {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00},    /* 13, -6.5dB */
-       {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00},    /* 14, -7.0dB */
-       {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00},    /* 15, -7.5dB */
-       {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00},    /* 16, -8.0dB */
-       {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00},    /* 17, -8.5dB */
-       {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00},    /* 18, -9.0dB */
-       {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},    /* 19, -9.5dB */
-       {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00},    /* 20, -10.0dB */
-       {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00},    /* 21, -10.5dB */
-       {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00},    /* 22, -11.0dB */
-       {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},    /* 23, -11.5dB */
-       {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00},    /* 24, -12.0dB */
-       {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00},    /* 25, -12.5dB */
-       {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},    /* 26, -13.0dB */
-       {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00},    /* 27, -13.5dB */
-       {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},    /* 28, -14.0dB */
-       {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00},    /* 29, -14.5dB */
-       {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},    /* 30, -15.0dB */
-       {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00},    /* 31, -15.5dB */
-       {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}     /* 32, -16.0dB */
-};
-
-static void rtl92d_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw)
-{
-       u32 ret_value;
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct false_alarm_statistics *falsealm_cnt = &(rtlpriv->falsealm_cnt);
-       unsigned long flag = 0;
-
-       /* hold ofdm counter */
-       rtl_set_bbreg(hw, ROFDM0_LSTF, BIT(31), 1); /* hold page C counter */
-       rtl_set_bbreg(hw, ROFDM1_LSTF, BIT(31), 1); /*hold page D counter */
-
-       ret_value = rtl_get_bbreg(hw, ROFDM0_FRAMESYNC, MASKDWORD);
-       falsealm_cnt->cnt_fast_fsync_fail = (ret_value & 0xffff);
-       falsealm_cnt->cnt_sb_search_fail = ((ret_value & 0xffff0000) >> 16);
-       ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER1, MASKDWORD);
-       falsealm_cnt->cnt_parity_fail = ((ret_value & 0xffff0000) >> 16);
-       ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER2, MASKDWORD);
-       falsealm_cnt->cnt_rate_illegal = (ret_value & 0xffff);
-       falsealm_cnt->cnt_crc8_fail = ((ret_value & 0xffff0000) >> 16);
-       ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER3, MASKDWORD);
-       falsealm_cnt->cnt_mcs_fail = (ret_value & 0xffff);
-       falsealm_cnt->cnt_ofdm_fail = falsealm_cnt->cnt_parity_fail +
-                                     falsealm_cnt->cnt_rate_illegal +
-                                     falsealm_cnt->cnt_crc8_fail +
-                                     falsealm_cnt->cnt_mcs_fail +
-                                     falsealm_cnt->cnt_fast_fsync_fail +
-                                     falsealm_cnt->cnt_sb_search_fail;
-
-       if (rtlpriv->rtlhal.current_bandtype != BAND_ON_5G) {
-               /* hold cck counter */
-               rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
-               ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERLOWER, MASKBYTE0);
-               falsealm_cnt->cnt_cck_fail = ret_value;
-               ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERUPPER, MASKBYTE3);
-               falsealm_cnt->cnt_cck_fail += (ret_value & 0xff) << 8;
-               rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
-       } else {
-               falsealm_cnt->cnt_cck_fail = 0;
-       }
-
-       /* reset false alarm counter registers */
-       falsealm_cnt->cnt_all = falsealm_cnt->cnt_fast_fsync_fail +
-                               falsealm_cnt->cnt_sb_search_fail +
-                               falsealm_cnt->cnt_parity_fail +
-                               falsealm_cnt->cnt_rate_illegal +
-                               falsealm_cnt->cnt_crc8_fail +
-                               falsealm_cnt->cnt_mcs_fail +
-                               falsealm_cnt->cnt_cck_fail;
-
-       rtl_set_bbreg(hw, ROFDM1_LSTF, 0x08000000, 1);
-       /* update ofdm counter */
-       rtl_set_bbreg(hw, ROFDM1_LSTF, 0x08000000, 0);
-       /* update page C counter */
-       rtl_set_bbreg(hw, ROFDM0_LSTF, BIT(31), 0);
-       /* update page D counter */
-       rtl_set_bbreg(hw, ROFDM1_LSTF, BIT(31), 0);
-       if (rtlpriv->rtlhal.current_bandtype != BAND_ON_5G) {
-               /* reset cck counter */
-               rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
-               rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, 0x0000c000, 0);
-               /* enable cck counter */
-               rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, 0x0000c000, 2);
-               rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
-       }
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
-               "Cnt_Fast_Fsync_fail = %x, Cnt_SB_Search_fail = %x\n",
-               falsealm_cnt->cnt_fast_fsync_fail,
-               falsealm_cnt->cnt_sb_search_fail);
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
-               "Cnt_Parity_Fail = %x, Cnt_Rate_Illegal = %x, Cnt_Crc8_fail = %x, Cnt_Mcs_fail = %x\n",
-               falsealm_cnt->cnt_parity_fail,
-               falsealm_cnt->cnt_rate_illegal,
-               falsealm_cnt->cnt_crc8_fail,
-               falsealm_cnt->cnt_mcs_fail);
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
-               "Cnt_Ofdm_fail = %x, Cnt_Cck_fail = %x, Cnt_all = %x\n",
-               falsealm_cnt->cnt_ofdm_fail,
-               falsealm_cnt->cnt_cck_fail,
-               falsealm_cnt->cnt_all);
-}
-
-static void rtl92d_dm_find_minimum_rssi(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
-       struct rtl_mac *mac = rtl_mac(rtlpriv);
-
-       /* Determine the minimum RSSI  */
-       if ((mac->link_state < MAC80211_LINKED) &&
-           (rtlpriv->dm.UNDEC_SM_PWDB == 0)) {
-               de_digtable->min_undec_pwdb_for_dm = 0;
-               rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD,
-                       "Not connected to any\n");
-       }
-       if (mac->link_state >= MAC80211_LINKED) {
-               if (mac->opmode == NL80211_IFTYPE_AP ||
-                   mac->opmode == NL80211_IFTYPE_ADHOC) {
-                       de_digtable->min_undec_pwdb_for_dm =
-                           rtlpriv->dm.UNDEC_SM_PWDB;
-                       rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD,
-                               "AP Client PWDB = 0x%lx\n",
-                                rtlpriv->dm.UNDEC_SM_PWDB);
-               } else {
-                       de_digtable->min_undec_pwdb_for_dm =
-                           rtlpriv->dm.undec_sm_pwdb;
-                       rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD,
-                               "STA Default Port PWDB = 0x%x\n",
-                               de_digtable->min_undec_pwdb_for_dm);
-               }
-       } else {
-               de_digtable->min_undec_pwdb_for_dm = rtlpriv->dm.UNDEC_SM_PWDB;
-               rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD,
-                       "AP Ext Port or disconnect PWDB = 0x%x\n",
-                       de_digtable->min_undec_pwdb_for_dm);
-       }
-
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "MinUndecoratedPWDBForDM =%d\n",
-               de_digtable->min_undec_pwdb_for_dm);
-}
-
-static void rtl92d_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
-       unsigned long flag = 0;
-
-       if (de_digtable->cursta_cstate == DIG_STA_CONNECT) {
-               if (de_digtable->pre_cck_pd_state == CCK_PD_STAGE_LOWRSSI) {
-                       if (de_digtable->min_undec_pwdb_for_dm <= 25)
-                               de_digtable->cur_cck_pd_state =
-                                                        CCK_PD_STAGE_LOWRSSI;
-                       else
-                               de_digtable->cur_cck_pd_state =
-                                                        CCK_PD_STAGE_HIGHRSSI;
-               } else {
-                       if (de_digtable->min_undec_pwdb_for_dm <= 20)
-                               de_digtable->cur_cck_pd_state =
-                                                        CCK_PD_STAGE_LOWRSSI;
-                       else
-                               de_digtable->cur_cck_pd_state =
-                                                        CCK_PD_STAGE_HIGHRSSI;
-               }
-       } else {
-               de_digtable->cur_cck_pd_state = CCK_PD_STAGE_LOWRSSI;
-       }
-       if (de_digtable->pre_cck_pd_state != de_digtable->cur_cck_pd_state) {
-               if (de_digtable->cur_cck_pd_state == CCK_PD_STAGE_LOWRSSI) {
-                       rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
-                       rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, 0x83);
-                       rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
-               } else {
-                       rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
-                       rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, 0xcd);
-                       rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
-               }
-               de_digtable->pre_cck_pd_state = de_digtable->cur_cck_pd_state;
-       }
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "CurSTAConnectState=%s\n",
-               de_digtable->cursta_cstate == DIG_STA_CONNECT ?
-               "DIG_STA_CONNECT " : "DIG_STA_DISCONNECT");
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "CCKPDStage=%s\n",
-               de_digtable->cur_cck_pd_state == CCK_PD_STAGE_LOWRSSI ?
-               "Low RSSI " : "High RSSI ");
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "is92d single phy =%x\n",
-               IS_92D_SINGLEPHY(rtlpriv->rtlhal.version));
-
-}
-
-void rtl92d_dm_write_dig(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
-
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
-               "cur_igvalue = 0x%x, pre_igvalue = 0x%x, back_val = %d\n",
-               de_digtable->cur_igvalue, de_digtable->pre_igvalue,
-               de_digtable->back_val);
-       if (de_digtable->dig_enable_flag == false) {
-               rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "DIG is disabled\n");
-               de_digtable->pre_igvalue = 0x17;
-               return;
-       }
-       if (de_digtable->pre_igvalue != de_digtable->cur_igvalue) {
-               rtl_set_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f,
-                             de_digtable->cur_igvalue);
-               rtl_set_bbreg(hw, ROFDM0_XBAGCCORE1, 0x7f,
-                             de_digtable->cur_igvalue);
-               de_digtable->pre_igvalue = de_digtable->cur_igvalue;
-       }
-}
-
-static void rtl92d_early_mode_enabled(struct rtl_priv *rtlpriv)
-{
-       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
-
-       if ((rtlpriv->mac80211.link_state >= MAC80211_LINKED) &&
-           (rtlpriv->mac80211.vendor == PEER_CISCO)) {
-               rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "IOT_PEER = CISCO\n");
-               if (de_digtable->last_min_undec_pwdb_for_dm >= 50
-                   && de_digtable->min_undec_pwdb_for_dm < 50) {
-                       rtl_write_byte(rtlpriv, REG_EARLY_MODE_CONTROL, 0x00);
-                       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
-                               "Early Mode Off\n");
-               } else if (de_digtable->last_min_undec_pwdb_for_dm <= 55 &&
-                          de_digtable->min_undec_pwdb_for_dm > 55) {
-                       rtl_write_byte(rtlpriv, REG_EARLY_MODE_CONTROL, 0x0f);
-                       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
-                               "Early Mode On\n");
-               }
-       } else if (!(rtl_read_byte(rtlpriv, REG_EARLY_MODE_CONTROL) & 0xf)) {
-               rtl_write_byte(rtlpriv, REG_EARLY_MODE_CONTROL, 0x0f);
-               rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "Early Mode On\n");
-       }
-}
-
-static void rtl92d_dm_dig(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
-       u8 value_igi = de_digtable->cur_igvalue;
-       struct false_alarm_statistics *falsealm_cnt = &(rtlpriv->falsealm_cnt);
-
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "==>\n");
-       if (rtlpriv->rtlhal.earlymode_enable) {
-               rtl92d_early_mode_enabled(rtlpriv);
-               de_digtable->last_min_undec_pwdb_for_dm =
-                                de_digtable->min_undec_pwdb_for_dm;
-       }
-       if (!rtlpriv->dm.dm_initialgain_enable)
-               return;
-
-       /* because we will send data pkt when scanning
-        * this will cause some ap like gear-3700 wep TP
-        * lower if we return here, this is the diff of
-        * mac80211 driver vs ieee80211 driver */
-       /* if (rtlpriv->mac80211.act_scanning)
-        *      return; */
-
-       /* Not STA mode return tmp */
-       if (rtlpriv->mac80211.opmode != NL80211_IFTYPE_STATION)
-               return;
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "progress\n");
-       /* Decide the current status and if modify initial gain or not */
-       if (rtlpriv->mac80211.link_state >= MAC80211_LINKED)
-               de_digtable->cursta_cstate = DIG_STA_CONNECT;
-       else
-               de_digtable->cursta_cstate = DIG_STA_DISCONNECT;
-
-       /* adjust initial gain according to false alarm counter */
-       if (falsealm_cnt->cnt_all < DM_DIG_FA_TH0)
-               value_igi--;
-       else if (falsealm_cnt->cnt_all < DM_DIG_FA_TH1)
-               value_igi += 0;
-       else if (falsealm_cnt->cnt_all < DM_DIG_FA_TH2)
-               value_igi++;
-       else if (falsealm_cnt->cnt_all >= DM_DIG_FA_TH2)
-               value_igi += 2;
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
-               "dm_DIG() Before: large_fa_hit=%d, forbidden_igi=%x\n",
-               de_digtable->large_fa_hit, de_digtable->forbidden_igi);
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
-               "dm_DIG() Before: Recover_cnt=%d, rx_gain_min=%x\n",
-               de_digtable->recover_cnt, de_digtable->rx_gain_min);
-
-       /* deal with abnormally large false alarm */
-       if (falsealm_cnt->cnt_all > 10000) {
-               rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
-                       "dm_DIG(): Abnormally false alarm case\n");
-
-               de_digtable->large_fa_hit++;
-               if (de_digtable->forbidden_igi < de_digtable->cur_igvalue) {
-                       de_digtable->forbidden_igi = de_digtable->cur_igvalue;
-                       de_digtable->large_fa_hit = 1;
-               }
-               if (de_digtable->large_fa_hit >= 3) {
-                       if ((de_digtable->forbidden_igi + 1) > DM_DIG_MAX)
-                               de_digtable->rx_gain_min = DM_DIG_MAX;
-                       else
-                               de_digtable->rx_gain_min =
-                                   (de_digtable->forbidden_igi + 1);
-                       de_digtable->recover_cnt = 3600;        /* 3600=2hr */
-               }
-       } else {
-               /* Recovery mechanism for IGI lower bound */
-               if (de_digtable->recover_cnt != 0) {
-                       de_digtable->recover_cnt--;
-               } else {
-                       if (de_digtable->large_fa_hit == 0) {
-                               if ((de_digtable->forbidden_igi - 1) <
-                                   DM_DIG_FA_LOWER) {
-                                       de_digtable->forbidden_igi =
-                                                        DM_DIG_FA_LOWER;
-                                       de_digtable->rx_gain_min =
-                                                        DM_DIG_FA_LOWER;
-
-                               } else {
-                                       de_digtable->forbidden_igi--;
-                                       de_digtable->rx_gain_min =
-                                           (de_digtable->forbidden_igi + 1);
-                               }
-                       } else if (de_digtable->large_fa_hit == 3) {
-                               de_digtable->large_fa_hit = 0;
-                       }
-               }
-       }
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
-               "dm_DIG() After: large_fa_hit=%d, forbidden_igi=%x\n",
-               de_digtable->large_fa_hit, de_digtable->forbidden_igi);
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD,
-               "dm_DIG() After: recover_cnt=%d, rx_gain_min=%x\n",
-               de_digtable->recover_cnt, de_digtable->rx_gain_min);
-
-       if (value_igi > DM_DIG_MAX)
-               value_igi = DM_DIG_MAX;
-       else if (value_igi < de_digtable->rx_gain_min)
-               value_igi = de_digtable->rx_gain_min;
-       de_digtable->cur_igvalue = value_igi;
-       rtl92d_dm_write_dig(hw);
-       if (rtlpriv->rtlhal.current_bandtype != BAND_ON_5G)
-               rtl92d_dm_cck_packet_detection_thresh(hw);
-       rtl_dbg(rtlpriv, COMP_DIG, DBG_LOUD, "<<==\n");
-}
-
 static void rtl92d_dm_init_dynamic_txpower(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -579,626 +140,7 @@ static void rtl92d_dm_pwdb_monitor(struct ieee80211_hw *hw)
        }
 }
 
-void rtl92d_dm_init_edca_turbo(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       rtlpriv->dm.current_turbo_edca = false;
-       rtlpriv->dm.is_any_nonbepkts = false;
-       rtlpriv->dm.is_cur_rdlstate = false;
-}
-
-static void rtl92d_dm_check_edca_turbo(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       const u32 edca_be_ul = 0x5ea42b;
-       const u32 edca_be_dl = 0x5ea42b;
-       static u64 last_txok_cnt;
-       static u64 last_rxok_cnt;
-       u64 cur_txok_cnt;
-       u64 cur_rxok_cnt;
-
-       if (mac->link_state != MAC80211_LINKED) {
-               rtlpriv->dm.current_turbo_edca = false;
-               goto exit;
-       }
-
-       if ((!rtlpriv->dm.is_any_nonbepkts) &&
-           (!rtlpriv->dm.disable_framebursting)) {
-               cur_txok_cnt = rtlpriv->stats.txbytesunicast - last_txok_cnt;
-               cur_rxok_cnt = rtlpriv->stats.rxbytesunicast - last_rxok_cnt;
-               if (cur_rxok_cnt > 4 * cur_txok_cnt) {
-                       if (!rtlpriv->dm.is_cur_rdlstate ||
-                           !rtlpriv->dm.current_turbo_edca) {
-                               rtl_write_dword(rtlpriv, REG_EDCA_BE_PARAM,
-                                               edca_be_dl);
-                               rtlpriv->dm.is_cur_rdlstate = true;
-                       }
-               } else {
-                       if (rtlpriv->dm.is_cur_rdlstate ||
-                           !rtlpriv->dm.current_turbo_edca) {
-                               rtl_write_dword(rtlpriv, REG_EDCA_BE_PARAM,
-                                               edca_be_ul);
-                               rtlpriv->dm.is_cur_rdlstate = false;
-                       }
-               }
-               rtlpriv->dm.current_turbo_edca = true;
-       } else {
-               if (rtlpriv->dm.current_turbo_edca) {
-                       u8 tmp = AC0_BE;
-                       rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AC_PARAM,
-                                                     &tmp);
-                       rtlpriv->dm.current_turbo_edca = false;
-               }
-       }
-
-exit:
-       rtlpriv->dm.is_any_nonbepkts = false;
-       last_txok_cnt = rtlpriv->stats.txbytesunicast;
-       last_rxok_cnt = rtlpriv->stats.rxbytesunicast;
-}
-
-static void rtl92d_dm_rxgain_tracking_thermalmeter(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u8 index_mapping[RX_INDEX_MAPPING_NUM] = {
-               0x0f, 0x0f, 0x0d, 0x0c, 0x0b,
-               0x0a, 0x09, 0x08, 0x07, 0x06,
-               0x05, 0x04, 0x04, 0x03, 0x02
-       };
-       int i;
-       u32 u4tmp;
-
-       u4tmp = (index_mapping[(rtlpriv->efuse.eeprom_thermalmeter -
-                               rtlpriv->dm.thermalvalue_rxgain)]) << 12;
-       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-               "===> Rx Gain %x\n", u4tmp);
-       for (i = RF90_PATH_A; i < rtlpriv->phy.num_total_rfpath; i++)
-               rtl_set_rfreg(hw, i, 0x3C, RFREG_OFFSET_MASK,
-                             (rtlpriv->phy.reg_rf3c[i] & (~(0xF000))) | u4tmp);
-}
-
-static void rtl92d_bandtype_2_4G(struct ieee80211_hw *hw, long *temp_cckg,
-                                u8 *cck_index_old)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       int i;
-       unsigned long flag = 0;
-       long temp_cck;
-       const u8 *cckswing;
-
-       /* Query CCK default setting From 0xa24 */
-       rtl92d_acquire_cckandrw_pagea_ctl(hw, &flag);
-       temp_cck = rtl_get_bbreg(hw, RCCK0_TXFILTER2,
-                                MASKDWORD) & MASKCCK;
-       rtl92d_release_cckandrw_pagea_ctl(hw, &flag);
-       for (i = 0; i < CCK_TABLE_LENGTH; i++) {
-               if (rtlpriv->dm.cck_inch14)
-                       cckswing = &cckswing_table_ch14[i][2];
-               else
-                       cckswing = &cckswing_table_ch1ch13[i][2];
-
-               if (temp_cck == le32_to_cpu(*((__le32 *)cckswing))) {
-                       *cck_index_old = (u8)i;
-                       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                               "Initial reg0x%x = 0x%lx, cck_index = 0x%x, ch14 %d\n",
-                               RCCK0_TXFILTER2, temp_cck,
-                               *cck_index_old,
-                               rtlpriv->dm.cck_inch14);
-                       break;
-               }
-       }
-       *temp_cckg = temp_cck;
-}
-
-static void rtl92d_bandtype_5G(struct rtl_hal *rtlhal, u8 *ofdm_index,
-                              bool *internal_pa, u8 thermalvalue, u8 delta,
-                              u8 rf, struct rtl_efuse *rtlefuse,
-                              struct rtl_priv *rtlpriv, struct rtl_phy *rtlphy,
-                              const u8 index_mapping[5][INDEX_MAPPING_NUM],
-                              const u8 index_mapping_pa[8][INDEX_MAPPING_NUM])
-{
-       int i;
-       u8 index;
-       u8 offset = 0;
-
-       for (i = 0; i < rf; i++) {
-               if (rtlhal->macphymode == DUALMAC_DUALPHY &&
-                   rtlhal->interfaceindex == 1)        /* MAC 1 5G */
-                       *internal_pa = rtlefuse->internal_pa_5g[1];
-               else
-                       *internal_pa = rtlefuse->internal_pa_5g[i];
-               if (*internal_pa) {
-                       if (rtlhal->interfaceindex == 1 || i == rf)
-                               offset = 4;
-                       else
-                               offset = 0;
-                       if (rtlphy->current_channel >= 100 &&
-                               rtlphy->current_channel <= 165)
-                               offset += 2;
-               } else {
-                       if (rtlhal->interfaceindex == 1 || i == rf)
-                               offset = 2;
-                       else
-                               offset = 0;
-               }
-               if (thermalvalue > rtlefuse->eeprom_thermalmeter)
-                       offset++;
-               if (*internal_pa) {
-                       if (delta > INDEX_MAPPING_NUM - 1)
-                               index = index_mapping_pa[offset]
-                                                   [INDEX_MAPPING_NUM - 1];
-                       else
-                               index =
-                                    index_mapping_pa[offset][delta];
-               } else {
-                       if (delta > INDEX_MAPPING_NUM - 1)
-                               index =
-                                  index_mapping[offset][INDEX_MAPPING_NUM - 1];
-                       else
-                               index = index_mapping[offset][delta];
-               }
-               if (thermalvalue > rtlefuse->eeprom_thermalmeter) {
-                       if (*internal_pa && thermalvalue > 0x12) {
-                               ofdm_index[i] = rtlpriv->dm.ofdm_index[i] -
-                                               ((delta / 2) * 3 + (delta % 2));
-                       } else {
-                               ofdm_index[i] -= index;
-                       }
-               } else {
-                       ofdm_index[i] += index;
-               }
-       }
-}
-
-static void rtl92d_dm_txpower_tracking_callback_thermalmeter(
-                       struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       u8 thermalvalue, delta, delta_lck, delta_iqk, delta_rxgain;
-       u8 offset, thermalvalue_avg_count = 0;
-       u32 thermalvalue_avg = 0;
-       bool internal_pa = false;
-       long ele_a = 0, ele_d, temp_cck, val_x, value32;
-       long val_y, ele_c = 0;
-       u8 ofdm_index[2];
-       s8 cck_index = 0;
-       u8 ofdm_index_old[2] = {0, 0};
-       s8 cck_index_old = 0;
-       u8 index;
-       int i;
-       bool is2t = IS_92D_SINGLEPHY(rtlhal->version);
-       u8 ofdm_min_index = 6, ofdm_min_index_internal_pa = 3, rf;
-       u8 indexforchannel =
-           rtl92d_get_rightchnlplace_for_iqk(rtlphy->current_channel);
-       static const u8 index_mapping[5][INDEX_MAPPING_NUM] = {
-               /* 5G, path A/MAC 0, decrease power  */
-               {0, 1, 3, 6, 8, 9,      11, 13, 14, 16, 17, 18, 18},
-               /* 5G, path A/MAC 0, increase power  */
-               {0, 2, 4, 5, 7, 10,     12, 14, 16, 18, 18, 18, 18},
-               /* 5G, path B/MAC 1, decrease power */
-               {0, 2, 3, 6, 8, 9,      11, 13, 14, 16, 17, 18, 18},
-               /* 5G, path B/MAC 1, increase power */
-               {0, 2, 4, 5, 7, 10,     13, 16, 16, 18, 18, 18, 18},
-               /* 2.4G, for decreas power */
-               {0, 1, 2, 3, 4, 5,      6, 7, 7, 8, 9, 10, 10},
-       };
-       static const u8 index_mapping_internal_pa[8][INDEX_MAPPING_NUM] = {
-               /* 5G, path A/MAC 0, ch36-64, decrease power  */
-               {0, 1, 2, 4, 6, 7,      9, 11, 12, 14, 15, 16, 16},
-               /* 5G, path A/MAC 0, ch36-64, increase power  */
-               {0, 2, 4, 5, 7, 10,     12, 14, 16, 18, 18, 18, 18},
-               /* 5G, path A/MAC 0, ch100-165, decrease power  */
-               {0, 1, 2, 3, 5, 6,      8, 10, 11, 13, 14, 15, 15},
-               /* 5G, path A/MAC 0, ch100-165, increase power  */
-               {0, 2, 4, 5, 7, 10,     12, 14, 16, 18, 18, 18, 18},
-               /* 5G, path B/MAC 1, ch36-64, decrease power */
-               {0, 1, 2, 4, 6, 7,      9, 11, 12, 14, 15, 16, 16},
-               /* 5G, path B/MAC 1, ch36-64, increase power */
-               {0, 2, 4, 5, 7, 10,     13, 16, 16, 18, 18, 18, 18},
-               /* 5G, path B/MAC 1, ch100-165, decrease power */
-               {0, 1, 2, 3, 5, 6,      8, 9, 10, 12, 13, 14, 14},
-               /* 5G, path B/MAC 1, ch100-165, increase power */
-               {0, 2, 4, 5, 7, 10,     13, 16, 16, 18, 18, 18, 18},
-       };
-
-       rtlpriv->dm.txpower_trackinginit = true;
-       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, "\n");
-       thermalvalue = (u8) rtl_get_rfreg(hw, RF90_PATH_A, RF_T_METER, 0xf800);
-       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-               "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x\n",
-               thermalvalue,
-               rtlpriv->dm.thermalvalue, rtlefuse->eeprom_thermalmeter);
-       rtl92d_phy_ap_calibrate(hw, (thermalvalue -
-                                    rtlefuse->eeprom_thermalmeter));
-
-       if (!thermalvalue)
-               goto exit;
-
-       if (is2t)
-               rf = 2;
-       else
-               rf = 1;
-
-       if (rtlpriv->dm.thermalvalue && !rtlhal->reloadtxpowerindex)
-               goto old_index_done;
-
-       ele_d = rtl_get_bbreg(hw, ROFDM0_XATXIQIMBALANCE,  MASKDWORD) & MASKOFDM_D;
-       for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) {
-               if (ele_d == (ofdmswing_table[i] & MASKOFDM_D)) {
-                       ofdm_index_old[0] = (u8)i;
-
-                       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                               "Initial pathA ele_d reg0x%x = 0x%lx, ofdm_index=0x%x\n",
-                               ROFDM0_XATXIQIMBALANCE,
-                               ele_d, ofdm_index_old[0]);
-                       break;
-               }
-       }
-       if (is2t) {
-               ele_d = rtl_get_bbreg(hw, ROFDM0_XBTXIQIMBALANCE,
-                                     MASKDWORD) & MASKOFDM_D;
-               for (i = 0; i < OFDM_TABLE_SIZE_92D; i++) {
-                       if (ele_d ==
-                           (ofdmswing_table[i] & MASKOFDM_D)) {
-                               ofdm_index_old[1] = (u8)i;
-                               rtl_dbg(rtlpriv, COMP_POWER_TRACKING,
-                                       DBG_LOUD,
-                                       "Initial pathB ele_d reg 0x%x = 0x%lx, ofdm_index = 0x%x\n",
-                                       ROFDM0_XBTXIQIMBALANCE, ele_d,
-                                       ofdm_index_old[1]);
-                               break;
-                       }
-               }
-       }
-       if (rtlhal->current_bandtype == BAND_ON_2_4G) {
-               rtl92d_bandtype_2_4G(hw, &temp_cck, &cck_index_old);
-       } else {
-               temp_cck = 0x090e1317;
-               cck_index_old = 12;
-       }
-
-       if (!rtlpriv->dm.thermalvalue) {
-               rtlpriv->dm.thermalvalue = rtlefuse->eeprom_thermalmeter;
-               rtlpriv->dm.thermalvalue_lck = thermalvalue;
-               rtlpriv->dm.thermalvalue_iqk = thermalvalue;
-               rtlpriv->dm.thermalvalue_rxgain = rtlefuse->eeprom_thermalmeter;
-               for (i = 0; i < rf; i++)
-                       rtlpriv->dm.ofdm_index[i] = ofdm_index_old[i];
-               rtlpriv->dm.cck_index = cck_index_old;
-       }
-       if (rtlhal->reloadtxpowerindex) {
-               for (i = 0; i < rf; i++)
-                       rtlpriv->dm.ofdm_index[i] = ofdm_index_old[i];
-               rtlpriv->dm.cck_index = cck_index_old;
-               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                       "reload ofdm index for band switch\n");
-       }
-old_index_done:
-       for (i = 0; i < rf; i++)
-               ofdm_index[i] = rtlpriv->dm.ofdm_index[i];
-
-       rtlpriv->dm.thermalvalue_avg
-                   [rtlpriv->dm.thermalvalue_avg_index] = thermalvalue;
-       rtlpriv->dm.thermalvalue_avg_index++;
-       if (rtlpriv->dm.thermalvalue_avg_index == AVG_THERMAL_NUM)
-               rtlpriv->dm.thermalvalue_avg_index = 0;
-       for (i = 0; i < AVG_THERMAL_NUM; i++) {
-               if (rtlpriv->dm.thermalvalue_avg[i]) {
-                       thermalvalue_avg += rtlpriv->dm.thermalvalue_avg[i];
-                       thermalvalue_avg_count++;
-               }
-       }
-       if (thermalvalue_avg_count)
-               thermalvalue = (u8)(thermalvalue_avg / thermalvalue_avg_count);
-       if (rtlhal->reloadtxpowerindex) {
-               delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ?
-                   (thermalvalue - rtlefuse->eeprom_thermalmeter) :
-                   (rtlefuse->eeprom_thermalmeter - thermalvalue);
-               rtlhal->reloadtxpowerindex = false;
-               rtlpriv->dm.done_txpower = false;
-       } else if (rtlpriv->dm.done_txpower) {
-               delta = (thermalvalue > rtlpriv->dm.thermalvalue) ?
-                   (thermalvalue - rtlpriv->dm.thermalvalue) :
-                   (rtlpriv->dm.thermalvalue - thermalvalue);
-       } else {
-               delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ?
-                   (thermalvalue - rtlefuse->eeprom_thermalmeter) :
-                   (rtlefuse->eeprom_thermalmeter - thermalvalue);
-       }
-       delta_lck = (thermalvalue > rtlpriv->dm.thermalvalue_lck) ?
-           (thermalvalue - rtlpriv->dm.thermalvalue_lck) :
-           (rtlpriv->dm.thermalvalue_lck - thermalvalue);
-       delta_iqk = (thermalvalue > rtlpriv->dm.thermalvalue_iqk) ?
-           (thermalvalue - rtlpriv->dm.thermalvalue_iqk) :
-           (rtlpriv->dm.thermalvalue_iqk - thermalvalue);
-       delta_rxgain =
-               (thermalvalue > rtlpriv->dm.thermalvalue_rxgain) ?
-               (thermalvalue - rtlpriv->dm.thermalvalue_rxgain) :
-               (rtlpriv->dm.thermalvalue_rxgain - thermalvalue);
-       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-               "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x delta 0x%x delta_lck 0x%x delta_iqk 0x%x\n",
-               thermalvalue, rtlpriv->dm.thermalvalue,
-               rtlefuse->eeprom_thermalmeter, delta, delta_lck,
-               delta_iqk);
-       if (delta_lck > rtlefuse->delta_lck && rtlefuse->delta_lck != 0) {
-               rtlpriv->dm.thermalvalue_lck = thermalvalue;
-               rtl92d_phy_lc_calibrate(hw);
-       }
-
-       if (delta == 0 || !rtlpriv->dm.txpower_track_control)
-               goto check_delta;
-
-       rtlpriv->dm.done_txpower = true;
-       delta = (thermalvalue > rtlefuse->eeprom_thermalmeter) ?
-           (thermalvalue - rtlefuse->eeprom_thermalmeter) :
-           (rtlefuse->eeprom_thermalmeter - thermalvalue);
-       if (rtlhal->current_bandtype == BAND_ON_2_4G) {
-               offset = 4;
-               if (delta > INDEX_MAPPING_NUM - 1)
-                       index = index_mapping[offset][INDEX_MAPPING_NUM - 1];
-               else
-                       index = index_mapping[offset][delta];
-               if (thermalvalue > rtlpriv->dm.thermalvalue) {
-                       for (i = 0; i < rf; i++)
-                               ofdm_index[i] -= delta;
-                       cck_index -= delta;
-               } else {
-                       for (i = 0; i < rf; i++)
-                               ofdm_index[i] += index;
-                       cck_index += index;
-               }
-       } else if (rtlhal->current_bandtype == BAND_ON_5G) {
-               rtl92d_bandtype_5G(rtlhal, ofdm_index,
-                                  &internal_pa, thermalvalue,
-                                  delta, rf, rtlefuse, rtlpriv,
-                                  rtlphy, index_mapping,
-                                  index_mapping_internal_pa);
-       }
-       if (is2t) {
-               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                       "temp OFDM_A_index=0x%x, OFDM_B_index = 0x%x,cck_index=0x%x\n",
-                       rtlpriv->dm.ofdm_index[0],
-                       rtlpriv->dm.ofdm_index[1],
-                       rtlpriv->dm.cck_index);
-       } else {
-               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                       "temp OFDM_A_index=0x%x,cck_index = 0x%x\n",
-                       rtlpriv->dm.ofdm_index[0],
-                       rtlpriv->dm.cck_index);
-       }
-       for (i = 0; i < rf; i++) {
-               if (ofdm_index[i] > OFDM_TABLE_SIZE_92D - 1) {
-                       ofdm_index[i] = OFDM_TABLE_SIZE_92D - 1;
-               } else if (internal_pa ||
-                          rtlhal->current_bandtype == BAND_ON_2_4G) {
-                       if (ofdm_index[i] < ofdm_min_index_internal_pa)
-                               ofdm_index[i] = ofdm_min_index_internal_pa;
-               } else if (ofdm_index[i] < ofdm_min_index) {
-                       ofdm_index[i] = ofdm_min_index;
-               }
-       }
-       if (rtlhal->current_bandtype == BAND_ON_2_4G) {
-               if (cck_index > CCK_TABLE_SIZE - 1) {
-                       cck_index = CCK_TABLE_SIZE - 1;
-               } else if (cck_index < 0) {
-                       cck_index = 0;
-               }
-       }
-       if (is2t) {
-               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                       "new OFDM_A_index=0x%x, OFDM_B_index = 0x%x, cck_index=0x%x\n",
-                       ofdm_index[0], ofdm_index[1],
-                       cck_index);
-       } else {
-               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                       "new OFDM_A_index=0x%x,cck_index = 0x%x\n",
-                       ofdm_index[0], cck_index);
-       }
-       ele_d = (ofdmswing_table[ofdm_index[0]] & 0xFFC00000) >> 22;
-       val_x = rtlphy->iqk_matrix[indexforchannel].value[0][0];
-       val_y = rtlphy->iqk_matrix[indexforchannel].value[0][1];
-       if (val_x != 0) {
-               if ((val_x & 0x00000200) != 0)
-                       val_x = val_x | 0xFFFFFC00;
-               ele_a = ((val_x * ele_d) >> 8) & 0x000003FF;
-
-               /* new element C = element D x Y */
-               if ((val_y & 0x00000200) != 0)
-                       val_y = val_y | 0xFFFFFC00;
-               ele_c = ((val_y * ele_d) >> 8) & 0x000003FF;
-
-               /* 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;
-               rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE,
-                             MASKDWORD, value32);
-
-               value32 = (ele_c & 0x000003C0) >> 6;
-               rtl_set_bbreg(hw, ROFDM0_XCTXAFE, MASKH4BITS,
-                             value32);
-
-               value32 = ((val_x * ele_d) >> 7) & 0x01;
-               rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(24),
-                             value32);
-
-       } else {
-               rtl_set_bbreg(hw, ROFDM0_XATXIQIMBALANCE,
-                             MASKDWORD,
-                             ofdmswing_table[(u8)ofdm_index[0]]);
-               rtl_set_bbreg(hw, ROFDM0_XCTXAFE, MASKH4BITS,
-                             0x00);
-               rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
-                             BIT(24), 0x00);
-       }
-
-       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-               "TxPwrTracking for interface %d path A: X = 0x%lx, Y = 0x%lx ele_A = 0x%lx ele_C = 0x%lx ele_D = 0x%lx 0xe94 = 0x%lx 0xe9c = 0x%lx\n",
-               rtlhal->interfaceindex,
-               val_x, val_y, ele_a, ele_c, ele_d,
-               val_x, val_y);
-
-       if (cck_index >= CCK_TABLE_SIZE)
-               cck_index = CCK_TABLE_SIZE - 1;
-       if (cck_index < 0)
-               cck_index = 0;
-       if (rtlhal->current_bandtype == BAND_ON_2_4G) {
-               /* Adjust CCK according to IQK result */
-               if (!rtlpriv->dm.cck_inch14) {
-                       rtl_write_byte(rtlpriv, 0xa22,
-                                      cckswing_table_ch1ch13[cck_index][0]);
-                       rtl_write_byte(rtlpriv, 0xa23,
-                                      cckswing_table_ch1ch13[cck_index][1]);
-                       rtl_write_byte(rtlpriv, 0xa24,
-                                      cckswing_table_ch1ch13[cck_index][2]);
-                       rtl_write_byte(rtlpriv, 0xa25,
-                                      cckswing_table_ch1ch13[cck_index][3]);
-                       rtl_write_byte(rtlpriv, 0xa26,
-                                      cckswing_table_ch1ch13[cck_index][4]);
-                       rtl_write_byte(rtlpriv, 0xa27,
-                                      cckswing_table_ch1ch13[cck_index][5]);
-                       rtl_write_byte(rtlpriv, 0xa28,
-                                      cckswing_table_ch1ch13[cck_index][6]);
-                       rtl_write_byte(rtlpriv, 0xa29,
-                                      cckswing_table_ch1ch13[cck_index][7]);
-               } else {
-                       rtl_write_byte(rtlpriv, 0xa22,
-                                      cckswing_table_ch14[cck_index][0]);
-                       rtl_write_byte(rtlpriv, 0xa23,
-                                      cckswing_table_ch14[cck_index][1]);
-                       rtl_write_byte(rtlpriv, 0xa24,
-                                      cckswing_table_ch14[cck_index][2]);
-                       rtl_write_byte(rtlpriv, 0xa25,
-                                      cckswing_table_ch14[cck_index][3]);
-                       rtl_write_byte(rtlpriv, 0xa26,
-                                      cckswing_table_ch14[cck_index][4]);
-                       rtl_write_byte(rtlpriv, 0xa27,
-                                      cckswing_table_ch14[cck_index][5]);
-                       rtl_write_byte(rtlpriv, 0xa28,
-                                      cckswing_table_ch14[cck_index][6]);
-                       rtl_write_byte(rtlpriv, 0xa29,
-                                      cckswing_table_ch14[cck_index][7]);
-               }
-       }
-       if (is2t) {
-               ele_d = (ofdmswing_table[ofdm_index[1]] & 0xFFC00000) >> 22;
-               val_x = rtlphy->iqk_matrix[indexforchannel].value[0][4];
-               val_y = rtlphy->iqk_matrix[indexforchannel].value[0][5];
-               if (val_x != 0) {
-                       if ((val_x & 0x00000200) != 0)
-                               /* consider minus */
-                               val_x = val_x | 0xFFFFFC00;
-                       ele_a = ((val_x * ele_d) >> 8) & 0x000003FF;
-                       /* new element C = element D x Y */
-                       if ((val_y & 0x00000200) != 0)
-                               val_y = val_y | 0xFFFFFC00;
-                       ele_c = ((val_y * ele_d) >> 8) & 0x00003FF;
-                       /* 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;
-                       rtl_set_bbreg(hw,
-                                     ROFDM0_XBTXIQIMBALANCE,
-                                     MASKDWORD, value32);
-                       value32 = (ele_c & 0x000003C0) >> 6;
-                       rtl_set_bbreg(hw, ROFDM0_XDTXAFE,
-                                     MASKH4BITS, value32);
-                       value32 = ((val_x * ele_d) >> 7) & 0x01;
-                       rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
-                                     BIT(28), value32);
-               } else {
-                       rtl_set_bbreg(hw,
-                                     ROFDM0_XBTXIQIMBALANCE,
-                                     MASKDWORD,
-                                     ofdmswing_table[ofdm_index[1]]);
-                       rtl_set_bbreg(hw, ROFDM0_XDTXAFE,
-                                     MASKH4BITS, 0x00);
-                       rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD,
-                                     BIT(28), 0x00);
-               }
-               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                       "TxPwrTracking path B: X = 0x%lx, Y = 0x%lx ele_A = 0x%lx ele_C = 0x%lx ele_D = 0x%lx 0xeb4 = 0x%lx 0xebc = 0x%lx\n",
-                       val_x, val_y, ele_a, ele_c,
-                       ele_d, val_x, val_y);
-       }
-       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-               "TxPwrTracking 0xc80 = 0x%x, 0xc94 = 0x%x RF 0x24 = 0x%x\n",
-               rtl_get_bbreg(hw, 0xc80, MASKDWORD),
-               rtl_get_bbreg(hw, 0xc94, MASKDWORD),
-               rtl_get_rfreg(hw, RF90_PATH_A, 0x24,
-                             RFREG_OFFSET_MASK));
-
-check_delta:
-       if (delta_iqk > rtlefuse->delta_iqk && rtlefuse->delta_iqk != 0) {
-               rtl92d_phy_reset_iqk_result(hw);
-               rtlpriv->dm.thermalvalue_iqk = thermalvalue;
-               rtl92d_phy_iq_calibrate(hw);
-       }
-       if (delta_rxgain > 0 && rtlhal->current_bandtype == BAND_ON_5G &&
-           thermalvalue <= rtlefuse->eeprom_thermalmeter) {
-               rtlpriv->dm.thermalvalue_rxgain = thermalvalue;
-               rtl92d_dm_rxgain_tracking_thermalmeter(hw);
-       }
-       if (rtlpriv->dm.txpower_track_control)
-               rtlpriv->dm.thermalvalue = thermalvalue;
-
-exit:
-       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, "<===\n");
-}
-
-static void rtl92d_dm_initialize_txpower_tracking(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       rtlpriv->dm.txpower_tracking = true;
-       rtlpriv->dm.txpower_trackinginit = false;
-       rtlpriv->dm.txpower_track_control = true;
-       rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-               "pMgntInfo->txpower_tracking = %d\n",
-               rtlpriv->dm.txpower_tracking);
-}
-
-void rtl92d_dm_check_txpower_tracking_thermal_meter(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       if (!rtlpriv->dm.txpower_tracking)
-               return;
-
-       if (!rtlpriv->dm.tm_trigger) {
-               rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, BIT(17) |
-                             BIT(16), 0x03);
-               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                       "Trigger 92S Thermal Meter!!\n");
-               rtlpriv->dm.tm_trigger = 1;
-               return;
-       } else {
-               rtl_dbg(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                       "Schedule TxPowerTracking direct call!!\n");
-               rtl92d_dm_txpower_tracking_callback_thermalmeter(hw);
-               rtlpriv->dm.tm_trigger = 0;
-       }
-}
-
-void rtl92d_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rate_adaptive *ra = &(rtlpriv->ra);
-
-       ra->ratr_state = DM_RATR_STA_INIT;
-       ra->pre_ratr_state = DM_RATR_STA_INIT;
-       if (rtlpriv->dm.dm_type == DM_TYPE_BYDRIVER)
-               rtlpriv->dm.useramask = true;
-       else
-               rtlpriv->dm.useramask = false;
-}
-
-void rtl92d_dm_init(struct ieee80211_hw *hw)
+void rtl92de_dm_init(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
@@ -1212,7 +154,7 @@ void rtl92d_dm_init(struct ieee80211_hw *hw)
        rtl92d_dm_initialize_txpower_tracking(hw);
 }
 
-void rtl92d_dm_watchdog(struct ieee80211_hw *hw)
+void rtl92de_dm_watchdog(struct ieee80211_hw *hw)
 {
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
        bool fw_current_inpsmode = false;
index 939cc45..beade22 100644 (file)
@@ -4,94 +4,7 @@
 #ifndef        __RTL92C_DM_H__
 #define __RTL92C_DM_H__
 
-#define HAL_DM_DIG_DISABLE                     BIT(0)
-#define HAL_DM_HIPWR_DISABLE                   BIT(1)
-
-#define OFDM_TABLE_LENGTH                      37
-#define OFDM_TABLE_SIZE_92D                    43
-#define CCK_TABLE_LENGTH                       33
-
-#define CCK_TABLE_SIZE                         33
-
-#define BW_AUTO_SWITCH_HIGH_LOW                        25
-#define BW_AUTO_SWITCH_LOW_HIGH                        30
-
-#define DM_DIG_FA_UPPER                                0x32
-#define DM_DIG_FA_LOWER                                0x20
-#define DM_DIG_FA_TH0                          0x100
-#define DM_DIG_FA_TH1                          0x400
-#define DM_DIG_FA_TH2                          0x600
-
-#define RXPATHSELECTION_SS_TH_LOW              30
-#define RXPATHSELECTION_DIFF_TH                        18
-
-#define DM_RATR_STA_INIT                       0
-#define DM_RATR_STA_HIGH                       1
-#define DM_RATR_STA_MIDDLE                     2
-#define DM_RATR_STA_LOW                                3
-
-#define CTS2SELF_THVAL                         30
-#define REGC38_TH                              20
-
-#define WAIOTTHVAL                             25
-
-#define TXHIGHPWRLEVEL_NORMAL                  0
-#define TXHIGHPWRLEVEL_LEVEL1                  1
-#define TXHIGHPWRLEVEL_LEVEL2                  2
-#define TXHIGHPWRLEVEL_BT1                     3
-#define TXHIGHPWRLEVEL_BT2                     4
-
-#define DM_TYPE_BYFW                           0
-#define DM_TYPE_BYDRIVER                       1
-
-#define TX_POWER_NEAR_FIELD_THRESH_LVL2                74
-#define TX_POWER_NEAR_FIELD_THRESH_LVL1                67
-#define INDEX_MAPPING_NUM                      13
-
-struct swat {
-       u8 failure_cnt;
-       u8 try_flag;
-       u8 stop_trying;
-       long pre_rssi;
-       long trying_threshold;
-       u8 cur_antenna;
-       u8 pre_antenna;
-};
-
-enum tag_dynamic_init_gain_operation_type_definition {
-       DIG_TYPE_THRESH_HIGH = 0,
-       DIG_TYPE_THRESH_LOW = 1,
-       DIG_TYPE_BACKOFF = 2,
-       DIG_TYPE_RX_GAIN_MIN = 3,
-       DIG_TYPE_RX_GAIN_MAX = 4,
-       DIG_TYPE_ENABLE = 5,
-       DIG_TYPE_DISABLE = 6,
-       DIG_OP_TYPE_MAX
-};
-
-enum dm_1r_cca {
-       CCA_1R = 0,
-       CCA_2R = 1,
-       CCA_MAX = 2,
-};
-
-enum dm_rf {
-       RF_SAVE = 0,
-       RF_NORMAL = 1,
-       RF_MAX = 2,
-};
-
-enum dm_sw_ant_switch {
-       ANS_ANTENNA_B = 1,
-       ANS_ANTENNA_A = 2,
-       ANS_ANTENNA_MAX = 3,
-};
-
-void rtl92d_dm_init(struct ieee80211_hw *hw);
-void rtl92d_dm_watchdog(struct ieee80211_hw *hw);
-void rtl92d_dm_init_edca_turbo(struct ieee80211_hw *hw);
-void rtl92d_dm_write_dig(struct ieee80211_hw *hw);
-void rtl92d_dm_check_txpower_tracking_thermal_meter(struct ieee80211_hw *hw);
-void rtl92d_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw);
+void rtl92de_dm_init(struct ieee80211_hw *hw);
+void rtl92de_dm_watchdog(struct ieee80211_hw *hw);
 
 #endif
index e1fb299..c8444a7 100644 (file)
 #include "../pci.h"
 #include "../base.h"
 #include "../efuse.h"
-#include "reg.h"
-#include "def.h"
+#include "../rtl8192d/reg.h"
+#include "../rtl8192d/def.h"
+#include "../rtl8192d/fw_common.h"
 #include "fw.h"
 #include "sw.h"
 
-static bool _rtl92d_is_fw_downloaded(struct rtl_priv *rtlpriv)
-{
-       return (rtl_read_dword(rtlpriv, REG_MCUFWDL) & MCUFWDL_RDY) ?
-               true : false;
-}
-
-static void _rtl92d_enable_fw_download(struct ieee80211_hw *hw, bool enable)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u8 tmp;
-
-       if (enable) {
-               tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
-               rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, tmp | 0x04);
-               tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL);
-               rtl_write_byte(rtlpriv, REG_MCUFWDL, tmp | 0x01);
-               tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL + 2);
-               rtl_write_byte(rtlpriv, REG_MCUFWDL + 2, tmp & 0xf7);
-       } else {
-               tmp = rtl_read_byte(rtlpriv, REG_MCUFWDL);
-               rtl_write_byte(rtlpriv, REG_MCUFWDL, tmp & 0xfe);
-               /* Reserved for fw extension.
-                * 0x81[7] is used for mac0 status ,
-                * so don't write this reg here
-                * rtl_write_byte(rtlpriv, REG_MCUFWDL + 1, 0x00);*/
-       }
-}
-
-static void _rtl92d_write_fw(struct ieee80211_hw *hw,
-                            enum version_8192d version, u8 *buffer, u32 size)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       u8 *bufferptr = buffer;
-       u32 pagenums, remainsize;
-       u32 page, offset;
-
-       rtl_dbg(rtlpriv, COMP_FW, DBG_TRACE, "FW size is %d bytes,\n", size);
-       if (rtlhal->hw_type == HARDWARE_TYPE_RTL8192DE)
-               rtl_fill_dummy(bufferptr, &size);
-       pagenums = size / FW_8192D_PAGE_SIZE;
-       remainsize = size % FW_8192D_PAGE_SIZE;
-       if (pagenums > 8)
-               pr_err("Page numbers should not greater then 8\n");
-       for (page = 0; page < pagenums; page++) {
-               offset = page * FW_8192D_PAGE_SIZE;
-               rtl_fw_page_write(hw, page, (bufferptr + offset),
-                                 FW_8192D_PAGE_SIZE);
-       }
-       if (remainsize) {
-               offset = pagenums * FW_8192D_PAGE_SIZE;
-               page = pagenums;
-               rtl_fw_page_write(hw, page, (bufferptr + offset), remainsize);
-       }
-}
-
-static int _rtl92d_fw_free_to_go(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u32 counter = 0;
-       u32 value32;
-
-       do {
-               value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL);
-       } while ((counter++ < FW_8192D_POLLING_TIMEOUT_COUNT) &&
-                (!(value32 & FWDL_CHKSUM_RPT)));
-       if (counter >= FW_8192D_POLLING_TIMEOUT_COUNT) {
-               pr_err("chksum report fail! REG_MCUFWDL:0x%08x\n",
-                      value32);
-               return -EIO;
-       }
-       value32 = rtl_read_dword(rtlpriv, REG_MCUFWDL);
-       value32 |= MCUFWDL_RDY;
-       rtl_write_dword(rtlpriv, REG_MCUFWDL, value32);
-       return 0;
-}
-
-void rtl92d_firmware_selfreset(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u8 u1b_tmp;
-       u8 delay = 100;
-
-       /* Set (REG_HMETFR + 3) to  0x20 is reset 8051 */
-       rtl_write_byte(rtlpriv, REG_HMETFR + 3, 0x20);
-       u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
-       while (u1b_tmp & BIT(2)) {
-               delay--;
-               if (delay == 0)
-                       break;
-               udelay(50);
-               u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
-       }
-       WARN_ONCE((delay <= 0), "rtl8192de: 8051 reset failed!\n");
-       rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
-               "=====> 8051 reset success (%d)\n", delay);
-}
-
-static int _rtl92d_fw_init(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       u32 counter;
-
-       rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG, "FW already have download\n");
-       /* polling for FW ready */
-       counter = 0;
-       do {
-               if (rtlhal->interfaceindex == 0) {
-                       if (rtl_read_byte(rtlpriv, FW_MAC0_READY) &
-                           MAC0_READY) {
-                               rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
-                                       "Polling FW ready success!! REG_MCUFWDL: 0x%x\n",
-                                       rtl_read_byte(rtlpriv,
-                                                     FW_MAC0_READY));
-                               return 0;
-                       }
-                       udelay(5);
-               } else {
-                       if (rtl_read_byte(rtlpriv, FW_MAC1_READY) &
-                           MAC1_READY) {
-                               rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
-                                       "Polling FW ready success!! REG_MCUFWDL: 0x%x\n",
-                                       rtl_read_byte(rtlpriv,
-                                                     FW_MAC1_READY));
-                               return 0;
-                       }
-                       udelay(5);
-               }
-       } while (counter++ < POLLING_READY_TIMEOUT_COUNT);
-
-       if (rtlhal->interfaceindex == 0) {
-               rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
-                       "Polling FW ready fail!! MAC0 FW init not ready: 0x%x\n",
-                       rtl_read_byte(rtlpriv, FW_MAC0_READY));
-       } else {
-               rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
-                       "Polling FW ready fail!! MAC1 FW init not ready: 0x%x\n",
-                       rtl_read_byte(rtlpriv, FW_MAC1_READY));
-       }
-       rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
-               "Polling FW ready fail!! REG_MCUFWDL:0x%08x\n",
-               rtl_read_dword(rtlpriv, REG_MCUFWDL));
-       return -1;
-}
-
 int rtl92d_download_fw(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -189,7 +44,7 @@ int rtl92d_download_fw(struct ieee80211_hw *hw)
        }
 
        spin_lock_irqsave(&globalmutex_for_fwdownload, flags);
-       fw_downloaded = _rtl92d_is_fw_downloaded(rtlpriv);
+       fw_downloaded = rtl92d_is_fw_downloaded(rtlpriv);
        if ((rtl_read_byte(rtlpriv, 0x1f) & BIT(5)) == BIT(5))
                fwdl_in_process = true;
        else
@@ -202,7 +57,7 @@ int rtl92d_download_fw(struct ieee80211_hw *hw)
                for (count = 0; count < 5000; count++) {
                        udelay(500);
                        spin_lock_irqsave(&globalmutex_for_fwdownload, flags);
-                       fw_downloaded = _rtl92d_is_fw_downloaded(rtlpriv);
+                       fw_downloaded = rtl92d_is_fw_downloaded(rtlpriv);
                        if ((rtl_read_byte(rtlpriv, 0x1f) & BIT(5)) == BIT(5))
                                fwdl_in_process = true;
                        else
@@ -237,11 +92,11 @@ int rtl92d_download_fw(struct ieee80211_hw *hw)
                rtl92d_firmware_selfreset(hw);
                rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x00);
        }
-       _rtl92d_enable_fw_download(hw, true);
-       _rtl92d_write_fw(hw, version, pfwdata, fwsize);
-       _rtl92d_enable_fw_download(hw, false);
+       rtl92d_enable_fw_download(hw, true);
+       rtl92d_write_fw(hw, version, pfwdata, fwsize);
+       rtl92d_enable_fw_download(hw, false);
        spin_lock_irqsave(&globalmutex_for_fwdownload, flags);
-       err = _rtl92d_fw_free_to_go(hw);
+       err = rtl92d_fw_free_to_go(hw);
        /* download fw over,clear 0x1f[5] */
        value = rtl_read_byte(rtlpriv, 0x1f);
        value &= (~BIT(5));
@@ -250,207 +105,10 @@ int rtl92d_download_fw(struct ieee80211_hw *hw)
        if (err)
                pr_err("fw is not ready to run!\n");
 exit:
-       err = _rtl92d_fw_init(hw);
+       err = rtl92d_fw_init(hw);
        return err;
 }
 
-static bool _rtl92d_check_fw_read_last_h2c(struct ieee80211_hw *hw, u8 boxnum)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u8 val_hmetfr;
-       bool result = false;
-
-       val_hmetfr = rtl_read_byte(rtlpriv, REG_HMETFR);
-       if (((val_hmetfr >> boxnum) & BIT(0)) == 0)
-               result = true;
-       return result;
-}
-
-static void _rtl92d_fill_h2c_command(struct ieee80211_hw *hw,
-                             u8 element_id, u32 cmd_len, u8 *cmdbuffer)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       u8 boxnum;
-       u16 box_reg = 0, box_extreg = 0;
-       u8 u1b_tmp;
-       bool isfw_read = false;
-       u8 buf_index = 0;
-       bool bwrite_success = false;
-       u8 wait_h2c_limmit = 100;
-       u8 wait_writeh2c_limmit = 100;
-       u8 boxcontent[4], boxextcontent[2];
-       u32 h2c_waitcounter = 0;
-       unsigned long flag;
-       u8 idx;
-
-       if (ppsc->rfpwr_state == ERFOFF || ppsc->inactive_pwrstate == ERFOFF) {
-               rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
-                       "Return as RF is off!!!\n");
-               return;
-       }
-       rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "come in\n");
-       while (true) {
-               spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag);
-               if (rtlhal->h2c_setinprogress) {
-                       rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
-                               "H2C set in progress! Wait to set..element_id(%d)\n",
-                               element_id);
-
-                       while (rtlhal->h2c_setinprogress) {
-                               spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock,
-                                                      flag);
-                               h2c_waitcounter++;
-                               rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
-                                       "Wait 100 us (%d times)...\n",
-                                       h2c_waitcounter);
-                               udelay(100);
-
-                               if (h2c_waitcounter > 1000)
-                                       return;
-
-                               spin_lock_irqsave(&rtlpriv->locks.h2c_lock,
-                                                 flag);
-                       }
-                       spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
-               } else {
-                       rtlhal->h2c_setinprogress = true;
-                       spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
-                       break;
-               }
-       }
-       while (!bwrite_success) {
-               wait_writeh2c_limmit--;
-               if (wait_writeh2c_limmit == 0) {
-                       pr_err("Write H2C fail because no trigger for FW INT!\n");
-                       break;
-               }
-               boxnum = rtlhal->last_hmeboxnum;
-               switch (boxnum) {
-               case 0:
-                       box_reg = REG_HMEBOX_0;
-                       box_extreg = REG_HMEBOX_EXT_0;
-                       break;
-               case 1:
-                       box_reg = REG_HMEBOX_1;
-                       box_extreg = REG_HMEBOX_EXT_1;
-                       break;
-               case 2:
-                       box_reg = REG_HMEBOX_2;
-                       box_extreg = REG_HMEBOX_EXT_2;
-                       break;
-               case 3:
-                       box_reg = REG_HMEBOX_3;
-                       box_extreg = REG_HMEBOX_EXT_3;
-                       break;
-               default:
-                       pr_err("switch case %#x not processed\n",
-                              boxnum);
-                       break;
-               }
-               isfw_read = _rtl92d_check_fw_read_last_h2c(hw, boxnum);
-               while (!isfw_read) {
-                       wait_h2c_limmit--;
-                       if (wait_h2c_limmit == 0) {
-                               rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
-                                       "Waiting too long for FW read clear HMEBox(%d)!\n",
-                                       boxnum);
-                               break;
-                       }
-                       udelay(10);
-                       isfw_read = _rtl92d_check_fw_read_last_h2c(hw, boxnum);
-                       u1b_tmp = rtl_read_byte(rtlpriv, 0x1BF);
-                       rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
-                               "Waiting for FW read clear HMEBox(%d)!!! 0x1BF = %2x\n",
-                               boxnum, u1b_tmp);
-               }
-               if (!isfw_read) {
-                       rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
-                               "Write H2C register BOX[%d] fail!!!!! Fw do not read.\n",
-                               boxnum);
-                       break;
-               }
-               memset(boxcontent, 0, sizeof(boxcontent));
-               memset(boxextcontent, 0, sizeof(boxextcontent));
-               boxcontent[0] = element_id;
-               rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
-                       "Write element_id box_reg(%4x) = %2x\n",
-                       box_reg, element_id);
-               switch (cmd_len) {
-               case 1:
-                       boxcontent[0] &= ~(BIT(7));
-                       memcpy(boxcontent + 1, cmdbuffer + buf_index, 1);
-                       for (idx = 0; idx < 4; idx++)
-                               rtl_write_byte(rtlpriv, box_reg + idx,
-                                              boxcontent[idx]);
-                       break;
-               case 2:
-                       boxcontent[0] &= ~(BIT(7));
-                       memcpy(boxcontent + 1, cmdbuffer + buf_index, 2);
-                       for (idx = 0; idx < 4; idx++)
-                               rtl_write_byte(rtlpriv, box_reg + idx,
-                                              boxcontent[idx]);
-                       break;
-               case 3:
-                       boxcontent[0] &= ~(BIT(7));
-                       memcpy(boxcontent + 1, cmdbuffer + buf_index, 3);
-                       for (idx = 0; idx < 4; idx++)
-                               rtl_write_byte(rtlpriv, box_reg + idx,
-                                              boxcontent[idx]);
-                       break;
-               case 4:
-                       boxcontent[0] |= (BIT(7));
-                       memcpy(boxextcontent, cmdbuffer + buf_index, 2);
-                       memcpy(boxcontent + 1, cmdbuffer + buf_index + 2, 2);
-                       for (idx = 0; idx < 2; idx++)
-                               rtl_write_byte(rtlpriv, box_extreg + idx,
-                                              boxextcontent[idx]);
-                       for (idx = 0; idx < 4; idx++)
-                               rtl_write_byte(rtlpriv, box_reg + idx,
-                                              boxcontent[idx]);
-                       break;
-               case 5:
-                       boxcontent[0] |= (BIT(7));
-                       memcpy(boxextcontent, cmdbuffer + buf_index, 2);
-                       memcpy(boxcontent + 1, cmdbuffer + buf_index + 2, 3);
-                       for (idx = 0; idx < 2; idx++)
-                               rtl_write_byte(rtlpriv, box_extreg + idx,
-                                              boxextcontent[idx]);
-                       for (idx = 0; idx < 4; idx++)
-                               rtl_write_byte(rtlpriv, box_reg + idx,
-                                              boxcontent[idx]);
-                       break;
-               default:
-                       pr_err("switch case %#x not processed\n",
-                              cmd_len);
-                       break;
-               }
-               bwrite_success = true;
-               rtlhal->last_hmeboxnum = boxnum + 1;
-               if (rtlhal->last_hmeboxnum == 4)
-                       rtlhal->last_hmeboxnum = 0;
-               rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD,
-                       "pHalData->last_hmeboxnum  = %d\n",
-                       rtlhal->last_hmeboxnum);
-       }
-       spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag);
-       rtlhal->h2c_setinprogress = false;
-       spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
-       rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "go out\n");
-}
-
-void rtl92d_fill_h2c_cmd(struct ieee80211_hw *hw,
-                        u8 element_id, u32 cmd_len, u8 *cmdbuffer)
-{
-       u32 tmp_cmdbuf[2];
-
-       memset(tmp_cmdbuf, 0, 8);
-       memcpy(tmp_cmdbuf, cmdbuffer, cmd_len);
-       _rtl92d_fill_h2c_command(hw, element_id, cmd_len, (u8 *)&tmp_cmdbuf);
-       return;
-}
-
 static bool _rtl92d_cmd_send_packet(struct ieee80211_hw *hw,
                                    struct sk_buff *skb)
 {
@@ -599,7 +257,7 @@ void rtl92d_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool dl_finished)
        struct sk_buff *skb = NULL;
        u32 totalpacketlen;
        bool rtstatus;
-       u8 u1rsvdpageloc[3] = { 0 };
+       u8 u1rsvdpageloc[3] = { PROBERSP_PG, PSPOLL_PG, NULL_PG };
        bool dlok = false;
        u8 *beacon;
        u8 *p_pspoll;
@@ -618,7 +276,6 @@ void rtl92d_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool dl_finished)
        SET_80211_PS_POLL_AID(p_pspoll, (mac->assoc_id | 0xc000));
        SET_80211_PS_POLL_BSSID(p_pspoll, mac->bssid);
        SET_80211_PS_POLL_TA(p_pspoll, mac->mac_addr);
-       SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1rsvdpageloc, PSPOLL_PG);
        /*--------------------------------------------------------
                                                (3) null data
        ---------------------------------------------------------*/
@@ -626,7 +283,6 @@ void rtl92d_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool dl_finished)
        SET_80211_HDR_ADDRESS1(nullfunc, mac->bssid);
        SET_80211_HDR_ADDRESS2(nullfunc, mac->mac_addr);
        SET_80211_HDR_ADDRESS3(nullfunc, mac->bssid);
-       SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(u1rsvdpageloc, NULL_PG);
        /*---------------------------------------------------------
                                                (4) probe response
        ----------------------------------------------------------*/
@@ -634,7 +290,6 @@ void rtl92d_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool dl_finished)
        SET_80211_HDR_ADDRESS1(p_probersp, mac->bssid);
        SET_80211_HDR_ADDRESS2(p_probersp, mac->mac_addr);
        SET_80211_HDR_ADDRESS3(p_probersp, mac->bssid);
-       SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(u1rsvdpageloc, PROBERSP_PG);
        totalpacketlen = TOTAL_RESERVED_PKT_LEN;
        RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD,
                      "rtl92d_set_fw_rsvdpagepkt(): HW_VAR_SET_TX_CMD: ALL",
@@ -663,11 +318,3 @@ void rtl92d_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool dl_finished)
                rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING,
                        "Set RSVD page location to Fw FAIL!!!!!!\n");
 }
-
-void rtl92d_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus)
-{
-       u8 u1_joinbssrpt_parm[1] = {0};
-
-       SET_H2CCMD_JOINBSSRPT_PARM_OPMODE(u1_joinbssrpt_parm, mstatus);
-       rtl92d_fill_h2c_cmd(hw, H2C_JOINBSSRPT, 1, u1_joinbssrpt_parm);
-}
index 7f0a17c..9e1385a 100644 (file)
@@ -4,44 +4,7 @@
 #ifndef __RTL92D__FW__H__
 #define __RTL92D__FW__H__
 
-#define FW_8192D_START_ADDRESS                 0x1000
-#define FW_8192D_PAGE_SIZE                             4096
-#define FW_8192D_POLLING_TIMEOUT_COUNT 1000
-
-#define IS_FW_HEADER_EXIST(_pfwhdr)    \
-               ((GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFF0) == 0x92C0 || \
-               (GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFF0) == 0x88C0 ||  \
-               (GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFFF) == 0x92D0 ||  \
-               (GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFFF) == 0x92D1 ||  \
-               (GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFFF) == 0x92D2 ||  \
-               (GET_FIRMWARE_HDR_SIGNATURE(_pfwhdr) & 0xFFFF) == 0x92D3)
-
-/* Firmware Header(8-byte alinment required) */
-/* --- LONG WORD 0 ---- */
-#define GET_FIRMWARE_HDR_SIGNATURE(__fwhdr)            \
-       le32_get_bits(*(__le32 *)__fwhdr, GENMASK(15, 0))
-#define GET_FIRMWARE_HDR_VERSION(__fwhdr)              \
-       le32_get_bits(*(__le32 *)(__fwhdr + 4), GENMASK(15, 0))
-#define GET_FIRMWARE_HDR_SUB_VER(__fwhdr)              \
-       le32_get_bits(*(__le32 *)(__fwhdr + 4), GENMASK(23, 16))
-
-#define pagenum_128(_len) \
-       (u32)(((_len) >> 7) + ((_len) & 0x7F ? 1 : 0))
-
-#define SET_H2CCMD_JOINBSSRPT_PARM_OPMODE(__ph2ccmd, __val)    \
-       *(u8 *)__ph2ccmd = __val;
-#define SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__ph2ccmd, __val)    \
-       *(u8 *)__ph2ccmd = __val;
-#define SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(__ph2ccmd, __val)       \
-       *(u8 *)(__ph2ccmd + 1) = __val;
-#define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__ph2ccmd, __val)    \
-       *(u8 *)(__ph2ccmd + 2) = __val;
-
 int rtl92d_download_fw(struct ieee80211_hw *hw);
-void rtl92d_fill_h2c_cmd(struct ieee80211_hw *hw, u8 element_id,
-                        u32 cmd_len, u8 *p_cmdbuffer);
-void rtl92d_firmware_selfreset(struct ieee80211_hw *hw);
 void rtl92d_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished);
-void rtl92d_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus);
 
 #endif
index 4ba42f6..73b81e6 100644 (file)
@@ -8,8 +8,12 @@
 #include "../cam.h"
 #include "../ps.h"
 #include "../pci.h"
-#include "reg.h"
-#include "def.h"
+#include "../rtl8192d/reg.h"
+#include "../rtl8192d/def.h"
+#include "../rtl8192d/dm_common.h"
+#include "../rtl8192d/fw_common.h"
+#include "../rtl8192d/hw_common.h"
+#include "../rtl8192d/phy_common.h"
 #include "phy.h"
 #include "dm.h"
 #include "fw.h"
@@ -50,34 +54,6 @@ static void _rtl92de_set_bcn_ctrl_reg(struct ieee80211_hw *hw,
        rtl_write_byte(rtlpriv, REG_BCN_CTRL, (u8) rtlpci->reg_bcn_ctrl_val);
 }
 
-static void _rtl92de_stop_tx_beacon(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u8 tmp1byte;
-
-       tmp1byte = rtl_read_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2);
-       rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2, tmp1byte & (~BIT(6)));
-       rtl_write_byte(rtlpriv, REG_BCN_MAX_ERR, 0xff);
-       rtl_write_byte(rtlpriv, REG_TBTT_PROHIBIT + 1, 0x64);
-       tmp1byte = rtl_read_byte(rtlpriv, REG_TBTT_PROHIBIT + 2);
-       tmp1byte &= ~(BIT(0));
-       rtl_write_byte(rtlpriv, REG_TBTT_PROHIBIT + 2, tmp1byte);
-}
-
-static void _rtl92de_resume_tx_beacon(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u8 tmp1byte;
-
-       tmp1byte = rtl_read_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2);
-       rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2, tmp1byte | BIT(6));
-       rtl_write_byte(rtlpriv, REG_BCN_MAX_ERR, 0x0a);
-       rtl_write_byte(rtlpriv, REG_TBTT_PROHIBIT + 1, 0xff);
-       tmp1byte = rtl_read_byte(rtlpriv, REG_TBTT_PROHIBIT + 2);
-       tmp1byte |= BIT(0);
-       rtl_write_byte(rtlpriv, REG_TBTT_PROHIBIT + 2, tmp1byte);
-}
-
 static void _rtl92de_enable_bcn_sub_func(struct ieee80211_hw *hw)
 {
        _rtl92de_set_bcn_ctrl_reg(hw, 0, BIT(1));
@@ -90,58 +66,14 @@ static void _rtl92de_disable_bcn_sub_func(struct ieee80211_hw *hw)
 
 void rtl92de_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
 {
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
 
        switch (variable) {
        case HW_VAR_RCR:
                *((u32 *) (val)) = rtlpci->receive_config;
                break;
-       case HW_VAR_RF_STATE:
-               *((enum rf_pwrstate *)(val)) = ppsc->rfpwr_state;
-               break;
-       case HW_VAR_FWLPS_RF_ON:{
-               enum rf_pwrstate rfstate;
-               u32 val_rcr;
-
-               rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_RF_STATE,
-                                             (u8 *)(&rfstate));
-               if (rfstate == ERFOFF) {
-                       *((bool *) (val)) = true;
-               } else {
-                       val_rcr = rtl_read_dword(rtlpriv, REG_RCR);
-                       val_rcr &= 0x00070000;
-                       if (val_rcr)
-                               *((bool *) (val)) = false;
-                       else
-                               *((bool *) (val)) = true;
-               }
-               break;
-       }
-       case HW_VAR_FW_PSMODE_STATUS:
-               *((bool *) (val)) = ppsc->fw_current_inpsmode;
-               break;
-       case HW_VAR_CORRECT_TSF:{
-               u64 tsf;
-               u32 *ptsf_low = (u32 *)&tsf;
-               u32 *ptsf_high = ((u32 *)&tsf) + 1;
-
-               *ptsf_high = rtl_read_dword(rtlpriv, (REG_TSFTR + 4));
-               *ptsf_low = rtl_read_dword(rtlpriv, REG_TSFTR);
-               *((u64 *) (val)) = tsf;
-               break;
-       }
-       case HW_VAR_INT_MIGRATION:
-               *((bool *)(val)) = rtlpriv->dm.interrupt_migration;
-               break;
-       case HW_VAR_INT_AC:
-               *((bool *)(val)) = rtlpriv->dm.disable_tx_int;
-               break;
-       case HAL_DEF_WOWLAN:
-               break;
        default:
-               pr_err("switch case %#x not processed\n", variable);
+               rtl92d_get_hw_reg(hw, variable, val);
                break;
        }
 }
@@ -151,141 +83,8 @@ void rtl92de_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
        struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       u8 idx;
 
        switch (variable) {
-       case HW_VAR_ETHER_ADDR:
-               for (idx = 0; idx < ETH_ALEN; idx++) {
-                       rtl_write_byte(rtlpriv, (REG_MACID + idx),
-                                      val[idx]);
-               }
-               break;
-       case HW_VAR_BASIC_RATE: {
-               u16 rate_cfg = ((u16 *) val)[0];
-               u8 rate_index = 0;
-
-               rate_cfg = rate_cfg & 0x15f;
-               if (mac->vendor == PEER_CISCO &&
-                   ((rate_cfg & 0x150) == 0))
-                       rate_cfg |= 0x01;
-               rtl_write_byte(rtlpriv, REG_RRSR, rate_cfg & 0xff);
-               rtl_write_byte(rtlpriv, REG_RRSR + 1,
-                              (rate_cfg >> 8) & 0xff);
-               while (rate_cfg > 0x1) {
-                       rate_cfg = (rate_cfg >> 1);
-                       rate_index++;
-               }
-               if (rtlhal->fw_version > 0xe)
-                       rtl_write_byte(rtlpriv, REG_INIRTS_RATE_SEL,
-                                      rate_index);
-               break;
-       }
-       case HW_VAR_BSSID:
-               for (idx = 0; idx < ETH_ALEN; idx++) {
-                       rtl_write_byte(rtlpriv, (REG_BSSID + idx),
-                                      val[idx]);
-               }
-               break;
-       case HW_VAR_SIFS:
-               rtl_write_byte(rtlpriv, REG_SIFS_CTX + 1, val[0]);
-               rtl_write_byte(rtlpriv, REG_SIFS_TRX + 1, val[1]);
-               rtl_write_byte(rtlpriv, REG_SPEC_SIFS + 1, val[0]);
-               rtl_write_byte(rtlpriv, REG_MAC_SPEC_SIFS + 1, val[0]);
-               if (!mac->ht_enable)
-                       rtl_write_word(rtlpriv, REG_RESP_SIFS_OFDM,
-                                      0x0e0e);
-               else
-                       rtl_write_word(rtlpriv, REG_RESP_SIFS_OFDM,
-                                      *((u16 *) val));
-               break;
-       case HW_VAR_SLOT_TIME: {
-               u8 e_aci;
-
-               rtl_dbg(rtlpriv, COMP_MLME, DBG_LOUD,
-                       "HW_VAR_SLOT_TIME %x\n", val[0]);
-               rtl_write_byte(rtlpriv, REG_SLOT, val[0]);
-               for (e_aci = 0; e_aci < AC_MAX; e_aci++)
-                       rtlpriv->cfg->ops->set_hw_reg(hw,
-                                                     HW_VAR_AC_PARAM,
-                                                     (&e_aci));
-               break;
-       }
-       case HW_VAR_ACK_PREAMBLE: {
-               u8 reg_tmp;
-               u8 short_preamble = (bool) (*val);
-
-               reg_tmp = (mac->cur_40_prime_sc) << 5;
-               if (short_preamble)
-                       reg_tmp |= 0x80;
-               rtl_write_byte(rtlpriv, REG_RRSR + 2, reg_tmp);
-               break;
-       }
-       case HW_VAR_AMPDU_MIN_SPACE: {
-               u8 min_spacing_to_set;
-
-               min_spacing_to_set = *val;
-               if (min_spacing_to_set <= 7) {
-                       mac->min_space_cfg = ((mac->min_space_cfg & 0xf8) |
-                                             min_spacing_to_set);
-                       *val = min_spacing_to_set;
-                       rtl_dbg(rtlpriv, COMP_MLME, DBG_LOUD,
-                               "Set HW_VAR_AMPDU_MIN_SPACE: %#x\n",
-                               mac->min_space_cfg);
-                       rtl_write_byte(rtlpriv, REG_AMPDU_MIN_SPACE,
-                                      mac->min_space_cfg);
-               }
-               break;
-       }
-       case HW_VAR_SHORTGI_DENSITY: {
-               u8 density_to_set;
-
-               density_to_set = *val;
-               mac->min_space_cfg = rtlpriv->rtlhal.minspace_cfg;
-               mac->min_space_cfg |= (density_to_set << 3);
-               rtl_dbg(rtlpriv, COMP_MLME, DBG_LOUD,
-                       "Set HW_VAR_SHORTGI_DENSITY: %#x\n",
-                       mac->min_space_cfg);
-               rtl_write_byte(rtlpriv, REG_AMPDU_MIN_SPACE,
-                              mac->min_space_cfg);
-               break;
-       }
-       case HW_VAR_AMPDU_FACTOR: {
-               u8 factor_toset;
-               u32 regtoset;
-               u8 *ptmp_byte = NULL;
-               u8 index;
-
-               if (rtlhal->macphymode == DUALMAC_DUALPHY)
-                       regtoset = 0xb9726641;
-               else if (rtlhal->macphymode == DUALMAC_SINGLEPHY)
-                       regtoset = 0x66626641;
-               else
-                       regtoset = 0xb972a841;
-               factor_toset = *val;
-               if (factor_toset <= 3) {
-                       factor_toset = (1 << (factor_toset + 2));
-                       if (factor_toset > 0xf)
-                               factor_toset = 0xf;
-                       for (index = 0; index < 4; index++) {
-                               ptmp_byte = (u8 *)(&regtoset) + index;
-                               if ((*ptmp_byte & 0xf0) >
-                                   (factor_toset << 4))
-                                       *ptmp_byte = (*ptmp_byte & 0x0f)
-                                                | (factor_toset << 4);
-                               if ((*ptmp_byte & 0x0f) > factor_toset)
-                                       *ptmp_byte = (*ptmp_byte & 0xf0)
-                                                    | (factor_toset);
-                       }
-                       rtl_write_dword(rtlpriv, REG_AGGLEN_LMT, regtoset);
-                       rtl_dbg(rtlpriv, COMP_MLME, DBG_LOUD,
-                               "Set HW_VAR_AMPDU_FACTOR: %#x\n",
-                               factor_toset);
-               }
-               break;
-       }
        case HW_VAR_AC_PARAM: {
                u8 e_aci = *val;
                rtl92d_dm_init_edca_turbo(hw);
@@ -346,37 +145,6 @@ void rtl92de_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
                rtl_write_dword(rtlpriv, REG_RCR, ((u32 *) (val))[0]);
                rtlpci->receive_config = ((u32 *) (val))[0];
                break;
-       case HW_VAR_RETRY_LIMIT: {
-               u8 retry_limit = val[0];
-
-               rtl_write_word(rtlpriv, REG_RL,
-                              retry_limit << RETRY_LIMIT_SHORT_SHIFT |
-                              retry_limit << RETRY_LIMIT_LONG_SHIFT);
-               break;
-       }
-       case HW_VAR_DUAL_TSF_RST:
-               rtl_write_byte(rtlpriv, REG_DUAL_TSF_RST, (BIT(0) | BIT(1)));
-               break;
-       case HW_VAR_EFUSE_BYTES:
-               rtlefuse->efuse_usedbytes = *((u16 *) val);
-               break;
-       case HW_VAR_EFUSE_USAGE:
-               rtlefuse->efuse_usedpercentage = *val;
-               break;
-       case HW_VAR_IO_CMD:
-               rtl92d_phy_set_io_cmd(hw, (*(enum io_type *)val));
-               break;
-       case HW_VAR_WPA_CONFIG:
-               rtl_write_byte(rtlpriv, REG_SECCFG, *val);
-               break;
-       case HW_VAR_SET_RPWM:
-               rtl92d_fill_h2c_cmd(hw, H2C_PWRM, 1, (val));
-               break;
-       case HW_VAR_H2C_FW_PWRMODE:
-               break;
-       case HW_VAR_FW_PSMODE_STATUS:
-               ppsc->fw_current_inpsmode = *((bool *) val);
-               break;
        case HW_VAR_H2C_FW_JOINBSSRPT: {
                u8 mstatus = (*val);
                u8 tmp_regcr, tmp_reg422;
@@ -409,19 +177,11 @@ void rtl92de_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
                rtl92d_set_fw_joinbss_report_cmd(hw, (*val));
                break;
        }
-       case HW_VAR_AID: {
-               u16 u2btmp;
-               u2btmp = rtl_read_word(rtlpriv, REG_BCN_PSR_RPT);
-               u2btmp &= 0xC000;
-               rtl_write_word(rtlpriv, REG_BCN_PSR_RPT, (u2btmp |
-                              mac->assoc_id));
-               break;
-       }
        case HW_VAR_CORRECT_TSF: {
                u8 btype_ibss = val[0];
 
                if (btype_ibss)
-                       _rtl92de_stop_tx_beacon(hw);
+                       rtl92de_stop_tx_beacon(hw);
                _rtl92de_set_bcn_ctrl_reg(hw, 0, BIT(3));
                rtl_write_dword(rtlpriv, REG_TSFTR,
                                (u32) (mac->tsf & 0xffffffff));
@@ -429,7 +189,7 @@ void rtl92de_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
                                (u32) ((mac->tsf >> 32) & 0xffffffff));
                _rtl92de_set_bcn_ctrl_reg(hw, BIT(3), 0);
                if (btype_ibss)
-                       _rtl92de_resume_tx_beacon(hw);
+                       rtl92de_resume_tx_beacon(hw);
 
                break;
        }
@@ -472,34 +232,11 @@ void rtl92de_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
                break;
        }
        default:
-               pr_err("switch case %#x not processed\n", variable);
+               rtl92d_set_hw_reg(hw, variable, val);
                break;
        }
 }
 
-static bool _rtl92de_llt_write(struct ieee80211_hw *hw, u32 address, u32 data)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       bool status = true;
-       long count = 0;
-       u32 value = _LLT_INIT_ADDR(address) |
-           _LLT_INIT_DATA(data) | _LLT_OP(_LLT_WRITE_ACCESS);
-
-       rtl_write_dword(rtlpriv, REG_LLT_INIT, value);
-       do {
-               value = rtl_read_dword(rtlpriv, REG_LLT_INIT);
-               if (_LLT_NO_ACTIVE == _LLT_OP_VALUE(value))
-                       break;
-               if (count > POLLING_LLT_THRESHOLD) {
-                       pr_err("Failed to polling write LLT done at address %d!\n",
-                              address);
-                       status = false;
-                       break;
-               }
-       } while (++count);
-       return status;
-}
-
 static bool _rtl92de_llt_table_init(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -558,13 +295,13 @@ static bool _rtl92de_llt_table_init(struct ieee80211_hw *hw)
 
        /* 18.  LLT_table_init(Adapter);  */
        for (i = 0; i < (txpktbuf_bndy - 1); i++) {
-               status = _rtl92de_llt_write(hw, i, i + 1);
+               status = rtl92de_llt_write(hw, i, i + 1);
                if (!status)
                        return status;
        }
 
        /* end of list */
-       status = _rtl92de_llt_write(hw, (txpktbuf_bndy - 1), 0xFF);
+       status = rtl92de_llt_write(hw, (txpktbuf_bndy - 1), 0xFF);
        if (!status)
                return status;
 
@@ -573,13 +310,13 @@ static bool _rtl92de_llt_table_init(struct ieee80211_hw *hw)
        /* config this MAC as two MAC transfer. */
        /* Otherwise used as local loopback buffer.  */
        for (i = txpktbuf_bndy; i < maxpage; i++) {
-               status = _rtl92de_llt_write(hw, i, (i + 1));
+               status = rtl92de_llt_write(hw, i, (i + 1));
                if (!status)
                        return status;
        }
 
        /* Let last entry point to the start entry of ring buffer */
-       status = _rtl92de_llt_write(hw, maxpage, txpktbuf_bndy);
+       status = rtl92de_llt_write(hw, maxpage, txpktbuf_bndy);
        if (!status)
                return status;
 
@@ -842,32 +579,6 @@ static void _rtl92de_enable_aspm_back_door(struct ieee80211_hw *hw)
        rtl_write_byte(rtlpriv, 0x352, 0x1);
 }
 
-void rtl92de_enable_hw_security_config(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u8 sec_reg_value;
-
-       rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
-               "PairwiseEncAlgorithm = %d GroupEncAlgorithm = %d\n",
-               rtlpriv->sec.pairwise_enc_algorithm,
-               rtlpriv->sec.group_enc_algorithm);
-       if (rtlpriv->cfg->mod_params->sw_crypto || rtlpriv->sec.use_sw_sec) {
-               rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
-                       "not open hw encryption\n");
-               return;
-       }
-       sec_reg_value = SCR_TXENCENABLE | SCR_RXENCENABLE;
-       if (rtlpriv->sec.use_defaultkey) {
-               sec_reg_value |= SCR_TXUSEDK;
-               sec_reg_value |= SCR_RXUSEDK;
-       }
-       sec_reg_value |= (SCR_RXBCUSEDK | SCR_TXBCUSEDK);
-       rtl_write_byte(rtlpriv, REG_CR + 1, 0x02);
-       rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD,
-               "The SECR-value %x\n", sec_reg_value);
-       rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_WPA_CONFIG, &sec_reg_value);
-}
-
 int rtl92de_hw_init(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -991,11 +702,11 @@ int rtl92de_hw_init(struct ieee80211_hw *hw)
        _rtl92de_enable_aspm_back_door(hw);
        /* rtlpriv->intf_ops->enable_aspm(hw); */
 
-       rtl92d_dm_init(hw);
+       rtl92de_dm_init(hw);
        rtlpci->being_init_adapter = false;
 
        if (ppsc->rfpwr_state == ERFON) {
-               rtl92d_phy_lc_calibrate(hw);
+               rtl92d_phy_lc_calibrate(hw, IS_92D_SINGLEPHY(rtlhal->version));
                /* 5G and 2.4G must wait sometime to let RF LO ready */
                if (rtlhal->macphymode == DUALMAC_DUALPHY) {
                        u32 tmp_rega;
@@ -1020,23 +731,6 @@ int rtl92de_hw_init(struct ieee80211_hw *hw)
        return err;
 }
 
-static enum version_8192d _rtl92de_read_chip_version(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       enum version_8192d version = VERSION_NORMAL_CHIP_92D_SINGLEPHY;
-       u32 value32;
-
-       value32 = rtl_read_dword(rtlpriv, REG_SYS_CFG);
-       if (!(value32 & 0x000f0000)) {
-               version = VERSION_TEST_CHIP_92D_SINGLEPHY;
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "TEST CHIP!!!\n");
-       } else {
-               version = VERSION_NORMAL_CHIP_92D_SINGLEPHY;
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "Normal CHIP!!!\n");
-       }
-       return version;
-}
-
 static int _rtl92de_set_media_status(struct ieee80211_hw *hw,
                                     enum nl80211_iftype type)
 {
@@ -1048,11 +742,11 @@ static int _rtl92de_set_media_status(struct ieee80211_hw *hw,
 
        if (type == NL80211_IFTYPE_UNSPECIFIED ||
            type == NL80211_IFTYPE_STATION) {
-               _rtl92de_stop_tx_beacon(hw);
+               rtl92de_stop_tx_beacon(hw);
                _rtl92de_enable_bcn_sub_func(hw);
        } else if (type == NL80211_IFTYPE_ADHOC ||
                type == NL80211_IFTYPE_AP) {
-               _rtl92de_resume_tx_beacon(hw);
+               rtl92de_resume_tx_beacon(hw);
                _rtl92de_disable_bcn_sub_func(hw);
        } else {
                rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING,
@@ -1152,13 +846,6 @@ void rtl92d_linked_set_reg(struct ieee80211_hw *hw)
        }
 }
 
-/* don't set REG_EDCA_BE_PARAM here because
- * mac80211 will send pkt when scan */
-void rtl92de_set_qos(struct ieee80211_hw *hw, int aci)
-{
-       rtl92d_dm_init_edca_turbo(hw);
-}
-
 void rtl92de_enable_interrupt(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -1383,825 +1070,6 @@ void rtl92de_update_interrupt_mask(struct ieee80211_hw *hw,
        rtl92de_enable_interrupt(hw);
 }
 
-static void _rtl92de_readpowervalue_fromprom(struct txpower_info *pwrinfo,
-                                u8 *rom_content, bool autoloadfail)
-{
-       u32 rfpath, eeaddr, group, offset1, offset2;
-       u8 i;
-
-       memset(pwrinfo, 0, sizeof(struct txpower_info));
-       if (autoloadfail) {
-               for (group = 0; group < CHANNEL_GROUP_MAX; group++) {
-                       for (rfpath = 0; rfpath < RF6052_MAX_PATH; rfpath++) {
-                               if (group < CHANNEL_GROUP_MAX_2G) {
-                                       pwrinfo->cck_index[rfpath][group] =
-                                           EEPROM_DEFAULT_TXPOWERLEVEL_2G;
-                                       pwrinfo->ht40_1sindex[rfpath][group] =
-                                           EEPROM_DEFAULT_TXPOWERLEVEL_2G;
-                               } else {
-                                       pwrinfo->ht40_1sindex[rfpath][group] =
-                                           EEPROM_DEFAULT_TXPOWERLEVEL_5G;
-                               }
-                               pwrinfo->ht40_2sindexdiff[rfpath][group] =
-                                   EEPROM_DEFAULT_HT40_2SDIFF;
-                               pwrinfo->ht20indexdiff[rfpath][group] =
-                                   EEPROM_DEFAULT_HT20_DIFF;
-                               pwrinfo->ofdmindexdiff[rfpath][group] =
-                                   EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF;
-                               pwrinfo->ht40maxoffset[rfpath][group] =
-                                   EEPROM_DEFAULT_HT40_PWRMAXOFFSET;
-                               pwrinfo->ht20maxoffset[rfpath][group] =
-                                   EEPROM_DEFAULT_HT20_PWRMAXOFFSET;
-                       }
-               }
-               for (i = 0; i < 3; i++) {
-                       pwrinfo->tssi_a[i] = EEPROM_DEFAULT_TSSI;
-                       pwrinfo->tssi_b[i] = EEPROM_DEFAULT_TSSI;
-               }
-               return;
-       }
-
-       /* Maybe autoload OK,buf the tx power index value is not filled.
-        * If we find it, we set it to default value. */
-       for (rfpath = 0; rfpath < RF6052_MAX_PATH; rfpath++) {
-               for (group = 0; group < CHANNEL_GROUP_MAX_2G; group++) {
-                       eeaddr = EEPROM_CCK_TX_PWR_INX_2G + (rfpath * 3)
-                                + group;
-                       pwrinfo->cck_index[rfpath][group] =
-                                       (rom_content[eeaddr] == 0xFF) ?
-                                            (eeaddr > 0x7B ?
-                                            EEPROM_DEFAULT_TXPOWERLEVEL_5G :
-                                            EEPROM_DEFAULT_TXPOWERLEVEL_2G) :
-                                            rom_content[eeaddr];
-               }
-       }
-       for (rfpath = 0; rfpath < RF6052_MAX_PATH; rfpath++) {
-               for (group = 0; group < CHANNEL_GROUP_MAX; group++) {
-                       offset1 = group / 3;
-                       offset2 = group % 3;
-                       eeaddr = EEPROM_HT40_1S_TX_PWR_INX_2G + (rfpath * 3) +
-                           offset2 + offset1 * 21;
-                       pwrinfo->ht40_1sindex[rfpath][group] =
-                           (rom_content[eeaddr] == 0xFF) ? (eeaddr > 0x7B ?
-                                            EEPROM_DEFAULT_TXPOWERLEVEL_5G :
-                                            EEPROM_DEFAULT_TXPOWERLEVEL_2G) :
-                                                rom_content[eeaddr];
-               }
-       }
-       /* These just for 92D efuse offset. */
-       for (group = 0; group < CHANNEL_GROUP_MAX; group++) {
-               for (rfpath = 0; rfpath < RF6052_MAX_PATH; rfpath++) {
-                       int base1 = EEPROM_HT40_2S_TX_PWR_INX_DIFF_2G;
-
-                       offset1 = group / 3;
-                       offset2 = group % 3;
-
-                       if (rom_content[base1 + offset2 + offset1 * 21] != 0xFF)
-                               pwrinfo->ht40_2sindexdiff[rfpath][group] =
-                                   (rom_content[base1 +
-                                    offset2 + offset1 * 21] >> (rfpath * 4))
-                                    & 0xF;
-                       else
-                               pwrinfo->ht40_2sindexdiff[rfpath][group] =
-                                   EEPROM_DEFAULT_HT40_2SDIFF;
-                       if (rom_content[EEPROM_HT20_TX_PWR_INX_DIFF_2G + offset2
-                           + offset1 * 21] != 0xFF)
-                               pwrinfo->ht20indexdiff[rfpath][group] =
-                                   (rom_content[EEPROM_HT20_TX_PWR_INX_DIFF_2G
-                                   + offset2 + offset1 * 21] >> (rfpath * 4))
-                                   & 0xF;
-                       else
-                               pwrinfo->ht20indexdiff[rfpath][group] =
-                                   EEPROM_DEFAULT_HT20_DIFF;
-                       if (rom_content[EEPROM_OFDM_TX_PWR_INX_DIFF_2G + offset2
-                           + offset1 * 21] != 0xFF)
-                               pwrinfo->ofdmindexdiff[rfpath][group] =
-                                   (rom_content[EEPROM_OFDM_TX_PWR_INX_DIFF_2G
-                                    + offset2 + offset1 * 21] >> (rfpath * 4))
-                                    & 0xF;
-                       else
-                               pwrinfo->ofdmindexdiff[rfpath][group] =
-                                   EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF;
-                       if (rom_content[EEPROM_HT40_MAX_PWR_OFFSET_2G + offset2
-                           + offset1 * 21] != 0xFF)
-                               pwrinfo->ht40maxoffset[rfpath][group] =
-                                   (rom_content[EEPROM_HT40_MAX_PWR_OFFSET_2G
-                                   + offset2 + offset1 * 21] >> (rfpath * 4))
-                                   & 0xF;
-                       else
-                               pwrinfo->ht40maxoffset[rfpath][group] =
-                                   EEPROM_DEFAULT_HT40_PWRMAXOFFSET;
-                       if (rom_content[EEPROM_HT20_MAX_PWR_OFFSET_2G + offset2
-                           + offset1 * 21] != 0xFF)
-                               pwrinfo->ht20maxoffset[rfpath][group] =
-                                   (rom_content[EEPROM_HT20_MAX_PWR_OFFSET_2G +
-                                    offset2 + offset1 * 21] >> (rfpath * 4)) &
-                                    0xF;
-                       else
-                               pwrinfo->ht20maxoffset[rfpath][group] =
-                                   EEPROM_DEFAULT_HT20_PWRMAXOFFSET;
-               }
-       }
-       if (rom_content[EEPROM_TSSI_A_5G] != 0xFF) {
-               /* 5GL */
-               pwrinfo->tssi_a[0] = rom_content[EEPROM_TSSI_A_5G] & 0x3F;
-               pwrinfo->tssi_b[0] = rom_content[EEPROM_TSSI_B_5G] & 0x3F;
-               /* 5GM */
-               pwrinfo->tssi_a[1] = rom_content[EEPROM_TSSI_AB_5G] & 0x3F;
-               pwrinfo->tssi_b[1] =
-                   (rom_content[EEPROM_TSSI_AB_5G] & 0xC0) >> 6 |
-                   (rom_content[EEPROM_TSSI_AB_5G + 1] & 0x0F) << 2;
-               /* 5GH */
-               pwrinfo->tssi_a[2] = (rom_content[EEPROM_TSSI_AB_5G + 1] &
-                                     0xF0) >> 4 |
-                   (rom_content[EEPROM_TSSI_AB_5G + 2] & 0x03) << 4;
-               pwrinfo->tssi_b[2] = (rom_content[EEPROM_TSSI_AB_5G + 2] &
-                                     0xFC) >> 2;
-       } else {
-               for (i = 0; i < 3; i++) {
-                       pwrinfo->tssi_a[i] = EEPROM_DEFAULT_TSSI;
-                       pwrinfo->tssi_b[i] = EEPROM_DEFAULT_TSSI;
-               }
-       }
-}
-
-static void _rtl92de_read_txpower_info(struct ieee80211_hw *hw,
-                                      bool autoload_fail, u8 *hwinfo)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       struct txpower_info pwrinfo;
-       u8 tempval[2], i, pwr, diff;
-       u32 ch, rfpath, group;
-
-       _rtl92de_readpowervalue_fromprom(&pwrinfo, hwinfo, autoload_fail);
-       if (!autoload_fail) {
-               /* bit0~2 */
-               rtlefuse->eeprom_regulatory = (hwinfo[EEPROM_RF_OPT1] & 0x7);
-               rtlefuse->eeprom_thermalmeter =
-                        hwinfo[EEPROM_THERMAL_METER] & 0x1f;
-               rtlefuse->crystalcap = hwinfo[EEPROM_XTAL_K];
-               tempval[0] = hwinfo[EEPROM_IQK_DELTA] & 0x03;
-               tempval[1] = (hwinfo[EEPROM_LCK_DELTA] & 0x0C) >> 2;
-               rtlefuse->txpwr_fromeprom = true;
-               if (IS_92D_D_CUT(rtlpriv->rtlhal.version) ||
-                   IS_92D_E_CUT(rtlpriv->rtlhal.version)) {
-                       rtlefuse->internal_pa_5g[0] =
-                               !((hwinfo[EEPROM_TSSI_A_5G] & BIT(6)) >> 6);
-                       rtlefuse->internal_pa_5g[1] =
-                               !((hwinfo[EEPROM_TSSI_B_5G] & BIT(6)) >> 6);
-                       rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
-                               "Is D cut,Internal PA0 %d Internal PA1 %d\n",
-                               rtlefuse->internal_pa_5g[0],
-                               rtlefuse->internal_pa_5g[1]);
-               }
-               rtlefuse->eeprom_c9 = hwinfo[EEPROM_RF_OPT6];
-               rtlefuse->eeprom_cc = hwinfo[EEPROM_RF_OPT7];
-       } else {
-               rtlefuse->eeprom_regulatory = 0;
-               rtlefuse->eeprom_thermalmeter = EEPROM_DEFAULT_THERMALMETER;
-               rtlefuse->crystalcap = EEPROM_DEFAULT_CRYSTALCAP;
-               tempval[0] = tempval[1] = 3;
-       }
-
-       /* Use default value to fill parameters if
-        * efuse is not filled on some place. */
-
-       /* ThermalMeter from EEPROM */
-       if (rtlefuse->eeprom_thermalmeter < 0x06 ||
-           rtlefuse->eeprom_thermalmeter > 0x1c)
-               rtlefuse->eeprom_thermalmeter = 0x12;
-       rtlefuse->thermalmeter[0] = rtlefuse->eeprom_thermalmeter;
-
-       /* check XTAL_K */
-       if (rtlefuse->crystalcap == 0xFF)
-               rtlefuse->crystalcap = 0;
-       if (rtlefuse->eeprom_regulatory > 3)
-               rtlefuse->eeprom_regulatory = 0;
-
-       for (i = 0; i < 2; i++) {
-               switch (tempval[i]) {
-               case 0:
-                       tempval[i] = 5;
-                       break;
-               case 1:
-                       tempval[i] = 4;
-                       break;
-               case 2:
-                       tempval[i] = 3;
-                       break;
-               case 3:
-               default:
-                       tempval[i] = 0;
-                       break;
-               }
-       }
-
-       rtlefuse->delta_iqk = tempval[0];
-       if (tempval[1] > 0)
-               rtlefuse->delta_lck = tempval[1] - 1;
-       if (rtlefuse->eeprom_c9 == 0xFF)
-               rtlefuse->eeprom_c9 = 0x00;
-       rtl_dbg(rtlpriv, COMP_INTR, DBG_LOUD,
-               "EEPROMRegulatory = 0x%x\n", rtlefuse->eeprom_regulatory);
-       rtl_dbg(rtlpriv, COMP_INTR, DBG_LOUD,
-               "ThermalMeter = 0x%x\n", rtlefuse->eeprom_thermalmeter);
-       rtl_dbg(rtlpriv, COMP_INTR, DBG_LOUD,
-               "CrystalCap = 0x%x\n", rtlefuse->crystalcap);
-       rtl_dbg(rtlpriv, COMP_INTR, DBG_LOUD,
-               "Delta_IQK = 0x%x Delta_LCK = 0x%x\n",
-               rtlefuse->delta_iqk, rtlefuse->delta_lck);
-
-       for (rfpath = 0; rfpath < RF6052_MAX_PATH; rfpath++) {
-               for (ch = 0; ch < CHANNEL_MAX_NUMBER; ch++) {
-                       group = rtl92d_get_chnlgroup_fromarray((u8) ch);
-                       if (ch < CHANNEL_MAX_NUMBER_2G)
-                               rtlefuse->txpwrlevel_cck[rfpath][ch] =
-                                   pwrinfo.cck_index[rfpath][group];
-                       rtlefuse->txpwrlevel_ht40_1s[rfpath][ch] =
-                                   pwrinfo.ht40_1sindex[rfpath][group];
-                       rtlefuse->txpwr_ht20diff[rfpath][ch] =
-                                   pwrinfo.ht20indexdiff[rfpath][group];
-                       rtlefuse->txpwr_legacyhtdiff[rfpath][ch] =
-                                   pwrinfo.ofdmindexdiff[rfpath][group];
-                       rtlefuse->pwrgroup_ht20[rfpath][ch] =
-                                   pwrinfo.ht20maxoffset[rfpath][group];
-                       rtlefuse->pwrgroup_ht40[rfpath][ch] =
-                                   pwrinfo.ht40maxoffset[rfpath][group];
-                       pwr = pwrinfo.ht40_1sindex[rfpath][group];
-                       diff = pwrinfo.ht40_2sindexdiff[rfpath][group];
-                       rtlefuse->txpwrlevel_ht40_2s[rfpath][ch] =
-                                   (pwr > diff) ? (pwr - diff) : 0;
-               }
-       }
-}
-
-static void _rtl92de_read_macphymode_from_prom(struct ieee80211_hw *hw,
-                                              u8 *content)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       u8 macphy_crvalue = content[EEPROM_MAC_FUNCTION];
-
-       if (macphy_crvalue & BIT(3)) {
-               rtlhal->macphymode = SINGLEMAC_SINGLEPHY;
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
-                       "MacPhyMode SINGLEMAC_SINGLEPHY\n");
-       } else {
-               rtlhal->macphymode = DUALMAC_DUALPHY;
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
-                       "MacPhyMode DUALMAC_DUALPHY\n");
-       }
-}
-
-static void _rtl92de_read_macphymode_and_bandtype(struct ieee80211_hw *hw,
-                                                 u8 *content)
-{
-       _rtl92de_read_macphymode_from_prom(hw, content);
-       rtl92d_phy_config_macphymode(hw);
-       rtl92d_phy_config_macphymode_info(hw);
-}
-
-static void _rtl92de_efuse_update_chip_version(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       enum version_8192d chipver = rtlpriv->rtlhal.version;
-       u8 cutvalue[2];
-       u16 chipvalue;
-
-       read_efuse_byte(hw, EEPROME_CHIP_VERSION_H, &cutvalue[1]);
-       read_efuse_byte(hw, EEPROME_CHIP_VERSION_L, &cutvalue[0]);
-       chipvalue = (cutvalue[1] << 8) | cutvalue[0];
-       switch (chipvalue) {
-       case 0xAA55:
-               chipver |= CHIP_92D_C_CUT;
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "C-CUT!!!\n");
-               break;
-       case 0x9966:
-               chipver |= CHIP_92D_D_CUT;
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "D-CUT!!!\n");
-               break;
-       case 0xCC33:
-               chipver |= CHIP_92D_E_CUT;
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "E-CUT!!!\n");
-               break;
-       default:
-               chipver |= CHIP_92D_D_CUT;
-               pr_err("Unknown CUT!\n");
-               break;
-       }
-       rtlpriv->rtlhal.version = chipver;
-}
-
-static void _rtl92de_read_adapter_info(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       int params[] = {RTL8190_EEPROM_ID, EEPROM_VID, EEPROM_DID,
-                       EEPROM_SVID, EEPROM_SMID, EEPROM_MAC_ADDR_MAC0_92D,
-                       EEPROM_CHANNEL_PLAN, EEPROM_VERSION, EEPROM_CUSTOMER_ID,
-                       COUNTRY_CODE_WORLD_WIDE_13};
-       int i;
-       u16 usvalue;
-       u8 *hwinfo;
-
-       hwinfo = kzalloc(HWSET_MAX_SIZE, GFP_KERNEL);
-       if (!hwinfo)
-               return;
-
-       if (rtl_get_hwinfo(hw, rtlpriv, HWSET_MAX_SIZE, hwinfo, params))
-               goto exit;
-
-       _rtl92de_efuse_update_chip_version(hw);
-       _rtl92de_read_macphymode_and_bandtype(hw, hwinfo);
-
-       /* Read Permanent MAC address for 2nd interface */
-       if (rtlhal->interfaceindex != 0) {
-               for (i = 0; i < 6; i += 2) {
-                       usvalue = *(u16 *)&hwinfo[EEPROM_MAC_ADDR_MAC1_92D + i];
-                       *((u16 *) (&rtlefuse->dev_addr[i])) = usvalue;
-               }
-       }
-       rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_ETHER_ADDR,
-                                     rtlefuse->dev_addr);
-       rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, "%pM\n", rtlefuse->dev_addr);
-       _rtl92de_read_txpower_info(hw, rtlefuse->autoload_failflag, hwinfo);
-
-       /* Read Channel Plan */
-       switch (rtlhal->bandset) {
-       case BAND_ON_2_4G:
-               rtlefuse->channel_plan = COUNTRY_CODE_TELEC;
-               break;
-       case BAND_ON_5G:
-               rtlefuse->channel_plan = COUNTRY_CODE_FCC;
-               break;
-       case BAND_ON_BOTH:
-               rtlefuse->channel_plan = COUNTRY_CODE_FCC;
-               break;
-       default:
-               rtlefuse->channel_plan = COUNTRY_CODE_FCC;
-               break;
-       }
-       rtlefuse->txpwr_fromeprom = true;
-exit:
-       kfree(hwinfo);
-}
-
-void rtl92de_read_eeprom_info(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       u8 tmp_u1b;
-
-       rtlhal->version = _rtl92de_read_chip_version(hw);
-       tmp_u1b = rtl_read_byte(rtlpriv, REG_9346CR);
-       rtlefuse->autoload_status = tmp_u1b;
-       if (tmp_u1b & BIT(4)) {
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, "Boot from EEPROM\n");
-               rtlefuse->epromtype = EEPROM_93C46;
-       } else {
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, "Boot from EFUSE\n");
-               rtlefuse->epromtype = EEPROM_BOOT_EFUSE;
-       }
-       if (tmp_u1b & BIT(5)) {
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "Autoload OK\n");
-
-               rtlefuse->autoload_failflag = false;
-               _rtl92de_read_adapter_info(hw);
-       } else {
-               pr_err("Autoload ERR!!\n");
-       }
-       return;
-}
-
-static void rtl92de_update_hal_rate_table(struct ieee80211_hw *hw,
-                                         struct ieee80211_sta *sta)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       u32 ratr_value;
-       u8 ratr_index = 0;
-       u8 nmode = mac->ht_enable;
-       u8 mimo_ps = IEEE80211_SMPS_OFF;
-       u16 shortgi_rate;
-       u32 tmp_ratr_value;
-       u8 curtxbw_40mhz = mac->bw_40;
-       u8 curshortgi_40mhz = (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ?
-                                                       1 : 0;
-       u8 curshortgi_20mhz = (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ?
-                                                       1 : 0;
-       enum wireless_mode wirelessmode = mac->mode;
-
-       if (rtlhal->current_bandtype == BAND_ON_5G)
-               ratr_value = sta->deflink.supp_rates[1] << 4;
-       else
-               ratr_value = sta->deflink.supp_rates[0];
-       ratr_value |= (sta->deflink.ht_cap.mcs.rx_mask[1] << 20 |
-                      sta->deflink.ht_cap.mcs.rx_mask[0] << 12);
-       switch (wirelessmode) {
-       case WIRELESS_MODE_A:
-               ratr_value &= 0x00000FF0;
-               break;
-       case WIRELESS_MODE_B:
-               if (ratr_value & 0x0000000c)
-                       ratr_value &= 0x0000000d;
-               else
-                       ratr_value &= 0x0000000f;
-               break;
-       case WIRELESS_MODE_G:
-               ratr_value &= 0x00000FF5;
-               break;
-       case WIRELESS_MODE_N_24G:
-       case WIRELESS_MODE_N_5G:
-               nmode = 1;
-               if (mimo_ps == IEEE80211_SMPS_STATIC) {
-                       ratr_value &= 0x0007F005;
-               } else {
-                       u32 ratr_mask;
-
-                       if (get_rf_type(rtlphy) == RF_1T2R ||
-                           get_rf_type(rtlphy) == RF_1T1R) {
-                               ratr_mask = 0x000ff005;
-                       } else {
-                               ratr_mask = 0x0f0ff005;
-                       }
-
-                       ratr_value &= ratr_mask;
-               }
-               break;
-       default:
-               if (rtlphy->rf_type == RF_1T2R)
-                       ratr_value &= 0x000ff0ff;
-               else
-                       ratr_value &= 0x0f0ff0ff;
-
-               break;
-       }
-       ratr_value &= 0x0FFFFFFF;
-       if (nmode && ((curtxbw_40mhz && curshortgi_40mhz) ||
-           (!curtxbw_40mhz && curshortgi_20mhz))) {
-               ratr_value |= 0x10000000;
-               tmp_ratr_value = (ratr_value >> 12);
-               for (shortgi_rate = 15; shortgi_rate > 0; shortgi_rate--) {
-                       if ((1 << shortgi_rate) & tmp_ratr_value)
-                               break;
-               }
-               shortgi_rate = (shortgi_rate << 12) | (shortgi_rate << 8) |
-                   (shortgi_rate << 4) | (shortgi_rate);
-       }
-       rtl_write_dword(rtlpriv, REG_ARFR0 + ratr_index * 4, ratr_value);
-       rtl_dbg(rtlpriv, COMP_RATR, DBG_DMESG, "%x\n",
-               rtl_read_dword(rtlpriv, REG_ARFR0));
-}
-
-static void rtl92de_update_hal_rate_mask(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       struct rtl_sta_info *sta_entry = NULL;
-       u32 ratr_bitmap;
-       u8 ratr_index;
-       u8 curtxbw_40mhz = (sta->deflink.bandwidth >= IEEE80211_STA_RX_BW_40) ? 1 : 0;
-       u8 curshortgi_40mhz = (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ?
-                                                       1 : 0;
-       u8 curshortgi_20mhz = (sta->deflink.ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ?
-                                                       1 : 0;
-       enum wireless_mode wirelessmode = 0;
-       bool shortgi = false;
-       u32 value[2];
-       u8 macid = 0;
-       u8 mimo_ps = IEEE80211_SMPS_OFF;
-
-       sta_entry = (struct rtl_sta_info *) sta->drv_priv;
-       mimo_ps = sta_entry->mimo_ps;
-       wirelessmode = sta_entry->wireless_mode;
-       if (mac->opmode == NL80211_IFTYPE_STATION)
-               curtxbw_40mhz = mac->bw_40;
-       else if (mac->opmode == NL80211_IFTYPE_AP ||
-               mac->opmode == NL80211_IFTYPE_ADHOC)
-               macid = sta->aid + 1;
-
-       if (rtlhal->current_bandtype == BAND_ON_5G)
-               ratr_bitmap = sta->deflink.supp_rates[1] << 4;
-       else
-               ratr_bitmap = sta->deflink.supp_rates[0];
-       ratr_bitmap |= (sta->deflink.ht_cap.mcs.rx_mask[1] << 20 |
-                       sta->deflink.ht_cap.mcs.rx_mask[0] << 12);
-       switch (wirelessmode) {
-       case WIRELESS_MODE_B:
-               ratr_index = RATR_INX_WIRELESS_B;
-               if (ratr_bitmap & 0x0000000c)
-                       ratr_bitmap &= 0x0000000d;
-               else
-                       ratr_bitmap &= 0x0000000f;
-               break;
-       case WIRELESS_MODE_G:
-               ratr_index = RATR_INX_WIRELESS_GB;
-
-               if (rssi_level == 1)
-                       ratr_bitmap &= 0x00000f00;
-               else if (rssi_level == 2)
-                       ratr_bitmap &= 0x00000ff0;
-               else
-                       ratr_bitmap &= 0x00000ff5;
-               break;
-       case WIRELESS_MODE_A:
-               ratr_index = RATR_INX_WIRELESS_G;
-               ratr_bitmap &= 0x00000ff0;
-               break;
-       case WIRELESS_MODE_N_24G:
-       case WIRELESS_MODE_N_5G:
-               if (wirelessmode == WIRELESS_MODE_N_24G)
-                       ratr_index = RATR_INX_WIRELESS_NGB;
-               else
-                       ratr_index = RATR_INX_WIRELESS_NG;
-               if (mimo_ps == IEEE80211_SMPS_STATIC) {
-                       if (rssi_level == 1)
-                               ratr_bitmap &= 0x00070000;
-                       else if (rssi_level == 2)
-                               ratr_bitmap &= 0x0007f000;
-                       else
-                               ratr_bitmap &= 0x0007f005;
-               } else {
-                       if (rtlphy->rf_type == RF_1T2R ||
-                           rtlphy->rf_type == RF_1T1R) {
-                               if (curtxbw_40mhz) {
-                                       if (rssi_level == 1)
-                                               ratr_bitmap &= 0x000f0000;
-                                       else if (rssi_level == 2)
-                                               ratr_bitmap &= 0x000ff000;
-                                       else
-                                               ratr_bitmap &= 0x000ff015;
-                               } else {
-                                       if (rssi_level == 1)
-                                               ratr_bitmap &= 0x000f0000;
-                                       else if (rssi_level == 2)
-                                               ratr_bitmap &= 0x000ff000;
-                                       else
-                                               ratr_bitmap &= 0x000ff005;
-                               }
-                       } else {
-                               if (curtxbw_40mhz) {
-                                       if (rssi_level == 1)
-                                               ratr_bitmap &= 0x0f0f0000;
-                                       else if (rssi_level == 2)
-                                               ratr_bitmap &= 0x0f0ff000;
-                                       else
-                                               ratr_bitmap &= 0x0f0ff015;
-                               } else {
-                                       if (rssi_level == 1)
-                                               ratr_bitmap &= 0x0f0f0000;
-                                       else if (rssi_level == 2)
-                                               ratr_bitmap &= 0x0f0ff000;
-                                       else
-                                               ratr_bitmap &= 0x0f0ff005;
-                               }
-                       }
-               }
-               if ((curtxbw_40mhz && curshortgi_40mhz) ||
-                   (!curtxbw_40mhz && curshortgi_20mhz)) {
-
-                       if (macid == 0)
-                               shortgi = true;
-                       else if (macid == 1)
-                               shortgi = false;
-               }
-               break;
-       default:
-               ratr_index = RATR_INX_WIRELESS_NGB;
-
-               if (rtlphy->rf_type == RF_1T2R)
-                       ratr_bitmap &= 0x000ff0ff;
-               else
-                       ratr_bitmap &= 0x0f0ff0ff;
-               break;
-       }
-
-       value[0] = (ratr_bitmap & 0x0fffffff) | (ratr_index << 28);
-       value[1] = macid | (shortgi ? 0x20 : 0x00) | 0x80;
-       rtl_dbg(rtlpriv, COMP_RATR, DBG_DMESG,
-               "ratr_bitmap :%x value0:%x value1:%x\n",
-               ratr_bitmap, value[0], value[1]);
-       rtl92d_fill_h2c_cmd(hw, H2C_RA_MASK, 5, (u8 *) value);
-       if (macid != 0)
-               sta_entry->ratr_index = ratr_index;
-}
-
-void rtl92de_update_hal_rate_tbl(struct ieee80211_hw *hw,
-               struct ieee80211_sta *sta, u8 rssi_level, bool update_bw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       if (rtlpriv->dm.useramask)
-               rtl92de_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
-       else
-               rtl92de_update_hal_rate_table(hw, sta);
-}
-
-void rtl92de_update_channel_access_setting(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       u16 sifs_timer;
-
-       rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SLOT_TIME,
-                                     &mac->slot_time);
-       if (!mac->ht_enable)
-               sifs_timer = 0x0a0a;
-       else
-               sifs_timer = 0x1010;
-       rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SIFS, (u8 *)&sifs_timer);
-}
-
-bool rtl92de_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
-       enum rf_pwrstate e_rfpowerstate_toset;
-       u8 u1tmp;
-       bool actuallyset = false;
-       unsigned long flag;
-
-       if (rtlpci->being_init_adapter)
-               return false;
-       if (ppsc->swrf_processing)
-               return false;
-       spin_lock_irqsave(&rtlpriv->locks.rf_ps_lock, flag);
-       if (ppsc->rfchange_inprogress) {
-               spin_unlock_irqrestore(&rtlpriv->locks.rf_ps_lock, flag);
-               return false;
-       } else {
-               ppsc->rfchange_inprogress = true;
-               spin_unlock_irqrestore(&rtlpriv->locks.rf_ps_lock, flag);
-       }
-       rtl_write_byte(rtlpriv, REG_MAC_PINMUX_CFG, rtl_read_byte(rtlpriv,
-                         REG_MAC_PINMUX_CFG) & ~(BIT(3)));
-       u1tmp = rtl_read_byte(rtlpriv, REG_GPIO_IO_SEL);
-       e_rfpowerstate_toset = (u1tmp & BIT(3)) ? ERFON : ERFOFF;
-       if (ppsc->hwradiooff && (e_rfpowerstate_toset == ERFON)) {
-               rtl_dbg(rtlpriv, COMP_RF, DBG_DMESG,
-                       "GPIOChangeRF  - HW Radio ON, RF ON\n");
-               e_rfpowerstate_toset = ERFON;
-               ppsc->hwradiooff = false;
-               actuallyset = true;
-       } else if (!ppsc->hwradiooff && (e_rfpowerstate_toset == ERFOFF)) {
-               rtl_dbg(rtlpriv, COMP_RF, DBG_DMESG,
-                       "GPIOChangeRF  - HW Radio OFF, RF OFF\n");
-               e_rfpowerstate_toset = ERFOFF;
-               ppsc->hwradiooff = true;
-               actuallyset = true;
-       }
-       if (actuallyset) {
-               spin_lock_irqsave(&rtlpriv->locks.rf_ps_lock, flag);
-               ppsc->rfchange_inprogress = false;
-               spin_unlock_irqrestore(&rtlpriv->locks.rf_ps_lock, flag);
-       } else {
-               if (ppsc->reg_rfps_level & RT_RF_OFF_LEVL_HALT_NIC)
-                       RT_SET_PS_LEVEL(ppsc, RT_RF_OFF_LEVL_HALT_NIC);
-               spin_lock_irqsave(&rtlpriv->locks.rf_ps_lock, flag);
-               ppsc->rfchange_inprogress = false;
-               spin_unlock_irqrestore(&rtlpriv->locks.rf_ps_lock, flag);
-       }
-       *valid = 1;
-       return !ppsc->hwradiooff;
-}
-
-void rtl92de_set_key(struct ieee80211_hw *hw, u32 key_index,
-                    u8 *p_macaddr, bool is_group, u8 enc_algo,
-                    bool is_wepkey, bool clear_all)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       u8 *macaddr = p_macaddr;
-       u32 entry_id;
-       bool is_pairwise = false;
-       static u8 cam_const_addr[4][6] = {
-               {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
-               {0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
-               {0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
-               {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}
-       };
-       static u8 cam_const_broad[] = {
-               0xff, 0xff, 0xff, 0xff, 0xff, 0xff
-       };
-
-       if (clear_all) {
-               u8 idx;
-               u8 cam_offset = 0;
-               u8 clear_number = 5;
-               rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG, "clear_all\n");
-               for (idx = 0; idx < clear_number; idx++) {
-                       rtl_cam_mark_invalid(hw, cam_offset + idx);
-                       rtl_cam_empty_entry(hw, cam_offset + idx);
-
-                       if (idx < 5) {
-                               memset(rtlpriv->sec.key_buf[idx], 0,
-                                      MAX_KEY_LEN);
-                               rtlpriv->sec.key_len[idx] = 0;
-                       }
-               }
-       } else {
-               switch (enc_algo) {
-               case WEP40_ENCRYPTION:
-                       enc_algo = CAM_WEP40;
-                       break;
-               case WEP104_ENCRYPTION:
-                       enc_algo = CAM_WEP104;
-                       break;
-               case TKIP_ENCRYPTION:
-                       enc_algo = CAM_TKIP;
-                       break;
-               case AESCCMP_ENCRYPTION:
-                       enc_algo = CAM_AES;
-                       break;
-               default:
-                       pr_err("switch case %#x not processed\n",
-                              enc_algo);
-                       enc_algo = CAM_TKIP;
-                       break;
-               }
-               if (is_wepkey || rtlpriv->sec.use_defaultkey) {
-                       macaddr = cam_const_addr[key_index];
-                       entry_id = key_index;
-               } else {
-                       if (is_group) {
-                               macaddr = cam_const_broad;
-                               entry_id = key_index;
-                       } else {
-                               if (mac->opmode == NL80211_IFTYPE_AP) {
-                                       entry_id = rtl_cam_get_free_entry(hw,
-                                                                p_macaddr);
-                                       if (entry_id >=  TOTAL_CAM_ENTRY) {
-                                               pr_err("Can not find free hw security cam entry\n");
-                                               return;
-                                       }
-                               } else {
-                                       entry_id = CAM_PAIRWISE_KEY_POSITION;
-                               }
-                               key_index = PAIRWISE_KEYIDX;
-                               is_pairwise = true;
-                       }
-               }
-               if (rtlpriv->sec.key_len[key_index] == 0) {
-                       rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
-                               "delete one entry, entry_id is %d\n",
-                               entry_id);
-                       if (mac->opmode == NL80211_IFTYPE_AP)
-                               rtl_cam_del_entry(hw, p_macaddr);
-                       rtl_cam_delete_one_entry(hw, p_macaddr, entry_id);
-               } else {
-                       rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD,
-                               "The insert KEY length is %d\n",
-                               rtlpriv->sec.key_len[PAIRWISE_KEYIDX]);
-                       rtl_dbg(rtlpriv, COMP_SEC, DBG_LOUD,
-                               "The insert KEY is %x %x\n",
-                               rtlpriv->sec.key_buf[0][0],
-                               rtlpriv->sec.key_buf[0][1]);
-                       rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
-                               "add one entry\n");
-                       if (is_pairwise) {
-                               RT_PRINT_DATA(rtlpriv, COMP_SEC, DBG_LOUD,
-                                             "Pairwise Key content",
-                                             rtlpriv->sec.pairwise_key,
-                                             rtlpriv->
-                                             sec.key_len[PAIRWISE_KEYIDX]);
-                               rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
-                                       "set Pairwise key\n");
-                               rtl_cam_add_one_entry(hw, macaddr, key_index,
-                                                     entry_id, enc_algo,
-                                                     CAM_CONFIG_NO_USEDK,
-                                                     rtlpriv->
-                                                     sec.key_buf[key_index]);
-                       } else {
-                               rtl_dbg(rtlpriv, COMP_SEC, DBG_DMESG,
-                                       "set group key\n");
-                               if (mac->opmode == NL80211_IFTYPE_ADHOC) {
-                                       rtl_cam_add_one_entry(hw,
-                                               rtlefuse->dev_addr,
-                                               PAIRWISE_KEYIDX,
-                                               CAM_PAIRWISE_KEY_POSITION,
-                                               enc_algo, CAM_CONFIG_NO_USEDK,
-                                               rtlpriv->sec.key_buf[entry_id]);
-                               }
-                               rtl_cam_add_one_entry(hw, macaddr, key_index,
-                                               entry_id, enc_algo,
-                                               CAM_CONFIG_NO_USEDK,
-                                               rtlpriv->sec.key_buf
-                                               [entry_id]);
-                       }
-               }
-       }
-}
-
 void rtl92de_suspend(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
index ea49521..bda4a1a 100644 (file)
@@ -5,7 +5,6 @@
 #define __RTL92DE_HW_H__
 
 void rtl92de_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
-void rtl92de_read_eeprom_info(struct ieee80211_hw *hw);
 void rtl92de_interrupt_recognized(struct ieee80211_hw *hw,
                                  struct rtl_int *int_vec);
 int rtl92de_hw_init(struct ieee80211_hw *hw);
@@ -14,21 +13,11 @@ void rtl92de_enable_interrupt(struct ieee80211_hw *hw);
 void rtl92de_disable_interrupt(struct ieee80211_hw *hw);
 int rtl92de_set_network_type(struct ieee80211_hw *hw, enum nl80211_iftype type);
 void rtl92de_set_check_bssid(struct ieee80211_hw *hw, bool check_bssid);
-void rtl92de_set_qos(struct ieee80211_hw *hw, int aci);
 void rtl92de_set_beacon_related_registers(struct ieee80211_hw *hw);
 void rtl92de_set_beacon_interval(struct ieee80211_hw *hw);
 void rtl92de_update_interrupt_mask(struct ieee80211_hw *hw,
                                   u32 add_msr, u32 rm_msr);
 void rtl92de_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
-void rtl92de_update_hal_rate_tbl(struct ieee80211_hw *hw,
-                                struct ieee80211_sta *sta, u8 rssi_level,
-                                bool update_bw);
-void rtl92de_update_channel_access_setting(struct ieee80211_hw *hw);
-bool rtl92de_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid);
-void rtl92de_enable_hw_security_config(struct ieee80211_hw *hw);
-void rtl92de_set_key(struct ieee80211_hw *hw, u32 key_index,
-                    u8 *p_macaddr, bool is_group, u8 enc_algo,
-                    bool is_wepkey, bool clear_all);
 
 void rtl92de_write_dword_dbi(struct ieee80211_hw *hw, u16 offset, u32 value,
                             u8 direct);
index 4bd7085..33aede5 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "../wifi.h"
 #include "../pci.h"
-#include "reg.h"
+#include "../rtl8192d/reg.h"
 #include "led.h"
 
 void rtl92de_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
index 56b5cd0..d429560 100644 (file)
@@ -5,8 +5,11 @@
 #include "../pci.h"
 #include "../ps.h"
 #include "../core.h"
-#include "reg.h"
-#include "def.h"
+#include "../rtl8192d/reg.h"
+#include "../rtl8192d/def.h"
+#include "../rtl8192d/dm_common.h"
+#include "../rtl8192d/phy_common.h"
+#include "../rtl8192d/rf_common.h"
 #include "phy.h"
 #include "rf.h"
 #include "dm.h"
@@ -21,9 +24,6 @@
 #define RF_REG_NUM_FOR_C_CUT_2G                        5
 #define RF_CHNL_NUM_5G                         19
 #define RF_CHNL_NUM_5G_40M                     17
-#define TARGET_CHNL_NUM_5G                     221
-#define TARGET_CHNL_NUM_2G                     14
-#define CV_CURVE_CNT                           64
 
 static u32 rf_reg_for_5g_swchnl_normal[MAX_RF_IMR_INDEX_NORMAL] = {
        0, 0x2f, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x0
@@ -160,15 +160,6 @@ static u32 targetchnl_2g[TARGET_CHNL_NUM_2G] = {
        25711, 25658, 25606, 25554, 25502, 25451, 25328
 };
 
-static const u8 channel_all[59] = {
-       1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
-       36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
-       60, 62, 64, 100, 102, 104, 106, 108, 110, 112,
-       114, 116, 118, 120, 122, 124, 126, 128, 130,
-       132, 134, 136, 138, 140, 149, 151, 153, 155,
-       157, 159, 161, 163, 165
-};
-
 u32 rtl92d_phy_query_bb_reg(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -235,119 +226,6 @@ void rtl92d_phy_set_bb_reg(struct ieee80211_hw *hw,
                regaddr, bitmask, data);
 }
 
-static u32 _rtl92d_phy_rf_serial_read(struct ieee80211_hw *hw,
-                                     enum radio_path rfpath, u32 offset)
-{
-
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath];
-       u32 newoffset;
-       u32 tmplong, tmplong2;
-       u8 rfpi_enable = 0;
-       u32 retvalue;
-
-       newoffset = offset;
-       tmplong = rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD);
-       if (rfpath == RF90_PATH_A)
-               tmplong2 = tmplong;
-       else
-               tmplong2 = rtl_get_bbreg(hw, pphyreg->rfhssi_para2, MASKDWORD);
-       tmplong2 = (tmplong2 & (~BLSSIREADADDRESS)) |
-               (newoffset << 23) | BLSSIREADEDGE;
-       rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD,
-               tmplong & (~BLSSIREADEDGE));
-       udelay(10);
-       rtl_set_bbreg(hw, pphyreg->rfhssi_para2, MASKDWORD, tmplong2);
-       udelay(50);
-       udelay(50);
-       rtl_set_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2, MASKDWORD,
-               tmplong | BLSSIREADEDGE);
-       udelay(10);
-       if (rfpath == RF90_PATH_A)
-               rfpi_enable = (u8) rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER1,
-                             BIT(8));
-       else if (rfpath == RF90_PATH_B)
-               rfpi_enable = (u8) rtl_get_bbreg(hw, RFPGA0_XB_HSSIPARAMETER1,
-                             BIT(8));
-       if (rfpi_enable)
-               retvalue = rtl_get_bbreg(hw, pphyreg->rf_rbpi,
-                       BLSSIREADBACKDATA);
-       else
-               retvalue = rtl_get_bbreg(hw, pphyreg->rf_rb,
-                       BLSSIREADBACKDATA);
-       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE, "RFR-%d Addr[0x%x] = 0x%x\n",
-               rfpath, pphyreg->rf_rb, retvalue);
-       return retvalue;
-}
-
-static void _rtl92d_phy_rf_serial_write(struct ieee80211_hw *hw,
-                                       enum radio_path rfpath,
-                                       u32 offset, u32 data)
-{
-       u32 data_and_addr;
-       u32 newoffset;
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath];
-
-       newoffset = offset;
-       /* T65 RF */
-       data_and_addr = ((newoffset << 20) | (data & 0x000fffff)) & 0x0fffffff;
-       rtl_set_bbreg(hw, pphyreg->rf3wire_offset, MASKDWORD, data_and_addr);
-       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE, "RFW-%d Addr[0x%x]=0x%x\n",
-               rfpath, pphyreg->rf3wire_offset, data_and_addr);
-}
-
-u32 rtl92d_phy_query_rf_reg(struct ieee80211_hw *hw,
-                           enum radio_path rfpath, u32 regaddr, u32 bitmask)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u32 original_value, readback_value, bitshift;
-
-       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE,
-               "regaddr(%#x), rfpath(%#x), bitmask(%#x)\n",
-               regaddr, rfpath, bitmask);
-       spin_lock(&rtlpriv->locks.rf_lock);
-       original_value = _rtl92d_phy_rf_serial_read(hw, rfpath, regaddr);
-       bitshift = calculate_bit_shift(bitmask);
-       readback_value = (original_value & bitmask) >> bitshift;
-       spin_unlock(&rtlpriv->locks.rf_lock);
-       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE,
-               "regaddr(%#x), rfpath(%#x), bitmask(%#x), original_value(%#x)\n",
-               regaddr, rfpath, bitmask, original_value);
-       return readback_value;
-}
-
-void rtl92d_phy_set_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
-       u32 regaddr, u32 bitmask, u32 data)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       u32 original_value, bitshift;
-
-       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE,
-               "regaddr(%#x), bitmask(%#x), data(%#x), rfpath(%#x)\n",
-               regaddr, bitmask, data, rfpath);
-       if (bitmask == 0)
-               return;
-       spin_lock(&rtlpriv->locks.rf_lock);
-       if (rtlphy->rf_mode != RF_OP_BY_FW) {
-               if (bitmask != RFREG_OFFSET_MASK) {
-                       original_value = _rtl92d_phy_rf_serial_read(hw,
-                               rfpath, regaddr);
-                       bitshift = calculate_bit_shift(bitmask);
-                       data = ((original_value & (~bitmask)) |
-                               (data << bitshift));
-               }
-               _rtl92d_phy_rf_serial_write(hw, rfpath, regaddr, data);
-       }
-       spin_unlock(&rtlpriv->locks.rf_lock);
-       rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE,
-               "regaddr(%#x), bitmask(%#x), data(%#x), rfpath(%#x)\n",
-               regaddr, bitmask, data, rfpath);
-}
-
 bool rtl92d_phy_mac_config(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -374,133 +252,6 @@ bool rtl92d_phy_mac_config(struct ieee80211_hw *hw)
        return true;
 }
 
-static void _rtl92d_phy_init_bb_rf_register_definition(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-
-       /* RF Interface Sowrtware Control */
-       /* 16 LSBs if read 32-bit from 0x870 */
-       rtlphy->phyreg_def[RF90_PATH_A].rfintfs = RFPGA0_XAB_RFINTERFACESW;
-       /* 16 MSBs if read 32-bit from 0x870 (16-bit for 0x872) */
-       rtlphy->phyreg_def[RF90_PATH_B].rfintfs = RFPGA0_XAB_RFINTERFACESW;
-       /* 16 LSBs if read 32-bit from 0x874 */
-       rtlphy->phyreg_def[RF90_PATH_C].rfintfs = RFPGA0_XCD_RFINTERFACESW;
-       /* 16 MSBs if read 32-bit from 0x874 (16-bit for 0x876) */
-
-       rtlphy->phyreg_def[RF90_PATH_D].rfintfs = RFPGA0_XCD_RFINTERFACESW;
-       /* RF Interface Readback Value */
-       /* 16 LSBs if read 32-bit from 0x8E0 */
-       rtlphy->phyreg_def[RF90_PATH_A].rfintfi = RFPGA0_XAB_RFINTERFACERB;
-       /* 16 MSBs if read 32-bit from 0x8E0 (16-bit for 0x8E2) */
-       rtlphy->phyreg_def[RF90_PATH_B].rfintfi = RFPGA0_XAB_RFINTERFACERB;
-       /* 16 LSBs if read 32-bit from 0x8E4 */
-       rtlphy->phyreg_def[RF90_PATH_C].rfintfi = RFPGA0_XCD_RFINTERFACERB;
-       /* 16 MSBs if read 32-bit from 0x8E4 (16-bit for 0x8E6) */
-       rtlphy->phyreg_def[RF90_PATH_D].rfintfi = RFPGA0_XCD_RFINTERFACERB;
-
-       /* RF Interface Output (and Enable) */
-       /* 16 LSBs if read 32-bit from 0x860 */
-       rtlphy->phyreg_def[RF90_PATH_A].rfintfo = RFPGA0_XA_RFINTERFACEOE;
-       /* 16 LSBs if read 32-bit from 0x864 */
-       rtlphy->phyreg_def[RF90_PATH_B].rfintfo = RFPGA0_XB_RFINTERFACEOE;
-
-       /* RF Interface (Output and)  Enable */
-       /* 16 MSBs if read 32-bit from 0x860 (16-bit for 0x862) */
-       rtlphy->phyreg_def[RF90_PATH_A].rfintfe = RFPGA0_XA_RFINTERFACEOE;
-       /* 16 MSBs if read 32-bit from 0x864 (16-bit for 0x866) */
-       rtlphy->phyreg_def[RF90_PATH_B].rfintfe = RFPGA0_XB_RFINTERFACEOE;
-
-       /* Addr of LSSI. Wirte RF register by driver */
-       /* LSSI Parameter */
-       rtlphy->phyreg_def[RF90_PATH_A].rf3wire_offset =
-                                RFPGA0_XA_LSSIPARAMETER;
-       rtlphy->phyreg_def[RF90_PATH_B].rf3wire_offset =
-                                RFPGA0_XB_LSSIPARAMETER;
-
-       /* RF parameter */
-       /* BB Band Select */
-       rtlphy->phyreg_def[RF90_PATH_A].rflssi_select = RFPGA0_XAB_RFPARAMETER;
-       rtlphy->phyreg_def[RF90_PATH_B].rflssi_select = RFPGA0_XAB_RFPARAMETER;
-       rtlphy->phyreg_def[RF90_PATH_C].rflssi_select = RFPGA0_XCD_RFPARAMETER;
-       rtlphy->phyreg_def[RF90_PATH_D].rflssi_select = RFPGA0_XCD_RFPARAMETER;
-
-       /* Tx AGC Gain Stage (same for all path. Should we remove this?) */
-       /* Tx gain stage */
-       rtlphy->phyreg_def[RF90_PATH_A].rftxgain_stage = RFPGA0_TXGAINSTAGE;
-       /* Tx gain stage */
-       rtlphy->phyreg_def[RF90_PATH_B].rftxgain_stage = RFPGA0_TXGAINSTAGE;
-       /* Tx gain stage */
-       rtlphy->phyreg_def[RF90_PATH_C].rftxgain_stage = RFPGA0_TXGAINSTAGE;
-       /* Tx gain stage */
-       rtlphy->phyreg_def[RF90_PATH_D].rftxgain_stage = RFPGA0_TXGAINSTAGE;
-
-       /* Tranceiver A~D HSSI Parameter-1 */
-       /* wire control parameter1 */
-       rtlphy->phyreg_def[RF90_PATH_A].rfhssi_para1 = RFPGA0_XA_HSSIPARAMETER1;
-       /* wire control parameter1 */
-       rtlphy->phyreg_def[RF90_PATH_B].rfhssi_para1 = RFPGA0_XB_HSSIPARAMETER1;
-
-       /* Tranceiver A~D HSSI Parameter-2 */
-       /* wire control parameter2 */
-       rtlphy->phyreg_def[RF90_PATH_A].rfhssi_para2 = RFPGA0_XA_HSSIPARAMETER2;
-       /* wire control parameter2 */
-       rtlphy->phyreg_def[RF90_PATH_B].rfhssi_para2 = RFPGA0_XB_HSSIPARAMETER2;
-
-       /* RF switch Control */
-       /* TR/Ant switch control */
-       rtlphy->phyreg_def[RF90_PATH_A].rfsw_ctrl = RFPGA0_XAB_SWITCHCONTROL;
-       rtlphy->phyreg_def[RF90_PATH_B].rfsw_ctrl = RFPGA0_XAB_SWITCHCONTROL;
-       rtlphy->phyreg_def[RF90_PATH_C].rfsw_ctrl = RFPGA0_XCD_SWITCHCONTROL;
-       rtlphy->phyreg_def[RF90_PATH_D].rfsw_ctrl = RFPGA0_XCD_SWITCHCONTROL;
-
-       /* AGC control 1 */
-       rtlphy->phyreg_def[RF90_PATH_A].rfagc_control1 = ROFDM0_XAAGCCORE1;
-       rtlphy->phyreg_def[RF90_PATH_B].rfagc_control1 = ROFDM0_XBAGCCORE1;
-       rtlphy->phyreg_def[RF90_PATH_C].rfagc_control1 = ROFDM0_XCAGCCORE1;
-       rtlphy->phyreg_def[RF90_PATH_D].rfagc_control1 = ROFDM0_XDAGCCORE1;
-
-       /* AGC control 2  */
-       rtlphy->phyreg_def[RF90_PATH_A].rfagc_control2 = ROFDM0_XAAGCCORE2;
-       rtlphy->phyreg_def[RF90_PATH_B].rfagc_control2 = ROFDM0_XBAGCCORE2;
-       rtlphy->phyreg_def[RF90_PATH_C].rfagc_control2 = ROFDM0_XCAGCCORE2;
-       rtlphy->phyreg_def[RF90_PATH_D].rfagc_control2 = ROFDM0_XDAGCCORE2;
-
-       /* RX AFE control 1 */
-       rtlphy->phyreg_def[RF90_PATH_A].rfrxiq_imbal = ROFDM0_XARXIQIMBALANCE;
-       rtlphy->phyreg_def[RF90_PATH_B].rfrxiq_imbal = ROFDM0_XBRXIQIMBALANCE;
-       rtlphy->phyreg_def[RF90_PATH_C].rfrxiq_imbal = ROFDM0_XCRXIQIMBALANCE;
-       rtlphy->phyreg_def[RF90_PATH_D].rfrxiq_imbal = ROFDM0_XDRXIQIMBALANCE;
-
-       /*RX AFE control 1 */
-       rtlphy->phyreg_def[RF90_PATH_A].rfrx_afe = ROFDM0_XARXAFE;
-       rtlphy->phyreg_def[RF90_PATH_B].rfrx_afe = ROFDM0_XBRXAFE;
-       rtlphy->phyreg_def[RF90_PATH_C].rfrx_afe = ROFDM0_XCRXAFE;
-       rtlphy->phyreg_def[RF90_PATH_D].rfrx_afe = ROFDM0_XDRXAFE;
-
-       /* Tx AFE control 1 */
-       rtlphy->phyreg_def[RF90_PATH_A].rftxiq_imbal = ROFDM0_XATXIQIMBALANCE;
-       rtlphy->phyreg_def[RF90_PATH_B].rftxiq_imbal = ROFDM0_XBTXIQIMBALANCE;
-       rtlphy->phyreg_def[RF90_PATH_C].rftxiq_imbal = ROFDM0_XCTXIQIMBALANCE;
-       rtlphy->phyreg_def[RF90_PATH_D].rftxiq_imbal = ROFDM0_XDTXIQIMBALANCE;
-
-       /* Tx AFE control 2 */
-       rtlphy->phyreg_def[RF90_PATH_A].rftx_afe = ROFDM0_XATXAFE;
-       rtlphy->phyreg_def[RF90_PATH_B].rftx_afe = ROFDM0_XBTXAFE;
-       rtlphy->phyreg_def[RF90_PATH_C].rftx_afe = ROFDM0_XCTXAFE;
-       rtlphy->phyreg_def[RF90_PATH_D].rftx_afe = ROFDM0_XDTXAFE;
-
-       /* Tranceiver LSSI Readback SI mode */
-       rtlphy->phyreg_def[RF90_PATH_A].rf_rb = RFPGA0_XA_LSSIREADBACK;
-       rtlphy->phyreg_def[RF90_PATH_B].rf_rb = RFPGA0_XB_LSSIREADBACK;
-       rtlphy->phyreg_def[RF90_PATH_C].rf_rb = RFPGA0_XC_LSSIREADBACK;
-       rtlphy->phyreg_def[RF90_PATH_D].rf_rb = RFPGA0_XD_LSSIREADBACK;
-
-       /* Tranceiver LSSI Readback PI mode */
-       rtlphy->phyreg_def[RF90_PATH_A].rf_rbpi = TRANSCEIVERA_HSPI_READBACK;
-       rtlphy->phyreg_def[RF90_PATH_B].rf_rbpi = TRANSCEIVERB_HSPI_READBACK;
-}
-
 static bool _rtl92d_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
        u8 configtype)
 {
@@ -601,58 +352,6 @@ static bool _rtl92d_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
        return true;
 }
 
-static void _rtl92d_store_pwrindex_diffrate_offset(struct ieee80211_hw *hw,
-                                                  u32 regaddr, u32 bitmask,
-                                                  u32 data)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       int index;
-
-       if (regaddr == RTXAGC_A_RATE18_06)
-               index = 0;
-       else if (regaddr == RTXAGC_A_RATE54_24)
-               index = 1;
-       else if (regaddr == RTXAGC_A_CCK1_MCS32)
-               index = 6;
-       else if (regaddr == RTXAGC_B_CCK11_A_CCK2_11 && bitmask == 0xffffff00)
-               index = 7;
-       else if (regaddr == RTXAGC_A_MCS03_MCS00)
-               index = 2;
-       else if (regaddr == RTXAGC_A_MCS07_MCS04)
-               index = 3;
-       else if (regaddr == RTXAGC_A_MCS11_MCS08)
-               index = 4;
-       else if (regaddr == RTXAGC_A_MCS15_MCS12)
-               index = 5;
-       else if (regaddr == RTXAGC_B_RATE18_06)
-               index = 8;
-       else if (regaddr == RTXAGC_B_RATE54_24)
-               index = 9;
-       else if (regaddr == RTXAGC_B_CCK1_55_MCS32)
-               index = 14;
-       else if (regaddr == RTXAGC_B_CCK11_A_CCK2_11 && bitmask == 0x000000ff)
-               index = 15;
-       else if (regaddr == RTXAGC_B_MCS03_MCS00)
-               index = 10;
-       else if (regaddr == RTXAGC_B_MCS07_MCS04)
-               index = 11;
-       else if (regaddr == RTXAGC_B_MCS11_MCS08)
-               index = 12;
-       else if (regaddr == RTXAGC_B_MCS15_MCS12)
-               index = 13;
-       else
-               return;
-
-       rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][index] = data;
-       rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE,
-               "MCSTxPowerLevelOriginalOffset[%d][%d] = 0x%x\n",
-               rtlphy->pwrgroup_cnt, index,
-               rtlphy->mcs_offset[rtlphy->pwrgroup_cnt][index]);
-       if (index == 13)
-               rtlphy->pwrgroup_cnt++;
-}
-
 static bool _rtl92d_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw,
        u8 configtype)
 {
@@ -666,7 +365,7 @@ static bool _rtl92d_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw,
        if (configtype == BASEBAND_CONFIG_PHY_REG) {
                for (i = 0; i < phy_regarray_pg_len; i = i + 3) {
                        rtl_addr_delay(phy_regarray_table_pg[i]);
-                       _rtl92d_store_pwrindex_diffrate_offset(hw,
+                       rtl92d_store_pwrindex_diffrate_offset(hw,
                                phy_regarray_table_pg[i],
                                phy_regarray_table_pg[i + 1],
                                phy_regarray_table_pg[i + 2]);
@@ -726,7 +425,7 @@ bool rtl92d_phy_bb_config(struct ieee80211_hw *hw)
        u32 regvaldw;
        u8 value;
 
-       _rtl92d_phy_init_bb_rf_register_definition(hw);
+       rtl92d_phy_init_bb_rf_register_definition(hw);
        regval = rtl_read_word(rtlpriv, REG_SYS_FUNC_EN);
        rtl_write_word(rtlpriv, REG_SYS_FUNC_EN,
                       regval | BIT(13) | BIT(0) | BIT(1));
@@ -812,115 +511,6 @@ bool rtl92d_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
        return true;
 }
 
-void rtl92d_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-
-       rtlphy->default_initialgain[0] =
-           (u8) rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, MASKBYTE0);
-       rtlphy->default_initialgain[1] =
-           (u8) rtl_get_bbreg(hw, ROFDM0_XBAGCCORE1, MASKBYTE0);
-       rtlphy->default_initialgain[2] =
-           (u8) rtl_get_bbreg(hw, ROFDM0_XCAGCCORE1, MASKBYTE0);
-       rtlphy->default_initialgain[3] =
-           (u8) rtl_get_bbreg(hw, ROFDM0_XDAGCCORE1, MASKBYTE0);
-       rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE,
-               "Default initial gain (c50=0x%x, c58=0x%x, c60=0x%x, c68=0x%x\n",
-               rtlphy->default_initialgain[0],
-               rtlphy->default_initialgain[1],
-               rtlphy->default_initialgain[2],
-               rtlphy->default_initialgain[3]);
-       rtlphy->framesync = (u8)rtl_get_bbreg(hw, ROFDM0_RXDETECTOR3,
-                                             MASKBYTE0);
-       rtlphy->framesync_c34 = rtl_get_bbreg(hw, ROFDM0_RXDETECTOR2,
-                                             MASKDWORD);
-       rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE,
-               "Default framesync (0x%x) = 0x%x\n",
-               ROFDM0_RXDETECTOR3, rtlphy->framesync);
-}
-
-static void _rtl92d_get_txpower_index(struct ieee80211_hw *hw, u8 channel,
-       u8 *cckpowerlevel, u8 *ofdmpowerlevel)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct rtl_hal *rtlhal = &(rtlpriv->rtlhal);
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       u8 index = (channel - 1);
-
-       /* 1. CCK */
-       if (rtlhal->current_bandtype == BAND_ON_2_4G) {
-               /* RF-A */
-               cckpowerlevel[RF90_PATH_A] =
-                                rtlefuse->txpwrlevel_cck[RF90_PATH_A][index];
-               /* RF-B */
-               cckpowerlevel[RF90_PATH_B] =
-                                rtlefuse->txpwrlevel_cck[RF90_PATH_B][index];
-       } else {
-               cckpowerlevel[RF90_PATH_A] = 0;
-               cckpowerlevel[RF90_PATH_B] = 0;
-       }
-       /* 2. OFDM for 1S or 2S */
-       if (rtlphy->rf_type == RF_1T2R || rtlphy->rf_type == RF_1T1R) {
-               /*  Read HT 40 OFDM TX power */
-               ofdmpowerlevel[RF90_PATH_A] =
-                   rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_A][index];
-               ofdmpowerlevel[RF90_PATH_B] =
-                   rtlefuse->txpwrlevel_ht40_1s[RF90_PATH_B][index];
-       } else if (rtlphy->rf_type == RF_2T2R) {
-               /* Read HT 40 OFDM TX power */
-               ofdmpowerlevel[RF90_PATH_A] =
-                   rtlefuse->txpwrlevel_ht40_2s[RF90_PATH_A][index];
-               ofdmpowerlevel[RF90_PATH_B] =
-                   rtlefuse->txpwrlevel_ht40_2s[RF90_PATH_B][index];
-       }
-}
-
-static void _rtl92d_ccxpower_index_check(struct ieee80211_hw *hw,
-       u8 channel, u8 *cckpowerlevel, u8 *ofdmpowerlevel)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-
-       rtlphy->cur_cck_txpwridx = cckpowerlevel[0];
-       rtlphy->cur_ofdm24g_txpwridx = ofdmpowerlevel[0];
-}
-
-static u8 _rtl92c_phy_get_rightchnlplace(u8 chnl)
-{
-       u8 place = chnl;
-
-       if (chnl > 14) {
-               for (place = 14; place < ARRAY_SIZE(channel_all); place++) {
-                       if (channel_all[place] == chnl) {
-                               place++;
-                               break;
-                       }
-               }
-       }
-       return place;
-}
-
-void rtl92d_phy_set_txpower_level(struct ieee80211_hw *hw, u8 channel)
-{
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u8 cckpowerlevel[2], ofdmpowerlevel[2];
-
-       if (!rtlefuse->txpwr_fromeprom)
-               return;
-       channel = _rtl92c_phy_get_rightchnlplace(channel);
-       _rtl92d_get_txpower_index(hw, channel, &cckpowerlevel[0],
-               &ofdmpowerlevel[0]);
-       if (rtlpriv->rtlhal.current_bandtype == BAND_ON_2_4G)
-               _rtl92d_ccxpower_index_check(hw, channel, &cckpowerlevel[0],
-                               &ofdmpowerlevel[0]);
-       if (rtlpriv->rtlhal.current_bandtype == BAND_ON_2_4G)
-               rtl92d_phy_rf6052_set_cck_txpower(hw, &cckpowerlevel[0]);
-       rtl92d_phy_rf6052_set_ofdm_txpower(hw, &ofdmpowerlevel[0], channel);
-}
-
 void rtl92d_phy_set_bw_mode(struct ieee80211_hw *hw,
                            enum nl80211_channel_type ch_type)
 {
@@ -1122,65 +712,6 @@ static void _rtl92d_phy_reload_imr_setting(struct ieee80211_hw *hw,
        rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "<====\n");
 }
 
-static void _rtl92d_phy_enable_rf_env(struct ieee80211_hw *hw,
-       u8 rfpath, u32 *pu4_regval)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath];
-
-       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "====>\n");
-       /*----Store original RFENV control type----*/
-       switch (rfpath) {
-       case RF90_PATH_A:
-       case RF90_PATH_C:
-               *pu4_regval = rtl_get_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV);
-               break;
-       case RF90_PATH_B:
-       case RF90_PATH_D:
-               *pu4_regval =
-                   rtl_get_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV << 16);
-               break;
-       }
-       /*----Set RF_ENV enable----*/
-       rtl_set_bbreg(hw, pphyreg->rfintfe, BRFSI_RFENV << 16, 0x1);
-       udelay(1);
-       /*----Set RF_ENV output high----*/
-       rtl_set_bbreg(hw, pphyreg->rfintfo, BRFSI_RFENV, 0x1);
-       udelay(1);
-       /* Set bit number of Address and Data for RF register */
-       /* Set 1 to 4 bits for 8255 */
-       rtl_set_bbreg(hw, pphyreg->rfhssi_para2, B3WIREADDRESSLENGTH, 0x0);
-       udelay(1);
-       /*Set 0 to 12 bits for 8255 */
-       rtl_set_bbreg(hw, pphyreg->rfhssi_para2, B3WIREDATALENGTH, 0x0);
-       udelay(1);
-       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "<====\n");
-}
-
-static void _rtl92d_phy_restore_rf_env(struct ieee80211_hw *hw, u8 rfpath,
-                                      u32 *pu4_regval)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct bb_reg_def *pphyreg = &rtlphy->phyreg_def[rfpath];
-
-       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "=====>\n");
-       /*----Restore RFENV control type----*/
-       switch (rfpath) {
-       case RF90_PATH_A:
-       case RF90_PATH_C:
-               rtl_set_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV, *pu4_regval);
-               break;
-       case RF90_PATH_B:
-       case RF90_PATH_D:
-               rtl_set_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV << 16,
-                             *pu4_regval);
-               break;
-       }
-       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "<=====\n");
-}
-
 static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -1221,8 +752,8 @@ static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
                        rtlhal->during_mac1init_radioa = true;
                        /* asume no this case */
                        if (need_pwr_down)
-                               _rtl92d_phy_enable_rf_env(hw, path,
-                                                         &u4regvalue);
+                               rtl92d_phy_enable_rf_env(hw, path,
+                                                        &u4regvalue);
                }
                for (i = 0; i < RF_REG_NUM_FOR_C_CUT_5G; i++) {
                        if (i == 0 && (rtlhal->macphymode == DUALMAC_DUALPHY)) {
@@ -1253,7 +784,7 @@ static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
                                              RFREG_OFFSET_MASK));
                }
                if (need_pwr_down)
-                       _rtl92d_phy_restore_rf_env(hw, path, &u4regvalue);
+                       rtl92d_phy_restore_rf_env(hw, path, &u4regvalue);
                if (rtlhal->during_mac1init_radioa)
                        rtl92d_phy_powerdown_anotherphy(hw, false);
                if (channel < 149)
@@ -1313,8 +844,8 @@ static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
                                rtlhal->during_mac0init_radiob = true;
 
                                if (need_pwr_down)
-                                       _rtl92d_phy_enable_rf_env(hw, path,
-                                                                 &u4regvalue);
+                                       rtl92d_phy_enable_rf_env(hw, path,
+                                                                &u4regvalue);
                        }
                }
                for (i = 0; i < RF_REG_NUM_FOR_C_CUT_2G; i++) {
@@ -1347,31 +878,13 @@ static void _rtl92d_phy_switch_rf_setting(struct ieee80211_hw *hw, u8 channel)
                              RFREG_OFFSET_MASK,
                              rf_syn_g4_for_c_cut_2g | (u4tmp << 11));
                if (need_pwr_down)
-                       _rtl92d_phy_restore_rf_env(hw, path, &u4regvalue);
+                       rtl92d_phy_restore_rf_env(hw, path, &u4regvalue);
                if (rtlhal->during_mac0init_radiob)
                        rtl92d_phy_powerdown_anotherphy(hw, true);
        }
        rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "<====\n");
 }
 
-u8 rtl92d_get_rightchnlplace_for_iqk(u8 chnl)
-{
-       u8 place;
-
-       if (chnl > 14) {
-               for (place = 14; place < ARRAY_SIZE(channel_all); place++) {
-                       if (channel_all[place] == chnl)
-                               return place - 13;
-               }
-       }
-
-       return 0;
-}
-
-#define MAX_TOLERANCE          5
-#define IQK_DELAY_TIME         1       /* ms */
-#define MAX_TOLERANCE_92D      3
-
 /* bit0 = 1 => Tx OK, bit1 = 1 => Rx OK */
 static u8 _rtl92d_phy_patha_iqk(struct ieee80211_hw *hw, bool configpathb)
 {
@@ -1636,30 +1149,6 @@ static u8 _rtl92d_phy_pathb_iqk_5g_normal(struct ieee80211_hw *hw)
        return result;
 }
 
-static void _rtl92d_phy_save_adda_registers(struct ieee80211_hw *hw,
-                                           u32 *adda_reg, u32 *adda_backup,
-                                           u32 regnum)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u32 i;
-
-       RTPRINT(rtlpriv, FINIT, INIT_IQK,  "Save ADDA parameters.\n");
-       for (i = 0; i < regnum; i++)
-               adda_backup[i] = rtl_get_bbreg(hw, adda_reg[i], MASKDWORD);
-}
-
-static void _rtl92d_phy_save_mac_registers(struct ieee80211_hw *hw,
-       u32 *macreg, u32 *macbackup)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u32 i;
-
-       RTPRINT(rtlpriv, FINIT, INIT_IQK,  "Save MAC parameters.\n");
-       for (i = 0; i < (IQK_MAC_REG_NUM - 1); i++)
-               macbackup[i] = rtl_read_byte(rtlpriv, macreg[i]);
-       macbackup[i] = rtl_read_dword(rtlpriv, macreg[i]);
-}
-
 static void _rtl92d_phy_reload_adda_registers(struct ieee80211_hw *hw,
                                              u32 *adda_reg, u32 *adda_backup,
                                              u32 regnum)
@@ -1685,37 +1174,6 @@ static void _rtl92d_phy_reload_mac_registers(struct ieee80211_hw *hw,
        rtl_write_byte(rtlpriv, macreg[i], macbackup[i]);
 }
 
-static void _rtl92d_phy_path_adda_on(struct ieee80211_hw *hw,
-               u32 *adda_reg, bool patha_on, bool is2t)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u32 pathon;
-       u32 i;
-
-       RTPRINT(rtlpriv, FINIT, INIT_IQK,  "ADDA ON.\n");
-       pathon = patha_on ? 0x04db25a4 : 0x0b1b25a4;
-       if (patha_on)
-               pathon = rtlpriv->rtlhal.interfaceindex == 0 ?
-                   0x04db25a4 : 0x0b1b25a4;
-       for (i = 0; i < IQK_ADDA_REG_NUM; i++)
-               rtl_set_bbreg(hw, adda_reg[i], MASKDWORD, pathon);
-}
-
-static void _rtl92d_phy_mac_setting_calibration(struct ieee80211_hw *hw,
-                                               u32 *macreg, u32 *macbackup)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u32 i;
-
-       RTPRINT(rtlpriv, FINIT, INIT_IQK,  "MAC settings for Calibration.\n");
-       rtl_write_byte(rtlpriv, macreg[0], 0x3F);
-
-       for (i = 1; i < (IQK_MAC_REG_NUM - 1); i++)
-               rtl_write_byte(rtlpriv, macreg[i], (u8)(macbackup[i] &
-                              (~BIT(3))));
-       rtl_write_byte(rtlpriv, macreg[i], (u8) (macbackup[i] & (~BIT(5))));
-}
-
 static void _rtl92d_phy_patha_standby(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -1772,14 +1230,16 @@ static void _rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw, long result[][8],
                        is2t ? "2T2R" : "1T1R");
 
                /*  Save ADDA parameters, turn Path A ADDA on */
-               _rtl92d_phy_save_adda_registers(hw, adda_reg,
-                       rtlphy->adda_backup, IQK_ADDA_REG_NUM);
-               _rtl92d_phy_save_mac_registers(hw, iqk_mac_reg,
-                       rtlphy->iqk_mac_backup);
-               _rtl92d_phy_save_adda_registers(hw, iqk_bb_reg,
-                       rtlphy->iqk_bb_backup, IQK_BB_REG_NUM);
-       }
-       _rtl92d_phy_path_adda_on(hw, adda_reg, true, is2t);
+               rtl92d_phy_save_adda_registers(hw, adda_reg,
+                                              rtlphy->adda_backup,
+                                              IQK_ADDA_REG_NUM);
+               rtl92d_phy_save_mac_registers(hw, iqk_mac_reg,
+                                             rtlphy->iqk_mac_backup);
+               rtl92d_phy_save_adda_registers(hw, iqk_bb_reg,
+                                              rtlphy->iqk_bb_backup,
+                                              IQK_BB_REG_NUM);
+       }
+       rtl92d_phy_path_adda_on(hw, adda_reg, true, is2t);
        if (t == 0)
                rtlphy->rfpi_enable = (u8) rtl_get_bbreg(hw,
                                RFPGA0_XA_HSSIPARAMETER1, BIT(8));
@@ -1800,8 +1260,8 @@ static void _rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw, long result[][8],
                              0x00010000);
        }
        /* MAC settings */
-       _rtl92d_phy_mac_setting_calibration(hw, iqk_mac_reg,
-                                           rtlphy->iqk_mac_backup);
+       rtl92d_phy_mac_setting_calibration(hw, iqk_mac_reg,
+                                          rtlphy->iqk_mac_backup);
        /* Page B init */
        rtl_set_bbreg(hw, 0xb68, MASKDWORD, 0x0f600000);
        if (is2t)
@@ -1841,7 +1301,7 @@ static void _rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw, long result[][8],
        if (is2t) {
                _rtl92d_phy_patha_standby(hw);
                /* Turn Path B ADDA on */
-               _rtl92d_phy_path_adda_on(hw, adda_reg, false, is2t);
+               rtl92d_phy_path_adda_on(hw, adda_reg, false, is2t);
                for (i = 0; i < retrycount; i++) {
                        pathb_ok = _rtl92d_phy_pathb_iqk(hw);
                        if (pathb_ok == 0x03) {
@@ -1938,24 +1398,24 @@ static void _rtl92d_phy_iq_calibrate_5g_normal(struct ieee80211_hw *hw,
                RTPRINT(rtlpriv, FINIT, INIT_IQK, "IQ Calibration for %s\n",
                        is2t ? "2T2R" : "1T1R");
                /* Save ADDA parameters, turn Path A ADDA on */
-               _rtl92d_phy_save_adda_registers(hw, adda_reg,
-                                               rtlphy->adda_backup,
-                                               IQK_ADDA_REG_NUM);
-               _rtl92d_phy_save_mac_registers(hw, iqk_mac_reg,
-                                              rtlphy->iqk_mac_backup);
+               rtl92d_phy_save_adda_registers(hw, adda_reg,
+                                              rtlphy->adda_backup,
+                                              IQK_ADDA_REG_NUM);
+               rtl92d_phy_save_mac_registers(hw, iqk_mac_reg,
+                                             rtlphy->iqk_mac_backup);
                if (is2t)
-                       _rtl92d_phy_save_adda_registers(hw, iqk_bb_reg,
-                                                       rtlphy->iqk_bb_backup,
-                                                       IQK_BB_REG_NUM);
+                       rtl92d_phy_save_adda_registers(hw, iqk_bb_reg,
+                                                      rtlphy->iqk_bb_backup,
+                                                      IQK_BB_REG_NUM);
                else
-                       _rtl92d_phy_save_adda_registers(hw, iqk_bb_reg,
-                                                       rtlphy->iqk_bb_backup,
-                                                       IQK_BB_REG_NUM - 1);
+                       rtl92d_phy_save_adda_registers(hw, iqk_bb_reg,
+                                                      rtlphy->iqk_bb_backup,
+                                                      IQK_BB_REG_NUM - 1);
        }
-       _rtl92d_phy_path_adda_on(hw, adda_reg, true, is2t);
+       rtl92d_phy_path_adda_on(hw, adda_reg, true, is2t);
        /* MAC settings */
-       _rtl92d_phy_mac_setting_calibration(hw, iqk_mac_reg,
-                       rtlphy->iqk_mac_backup);
+       rtl92d_phy_mac_setting_calibration(hw, iqk_mac_reg,
+                                          rtlphy->iqk_mac_backup);
        if (t == 0)
                rtlphy->rfpi_enable = (u8) rtl_get_bbreg(hw,
                        RFPGA0_XA_HSSIPARAMETER1, BIT(8));
@@ -2002,7 +1462,7 @@ static void _rtl92d_phy_iq_calibrate_5g_normal(struct ieee80211_hw *hw,
        if (is2t) {
                /* _rtl92d_phy_patha_standby(hw); */
                /* Turn Path B ADDA on  */
-               _rtl92d_phy_path_adda_on(hw, adda_reg, false, is2t);
+               rtl92d_phy_path_adda_on(hw, adda_reg, false, is2t);
                pathb_ok = _rtl92d_phy_pathb_iqk_5g_normal(hw);
                if (pathb_ok == 0x03) {
                        RTPRINT(rtlpriv, FINIT, INIT_IQK,
@@ -2401,56 +1861,6 @@ void rtl92d_phy_reload_iqk_setting(struct ieee80211_hw *hw, u8 channel)
        rtl_dbg(rtlpriv, COMP_CMD, DBG_LOUD, "<====\n");
 }
 
-static u32 _rtl92d_phy_get_abs(u32 val1, u32 val2)
-{
-       u32 ret;
-
-       if (val1 >= val2)
-               ret = val1 - val2;
-       else
-               ret = val2 - val1;
-       return ret;
-}
-
-static bool _rtl92d_is_legal_5g_channel(struct ieee80211_hw *hw, u8 channel)
-{
-
-       int i;
-
-       for (i = 0; i < ARRAY_SIZE(channel5g); i++)
-               if (channel == channel5g[i])
-                       return true;
-       return false;
-}
-
-static void _rtl92d_phy_calc_curvindex(struct ieee80211_hw *hw,
-                                      u32 *targetchnl, u32 * curvecount_val,
-                                      bool is5g, u32 *curveindex)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u32 smallest_abs_val = 0xffffffff, u4tmp;
-       u8 i, j;
-       u8 chnl_num = is5g ? TARGET_CHNL_NUM_5G : TARGET_CHNL_NUM_2G;
-
-       for (i = 0; i < chnl_num; i++) {
-               if (is5g && !_rtl92d_is_legal_5g_channel(hw, i + 1))
-                       continue;
-               curveindex[i] = 0;
-               for (j = 0; j < (CV_CURVE_CNT * 2); j++) {
-                       u4tmp = _rtl92d_phy_get_abs(targetchnl[i],
-                               curvecount_val[j]);
-
-                       if (u4tmp < smallest_abs_val) {
-                               curveindex[i] = j;
-                               smallest_abs_val = u4tmp;
-                       }
-               }
-               smallest_abs_val = 0xffffffff;
-               RTPRINT(rtlpriv, FINIT, INIT_IQK, "curveindex[%d] = %x\n",
-                       i, curveindex[i]);
-       }
-}
-
 static void _rtl92d_phy_reload_lck_setting(struct ieee80211_hw *hw,
                u8 channel)
 {
@@ -2477,12 +1887,12 @@ static void _rtl92d_phy_reload_lck_setting(struct ieee80211_hw *hw,
                        rtlpriv->rtlhal.during_mac1init_radioa = true;
                        /* asume no this case */
                        if (bneed_powerdown_radio)
-                               _rtl92d_phy_enable_rf_env(hw, erfpath,
-                                                         &u4regvalue);
+                               rtl92d_phy_enable_rf_env(hw, erfpath,
+                                                        &u4regvalue);
                }
                rtl_set_rfreg(hw, erfpath, RF_SYN_G4, 0x3f800, u4tmp);
                if (bneed_powerdown_radio)
-                       _rtl92d_phy_restore_rf_env(hw, erfpath, &u4regvalue);
+                       rtl92d_phy_restore_rf_env(hw, erfpath, &u4regvalue);
                if (rtlpriv->rtlhal.during_mac1init_radioa)
                        rtl92d_phy_powerdown_anotherphy(hw, false);
        } else if (rtlpriv->rtlhal.current_bandtype == BAND_ON_2_4G) {
@@ -2495,15 +1905,15 @@ static void _rtl92d_phy_reload_lck_setting(struct ieee80211_hw *hw,
                                rtl92d_phy_enable_anotherphy(hw, true);
                        rtlpriv->rtlhal.during_mac0init_radiob = true;
                        if (bneed_powerdown_radio)
-                               _rtl92d_phy_enable_rf_env(hw, erfpath,
-                                                         &u4regvalue);
+                               rtl92d_phy_enable_rf_env(hw, erfpath,
+                                                        &u4regvalue);
                }
                rtl_set_rfreg(hw, erfpath, RF_SYN_G4, 0x3f800, u4tmp);
                RTPRINT(rtlpriv, FINIT, INIT_IQK,
                        "ver 3 set RF-B, 2G, 0x28 = 0x%x !!\n",
                        rtl_get_rfreg(hw,  erfpath, RF_SYN_G4, 0x3f800));
                if (bneed_powerdown_radio)
-                       _rtl92d_phy_restore_rf_env(hw, erfpath, &u4regvalue);
+                       rtl92d_phy_restore_rf_env(hw, erfpath, &u4regvalue);
                if (rtlpriv->rtlhal.during_mac0init_radiob)
                        rtl92d_phy_powerdown_anotherphy(hw, true);
        }
@@ -2588,13 +1998,13 @@ static void _rtl92d_phy_lc_calibrate_sw(struct ieee80211_hw *hw, bool is2t)
                                                 readval2);
                }
                if (index == 0 && rtlhal->interfaceindex == 0)
-                       _rtl92d_phy_calc_curvindex(hw, targetchnl_5g,
-                                                  curvecount_val,
-                                                  true, curveindex_5g);
+                       rtl92d_phy_calc_curvindex(hw, targetchnl_5g,
+                                                 curvecount_val,
+                                                 true, curveindex_5g);
                else
-                       _rtl92d_phy_calc_curvindex(hw, targetchnl_2g,
-                                                  curvecount_val,
-                                                  false, curveindex_2g);
+                       rtl92d_phy_calc_curvindex(hw, targetchnl_2g,
+                                                 curvecount_val,
+                                                 false, curveindex_2g);
                /* switch CV-curve control mode */
                rtl_set_rfreg(hw, (enum radio_path)index, RF_SYN_G7,
                              BIT(17), 0x1);
@@ -2622,7 +2032,7 @@ static void _rtl92d_phy_lc_calibrate(struct ieee80211_hw *hw, bool is2t)
        _rtl92d_phy_lc_calibrate_sw(hw, is2t);
 }
 
-void rtl92d_phy_lc_calibrate(struct ieee80211_hw *hw)
+void rtl92d_phy_lc_calibrate(struct ieee80211_hw *hw, bool is2t)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &(rtlpriv->phy);
@@ -2638,12 +2048,9 @@ void rtl92d_phy_lc_calibrate(struct ieee80211_hw *hw)
        RTPRINT(rtlpriv, FINIT, INIT_IQK,
                "LCK:Start!!! currentband %x delay %d ms\n",
                rtlhal->current_bandtype, timecount);
-       if (IS_92D_SINGLEPHY(rtlhal->version)) {
-               _rtl92d_phy_lc_calibrate(hw, true);
-       } else {
-               /* For 1T1R */
-               _rtl92d_phy_lc_calibrate(hw, false);
-       }
+
+       _rtl92d_phy_lc_calibrate(hw, is2t);
+
        rtlphy->lck_inprogress = false;
        RTPRINT(rtlpriv, FINIT, INIT_IQK,  "LCK:Finish!!!\n");
 }
@@ -2674,30 +2081,6 @@ static bool _rtl92d_phy_set_sw_chnl_cmdarray(struct swchnlcmd *cmdtable,
        return true;
 }
 
-void rtl92d_phy_reset_iqk_result(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       u8 i;
-
-       rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
-               "settings regs %zu default regs %d\n",
-               ARRAY_SIZE(rtlphy->iqk_matrix),
-               IQK_MATRIX_REG_NUM);
-       /* 0xe94, 0xe9c, 0xea4, 0xeac, 0xeb4, 0xebc, 0xec4, 0xecc */
-       for (i = 0; i < IQK_MATRIX_SETTINGS_NUM; i++) {
-               rtlphy->iqk_matrix[i].value[0][0] = 0x100;
-               rtlphy->iqk_matrix[i].value[0][2] = 0x100;
-               rtlphy->iqk_matrix[i].value[0][4] = 0x100;
-               rtlphy->iqk_matrix[i].value[0][6] = 0x100;
-               rtlphy->iqk_matrix[i].value[0][1] = 0x0;
-               rtlphy->iqk_matrix[i].value[0][3] = 0x0;
-               rtlphy->iqk_matrix[i].value[0][5] = 0x0;
-               rtlphy->iqk_matrix[i].value[0][7] = 0x0;
-               rtlphy->iqk_matrix[i].iqk_done = false;
-       }
-}
-
 static bool _rtl92d_phy_sw_chnl_step_by_step(struct ieee80211_hw *hw,
                                             u8 channel, u8 *stage, u8 *step,
                                             u32 *delay)
@@ -2891,74 +2274,6 @@ u8 rtl92d_phy_sw_chnl(struct ieee80211_hw *hw)
        return 1;
 }
 
-static void rtl92d_phy_set_io(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct dig_t *de_digtable = &rtlpriv->dm_digtable;
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-
-       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE,
-               "--->Cmd(%#x), set_io_inprogress(%d)\n",
-               rtlphy->current_io_type, rtlphy->set_io_inprogress);
-       switch (rtlphy->current_io_type) {
-       case IO_CMD_RESUME_DM_BY_SCAN:
-               de_digtable->cur_igvalue = rtlphy->initgain_backup.xaagccore1;
-               rtl92d_dm_write_dig(hw);
-               rtl92d_phy_set_txpower_level(hw, rtlphy->current_channel);
-               break;
-       case IO_CMD_PAUSE_DM_BY_SCAN:
-               rtlphy->initgain_backup.xaagccore1 = de_digtable->cur_igvalue;
-               de_digtable->cur_igvalue = 0x37;
-               rtl92d_dm_write_dig(hw);
-               break;
-       default:
-               pr_err("switch case %#x not processed\n",
-                      rtlphy->current_io_type);
-               break;
-       }
-       rtlphy->set_io_inprogress = false;
-       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE, "<---(%#x)\n",
-               rtlphy->current_io_type);
-}
-
-bool rtl92d_phy_set_io_cmd(struct ieee80211_hw *hw, enum io_type iotype)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       bool postprocessing = false;
-
-       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE,
-               "-->IO Cmd(%#x), set_io_inprogress(%d)\n",
-                iotype, rtlphy->set_io_inprogress);
-       do {
-               switch (iotype) {
-               case IO_CMD_RESUME_DM_BY_SCAN:
-                       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE,
-                               "[IO CMD] Resume DM after scan\n");
-                       postprocessing = true;
-                       break;
-               case IO_CMD_PAUSE_DM_BY_SCAN:
-                       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE,
-                               "[IO CMD] Pause DM before scan\n");
-                       postprocessing = true;
-                       break;
-               default:
-                       pr_err("switch case %#x not processed\n",
-                              iotype);
-                       break;
-               }
-       } while (false);
-       if (postprocessing && !rtlphy->set_io_inprogress) {
-               rtlphy->set_io_inprogress = true;
-               rtlphy->current_io_type = iotype;
-       } else {
-               return false;
-       }
-       rtl92d_phy_set_io(hw);
-       rtl_dbg(rtlpriv, COMP_CMD, DBG_TRACE, "<--IO Type(%#x)\n", iotype);
-       return true;
-}
-
 static void _rtl92d_phy_set_rfon(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -3141,100 +2456,6 @@ bool rtl92d_phy_set_rf_power_state(struct ieee80211_hw *hw,
        return bresult;
 }
 
-void rtl92d_phy_config_macphymode(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       u8 offset = REG_MAC_PHY_CTRL_NORMAL;
-
-       switch (rtlhal->macphymode) {
-       case DUALMAC_DUALPHY:
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
-                       "MacPhyMode: DUALMAC_DUALPHY\n");
-               rtl_write_byte(rtlpriv, offset, 0xF3);
-               break;
-       case SINGLEMAC_SINGLEPHY:
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
-                       "MacPhyMode: SINGLEMAC_SINGLEPHY\n");
-               rtl_write_byte(rtlpriv, offset, 0xF4);
-               break;
-       case DUALMAC_SINGLEPHY:
-               rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
-                       "MacPhyMode: DUALMAC_SINGLEPHY\n");
-               rtl_write_byte(rtlpriv, offset, 0xF1);
-               break;
-       }
-}
-
-void rtl92d_phy_config_macphymode_info(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-
-       switch (rtlhal->macphymode) {
-       case DUALMAC_SINGLEPHY:
-               rtlphy->rf_type = RF_2T2R;
-               rtlhal->version |= RF_TYPE_2T2R;
-               rtlhal->bandset = BAND_ON_BOTH;
-               rtlhal->current_bandtype = BAND_ON_2_4G;
-               break;
-
-       case SINGLEMAC_SINGLEPHY:
-               rtlphy->rf_type = RF_2T2R;
-               rtlhal->version |= RF_TYPE_2T2R;
-               rtlhal->bandset = BAND_ON_BOTH;
-               rtlhal->current_bandtype = BAND_ON_2_4G;
-               break;
-
-       case DUALMAC_DUALPHY:
-               rtlphy->rf_type = RF_1T1R;
-               rtlhal->version &= RF_TYPE_1T1R;
-               /* Now we let MAC0 run on 5G band. */
-               if (rtlhal->interfaceindex == 0) {
-                       rtlhal->bandset = BAND_ON_5G;
-                       rtlhal->current_bandtype = BAND_ON_5G;
-               } else {
-                       rtlhal->bandset = BAND_ON_2_4G;
-                       rtlhal->current_bandtype = BAND_ON_2_4G;
-               }
-               break;
-       default:
-               break;
-       }
-}
-
-u8 rtl92d_get_chnlgroup_fromarray(u8 chnl)
-{
-       u8 group;
-
-       if (channel_all[chnl] <= 3)
-               group = 0;
-       else if (channel_all[chnl] <= 9)
-               group = 1;
-       else if (channel_all[chnl] <= 14)
-               group = 2;
-       else if (channel_all[chnl] <= 44)
-               group = 3;
-       else if (channel_all[chnl] <= 54)
-               group = 4;
-       else if (channel_all[chnl] <= 64)
-               group = 5;
-       else if (channel_all[chnl] <= 112)
-               group = 6;
-       else if (channel_all[chnl] <= 126)
-               group = 7;
-       else if (channel_all[chnl] <= 140)
-               group = 8;
-       else if (channel_all[chnl] <= 153)
-               group = 9;
-       else if (channel_all[chnl] <= 159)
-               group = 10;
-       else
-               group = 11;
-       return group;
-}
-
 void rtl92d_phy_set_poweron(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -3286,31 +2507,6 @@ void rtl92d_phy_set_poweron(struct ieee80211_hw *hw)
        }
 }
 
-void rtl92d_phy_config_maccoexist_rfpage(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       switch (rtlpriv->rtlhal.macphymode) {
-       case DUALMAC_DUALPHY:
-               rtl_write_byte(rtlpriv, REG_DMC, 0x0);
-               rtl_write_byte(rtlpriv, REG_RX_PKT_LIMIT, 0x08);
-               rtl_write_word(rtlpriv, REG_TRXFF_BNDY + 2, 0x13ff);
-               break;
-       case DUALMAC_SINGLEPHY:
-               rtl_write_byte(rtlpriv, REG_DMC, 0xf8);
-               rtl_write_byte(rtlpriv, REG_RX_PKT_LIMIT, 0x08);
-               rtl_write_word(rtlpriv, REG_TRXFF_BNDY + 2, 0x13ff);
-               break;
-       case SINGLEMAC_SINGLEPHY:
-               rtl_write_byte(rtlpriv, REG_DMC, 0x0);
-               rtl_write_byte(rtlpriv, REG_RX_PKT_LIMIT, 0x10);
-               rtl_write_word(rtlpriv, (REG_TRXFF_BNDY + 2), 0x27FF);
-               break;
-       default:
-               break;
-       }
-}
-
 void rtl92d_update_bbrf_configuration(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
index 8d07c78..bbe9ef7 100644 (file)
 
 #define MAX_DOZE_WAITING_TIMES_9x              64
 
-#define RT_CANNOT_IO(hw)                       false
 #define HIGHPOWER_RADIOA_ARRAYLEN              22
 
-#define MAX_TOLERANCE                          5
-
 #define        APK_BB_REG_NUM                          5
 #define        APK_AFE_REG_NUM                         16
 #define        APK_CURVE_REG_NUM                       4
 #define RESET_CNT_LIMIT                                3
 
 #define IQK_ADDA_REG_NUM                       16
-#define IQK_BB_REG_NUM                         10
 #define IQK_BB_REG_NUM_test                    6
 #define IQK_MAC_REG_NUM                                4
-#define RX_INDEX_MAPPING_NUM                   15
-
-#define IQK_DELAY_TIME                         1
 
 #define CT_OFFSET_MAC_ADDR                     0X16
 
@@ -68,80 +61,30 @@ struct swchnlcmd {
        u32 msdelay;
 };
 
-enum baseband_config_type {
-       BASEBAND_CONFIG_PHY_REG = 0,
-       BASEBAND_CONFIG_AGC_TAB = 1,
-};
-
-enum rf_content {
-       radioa_txt = 0,
-       radiob_txt = 1,
-       radioc_txt = 2,
-       radiod_txt = 3
-};
-
-static inline void rtl92d_acquire_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
-                                                    unsigned long *flag)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       if (rtlpriv->rtlhal.interfaceindex == 1)
-               spin_lock_irqsave(&rtlpriv->locks.cck_and_rw_pagea_lock, *flag);
-}
-
-static inline void rtl92d_release_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
-                                                    unsigned long *flag)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       if (rtlpriv->rtlhal.interfaceindex == 1)
-               spin_unlock_irqrestore(&rtlpriv->locks.cck_and_rw_pagea_lock,
-                       *flag);
-}
-
 u32 rtl92d_phy_query_bb_reg(struct ieee80211_hw *hw,
                            u32 regaddr, u32 bitmask);
 void rtl92d_phy_set_bb_reg(struct ieee80211_hw *hw,
                           u32 regaddr, u32 bitmask, u32 data);
-u32 rtl92d_phy_query_rf_reg(struct ieee80211_hw *hw,
-                           enum radio_path rfpath, u32 regaddr,
-                           u32 bitmask);
-void rtl92d_phy_set_rf_reg(struct ieee80211_hw *hw,
-                          enum radio_path rfpath, u32 regaddr,
-                          u32 bitmask, u32 data);
 bool rtl92d_phy_mac_config(struct ieee80211_hw *hw);
 bool rtl92d_phy_bb_config(struct ieee80211_hw *hw);
 bool rtl92d_phy_rf_config(struct ieee80211_hw *hw);
 bool rtl92c_phy_config_rf_with_feaderfile(struct ieee80211_hw *hw,
                                          enum radio_path rfpath);
-void rtl92d_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw);
-void rtl92d_phy_set_txpower_level(struct ieee80211_hw *hw, u8 channel);
 void rtl92d_phy_set_bw_mode(struct ieee80211_hw *hw,
                            enum nl80211_channel_type ch_type);
 u8 rtl92d_phy_sw_chnl(struct ieee80211_hw *hw);
 bool rtl92d_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
                                          enum rf_content content,
                                          enum radio_path rfpath);
-bool rtl92d_phy_set_io_cmd(struct ieee80211_hw *hw, enum io_type iotype);
 bool rtl92d_phy_set_rf_power_state(struct ieee80211_hw *hw,
                                   enum rf_pwrstate rfpwr_state);
 
-void rtl92d_phy_config_macphymode(struct ieee80211_hw *hw);
-void rtl92d_phy_config_macphymode_info(struct ieee80211_hw *hw);
-u8 rtl92d_get_chnlgroup_fromarray(u8 chnl);
 void rtl92d_phy_set_poweron(struct ieee80211_hw *hw);
-void rtl92d_phy_config_maccoexist_rfpage(struct ieee80211_hw *hw);
 bool rtl92d_phy_check_poweroff(struct ieee80211_hw *hw);
-void rtl92d_phy_lc_calibrate(struct ieee80211_hw *hw);
+void rtl92d_phy_lc_calibrate(struct ieee80211_hw *hw, bool is2t);
 void rtl92d_update_bbrf_configuration(struct ieee80211_hw *hw);
 void rtl92d_phy_ap_calibrate(struct ieee80211_hw *hw, s8 delta);
 void rtl92d_phy_iq_calibrate(struct ieee80211_hw *hw);
-void rtl92d_phy_reset_iqk_result(struct ieee80211_hw *hw);
-void rtl92d_release_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
-                                      unsigned long *flag);
-void rtl92d_acquire_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
-                                      unsigned long *flag);
-u8 rtl92d_get_rightchnlplace_for_iqk(u8 chnl);
 void rtl92d_phy_reload_iqk_setting(struct ieee80211_hw *hw, u8 channel);
 
 #endif
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/reg.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/reg.h
deleted file mode 100644 (file)
index 2783d7e..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright(c) 2009-2012  Realtek Corporation.*/
-
-#ifndef __RTL92D_REG_H__
-#define __RTL92D_REG_H__
-
-/* ----------------------------------------------------- */
-/* 0x0000h ~ 0x00FFh System Configuration */
-/* ----------------------------------------------------- */
-#define REG_SYS_ISO_CTRL               0x0000
-#define REG_SYS_FUNC_EN                        0x0002
-#define REG_APS_FSMCO                  0x0004
-#define REG_SYS_CLKR                   0x0008
-#define REG_9346CR                     0x000A
-#define REG_EE_VPD                     0x000C
-#define REG_AFE_MISC                   0x0010
-#define REG_SPS0_CTRL                  0x0011
-#define REG_POWER_OFF_IN_PROCESS       0x0017
-#define REG_SPS_OCP_CFG                        0x0018
-#define REG_RSV_CTRL                   0x001C
-#define REG_RF_CTRL                    0x001F
-#define REG_LDOA15_CTRL                        0x0020
-#define REG_LDOV12D_CTRL               0x0021
-#define REG_LDOHCI12_CTRL              0x0022
-#define REG_LPLDO_CTRL                 0x0023
-#define REG_AFE_XTAL_CTRL              0x0024
-#define REG_AFE_PLL_CTRL               0x0028
-/* for 92d, DMDP,SMSP,DMSP contrl */
-#define REG_MAC_PHY_CTRL               0x002c
-#define REG_EFUSE_CTRL                 0x0030
-#define REG_EFUSE_TEST                 0x0034
-#define REG_PWR_DATA                   0x0038
-#define REG_CAL_TIMER                  0x003C
-#define REG_ACLK_MON                   0x003E
-#define REG_GPIO_MUXCFG                        0x0040
-#define REG_GPIO_IO_SEL                        0x0042
-#define REG_MAC_PINMUX_CFG             0x0043
-#define REG_GPIO_PIN_CTRL              0x0044
-#define REG_GPIO_INTM                  0x0048
-#define REG_LEDCFG0                    0x004C
-#define REG_LEDCFG1                    0x004D
-#define REG_LEDCFG2                    0x004E
-#define REG_LEDCFG3                    0x004F
-#define REG_FSIMR                      0x0050
-#define REG_FSISR                      0x0054
-
-#define REG_MCUFWDL                    0x0080
-
-#define REG_HMEBOX_EXT_0               0x0088
-#define REG_HMEBOX_EXT_1               0x008A
-#define REG_HMEBOX_EXT_2               0x008C
-#define REG_HMEBOX_EXT_3               0x008E
-
-#define REG_BIST_SCAN                  0x00D0
-#define REG_BIST_RPT                   0x00D4
-#define REG_BIST_ROM_RPT               0x00D8
-#define REG_USB_SIE_INTF               0x00E0
-#define REG_PCIE_MIO_INTF              0x00E4
-#define REG_PCIE_MIO_INTD              0x00E8
-#define REG_HPON_FSM                   0x00EC
-#define REG_SYS_CFG                    0x00F0
-#define REG_MAC_PHY_CTRL_NORMAL                0x00f8
-
-#define  REG_MAC0                      0x0081
-#define  REG_MAC1                      0x0053
-#define  FW_MAC0_READY                 0x18
-#define  FW_MAC1_READY                 0x1A
-#define  MAC0_ON                       BIT(7)
-#define  MAC1_ON                       BIT(0)
-#define  MAC0_READY                    BIT(0)
-#define  MAC1_READY                    BIT(0)
-
-/* ----------------------------------------------------- */
-/* 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_TRXFF_STATUS               0x0118
-#define REG_RXFF_PTR                   0x011C
-#define REG_HIMR                       0x0120
-#define REG_HISR                       0x0124
-#define REG_HIMRE                      0x0128
-#define REG_HISRE                      0x012C
-#define REG_CPWM                       0x012F
-#define REG_FWIMR                      0x0130
-#define REG_FWISR                      0x0134
-#define REG_PKTBUF_DBG_CTRL            0x0140
-#define REG_PKTBUF_DBG_DATA_L          0x0144
-#define REG_PKTBUF_DBG_DATA_H          0x0148
-
-#define REG_TC0_CTRL                   0x0150
-#define REG_TC1_CTRL                   0x0154
-#define REG_TC2_CTRL                   0x0158
-#define REG_TC3_CTRL                   0x015C
-#define REG_TC4_CTRL                   0x0160
-#define REG_TCUNIT_BASE                        0x0164
-#define REG_MBIST_START                        0x0174
-#define REG_MBIST_DONE                 0x0178
-#define REG_MBIST_FAIL                 0x017C
-#define REG_C2HEVT_MSG_NORMAL          0x01A0
-#define REG_C2HEVT_MSG_TEST            0x01B8
-#define REG_C2HEVT_CLEAR               0x01BF
-#define REG_MCUTST_1                   0x01c0
-#define REG_FMETHR                     0x01C8
-#define REG_HMETFR                     0x01CC
-#define REG_HMEBOX_0                   0x01D0
-#define REG_HMEBOX_1                   0x01D4
-#define REG_HMEBOX_2                   0x01D8
-#define REG_HMEBOX_3                   0x01DC
-
-#define REG_LLT_INIT                   0x01E0
-#define REG_BB_ACCEESS_CTRL            0x01E8
-#define REG_BB_ACCESS_DATA             0x01EC
-
-
-/* ----------------------------------------------------- */
-/*     0x0200h ~ 0x027Fh       TXDMA Configuration */
-/* ----------------------------------------------------- */
-#define REG_RQPN                       0x0200
-#define REG_FIFOPAGE                   0x0204
-#define REG_TDECTRL                    0x0208
-#define REG_TXDMA_OFFSET_CHK           0x020C
-#define REG_TXDMA_STATUS               0x0210
-#define REG_RQPN_NPQ                   0x0214
-
-/* ----------------------------------------------------- */
-/*     0x0280h ~ 0x02FFh       RXDMA Configuration */
-/* ----------------------------------------------------- */
-#define REG_RXDMA_AGG_PG_TH            0x0280
-#define REG_RXPKT_NUM                  0x0284
-#define REG_RXDMA_STATUS               0x0288
-
-/* ----------------------------------------------------- */
-/*     0x0300h ~ 0x03FFh       PCIe  */
-/* ----------------------------------------------------- */
-#define        REG_PCIE_CTRL_REG               0x0300
-#define        REG_INT_MIG                     0x0304
-#define        REG_BCNQ_DESA                   0x0308
-#define        REG_HQ_DESA                     0x0310
-#define        REG_MGQ_DESA                    0x0318
-#define        REG_VOQ_DESA                    0x0320
-#define        REG_VIQ_DESA                    0x0328
-#define        REG_BEQ_DESA                    0x0330
-#define        REG_BKQ_DESA                    0x0338
-#define        REG_RX_DESA                     0x0340
-#define        REG_DBI                         0x0348
-#define        REG_DBI_WDATA                   0x0348
-#define REG_DBI_RDATA                  0x034C
-#define REG_DBI_CTRL                   0x0350
-#define REG_DBI_FLAG                   0x0352
-#define        REG_MDIO                        0x0354
-#define        REG_DBG_SEL                     0x0360
-#define        REG_PCIE_HRPWM                  0x0361
-#define        REG_PCIE_HCPWM                  0x0363
-#define        REG_UART_CTRL                   0x0364
-#define        REG_UART_TX_DESA                0x0370
-#define        REG_UART_RX_DESA                0x0378
-
-/* ----------------------------------------------------- */
-/*     0x0400h ~ 0x047Fh       Protocol Configuration  */
-/* ----------------------------------------------------- */
-#define REG_VOQ_INFORMATION            0x0400
-#define REG_VIQ_INFORMATION            0x0404
-#define REG_BEQ_INFORMATION            0x0408
-#define REG_BKQ_INFORMATION            0x040C
-#define REG_MGQ_INFORMATION            0x0410
-#define REG_HGQ_INFORMATION            0x0414
-#define REG_BCNQ_INFORMATION           0x0418
-
-
-#define REG_CPU_MGQ_INFORMATION                0x041C
-#define REG_FWHW_TXQ_CTRL              0x0420
-#define REG_HWSEQ_CTRL                 0x0423
-#define REG_TXPKTBUF_BCNQ_BDNY         0x0424
-#define REG_TXPKTBUF_MGQ_BDNY          0x0425
-#define REG_MULTI_BCNQ_EN              0x0426
-#define REG_MULTI_BCNQ_OFFSET          0x0427
-#define REG_SPEC_SIFS                  0x0428
-#define REG_RL                         0x042A
-#define REG_DARFRC                     0x0430
-#define REG_RARFRC                     0x0438
-#define REG_RRSR                       0x0440
-#define REG_ARFR0                      0x0444
-#define REG_ARFR1                      0x0448
-#define REG_ARFR2                      0x044C
-#define REG_ARFR3                      0x0450
-#define REG_AGGLEN_LMT                 0x0458
-#define REG_AMPDU_MIN_SPACE            0x045C
-#define REG_TXPKTBUF_WMAC_LBK_BF_HD    0x045D
-#define REG_FAST_EDCA_CTRL             0x0460
-#define REG_RD_RESP_PKT_TH             0x0463
-#define REG_INIRTS_RATE_SEL            0x0480
-#define REG_INIDATA_RATE_SEL           0x0484
-#define REG_POWER_STATUS               0x04A4
-#define REG_POWER_STAGE1               0x04B4
-#define REG_POWER_STAGE2               0x04B8
-#define REG_PKT_LIFE_TIME              0x04C0
-#define REG_STBC_SETTING               0x04C4
-#define REG_PROT_MODE_CTRL             0x04C8
-#define REG_MAX_AGGR_NUM               0x04CA
-#define REG_RTS_MAX_AGGR_NUM           0x04CB
-#define REG_BAR_MODE_CTRL              0x04CC
-#define REG_RA_TRY_RATE_AGG_LMT                0x04CF
-#define REG_EARLY_MODE_CONTROL         0x4D0
-#define REG_NQOS_SEQ                   0x04DC
-#define REG_QOS_SEQ                    0x04DE
-#define REG_NEED_CPU_HANDLE            0x04E0
-#define REG_PKT_LOSE_RPT               0x04E1
-#define REG_PTCL_ERR_STATUS            0x04E2
-#define REG_DUMMY                      0x04FC
-
-/* ----------------------------------------------------- */
-/*     0x0500h ~ 0x05FFh       EDCA Configuration   */
-/* ----------------------------------------------------- */
-#define REG_EDCA_VO_PARAM              0x0500
-#define REG_EDCA_VI_PARAM              0x0504
-#define REG_EDCA_BE_PARAM              0x0508
-#define REG_EDCA_BK_PARAM              0x050C
-#define REG_BCNTCFG                    0x0510
-#define REG_PIFS                       0x0512
-#define REG_RDG_PIFS                   0x0513
-#define REG_SIFS_CTX                   0x0514
-#define REG_SIFS_TRX                   0x0516
-#define REG_AGGR_BREAK_TIME            0x051A
-#define REG_SLOT                       0x051B
-#define REG_TX_PTCL_CTRL               0x0520
-#define REG_TXPAUSE                    0x0522
-#define REG_DIS_TXREQ_CLR              0x0523
-#define REG_RD_CTRL                    0x0524
-#define REG_TBTT_PROHIBIT              0x0540
-#define REG_RD_NAV_NXT                 0x0544
-#define REG_NAV_PROT_LEN               0x0546
-#define REG_BCN_CTRL                   0x0550
-#define REG_MBID_NUM                   0x0552
-#define REG_DUAL_TSF_RST               0x0553
-#define REG_BCN_INTERVAL               0x0554
-#define REG_MBSSID_BCN_SPACE           0x0554
-#define REG_DRVERLYINT                 0x0558
-#define REG_BCNDMATIM                  0x0559
-#define REG_ATIMWND                    0x055A
-#define REG_USTIME_TSF                 0x055C
-#define REG_BCN_MAX_ERR                        0x055D
-#define REG_RXTSF_OFFSET_CCK           0x055E
-#define REG_RXTSF_OFFSET_OFDM          0x055F
-#define REG_TSFTR                      0x0560
-#define REG_INIT_TSFTR                 0x0564
-#define REG_PSTIMER                    0x0580
-#define REG_TIMER0                     0x0584
-#define REG_TIMER1                     0x0588
-#define REG_ACMHWCTRL                  0x05C0
-#define REG_ACMRSTCTRL                 0x05C1
-#define REG_ACMAVG                     0x05C2
-#define REG_VO_ADMTIME                 0x05C4
-#define REG_VI_ADMTIME                 0x05C6
-#define REG_BE_ADMTIME                 0x05C8
-#define REG_EDCA_RANDOM_GEN            0x05CC
-#define REG_SCH_TXCMD                  0x05D0
-
-/* Dual MAC Co-Existence Register  */
-#define REG_DMC                                0x05F0
-
-/* ----------------------------------------------------- */
-/*     0x0600h ~ 0x07FFh       WMAC Configuration */
-/* ----------------------------------------------------- */
-#define REG_APSD_CTRL                  0x0600
-#define REG_BWOPMODE                   0x0603
-#define REG_TCR                                0x0604
-#define REG_RCR                                0x0608
-#define REG_RX_PKT_LIMIT               0x060C
-#define REG_RX_DLK_TIME                        0x060D
-#define REG_RX_DRVINFO_SZ              0x060F
-
-#define REG_MACID                      0x0610
-#define REG_BSSID                      0x0618
-#define REG_MAR                                0x0620
-#define REG_MBIDCAMCFG                 0x0628
-
-#define REG_USTIME_EDCA                        0x0638
-#define REG_MAC_SPEC_SIFS              0x063A
-#define REG_RESP_SIFS_CCK              0x063C
-#define REG_RESP_SIFS_OFDM             0x063E
-#define REG_ACKTO                      0x0640
-#define REG_CTS2TO                     0x0641
-#define REG_EIFS                       0x0642
-
-
-/* WMA, BA, CCX */
-#define REG_NAV_CTRL                   0x0650
-#define REG_BACAMCMD                   0x0654
-#define REG_BACAMCONTENT               0x0658
-#define REG_LBDLY                      0x0660
-#define REG_FWDLY                      0x0661
-#define REG_RXERR_RPT                  0x0664
-#define REG_WMAC_TRXPTCL_CTL           0x0668
-
-
-/* Security  */
-#define REG_CAMCMD                     0x0670
-#define REG_CAMWRITE                   0x0674
-#define REG_CAMREAD                    0x0678
-#define REG_CAMDBG                     0x067C
-#define REG_SECCFG                     0x0680
-
-/* Power  */
-#define REG_WOW_CTRL                   0x0690
-#define REG_PSSTATUS                   0x0691
-#define REG_PS_RX_INFO                 0x0692
-#define REG_LPNAV_CTRL                 0x0694
-#define REG_WKFMCAM_CMD                        0x0698
-#define REG_WKFMCAM_RWD                        0x069C
-#define REG_RXFLTMAP0                  0x06A0
-#define REG_RXFLTMAP1                  0x06A2
-#define REG_RXFLTMAP2                  0x06A4
-#define REG_BCN_PSR_RPT                        0x06A8
-#define REG_CALB32K_CTRL               0x06AC
-#define REG_PKT_MON_CTRL               0x06B4
-#define REG_BT_COEX_TABLE              0x06C0
-#define REG_WMAC_RESP_TXINFO           0x06D8
-
-
-/* ----------------------------------------------------- */
-/*     Redifine 8192C register definition for compatibility */
-/* ----------------------------------------------------- */
-#define        CR9346                          REG_9346CR
-#define        MSR                             (REG_CR + 2)
-#define        ISR                             REG_HISR
-#define        TSFR                            REG_TSFTR
-
-#define        MACIDR0                         REG_MACID
-#define        MACIDR4                         (REG_MACID + 4)
-
-#define PBP                            REG_PBP
-
-#define        IDR0                            MACIDR0
-#define        IDR4                            MACIDR4
-
-/* ----------------------------------------------------- */
-/* 8192C (MSR) Media Status Register(Offset 0x4C, 8 bits)*/
-/* ----------------------------------------------------- */
-#define        MSR_NOLINK                      0x00
-#define        MSR_ADHOC                       0x01
-#define        MSR_INFRA                       0x02
-#define        MSR_AP                          0x03
-#define        MSR_MASK                        0x03
-
-/* 6. Adaptive Control Registers  (Offset: 0x0160 - 0x01CF) */
-/* ----------------------------------------------------- */
-/* 8192C Response Rate Set Register(offset 0x181, 24bits)*/
-/* ----------------------------------------------------- */
-#define        RRSR_RSC_OFFSET                 21
-#define        RRSR_SHORT_OFFSET               23
-#define        RRSR_RSC_BW_40M                 0x600000
-#define        RRSR_RSC_UPSUBCHNL              0x400000
-#define        RRSR_RSC_LOWSUBCHNL             0x200000
-#define        RRSR_SHORT                      0x800000
-#define        RRSR_1M                         BIT0
-#define        RRSR_2M                         BIT1
-#define        RRSR_5_5M                       BIT2
-#define        RRSR_11M                        BIT3
-#define        RRSR_6M                         BIT4
-#define        RRSR_9M                         BIT5
-#define        RRSR_12M                        BIT6
-#define        RRSR_18M                        BIT7
-#define        RRSR_24M                        BIT8
-#define        RRSR_36M                        BIT9
-#define        RRSR_48M                        BIT10
-#define        RRSR_54M                        BIT11
-#define        RRSR_MCS0                       BIT12
-#define        RRSR_MCS1                       BIT13
-#define        RRSR_MCS2                       BIT14
-#define        RRSR_MCS3                       BIT15
-#define        RRSR_MCS4                       BIT16
-#define        RRSR_MCS5                       BIT17
-#define        RRSR_MCS6                       BIT18
-#define        RRSR_MCS7                       BIT19
-#define        BRSR_ACKSHORTPMB                BIT23
-
-/* ----------------------------------------------------- */
-/*       8192C Rate Definition  */
-/* ----------------------------------------------------- */
-/* CCK */
-#define        RATR_1M                         0x00000001
-#define        RATR_2M                         0x00000002
-#define        RATR_55M                        0x00000004
-#define        RATR_11M                        0x00000008
-/* OFDM */
-#define        RATR_6M                         0x00000010
-#define        RATR_9M                         0x00000020
-#define        RATR_12M                        0x00000040
-#define        RATR_18M                        0x00000080
-#define        RATR_24M                        0x00000100
-#define        RATR_36M                        0x00000200
-#define        RATR_48M                        0x00000400
-#define        RATR_54M                        0x00000800
-/* MCS 1 Spatial Stream        */
-#define        RATR_MCS0                       0x00001000
-#define        RATR_MCS1                       0x00002000
-#define        RATR_MCS2                       0x00004000
-#define        RATR_MCS3                       0x00008000
-#define        RATR_MCS4                       0x00010000
-#define        RATR_MCS5                       0x00020000
-#define        RATR_MCS6                       0x00040000
-#define        RATR_MCS7                       0x00080000
-/* MCS 2 Spatial Stream */
-#define        RATR_MCS8                       0x00100000
-#define        RATR_MCS9                       0x00200000
-#define        RATR_MCS10                      0x00400000
-#define        RATR_MCS11                      0x00800000
-#define        RATR_MCS12                      0x01000000
-#define        RATR_MCS13                      0x02000000
-#define        RATR_MCS14                      0x04000000
-#define        RATR_MCS15                      0x08000000
-
-/* CCK */
-#define RATE_1M                                BIT(0)
-#define RATE_2M                                BIT(1)
-#define RATE_5_5M                      BIT(2)
-#define RATE_11M                       BIT(3)
-/* OFDM  */
-#define RATE_6M                                BIT(4)
-#define RATE_9M                                BIT(5)
-#define RATE_12M                       BIT(6)
-#define RATE_18M                       BIT(7)
-#define RATE_24M                       BIT(8)
-#define RATE_36M                       BIT(9)
-#define RATE_48M                       BIT(10)
-#define RATE_54M                       BIT(11)
-/* MCS 1 Spatial Stream */
-#define RATE_MCS0                      BIT(12)
-#define RATE_MCS1                      BIT(13)
-#define RATE_MCS2                      BIT(14)
-#define RATE_MCS3                      BIT(15)
-#define RATE_MCS4                      BIT(16)
-#define RATE_MCS5                      BIT(17)
-#define RATE_MCS6                      BIT(18)
-#define RATE_MCS7                      BIT(19)
-/* MCS 2 Spatial Stream */
-#define RATE_MCS8                      BIT(20)
-#define RATE_MCS9                      BIT(21)
-#define RATE_MCS10                     BIT(22)
-#define RATE_MCS11                     BIT(23)
-#define RATE_MCS12                     BIT(24)
-#define RATE_MCS13                     BIT(25)
-#define RATE_MCS14                     BIT(26)
-#define RATE_MCS15                     BIT(27)
-
-/* ALL CCK Rate */
-#define        RATE_ALL_CCK                    (RATR_1M | RATR_2M | RATR_55M | \
-                                       RATR_11M)
-#define        RATE_ALL_OFDM_AG                (RATR_6M | RATR_9M | RATR_12M | \
-                                       RATR_18M | RATR_24M | \
-                                       RATR_36M | RATR_48M | RATR_54M)
-#define        RATE_ALL_OFDM_1SS               (RATR_MCS0 | RATR_MCS1 | RATR_MCS2 | \
-                                       RATR_MCS3 | RATR_MCS4 | RATR_MCS5 | \
-                                       RATR_MCS6 | RATR_MCS7)
-#define        RATE_ALL_OFDM_2SS               (RATR_MCS8 | RATR_MCS9 | RATR_MCS10 | \
-                                       RATR_MCS11 | RATR_MCS12 | RATR_MCS13 | \
-                                       RATR_MCS14 | RATR_MCS15)
-
-/* ----------------------------------------------------- */
-/*    8192C BW_OPMODE bits             (Offset 0x203, 8bit)     */
-/* ----------------------------------------------------- */
-#define        BW_OPMODE_20MHZ                 BIT(2)
-#define        BW_OPMODE_5G                    BIT(1)
-#define        BW_OPMODE_11J                   BIT(0)
-
-
-/* ----------------------------------------------------- */
-/*     8192C CAM Config Setting (offset 0x250, 1 byte)   */
-/* ----------------------------------------------------- */
-#define        CAM_VALID                       BIT(15)
-#define        CAM_NOTVALID                    0x0000
-#define        CAM_USEDK                       BIT(5)
-
-#define        CAM_NONE                        0x0
-#define        CAM_WEP40                       0x01
-#define        CAM_TKIP                        0x02
-#define        CAM_AES                         0x04
-#define        CAM_WEP104                      0x05
-#define        CAM_SMS4                        0x6
-
-
-#define        TOTAL_CAM_ENTRY                 32
-#define        HALF_CAM_ENTRY                  16
-
-#define        CAM_WRITE                       BIT(16)
-#define        CAM_READ                        0x00000000
-#define        CAM_POLLINIG                    BIT(31)
-
-/* 10. Power Save Control Registers     (Offset: 0x0260 - 0x02DF) */
-#define        WOW_PMEN                        BIT0 /* Power management Enable. */
-#define        WOW_WOMEN                       BIT1 /* WoW function on or off. */
-#define        WOW_MAGIC                       BIT2 /* Magic packet */
-#define        WOW_UWF                         BIT3 /* Unicast Wakeup frame. */
-
-/* 12. Host Interrupt Status Registers  (Offset: 0x0300 - 0x030F) */
-/* ----------------------------------------------------- */
-/*      8190 IMR/ISR bits      (offset 0xfd,  8bits) */
-/* ----------------------------------------------------- */
-#define        IMR8190_DISABLED                0x0
-#define        IMR_BCNDMAINT6                  BIT(31)
-#define        IMR_BCNDMAINT5                  BIT(30)
-#define        IMR_BCNDMAINT4                  BIT(29)
-#define        IMR_BCNDMAINT3                  BIT(28)
-#define        IMR_BCNDMAINT2                  BIT(27)
-#define        IMR_BCNDMAINT1                  BIT(26)
-#define        IMR_BCNDOK8                     BIT(25)
-#define        IMR_BCNDOK7                     BIT(24)
-#define        IMR_BCNDOK6                     BIT(23)
-#define        IMR_BCNDOK5                     BIT(22)
-#define        IMR_BCNDOK4                     BIT(21)
-#define        IMR_BCNDOK3                     BIT(20)
-#define        IMR_BCNDOK2                     BIT(19)
-#define        IMR_BCNDOK1                     BIT(18)
-#define        IMR_TIMEOUT2                    BIT(17)
-#define        IMR_TIMEOUT1                    BIT(16)
-#define        IMR_TXFOVW                      BIT(15)
-#define        IMR_PSTIMEOUT                   BIT(14)
-#define        IMR_BCNINT                      BIT(13)
-#define        IMR_RXFOVW                      BIT(12)
-#define        IMR_RDU                         BIT(11)
-#define        IMR_ATIMEND                     BIT(10)
-#define        IMR_BDOK                        BIT(9)
-#define        IMR_HIGHDOK                     BIT(8)
-#define        IMR_TBDOK                       BIT(7)
-#define        IMR_MGNTDOK                     BIT(6)
-#define        IMR_TBDER                       BIT(5)
-#define        IMR_BKDOK                       BIT(4)
-#define        IMR_BEDOK                       BIT(3)
-#define        IMR_VIDOK                       BIT(2)
-#define        IMR_VODOK                       BIT(1)
-#define        IMR_ROK                         BIT(0)
-
-#define        IMR_TXERR                       BIT(11)
-#define        IMR_RXERR                       BIT(10)
-#define        IMR_C2HCMD                      BIT(9)
-#define        IMR_CPWM                        BIT(8)
-#define        IMR_OCPINT                      BIT(1)
-#define        IMR_WLANOFF                     BIT(0)
-
-/* ----------------------------------------------------- */
-/* 8192C EFUSE */
-/* ----------------------------------------------------- */
-#define        HWSET_MAX_SIZE                  256
-#define EFUSE_MAX_SECTION              32
-#define EFUSE_REAL_CONTENT_LEN         512
-
-/* ----------------------------------------------------- */
-/*     8192C EEPROM/EFUSE share register definition. */
-/* ----------------------------------------------------- */
-#define        EEPROM_DEFAULT_TSSI                     0x0
-#define EEPROM_DEFAULT_CRYSTALCAP              0x0
-#define        EEPROM_DEFAULT_THERMALMETER             0x12
-
-#define        EEPROM_DEFAULT_TXPOWERLEVEL_2G          0x2C
-#define        EEPROM_DEFAULT_TXPOWERLEVEL_5G          0x22
-
-#define        EEPROM_DEFAULT_HT40_2SDIFF              0x0
-/* HT20<->40 default Tx Power Index Difference */
-#define EEPROM_DEFAULT_HT20_DIFF               2
-/* OFDM Tx Power index diff */
-#define        EEPROM_DEFAULT_LEGACYHTTXPOWERDIFF      0x4
-#define EEPROM_DEFAULT_HT40_PWRMAXOFFSET       0
-#define EEPROM_DEFAULT_HT20_PWRMAXOFFSET       0
-
-#define        EEPROM_CHANNEL_PLAN_FCC                 0x0
-#define        EEPROM_CHANNEL_PLAN_IC                  0x1
-#define        EEPROM_CHANNEL_PLAN_ETSI                0x2
-#define        EEPROM_CHANNEL_PLAN_SPAIN               0x3
-#define        EEPROM_CHANNEL_PLAN_FRANCE              0x4
-#define        EEPROM_CHANNEL_PLAN_MKK                 0x5
-#define        EEPROM_CHANNEL_PLAN_MKK1                0x6
-#define        EEPROM_CHANNEL_PLAN_ISRAEL              0x7
-#define        EEPROM_CHANNEL_PLAN_TELEC               0x8
-#define        EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN       0x9
-#define        EEPROM_CHANNEL_PLAN_WORLD_WIDE_13       0xA
-#define        EEPROM_CHANNEL_PLAN_NCC                 0xB
-#define        EEPROM_CHANNEL_PLAN_BY_HW_MASK          0x80
-
-#define EEPROM_CID_DEFAULT                     0x0
-#define EEPROM_CID_TOSHIBA                     0x4
-#define        EEPROM_CID_CCX                          0x10
-#define        EEPROM_CID_QMI                          0x0D
-#define EEPROM_CID_WHQL                                0xFE
-
-
-#define        RTL8192_EEPROM_ID                       0x8129
-#define        EEPROM_WAPI_SUPPORT                     0x78
-
-
-#define RTL8190_EEPROM_ID              0x8129  /* 0-1 */
-#define EEPROM_HPON                    0x02 /* LDO settings.2-5 */
-#define EEPROM_CLK                     0x06 /* Clock settings.6-7 */
-#define EEPROM_MAC_FUNCTION            0x08 /* SE Test mode.8 */
-
-#define EEPROM_VID                     0x28 /* SE Vendor ID.A-B */
-#define EEPROM_DID                     0x2A /* SE Device ID. C-D */
-#define EEPROM_SVID                    0x2C /* SE Vendor ID.E-F */
-#define EEPROM_SMID                    0x2E /* SE PCI Subsystem ID. 10-11 */
-
-#define EEPROM_MAC_ADDR                        0x16 /* SEMAC Address. 12-17 */
-#define EEPROM_MAC_ADDR_MAC0_92D       0x55
-#define EEPROM_MAC_ADDR_MAC1_92D       0x5B
-
-/* 2.4G band Tx power index setting */
-#define EEPROM_CCK_TX_PWR_INX_2G       0x61
-#define EEPROM_HT40_1S_TX_PWR_INX_2G   0x67
-#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_2G      0x6D
-#define EEPROM_HT20_TX_PWR_INX_DIFF_2G         0x70
-#define EEPROM_OFDM_TX_PWR_INX_DIFF_2G         0x73
-#define EEPROM_HT40_MAX_PWR_OFFSET_2G          0x76
-#define EEPROM_HT20_MAX_PWR_OFFSET_2G          0x79
-
-/*5GL channel 32-64 */
-#define EEPROM_HT40_1S_TX_PWR_INX_5GL          0x7C
-#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GL     0x82
-#define EEPROM_HT20_TX_PWR_INX_DIFF_5GL                0x85
-#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GL                0x88
-#define EEPROM_HT40_MAX_PWR_OFFSET_5GL         0x8B
-#define EEPROM_HT20_MAX_PWR_OFFSET_5GL         0x8E
-
-/* 5GM channel 100-140 */
-#define EEPROM_HT40_1S_TX_PWR_INX_5GM          0x91
-#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GM     0x97
-#define EEPROM_HT20_TX_PWR_INX_DIFF_5GM                0x9A
-#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GM                0x9D
-#define EEPROM_HT40_MAX_PWR_OFFSET_5GM         0xA0
-#define EEPROM_HT20_MAX_PWR_OFFSET_5GM         0xA3
-
-/* 5GH channel 149-165 */
-#define EEPROM_HT40_1S_TX_PWR_INX_5GH          0xA6
-#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GH     0xAC
-#define EEPROM_HT20_TX_PWR_INX_DIFF_5GH                0xAF
-#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GH                0xB2
-#define EEPROM_HT40_MAX_PWR_OFFSET_5GH         0xB5
-#define EEPROM_HT20_MAX_PWR_OFFSET_5GH         0xB8
-
-/* Map of supported channels. */
-#define EEPROM_CHANNEL_PLAN                    0xBB
-#define EEPROM_IQK_DELTA                       0xBC
-#define EEPROM_LCK_DELTA                       0xBC
-#define EEPROM_XTAL_K                          0xBD    /* [7:5] */
-#define EEPROM_TSSI_A_5G                       0xBE
-#define EEPROM_TSSI_B_5G                       0xBF
-#define EEPROM_TSSI_AB_5G                      0xC0
-#define EEPROM_THERMAL_METER                   0xC3    /* [4:0] */
-#define EEPROM_RF_OPT1                         0xC4
-#define EEPROM_RF_OPT2                         0xC5
-#define EEPROM_RF_OPT3                         0xC6
-#define EEPROM_RF_OPT4                         0xC7
-#define EEPROM_RF_OPT5                         0xC8
-#define EEPROM_RF_OPT6                         0xC9
-#define EEPROM_VERSION                         0xCA
-#define EEPROM_CUSTOMER_ID                     0xCB
-#define EEPROM_RF_OPT7                         0xCC
-
-#define EEPROM_DEF_PART_NO                     0x3FD    /* Byte */
-#define EEPROME_CHIP_VERSION_L                 0x3FF
-#define EEPROME_CHIP_VERSION_H                 0x3FE
-
-/*
- * Current IOREG MAP
- * 0x0000h ~ 0x00FFh   System Configuration (256 Bytes)
- * 0x0100h ~ 0x01FFh   MACTOP General Configuration (256 Bytes)
- * 0x0200h ~ 0x027Fh   TXDMA Configuration (128 Bytes)
- * 0x0280h ~ 0x02FFh   RXDMA Configuration (128 Bytes)
- * 0x0300h ~ 0x03FFh   PCIE EMAC Reserved Region (256 Bytes)
- * 0x0400h ~ 0x04FFh   Protocol Configuration (256 Bytes)
- * 0x0500h ~ 0x05FFh   EDCA Configuration (256 Bytes)
- * 0x0600h ~ 0x07FFh   WMAC Configuration (512 Bytes)
- * 0x2000h ~ 0x3FFFh   8051 FW Download Region (8196 Bytes)
- */
-
-/* ----------------------------------------------------- */
-/* 8192C (RCR) (Offset 0x608, 32 bits) */
-/* ----------------------------------------------------- */
-#define        RCR_APPFCS                              BIT(31)
-#define        RCR_APP_MIC                             BIT(30)
-#define        RCR_APP_ICV                             BIT(29)
-#define        RCR_APP_PHYST_RXFF                      BIT(28)
-#define        RCR_APP_BA_SSN                          BIT(27)
-#define        RCR_ENMBID                              BIT(24)
-#define        RCR_LSIGEN                              BIT(23)
-#define        RCR_MFBEN                               BIT(22)
-#define        RCR_HTC_LOC_CTRL                        BIT(14)
-#define        RCR_AMF                                 BIT(13)
-#define        RCR_ACF                                 BIT(12)
-#define        RCR_ADF                                 BIT(11)
-#define        RCR_AICV                                BIT(9)
-#define        RCR_ACRC32                              BIT(8)
-#define        RCR_CBSSID_BCN                          BIT(7)
-#define        RCR_CBSSID_DATA                         BIT(6)
-#define        RCR_APWRMGT                             BIT(5)
-#define        RCR_ADD3                                BIT(4)
-#define        RCR_AB                                  BIT(3)
-#define        RCR_AM                                  BIT(2)
-#define        RCR_APM                                 BIT(1)
-#define        RCR_AAP                                 BIT(0)
-#define        RCR_MXDMA_OFFSET                        8
-#define        RCR_FIFO_OFFSET                         13
-
-/* ----------------------------------------------------- */
-/*       8192C Regsiter Bit and Content definition      */
-/* ----------------------------------------------------- */
-/* ----------------------------------------------------- */
-/*     0x0000h ~ 0x00FFh       System Configuration */
-/* ----------------------------------------------------- */
-
-/* SPS0_CTRL */
-#define SW18_FPWM                              BIT(3)
-
-
-/* SYS_ISO_CTRL */
-#define ISO_MD2PP                              BIT(0)
-#define ISO_UA2USB                             BIT(1)
-#define ISO_UD2CORE                            BIT(2)
-#define ISO_PA2PCIE                            BIT(3)
-#define ISO_PD2CORE                            BIT(4)
-#define ISO_IP2MAC                             BIT(5)
-#define ISO_DIOP                               BIT(6)
-#define ISO_DIOE                               BIT(7)
-#define ISO_EB2CORE                            BIT(8)
-#define ISO_DIOR                               BIT(9)
-
-#define PWC_EV25V                              BIT(14)
-#define PWC_EV12V                              BIT(15)
-
-
-/* SYS_FUNC_EN */
-#define FEN_BBRSTB                             BIT(0)
-#define FEN_BB_GLB_RSTN                                BIT(1)
-#define FEN_USBA                               BIT(2)
-#define FEN_UPLL                               BIT(3)
-#define FEN_USBD                               BIT(4)
-#define FEN_DIO_PCIE                           BIT(5)
-#define FEN_PCIEA                              BIT(6)
-#define FEN_PPLL                               BIT(7)
-#define FEN_PCIED                              BIT(8)
-#define FEN_DIOE                               BIT(9)
-#define FEN_CPUEN                              BIT(10)
-#define FEN_DCORE                              BIT(11)
-#define FEN_ELDR                               BIT(12)
-#define FEN_DIO_RF                             BIT(13)
-#define FEN_HWPDN                              BIT(14)
-#define FEN_MREGEN                             BIT(15)
-
-/* APS_FSMCO */
-#define PFM_LDALL                              BIT(0)
-#define PFM_ALDN                               BIT(1)
-#define PFM_LDKP                               BIT(2)
-#define PFM_WOWL                               BIT(3)
-#define ENPDN                                  BIT(4)
-#define PDN_PL                                 BIT(5)
-#define APFM_ONMAC                             BIT(8)
-#define APFM_OFF                               BIT(9)
-#define APFM_RSM                               BIT(10)
-#define AFSM_HSUS                              BIT(11)
-#define AFSM_PCIE                              BIT(12)
-#define APDM_MAC                               BIT(13)
-#define APDM_HOST                              BIT(14)
-#define APDM_HPDN                              BIT(15)
-#define RDY_MACON                              BIT(16)
-#define SUS_HOST                               BIT(17)
-#define ROP_ALD                                        BIT(20)
-#define ROP_PWR                                        BIT(21)
-#define ROP_SPS                                        BIT(22)
-#define SOP_MRST                               BIT(25)
-#define SOP_FUSE                               BIT(26)
-#define SOP_ABG                                        BIT(27)
-#define SOP_AMB                                        BIT(28)
-#define SOP_RCK                                        BIT(29)
-#define SOP_A8M                                        BIT(30)
-#define XOP_BTCK                               BIT(31)
-
-/* SYS_CLKR */
-#define ANAD16V_EN                             BIT(0)
-#define ANA8M                                  BIT(1)
-#define MACSLP                                 BIT(4)
-#define LOADER_CLK_EN                          BIT(5)
-#define _80M_SSC_DIS                           BIT(7)
-#define _80M_SSC_EN_HO                         BIT(8)
-#define PHY_SSC_RSTB                           BIT(9)
-#define SEC_CLK_EN                             BIT(10)
-#define MAC_CLK_EN                             BIT(11)
-#define SYS_CLK_EN                             BIT(12)
-#define RING_CLK_EN                            BIT(13)
-
-
-/* 9346CR */
-#define        BOOT_FROM_EEPROM                        BIT(4)
-#define        EEPROM_EN                               BIT(5)
-
-/* AFE_MISC */
-#define AFE_BGEN                               BIT(0)
-#define AFE_MBEN                               BIT(1)
-#define MAC_ID_EN                              BIT(7)
-
-/* RSV_CTRL */
-#define WLOCK_ALL                              BIT(0)
-#define WLOCK_00                               BIT(1)
-#define WLOCK_04                               BIT(2)
-#define WLOCK_08                               BIT(3)
-#define WLOCK_40                               BIT(4)
-#define R_DIS_PRST_0                           BIT(5)
-#define R_DIS_PRST_1                           BIT(6)
-#define LOCK_ALL_EN                            BIT(7)
-
-/* RF_CTRL */
-#define RF_EN                                  BIT(0)
-#define RF_RSTB                                        BIT(1)
-#define RF_SDMRSTB                             BIT(2)
-
-
-
-/* LDOA15_CTRL */
-#define LDA15_EN                               BIT(0)
-#define LDA15_STBY                             BIT(1)
-#define LDA15_OBUF                             BIT(2)
-#define LDA15_REG_VOS                          BIT(3)
-#define _LDA15_VOADJ(x)                                (((x) & 0x7) << 4)
-
-
-
-/* LDOV12D_CTRL */
-#define LDV12_EN                               BIT(0)
-#define LDV12_SDBY                             BIT(1)
-#define LPLDO_HSM                              BIT(2)
-#define LPLDO_LSM_DIS                          BIT(3)
-#define _LDV12_VADJ(x)                         (((x) & 0xF) << 4)
-
-
-/* AFE_XTAL_CTRL */
-#define XTAL_EN                                        BIT(0)
-#define XTAL_BSEL                              BIT(1)
-#define _XTAL_BOSC(x)                          (((x) & 0x3) << 2)
-#define _XTAL_CADJ(x)                          (((x) & 0xF) << 4)
-#define XTAL_GATE_USB                          BIT(8)
-#define _XTAL_USB_DRV(x)                       (((x) & 0x3) << 9)
-#define XTAL_GATE_AFE                          BIT(11)
-#define _XTAL_AFE_DRV(x)                       (((x) & 0x3) << 12)
-#define XTAL_RF_GATE                           BIT(14)
-#define _XTAL_RF_DRV(x)                                (((x) & 0x3) << 15)
-#define XTAL_GATE_DIG                          BIT(17)
-#define _XTAL_DIG_DRV(x)                       (((x) & 0x3) << 18)
-#define XTAL_BT_GATE                           BIT(20)
-#define _XTAL_BT_DRV(x)                                (((x) & 0x3) << 21)
-#define _XTAL_GPIO(x)                          (((x) & 0x7) << 23)
-
-
-#define CKDLY_AFE                              BIT(26)
-#define CKDLY_USB                              BIT(27)
-#define CKDLY_DIG                              BIT(28)
-#define CKDLY_BT                               BIT(29)
-
-
-/* AFE_PLL_CTRL */
-#define APLL_EN                                        BIT(0)
-#define APLL_320_EN                            BIT(1)
-#define APLL_FREF_SEL                          BIT(2)
-#define APLL_EDGE_SEL                          BIT(3)
-#define APLL_WDOGB                             BIT(4)
-#define APLL_LPFEN                             BIT(5)
-
-#define APLL_REF_CLK_13MHZ                     0x1
-#define APLL_REF_CLK_19_2MHZ                   0x2
-#define APLL_REF_CLK_20MHZ                     0x3
-#define APLL_REF_CLK_25MHZ                     0x4
-#define APLL_REF_CLK_26MHZ                     0x5
-#define APLL_REF_CLK_38_4MHZ                   0x6
-#define APLL_REF_CLK_40MHZ                     0x7
-
-#define APLL_320EN                             BIT(14)
-#define APLL_80EN                              BIT(15)
-#define APLL_1MEN                              BIT(24)
-
-
-/* EFUSE_CTRL */
-#define ALD_EN                                 BIT(18)
-#define EF_PD                                  BIT(19)
-#define EF_FLAG                                        BIT(31)
-
-/* EFUSE_TEST  */
-#define EF_TRPT                                        BIT(7)
-#define LDOE25_EN                              BIT(31)
-
-/* MCUFWDL  */
-#define MCUFWDL_EN                             BIT(0)
-#define MCUFWDL_RDY                            BIT(1)
-#define FWDL_CHKSUM_RPT                                BIT(2)
-#define MACINI_RDY                             BIT(3)
-#define BBINI_RDY                              BIT(4)
-#define RFINI_RDY                              BIT(5)
-#define WINTINI_RDY                            BIT(6)
-#define MAC1_WINTINI_RDY                       BIT(11)
-#define CPRST                                  BIT(23)
-
-/*  REG_SYS_CFG */
-#define XCLK_VLD                               BIT(0)
-#define ACLK_VLD                               BIT(1)
-#define UCLK_VLD                               BIT(2)
-#define PCLK_VLD                               BIT(3)
-#define PCIRSTB                                        BIT(4)
-#define V15_VLD                                        BIT(5)
-#define TRP_B15V_EN                            BIT(7)
-#define SIC_IDLE                               BIT(8)
-#define BD_MAC2                                        BIT(9)
-#define BD_MAC1                                        BIT(10)
-#define IC_MACPHY_MODE                         BIT(11)
-#define PAD_HWPD_IDN                           BIT(22)
-#define TRP_VAUX_EN                            BIT(23)
-#define TRP_BT_EN                              BIT(24)
-#define BD_PKG_SEL                             BIT(25)
-#define BD_HCI_SEL                             BIT(26)
-#define TYPE_ID                                        BIT(27)
-
-/* LLT_INIT */
-#define _LLT_NO_ACTIVE                         0x0
-#define _LLT_WRITE_ACCESS                      0x1
-#define _LLT_READ_ACCESS                       0x2
-
-#define _LLT_INIT_DATA(x)                      ((x) & 0xFF)
-#define _LLT_INIT_ADDR(x)                      (((x) & 0xFF) << 8)
-#define _LLT_OP(x)                             (((x) & 0x3) << 30)
-#define _LLT_OP_VALUE(x)                       (((x) >> 30) & 0x3)
-
-
-/* ----------------------------------------------------- */
-/*     0x0400h ~ 0x047Fh       Protocol Configuration   */
-/* ----------------------------------------------------- */
-#define        RETRY_LIMIT_SHORT_SHIFT                 8
-#define        RETRY_LIMIT_LONG_SHIFT                  0
-
-
-/* ----------------------------------------------------- */
-/*     0x0500h ~ 0x05FFh       EDCA Configuration */
-/* ----------------------------------------------------- */
-/* EDCA setting */
-#define AC_PARAM_TXOP_LIMIT_OFFSET             16
-#define AC_PARAM_ECW_MAX_OFFSET                        12
-#define AC_PARAM_ECW_MIN_OFFSET                        8
-#define AC_PARAM_AIFS_OFFSET                   0
-
-/* 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 */
-/* ----------------------------------------------------- */
-
-/* TCR */
-#define TSFRST                                 BIT(0)
-#define DIS_GCLK                               BIT(1)
-#define PAD_SEL                                        BIT(2)
-#define PWR_ST                                 BIT(6)
-#define PWRBIT_OW_EN                           BIT(7)
-#define ACRC                                   BIT(8)
-#define CFENDFORM                              BIT(9)
-#define ICV                                    BIT(10)
-
-/* SECCFG */
-#define        SCR_TXUSEDK                             BIT(0)
-#define        SCR_RXUSEDK                             BIT(1)
-#define        SCR_TXENCENABLE                         BIT(2)
-#define        SCR_RXENCENABLE                         BIT(3)
-#define        SCR_SKBYA2                              BIT(4)
-#define        SCR_NOSKMC                              BIT(5)
-#define SCR_TXBCUSEDK                          BIT(6)
-#define SCR_RXBCUSEDK                          BIT(7)
-
-/* General definitions */
-#define LAST_ENTRY_OF_TX_PKT_BUFFER            255
-#define LAST_ENTRY_OF_TX_PKT_BUFFER_DUAL_MAC   127
-
-#define POLLING_LLT_THRESHOLD                  20
-#define POLLING_READY_TIMEOUT_COUNT            1000
-
-/* Min Spacing related settings. */
-#define        MAX_MSS_DENSITY_2T                      0x13
-#define        MAX_MSS_DENSITY_1T                      0x0A
-
-
-/* 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 defintion for BB/RF R/W */
-
-/* 3. Page8(0x800) */
-#define        RFPGA0_RFMOD                            0x800
-
-#define        RFPGA0_TXINFO                           0x804
-#define        RFPGA0_PSDFUNCTION                      0x808
-
-#define        RFPGA0_TXGAINSTAGE                      0x80c
-
-#define        RFPGA0_RFTIMING1                        0x810
-#define        RFPGA0_RFTIMING2                        0x814
-
-#define        RFPGA0_XA_HSSIPARAMETER1                0x820
-#define        RFPGA0_XA_HSSIPARAMETER2                0x824
-#define        RFPGA0_XB_HSSIPARAMETER1                0x828
-#define        RFPGA0_XB_HSSIPARAMETER2                0x82c
-
-#define        RFPGA0_XA_LSSIPARAMETER                 0x840
-#define        RFPGA0_XB_LSSIPARAMETER                 0x844
-
-#define        RFPGA0_RFWAKEUPPARAMETER                0x850
-#define        RFPGA0_RFSLEEPUPPARAMETER               0x854
-
-#define        RFPGA0_XAB_SWITCHCONTROL                0x858
-#define        RFPGA0_XCD_SWITCHCONTROL                0x85c
-
-#define        RFPGA0_XA_RFINTERFACEOE                 0x860
-#define        RFPGA0_XB_RFINTERFACEOE                 0x864
-
-#define        RFPGA0_XAB_RFINTERFACESW                0x870
-#define        RFPGA0_XCD_RFINTERFACESW                0x874
-
-#define        RFPGA0_XAB_RFPARAMETER                  0x878
-#define        RFPGA0_XCD_RFPARAMETER                  0x87c
-
-#define        RFPGA0_ANALOGPARAMETER1                 0x880
-#define        RFPGA0_ANALOGPARAMETER2                 0x884
-#define        RFPGA0_ANALOGPARAMETER3                 0x888
-#define        RFPGA0_ADDALLOCKEN                      0x888
-#define        RFPGA0_ANALOGPARAMETER4                 0x88c
-
-#define        RFPGA0_XA_LSSIREADBACK                  0x8a0
-#define        RFPGA0_XB_LSSIREADBACK                  0x8a4
-#define        RFPGA0_XC_LSSIREADBACK                  0x8a8
-#define        RFPGA0_XD_LSSIREADBACK                  0x8ac
-
-#define        RFPGA0_PSDREPORT                        0x8b4
-#define        TRANSCEIVERA_HSPI_READBACK              0x8b8
-#define        TRANSCEIVERB_HSPI_READBACK              0x8bc
-#define        RFPGA0_XAB_RFINTERFACERB                0x8e0
-#define        RFPGA0_XCD_RFINTERFACERB                0x8e4
-
-/* 4. Page9(0x900) */
-#define        RFPGA1_RFMOD                            0x900
-
-#define        RFPGA1_TXBLOCK                          0x904
-#define        RFPGA1_DEBUGSELECT                      0x908
-#define        RFPGA1_TXINFO                           0x90c
-
-/* 5. PageA(0xA00)  */
-#define        RCCK0_SYSTEM                            0xa00
-
-#define        RCCK0_AFESSTTING                        0xa04
-#define        RCCK0_CCA                               0xa08
-
-#define        RCCK0_RXAGC1                            0xa0c
-#define        RCCK0_RXAGC2                            0xa10
-
-#define        RCCK0_RXHP                              0xa14
-
-#define        RCCK0_DSPPARAMETER1                     0xa18
-#define        RCCK0_DSPPARAMETER2                     0xa1c
-
-#define        RCCK0_TXFILTER1                         0xa20
-#define        RCCK0_TXFILTER2                         0xa24
-#define        RCCK0_DEBUGPORT                         0xa28
-#define        RCCK0_FALSEALARMREPORT                  0xa2c
-#define        RCCK0_TRSSIREPORT                       0xa50
-#define        RCCK0_RXREPORT                          0xa54
-#define        RCCK0_FACOUNTERLOWER                    0xa5c
-#define        RCCK0_FACOUNTERUPPER                    0xa58
-
-/* 6. PageC(0xC00) */
-#define        ROFDM0_LSTF                             0xc00
-
-#define        ROFDM0_TRXPATHENABLE                    0xc04
-#define        ROFDM0_TRMUXPAR                         0xc08
-#define        ROFDM0_TRSWISOLATION                    0xc0c
-
-#define        ROFDM0_XARXAFE                          0xc10
-#define        ROFDM0_XARXIQIMBALANCE                  0xc14
-#define        ROFDM0_XBRXAFE                          0xc18
-#define        ROFDM0_XBRXIQIMBALANCE                  0xc1c
-#define        ROFDM0_XCRXAFE                          0xc20
-#define        ROFDM0_XCRXIQIMBALANCE                  0xc24
-#define        ROFDM0_XDRXAFE                          0xc28
-#define        ROFDM0_XDRXIQIMBALANCE                  0xc2c
-
-#define        ROFDM0_RXDETECTOR1                      0xc30
-#define        ROFDM0_RXDETECTOR2                      0xc34
-#define        ROFDM0_RXDETECTOR3                      0xc38
-#define        ROFDM0_RXDETECTOR4                      0xc3c
-
-#define        ROFDM0_RXDSP                            0xc40
-#define        ROFDM0_CFOANDDAGC                       0xc44
-#define        ROFDM0_CCADROPTHRESHOLD                 0xc48
-#define        ROFDM0_ECCATHRESHOLD                    0xc4c
-
-#define        ROFDM0_XAAGCCORE1                       0xc50
-#define        ROFDM0_XAAGCCORE2                       0xc54
-#define        ROFDM0_XBAGCCORE1                       0xc58
-#define        ROFDM0_XBAGCCORE2                       0xc5c
-#define        ROFDM0_XCAGCCORE1                       0xc60
-#define        ROFDM0_XCAGCCORE2                       0xc64
-#define        ROFDM0_XDAGCCORE1                       0xc68
-#define        ROFDM0_XDAGCCORE2                       0xc6c
-
-#define        ROFDM0_AGCPARAMETER1                    0xc70
-#define        ROFDM0_AGCPARAMETER2                    0xc74
-#define        ROFDM0_AGCRSSITABLE                     0xc78
-#define        ROFDM0_HTSTFAGC                         0xc7c
-
-#define        ROFDM0_XATXIQIMBALANCE                  0xc80
-#define        ROFDM0_XATXAFE                          0xc84
-#define        ROFDM0_XBTXIQIMBALANCE                  0xc88
-#define        ROFDM0_XBTXAFE                          0xc8c
-#define        ROFDM0_XCTXIQIMBALANCE                  0xc90
-#define        ROFDM0_XCTXAFE                          0xc94
-#define        ROFDM0_XDTXIQIMBALANCE                  0xc98
-#define        ROFDM0_XDTXAFE                          0xc9c
-
-#define        ROFDM0_RXHPPARAMETER                    0xce0
-#define        ROFDM0_TXPSEUDONOISEWGT                 0xce4
-#define        ROFDM0_FRAMESYNC                        0xcf0
-#define        ROFDM0_DFSREPORT                        0xcf4
-#define        ROFDM0_TXCOEFF1                         0xca4
-#define        ROFDM0_TXCOEFF2                         0xca8
-#define        ROFDM0_TXCOEFF3                         0xcac
-#define        ROFDM0_TXCOEFF4                         0xcb0
-#define        ROFDM0_TXCOEFF5                         0xcb4
-#define        ROFDM0_TXCOEFF6                         0xcb8
-
-/* 7. PageD(0xD00) */
-#define        ROFDM1_LSTF                             0xd00
-#define        ROFDM1_TRXPATHENABLE                    0xd04
-
-#define        ROFDM1_CFO                              0xd08
-#define        ROFDM1_CSI1                             0xd10
-#define        ROFDM1_SBD                              0xd14
-#define        ROFDM1_CSI2                             0xd18
-#define        ROFDM1_CFOTRACKING                      0xd2c
-#define        ROFDM1_TRXMESAURE1                      0xd34
-#define        ROFDM1_INTFDET                          0xd3c
-#define        ROFDM1_PSEUDONOISESTATEAB               0xd50
-#define        ROFDM1_PSEUDONOISESTATECD               0xd54
-#define        ROFDM1_RXPSEUDONOISEWGT                 0xd58
-
-#define        ROFDM_PHYCOUNTER1                       0xda0
-#define        ROFDM_PHYCOUNTER2                       0xda4
-#define        ROFDM_PHYCOUNTER3                       0xda8
-
-#define        ROFDM_SHORTCFOAB                        0xdac
-#define        ROFDM_SHORTCFOCD                        0xdb0
-#define        ROFDM_LONGCFOAB                         0xdb4
-#define        ROFDM_LONGCFOCD                         0xdb8
-#define        ROFDM_TAILCFOAB                         0xdbc
-#define        ROFDM_TAILCFOCD                         0xdc0
-#define        ROFDM_PWMEASURE1                        0xdc4
-#define        ROFDM_PWMEASURE2                        0xdc8
-#define        ROFDM_BWREPORT                          0xdcc
-#define        ROFDM_AGCREPORT                         0xdd0
-#define        ROFDM_RXSNR                             0xdd4
-#define        ROFDM_RXEVMCSI                          0xdd8
-#define        ROFDM_SIGREPORT                         0xddc
-
-/* 8. PageE(0xE00) */
-#define        RTXAGC_A_RATE18_06                      0xe00
-#define        RTXAGC_A_RATE54_24                      0xe04
-#define        RTXAGC_A_CCK1_MCS32                     0xe08
-#define        RTXAGC_A_MCS03_MCS00                    0xe10
-#define        RTXAGC_A_MCS07_MCS04                    0xe14
-#define        RTXAGC_A_MCS11_MCS08                    0xe18
-#define        RTXAGC_A_MCS15_MCS12                    0xe1c
-
-#define        RTXAGC_B_RATE18_06                      0x830
-#define        RTXAGC_B_RATE54_24                      0x834
-#define        RTXAGC_B_CCK1_55_MCS32                  0x838
-#define        RTXAGC_B_MCS03_MCS00                    0x83c
-#define        RTXAGC_B_MCS07_MCS04                    0x848
-#define        RTXAGC_B_MCS11_MCS08                    0x84c
-#define        RTXAGC_B_MCS15_MCS12                    0x868
-#define        RTXAGC_B_CCK11_A_CCK2_11                0x86c
-
-/* RL6052 Register definition */
-#define        RF_AC                                   0x00
-
-#define        RF_IQADJ_G1                             0x01
-#define        RF_IQADJ_G2                             0x02
-#define        RF_POW_TRSW                             0x05
-
-#define        RF_GAIN_RX                              0x06
-#define        RF_GAIN_TX                              0x07
-
-#define        RF_TXM_IDAC                             0x08
-#define        RF_BS_IQGEN                             0x0F
-
-#define        RF_MODE1                                0x10
-#define        RF_MODE2                                0x11
-
-#define        RF_RX_AGC_HP                            0x12
-#define        RF_TX_AGC                               0x13
-#define        RF_BIAS                                 0x14
-#define        RF_IPA                                  0x15
-#define        RF_POW_ABILITY                          0x17
-#define        RF_MODE_AG                              0x18
-#define        rfchannel                               0x18
-#define        RF_CHNLBW                               0x18
-#define        RF_TOP                                  0x19
-
-#define        RF_RX_G1                                0x1A
-#define        RF_RX_G2                                0x1B
-
-#define        RF_RX_BB2                               0x1C
-#define        RF_RX_BB1                               0x1D
-
-#define        RF_RCK1                                 0x1E
-#define        RF_RCK2                                 0x1F
-
-#define        RF_TX_G1                                0x20
-#define        RF_TX_G2                                0x21
-#define        RF_TX_G3                                0x22
-
-#define        RF_TX_BB1                               0x23
-
-#define        RF_T_METER                              0x42
-
-#define        RF_SYN_G1                               0x25
-#define        RF_SYN_G2                               0x26
-#define        RF_SYN_G3                               0x27
-#define        RF_SYN_G4                               0x28
-#define        RF_SYN_G5                               0x29
-#define        RF_SYN_G6                               0x2A
-#define        RF_SYN_G7                               0x2B
-#define        RF_SYN_G8                               0x2C
-
-#define        RF_RCK_OS                               0x30
-
-#define        RF_TXPA_G1                              0x31
-#define        RF_TXPA_G2                              0x32
-#define        RF_TXPA_G3                              0x33
-
-/* Bit Mask */
-
-/* 2. Page8(0x800) */
-#define        BRFMOD                                  0x1
-#define        BCCKTXSC                                0x30
-#define        BCCKEN                                  0x1000000
-#define        BOFDMEN                                 0x2000000
-
-#define        B3WIREDATALENGTH                        0x800
-#define        B3WIREADDRESSLENGTH                     0x400
-
-#define        BRFSI_RFENV                             0x10
-
-#define        BLSSIREADADDRESS                        0x7f800000
-#define        BLSSIREADEDGE                           0x80000000
-#define        BLSSIREADBACKDATA                       0xfffff
-/* 4. PageA(0xA00) */
-#define BCCKSIDEBAND                           0x10
-
-/* Other Definition */
-#define        BBYTE0                                  0x1
-#define        BBYTE1                                  0x2
-#define        BBYTE2                                  0x4
-#define        BBYTE3                                  0x8
-#define        BWORD0                                  0x3
-#define        BWORD1                                  0xc
-#define        BDWORD                                  0xf
-
-#endif
index 83787fd..eb7d8b0 100644 (file)
 /* Copyright(c) 2009-2012  Realtek Corporation.*/
 
 #include "../wifi.h"
-#include "reg.h"
-#include "def.h"
+#include "../rtl8192d/reg.h"
+#include "../rtl8192d/def.h"
+#include "../rtl8192d/phy_common.h"
 #include "phy.h"
 #include "rf.h"
 #include "dm.h"
 #include "hw.h"
 
-void rtl92d_phy_rf6052_set_bandwidth(struct ieee80211_hw *hw, u8 bandwidth)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       u8 rfpath;
-
-       switch (bandwidth) {
-       case HT_CHANNEL_WIDTH_20:
-               for (rfpath = 0; rfpath < rtlphy->num_total_rfpath; rfpath++) {
-                       rtlphy->rfreg_chnlval[rfpath] = ((rtlphy->rfreg_chnlval
-                                       [rfpath] & 0xfffff3ff) | 0x0400);
-                       rtl_set_rfreg(hw, rfpath, RF_CHNLBW, BIT(10) |
-                                     BIT(11), 0x01);
-
-                       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD,
-                               "20M RF 0x18 = 0x%x\n",
-                               rtlphy->rfreg_chnlval[rfpath]);
-               }
-
-               break;
-       case HT_CHANNEL_WIDTH_20_40:
-               for (rfpath = 0; rfpath < rtlphy->num_total_rfpath; rfpath++) {
-                       rtlphy->rfreg_chnlval[rfpath] =
-                           ((rtlphy->rfreg_chnlval[rfpath] & 0xfffff3ff));
-                       rtl_set_rfreg(hw, rfpath, RF_CHNLBW, BIT(10) | BIT(11),
-                                     0x00);
-                       rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD,
-                               "40M RF 0x18 = 0x%x\n",
-                               rtlphy->rfreg_chnlval[rfpath]);
-               }
-               break;
-       default:
-               pr_err("unknown bandwidth: %#X\n", bandwidth);
-               break;
-       }
-}
-
-void rtl92d_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
-                                      u8 *ppowerlevel)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       u32 tx_agc[2] = {0, 0}, tmpval;
-       bool turbo_scanoff = false;
-       u8 idx1, idx2;
-       u8 *ptr;
-
-       if (rtlefuse->eeprom_regulatory != 0)
-               turbo_scanoff = true;
-       if (mac->act_scanning) {
-               tx_agc[RF90_PATH_A] = 0x3f3f3f3f;
-               tx_agc[RF90_PATH_B] = 0x3f3f3f3f;
-               if (turbo_scanoff) {
-                       for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
-                               tx_agc[idx1] = ppowerlevel[idx1] |
-                                   (ppowerlevel[idx1] << 8) |
-                                   (ppowerlevel[idx1] << 16) |
-                                   (ppowerlevel[idx1] << 24);
-                       }
-               }
-       } else {
-               for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
-                       tx_agc[idx1] = ppowerlevel[idx1] |
-                           (ppowerlevel[idx1] << 8) |
-                           (ppowerlevel[idx1] << 16) |
-                           (ppowerlevel[idx1] << 24);
-               }
-               if (rtlefuse->eeprom_regulatory == 0) {
-                       tmpval = (rtlphy->mcs_offset[0][6]) +
-                           (rtlphy->mcs_offset[0][7] << 8);
-                       tx_agc[RF90_PATH_A] += tmpval;
-                       tmpval = (rtlphy->mcs_offset[0][14]) +
-                           (rtlphy->mcs_offset[0][15] << 24);
-                       tx_agc[RF90_PATH_B] += tmpval;
-               }
-       }
-
-       for (idx1 = RF90_PATH_A; idx1 <= RF90_PATH_B; idx1++) {
-               ptr = (u8 *) (&(tx_agc[idx1]));
-               for (idx2 = 0; idx2 < 4; idx2++) {
-                       if (*ptr > RF6052_MAX_TX_PWR)
-                               *ptr = RF6052_MAX_TX_PWR;
-                       ptr++;
-               }
-       }
-
-       tmpval = tx_agc[RF90_PATH_A] & 0xff;
-       rtl_set_bbreg(hw, RTXAGC_A_CCK1_MCS32, MASKBYTE1, tmpval);
-       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-               "CCK PWR 1M (rf-A) = 0x%x (reg 0x%x)\n",
-               tmpval, RTXAGC_A_CCK1_MCS32);
-       tmpval = tx_agc[RF90_PATH_A] >> 8;
-       rtl_set_bbreg(hw, RTXAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
-       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-               "CCK PWR 2~11M (rf-A) = 0x%x (reg 0x%x)\n",
-               tmpval, RTXAGC_B_CCK11_A_CCK2_11);
-       tmpval = tx_agc[RF90_PATH_B] >> 24;
-       rtl_set_bbreg(hw, RTXAGC_B_CCK11_A_CCK2_11, MASKBYTE0, tmpval);
-       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-               "CCK PWR 11M (rf-B) = 0x%x (reg 0x%x)\n",
-               tmpval, RTXAGC_B_CCK11_A_CCK2_11);
-       tmpval = tx_agc[RF90_PATH_B] & 0x00ffffff;
-       rtl_set_bbreg(hw, RTXAGC_B_CCK1_55_MCS32, 0xffffff00, tmpval);
-       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-               "CCK PWR 1~5.5M (rf-B) = 0x%x (reg 0x%x)\n",
-               tmpval, RTXAGC_B_CCK1_55_MCS32);
-}
-
-static void _rtl92d_phy_get_power_base(struct ieee80211_hw *hw,
-                                      u8 *ppowerlevel, u8 channel,
-                                      u32 *ofdmbase, u32 *mcsbase)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       u32 powerbase0, powerbase1;
-       u8 legacy_pwrdiff, ht20_pwrdiff;
-       u8 i, powerlevel[2];
-
-       for (i = 0; i < 2; i++) {
-               powerlevel[i] = ppowerlevel[i];
-               legacy_pwrdiff = rtlefuse->txpwr_legacyhtdiff[i][channel - 1];
-               powerbase0 = powerlevel[i] + legacy_pwrdiff;
-               powerbase0 = (powerbase0 << 24) | (powerbase0 << 16) |
-                   (powerbase0 << 8) | powerbase0;
-               *(ofdmbase + i) = powerbase0;
-               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-                       " [OFDM power base index rf(%c) = 0x%x]\n",
-                       i == 0 ? 'A' : 'B', *(ofdmbase + i));
-       }
-
-       for (i = 0; i < 2; i++) {
-               if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20) {
-                       ht20_pwrdiff = rtlefuse->txpwr_ht20diff[i][channel - 1];
-                       powerlevel[i] += ht20_pwrdiff;
-               }
-               powerbase1 = powerlevel[i];
-               powerbase1 = (powerbase1 << 24) | (powerbase1 << 16) |
-                            (powerbase1 << 8) | powerbase1;
-               *(mcsbase + i) = powerbase1;
-               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-                       " [MCS power base index rf(%c) = 0x%x]\n",
-                       i == 0 ? 'A' : 'B', *(mcsbase + i));
-       }
-}
-
-static u8 _rtl92d_phy_get_chnlgroup_bypg(u8 chnlindex)
-{
-       u8 group;
-       u8 channel_info[59] = {
-               1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
-               36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
-               60, 62, 64, 100, 102, 104, 106, 108, 110, 112,
-               114, 116, 118, 120, 122, 124, 126, 128, 130, 132,
-               134, 136, 138, 140, 149, 151, 153, 155, 157, 159,
-               161, 163, 165
-       };
-
-       if (channel_info[chnlindex] <= 3)       /* Chanel 1-3 */
-               group = 0;
-       else if (channel_info[chnlindex] <= 9)  /* Channel 4-9 */
-               group = 1;
-       else if (channel_info[chnlindex] <= 14) /* Channel 10-14 */
-               group = 2;
-       else if (channel_info[chnlindex] <= 64)
-               group = 6;
-       else if (channel_info[chnlindex] <= 140)
-               group = 7;
-       else
-               group = 8;
-       return group;
-}
-
-static void _rtl92d_get_txpower_writeval_by_regulatory(struct ieee80211_hw *hw,
-                                                      u8 channel, u8 index,
-                                                      u32 *powerbase0,
-                                                      u32 *powerbase1,
-                                                      u32 *p_outwriteval)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       u8 i, chnlgroup = 0, pwr_diff_limit[4];
-       u32 writeval = 0, customer_limit, rf;
-
-       for (rf = 0; rf < 2; rf++) {
-               switch (rtlefuse->eeprom_regulatory) {
-               case 0:
-                       chnlgroup = 0;
-                       writeval = rtlphy->mcs_offset
-                                       [chnlgroup][index +
-                                       (rf ? 8 : 0)] + ((index < 2) ?
-                                       powerbase0[rf] :
-                                       powerbase1[rf]);
-                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-                               "RTK better performance, writeval(%c) = 0x%x\n",
-                               rf == 0 ? 'A' : 'B', writeval);
-                       break;
-               case 1:
-                       if (rtlphy->pwrgroup_cnt == 1)
-                               chnlgroup = 0;
-                       if (rtlphy->pwrgroup_cnt >= MAX_PG_GROUP) {
-                               chnlgroup = _rtl92d_phy_get_chnlgroup_bypg(
-                                                               channel - 1);
-                               if (rtlphy->current_chan_bw ==
-                                   HT_CHANNEL_WIDTH_20)
-                                       chnlgroup++;
-                               else
-                                       chnlgroup += 4;
-                               writeval = rtlphy->mcs_offset
-                                               [chnlgroup][index +
-                                               (rf ? 8 : 0)] + ((index < 2) ?
-                                               powerbase0[rf] :
-                                               powerbase1[rf]);
-                               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-                                       "Realtek regulatory, 20MHz, writeval(%c) = 0x%x\n",
-                                       rf == 0 ? 'A' : 'B', writeval);
-                       }
-                       break;
-               case 2:
-                       writeval = ((index < 2) ? powerbase0[rf] :
-                                  powerbase1[rf]);
-                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-                               "Better regulatory, writeval(%c) = 0x%x\n",
-                               rf == 0 ? 'A' : 'B', writeval);
-                       break;
-               case 3:
-                       chnlgroup = 0;
-                       if (rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20_40) {
-                               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-                                       "customer's limit, 40MHz rf(%c) = 0x%x\n",
-                                       rf == 0 ? 'A' : 'B',
-                                       rtlefuse->pwrgroup_ht40[rf]
-                                       [channel - 1]);
-                       } else {
-                               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-                                       "customer's limit, 20MHz rf(%c) = 0x%x\n",
-                                       rf == 0 ? 'A' : 'B',
-                                       rtlefuse->pwrgroup_ht20[rf]
-                                       [channel - 1]);
-                       }
-                       for (i = 0; i < 4; i++) {
-                               pwr_diff_limit[i] = (u8)((rtlphy->mcs_offset
-                                       [chnlgroup][index + (rf ? 8 : 0)] &
-                                       (0x7f << (i * 8))) >> (i * 8));
-                               if (rtlphy->current_chan_bw ==
-                                   HT_CHANNEL_WIDTH_20_40) {
-                                       if (pwr_diff_limit[i] >
-                                           rtlefuse->pwrgroup_ht40[rf]
-                                          [channel - 1])
-                                               pwr_diff_limit[i] =
-                                                       rtlefuse->pwrgroup_ht40
-                                                       [rf][channel - 1];
-                               } else {
-                                       if (pwr_diff_limit[i] >
-                                           rtlefuse->pwrgroup_ht20[rf][
-                                               channel - 1])
-                                               pwr_diff_limit[i] =
-                                                  rtlefuse->pwrgroup_ht20[rf]
-                                                  [channel - 1];
-                               }
-                       }
-                       customer_limit = (pwr_diff_limit[3] << 24) |
-                                        (pwr_diff_limit[2] << 16) |
-                                        (pwr_diff_limit[1] << 8) |
-                                        (pwr_diff_limit[0]);
-                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-                               "Customer's limit rf(%c) = 0x%x\n",
-                               rf == 0 ? 'A' : 'B', customer_limit);
-                       writeval = customer_limit + ((index < 2) ?
-                                  powerbase0[rf] : powerbase1[rf]);
-                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-                               "Customer, writeval rf(%c)= 0x%x\n",
-                               rf == 0 ? 'A' : 'B', writeval);
-                       break;
-               default:
-                       chnlgroup = 0;
-                       writeval = rtlphy->mcs_offset[chnlgroup][index +
-                                  (rf ? 8 : 0)] + ((index < 2) ?
-                                  powerbase0[rf] : powerbase1[rf]);
-                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-                               "RTK better performance, writeval rf(%c) = 0x%x\n",
-                               rf == 0 ? 'A' : 'B', writeval);
-                       break;
-               }
-               *(p_outwriteval + rf) = writeval;
-       }
-}
-
-static void _rtl92d_write_ofdm_power_reg(struct ieee80211_hw *hw,
-                                        u8 index, u32 *pvalue)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       static u16 regoffset_a[6] = {
-               RTXAGC_A_RATE18_06, RTXAGC_A_RATE54_24,
-               RTXAGC_A_MCS03_MCS00, RTXAGC_A_MCS07_MCS04,
-               RTXAGC_A_MCS11_MCS08, RTXAGC_A_MCS15_MCS12
-       };
-       static u16 regoffset_b[6] = {
-               RTXAGC_B_RATE18_06, RTXAGC_B_RATE54_24,
-               RTXAGC_B_MCS03_MCS00, RTXAGC_B_MCS07_MCS04,
-               RTXAGC_B_MCS11_MCS08, RTXAGC_B_MCS15_MCS12
-       };
-       u8 i, rf, pwr_val[4];
-       u32 writeval;
-       u16 regoffset;
-
-       for (rf = 0; rf < 2; rf++) {
-               writeval = pvalue[rf];
-               for (i = 0; i < 4; i++) {
-                       pwr_val[i] = (u8) ((writeval & (0x7f <<
-                                    (i * 8))) >> (i * 8));
-                       if (pwr_val[i] > RF6052_MAX_TX_PWR)
-                               pwr_val[i] = RF6052_MAX_TX_PWR;
-               }
-               writeval = (pwr_val[3] << 24) | (pwr_val[2] << 16) |
-                          (pwr_val[1] << 8) | pwr_val[0];
-               if (rf == 0)
-                       regoffset = regoffset_a[index];
-               else
-                       regoffset = regoffset_b[index];
-               rtl_set_bbreg(hw, regoffset, MASKDWORD, writeval);
-               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
-                       "Set 0x%x = %08x\n", regoffset, writeval);
-               if (((get_rf_type(rtlphy) == RF_2T2R) &&
-                   (regoffset == RTXAGC_A_MCS15_MCS12 ||
-                   regoffset == RTXAGC_B_MCS15_MCS12)) ||
-                   ((get_rf_type(rtlphy) != RF_2T2R) &&
-                   (regoffset == RTXAGC_A_MCS07_MCS04 ||
-                   regoffset == RTXAGC_B_MCS07_MCS04))) {
-                       writeval = pwr_val[3];
-                       if (regoffset == RTXAGC_A_MCS15_MCS12 ||
-                           regoffset == RTXAGC_A_MCS07_MCS04)
-                               regoffset = 0xc90;
-                       if (regoffset == RTXAGC_B_MCS15_MCS12 ||
-                           regoffset == RTXAGC_B_MCS07_MCS04)
-                               regoffset = 0xc98;
-                       for (i = 0; i < 3; i++) {
-                               if (i != 2)
-                                       writeval = (writeval > 8) ?
-                                                  (writeval - 8) : 0;
-                               else
-                                       writeval = (writeval > 6) ?
-                                                  (writeval - 6) : 0;
-                               rtl_write_byte(rtlpriv, (u32) (regoffset + i),
-                                              (u8) writeval);
-                       }
-               }
-       }
-}
-
-void rtl92d_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw,
-                                       u8 *ppowerlevel, u8 channel)
-{
-       u32 writeval[2], powerbase0[2], powerbase1[2];
-       u8 index;
-
-       _rtl92d_phy_get_power_base(hw, ppowerlevel, channel,
-                       &powerbase0[0], &powerbase1[0]);
-       for (index = 0; index < 6; index++) {
-               _rtl92d_get_txpower_writeval_by_regulatory(hw,
-                               channel, index, &powerbase0[0],
-                               &powerbase1[0], &writeval[0]);
-               _rtl92d_write_ofdm_power_reg(hw, index, &writeval[0]);
-       }
-}
-
 bool rtl92d_phy_enable_anotherphy(struct ieee80211_hw *hw, bool bmac0)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
index 4e646cc..c097d90 100644 (file)
@@ -4,11 +4,6 @@
 #ifndef __RTL92D_RF_H__
 #define __RTL92D_RF_H__
 
-void rtl92d_phy_rf6052_set_bandwidth(struct ieee80211_hw *hw, u8 bandwidth);
-void rtl92d_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
-                                      u8 *ppowerlevel);
-void rtl92d_phy_rf6052_set_ofdm_txpower(struct ieee80211_hw *hw,
-                                       u8 *ppowerlevel, u8 channel);
 bool rtl92d_phy_rf6052_config(struct ieee80211_hw *hw);
 bool rtl92d_phy_enable_anotherphy(struct ieee80211_hw *hw, bool bmac0);
 void rtl92d_phy_powerdown_anotherphy(struct ieee80211_hw *hw, bool bmac0);
index afd685e..5f6311c 100644 (file)
@@ -5,8 +5,12 @@
 #include "../core.h"
 #include "../pci.h"
 #include "../base.h"
-#include "reg.h"
-#include "def.h"
+#include "../rtl8192d/reg.h"
+#include "../rtl8192d/def.h"
+#include "../rtl8192d/dm_common.h"
+#include "../rtl8192d/hw_common.h"
+#include "../rtl8192d/phy_common.h"
+#include "../rtl8192d/trx_common.h"
 #include "phy.h"
 #include "dm.h"
 #include "hw.h"
@@ -207,7 +211,7 @@ static struct rtl_hal_ops rtl8192de_hal_ops = {
        .radio_onoff_checking = rtl92de_gpio_radio_on_off_checking,
        .set_bw_mode = rtl92d_phy_set_bw_mode,
        .switch_channel = rtl92d_phy_sw_chnl,
-       .dm_watchdog = rtl92d_dm_watchdog,
+       .dm_watchdog = rtl92de_dm_watchdog,
        .scan_operation_backup = rtl_phy_scan_operation_backup,
        .set_rf_power_state = rtl92d_phy_set_rf_power_state,
        .led_control = rtl92de_led_control,
@@ -223,6 +227,8 @@ static struct rtl_hal_ops rtl8192de_hal_ops = {
        .set_rfreg = rtl92d_phy_set_rf_reg,
        .linked_set_reg = rtl92d_linked_set_reg,
        .get_btc_status = rtl_btc_status_false,
+       .phy_iq_calibrate = rtl92d_phy_iq_calibrate,
+       .phy_lc_calibrate = rtl92d_phy_lc_calibrate,
 };
 
 static struct rtl_mod_params rtl92de_mod_params = {
index cbc7b4d..2b9b352 100644 (file)
@@ -5,8 +5,10 @@
 #include "../pci.h"
 #include "../base.h"
 #include "../stats.h"
-#include "reg.h"
-#include "def.h"
+#include "../rtl8192d/reg.h"
+#include "../rtl8192d/def.h"
+#include "../rtl8192d/phy_common.h"
+#include "../rtl8192d/trx_common.h"
 #include "phy.h"
 #include "trx.h"
 #include "led.h"
@@ -23,433 +25,6 @@ static u8 _rtl92de_map_hwqueue_to_fwqueue(struct sk_buff *skb, u8 hw_queue)
        return skb->priority;
 }
 
-static long _rtl92de_translate_todbm(struct ieee80211_hw *hw,
-                                    u8 signal_strength_index)
-{
-       long signal_power;
-
-       signal_power = (long)((signal_strength_index + 1) >> 1);
-       signal_power -= 95;
-       return signal_power;
-}
-
-static void _rtl92de_query_rxphystatus(struct ieee80211_hw *hw,
-                                      struct rtl_stats *pstats,
-                                      __le32 *pdesc,
-                                      struct rx_fwinfo_92d *p_drvinfo,
-                                      bool packet_match_bssid,
-                                      bool packet_toself,
-                                      bool packet_beacon)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct rtl_ps_ctl *ppsc = rtl_psc(rtlpriv);
-       struct phy_sts_cck_8192d *cck_buf;
-       s8 rx_pwr_all, rx_pwr[4];
-       u8 rf_rx_num = 0, evm, pwdb_all;
-       u8 i, max_spatial_stream;
-       u32 rssi, total_rssi = 0;
-       bool is_cck_rate;
-       u8 rxmcs;
-
-       rxmcs = get_rx_desc_rxmcs(pdesc);
-       is_cck_rate = rxmcs <= DESC_RATE11M;
-       pstats->packet_matchbssid = packet_match_bssid;
-       pstats->packet_toself = packet_toself;
-       pstats->packet_beacon = packet_beacon;
-       pstats->is_cck = is_cck_rate;
-       pstats->rx_mimo_sig_qual[0] = -1;
-       pstats->rx_mimo_sig_qual[1] = -1;
-
-       if (is_cck_rate) {
-               u8 report, cck_highpwr;
-               cck_buf = (struct phy_sts_cck_8192d *)p_drvinfo;
-               if (ppsc->rfpwr_state == ERFON)
-                       cck_highpwr = rtlphy->cck_high_power;
-               else
-                       cck_highpwr = false;
-               if (!cck_highpwr) {
-                       u8 cck_agc_rpt = cck_buf->cck_agc_rpt;
-                       report = cck_buf->cck_agc_rpt & 0xc0;
-                       report = report >> 6;
-                       switch (report) {
-                       case 0x3:
-                               rx_pwr_all = -46 - (cck_agc_rpt & 0x3e);
-                               break;
-                       case 0x2:
-                               rx_pwr_all = -26 - (cck_agc_rpt & 0x3e);
-                               break;
-                       case 0x1:
-                               rx_pwr_all = -12 - (cck_agc_rpt & 0x3e);
-                               break;
-                       case 0x0:
-                               rx_pwr_all = 16 - (cck_agc_rpt & 0x3e);
-                               break;
-                       }
-               } else {
-                       u8 cck_agc_rpt = cck_buf->cck_agc_rpt;
-                       report = p_drvinfo->cfosho[0] & 0x60;
-                       report = report >> 5;
-                       switch (report) {
-                       case 0x3:
-                               rx_pwr_all = -46 - ((cck_agc_rpt & 0x1f) << 1);
-                               break;
-                       case 0x2:
-                               rx_pwr_all = -26 - ((cck_agc_rpt & 0x1f) << 1);
-                               break;
-                       case 0x1:
-                               rx_pwr_all = -12 - ((cck_agc_rpt & 0x1f) << 1);
-                               break;
-                       case 0x0:
-                               rx_pwr_all = 16 - ((cck_agc_rpt & 0x1f) << 1);
-                               break;
-                       }
-               }
-               pwdb_all = rtl_query_rxpwrpercentage(rx_pwr_all);
-               /* CCK gain is smaller than OFDM/MCS gain,  */
-               /* so we add gain diff by experiences, the val is 6 */
-               pwdb_all += 6;
-               if (pwdb_all > 100)
-                       pwdb_all = 100;
-               /* modify the offset to make the same gain index with OFDM. */
-               if (pwdb_all > 34 && pwdb_all <= 42)
-                       pwdb_all -= 2;
-               else if (pwdb_all > 26 && pwdb_all <= 34)
-                       pwdb_all -= 6;
-               else if (pwdb_all > 14 && pwdb_all <= 26)
-                       pwdb_all -= 8;
-               else if (pwdb_all > 4 && pwdb_all <= 14)
-                       pwdb_all -= 4;
-               pstats->rx_pwdb_all = pwdb_all;
-               pstats->recvsignalpower = rx_pwr_all;
-               if (packet_match_bssid) {
-                       u8 sq;
-                       if (pstats->rx_pwdb_all > 40) {
-                               sq = 100;
-                       } else {
-                               sq = cck_buf->sq_rpt;
-                               if (sq > 64)
-                                       sq = 0;
-                               else if (sq < 20)
-                                       sq = 100;
-                               else
-                                       sq = ((64 - sq) * 100) / 44;
-                       }
-                       pstats->signalquality = sq;
-                       pstats->rx_mimo_sig_qual[0] = sq;
-                       pstats->rx_mimo_sig_qual[1] = -1;
-               }
-       } else {
-               rtlpriv->dm.rfpath_rxenable[0] = true;
-               rtlpriv->dm.rfpath_rxenable[1] = true;
-               for (i = RF90_PATH_A; i < RF6052_MAX_PATH; i++) {
-                       if (rtlpriv->dm.rfpath_rxenable[i])
-                               rf_rx_num++;
-                       rx_pwr[i] = ((p_drvinfo->gain_trsw[i] & 0x3f) * 2)
-                                   - 110;
-                       rssi = rtl_query_rxpwrpercentage(rx_pwr[i]);
-                       total_rssi += rssi;
-                       rtlpriv->stats.rx_snr_db[i] =
-                                        (long)(p_drvinfo->rxsnr[i] / 2);
-                       if (packet_match_bssid)
-                               pstats->rx_mimo_signalstrength[i] = (u8) rssi;
-               }
-               rx_pwr_all = ((p_drvinfo->pwdb_all >> 1) & 0x7f) - 106;
-               pwdb_all = rtl_query_rxpwrpercentage(rx_pwr_all);
-               pstats->rx_pwdb_all = pwdb_all;
-               pstats->rxpower = rx_pwr_all;
-               pstats->recvsignalpower = rx_pwr_all;
-               if (get_rx_desc_rxht(pdesc) && rxmcs >= DESC_RATEMCS8 &&
-                   rxmcs <= DESC_RATEMCS15)
-                       max_spatial_stream = 2;
-               else
-                       max_spatial_stream = 1;
-               for (i = 0; i < max_spatial_stream; i++) {
-                       evm = rtl_evm_db_to_percentage(p_drvinfo->rxevm[i]);
-                       if (packet_match_bssid) {
-                               if (i == 0)
-                                       pstats->signalquality =
-                                                (u8)(evm & 0xff);
-                               pstats->rx_mimo_sig_qual[i] =
-                                                (u8)(evm & 0xff);
-                       }
-               }
-       }
-       if (is_cck_rate)
-               pstats->signalstrength = (u8)(rtl_signal_scale_mapping(hw,
-                               pwdb_all));
-       else if (rf_rx_num != 0)
-               pstats->signalstrength = (u8)(rtl_signal_scale_mapping(hw,
-                               total_rssi /= rf_rx_num));
-}
-
-static void rtl92d_loop_over_paths(struct ieee80211_hw *hw,
-                                  struct rtl_stats *pstats)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       u8 rfpath;
-
-       for (rfpath = RF90_PATH_A; rfpath < rtlphy->num_total_rfpath;
-            rfpath++) {
-               if (rtlpriv->stats.rx_rssi_percentage[rfpath] == 0) {
-                       rtlpriv->stats.rx_rssi_percentage[rfpath] =
-                           pstats->rx_mimo_signalstrength[rfpath];
-
-               }
-               if (pstats->rx_mimo_signalstrength[rfpath] >
-                   rtlpriv->stats.rx_rssi_percentage[rfpath]) {
-                       rtlpriv->stats.rx_rssi_percentage[rfpath] =
-                           ((rtlpriv->stats.rx_rssi_percentage[rfpath] *
-                             (RX_SMOOTH_FACTOR - 1)) +
-                            (pstats->rx_mimo_signalstrength[rfpath])) /
-                           (RX_SMOOTH_FACTOR);
-                       rtlpriv->stats.rx_rssi_percentage[rfpath] =
-                           rtlpriv->stats.rx_rssi_percentage[rfpath] + 1;
-               } else {
-                       rtlpriv->stats.rx_rssi_percentage[rfpath] =
-                           ((rtlpriv->stats.rx_rssi_percentage[rfpath] *
-                             (RX_SMOOTH_FACTOR - 1)) +
-                            (pstats->rx_mimo_signalstrength[rfpath])) /
-                           (RX_SMOOTH_FACTOR);
-               }
-       }
-}
-
-static void _rtl92de_process_ui_rssi(struct ieee80211_hw *hw,
-                                    struct rtl_stats *pstats)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u32 last_rssi, tmpval;
-
-       if (pstats->packet_toself || pstats->packet_beacon) {
-               rtlpriv->stats.rssi_calculate_cnt++;
-               if (rtlpriv->stats.ui_rssi.total_num++ >=
-                   PHY_RSSI_SLID_WIN_MAX) {
-                       rtlpriv->stats.ui_rssi.total_num =
-                                                PHY_RSSI_SLID_WIN_MAX;
-                       last_rssi = rtlpriv->stats.ui_rssi.elements[
-                               rtlpriv->stats.ui_rssi.index];
-                       rtlpriv->stats.ui_rssi.total_val -= last_rssi;
-               }
-               rtlpriv->stats.ui_rssi.total_val += pstats->signalstrength;
-               rtlpriv->stats.ui_rssi.elements
-                       [rtlpriv->stats.ui_rssi.index++] =
-                       pstats->signalstrength;
-               if (rtlpriv->stats.ui_rssi.index >= PHY_RSSI_SLID_WIN_MAX)
-                       rtlpriv->stats.ui_rssi.index = 0;
-               tmpval = rtlpriv->stats.ui_rssi.total_val /
-                       rtlpriv->stats.ui_rssi.total_num;
-               rtlpriv->stats.signal_strength = _rtl92de_translate_todbm(hw,
-                       (u8) tmpval);
-               pstats->rssi = rtlpriv->stats.signal_strength;
-       }
-       if (!pstats->is_cck && pstats->packet_toself)
-               rtl92d_loop_over_paths(hw, pstats);
-}
-
-static void _rtl92de_update_rxsignalstatistics(struct ieee80211_hw *hw,
-                                              struct rtl_stats *pstats)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       int weighting = 0;
-
-       if (rtlpriv->stats.recv_signal_power == 0)
-               rtlpriv->stats.recv_signal_power = pstats->recvsignalpower;
-       if (pstats->recvsignalpower > rtlpriv->stats.recv_signal_power)
-               weighting = 5;
-       else if (pstats->recvsignalpower < rtlpriv->stats.recv_signal_power)
-               weighting = (-5);
-       rtlpriv->stats.recv_signal_power = (rtlpriv->stats.recv_signal_power *
-               5 + pstats->recvsignalpower + weighting) / 6;
-}
-
-static void _rtl92de_process_pwdb(struct ieee80211_hw *hw,
-                                 struct rtl_stats *pstats)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       long undec_sm_pwdb;
-
-       if (mac->opmode == NL80211_IFTYPE_ADHOC ||
-               mac->opmode == NL80211_IFTYPE_AP)
-               return;
-       else
-               undec_sm_pwdb = rtlpriv->dm.undec_sm_pwdb;
-
-       if (pstats->packet_toself || pstats->packet_beacon) {
-               if (undec_sm_pwdb < 0)
-                       undec_sm_pwdb = pstats->rx_pwdb_all;
-               if (pstats->rx_pwdb_all > (u32) undec_sm_pwdb) {
-                       undec_sm_pwdb = (((undec_sm_pwdb) *
-                             (RX_SMOOTH_FACTOR - 1)) +
-                             (pstats->rx_pwdb_all)) / (RX_SMOOTH_FACTOR);
-                       undec_sm_pwdb = undec_sm_pwdb + 1;
-               } else {
-                       undec_sm_pwdb = (((undec_sm_pwdb) *
-                             (RX_SMOOTH_FACTOR - 1)) +
-                             (pstats->rx_pwdb_all)) / (RX_SMOOTH_FACTOR);
-               }
-               rtlpriv->dm.undec_sm_pwdb = undec_sm_pwdb;
-               _rtl92de_update_rxsignalstatistics(hw, pstats);
-       }
-}
-
-static void rtl92d_loop_over_streams(struct ieee80211_hw *hw,
-                                    struct rtl_stats *pstats)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       int stream;
-
-       for (stream = 0; stream < 2; stream++) {
-               if (pstats->rx_mimo_sig_qual[stream] != -1) {
-                       if (rtlpriv->stats.rx_evm_percentage[stream] == 0) {
-                               rtlpriv->stats.rx_evm_percentage[stream] =
-                                   pstats->rx_mimo_sig_qual[stream];
-                       }
-                       rtlpriv->stats.rx_evm_percentage[stream] =
-                           ((rtlpriv->stats.rx_evm_percentage[stream]
-                             * (RX_SMOOTH_FACTOR - 1)) +
-                            (pstats->rx_mimo_sig_qual[stream] * 1)) /
-                           (RX_SMOOTH_FACTOR);
-               }
-       }
-}
-
-static void _rtl92de_process_ui_link_quality(struct ieee80211_hw *hw,
-                                            struct rtl_stats *pstats)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u32 last_evm, tmpval;
-
-       if (pstats->signalquality == 0)
-               return;
-       if (pstats->packet_toself || pstats->packet_beacon) {
-               if (rtlpriv->stats.ui_link_quality.total_num++ >=
-                   PHY_LINKQUALITY_SLID_WIN_MAX) {
-                       rtlpriv->stats.ui_link_quality.total_num =
-                           PHY_LINKQUALITY_SLID_WIN_MAX;
-                       last_evm = rtlpriv->stats.ui_link_quality.elements[
-                               rtlpriv->stats.ui_link_quality.index];
-                       rtlpriv->stats.ui_link_quality.total_val -= last_evm;
-               }
-               rtlpriv->stats.ui_link_quality.total_val +=
-                                                pstats->signalquality;
-               rtlpriv->stats.ui_link_quality.elements[
-                       rtlpriv->stats.ui_link_quality.index++] =
-                                                pstats->signalquality;
-               if (rtlpriv->stats.ui_link_quality.index >=
-                   PHY_LINKQUALITY_SLID_WIN_MAX)
-                       rtlpriv->stats.ui_link_quality.index = 0;
-               tmpval = rtlpriv->stats.ui_link_quality.total_val /
-                   rtlpriv->stats.ui_link_quality.total_num;
-               rtlpriv->stats.signal_quality = tmpval;
-               rtlpriv->stats.last_sigstrength_inpercent = tmpval;
-               rtl92d_loop_over_streams(hw, pstats);
-       }
-}
-
-static void _rtl92de_process_phyinfo(struct ieee80211_hw *hw,
-                                    u8 *buffer,
-                                    struct rtl_stats *pcurrent_stats)
-{
-
-       if (!pcurrent_stats->packet_matchbssid &&
-           !pcurrent_stats->packet_beacon)
-               return;
-
-       _rtl92de_process_ui_rssi(hw, pcurrent_stats);
-       _rtl92de_process_pwdb(hw, pcurrent_stats);
-       _rtl92de_process_ui_link_quality(hw, pcurrent_stats);
-}
-
-static void _rtl92de_translate_rx_signal_stuff(struct ieee80211_hw *hw,
-                                              struct sk_buff *skb,
-                                              struct rtl_stats *pstats,
-                                              __le32 *pdesc,
-                                              struct rx_fwinfo_92d *p_drvinfo)
-{
-       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       struct ieee80211_hdr *hdr;
-       u8 *tmp_buf;
-       u8 *praddr;
-       u16 type, cfc;
-       __le16 fc;
-       bool packet_matchbssid, packet_toself, packet_beacon = false;
-
-       tmp_buf = skb->data + pstats->rx_drvinfo_size + pstats->rx_bufshift;
-       hdr = (struct ieee80211_hdr *)tmp_buf;
-       fc = hdr->frame_control;
-       cfc = le16_to_cpu(fc);
-       type = WLAN_FC_GET_TYPE(fc);
-       praddr = hdr->addr1;
-       packet_matchbssid = ((IEEE80211_FTYPE_CTL != type) &&
-            ether_addr_equal(mac->bssid,
-                             (cfc & IEEE80211_FCTL_TODS) ? hdr->addr1 :
-                             (cfc & IEEE80211_FCTL_FROMDS) ? hdr->addr2 :
-                             hdr->addr3) &&
-            (!pstats->hwerror) && (!pstats->crc) && (!pstats->icv));
-       packet_toself = packet_matchbssid &&
-                       ether_addr_equal(praddr, rtlefuse->dev_addr);
-       if (ieee80211_is_beacon(fc))
-               packet_beacon = true;
-       _rtl92de_query_rxphystatus(hw, pstats, pdesc, p_drvinfo,
-                                  packet_matchbssid, packet_toself,
-                                  packet_beacon);
-       _rtl92de_process_phyinfo(hw, tmp_buf, pstats);
-}
-
-bool rtl92de_rx_query_desc(struct ieee80211_hw *hw,    struct rtl_stats *stats,
-               struct ieee80211_rx_status *rx_status,
-               u8 *pdesc8, struct sk_buff *skb)
-{
-       __le32 *pdesc = (__le32 *)pdesc8;
-       struct rx_fwinfo_92d *p_drvinfo;
-       u32 phystatus = get_rx_desc_physt(pdesc);
-
-       stats->length = (u16)get_rx_desc_pkt_len(pdesc);
-       stats->rx_drvinfo_size = (u8)get_rx_desc_drv_info_size(pdesc) *
-                                RX_DRV_INFO_SIZE_UNIT;
-       stats->rx_bufshift = (u8)(get_rx_desc_shift(pdesc) & 0x03);
-       stats->icv = (u16)get_rx_desc_icv(pdesc);
-       stats->crc = (u16)get_rx_desc_crc32(pdesc);
-       stats->hwerror = (stats->crc | stats->icv);
-       stats->decrypted = !get_rx_desc_swdec(pdesc) &&
-                          get_rx_desc_enc_type(pdesc) != RX_DESC_ENC_NONE;
-       stats->rate = (u8)get_rx_desc_rxmcs(pdesc);
-       stats->shortpreamble = (u16)get_rx_desc_splcp(pdesc);
-       stats->isampdu = (bool)(get_rx_desc_paggr(pdesc) == 1);
-       stats->isfirst_ampdu = (bool)((get_rx_desc_paggr(pdesc) == 1) &&
-                                     (get_rx_desc_faggr(pdesc) == 1));
-       stats->timestamp_low = get_rx_desc_tsfl(pdesc);
-       stats->rx_is40mhzpacket = (bool)get_rx_desc_bw(pdesc);
-       stats->is_ht = (bool)get_rx_desc_rxht(pdesc);
-       rx_status->freq = hw->conf.chandef.chan->center_freq;
-       rx_status->band = hw->conf.chandef.chan->band;
-       if (get_rx_desc_crc32(pdesc))
-               rx_status->flag |= RX_FLAG_FAILED_FCS_CRC;
-       if (get_rx_desc_bw(pdesc))
-               rx_status->bw = RATE_INFO_BW_40;
-       if (get_rx_desc_rxht(pdesc))
-               rx_status->encoding = RX_ENC_HT;
-       rx_status->flag |= RX_FLAG_MACTIME_START;
-       if (stats->decrypted)
-               rx_status->flag |= RX_FLAG_DECRYPTED;
-       rx_status->rate_idx = rtlwifi_rate_mapping(hw, stats->is_ht,
-                                                  false, stats->rate);
-       rx_status->mactime = get_rx_desc_tsfl(pdesc);
-       if (phystatus) {
-               p_drvinfo = (struct rx_fwinfo_92d *)(skb->data +
-                                                    stats->rx_bufshift);
-               _rtl92de_translate_rx_signal_stuff(hw, skb, stats, pdesc,
-                                                  p_drvinfo);
-       }
-       /*rx_status->qual = stats->signal; */
-       rx_status->signal = stats->recvsignalpower + 10;
-       return true;
-}
-
 static void _rtl92de_insert_emcontent(struct rtl_tcb_desc *ptcb_desc,
                                      u8 *virtualaddress8)
 {
@@ -711,87 +286,6 @@ void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8,
        set_tx_desc_own(pdesc, 1);
 }
 
-void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc8, bool istx,
-                     u8 desc_name, u8 *val)
-{
-       __le32  *pdesc = (__le32 *)pdesc8;
-
-       if (istx) {
-               switch (desc_name) {
-               case HW_DESC_OWN:
-                       wmb();
-                       set_tx_desc_own(pdesc, 1);
-                       break;
-               case HW_DESC_TX_NEXTDESC_ADDR:
-                       set_tx_desc_next_desc_address(pdesc, *(u32 *)val);
-                       break;
-               default:
-                       WARN_ONCE(true, "rtl8192de: ERR txdesc :%d not processed\n",
-                                 desc_name);
-                       break;
-               }
-       } else {
-               switch (desc_name) {
-               case HW_DESC_RXOWN:
-                       wmb();
-                       set_rx_desc_own(pdesc, 1);
-                       break;
-               case HW_DESC_RXBUFF_ADDR:
-                       set_rx_desc_buff_addr(pdesc, *(u32 *)val);
-                       break;
-               case HW_DESC_RXPKT_LEN:
-                       set_rx_desc_pkt_len(pdesc, *(u32 *)val);
-                       break;
-               case HW_DESC_RXERO:
-                       set_rx_desc_eor(pdesc, 1);
-                       break;
-               default:
-                       WARN_ONCE(true, "rtl8192de: ERR rxdesc :%d not processed\n",
-                                 desc_name);
-                       break;
-               }
-       }
-}
-
-u64 rtl92de_get_desc(struct ieee80211_hw *hw,
-                    u8 *p_desc8, bool istx, u8 desc_name)
-{
-       __le32 *p_desc = (__le32 *)p_desc8;
-       u32 ret = 0;
-
-       if (istx) {
-               switch (desc_name) {
-               case HW_DESC_OWN:
-                       ret = get_tx_desc_own(p_desc);
-                       break;
-               case HW_DESC_TXBUFF_ADDR:
-                       ret = get_tx_desc_tx_buffer_address(p_desc);
-                       break;
-               default:
-                       WARN_ONCE(true, "rtl8192de: ERR txdesc :%d not processed\n",
-                                 desc_name);
-                       break;
-               }
-       } else {
-               switch (desc_name) {
-               case HW_DESC_OWN:
-                       ret = get_rx_desc_own(p_desc);
-                       break;
-               case HW_DESC_RXPKT_LEN:
-                       ret = get_rx_desc_pkt_len(p_desc);
-               break;
-               case HW_DESC_RXBUFF_ADDR:
-                       ret = get_rx_desc_buff_addr(p_desc);
-                       break;
-               default:
-                       WARN_ONCE(true, "rtl8192de: ERR rxdesc :%d not processed\n",
-                                 desc_name);
-                       break;
-               }
-       }
-       return ret;
-}
-
 bool rtl92de_is_tx_desc_closed(struct ieee80211_hw *hw,
                               u8 hw_queue, u16 index)
 {
index 2d48874..d3c480c 100644 (file)
 #define TX_DESC_AGGR_SUBFRAME_SIZE             32
 
 #define RX_DESC_SIZE                           32
-#define RX_DRV_INFO_SIZE_UNIT                  8
 
 #define        TX_DESC_NEXT_DESC_OFFSET                40
 #define USB_HWDESC_HEADER_LEN                  32
 #define CRCLENGTH                              4
 
-enum rtl92d_rx_desc_enc {
-       RX_DESC_ENC_NONE        = 0,
-       RX_DESC_ENC_WEP40       = 1,
-       RX_DESC_ENC_TKIP_WO_MIC = 2,
-       RX_DESC_ENC_TKIP_MIC    = 3,
-       RX_DESC_ENC_AES         = 4,
-       RX_DESC_ENC_WEP104      = 5,
-};
-
-/* macros to read/write various fields in RX or TX descriptors */
-
-static inline void set_tx_desc_pkt_size(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits(__pdesc, __val, GENMASK(15, 0));
-}
-
-static inline void set_tx_desc_offset(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits(__pdesc, __val, GENMASK(23, 16));
-}
-
-static inline void set_tx_desc_htc(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits(__pdesc, __val, BIT(25));
-}
-
-static inline void set_tx_desc_last_seg(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits(__pdesc, __val, BIT(26));
-}
-
-static inline void set_tx_desc_first_seg(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits(__pdesc, __val, BIT(27));
-}
-
-static inline void set_tx_desc_linip(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits(__pdesc, __val, BIT(28));
-}
-
-static inline void set_tx_desc_own(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits(__pdesc, __val, BIT(31));
-}
-
-static inline u32 get_tx_desc_own(__le32 *__pdesc)
-{
-       return le32_get_bits(*__pdesc, BIT(31));
-}
-
-static inline void set_tx_desc_macid(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 1), __val, GENMASK(4, 0));
-}
-
-static inline void set_tx_desc_agg_enable(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 1), __val, BIT(5));
-}
-
-static inline void set_tx_desc_rdg_enable(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 1), __val, BIT(7));
-}
-
-static inline void set_tx_desc_queue_sel(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 1), __val, GENMASK(12, 8));
-}
-
-static inline void set_tx_desc_rate_id(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 1), __val, GENMASK(19, 16));
-}
-
-static inline void set_tx_desc_sec_type(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 1), __val, GENMASK(23, 22));
-}
-
-static inline void set_tx_desc_pkt_offset(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 1), __val, GENMASK(30, 26));
-}
-
-static inline void set_tx_desc_more_frag(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 2), __val, BIT(17));
-}
-
-static inline void set_tx_desc_ampdu_density(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 2), __val, GENMASK(22, 20));
-}
-
-static inline void set_tx_desc_seq(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 3), __val, GENMASK(27, 16));
-}
-
-static inline void set_tx_desc_pkt_id(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 3), __val, GENMASK(31, 28));
-}
-
-static inline void set_tx_desc_rts_rate(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, GENMASK(4, 0));
-}
-
-static inline void set_tx_desc_qos(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, BIT(6));
-}
-
-static inline void set_tx_desc_hwseq_en(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, BIT(7));
-}
-
-static inline void set_tx_desc_use_rate(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, BIT(8));
-}
-
-static inline void set_tx_desc_disable_fb(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, BIT(10));
-}
-
-static inline void set_tx_desc_cts2self(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, BIT(11));
-}
-
-static inline void set_tx_desc_rts_enable(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, BIT(12));
-}
-
-static inline void set_tx_desc_hw_rts_enable(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, BIT(13));
-}
-
-static inline void set_tx_desc_tx_sub_carrier(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, GENMASK(21, 20));
-}
-
-static inline void set_tx_desc_data_bw(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, BIT(25));
-}
-
-static inline void set_tx_desc_rts_short(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, BIT(26));
-}
-
-static inline void set_tx_desc_rts_bw(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, BIT(27));
-}
-
-static inline void set_tx_desc_rts_sc(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, GENMASK(29, 28));
-}
-
-static inline void set_tx_desc_rts_stbc(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 4), __val, GENMASK(31, 30));
-}
-
-static inline void set_tx_desc_tx_rate(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 5), __val, GENMASK(5, 0));
-}
-
-static inline void set_tx_desc_data_shortgi(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 5), __val, BIT(6));
-}
-
-static inline void set_tx_desc_data_rate_fb_limit(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 5), __val, GENMASK(12, 8));
-}
-
-static inline void set_tx_desc_rts_rate_fb_limit(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 5), __val, GENMASK(16, 13));
-}
-
-static inline void set_tx_desc_max_agg_num(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 6), __val, GENMASK(15, 11));
-}
-
-static inline void set_tx_desc_tx_buffer_size(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits((__pdesc + 7), __val, GENMASK(15, 0));
-}
-
-static inline void set_tx_desc_tx_buffer_address(__le32 *__pdesc, u32 __val)
-{
-       *(__pdesc + 8) = cpu_to_le32(__val);
-}
-
-static inline u32 get_tx_desc_tx_buffer_address(__le32 *__pdesc)
-{
-       return le32_to_cpu(*(__pdesc + 8));
-}
-
-static inline void set_tx_desc_next_desc_address(__le32 *__pdesc, u32 __val)
-{
-       *(__pdesc + 10) = cpu_to_le32(__val);
-}
-
-static inline u32 get_rx_desc_pkt_len(__le32 *__pdesc)
-{
-       return le32_get_bits(*__pdesc, GENMASK(13, 0));
-}
-
-static inline u32 get_rx_desc_crc32(__le32 *__pdesc)
-{
-       return le32_get_bits(*__pdesc, BIT(14));
-}
-
-static inline u32 get_rx_desc_icv(__le32 *__pdesc)
-{
-       return le32_get_bits(*__pdesc, BIT(15));
-}
-
-static inline u32 get_rx_desc_drv_info_size(__le32 *__pdesc)
-{
-       return le32_get_bits(*__pdesc, GENMASK(19, 16));
-}
-
-static inline u32 get_rx_desc_enc_type(__le32 *__pdesc)
-{
-       return le32_get_bits(*__pdesc, GENMASK(22, 20));
-}
-
-static inline u32 get_rx_desc_shift(__le32 *__pdesc)
-{
-       return le32_get_bits(*__pdesc, GENMASK(25, 24));
-}
-
-static inline u32 get_rx_desc_physt(__le32 *__pdesc)
-{
-       return le32_get_bits(*__pdesc, BIT(26));
-}
-
-static inline u32 get_rx_desc_swdec(__le32 *__pdesc)
-{
-       return le32_get_bits(*__pdesc, BIT(27));
-}
-
-static inline u32 get_rx_desc_own(__le32 *__pdesc)
-{
-       return le32_get_bits(*__pdesc, BIT(31));
-}
-
-static inline void set_rx_desc_pkt_len(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits(__pdesc, __val, GENMASK(13, 0));
-}
-
-static inline void set_rx_desc_eor(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits(__pdesc, __val, BIT(30));
-}
-
-static inline void set_rx_desc_own(__le32 *__pdesc, u32 __val)
-{
-       le32p_replace_bits(__pdesc, __val, BIT(31));
-}
-
-static inline u32 get_rx_desc_paggr(__le32 *__pdesc)
-{
-       return le32_get_bits(*(__pdesc + 1), BIT(14));
-}
-
-static inline u32 get_rx_desc_faggr(__le32 *__pdesc)
-{
-       return le32_get_bits(*(__pdesc + 1), BIT(15));
-}
-
-static inline u32 get_rx_desc_rxmcs(__le32 *__pdesc)
-{
-       return le32_get_bits(*(__pdesc + 3), GENMASK(5, 0));
-}
-
-static inline u32 get_rx_desc_rxht(__le32 *__pdesc)
-{
-       return le32_get_bits(*(__pdesc + 3), BIT(6));
-}
-
-static inline u32 get_rx_desc_splcp(__le32 *__pdesc)
-{
-       return le32_get_bits(*(__pdesc + 3), BIT(8));
-}
-
-static inline u32 get_rx_desc_bw(__le32 *__pdesc)
-{
-       return le32_get_bits(*(__pdesc + 3), BIT(9));
-}
-
-static inline u32 get_rx_desc_tsfl(__le32 *__pdesc)
-{
-       return le32_to_cpu(*(__pdesc + 5));
-}
-
-static inline u32 get_rx_desc_buff_addr(__le32 *__pdesc)
-{
-       return le32_to_cpu(*(__pdesc + 6));
-}
-
-static inline void set_rx_desc_buff_addr(__le32 *__pdesc, u32 __val)
-{
-       *(__pdesc + 6) = cpu_to_le32(__val);
-}
-
 static inline void clear_pci_tx_desc_content(__le32 *__pdesc, u32 _size)
 {
        memset((void *)__pdesc, 0,
               min_t(size_t, _size, TX_DESC_NEXT_DESC_OFFSET));
 }
 
-/* For 92D early mode */
-static inline void set_earlymode_pktnum(__le32 *__paddr, u32 __value)
-{
-       le32p_replace_bits(__paddr, __value, GENMASK(2, 0));
-}
-
-static inline void set_earlymode_len0(__le32 *__paddr, u32 __value)
-{
-       le32p_replace_bits(__paddr, __value, GENMASK(15, 4));
-}
-
-static inline void set_earlymode_len1(__le32 *__paddr, u32 __value)
-{
-       le32p_replace_bits(__paddr, __value, GENMASK(27, 16));
-}
-
-static inline void set_earlymode_len2_1(__le32 *__paddr, u32 __value)
-{
-       le32p_replace_bits(__paddr, __value, GENMASK(31, 28));
-}
-
-static inline void set_earlymode_len2_2(__le32 *__paddr, u32 __value)
-{
-       le32p_replace_bits((__paddr + 1), __value, GENMASK(7, 0));
-}
-
-static inline void set_earlymode_len3(__le32 *__paddr, u32 __value)
-{
-       le32p_replace_bits((__paddr + 1), __value, GENMASK(19, 8));
-}
-
-static inline void set_earlymode_len4(__le32 *__paddr, u32 __value)
-{
-       le32p_replace_bits((__paddr + 1), __value, GENMASK(31, 20));
-}
-
-struct rx_fwinfo_92d {
-       u8 gain_trsw[4];
-       u8 pwdb_all;
-       u8 cfosho[4];
-       u8 cfotail[4];
-       s8 rxevm[2];
-       s8 rxsnr[4];
-       u8 pdsnr[2];
-       u8 csi_current[2];
-       u8 csi_target[2];
-       u8 sigevm;
-       u8 max_ex_pwr;
-#ifdef __LITTLE_ENDIAN
-       u8 ex_intf_flag:1;
-       u8 sgi_en:1;
-       u8 rxsc:2;
-       u8 reserve:4;
-#else
-       u8 reserve:4;
-       u8 rxsc:2;
-       u8 sgi_en:1;
-       u8 ex_intf_flag:1;
-#endif
-} __packed;
-
 struct tx_desc_92d {
        u32 pktsize:16;
        u32 offset:8;
@@ -515,14 +127,6 @@ void rtl92de_tx_fill_desc(struct ieee80211_hw *hw,
                          struct ieee80211_sta *sta,
                          struct sk_buff *skb, u8 hw_queue,
                          struct rtl_tcb_desc *ptcb_desc);
-bool rtl92de_rx_query_desc(struct ieee80211_hw *hw,
-                          struct rtl_stats *stats,
-                          struct ieee80211_rx_status *rx_status,
-                          u8 *pdesc, struct sk_buff *skb);
-void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
-                     u8 desc_name, u8 *val);
-u64 rtl92de_get_desc(struct ieee80211_hw *hw,
-                    u8 *p_desc, bool istx, u8 desc_name);
 bool rtl92de_is_tx_desc_closed(struct ieee80211_hw *hw,
                               u8 hw_queue, u16 index);
 void rtl92de_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
index 9fabf59..098db85 100644 (file)
@@ -2268,6 +2268,7 @@ struct rtl_hal_ops {
        bool (*config_bb_with_pgheaderfile)(struct ieee80211_hw *hw,
                                            u8 configtype);
        void (*phy_lc_calibrate)(struct ieee80211_hw *hw, bool is2t);
+       void (*phy_iq_calibrate)(struct ieee80211_hw *hw);
        void (*phy_set_bw_mode_callback)(struct ieee80211_hw *hw);
        void (*dm_dynamic_txpower)(struct ieee80211_hw *hw);
        void (*c2h_command_handle)(struct ieee80211_hw *hw);