u32 rssi, total_rssi = 0;
        bool is_cck_rate;
 
-       is_cck_rate = RX_HAL_IS_CCK_RATE(pdesc);
+       is_cck_rate = RX_HAL_IS_CCK_RATE(pdesc->rxmcs);
        pstats->packet_matchbssid = packet_match_bssid;
        pstats->packet_toself = packet_toself;
        pstats->is_cck = is_cck_rate;
        stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc);
        stats->is_ht = (bool)GET_RX_DESC_RXHT(pdesc);
 
-       stats->is_cck = RX_HAL_IS_CCK_RATE(pdesc);
+       stats->is_cck = RX_HAL_IS_CCK_RATE(pdesc->rxmcs);
 
        rx_status->freq = hw->conf.chandef.chan->center_freq;
        rx_status->band = hw->conf.chandef.chan->band;
 
        bool is_cck_rate;
        u8 *pdesc = (u8 *)p_desc;
 
-       is_cck_rate = RX_HAL_IS_CCK_RATE(p_desc);
+       is_cck_rate = RX_HAL_IS_CCK_RATE(p_desc->rxmcs);
        pstats->packet_matchbssid = packet_match_bssid;
        pstats->packet_toself = packet_toself;
        pstats->packet_beacon = packet_beacon;
 
        u32 rssi, total_rssi = 0;
        bool is_cck_rate;
 
-       is_cck_rate = RX_HAL_IS_CCK_RATE(pdesc);
+       is_cck_rate = RX_HAL_IS_CCK_RATE(pdesc->rxmcs);
        pstats->packet_matchbssid = packet_match_bssid;
        pstats->packet_toself = packet_toself;
        pstats->packet_beacon = packet_beacon;
 
 #define FW_8192C_END_ADDRESS                   0x3FFF
 #define FW_8192C_PAGE_SIZE                             4096
 #define FW_8192C_POLLING_DELAY                 5
-#define FW_8192C_POLLING_TIMEOUT_COUNT 1000
 
 #define IS_FW_HEADER_EXIST(_pfwhdr)    \
        ((_pfwhdr->signature&0xFFFF) == 0x2300 ||\
 
                goto exit;
        }
 
-       err = rtl8723_download_fw(hw, false, FW_8192C_POLLING_TIMEOUT_COUNT);
+       err = rtl8723_download_fw(hw, false, FW_8723A_POLLING_TIMEOUT_COUNT);
        if (err) {
                RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
                         "Failed to download FW. Init HW without FW now..\n");
 
 
 }
 
-static void rtl8723_phy_save_adda_registers(struct ieee80211_hw *hw,
-                                           u32 *addareg, u32 *addabackup,
-                                           u32 registernum)
-{
-       u32 i;
-
-       for (i = 0; i < registernum; i++)
-               addabackup[i] = rtl_get_bbreg(hw, addareg[i], MASKDWORD);
-}
-
 static void _rtl8723e_phy_iq_calibrate(struct ieee80211_hw *hw,
                                       long result[][8], u8 t, bool is2t)
 {
        if (t == 0) {
                bbvalue = rtl_get_bbreg(hw, 0x800, MASKDWORD);
 
-               rtl8723_phy_save_adda_registers(hw, adda_reg,
-                                               rtlphy->adda_backup, 16);
+               rtl8723_save_adda_registers(hw, adda_reg,
+                                           rtlphy->adda_backup, 16);
                rtl8723_phy_save_mac_registers(hw, iqk_mac_reg,
                                               rtlphy->iqk_mac_backup);
        }
                rtl8723_phy_path_a_fill_iqk_matrix(hw, b_patha_ok, result,
                                                   final_candidate,
                                                   (reg_ea4 == 0));
-       rtl8723_phy_save_adda_registers(hw, iqk_bb_reg,
-                                       rtlphy->iqk_bb_backup, 10);
+       rtl8723_save_adda_registers(hw, iqk_bb_reg,
+                                   rtlphy->iqk_bb_backup, 10);
 }
 
 void rtl8723e_phy_lc_calibrate(struct ieee80211_hw *hw)
 
        status->rx_is40Mhzpacket = (bool)GET_RX_DESC_BW(pdesc);
        status->is_ht = (bool)GET_RX_DESC_RXHT(pdesc);
 
-       status->is_cck = RTL8723E_RX_HAL_IS_CCK_RATE(status->rate);
+       status->is_cck = RX_HAL_IS_CCK_RATE(status->rate);
 
        rx_status->freq = hw->conf.chandef.chan->center_freq;
        rx_status->band = hw->conf.chandef.chan->band;
 
 #ifndef __RTL8723BE_DEF_H__
 #define __RTL8723BE_DEF_H__
 
-#define HAL_RETRY_LIMIT_INFRA                          48
-#define HAL_RETRY_LIMIT_AP_ADHOC                       7
-
-#define RESET_DELAY_8185                               20
-
-#define RT_IBSS_INT_MASKS      (IMR_BCNINT | IMR_TBDOK | IMR_TBDER)
-#define RT_AC_INT_MASKS                (IMR_VIDOK | IMR_VODOK | IMR_BEDOK|IMR_BKDOK)
-
-#define NUM_OF_FIRMWARE_QUEUE                  10
-#define NUM_OF_PAGES_IN_FW                     0x100
-#define NUM_OF_PAGE_IN_FW_QUEUE_BK             0x07
-#define NUM_OF_PAGE_IN_FW_QUEUE_BE             0x07
-#define NUM_OF_PAGE_IN_FW_QUEUE_VI             0x07
-#define NUM_OF_PAGE_IN_FW_QUEUE_VO             0x07
-#define NUM_OF_PAGE_IN_FW_QUEUE_HCCA           0x0
-#define NUM_OF_PAGE_IN_FW_QUEUE_CMD            0x0
-#define NUM_OF_PAGE_IN_FW_QUEUE_MGNT           0x02
-#define NUM_OF_PAGE_IN_FW_QUEUE_HIGH           0x02
-#define NUM_OF_PAGE_IN_FW_QUEUE_BCN            0x2
-#define NUM_OF_PAGE_IN_FW_QUEUE_PUB            0xA1
-
-#define NUM_OF_PAGE_IN_FW_QUEUE_BK_DTM         0x026
-#define NUM_OF_PAGE_IN_FW_QUEUE_BE_DTM         0x048
-#define NUM_OF_PAGE_IN_FW_QUEUE_VI_DTM         0x048
-#define NUM_OF_PAGE_IN_FW_QUEUE_VO_DTM         0x026
-#define NUM_OF_PAGE_IN_FW_QUEUE_PUB_DTM                0x00
-
-#define MAX_LINES_HWCONFIG_TXT                 1000
-#define MAX_BYTES_LINE_HWCONFIG_TXT            256
-
-#define SW_THREE_WIRE                          0
-#define HW_THREE_WIRE                          2
-
-#define BT_DEMO_BOARD                          0
-#define BT_QA_BOARD                            1
-#define BT_FPGA                                        2
-
 #define HAL_PRIME_CHNL_OFFSET_DONT_CARE                0
 #define HAL_PRIME_CHNL_OFFSET_LOWER            1
 #define HAL_PRIME_CHNL_OFFSET_UPPER            2
 
-#define MAX_H2C_QUEUE_NUM                      10
 
 #define RX_MPDU_QUEUE                          0
-#define RX_CMD_QUEUE                           1
-#define RX_MAX_QUEUE                           2
-#define AC2QUEUEID(_AC)                                (_AC)
-
-#define        C2H_RX_CMD_HDR_LEN                      8
-#define        GET_C2H_CMD_CMD_LEN(__prxhdr)           \
-       LE_BITS_TO_4BYTE((__prxhdr), 0, 16)
-#define        GET_C2H_CMD_ELEMENT_ID(__prxhdr)        \
-       LE_BITS_TO_4BYTE((__prxhdr), 16, 8)
-#define        GET_C2H_CMD_CMD_SEQ(__prxhdr)           \
-       LE_BITS_TO_4BYTE((__prxhdr), 24, 7)
-#define        GET_C2H_CMD_CONTINUE(__prxhdr)          \
-       LE_BITS_TO_4BYTE((__prxhdr), 31, 1)
-#define        GET_C2H_CMD_CONTENT(__prxhdr)           \
-       ((u8 *)(__prxhdr) + C2H_RX_CMD_HDR_LEN)
-
-#define        GET_C2H_CMD_FEEDBACK_ELEMENT_ID(__pcmdfbhdr)    \
-       LE_BITS_TO_4BYTE((__pcmdfbhdr), 0, 8)
-#define        GET_C2H_CMD_FEEDBACK_CCX_LEN(__pcmdfbhdr)       \
-       LE_BITS_TO_4BYTE((__pcmdfbhdr), 8, 8)
-#define        GET_C2H_CMD_FEEDBACK_CCX_CMD_CNT(__pcmdfbhdr)   \
-       LE_BITS_TO_4BYTE((__pcmdfbhdr), 16, 16)
-#define        GET_C2H_CMD_FEEDBACK_CCX_MAC_ID(__pcmdfbhdr)    \
-       LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 0, 5)
-#define        GET_C2H_CMD_FEEDBACK_CCX_VALID(__pcmdfbhdr)     \
-       LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 7, 1)
-#define        GET_C2H_CMD_FEEDBACK_CCX_RETRY_CNT(__pcmdfbhdr) \
-       LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 8, 5)
-#define        GET_C2H_CMD_FEEDBACK_CCX_TOK(__pcmdfbhdr)       \
-       LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 15, 1)
-#define        GET_C2H_CMD_FEEDBACK_CCX_QSEL(__pcmdfbhdr)      \
-       LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 16, 4)
-#define        GET_C2H_CMD_FEEDBACK_CCX_SEQ(__pcmdfbhdr)       \
-       LE_BITS_TO_4BYTE(((__pcmdfbhdr) + 4), 20, 12)
-
-#define CHIP_BONDING_IDENTIFIER(_value)        (((_value)>>22)&0x3)
-#define        CHIP_BONDING_92C_1T2R           0x1
-
-#define CHIP_8723                      BIT(0)
-#define CHIP_8723B                     (BIT(1) | BIT(2))
-#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 B_CUT_VERSION                  BIT(12)
-#define C_CUT_VERSION                  BIT(13)
-#define D_CUT_VERSION                  ((BIT(12) | BIT(13)))
-#define E_CUT_VERSION                  BIT(14)
-#define        RF_RL_ID                        (BIT(31) | BIT(30) | BIT(29) | BIT(28))
-
-/* 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_92C_SERIAL(version)   ((IS_81XXC(version) && IS_2T2R(version)) ?\
-                                                               true : false)
-#define IS_81XXC(version)      ((GET_CVID_IC_TYPE(version) == 0) ?\
-                                                       true : false)
-#define IS_8723_SERIES(version)        ((GET_CVID_IC_TYPE(version) == CHIP_8723) ?\
-                                                       true : false)
-#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)
-enum rf_optype {
-       RF_OP_BY_SW_3WIRE = 0,
-       RF_OP_BY_FW,
-       RF_OP_MAX
-};
-
-enum rf_power_state {
-       RF_ON,
-       RF_OFF,
-       RF_SLEEP,
-       RF_SHUT_DOWN,
-};
-
-enum power_save_mode {
-       POWER_SAVE_MODE_ACTIVE,
-       POWER_SAVE_MODE_SAVE,
-};
+#define CHIP_8723B                             (BIT(1) | BIT(2))
+#define NORMAL_CHIP                            BIT(3)
+#define CHIP_VENDOR_SMIC                       BIT(8)
+/* Currently only for RTL8723B */
+#define EXT_VENDOR_ID                          (BIT(18) | BIT(19))
 
-enum power_polocy_config {
-       POWERCFG_MAX_POWER_SAVINGS,
-       POWERCFG_GLOBAL_POWER_SAVINGS,
-       POWERCFG_LOCAL_POWER_SAVINGS,
-       POWERCFG_LENOVO,
-};
-
-enum interface_select_pci {
-       INTF_SEL1_MINICARD = 0,
-       INTF_SEL0_PCIE = 1,
-       INTF_SEL2_RSV = 2,
-       INTF_SEL3_RSV = 3,
+enum rx_packet_type {
+       NORMAL_RX,
+       TX_REPORT1,
+       TX_REPORT2,
+       HIS_REPORT,
+       C2H_PACKET,
 };
 
 enum rtl_desc_qsel {
        DESC92C_RATEMCS13 = 0x19,
        DESC92C_RATEMCS14 = 0x1a,
        DESC92C_RATEMCS15 = 0x1b,
-       DESC92C_RATEMCS15_SG = 0x1c,
-       DESC92C_RATEMCS32 = 0x20,
 };
-
-enum rx_packet_type {
-       NORMAL_RX,
-       TX_REPORT1,
-       TX_REPORT2,
-       HIS_REPORT,
-};
-
-struct phy_sts_cck_8723e_t {
-       u8 adc_pwdb_X[4];
-       u8 sq_rpt;
-       u8 cck_agc_rpt;
-};
-
-struct h2c_cmd_8723e {
-       u8 element_id;
-       u32 cmd_len;
-       u8 *p_cmdbuffer;
-};
-
 #endif
 
 #include "dm.h"
 #include "../rtl8723com/dm_common.h"
 #include "fw.h"
-#include "../rtl8723com/fw_common.h"
 #include "trx.h"
 #include "../btcoexist/rtl_btc.h"
 
                pwr_val = TXPWRTRACK_MAX_IDX;
 
        *poutwrite_val = pwr_val | (pwr_val << 8) |
-                       (pwr_val << 16) | (pwr_val << 24);
+               (pwr_val << 16) | (pwr_val << 24);
 }
 
 static void rtl8723be_dm_diginit(struct ieee80211_hw *hw)
        struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
 
        dm_digtable->dig_enable_flag = true;
-       dm_digtable->cur_igvalue = rtl_get_bbreg(hw,
-               ROFDM0_XAAGCCORE1, 0x7f);
+       dm_digtable->cur_igvalue = rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f);
        dm_digtable->rssi_lowthresh = DM_DIG_THRESH_LOW;
        dm_digtable->rssi_highthresh = DM_DIG_THRESH_HIGH;
        dm_digtable->fa_lowthresh = DM_FALSEALARM_THRESH_LOW;
        dm_digtable->forbidden_igi = DM_DIG_MIN;
        dm_digtable->large_fa_hit = 0;
        dm_digtable->recover_cnt = 0;
-       dm_digtable->dig_min_0 = DM_DIG_MIN;
-       dm_digtable->dig_min_1 = DM_DIG_MIN;
+       dm_digtable->dig_dynamic_min = DM_DIG_MIN;
+       dm_digtable->dig_dynamic_min_1 = DM_DIG_MIN;
        dm_digtable->media_connect_0 = false;
        dm_digtable->media_connect_1 = false;
        rtlpriv->dm.dm_initialgain_enable = true;
 void rtl8723be_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rate_adaptive *ra = &(rtlpriv->ra);
+       struct rate_adaptive *p_ra = &rtlpriv->ra;
 
-       ra->ratr_state = DM_RATR_STA_INIT;
-       ra->pre_ratr_state = DM_RATR_STA_INIT;
+       p_ra->ratr_state = DM_RATR_STA_INIT;
+       p_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;
 
-       ra->high_rssi_thresh_for_ra = 50;
-       ra->low_rssi_thresh_for_ra40m = 20;
+       p_ra->high_rssi_thresh_for_ra = 50;
+       p_ra->low_rssi_thresh_for_ra40m = 20;
 }
 
 static void rtl8723be_dm_init_txpower_tracking(struct ieee80211_hw *hw)
 
        RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
                 "  rtlpriv->dm.txpower_tracking = %d\n",
-                rtlpriv->dm.txpower_tracking);
+                 rtlpriv->dm.txpower_tracking);
 }
 
 static void rtl8723be_dm_init_dynamic_atc_switch(struct ieee80211_hw *hw)
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        rtlpriv->dm.crystal_cap = rtlpriv->efuse.crystalcap;
+
        rtlpriv->dm.atc_status = rtl_get_bbreg(hw, ROFDM1_CFOTRACKING, 0x800);
        rtlpriv->dm.cfo_threshold = CFO_THRESHOLD_XTAL;
 }
 static void rtl8723be_dm_find_minimum_rssi(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct dig_t *rtl_dm_dig = &(rtlpriv->dm_digtable);
+       struct dig_t *rtl_dm_dig = &rtlpriv->dm_digtable;
        struct rtl_mac *mac = rtl_mac(rtlpriv);
 
        /* Determine the minimum RSSI  */
                            rtlpriv->dm.entry_min_undec_sm_pwdb;
                        RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD,
                                 "AP Client PWDB = 0x%lx\n",
-                                rtlpriv->dm.entry_min_undec_sm_pwdb);
+                              rtlpriv->dm.entry_min_undec_sm_pwdb);
                } else {
                        rtl_dm_dig->min_undec_pwdb_for_dm =
                            rtlpriv->dm.undec_sm_pwdb;
                        RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD,
                                 "STA Default Port PWDB = 0x%x\n",
-                                rtl_dm_dig->min_undec_pwdb_for_dm);
+                                 rtl_dm_dig->min_undec_pwdb_for_dm);
                }
        } else {
                rtl_dm_dig->min_undec_pwdb_for_dm =
                                rtlpriv->dm.entry_min_undec_sm_pwdb;
                RT_TRACE(rtlpriv, COMP_BB_POWERSAVING, DBG_LOUD,
                         "AP Ext Port or disconnet PWDB = 0x%x\n",
-                        rtl_dm_dig->min_undec_pwdb_for_dm);
+                         rtl_dm_dig->min_undec_pwdb_for_dm);
        }
        RT_TRACE(rtlpriv, COMP_DIG, DBG_LOUD, "MinUndecoratedPWDBForDM =%d\n",
                 rtl_dm_dig->min_undec_pwdb_for_dm);
 static void rtl8723be_dm_check_rssi_monitor(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
        struct rtl_sta_info *drv_priv;
        u8 h2c_parameter[3] = { 0 };
        long tmp_entry_max_pwdb = 0, tmp_entry_min_pwdb = 0xff;
 
        /* If associated entry is found */
        if (tmp_entry_max_pwdb != 0) {
-               rtlpriv->dm.entry_max_undec_sm_pwdb = tmp_entry_max_pwdb;
-               RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                        "EntryMaxPWDB = 0x%lx(%ld)\n",
+               rtlpriv->dm.entry_max_undec_sm_pwdb =
+                                                       tmp_entry_max_pwdb;
+               RTPRINT(rtlpriv, FDM, DM_PWDB,
+                       "EntryMaxPWDB = 0x%lx(%ld)\n",
                         tmp_entry_max_pwdb, tmp_entry_max_pwdb);
        } else {
                rtlpriv->dm.entry_max_undec_sm_pwdb = 0;
        }
        /* If associated entry is found */
        if (tmp_entry_min_pwdb != 0xff) {
-               rtlpriv->dm.entry_min_undec_sm_pwdb = tmp_entry_min_pwdb;
-               RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                        "EntryMinPWDB = 0x%lx(%ld)\n",
+               rtlpriv->dm.entry_min_undec_sm_pwdb =
+                                                       tmp_entry_min_pwdb;
+               RTPRINT(rtlpriv, FDM, DM_PWDB,
+                       "EntryMinPWDB = 0x%lx(%ld)\n",
                         tmp_entry_min_pwdb, tmp_entry_min_pwdb);
        } else {
                rtlpriv->dm.entry_min_undec_sm_pwdb = 0;
        }
        /* Indicate Rx signal strength to FW. */
        if (rtlpriv->dm.useramask) {
-               h2c_parameter[2] = (u8) (rtlpriv->dm.undec_sm_pwdb & 0xFF);
+               h2c_parameter[2] =
+                       (u8)(rtlpriv->dm.undec_sm_pwdb & 0xFF);
                h2c_parameter[1] = 0x20;
                h2c_parameter[0] = 0;
-               rtl8723be_fill_h2c_cmd(hw, H2C_RSSI_REPORT, 3, h2c_parameter);
+               rtl8723be_fill_h2c_cmd(hw, H2C_RSSIBE_REPORT, 3, h2c_parameter);
        } else {
-               rtl_write_byte(rtlpriv, 0x4fe, rtlpriv->dm.undec_sm_pwdb);
+               rtl_write_byte(rtlpriv, 0x4fe,
+                              rtlpriv->dm.undec_sm_pwdb);
        }
        rtl8723be_dm_find_minimum_rssi(hw);
-       rtlpriv->dm_digtable.rssi_val_min =
-               rtlpriv->dm_digtable.min_undec_pwdb_for_dm;
+       dm_digtable->rssi_val_min =
+                       rtlpriv->dm_digtable.min_undec_pwdb_for_dm;
 }
 
 void rtl8723be_dm_write_dig(struct ieee80211_hw *hw, u8 current_igi)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
 
-       if (rtlpriv->dm_digtable.cur_igvalue != current_igi) {
+       if (dm_digtable->stop_dig)
+               return;
+
+       if (dm_digtable->cur_igvalue != current_igi) {
                rtl_set_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f, current_igi);
                if (rtlpriv->phy.rf_type != RF_1T1R)
-                       rtl_set_bbreg(hw, ROFDM0_XBAGCCORE1, 0x7f, current_igi);
+                       rtl_set_bbreg(hw, ROFDM0_XBAGCCORE1,
+                                     0x7f, current_igi);
        }
-       rtlpriv->dm_digtable.pre_igvalue = rtlpriv->dm_digtable.cur_igvalue;
-       rtlpriv->dm_digtable.cur_igvalue = current_igi;
+       dm_digtable->pre_igvalue = dm_digtable->cur_igvalue;
+       dm_digtable->cur_igvalue = current_igi;
 }
 
 static void rtl8723be_dm_dig(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
        struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       struct dig_t *dm_digtable = &(rtlpriv->dm_digtable);
        u8 dig_dynamic_min, dig_maxofmin;
-       bool firstconnect, firstdisconnect;
+       bool bfirstconnect, bfirstdisconnect;
        u8 dm_dig_max, dm_dig_min;
        u8 current_igi = dm_digtable->cur_igvalue;
        u8 offset;
 
-       /* AP, BT */
+       /* AP,BT */
        if (mac->act_scanning)
                return;
 
-       dig_dynamic_min = dm_digtable->dig_min_0;
-       firstconnect = (mac->link_state >= MAC80211_LINKED) &&
+       dig_dynamic_min = dm_digtable->dig_dynamic_min;
+       bfirstconnect = (mac->link_state >= MAC80211_LINKED) &&
                        !dm_digtable->media_connect_0;
-       firstdisconnect = (mac->link_state < MAC80211_LINKED) &&
-                          dm_digtable->media_connect_0;
+       bfirstdisconnect = (mac->link_state < MAC80211_LINKED) &&
+                       (dm_digtable->media_connect_0);
 
        dm_dig_max = 0x5a;
        dm_dig_min = DM_DIG_MIN;
                } else {
                        dig_dynamic_min = dm_dig_min;
                }
+
        } else {
                dm_digtable->rx_gain_max = dm_dig_max;
                dig_dynamic_min = dm_dig_min;
                dm_digtable->rx_gain_min = dm_digtable->rx_gain_max;
 
        if (mac->link_state >= MAC80211_LINKED) {
-               if (firstconnect) {
+               if (bfirstconnect) {
                        if (dm_digtable->rssi_val_min <= dig_maxofmin)
                                current_igi = dm_digtable->rssi_val_min;
                        else
                                current_igi -= 2;
                }
        } else {
-               if (firstdisconnect) {
+               if (bfirstdisconnect) {
                        current_igi = dm_digtable->rx_gain_min;
                } else {
                        if (rtlpriv->falsealm_cnt.cnt_all > 10000)
        rtl8723be_dm_write_dig(hw, current_igi);
        dm_digtable->media_connect_0 =
                ((mac->link_state >= MAC80211_LINKED) ? true : false);
-       dm_digtable->dig_min_0 = dig_dynamic_min;
+       dm_digtable->dig_dynamic_min = dig_dynamic_min;
 }
 
-static void rtl8723be_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw)
+static void rtl8723be_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);
+       struct false_alarm_statistics *falsealm_cnt = &rtlpriv->falsealm_cnt;
 
        rtl_set_bbreg(hw, DM_REG_OFDM_FA_HOLDC_11N, BIT(31), 1);
        rtl_set_bbreg(hw, DM_REG_OFDM_FA_RSTD_11N, BIT(31), 1);
        rtl_set_bbreg(hw, DM_REG_CCK_FA_RST_11N, BIT(15) | BIT(14), 2);
 
        RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE,
-                "cnt_parity_fail = %d, cnt_rate_illegal = %d, "
-                "cnt_crc8_fail = %d, cnt_mcs_fail = %d\n",
+                "cnt_parity_fail = %d, cnt_rate_illegal = %d, cnt_crc8_fail = %d, cnt_mcs_fail = %d\n",
                 falsealm_cnt->cnt_parity_fail,
                 falsealm_cnt->cnt_rate_illegal,
                 falsealm_cnt->cnt_crc8_fail,
                 falsealm_cnt->cnt_mcs_fail);
 
        RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE,
-                "cnt_ofdm_fail = %x, cnt_cck_fail = %x,"
-                " cnt_all = %x\n",
+                "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);
                                        u8 rfpath, u8 idx)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
        u8 swing_idx_ofdm_limit = 36;
 
        }
 }
 
-static void txpwr_track_cb_therm(struct ieee80211_hw *hw)
+static void rtl8723be_dm_txpower_tracking_callback_thermalmeter(
+                                                       struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
        int i = 0;
 
        u8 ofdm_min_index = 6;
-       u8 index = 0;
+       u8 index_for_channel = 0;
 
-       char delta_swing_table_idx_tup_a[] = {
+       char delta_swing_table_idx_tup_a[TXSCALE_TABLE_SIZE] = {
                0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,
                5, 6, 6, 7, 7, 8, 8, 9, 9, 9, 10,
                10, 11, 11, 12, 12, 13, 14, 15};
-       char delta_swing_table_idx_tdown_a[] = {
+       char delta_swing_table_idx_tdown_a[TXSCALE_TABLE_SIZE] = {
                0, 0, 1, 2, 2, 2, 3, 3, 3, 4,  5,
                5, 6, 6, 6, 6, 7, 7, 7, 8, 8,  9,
                9, 10, 10, 11, 12, 13, 14, 15};
 
-       /*Initilization ( 7 steps in total)*/
+       /*Initilization ( 7 steps in total )*/
        rtlpriv->dm.txpower_trackinginit = true;
        RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                "rtl8723be_dm_txpower_tracking"
-                "_callback_thermalmeter\n");
+                "rtl8723be_dm_txpower_tracking_callback_thermalmeter\n");
 
-       thermalvalue = (u8)rtl_get_rfreg(hw, RF90_PATH_A, RF_T_METER, 0xfc00);
+       thermalvalue = (u8)rtl_get_rfreg(hw,
+               RF90_PATH_A, RF_T_METER, 0xfc00);
        if (!rtlpriv->dm.txpower_track_control || thermalvalue == 0 ||
            rtlefuse->eeprom_thermalmeter == 0xFF)
                return;
        RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
-                "Readback Thermal Meter = 0x%x pre thermal meter 0x%x "
-                "eeprom_thermalmeter 0x%x\n",
+                "Readback Thermal Meter = 0x%x pre thermal meter 0x%x eeprom_thermalmeter 0x%x\n",
                 thermalvalue, rtldm->thermalvalue,
                 rtlefuse->eeprom_thermalmeter);
        /*3 Initialize ThermalValues of RFCalibrateInfo*/
                    (rtlpriv->dm.thermalvalue_iqk - thermalvalue);
 
        RT_TRACE(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",
+                "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);
        /* 6 If necessary, do LCK.*/
                rtldm->done_txpower = true;
                if (thermalvalue > rtlefuse->eeprom_thermalmeter)
                        rtl8723be_dm_tx_power_track_set_power(hw, BBSWING, 0,
-                                                             index);
+                                                            index_for_channel);
                else
                        rtl8723be_dm_tx_power_track_set_power(hw, BBSWING, 0,
-                                                             index);
+                                                            index_for_channel);
 
                rtldm->swing_idx_cck_base = rtldm->swing_idx_cck;
                rtldm->swing_idx_ofdm_base[RF90_PATH_A] =
 
        rtldm->txpowercount = 0;
        RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, "end\n");
+
 }
 
 void rtl8723be_dm_check_txpower_tracking(struct ieee80211_hw *hw)
        } else {
                RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
                         "Schedule TxPowerTracking !!\n");
-               txpwr_track_cb_therm(hw);
+               rtl8723be_dm_txpower_tracking_callback_thermalmeter(hw);
                tm_trigger = 0;
        }
 }
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
        struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       struct rate_adaptive *ra = &(rtlpriv->ra);
-       struct ieee80211_sta *sta = NULL;
-       u32 low_rssithresh_for_ra = ra->low2high_rssi_thresh_for_ra40m;
-       u32 high_rssithresh_for_ra = ra->high_rssi_thresh_for_ra;
+       struct rate_adaptive *p_ra = &rtlpriv->ra;
+       u32 low_rssithresh_for_ra = p_ra->low2high_rssi_thresh_for_ra40m;
+       u32 high_rssithresh_for_ra = p_ra->high_rssi_thresh_for_ra;
        u8 go_up_gap = 5;
+       struct ieee80211_sta *sta = NULL;
 
        if (is_hal_stop(rtlhal)) {
                RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
        }
 
        if (mac->link_state == MAC80211_LINKED &&
-           mac->opmode == NL80211_IFTYPE_STATION) {
-               switch (ra->pre_ratr_state) {
+               mac->opmode == NL80211_IFTYPE_STATION) {
+               switch (p_ra->pre_ratr_state) {
                case DM_RATR_STA_MIDDLE:
                        high_rssithresh_for_ra += go_up_gap;
                        break;
 
                if (rtlpriv->dm.undec_sm_pwdb >
                    (long)high_rssithresh_for_ra)
-                       ra->ratr_state = DM_RATR_STA_HIGH;
+                       p_ra->ratr_state = DM_RATR_STA_HIGH;
                else if (rtlpriv->dm.undec_sm_pwdb >
                         (long)low_rssithresh_for_ra)
-                       ra->ratr_state = DM_RATR_STA_MIDDLE;
+                       p_ra->ratr_state = DM_RATR_STA_MIDDLE;
                else
-                       ra->ratr_state = DM_RATR_STA_LOW;
+                       p_ra->ratr_state = DM_RATR_STA_LOW;
 
-               if (ra->pre_ratr_state != ra->ratr_state) {
+               if (p_ra->pre_ratr_state != p_ra->ratr_state) {
                        RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
                                 "RSSI = %ld\n",
                                 rtlpriv->dm.undec_sm_pwdb);
                        RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
-                                "RSSI_LEVEL = %d\n", ra->ratr_state);
+                                "RSSI_LEVEL = %d\n", p_ra->ratr_state);
                        RT_TRACE(rtlpriv, COMP_RATE, DBG_LOUD,
                                 "PreState = %d, CurState = %d\n",
-                                ra->pre_ratr_state, ra->ratr_state);
+                                 p_ra->pre_ratr_state, p_ra->ratr_state);
 
                        rcu_read_lock();
                        sta = rtl_find_sta(hw, mac->bssid);
                        if (sta)
                                rtlpriv->cfg->ops->update_rate_tbl(hw, sta,
-                                                          ra->ratr_state);
+                                                          p_ra->ratr_state);
                        rcu_read_unlock();
 
-                       ra->pre_ratr_state = ra->ratr_state;
+                       p_ra->pre_ratr_state = p_ra->ratr_state;
                }
        }
 }
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
-       if (rtlpriv->cfg->ops->get_btc_status()) {
-               if (rtlpriv->btcoexist.btc_ops->btc_is_disable_edca_turbo(rtlpriv))
-                       return true;
-       }
        if (rtlpriv->mac80211.mode == WIRELESS_MODE_B)
                return true;
 
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
+
        static u64 last_txok_cnt;
        static u64 last_rxok_cnt;
        u64 cur_txok_cnt = 0;
        u32 edca_be_dl = 0x6ea42b;/*not sure*/
        u32 edca_be = 0x5ea42b;
        u32 iot_peer = 0;
-       bool is_cur_rdlstate;
-       bool last_is_cur_rdlstate = false;
-       bool bias_on_rx = false;
-       bool edca_turbo_on = false;
+       bool b_is_cur_rdlstate;
+       bool b_last_is_cur_rdlstate = false;
+       bool b_bias_on_rx = false;
+       bool b_edca_turbo_on = false;
 
-       last_is_cur_rdlstate = rtlpriv->dm.is_cur_rdlstate;
+       b_last_is_cur_rdlstate = rtlpriv->dm.is_cur_rdlstate;
 
        cur_txok_cnt = rtlpriv->stats.txbytesunicast - last_txok_cnt;
        cur_rxok_cnt = rtlpriv->stats.rxbytesunicast - last_rxok_cnt;
 
        iot_peer = rtlpriv->mac80211.vendor;
-       bias_on_rx = (iot_peer == PEER_RAL || iot_peer == PEER_ATH) ?
-                    true : false;
-       edca_turbo_on = ((!rtlpriv->dm.is_any_nonbepkts) &&
-                        (!rtlpriv->dm.disable_framebursting)) ?
-                        true : false;
+       b_bias_on_rx = (iot_peer == PEER_RAL || iot_peer == PEER_ATH) ?
+                      true : false;
+       b_edca_turbo_on = ((!rtlpriv->dm.is_any_nonbepkts) &&
+                          (!rtlpriv->dm.disable_framebursting)) ?
+                          true : false;
 
        if ((iot_peer == PEER_CISCO) &&
            (mac->mode == WIRELESS_MODE_N_24G)) {
        if (rtl8723be_dm_is_edca_turbo_disable(hw))
                goto exit;
 
-       if (edca_turbo_on) {
-               if (bias_on_rx)
-                       is_cur_rdlstate = (cur_txok_cnt > cur_rxok_cnt * 4) ?
-                                         false : true;
+       if (b_edca_turbo_on) {
+               if (b_bias_on_rx)
+                       b_is_cur_rdlstate = (cur_txok_cnt > cur_rxok_cnt * 4) ?
+                                           false : true;
                else
-                       is_cur_rdlstate = (cur_rxok_cnt > cur_txok_cnt * 4) ?
-                                         true : false;
+                       b_is_cur_rdlstate = (cur_rxok_cnt > cur_txok_cnt * 4) ?
+                                           true : false;
 
-               edca_be = (is_cur_rdlstate) ? edca_be_dl : edca_be_ul;
+               edca_be = (b_is_cur_rdlstate) ? edca_be_dl : edca_be_ul;
                rtl_write_dword(rtlpriv, REG_EDCA_BE_PARAM, edca_be);
-               rtlpriv->dm.is_cur_rdlstate = is_cur_rdlstate;
+               rtlpriv->dm.is_cur_rdlstate = b_is_cur_rdlstate;
                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);
+                                                     (u8 *)(&tmp));
                }
                rtlpriv->dm.current_turbo_edca = false;
        }
 static void rtl8723be_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
        u8 cur_cck_cca_thresh;
 
        if (rtlpriv->mac80211.link_state >= MAC80211_LINKED) {
-               if (rtlpriv->dm_digtable.rssi_val_min > 25) {
+               if (dm_digtable->rssi_val_min > 25) {
                        cur_cck_cca_thresh = 0xcd;
-               } else if ((rtlpriv->dm_digtable.rssi_val_min <= 25) &&
-                          (rtlpriv->dm_digtable.rssi_val_min > 10)) {
+               } else if ((dm_digtable->rssi_val_min <= 25) &&
+                          (dm_digtable->rssi_val_min > 10)) {
                        cur_cck_cca_thresh = 0x83;
                } else {
                        if (rtlpriv->falsealm_cnt.cnt_cck_fail > 1000)
                        cur_cck_cca_thresh = 0x40;
        }
 
-       if (rtlpriv->dm_digtable.cur_cck_cca_thres != cur_cck_cca_thresh)
+       if (dm_digtable->cur_cck_cca_thres != cur_cck_cca_thresh)
                rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, cur_cck_cca_thresh);
 
-       rtlpriv->dm_digtable.pre_cck_cca_thres = rtlpriv->dm_digtable.cur_cck_cca_thres;
-       rtlpriv->dm_digtable.cur_cck_cca_thres = cur_cck_cca_thresh;
+       dm_digtable->pre_cck_cca_thres = dm_digtable->cur_cck_cca_thres;
+       dm_digtable->cur_cck_cca_thres = cur_cck_cca_thresh;
        RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE,
-                "CCK cca thresh hold =%x\n",
-                rtlpriv->dm_digtable.cur_cck_cca_thres);
+                "CCK cca thresh hold =%x\n", dm_digtable->cur_cck_cca_thres);
 }
 
 static void rtl8723be_dm_dynamic_edcca(struct ieee80211_hw *hw)
                if (rtlpriv->cfg->ops->get_btc_status()) {
                        if (!rtlpriv->btcoexist.btc_ops->btc_is_bt_disabled(rtlpriv)) {
                                RT_TRACE(rtlpriv, COMP_BT_COEXIST, DBG_LOUD,
-                                        "odm_DynamicATCSwitch(): Disable"
-                                        " CFO tracking for BT!!\n");
+                                        "odm_DynamicATCSwitch(): Disable CFO tracking for BT!!\n");
                                return;
                        }
                }
                if (cfo_ave_diff > 20 && rtldm->large_cfo_hit == 0) {
                        rtldm->large_cfo_hit = 1;
                        return;
-               } else {
+               } else
                        rtldm->large_cfo_hit = 0;
-               }
 
                rtldm->cfo_ave_pre = cfo_ave;
 
 static void rtl8723be_dm_common_info_self_update(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_sta_info *drv_priv;
        u8 cnt = 0;
+       struct rtl_sta_info *drv_priv;
 
        rtlpriv->dm.one_entry_only = false;
 
        if (rtlpriv->mac80211.opmode == NL80211_IFTYPE_STATION &&
-           rtlpriv->mac80211.link_state >= MAC80211_LINKED) {
+               rtlpriv->mac80211.link_state >= MAC80211_LINKED) {
                rtlpriv->dm.one_entry_only = true;
                return;
        }
 
        if (rtlpriv->mac80211.opmode == NL80211_IFTYPE_AP ||
-           rtlpriv->mac80211.opmode == NL80211_IFTYPE_ADHOC ||
-           rtlpriv->mac80211.opmode == NL80211_IFTYPE_MESH_POINT) {
+               rtlpriv->mac80211.opmode == NL80211_IFTYPE_ADHOC ||
+               rtlpriv->mac80211.opmode == NL80211_IFTYPE_MESH_POINT) {
                spin_lock_bh(&rtlpriv->locks.entry_list_lock);
                list_for_each_entry(drv_priv, &rtlpriv->entry_list, list) {
                        cnt++;
                fw_ps_awake = false;
 
        if ((ppsc->rfpwr_state == ERFON) &&
-           ((!fw_current_inpsmode) && fw_ps_awake) &&
-           (!ppsc->rfchange_inprogress)) {
+               ((!fw_current_inpsmode) && fw_ps_awake) &&
+               (!ppsc->rfchange_inprogress)) {
                rtl8723be_dm_common_info_self_update(hw);
                rtl8723be_dm_false_alarm_counter_statistics(hw);
                rtl8723be_dm_check_rssi_monitor(hw);
                rtl8723be_dm_dynamic_atc_switch(hw);
                rtl8723be_dm_check_txpower_tracking(hw);
                rtl8723be_dm_dynamic_txpower(hw);
-               if (rtlpriv->cfg->ops->get_btc_status())
-                       rtlpriv->btcoexist.btc_ops->btc_periodical(rtlpriv);
        }
        rtlpriv->dm.dbginfo.num_qry_beacon_pkt = 0;
 }
 
 #define        DM_REG_TX_CCK_BBON_11N                  0xE78
 #define        DM_REG_OFDM_RFON_11N                    0xE7C
 #define        DM_REG_OFDM_BBON_11N                    0xE80
-#define DM_REG_TX2RX_11N                       0xE84
+#define                DM_REG_TX2RX_11N                0xE84
 #define        DM_REG_TX2TX_11N                        0xE88
 #define        DM_REG_RX_CCK_11N                       0xE8C
 #define        DM_REG_RX_OFDM_11N                      0xED0
 #define DM_DIG_BACKOFF_MIN                     -4
 #define DM_DIG_BACKOFF_DEFAULT                 10
 
+#define RXPATHSELECTION_SS_TH_LOW              30
 #define RXPATHSELECTION_DIFF_TH                        18
 
 #define DM_RATR_STA_INIT                       0
 #define CTS2SELF_THVAL                         30
 #define REGC38_TH                              20
 
+#define WAIOTTHVAL                             25
+
 #define TXHIGHPWRLEVEL_NORMAL                  0
 #define TXHIGHPWRLEVEL_LEVEL1                  1
 #define TXHIGHPWRLEVEL_LEVEL2                  2
 #define        CFO_THRESHOLD_XTAL                      10 /* kHz */
 #define        CFO_THRESHOLD_ATC                       80 /* kHz */
 
-enum FAT_STATE {
-       FAT_NORMAL_STATE        = 0,
-       FAT_TRAINING_STATE      = 1,
-};
-
-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_e {
        CCA_1R          = 0,
        CCA_2R          = 1,
 #define BT_RSSI_STATE_SPECIAL_LOW       BIT_OFFSET_LEN_MASK_32(2, 1)
 #define BT_RSSI_STATE_BG_EDCA_LOW       BIT_OFFSET_LEN_MASK_32(3, 1)
 #define BT_RSSI_STATE_TXPOWER_LOW       BIT_OFFSET_LEN_MASK_32(4, 1)
+#define GET_UNDECORATED_AVERAGE_RSSI(_priv)     \
+       ((((struct rtl_priv *)(_priv))->mac80211.opmode == \
+               NL80211_IFTYPE_ADHOC) ? \
+       (((struct rtl_priv *)(_priv))->dm.entry_min_undecoratedsmoothed_pwdb) :\
+       (((struct rtl_priv *)(_priv))->dm.undecorated_smoothed_pwdb))
 
 void rtl8723be_dm_set_tx_ant_by_tx_info(struct ieee80211_hw *hw, u8 *pdesc,
                                        u32 mac_id);
 void rtl8723be_dm_ant_sel_statistics(struct ieee80211_hw *hw, u8 antsel_tr_mux,
                                     u32 mac_id, u32 rx_pwdb_all);
-void rtl8723be_dm_fast_antenna_trainning_callback(unsigned long data);
+void rtl8723be_dm_fast_antenna_training_callback(unsigned long data);
 void rtl8723be_dm_init(struct ieee80211_hw *hw);
 void rtl8723be_dm_watchdog(struct ieee80211_hw *hw);
 void rtl8723be_dm_write_dig(struct ieee80211_hw *hw, u8 current_igi);
 void rtl8723be_dm_init_rate_adaptive_mask(struct ieee80211_hw *hw);
 void rtl8723be_dm_txpower_track_adjust(struct ieee80211_hw *hw, u8 type,
                                       u8 *pdirection, u32 *poutwrite_val);
-void rtl8723be_dm_init_edca_turbo(struct ieee80211_hw *hw);
-
 #endif
 
        bool isfw_read = false;
        u8 buf_index = 0;
        bool bwrite_sucess = false;
-       u8 wait_h2c_limit = 100;
-       u8 wait_writeh2c_limit = 100;
+       u8 wait_h2c_limmit = 100;
+       u8 wait_writeh2c_limmit = 100;
        u8 boxcontent[4], boxextcontent[4];
        u32 h2c_waitcounter = 0;
        unsigned long flag;
                spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag);
                if (rtlhal->h2c_setinprogress) {
                        RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD,
-                                "H2C set in progress! Wait to set.."
-                                "element_id(%d).\n", element_id);
+                                "H2C set in progress! Wait to set..element_id(%d).\n",
+                                element_id);
 
                        while (rtlhal->h2c_setinprogress) {
                                spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock,
                        break;
                }
        }
+
        while (!bwrite_sucess) {
-               wait_writeh2c_limit--;
-               if (wait_writeh2c_limit == 0) {
+               wait_writeh2c_limmit--;
+               if (wait_writeh2c_limmit == 0) {
                        RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
-                                "Write H2C fail because no trigger "
-                                "for FW INT!\n");
+                                "Write H2C fail because no trigger for FW INT!\n");
                        break;
                }
+
                boxnum = rtlhal->last_hmeboxnum;
                switch (boxnum) {
                case 0:
                        break;
                default:
                        RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
-                                "switch case not processed\n");
+                                "switch case not process\n");
                        break;
                }
+
                isfw_read = _rtl8723be_check_fw_read_last_h2c(hw, boxnum);
                while (!isfw_read) {
-                       wait_h2c_limit--;
-                       if (wait_h2c_limit == 0) {
+                       wait_h2c_limmit--;
+                       if (wait_h2c_limmit == 0) {
                                RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD,
-                                        "Wating too long for FW read "
-                                        "clear HMEBox(%d)!\n", boxnum);
+                                        "Waiting too long for FW read clear HMEBox(%d)!\n",
+                                        boxnum);
                                break;
                        }
+
                        udelay(10);
 
                        isfw_read = _rtl8723be_check_fw_read_last_h2c(hw,
                                                                boxnum);
                        u1b_tmp = rtl_read_byte(rtlpriv, 0x130);
                        RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD,
-                                "Wating for FW read clear HMEBox(%d)!!! 0x130 = %2x\n",
+                                "Waiting for FW read clear HMEBox(%d)!!! 0x130 = %2x\n",
                                 boxnum, u1b_tmp);
                }
+
                if (!isfw_read) {
                        RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD,
-                                "Write H2C register BOX[%d] fail!!!!! "
-                                "Fw do not read.\n", boxnum);
+                                "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;
                RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD,
                         "Write element_id box_reg(%4x) = %2x\n",
-                        box_reg, element_id);
+                         box_reg, element_id);
 
                switch (cmd_len) {
                case 1:
                                rtl_write_byte(rtlpriv, box_extreg + idx,
                                               boxextcontent[idx]);
                        }
+
                        for (idx = 0; idx < 4; idx++) {
                                rtl_write_byte(rtlpriv, box_reg + idx,
                                               boxcontent[idx]);
                                 "switch case not process\n");
                        break;
                }
+
                bwrite_sucess = true;
 
                rtlhal->last_hmeboxnum = boxnum + 1;
 
                RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD,
                         "pHalData->last_hmeboxnum  = %d\n",
-                        rtlhal->last_hmeboxnum);
+                         rtlhal->last_hmeboxnum);
        }
+
        spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag);
        rtlhal->h2c_setinprogress = false;
        spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag);
                          "return H2C cmd because of Fw download fail!!!\n");
                return;
        }
+
        memset(tmp_cmdbuf, 0, 8);
        memcpy(tmp_cmdbuf, p_cmdbuffer, cmd_len);
        _rtl8723be_fill_h2c_command(hw, element_id, cmd_len,
 void rtl8723be_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u8 u1_h2c_set_pwrmode[H2C_8723BE_PWEMODE_LENGTH] = { 0 };
+       u8 u1_h2c_set_pwrmode[H2C_PWEMODE_LENGTH] = { 0 };
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
        u8 rlbm, power_state = 0;
        RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "FW LPS mode = %d\n", mode);
 
        SET_H2CCMD_PWRMODE_PARM_MODE(u1_h2c_set_pwrmode, ((mode) ? 1 : 0));
-       rlbm = 0;/*YJ, temp, 120316. FW now not support RLBM = 2.*/
+       rlbm = 0;/*YJ,temp,120316. FW now not support RLBM=2.*/
        SET_H2CCMD_PWRMODE_PARM_RLBM(u1_h2c_set_pwrmode, rlbm);
        SET_H2CCMD_PWRMODE_PARM_SMART_PS(u1_h2c_set_pwrmode,
                                         (rtlpriv->mac80211.p2p) ?
-                                        ppsc->smart_ps : 1);
+                                         ppsc->smart_ps : 1);
        SET_H2CCMD_PWRMODE_PARM_AWAKE_INTERVAL(u1_h2c_set_pwrmode,
                                               ppsc->reg_max_lps_awakeintvl);
        SET_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(u1_h2c_set_pwrmode, 0);
 
        RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
                      "rtl92c_set_fw_pwrmode(): u1_h2c_set_pwrmode\n",
-                     u1_h2c_set_pwrmode, H2C_8723BE_PWEMODE_LENGTH);
-       rtl8723be_fill_h2c_cmd(hw, H2C_8723BE_SETPWRMODE,
-                              H2C_8723BE_PWEMODE_LENGTH,
+                     u1_h2c_set_pwrmode, H2C_PWEMODE_LENGTH);
+       rtl8723be_fill_h2c_cmd(hw, H2C_8723B_SETPWRMODE, H2C_PWEMODE_LENGTH,
                               u1_h2c_set_pwrmode);
 }
 
-static bool _rtl8723be_cmd_send_packet(struct ieee80211_hw *hw,
-                                      struct sk_buff *skb)
+void rtl8723be_set_fw_media_status_rpt_cmd(struct ieee80211_hw *hw, u8 mstatus)
 {
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
-       struct rtl8192_tx_ring *ring;
-       struct rtl_tx_desc *pdesc;
-       struct sk_buff *pskb = NULL;
-       u8 own;
-       unsigned long flags;
-
-       ring = &rtlpci->tx_ring[BEACON_QUEUE];
-
-       pskb = __skb_dequeue(&ring->queue);
-       if (pskb)
-               kfree_skb(pskb);
-
-       spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
-
-       pdesc = &ring->desc[0];
-       own = (u8) rtlpriv->cfg->ops->get_desc((u8 *)pdesc, true, HW_DESC_OWN);
-
-       rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, 1, 1, skb);
-
-       __skb_queue_tail(&ring->queue, skb);
-
-       spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);
-
-       rtlpriv->cfg->ops->tx_polling(hw, BEACON_QUEUE);
-
-       return true;
+       u8 parm[3] = { 0, 0, 0 };
+       /* parm[0]: bit0=0-->Disconnect, bit0=1-->Connect
+        *          bit1=0-->update Media Status to MACID
+        *          bit1=1-->update Media Status from MACID to MACID_End
+        * parm[1]: MACID, if this is INFRA_STA, MacID = 0
+        * parm[2]: MACID_End
+       */
+       SET_H2CCMD_MSRRPT_PARM_OPMODE(parm, mstatus);
+       SET_H2CCMD_MSRRPT_PARM_MACID_IND(parm, 0);
+
+       rtl8723be_fill_h2c_cmd(hw, H2C_8723B_MSRRPT, 3, parm);
 }
+
 #define BEACON_PG              0 /* ->1 */
 #define PSPOLL_PG              2
 #define NULL_PG                        3
 };
 
 void rtl8723be_set_fw_rsvdpagepkt(struct ieee80211_hw *hw,
-                                 bool dl_finished)
+                                 bool b_dl_finished)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
        u32 totalpacketlen;
        bool rtstatus;
        u8 u1rsvdpageloc[5] = { 0 };
-       bool dlok = false;
+       bool b_dlok = false;
 
        u8 *beacon;
        u8 *p_pspoll;
        totalpacketlen = TOTAL_RESERVED_PKT_LEN;
 
        RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD,
-                     "rtl8723be_set_fw_rsvdpagepkt(): "
-                     "HW_VAR_SET_TX_CMD: ALL\n",
+                     "rtl8723be_set_fw_rsvdpagepkt(): HW_VAR_SET_TX_CMD: ALL\n",
                      &reserved_page_packet[0], totalpacketlen);
        RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
-                     "rtl8723be_set_fw_rsvdpagepkt(): "
-                     "HW_VAR_SET_TX_CMD: ALL\n", u1rsvdpageloc, 3);
-
+                     "rtl8723be_set_fw_rsvdpagepkt(): HW_VAR_SET_TX_CMD: ALL\n",
+                     u1rsvdpageloc, 3);
 
        skb = dev_alloc_skb(totalpacketlen);
        memcpy((u8 *)skb_put(skb, totalpacketlen),
               &reserved_page_packet, totalpacketlen);
 
-       rtstatus = _rtl8723be_cmd_send_packet(hw, skb);
+       rtstatus = rtl8723_cmd_send_packet(hw, skb);
 
        if (rtstatus)
-               dlok = true;
+               b_dlok = true;
 
-       if (dlok) {
+       if (b_dlok) {
                RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
                         "Set RSVD page location to Fw.\n");
                RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, "H2C_RSVDPAGE:\n",
                              u1rsvdpageloc, 3);
-               rtl8723be_fill_h2c_cmd(hw, H2C_8723BE_RSVDPAGE,
+               rtl8723be_fill_h2c_cmd(hw, H2C_8723B_RSVDPAGE,
                                       sizeof(u1rsvdpageloc), u1rsvdpageloc);
-       } else {
+       } else
                RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
                         "Set RSVD page location to Fw FAIL!!!!!!.\n");
-       }
 }
 
 /*Should check FW support p2p or not.*/
 static void rtl8723be_set_p2p_ctw_period_cmd(struct ieee80211_hw *hw,
                                             u8 ctwindow)
 {
-       u8 u1_ctwindow_period[1] = {ctwindow};
+       u8 u1_ctwindow_period[1] = { ctwindow};
 
-       rtl8723be_fill_h2c_cmd(hw, H2C_8723BE_P2P_PS_CTW_CMD, 1,
+       rtl8723be_fill_h2c_cmd(hw, H2C_8723B_P2P_PS_CTW_CMD, 1,
                               u1_ctwindow_period);
 }
 
        switch (p2p_ps_state) {
        case P2P_PS_DISABLE:
                RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_DISABLE\n");
-               memset(p2p_ps_offload, 0, sizeof(struct p2p_ps_offload_t));
+               memset(p2p_ps_offload, 0, sizeof(*p2p_ps_offload));
                break;
        case P2P_PS_ENABLE:
                RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD, "P2P_PS_ENABLE\n");
                        rtl8723be_set_p2p_ctw_period_cmd(hw, ctwindow);
                }
                /* hw only support 2 set of NoA */
-               for (i = 0; i < p2pinfo->noa_num; i++) {
+               for (i = 0 ; i < p2pinfo->noa_num ; i++) {
                        /* To control the register setting
                         * for which NOA
                         */
                        rtl_write_dword(rtlpriv, 0x5EC,
                                        p2pinfo->noa_count_type[i]);
                }
+
                if ((p2pinfo->opp_ps == 1) ||
                    (p2pinfo->noa_num > 0)) {
                        /* rst p2p circuit */
        default:
                break;
        }
-       rtl8723be_fill_h2c_cmd(hw, H2C_8723BE_P2P_PS_OFFLOAD, 1,
+
+       rtl8723be_fill_h2c_cmd(hw, H2C_8723B_P2P_PS_OFFLOAD, 1,
                               (u8 *)p2p_ps_offload);
 }
 
-void rtl8723be_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus)
+static void _rtl8723be_c2h_content_parsing(struct ieee80211_hw *hw,
+                                          u8 c2h_cmd_id,
+                                          u8 c2h_cmd_len, u8 *tmp_buf)
 {
-       u8 u1_joinbssrpt_parm[1] = { 0 };
-
-       SET_H2CCMD_JOINBSSRPT_PARM_OPMODE(u1_joinbssrpt_parm, mstatus);
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
 
-       rtl8723be_fill_h2c_cmd(hw, H2C_8723BE_JOINBSSRPT, 1,
-                              u1_joinbssrpt_parm);
+       switch (c2h_cmd_id) {
+       case C2H_8723B_DBG:
+               RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE,
+                        "[C2H], C2H_8723BE_DBG!!\n");
+               break;
+       case C2H_8723B_TX_REPORT:
+               RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE,
+                        "[C2H], C2H_8723BE_TX_REPORT!\n");
+               break;
+       case C2H_8723B_BT_INFO:
+               RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE,
+                        "[C2H], C2H_8723BE_BT_INFO!!\n");
+               rtlpriv->btcoexist.btc_ops->btc_btinfo_notify(rtlpriv, tmp_buf,
+                                                             c2h_cmd_len);
+               break;
+       case C2H_8723B_BT_MP:
+               RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE,
+                        "[C2H], C2H_8723BE_BT_MP!!\n");
+               break;
+       default:
+               RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE,
+                        "[C2H], Unkown packet!! CmdId(%#X)!\n", c2h_cmd_id);
+               break;
+       }
 }
 
-void rtl8723be_set_fw_ap_off_load_cmd(struct ieee80211_hw *hw,
-                                     u8 ap_offload_enable)
+void rtl8723be_c2h_packet_handler(struct ieee80211_hw *hw, u8 *buffer, u8 len)
 {
-       struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
-       u8 u1_apoffload_parm[H2C_8723BE_AP_OFFLOAD_LENGTH] = { 0 };
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u8 c2h_cmd_id = 0, c2h_cmd_seq = 0, c2h_cmd_len = 0;
+       u8 *tmp_buf = NULL;
+
+       c2h_cmd_id = buffer[0];
+       c2h_cmd_seq = buffer[1];
+       c2h_cmd_len = len - 2;
+       tmp_buf = buffer + 2;
+
+       RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE,
+                "[C2H packet], c2hCmdId=0x%x, c2hCmdSeq=0x%x, c2hCmdLen=%d\n",
+                c2h_cmd_id, c2h_cmd_seq, c2h_cmd_len);
 
-       SET_H2CCMD_AP_OFFLOAD_ON(u1_apoffload_parm, ap_offload_enable);
-       SET_H2CCMD_AP_OFFLOAD_HIDDEN(u1_apoffload_parm, mac->hiddenssid);
-       SET_H2CCMD_AP_OFFLOAD_DENYANY(u1_apoffload_parm, 0);
+       RT_PRINT_DATA(rtlpriv, COMP_FW, DBG_TRACE,
+                     "[C2H packet], Content Hex:\n", tmp_buf, c2h_cmd_len);
 
-       rtl8723be_fill_h2c_cmd(hw, H2C_8723BE_AP_OFFLOAD,
-                              H2C_8723BE_AP_OFFLOAD_LENGTH, u1_apoffload_parm);
+       _rtl8723be_c2h_content_parsing(hw, c2h_cmd_id, c2h_cmd_len, tmp_buf);
 }
 
 #define FW_8192C_END_ADDRESS                   0x5FFF
 #define FW_8192C_PAGE_SIZE                     4096
 #define FW_8192C_POLLING_DELAY                 5
-#define FW_8192C_POLLING_TIMEOUT_COUNT         6000
 
-#define IS_FW_HEADER_EXIST(_pfwhdr)    \
-       ((_pfwhdr->signature&0xFFF0) == 0x5300)
 #define USE_OLD_WOWLAN_DEBUG_FW                        0
 
-#define H2C_8723BE_RSVDPAGE_LOC_LEN            5
-#define H2C_8723BE_PWEMODE_LENGTH              5
-#define H2C_8723BE_JOINBSSRPT_LENGTH           1
-#define H2C_8723BE_AP_OFFLOAD_LENGTH           3
-#define H2C_8723BE_WOWLAN_LENGTH               3
-#define H2C_8723BE_KEEP_ALIVE_CTRL_LENGTH      3
-#if (USE_OLD_WOWLAN_DEBUG_FW == 0)
-#define H2C_8723BE_REMOTE_WAKE_CTRL_LEN                1
-#else
-#define H2C_8723BE_REMOTE_WAKE_CTRL_LEN                3
-#endif
-#define H2C_8723BE_AOAC_GLOBAL_INFO_LEN                2
-#define H2C_8723BE_AOAC_RSVDPAGE_LOC_LEN       7
-
+#define H2C_PWEMODE_LENGTH                     5
 
 /* Fw PS state for RPWM.
 *BIT[2:0] = HW state
 *BIT[3] = Protocol PS state, 1: register active state , 0: register sleep state
 *BIT[4] = sub-state
 */
-#define        FW_PS_GO_ON             BIT(0)
-#define        FW_PS_TX_NULL           BIT(1)
 #define        FW_PS_RF_ON             BIT(2)
 #define        FW_PS_REGISTER_ACTIVE   BIT(3)
 
-#define        FW_PS_DPS               BIT(0)
-#define        FW_PS_LCLK              (FW_PS_DPS)
-#define        FW_PS_RF_OFF            BIT(1)
-#define        FW_PS_ALL_ON            BIT(2)
-#define        FW_PS_ST_ACTIVE BIT(3)
-#define        FW_PS_ISR_ENABLE        BIT(4)
-#define        FW_PS_IMR_ENABLE        BIT(5)
-
-
 #define        FW_PS_ACK               BIT(6)
 #define        FW_PS_TOGGLE            BIT(7)
 
- /* 88E RPWM value*/
+ /* 8723BE RPWM value*/
  /* BIT[0] = 1: 32k, 0: 40M*/
 #define        FW_PS_CLOCK_OFF         BIT(0)          /* 32k*/
 #define        FW_PS_CLOCK_ON          0               /*40M*/
 /*ISR_ENABLE, IMR_ENABLE, and PS mode should be inherited.*/
 #define        FW_PS_STATE_INT_MASK    (0x3F)
 
-#define        FW_PS_STATE(x)  (FW_PS_STATE_MASK & (x))
-#define        FW_PS_STATE_HW(x)       (FW_PS_STATE_HW_MASK & (x))
-#define        FW_PS_STATE_INT(x)      (FW_PS_STATE_INT_MASK & (x))
-#define        FW_PS_ISR_VAL(x)        ((x) & 0x70)
-#define        FW_PS_IMR_MASK(x)       ((x) & 0xDF)
-#define        FW_PS_KEEP_IMR(x)       ((x) & 0x20)
-
-
-#define        FW_PS_STATE_S0          (FW_PS_DPS)
-#define        FW_PS_STATE_S1          (FW_PS_LCLK)
-#define        FW_PS_STATE_S2          (FW_PS_RF_OFF)
-#define        FW_PS_STATE_S3          (FW_PS_ALL_ON)
-#define        FW_PS_STATE_S4          ((FW_PS_ST_ACTIVE) | (FW_PS_ALL_ON))
+#define        FW_PS_STATE(x)          (FW_PS_STATE_MASK & (x))
 
 /* ((FW_PS_RF_ON) | (FW_PS_REGISTER_ACTIVE))*/
-#define        FW_PS_STATE_ALL_ON_88E  (FW_PS_CLOCK_ON)
+#define        FW_PS_STATE_ALL_ON      (FW_PS_CLOCK_ON)
 /* (FW_PS_RF_ON)*/
-#define        FW_PS_STATE_RF_ON_88E   (FW_PS_CLOCK_ON)
+#define        FW_PS_STATE_RF_ON       (FW_PS_CLOCK_ON)
 /* 0x0*/
-#define        FW_PS_STATE_RF_OFF_88E  (FW_PS_CLOCK_ON)
+#define        FW_PS_STATE_RF_OFF      (FW_PS_CLOCK_ON)
 /* (FW_PS_STATE_RF_OFF)*/
-#define        FW_PS_STATE_RF_OFF_LOW_PWR_88E  (FW_PS_CLOCK_OFF)
+#define        FW_PS_STATE_RF_OFF_LOW_PWR      (FW_PS_CLOCK_OFF)
 
-#define        FW_PS_STATE_ALL_ON_92C  (FW_PS_STATE_S4)
-#define        FW_PS_STATE_RF_ON_92C           (FW_PS_STATE_S3)
-#define        FW_PS_STATE_RF_OFF_92C  (FW_PS_STATE_S2)
-#define        FW_PS_STATE_RF_OFF_LOW_PWR_92C  (FW_PS_STATE_S1)
 
-
-/* For 88E H2C PwrMode Cmd ID 5.*/
+/* For 8723BE H2C PwrMode Cmd ID 5.*/
 #define        FW_PWR_STATE_ACTIVE     ((FW_PS_RF_ON) | (FW_PS_REGISTER_ACTIVE))
 #define        FW_PWR_STATE_RF_OFF     0
 
-#define        FW_PS_IS_ACK(x) ((x) & FW_PS_ACK)
-#define        FW_PS_IS_CLK_ON(x)      ((x) & (FW_PS_RF_OFF | FW_PS_ALL_ON))
-#define        FW_PS_IS_RF_ON(x)       ((x) & (FW_PS_ALL_ON))
-#define        FW_PS_IS_ACTIVE(x)      ((x) & (FW_PS_ST_ACTIVE))
-#define        FW_PS_IS_CPWM_INT(x)    ((x) & 0x40)
-
-#define        FW_CLR_PS_STATE(x)      ((x) = ((x) & (0xF0)))
+#define        FW_PS_IS_ACK(x)         ((x) & FW_PS_ACK)
 
-#define        IS_IN_LOW_POWER_STATE_88E(fwpsstate)            \
-                       (FW_PS_STATE(fwpsstate) == FW_PS_CLOCK_OFF)
+#define        IS_IN_LOW_POWER_STATE(__fwpsstate)      \
+       (FW_PS_STATE(__fwpsstate) == FW_PS_CLOCK_OFF)
 
 #define        FW_PWR_STATE_ACTIVE     ((FW_PS_RF_ON) | (FW_PS_REGISTER_ACTIVE))
 #define        FW_PWR_STATE_RF_OFF     0
 
-#define pagenum_128(_len)      (u32)(((_len)>>7) + ((_len)&0x7F ? 1 : 0))
-
-#define SET_88E_H2CCMD_WOWLAN_FUNC_ENABLE(__ph2ccmd, __val)            \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 1, __val)
-#define SET_88E_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(__ph2ccmd, __val)   \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 1, 1, __val)
-#define SET_88E_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(__ph2ccmd, __val)       \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 2, 1, __val)
-#define SET_88E_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(__ph2ccmd, __val)     \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 3, 1, __val)
-#define SET_88E_H2CCMD_WOWLAN_ALL_PKT_DROP(__ph2ccmd, __val)           \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 4, 1, __val)
-#define SET_88E_H2CCMD_WOWLAN_GPIO_ACTIVE(__ph2ccmd, __val)            \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 5, 1, __val)
-#define SET_88E_H2CCMD_WOWLAN_REKEY_WAKE_UP(__ph2ccmd, __val)          \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 6, 1, __val)
-#define SET_88E_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(__ph2ccmd, __val)     \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 7, 1, __val)
-#define SET_88E_H2CCMD_WOWLAN_GPIONUM(__ph2ccmd, __val)                        \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+1, 0, 8, __val)
-#define SET_88E_H2CCMD_WOWLAN_GPIO_DURATION(__ph2ccmd, __val)          \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val)
+enum rtl8723b_h2c_cmd {
+       H2C_8723B_RSVDPAGE = 0,
+       H2C_8723B_MSRRPT = 1,
+       H2C_8723B_SCAN = 2,
+       H2C_8723B_KEEP_ALIVE_CTRL = 3,
+       H2C_8723B_DISCONNECT_DECISION = 4,
+       H2C_8723B_BCN_RSVDPAGE = 9,
+       H2C_8723B_PROBERSP_RSVDPAGE = 10,
+
+       H2C_8723B_SETPWRMODE = 0x20,
+       H2C_8723B_PS_LPS_PARA = 0x23,
+       H2C_8723B_P2P_PS_OFFLOAD = 0x24,
+
+       H2C_8723B_RA_MASK = 0x40,
+       H2C_RSSIBE_REPORT = 0x42,
+       /*Not defined CTW CMD for P2P yet*/
+       H2C_8723B_P2P_PS_CTW_CMD,
+       MAX_8723B_H2CCMD
+};
+
+enum rtl8723b_c2h_evt {
+       C2H_8723B_DBG = 0,
+       C2H_8723B_LB = 1,
+       C2H_8723B_TXBF = 2,
+       C2H_8723B_TX_REPORT = 3,
+       C2H_8723B_BT_INFO = 9,
+       C2H_8723B_BT_MP = 11,
+       MAX_8723B_C2HEVENT
+};
+
+#define pagenum_128(_len) (u32)(((_len)>>7) + ((_len)&0x7F ? 1 : 0))
 
 
 #define SET_H2CCMD_PWRMODE_PARM_MODE(__ph2ccmd, __val)                 \
 #define GET_88E_H2CCMD_PWRMODE_PARM_MODE(__ph2ccmd)                    \
        LE_BITS_TO_1BYTE(__ph2ccmd, 0, 8)
 
-#define SET_H2CCMD_JOINBSSRPT_PARM_OPMODE(__ph2ccmd, __val)            \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 8, __val)
+#define SET_H2CCMD_MSRRPT_PARM_OPMODE(__ph2ccmd, __val)                \
+       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 1, __val)
+#define SET_H2CCMD_MSRRPT_PARM_MACID_IND(__ph2ccmd, __val)     \
+       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 1, 1, __val)
+
 #define SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__ph2ccmd, __val)            \
        SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 8, __val)
 #define SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(__ph2ccmd, __val)               \
 #define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__ph2ccmd, __val)            \
        SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val)
 
-/* AP_OFFLOAD */
-#define SET_H2CCMD_AP_OFFLOAD_ON(__ph2ccmd, __val)                     \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 8, __val)
-#define SET_H2CCMD_AP_OFFLOAD_HIDDEN(__ph2ccmd, __val)                 \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+1, 0, 8, __val)
-#define SET_H2CCMD_AP_OFFLOAD_DENYANY(__ph2ccmd, __val)                        \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val)
-#define SET_H2CCMD_AP_OFFLOAD_WAKEUP_EVT_RPT(__ph2ccmd, __val)         \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+3, 0, 8, __val)
 
-/* Keep Alive Control*/
-#define SET_88E_H2CCMD_KEEP_ALIVE_ENABLE(__ph2ccmd, __val)             \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 1, __val)
-#define SET_88E_H2CCMD_KEEP_ALIVE_ACCPEPT_USER_DEFINED(__ph2ccmd, __val)\
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 1, 1, __val)
-#define SET_88E_H2CCMD_KEEP_ALIVE_PERIOD(__ph2ccmd, __val)             \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+1, 0, 8, __val)
-
-/*REMOTE_WAKE_CTRL */
-#define SET_88E_H2CCMD_REMOTE_WAKE_CTRL_EN(__ph2ccmd, __val)           \
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 1, __val)
-#if (USE_OLD_WOWLAN_DEBUG_FW == 0)
-#define SET_88E_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(__ph2ccmd, __val)\
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 1, 1, __val)
-#define SET_88E_H2CCMD_REMOTE_WAKE_CTRL_NDP_OFFLOAD_EN(__ph2ccmd, __val)\
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 2, 1, __val)
-#define SET_88E_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(__ph2ccmd, __val)\
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 3, 1, __val)
-#else
-#define SET_88E_H2CCMD_REMOTE_WAKE_CTRL_PAIRWISE_ENC_ALG(__ph2ccmd, __val)\
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+1, 0, 8, __val)
-#define SET_88E_H2CCMD_REMOTE_WAKE_CTRL_GROUP_ENC_ALG(__ph2ccmd, __val)        \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val)
-#endif
-
-/* GTK_OFFLOAD */
-#define SET_88E_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(__ph2ccmd, __val)\
-       SET_BITS_TO_LE_1BYTE(__ph2ccmd, 0, 8, __val)
-#define SET_88E_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(__ph2ccmd, __val)        \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+1, 0, 8, __val)
-
-/* AOAC_RSVDPAGE_LOC */
-#define SET_88E_H2CCMD_AOAC_RSVDPAGE_LOC_REM_WAKE_CTRL_INFO(__ph2ccmd, __val)\
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd), 0, 8, __val)
-#define SET_88E_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(__ph2ccmd, __val)     \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+1, 0, 8, __val)
-#define SET_88E_H2CCMD_AOAC_RSVDPAGE_LOC_NEIGHBOR_ADV(__ph2ccmd, __val)        \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+2, 0, 8, __val)
-#define SET_88E_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_RSP(__ph2ccmd, __val)     \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+3, 0, 8, __val)
-#define SET_88E_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_INFO(__ph2ccmd, __val)    \
-       SET_BITS_TO_LE_1BYTE((__ph2ccmd)+4, 0, 8, __val)
-
-void rtl8723be_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode);
-void rtl8723be_set_fw_ap_off_load_cmd(struct ieee80211_hw *hw,
-                                     u8 ap_offload_enable);
 void rtl8723be_fill_h2c_cmd(struct ieee80211_hw *hw, u8 element_id,
                            u32 cmd_len, u8 *p_cmdbuffer);
-void rtl8723be_firmware_selfreset(struct ieee80211_hw *hw);
-void rtl8723be_set_fw_rsvdpagepkt(struct ieee80211_hw *hw,
-                                 bool dl_finished);
-void rtl8723be_set_fw_joinbss_report_cmd(struct ieee80211_hw *hw, u8 mstatus);
-int rtl8723be_download_fw(struct ieee80211_hw *hw,
-                         bool buse_wake_on_wlan_fw);
-void rtl8723be_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw,
-                                     u8 p2p_ps_state);
+void rtl8723be_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode);
+void rtl8723be_set_fw_media_status_rpt_cmd(struct ieee80211_hw *hw, u8 mstatus);
+void rtl8723be_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished);
+void rtl8723be_set_p2p_ps_offload_cmd(struct ieee80211_hw *hw, u8 p2p_ps_state);
+void rtl8723be_c2h_packet_handler(struct ieee80211_hw *hw, u8 *buffer, u8 len);
 
 #endif
 
 #include "reg.h"
 #include "def.h"
 #include "phy.h"
+#include "../rtl8723com/phy_common.h"
 #include "dm.h"
 #include "../rtl8723com/dm_common.h"
 #include "fw.h"
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
        struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[BEACON_QUEUE];
+       unsigned long flags;
 
+       spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
        while (skb_queue_len(&ring->queue)) {
                struct rtl_tx_desc *entry = &ring->desc[ring->idx];
                struct sk_buff *skb = __skb_dequeue(&ring->queue);
                kfree_skb(skb);
                ring->idx = (ring->idx + 1) % ring->entries;
        }
+       spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);
 }
 
 static void _rtl8723be_set_bcn_ctrl_reg(struct ieee80211_hw *hw,
        rtlpci->reg_bcn_ctrl_val |= set_bits;
        rtlpci->reg_bcn_ctrl_val &= ~clear_bits;
 
-       rtl_write_byte(rtlpriv, REG_BCN_CTRL, (u8) rtlpci->reg_bcn_ctrl_val);
+       rtl_write_byte(rtlpriv, REG_BCN_CTRL, (u8)rtlpci->reg_bcn_ctrl_val);
 }
 
 static void _rtl8723be_stop_tx_beacon(struct ieee80211_hw *hw)
 }
 
 static void _rtl8723be_set_fw_clock_on(struct ieee80211_hw *hw, u8 rpwm_val,
-                                      bool need_turn_off_ckk)
+                                      bool b_need_turn_off_ckk)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       bool support_remote_wake_up;
+       bool b_support_remote_wake_up;
        u32 count = 0, isr_regaddr, content;
-       bool schedule_timer = need_turn_off_ckk;
+       bool b_schedule_timer = b_need_turn_off_ckk;
        rtlpriv->cfg->ops->get_hw_reg(hw, HAL_DEF_WOWLAN,
-                                     (u8 *)(&support_remote_wake_up));
+                                     (u8 *)(&b_support_remote_wake_up));
 
        if (!rtlhal->fw_ready)
                return;
                        break;
                }
        }
-       if (IS_IN_LOW_POWER_STATE_88E(rtlhal->fw_ps_state)) {
+
+       if (IS_IN_LOW_POWER_STATE(rtlhal->fw_ps_state)) {
                rtlpriv->cfg->ops->get_hw_reg(hw, HW_VAR_SET_RPWM,
-                                             &rpwm_val);
+                                             (u8 *)(&rpwm_val));
                if (FW_PS_IS_ACK(rpwm_val)) {
                        isr_regaddr = REG_HISR;
                        content = rtl_read_dword(rtlpriv, isr_regaddr);
 
                        if (content & IMR_CPWM) {
                                rtl_write_word(rtlpriv, isr_regaddr, 0x0100);
-                               rtlhal->fw_ps_state = FW_PS_STATE_RF_ON_88E;
+                               rtlhal->fw_ps_state = FW_PS_STATE_RF_ON;
                                RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
-                                        "Receive CPWM INT!!! Set "
-                                        "pHalData->FwPSState = %X\n",
+                                        "Receive CPWM INT!!! Set pHalData->FwPSState = %X\n",
                                         rtlhal->fw_ps_state);
                        }
                }
+
                spin_lock_bh(&rtlpriv->locks.fw_ps_lock);
                rtlhal->fw_clk_change_in_progress = false;
                spin_unlock_bh(&rtlpriv->locks.fw_ps_lock);
-               if (schedule_timer) {
+               if (b_schedule_timer)
                        mod_timer(&rtlpriv->works.fw_clockoff_timer,
                                  jiffies + MSECS(10));
-               }
        } else  {
                spin_lock_bh(&rtlpriv->locks.fw_ps_lock);
                rtlhal->fw_clk_change_in_progress = false;
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
        struct rtl8192_tx_ring *ring;
        enum rf_pwrstate rtstate;
-       bool schedule_timer = false;
+       bool b_schedule_timer = false;
        u8 queue;
 
        if (!rtlhal->fw_ready)
        for (queue = 0; queue < RTL_PCI_MAX_TX_QUEUE_COUNT; queue++) {
                ring = &rtlpci->tx_ring[queue];
                if (skb_queue_len(&ring->queue)) {
-                       schedule_timer = true;
+                       b_schedule_timer = true;
                        break;
                }
        }
-       if (schedule_timer) {
+
+       if (b_schedule_timer) {
                mod_timer(&rtlpriv->works.fw_clockoff_timer,
                          jiffies + MSECS(10));
                return;
        }
-       if (FW_PS_STATE(rtlhal->fw_ps_state) !=
-           FW_PS_STATE_RF_OFF_LOW_PWR_88E) {
+
+       if (FW_PS_STATE(rtlhal->fw_ps_state) != FW_PS_STATE_RF_OFF_LOW_PWR) {
                spin_lock_bh(&rtlpriv->locks.fw_ps_lock);
                if (!rtlhal->fw_clk_change_in_progress) {
                        rtlhal->fw_clk_change_in_progress = true;
                        rtlhal->fw_ps_state = FW_PS_STATE(rpwm_val);
                        rtl_write_word(rtlpriv, REG_HISR, 0x0100);
                        rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SET_RPWM,
-                                                     &rpwm_val);
+                                                     (u8 *)(&rpwm_val));
                        spin_lock_bh(&rtlpriv->locks.fw_ps_lock);
                        rtlhal->fw_clk_change_in_progress = false;
                        spin_unlock_bh(&rtlpriv->locks.fw_ps_lock);
                                  jiffies + MSECS(10));
                }
        }
+
 }
 
 static void _rtl8723be_set_fw_ps_rf_on(struct ieee80211_hw *hw)
 {
        u8 rpwm_val = 0;
-       rpwm_val |= (FW_PS_STATE_RF_OFF_88E | FW_PS_ACK);
+       rpwm_val |= (FW_PS_STATE_RF_OFF | FW_PS_ACK);
        _rtl8723be_set_fw_clock_on(hw, rpwm_val, true);
 }
 
        u8 rpwm_val = 0, fw_pwrmode = FW_PS_ACTIVE_MODE;
 
        if (ppsc->low_power_enable) {
-               rpwm_val = (FW_PS_STATE_ALL_ON_88E | FW_PS_ACK);/* RF on */
+               rpwm_val = (FW_PS_STATE_ALL_ON | FW_PS_ACK);/* RF on */
                _rtl8723be_set_fw_clock_on(hw, rpwm_val, false);
                rtlhal->allow_sw_to_change_hwclc = false;
                rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_H2C_FW_PWRMODE,
-                                             &fw_pwrmode);
+                                             (u8 *)(&fw_pwrmode));
                rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_FW_PSMODE_STATUS,
                                              (u8 *)(&fw_current_inps));
        } else {
-               rpwm_val = FW_PS_STATE_ALL_ON_88E;      /* RF on */
-               rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SET_RPWM, &rpwm_val);
+               rpwm_val = FW_PS_STATE_ALL_ON;  /* RF on */
+               rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SET_RPWM,
+                                             (u8 *)(&rpwm_val));
                rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_H2C_FW_PWRMODE,
-                                             &fw_pwrmode);
+                                             (u8 *)(&fw_pwrmode));
                rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_FW_PSMODE_STATUS,
                                              (u8 *)(&fw_current_inps));
        }
+
 }
 
 static void _rtl8723be_fwlps_enter(struct ieee80211_hw *hw)
        u8 rpwm_val;
 
        if (ppsc->low_power_enable) {
-               rpwm_val = FW_PS_STATE_RF_OFF_LOW_PWR_88E;      /* RF off */
+               rpwm_val = FW_PS_STATE_RF_OFF_LOW_PWR;  /* RF off */
                rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_FW_PSMODE_STATUS,
                                              (u8 *)(&fw_current_inps));
                rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_H2C_FW_PWRMODE,
-                                             &ppsc->fwctrl_psmode);
+                                             (u8 *)(&ppsc->fwctrl_psmode));
                rtlhal->allow_sw_to_change_hwclc = true;
                _rtl8723be_set_fw_clock_off(hw, rpwm_val);
-
        } else {
-               rpwm_val = FW_PS_STATE_RF_OFF_88E;      /* RF off */
+               rpwm_val = FW_PS_STATE_RF_OFF;  /* RF off */
                rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_FW_PSMODE_STATUS,
                                              (u8 *)(&fw_current_inps));
                rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_H2C_FW_PWRMODE,
-                                             &ppsc->fwctrl_psmode);
-               rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SET_RPWM, &rpwm_val);
+                                             (u8 *)(&ppsc->fwctrl_psmode));
+               rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SET_RPWM,
+                                             (u8 *)(&rpwm_val));
        }
+
 }
 
 void rtl8723be_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
        case HW_VAR_RF_STATE:
                *((enum rf_pwrstate *)(val)) = ppsc->rfpwr_state;
                break;
-       case HW_VAR_FWLPS_RF_ON: {
-               enum rf_pwrstate rfstate;
+       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) {
+                                             (u8 *)(&rfState));
+               if (rfState == ERFOFF) {
                        *((bool *)(val)) = true;
                } else {
                        val_rcr = rtl_read_dword(rtlpriv, REG_RCR);
                        else
                                *((bool *)(val)) = true;
                }
-               break; }
+               }
+               break;
        case HW_VAR_FW_PSMODE_STATUS:
                *((bool *)(val)) = ppsc->fw_current_inpsmode;
                break;
-       case HW_VAR_CORRECT_TSF: {
+       case HW_VAR_CORRECT_TSF:{
                u64 tsf;
                u32 *ptsf_low = (u32 *)&tsf;
                u32 *ptsf_high = ((u32 *)&tsf) + 1;
                *ptsf_low = rtl_read_dword(rtlpriv, REG_TSFTR);
 
                *((u64 *)(val)) = tsf;
-
-               break; }
+               }
+               break;
        default:
-               RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
+               RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
                         "switch case not process %x\n", variable);
                break;
        }
 }
 
+static void _rtl8723be_download_rsvd_page(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u8 tmp_regcr, tmp_reg422, bcnvalid_reg;
+       u8 count = 0, dlbcn_count = 0;
+       bool b_recover = false;
+
+       tmp_regcr = rtl_read_byte(rtlpriv, REG_CR + 1);
+       rtl_write_byte(rtlpriv, REG_CR + 1,
+                      (tmp_regcr | BIT(0)));
+
+       _rtl8723be_set_bcn_ctrl_reg(hw, 0, BIT(3));
+       _rtl8723be_set_bcn_ctrl_reg(hw, BIT(4), 0);
+
+       tmp_reg422 = rtl_read_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2);
+       rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2, tmp_reg422 & (~BIT(6)));
+       if (tmp_reg422 & BIT(6))
+               b_recover = true;
+
+       do {
+               bcnvalid_reg = rtl_read_byte(rtlpriv, REG_TDECTRL + 2);
+               rtl_write_byte(rtlpriv, REG_TDECTRL + 2,
+                              (bcnvalid_reg | BIT(0)));
+               _rtl8723be_return_beacon_queue_skb(hw);
+
+               rtl8723be_set_fw_rsvdpagepkt(hw, 0);
+               bcnvalid_reg = rtl_read_byte(rtlpriv, REG_TDECTRL + 2);
+               count = 0;
+               while (!(bcnvalid_reg & BIT(0)) && count < 20) {
+                       count++;
+                       udelay(10);
+                       bcnvalid_reg = rtl_read_byte(rtlpriv,
+                                                    REG_TDECTRL + 2);
+               }
+               dlbcn_count++;
+       } while (!(bcnvalid_reg & BIT(0)) && dlbcn_count < 5);
+
+       if (bcnvalid_reg & BIT(0))
+               rtl_write_byte(rtlpriv, REG_TDECTRL + 2, BIT(0));
+
+       _rtl8723be_set_bcn_ctrl_reg(hw, BIT(3), 0);
+       _rtl8723be_set_bcn_ctrl_reg(hw, 0, BIT(4));
+
+       if (b_recover)
+               rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2, tmp_reg422);
+
+       tmp_regcr = rtl_read_byte(rtlpriv, REG_CR + 1);
+       rtl_write_byte(rtlpriv, REG_CR + 1, (tmp_regcr & ~(BIT(0))));
+}
+
 void rtl8723be_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
                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];
+       case HW_VAR_BASIC_RATE:{
+               u16 b_rate_cfg = ((u16 *)val)[0];
                u8 rate_index = 0;
-               rate_cfg = rate_cfg & 0x15f;
-               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);
+               b_rate_cfg = b_rate_cfg & 0x15f;
+               b_rate_cfg |= 0x01;
+               rtl_write_byte(rtlpriv, REG_RRSR, b_rate_cfg & 0xff);
+               rtl_write_byte(rtlpriv, REG_RRSR + 1, (b_rate_cfg >> 8) & 0xff);
+               while (b_rate_cfg > 0x1) {
+                       b_rate_cfg = (b_rate_cfg >> 1);
                        rate_index++;
                }
                rtl_write_byte(rtlpriv, REG_INIRTS_RATE_SEL, rate_index);
-               break; }
+               }
+               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_word(rtlpriv, REG_RESP_SIFS_OFDM,
                                       *((u16 *)val));
                break;
-       case HW_VAR_SLOT_TIME: {
+       case HW_VAR_SLOT_TIME:{
                u8 e_aci;
 
                RT_TRACE(rtlpriv, COMP_MLME, DBG_LOUD,
 
                for (e_aci = 0; e_aci < AC_MAX; e_aci++) {
                        rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AC_PARAM,
-                                                     &e_aci);
+                                                     (u8 *)(&e_aci));
                }
-               break; }
-       case HW_VAR_ACK_PREAMBLE: {
+               }
+               break;
+       case HW_VAR_ACK_PREAMBLE:{
                u8 reg_tmp;
-               u8 short_preamble = (bool)*val;
+               u8 short_preamble = (bool)(*(u8 *)val);
                reg_tmp = rtl_read_byte(rtlpriv, REG_TRXPTCL_CTL + 2);
                if (short_preamble) {
                        reg_tmp |= 0x02;
                        reg_tmp &= 0xFD;
                        rtl_write_byte(rtlpriv, REG_TRXPTCL_CTL + 2, reg_tmp);
                }
-               break; }
+               }
+               break;
        case HW_VAR_WPA_CONFIG:
-               rtl_write_byte(rtlpriv, REG_SECCFG, *val);
+               rtl_write_byte(rtlpriv, REG_SECCFG, *((u8 *)val));
                break;
-       case HW_VAR_AMPDU_MIN_SPACE: {
+       case HW_VAR_AMPDU_MIN_SPACE:{
                u8 min_spacing_to_set;
                u8 sec_min_space;
 
-               min_spacing_to_set = *val;
+               min_spacing_to_set = *((u8 *)val);
                if (min_spacing_to_set <= 7) {
                        sec_min_space = 0;
 
 
                        RT_TRACE(rtlpriv, COMP_MLME, DBG_LOUD,
                                 "Set HW_VAR_AMPDU_MIN_SPACE: %#x\n",
-                                mac->min_space_cfg);
+                                 mac->min_space_cfg);
 
                        rtl_write_byte(rtlpriv, REG_AMPDU_MIN_SPACE,
                                       mac->min_space_cfg);
                }
-               break; }
-       case HW_VAR_SHORTGI_DENSITY: {
+               }
+               break;
+       case HW_VAR_SHORTGI_DENSITY:{
                u8 density_to_set;
 
-               density_to_set = *val;
+               density_to_set = *((u8 *)val);
                mac->min_space_cfg |= (density_to_set << 3);
 
                RT_TRACE(rtlpriv, COMP_MLME, DBG_LOUD,
                         "Set HW_VAR_SHORTGI_DENSITY: %#x\n",
-                        mac->min_space_cfg);
+                         mac->min_space_cfg);
 
                rtl_write_byte(rtlpriv, REG_AMPDU_MIN_SPACE,
                               mac->min_space_cfg);
-               break; }
-       case HW_VAR_AMPDU_FACTOR: {
+               }
+               break;
+       case HW_VAR_AMPDU_FACTOR:{
                u8 regtoset_normal[4] = {0x41, 0xa8, 0x72, 0xb9};
                u8 factor_toset;
                u8 *p_regtoset = NULL;
 
                p_regtoset = regtoset_normal;
 
-               factor_toset = *val;
+               factor_toset = *((u8 *)val);
                if (factor_toset <= 3) {
                        factor_toset = (1 << (factor_toset + 2));
                        if (factor_toset > 0xf)
                                rtl_write_byte(rtlpriv,
                                               (REG_AGGLEN_LMT + index),
                                               p_regtoset[index]);
+
                        }
+
                        RT_TRACE(rtlpriv, COMP_MLME, DBG_LOUD,
                                 "Set HW_VAR_AMPDU_FACTOR: %#x\n",
-                                factor_toset);
+                                 factor_toset);
                }
-               break; }
-       case HW_VAR_AC_PARAM: {
-               u8 e_aci = *val;
+               }
+               break;
+       case HW_VAR_AC_PARAM:{
+               u8 e_aci = *((u8 *)val);
                rtl8723_dm_init_edca_turbo(hw);
 
                if (rtlpci->acm_method != EACMWAY2_SW)
                        rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_ACM_CTRL,
-                                                     &e_aci);
-               break; }
-       case HW_VAR_ACM_CTRL: {
-               u8 e_aci = *val;
+                                                     (u8 *)(&e_aci));
+               }
+               break;
+       case HW_VAR_ACM_CTRL:{
+               u8 e_aci = *((u8 *)val);
                union aci_aifsn *p_aci_aifsn =
                                (union aci_aifsn *)(&(mac->ac[0].aifs));
                u8 acm = p_aci_aifsn->f.acm;
                                break;
                        default:
                                RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
-                                        "HW_VAR_ACM_CTRL acm set "
-                                         "failed: eACI is %d\n", acm);
+                                        "HW_VAR_ACM_CTRL acm set failed: eACI is %d\n",
+                                        acm);
                                break;
                        }
                } else {
                                acm_ctrl &= (~ACMHW_BEQEN);
                                break;
                        default:
-                               RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
+                               RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
                                         "switch case not process\n");
                                break;
                        }
                }
+
                RT_TRACE(rtlpriv, COMP_QOS, DBG_TRACE,
-                        "SetHwReg8190pci(): [HW_VAR_ACM_CTRL] "
-                        "Write 0x%X\n", acm_ctrl);
+                        "SetHwReg8190pci(): [HW_VAR_ACM_CTRL] Write 0x%X\n",
+                        acm_ctrl);
                rtl_write_byte(rtlpriv, REG_ACMHWCTRL, acm_ctrl);
-               break; }
+               }
+               break;
        case HW_VAR_RCR:
                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;
+       case HW_VAR_RETRY_LIMIT:{
+               u8 retry_limit = ((u8 *)(val))[0];
 
                rtl_write_word(rtlpriv, REG_RL,
                               retry_limit << RETRY_LIMIT_SHORT_SHIFT |
                               retry_limit << RETRY_LIMIT_LONG_SHIFT);
-               break; }
+               }
+               break;
        case HW_VAR_DUAL_TSF_RST:
                rtl_write_byte(rtlpriv, REG_DUAL_TSF_RST, (BIT(0) | BIT(1)));
                break;
                rtlefuse->efuse_usedbytes = *((u16 *)val);
                break;
        case HW_VAR_EFUSE_USAGE:
-               rtlefuse->efuse_usedpercentage = *val;
+               rtlefuse->efuse_usedpercentage = *((u8 *)val);
                break;
        case HW_VAR_IO_CMD:
                rtl8723be_phy_set_io_cmd(hw, (*(enum io_type *)val));
                break;
-       case HW_VAR_SET_RPWM: {
+       case HW_VAR_SET_RPWM:{
                u8 rpwm_val;
 
                rpwm_val = rtl_read_byte(rtlpriv, REG_PCIE_HRPWM);
                udelay(1);
 
                if (rpwm_val & BIT(7)) {
-                       rtl_write_byte(rtlpriv, REG_PCIE_HRPWM, *val);
+                       rtl_write_byte(rtlpriv, REG_PCIE_HRPWM, (*(u8 *)val));
                } else {
-                       rtl_write_byte(rtlpriv, REG_PCIE_HRPWM, *val | BIT(7));
+                       rtl_write_byte(rtlpriv, REG_PCIE_HRPWM,
+                                      ((*(u8 *)val) | BIT(7)));
                }
-               break; }
+               }
+               break;
        case HW_VAR_H2C_FW_PWRMODE:
-               rtl8723be_set_fw_pwrmode_cmd(hw, *val);
+               rtl8723be_set_fw_pwrmode_cmd(hw, (*(u8 *)val));
                break;
        case HW_VAR_FW_PSMODE_STATUS:
                ppsc->fw_current_inpsmode = *((bool *)val);
        case HW_VAR_RESUME_CLK_ON:
                _rtl8723be_set_fw_ps_rf_on(hw);
                break;
-       case HW_VAR_FW_LPS_ACTION: {
-               bool enter_fwlps = *((bool *)val);
+       case HW_VAR_FW_LPS_ACTION:{
+               bool b_enter_fwlps = *((bool *)val);
 
-               if (enter_fwlps)
+               if (b_enter_fwlps)
                        _rtl8723be_fwlps_enter(hw);
                else
                        _rtl8723be_fwlps_leave(hw);
-
-               break; }
-       case HW_VAR_H2C_FW_JOINBSSRPT: {
-               u8 mstatus = *val;
-               u8 tmp_regcr, tmp_reg422, bcnvalid_reg;
-               u8 count = 0, dlbcn_count = 0;
-               bool recover = false;
+               }
+               break;
+       case HW_VAR_H2C_FW_JOINBSSRPT:{
+               u8 mstatus = (*(u8 *)val);
 
                if (mstatus == RT_MEDIA_CONNECT) {
                        rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_AID, NULL);
-
-                       tmp_regcr = rtl_read_byte(rtlpriv, REG_CR + 1);
-                       rtl_write_byte(rtlpriv, REG_CR + 1,
-                                      (tmp_regcr | BIT(0)));
-
-                       _rtl8723be_set_bcn_ctrl_reg(hw, 0, BIT(3));
-                       _rtl8723be_set_bcn_ctrl_reg(hw, BIT(4), 0);
-
-                       tmp_reg422 = rtl_read_byte(rtlpriv,
-                                                  REG_FWHW_TXQ_CTRL + 2);
-                       rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2,
-                                      tmp_reg422 & (~BIT(6)));
-                       if (tmp_reg422 & BIT(6))
-                               recover = true;
-
-                       do {
-                               bcnvalid_reg = rtl_read_byte(rtlpriv,
-                                                            REG_TDECTRL + 2);
-                               rtl_write_byte(rtlpriv, REG_TDECTRL + 2,
-                                              (bcnvalid_reg | BIT(0)));
-                               _rtl8723be_return_beacon_queue_skb(hw);
-
-                               rtl8723be_set_fw_rsvdpagepkt(hw, 0);
-                               bcnvalid_reg = rtl_read_byte(rtlpriv,
-                                                            REG_TDECTRL + 2);
-                               count = 0;
-                               while (!(bcnvalid_reg & BIT(0)) && count < 20) {
-                                       count++;
-                                       udelay(10);
-                                       bcnvalid_reg = rtl_read_byte(rtlpriv,
-                                                              REG_TDECTRL + 2);
-                               }
-                               dlbcn_count++;
-                       } while (!(bcnvalid_reg & BIT(0)) && dlbcn_count < 5);
-
-                       if (bcnvalid_reg & BIT(0))
-                               rtl_write_byte(rtlpriv, REG_TDECTRL+2, BIT(0));
-
-                       _rtl8723be_set_bcn_ctrl_reg(hw, BIT(3), 0);
-                       _rtl8723be_set_bcn_ctrl_reg(hw, 0, BIT(4));
-
-                       if (recover) {
-                               rtl_write_byte(rtlpriv, REG_FWHW_TXQ_CTRL + 2,
-                                              tmp_reg422);
-                       }
-                       rtl_write_byte(rtlpriv, REG_CR + 1,
-                                      (tmp_regcr & ~(BIT(0))));
+                       _rtl8723be_download_rsvd_page(hw);
+               }
+               rtl8723be_set_fw_media_status_rpt_cmd(hw, mstatus);
                }
-               rtl8723be_set_fw_joinbss_report_cmd(hw, *val);
-               break; }
+               break;
        case HW_VAR_H2C_FW_P2P_PS_OFFLOAD:
-               rtl8723be_set_p2p_ps_offload_cmd(hw, *val);
+               rtl8723be_set_p2p_ps_offload_cmd(hw, (*(u8 *)val));
                break;
-       case HW_VAR_AID: {
+       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;
+               }
+               break;
+       case HW_VAR_CORRECT_TSF:{
+               u8 btype_ibss = ((u8 *)(val))[0];
 
                if (btype_ibss)
                        _rtl8723be_stop_tx_beacon(hw);
 
                if (btype_ibss)
                        _rtl8723be_resume_tx_beacon(hw);
-               break; }
-       case HW_VAR_KEEP_ALIVE: {
+               }
+               break;
+       case HW_VAR_KEEP_ALIVE:{
                u8 array[2];
                array[0] = 0xff;
-               array[1] = *val;
-               rtl8723be_fill_h2c_cmd(hw, H2C_8723BE_KEEP_ALIVE_CTRL,
-                                      2, array);
-               break; }
+               array[1] = *((u8 *)val);
+               rtl8723be_fill_h2c_cmd(hw, H2C_8723B_KEEP_ALIVE_CTRL, 2, array);
+               }
+               break;
        default:
-               RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
+               RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
                         "switch case not process %x\n",
                         variable);
                break;
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        bool status = true;
-       int count = 0;
+       long count = 0;
        u32 value = _LLT_INIT_ADDR(address) | _LLT_INIT_DATA(data) |
                    _LLT_OP(_LLT_WRITE_ACCESS);
 
 
                if (count > POLLING_LLT_THRESHOLD) {
                        RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
-                                "Failed to polling write LLT done at "
-                                 "address %d!\n", address);
+                                "Failed to polling write LLT done at address %d!\n",
+                                address);
                        status = false;
                        break;
                }
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        unsigned short i;
        u8 txpktbuf_bndy;
-       u8 maxpage;
+       u8 maxPage;
        bool status;
 
-       maxpage = 255;
+       maxPage = 255;
        txpktbuf_bndy = 245;
 
        rtl_write_dword(rtlpriv, REG_TRXFF_BNDY,
                if (!status)
                        return status;
        }
+
        status = _rtl8723be_llt_write(hw, (txpktbuf_bndy - 1), 0xFF);
 
        if (!status)
                return status;
 
-       for (i = txpktbuf_bndy; i < maxpage; i++) {
+       for (i = txpktbuf_bndy; i < maxPage; i++) {
                status = _rtl8723be_llt_write(hw, i, (i + 1));
                if (!status)
                        return status;
        }
-       status = _rtl8723be_llt_write(hw, maxpage, txpktbuf_bndy);
+
+       status = _rtl8723be_llt_write(hw, maxPage, txpktbuf_bndy);
        if (!status)
                return status;
 
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
-
+       struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
        unsigned char bytetmp;
        unsigned short wordtmp;
-       u16 retry = 0;
-       bool mac_func_enable;
 
        rtl_write_byte(rtlpriv, REG_RSV_CTRL, 0x00);
 
        bytetmp = rtl_read_byte(rtlpriv, REG_APS_FSMCO + 1) & (~BIT(7));
        rtl_write_byte(rtlpriv, REG_APS_FSMCO + 1, bytetmp);
 
-       bytetmp = rtl_read_byte(rtlpriv, REG_CR);
-       if (bytetmp == 0xFF)
-               mac_func_enable = true;
-       else
-               mac_func_enable = false;
-
        /* HW Power on sequence */
        if (!rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK,
                                      PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,
                         "init MAC Fail as power on failure\n");
                return false;
        }
+
+       bytetmp = rtl_read_byte(rtlpriv, REG_MULTI_FUNC_CTRL);
+       rtl_write_byte(rtlpriv, REG_MULTI_FUNC_CTRL, bytetmp | BIT(3));
+
        bytetmp = rtl_read_byte(rtlpriv, REG_APS_FSMCO) | BIT(4);
        rtl_write_byte(rtlpriv, REG_APS_FSMCO, bytetmp);
 
        bytetmp = rtl_read_byte(rtlpriv, REG_SYS_CFG + 3);
        if (bytetmp & BIT(0)) {
                bytetmp = rtl_read_byte(rtlpriv, 0x7c);
-               bytetmp |= BIT(6);
-               rtl_write_byte(rtlpriv, 0x7c, bytetmp);
+               rtl_write_byte(rtlpriv, 0x7c, bytetmp | BIT(6));
        }
+
        bytetmp = rtl_read_byte(rtlpriv, REG_SYS_CLKR);
-       bytetmp |= BIT(3);
-       rtl_write_byte(rtlpriv, REG_SYS_CLKR, bytetmp);
+       rtl_write_byte(rtlpriv, REG_SYS_CLKR, bytetmp | BIT(3));
        bytetmp = rtl_read_byte(rtlpriv, REG_GPIO_MUXCFG + 1);
-       bytetmp &= ~BIT(4);
-       rtl_write_byte(rtlpriv, REG_GPIO_MUXCFG + 1, bytetmp);
-
-       bytetmp = rtl_read_byte(rtlpriv, REG_PCIE_CTRL_REG+3);
-       rtl_write_byte(rtlpriv, REG_PCIE_CTRL_REG+3, bytetmp | 0x77);
+       rtl_write_byte(rtlpriv, REG_GPIO_MUXCFG + 1, bytetmp & (~BIT(4)));
 
        rtl_write_word(rtlpriv, REG_CR, 0x2ff);
 
-       if (!mac_func_enable) {
-               if (!_rtl8723be_llt_table_init(hw))
+       if (!rtlhal->mac_func_enable) {
+               if (_rtl8723be_llt_table_init(hw) == false)
                        return false;
        }
+
        rtl_write_dword(rtlpriv, REG_HISR, 0xffffffff);
        rtl_write_dword(rtlpriv, REG_HISRE, 0xffffffff);
 
        rtl_write_word(rtlpriv, REG_RXFLTMAP2, 0xFFFF);
        rtl_write_dword(rtlpriv, REG_TCR, rtlpci->transmit_config);
 
-       rtl_write_byte(rtlpriv, 0x4d0, 0x0);
-
        rtl_write_dword(rtlpriv, REG_BCNQ_DESA,
                        ((u64) rtlpci->tx_ring[BEACON_QUEUE].dma) &
                        DMA_BIT_MASK(32));
 
        rtl_write_dword(rtlpriv, REG_INT_MIG, 0);
 
-       bytetmp = rtl_read_byte(rtlpriv, REG_APSD_CTRL);
-       rtl_write_byte(rtlpriv, REG_APSD_CTRL, bytetmp & ~BIT(6));
+       rtl_write_dword(rtlpriv, REG_MCUTST_1, 0x0);
 
        rtl_write_byte(rtlpriv, REG_SECONDARY_CCA_CTRL, 0x3);
 
-       do {
-               retry++;
-               bytetmp = rtl_read_byte(rtlpriv, REG_APSD_CTRL);
-       } while ((retry < 200) && (bytetmp & BIT(7)));
-
-       _rtl8723be_gen_refresh_led_state(hw);
-
-       rtl_write_dword(rtlpriv, REG_MCUTST_1, 0x0);
+       /* <20130114, Kordan> The following setting is
+        * only for DPDT and Fixed board type.
+        * TODO:  A better solution is configure it
+        * according EFUSE during the run-time.
+        */
+       rtl_set_bbreg(hw, 0x64, BIT(20), 0x0);/* 0x66[4]=0 */
+       rtl_set_bbreg(hw, 0x64, BIT(24), 0x0);/* 0x66[8]=0 */
+       rtl_set_bbreg(hw, 0x40, BIT(4), 0x0)/* 0x40[4]=0 */;
+       rtl_set_bbreg(hw, 0x40, BIT(3), 0x1)/* 0x40[3]=1 */;
+       rtl_set_bbreg(hw, 0x4C, BIT(24) | BIT(23), 0x2)/* 0x4C[24:23]=10 */;
+       rtl_set_bbreg(hw, 0x944, BIT(1) | BIT(0), 0x3)/* 0x944[1:0]=11 */;
+       rtl_set_bbreg(hw, 0x930, MASKBYTE0, 0x77)/* 0x930[7:0]=77 */;
+       rtl_set_bbreg(hw, 0x38, BIT(11), 0x1)/* 0x38[11]=1 */;
 
        bytetmp = rtl_read_byte(rtlpriv, REG_RXDMA_CONTROL);
-       rtl_write_byte(rtlpriv, REG_RXDMA_CONTROL, bytetmp & ~BIT(2));
+       rtl_write_byte(rtlpriv, REG_RXDMA_CONTROL, bytetmp & (~BIT(2)));
 
+       _rtl8723be_gen_refresh_led_state(hw);
        return true;
 }
 
 static void _rtl8723be_hw_configure(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u8 reg_bw_opmode;
-       u32 reg_ratr, reg_prsr;
+       struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
+       u32 reg_rrsr;
+
+       reg_rrsr = RATE_ALL_CCK | RATE_ALL_OFDM_AG;
+       /* Init value for RRSR. */
+       rtl_write_dword(rtlpriv, REG_RRSR, reg_rrsr);
+
+       /* ARFB table 9 for 11ac 5G 2SS */
+       rtl_write_dword(rtlpriv, REG_ARFR0 + 4, 0xfffff000);
+
+       /* ARFB table 10 for 11ac 5G 1SS */
+       rtl_write_dword(rtlpriv, REG_ARFR1 + 4, 0x003ff000);
+
+       /* CF-End setting. */
+       rtl_write_word(rtlpriv, REG_FWHW_TXQ_CTRL, 0x1F00);
+
+       /* 0x456 = 0x70, sugguested by Zhilin */
+       rtl_write_byte(rtlpriv, REG_AMPDU_MAX_TIME, 0x70);
+
+       /* Set retry limit */
+       rtl_write_word(rtlpriv, REG_RL, 0x0707);
+
+       /* Set Data / Response auto rate fallack retry count */
+       rtl_write_dword(rtlpriv, REG_DARFRC, 0x01000000);
+       rtl_write_dword(rtlpriv, REG_DARFRC + 4, 0x07060504);
+       rtl_write_dword(rtlpriv, REG_RARFRC, 0x01000000);
+       rtl_write_dword(rtlpriv, REG_RARFRC + 4, 0x07060504);
+
+       rtlpci->reg_bcn_ctrl_val = 0x1d;
+       rtl_write_byte(rtlpriv, REG_BCN_CTRL, rtlpci->reg_bcn_ctrl_val);
+
+       /* TBTT prohibit hold time. Suggested by designer TimChen. */
+       rtl_write_byte(rtlpriv, REG_TBTT_PROHIBIT + 1, 0xff); /* 8 ms */
+
+       rtl_write_word(rtlpriv, REG_NAV_PROT_LEN, 0x0040);
+
+       /*For Rx TP. Suggested by SD1 Richard. Added by tynli. 2010.04.12.*/
+       rtl_write_dword(rtlpriv, REG_FAST_EDCA_CTRL, 0x03086666);
 
-       reg_bw_opmode = BW_OPMODE_20MHZ;
-       reg_ratr = RATE_ALL_CCK | RATE_ALL_OFDM_AG |
-                  RATE_ALL_OFDM_1SS | RATE_ALL_OFDM_2SS;
-       reg_prsr = RATE_ALL_CCK | RATE_ALL_OFDM_AG;
+       rtl_write_byte(rtlpriv, REG_HT_SINGLE_AMPDU, 0x80);
 
-       rtl_write_dword(rtlpriv, REG_RRSR, reg_prsr);
-       rtl_write_byte(rtlpriv, REG_HWSEQ_CTRL, 0xFF);
+       rtl_write_byte(rtlpriv, REG_RX_PKT_LIMIT, 0x20);
+
+       rtl_write_byte(rtlpriv, REG_MAX_AGGR_NUM, 0x1F);
+}
+
+static u8 _rtl8723be_dbi_read(struct rtl_priv *rtlpriv, u16 addr)
+{
+       u16 read_addr = addr & 0xfffc;
+       u8 ret = 0, tmp = 0, count = 0;
+
+       rtl_write_word(rtlpriv, REG_DBI_ADDR, read_addr);
+       rtl_write_byte(rtlpriv, REG_DBI_FLAG, 0x2);
+       tmp = rtl_read_byte(rtlpriv, REG_DBI_FLAG);
+       count = 0;
+       while (tmp && count < 20) {
+               udelay(10);
+               tmp = rtl_read_byte(rtlpriv, REG_DBI_FLAG);
+               count++;
+       }
+       if (0 == tmp) {
+               read_addr = REG_DBI_RDATA + addr % 4;
+               ret = rtl_read_byte(rtlpriv, read_addr);
+       }
+
+       return ret;
+}
+
+static void _rtl8723be_dbi_write(struct rtl_priv *rtlpriv, u16 addr, u8 data)
+{
+       u8 tmp = 0, count = 0;
+       u16 write_addr = 0, remainder = addr % 4;
+
+       /* Write DBI 1Byte Data */
+       write_addr = REG_DBI_WDATA + remainder;
+       rtl_write_byte(rtlpriv, write_addr, data);
+
+       /* Write DBI 2Byte Address & Write Enable */
+       write_addr = (addr & 0xfffc) | (BIT(0) << (remainder + 12));
+       rtl_write_word(rtlpriv, REG_DBI_ADDR, write_addr);
+
+       /* Write DBI Write Flag */
+       rtl_write_byte(rtlpriv, REG_DBI_FLAG, 0x1);
+
+       tmp = rtl_read_byte(rtlpriv, REG_DBI_FLAG);
+       count = 0;
+       while (tmp && count < 20) {
+               udelay(10);
+               tmp = rtl_read_byte(rtlpriv, REG_DBI_FLAG);
+               count++;
+       }
+}
+
+static u16 _rtl8723be_mdio_read(struct rtl_priv *rtlpriv, u8 addr)
+{
+       u16 ret = 0;
+       u8 tmp = 0, count = 0;
+
+       rtl_write_byte(rtlpriv, REG_MDIO_CTL, addr | BIT(6));
+       tmp = rtl_read_byte(rtlpriv, REG_MDIO_CTL) & BIT(6);
+       count = 0;
+       while (tmp && count < 20) {
+               udelay(10);
+               tmp = rtl_read_byte(rtlpriv, REG_MDIO_CTL) & BIT(6);
+               count++;
+       }
+
+       if (0 == tmp)
+               ret = rtl_read_word(rtlpriv, REG_MDIO_RDATA);
+
+       return ret;
+}
+
+static void _rtl8723be_mdio_write(struct rtl_priv *rtlpriv, u8 addr, u16 data)
+{
+       u8 tmp = 0, count = 0;
+
+       rtl_write_word(rtlpriv, REG_MDIO_WDATA, data);
+       rtl_write_byte(rtlpriv, REG_MDIO_CTL, addr | BIT(5));
+       tmp = rtl_read_byte(rtlpriv, REG_MDIO_CTL) & BIT(5);
+       count = 0;
+       while (tmp && count < 20) {
+               udelay(10);
+               tmp = rtl_read_byte(rtlpriv, REG_MDIO_CTL) & BIT(5);
+               count++;
+       }
 }
 
 static void _rtl8723be_enable_aspm_back_door(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
+       u8 tmp8 = 0;
+       u16 tmp16 = 0;
 
-       rtl_write_byte(rtlpriv, 0x34b, 0x93);
-       rtl_write_word(rtlpriv, 0x350, 0x870c);
-       rtl_write_byte(rtlpriv, 0x352, 0x1);
+       /* <Roger_Notes> Overwrite following ePHY parameter for
+        * some platform compatibility issue,
+        * especially when CLKReq is enabled, 2012.11.09.
+        */
+       tmp16 = _rtl8723be_mdio_read(rtlpriv, 0x01);
+       if (tmp16 != 0x0663)
+               _rtl8723be_mdio_write(rtlpriv, 0x01, 0x0663);
 
-       if (ppsc->support_backdoor)
-               rtl_write_byte(rtlpriv, 0x349, 0x1b);
-       else
-               rtl_write_byte(rtlpriv, 0x349, 0x03);
+       tmp16 = _rtl8723be_mdio_read(rtlpriv, 0x04);
+       if (tmp16 != 0x7544)
+               _rtl8723be_mdio_write(rtlpriv, 0x04, 0x7544);
+
+       tmp16 = _rtl8723be_mdio_read(rtlpriv, 0x06);
+       if (tmp16 != 0xB880)
+               _rtl8723be_mdio_write(rtlpriv, 0x06, 0xB880);
+
+       tmp16 = _rtl8723be_mdio_read(rtlpriv, 0x07);
+       if (tmp16 != 0x4000)
+               _rtl8723be_mdio_write(rtlpriv, 0x07, 0x4000);
+
+       tmp16 = _rtl8723be_mdio_read(rtlpriv, 0x08);
+       if (tmp16 != 0x9003)
+               _rtl8723be_mdio_write(rtlpriv, 0x08, 0x9003);
+
+       tmp16 = _rtl8723be_mdio_read(rtlpriv, 0x09);
+       if (tmp16 != 0x0D03)
+               _rtl8723be_mdio_write(rtlpriv, 0x09, 0x0D03);
+
+       tmp16 = _rtl8723be_mdio_read(rtlpriv, 0x0A);
+       if (tmp16 != 0x4037)
+               _rtl8723be_mdio_write(rtlpriv, 0x0A, 0x4037);
 
-       rtl_write_word(rtlpriv, 0x350, 0x2718);
-       rtl_write_byte(rtlpriv, 0x352, 0x1);
+       tmp16 = _rtl8723be_mdio_read(rtlpriv, 0x0B);
+       if (tmp16 != 0x0070)
+               _rtl8723be_mdio_write(rtlpriv, 0x0B, 0x0070);
+
+       /* Configuration Space offset 0x70f BIT7 is used to control L0S */
+       tmp8 = _rtl8723be_dbi_read(rtlpriv, 0x70f);
+       _rtl8723be_dbi_write(rtlpriv, 0x70f, tmp8 | BIT(7));
+
+       /* Configuration Space offset 0x719 Bit3 is for L1
+        * BIT4 is for clock request
+        */
+       tmp8 = _rtl8723be_dbi_read(rtlpriv, 0x719);
+       _rtl8723be_dbi_write(rtlpriv, 0x719, tmp8 | BIT(3) | BIT(4));
 }
 
 void rtl8723be_enable_hw_security_config(struct ieee80211_hw *hw)
 
        RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
                 "PairwiseEncAlgorithm = %d GroupEncAlgorithm = %d\n",
-                rtlpriv->sec.pairwise_enc_algorithm,
-                rtlpriv->sec.group_enc_algorithm);
+                 rtlpriv->sec.pairwise_enc_algorithm,
+                 rtlpriv->sec.group_enc_algorithm);
 
        if (rtlpriv->cfg->mod_params->sw_crypto || rtlpriv->sec.use_sw_sec) {
                RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
                         "not open hw encryption\n");
                return;
        }
+
        sec_reg_value = SCR_TXENCENABLE | SCR_RXDECENABLE;
 
        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);
 
-       RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG, "The SECR-value %x\n",
-                sec_reg_value);
+       RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
+                "The SECR-value %x\n", sec_reg_value);
 
        rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_WPA_CONFIG, &sec_reg_value);
 }
 
+static void _rtl8723be_poweroff_adapter(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       u8 u1b_tmp;
+
+       rtlhal->mac_func_enable = false;
+       /* Combo (PCIe + USB) Card and PCIe-MF Card */
+       /* 1. Run LPS WL RFOFF flow */
+       rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
+                                PWR_INTF_PCI_MSK, RTL8723_NIC_LPS_ENTER_FLOW);
+
+       /* 2. 0x1F[7:0] = 0 */
+       /* turn off RF */
+       /* rtl_write_byte(rtlpriv, REG_RF_CTRL, 0x00); */
+       if ((rtl_read_byte(rtlpriv, REG_MCUFWDL) & BIT(7)) &&
+           rtlhal->fw_ready) {
+               rtl8723be_firmware_selfreset(hw);
+       }
+
+       /* Reset MCU. Suggested by Filen. */
+       u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
+       rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, (u1b_tmp & (~BIT(2))));
+
+       /* g.   MCUFWDL 0x80[1:0]=0      */
+       /* reset MCU ready status */
+       rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x00);
+
+       /* HW card disable configuration. */
+       rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
+                                PWR_INTF_PCI_MSK, RTL8723_NIC_DISABLE_FLOW);
+
+       /* Reset MCU IO Wrapper */
+       u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL + 1);
+       rtl_write_byte(rtlpriv, REG_RSV_CTRL + 1, (u1b_tmp & (~BIT(0))));
+       u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL + 1);
+       rtl_write_byte(rtlpriv, REG_RSV_CTRL + 1, u1b_tmp | BIT(0));
+
+       /* 7. RSV_CTRL 0x1C[7:0] = 0x0E */
+       /* lock ISO/CLK/Power control register */
+       rtl_write_byte(rtlpriv, REG_RSV_CTRL, 0x0e);
+}
+
+static bool _rtl8723be_check_pcie_dma_hang(struct rtl_priv *rtlpriv)
+{
+       u8 tmp;
+
+       /* write reg 0x350 Bit[26]=1. Enable debug port. */
+       tmp = rtl_read_byte(rtlpriv, REG_DBI_CTRL + 3);
+       if (!(tmp & BIT(2))) {
+               rtl_write_byte(rtlpriv, REG_DBI_CTRL + 3, (tmp | BIT(2)));
+               mdelay(100); /* Suggested by DD Justin_tsai. */
+       }
+
+       /* read reg 0x350 Bit[25] if 1 : RX hang
+        * read reg 0x350 Bit[24] if 1 : TX hang
+        */
+       tmp = rtl_read_byte(rtlpriv, REG_DBI_CTRL + 3);
+       if ((tmp & BIT(0)) || (tmp & BIT(1))) {
+               RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
+                        "CheckPcieDMAHang8723BE(): true!!\n");
+               return true;
+       }
+       return false;
+}
+
+static void _rtl8723be_reset_pcie_interface_dma(struct rtl_priv *rtlpriv,
+                                               bool mac_power_on)
+{
+       u8 tmp;
+       bool release_mac_rx_pause;
+       u8 backup_pcie_dma_pause;
+
+       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
+                "ResetPcieInterfaceDMA8723BE()\n");
+
+       /* Revise Note: Follow the document "PCIe RX DMA Hang Reset Flow_v03"
+        * released by SD1 Alan.
+        * 2013.05.07, by tynli.
+        */
+
+       /* 1. disable register write lock
+        *      write 0x1C bit[1:0] = 2'h0
+        *      write 0xCC bit[2] = 1'b1
+        */
+       tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL);
+       tmp &= ~(BIT(1) | BIT(0));
+       rtl_write_byte(rtlpriv, REG_RSV_CTRL, tmp);
+       tmp = rtl_read_byte(rtlpriv, REG_PMC_DBG_CTRL2);
+       tmp |= BIT(2);
+       rtl_write_byte(rtlpriv, REG_PMC_DBG_CTRL2, tmp);
+
+       /* 2. Check and pause TRX DMA
+        *      write 0x284 bit[18] = 1'b1
+        *      write 0x301 = 0xFF
+        */
+       tmp = rtl_read_byte(rtlpriv, REG_RXDMA_CONTROL);
+       if (tmp & BIT(2)) {
+               /* Already pause before the function for another purpose. */
+               release_mac_rx_pause = false;
+       } else {
+               rtl_write_byte(rtlpriv, REG_RXDMA_CONTROL, (tmp | BIT(2)));
+               release_mac_rx_pause = true;
+       }
+
+       backup_pcie_dma_pause = rtl_read_byte(rtlpriv, REG_PCIE_CTRL_REG + 1);
+       if (backup_pcie_dma_pause != 0xFF)
+               rtl_write_byte(rtlpriv, REG_PCIE_CTRL_REG + 1, 0xFF);
+
+       if (mac_power_on) {
+               /* 3. reset TRX function
+                *      write 0x100 = 0x00
+                */
+               rtl_write_byte(rtlpriv, REG_CR, 0);
+       }
+
+       /* 4. Reset PCIe DMA
+        *      write 0x003 bit[0] = 0
+        */
+       tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
+       tmp &= ~(BIT(0));
+       rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, tmp);
+
+       /* 5. Enable PCIe DMA
+        *      write 0x003 bit[0] = 1
+        */
+       tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
+       tmp |= BIT(0);
+       rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, tmp);
+
+       if (mac_power_on) {
+               /* 6. enable TRX function
+                *      write 0x100 = 0xFF
+                */
+               rtl_write_byte(rtlpriv, REG_CR, 0xFF);
+
+               /* We should init LLT & RQPN and
+                * prepare Tx/Rx descrptor address later
+                * because MAC function is reset.
+                */
+       }
+
+       /* 7. Restore PCIe autoload down bit
+        *      write 0xF8 bit[17] = 1'b1
+        */
+       tmp = rtl_read_byte(rtlpriv, REG_MAC_PHY_CTRL_NORMAL + 2);
+       tmp |= BIT(1);
+       rtl_write_byte(rtlpriv, REG_MAC_PHY_CTRL_NORMAL + 2, tmp);
+
+       /* In MAC power on state, BB and RF maybe in ON state,
+        * if we release TRx DMA here
+        * it will cause packets to be started to Tx/Rx,
+        * so we release Tx/Rx DMA later.
+        */
+       if (!mac_power_on) {
+               /* 8. release TRX DMA
+                *      write 0x284 bit[18] = 1'b0
+                *      write 0x301 = 0x00
+                */
+               if (release_mac_rx_pause) {
+                       tmp = rtl_read_byte(rtlpriv, REG_RXDMA_CONTROL);
+                       rtl_write_byte(rtlpriv, REG_RXDMA_CONTROL,
+                                      (tmp & (~BIT(2))));
+               }
+               rtl_write_byte(rtlpriv, REG_PCIE_CTRL_REG + 1,
+                              backup_pcie_dma_pause);
+       }
+
+       /* 9. lock system register
+        *      write 0xCC bit[2] = 1'b0
+        */
+       tmp = rtl_read_byte(rtlpriv, REG_PMC_DBG_CTRL2);
+       tmp &= ~(BIT(2));
+       rtl_write_byte(rtlpriv, REG_PMC_DBG_CTRL2, tmp);
+}
+
 int rtl8723be_hw_init(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        local_save_flags(flags);
        local_irq_enable();
 
+       rtlhal->fw_ready = false;
        rtlpriv->rtlhal.being_init_adapter = true;
        rtlpriv->intf_ops->disable_aspm(hw);
+
+       tmp_u1b = rtl_read_byte(rtlpriv, REG_CR);
+       if (tmp_u1b != 0 && tmp_u1b != 0xea) {
+               rtlhal->mac_func_enable = true;
+       } else {
+               rtlhal->mac_func_enable = false;
+               rtlhal->fw_ps_state = FW_PS_STATE_ALL_ON;
+       }
+
+       if (_rtl8723be_check_pcie_dma_hang(rtlpriv)) {
+               _rtl8723be_reset_pcie_interface_dma(rtlpriv,
+                                                   rtlhal->mac_func_enable);
+               rtlhal->mac_func_enable = false;
+       }
+       if (rtlhal->mac_func_enable) {
+               _rtl8723be_poweroff_adapter(hw);
+               rtlhal->mac_func_enable = false;
+       }
        rtstatus = _rtl8723be_init_mac(hw);
        if (!rtstatus) {
                RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "Init MAC failed\n");
                err = 1;
                goto exit;
        }
+
        tmp_u1b = rtl_read_byte(rtlpriv, REG_SYS_CFG);
-       tmp_u1b &= 0x7F;
-       rtl_write_byte(rtlpriv, REG_SYS_CFG, tmp_u1b);
+       rtl_write_byte(rtlpriv, REG_SYS_CFG, tmp_u1b & 0x7F);
 
-       err = rtl8723_download_fw(hw, true, FW_8192C_POLLING_TIMEOUT_COUNT);
+       err = rtl8723_download_fw(hw, true, FW_8723B_POLLING_TIMEOUT_COUNT);
        if (err) {
                RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
                         "Failed to download FW. Init HW without FW now..\n");
                err = 1;
-               rtlhal->fw_ready = false;
                goto exit;
-       } else {
-               rtlhal->fw_ready = true;
        }
+       rtlhal->fw_ready = true;
+
        rtlhal->last_hmeboxnum = 0;
        rtl8723be_phy_mac_config(hw);
        /* because last function modify RCR, so we update
         * rcr var here, or TP will unstable for receive_config
-        * is wrong, RX RCR_ACRC32 will cause TP unstabel & Rx
+        * is wrong, RX RCR_ACRC32 will cause TP unstable & Rx
         * RCR_APP_ICV will cause mac80211 unassoc for cisco 1252
         */
        rtlpci->receive_config = rtl_read_dword(rtlpriv, REG_RCR);
        rtl_write_dword(rtlpriv, REG_RCR, rtlpci->receive_config);
 
        rtl8723be_phy_bb_config(hw);
-       rtlphy->rf_mode = RF_OP_BY_SW_3WIRE;
        rtl8723be_phy_rf_config(hw);
 
        rtlphy->rfreg_chnlval[0] = rtl_get_rfreg(hw, (enum radio_path)0,
        rtlphy->rfreg_chnlval[0] &= 0xFFF03FF;
        rtlphy->rfreg_chnlval[0] |= (BIT(10) | BIT(11));
 
-       rtl_set_bbreg(hw, RFPGA0_RFMOD, BCCKEN, 0x1);
-       rtl_set_bbreg(hw, RFPGA0_RFMOD, BOFDMEN, 0x1);
-       rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER2, BIT(10), 1);
        _rtl8723be_hw_configure(hw);
+       rtlhal->mac_func_enable = true;
        rtl_cam_reset_all_entry(hw);
        rtl8723be_enable_hw_security_config(hw);
 
 
        rtl8723be_bt_hw_init(hw);
 
-       rtl_set_bbreg(hw, 0x64, BIT(20), 0);
-       rtl_set_bbreg(hw, 0x64, BIT(24), 0);
-
-       rtl_set_bbreg(hw, 0x40, BIT(4), 0);
-       rtl_set_bbreg(hw, 0x40, BIT(3), 1);
-
-       rtl_set_bbreg(hw, 0x944, BIT(0)|BIT(1), 0x3);
-       rtl_set_bbreg(hw, 0x930, 0xff, 0x77);
-
-       rtl_set_bbreg(hw, 0x38, BIT(11), 0x1);
-
-       rtl_set_bbreg(hw, 0xb2c, 0xffffffff, 0x80000000);
-
        if (ppsc->rfpwr_state == ERFON) {
+               rtl8723be_phy_set_rfpath_switch(hw, 1);
+               /* when use 1ant NIC, iqk will disturb BT music
+                * root cause is not clear now, is something
+                * related with 'mdelay' and Reg[0x948]
+                */
+               if (rtlpriv->btcoexist.btc_info.ant_num == ANT_X2 ||
+                   !rtlpriv->cfg->ops->get_btc_status()) {
+                       rtl8723be_phy_iq_calibrate(hw, false);
+                       rtlphy->iqk_initialized = true;
+               }
                rtl8723be_dm_check_txpower_tracking(hw);
                rtl8723be_phy_lc_calibrate(hw);
        }
-       tmp_u1b = efuse_read_1byte(hw, 0x1FA);
-       if (!(tmp_u1b & BIT(0))) {
-               rtl_set_rfreg(hw, RF90_PATH_A, 0x15, 0x0F, 0x05);
-               RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "PA BIAS path A\n");
-       }
-       if (!(tmp_u1b & BIT(4))) {
-               tmp_u1b = rtl_read_byte(rtlpriv, 0x16);
-               tmp_u1b &= 0x0F;
-               rtl_write_byte(rtlpriv, 0x16, tmp_u1b | 0x80);
-               udelay(10);
-               rtl_write_byte(rtlpriv, 0x16, tmp_u1b | 0x90);
-               RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "under 1.5V\n");
+       rtl_write_byte(rtlpriv, REG_NAV_UPPER, ((30000 + 127) / 128));
+
+       /* Release Rx DMA. */
+       tmp_u1b = rtl_read_byte(rtlpriv, REG_RXDMA_CONTROL);
+       if (tmp_u1b & BIT(2)) {
+               /* Release Rx DMA if needed */
+               tmp_u1b &= (~BIT(2));
+               rtl_write_byte(rtlpriv, REG_RXDMA_CONTROL, tmp_u1b);
        }
+       /* Release Tx/Rx PCIE DMA. */
+       rtl_write_byte(rtlpriv, REG_PCIE_CTRL_REG + 1, 0);
+
        rtl8723be_dm_init(hw);
 exit:
        local_irq_restore(flags);
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &(rtlpriv->phy);
        enum version_8723e version = VERSION_UNKNOWN;
-       u8 count = 0;
-       u8 value8;
        u32 value32;
 
-       rtl_write_byte(rtlpriv, REG_RSV_CTRL, 0);
-
-       value8 = rtl_read_byte(rtlpriv, REG_APS_FSMCO + 2);
-       rtl_write_byte(rtlpriv, REG_APS_FSMCO + 2, value8 | BIT(0));
-
-       value8 = rtl_read_byte(rtlpriv, REG_APS_FSMCO + 1);
-       rtl_write_byte(rtlpriv, REG_APS_FSMCO + 1, value8 | BIT(0));
-
-       value8 = rtl_read_byte(rtlpriv, REG_APS_FSMCO + 1);
-       while (((value8 & BIT(0))) && (count++ < 100)) {
-               udelay(10);
-               value8 = rtl_read_byte(rtlpriv, REG_APS_FSMCO + 1);
-       }
-       count = 0;
-       value8 = rtl_read_byte(rtlpriv, REG_ROM_VERSION);
-       while ((value8 == 0) && (count++ < 50)) {
-               value8 = rtl_read_byte(rtlpriv, REG_ROM_VERSION);
-               mdelay(1);
-       }
        value32 = rtl_read_dword(rtlpriv, REG_SYS_CFG1);
        if ((value32 & (CHIP_8723B)) != CHIP_8723B)
                RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "unkown chip version\n");
        else
-               version = (enum version_8723e) VERSION_TEST_CHIP_1T1R_8723B;
+               version = (enum version_8723e)CHIP_8723B;
 
-               rtlphy->rf_type = RF_1T1R;
+       rtlphy->rf_type = RF_1T1R;
+
+       /* treat rtl8723be chip as  MP version in default */
+       version = (enum version_8723e)(version | NORMAL_CHIP);
+
+       value32 = rtl_read_dword(rtlpriv, REG_SYS_CFG);
+       /* cut version */
+       version |= (enum version_8723e)(value32 & CHIP_VER_RTL_MASK);
+       /* Manufacture */
+       if (((value32 & EXT_VENDOR_ID) >> 18) == 0x01)
+               version = (enum version_8723e)(version | CHIP_VENDOR_SMIC);
 
-       value8 = rtl_read_byte(rtlpriv, REG_ROM_VERSION);
-       if (value8 >= 0x02)
-               version |= BIT(3);
        RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
                 "Chip RF Type: %s\n", (rtlphy->rf_type == RF_2T2R) ?
-                "RF_2T2R" : "RF_1T1R");
+                 "RF_2T2R" : "RF_1T1R");
 
        return version;
 }
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 bt_msr = rtl_read_byte(rtlpriv, MSR) & 0xfc;
        enum led_ctl_mode ledaction = LED_CTL_NO_LINK;
+       u8 mode = MSR_NOLINK;
 
-       rtl_write_dword(rtlpriv, REG_BCN_CTRL, 0);
-       RT_TRACE(rtlpriv, COMP_BEACON, DBG_LOUD,
-                "clear 0x550 when set HW_VAR_MEDIA_STATUS\n");
-
-       if (type == NL80211_IFTYPE_UNSPECIFIED ||
-           type == NL80211_IFTYPE_STATION) {
-               _rtl8723be_stop_tx_beacon(hw);
-               _rtl8723be_enable_bcn_sub_func(hw);
-       } else if (type == NL80211_IFTYPE_ADHOC || type == NL80211_IFTYPE_AP) {
-               _rtl8723be_resume_tx_beacon(hw);
-               _rtl8723be_disable_bcn_sub_func(hw);
-       } else {
-               RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
-                        "Set HW_VAR_MEDIA_STATUS: "
-                        "No such media status(%x).\n", type);
-       }
        switch (type) {
        case NL80211_IFTYPE_UNSPECIFIED:
-               bt_msr |= MSR_NOLINK;
-               ledaction = LED_CTL_LINK;
+               mode = MSR_NOLINK;
                RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
                         "Set Network type to NO LINK!\n");
                break;
        case NL80211_IFTYPE_ADHOC:
-               bt_msr |= MSR_ADHOC;
+       case NL80211_IFTYPE_MESH_POINT:
+               mode = MSR_ADHOC;
                RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
                         "Set Network type to Ad Hoc!\n");
                break;
        case NL80211_IFTYPE_STATION:
-               bt_msr |= MSR_INFRA;
+               mode = MSR_INFRA;
                ledaction = LED_CTL_LINK;
                RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
                         "Set Network type to STA!\n");
                break;
        case NL80211_IFTYPE_AP:
-               bt_msr |= MSR_AP;
+               mode = MSR_AP;
+               ledaction = LED_CTL_LINK;
                RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
                         "Set Network type to AP!\n");
                break;
                         "Network type %d not support!\n", type);
                return 1;
        }
-       rtl_write_byte(rtlpriv, (MSR), bt_msr);
+
+       /* MSR_INFRA == Link in infrastructure network;
+        * MSR_ADHOC == Link in ad hoc network;
+        * Therefore, check link state is necessary.
+        *
+        * MSR_AP == AP mode; link state is not cared here.
+        */
+       if (mode != MSR_AP && rtlpriv->mac80211.link_state < MAC80211_LINKED) {
+               mode = MSR_NOLINK;
+               ledaction = LED_CTL_NO_LINK;
+       }
+
+       if (mode == MSR_NOLINK || mode == MSR_INFRA) {
+               _rtl8723be_stop_tx_beacon(hw);
+               _rtl8723be_enable_bcn_sub_func(hw);
+       } else if (mode == MSR_ADHOC || mode == MSR_AP) {
+               _rtl8723be_resume_tx_beacon(hw);
+               _rtl8723be_disable_bcn_sub_func(hw);
+       } else {
+               RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
+                        "Set HW_VAR_MEDIA_STATUS: No such media status(%x).\n",
+                        mode);
+       }
+
+       rtl_write_byte(rtlpriv, (MSR), bt_msr | mode);
        rtlpriv->cfg->ops->led_control(hw, ledaction);
-       if ((bt_msr & MSR_MASK) == MSR_AP)
+       if (mode == MSR_AP)
                rtl_write_byte(rtlpriv, REG_BCNTCFG + 1, 0x00);
        else
                rtl_write_byte(rtlpriv, REG_BCNTCFG + 1, 0x66);
                rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR,
                                              (u8 *)(®_rcr));
        }
+
 }
 
 int rtl8723be_set_network_type(struct ieee80211_hw *hw,
        } else {
                rtl8723be_set_check_bssid(hw, false);
        }
+
        return 0;
 }
 
 void rtl8723be_set_qos(struct ieee80211_hw *hw, int aci)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
+
        rtl8723_dm_init_edca_turbo(hw);
        switch (aci) {
        case AC1_BK:
        }
 }
 
+static void rtl8723be_clear_interrupt(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u32 tmp;
+
+       tmp = rtl_read_dword(rtlpriv, REG_HISR);
+       rtl_write_dword(rtlpriv, REG_HISR, tmp);
+
+       tmp = rtl_read_dword(rtlpriv, REG_HISRE);
+       rtl_write_dword(rtlpriv, REG_HISRE, tmp);
+
+       tmp = rtl_read_dword(rtlpriv, REG_HSISR);
+       rtl_write_dword(rtlpriv, REG_HSISR, tmp);
+}
+
 void rtl8723be_enable_interrupt(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
 
+       rtl8723be_clear_interrupt(hw);/*clear it here first*/
+
        rtl_write_dword(rtlpriv, REG_HIMR, rtlpci->irq_mask[0] & 0xFFFFFFFF);
        rtl_write_dword(rtlpriv, REG_HIMRE, rtlpci->irq_mask[1] & 0xFFFFFFFF);
        rtlpci->irq_enabled = true;
-       /* there are some C2H CMDs have been sent
-        * before system interrupt is enabled, e.g., C2H, CPWM.
-        * So we need to clear all C2H events that FW has notified,
-        * otherwise FW won't schedule any commands anymore.
-        */
-       rtl_write_byte(rtlpriv, REG_C2HEVT_CLEAR, 0);
+
        /*enable system interrupt*/
        rtl_write_dword(rtlpriv, REG_HSIMR, rtlpci->sys_irq_mask & 0xFFFFFFFF);
 }
        rtl_write_dword(rtlpriv, REG_HIMR, IMR_DISABLED);
        rtl_write_dword(rtlpriv, REG_HIMRE, IMR_DISABLED);
        rtlpci->irq_enabled = false;
-       synchronize_irq(rtlpci->pdev->irq);
-}
-
-static void _rtl8723be_poweroff_adapter(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       u8 u1b_tmp;
-
-       /* Combo (PCIe + USB) Card and PCIe-MF Card */
-       /* 1. Run LPS WL RFOFF flow */
-       rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
-                                PWR_INTF_PCI_MSK, RTL8723_NIC_LPS_ENTER_FLOW);
-
-       /* 2. 0x1F[7:0] = 0 */
-       /* turn off RF */
-       rtl_write_byte(rtlpriv, REG_RF_CTRL, 0x00);
-       if ((rtl_read_byte(rtlpriv, REG_MCUFWDL) & BIT(7)) &&
-           rtlhal->fw_ready)
-               rtl8723be_firmware_selfreset(hw);
-
-       /* Reset MCU. Suggested by Filen. */
-       u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
-       rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN + 1, (u1b_tmp & (~BIT(2))));
-
-       /* g.   MCUFWDL 0x80[1:0]= 0     */
-       /* reset MCU ready status */
-       rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x00);
-
-       /* HW card disable configuration. */
-       rtl_hal_pwrseqcmdparsing(rtlpriv, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
-                                PWR_INTF_PCI_MSK, RTL8723_NIC_DISABLE_FLOW);
-
-       /* Reset MCU IO Wrapper */
-       u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL + 1);
-       rtl_write_byte(rtlpriv, REG_RSV_CTRL + 1, (u1b_tmp & (~BIT(0))));
-       u1b_tmp = rtl_read_byte(rtlpriv, REG_RSV_CTRL + 1);
-       rtl_write_byte(rtlpriv, REG_RSV_CTRL + 1, u1b_tmp | BIT(0));
-
-       /* 7. RSV_CTRL 0x1C[7:0] = 0x0E */
-       /* lock ISO/CLK/Power control register */
-       rtl_write_byte(rtlpriv, REG_RSV_CTRL, 0x0e);
+       /*synchronize_irq(rtlpci->pdev->irq);*/
 }
 
 void rtl8723be_card_disable(struct ieee80211_hw *hw)
        u32 path, addr = EEPROM_TX_PWR_INX, group, cnt = 0;
 
        RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                "hal_ReadPowerValueFromPROM8723BE(): "
-                "PROMContent[0x%x]= 0x%x\n",
+                "hal_ReadPowerValueFromPROM8723BE(): PROMContent[0x%x]=0x%x\n",
                 (addr + 1), hwinfo[addr + 1]);
-       if (0xFF == hwinfo[addr + 1])  /*YJ, add, 120316*/
+       if (0xFF == hwinfo[addr + 1])  /*YJ,add,120316*/
                autoload_fail = true;
 
        if (autoload_fail) {
                         "auto load fail : Use Default value!\n");
                for (path = 0; path < MAX_RF_PATH; path++) {
                        /* 2.4G default value */
-                       for (group = 0; group < MAX_CHNL_GROUP_24G; group++) {
+                       for (group = 0 ; group < MAX_CHNL_GROUP_24G; group++) {
                                pw2g->index_cck_base[path][group] = 0x2D;
                                pw2g->index_bw40_base[path][group] = 0x2D;
                        }
                }
                return;
        }
+
        for (path = 0; path < MAX_RF_PATH; path++) {
                /*2.4G default value*/
                for (group = 0; group < MAX_CHNL_GROUP_24G; group++) {
                        pw2g->index_cck_base[path][group] = hwinfo[addr++];
                        if (pw2g->index_cck_base[path][group] == 0xFF)
                                pw2g->index_cck_base[path][group] = 0x2D;
+
                }
                for (group = 0; group < MAX_CHNL_GROUP_24G - 1; group++) {
                        pw2g->index_bw40_base[path][group] = hwinfo[addr++];
                                                (hwinfo[addr] & 0xf0) >> 4;
                                        /*bit sign number to 8 bit sign number*/
                                        if (pw2g->bw20_diff[path][cnt] & BIT(3))
-                                               pw2g->bw20_diff[path][cnt] |= 0xF0;
+                                               pw2g->bw20_diff[path][cnt] |=
+                                                                         0xF0;
                                }
+
                                if (hwinfo[addr] == 0xFF) {
                                        pw2g->ofdm_diff[path][cnt] = 0x04;
                                } else {
                                                pw2g->bw40_diff[path][cnt] |=
                                                                          0xF0;
                                }
+
                                if (hwinfo[addr] == 0xFF) {
                                        pw2g->bw20_diff[path][cnt] = 0xFE;
                                } else {
                                                pw2g->ofdm_diff[path][cnt] |=
                                                                          0xF0;
                                }
-                               if (hwinfo[addr] == 0xFF) {
+
+                               if (hwinfo[addr] == 0xFF)
                                        pw2g->cck_diff[path][cnt] = 0xFE;
-                               } else {
+                               else {
                                        pw2g->cck_diff[path][cnt] =
                                                        (hwinfo[addr] & 0x0f);
                                        if (pw2g->cck_diff[path][cnt] & BIT(3))
                                addr++;
                        }
                }
+
                /*5G default value*/
                for (group = 0; group < MAX_CHNL_GROUP_5G; group++) {
                        pw5g->index_bw40_base[path][group] = hwinfo[addr++];
                        if (pw5g->index_bw40_base[path][group] == 0xFF)
                                pw5g->index_bw40_base[path][group] = 0xFE;
                }
+
                for (cnt = 0; cnt < MAX_TX_COUNT; cnt++) {
                        if (cnt == 0) {
                                pw5g->bw40_diff[path][cnt] = 0;
                                                pw5g->bw20_diff[path][cnt] |=
                                                                          0xF0;
                                }
-                               if (hwinfo[addr] == 0xFF) {
+
+                               if (hwinfo[addr] == 0xFF)
                                        pw5g->ofdm_diff[path][cnt] = 0x04;
-                               } else {
+                               else {
                                        pw5g->ofdm_diff[path][0] =
                                                        (hwinfo[addr] & 0x0f);
                                        if (pw5g->ofdm_diff[path][cnt] & BIT(3))
                                        if (pw5g->bw40_diff[path][cnt] & BIT(3))
                                                pw5g->bw40_diff[path][cnt] |= 0xF0;
                                }
+
                                if (hwinfo[addr] == 0xFF) {
                                        pw5g->bw20_diff[path][cnt] = 0xFE;
                                } else {
                                addr++;
                        }
                }
+
                if (hwinfo[addr] == 0xFF) {
                        pw5g->ofdm_diff[path][1] = 0xFE;
                        pw5g->ofdm_diff[path][2] = 0xFE;
                        rtlefuse->txpwr_legacyhtdiff[rf_path][i] =
                                                pw2g.ofdm_diff[rf_path][i];
                }
+
                for (i = 0; i < 14; i++) {
-                       RTPRINT(rtlpriv, FINIT, INIT_EEPROM,
-                               "RF(%d)-Ch(%d) [CCK / HT40_1S ] = "
-                               "[0x%x / 0x%x ]\n", rf_path, i,
+                       RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
+                               "RF(%d)-Ch(%d) [CCK / HT40_1S ] = [0x%x / 0x%x ]\n",
+                               rf_path, i,
                                rtlefuse->txpwrlevel_cck[rf_path][i],
                                rtlefuse->txpwrlevel_ht40_1s[rf_path][i]);
                }
        }
+
        if (!autoload_fail)
                rtlefuse->eeprom_thermalmeter =
                                        hwinfo[EEPROM_THERMAL_METER_88E];
                rtlefuse->apk_thermalmeterignore = true;
                rtlefuse->eeprom_thermalmeter = EEPROM_DEFAULT_THERMALMETER;
        }
+
        rtlefuse->thermalmeter[0] = rtlefuse->eeprom_thermalmeter;
-       RTPRINT(rtlpriv, FINIT, INIT_EEPROM,
+       RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                "thermalmeter = 0x%x\n", rtlefuse->eeprom_thermalmeter);
 
        if (!autoload_fail) {
        } else {
                rtlefuse->eeprom_regulatory = 0;
        }
-       RTPRINT(rtlpriv, FINIT, INIT_EEPROM,
+       RTPRINT(rtlpriv, FINIT, INIT_TXPOWER,
                "eeprom_regulatory = 0x%x\n", rtlefuse->eeprom_regulatory);
 }
 
                RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "Autoload OK\n");
                rtlefuse->autoload_failflag = false;
        }
+
        if (rtlefuse->autoload_failflag)
                return;
 
        _rtl8723be_hal_customized_behavior(hw);
 }
 
-static void rtl8723be_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->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ?
-                              1 : 0;
-       u8 curshortgi_20mhz = (sta->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->supp_rates[1] << 4;
-       else
-               ratr_value = sta->supp_rates[0];
-       if (mac->opmode == NL80211_IFTYPE_ADHOC)
-               ratr_value = 0xfff;
-       ratr_value |= (sta->ht_cap.mcs.rx_mask[1] << 20 |
-                      sta->ht_cap.mcs.rx_mask[0] << 12);
-       switch (wirelessmode) {
-       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;
-       }
-       if ((rtlpriv->btcoexist.bt_coexistence) &&
-           (rtlpriv->btcoexist.bt_coexist_type == BT_CSR_BC4) &&
-           (rtlpriv->btcoexist.bt_cur_state) &&
-           (rtlpriv->btcoexist.bt_ant_isolation) &&
-           ((rtlpriv->btcoexist.bt_service == BT_SCO) ||
-            (rtlpriv->btcoexist.bt_service == BT_BUSY)))
-               ratr_value &= 0x0fffcfc0;
-       else
-               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);
-
-       RT_TRACE(rtlpriv, COMP_RATR, DBG_DMESG,
-                "%x\n", rtl_read_dword(rtlpriv, REG_ARFR0));
-}
-
 static u8 _rtl8723be_mrate_idx_to_arfr_id(struct ieee80211_hw *hw,
                                          u8 rate_index)
 {
        u8 ret = 0;
-
        switch (rate_index) {
        case RATR_INX_WIRELESS_NGB:
                ret = 1;
        u32 ratr_bitmap;
        u8 ratr_index;
        u8 curtxbw_40mhz = (sta->ht_cap.cap &
-                           IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1 : 0;
+                             IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1 : 0;
        u8 curshortgi_40mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ?
-                              1 : 0;
+                               1 : 0;
        u8 curshortgi_20mhz = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ?
-                              1 : 0;
+                               1 : 0;
        enum wireless_mode wirelessmode = 0;
        bool shortgi = false;
        u8 rate_mask[7];
        u8 macid = 0;
-       u8 mimo_ps = IEEE80211_SMPS_OFF;
 
        sta_entry = (struct rtl_sta_info *)sta->drv_priv;
        wirelessmode = sta_entry->wireless_mode;
                else
                        ratr_bitmap &= 0x00000ff5;
                break;
-       case WIRELESS_MODE_A:
-               ratr_index = RATR_INX_WIRELESS_A;
-               ratr_bitmap &= 0x00000ff0;
-               break;
        case WIRELESS_MODE_N_24G:
        case WIRELESS_MODE_N_5G:
                ratr_index = RATR_INX_WIRELESS_NGB;
-
-               if (mimo_ps == IEEE80211_SMPS_STATIC  ||
-                   mimo_ps == IEEE80211_SMPS_DYNAMIC) {
-                       if (rssi_level == 1)
-                               ratr_bitmap &= 0x00070000;
-                       else if (rssi_level == 2)
-                               ratr_bitmap &= 0x0007f000;
-                       else
-                               ratr_bitmap &= 0x0007f005;
+               if (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 (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;
-                               }
+                       if (curtxbw_40mhz) {
+                               if (rssi_level == 1)
+                                       ratr_bitmap &= 0x0f8f0000;
+                               else if (rssi_level == 2)
+                                       ratr_bitmap &= 0x0f8ff000;
+                               else
+                                       ratr_bitmap &= 0x0f8ff015;
                        } else {
-                               if (curtxbw_40mhz) {
-                                       if (rssi_level == 1)
-                                               ratr_bitmap &= 0x0f8f0000;
-                                       else if (rssi_level == 2)
-                                               ratr_bitmap &= 0x0f8ff000;
-                                       else
-                                               ratr_bitmap &= 0x0f8ff015;
-                               } else {
-                                       if (rssi_level == 1)
-                                               ratr_bitmap &= 0x0f8f0000;
-                                       else if (rssi_level == 2)
-                                               ratr_bitmap &= 0x0f8ff000;
-                                       else
-                                               ratr_bitmap &= 0x0f8ff005;
-                               }
+                               if (rssi_level == 1)
+                                       ratr_bitmap &= 0x0f8f0000;
+                               else if (rssi_level == 2)
+                                       ratr_bitmap &= 0x0f8ff000;
+                               else
+                                       ratr_bitmap &= 0x0f8ff005;
                        }
                }
                if ((curtxbw_40mhz && curshortgi_40mhz) ||
                        ratr_bitmap &= 0x0f0ff0ff;
                break;
        }
+
        sta_entry->ratr_index = ratr_index;
 
        RT_TRACE(rtlpriv, COMP_RATR, DBG_DMESG,
                 "ratr_bitmap :%x\n", ratr_bitmap);
-       *(u32 *)&rate_mask = (ratr_bitmap & 0x0fffffff) | (ratr_index << 28);
+       *(u32 *)&rate_mask = (ratr_bitmap & 0x0fffffff) |
+                                      (ratr_index << 28);
        rate_mask[0] = macid;
        rate_mask[1] = _rtl8723be_mrate_idx_to_arfr_id(hw, ratr_index) |
-                                                      (shortgi ? 0x80 : 0x00);
+                                                     (shortgi ? 0x80 : 0x00);
        rate_mask[2] = curtxbw_40mhz;
-       /* if (prox_priv->proxim_modeinfo->power_output > 0)
-        *      rate_mask[2] |= BIT(6);
-        */
 
        rate_mask[3] = (u8)(ratr_bitmap & 0x000000ff);
        rate_mask[4] = (u8)((ratr_bitmap & 0x0000ff00) >> 8);
                 rate_mask[2], rate_mask[3],
                 rate_mask[4], rate_mask[5],
                 rate_mask[6]);
-       rtl8723be_fill_h2c_cmd(hw, H2C_8723BE_RA_MASK, 7, rate_mask);
+       rtl8723be_fill_h2c_cmd(hw, H2C_8723B_RA_MASK, 7, rate_mask);
        _rtl8723be_set_bcn_ctrl_reg(hw, BIT(3), 0);
 }
 
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        if (rtlpriv->dm.useramask)
                rtl8723be_update_hal_rate_mask(hw, sta, rssi_level);
-       else
-               rtl8723be_update_hal_rate_table(hw, sta);
 }
 
 void rtl8723be_update_channel_access_setting(struct ieee80211_hw *hw)
        struct rtl_phy *rtlphy = &(rtlpriv->phy);
        enum rf_pwrstate e_rfpowerstate_toset, cur_rfstate;
        u8 u1tmp;
-       bool actuallyset = false;
+       bool b_actuallyset = false;
 
        if (rtlpriv->rtlhal.being_init_adapter)
                return false;
                ppsc->rfchange_inprogress = true;
                spin_unlock(&rtlpriv->locks.rf_ps_lock);
        }
+
        cur_rfstate = ppsc->rfpwr_state;
 
        rtl_write_byte(rtlpriv, REG_GPIO_IO_SEL_2,
        else
                e_rfpowerstate_toset = (u1tmp & BIT(1)) ? ERFON : ERFOFF;
 
-       if (ppsc->hwradiooff &&
-           (e_rfpowerstate_toset == ERFON)) {
+       if ((ppsc->hwradiooff) && (e_rfpowerstate_toset == ERFON)) {
                RT_TRACE(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)) {
+               b_actuallyset = true;
+       } else if (!ppsc->hwradiooff && (e_rfpowerstate_toset == ERFOFF)) {
                RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
                         "GPIOChangeRF  - HW Radio OFF, RF OFF\n");
 
                e_rfpowerstate_toset = ERFOFF;
                ppsc->hwradiooff = true;
-               actuallyset = true;
+               b_actuallyset = true;
        }
-       if (actuallyset) {
+
+       if (b_actuallyset) {
                spin_lock(&rtlpriv->locks.rf_ps_lock);
                ppsc->rfchange_inprogress = false;
                spin_unlock(&rtlpriv->locks.rf_ps_lock);
                ppsc->rfchange_inprogress = false;
                spin_unlock(&rtlpriv->locks.rf_ps_lock);
        }
+
        *valid = 1;
        return !ppsc->hwradiooff;
+
 }
 
 void rtl8723be_set_key(struct ieee80211_hw *hw, u32 key_index,
                                rtlpriv->sec.key_len[idx] = 0;
                        }
                }
+
        } else {
                switch (enc_algo) {
                case WEP40_ENCRYPTION:
                        enc_algo = CAM_AES;
                        break;
                default:
-                       RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
+                       RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
                                 "switch case not process\n");
                        enc_algo = CAM_TKIP;
                        break;
                                        if (entry_id >=  TOTAL_CAM_ENTRY) {
                                                RT_TRACE(rtlpriv, COMP_SEC,
                                                         DBG_EMERG,
-                                                        "Can not find free"
-                                                        " hw security cam "
-                                                        "entry\n");
+                                                        "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) {
                        RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
                                 "delete one entry, entry_id is %d\n",
-                                entry_id);
+                                 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);
                                 "add one entry\n");
                        if (is_pairwise) {
                                RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
-                                        "set Pairwise key\n");
+                                        "set Pairwiase 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]);
+                                              entry_id, enc_algo,
+                                              CAM_CONFIG_NO_USEDK,
+                                              rtlpriv->sec.key_buf[key_index]);
                        } else {
                                RT_TRACE(rtlpriv, COMP_SEC, DBG_DMESG,
                                         "set group key\n");
                                                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]);
+                                               entry_id, enc_algo,
+                                               CAM_CONFIG_NO_USEDK,
+                                               rtlpriv->sec.key_buf[entry_id]);
                        }
                }
        }
                        rtlpriv->btcoexist.btc_info.btcoexist = 1;
                else
                        rtlpriv->btcoexist.btc_info.btcoexist = 0;
-               value = hwinfo[RF_OPTION4];
+               value = hwinfo[EEPROM_RF_BT_SETTING_8723B];
                rtlpriv->btcoexist.btc_info.bt_type = BT_RTL8723B;
                rtlpriv->btcoexist.btc_info.ant_num = (value & 0x1);
        } else {
                rtlpriv->btcoexist.btc_info.bt_type = BT_RTL8723B;
                rtlpriv->btcoexist.btc_info.ant_num = ANT_X2;
        }
+
 }
 
 void rtl8723be_bt_reg_init(struct ieee80211_hw *hw)
 
        if (rtlpriv->cfg->ops->get_btc_status())
                rtlpriv->btcoexist.btc_ops->btc_init_hw_config(rtlpriv);
+
 }
 
 void rtl8723be_suspend(struct ieee80211_hw *hw)
 
 void rtl8723be_bt_hw_init(struct ieee80211_hw *hw);
 void rtl8723be_suspend(struct ieee80211_hw *hw);
 void rtl8723be_resume(struct ieee80211_hw *hw);
+
 #endif
 
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        RT_TRACE(rtlpriv, COMP_LED, DBG_LOUD,
-                "LedAddr:%X ledpin =%d\n", REG_LEDCFG2, pled->ledpin);
+                "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
 
        switch (pled->ledpin) {
        case LED_PIN_GPIO0:
        u8 ledcfg;
 
        RT_TRACE(rtlpriv, COMP_LED, DBG_LOUD,
-                "LedAddr:%X ledpin =%d\n", REG_LEDCFG2, pled->ledpin);
+                "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
 
        ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2);
 
                break;
        default:
                RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
-                        "switch case not processed\n");
+                        "switch case not process\n");
                break;
        }
        pled->ledon = false;
 
 #include "../wifi.h"
 #include "../pci.h"
 #include "../ps.h"
-#include "../core.h"
 #include "reg.h"
 #include "def.h"
 #include "phy.h"
 #include "../rtl8723com/phy_common.h"
 #include "rf.h"
 #include "dm.h"
+#include "../rtl8723com/dm_common.h"
 #include "table.h"
 #include "trx.h"
 
 static bool _rtl8723be_phy_bb8723b_config_parafile(struct ieee80211_hw *hw);
+static bool _rtl8723be_phy_config_mac_with_headerfile(struct ieee80211_hw *hw);
+static bool _rtl8723be_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
+                                                    u8 configtype);
 static bool _rtl8723be_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw,
                                                       u8 configtype);
-static bool rtl8723be_phy_sw_chn_step_by_step(struct ieee80211_hw *hw,
-                                             u8 channel, u8 *stage,
-                                             u8 *step, u32 *delay);
-static bool _rtl8723be_check_condition(struct ieee80211_hw *hw,
-                                      const u32  condition)
-{
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
-       u32 _board = rtlefuse->board_type; /*need efuse define*/
-       u32 _interface = rtlhal->interface;
-       u32 _platform = 0x08;/*SupportPlatform */
-       u32 cond = condition;
-
-       if (condition == 0xCDCDCDCD)
-               return true;
-
-       cond = condition & 0xFF;
-       if ((_board & cond) == 0 && cond != 0x1F)
-               return false;
-
-       cond = condition & 0xFF00;
-       cond = cond >> 8;
-       if ((_interface & cond) == 0 && cond != 0x07)
-               return false;
-
-       cond = condition & 0xFF0000;
-       cond = cond >> 16;
-       if ((_platform & cond) == 0 && cond != 0x0F)
-               return false;
-       return true;
-}
-
-static bool _rtl8723be_phy_config_mac_with_headerfile(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u32 i;
-       u32 arraylength;
-       u32 *ptrarray;
-
-       RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "Read rtl8723beMACPHY_Array\n");
-       arraylength = RTL8723BEMAC_1T_ARRAYLEN;
-       ptrarray = RTL8723BEMAC_1T_ARRAY;
-       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                "Img:RTL8723bEMAC_1T_ARRAY LEN %d\n", arraylength);
-       for (i = 0; i < arraylength; i = i + 2)
-               rtl_write_byte(rtlpriv, ptrarray[i], (u8) ptrarray[i + 1]);
-       return true;
-}
-
-static bool _rtl8723be_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
-                                                    u8 configtype)
-{
-       #define READ_NEXT_PAIR(v1, v2, i) \
-               do { \
-                       i += 2; \
-                       v1 = array_table[i];\
-                       v2 = array_table[i+1]; \
-               } while (0)
+static bool _rtl8723be_phy_sw_chnl_step_by_step(struct ieee80211_hw *hw,
+                                               u8 channel, u8 *stage,
+                                               u8 *step, u32 *delay);
 
-       int i;
-       u32 *array_table;
-       u16 arraylen;
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       u32 v1 = 0, v2 = 0;
-
-       if (configtype == BASEBAND_CONFIG_PHY_REG) {
-               arraylen = RTL8723BEPHY_REG_1TARRAYLEN;
-               array_table = RTL8723BEPHY_REG_1TARRAY;
-
-               for (i = 0; i < arraylen; i = i + 2) {
-                       v1 = array_table[i];
-                       v2 = array_table[i+1];
-                       if (v1 < 0xcdcdcdcd) {
-                               rtl_bb_delay(hw, v1, v2);
-                       } else {/*This line is the start line of branch.*/
-                               if (!_rtl8723be_check_condition(hw, array_table[i])) {
-                                       /*Discard the following (offset, data) pairs*/
-                                       READ_NEXT_PAIR(v1, v2, i);
-                                       while (v2 != 0xDEAD &&
-                                              v2 != 0xCDEF &&
-                                              v2 != 0xCDCD &&
-                                              i < arraylen - 2) {
-                                               READ_NEXT_PAIR(v1, v2, i);
-                                       }
-                                       i -= 2; /* prevent from for-loop += 2*/
-                               /* Configure matched pairs and
-                                * skip to end of if-else.
-                                */
-                               } else {
-                                       READ_NEXT_PAIR(v1, v2, i);
-                                       while (v2 != 0xDEAD &&
-                                              v2 != 0xCDEF &&
-                                              v2 != 0xCDCD &&
-                                              i < arraylen - 2) {
-                                               rtl_bb_delay(hw,
-                                                                   v1, v2);
-                                               READ_NEXT_PAIR(v1, v2, i);
-                                       }
-
-                                       while (v2 != 0xDEAD && i < arraylen - 2)
-                                               READ_NEXT_PAIR(v1, v2, i);
-                               }
-                       }
-               }
-       } else if (configtype == BASEBAND_CONFIG_AGC_TAB) {
-               arraylen = RTL8723BEAGCTAB_1TARRAYLEN;
-               array_table = RTL8723BEAGCTAB_1TARRAY;
-
-               for (i = 0; i < arraylen; i = i + 2) {
-                       v1 = array_table[i];
-                       v2 = array_table[i+1];
-                       if (v1 < 0xCDCDCDCD) {
-                               rtl_set_bbreg(hw, array_table[i],
-                                             MASKDWORD,
-                                             array_table[i + 1]);
-                               udelay(1);
-                               continue;
-                       } else {/*This line is the start line of branch.*/
-                               if (!_rtl8723be_check_condition(hw, array_table[i])) {
-                                       /* Discard the following
-                                        * (offset, data) pairs
-                                        */
-                                       READ_NEXT_PAIR(v1, v2, i);
-                                       while (v2 != 0xDEAD &&
-                                              v2 != 0xCDEF &&
-                                              v2 != 0xCDCD &&
-                                              i < arraylen - 2) {
-                                               READ_NEXT_PAIR(v1, v2, i);
-                                       }
-                                       i -= 2; /* prevent from for-loop += 2*/
-                               /*Configure matched pairs and
-                                *skip to end of if-else.
-                                */
-                               } else {
-                                       READ_NEXT_PAIR(v1, v2, i);
-                                       while (v2 != 0xDEAD &&
-                                              v2 != 0xCDEF &&
-                                              v2 != 0xCDCD &&
-                                              i < arraylen - 2) {
-                                               rtl_set_bbreg(hw, array_table[i],
-                                                             MASKDWORD,
-                                                             array_table[i + 1]);
-                                               udelay(1);
-                                               READ_NEXT_PAIR(v1, v2, i);
-                                       }
-
-                                       while (v2 != 0xDEAD && i < arraylen - 2)
-                                               READ_NEXT_PAIR(v1, v2, i);
-                               }
-                       }
-                       RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
-                                "The agctab_array_table[0] is "
-                                 "%x Rtl818EEPHY_REGArray[1] is %x\n",
-                                 array_table[i], array_table[i + 1]);
-               }
-       }
-       return true;
-}
-
-static u8 _rtl8723be_get_rate_section_index(u32 regaddr)
-{
-       u8 index = 0;
-
-       switch (regaddr) {
-       case RTXAGC_A_RATE18_06:
-       case RTXAGC_B_RATE18_06:
-               index = 0;
-               break;
-       case RTXAGC_A_RATE54_24:
-       case RTXAGC_B_RATE54_24:
-               index = 1;
-               break;
-       case RTXAGC_A_CCK1_MCS32:
-       case RTXAGC_B_CCK1_55_MCS32:
-               index = 2;
-               break;
-       case RTXAGC_B_CCK11_A_CCK2_11:
-               index = 3;
-               break;
-       case RTXAGC_A_MCS03_MCS00:
-       case RTXAGC_B_MCS03_MCS00:
-               index = 4;
-               break;
-       case RTXAGC_A_MCS07_MCS04:
-       case RTXAGC_B_MCS07_MCS04:
-               index = 5;
-               break;
-       case RTXAGC_A_MCS11_MCS08:
-       case RTXAGC_B_MCS11_MCS08:
-               index = 6;
-               break;
-       case RTXAGC_A_MCS15_MCS12:
-       case RTXAGC_B_MCS15_MCS12:
-               index = 7;
-               break;
-       default:
-               regaddr &= 0xFFF;
-               if (regaddr >= 0xC20 && regaddr <= 0xC4C)
-                       index = (u8) ((regaddr - 0xC20) / 4);
-               else if (regaddr >= 0xE20 && regaddr <= 0xE4C)
-                       index = (u8) ((regaddr - 0xE20) / 4);
-               break;
-       };
-       return index;
-}
+static void rtl8723be_phy_set_rf_on(struct ieee80211_hw *hw);
+static void rtl8723be_phy_set_io(struct ieee80211_hw *hw);
 
 u32 rtl8723be_phy_query_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
                               u32 regaddr, u32 bitmask)
        spin_unlock_irqrestore(&rtlpriv->locks.rf_lock, flags);
 
        RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
-                "regaddr(%#x), rfpath(%#x), "
-                 "bitmask(%#x), original_value(%#x)\n",
-                 regaddr, rfpath, bitmask, original_value);
+                "regaddr(%#x), rfpath(%#x), bitmask(%#x), original_value(%#x)\n",
+                regaddr, rfpath, bitmask, original_value);
 
        return readback_value;
 }
        RT_TRACE(rtlpriv, COMP_RF, DBG_TRACE,
                 "regaddr(%#x), bitmask(%#x), data(%#x), rfpath(%#x)\n",
                  regaddr, bitmask, data, path);
+
 }
 
 bool rtl8723be_phy_mac_config(struct ieee80211_hw *hw)
        bool rtstatus = true;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u16 regval;
-       u8 reg_hwparafile = 1;
+       u8 b_reg_hwparafile = 1;
        u32 tmp;
        u8 crystalcap = rtlpriv->efuse.crystalcap;
        rtl8723_phy_init_bb_rf_reg_def(hw);
 
        rtl_write_byte(rtlpriv, REG_AFE_XTAL_CTRL + 1, 0x80);
 
-       if (reg_hwparafile == 1)
+       if (b_reg_hwparafile == 1)
                rtstatus = _rtl8723be_phy_bb8723b_config_parafile(hw);
 
        crystalcap = crystalcap & 0x3F;
        return rtl8723be_phy_rf6052_config(hw);
 }
 
+static bool _rtl8723be_check_condition(struct ieee80211_hw *hw,
+                                      const u32  condition)
+{
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
+       u32 _board = rtlefuse->board_type; /*need efuse define*/
+       u32 _interface = rtlhal->interface;
+       u32 _platform = 0x08;/*SupportPlatform */
+       u32 cond = condition;
+
+       if (condition == 0xCDCDCDCD)
+               return true;
+
+       cond = condition & 0xFF;
+       if ((_board & cond) == 0 && cond != 0x1F)
+               return false;
+
+       cond = condition & 0xFF00;
+       cond = cond >> 8;
+       if ((_interface & cond) == 0 && cond != 0x07)
+               return false;
+
+       cond = condition & 0xFF0000;
+       cond = cond >> 16;
+       if ((_platform & cond) == 0 && cond != 0x0F)
+               return false;
+       return true;
+}
+
 static void _rtl8723be_config_rf_reg(struct ieee80211_hw *hw, u32 addr,
                                     u32 data, enum radio_path rfpath,
                                     u32 regaddr)
 {
        if (addr == 0xfe || addr == 0xffe) {
+               /* In order not to disturb BT music
+                *      when wifi init.(1ant NIC only)
+                */
                mdelay(50);
        } else {
                rtl_set_rfreg(hw, rfpath, regaddr, RFREG_OFFSET_MASK, data);
                udelay(1);
        }
 }
-
 static void _rtl8723be_config_rf_radio_a(struct ieee80211_hw *hw,
                                         u32 addr, u32 data)
 {
 
        _rtl8723be_config_rf_reg(hw, addr, data, RF90_PATH_A,
                                 addr | maskforphyset);
+
 }
 
 static void _rtl8723be_phy_init_tx_power_by_rate(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
 
        u8 band, path, txnum, section;
 
                                for (section = 0;
                                     section < TX_PWR_BY_RATE_NUM_SECTION;
                                     ++section)
-                                       rtlphy->tx_power_by_rate_offset[band]
-                                               [path][txnum][section] = 0;
+                                       rtlphy->tx_power_by_rate_offset
+                                         [band][path][txnum][section] = 0;
+}
+
+static void _rtl8723be_config_bb_reg(struct ieee80211_hw *hw,
+                                    u32 addr, u32 data)
+{
+       if (addr == 0xfe) {
+               mdelay(50);
+       } else if (addr == 0xfd) {
+               mdelay(5);
+       } else if (addr == 0xfc) {
+               mdelay(1);
+       } else if (addr == 0xfb) {
+               udelay(50);
+       } else if (addr == 0xfa) {
+               udelay(5);
+       } else if (addr == 0xf9) {
+               udelay(1);
+       } else {
+               rtl_set_bbreg(hw, addr, MASKDWORD, data);
+               udelay(1);
+       }
 }
 
-static void phy_set_txpwr_by_rate_base(struct ieee80211_hw *hw, u8 band,
-                                      u8 path, u8 rate_section,
-                                      u8 txnum, u8 value)
+static void _rtl8723be_phy_set_txpower_by_rate_base(struct ieee80211_hw *hw,
+                                                   u8 band,
+                                                   u8 path, u8 rate_section,
+                                                   u8 txnum, u8 value)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
 
        if (path > RF90_PATH_D) {
                RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
                        break;
                default:
                        RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                                "Invalid RateSection %d in Band 2.4G, Rf Path"
-                                 " %d, %dTx in PHY_SetTxPowerByRateBase()\n",
-                                 rate_section, path, txnum);
+                                "Invalid RateSection %d in Band 2.4G, Rf Path %d, %dTx in PHY_SetTxPowerByRateBase()\n",
+                                rate_section, path, txnum);
                        break;
                };
        } else {
                RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
                         "Invalid Band %d in PHY_SetTxPowerByRateBase()\n",
-                         band);
+                        band);
        }
+
 }
 
-static u8 phy_get_txpwr_by_rate_base(struct ieee80211_hw *hw, u8 band, u8 path,
-                                    u8 txnum, u8 rate_section)
+static u8 _rtl8723be_phy_get_txpower_by_rate_base(struct ieee80211_hw *hw,
+                                                 u8 band, u8 path, u8 txnum,
+                                                 u8 rate_section)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        u8 value = 0;
        if (path > RF90_PATH_D) {
                RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
                        break;
                default:
                        RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                                "Invalid RateSection %d in Band 2.4G, Rf Path"
-                                 " %d, %dTx in PHY_GetTxPowerByRateBase()\n",
-                                 rate_section, path, txnum);
+                                "Invalid RateSection %d in Band 2.4G, Rf Path %d, %dTx in PHY_GetTxPowerByRateBase()\n",
+                                rate_section, path, txnum);
                        break;
                };
        } else {
                RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
                         "Invalid Band %d in PHY_GetTxPowerByRateBase()\n",
-                         band);
+                        band);
        }
 
        return value;
 static void _rtl8723be_phy_store_txpower_by_rate_base(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       u16 raw_value = 0;
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       u16 rawvalue = 0;
        u8 base = 0, path = 0;
 
        for (path = RF90_PATH_A; path <= RF90_PATH_B; ++path) {
                if (path == RF90_PATH_A) {
-                       raw_value = (u16) (rtlphy->tx_power_by_rate_offset
+                       rawvalue = (u16)(rtlphy->tx_power_by_rate_offset
                                [BAND_ON_2_4G][path][RF_1TX][3] >> 24) & 0xFF;
-                       base = (raw_value >> 4) * 10 + (raw_value & 0xF);
-                       phy_set_txpwr_by_rate_base(hw, BAND_ON_2_4G, path, CCK,
-                                                  RF_1TX, base);
+                       base = (rawvalue >> 4) * 10 + (rawvalue & 0xF);
+                       _rtl8723be_phy_set_txpower_by_rate_base(hw,
+                               BAND_ON_2_4G, path, CCK, RF_1TX, base);
                } else if (path == RF90_PATH_B) {
-                       raw_value = (u16) (rtlphy->tx_power_by_rate_offset
+                       rawvalue = (u16)(rtlphy->tx_power_by_rate_offset
                                [BAND_ON_2_4G][path][RF_1TX][3] >> 0) & 0xFF;
-                       base = (raw_value >> 4) * 10 + (raw_value & 0xF);
-                       phy_set_txpwr_by_rate_base(hw, BAND_ON_2_4G, path,
-                                                  CCK, RF_1TX, base);
+                       base = (rawvalue >> 4) * 10 + (rawvalue & 0xF);
+                       _rtl8723be_phy_set_txpower_by_rate_base(hw,
+                                                               BAND_ON_2_4G,
+                                                               path, CCK,
+                                                               RF_1TX, base);
                }
-               raw_value = (u16) (rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G]
-                                         [path][RF_1TX][1] >> 24) & 0xFF;
-               base = (raw_value >> 4) * 10 + (raw_value & 0xF);
-               phy_set_txpwr_by_rate_base(hw, BAND_ON_2_4G, path, OFDM, RF_1TX,
-                                          base);
-
-               raw_value = (u16) (rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G]
-                                         [path][RF_1TX][5] >> 24) & 0xFF;
-               base = (raw_value >> 4) * 10 + (raw_value & 0xF);
-               phy_set_txpwr_by_rate_base(hw, BAND_ON_2_4G, path, HT_MCS0_MCS7,
-                                          RF_1TX, base);
-
-               raw_value = (u16) (rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G]
-                                         [path][RF_2TX][7] >> 24) & 0xFF;
-               base = (raw_value >> 4) * 10 + (raw_value & 0xF);
-               phy_set_txpwr_by_rate_base(hw, BAND_ON_2_4G, path,
-                                          HT_MCS8_MCS15, RF_2TX, base);
+               rawvalue = (u16)(rtlphy->tx_power_by_rate_offset
+                               [BAND_ON_2_4G][path][RF_1TX][1] >> 24) & 0xFF;
+               base = (rawvalue >> 4) * 10 + (rawvalue & 0xF);
+               _rtl8723be_phy_set_txpower_by_rate_base(hw, BAND_ON_2_4G,
+                                                       path, OFDM, RF_1TX,
+                                                       base);
+
+               rawvalue = (u16)(rtlphy->tx_power_by_rate_offset
+                               [BAND_ON_2_4G][path][RF_1TX][5] >> 24) & 0xFF;
+               base = (rawvalue >> 4) * 10 + (rawvalue & 0xF);
+               _rtl8723be_phy_set_txpower_by_rate_base(hw, BAND_ON_2_4G,
+                                                       path, HT_MCS0_MCS7,
+                                                       RF_1TX, base);
+
+               rawvalue = (u16)(rtlphy->tx_power_by_rate_offset
+                               [BAND_ON_2_4G][path][RF_2TX][7] >> 24) & 0xFF;
+               base = (rawvalue >> 4) * 10 + (rawvalue & 0xF);
+               _rtl8723be_phy_set_txpower_by_rate_base(hw, BAND_ON_2_4G,
+                                                       path, HT_MCS8_MCS15,
+                                                       RF_2TX, base);
        }
 }
 
-static void phy_conv_dbm_to_rel(u32 *data, u8 start, u8 end, u8 base_val)
+static void _phy_convert_txpower_dbm_to_relative_value(u32 *data, u8 start,
+                                               u8 end, u8 base_val)
 {
        char i = 0;
        u8 temp_value = 0;
        for (i = 3; i >= 0; --i) {
                if (i >= start && i <= end) {
                        /* Get the exact value */
-                       temp_value = (u8) (*data >> (i * 8)) & 0xF;
-                       temp_value += ((u8) ((*data >> (i*8 + 4)) & 0xF)) * 10;
+                       temp_value = (u8)(*data >> (i * 8)) & 0xF;
+                       temp_value += ((u8)((*data >> (i*8 + 4)) & 0xF)) * 10;
 
                        /* Change the value to a relative value */
                        temp_value = (temp_value > base_val) ?
                                     temp_value - base_val :
                                     base_val - temp_value;
                } else {
-                       temp_value = (u8) (*data >> (i * 8)) & 0xFF;
+                       temp_value = (u8)(*data >> (i * 8)) & 0xFF;
                }
                temp_data <<= 8;
                temp_data |= temp_value;
        *data = temp_data;
 }
 
-static void conv_dbm_to_rel(struct ieee80211_hw *hw)
+static void _rtl8723be_phy_convert_txpower_dbm_to_relative_value(
+                                                       struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        u8 base = 0, rfpath = RF90_PATH_A;
 
-       base = phy_get_txpwr_by_rate_base(hw, BAND_ON_2_4G, rfpath,
-                                         RF_1TX, CCK);
-       phy_conv_dbm_to_rel(&(rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G]
-                           [rfpath][RF_1TX][2]), 1, 1, base);
-       phy_conv_dbm_to_rel(&(rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G]
-                           [rfpath][RF_1TX][3]), 1, 3, base);
-
-       base = phy_get_txpwr_by_rate_base(hw, BAND_ON_2_4G, rfpath,
-                                         RF_1TX, OFDM);
-       phy_conv_dbm_to_rel(&(rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G]
-                           [rfpath][RF_1TX][0]), 0, 3, base);
-       phy_conv_dbm_to_rel(&(rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G]
-                           [rfpath][RF_1TX][1]), 0, 3, base);
-
-       base = phy_get_txpwr_by_rate_base(hw, BAND_ON_2_4G, rfpath,
-                                         RF_1TX, HT_MCS0_MCS7);
-       phy_conv_dbm_to_rel(&(rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G]
-                           [rfpath][RF_1TX][4]), 0, 3, base);
-       phy_conv_dbm_to_rel(&(rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G]
-                           [rfpath][RF_1TX][5]), 0, 3, base);
-
-       base = phy_get_txpwr_by_rate_base(hw, BAND_ON_2_4G, rfpath,
-                                         RF_2TX, HT_MCS8_MCS15);
-       phy_conv_dbm_to_rel(&(rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G]
-                           [rfpath][RF_2TX][6]), 0, 3, base);
-
-       phy_conv_dbm_to_rel(&(rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G]
-                           [rfpath][RF_2TX][7]), 0, 3, base);
+       base = _rtl8723be_phy_get_txpower_by_rate_base(hw,
+                       BAND_ON_2_4G, rfpath, RF_1TX, CCK);
+       _phy_convert_txpower_dbm_to_relative_value(
+           &rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G][rfpath][RF_1TX][2],
+           1, 1, base);
+       _phy_convert_txpower_dbm_to_relative_value(
+           &rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G][rfpath][RF_1TX][3],
+           1, 3, base);
+
+       base = _rtl8723be_phy_get_txpower_by_rate_base(hw, BAND_ON_2_4G, rfpath,
+                                                      RF_1TX, OFDM);
+       _phy_convert_txpower_dbm_to_relative_value(
+           &rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G][rfpath][RF_1TX][0],
+           0, 3, base);
+       _phy_convert_txpower_dbm_to_relative_value(
+           &rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G][rfpath][RF_1TX][1],
+           0, 3, base);
+
+       base = _rtl8723be_phy_get_txpower_by_rate_base(hw, BAND_ON_2_4G,
+                                               rfpath, RF_1TX, HT_MCS0_MCS7);
+       _phy_convert_txpower_dbm_to_relative_value(
+           &rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G][rfpath][RF_1TX][4],
+           0, 3, base);
+       _phy_convert_txpower_dbm_to_relative_value(
+           &rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G][rfpath][RF_1TX][5],
+           0, 3, base);
+
+       base = _rtl8723be_phy_get_txpower_by_rate_base(hw, BAND_ON_2_4G,
+                                                      rfpath, RF_2TX,
+                                                      HT_MCS8_MCS15);
+       _phy_convert_txpower_dbm_to_relative_value(
+           &rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G][rfpath][RF_2TX][6],
+           0, 3, base);
+
+       _phy_convert_txpower_dbm_to_relative_value(
+           &rtlphy->tx_power_by_rate_offset[BAND_ON_2_4G][rfpath][RF_2TX][7],
+           0, 3, base);
 
        RT_TRACE(rtlpriv, COMP_POWER, DBG_TRACE,
-                "<=== conv_dbm_to_rel()\n");
+           "<===_rtl8723be_phy_convert_txpower_dbm_to_relative_value()\n");
 }
 
-static void _rtl8723be_phy_txpower_by_rate_configuration(
-                                                       struct ieee80211_hw *hw)
+static void phy_txpower_by_rate_config(struct ieee80211_hw *hw)
 {
        _rtl8723be_phy_store_txpower_by_rate_base(hw);
-       conv_dbm_to_rel(hw);
+       _rtl8723be_phy_convert_txpower_dbm_to_relative_value(hw);
 }
 
 static bool _rtl8723be_phy_bb8723b_config_parafile(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
        bool rtstatus;
 
                rtstatus = _rtl8723be_phy_config_bb_with_pgheaderfile(hw,
                                                BASEBAND_CONFIG_PHY_REG);
        }
-       _rtl8723be_phy_txpower_by_rate_configuration(hw);
+       phy_txpower_by_rate_config(hw);
        if (!rtstatus) {
                RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "BB_PG Reg Fail!!");
                return false;
                RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "AGC Table Fail\n");
                return false;
        }
-       rtlphy->cck_high_power = (bool) (rtl_get_bbreg(hw,
-                                                      RFPGA0_XA_HSSIPARAMETER2,
-                                                      0x200));
+       rtlphy->cck_high_power = (bool)(rtl_get_bbreg(hw,
+                                                     RFPGA0_XA_HSSIPARAMETER2,
+                                                     0x200));
+       return true;
+}
+
+static bool _rtl8723be_phy_config_mac_with_headerfile(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u32 i;
+       u32 arraylength;
+       u32 *ptrarray;
+
+       RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "Read rtl8723beMACPHY_Array\n");
+       arraylength = RTL8723BEMAC_1T_ARRAYLEN;
+       ptrarray = RTL8723BEMAC_1T_ARRAY;
+       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
+                "Img:RTL8723bEMAC_1T_ARRAY LEN %d\n", arraylength);
+       for (i = 0; i < arraylength; i = i + 2)
+               rtl_write_byte(rtlpriv, ptrarray[i], (u8)ptrarray[i + 1]);
+       return true;
+}
+
+static bool _rtl8723be_phy_config_bb_with_headerfile(struct ieee80211_hw *hw,
+                                                    u8 configtype)
+{
+       #define READ_NEXT_PAIR(v1, v2, i) \
+               do { \
+                       i += 2; \
+                       v1 = array_table[i];\
+                       v2 = array_table[i+1]; \
+               } while (0)
+
+       int i;
+       u32 *array_table;
+       u16 arraylen;
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       u32 v1 = 0, v2 = 0;
+
+       if (configtype == BASEBAND_CONFIG_PHY_REG) {
+               arraylen = RTL8723BEPHY_REG_1TARRAYLEN;
+               array_table = RTL8723BEPHY_REG_1TARRAY;
+
+               for (i = 0; i < arraylen; i = i + 2) {
+                       v1 = array_table[i];
+                       v2 = array_table[i+1];
+                       if (v1 < 0xcdcdcdcd) {
+                               _rtl8723be_config_bb_reg(hw, v1, v2);
+                       } else {/*This line is the start line of branch.*/
+                               /* to protect READ_NEXT_PAIR not overrun */
+                               if (i >= arraylen - 2)
+                                       break;
+
+                               if (!_rtl8723be_check_condition(hw,
+                                               array_table[i])) {
+                                       /*Discard the following
+                                        *(offset, data) pairs
+                                        */
+                                       READ_NEXT_PAIR(v1, v2, i);
+                                       while (v2 != 0xDEAD &&
+                                              v2 != 0xCDEF &&
+                                              v2 != 0xCDCD &&
+                                              i < arraylen - 2) {
+                                               READ_NEXT_PAIR(v1, v2, i);
+                                       }
+                                       i -= 2; /* prevent from for-loop += 2*/
+                               /*Configure matched pairs and
+                                *skip to end of if-else.
+                                */
+                               } else {
+                                       READ_NEXT_PAIR(v1, v2, i);
+                                       while (v2 != 0xDEAD &&
+                                              v2 != 0xCDEF &&
+                                              v2 != 0xCDCD &&
+                                              i < arraylen - 2) {
+                                               _rtl8723be_config_bb_reg(hw,
+                                                                   v1, v2);
+                                               READ_NEXT_PAIR(v1, v2, i);
+                                       }
+
+                                       while (v2 != 0xDEAD && i < arraylen - 2)
+                                               READ_NEXT_PAIR(v1, v2, i);
+                               }
+                       }
+               }
+       } else if (configtype == BASEBAND_CONFIG_AGC_TAB) {
+               arraylen = RTL8723BEAGCTAB_1TARRAYLEN;
+               array_table = RTL8723BEAGCTAB_1TARRAY;
+
+               for (i = 0; i < arraylen; i = i + 2) {
+                       v1 = array_table[i];
+                       v2 = array_table[i+1];
+                       if (v1 < 0xCDCDCDCD) {
+                               rtl_set_bbreg(hw, array_table[i],
+                                             MASKDWORD,
+                                             array_table[i + 1]);
+                               udelay(1);
+                               continue;
+                       } else {/*This line is the start line of branch.*/
+                               /* to protect READ_NEXT_PAIR not overrun */
+                               if (i >= arraylen - 2)
+                                       break;
+
+                               if (!_rtl8723be_check_condition(hw,
+                                       array_table[i])) {
+                                       /*Discard the following
+                                        *(offset, data) pairs
+                                        */
+                                       READ_NEXT_PAIR(v1, v2, i);
+                                       while (v2 != 0xDEAD &&
+                                              v2 != 0xCDEF &&
+                                              v2 != 0xCDCD &&
+                                              i < arraylen - 2) {
+                                               READ_NEXT_PAIR(v1, v2, i);
+                                       }
+                                       i -= 2; /* prevent from for-loop += 2*/
+                               /*Configure matched pairs and
+                                *skip to end of if-else.
+                                */
+                               } else {
+                                       READ_NEXT_PAIR(v1, v2, i);
+                                       while (v2 != 0xDEAD &&
+                                              v2 != 0xCDEF &&
+                                              v2 != 0xCDCD &&
+                                              i < arraylen - 2) {
+                                               rtl_set_bbreg(hw, array_table[i],
+                                                             MASKDWORD,
+                                                             array_table[i + 1]);
+                                               udelay(1);
+                                               READ_NEXT_PAIR(v1, v2, i);
+                                       }
+
+                                       while (v2 != 0xDEAD && i < arraylen - 2)
+                                               READ_NEXT_PAIR(v1, v2, i);
+                               }
+                       }
+                       RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
+                                "The agctab_array_table[0] is %x Rtl818EEPHY_REGArray[1] is %x\n",
+                                array_table[i], array_table[i + 1]);
+               }
+       }
        return true;
 }
 
+static u8 _rtl8723be_get_rate_section_index(u32 regaddr)
+{
+       u8 index = 0;
+
+       switch (regaddr) {
+       case RTXAGC_A_RATE18_06:
+               index = 0;
+       break;
+       case RTXAGC_A_RATE54_24:
+               index = 1;
+       break;
+       case RTXAGC_A_CCK1_MCS32:
+               index = 2;
+       break;
+       case RTXAGC_B_CCK11_A_CCK2_11:
+               index = 3;
+       break;
+       case RTXAGC_A_MCS03_MCS00:
+               index = 4;
+       break;
+       case RTXAGC_A_MCS07_MCS04:
+               index = 5;
+       break;
+       case RTXAGC_A_MCS11_MCS08:
+               index = 6;
+       break;
+       case RTXAGC_A_MCS15_MCS12:
+               index = 7;
+       break;
+       case RTXAGC_B_RATE18_06:
+               index = 0;
+       break;
+       case RTXAGC_B_RATE54_24:
+               index = 1;
+       break;
+       case RTXAGC_B_CCK1_55_MCS32:
+               index = 2;
+       break;
+       case RTXAGC_B_MCS03_MCS00:
+               index = 4;
+       break;
+       case RTXAGC_B_MCS07_MCS04:
+               index = 5;
+       break;
+       case RTXAGC_B_MCS11_MCS08:
+               index = 6;
+       break;
+       case RTXAGC_B_MCS15_MCS12:
+               index = 7;
+       break;
+       default:
+               regaddr &= 0xFFF;
+               if (regaddr >= 0xC20 && regaddr <= 0xC4C)
+                       index = (u8)((regaddr - 0xC20) / 4);
+               else if (regaddr >= 0xE20 && regaddr <= 0xE4C)
+                       index = (u8)((regaddr - 0xE20) / 4);
+               break;
+       };
+       return index;
+}
+
 static void _rtl8723be_store_tx_power_by_rate(struct ieee80211_hw *hw,
                                              u32 band, u32 rfpath,
                                              u32 txnum, u32 regaddr,
                                              u32 bitmask, u32 data)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        u8 rate_section = _rtl8723be_get_rate_section_index(regaddr);
 
        if (band != BAND_ON_2_4G && band != BAND_ON_5G) {
-               RT_TRACE(rtlpriv, COMP_POWER, PHY_TXPWR,
-                        "Invalid Band %d\n", band);
+               RT_TRACE(rtlpriv, FPHY, PHY_TXPWR, "Invalid Band %d\n", band);
                return;
        }
-
-       if (rfpath > TX_PWR_BY_RATE_NUM_RF) {
-               RT_TRACE(rtlpriv, COMP_POWER, PHY_TXPWR,
+       if (rfpath > MAX_RF_PATH - 1) {
+               RT_TRACE(rtlpriv, FPHY, PHY_TXPWR,
                         "Invalid RfPath %d\n", rfpath);
                return;
        }
-       if (txnum > TX_PWR_BY_RATE_NUM_RF) {
-               RT_TRACE(rtlpriv, COMP_POWER, PHY_TXPWR,
-                        "Invalid TxNum %d\n", txnum);
+       if (txnum > MAX_RF_PATH - 1) {
+               RT_TRACE(rtlpriv, FPHY, PHY_TXPWR, "Invalid TxNum %d\n", txnum);
                return;
        }
+
        rtlphy->tx_power_by_rate_offset[band][rfpath][txnum][rate_section] =
                                                                        data;
+
 }
 
 static bool _rtl8723be_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw,
                                        _rtl8723be_store_tx_power_by_rate(hw,
                                                        v1, v2, v3, v4, v5, v6);
                                continue;
-                       } else {
-                               /*don't need the hw_body*/
-                               if (!_rtl8723be_check_condition(hw,
-                                               phy_regarray_table_pg[i])) {
-                                       i += 2; /* skip the pair of expression*/
-                                       v1 = phy_regarray_table_pg[i];
-                                       v2 = phy_regarray_table_pg[i+1];
-                                       v3 = phy_regarray_table_pg[i+2];
-                                       while (v2 != 0xDEAD) {
-                                               i += 3;
-                                               v1 = phy_regarray_table_pg[i];
-                                               v2 = phy_regarray_table_pg[i+1];
-                                               v3 = phy_regarray_table_pg[i+2];
-                                       }
-                               }
                        }
                }
        } else {
                        v2 = radioa_array_table[i+1];
                        if (v1 < 0xcdcdcdcd) {
                                _rtl8723be_config_rf_radio_a(hw, v1, v2);
-                       } else { /*This line is the start line of branch.*/
+                       } else {/*This line is the start line of branch.*/
+                               /* to protect READ_NEXT_PAIR not overrun */
+                               if (i >= radioa_arraylen - 2)
+                                       break;
+
                                if (!_rtl8723be_check_condition(hw,
                                                radioa_array_table[i])) {
-                                       /* Discard the following
-                                        * (offset, data) pairs
+                                       /*Discard the following
+                                        *(offset, data) pairs
                                         */
                                        READ_NEXT_RF_PAIR(v1, v2, i);
                                        while (v2 != 0xDEAD &&
                                               v2 != 0xCDEF &&
                                               v2 != 0xCDCD &&
-                                              i < radioa_arraylen - 2)
+                                              i < radioa_arraylen - 2) {
                                                READ_NEXT_RF_PAIR(v1, v2, i);
+                                       }
                                        i -= 2; /* prevent from for-loop += 2*/
                                } else {
-                                       /* Configure matched pairs
-                                        * and skip to end of if-else.
+                                       /*Configure matched pairs
+                                        *and skip to end of if-else.
                                         */
                                        READ_NEXT_RF_PAIR(v1, v2, i);
                                        while (v2 != 0xDEAD &&
 
                if (rtlhal->oem_id == RT_CID_819X_HP)
                        _rtl8723be_config_rf_radio_a(hw, 0x52, 0x7E4BD);
-
                break;
        case RF90_PATH_B:
-               RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
-                        "switch case not process\n");
-               break;
        case RF90_PATH_C:
-               RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
-                        "switch case not process\n");
                break;
        case RF90_PATH_D:
-               RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
+               RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
                         "switch case not process\n");
                break;
        }
 void rtl8723be_phy_get_hw_reg_originalvalue(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
 
        rtlphy->default_initialgain[0] =
-           (u8) rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, MASKBYTE0);
+           (u8)rtl_get_bbreg(hw, ROFDM0_XAAGCCORE1, MASKBYTE0);
        rtlphy->default_initialgain[1] =
-           (u8) rtl_get_bbreg(hw, ROFDM0_XBAGCCORE1, MASKBYTE0);
+           (u8)rtl_get_bbreg(hw, ROFDM0_XBAGCCORE1, MASKBYTE0);
        rtlphy->default_initialgain[2] =
-           (u8) rtl_get_bbreg(hw, ROFDM0_XCAGCCORE1, MASKBYTE0);
+           (u8)rtl_get_bbreg(hw, ROFDM0_XCAGCCORE1, MASKBYTE0);
        rtlphy->default_initialgain[3] =
-           (u8) rtl_get_bbreg(hw, ROFDM0_XDAGCCORE1, MASKBYTE0);
+           (u8)rtl_get_bbreg(hw, ROFDM0_XDAGCCORE1, MASKBYTE0);
 
        RT_TRACE(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,
+                "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);
 void rtl8723be_phy_get_txpower_level(struct ieee80211_hw *hw, long *powerlevel)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        u8 txpwr_level;
        long txpwr_dbm;
 
        case DESC92C_RATE1M:
                rate_section = 2;
                break;
+
        case DESC92C_RATE2M:
        case DESC92C_RATE5_5M:
                if (path == RF90_PATH_A)
                else if (path == RF90_PATH_B)
                        rate_section = 2;
                break;
+
        case DESC92C_RATE11M:
                rate_section = 3;
                break;
+
        case DESC92C_RATE6M:
        case DESC92C_RATE9M:
        case DESC92C_RATE12M:
        case DESC92C_RATE18M:
                rate_section = 0;
                break;
+
        case DESC92C_RATE24M:
        case DESC92C_RATE36M:
        case DESC92C_RATE48M:
        case DESC92C_RATE54M:
                rate_section = 1;
                break;
+
        case DESC92C_RATEMCS0:
        case DESC92C_RATEMCS1:
        case DESC92C_RATEMCS2:
        case DESC92C_RATEMCS3:
                rate_section = 4;
                break;
+
        case DESC92C_RATEMCS4:
        case DESC92C_RATEMCS5:
        case DESC92C_RATEMCS6:
        case DESC92C_RATEMCS7:
                rate_section = 5;
                break;
+
        case DESC92C_RATEMCS8:
        case DESC92C_RATEMCS9:
        case DESC92C_RATEMCS10:
        case DESC92C_RATEMCS11:
                rate_section = 6;
                break;
+
        case DESC92C_RATEMCS12:
        case DESC92C_RATEMCS13:
        case DESC92C_RATEMCS14:
        case DESC92C_RATEMCS15:
                rate_section = 7;
                break;
+
        default:
                RT_ASSERT(true, "Rate_Section is Illegal\n");
                break;
        }
+
        return rate_section;
 }
 
                                         enum radio_path rfpath, u8 rate)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        u8 shift = 0, rate_section, tx_num;
        char tx_pwr_diff = 0;
 
                RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
                         "Illegal channel!\n");
        }
-       if (RTL8723E_RX_HAL_IS_CCK_RATE(rate))
+       if (RX_HAL_IS_CCK_RATE(rate))
                txpower = rtlefuse->txpwrlevel_cck[path][index];
        else if (DESC92C_RATE6M <= rate)
                txpower = rtlefuse->txpwrlevel_ht40_1s[path][index];
                         "invalid rate\n");
 
        if (DESC92C_RATE6M <= rate && rate <= DESC92C_RATE54M &&
-           !RTL8723E_RX_HAL_IS_CCK_RATE(rate))
+           !RX_HAL_IS_CCK_RATE(rate))
                txpower += rtlefuse->txpwr_legacyhtdiff[0][TX_1S];
 
        if (bandwidth == HT_CHANNEL_WIDTH_20) {
                if (DESC92C_RATEMCS8 <= rate && rate <= DESC92C_RATEMCS15)
                        txpower += rtlefuse->txpwr_ht40diff[0][TX_2S];
        }
+
        if (rtlefuse->eeprom_regulatory != 2)
                power_diff_byrate = _rtl8723be_get_txpower_by_rate(hw,
                                                                   BAND_ON_2_4G,
                        rtl8723_phy_set_bb_reg(hw, RTXAGC_B_CCK11_A_CCK2_11,
                                               MASKBYTE3, power_index);
                        break;
+
                case DESC92C_RATE6M:
                        rtl8723_phy_set_bb_reg(hw, RTXAGC_A_RATE18_06,
                                               MASKBYTE0, power_index);
                        rtl8723_phy_set_bb_reg(hw, RTXAGC_A_RATE18_06,
                                               MASKBYTE3, power_index);
                        break;
+
                case DESC92C_RATE24M:
                        rtl8723_phy_set_bb_reg(hw, RTXAGC_A_RATE54_24,
                                               MASKBYTE0, power_index);
                        rtl8723_phy_set_bb_reg(hw, RTXAGC_A_RATE54_24,
                                               MASKBYTE3, power_index);
                        break;
+
                case DESC92C_RATEMCS0:
                        rtl8723_phy_set_bb_reg(hw, RTXAGC_A_MCS03_MCS00,
                                               MASKBYTE0, power_index);
                        rtl8723_phy_set_bb_reg(hw, RTXAGC_A_MCS03_MCS00,
                                               MASKBYTE3, power_index);
                        break;
+
                case DESC92C_RATEMCS4:
                        rtl8723_phy_set_bb_reg(hw, RTXAGC_A_MCS07_MCS04,
                                               MASKBYTE0, power_index);
                        rtl8723_phy_set_bb_reg(hw, RTXAGC_A_MCS07_MCS04,
                                               MASKBYTE3, power_index);
                        break;
+
                case DESC92C_RATEMCS8:
                        rtl8723_phy_set_bb_reg(hw, RTXAGC_A_MCS11_MCS08,
                                               MASKBYTE0, power_index);
                        rtl8723_phy_set_bb_reg(hw, RTXAGC_A_MCS11_MCS08,
                                               MASKBYTE3, power_index);
                        break;
+
                default:
-                       RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
-                                "Invalid Rate!!\n");
+                       RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, "Invalid Rate!!\n");
                        break;
                }
        } else {
 
        if (!is_hal_stop(rtlhal)) {
                switch (operation) {
-               case SCAN_OPT_BACKUP:
-                       iotype = IO_CMD_PAUSE_DM_BY_SCAN;
+               case SCAN_OPT_BACKUP_BAND0:
+                       iotype = IO_CMD_PAUSE_BAND0_DM_BY_SCAN;
                        rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_IO_CMD,
                                                      (u8 *)&iotype);
+
                        break;
                case SCAN_OPT_RESTORE:
                        iotype = IO_CMD_RESUME_DM_BY_SCAN;
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
        u8 reg_bw_opmode;
        u8 reg_prsr_rsc;
 
        RT_TRACE(rtlpriv, COMP_SCAN, DBG_TRACE,
                 "Switch to %s bandwidth\n",
-                rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20 ?
-                "20MHz" : "40MHz");
+                 rtlphy->current_chan_bw == HT_CHANNEL_WIDTH_20 ?
+                 "20MHz" : "40MHz");
 
        if (is_hal_stop(rtlhal)) {
                rtlphy->set_bwmode_inprogress = false;
        case HT_CHANNEL_WIDTH_20:
                rtl_set_bbreg(hw, RFPGA0_RFMOD, BRFMOD, 0x0);
                rtl_set_bbreg(hw, RFPGA1_RFMOD, BRFMOD, 0x0);
+       /*      rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER2, BIT(10), 1);*/
                break;
        case HT_CHANNEL_WIDTH_20_40:
                rtl_set_bbreg(hw, RFPGA0_RFMOD, BRFMOD, 0x1);
                rtl_set_bbreg(hw, RFPGA1_RFMOD, BRFMOD, 0x1);
+
                rtl_set_bbreg(hw, RCCK0_SYSTEM, BCCK_SIDEBAND,
                              (mac->cur_40_prime_sc >> 1));
                rtl_set_bbreg(hw, ROFDM1_LSTF, 0xC00, mac->cur_40_prime_sc);
+               /*rtl_set_bbreg(hw, RFPGA0_ANALOGPARAMETER2, BIT(10), 0);*/
+
                rtl_set_bbreg(hw, 0x818, (BIT(26) | BIT(27)),
                              (mac->cur_40_prime_sc ==
                               HAL_PRIME_CHNL_OFFSET_LOWER) ? 2 : 1);
                            enum nl80211_channel_type ch_type)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
        u8 tmp_bw = rtlphy->current_chan_bw;
 
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        u32 delay;
 
        RT_TRACE(rtlpriv, COMP_SCAN, DBG_TRACE,
        do {
                if (!rtlphy->sw_chnl_inprogress)
                        break;
-               if (!rtl8723be_phy_sw_chn_step_by_step(hw,
-                                                      rtlphy->current_channel,
-                                                      &rtlphy->sw_chnl_stage,
-                                                      &rtlphy->sw_chnl_step,
-                                                      &delay)) {
+               if (!_rtl8723be_phy_sw_chnl_step_by_step(hw,
+                                                        rtlphy->current_channel,
+                                                        &rtlphy->sw_chnl_stage,
+                                                        &rtlphy->sw_chnl_step,
+                                                        &delay)) {
                        if (delay > 0)
                                mdelay(delay);
                        else
 u8 rtl8723be_phy_sw_chnl(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
 
        if (rtlphy->sw_chnl_inprogress)
        if (!(is_hal_stop(rtlhal)) && !(RT_CANNOT_IO(hw))) {
                rtl8723be_phy_sw_chnl_callback(hw);
                RT_TRACE(rtlpriv, COMP_CHAN, DBG_LOUD,
-                        "sw_chnl_inprogress false schdule "
-                         "workitem current channel %d\n",
-                         rtlphy->current_channel);
+                        "sw_chnl_inprogress false schdule workitem current channel %d\n",
+                        rtlphy->current_channel);
                rtlphy->sw_chnl_inprogress = false;
        } else {
                RT_TRACE(rtlpriv, COMP_CHAN, DBG_LOUD,
-                        "sw_chnl_inprogress false driver sleep or"
-                         " unload\n");
+                        "sw_chnl_inprogress false driver sleep or unload\n");
                rtlphy->sw_chnl_inprogress = false;
        }
        return 1;
 }
 
-static bool rtl8723be_phy_sw_chn_step_by_step(struct ieee80211_hw *hw,
-                                             u8 channel, u8 *stage,
-                                             u8 *step, u32 *delay)
+static bool _rtl8723be_phy_sw_chnl_step_by_step(struct ieee80211_hw *hw,
+                                               u8 channel, u8 *stage,
+                                               u8 *step, u32 *delay)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        struct swchnlcmd precommoncmd[MAX_PRECMD_CNT];
        u32 precommoncmdcnt;
        struct swchnlcmd postcommoncmd[MAX_POSTCMD_CNT];
                                         0, 0, 0);
        rtl8723_phy_set_sw_chnl_cmdarray(precommoncmd, precommoncmdcnt++,
                                         MAX_PRECMD_CNT, CMDID_END, 0, 0, 0);
+
        postcommoncmdcnt = 0;
+
        rtl8723_phy_set_sw_chnl_cmdarray(postcommoncmd, postcommoncmdcnt++,
                                         MAX_POSTCMD_CNT, CMDID_END,
-                                        0, 0, 0);
+                                           0, 0, 0);
+
        rfdependcmdcnt = 0;
 
        RT_ASSERT((channel >= 1 && channel <= 14),
 
        rtl8723_phy_set_sw_chnl_cmdarray(rfdependcmd, rfdependcmdcnt++,
                                         MAX_RFDEPENDCMD_CNT,
-                                        CMDID_END, 0, 0, 0);
+                                           CMDID_END, 0, 0, 0);
 
        do {
                switch (*stage) {
                case 2:
                        currentcmd = &postcommoncmd[*step];
                        break;
+               default:
+                       RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
+                                "Invalid 'stage' = %d, Check it!\n", *stage);
+                       return true;
                }
 
                if (currentcmd->cmdid == CMDID_END) {
                        break;
                case CMDID_WRITEPORT_USHORT:
                        rtl_write_word(rtlpriv, currentcmd->para1,
-                                      (u16) currentcmd->para2);
+                                      (u16)currentcmd->para2);
                        break;
                case CMDID_WRITEPORT_UCHAR:
                        rtl_write_byte(rtlpriv, currentcmd->para1,
-                                      (u8) currentcmd->para2);
+                                      (u8)currentcmd->para2);
                        break;
                case CMDID_RF_WRITEREG:
                        for (rfpath = 0; rfpath < num_total_rfpath; rfpath++) {
                        }
                        break;
                default:
-                       RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
+                       RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
                                 "switch case not process\n");
                        break;
                }
        return false;
 }
 
-static u8 _rtl8723be_phy_path_a_iqk(struct ieee80211_hw *hw, bool config_pathb)
+static u8 _rtl8723be_phy_path_a_iqk(struct ieee80211_hw *hw)
 {
-       u32 reg_eac, reg_e94, reg_e9c, reg_ea4;
+       u32 reg_eac, reg_e94, reg_e9c, tmp;
        u8 result = 0x00;
 
-       rtl_set_bbreg(hw, 0xe30, MASKDWORD, 0x10008c1c);
-       rtl_set_bbreg(hw, 0xe34, MASKDWORD, 0x30008c1c);
-       rtl_set_bbreg(hw, 0xe38, MASKDWORD, 0x8214032a);
-       rtl_set_bbreg(hw, 0xe3c, MASKDWORD, 0x28160000);
-
-       rtl_set_bbreg(hw, 0xe4c, MASKDWORD, 0x00462911);
-       rtl_set_bbreg(hw, 0xe48, MASKDWORD, 0xf9000000);
-       rtl_set_bbreg(hw, 0xe48, MASKDWORD, 0xf8000000);
+       /* leave IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+       /* switch to path A */
+       rtl_set_bbreg(hw, 0x948, MASKDWORD, 0x00000000);
+       /* enable path A PA in TXIQK mode */
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_WE_LUT, RFREG_OFFSET_MASK, 0x800a0);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_RCK_OS, RFREG_OFFSET_MASK, 0x20000);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G1, RFREG_OFFSET_MASK, 0x0003f);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G2, RFREG_OFFSET_MASK, 0xc7f87);
+
+       /* 1. TX IQK */
+       /* path-A IQK setting */
+       /* IQK setting */
+       rtl_set_bbreg(hw, RTX_IQK, MASKDWORD, 0x01007c00);
+       rtl_set_bbreg(hw, RRX_IQK, MASKDWORD, 0x01004800);
+       /* path-A IQK setting */
+       rtl_set_bbreg(hw, RTX_IQK_TONE_A, MASKDWORD, 0x18008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_A, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RTX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+
+       rtl_set_bbreg(hw, RTX_IQK_PI_A, MASKDWORD, 0x821403ea);
+       rtl_set_bbreg(hw, RRX_IQK_PI_A, MASKDWORD, 0x28160000);
+       rtl_set_bbreg(hw, RTX_IQK_PI_B, MASKDWORD, 0x82110000);
+       rtl_set_bbreg(hw, RRX_IQK_PI_B, MASKDWORD, 0x28110000);
+       /* LO calibration setting */
+       rtl_set_bbreg(hw, RIQK_AGC_RSP, MASKDWORD, 0x00462911);
+       /* enter IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x80800000);
+
+       /* One shot, path A LOK & IQK */
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf9000000);
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf8000000);
 
        mdelay(IQK_DELAY_TIME);
 
+       /* leave IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+
+       /* Check failed */
        reg_eac = rtl_get_bbreg(hw, 0xeac, MASKDWORD);
        reg_e94 = rtl_get_bbreg(hw, 0xe94, MASKDWORD);
        reg_e9c = rtl_get_bbreg(hw, 0xe9c, MASKDWORD);
-       reg_ea4 = rtl_get_bbreg(hw, 0xea4, MASKDWORD);
 
        if (!(reg_eac & BIT(28)) &&
            (((reg_e94 & 0x03FF0000) >> 16) != 0x142) &&
            (((reg_e9c & 0x03FF0000) >> 16) != 0x42))
                result |= 0x01;
+       else /* if Tx not OK, ignore Rx */
+               return result;
+
+       /* Allen 20131125 */
+       tmp = (reg_e9c & 0x03FF0000) >> 16;
+       if ((tmp & 0x200) > 0)
+               tmp = 0x400 - tmp;
+
+       if (!(reg_eac & BIT(28)) &&
+           (((reg_e94 & 0x03FF0000) >> 16) < 0x110) &&
+           (((reg_e94 & 0x03FF0000) >> 16) > 0xf0) &&
+           (tmp < 0xf))
+               result |= 0x01;
+       else /* if Tx not OK, ignore Rx */
+               return result;
+
        return result;
 }
 
-static bool phy_similarity_cmp(struct ieee80211_hw *hw, long result[][8],
-                              u8 c1, u8 c2)
+/* bit0 = 1 => Tx OK, bit1 = 1 => Rx OK */
+static u8 _rtl8723be_phy_path_a_rx_iqk(struct ieee80211_hw *hw)
 {
-       u32 i, j, diff, simularity_bitmap, bound;
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
+       u32 reg_eac, reg_e94, reg_e9c, reg_ea4, u32tmp, tmp;
+       u8 result = 0x00;
+
+       /* leave IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+
+       /* switch to path A */
+       rtl_set_bbreg(hw, 0x948, MASKDWORD, 0x00000000);
+
+       /* 1 Get TXIMR setting */
+       /* modify RXIQK mode table */
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_WE_LUT, 0x80000, 0x1);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_RCK_OS, RFREG_OFFSET_MASK, 0x30000);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G1, RFREG_OFFSET_MASK, 0x0001f);
+       /* LNA2 off, PA on for Dcut */
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G2, RFREG_OFFSET_MASK, 0xf7fb7);
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x80800000);
+
+       /* IQK setting */
+       rtl_set_bbreg(hw, RTX_IQK, MASKDWORD, 0x01007c00);
+       rtl_set_bbreg(hw, RRX_IQK, MASKDWORD, 0x01004800);
+
+       /* path-A IQK setting */
+       rtl_set_bbreg(hw, RTX_IQK_TONE_A, MASKDWORD, 0x18008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_A, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RTX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+
+       rtl_set_bbreg(hw, RTX_IQK_PI_A, MASKDWORD, 0x82160ff0);
+       rtl_set_bbreg(hw, RRX_IQK_PI_A, MASKDWORD, 0x28110000);
+       rtl_set_bbreg(hw, RTX_IQK_PI_B, MASKDWORD, 0x82110000);
+       rtl_set_bbreg(hw, RRX_IQK_PI_B, MASKDWORD, 0x28110000);
+
+       /* LO calibration setting */
+       rtl_set_bbreg(hw, RIQK_AGC_RSP, MASKDWORD, 0x0046a911);
+
+       /* enter IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x80800000);
+
+       /* One shot, path A LOK & IQK */
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf9000000);
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf8000000);
+
+       mdelay(IQK_DELAY_TIME);
+
+       /* leave IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+
+       /* Check failed */
+       reg_eac = rtl_get_bbreg(hw, RRX_POWER_AFTER_IQK_A_2, MASKDWORD);
+       reg_e94 = rtl_get_bbreg(hw, RTX_POWER_BEFORE_IQK_A, MASKDWORD);
+       reg_e9c = rtl_get_bbreg(hw, RTX_POWER_AFTER_IQK_A, MASKDWORD);
+
+       if (!(reg_eac & BIT(28)) &&
+           (((reg_e94 & 0x03FF0000) >> 16) != 0x142) &&
+           (((reg_e9c & 0x03FF0000) >> 16) != 0x42))
+               result |= 0x01;
+       else /* if Tx not OK, ignore Rx */
+               return result;
+
+       /* Allen 20131125 */
+       tmp = (reg_e9c & 0x03FF0000) >> 16;
+       if ((tmp & 0x200) > 0)
+               tmp = 0x400 - tmp;
+
+       if (!(reg_eac & BIT(28)) &&
+           (((reg_e94 & 0x03FF0000) >> 16) < 0x110) &&
+           (((reg_e94 & 0x03FF0000) >> 16) > 0xf0) &&
+           (tmp < 0xf))
+               result |= 0x01;
+       else /* if Tx not OK, ignore Rx */
+               return result;
+
+       u32tmp = 0x80007C00 | (reg_e94 & 0x3FF0000) |
+                ((reg_e9c & 0x3FF0000) >> 16);
+       rtl_set_bbreg(hw, RTX_IQK, MASKDWORD, u32tmp);
+
+       /* 1 RX IQK */
+       /* modify RXIQK mode table */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_WE_LUT, 0x80000, 0x1);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_RCK_OS, RFREG_OFFSET_MASK, 0x30000);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G1, RFREG_OFFSET_MASK, 0x0001f);
+       /* LAN2 on, PA off for Dcut */
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G2, RFREG_OFFSET_MASK, 0xf7d77);
+
+       /* PA, PAD setting */
+       rtl_set_rfreg(hw, RF90_PATH_A, 0xdf, RFREG_OFFSET_MASK, 0xf80);
+       rtl_set_rfreg(hw, RF90_PATH_A, 0x55, RFREG_OFFSET_MASK, 0x4021f);
+
+       /* IQK setting */
+       rtl_set_bbreg(hw, RRX_IQK, MASKDWORD, 0x01004800);
+
+       /* path-A IQK setting */
+       rtl_set_bbreg(hw, RTX_IQK_TONE_A, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_A, MASKDWORD, 0x18008c1c);
+       rtl_set_bbreg(hw, RTX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+
+       rtl_set_bbreg(hw, RTX_IQK_PI_A, MASKDWORD, 0x82110000);
+       rtl_set_bbreg(hw, RRX_IQK_PI_A, MASKDWORD, 0x2816001f);
+       rtl_set_bbreg(hw, RTX_IQK_PI_B, MASKDWORD, 0x82110000);
+       rtl_set_bbreg(hw, RRX_IQK_PI_B, MASKDWORD, 0x28110000);
+
+       /* LO calibration setting */
+       rtl_set_bbreg(hw, RIQK_AGC_RSP, MASKDWORD, 0x0046a8d1);
+
+       /* enter IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x80800000);
+
+       /* One shot, path A LOK & IQK */
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf9000000);
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf8000000);
+
+       mdelay(IQK_DELAY_TIME);
+
+       /* leave IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+
+       /* Check failed */
+       reg_eac = rtl_get_bbreg(hw, RRX_POWER_AFTER_IQK_A_2, MASKDWORD);
+       reg_ea4 = rtl_get_bbreg(hw, RRX_POWER_BEFORE_IQK_A_2, MASKDWORD);
+
+       /* leave IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+       rtl_set_rfreg(hw, RF90_PATH_A, 0xdf, RFREG_OFFSET_MASK, 0x780);
+
+       /* Allen 20131125 */
+       tmp = (reg_eac & 0x03FF0000) >> 16;
+               if ((tmp & 0x200) > 0)
+                       tmp = 0x400 - tmp;
+       /* if Tx is OK, check whether Rx is OK */
+       if (!(reg_eac & BIT(27)) &&
+           (((reg_ea4 & 0x03FF0000) >> 16) != 0x132) &&
+           (((reg_eac & 0x03FF0000) >> 16) != 0x36))
+               result |= 0x02;
+       else if (!(reg_eac & BIT(27)) &&
+                (((reg_ea4 & 0x03FF0000) >> 16) < 0x110) &&
+                (((reg_ea4 & 0x03FF0000) >> 16) > 0xf0) &&
+                (tmp < 0xf))
+               result |= 0x02;
+
+       return result;
+}
+
+static u8 _rtl8723be_phy_path_b_iqk(struct ieee80211_hw *hw)
+{
+       u32 reg_eac, reg_e94, reg_e9c, tmp;
+       u8 result = 0x00;
+
+       /* leave IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+       /* switch to path B */
+       rtl_set_bbreg(hw, 0x948, MASKDWORD, 0x00000280);
+
+       /* enable path B PA in TXIQK mode */
+       rtl_set_rfreg(hw, RF90_PATH_A, 0xed, RFREG_OFFSET_MASK, 0x00020);
+       rtl_set_rfreg(hw, RF90_PATH_A, 0x43, RFREG_OFFSET_MASK, 0x40fc1);
+
+       /* 1 Tx IQK */
+       /* IQK setting */
+       rtl_set_bbreg(hw, RTX_IQK, MASKDWORD, 0x01007c00);
+       rtl_set_bbreg(hw, RRX_IQK, MASKDWORD, 0x01004800);
+       /* path-A IQK setting */
+       rtl_set_bbreg(hw, RTX_IQK_TONE_A, MASKDWORD, 0x18008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_A, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RTX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+
+       rtl_set_bbreg(hw, RTX_IQK_PI_A, MASKDWORD, 0x821403ea);
+       rtl_set_bbreg(hw, RRX_IQK_PI_A, MASKDWORD, 0x28110000);
+       rtl_set_bbreg(hw, RTX_IQK_PI_B, MASKDWORD, 0x82110000);
+       rtl_set_bbreg(hw, RRX_IQK_PI_B, MASKDWORD, 0x28110000);
+
+       /* LO calibration setting */
+       rtl_set_bbreg(hw, RIQK_AGC_RSP, MASKDWORD, 0x00462911);
+
+       /* enter IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x80800000);
+
+       /* One shot, path B LOK & IQK */
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf9000000);
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf8000000);
+
+       mdelay(IQK_DELAY_TIME);
+
+       /* leave IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+
+       /* Check failed */
+       reg_eac = rtl_get_bbreg(hw, RRX_POWER_AFTER_IQK_A_2, MASKDWORD);
+       reg_e94 = rtl_get_bbreg(hw, RTX_POWER_BEFORE_IQK_A, MASKDWORD);
+       reg_e9c = rtl_get_bbreg(hw, RTX_POWER_AFTER_IQK_A, MASKDWORD);
+
+       if (!(reg_eac & BIT(28)) &&
+           (((reg_e94 & 0x03FF0000) >> 16) != 0x142) &&
+           (((reg_e9c & 0x03FF0000) >> 16) != 0x42))
+               result |= 0x01;
+       else
+               return result;
+
+       /* Allen 20131125 */
+       tmp = (reg_e9c & 0x03FF0000) >> 16;
+       if ((tmp & 0x200) > 0)
+               tmp = 0x400 - tmp;
 
-       u8 final_candidate[2] = { 0xFF, 0xFF };
-       bool bresult = true, is2t = IS_92C_SERIAL(rtlhal->version);
+       if (!(reg_eac & BIT(28)) &&
+           (((reg_e94 & 0x03FF0000) >> 16) < 0x110) &&
+           (((reg_e94 & 0x03FF0000) >> 16) > 0xf0) &&
+           (tmp < 0xf))
+               result |= 0x01;
+       else
+               return result;
+
+       return result;
+}
+
+/* bit0 = 1 => Tx OK, bit1 = 1 => Rx OK */
+static u8 _rtl8723be_phy_path_b_rx_iqk(struct ieee80211_hw *hw)
+{
+       u32 reg_e94, reg_e9c, reg_ea4, reg_eac, u32tmp, tmp;
+       u8 result = 0x00;
+
+       /* leave IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+       /* switch to path B */
+       rtl_set_bbreg(hw, 0x948, MASKDWORD, 0x00000280);
+
+       /* 1 Get TXIMR setting */
+       /* modify RXIQK mode table */
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_WE_LUT, RFREG_OFFSET_MASK, 0x800a0);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_RCK_OS, RFREG_OFFSET_MASK, 0x30000);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G1, RFREG_OFFSET_MASK, 0x0001f);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G2, RFREG_OFFSET_MASK, 0xf7ff7);
+
+       /* open PA S1 & SMIXER */
+       rtl_set_rfreg(hw, RF90_PATH_A, 0xed, RFREG_OFFSET_MASK, 0x00020);
+       rtl_set_rfreg(hw, RF90_PATH_A, 0x43, RFREG_OFFSET_MASK, 0x60fed);
+
+       /* IQK setting */
+       rtl_set_bbreg(hw, RTX_IQK, MASKDWORD, 0x01007c00);
+       rtl_set_bbreg(hw, RRX_IQK, MASKDWORD, 0x01004800);
+
+       /* path-B IQK setting */
+       rtl_set_bbreg(hw, RTX_IQK_TONE_A, MASKDWORD, 0x18008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_A, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RTX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+
+       rtl_set_bbreg(hw, RTX_IQK_PI_A, MASKDWORD, 0x82160ff0);
+       rtl_set_bbreg(hw, RRX_IQK_PI_A, MASKDWORD, 0x28110000);
+       rtl_set_bbreg(hw, RTX_IQK_PI_B, MASKDWORD, 0x82110000);
+       rtl_set_bbreg(hw, RRX_IQK_PI_B, MASKDWORD, 0x28110000);
+
+       /* LO calibration setting */
+       rtl_set_bbreg(hw, RIQK_AGC_RSP, MASKDWORD, 0x0046a911);
+       /* enter IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x80800000);
+
+       /* One shot, path B TXIQK @ RXIQK */
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf9000000);
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf8000000);
+
+       mdelay(IQK_DELAY_TIME);
+
+       /* leave IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+       /* Check failed */
+       reg_eac = rtl_get_bbreg(hw, RRX_POWER_AFTER_IQK_A_2, MASKDWORD);
+       reg_e94 = rtl_get_bbreg(hw, RTX_POWER_BEFORE_IQK_A, MASKDWORD);
+       reg_e9c = rtl_get_bbreg(hw, RTX_POWER_AFTER_IQK_A, MASKDWORD);
+
+       if (!(reg_eac & BIT(28)) &&
+           (((reg_e94 & 0x03FF0000) >> 16) != 0x142) &&
+           (((reg_e9c & 0x03FF0000) >> 16) != 0x42))
+               result |= 0x01;
+       else    /* if Tx not OK, ignore Rx */
+               return result;
+
+       /* Allen 20131125 */
+       tmp = (reg_e9c & 0x03FF0000) >> 16;
+       if ((tmp & 0x200) > 0)
+               tmp = 0x400 - tmp;
+
+       if (!(reg_eac & BIT(28)) &&
+           (((reg_e94 & 0x03FF0000) >> 16) < 0x110) &&
+           (((reg_e94 & 0x03FF0000) >> 16) > 0xf0) &&
+           (tmp < 0xf))
+               result |= 0x01;
+       else
+               return result;
+
+       u32tmp = 0x80007C00 | (reg_e94 & 0x3FF0000)  |
+                ((reg_e9c & 0x3FF0000) >> 16);
+       rtl_set_bbreg(hw, RTX_IQK, MASKDWORD, u32tmp);
+
+       /* 1 RX IQK */
+
+       /* <20121009, Kordan> RF Mode = 3 */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_WE_LUT, 0x80000, 0x1);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_RCK_OS, RFREG_OFFSET_MASK, 0x30000);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G1, RFREG_OFFSET_MASK, 0x0001f);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_TXPA_G2, RFREG_OFFSET_MASK, 0xf7d77);
+       rtl_set_rfreg(hw, RF90_PATH_A, RF_WE_LUT, 0x80000, 0x0);
+
+       /* open PA S1 & close SMIXER */
+       rtl_set_rfreg(hw, RF90_PATH_A, 0xed, RFREG_OFFSET_MASK, 0x00020);
+       rtl_set_rfreg(hw, RF90_PATH_A, 0x43, RFREG_OFFSET_MASK, 0x60fbd);
+
+       /* IQK setting */
+       rtl_set_bbreg(hw, RRX_IQK, MASKDWORD, 0x01004800);
+
+       /* path-B IQK setting */
+       rtl_set_bbreg(hw, RTX_IQK_TONE_A, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_A, MASKDWORD, 0x18008c1c);
+       rtl_set_bbreg(hw, RTX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+       rtl_set_bbreg(hw, RRX_IQK_TONE_B, MASKDWORD, 0x38008c1c);
+
+       rtl_set_bbreg(hw, RTX_IQK_PI_A, MASKDWORD, 0x82110000);
+       rtl_set_bbreg(hw, RRX_IQK_PI_A, MASKDWORD, 0x2816001f);
+       rtl_set_bbreg(hw, RTX_IQK_PI_B, MASKDWORD, 0x82110000);
+       rtl_set_bbreg(hw, RRX_IQK_PI_B, MASKDWORD, 0x28110000);
+
+       /* LO calibration setting */
+       rtl_set_bbreg(hw, RIQK_AGC_RSP, MASKDWORD, 0x0046a8d1);
+       /* enter IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x80800000);
+
+       /* One shot, path B LOK & IQK */
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf9000000);
+       rtl_set_bbreg(hw, RIQK_AGC_PTS, MASKDWORD, 0xf8000000);
 
-       if (is2t)
-               bound = 8;
+       mdelay(IQK_DELAY_TIME);
+
+       /* leave IQK mode */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0x00000000);
+       /* Check failed */
+       reg_eac = rtl_get_bbreg(hw, RRX_POWER_AFTER_IQK_A_2, MASKDWORD);
+       reg_ea4 = rtl_get_bbreg(hw, RRX_POWER_BEFORE_IQK_A_2, MASKDWORD);
+
+       /* Allen 20131125 */
+       tmp = (reg_eac & 0x03FF0000) >> 16;
+       if ((tmp & 0x200) > 0)
+               tmp = 0x400 - tmp;
+
+       /* if Tx is OK, check whether Rx is OK */
+       if (!(reg_eac & BIT(27)) &&
+           (((reg_ea4 & 0x03FF0000) >> 16) != 0x132) &&
+           (((reg_eac & 0x03FF0000) >> 16) != 0x36))
+               result |= 0x02;
+       else if (!(reg_eac & BIT(27)) &&
+                (((reg_ea4 & 0x03FF0000) >> 16) < 0x110) &&
+                (((reg_ea4 & 0x03FF0000) >> 16) > 0xf0) &&
+                (tmp < 0xf))
+               result |= 0x02;
        else
-               bound = 4;
+               return result;
+
+       return result;
+}
+
+static void _rtl8723be_phy_path_b_fill_iqk_matrix(struct ieee80211_hw *hw,
+                                                 bool b_iqk_ok,
+                                                 long result[][8],
+                                                 u8 final_candidate,
+                                                 bool btxonly)
+{
+       u32 oldval_1, x, tx1_a, reg;
+       long y, tx1_c;
+
+       if (final_candidate == 0xFF) {
+               return;
+       } else if (b_iqk_ok) {
+               oldval_1 = (rtl_get_bbreg(hw, ROFDM0_XBTXIQIMBALANCE,
+                                         MASKDWORD) >> 22) & 0x3FF;
+               x = result[final_candidate][4];
+               if ((x & 0x00000200) != 0)
+                       x = x | 0xFFFFFC00;
+               tx1_a = (x * oldval_1) >> 8;
+               rtl_set_bbreg(hw, ROFDM0_XBTXIQIMBALANCE, 0x3FF, tx1_a);
+               rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(27),
+                             ((x * oldval_1 >> 7) & 0x1));
+               y = result[final_candidate][5];
+               if ((y & 0x00000200) != 0)
+                       y = y | 0xFFFFFC00;
+               tx1_c = (y * oldval_1) >> 8;
+               rtl_set_bbreg(hw, ROFDM0_XDTXAFE, 0xF0000000,
+                             ((tx1_c & 0x3C0) >> 6));
+               rtl_set_bbreg(hw, ROFDM0_XBTXIQIMBALANCE, 0x003F0000,
+                             (tx1_c & 0x3F));
+               rtl_set_bbreg(hw, ROFDM0_ECCATHRESHOLD, BIT(25),
+                             ((y * oldval_1 >> 7) & 0x1));
+               if (btxonly)
+                       return;
+               reg = result[final_candidate][6];
+               rtl_set_bbreg(hw, ROFDM0_XBRXIQIMBALANCE, 0x3FF, reg);
+               reg = result[final_candidate][7] & 0x3F;
+               rtl_set_bbreg(hw, ROFDM0_XBRXIQIMBALANCE, 0xFC00, reg);
+               reg = (result[final_candidate][7] >> 6) & 0xF;
+               /* rtl_set_bbreg(hw, 0xca0, 0xF0000000, reg); */
+       }
+}
+
+static bool _rtl8723be_phy_simularity_compare(struct ieee80211_hw *hw,
+                                             long result[][8], u8 c1, u8 c2)
+{
+       u32 i, j, diff, simularity_bitmap, bound = 0;
+
+       u8 final_candidate[2] = {0xFF, 0xFF}; /* for path A and path B */
+       bool bresult = true; /* is2t = true*/
+       s32 tmp1 = 0, tmp2 = 0;
+
+       bound = 8;
 
        simularity_bitmap = 0;
 
        for (i = 0; i < bound; i++) {
-               diff = (result[c1][i] > result[c2][i]) ?
-                   (result[c1][i] - result[c2][i]) :
-                   (result[c2][i] - result[c1][i]);
+               if ((i == 1) || (i == 3) || (i == 5) || (i == 7)) {
+                       if ((result[c1][i] & 0x00000200) != 0)
+                               tmp1 = result[c1][i] | 0xFFFFFC00;
+                       else
+                               tmp1 = result[c1][i];
+
+                       if ((result[c2][i] & 0x00000200) != 0)
+                               tmp2 = result[c2][i] | 0xFFFFFC00;
+                       else
+                               tmp2 = result[c2][i];
+               } else {
+                       tmp1 = result[c1][i];
+                       tmp2 = result[c2][i];
+               }
+
+               diff = (tmp1 > tmp2) ? (tmp1 - tmp2) : (tmp2 - tmp1);
 
                if (diff > MAX_TOLERANCE) {
                        if ((i == 2 || i == 6) && !simularity_bitmap) {
                                        final_candidate[(i / 4)] = c1;
                                else
                                        simularity_bitmap |= (1 << i);
-                       } else {
+                       } else
                                simularity_bitmap |= (1 << i);
-                       }
                }
        }
 
                        }
                }
                return bresult;
-       } else if (!(simularity_bitmap & 0x0F)) {
-               for (i = 0; i < 4; i++)
-                       result[3][i] = result[c1][i];
-               return false;
-       } else if (!(simularity_bitmap & 0xF0) && is2t) {
-               for (i = 4; i < 8; i++)
-                       result[3][i] = result[c1][i];
-               return false;
        } else {
+               if (!(simularity_bitmap & 0x03)) { /* path A TX OK */
+                       for (i = 0; i < 2; i++)
+                               result[3][i] = result[c1][i];
+               }
+               if (!(simularity_bitmap & 0x0c)) { /* path A RX OK */
+                       for (i = 2; i < 4; i++)
+                               result[3][i] = result[c1][i];
+               }
+               if (!(simularity_bitmap & 0x30)) { /* path B TX OK */
+                       for (i = 4; i < 6; i++)
+                               result[3][i] = result[c1][i];
+               }
+               if (!(simularity_bitmap & 0xc0)) { /* path B RX OK */
+                       for (i = 6; i < 8; i++)
+                               result[3][i] = result[c1][i];
+               }
                return false;
        }
 }
                                        long result[][8], u8 t, bool is2t)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        u32 i;
-       u8 patha_ok;
+       u8 patha_ok, pathb_ok;
        u32 adda_reg[IQK_ADDA_REG_NUM] = {
                0x85c, 0xe6c, 0xe70, 0xe74,
                0xe78, 0xe7c, 0xe80, 0xe84,
                ROFDM0_TRXPATHENABLE, ROFDM0_TRMUXPAR,
                RFPGA0_XCD_RFINTERFACESW, 0xb68, 0xb6c,
                0x870, 0x860,
-               0x864, 0x800
+               0x864, 0xa04
        };
        const u32 retrycount = 2;
-       u32 path_sel_bb, path_sel_rf;
+
+       u32 path_sel_bb;/* path_sel_rf */
+
        u8 tmp_reg_c50, tmp_reg_c58;
 
        tmp_reg_c50 = rtl_get_bbreg(hw, 0xc50, MASKBYTE0);
        }
        rtl8723_phy_path_adda_on(hw, adda_reg, true, is2t);
        if (t == 0) {
-               rtlphy->rfpi_enable = (u8) rtl_get_bbreg(hw,
+               rtlphy->rfpi_enable = (u8)rtl_get_bbreg(hw,
                                                RFPGA0_XA_HSSIPARAMETER1,
                                                BIT(8));
        }
-       if (!rtlphy->rfpi_enable)
-               rtl8723_phy_pi_mode_switch(hw, true);
 
        path_sel_bb = rtl_get_bbreg(hw, 0x948, MASKDWORD);
-       path_sel_rf = rtl_get_rfreg(hw, RF90_PATH_A, 0xb0, 0xfffff);
 
+       rtl8723_phy_mac_setting_calibration(hw, iqk_mac_reg,
+                                           rtlphy->iqk_mac_backup);
        /*BB Setting*/
-       rtl_set_bbreg(hw, 0x800, BIT(24), 0x00);
+       rtl_set_bbreg(hw, 0xa04, 0x0f000000, 0xf);
        rtl_set_bbreg(hw, 0xc04, MASKDWORD, 0x03a05600);
        rtl_set_bbreg(hw, 0xc08, MASKDWORD, 0x000800e4);
        rtl_set_bbreg(hw, 0x874, MASKDWORD, 0x22204000);
 
-       rtl_set_bbreg(hw, 0x870, BIT(10), 0x01);
-       rtl_set_bbreg(hw, 0x870, BIT(26), 0x01);
-       rtl_set_bbreg(hw, 0x860, BIT(10), 0x00);
-       rtl_set_bbreg(hw, 0x864, BIT(10), 0x00);
-
-       if (is2t)
-               rtl_set_rfreg(hw, RF90_PATH_B, 0x00, MASKDWORD, 0x10000);
-       rtl8723_phy_mac_setting_calibration(hw, iqk_mac_reg,
-                                           rtlphy->iqk_mac_backup);
-       rtl_set_bbreg(hw, 0xb68, MASKDWORD, 0x0f600000);
-
-       rtl_set_bbreg(hw, 0xe28, MASKDWORD, 0x80800000);
-       rtl_set_bbreg(hw, 0xe40, MASKDWORD, 0x01007c00);
-       rtl_set_bbreg(hw, 0xe44, MASKDWORD, 0x81004800);
+       /* path A TX IQK */
        for (i = 0; i < retrycount; i++) {
-               patha_ok = _rtl8723be_phy_path_a_iqk(hw, is2t);
+               patha_ok = _rtl8723be_phy_path_a_iqk(hw);
                if (patha_ok == 0x01) {
                        RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                                "Path A Tx IQK Success!!\n");
+                               "Path A Tx IQK Success!!\n");
                        result[t][0] = (rtl_get_bbreg(hw, 0xe94, MASKDWORD) &
                                        0x3FF0000) >> 16;
                        result[t][1] = (rtl_get_bbreg(hw, 0xe9c, MASKDWORD) &
                                        0x3FF0000) >> 16;
                        break;
+               } else {
+                       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
+                                "Path A Tx IQK Fail!!\n");
                }
        }
-
-       if (0 == patha_ok)
+       /* path A RX IQK */
+       for (i = 0; i < retrycount; i++) {
+               patha_ok = _rtl8723be_phy_path_a_rx_iqk(hw);
+               if (patha_ok == 0x03) {
+                       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
+                                "Path A Rx IQK Success!!\n");
+                       result[t][2] = (rtl_get_bbreg(hw, 0xea4, MASKDWORD) &
+                                       0x3FF0000) >> 16;
+                       result[t][3] = (rtl_get_bbreg(hw, 0xeac, MASKDWORD) &
+                                       0x3FF0000) >> 16;
+                       break;
+               }
                RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                        "Path A IQK Success!!\n");
+                        "Path A Rx IQK Fail!!\n");
+       }
+
+       if (0x00 == patha_ok)
+               RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "Path A IQK Fail!!\n");
+
        if (is2t) {
-               rtl8723_phy_path_a_standby(hw);
-               rtl8723_phy_path_adda_on(hw, adda_reg, false, is2t);
+               /* path B TX IQK */
+               for (i = 0; i < retrycount; i++) {
+                       pathb_ok = _rtl8723be_phy_path_b_iqk(hw);
+                       if (pathb_ok == 0x01) {
+                               RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
+                                        "Path B Tx IQK Success!!\n");
+                               result[t][4] = (rtl_get_bbreg(hw, 0xe94,
+                                                             MASKDWORD) &
+                                                             0x3FF0000) >> 16;
+                               result[t][5] = (rtl_get_bbreg(hw, 0xe9c,
+                                                             MASKDWORD) &
+                                                             0x3FF0000) >> 16;
+                               break;
+                       }
+                       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
+                                "Path B Tx IQK Fail!!\n");
+               }
+               /* path B RX IQK */
+               for (i = 0; i < retrycount; i++) {
+                       pathb_ok = _rtl8723be_phy_path_b_rx_iqk(hw);
+                       if (pathb_ok == 0x03) {
+                               RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
+                                        "Path B Rx IQK Success!!\n");
+                               result[t][6] = (rtl_get_bbreg(hw, 0xea4,
+                                                             MASKDWORD) &
+                                                             0x3FF0000) >> 16;
+                               result[t][7] = (rtl_get_bbreg(hw, 0xeac,
+                                                             MASKDWORD) &
+                                                             0x3FF0000) >> 16;
+                               break;
+                       }
+                       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
+                                "Path B Rx IQK Fail!!\n");
+               }
        }
 
-       rtl_set_bbreg(hw, 0xe28, MASKDWORD, 0);
+       /* Back to BB mode, load original value */
+       rtl_set_bbreg(hw, RFPGA0_IQK, MASKDWORD, 0);
 
        if (t != 0) {
-               if (!rtlphy->rfpi_enable)
-                       rtl8723_phy_pi_mode_switch(hw, false);
                rtl8723_phy_reload_adda_registers(hw, adda_reg,
                                                  rtlphy->adda_backup, 16);
                rtl8723_phy_reload_mac_registers(hw, iqk_mac_reg,
                                                  IQK_BB_REG_NUM);
 
                rtl_set_bbreg(hw, 0x948, MASKDWORD, path_sel_bb);
-               rtl_set_rfreg(hw, RF90_PATH_B, 0xb0, 0xfffff, path_sel_rf);
+               /*rtl_set_rfreg(hw, RF90_PATH_B, 0xb0, 0xfffff, path_sel_rf);*/
 
                rtl_set_bbreg(hw, 0xc50, MASKBYTE0, 0x50);
                rtl_set_bbreg(hw, 0xc50, MASKBYTE0, tmp_reg_c50);
        RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "8723be IQK Finish!!\n");
 }
 
+static u8 _get_right_chnl_place_for_iqk(u8 chnl)
+{
+       u8 channel_all[TARGET_CHNL_NUM_2G_5G] = {
+                       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};
+       u8 place = chnl;
+
+       if (chnl > 14) {
+               for (place = 14; place < sizeof(channel_all); place++) {
+                       if (channel_all[place] == chnl)
+                               return place - 13;
+               }
+       }
+       return 0;
+}
+
 static void _rtl8723be_phy_lc_calibrate(struct ieee80211_hw *hw, bool is2t)
 {
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 tmpreg;
        u32 rf_a_mode = 0, rf_b_mode = 0, lc_cal;
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        tmpreg = rtl_read_byte(rtlpriv, 0xd03);
 
        rtl_set_rfreg(hw, RF90_PATH_A, 0xb0, RFREG_OFFSET_MASK, 0xdfbe0);
        rtl_set_rfreg(hw, RF90_PATH_A, 0x18, MASK12BITS, 0x8c0a);
 
-       mdelay(100);
+       /* In order not to disturb BT music when wifi init.(1ant NIC only) */
+       /*mdelay(100);*/
+       /* In order not to disturb BT music when wifi init.(1ant NIC only) */
+       mdelay(50);
 
        rtl_set_rfreg(hw, RF90_PATH_A, 0xb0, RFREG_OFFSET_MASK, 0xdffe0);
 
        } else {
                rtl_write_byte(rtlpriv, REG_TXPAUSE, 0x00);
        }
-       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "\n");
+RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "\n");
+
 }
 
 static void _rtl8723be_phy_set_rfpath_switch(struct ieee80211_hw *hw,
                                             bool bmain, bool is2t)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
-       struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
        RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD, "\n");
 
-       if (is_hal_stop(rtlhal)) {
-               u8 u1btmp;
-               u1btmp = rtl_read_byte(rtlpriv, REG_LEDCFG0);
-               rtl_write_byte(rtlpriv, REG_LEDCFG0, u1btmp | BIT(7));
-               rtl_set_bbreg(hw, RFPGA0_XAB_RFPARAMETER, BIT(13), 0x01);
-       }
-       if (is2t) {
-               if (bmain)
-                       rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE,
-                                     BIT(5) | BIT(6), 0x1);
-               else
-                       rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE,
-                                     BIT(5) | BIT(6), 0x2);
-       } else {
-               rtl_set_bbreg(hw, RFPGA0_XAB_RFINTERFACESW, BIT(8) | BIT(9), 0);
-               rtl_set_bbreg(hw, 0x914, MASKLWORD, 0x0201);
-
-               /* We use the RF definition of MAIN and AUX,
-                * left antenna and right antenna repectively.
-                * Default output at AUX.
-                */
-               if (bmain) {
-                       rtl_set_bbreg(hw, RFPGA0_XA_RFINTERFACEOE,
-                                     BIT(14) | BIT(13) | BIT(12), 0);
-                       rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE,
-                                     BIT(5) | BIT(4) | BIT(3), 0);
-                       if (rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV)
-                               rtl_set_bbreg(hw, CONFIG_RAM64X16, BIT(31), 0);
-               } else {
-                       rtl_set_bbreg(hw, RFPGA0_XA_RFINTERFACEOE,
-                                     BIT(14) | BIT(13) | BIT(12), 1);
-                       rtl_set_bbreg(hw, RFPGA0_XB_RFINTERFACEOE,
-                                     BIT(5) | BIT(4) | BIT(3), 1);
-                       if (rtlefuse->antenna_div_type == CGCS_RX_HW_ANTDIV)
-                               rtl_set_bbreg(hw, CONFIG_RAM64X16, BIT(31), 1);
-               }
-       }
+       if (bmain) /* left antenna */
+               rtl_set_bbreg(hw, 0x92C, MASKDWORD, 0x1);
+       else
+               rtl_set_bbreg(hw, 0x92C, MASKDWORD, 0x2);
 }
 
 #undef IQK_ADDA_REG_NUM
 #undef IQK_DELAY_TIME
-
-void rtl8723be_phy_iq_calibrate(struct ieee80211_hw *hw, bool recovery)
+/* IQK is merge from Merge Temp */
+void rtl8723be_phy_iq_calibrate(struct ieee80211_hw *hw, bool b_recovery)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
        long result[4][8];
-       u8 i, final_candidate;
-       bool patha_ok, pathb_ok;
-       long reg_e94, reg_e9c, reg_ea4, reg_eac, reg_eb4, reg_ebc, reg_ec4,
-           reg_ecc, reg_tmp = 0;
+       u8 i, final_candidate, idx;
+       bool b_patha_ok, b_pathb_ok;
+       long reg_e94, reg_e9c, reg_ea4, reg_eac, reg_eb4, reg_ebc, reg_ec4;
+       long reg_ecc, reg_tmp = 0;
        bool is12simular, is13simular, is23simular;
        u32 iqk_bb_reg[9] = {
                ROFDM0_XARXIQIMBALANCE,
                ROFDM0_XDTXAFE,
                ROFDM0_RXIQEXTANTA
        };
+       u32 path_sel_bb = 0; /* path_sel_rf = 0 */
 
-       if (recovery) {
+       if (rtlphy->lck_inprogress)
+               return;
+
+       spin_lock(&rtlpriv->locks.iqk_lock);
+       rtlphy->lck_inprogress = true;
+       spin_unlock(&rtlpriv->locks.iqk_lock);
+
+       if (b_recovery) {
                rtl8723_phy_reload_adda_registers(hw, iqk_bb_reg,
                                                  rtlphy->iqk_bb_backup, 9);
                return;
        }
+       /* Save RF Path */
+       path_sel_bb = rtl_get_bbreg(hw, 0x948, MASKDWORD);
+       /* path_sel_rf = rtl_get_rfreg(hw, RF90_PATH_A, 0xb0, 0xfffff); */
 
        for (i = 0; i < 8; i++) {
                result[0][i] = 0;
                result[3][i] = 0;
        }
        final_candidate = 0xff;
-       patha_ok = false;
-       pathb_ok = false;
+       b_patha_ok = false;
+       b_pathb_ok = false;
        is12simular = false;
        is23simular = false;
        is13simular = false;
        for (i = 0; i < 3; i++) {
-               if (get_rf_type(rtlphy) == RF_2T2R)
-                       _rtl8723be_phy_iq_calibrate(hw, result, i, true);
-               else
-                       _rtl8723be_phy_iq_calibrate(hw, result, i, false);
+               _rtl8723be_phy_iq_calibrate(hw, result, i, true);
                if (i == 1) {
-                       is12simular = phy_similarity_cmp(hw, result, 0, 1);
+                       is12simular = _rtl8723be_phy_simularity_compare(hw,
+                                                                       result,
+                                                                       0, 1);
                        if (is12simular) {
                                final_candidate = 0;
                                break;
                        }
                }
                if (i == 2) {
-                       is13simular = phy_similarity_cmp(hw, result, 0, 2);
+                       is13simular = _rtl8723be_phy_simularity_compare(hw,
+                                                                       result,
+                                                                       0, 2);
                        if (is13simular) {
                                final_candidate = 0;
                                break;
                        }
-                       is23simular = phy_similarity_cmp(hw, result, 1, 2);
+                       is23simular = _rtl8723be_phy_simularity_compare(hw,
+                                                                       result,
+                                                                       1, 2);
                        if (is23simular) {
                                final_candidate = 1;
                        } else {
                rtlphy->reg_ebc = reg_ebc;
                reg_ec4 = result[final_candidate][6];
                reg_ecc = result[final_candidate][7];
-               patha_ok = true;
-               pathb_ok = true;
+               b_patha_ok = true;
+               b_pathb_ok = true;
        } else {
                rtlphy->reg_e94 = 0x100;
                rtlphy->reg_eb4 = 0x100;
                rtlphy->reg_e9c = 0x0;
                rtlphy->reg_ebc = 0x0;
        }
-       if (reg_e94 != 0) /*&&(reg_ea4 != 0) */
-               rtl8723_phy_path_a_fill_iqk_matrix(hw, patha_ok, result,
+       if (reg_e94 != 0)
+               rtl8723_phy_path_a_fill_iqk_matrix(hw, b_patha_ok, result,
                                                   final_candidate,
                                                   (reg_ea4 == 0));
-       if (final_candidate != 0xFF) {
+       if (reg_eb4 != 0)
+               _rtl8723be_phy_path_b_fill_iqk_matrix(hw, b_pathb_ok, result,
+                                                     final_candidate,
+                                                     (reg_ec4 == 0));
+
+       idx = _get_right_chnl_place_for_iqk(rtlphy->current_channel);
+
+       if (final_candidate < 4) {
                for (i = 0; i < IQK_MATRIX_REG_NUM; i++)
-                       rtlphy->iqk_matrix[0].value[0][i] =
+                       rtlphy->iqk_matrix[idx].value[0][i] =
                                                result[final_candidate][i];
-               rtlphy->iqk_matrix[0].iqk_done = true;
+               rtlphy->iqk_matrix[idx].iqk_done = true;
+
        }
-       rtl8723_save_adda_registers(hw, iqk_bb_reg, rtlphy->iqk_bb_backup, 9);
+       rtl8723_save_adda_registers(hw, iqk_bb_reg,
+                                   rtlphy->iqk_bb_backup, 9);
+
+       rtl_set_bbreg(hw, 0x948, MASKDWORD, path_sel_bb);
+       /* rtl_set_rfreg(hw, RF90_PATH_A, 0xb0, 0xfffff, path_sel_rf); */
+
+       spin_lock(&rtlpriv->locks.iqk_lock);
+       rtlphy->lck_inprogress = false;
+       spin_unlock(&rtlpriv->locks.iqk_lock);
 }
 
 void rtl8723be_phy_lc_calibrate(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct rtl_hal *rtlhal = &(rtlpriv->rtlhal);
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       struct rtl_hal *rtlhal = &rtlpriv->rtlhal;
        u32 timeout = 2000, timecount = 0;
 
        while (rtlpriv->mac80211.act_scanning && timecount < timeout) {
        }
 
        rtlphy->lck_inprogress = true;
-       RTPRINT(rtlpriv, FINIT, INIT_EEPROM,
+       RTPRINT(rtlpriv, FINIT, INIT_IQK,
                "LCK:Start!!! currentband %x delay %d ms\n",
-               rtlhal->current_bandtype, timecount);
+                rtlhal->current_bandtype, timecount);
 
        _rtl8723be_phy_lc_calibrate(hw, false);
 
        rtlphy->lck_inprogress = false;
 }
 
-void rtl23b_phy_ap_calibrate(struct ieee80211_hw *hw, char delta)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-
-       if (rtlphy->apk_done)
-               return;
-
-       return;
-}
-
 void rtl8723be_phy_set_rfpath_switch(struct ieee80211_hw *hw, bool bmain)
 {
-       _rtl8723be_phy_set_rfpath_switch(hw, bmain, false);
-}
-
-static void rtl8723be_phy_set_io(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_phy *rtlphy = &(rtlpriv->phy);
-
-       RT_TRACE(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:
-               rtlpriv->dm_digtable.cur_igvalue =
-                                rtlphy->initgain_backup.xaagccore1;
-               /*rtl92c_dm_write_dig(hw);*/
-               rtl8723be_phy_set_txpower_level(hw, rtlphy->current_channel);
-               rtl_set_bbreg(hw, RCCK0_CCA, 0xff0000, 0x83);
-               break;
-       case IO_CMD_PAUSE_DM_BY_SCAN:
-               rtlphy->initgain_backup.xaagccore1 =
-                                rtlpriv->dm_digtable.cur_igvalue;
-               rtlpriv->dm_digtable.cur_igvalue = 0x17;
-               rtl_set_bbreg(hw, RCCK0_CCA, 0xff0000, 0x40);
-               break;
-       default:
-               RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
-                        "switch case not process\n");
-               break;
-       }
-       rtlphy->set_io_inprogress = false;
-       RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE,
-                "(%#x)\n", rtlphy->current_io_type);
+       _rtl8723be_phy_set_rfpath_switch(hw, bmain, true);
 }
 
 bool rtl8723be_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;
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+       bool b_postprocessing = false;
 
        RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE,
                 "-->IO Cmd(%#x), set_io_inprogress(%d)\n",
                case IO_CMD_RESUME_DM_BY_SCAN:
                        RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE,
                                 "[IO CMD] Resume DM after scan.\n");
-                       postprocessing = true;
+                       b_postprocessing = true;
                        break;
-               case IO_CMD_PAUSE_DM_BY_SCAN:
+               case IO_CMD_PAUSE_BAND0_DM_BY_SCAN:
                        RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE,
                                 "[IO CMD] Pause DM before scan.\n");
-                       postprocessing = true;
+                       b_postprocessing = true;
                        break;
                default:
-                       RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
+                       RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
                                 "switch case not process\n");
                        break;
                }
        } while (false);
-       if (postprocessing && !rtlphy->set_io_inprogress) {
+       if (b_postprocessing && !rtlphy->set_io_inprogress) {
                rtlphy->set_io_inprogress = true;
                rtlphy->current_io_type = iotype;
        } else {
        return true;
 }
 
+static void rtl8723be_phy_set_io(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
+       struct rtl_phy *rtlphy = &rtlpriv->phy;
+
+       RT_TRACE(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:
+               dm_digtable->cur_igvalue = rtlphy->initgain_backup.xaagccore1;
+               /*rtl92c_dm_write_dig(hw);*/
+               rtl8723be_phy_set_txpower_level(hw, rtlphy->current_channel);
+               rtl_set_bbreg(hw, RCCK0_CCA, 0xff0000, 0x83);
+               break;
+       case IO_CMD_PAUSE_BAND0_DM_BY_SCAN:
+               rtlphy->initgain_backup.xaagccore1 = dm_digtable->cur_igvalue;
+               dm_digtable->cur_igvalue = 0x17;
+               rtl_set_bbreg(hw, RCCK0_CCA, 0xff0000, 0x40);
+               break;
+       default:
+               RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
+                        "switch case not process\n");
+               break;
+       }
+       rtlphy->set_io_inprogress = false;
+       RT_TRACE(rtlpriv, COMP_CMD, DBG_TRACE,
+                "(%#x)\n", rtlphy->current_io_type);
+}
+
 static void rtl8723be_phy_set_rf_on(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        switch (rfpwr_state) {
        case ERFON:
                if ((ppsc->rfpwr_state == ERFOFF) &&
-                   RT_IN_PS_LEVEL(ppsc, RT_RF_OFF_LEVL_HALT_NIC)) {
+                    RT_IN_PS_LEVEL(ppsc, RT_RF_OFF_LEVL_HALT_NIC)) {
                        bool rtstatus;
-                       u32 initialize_count = 0;
+                       u32 initializecount = 0;
                        do {
-                               initialize_count++;
+                               initializecount++;
                                RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
                                         "IPS Set eRf nic enable\n");
                                rtstatus = rtl_ps_enable_nic(hw);
-                       } while (!rtstatus && (initialize_count < 10));
+                       } while (!rtstatus && (initializecount < 10));
                                RT_CLEAR_PS_LEVEL(ppsc,
                                                  RT_RF_OFF_LEVL_HALT_NIC);
                } else {
                        rtlpriv->cfg->ops->led_control(hw, LED_CTL_LINK);
                else
                        rtlpriv->cfg->ops->led_control(hw, LED_CTL_NO_LINK);
+
                break;
+
        case ERFOFF:
                for (queue_id = 0, i = 0;
                     queue_id < RTL_PCI_MAX_TX_QUEUE_COUNT;) {
                        ring = &pcipriv->dev.tx_ring[queue_id];
-                       if (skb_queue_len(&ring->queue) == 0) {
+                       /* Don't check BEACON Q.
+                        * BEACON Q is always not empty,
+                        * because '_rtl8723be_cmd_send_packet'
+                        */
+                       if (queue_id == BEACON_QUEUE ||
+                           skb_queue_len(&ring->queue) == 0) {
                                queue_id++;
                                continue;
                        } else {
                                RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
-                                        "eRf Off/Sleep: %d times "
-                                         "TcbBusyQueue[%d] =%d before "
-                                         "doze!\n", (i + 1), queue_id,
-                                         skb_queue_len(&ring->queue));
+                                        "eRf Off/Sleep: %d times TcbBusyQueue[%d] =%d before doze!\n",
+                                        (i + 1), queue_id,
+                                        skb_queue_len(&ring->queue));
 
                                udelay(10);
                                i++;
                        }
                        if (i >= MAX_DOZE_WAITING_TIMES_9x) {
                                RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
-                                        "\n ERFSLEEP: %d times "
-                                         "TcbBusyQueue[%d] = %d !\n",
+                                        "ERFSLEEP: %d times TcbBusyQueue[%d] = %d !\n",
                                          MAX_DOZE_WAITING_TIMES_9x,
                                          queue_id,
                                          skb_queue_len(&ring->queue));
                        }
                }
                break;
+
        case ERFSLEEP:
                if (ppsc->rfpwr_state == ERFOFF)
                        break;
                                continue;
                        } else {
                                RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
-                                        "eRf Off/Sleep: %d times "
-                                         "TcbBusyQueue[%d] =%d before "
-                                         "doze!\n", (i + 1), queue_id,
-                                         skb_queue_len(&ring->queue));
+                                        "eRf Off/Sleep: %d times TcbBusyQueue[%d] =%d before doze!\n",
+                                        (i + 1), queue_id,
+                                        skb_queue_len(&ring->queue));
 
                                udelay(10);
                                i++;
                        }
                        if (i >= MAX_DOZE_WAITING_TIMES_9x) {
                                RT_TRACE(rtlpriv, COMP_ERR, DBG_WARNING,
-                                        "\n ERFSLEEP: %d times "
-                                         "TcbBusyQueue[%d] = %d !\n",
-                                         MAX_DOZE_WAITING_TIMES_9x,
-                                         queue_id,
-                                         skb_queue_len(&ring->queue));
+                                        "ERFSLEEP: %d times TcbBusyQueue[%d] = %d !\n",
+                                        MAX_DOZE_WAITING_TIMES_9x,
+                                        queue_id,
+                                        skb_queue_len(&ring->queue));
                                break;
                        }
                }
                ppsc->last_sleep_jiffies = jiffies;
                _rtl8723be_phy_set_rf_sleep(hw);
                break;
+
        default:
-               RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
+               RT_TRACE(rtlpriv, COMP_ERR, DBG_LOUD,
                         "switch case not process\n");
                bresult = false;
                break;
 
 #ifndef __RTL8723BE_PHY_H__
 #define __RTL8723BE_PHY_H__
 
-/*It must always set to 4, otherwise read efuse table secquence will be wrong.*/
+/* MAX_TX_COUNT must always set to 4, otherwise read efuse table sequence
+ * will be wrong.
+ */
 #define MAX_TX_COUNT           4
 #define        TX_1S                   0
 #define        TX_2S                   1
+#define        TX_3S                   2
+#define        TX_4S                   3
 
 #define        MAX_POWER_INDEX         0x3F
 
 #define MAX_PRECMD_CNT                 16
 #define MAX_RFDEPENDCMD_CNT            16
-#define MAX_POSTCMD_CNT                16
+#define MAX_POSTCMD_CNT                        16
 
 #define MAX_DOZE_WAITING_TIMES_9x      64
 
 #define RT_CANNOT_IO(hw)               false
 #define HIGHPOWER_RADIOA_ARRAYLEN      22
 
+#define TARGET_CHNL_NUM_2G_5G          59
+
 #define IQK_ADDA_REG_NUM               16
 #define IQK_BB_REG_NUM                 9
 #define MAX_TOLERANCE                  5
 
 #define RTL92C_MAX_PATH_NUM                    2
 
-enum hw90_block_e {
-       HW90_BLOCK_MAC = 0,
-       HW90_BLOCK_PHY0 = 1,
-       HW90_BLOCK_PHY1 = 2,
-       HW90_BLOCK_RF = 3,
-       HW90_BLOCK_MAXIMUM = 4,
-};
-
 enum baseband_config_type {
        BASEBAND_CONFIG_PHY_REG = 0,
        BASEBAND_CONFIG_AGC_TAB = 1,
 };
 
-enum ra_offset_area {
-       RA_OFFSET_LEGACY_OFDM1,
-       RA_OFFSET_LEGACY_OFDM2,
-       RA_OFFSET_HT_OFDM1,
-       RA_OFFSET_HT_OFDM2,
-       RA_OFFSET_HT_OFDM3,
-       RA_OFFSET_HT_OFDM4,
-       RA_OFFSET_HT_CCK,
-};
-
-enum antenna_path {
-       ANTENNA_NONE,
-       ANTENNA_D,
-       ANTENNA_C,
-       ANTENNA_CD,
-       ANTENNA_B,
-       ANTENNA_BD,
-       ANTENNA_BC,
-       ANTENNA_BCD,
-       ANTENNA_A,
-       ANTENNA_AD,
-       ANTENNA_AC,
-       ANTENNA_ACD,
-       ANTENNA_AB,
-       ANTENNA_ABD,
-       ANTENNA_ABC,
-       ANTENNA_ABCD
-};
-
-struct r_antenna_select_ofdm {
-       u32 r_tx_antenna:4;
-       u32 r_ant_l:4;
-       u32 r_ant_non_ht:4;
-       u32 r_ant_ht1:4;
-       u32 r_ant_ht2:4;
-       u32 r_ant_ht_s1:4;
-       u32 r_ant_non_ht_s1:4;
-       u32 ofdm_txsc:2;
-       u32 reserved:2;
-};
-
-struct r_antenna_select_cck {
-       u8 r_cckrx_enable_2:2;
-       u8 r_cckrx_enable:2;
-       u8 r_ccktx_enable:4;
-};
-
-
-struct efuse_contents {
-       u8 mac_addr[ETH_ALEN];
-       u8 cck_tx_power_idx[6];
-       u8 ht40_1s_tx_power_idx[6];
-       u8 ht40_2s_tx_power_idx_diff[3];
-       u8 ht20_tx_power_idx_diff[3];
-       u8 ofdm_tx_power_idx_diff[3];
-       u8 ht40_max_power_offset[3];
-       u8 ht20_max_power_offset[3];
-       u8 channel_plan;
-       u8 thermal_meter;
-       u8 rf_option[5];
-       u8 version;
-       u8 oem_id;
-       u8 regulatory;
-};
-
-struct tx_power_struct {
-       u8 cck[RTL92C_MAX_PATH_NUM][CHANNEL_MAX_NUMBER];
-       u8 ht40_1s[RTL92C_MAX_PATH_NUM][CHANNEL_MAX_NUMBER];
-       u8 ht40_2s[RTL92C_MAX_PATH_NUM][CHANNEL_MAX_NUMBER];
-       u8 ht20_diff[RTL92C_MAX_PATH_NUM][CHANNEL_MAX_NUMBER];
-       u8 legacy_ht_diff[RTL92C_MAX_PATH_NUM][CHANNEL_MAX_NUMBER];
-       u8 legacy_ht_txpowerdiff;
-       u8 groupht20[RTL92C_MAX_PATH_NUM][CHANNEL_MAX_NUMBER];
-       u8 groupht40[RTL92C_MAX_PATH_NUM][CHANNEL_MAX_NUMBER];
-       u8 pwrgroup_cnt;
-       u32 mcs_original_offset[4][16];
-};
-
-enum _ANT_DIV_TYPE {
-       NO_ANTDIV                               = 0xFF,
-       CG_TRX_HW_ANTDIV                = 0x01,
-       CGCS_RX_HW_ANTDIV               = 0x02,
+enum ant_div_type {
+       NO_ANTDIV               = 0xFF,
+       CG_TRX_HW_ANTDIV        = 0x01,
+       CGCS_RX_HW_ANTDIV       = 0x02,
        FIXED_HW_ANTDIV         = 0x03,
-       CG_TRX_SMART_ANTDIV             = 0x04,
-       CGCS_RX_SW_ANTDIV               = 0x05,
+       CG_TRX_SMART_ANTDIV     = 0x04,
+       CGCS_RX_SW_ANTDIV       = 0x05,
+
 };
 
 u32 rtl8723be_phy_query_rf_reg(struct ieee80211_hw *hw,
 u8 rtl8723be_phy_sw_chnl(struct ieee80211_hw *hw);
 void rtl8723be_phy_iq_calibrate(struct ieee80211_hw *hw,
                                bool b_recovery);
-void rtl23b_phy_ap_calibrate(struct ieee80211_hw *hw, char delta);
 void rtl8723be_phy_lc_calibrate(struct ieee80211_hw *hw);
 void rtl8723be_phy_set_rfpath_switch(struct ieee80211_hw *hw, bool bmain);
 bool rtl8723be_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
 
 #ifndef __RTL8723BE_PWRSEQ_H__
 #define __RTL8723BE_PWRSEQ_H__
 
-/*     Check document WM-20130425-JackieLau-RTL8723B_Power_Architecture v05.vsd
+#include "../pwrseqcmd.h"
+/**
+ *     Check document WM-20130425-JackieLau-RTL8723B_Power_Architecture v05.vsd
  *     There are 6 HW Power States:
  *     0: POFF--Power Off
  *     1: PDN--Power Down
  *     4: LPS--Low Power State
  *     5: SUS--Suspend
  *
- *     The transition from different states are defined below
+ *     The transision from different states are defined below
  *     TRANS_CARDEMU_TO_ACT
  *     TRANS_ACT_TO_CARDEMU
  *     TRANS_CARDEMU_TO_SUS
 #define        RTL8723B_TRANS_END_STEPS                1
 
 #define RTL8723B_TRANS_CARDEMU_TO_ACT                                  \
+       /* format */                                                    \
+       /* comments here */                                             \
+       /* {offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value}, */\
+       /*0x20[0] = 1b'1 enable LDOA12 MACRO block for all interface*/  \
        {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,                      \
         PWR_INTF_USB_MSK | PWR_INTF_SDIO_MSK,                          \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},              \
+       /*0x67[0] = 0 to disable BT_GPS_SEL pins*/                      \
        {0x0067, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,                      \
         PWR_INTF_USB_MSK | PWR_INTF_SDIO_MSK,                          \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0},                   \
+       /*Delay 1ms*/                                                   \
        {0x0001, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,                      \
         PWR_INTF_USB_MSK | PWR_INTF_SDIO_MSK,                          \
         PWR_BASEADDR_MAC, PWR_CMD_DELAY, 1, PWRSEQ_DELAY_MS},          \
+       /*0x00[5] = 1b'0 release analog Ips to digital ,1:isolation*/   \
        {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,                      \
         PWR_INTF_USB_MSK | PWR_INTF_SDIO_MSK,                          \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(5), 0},                   \
+       /* disable SW LPS 0x04[10]=0 and WLSUS_EN 0x04[11]=0*/          \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, (BIT(4)|BIT(3)|BIT(2)), 0},   \
+       /* Disable USB suspend */                                       \
        {0x0075, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,    \
-        PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0) , 0},                  \
+        PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0) , BIT(0)},             \
+       /* wait till 0x04[17] = 1    power ready*/                      \
        {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(1), BIT(1)},            \
+       /* Enable USB suspend */                                        \
        {0x0075, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,    \
-        PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0) , BIT(0)},             \
+        PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0) , 0},                  \
+       /* release WLON reset  0x04[16]=1*/                             \
        {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},              \
+       /* disable HWPDN 0x04[15]=0*/                                   \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 0},                   \
+       /* disable WL suspend*/                                         \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, (BIT(4)|BIT(3)), 0},          \
+       /* polling until return 0*/                                     \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},              \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(0), 0},                 \
+       /* Enable WL control XTAL setting*/                             \
        {0x0010, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(6), BIT(6)},              \
+       /*Enable falling edge triggering interrupt*/                    \
        {0x0049, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)},              \
+       /*Enable GPIO9 interrupt mode*/                                 \
        {0x0063, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)},              \
+       /*Enable GPIO9 input mode*/                                     \
        {0x0062, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0},                   \
+       /*Enable HSISR GPIO[C:0] interrupt*/                            \
        {0x0058, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},              \
+       /*Enable HSISR GPIO9 interrupt*/                                \
        {0x005A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)},              \
+       /*For GPIO9 internal pull high setting by test chip*/           \
        {0x0068, PWR_CUT_TESTCHIP_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,\
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3), BIT(3)},              \
+       /*For GPIO9 internal pull high setting*/                        \
        {0x0069, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(6), BIT(6)},
 
 #define RTL8723B_TRANS_ACT_TO_CARDEMU                                  \
+       /* format */                                                    \
+       /* comments here */                                             \
+       /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
+       /*0x1F[7:0] = 0 turn off RF*/                                   \
        {0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0},                     \
+       /*0x4C[24] = 0x4F[0] = 0, */                                    \
+       /*switch DPDT_SEL_P output from register 0x65[2] */             \
        {0x004F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},                   \
+       /*Enable rising edge triggering interrupt*/                     \
        {0x0049, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0},                   \
+        /*0x04[9] = 1 turn off MAC by HW state machine*/               \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)},              \
+        /*wait till 0x04[9] = 0 polling until return 0 to disable*/    \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(1), 0},                 \
+       /* Enable BT control XTAL setting*/                             \
        {0x0010, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(6), 0},                   \
+       /*0x00[5] = 1b'1 analog Ips to digital ,1:isolation*/           \
        {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,                      \
         PWR_INTF_USB_MSK | PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC,        \
         PWR_CMD_WRITE, BIT(5), BIT(5)},                                \
+       /*0x20[0] = 1b'0 disable LDOA12 MACRO block*/                   \
        {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,                      \
         PWR_INTF_USB_MSK | PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC,        \
         PWR_CMD_WRITE, BIT(0), 0},
 
 #define RTL8723B_TRANS_CARDEMU_TO_SUS                                  \
+       /* format */                                                    \
+       /* comments here */                                             \
+       /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },*/\
+       /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/              \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4) | BIT(3), (BIT(4) | BIT(3))}, \
+       /*0x04[12:11] = 2b'01 enable WL suspend*/                       \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,                      \
         PWR_INTF_USB_MSK | PWR_INTF_SDIO_MSK, PWR_BASEADDR_MAC,        \
         PWR_CMD_WRITE, BIT(3) | BIT(4), BIT(3)},                       \
+       /*0x23[4] = 1b'1 12H LDO enter sleep mode*/                     \
        {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4)},              \
+       /*0x07[7:0] = 0x20 SDIO SOP option to disable BG/MB/ACK/SWR*/   \
        {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x20},                  \
+       /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/              \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3) | BIT(4), BIT(3) | BIT(4)},\
+       /*Set SDIO suspend local register*/                             \
        {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), BIT(0)},             \
+       /*wait power state to suspend*/                                 \
        {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), 0},
 
 #define RTL8723B_TRANS_SUS_TO_CARDEMU                                  \
+       /* format */                                                    \
+       /* comments here */                                             \
+       /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
+       /*clear suspend enable and power down enable*/                  \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3) | BIT(7), 0},          \
+       /*Set SDIO suspend local register*/                             \
        {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), 0},                  \
+       /*wait power state to suspend*/                                 \
        {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), BIT(1)},           \
+       /*0x23[4] = 1b'0 12H LDO enter normal mode*/                    \
        {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0},                   \
+       /*0x04[12:11] = 2b'01enable WL suspend*/                        \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), 0},
 
 #define RTL8723B_TRANS_CARDEMU_TO_CARDDIS                              \
+       /* format */                                                    \
+       /* comments here */                                             \
+       /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
+       /*0x07=0x20 , SOP option to disable BG/MB*/                     \
        {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x20},                  \
+       /*0x04[12:11] = 2b'01 enable WL suspend*/                       \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,                      \
         PWR_INTF_USB_MSK | PWR_INTF_SDIO_MSK,                          \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)},       \
+       /*0x04[10] = 1, enable SW LPS*/                                 \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(2), BIT(2)},              \
+       /*0x48[16] = 1 to enable GPIO9 as EXT WAKEUP*/                  \
        {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 1},                   \
+       /*0x23[4] = 1b'1 12H LDO enter sleep mode*/                     \
        {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4)},              \
+       /*Set SDIO suspend local register*/                             \
        {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), BIT(0)},             \
+       /*wait power state to suspend*/                                 \
        {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), 0},
 
 #define RTL8723B_TRANS_CARDDIS_TO_CARDEMU                              \
+       /* format */                                                    \
+       /* comments here */                                             \
+       /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
+       /*clear suspend enable and power down enable*/                  \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3) | BIT(7), 0},          \
+       /*Set SDIO suspend local register*/                             \
        {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_SDIO, PWR_CMD_WRITE, BIT(0), 0},                  \
+       /*wait power state to suspend*/                                 \
        {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_SDIO, PWR_CMD_POLLING, BIT(1), BIT(1)},           \
+       /*0x48[16] = 0 to disable GPIO9 as EXT WAKEUP*/                 \
        {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},                   \
+       /*0x04[12:11] = 2b'01enable WL suspend*/                        \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), 0},            \
+       /*0x23[4] = 1b'0 12H LDO enter normal mode*/                    \
        {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0},                   \
+       /*PCIe DMA start*/                                              \
        {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0},
 
 #define RTL8723B_TRANS_CARDEMU_TO_PDN                                  \
+       /* format */                                                    \
+       /* comments here */                                             \
+       /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
+       /*0x23[4] = 1b'1 12H LDO enter sleep mode*/                     \
        {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), BIT(4)},              \
+       /*0x07[7:0] = 0x20 SOP option to disable BG/MB/ACK/SWR*/        \
        {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,                      \
         PWR_INTF_SDIO_MSK | PWR_INTF_USB_MSK, PWR_BASEADDR_MAC,        \
         PWR_CMD_WRITE, 0xFF, 0x20},                                    \
+       /* 0x04[16] = 0*/                                               \
        {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},                   \
+       /* 0x04[15] = 1*/                                               \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), BIT(7)},
 
 #define RTL8723B_TRANS_PDN_TO_CARDEMU                                  \
+       /* format */                                                    \
+       /* comments here */                                             \
+       /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
+       /* 0x04[15] = 0*/                                               \
        {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 0},
 
 #define RTL8723B_TRANS_ACT_TO_LPS                                      \
+       /* format */                                                    \
+       /* comments here */                                             \
+       /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
+       /*PCIe DMA stop*/                                               \
        {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0xFF},                  \
+       /*Tx Pause*/                                                    \
        {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0xFF},                  \
+       /*Should be zero if no packet is transmitting*/                 \
        {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},                   \
+       /*Should be zero if no packet is transmitting*/                 \
        {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},                   \
+       /*Should be zero if no packet is transmitting*/                 \
        {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},                   \
+       /*Should be zero if no packet is transmitting*/                 \
        {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},                   \
+       /*CCK and OFDM are disabled,and clock are gated*/               \
        {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},                   \
+       /*Delay 1us*/                                                   \
        {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},          \
+       /*Whole BB is reset*/                                           \
        {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0},                   \
+       /*Reset MAC TRX*/                                               \
        {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x03},                  \
+       /*check if removed later*/                                      \
        {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0},                   \
+       /*When driver enter Sus/ Disable, enable LOP for BT*/           \
        {0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x00},                  \
+       /*Respond TxOK to scheduler*/                                   \
        {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(5), BIT(5)},
 
 #define RTL8723B_TRANS_LPS_TO_ACT                                      \
+       /* format */                                                    \
+       /* comments here */                                             \
+       /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
+       /*SDIO RPWM*/                                                   \
        {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,   \
-        PWR_BASEADDR_SDIO, PWR_CMD_WRITE, 0xFF, 0x84},         \
+        PWR_BASEADDR_SDIO, PWR_CMD_WRITE, 0xFF, 0x84},                 \
+       /*USB RPWM*/                                                    \
        {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x84},                  \
+       /*PCIe RPWM*/                                                   \
        {0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x84},                  \
+       /*Delay*/                                                       \
        {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS},          \
+       /*.     0x08[4] = 0              switch TSF to 40M*/            \
        {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0},                   \
+       /*Polling 0x109[7]=0  TSF in 40M*/                              \
        {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
-        PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(7), 0},         \
+        PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(7), 0},                 \
+       /*.     0x29[7:6] = 2b'00        enable BB clock*/              \
        {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(6)|BIT(7), 0},            \
+       /*.     0x101[1] = 1*/                                          \
        {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)},              \
+       /*.     0x100[7:0] = 0xFF        enable WMAC TRX*/              \
        {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0xFF},                  \
+       /*.     0x02[1:0] = 2b'11        enable BB macro*/              \
        {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1) | BIT(0), BIT(1) | BIT(0)}, \
+       /*.     0x522 = 0*/                                             \
        {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,    \
         PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0},
 
 #define RTL8723B_TRANS_END                                             \
+       /* format */                                                    \
+       /* comments here */                                             \
+       /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, */\
        {0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, 0, \
         PWR_CMD_END, 0, 0},
 
 
 #define REG_WOL_EVENT                          0x0081
 #define REG_MCUTSTCFG                          0x0084
 
-
 #define REG_HIMR                               0x00B0
 #define REG_HISR                               0x00B4
 #define REG_HIMRE                              0x00B8
 #define REG_HISRE                              0x00BC
+#define REG_PMC_DBG_CTRL2                      0x00CC
 
 #define REG_EFUSE_ACCESS                       0x00CF
 
 #define REG_HPON_FSM                           0x00EC
 #define REG_SYS_CFG                            0x00F0
 #define REG_GPIO_OUTSTS                                0x00F4
-#define REG_SYS_CFG1                           0x00F0
+#define REG_MAC_PHY_CTRL_NORMAL                        0x00F8
+#define REG_SYS_CFG1                           0x00FC
 #define REG_ROM_VERSION                                0x00FD
 
 #define REG_CR                                 0x0100
 #define        REG_BKQ_DESA                            0x0338
 #define        REG_RX_DESA                             0x0340
 
-#define        REG_DBI                                 0x0348
-#define        REG_MDIO                                0x0354
+#define        REG_DBI_WDATA                           0x0348
+#define        REG_DBI_RDATA                           0x034C
+#define        REG_DBI_CTRL                            0x0350
+#define        REG_DBI_ADDR                            0x0350
+#define        REG_DBI_FLAG                            0x0352
+#define        REG_MDIO_WDATA                          0x0354
+#define        REG_MDIO_RDATA                          0x0356
+#define        REG_MDIO_CTL                            0x0358
 #define        REG_DBG_SEL                             0x0360
 #define        REG_PCIE_HRPWM                          0x0361
 #define        REG_PCIE_HCPWM                          0x0363
 #define        REG_UART_TX_DESA                        0x0370
 #define        REG_UART_RX_DESA                        0x0378
 
-
 #define        REG_HDAQ_DESA_NODEF                     0x0000
 #define        REG_CMDQ_DESA_NODEF                     0x0000
 
 #define REG_BCNQ_INFORMATION                   0x0418
 #define REG_TXPKT_EMPTY                                0x041A
 
-
 #define REG_CPU_MGQ_INFORMATION                        0x041C
 #define REG_FWHW_TXQ_CTRL                      0x0420
 #define REG_HWSEQ_CTRL                         0x0423
 #define REG_RARFRC                             0x0438
 #define REG_RRSR                               0x0440
 #define REG_ARFR0                              0x0444
-#define REG_ARFR1                              0x0448
-#define REG_ARFR2                              0x044C
-#define REG_ARFR3                              0x0450
+#define REG_ARFR1                              0x044C
 #define REG_AMPDU_MAX_TIME                     0x0456
 #define REG_AGGLEN_LMT                         0x0458
 #define REG_AMPDU_MIN_SPACE                    0x045C
 #define REG_POWER_STAGE2                       0x04B8
 #define REG_PKT_LIFE_TIME                      0x04C0
 #define REG_STBC_SETTING                       0x04C4
+#define REG_HT_SINGLE_AMPDU                    0x04C7
+
 #define REG_PROT_MODE_CTRL                     0x04C8
+#define REG_MAX_AGGR_NUM                       0x04CA
 #define REG_BAR_MODE_CTRL                      0x04CC
 #define REG_RA_TRY_RATE_AGG_LMT                        0x04CF
 #define REG_EARLY_MODE_CONTROL                 0x04D0
 #define REG_EIFS                               0x0642
 
 #define REG_NAV_CTRL                           0x0650
+#define        REG_NAV_UPPER                           0x0652
 #define REG_BACAMCMD                           0x0654
 #define REG_BACAMCONTENT                       0x0658
 #define REG_LBDLY                              0x0660
 #define REG_NORMAL_SIE_MAC_ADDR                        0xFE70
 #define REG_NORMAL_SIE_STRING                  0xFE80
 
-#define        CR9346                                  REG_9346CR
-#define        MSR                                     (REG_CR + 2)
-#define        ISR                                     REG_HISR
-#define        TSFR                                    REG_TSFTR
+#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        MACIDR0                         REG_MACID
+#define        MACIDR4                         (REG_MACID + 4)
 
-#define PBP                                    REG_PBP
+#define PBP                            REG_PBP
 
-#define        IDR0                                    MACIDR0
-#define        IDR4                                    MACIDR4
+#define        IDR0                            MACIDR0
+#define        IDR4                            MACIDR4
 
-#define        UNUSED_REGISTER                         0x1BF
-#define        DCAM                                    UNUSED_REGISTER
-#define        PSR                                     UNUSED_REGISTER
-#define BBADDR                                 UNUSED_REGISTER
-#define        PHYDATAR                                UNUSED_REGISTER
+#define        UNUSED_REGISTER                 0x1BF
+#define        DCAM                            UNUSED_REGISTER
+#define        PSR                             UNUSED_REGISTER
+#define BBADDR                         UNUSED_REGISTER
+#define        PHYDATAR                        UNUSED_REGISTER
 
-#define        INVALID_BBRF_VALUE                      0x12345678
+#define        INVALID_BBRF_VALUE              0x12345678
 
-#define        MAX_MSS_DENSITY_2T                      0x13
-#define        MAX_MSS_DENSITY_1T                      0x0A
+#define        MAX_MSS_DENSITY_2T              0x13
+#define        MAX_MSS_DENSITY_1T              0x0A
 
-#define        CMDEEPROM_EN                            BIT(5)
-#define        CMDEEPROM_SEL                           BIT(4)
-#define        CMD9346CR_9356SEL                       BIT(4)
-#define        AUTOLOAD_EEPROM                         (CMDEEPROM_EN | CMDEEPROM_SEL)
-#define        AUTOLOAD_EFUSE                          CMDEEPROM_EN
+#define        CMDEEPROM_EN                    BIT(5)
+#define        CMDEEPROM_SEL                   BIT(4)
+#define        CMD9346CR_9356SEL               BIT(4)
+#define        AUTOLOAD_EEPROM                 (CMDEEPROM_EN | CMDEEPROM_SEL)
+#define        AUTOLOAD_EFUSE                  CMDEEPROM_EN
 
-#define        GPIOSEL_GPIO                            0
-#define        GPIOSEL_ENBT                            BIT(5)
+#define        GPIOSEL_GPIO                    0
+#define        GPIOSEL_ENBT                    BIT(5)
 
-#define        GPIO_IN                                 REG_GPIO_PIN_CTRL
-#define        GPIO_OUT                                (REG_GPIO_PIN_CTRL + 1)
-#define        GPIO_IO_SEL                             (REG_GPIO_PIN_CTRL + 2)
-#define        GPIO_MOD                                (REG_GPIO_PIN_CTRL + 3)
+#define        GPIO_IN                         REG_GPIO_PIN_CTRL
+#define        GPIO_OUT                        (REG_GPIO_PIN_CTRL + 1)
+#define        GPIO_IO_SEL                     (REG_GPIO_PIN_CTRL + 2)
+#define        GPIO_MOD                        (REG_GPIO_PIN_CTRL + 3)
 
 /* 8723/8188E Host System Interrupt Mask Register (offset 0x58, 32 byte) */
 #define        HSIMR_GPIO12_0_INT_EN                   BIT(0)
 #define        HSIMR_PDN_INT_EN                        BIT(7)
 #define        HSIMR_GPIO9_INT_EN                      BIT(25)
 
-/* 8723/8188E Host System Interrupt Status Register (offset 0x5C, 32 byte) */
-
+/*  8723/8188E Host System Interrupt Status Register (offset 0x5C, 32 byte) */
 #define        HSISR_GPIO12_0_INT                      BIT(0)
 #define        HSISR_SPS_OCP_INT                       BIT(5)
 #define        HSISR_RON_INT_EN                        BIT(6)
 #define        MSR_ADHOC                               0x01
 #define        MSR_INFRA                               0x02
 #define        MSR_AP                                  0x03
-#define        MSR_MASK                                0x03
 
 #define        RRSR_RSC_OFFSET                         21
 #define        RRSR_SHORT_OFFSET                       23
 
 /*********************************************
 *       8723BE IMR/ISR bits
-**********************************************/
+*********************************************
+*/
 #define        IMR_DISABLED                            0x0
 /* IMR DW0(0x0060-0063) Bit 0-31 */
 #define        IMR_TXCCK               BIT(30) /* TXRPT interrupt when
 #define RF_OPTION1                             0x79
 #define RF_OPTION2                             0x7A
 #define RF_OPTION3                             0x7B
-#define RF_OPTION4                             0xC3
+#define EEPROM_RF_BT_SETTING_8723B             0xC3
 
 #define EEPROM_DEFAULT_PID                     0x1234
 #define EEPROM_DEFAULT_VID                     0x5678
 #define EEPROM_CLK                             0x06
 #define EEPROM_TESTR                           0x08
 
-
 #define EEPROM_TXPOWERCCK                      0x10
 #define        EEPROM_TXPOWERHT40_1S                   0x16
 #define EEPROM_TXPOWERHT20DIFF                 0x1B
 #define EEPROM_TXPOWER_OFDMDIFF                        0x1B
 
-
-
 #define        EEPROM_TX_PWR_INX                       0x10
 
 #define        EEPROM_CHANNELPLAN                      0xB8
 #define APP_MIC                                        BIT(30)
 #define APP_FCS                                        BIT(31)
 
-#define _MIN_SPACE(x)                  ((x) & 0x7)
+#define _MIN_SPACE(x)                          ((x) & 0x7)
 #define _SHORT_GI_PADDING(x)           (((x) & 0x1F) << 3)
 
 #define RXERR_TYPE_OFDM_PPDU           0
 #define RXERR_TYPE_HT_MPDU_FAIL                12
 #define RXERR_TYPE_RX_FULL_DROP                15
 
-#define RXERR_COUNTER_MASK             0xFFFFF
-#define RXERR_RPT_RST                  BIT(27)
-#define _RXERR_RPT_SEL(type)           ((type) << 28)
-
-#define        SCR_TXUSEDK                     BIT(0)
-#define        SCR_RXUSEDK                     BIT(1)
-#define        SCR_TXENCENABLE                 BIT(2)
-#define        SCR_RXDECENABLE                 BIT(3)
-#define        SCR_SKBYA2                      BIT(4)
-#define        SCR_NOSKMC                      BIT(5)
-#define SCR_TXBCUSEDK                  BIT(6)
-#define SCR_RXBCUSEDK                  BIT(7)
-
-#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 BT_FUNC                                BIT(16)
-#define VENDOR_ID                      BIT(19)
-#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)
-
-#define USB_IS_HIGH_SPEED              0
-#define USB_IS_FULL_SPEED              1
-#define USB_SPEED_MASK                 BIT(5)
-
-#define USB_NORMAL_SIE_EP_MASK         0xF
-#define USB_NORMAL_SIE_EP_SHIFT                4
-
-#define USB_TEST_EP_MASK               0x30
-#define USB_TEST_EP_SHIFT              4
-
-#define USB_AGG_EN                     BIT(3)
-
-#define MAC_ADDR_LEN                   6
-#define LAST_ENTRY_OF_TX_PKT_BUFFER    175/*255    88e*/
-
-#define POLLING_LLT_THRESHOLD          20
-#define POLLING_READY_TIMEOUT_COUNT    3000
+#define RXERR_COUNTER_MASK                     0xFFFFF
+#define RXERR_RPT_RST                          BIT(27)
+#define _RXERR_RPT_SEL(type)                   ((type) << 28)
 
-#define        MAX_MSS_DENSITY_2T              0x13
-#define        MAX_MSS_DENSITY_1T              0x0A
+#define        SCR_TXUSEDK                             BIT(0)
+#define        SCR_RXUSEDK                             BIT(1)
+#define        SCR_TXENCENABLE                         BIT(2)
+#define        SCR_RXDECENABLE                         BIT(3)
+#define        SCR_SKBYA2                              BIT(4)
+#define        SCR_NOSKMC                              BIT(5)
+#define SCR_TXBCUSEDK                          BIT(6)
+#define SCR_RXBCUSEDK                          BIT(7)
+
+#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 BT_FUNC                                        BIT(16)
+#define VENDOR_ID                              BIT(19)
+#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)
+
+#define USB_IS_HIGH_SPEED                      0
+#define USB_IS_FULL_SPEED                      1
+#define USB_SPEED_MASK                         BIT(5)
+
+#define USB_NORMAL_SIE_EP_MASK                 0xF
+#define USB_NORMAL_SIE_EP_SHIFT                        4
+
+#define USB_TEST_EP_MASK                       0x30
+#define USB_TEST_EP_SHIFT                      4
+
+#define USB_AGG_EN                             BIT(3)
+
+#define MAC_ADDR_LEN                           6
+#define LAST_ENTRY_OF_TX_PKT_BUFFER            175/*255    88e*/
+
+#define POLLING_LLT_THRESHOLD                  20
+#define POLLING_READY_TIMEOUT_COUNT            3000
+
+#define        MAX_MSS_DENSITY_2T                      0x13
+#define        MAX_MSS_DENSITY_1T                      0x0A
 
 #define EPROM_CMD_OPERATING_MODE_MASK  ((1<<7)|(1<<6))
-#define EPROM_CMD_CONFIG               0x3
-#define EPROM_CMD_LOAD                 1
-
-#define        HWSET_MAX_SIZE_92S              HWSET_MAX_SIZE
-
-#define        HAL_8192C_HW_GPIO_WPS_BIT       BIT(2)
-
-#define        RPMAC_RESET                     0x100
-#define        RPMAC_TXSTART                   0x104
-#define        RPMAC_TXLEGACYSIG               0x108
-#define        RPMAC_TXHTSIG1                  0x10c
-#define        RPMAC_TXHTSIG2                  0x110
-#define        RPMAC_PHYDEBUG                  0x114
-#define        RPMAC_TXPACKETNUM               0x118
-#define        RPMAC_TXIDLE                    0x11c
-#define        RPMAC_TXMACHEADER0              0x120
-#define        RPMAC_TXMACHEADER1              0x124
-#define        RPMAC_TXMACHEADER2              0x128
-#define        RPMAC_TXMACHEADER3              0x12c
-#define        RPMAC_TXMACHEADER4              0x130
-#define        RPMAC_TXMACHEADER5              0x134
-#define        RPMAC_TXDADATYPE                0x138
-#define        RPMAC_TXRANDOMSEED              0x13c
-#define        RPMAC_CCKPLCPPREAMBLE           0x140
-#define        RPMAC_CCKPLCPHEADER             0x144
-#define        RPMAC_CCKCRC16                  0x148
-#define        RPMAC_OFDMRXCRC32OK             0x170
-#define        RPMAC_OFDMRXCRC32ER             0x174
-#define        RPMAC_OFDMRXPARITYER            0x178
-#define        RPMAC_OFDMRXCRC8ER              0x17c
-#define        RPMAC_CCKCRXRC16ER              0x180
-#define        RPMAC_CCKCRXRC32ER              0x184
-#define        RPMAC_CCKCRXRC32OK              0x188
-#define        RPMAC_TXSTATUS                  0x18c
-
-#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 EPROM_CMD_CONFIG                       0x3
+#define EPROM_CMD_LOAD                         1
+
+#define        HWSET_MAX_SIZE_92S                      HWSET_MAX_SIZE
+
+#define        HAL_8192C_HW_GPIO_WPS_BIT               BIT(2)
+
+#define        RPMAC_RESET                             0x100
+#define        RPMAC_TXSTART                           0x104
+#define        RPMAC_TXLEGACYSIG                       0x108
+#define        RPMAC_TXHTSIG1                          0x10c
+#define        RPMAC_TXHTSIG2                          0x110
+#define        RPMAC_PHYDEBUG                          0x114
+#define        RPMAC_TXPACKETNUM                       0x118
+#define        RPMAC_TXIDLE                            0x11c
+#define        RPMAC_TXMACHEADER0                      0x120
+#define        RPMAC_TXMACHEADER1                      0x124
+#define        RPMAC_TXMACHEADER2                      0x128
+#define        RPMAC_TXMACHEADER3                      0x12c
+#define        RPMAC_TXMACHEADER4                      0x130
+#define        RPMAC_TXMACHEADER5                      0x134
+#define        RPMAC_TXDADATYPE                        0x138
+#define        RPMAC_TXRANDOMSEED                      0x13c
+#define        RPMAC_CCKPLCPPREAMBLE                   0x140
+#define        RPMAC_CCKPLCPHEADER                     0x144
+#define        RPMAC_CCKCRC16                          0x148
+#define        RPMAC_OFDMRXCRC32OK                     0x170
+#define        RPMAC_OFDMRXCRC32ER                     0x174
+#define        RPMAC_OFDMRXPARITYER                    0x178
+#define        RPMAC_OFDMRXCRC8ER                      0x17c
+#define        RPMAC_CCKCRXRC16ER                      0x180
+#define        RPMAC_CCKCRXRC32ER                      0x184
+#define        RPMAC_CCKCRXRC32OK                      0x188
+#define        RPMAC_TXSTATUS                          0x18c
+
+#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        RCCK0_FACOUNTERUPPER            0xa58
 #define        RCCK0_CCA_CNT                   0xa60
 
-
 /* PageB(0xB00) */
 #define        RPDP_ANTA                       0xb00
 #define        RPDP_ANTA_4                     0xb04
 #define        RPDP_ANTA_24                    0xb24
 
 #define        RCONFIG_PMPD_ANTA               0xb28
-#define        CONFIG_RAM64X16                 0xb2c
+#define        RCONFIG_ram64x16                0xb2c
 
 #define        RBNDA                           0xb30
 #define        RHSSIPAR                        0xb34
 #define        ROFDM0_FRAMESYNC                0xcf0
 #define        ROFDM0_DFSREPORT                0xcf4
 
-
 #define        ROFDM1_LSTF                     0xd00
 #define        ROFDM1_TRXPATHENABLE            0xd04
 
 #define        RSLEEP                          0xee0
 #define        RPMPD_ANAEN                     0xeec
 
-#define        RZEBRA1_HSSIENABLE              0x0
-#define        RZEBRA1_TRXENABLE1              0x1
-#define        RZEBRA1_TRXENABLE2              0x2
-#define        RZEBRA1_AGC                     0x4
-#define        RZEBRA1_CHARGEPUMP              0x5
-#define        RZEBRA1_CHANNEL                 0x7
-
-#define        RZEBRA1_TXGAIN                  0x8
-#define        RZEBRA1_TXLPF                   0x9
-#define        RZEBRA1_RXLPF                   0xb
-#define        RZEBRA1_RXHPFCORNER             0xc
-
-#define        RGLOBALCTRL                     0
-#define        RRTL8256_TXLPF                  19
-#define        RRTL8256_RXLPF                  11
-#define        RRTL8258_TXLPF                  0x11
-#define        RRTL8258_RXLPF                  0x13
-#define        RRTL8258_RSSILPF                0xa
-
-#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        RRFCHANNEL                      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
-
-#define        RF_TX_BIAS_A                    0x35
-#define        RF_TX_BIAS_D                    0x36
-#define        RF_LOBF_9                       0x38
-#define        RF_RXRF_A3                      0x3C
-#define        RF_TRSW                         0x3F
-
-#define        RF_TXRF_A2                      0x41
-#define        RF_TXPA_G4                      0x46
-#define        RF_TXPA_A4                      0x4B
-
-#define        RF_WE_LUT                       0xEF
-
-#define        BBBRESETB                       0x100
-#define        BGLOBALRESETB                   0x200
-#define        BOFDMTXSTART                    0x4
-#define        BCCKTXSTART                     0x8
-#define        BCRC32DEBUG                     0x100
-#define        BPMACLOOPBACK                   0x10
-#define        BTXLSIG                         0xffffff
-#define        BOFDMTXRATE                     0xf
-#define        BOFDMTXRESERVED                 0x10
-#define        BOFDMTXLENGTH                   0x1ffe0
-#define        BOFDMTXPARITY                   0x20000
-#define        BTXHTSIG1                       0xffffff
-#define        BTXHTMCSRATE                    0x7f
-#define        BTXHTBW                         0x80
-#define        BTXHTLENGTH                     0xffff00
-#define        BTXHTSIG2                       0xffffff
-#define        BTXHTSMOOTHING                  0x1
-#define        BTXHTSOUNDING                   0x2
-#define        BTXHTRESERVED                   0x4
-#define        BTXHTAGGREATION                 0x8
-#define        BTXHTSTBC                       0x30
-#define        BTXHTADVANCECODING              0x40
-#define        BTXHTSHORTGI                    0x80
-#define        BTXHTNUMBERHT_LTF               0x300
-#define        BTXHTCRC8                       0x3fc00
-#define        BCOUNTERRESET                   0x10000
-#define        BNUMOFOFDMTX                    0xffff
-#define        BNUMOFCCKTX                     0xffff0000
-#define        BTXIDLEINTERVAL                 0xffff
-#define        BOFDMSERVICE                    0xffff0000
-#define        BTXMACHEADER                    0xffffffff
-#define        BTXDATAINIT                     0xff
-#define        BTXHTMODE                       0x100
-#define        BTXDATATYPE                     0x30000
-#define        BTXRANDOMSEED                   0xffffffff
-#define        BCCKTXPREAMBLE                  0x1
-#define        BCCKTXSFD                       0xffff0000
-#define        BCCKTXSIG                       0xff
-#define        BCCKTXSERVICE                   0xff00
-#define        BCCKLENGTHEXT                   0x8000
-#define        BCCKTXLENGHT                    0xffff0000
-#define        BCCKTXCRC16                     0xffff
-#define        BCCKTXSTATUS                    0x1
-#define        BOFDMTXSTATUS                   0x2
+#define        RZEBRA1_HSSIENABLE                      0x0
+#define        RZEBRA1_TRXENABLE1                      0x1
+#define        RZEBRA1_TRXENABLE2                      0x2
+#define        RZEBRA1_AGC                             0x4
+#define        RZEBRA1_CHARGEPUMP                      0x5
+#define        RZEBRA1_CHANNEL                         0x7
+
+#define        RZEBRA1_TXGAIN                          0x8
+#define        RZEBRA1_TXLPF                           0x9
+#define        RZEBRA1_RXLPF                           0xb
+#define        RZEBRA1_RXHPFCORNER                     0xc
+
+#define        RGLOBALCTRL                             0
+#define        RRTL8256_TXLPF                          19
+#define        RRTL8256_RXLPF                          11
+#define        RRTL8258_TXLPF                          0x11
+#define        RRTL8258_RXLPF                          0x13
+#define        RRTL8258_RSSILPF                        0xa
+
+#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        RRFCHANNEL                              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
+
+#define        RF_TX_BIAS_A                            0x35
+#define        RF_TX_BIAS_D                            0x36
+#define        RF_LOBF_9                               0x38
+#define        RF_RXRF_A3                              0x3C
+#define        RF_TRSW                                 0x3F
+
+#define        RF_TXRF_A2                              0x41
+#define        RF_TXPA_G4                              0x46
+#define        RF_TXPA_A4                              0x4B
+
+#define        RF_WE_LUT                               0xEF
+
+#define        BBBRESETB                               0x100
+#define        BGLOBALRESETB                           0x200
+#define        BOFDMTXSTART                            0x4
+#define        BCCKTXSTART                             0x8
+#define        BCRC32DEBUG                             0x100
+#define        BPMACLOOPBACK                           0x10
+#define        BTXLSIG                                 0xffffff
+#define        BOFDMTXRATE                             0xf
+#define        BOFDMTXRESERVED                         0x10
+#define        BOFDMTXLENGTH                           0x1ffe0
+#define        BOFDMTXPARITY                           0x20000
+#define        BTXHTSIG1                               0xffffff
+#define        BTXHTMCSRATE                            0x7f
+#define        BTXHTBW                                 0x80
+#define        BTXHTLENGTH                             0xffff00
+#define        BTXHTSIG2                               0xffffff
+#define        BTXHTSMOOTHING                          0x1
+#define        BTXHTSOUNDING                           0x2
+#define        BTXHTRESERVED                           0x4
+#define        BTXHTAGGREATION                         0x8
+#define        BTXHTSTBC                               0x30
+#define        BTXHTADVANCECODING                      0x40
+#define        BTXHTSHORTGI                            0x80
+#define        BTXHTNUMBERHT_LTF                       0x300
+#define        BTXHTCRC8                               0x3fc00
+#define        BCOUNTERRESET                           0x10000
+#define        BNUMOFOFDMTX                            0xffff
+#define        BNUMOFCCKTX                             0xffff0000
+#define        BTXIDLEINTERVAL                         0xffff
+#define        BOFDMSERVICE                            0xffff0000
+#define        BTXMACHEADER                            0xffffffff
+#define        BTXDATAINIT                             0xff
+#define        BTXHTMODE                               0x100
+#define        BTXDATATYPE                             0x30000
+#define        BTXRANDOMSEED                           0xffffffff
+#define        BCCKTXPREAMBLE                          0x1
+#define        BCCKTXSFD                               0xffff0000
+#define        BCCKTXSIG                               0xff
+#define        BCCKTXSERVICE                           0xff00
+#define        BCCKLENGTHEXT                           0x8000
+#define        BCCKTXLENGHT                            0xffff0000
+#define        BCCKTXCRC16                             0xffff
+#define        BCCKTXSTATUS                            0x1
+#define        BOFDMTXSTATUS                           0x2
 #define IS_BB_REG_OFFSET_92S(_offset)  \
        ((_offset >= 0x800) && (_offset <= 0xfff))
 
-#define        BRFMOD                          0x1
-#define        BJAPANMODE                      0x2
-#define        BCCKTXSC                        0x30
-#define        BCCKEN                          0x1000000
-#define        BOFDMEN                         0x2000000
+#define        BRFMOD                                  0x1
+#define        BJAPANMODE                              0x2
+#define        BCCKTXSC                                0x30
+#define        BCCKEN                                  0x1000000
+#define        BOFDMEN                                 0x2000000
 
 #define        BOFDMRXADCPHASE                 0x10000
 #define        BOFDMTXDACPHASE                 0x40000
 #define        BDA6SWING                       0x380000
 
 #define        BADCLKPHASE                     0x4000000
-#define        B80MCLKDELAY    0x18000000
-#define        BAFEWATCHDOGENABLE      0x20000000
+#define        B80MCLKDELAY                    0x18000000
+#define        BAFEWATCHDOGENABLE              0x20000000
 
-#define        BXTALCAP01      0xc0000000
-#define        BXTALCAP23      0x3
+#define        BXTALCAP01                      0xc0000000
+#define        BXTALCAP23                      0x3
 #define        BXTALCAP92X                     0x0f000000
-#define BXTALCAP       0x0f000000
+#define BXTALCAP                       0x0f000000
 
 #define        BINTDIFCLKENABLE                0x400
 #define        BEXTSIGCLKENABLE                0x800
 #define        BCCKRX_AGC_FORMAT               0x200
 #define        BPSDFFT_SAMPLE_POINT            0xc000
 #define        BPSD_AVERAGE_NUM                0x3000
-#define        BIQPATH_CONTROL 0xc00
+#define        BIQPATH_CONTROL                 0xc00
 #define        BPSD_FREQ                       0x3ff
 #define        BPSD_ANTENNA_PATH               0x30
 #define        BPSD_IQ_SWITCH                  0x40
 #define        BCCK_DEFAULT_RXPATH             0xc000000
 #define        BCCK_OPTION_RXPATH              0x3000000
 
-#define        BNUM_OFSTF      0x3
-#define        BSHIFT_L        0xc0
-#define        BGI_TH  0xc
-#define        BRXPATH_A       0x1
-#define        BRXPATH_B       0x2
-#define        BRXPATH_C       0x4
-#define        BRXPATH_D       0x8
-#define        BTXPATH_A       0x1
-#define        BTXPATH_B       0x2
-#define        BTXPATH_C       0x4
-#define        BTXPATH_D       0x8
-#define        BTRSSI_FREQ     0x200
-#define        BADC_BACKOFF    0x3000
-#define        BDFIR_BACKOFF   0xc000
-#define        BTRSSI_LATCH_PHASE      0x10000
-#define        BRX_LDC_OFFSET  0xff
-#define        BRX_QDC_OFFSET  0xff00
-#define        BRX_DFIR_MODE   0x1800000
-#define        BRX_DCNF_TYPE   0xe000000
-#define        BRXIQIMB_A      0x3ff
-#define        BRXIQIMB_B      0xfc00
-#define        BRXIQIMB_C      0x3f0000
-#define        BRXIQIMB_D      0xffc00000
-#define        BDC_DC_NOTCH    0x60000
-#define        BRXNB_NOTCH     0x1f000000
-#define        BPD_TH  0xf
-#define        BPD_TH_OPT2     0xc000
-#define        BPWED_TH        0x700
-#define        BIFMF_WIN_L     0x800
-#define        BPD_OPTION      0x1000
-#define        BMF_WIN_L       0xe000
-#define        BBW_SEARCH_L    0x30000
-#define        BWIN_ENH_L      0xc0000
-#define        BBW_TH  0x700000
-#define        BED_TH2 0x3800000
-#define        BBW_OPTION      0x4000000
-#define        BRADIO_TH       0x18000000
-#define        BWINDOW_L       0xe0000000
-#define        BSBD_OPTION     0x1
-#define        BFRAME_TH       0x1c
-#define        BFS_OPTION      0x60
-#define        BDC_SLOPE_CHECK 0x80
-#define        BFGUARD_COUNTER_DC_L    0xe00
-#define        BFRAME_WEIGHT_SHORT     0x7000
-#define        BSUB_TUNE       0xe00000
-#define        BFRAME_DC_LENGTH        0xe000000
-#define        BSBD_START_OFFSET       0x30000000
-#define        BFRAME_TH_2     0x7
-#define        BFRAME_GI2_TH   0x38
-#define        BGI2_SYNC_EN    0x40
-#define        BSARCH_SHORT_EARLY      0x300
-#define        BSARCH_SHORT_LATE       0xc00
-#define        BSARCH_GI2_LATE 0x70000
-#define        BCFOANTSUM      0x1
-#define        BCFOACC 0x2
-#define        BCFOSTARTOFFSET 0xc
-#define        BCFOLOOPBACK    0x70
-#define        BCFOSUMWEIGHT   0x80
-#define        BDAGCENABLE     0x10000
-#define        BTXIQIMB_A      0x3ff
-#define        BTXIQIMB_b      0xfc00
-#define        BTXIQIMB_C      0x3f0000
-#define        BTXIQIMB_D      0xffc00000
-#define        BTXIDCOFFSET    0xff
-#define        BTXIQDCOFFSET   0xff00
-#define        BTXDFIRMODE     0x10000
-#define        BTXPESUDO_NOISEON       0x4000000
-#define        BTXPESUDO_NOISE_A       0xff
-#define        BTXPESUDO_NOISE_B       0xff00
-#define        BTXPESUDO_NOISE_C       0xff0000
-#define        BTXPESUDO_NOISE_D       0xff000000
-#define        BCCA_DROPOPTION 0x20000
-#define        BCCA_DROPTHRES  0xfff00000
-#define        BEDCCA_H        0xf
-#define        BEDCCA_L        0xf0
-#define        BLAMBDA_ED      0x300
-#define        BRX_INITIALGAIN 0x7f
-#define        BRX_ANTDIV_EN   0x80
+#define        BNUM_OFSTF                      0x3
+#define        BSHIFT_L                        0xc0
+#define        BGI_TH                          0xc
+#define        BRXPATH_A                       0x1
+#define        BRXPATH_B                       0x2
+#define        BRXPATH_C                       0x4
+#define        BRXPATH_D                       0x8
+#define        BTXPATH_A                       0x1
+#define        BTXPATH_B                       0x2
+#define        BTXPATH_C                       0x4
+#define        BTXPATH_D                       0x8
+#define        BTRSSI_FREQ                     0x200
+#define        BADC_BACKOFF                    0x3000
+#define        BDFIR_BACKOFF                   0xc000
+#define        BTRSSI_LATCH_PHASE              0x10000
+#define        BRX_LDC_OFFSET                  0xff
+#define        BRX_QDC_OFFSET                  0xff00
+#define        BRX_DFIR_MODE                   0x1800000
+#define        BRX_DCNF_TYPE                   0xe000000
+#define        BRXIQIMB_A                      0x3ff
+#define        BRXIQIMB_B                      0xfc00
+#define        BRXIQIMB_C                      0x3f0000
+#define        BRXIQIMB_D                      0xffc00000
+#define        BDC_DC_NOTCH                    0x60000
+#define        BRXNB_NOTCH                     0x1f000000
+#define        BPD_TH                          0xf
+#define        BPD_TH_OPT2                     0xc000
+#define        BPWED_TH                        0x700
+#define        BIFMF_WIN_L                     0x800
+#define        BPD_OPTION                      0x1000
+#define        BMF_WIN_L                       0xe000
+#define        BBW_SEARCH_L                    0x30000
+#define        BWIN_ENH_L                      0xc0000
+#define        BBW_TH                          0x700000
+#define        BED_TH2                         0x3800000
+#define        BBW_OPTION                      0x4000000
+#define        BRADIO_TH                       0x18000000
+#define        BWINDOW_L                       0xe0000000
+#define        BSBD_OPTION                     0x1
+#define        BFRAME_TH                       0x1c
+#define        BFS_OPTION                      0x60
+#define        BDC_SLOPE_CHECK                 0x80
+#define        BFGUARD_COUNTER_DC_L            0xe00
+#define        BFRAME_WEIGHT_SHORT             0x7000
+#define        BSUB_TUNE                       0xe00000
+#define        BFRAME_DC_LENGTH                0xe000000
+#define        BSBD_START_OFFSET               0x30000000
+#define        BFRAME_TH_2                     0x7
+#define        BFRAME_GI2_TH                   0x38
+#define        BGI2_SYNC_EN                    0x40
+#define        BSARCH_SHORT_EARLY              0x300
+#define        BSARCH_SHORT_LATE               0xc00
+#define        BSARCH_GI2_LATE                 0x70000
+#define        BCFOANTSUM                      0x1
+#define        BCFOACC                         0x2
+#define        BCFOSTARTOFFSET                 0xc
+#define        BCFOLOOPBACK                    0x70
+#define        BCFOSUMWEIGHT                   0x80
+#define        BDAGCENABLE                     0x10000
+#define        BTXIQIMB_A                      0x3ff
+#define        BTXIQIMB_b                      0xfc00
+#define        BTXIQIMB_C                      0x3f0000
+#define        BTXIQIMB_D                      0xffc00000
+#define        BTXIDCOFFSET                    0xff
+#define        BTXIQDCOFFSET                   0xff00
+#define        BTXDFIRMODE                     0x10000
+#define        BTXPESUDO_NOISEON               0x4000000
+#define        BTXPESUDO_NOISE_A               0xff
+#define        BTXPESUDO_NOISE_B               0xff00
+#define        BTXPESUDO_NOISE_C               0xff0000
+#define        BTXPESUDO_NOISE_D               0xff000000
+#define        BCCA_DROPOPTION                 0x20000
+#define        BCCA_DROPTHRES                  0xfff00000
+#define        BEDCCA_H                        0xf
+#define        BEDCCA_L                        0xf0
+#define        BLAMBDA_ED                      0x300
+#define        BRX_INITIALGAIN                 0x7f
+#define        BRX_ANTDIV_EN                   0x80
 #define        BRX_AGC_ADDRESS_FOR_LNA         0x7f00
-#define        BRX_HIGHPOWER_FLOW      0x8000
+#define        BRX_HIGHPOWER_FLOW              0x8000
 #define        BRX_AGC_FREEZE_THRES            0xc0000
-#define        BRX_FREEZESTEP_AGC1     0x300000
-#define        BRX_FREEZESTEP_AGC2     0xc00000
-#define        BRX_FREEZESTEP_AGC3     0x3000000
-#define        BRX_FREEZESTEP_AGC0     0xc000000
-#define        BRXRSSI_CMP_EN  0x10000000
-#define        BRXQUICK_AGCEN  0x20000000
+#define        BRX_FREEZESTEP_AGC1             0x300000
+#define        BRX_FREEZESTEP_AGC2             0xc00000
+#define        BRX_FREEZESTEP_AGC3             0x3000000
+#define        BRX_FREEZESTEP_AGC0             0xc000000
+#define        BRXRSSI_CMP_EN                  0x10000000
+#define        BRXQUICK_AGCEN                  0x20000000
 #define        BRXAGC_FREEZE_THRES_MODE        0x40000000
-#define        BRX_OVERFLOW_CHECKTYPE  0x80000000
-#define        BRX_AGCSHIFT    0x7f
-#define        BTRSW_TRI_ONLY  0x80
-#define        BPOWER_THRES    0x300
-#define        BRXAGC_EN       0x1
-#define        BRXAGC_TOGETHER_EN      0x2
-#define        BRXAGC_MIN      0x4
-#define        BRXHP_INI       0x7
-#define        BRXHP_TRLNA     0x70
-#define        BRXHP_RSSI      0x700
-#define        BRXHP_BBP1      0x7000
-#define        BRXHP_BBP2      0x70000
-#define        BRXHP_BBP3      0x700000
-#define        BRSSI_H 0x7f0000
-#define        BRSSI_GEN       0x7f000000
-#define        BRXSETTLE_TRSW  0x7
-#define        BRXSETTLE_LNA   0x38
-#define        BRXSETTLE_RSSI  0x1c0
-#define        BRXSETTLE_BBP   0xe00
-#define        BRXSETTLE_RXHP  0x7000
-#define        BRXSETTLE_ANTSW_RSSI    0x38000
-#define        BRXSETTLE_ANTSW 0xc0000
-#define        BRXPROCESS_TIME_DAGC    0x300000
-#define        BRXSETTLE_HSSI  0x400000
-#define        BRXPROCESS_TIME_BBPPW   0x800000
-#define        BRXANTENNA_POWER_SHIFT  0x3000000
-#define        BRSSI_TABLE_SELECT      0xc000000
-#define        BRXHP_FINAL     0x7000000
-#define        BRXHPSETTLE_BBP 0x7
-#define        BRXHTSETTLE_HSSI        0x8
-#define        BRXHTSETTLE_RXHP        0x70
-#define        BRXHTSETTLE_BBPPW       0x80
-#define        BRXHTSETTLE_IDLE        0x300
-#define        BRXHTSETTLE_RESERVED    0x1c00
-#define        BRXHT_RXHP_EN   0x8000
-#define        BRXAGC_FREEZE_THRES     0x30000
-#define        BRXAGC_TOGETHEREN       0x40000
-#define        BRXHTAGC_MIN    0x80000
-#define        BRXHTAGC_EN     0x100000
-#define        BRXHTDAGC_EN    0x200000
-#define        BRXHT_RXHP_BBP  0x1c00000
-#define        BRXHT_RXHP_FINAL        0xe0000000
-#define        BRXPW_RADIO_TH  0x3
-#define        BRXPW_RADIO_EN  0x4
-#define        BRXMF_HOLD      0x3800
-#define        BRXPD_DELAY_TH1 0x38
-#define        BRXPD_DELAY_TH2 0x1c0
-#define        BRXPD_DC_COUNT_MAX      0x600
-#define        BRXPD_DELAY_TH  0x8000
-#define        BRXPROCESS_DELAY        0xf0000
+#define        BRX_OVERFLOW_CHECKTYPE          0x80000000
+#define        BRX_AGCSHIFT                    0x7f
+#define        BTRSW_TRI_ONLY                  0x80
+#define        BPOWER_THRES                    0x300
+#define        BRXAGC_EN                       0x1
+#define        BRXAGC_TOGETHER_EN              0x2
+#define        BRXAGC_MIN                      0x4
+#define        BRXHP_INI                       0x7
+#define        BRXHP_TRLNA                     0x70
+#define        BRXHP_RSSI                      0x700
+#define        BRXHP_BBP1                      0x7000
+#define        BRXHP_BBP2                      0x70000
+#define        BRXHP_BBP3                      0x700000
+#define        BRSSI_H                         0x7f0000
+#define        BRSSI_GEN                       0x7f000000
+#define        BRXSETTLE_TRSW                  0x7
+#define        BRXSETTLE_LNA                   0x38
+#define        BRXSETTLE_RSSI                  0x1c0
+#define        BRXSETTLE_BBP                   0xe00
+#define        BRXSETTLE_RXHP                  0x7000
+#define        BRXSETTLE_ANTSW_RSSI            0x38000
+#define        BRXSETTLE_ANTSW                 0xc0000
+#define        BRXPROCESS_TIME_DAGC            0x300000
+#define        BRXSETTLE_HSSI                  0x400000
+#define        BRXPROCESS_TIME_BBPPW           0x800000
+#define        BRXANTENNA_POWER_SHIFT          0x3000000
+#define        BRSSI_TABLE_SELECT              0xc000000
+#define        BRXHP_FINAL                     0x7000000
+#define        BRXHPSETTLE_BBP                 0x7
+#define        BRXHTSETTLE_HSSI                0x8
+#define        BRXHTSETTLE_RXHP                0x70
+#define        BRXHTSETTLE_BBPPW               0x80
+#define        BRXHTSETTLE_IDLE                0x300
+#define        BRXHTSETTLE_RESERVED            0x1c00
+#define        BRXHT_RXHP_EN                   0x8000
+#define        BRXAGC_FREEZE_THRES             0x30000
+#define        BRXAGC_TOGETHEREN               0x40000
+#define        BRXHTAGC_MIN                    0x80000
+#define        BRXHTAGC_EN                     0x100000
+#define        BRXHTDAGC_EN                    0x200000
+#define        BRXHT_RXHP_BBP                  0x1c00000
+#define        BRXHT_RXHP_FINAL                0xe0000000
+#define        BRXPW_RADIO_TH                  0x3
+#define        BRXPW_RADIO_EN                  0x4
+#define        BRXMF_HOLD                      0x3800
+#define        BRXPD_DELAY_TH1                 0x38
+#define        BRXPD_DELAY_TH2                 0x1c0
+#define        BRXPD_DC_COUNT_MAX              0x600
+#define        BRXPD_DELAY_TH                  0x8000
+#define        BRXPROCESS_DELAY                0xf0000
 #define        BRXSEARCHRANGE_GI2_EARLY        0x700000
 #define        BRXFRAME_FUARD_COUNTER_L        0x3800000
-#define        BRXSGI_GUARD_L  0xc000000
-#define        BRXSGI_SEARCH_L 0x30000000
-#define        BRXSGI_TH       0xc0000000
-#define        BDFSCNT0        0xff
-#define        BDFSCNT1        0xff00
-#define        BDFSFLAG        0xf0000
-#define        BMF_WEIGHT_SUM  0x300000
-#define        BMINIDX_TH      0x7f000000
-#define        BDAFORMAT       0x40000
-#define        BTXCH_EMU_ENABLE        0x01000000
-#define        BTRSW_ISOLATION_A       0x7f
-#define        BTRSW_ISOLATION_B       0x7f00
-#define        BTRSW_ISOLATION_C       0x7f0000
-#define        BTRSW_ISOLATION_D       0x7f000000
-#define        BEXT_LNA_GAIN   0x7c00
-
-#define        BSTBC_EN        0x4
-#define        BANTENNA_MAPPING        0x10
-#define        BNSS    0x20
+#define        BRXSGI_GUARD_L                  0xc000000
+#define        BRXSGI_SEARCH_L                 0x30000000
+#define        BRXSGI_TH                       0xc0000000
+#define        BDFSCNT0                        0xff
+#define        BDFSCNT1                        0xff00
+#define        BDFSFLAG                        0xf0000
+#define        BMF_WEIGHT_SUM                  0x300000
+#define        BMINIDX_TH                      0x7f000000
+#define        BDAFORMAT                       0x40000
+#define        BTXCH_EMU_ENABLE                0x01000000
+#define        BTRSW_ISOLATION_A               0x7f
+#define        BTRSW_ISOLATION_B               0x7f00
+#define        BTRSW_ISOLATION_C               0x7f0000
+#define        BTRSW_ISOLATION_D               0x7f000000
+#define        BEXT_LNA_GAIN                   0x7c00
+
+#define        BSTBC_EN                        0x4
+#define        BANTENNA_MAPPING                0x10
+#define        BNSS                            0x20
 #define        BCFO_ANTSUM_ID                  0x200
-#define        BPHY_COUNTER_RESET      0x8000000
-#define        BCFO_REPORT_GET 0x4000000
-#define        BOFDM_CONTINUE_TX       0x10000000
-#define        BOFDM_SINGLE_CARRIER    0x20000000
-#define        BOFDM_SINGLE_TONE       0x40000000
-#define        BHT_DETECT      0x100
-#define        BCFOEN  0x10000
-#define        BCFOVALUE       0xfff00000
-#define        BSIGTONE_RE     0x3f
-#define        BSIGTONE_IM     0x7f00
-#define        BCOUNTER_CCA    0xffff
-#define        BCOUNTER_PARITYFAIL     0xffff0000
-#define        BCOUNTER_RATEILLEGAL    0xffff
-#define        BCOUNTER_CRC8FAIL       0xffff0000
-#define        BCOUNTER_MCSNOSUPPORT   0xffff
-#define        BCOUNTER_FASTSYNC       0xffff
-#define        BSHORTCFO       0xfff
-#define        BSHORTCFOT_LENGTH       12
-#define        BSHORTCFOF_LENGTH       11
-#define        BLONGCFO        0x7ff
-#define        BLONGCFOT_LENGTH        11
-#define        BLONGCFOF_LENGTH        11
-#define        BTAILCFO        0x1fff
-#define        BTAILCFOT_LENGTH        13
-#define        BTAILCFOF_LENGTH        12
-#define        BNOISE_EN_PWDB  0xffff
-#define        BCC_POWER_DB    0xffff0000
-#define        BMOISE_PWDB     0xffff
-#define        BPOWERMEAST_LENGTH      10
-#define        BPOWERMEASF_LENGTH      3
-#define        BRX_HT_BW       0x1
-#define        BRXSC   0x6
-#define        BRX_HT  0x8
-#define        BNB_INTF_DET_ON 0x1
-#define        BINTF_WIN_LEN_CFG       0x30
-#define        BNB_INTF_TH_CFG 0x1c0
-#define        BRFGAIN 0x3f
-#define        BTABLESEL       0x40
-#define        BTRSW   0x80
-#define        BRXSNR_A        0xff
-#define        BRXSNR_B        0xff00
-#define        BRXSNR_C        0xff0000
-#define        BRXSNR_D        0xff000000
-#define        BSNR_EVMT_LENGTH        8
-#define        BSNR_EVMF_LENGTH        1
-#define        BCSI1ST 0xff
-#define        BCSI2ND 0xff00
-#define        BRXEVM1ST       0xff0000
-#define        BRXEVM2ND       0xff000000
-#define        BSIGEVM 0xff
-#define        BPWDB   0xff00
-#define        BSGIEN  0x10000
-
-#define        BSFACTOR_QMA1   0xf
-#define        BSFACTOR_QMA2   0xf0
-#define        BSFACTOR_QMA3   0xf00
-#define        BSFACTOR_QMA4   0xf000
-#define        BSFACTOR_QMA5   0xf0000
-#define        BSFACTOR_QMA6   0xf0000
-#define        BSFACTOR_QMA7   0xf00000
-#define        BSFACTOR_QMA8   0xf000000
-#define        BSFACTOR_QMA9   0xf0000000
-#define        BCSI_SCHEME     0x100000
+#define        BPHY_COUNTER_RESET              0x8000000
+#define        BCFO_REPORT_GET                 0x4000000
+#define        BOFDM_CONTINUE_TX               0x10000000
+#define        BOFDM_SINGLE_CARRIER            0x20000000
+#define        BOFDM_SINGLE_TONE               0x40000000
+#define        BHT_DETECT                      0x100
+#define        BCFOEN                          0x10000
+#define        BCFOVALUE                       0xfff00000
+#define        BSIGTONE_RE                     0x3f
+#define        BSIGTONE_IM                     0x7f00
+#define        BCOUNTER_CCA                    0xffff
+#define        BCOUNTER_PARITYFAIL             0xffff0000
+#define        BCOUNTER_RATEILLEGAL            0xffff
+#define        BCOUNTER_CRC8FAIL               0xffff0000
+#define        BCOUNTER_MCSNOSUPPORT           0xffff
+#define        BCOUNTER_FASTSYNC               0xffff
+#define        BSHORTCFO                       0xfff
+#define        BSHORTCFOT_LENGTH               12
+#define        BSHORTCFOF_LENGTH               11
+#define        BLONGCFO                        0x7ff
+#define        BLONGCFOT_LENGTH                11
+#define        BLONGCFOF_LENGTH                11
+#define        BTAILCFO                        0x1fff
+#define        BTAILCFOT_LENGTH                13
+#define        BTAILCFOF_LENGTH                12
+#define        BNOISE_EN_PWDB                  0xffff
+#define        BCC_POWER_DB                    0xffff0000
+#define        BMOISE_PWDB                     0xffff
+#define        BPOWERMEAST_LENGTH              10
+#define        BPOWERMEASF_LENGTH              3
+#define        BRX_HT_BW                       0x1
+#define        BRXSC                           0x6
+#define        BRX_HT                          0x8
+#define        BNB_INTF_DET_ON                 0x1
+#define        BINTF_WIN_LEN_CFG               0x30
+#define        BNB_INTF_TH_CFG                 0x1c0
+#define        BRFGAIN                         0x3f
+#define        BTABLESEL                       0x40
+#define        BTRSW                           0x80
+#define        BRXSNR_A                        0xff
+#define        BRXSNR_B                        0xff00
+#define        BRXSNR_C                        0xff0000
+#define        BRXSNR_D                        0xff000000
+#define        BSNR_EVMT_LENGTH                8
+#define        BSNR_EVMF_LENGTH                1
+#define        BCSI1ST                         0xff
+#define        BCSI2ND                         0xff00
+#define        BRXEVM1ST                       0xff0000
+#define        BRXEVM2ND                       0xff000000
+#define        BSIGEVM                         0xff
+#define        BPWDB                           0xff00
+#define        BSGIEN                          0x10000
+
+#define        BSFACTOR_QMA1                   0xf
+#define        BSFACTOR_QMA2                   0xf0
+#define        BSFACTOR_QMA3                   0xf00
+#define        BSFACTOR_QMA4                   0xf000
+#define        BSFACTOR_QMA5                   0xf0000
+#define        BSFACTOR_QMA6                   0xf0000
+#define        BSFACTOR_QMA7                   0xf00000
+#define        BSFACTOR_QMA8                   0xf000000
+#define        BSFACTOR_QMA9                   0xf0000000
+#define        BCSI_SCHEME                     0x100000
 
 #define        BNOISE_LVL_TOP_SET              0x3
-#define        BCHSMOOTH       0x4
-#define        BCHSMOOTH_CFG1  0x38
-#define        BCHSMOOTH_CFG2  0x1c0
-#define        BCHSMOOTH_CFG3  0xe00
-#define        BCHSMOOTH_CFG4  0x7000
-#define        BMRCMODE        0x800000
-#define        BTHEVMCFG       0x7000000
-
-#define        BLOOP_FIT_TYPE  0x1
-#define        BUPD_CFO        0x40
-#define        BUPD_CFO_OFFDATA        0x80
-#define        BADV_UPD_CFO    0x100
-#define        BADV_TIME_CTRL  0x800
-#define        BUPD_CLKO       0x1000
-#define        BFC     0x6000
-#define        BTRACKING_MODE  0x8000
-#define        BPHCMP_ENABLE   0x10000
-#define        BUPD_CLKO_LTF   0x20000
-#define        BCOM_CH_CFO     0x40000
-#define        BCSI_ESTI_MODE  0x80000
-#define        BADV_UPD_EQZ    0x100000
-#define        BUCHCFG 0x7000000
-#define        BUPDEQZ 0x8000000
+#define        BCHSMOOTH                       0x4
+#define        BCHSMOOTH_CFG1                  0x38
+#define        BCHSMOOTH_CFG2                  0x1c0
+#define        BCHSMOOTH_CFG3                  0xe00
+#define        BCHSMOOTH_CFG4                  0x7000
+#define        BMRCMODE                        0x800000
+#define        BTHEVMCFG                       0x7000000
+
+#define        BLOOP_FIT_TYPE                  0x1
+#define        BUPD_CFO                        0x40
+#define        BUPD_CFO_OFFDATA                0x80
+#define        BADV_UPD_CFO                    0x100
+#define        BADV_TIME_CTRL                  0x800
+#define        BUPD_CLKO                       0x1000
+#define        BFC                             0x6000
+#define        BTRACKING_MODE                  0x8000
+#define        BPHCMP_ENABLE                   0x10000
+#define        BUPD_CLKO_LTF                   0x20000
+#define        BCOM_CH_CFO                     0x40000
+#define        BCSI_ESTI_MODE                  0x80000
+#define        BADV_UPD_EQZ                    0x100000
+#define        BUCHCFG                         0x7000000
+#define        BUPDEQZ                         0x8000000
 
 #define        BRX_PESUDO_NOISE_ON             0x20000000
-#define        BRX_PESUDO_NOISE_A      0xff
-#define        BRX_PESUDO_NOISE_B      0xff00
-#define        BRX_PESUDO_NOISE_C      0xff0000
-#define        BRX_PESUDO_NOISE_D      0xff000000
+#define        BRX_PESUDO_NOISE_A              0xff
+#define        BRX_PESUDO_NOISE_B              0xff00
+#define        BRX_PESUDO_NOISE_C              0xff0000
+#define        BRX_PESUDO_NOISE_D              0xff000000
 #define        BRX_PESUDO_NOISESTATE_A         0xffff
 #define        BRX_PESUDO_NOISESTATE_B         0xffff0000
 #define        BRX_PESUDO_NOISESTATE_C         0xffff
 #define        BRX_PESUDO_NOISESTATE_D         0xffff0000
 
-#define        BZEBRA1_HSSIENABLE      0x8
-#define        BZEBRA1_TRXCONTROL      0xc00
-#define        BZEBRA1_TRXGAINSETTING  0x07f
-#define        BZEBRA1_RXCOUNTER       0xc00
-#define        BZEBRA1_TXCHANGEPUMP    0x38
-#define        BZEBRA1_RXCHANGEPUMP    0x7
-#define        BZEBRA1_CHANNEL_NUM     0xf80
-#define        BZEBRA1_TXLPFBW 0x400
-#define        BZEBRA1_RXLPFBW 0x600
+#define        BZEBRA1_HSSIENABLE              0x8
+#define        BZEBRA1_TRXCONTROL              0xc00
+#define        BZEBRA1_TRXGAINSETTING          0x07f
+#define        BZEBRA1_RXCOUNTER               0xc00
+#define        BZEBRA1_TXCHANGEPUMP            0x38
+#define        BZEBRA1_RXCHANGEPUMP            0x7
+#define        BZEBRA1_CHANNEL_NUM             0xf80
+#define        BZEBRA1_TXLPFBW                 0x400
+#define        BZEBRA1_RXLPFBW                 0x600
 
 #define        BRTL8256REG_MODE_CTRL1          0x100
 #define        BRTL8256REG_MODE_CTRL0          0x40
 #define        BRTL8256REG_TXLPFBW             0x18
 #define        BRTL8256REG_RXLPFBW             0x600
 
-#define        BRTL8258_TXLPFBW        0xc
-#define        BRTL8258_RXLPFBW        0xc00
-#define        BRTL8258_RSSILPFBW      0xc0
-
-#define        BBYTE0  0x1
-#define        BBYTE1  0x2
-#define        BBYTE2  0x4
-#define        BBYTE3  0x8
-#define        BWORD0  0x3
-#define        BWORD1  0xc
-#define        BWORD   0xf
-
-#define        BENABLE 0x1
-#define        BDISABLE        0x0
-
-#define        LEFT_ANTENNA    0x0
-#define        RIGHT_ANTENNA   0x1
-
-#define        TCHECK_TXSTATUS 500
-#define        TUPDATE_RXCOUNTER       100
+#define        BRTL8258_TXLPFBW                0xc
+#define        BRTL8258_RXLPFBW                0xc00
+#define        BRTL8258_RSSILPFBW              0xc0
+
+#define        BBYTE0                          0x1
+#define        BBYTE1                          0x2
+#define        BBYTE2                          0x4
+#define        BBYTE3                          0x8
+#define        BWORD0                          0x3
+#define        BWORD1                          0xc
+#define        BWORD                           0xf
+
+#define        MASKBYTE0                       0xff
+#define        MASKBYTE1                       0xff00
+#define        MASKBYTE2                       0xff0000
+#define        MASKBYTE3                       0xff000000
+#define        MASKHWORD                       0xffff0000
+#define        MASKLWORD                       0x0000ffff
+#define        MASKDWORD                       0xffffffff
+#define        MASK12BITS                      0xfff
+#define        MASKH4BITS                      0xf0000000
+#define MASKOFDM_D                     0xffc00000
+#define        MASKCCK                         0x3f3f3f3f
+
+#define        MASK4BITS                       0x0f
+#define        MASK20BITS                      0xfffff
+#define RFREG_OFFSET_MASK              0xfffff
+
+#define        BENABLE                         0x1
+#define        BDISABLE                        0x0
+
+#define        LEFT_ANTENNA                    0x0
+#define        RIGHT_ANTENNA                   0x1
+
+#define        TCHECK_TXSTATUS                 500
+#define        TUPDATE_RXCOUNTER               100
 
 #define        REG_UN_used_register            0x01bf
 
 
                              rtlphy->rfreg_chnlval[0]);
                break;
        default:
-               RT_TRACE(rtlpriv, COMP_INIT, DBG_EMERG,
+               RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
                         "unknown bandwidth: %#X\n", bandwidth);
                break;
        }
                                       (ppowerlevel[idx1] << 16) |
                                       (ppowerlevel[idx1] << 24);
                }
+
                if (rtlefuse->eeprom_regulatory == 0) {
                        tmpval =
-                           (rtlphy->mcs_offset[0][6]) +
-                           (rtlphy->mcs_offset[0][7] << 8);
+                           (rtlphy->mcs_txpwrlevel_origoffset[0][6]) +
+                           (rtlphy->mcs_txpwrlevel_origoffset[0][7] << 8);
                        tx_agc[RF90_PATH_A] += tmpval;
 
-                       tmpval = (rtlphy->mcs_offset[0][14]) +
-                                (rtlphy->mcs_offset[0][15] <<
+                       tmpval = (rtlphy->mcs_txpwrlevel_origoffset[0][14]) +
+                                (rtlphy->mcs_txpwrlevel_origoffset[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++) {
        tmpval = tx_agc[RF90_PATH_A] & 0xff;
        rtl_set_bbreg(hw, RTXAGC_A_CCK1_MCS32, MASKBYTE1, tmpval);
 
-       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                "CCK PWR 1M (rf-A) = 0x%x (reg 0x%x)\n", 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;
 
+       /*tmpval = tmpval & 0xff00ffff;*/
+
        rtl_set_bbreg(hw, RTXAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
 
-       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                "CCK PWR 2~11M (rf-A) = 0x%x (reg 0x%x)\n", 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);
 
-       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                "CCK PWR 11M (rf-B) = 0x%x (reg 0x%x)\n", 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);
 
-       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                "CCK PWR 1~5.5M (rf-B) = 0x%x (reg 0x%x)\n", 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);
 }
 
                powerbase0 = (powerbase0 << 24) | (powerbase0 << 16) |
                    (powerbase0 << 8) | powerbase0;
                *(ofdmbase + i) = powerbase0;
-               RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                        " [OFDM power base index rf(%c) = 0x%x]\n",
+               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                       " [OFDM power base index rf(%c) = 0x%x]\n",
                         ((i == 0) ? 'A' : 'B'), *(ofdmbase + i));
        }
 
                        powerlevel[i] = ppowerlevel_bw20[i];
                else
                        powerlevel[i] = ppowerlevel_bw40[i];
+
                powerbase1 = powerlevel[i];
                powerbase1 = (powerbase1 << 24) | (powerbase1 << 16) |
                             (powerbase1 << 8) | powerbase1;
 
                *(mcsbase + i) = powerbase1;
 
-               RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
+               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
                        " [MCS power base index rf(%c) = 0x%x]\n",
-                       ((i == 0) ? 'A' : 'B'), *(mcsbase + i));
+                        ((i == 0) ? 'A' : 'B'), *(mcsbase + i));
        }
 }
 
-static void txpwr_by_regulatory(struct ieee80211_hw *hw, u8 channel, u8 index,
-                               u32 *powerbase0, u32 *powerbase1,
-                               u32 *p_outwriteval)
+static void _rtl8723be_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];
-       u8 pwr_diff = 0, customer_pwr_diff;
+       u8 i, chnlgroup = 0, pwr_diff_limit[4], pwr_diff = 0, customer_pwr_diff;
        u32 writeval, customer_limit, rf;
 
        for (rf = 0; rf < 2; rf++) {
                        chnlgroup = 0;
 
                        writeval =
-                           rtlphy->mcs_offset[chnlgroup][index + (rf ? 8 : 0)]
+                           rtlphy->mcs_txpwrlevel_origoffset[chnlgroup][index +
+                                                               (rf ? 8 : 0)]
                            + ((index < 2) ? powerbase0[rf] : powerbase1[rf]);
 
-                       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                                "RTK better performance, "
-                                "writeval(%c) = 0x%x\n",
-                                ((rf == 0) ? 'A' : 'B'), writeval);
+                       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) {
                                else if (channel == 14)
                                        chnlgroup = 5;
                        }
-                       writeval = rtlphy->mcs_offset[chnlgroup]
+
+                       writeval =
+                           rtlphy->mcs_txpwrlevel_origoffset[chnlgroup]
                            [index + (rf ? 8 : 0)] + ((index < 2) ?
                                                      powerbase0[rf] :
                                                      powerbase1[rf]);
 
-                       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                                "Realtek regulatory, 20MHz, "
-                                "writeval(%c) = 0x%x\n",
-                                ((rf == 0) ? 'A' : 'B'), writeval);
+                       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]);
 
-                       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                                "Better regulatory, "
-                                "writeval(%c) = 0x%x\n",
-                                ((rf == 0) ? 'A' : 'B'), writeval);
+                       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) {
-                               RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                                        "customer's limit, 40MHz "
-                                        "rf(%c) = 0x%x\n",
-                                        ((rf == 0) ? 'A' : 'B'),
-                                        rtlefuse->pwrgroup_ht40[rf]
-                                        [channel-1]);
+                               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 {
-                               RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                                        "customer's limit, 20MHz "
-                                        "rf(%c) = 0x%x\n",
-                                        ((rf == 0) ? 'A' : 'B'),
-                                        rtlefuse->pwrgroup_ht20[rf]
-                                        [channel-1]);
+                               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                                       "customer's limit, 20MHz rf(%c) = 0x%x\n",
+                                       ((rf == 0) ? 'A' : 'B'),
+                                       rtlefuse->pwrgroup_ht20
+                                       [rf][channel - 1]);
                        }
 
                        if (index < 2)
 
                        for (i = 0; i < 4; i++) {
                                pwr_diff_limit[i] =
-                                   (u8)((rtlphy->mcs_offset
-                                         [chnlgroup][index + (rf ? 8 : 0)] &
-                                         (0x7f << (i * 8))) >> (i * 8));
+                                   (u8)((rtlphy->mcs_txpwrlevel_origoffset
+                                          [chnlgroup][index + (rf ? 8 : 0)] &
+                                             (0x7f << (i * 8))) >> (i * 8));
 
                                        if (pwr_diff_limit[i] > pwr_diff)
                                                pwr_diff_limit[i] = pwr_diff;
                                         (pwr_diff_limit[1] << 8) |
                                         (pwr_diff_limit[0]);
 
-                       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
+                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
                                "Customer's limit rf(%c) = 0x%x\n",
-                               ((rf == 0) ? 'A' : 'B'), customer_limit);
+                                ((rf == 0) ? 'A' : 'B'), customer_limit);
 
                        writeval = customer_limit + ((index < 2) ?
                                                      powerbase0[rf] :
                                                      powerbase1[rf]);
 
-                       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                                "Customer, writeval rf(%c)= 0x%x\n",
+                       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]
+                           rtlphy->mcs_txpwrlevel_origoffset[chnlgroup]
                            [index + (rf ? 8 : 0)]
                            + ((index < 2) ? powerbase0[rf] : powerbase1[rf]);
 
-                       RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                                "RTK better performance, writeval "
-                                "rf(%c) = 0x%x\n",
-                                ((rf == 0) ? 'A' : 'B'), writeval);
+                       RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                               "RTK better performance, writeval rf(%c) = 0x%x\n",
+                               ((rf == 0) ? 'A' : 'B'), writeval);
                        break;
                }
 
 }
 
 static void _rtl8723be_write_ofdm_power_reg(struct ieee80211_hw *hw,
-                                        u8 index, u32 *value)
+                                        u8 index, u32 *pvalue)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u16 regoffset_a[6] = {
        u16 regoffset;
 
        for (rf = 0; rf < 2; rf++) {
-               writeval = value[rf];
+               writeval = pvalue[rf];
                for (i = 0; i < 4; i++) {
-                       pwr_val[i] = (u8) ((writeval & (0x7f <<
+                       pwr_val[i] = (u8)((writeval & (0x7f <<
                                                        (i * 8))) >> (i * 8));
 
                        if (pwr_val[i] > RF6052_MAX_TX_PWR)
                        regoffset = regoffset_b[index];
                rtl_set_bbreg(hw, regoffset, MASKDWORD, writeval);
 
-               RT_TRACE(rtlpriv, COMP_INIT, DBG_LOUD,
-                        "Set 0x%x = %08x\n", regoffset, writeval);
+               RTPRINT(rtlpriv, FPHY, PHY_TXPWR,
+                       "Set 0x%x = %08x\n", regoffset, writeval);
        }
 }
 
        rtl8723be_dm_txpower_track_adjust(hw, 1, &direction, &pwrtrac_value);
 
        for (index = 0; index < 6; index++) {
-               txpwr_by_regulatory(hw, channel, index, &powerbase0[0],
-                                   &powerbase1[0], &writeval[0]);
+               _rtl8723be_get_txpower_writeval_by_regulatory(hw,
+                                                             channel, index,
+                                                             &powerbase0[0],
+                                                             &powerbase1[0],
+                                                             &writeval[0]);
                if (direction == 1) {
                        writeval[0] += pwrtrac_value;
                        writeval[1] += pwrtrac_value;
                rtlphy->num_total_rfpath = 2;
 
        return _rtl8723be_phy_rf6052_config_parafile(hw);
+
 }
 
 static bool _rtl8723be_phy_rf6052_config_parafile(struct ieee80211_hw *hw)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_phy *rtlphy = &(rtlpriv->phy);
-       struct bb_reg_def *pphyreg;
        u32 u4_regvalue = 0;
        u8 rfpath;
        bool rtstatus = true;
+       struct bb_reg_def *pphyreg;
 
        for (rfpath = 0; rfpath < rtlphy->num_total_rfpath; rfpath++) {
                pphyreg = &rtlphy->phyreg_def[rfpath];
 
 #include "phy.h"
 #include "../rtl8723com/phy_common.h"
 #include "dm.h"
+#include "../rtl8723com/dm_common.h"
 #include "hw.h"
 #include "fw.h"
 #include "../rtl8723com/fw_common.h"
        rtlpriv->dm.thermalvalue = 0;
        rtlpci->transmit_config = CFENDFORM | BIT(15) | BIT(24) | BIT(25);
 
+       rtlpriv->phy.lck_inprogress = false;
+
        mac->ht_enable = true;
 
        /* compatible 5G band 88ce just 2.4G band & smsp */
 
        rtlpci->irq_mask[1] = (u32)(IMR_RXFOVW | 0);
 
+       rtlpci->sys_irq_mask = (u32)(HSIMR_PDN_INT_EN   |
+                                    HSIMR_RON_INT_EN   |
+                                    0);
+
        /* for debug level */
        rtlpriv->dbg.global_debuglevel = rtlpriv->cfg->mod_params->debug;
        /* for LPS & IPS */
        rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps;
        rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
        rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps;
+       rtlpci->msi_support = rtlpriv->cfg->mod_params->msi_support;
+       if (rtlpriv->cfg->mod_params->disable_watchdog)
+               pr_info("watchdog disabled\n");
        rtlpriv->psc.reg_fwctrl_lps = 3;
        rtlpriv->psc.reg_max_lps_awakeintvl = 5;
        /* for ASPM, you can close aspm through
        else if (rtlpriv->psc.reg_fwctrl_lps == 3)
                rtlpriv->psc.fwctrl_psmode = FW_PS_DTIM_MODE;
 
+       /*low power: Disable 32k */
+       rtlpriv->psc.low_power_enable = false;
+
+       rtlpriv->rtlhal.earlymode_enable = false;
+
        /* for firmware buf */
        rtlpriv->rtlhal.pfirmware = vzalloc(0x8000);
        if (!rtlpriv->rtlhal.pfirmware) {
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
-       if (rtlpriv->cfg->ops->get_btc_status())
-               rtlpriv->btcoexist.btc_ops->btc_halt_notify();
        if (rtlpriv->rtlhal.pfirmware) {
                vfree(rtlpriv->rtlhal.pfirmware);
                rtlpriv->rtlhal.pfirmware = NULL;
        .set_rfreg = rtl8723be_phy_set_rf_reg,
        .fill_h2c_cmd = rtl8723be_fill_h2c_cmd,
        .get_btc_status = rtl8723be_get_btc_status,
+       .rx_command_packet = rtl8723be_rx_command_packet,
        .is_fw_header = is_fw_header,
 };
 
        .inactiveps = true,
        .swctrl_lps = false,
        .fwctrl_lps = true,
-       .msi_support = false,
-       .debug = DBG_EMERG,
 };
 
 static struct rtl_hal_cfg rtl8723be_hal_cfg = {
        .maps[MAC_RCR_ACRC32] = ACRC32,
        .maps[MAC_RCR_ACF] = ACF,
        .maps[MAC_RCR_AAP] = AAP,
+       .maps[MAC_HIMR] = REG_HIMR,
+       .maps[MAC_HIMRE] = REG_HIMRE,
+       .maps[MAC_HSISR] = REG_HSISR,
 
        .maps[EFUSE_ACCESS] = REG_EFUSE_ACCESS,
 
        .maps[RTL_IMR_BCNDMAINT3] = IMR_BCNDMAINT3,
        .maps[RTL_IMR_BCNDMAINT2] = IMR_BCNDMAINT2,
        .maps[RTL_IMR_BCNDMAINT1] = IMR_BCNDMAINT1,
+/*     .maps[RTL_IMR_BCNDOK8] = IMR_BCNDOK8,     */   /*need check*/
        .maps[RTL_IMR_BCNDOK7] = IMR_BCNDOK7,
        .maps[RTL_IMR_BCNDOK6] = IMR_BCNDOK6,
        .maps[RTL_IMR_BCNDOK5] = IMR_BCNDOK5,
        .maps[RTL_IMR_BCNDOK3] = IMR_BCNDOK3,
        .maps[RTL_IMR_BCNDOK2] = IMR_BCNDOK2,
        .maps[RTL_IMR_BCNDOK1] = IMR_BCNDOK1,
+/*     .maps[RTL_IMR_TIMEOUT2] = IMR_TIMEOUT2,*/
+/*     .maps[RTL_IMR_TIMEOUT1] = IMR_TIMEOUT1,*/
 
        .maps[RTL_IMR_TXFOVW] = IMR_TXFOVW,
        .maps[RTL_IMR_PSTIMEOUT] = IMR_PSTIMEOUT,
        .maps[RTL_IMR_VIDOK] = IMR_VIDOK,
        .maps[RTL_IMR_VODOK] = IMR_VODOK,
        .maps[RTL_IMR_ROK] = IMR_ROK,
+       .maps[RTL_IMR_HSISR_IND] = IMR_HSISR_IND_ON_INT,
        .maps[RTL_IBSS_INT_MASKS] = (IMR_BCNDMAINT0 | IMR_TBDOK | IMR_TBDER),
 
        .maps[RTL_RC_CCK_RATE1M] = DESC92C_RATE1M,
        .maps[RTL_RC_HT_RATEMCS15] = DESC92C_RATEMCS15,
 };
 
-static const struct pci_device_id rtl8723be_pci_id[] = {
-       {RTL_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0xb723, rtl8723be_hal_cfg)},
+static struct pci_device_id rtl8723be_pci_ids[] = {
+       {RTL_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0xB723, rtl8723be_hal_cfg)},
        {},
 };
 
-MODULE_DEVICE_TABLE(pci, rtl8723be_pci_id);
+MODULE_DEVICE_TABLE(pci, rtl8723be_pci_ids);
 
 MODULE_AUTHOR("PageHe  <page_he@realsil.com.cn>");
 MODULE_AUTHOR("Realtek WlanFAE <wlanfae@realtek.com>");
 module_param_named(ips, rtl8723be_mod_params.inactiveps, bool, 0444);
 module_param_named(swlps, rtl8723be_mod_params.swctrl_lps, bool, 0444);
 module_param_named(fwlps, rtl8723be_mod_params.fwctrl_lps, bool, 0444);
-module_param_named(msi, rtl8723be_mod_params.msi_support, bool, 0444);
+module_param_named(disable_watchdog, rtl8723be_mod_params.disable_watchdog,
+                  bool, 0444);
 MODULE_PARM_DESC(swenc, "using hardware crypto (default 0 [hardware])\n");
 MODULE_PARM_DESC(ips, "using no link power save (default 1 is open)\n");
 MODULE_PARM_DESC(fwlps, "using linked fw control power save (default 1 is open)\n");
 MODULE_PARM_DESC(msi, "Set to 1 to use MSI interrupts mode (default 0)\n");
 MODULE_PARM_DESC(debug, "Set debug level (0-5) (default 0)");
+MODULE_PARM_DESC(disable_watchdog, "Set to 1 to disable the watchdog (default 0)\n");
 
 static SIMPLE_DEV_PM_OPS(rtlwifi_pm_ops, rtl_pci_suspend, rtl_pci_resume);
 
 static struct pci_driver rtl8723be_driver = {
        .name = KBUILD_MODNAME,
-       .id_table = rtl8723be_pci_id,
+       .id_table = rtl8723be_pci_ids,
        .probe = rtl_pci_probe,
        .remove = rtl_pci_disconnect,
-
        .driver.pm = &rtlwifi_pm_ops,
 };
 
 
 
 #include "table.h"
 u32 RTL8723BEPHY_REG_1TARRAY[] = {
-       0x800, 0x80040000,
-       0x804, 0x00000003,
-       0x808, 0x0000FC00,
-       0x80C, 0x0000000A,
-       0x810, 0x10001331,
-       0x814, 0x020C3D10,
-       0x818, 0x02200385,
-       0x81C, 0x00000000,
-       0x820, 0x01000100,
-       0x824, 0x00390204,
-       0x828, 0x00000000,
-       0x82C, 0x00000000,
-       0x830, 0x00000000,
-       0x834, 0x00000000,
-       0x838, 0x00000000,
-       0x83C, 0x00000000,
-       0x840, 0x00010000,
-       0x844, 0x00000000,
-       0x848, 0x00000000,
-       0x84C, 0x00000000,
-       0x850, 0x00000000,
-       0x854, 0x00000000,
-       0x858, 0x569A11A9,
-       0x85C, 0x01000014,
-       0x860, 0x66F60110,
-       0x864, 0x061F0649,
-       0x868, 0x00000000,
-       0x86C, 0x27272700,
-       0x870, 0x07000760,
-       0x874, 0x25004000,
-       0x878, 0x00000808,
-       0x87C, 0x00000000,
-       0x880, 0xB0000C1C,
-       0x884, 0x00000001,
-       0x888, 0x00000000,
-       0x88C, 0xCCC000C0,
-       0x890, 0x00000800,
-       0x894, 0xFFFFFFFE,
-       0x898, 0x40302010,
-       0x89C, 0x00706050,
-       0x900, 0x00000000,
-       0x904, 0x00000023,
-       0x908, 0x00000000,
-       0x90C, 0x81121111,
-       0x910, 0x00000002,
-       0x914, 0x00000201,
-       0x948, 0x00000000,
-       0xA00, 0x00D047C8,
-       0xA04, 0x80FF000C,
-       0xA08, 0x8C838300,
-       0xA0C, 0x2E7F120F,
-       0xA10, 0x9500BB78,
-       0xA14, 0x1114D028,
-       0xA18, 0x00881117,
-       0xA1C, 0x89140F00,
-       0xA20, 0x1A1B0000,
-       0xA24, 0x090E1317,
-       0xA28, 0x00000204,
-       0xA2C, 0x00D30000,
-       0xA70, 0x101FBF00,
-       0xA74, 0x00000007,
-       0xA78, 0x00000900,
-       0xA7C, 0x225B0606,
-       0xA80, 0x21806490,
-       0xB2C, 0x00000000,
-       0xC00, 0x48071D40,
-       0xC04, 0x03A05611,
-       0xC08, 0x000000E4,
-       0xC0C, 0x6C6C6C6C,
-       0xC10, 0x08800000,
-       0xC14, 0x40000100,
-       0xC18, 0x08800000,
-       0xC1C, 0x40000100,
-       0xC20, 0x00000000,
-       0xC24, 0x00000000,
-       0xC28, 0x00000000,
-       0xC2C, 0x00000000,
-       0xC30, 0x69E9AC44,
-       0xC34, 0x469652AF,
-       0xC38, 0x49795994,
-       0xC3C, 0x0A97971C,
-       0xC40, 0x1F7C403F,
-       0xC44, 0x000100B7,
-       0xC48, 0xEC020107,
-       0xC4C, 0x007F037F,
-       0xC50, 0x69553420,
-       0xC54, 0x43BC0094,
-       0xC58, 0x00023169,
-       0xC5C, 0x00250492,
-       0xC60, 0x00000000,
-       0xC64, 0x7112848B,
-       0xC68, 0x47C00BFF,
-       0xC6C, 0x00000036,
-       0xC70, 0x2C7F000D,
-       0xC74, 0x020610DB,
-       0xC78, 0x0000001F,
-       0xC7C, 0x00B91612,
-       0xC80, 0x390000E4,
-       0xC84, 0x20F60000,
-       0xC88, 0x40000100,
-       0xC8C, 0x20200000,
-       0xC90, 0x00020E1A,
-       0xC94, 0x00000000,
-       0xC98, 0x00020E1A,
-       0xC9C, 0x00007F7F,
-       0xCA0, 0x00000000,
-       0xCA4, 0x000300A0,
-       0xCA8, 0x00000000,
-       0xCAC, 0x00000000,
-       0xCB0, 0x00000000,
-       0xCB4, 0x00000000,
-       0xCB8, 0x00000000,
-       0xCBC, 0x28000000,
-       0xCC0, 0x00000000,
-       0xCC4, 0x00000000,
-       0xCC8, 0x00000000,
-       0xCCC, 0x00000000,
-       0xCD0, 0x00000000,
-       0xCD4, 0x00000000,
-       0xCD8, 0x64B22427,
-       0xCDC, 0x00766932,
-       0xCE0, 0x00222222,
-       0xCE4, 0x00000000,
-       0xCE8, 0x37644302,
-       0xCEC, 0x2F97D40C,
-       0xD00, 0x00000740,
-       0xD04, 0x40020401,
-       0xD08, 0x0000907F,
-       0xD0C, 0x20010201,
-       0xD10, 0xA0633333,
-       0xD14, 0x3333BC53,
-       0xD18, 0x7A8F5B6F,
-       0xD2C, 0xCC979975,
-       0xD30, 0x00000000,
-       0xD34, 0x80608000,
-       0xD38, 0x00000000,
-       0xD3C, 0x00127353,
-       0xD40, 0x00000000,
-       0xD44, 0x00000000,
-       0xD48, 0x00000000,
-       0xD4C, 0x00000000,
-       0xD50, 0x6437140A,
-       0xD54, 0x00000000,
-       0xD58, 0x00000282,
-       0xD5C, 0x30032064,
-       0xD60, 0x4653DE68,
-       0xD64, 0x04518A3C,
-       0xD68, 0x00002101,
-       0xD6C, 0x2A201C16,
-       0xD70, 0x1812362E,
-       0xD74, 0x322C2220,
-       0xD78, 0x000E3C24,
-       0xE00, 0x2D2D2D2D,
-       0xE04, 0x2D2D2D2D,
-       0xE08, 0x0390272D,
-       0xE10, 0x2D2D2D2D,
-       0xE14, 0x2D2D2D2D,
-       0xE18, 0x2D2D2D2D,
-       0xE1C, 0x2D2D2D2D,
-       0xE28, 0x00000000,
-       0xE30, 0x1000DC1F,
-       0xE34, 0x10008C1F,
-       0xE38, 0x02140102,
-       0xE3C, 0x681604C2,
-       0xE40, 0x01007C00,
-       0xE44, 0x01004800,
-       0xE48, 0xFB000000,
-       0xE4C, 0x000028D1,
-       0xE50, 0x1000DC1F,
-       0xE54, 0x10008C1F,
-       0xE58, 0x02140102,
-       0xE5C, 0x28160D05,
-       0xE60, 0x00000008,
-       0xE68, 0x001B2556,
-       0xE6C, 0x00C00096,
-       0xE70, 0x00C00096,
-       0xE74, 0x01000056,
-       0xE78, 0x01000014,
-       0xE7C, 0x01000056,
-       0xE80, 0x01000014,
-       0xE84, 0x00C00096,
-       0xE88, 0x01000056,
-       0xE8C, 0x00C00096,
-       0xED0, 0x00C00096,
-       0xED4, 0x00C00096,
-       0xED8, 0x00C00096,
-       0xEDC, 0x000000D6,
-       0xEE0, 0x000000D6,
-       0xEEC, 0x01C00016,
-       0xF14, 0x00000003,
-       0xF4C, 0x00000000,
-       0xF00, 0x00000300,
-       0x820, 0x01000100,
-       0x800, 0x83040000,
+               0x800, 0x80040000,
+               0x804, 0x00000003,
+               0x808, 0x0000FC00,
+               0x80C, 0x0000000A,
+               0x810, 0x10001331,
+               0x814, 0x020C3D10,
+               0x818, 0x02200385,
+               0x81C, 0x00000000,
+               0x820, 0x01000100,
+               0x824, 0x00390204,
+               0x828, 0x00000000,
+               0x82C, 0x00000000,
+               0x830, 0x00000000,
+               0x834, 0x00000000,
+               0x838, 0x00000000,
+               0x83C, 0x00000000,
+               0x840, 0x00010000,
+               0x844, 0x00000000,
+               0x848, 0x00000000,
+               0x84C, 0x00000000,
+               0x850, 0x00000000,
+               0x854, 0x00000000,
+               0x858, 0x569A11A9,
+               0x85C, 0x01000014,
+               0x860, 0x66F60110,
+               0x864, 0x061F0649,
+               0x868, 0x00000000,
+               0x86C, 0x27272700,
+               0x870, 0x07000760,
+               0x874, 0x25004000,
+               0x878, 0x00000808,
+               0x87C, 0x00000000,
+               0x880, 0xB0000C1C,
+               0x884, 0x00000001,
+               0x888, 0x00000000,
+               0x88C, 0xCCC000C0,
+               0x890, 0x00000800,
+               0x894, 0xFFFFFFFE,
+               0x898, 0x40302010,
+               0x89C, 0x00706050,
+               0x900, 0x00000000,
+               0x904, 0x00000023,
+               0x908, 0x00000000,
+               0x90C, 0x81121111,
+               0x910, 0x00000002,
+               0x914, 0x00000201,
+               0x948, 0x00000280,
+               0xA00, 0x00D047C8,
+               0xA04, 0x80FF000C,
+               0xA08, 0x8C838300,
+               0xA0C, 0x2E7F120F,
+               0xA10, 0x9500BB78,
+               0xA14, 0x1114D028,
+               0xA18, 0x00881117,
+               0xA1C, 0x89140F00,
+               0xA20, 0x1A1B0000,
+               0xA24, 0x090E1317,
+               0xA28, 0x00000204,
+               0xA2C, 0x00D30000,
+               0xA70, 0x101FBF00,
+               0xA74, 0x00000007,
+               0xA78, 0x00000900,
+               0xA7C, 0x225B0606,
+               0xA80, 0x21806490,
+               0xB2C, 0x00000000,
+               0xC00, 0x48071D40,
+               0xC04, 0x03A05611,
+               0xC08, 0x000000E4,
+               0xC0C, 0x6C6C6C6C,
+               0xC10, 0x08800000,
+               0xC14, 0x40000100,
+               0xC18, 0x08800000,
+               0xC1C, 0x40000100,
+               0xC20, 0x00000000,
+               0xC24, 0x00000000,
+               0xC28, 0x00000000,
+               0xC2C, 0x00000000,
+               0xC30, 0x69E9AC44,
+               0xC34, 0x469652AF,
+               0xC38, 0x49795994,
+               0xC3C, 0x0A97971C,
+               0xC40, 0x1F7C403F,
+               0xC44, 0x000100B7,
+               0xC48, 0xEC020107,
+               0xC4C, 0x007F037F,
+               0xC50, 0x69553420,
+               0xC54, 0x43BC0094,
+               0xC58, 0x00023169,
+               0xC5C, 0x00250492,
+               0xC60, 0x00000000,
+               0xC64, 0x7112848B,
+               0xC68, 0x47C00BFF,
+               0xC6C, 0x00000036,
+               0xC70, 0x2C7F000D,
+               0xC74, 0x020610DB,
+               0xC78, 0x0000001F,
+               0xC7C, 0x00B91612,
+               0xC80, 0x390000E4,
+               0xC84, 0x20F60000,
+               0xC88, 0x40000100,
+               0xC8C, 0x20200000,
+               0xC90, 0x00020E1A,
+               0xC94, 0x00000000,
+               0xC98, 0x00020E1A,
+               0xC9C, 0x00007F7F,
+               0xCA0, 0x00000000,
+               0xCA4, 0x000300A0,
+               0xCA8, 0x00000000,
+               0xCAC, 0x00000000,
+               0xCB0, 0x00000000,
+               0xCB4, 0x00000000,
+               0xCB8, 0x00000000,
+               0xCBC, 0x28000000,
+               0xCC0, 0x00000000,
+               0xCC4, 0x00000000,
+               0xCC8, 0x00000000,
+               0xCCC, 0x00000000,
+               0xCD0, 0x00000000,
+               0xCD4, 0x00000000,
+               0xCD8, 0x64B22427,
+               0xCDC, 0x00766932,
+               0xCE0, 0x00222222,
+               0xCE4, 0x00000000,
+               0xCE8, 0x37644302,
+               0xCEC, 0x2F97D40C,
+               0xD00, 0x00000740,
+               0xD04, 0x40020401,
+               0xD08, 0x0000907F,
+               0xD0C, 0x20010201,
+               0xD10, 0xA0633333,
+               0xD14, 0x3333BC53,
+               0xD18, 0x7A8F5B6F,
+               0xD2C, 0xCC979975,
+               0xD30, 0x00000000,
+               0xD34, 0x80608000,
+               0xD38, 0x00000000,
+               0xD3C, 0x00127353,
+               0xD40, 0x00000000,
+               0xD44, 0x00000000,
+               0xD48, 0x00000000,
+               0xD4C, 0x00000000,
+               0xD50, 0x6437140A,
+               0xD54, 0x00000000,
+               0xD58, 0x00000282,
+               0xD5C, 0x30032064,
+               0xD60, 0x4653DE68,
+               0xD64, 0x04518A3C,
+               0xD68, 0x00002101,
+               0xD6C, 0x2A201C16,
+               0xD70, 0x1812362E,
+               0xD74, 0x322C2220,
+               0xD78, 0x000E3C24,
+               0xE00, 0x2D2D2D2D,
+               0xE04, 0x2D2D2D2D,
+               0xE08, 0x0390272D,
+               0xE10, 0x2D2D2D2D,
+               0xE14, 0x2D2D2D2D,
+               0xE18, 0x2D2D2D2D,
+               0xE1C, 0x2D2D2D2D,
+               0xE28, 0x00000000,
+               0xE30, 0x1000DC1F,
+               0xE34, 0x10008C1F,
+               0xE38, 0x02140102,
+               0xE3C, 0x681604C2,
+               0xE40, 0x01007C00,
+               0xE44, 0x01004800,
+               0xE48, 0xFB000000,
+               0xE4C, 0x000028D1,
+               0xE50, 0x1000DC1F,
+               0xE54, 0x10008C1F,
+               0xE58, 0x02140102,
+               0xE5C, 0x28160D05,
+               0xE60, 0x00000008,
+               0xE68, 0x001B2556,
+               0xE6C, 0x00C00096,
+               0xE70, 0x00C00096,
+               0xE74, 0x01000056,
+               0xE78, 0x01000014,
+               0xE7C, 0x01000056,
+               0xE80, 0x01000014,
+               0xE84, 0x00C00096,
+               0xE88, 0x01000056,
+               0xE8C, 0x00C00096,
+               0xED0, 0x00C00096,
+               0xED4, 0x00C00096,
+               0xED8, 0x00C00096,
+               0xEDC, 0x000000D6,
+               0xEE0, 0x000000D6,
+               0xEEC, 0x01C00016,
+               0xF14, 0x00000003,
+               0xF4C, 0x00000000,
+               0xF00, 0x00000300,
+               0x820, 0x01000100,
+               0x800, 0x83040000,
+
 };
 
 u32 RTL8723BEPHY_REG_ARRAY_PG[] = {
 };
 
 u32 RTL8723BE_RADIOA_1TARRAY[] = {
-       0x000, 0x00010000,
-       0x0B0, 0x000DFFE0,
-       0x0FE, 0x00000000,
-       0x0FE, 0x00000000,
-       0x0FE, 0x00000000,
-       0x0B1, 0x00000018,
-       0x0FE, 0x00000000,
-       0x0FE, 0x00000000,
-       0x0FE, 0x00000000,
-       0x0B2, 0x00084C00,
-       0x0B5, 0x0000D2CC,
-       0x0B6, 0x000925AA,
-       0x0B7, 0x00000010,
-       0x0B8, 0x0000907F,
-       0x05C, 0x00000002,
-       0x07C, 0x00000002,
-       0x07E, 0x00000005,
-       0x08B, 0x0006FC00,
-       0x0B0, 0x000FF9F0,
-       0x01C, 0x000739D2,
-       0x01E, 0x00000000,
-       0x0DF, 0x00000780,
-       0x050, 0x00067435,
-       0x051, 0x0006B04E,
-       0x052, 0x000007D2,
-       0x053, 0x00000000,
-       0x054, 0x00050400,
-       0x055, 0x0004026E,
-       0x0DD, 0x0000004C,
-       0x070, 0x00067435,
-       0x071, 0x0006B04E,
-       0x072, 0x000007D2,
-       0x073, 0x00000000,
-       0x074, 0x00050400,
-       0x075, 0x0004026E,
-       0x0EF, 0x00000100,
-       0x034, 0x0000ADD7,
-       0x035, 0x00005C00,
-       0x034, 0x00009DD4,
-       0x035, 0x00005000,
-       0x034, 0x00008DD1,
-       0x035, 0x00004400,
-       0x034, 0x00007DCE,
-       0x035, 0x00003800,
-       0x034, 0x00006CD1,
-       0x035, 0x00004400,
-       0x034, 0x00005CCE,
-       0x035, 0x00003800,
-       0x034, 0x000048CE,
-       0x035, 0x00004400,
-       0x034, 0x000034CE,
-       0x035, 0x00003800,
-       0x034, 0x00002451,
-       0x035, 0x00004400,
-       0x034, 0x0000144E,
-       0x035, 0x00003800,
-       0x034, 0x00000051,
-       0x035, 0x00004400,
-       0x0EF, 0x00000000,
-       0x0EF, 0x00000100,
-       0x0ED, 0x00000010,
-       0x044, 0x0000ADD7,
-       0x044, 0x00009DD4,
-       0x044, 0x00008DD1,
-       0x044, 0x00007DCE,
-       0x044, 0x00006CC1,
-       0x044, 0x00005CCE,
-       0x044, 0x000044D1,
-       0x044, 0x000034CE,
-       0x044, 0x00002451,
-       0x044, 0x0000144E,
-       0x044, 0x00000051,
-       0x0EF, 0x00000000,
-       0x0ED, 0x00000000,
-       0x0EF, 0x00002000,
-       0x03B, 0x000380EF,
-       0x03B, 0x000302FE,
-       0x03B, 0x00028CE6,
-       0x03B, 0x000200BC,
-       0x03B, 0x000188A5,
-       0x03B, 0x00010FBC,
-       0x03B, 0x00008F71,
-       0x03B, 0x00000900,
-       0x0EF, 0x00000000,
-       0x0ED, 0x00000001,
-       0x040, 0x000380EF,
-       0x040, 0x000302FE,
-       0x040, 0x00028CE6,
-       0x040, 0x000200BC,
-       0x040, 0x000188A5,
-       0x040, 0x00010FBC,
-       0x040, 0x00008F71,
-       0x040, 0x00000900,
-       0x0ED, 0x00000000,
-       0x082, 0x00080000,
-       0x083, 0x00008000,
-       0x084, 0x00048D80,
-       0x085, 0x00068000,
-       0x0A2, 0x00080000,
-       0x0A3, 0x00008000,
-       0x0A4, 0x00048D80,
-       0x0A5, 0x00068000,
-       0x000, 0x00033D80,
+               0x000, 0x00010000,
+               0x0B0, 0x000DFFE0,
+               0x0FE, 0x00000000,
+               0x0FE, 0x00000000,
+               0x0FE, 0x00000000,
+               0x0B1, 0x00000018,
+               0x0FE, 0x00000000,
+               0x0FE, 0x00000000,
+               0x0FE, 0x00000000,
+               0x0B2, 0x00084C00,
+               0x0B5, 0x0000D2CC,
+               0x0B6, 0x000925AA,
+               0x0B7, 0x00000010,
+               0x0B8, 0x0000907F,
+               0x05C, 0x00000002,
+               0x07C, 0x00000002,
+               0x07E, 0x00000005,
+               0x08B, 0x0006FC00,
+               0x0B0, 0x000FF9F0,
+               0x01C, 0x000739D2,
+               0x01E, 0x00000000,
+               0x0DF, 0x00000780,
+               0x050, 0x00067435,
+               0x051, 0x0006B04E,
+               0x052, 0x000007D2,
+               0x053, 0x00000000,
+               0x054, 0x00050400,
+               0x055, 0x0004026E,
+               0x0DD, 0x0000004C,
+               0x070, 0x00067435,
+               0x071, 0x0006B04E,
+               0x072, 0x000007D2,
+               0x073, 0x00000000,
+               0x074, 0x00050400,
+               0x075, 0x0004026E,
+               0x0EF, 0x00000100,
+               0x034, 0x0000ADD7,
+               0x035, 0x00005C00,
+               0x034, 0x00009DD4,
+               0x035, 0x00005000,
+               0x034, 0x00008DD1,
+               0x035, 0x00004400,
+               0x034, 0x00007DCE,
+               0x035, 0x00003800,
+               0x034, 0x00006CD1,
+               0x035, 0x00004400,
+               0x034, 0x00005CCE,
+               0x035, 0x00003800,
+               0x034, 0x000048CE,
+               0x035, 0x00004400,
+               0x034, 0x000034CE,
+               0x035, 0x00003800,
+               0x034, 0x00002451,
+               0x035, 0x00004400,
+               0x034, 0x0000144E,
+               0x035, 0x00003800,
+               0x034, 0x00000051,
+               0x035, 0x00004400,
+               0x0EF, 0x00000000,
+               0x0EF, 0x00000100,
+               0x0ED, 0x00000010,
+               0x044, 0x0000ADD7,
+               0x044, 0x00009DD4,
+               0x044, 0x00008DD1,
+               0x044, 0x00007DCE,
+               0x044, 0x00006CC1,
+               0x044, 0x00005CCE,
+               0x044, 0x000044D1,
+               0x044, 0x000034CE,
+               0x044, 0x00002451,
+               0x044, 0x0000144E,
+               0x044, 0x00000051,
+               0x0EF, 0x00000000,
+               0x0ED, 0x00000000,
+               0x0EF, 0x00002000,
+               0x03B, 0x000380EF,
+               0x03B, 0x000302FE,
+               0x03B, 0x00028CE6,
+               0x03B, 0x000200BC,
+               0x03B, 0x000188A5,
+               0x03B, 0x00010FBC,
+               0x03B, 0x00008F71,
+               0x03B, 0x00000900,
+               0x0EF, 0x00000000,
+               0x0ED, 0x00000001,
+               0x040, 0x000380EF,
+               0x040, 0x000302FE,
+               0x040, 0x00028CE6,
+               0x040, 0x000200BC,
+               0x040, 0x000188A5,
+               0x040, 0x00010FBC,
+               0x040, 0x00008F71,
+               0x040, 0x00000900,
+               0x0ED, 0x00000000,
+               0x082, 0x00080000,
+               0x083, 0x00008000,
+               0x084, 0x00048D80,
+               0x085, 0x00068000,
+               0x0A2, 0x00080000,
+               0x0A3, 0x00008000,
+               0x0A4, 0x00048D80,
+               0x0A5, 0x00068000,
+               0x000, 0x00033D80,
+
 };
 
 u32 RTL8723BEMAC_1T_ARRAY[] = {
-       0x02F, 0x00000030,
-       0x035, 0x00000000,
-       0x428, 0x0000000A,
-       0x429, 0x00000010,
-       0x430, 0x00000000,
-       0x431, 0x00000000,
-       0x432, 0x00000000,
-       0x433, 0x00000001,
-       0x434, 0x00000004,
-       0x435, 0x00000005,
-       0x436, 0x00000007,
-       0x437, 0x00000008,
-       0x43C, 0x00000004,
-       0x43D, 0x00000005,
-       0x43E, 0x00000007,
-       0x43F, 0x00000008,
-       0x440, 0x0000005D,
-       0x441, 0x00000001,
-       0x442, 0x00000000,
-       0x444, 0x00000010,
-       0x445, 0x00000000,
-       0x446, 0x00000000,
-       0x447, 0x00000000,
-       0x448, 0x00000000,
-       0x449, 0x000000F0,
-       0x44A, 0x0000000F,
-       0x44B, 0x0000003E,
-       0x44C, 0x00000010,
-       0x44D, 0x00000000,
-       0x44E, 0x00000000,
-       0x44F, 0x00000000,
-       0x450, 0x00000000,
-       0x451, 0x000000F0,
-       0x452, 0x0000000F,
-       0x453, 0x00000000,
-       0x456, 0x0000005E,
-       0x460, 0x00000066,
-       0x461, 0x00000066,
-       0x4C8, 0x000000FF,
-       0x4C9, 0x00000008,
-       0x4CC, 0x000000FF,
-       0x4CD, 0x000000FF,
-       0x4CE, 0x00000001,
-       0x500, 0x00000026,
-       0x501, 0x000000A2,
-       0x502, 0x0000002F,
-       0x503, 0x00000000,
-       0x504, 0x00000028,
-       0x505, 0x000000A3,
-       0x506, 0x0000005E,
-       0x507, 0x00000000,
-       0x508, 0x0000002B,
-       0x509, 0x000000A4,
-       0x50A, 0x0000005E,
-       0x50B, 0x00000000,
-       0x50C, 0x0000004F,
-       0x50D, 0x000000A4,
-       0x50E, 0x00000000,
-       0x50F, 0x00000000,
-       0x512, 0x0000001C,
-       0x514, 0x0000000A,
-       0x516, 0x0000000A,
-       0x525, 0x0000004F,
-       0x550, 0x00000010,
-       0x551, 0x00000010,
-       0x559, 0x00000002,
-       0x55C, 0x00000050,
-       0x55D, 0x000000FF,
-       0x605, 0x00000030,
-       0x608, 0x0000000E,
-       0x609, 0x0000002A,
-       0x620, 0x000000FF,
-       0x621, 0x000000FF,
-       0x622, 0x000000FF,
-       0x623, 0x000000FF,
-       0x624, 0x000000FF,
-       0x625, 0x000000FF,
-       0x626, 0x000000FF,
-       0x627, 0x000000FF,
-       0x638, 0x00000050,
-       0x63C, 0x0000000A,
-       0x63D, 0x0000000A,
-       0x63E, 0x0000000E,
-       0x63F, 0x0000000E,
-       0x640, 0x00000040,
-       0x642, 0x00000040,
-       0x643, 0x00000000,
-       0x652, 0x000000C8,
-       0x66E, 0x00000005,
-       0x700, 0x00000021,
-       0x701, 0x00000043,
-       0x702, 0x00000065,
-       0x703, 0x00000087,
-       0x708, 0x00000021,
-       0x709, 0x00000043,
-       0x70A, 0x00000065,
-       0x70B, 0x00000087,
+               0x02F, 0x00000030,
+               0x035, 0x00000000,
+               0x067, 0x00000020,
+               0x428, 0x0000000A,
+               0x429, 0x00000010,
+               0x430, 0x00000000,
+               0x431, 0x00000000,
+               0x432, 0x00000000,
+               0x433, 0x00000001,
+               0x434, 0x00000004,
+               0x435, 0x00000005,
+               0x436, 0x00000007,
+               0x437, 0x00000008,
+               0x43C, 0x00000004,
+               0x43D, 0x00000005,
+               0x43E, 0x00000007,
+               0x43F, 0x00000008,
+               0x440, 0x0000005D,
+               0x441, 0x00000001,
+               0x442, 0x00000000,
+               0x444, 0x00000010,
+               0x445, 0x00000000,
+               0x446, 0x00000000,
+               0x447, 0x00000000,
+               0x448, 0x00000000,
+               0x449, 0x000000F0,
+               0x44A, 0x0000000F,
+               0x44B, 0x0000003E,
+               0x44C, 0x00000010,
+               0x44D, 0x00000000,
+               0x44E, 0x00000000,
+               0x44F, 0x00000000,
+               0x450, 0x00000000,
+               0x451, 0x000000F0,
+               0x452, 0x0000000F,
+               0x453, 0x00000000,
+               0x456, 0x0000005E,
+               0x460, 0x00000066,
+               0x461, 0x00000066,
+               0x4C8, 0x000000FF,
+               0x4C9, 0x00000008,
+               0x4CC, 0x000000FF,
+               0x4CD, 0x000000FF,
+               0x4CE, 0x00000001,
+               0x500, 0x00000026,
+               0x501, 0x000000A2,
+               0x502, 0x0000002F,
+               0x503, 0x00000000,
+               0x504, 0x00000028,
+               0x505, 0x000000A3,
+               0x506, 0x0000005E,
+               0x507, 0x00000000,
+               0x508, 0x0000002B,
+               0x509, 0x000000A4,
+               0x50A, 0x0000005E,
+               0x50B, 0x00000000,
+               0x50C, 0x0000004F,
+               0x50D, 0x000000A4,
+               0x50E, 0x00000000,
+               0x50F, 0x00000000,
+               0x512, 0x0000001C,
+               0x514, 0x0000000A,
+               0x516, 0x0000000A,
+               0x525, 0x0000004F,
+               0x550, 0x00000010,
+               0x551, 0x00000010,
+               0x559, 0x00000002,
+               0x55C, 0x00000050,
+               0x55D, 0x000000FF,
+               0x605, 0x00000030,
+               0x608, 0x0000000E,
+               0x609, 0x0000002A,
+               0x620, 0x000000FF,
+               0x621, 0x000000FF,
+               0x622, 0x000000FF,
+               0x623, 0x000000FF,
+               0x624, 0x000000FF,
+               0x625, 0x000000FF,
+               0x626, 0x000000FF,
+               0x627, 0x000000FF,
+               0x638, 0x00000050,
+               0x63C, 0x0000000A,
+               0x63D, 0x0000000A,
+               0x63E, 0x0000000E,
+               0x63F, 0x0000000E,
+               0x640, 0x00000040,
+               0x642, 0x00000040,
+               0x643, 0x00000000,
+               0x652, 0x000000C8,
+               0x66E, 0x00000005,
+               0x700, 0x00000021,
+               0x701, 0x00000043,
+               0x702, 0x00000065,
+               0x703, 0x00000087,
+               0x708, 0x00000021,
+               0x709, 0x00000043,
+               0x70A, 0x00000065,
+               0x70B, 0x00000087,
+
 };
 
 u32 RTL8723BEAGCTAB_1TARRAY[] = {
-       0xC78, 0xFD000001,
-       0xC78, 0xFC010001,
-       0xC78, 0xFB020001,
-       0xC78, 0xFA030001,
-       0xC78, 0xF9040001,
-       0xC78, 0xF8050001,
-       0xC78, 0xF7060001,
-       0xC78, 0xF6070001,
-       0xC78, 0xF5080001,
-       0xC78, 0xF4090001,
-       0xC78, 0xF30A0001,
-       0xC78, 0xF20B0001,
-       0xC78, 0xF10C0001,
-       0xC78, 0xF00D0001,
-       0xC78, 0xEF0E0001,
-       0xC78, 0xEE0F0001,
-       0xC78, 0xED100001,
-       0xC78, 0xEC110001,
-       0xC78, 0xEB120001,
-       0xC78, 0xEA130001,
-       0xC78, 0xE9140001,
-       0xC78, 0xE8150001,
-       0xC78, 0xE7160001,
-       0xC78, 0xAA170001,
-       0xC78, 0xA9180001,
-       0xC78, 0xA8190001,
-       0xC78, 0xA71A0001,
-       0xC78, 0xA61B0001,
-       0xC78, 0xA51C0001,
-       0xC78, 0xA41D0001,
-       0xC78, 0xA31E0001,
-       0xC78, 0x671F0001,
-       0xC78, 0x66200001,
-       0xC78, 0x65210001,
-       0xC78, 0x64220001,
-       0xC78, 0x63230001,
-       0xC78, 0x62240001,
-       0xC78, 0x61250001,
-       0xC78, 0x47260001,
-       0xC78, 0x46270001,
-       0xC78, 0x45280001,
-       0xC78, 0x44290001,
-       0xC78, 0x432A0001,
-       0xC78, 0x422B0001,
-       0xC78, 0x292C0001,
-       0xC78, 0x282D0001,
-       0xC78, 0x272E0001,
-       0xC78, 0x262F0001,
-       0xC78, 0x25300001,
-       0xC78, 0x24310001,
-       0xC78, 0x09320001,
-       0xC78, 0x08330001,
-       0xC78, 0x07340001,
-       0xC78, 0x06350001,
-       0xC78, 0x05360001,
-       0xC78, 0x04370001,
-       0xC78, 0x03380001,
-       0xC78, 0x02390001,
-       0xC78, 0x013A0001,
-       0xC78, 0x003B0001,
-       0xC78, 0x003C0001,
-       0xC78, 0x003D0001,
-       0xC78, 0x003E0001,
-       0xC78, 0x003F0001,
-       0xC78, 0xFC400001,
-       0xC78, 0xFB410001,
-       0xC78, 0xFA420001,
-       0xC78, 0xF9430001,
-       0xC78, 0xF8440001,
-       0xC78, 0xF7450001,
-       0xC78, 0xF6460001,
-       0xC78, 0xF5470001,
-       0xC78, 0xF4480001,
-       0xC78, 0xF3490001,
-       0xC78, 0xF24A0001,
-       0xC78, 0xF14B0001,
-       0xC78, 0xF04C0001,
-       0xC78, 0xEF4D0001,
-       0xC78, 0xEE4E0001,
-       0xC78, 0xED4F0001,
-       0xC78, 0xEC500001,
-       0xC78, 0xEB510001,
-       0xC78, 0xEA520001,
-       0xC78, 0xE9530001,
-       0xC78, 0xE8540001,
-       0xC78, 0xE7550001,
-       0xC78, 0xE6560001,
-       0xC78, 0xE5570001,
-       0xC78, 0xAA580001,
-       0xC78, 0xA9590001,
-       0xC78, 0xA85A0001,
-       0xC78, 0xA75B0001,
-       0xC78, 0xA65C0001,
-       0xC78, 0xA55D0001,
-       0xC78, 0xA45E0001,
-       0xC78, 0x675F0001,
-       0xC78, 0x66600001,
-       0xC78, 0x65610001,
-       0xC78, 0x64620001,
-       0xC78, 0x63630001,
-       0xC78, 0x62640001,
-       0xC78, 0x61650001,
-       0xC78, 0x47660001,
-       0xC78, 0x46670001,
-       0xC78, 0x45680001,
-       0xC78, 0x44690001,
-       0xC78, 0x436A0001,
-       0xC78, 0x426B0001,
-       0xC78, 0x296C0001,
-       0xC78, 0x286D0001,
-       0xC78, 0x276E0001,
-       0xC78, 0x266F0001,
-       0xC78, 0x25700001,
-       0xC78, 0x24710001,
-       0xC78, 0x09720001,
-       0xC78, 0x08730001,
-       0xC78, 0x07740001,
-       0xC78, 0x06750001,
-       0xC78, 0x05760001,
-       0xC78, 0x04770001,
-       0xC78, 0x03780001,
-       0xC78, 0x02790001,
-       0xC78, 0x017A0001,
-       0xC78, 0x007B0001,
-       0xC78, 0x007C0001,
-       0xC78, 0x007D0001,
-       0xC78, 0x007E0001,
-       0xC78, 0x007F0001,
-       0xC50, 0x69553422,
-       0xC50, 0x69553420,
+               0xC78, 0xFD000001,
+               0xC78, 0xFC010001,
+               0xC78, 0xFB020001,
+               0xC78, 0xFA030001,
+               0xC78, 0xF9040001,
+               0xC78, 0xF8050001,
+               0xC78, 0xF7060001,
+               0xC78, 0xF6070001,
+               0xC78, 0xF5080001,
+               0xC78, 0xF4090001,
+               0xC78, 0xF30A0001,
+               0xC78, 0xF20B0001,
+               0xC78, 0xF10C0001,
+               0xC78, 0xF00D0001,
+               0xC78, 0xEF0E0001,
+               0xC78, 0xEE0F0001,
+               0xC78, 0xED100001,
+               0xC78, 0xEC110001,
+               0xC78, 0xEB120001,
+               0xC78, 0xEA130001,
+               0xC78, 0xE9140001,
+               0xC78, 0xE8150001,
+               0xC78, 0xE7160001,
+               0xC78, 0xAA170001,
+               0xC78, 0xA9180001,
+               0xC78, 0xA8190001,
+               0xC78, 0xA71A0001,
+               0xC78, 0xA61B0001,
+               0xC78, 0xA51C0001,
+               0xC78, 0xA41D0001,
+               0xC78, 0xA31E0001,
+               0xC78, 0x671F0001,
+               0xC78, 0x66200001,
+               0xC78, 0x65210001,
+               0xC78, 0x64220001,
+               0xC78, 0x63230001,
+               0xC78, 0x62240001,
+               0xC78, 0x61250001,
+               0xC78, 0x47260001,
+               0xC78, 0x46270001,
+               0xC78, 0x45280001,
+               0xC78, 0x44290001,
+               0xC78, 0x432A0001,
+               0xC78, 0x422B0001,
+               0xC78, 0x292C0001,
+               0xC78, 0x282D0001,
+               0xC78, 0x272E0001,
+               0xC78, 0x262F0001,
+               0xC78, 0x25300001,
+               0xC78, 0x24310001,
+               0xC78, 0x09320001,
+               0xC78, 0x08330001,
+               0xC78, 0x07340001,
+               0xC78, 0x06350001,
+               0xC78, 0x05360001,
+               0xC78, 0x04370001,
+               0xC78, 0x03380001,
+               0xC78, 0x02390001,
+               0xC78, 0x013A0001,
+               0xC78, 0x003B0001,
+               0xC78, 0x003C0001,
+               0xC78, 0x003D0001,
+               0xC78, 0x003E0001,
+               0xC78, 0x003F0001,
+               0xC78, 0xFC400001,
+               0xC78, 0xFB410001,
+               0xC78, 0xFA420001,
+               0xC78, 0xF9430001,
+               0xC78, 0xF8440001,
+               0xC78, 0xF7450001,
+               0xC78, 0xF6460001,
+               0xC78, 0xF5470001,
+               0xC78, 0xF4480001,
+               0xC78, 0xF3490001,
+               0xC78, 0xF24A0001,
+               0xC78, 0xF14B0001,
+               0xC78, 0xF04C0001,
+               0xC78, 0xEF4D0001,
+               0xC78, 0xEE4E0001,
+               0xC78, 0xED4F0001,
+               0xC78, 0xEC500001,
+               0xC78, 0xEB510001,
+               0xC78, 0xEA520001,
+               0xC78, 0xE9530001,
+               0xC78, 0xE8540001,
+               0xC78, 0xE7550001,
+               0xC78, 0xE6560001,
+               0xC78, 0xE5570001,
+               0xC78, 0xAA580001,
+               0xC78, 0xA9590001,
+               0xC78, 0xA85A0001,
+               0xC78, 0xA75B0001,
+               0xC78, 0xA65C0001,
+               0xC78, 0xA55D0001,
+               0xC78, 0xA45E0001,
+               0xC78, 0x675F0001,
+               0xC78, 0x66600001,
+               0xC78, 0x65610001,
+               0xC78, 0x64620001,
+               0xC78, 0x63630001,
+               0xC78, 0x62640001,
+               0xC78, 0x61650001,
+               0xC78, 0x47660001,
+               0xC78, 0x46670001,
+               0xC78, 0x45680001,
+               0xC78, 0x44690001,
+               0xC78, 0x436A0001,
+               0xC78, 0x426B0001,
+               0xC78, 0x296C0001,
+               0xC78, 0x286D0001,
+               0xC78, 0x276E0001,
+               0xC78, 0x266F0001,
+               0xC78, 0x25700001,
+               0xC78, 0x24710001,
+               0xC78, 0x09720001,
+               0xC78, 0x08730001,
+               0xC78, 0x07740001,
+               0xC78, 0x06750001,
+               0xC78, 0x05760001,
+               0xC78, 0x04770001,
+               0xC78, 0x03780001,
+               0xC78, 0x02790001,
+               0xC78, 0x017A0001,
+               0xC78, 0x007B0001,
+               0xC78, 0x007C0001,
+               0xC78, 0x007D0001,
+               0xC78, 0x007E0001,
+               0xC78, 0x007F0001,
+               0xC50, 0x69553422,
+               0xC50, 0x69553420,
+
 };
 
 extern u32 RTL8723BEPHY_REG_ARRAY_PG[];
 #define        RTL8723BE_RADIOA_1TARRAYLEN     206
 extern u32 RTL8723BE_RADIOA_1TARRAY[];
-#define RTL8723BEMAC_1T_ARRAYLEN       194
+#define RTL8723BEMAC_1T_ARRAYLEN       196
 extern u32 RTL8723BEMAC_1T_ARRAY[];
 #define RTL8723BEAGCTAB_1TARRAYLEN     260
 extern u32 RTL8723BEAGCTAB_1TARRAY[];
 
 #include "trx.h"
 #include "led.h"
 #include "dm.h"
+#include "fw.h"
 
 static u8 _rtl8723be_map_hwqueue_to_fwqueue(struct sk_buff *skb, u8 hw_queue)
 {
 static void _rtl8723be_query_rxphystatus(struct ieee80211_hw *hw,
                                         struct rtl_stats *pstatus, u8 *pdesc,
                                         struct rx_fwinfo_8723be *p_drvinfo,
-                                        bool packet_match_bssid,
-                                        bool packet_toself,
+                                        bool bpacket_match_bssid,
+                                        bool bpacket_toself,
                                         bool packet_beacon)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_ps_ctl *ppsc = rtl_psc(rtlpriv);
-       struct phy_sts_cck_8723e_t *cck_buf;
        struct phy_status_rpt *p_phystrpt = (struct phy_status_rpt *)p_drvinfo;
-       struct rtl_dm *rtldm = rtl_dm(rtl_priv(hw));
        char rx_pwr_all = 0, rx_pwr[4];
-       u8 rf_rx_num = 0, evm, pwdb_all;
+       u8 rf_rx_num = 0, evm, pwdb_all, pwdb_all_bt = 0;
        u8 i, max_spatial_stream;
        u32 rssi, total_rssi = 0;
        bool is_cck = pstatus->is_cck;
        u8 lan_idx, vga_idx;
 
        /* Record it for next packet processing */
-       pstatus->packet_matchbssid = packet_match_bssid;
-       pstatus->packet_toself = packet_toself;
+       pstatus->packet_matchbssid = bpacket_match_bssid;
+       pstatus->packet_toself = bpacket_toself;
        pstatus->packet_beacon = packet_beacon;
-       pstatus->rx_mimo_sig_qual[0] = -1;
-       pstatus->rx_mimo_sig_qual[1] = -1;
+       pstatus->rx_mimo_signalquality[0] = -1;
+       pstatus->rx_mimo_signalquality[1] = -1;
 
        if (is_cck) {
                u8 cck_highpwr;
                u8 cck_agc_rpt;
-               /* CCK Driver info Structure is not the same as OFDM packet. */
-               cck_buf = (struct phy_sts_cck_8723e_t *)p_drvinfo;
-               cck_agc_rpt = cck_buf->cck_agc_rpt;
 
-               /* (1)Hardware does not provide RSSI for CCK
-                * (2)PWDB, Average PWDB cacluated by
+               cck_agc_rpt = p_phystrpt->cck_agc_rpt_ofdm_cfosho_a;
+
+               /* (1)Hardware does not provide RSSI for CCK */
+               /* (2)PWDB, Average PWDB cacluated by
                 * hardware (for rate adaptive)
                 */
-               if (ppsc->rfpwr_state == ERFON)
-                       cck_highpwr = (u8) rtl_get_bbreg(hw,
-                                                      RFPGA0_XA_HSSIPARAMETER2,
-                                                      BIT(9));
-               else
-                       cck_highpwr = false;
+               cck_highpwr = (u8)rtl_get_bbreg(hw, RFPGA0_XA_HSSIPARAMETER2,
+                                                BIT(9));
 
                lan_idx = ((cck_agc_rpt & 0xE0) >> 5);
                vga_idx = (cck_agc_rpt & 0x1f);
+
                switch (lan_idx) {
-               case 7:
-                       if (vga_idx <= 27)/*VGA_idx = 27~2*/
-                               rx_pwr_all = -100 + 2 * (27 - vga_idx);
-                       else
-                               rx_pwr_all = -100;
-                       break;
-               case 6:/*VGA_idx = 2~0*/
-                       rx_pwr_all = -48 + 2 * (2 - vga_idx);
-                       break;
-               case 5:/*VGA_idx = 7~5*/
-                       rx_pwr_all = -42 + 2 * (7 - vga_idx);
-                       break;
-               case 4:/*VGA_idx = 7~4*/
-                       rx_pwr_all = -36 + 2 * (7 - vga_idx);
+               /* 46 53 73 95 201301231630 */
+               /* 46 53 77 99 201301241630 */
+               case 6:
+                       rx_pwr_all = -34 - (2 * vga_idx);
                        break;
-               case 3:/*VGA_idx = 7~0*/
-                       rx_pwr_all = -24 + 2 * (7 - vga_idx);
-                       break;
-               case 2:
-                       if (cck_highpwr)/*VGA_idx = 5~0*/
-                               rx_pwr_all = -12 + 2 * (5 - vga_idx);
-                       else
-                               rx_pwr_all = -6 + 2 * (5 - vga_idx);
+               case 4:
+                       rx_pwr_all = -14 - (2 * vga_idx);
                        break;
                case 1:
-                       rx_pwr_all = 8 - 2 * vga_idx;
+                       rx_pwr_all = 6 - (2 * vga_idx);
                        break;
                case 0:
-                       rx_pwr_all = 14 - 2 * vga_idx;
+                       rx_pwr_all = 16 - (2 * vga_idx);
                        break;
                default:
                        break;
                }
-               rx_pwr_all += 6;
+
                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;
-               if (!cck_highpwr) {
-                       if (pwdb_all >= 80)
-                               pwdb_all = ((pwdb_all - 80) << 1) +
-                                          ((pwdb_all - 80) >> 1) + 80;
-                       else if ((pwdb_all <= 78) && (pwdb_all >= 20))
-                               pwdb_all += 3;
-                       if (pwdb_all > 100)
-                               pwdb_all = 100;
-               }
 
                pstatus->rx_pwdb_all = pwdb_all;
+               pstatus->bt_rx_rssi_percentage = pwdb_all;
                pstatus->recvsignalpower = rx_pwr_all;
 
                /* (3) Get Signal Quality (EVM) */
-               if (packet_match_bssid) {
-                       u8 sq;
-
+               if (bpacket_match_bssid) {
+                       u8 sq, sq_rpt;
                        if (pstatus->rx_pwdb_all > 40) {
                                sq = 100;
                        } else {
-                               sq = cck_buf->sq_rpt;
-                               if (sq > 64)
+                               sq_rpt = p_phystrpt->cck_sig_qual_ofdm_pwdb_all;
+                               if (sq_rpt > 64)
                                        sq = 0;
-                               else if (sq < 20)
+                               else if (sq_rpt < 20)
                                        sq = 100;
                                else
-                                       sq = ((64 - sq) * 100) / 44;
+                                       sq = ((64 - sq_rpt) * 100) / 44;
                        }
-
                        pstatus->signalquality = sq;
-                       pstatus->rx_mimo_sig_qual[0] = sq;
-                       pstatus->rx_mimo_sig_qual[1] = -1;
+                       pstatus->rx_mimo_signalquality[0] = sq;
+                       pstatus->rx_mimo_signalquality[1] = -1;
                }
        } else {
-               rtlpriv->dm.rfpath_rxenable[0] = true;
-               rtlpriv->dm.rfpath_rxenable[1] = true;
-
                /* (1)Get RSSI for HT rate */
                for (i = RF90_PATH_A; i < RF6052_MAX_PATH; i++) {
                        /* we will judge RF RX path now. */
                        if (rtlpriv->dm.rfpath_rxenable[i])
                                rf_rx_num++;
 
-                       rx_pwr[i] = ((p_drvinfo->gain_trsw[i] & 0x3f)*2) - 110;
+                       rx_pwr[i] = ((p_phystrpt->path_agc[i].gain & 0x3f) * 2)
+                                   - 110;
 
+                       pstatus->rx_pwr[i] = rx_pwr[i];
                        /* Translate DBM to percentage. */
                        rssi = rtl_query_rxpwrpercentage(rx_pwr[i]);
                        total_rssi += rssi;
 
-                       /* Get Rx snr value in DB */
-                       rtlpriv->stats.rx_snr_db[i] =
-                                       (long)(p_drvinfo->rxsnr[i] / 2);
-
-                       /* Record Signal Strength for next packet */
-                       if (packet_match_bssid)
-                               pstatus->rx_mimo_signalstrength[i] = (u8) rssi;
+                       pstatus->rx_mimo_signalstrength[i] = (u8)rssi;
                }
 
-               /* (2)PWDB, Avg cacluated by hardware (for rate adaptive) */
-               rx_pwr_all = ((p_drvinfo->pwdb_all >> 1) & 0x7f) - 110;
+               /* (2)PWDB, Average PWDB cacluated by
+                * hardware (for rate adaptive)
+                */
+               rx_pwr_all = ((p_phystrpt->cck_sig_qual_ofdm_pwdb_all >> 1) &
+                            0x7f) - 110;
 
                pwdb_all = rtl_query_rxpwrpercentage(rx_pwr_all);
+               pwdb_all_bt = pwdb_all;
                pstatus->rx_pwdb_all = pwdb_all;
+               pstatus->bt_rx_rssi_percentage = pwdb_all_bt;
                pstatus->rxpower = rx_pwr_all;
                pstatus->recvsignalpower = rx_pwr_all;
 
                /* (3)EVM of HT rate */
-               if (pstatus->is_ht && pstatus->rate >= DESC92C_RATEMCS8 &&
+               if (pstatus->rate >= DESC92C_RATEMCS8 &&
                    pstatus->rate <= DESC92C_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]);
+                       evm = rtl_evm_db_to_percentage(
+                                               p_phystrpt->stream_rxevm[i]);
 
-                       if (packet_match_bssid) {
+                       if (bpacket_match_bssid) {
                                /* Fill value in RFD, Get the first
                                 * spatial stream only
                                 */
                                if (i == 0)
                                        pstatus->signalquality =
-                                                       (u8) (evm & 0xff);
-                               pstatus->rx_mimo_sig_qual[i] =
-                                                       (u8) (evm & 0xff);
+                                                       (u8)(evm & 0xff);
+                               pstatus->rx_mimo_signalquality[i] =
+                                                       (u8)(evm & 0xff);
                        }
                }
-               if (packet_match_bssid) {
+
+               if (bpacket_match_bssid) {
                        for (i = RF90_PATH_A; i <= RF90_PATH_B; i++)
                                rtl_priv(hw)->dm.cfo_tail[i] =
-                                       (char)p_phystrpt->path_cfotail[i];
+                                       (int)p_phystrpt->path_cfotail[i];
 
-                       rtl_priv(hw)->dm.packet_count++;
                        if (rtl_priv(hw)->dm.packet_count == 0xffffffff)
                                rtl_priv(hw)->dm.packet_count = 0;
+                       else
+                               rtl_priv(hw)->dm.packet_count++;
                }
        }
 
        else if (rf_rx_num != 0)
                pstatus->signalstrength = (u8)(rtl_signal_scale_mapping(hw,
                                                total_rssi /= rf_rx_num));
-       /*HW antenna diversity*/
-       rtldm->fat_table.antsel_rx_keep_0 = p_phystrpt->ant_sel;
-       rtldm->fat_table.antsel_rx_keep_1 = p_phystrpt->ant_sel_b;
-       rtldm->fat_table.antsel_rx_keep_2 = p_phystrpt->antsel_rx_keep_2;
 }
 
 static void _rtl8723be_translate_rx_signal_stuff(struct ieee80211_hw *hw,
        memcpy(pstatus->psaddr, psaddr, ETH_ALEN);
 
        packet_matchbssid = ((IEEE80211_FTYPE_CTL != type) &&
-            (!ether_addr_equal(mac->bssid, (fc & IEEE80211_FCTL_TODS) ?
-                               hdr->addr1 : (fc & IEEE80211_FCTL_FROMDS) ?
-                               hdr->addr2 : hdr->addr3)) &&
-                               (!pstatus->hwerror) &&
-                               (!pstatus->crc) && (!pstatus->icv));
+            (ether_addr_equal(mac->bssid, (fc & IEEE80211_FCTL_TODS) ?
+                                 hdr->addr1 : (fc & IEEE80211_FCTL_FROMDS) ?
+                                 hdr->addr2 : hdr->addr3)) &&
+                                 (!pstatus->hwerror) &&
+                                 (!pstatus->crc) && (!pstatus->icv));
 
        packet_toself = packet_matchbssid &&
-           (!ether_addr_equal(praddr, rtlefuse->dev_addr));
+           (ether_addr_equal(praddr, rtlefuse->dev_addr));
 
        /* YP: packet_beacon is not initialized,
         * this assignment is neccesary,
        struct ieee80211_hdr *hdr;
 
        u32 phystatus = GET_RX_DESC_PHYST(pdesc);
-       status->packet_report_type = (u8)GET_RX_STATUS_DESC_RPT_SEL(pdesc);
-       if (status->packet_report_type == TX_REPORT2)
-               status->length = (u16) GET_RX_RPT2_DESC_PKT_LEN(pdesc);
-       else
-               status->length = (u16) GET_RX_DESC_PKT_LEN(pdesc);
-       status->rx_drvinfo_size = (u8) GET_RX_DESC_DRV_INFO_SIZE(pdesc) *
+
+       status->length = (u16)GET_RX_DESC_PKT_LEN(pdesc);
+       status->rx_drvinfo_size = (u8)GET_RX_DESC_DRV_INFO_SIZE(pdesc) *
                                  RX_DRV_INFO_SIZE_UNIT;
-       status->rx_bufshift = (u8) (GET_RX_DESC_SHIFT(pdesc) & 0x03);
+       status->rx_bufshift = (u8)(GET_RX_DESC_SHIFT(pdesc) & 0x03);
        status->icv = (u16) GET_RX_DESC_ICV(pdesc);
        status->crc = (u16) GET_RX_DESC_CRC32(pdesc);
        status->hwerror = (status->crc | status->icv);
        status->decrypted = !GET_RX_DESC_SWDEC(pdesc);
-       status->rate = (u8) GET_RX_DESC_RXMCS(pdesc);
-       status->shortpreamble = (u16) GET_RX_DESC_SPLCP(pdesc);
-       status->isampdu = (bool) (GET_RX_DESC_PAGGR(pdesc) == 1);
-       status->isfirst_ampdu = (bool) (GET_RX_DESC_PAGGR(pdesc) == 1);
-       if (status->packet_report_type == NORMAL_RX)
-               status->timestamp_low = GET_RX_DESC_TSFL(pdesc);
-       status->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc);
+       status->rate = (u8)GET_RX_DESC_RXMCS(pdesc);
+       status->shortpreamble = (u16)GET_RX_DESC_SPLCP(pdesc);
+       status->isampdu = (bool)(GET_RX_DESC_PAGGR(pdesc) == 1);
+       status->isfirst_ampdu = (bool)(GET_RX_DESC_PAGGR(pdesc) == 1);
+       status->timestamp_low = GET_RX_DESC_TSFL(pdesc);
+       status->rx_is40Mhzpacket = (bool)GET_RX_DESC_BW(pdesc);
+       status->bandwidth = (u8)GET_RX_DESC_BW(pdesc);
+       status->macid = GET_RX_DESC_MACID(pdesc);
        status->is_ht = (bool)GET_RX_DESC_RXHT(pdesc);
 
-       status->is_cck = RTL8723E_RX_HAL_IS_CCK_RATE(status->rate);
+       status->is_cck = RX_HAL_IS_CCK_RATE(status->rate);
+
+       if (GET_RX_STATUS_DESC_RPT_SEL(pdesc))
+               status->packet_report_type = C2H_PACKET;
+       else
+               status->packet_report_type = NORMAL_RX;
+
 
-       status->macid = GET_RX_DESC_MACID(pdesc);
        if (GET_RX_STATUS_DESC_MAGIC_MATCH(pdesc))
                status->wake_match = BIT(2);
        else if (GET_RX_STATUS_DESC_MAGIC_MATCH(pdesc))
                status->wake_match = 0;
        if (status->wake_match)
                RT_TRACE(rtlpriv, COMP_RXDESC, DBG_LOUD,
-                        "GGGGGGGGGGGGGet Wakeup Packet!! WakeMatch=%d\n",
-                        status->wake_match);
+               "GGGGGGGGGGGGGet Wakeup Packet!! WakeMatch=%d\n",
+               status->wake_match);
        rx_status->freq = hw->conf.chandef.chan->center_freq;
        rx_status->band = hw->conf.chandef.chan->band;
 
-
        hdr = (struct ieee80211_hdr *)(skb->data + status->rx_drvinfo_size +
                                       status->rx_bufshift);
 
        if (status->decrypted) {
                if (!hdr) {
                        WARN_ON_ONCE(true);
-                       pr_err("decrypted is true but hdr NULL in skb %p\n",
+                       pr_err("decrypted is true but hdr NULL, from skb %p\n",
                               rtl_get_hdr(skb));
                        return false;
                }
 
-               if ((_ieee80211_is_robust_mgmt_frame(hdr)) &&
+               if ((!_ieee80211_is_robust_mgmt_frame(hdr)) &&
                    (ieee80211_has_protected(hdr->frame_control)))
-                       rx_status->flag &= ~RX_FLAG_DECRYPTED;
-               else
                        rx_status->flag |= RX_FLAG_DECRYPTED;
+               else
+                       rx_status->flag &= ~RX_FLAG_DECRYPTED;
        }
 
        /* rate_idx: index of data rate into band's
         * supported rates or MCS index if HT rates
         * are use (RX_FLAG_HT)
-        * Notice: this is diff with windows define
         */
        rx_status->rate_idx = _rtl8723be_rate_mapping(hw, status->is_ht,
                                                      status->rate);
                _rtl8723be_translate_rx_signal_stuff(hw, skb, status,
                                                     pdesc, p_drvinfo);
        }
-
-       /*rx_status->qual = status->signal; */
        rx_status->signal = status->recvsignalpower + 10;
        if (status->packet_report_type == TX_REPORT2) {
                status->macid_valid_entry[0] =
-                        GET_RX_RPT2_DESC_MACID_VALID_1(pdesc);
+                 GET_RX_RPT2_DESC_MACID_VALID_1(pdesc);
                status->macid_valid_entry[1] =
-                        GET_RX_RPT2_DESC_MACID_VALID_2(pdesc);
+                 GET_RX_RPT2_DESC_MACID_VALID_2(pdesc);
        }
        return true;
 }
 
 void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw,
                            struct ieee80211_hdr *hdr, u8 *pdesc_tx,
-                           u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
+                           u8 *txbd, struct ieee80211_tx_info *info,
                            struct ieee80211_sta *sta, struct sk_buff *skb,
                            u8 hw_queue, struct rtl_tcb_desc *ptcb_desc)
 {
        struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
        struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
-       u8 *pdesc = pdesc_tx;
+       u8 *pdesc = (u8 *)pdesc_tx;
        u16 seq_number;
        __le16 fc = hdr->frame_control;
        unsigned int buf_len = 0;
        unsigned int skb_len = skb->len;
        u8 fw_qsel = _rtl8723be_map_hwqueue_to_fwqueue(skb, hw_queue);
        bool firstseg = ((hdr->seq_ctrl &
-                         cpu_to_le16(IEEE80211_SCTL_FRAG)) == 0);
+                           cpu_to_le16(IEEE80211_SCTL_FRAG)) == 0);
        bool lastseg = ((hdr->frame_control &
-                        cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)) == 0);
+                          cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)) == 0);
        dma_addr_t mapping;
        u8 bw_40 = 0;
        u8 short_gi = 0;
                        SET_TX_DESC_NAV_USE_HDR(pdesc, 1);
 
                if (bw_40) {
-                       if (ptcb_desc->packet_bw) {
+                       if (ptcb_desc->packet_bw == HT_CHANNEL_WIDTH_20_40) {
                                SET_TX_DESC_DATA_BW(pdesc, 1);
                                SET_TX_DESC_TX_SUB_CARRIER(pdesc, 3);
                        } else {
                SET_TX_DESC_DATA_RATE_FB_LIMIT(pdesc, 0x1F);
                SET_TX_DESC_RTS_RATE_FB_LIMIT(pdesc, 0xF);
                SET_TX_DESC_DISABLE_FB(pdesc, ptcb_desc->disable_ratefallback ?
-                                      1 : 0);
+                                             1 : 0);
                SET_TX_DESC_USE_RATE(pdesc, ptcb_desc->use_driver_rate ? 1 : 0);
 
+               /* Set TxRate and RTSRate in TxDesc  */
+               /* This prevent Tx initial rate of new-coming packets */
+               /* from being overwritten by retried  packet rate.*/
                if (ieee80211_is_data_qos(fc)) {
                        if (mac->rdg_en) {
                                RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE,
        SET_TX_DESC_LAST_SEG(pdesc, (lastseg ? 1 : 0));
        SET_TX_DESC_TX_BUFFER_SIZE(pdesc, (u16) buf_len);
        SET_TX_DESC_TX_BUFFER_ADDRESS(pdesc, mapping);
-       SET_TX_DESC_RATE_ID(pdesc, ptcb_desc->ratr_index);
-       SET_TX_DESC_MACID(pdesc, ptcb_desc->mac_id);
-
+       /* if (rtlpriv->dm.useramask) { */
+       if (1) {
+               SET_TX_DESC_RATE_ID(pdesc, ptcb_desc->ratr_index);
+               SET_TX_DESC_MACID(pdesc, ptcb_desc->mac_id);
+       } else {
+               SET_TX_DESC_RATE_ID(pdesc, 0xC + ptcb_desc->ratr_index);
+               SET_TX_DESC_MACID(pdesc, ptcb_desc->mac_id);
+       }
        if (!ieee80211_is_data_qos(fc))  {
                SET_TX_DESC_HWSEQ_EN(pdesc, 1);
                SET_TX_DESC_HWSEQ_SEL(pdesc, 0);
            is_broadcast_ether_addr(ieee80211_get_DA(hdr))) {
                SET_TX_DESC_BMC(pdesc, 1);
        }
+
        RT_TRACE(rtlpriv, COMP_SEND, DBG_TRACE, "\n");
 }
 
 void rtl8723be_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
-                              bool b_firstseg, bool b_lastseg,
+                              bool firstseg, bool lastseg,
                               struct sk_buff *skb)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        SET_TX_DESC_OWN(pdesc, 1);
 
-       SET_TX_DESC_PKT_SIZE(pdesc, (u16)(skb->len));
+       SET_TX_DESC_PKT_SIZE((u8 *)pdesc, (u16)(skb->len));
 
        SET_TX_DESC_FIRST_SEG(pdesc, 1);
        SET_TX_DESC_LAST_SEG(pdesc, 1);
 
        SET_TX_DESC_USE_RATE(pdesc, 1);
+
+       RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_LOUD,
+                     "H2C Tx Cmd Content\n", pdesc, TX_DESC_SIZE);
 }
 
-void rtl8723be_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
-                       u8 desc_name, u8 *val)
+void rtl8723be_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
+                       bool istx, u8 desc_name, u8 *val)
 {
        if (istx) {
                switch (desc_name) {
                        break;
                default:
                        RT_ASSERT(false, "ERR txdesc :%d not process\n",
-                                 desc_name);
+                                         desc_name);
                        break;
                }
        } else {
                        break;
                default:
                        RT_ASSERT(false, "ERR rxdesc :%d not process\n",
-                                 desc_name);
+                                         desc_name);
                        break;
                }
        }
                        break;
                default:
                        RT_ASSERT(false, "ERR txdesc :%d not process\n",
-                                 desc_name);
+                                         desc_name);
                        break;
                }
        } else {
                case HW_DESC_RXPKT_LEN:
                        ret = GET_RX_DESC_PKT_LEN(pdesc);
                        break;
+               case HW_DESC_RXBUFF_ADDR:
+                       ret = GET_RX_DESC_BUFF_ADDR(pdesc);
+                       break;
                default:
                        RT_ASSERT(false, "ERR rxdesc :%d not process\n",
                                  desc_name);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
        struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[hw_queue];
        u8 *entry = (u8 *)(&ring->desc[ring->idx]);
-       u8 own = (u8) rtl8723be_get_desc(entry, true, HW_DESC_OWN);
+       u8 own = (u8)rtl8723be_get_desc(entry, true, HW_DESC_OWN);
 
        /*beacon packet will only use the first
-        *descriptor by default, and the own may not
+        *descriptor defautly,and the own may not
         *be cleared by the hardware
         */
        if (own)
                return false;
-       else
-               return true;
+       return true;
 }
 
 void rtl8723be_tx_polling(struct ieee80211_hw *hw, u8 hw_queue)
                               BIT(0) << (hw_queue));
        }
 }
+
+u32 rtl8723be_rx_command_packet(struct ieee80211_hw *hw,
+                               struct rtl_stats status,
+                               struct sk_buff *skb)
+{
+       u32 result = 0;
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+
+       switch (status.packet_report_type) {
+       case NORMAL_RX:
+                       result = 0;
+                       break;
+       case C2H_PACKET:
+                       rtl8723be_c2h_packet_handler(hw, skb->data,
+                                                    (u8)skb->len);
+                       result = 1;
+                       break;
+       default:
+                       RT_TRACE(rtlpriv, COMP_RECV, DBG_TRACE,
+                                "No this packet type!!\n");
+                       break;
+       }
+
+       return result;
+}
 
 } __packed;
 
 struct rx_fwinfo_8723be {
-       u8 gain_trsw[4];
+       u8 gain_trsw[2];
+       u16 chl_num:10;
+       u16 sub_chnl:4;
+       u16 r_rfmod:2;
        u8 pwdb_all;
        u8 cfosho[4];
        u8 cfotail[4];
        char rxevm[2];
-       char rxsnr[4];
+       char rxsnr[2];
+       u8 pcts_msk_rpt[2];
        u8 pdsnr[2];
        u8 csi_current[2];
-       u8 csi_target[2];
+       u8 rx_gain_c;
+       u8 rx_gain_d;
        u8 sigevm;
-       u8 max_ex_pwr;
-       u8 ex_intf_flag:1;
-       u8 sgi_en:1;
-       u8 rxsc:2;
-       u8 reserve:4;
+       u8 resvd_0;
+       u8 antidx_anta:3;
+       u8 antidx_antb:3;
+       u8 resvd_1:2;
 } __packed;
 
 struct tx_desc_8723be {
 } __packed;
 
 void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw,
-                           struct ieee80211_hdr *hdr, u8 *pdesc,
-                           u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
+                           struct ieee80211_hdr *hdr,
+                           u8 *pdesc_tx, u8 *txbd,
+                           struct ieee80211_tx_info *info,
                            struct ieee80211_sta *sta, struct sk_buff *skb,
                            u8 hw_queue, struct rtl_tcb_desc *ptcb_desc);
 bool rtl8723be_rx_query_desc(struct ieee80211_hw *hw,
                             struct rtl_stats *status,
                             struct ieee80211_rx_status *rx_status,
                             u8 *pdesc, struct sk_buff *skb);
-void rtl8723be_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
-                       u8 desc_name, u8 *val);
+void rtl8723be_set_desc(struct ieee80211_hw *hw, u8 *pdesc,
+                       bool istx, u8 desc_name, u8 *val);
 u32 rtl8723be_get_desc(u8 *pdesc, bool istx, u8 desc_name);
 bool rtl8723be_is_tx_desc_closed(struct ieee80211_hw *hw,
                                 u8 hw_queue, u16 index);
 void rtl8723be_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
 void rtl8723be_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
-                              bool b_firstseg, bool b_lastseg,
+                              bool firstseg, bool lastseg,
                               struct sk_buff *skb);
+u32 rtl8723be_rx_command_packet(struct ieee80211_hw *hw,
+                               struct rtl_stats status,
+                               struct sk_buff *skb);
 #endif
 
        pfwdata = rtlhal->pfirmware;
        fwsize = rtlhal->fwsize;
 
-       if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723AE)
+       if (!is_8723be)
                max_page = 6;
        else
                max_page = 8;
                RT_TRACE(rtlpriv, COMP_FW, DBG_LOUD,
                         "Firmware Version(%d), Signature(%#x), Size(%d)\n",
                         pfwheader->version, pfwheader->signature,
-                        (int)sizeof(struct rtl92c_firmware_header));
+                        (int)sizeof(struct rtl8723e_firmware_header));
 
-               pfwdata = pfwdata + sizeof(struct rtl92c_firmware_header);
-               fwsize = fwsize - sizeof(struct rtl92c_firmware_header);
+               pfwdata = pfwdata + sizeof(struct rtl8723e_firmware_header);
+               fwsize = fwsize - sizeof(struct rtl8723e_firmware_header);
        }
 
        if (rtl_read_byte(rtlpriv, REG_MCUFWDL)&BIT(7)) {
 
 #define REG_MCUFWDL                            0x0080
 #define FW_8192C_START_ADDRESS                 0x1000
 #define FW_8192C_PAGE_SIZE                     4096
-#define FW_8723A_POLLING_TIMEOUT_COUNT         6000
+#define FW_8723A_POLLING_TIMEOUT_COUNT         1000
+#define FW_8723B_POLLING_TIMEOUT_COUNT         6000
 #define FW_8192C_POLLING_DELAY                 5
 
 #define MCUFWDL_RDY                            BIT(1)
        MAX_8723BE_H2CCMD
 };
 
-struct rtl92c_firmware_header {
-       u16 signature;
-       u8 category;
-       u8 function;
-       u16 version;
-       u8 subversion;
-       u8 rsvd1;
-       u8 month;
-       u8 date;
-       u8 hour;
-       u8 minute;
-       u16 ramcodesize;
-       u16 rsvd2;
-       u32 svnindex;
-       u32 rsvd3;
-       u32 rsvd4;
-       u32 rsvd5;
-};
-
 void rtl8723ae_firmware_selfreset(struct ieee80211_hw *hw);
 void rtl8723be_firmware_selfreset(struct ieee80211_hw *hw);
 void rtl8723_enable_fw_download(struct ieee80211_hw *hw, bool enable);
 
        u8 rfpi_enable = 0;
        u32 retvalue;
 
-       offset &= 0x3f;
+       offset &= 0xff;
        newoffset = offset;
        if (RT_CANNOT_IO(hw)) {
                RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "return all one\n");
                RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, "stop\n");
                return;
        }
-       offset &= 0x3f;
+       offset &= 0xff;
        newoffset = offset;
        data_and_addr = ((newoffset << 20) | (data & 0x000fffff)) & 0x0fffffff;
        rtl_set_bbreg(hw, pphyreg->rf3wire_offset, MASKDWORD, data_and_addr);
 void rtl8723_phy_path_adda_on(struct ieee80211_hw *hw, u32 *addareg,
                              bool is_patha_on, bool is2t)
 {
+       struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
        u32 pathon;
        u32 i;
 
-       pathon = is_patha_on ? 0x04db25a4 : 0x0b1b25a4;
-       if (!is2t) {
-               pathon = 0x0bdb25a0;
-               rtl_set_bbreg(hw, addareg[0], MASKDWORD, 0x0b1b25a0);
+       if (rtlhal->hw_type == HARDWARE_TYPE_RTL8723AE) {
+               pathon = is_patha_on ? 0x04db25a4 : 0x0b1b25a4;
+               if (!is2t) {
+                       pathon = 0x0bdb25a0;
+                       rtl_set_bbreg(hw, addareg[0], MASKDWORD, 0x0b1b25a0);
+               } else {
+                       rtl_set_bbreg(hw, addareg[0], MASKDWORD, pathon);
+               }
        } else {
+               /* rtl8723be */
+               pathon = 0x01c00014;
                rtl_set_bbreg(hw, addareg[0], MASKDWORD, pathon);
        }
 
 
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
        struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[BEACON_QUEUE];
+       unsigned long flags;
 
+       spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
        while (skb_queue_len(&ring->queue)) {
                struct rtl_tx_desc *entry = &ring->desc[ring->idx];
                struct sk_buff *skb = __skb_dequeue(&ring->queue);
                kfree_skb(skb);
                ring->idx = (ring->idx + 1) % ring->entries;
        }
+       spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);
 }
 
 static void _rtl8821ae_set_bcn_ctrl_reg(struct ieee80211_hw *hw,
 
 #define        IS_HARDWARE_TYPE_8723(rtlhal)                   \
 (IS_HARDWARE_TYPE_8723E(rtlhal) || IS_HARDWARE_TYPE_8723U(rtlhal))
 
-#define RX_HAL_IS_CCK_RATE(_pdesc)\
-       (_pdesc->rxmcs == DESC92_RATE1M ||              \
-        _pdesc->rxmcs == DESC92_RATE2M ||              \
-        _pdesc->rxmcs == DESC92_RATE5_5M ||            \
-        _pdesc->rxmcs == DESC92_RATE11M)
-
-#define RTL8723E_RX_HAL_IS_CCK_RATE(rxmcs)             \
+#define RX_HAL_IS_CCK_RATE(rxmcs)                      \
        ((rxmcs) == DESC92_RATE1M ||                    \
         (rxmcs) == DESC92_RATE2M ||                    \
         (rxmcs) == DESC92_RATE5_5M ||                  \