net: wireless: rockchip: add rtl8822be pcie wifi driver
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8822be / hal / btc / halbtc8723b2ant.c
diff --git a/drivers/net/wireless/rockchip_wlan/rtl8822be/hal/btc/halbtc8723b2ant.c b/drivers/net/wireless/rockchip_wlan/rtl8822be/hal/btc/halbtc8723b2ant.c
new file mode 100644 (file)
index 0000000..2c34f67
--- /dev/null
@@ -0,0 +1,4920 @@
+/* ************************************************************\r
+ * Description:\r
+ *\r
+ * This file is for RTL8723B Co-exist mechanism\r
+ *\r
+ * History\r
+ * 2012/11/15 Cosa first check in.\r
+ *\r
+ * ************************************************************ */\r
+\r
+/* ************************************************************\r
+ * include files\r
+ * ************************************************************ */\r
+#include "Mp_Precomp.h"\r
+\r
+#if (BT_SUPPORT == 1 && COEX_SUPPORT == 1)\r
+\r
+#if (RTL8723B_SUPPORT == 1)\r
+/* ************************************************************\r
+ * Global variables, these are static variables\r
+ * ************************************************************ */\r
+static u8       *trace_buf = &gl_btc_trace_buf[0];\r
+static struct  coex_dm_8723b_2ant              glcoex_dm_8723b_2ant;\r
+static struct  coex_dm_8723b_2ant      *coex_dm = &glcoex_dm_8723b_2ant;\r
+static struct  coex_sta_8723b_2ant             glcoex_sta_8723b_2ant;\r
+static struct  coex_sta_8723b_2ant     *coex_sta = &glcoex_sta_8723b_2ant;\r
+\r
+const char *const glbt_info_src_8723b_2ant[] = {\r
+       "BT Info[wifi fw]",\r
+       "BT Info[bt rsp]",\r
+       "BT Info[bt auto report]",\r
+};\r
+\r
+u32    glcoex_ver_date_8723b_2ant = 20151223;\r
+u32    glcoex_ver_8723b_2ant = 0x4a;\r
+\r
+/* ************************************************************\r
+ * local function proto type if needed\r
+ * ************************************************************\r
+ * ************************************************************\r
+ * local function start with halbtc8723b2ant_\r
+ * ************************************************************ */\r
+u8 halbtc8723b2ant_bt_rssi_state(u8 *ppre_bt_rssi_state, u8 level_num,\r
+                                u8 rssi_thresh, u8 rssi_thresh1)\r
+{\r
+       s32                     bt_rssi = 0;\r
+       u8                      bt_rssi_state = *ppre_bt_rssi_state;\r
+\r
+       bt_rssi = coex_sta->bt_rssi;\r
+\r
+       if (level_num == 2) {\r
+               if ((*ppre_bt_rssi_state == BTC_RSSI_STATE_LOW) ||\r
+                   (*ppre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {\r
+                       if (bt_rssi >= (rssi_thresh +\r
+                                       BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
+                               bt_rssi_state = BTC_RSSI_STATE_HIGH;\r
+                       else\r
+                               bt_rssi_state = BTC_RSSI_STATE_STAY_LOW;\r
+               } else {\r
+                       if (bt_rssi < rssi_thresh)\r
+                               bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+                       else\r
+                               bt_rssi_state = BTC_RSSI_STATE_STAY_HIGH;\r
+               }\r
+       } else if (level_num == 3) {\r
+               if (rssi_thresh > rssi_thresh1) {\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                   "[BTCoex], BT Rssi thresh error!!\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       return *ppre_bt_rssi_state;\r
+               }\r
+\r
+               if ((*ppre_bt_rssi_state == BTC_RSSI_STATE_LOW) ||\r
+                   (*ppre_bt_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {\r
+                       if (bt_rssi >= (rssi_thresh +\r
+                                       BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
+                               bt_rssi_state = BTC_RSSI_STATE_MEDIUM;\r
+                       else\r
+                               bt_rssi_state = BTC_RSSI_STATE_STAY_LOW;\r
+               } else if ((*ppre_bt_rssi_state == BTC_RSSI_STATE_MEDIUM) ||\r
+                       (*ppre_bt_rssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {\r
+                       if (bt_rssi >= (rssi_thresh1 +\r
+                                       BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
+                               bt_rssi_state = BTC_RSSI_STATE_HIGH;\r
+                       else if (bt_rssi < rssi_thresh)\r
+                               bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+                       else\r
+                               bt_rssi_state = BTC_RSSI_STATE_STAY_MEDIUM;\r
+               } else {\r
+                       if (bt_rssi < rssi_thresh1)\r
+                               bt_rssi_state = BTC_RSSI_STATE_MEDIUM;\r
+                       else\r
+                               bt_rssi_state = BTC_RSSI_STATE_STAY_HIGH;\r
+               }\r
+       }\r
+\r
+       *ppre_bt_rssi_state = bt_rssi_state;\r
+\r
+       return bt_rssi_state;\r
+}\r
+\r
+u8 halbtc8723b2ant_wifi_rssi_state(IN struct btc_coexist *btcoexist,\r
+          IN u8 *pprewifi_rssi_state, IN u8 level_num, IN u8 rssi_thresh,\r
+                                  IN u8 rssi_thresh1)\r
+{\r
+       s32                     wifi_rssi = 0;\r
+       u8                      wifi_rssi_state = *pprewifi_rssi_state;\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_S4_WIFI_RSSI, &wifi_rssi);\r
+\r
+       if (level_num == 2) {\r
+               if ((*pprewifi_rssi_state == BTC_RSSI_STATE_LOW) ||\r
+                   (*pprewifi_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {\r
+                       if (wifi_rssi >= (rssi_thresh +\r
+                                         BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
+                               wifi_rssi_state = BTC_RSSI_STATE_HIGH;\r
+                       else\r
+                               wifi_rssi_state = BTC_RSSI_STATE_STAY_LOW;\r
+               } else {\r
+                       if (wifi_rssi < rssi_thresh)\r
+                               wifi_rssi_state = BTC_RSSI_STATE_LOW;\r
+                       else\r
+                               wifi_rssi_state = BTC_RSSI_STATE_STAY_HIGH;\r
+               }\r
+       } else if (level_num == 3) {\r
+               if (rssi_thresh > rssi_thresh1) {\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                   "[BTCoex], wifi RSSI thresh error!!\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       return *pprewifi_rssi_state;\r
+               }\r
+\r
+               if ((*pprewifi_rssi_state == BTC_RSSI_STATE_LOW) ||\r
+                   (*pprewifi_rssi_state == BTC_RSSI_STATE_STAY_LOW)) {\r
+                       if (wifi_rssi >= (rssi_thresh +\r
+                                         BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
+                               wifi_rssi_state = BTC_RSSI_STATE_MEDIUM;\r
+                       else\r
+                               wifi_rssi_state = BTC_RSSI_STATE_STAY_LOW;\r
+               } else if ((*pprewifi_rssi_state == BTC_RSSI_STATE_MEDIUM) ||\r
+                       (*pprewifi_rssi_state == BTC_RSSI_STATE_STAY_MEDIUM)) {\r
+                       if (wifi_rssi >= (rssi_thresh1 +\r
+                                         BTC_RSSI_COEX_THRESH_TOL_8723B_2ANT))\r
+                               wifi_rssi_state = BTC_RSSI_STATE_HIGH;\r
+                       else if (wifi_rssi < rssi_thresh)\r
+                               wifi_rssi_state = BTC_RSSI_STATE_LOW;\r
+                       else\r
+                               wifi_rssi_state = BTC_RSSI_STATE_STAY_MEDIUM;\r
+               } else {\r
+                       if (wifi_rssi < rssi_thresh1)\r
+                               wifi_rssi_state = BTC_RSSI_STATE_MEDIUM;\r
+                       else\r
+                               wifi_rssi_state = BTC_RSSI_STATE_STAY_HIGH;\r
+               }\r
+       }\r
+\r
+       *pprewifi_rssi_state = wifi_rssi_state;\r
+\r
+       return wifi_rssi_state;\r
+}\r
+\r
+void halbtc8723b2ant_monitor_bt_enable_disable(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u32              bt_disable_cnt = 0;\r
+       boolean         bt_active = true, bt_disabled = false;\r
+\r
+       /* This function check if bt is disabled */\r
+\r
+       if (coex_sta->high_priority_tx == 0 &&\r
+           coex_sta->high_priority_rx == 0 &&\r
+           coex_sta->low_priority_tx == 0 &&\r
+           coex_sta->low_priority_rx == 0)\r
+               bt_active = false;\r
+       if (coex_sta->high_priority_tx == 0xffff &&\r
+           coex_sta->high_priority_rx == 0xffff &&\r
+           coex_sta->low_priority_tx == 0xffff &&\r
+           coex_sta->low_priority_rx == 0xffff)\r
+               bt_active = false;\r
+       if (bt_active) {\r
+               bt_disable_cnt = 0;\r
+               bt_disabled = false;\r
+       } else {\r
+               bt_disable_cnt++;\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], bt all counters=0, %d times!!\n",\r
+                           bt_disable_cnt);\r
+               BTC_TRACE(trace_buf);\r
+               if (bt_disable_cnt >= 2)\r
+                       bt_disabled = true;\r
+       }\r
+       if (coex_sta->bt_disabled != bt_disabled) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], BT is from %s to %s!!\n",\r
+                           (coex_sta->bt_disabled ? "disabled" : "enabled"),\r
+                           (bt_disabled ? "disabled" : "enabled"));\r
+               BTC_TRACE(trace_buf);\r
+\r
+               coex_sta->bt_disabled = bt_disabled;\r
+               btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_DISABLE,\r
+                                  &bt_disabled);\r
+               if (bt_disabled) {\r
+                       btcoexist->btc_set(btcoexist, BTC_SET_ACT_LEAVE_LPS,\r
+                                          NULL);\r
+                       btcoexist->btc_set(btcoexist, BTC_SET_ACT_NORMAL_LPS,\r
+                                          NULL);\r
+               }\r
+       }\r
+}\r
+\r
+\r
+void halbtc8723b2ant_limited_rx(IN struct btc_coexist *btcoexist,\r
+                       IN boolean force_exec, IN boolean rej_ap_agg_pkt,\r
+                       IN boolean bt_ctrl_agg_buf_size, IN u8 agg_buf_size)\r
+{\r
+       boolean reject_rx_agg = rej_ap_agg_pkt;\r
+       boolean bt_ctrl_rx_agg_size = bt_ctrl_agg_buf_size;\r
+       u8      rx_agg_size = agg_buf_size;\r
+\r
+       /* ============================================ */\r
+       /*      Rx Aggregation related setting */\r
+       /* ============================================ */\r
+       btcoexist->btc_set(btcoexist, BTC_SET_BL_TO_REJ_AP_AGG_PKT,\r
+                          &reject_rx_agg);\r
+       /* decide BT control aggregation buf size or not */\r
+       btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_CTRL_AGG_SIZE,\r
+                          &bt_ctrl_rx_agg_size);\r
+       /* aggregation buf size, only work when BT control Rx aggregation size. */\r
+       btcoexist->btc_set(btcoexist, BTC_SET_U1_AGG_BUF_SIZE, &rx_agg_size);\r
+       /* real update aggregation setting */\r
+       btcoexist->btc_set(btcoexist, BTC_SET_ACT_AGGREGATE_CTRL, NULL);\r
+}\r
+\r
+void halbtc8723b2ant_monitor_bt_ctr(IN struct btc_coexist *btcoexist)\r
+{\r
+       u32                     reg_hp_txrx, reg_lp_txrx, u32tmp;\r
+       u32                     reg_hp_tx = 0, reg_hp_rx = 0, reg_lp_tx = 0, reg_lp_rx = 0;\r
+\r
+       struct  btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;\r
+\r
+       reg_hp_txrx = 0x770;\r
+       reg_lp_txrx = 0x774;\r
+\r
+       u32tmp = btcoexist->btc_read_4byte(btcoexist, reg_hp_txrx);\r
+       reg_hp_tx = u32tmp & MASKLWORD;\r
+       reg_hp_rx = (u32tmp & MASKHWORD) >> 16;\r
+\r
+       u32tmp = btcoexist->btc_read_4byte(btcoexist, reg_lp_txrx);\r
+       reg_lp_tx = u32tmp & MASKLWORD;\r
+       reg_lp_rx = (u32tmp & MASKHWORD) >> 16;\r
+\r
+       coex_sta->high_priority_tx = reg_hp_tx;\r
+       coex_sta->high_priority_rx = reg_hp_rx;\r
+       coex_sta->low_priority_tx = reg_lp_tx;\r
+       coex_sta->low_priority_rx = reg_lp_rx;\r
+\r
+       if ((coex_sta->low_priority_tx > 1050)  &&\r
+           (!coex_sta->c2h_bt_inquiry_page))\r
+               coex_sta->pop_event_cnt++;\r
+\r
+       if ((coex_sta->low_priority_rx >= 950)  &&\r
+           (coex_sta->low_priority_rx >= coex_sta->low_priority_tx) &&\r
+           (!coex_sta->under_ips))\r
+               bt_link_info->slave_role = true;\r
+       else\r
+               bt_link_info->slave_role = false;\r
+\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+               "[BTCoex], High Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n",\r
+                   reg_hp_txrx, reg_hp_tx, reg_hp_tx, reg_hp_rx, reg_hp_rx);\r
+       BTC_TRACE(trace_buf);\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+               "[BTCoex], Low Priority Tx/Rx (reg 0x%x)=0x%x(%d)/0x%x(%d)\n",\r
+                   reg_lp_txrx, reg_lp_tx, reg_lp_tx, reg_lp_rx, reg_lp_rx);\r
+       BTC_TRACE(trace_buf);\r
+\r
+       /* reset counter */\r
+       btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);\r
+}\r
+\r
+void halbtc8723b2ant_monitor_wifi_ctr(IN struct btc_coexist *btcoexist)\r
+{\r
+\r
+\r
+       if (coex_sta->under_ips) {\r
+               coex_sta->crc_ok_cck = 0;\r
+               coex_sta->crc_ok_11g = 0;\r
+               coex_sta->crc_ok_11n = 0;\r
+               coex_sta->crc_ok_11n_agg = 0;\r
+\r
+               coex_sta->crc_err_cck = 0;\r
+               coex_sta->crc_err_11g = 0;\r
+               coex_sta->crc_err_11n = 0;\r
+               coex_sta->crc_err_11n_agg = 0;\r
+       } else {\r
+               coex_sta->crc_ok_cck    = btcoexist->btc_read_4byte(btcoexist,\r
+                                         0xf88);\r
+               coex_sta->crc_ok_11g    = btcoexist->btc_read_2byte(btcoexist,\r
+                                         0xf94);\r
+               coex_sta->crc_ok_11n    = btcoexist->btc_read_2byte(btcoexist,\r
+                                         0xf90);\r
+               coex_sta->crc_ok_11n_agg = btcoexist->btc_read_2byte(btcoexist,\r
+                                          0xfb8);\r
+\r
+               coex_sta->crc_err_cck    = btcoexist->btc_read_4byte(btcoexist,\r
+                                          0xf84);\r
+               coex_sta->crc_err_11g    = btcoexist->btc_read_2byte(btcoexist,\r
+                                          0xf96);\r
+               coex_sta->crc_err_11n    = btcoexist->btc_read_2byte(btcoexist,\r
+                                          0xf92);\r
+               coex_sta->crc_err_11n_agg = btcoexist->btc_read_2byte(btcoexist,\r
+                                           0xfba);\r
+       }\r
+\r
+       /* reset counter */\r
+       btcoexist->btc_write_1byte_bitmask(btcoexist, 0xf16, 0x1, 0x1);\r
+       btcoexist->btc_write_1byte_bitmask(btcoexist, 0xf16, 0x1, 0x0);\r
+}\r
+\r
+void halbtc8723b2ant_query_bt_info(IN struct btc_coexist *btcoexist)\r
+{\r
+       u8                      h2c_parameter[1] = {0};\r
+\r
+       coex_sta->c2h_bt_info_req_sent = true;\r
+\r
+       h2c_parameter[0] |= BIT(0);     /* trigger */\r
+\r
+       btcoexist->btc_fill_h2c(btcoexist, 0x61, 1, h2c_parameter);\r
+}\r
+\r
+boolean halbtc8723b2ant_is_wifi_status_changed(IN struct btc_coexist *btcoexist)\r
+{\r
+       static boolean  pre_wifi_busy = false, pre_under_4way = false,\r
+                       pre_bt_hs_on = false;\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW;\r
+       boolean                 wifi_busy = false, under_4way = false, bt_hs_on = false;\r
+       boolean                 wifi_connected = false;\r
+       u8                      wifi_rssi_state = BTC_RSSI_STATE_HIGH;\r
+\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,\r
+                          &wifi_connected);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_4_WAY_PROGRESS,\r
+                          &under_4way);\r
+\r
+       if (wifi_connected) {\r
+               if (wifi_busy != pre_wifi_busy) {\r
+                       pre_wifi_busy = wifi_busy;\r
+                       return true;\r
+               }\r
+               if (under_4way != pre_under_4way) {\r
+                       pre_under_4way = under_4way;\r
+                       return true;\r
+               }\r
+               if (bt_hs_on != pre_bt_hs_on) {\r
+                       pre_bt_hs_on = bt_hs_on;\r
+                       return true;\r
+               }\r
+\r
+\r
+               wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                                 &prewifi_rssi_state, 2,\r
+                                 BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -\r
+                                 coex_dm->switch_thres_offset, 0);\r
+\r
+               if ((BTC_RSSI_STATE_HIGH == wifi_rssi_state) ||\r
+                   (BTC_RSSI_STATE_LOW == wifi_rssi_state))\r
+                       return true;\r
+\r
+       }\r
+\r
+       return false;\r
+}\r
+\r
+void halbtc8723b2ant_update_bt_link_info(IN struct btc_coexist *btcoexist)\r
+{\r
+       struct  btc_bt_link_info        *bt_link_info = &btcoexist->bt_link_info;\r
+       boolean                         bt_hs_on = false;\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);\r
+\r
+       bt_link_info->bt_link_exist = coex_sta->bt_link_exist;\r
+       bt_link_info->sco_exist = coex_sta->sco_exist;\r
+       bt_link_info->a2dp_exist = coex_sta->a2dp_exist;\r
+       bt_link_info->pan_exist = coex_sta->pan_exist;\r
+       bt_link_info->hid_exist = coex_sta->hid_exist;\r
+\r
+       /* work around for HS mode. */\r
+       if (bt_hs_on) {\r
+               bt_link_info->pan_exist = true;\r
+               bt_link_info->bt_link_exist = true;\r
+       }\r
+\r
+       /* check if Sco only */\r
+       if (bt_link_info->sco_exist &&\r
+           !bt_link_info->a2dp_exist &&\r
+           !bt_link_info->pan_exist &&\r
+           !bt_link_info->hid_exist)\r
+               bt_link_info->sco_only = true;\r
+       else\r
+               bt_link_info->sco_only = false;\r
+\r
+       /* check if A2dp only */\r
+       if (!bt_link_info->sco_exist &&\r
+           bt_link_info->a2dp_exist &&\r
+           !bt_link_info->pan_exist &&\r
+           !bt_link_info->hid_exist)\r
+               bt_link_info->a2dp_only = true;\r
+       else\r
+               bt_link_info->a2dp_only = false;\r
+\r
+       /* check if Pan only */\r
+       if (!bt_link_info->sco_exist &&\r
+           !bt_link_info->a2dp_exist &&\r
+           bt_link_info->pan_exist &&\r
+           !bt_link_info->hid_exist)\r
+               bt_link_info->pan_only = true;\r
+       else\r
+               bt_link_info->pan_only = false;\r
+\r
+       /* check if Hid only */\r
+       if (!bt_link_info->sco_exist &&\r
+           !bt_link_info->a2dp_exist &&\r
+           !bt_link_info->pan_exist &&\r
+           bt_link_info->hid_exist)\r
+               bt_link_info->hid_only = true;\r
+       else\r
+               bt_link_info->hid_only = false;\r
+}\r
+\r
+u8 halbtc8723b2ant_action_algorithm(IN struct btc_coexist *btcoexist)\r
+{\r
+       struct  btc_bt_link_info        *bt_link_info = &btcoexist->bt_link_info;\r
+       boolean                         bt_hs_on = false;\r
+       u8                              algorithm = BT_8723B_2ANT_COEX_ALGO_UNDEFINED;\r
+       u8                              num_of_diff_profile = 0;\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);\r
+\r
+       if (!bt_link_info->bt_link_exist) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], No BT link exists!!!\n");\r
+               BTC_TRACE(trace_buf);\r
+               return algorithm;\r
+       }\r
+\r
+       if (bt_link_info->sco_exist)\r
+               num_of_diff_profile++;\r
+       if (bt_link_info->hid_exist)\r
+               num_of_diff_profile++;\r
+       if (bt_link_info->pan_exist)\r
+               num_of_diff_profile++;\r
+       if (bt_link_info->a2dp_exist)\r
+               num_of_diff_profile++;\r
+\r
+       if (num_of_diff_profile == 1) {\r
+               if (bt_link_info->sco_exist) {\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                   "[BTCoex], SCO only\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;\r
+               } else {\r
+                       if (bt_link_info->hid_exist) {\r
+                               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                           "[BTCoex], HID only\n");\r
+                               BTC_TRACE(trace_buf);\r
+                               algorithm = BT_8723B_2ANT_COEX_ALGO_HID;\r
+                       } else if (bt_link_info->a2dp_exist) {\r
+                               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                           "[BTCoex], A2DP only\n");\r
+                               BTC_TRACE(trace_buf);\r
+                               algorithm = BT_8723B_2ANT_COEX_ALGO_A2DP;\r
+                       } else if (bt_link_info->pan_exist) {\r
+                               if (bt_hs_on) {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                                   "[BTCoex], PAN(HS) only\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_PANHS;\r
+                               } else {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], PAN(EDR) only\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_PANEDR;\r
+                               }\r
+                       }\r
+               }\r
+       } else if (num_of_diff_profile == 2) {\r
+               if (bt_link_info->sco_exist) {\r
+                       if (bt_link_info->hid_exist) {\r
+                               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                           "[BTCoex], SCO + HID\n");\r
+                               BTC_TRACE(trace_buf);\r
+                               algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
+                       } else if (bt_link_info->a2dp_exist) {\r
+                               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                           "[BTCoex], SCO + A2DP ==> SCO\n");\r
+                               BTC_TRACE(trace_buf);\r
+                               algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
+                       } else if (bt_link_info->pan_exist) {\r
+                               if (bt_hs_on) {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], SCO + PAN(HS)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm = BT_8723B_2ANT_COEX_ALGO_SCO;\r
+                               } else {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], SCO + PAN(EDR)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
+                               }\r
+                       }\r
+               } else {\r
+                       if (bt_link_info->hid_exist &&\r
+                           bt_link_info->a2dp_exist) {\r
+                               {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                                   "[BTCoex], HID + A2DP\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_HID_A2DP;\r
+                               }\r
+                       } else if (bt_link_info->hid_exist &&\r
+                                  bt_link_info->pan_exist) {\r
+                               if (bt_hs_on) {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], HID + PAN(HS)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm = BT_8723B_2ANT_COEX_ALGO_HID;\r
+                               } else {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], HID + PAN(EDR)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
+                               }\r
+                       } else if (bt_link_info->pan_exist &&\r
+                                  bt_link_info->a2dp_exist) {\r
+                               if (bt_hs_on) {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], A2DP + PAN(HS)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS;\r
+                               } else {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], A2DP + PAN(EDR)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP;\r
+                               }\r
+                       }\r
+               }\r
+       } else if (num_of_diff_profile == 3) {\r
+               if (bt_link_info->sco_exist) {\r
+                       if (bt_link_info->hid_exist &&\r
+                           bt_link_info->a2dp_exist) {\r
+                               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                       "[BTCoex], SCO + HID + A2DP ==> HID\n");\r
+                               BTC_TRACE(trace_buf);\r
+                               algorithm = BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
+                       } else if (bt_link_info->hid_exist &&\r
+                                  bt_link_info->pan_exist) {\r
+                               if (bt_hs_on) {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], SCO + HID + PAN(HS)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
+                               } else {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], SCO + HID + PAN(EDR)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
+                               }\r
+                       } else if (bt_link_info->pan_exist &&\r
+                                  bt_link_info->a2dp_exist) {\r
+                               if (bt_hs_on) {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], SCO + A2DP + PAN(HS)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
+                               } else {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], SCO + A2DP + PAN(EDR) ==> HID\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
+                               }\r
+                       }\r
+               } else {\r
+                       if (bt_link_info->hid_exist &&\r
+                           bt_link_info->pan_exist &&\r
+                           bt_link_info->a2dp_exist) {\r
+                               if (bt_hs_on) {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], HID + A2DP + PAN(HS)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_HID_A2DP;\r
+                               } else {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], HID + A2DP + PAN(EDR)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR;\r
+                               }\r
+                       }\r
+               }\r
+       } else if (num_of_diff_profile >= 3) {\r
+               if (bt_link_info->sco_exist) {\r
+                       if (bt_link_info->hid_exist &&\r
+                           bt_link_info->pan_exist &&\r
+                           bt_link_info->a2dp_exist) {\r
+                               if (bt_hs_on) {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n");\r
+                                       BTC_TRACE(trace_buf);\r
+\r
+                               } else {\r
+                                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                               "[BTCoex], SCO + HID + A2DP + PAN(EDR)==>PAN(EDR)+HID\n");\r
+                                       BTC_TRACE(trace_buf);\r
+                                       algorithm =\r
+                                               BT_8723B_2ANT_COEX_ALGO_PANEDR_HID;\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       return algorithm;\r
+}\r
+\r
+void halbtc8723b2ant_set_fw_dac_swing_level(IN struct btc_coexist *btcoexist,\r
+               IN u8 dac_swing_lvl)\r
+{\r
+       u8                      h2c_parameter[1] = {0};\r
+\r
+       /* There are several type of dacswing */\r
+       /* 0x18/ 0x10/ 0xc/ 0x8/ 0x4/ 0x6 */\r
+       h2c_parameter[0] = dac_swing_lvl;\r
+\r
+       btcoexist->btc_fill_h2c(btcoexist, 0x64, 1, h2c_parameter);\r
+}\r
+\r
+void halbtc8723b2ant_set_fw_dec_bt_pwr(IN struct btc_coexist *btcoexist,\r
+                                      IN u8 dec_bt_pwr_lvl)\r
+{\r
+       u8                      h2c_parameter[1] = {0};\r
+\r
+       h2c_parameter[0] = dec_bt_pwr_lvl;\r
+\r
+       btcoexist->btc_fill_h2c(btcoexist, 0x62, 1, h2c_parameter);\r
+}\r
+\r
+void halbtc8723b2ant_dec_bt_pwr(IN struct btc_coexist *btcoexist,\r
+                               IN boolean force_exec, IN u8 dec_bt_pwr_lvl)\r
+{\r
+       coex_dm->cur_bt_dec_pwr_lvl = dec_bt_pwr_lvl;\r
+\r
+       if (!force_exec) {\r
+               if (coex_dm->pre_bt_dec_pwr_lvl == coex_dm->cur_bt_dec_pwr_lvl)\r
+                       return;\r
+       }\r
+       halbtc8723b2ant_set_fw_dec_bt_pwr(btcoexist,\r
+                                         coex_dm->cur_bt_dec_pwr_lvl);\r
+\r
+       coex_dm->pre_bt_dec_pwr_lvl = coex_dm->cur_bt_dec_pwr_lvl;\r
+}\r
+\r
+void halbtc8723b2ant_set_bt_auto_report(IN struct btc_coexist *btcoexist,\r
+                                       IN boolean enable_auto_report)\r
+{\r
+       u8                      h2c_parameter[1] = {0};\r
+\r
+       h2c_parameter[0] = 0;\r
+\r
+       if (enable_auto_report)\r
+               h2c_parameter[0] |= BIT(0);\r
+\r
+       btcoexist->btc_fill_h2c(btcoexist, 0x68, 1, h2c_parameter);\r
+}\r
+\r
+void halbtc8723b2ant_bt_auto_report(IN struct btc_coexist *btcoexist,\r
+                   IN boolean force_exec, IN boolean enable_auto_report)\r
+{\r
+       coex_dm->cur_bt_auto_report = enable_auto_report;\r
+\r
+       if (!force_exec) {\r
+               if (coex_dm->pre_bt_auto_report == coex_dm->cur_bt_auto_report)\r
+                       return;\r
+       }\r
+       halbtc8723b2ant_set_bt_auto_report(btcoexist,\r
+                                          coex_dm->cur_bt_auto_report);\r
+\r
+       coex_dm->pre_bt_auto_report = coex_dm->cur_bt_auto_report;\r
+}\r
+\r
+void halbtc8723b2ant_fw_dac_swing_lvl(IN struct btc_coexist *btcoexist,\r
+                             IN boolean force_exec, IN u8 fw_dac_swing_lvl)\r
+{\r
+       coex_dm->cur_fw_dac_swing_lvl = fw_dac_swing_lvl;\r
+\r
+       if (!force_exec) {\r
+               if (coex_dm->pre_fw_dac_swing_lvl ==\r
+                   coex_dm->cur_fw_dac_swing_lvl)\r
+                       return;\r
+       }\r
+\r
+       halbtc8723b2ant_set_fw_dac_swing_level(btcoexist,\r
+                                              coex_dm->cur_fw_dac_swing_lvl);\r
+\r
+       coex_dm->pre_fw_dac_swing_lvl = coex_dm->cur_fw_dac_swing_lvl;\r
+}\r
+\r
+void halbtc8723b2ant_set_sw_rf_rx_lpf_corner(IN struct btc_coexist *btcoexist,\r
+               IN boolean rx_rf_shrink_on)\r
+{\r
+       if (rx_rf_shrink_on) {\r
+               /* Shrink RF Rx LPF corner */\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Shrink RF Rx LPF corner!!\n");\r
+               BTC_TRACE(trace_buf);\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1e, 0xfffff,\r
+                                         0xffffc);\r
+       } else {\r
+               /* Resume RF Rx LPF corner */\r
+               /* After initialized, we can use coex_dm->bt_rf_0x1e_backup */\r
+               if (btcoexist->initilized) {\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                   "[BTCoex], Resume RF Rx LPF corner!!\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1e,\r
+                                         0xfffff, coex_dm->bt_rf_0x1e_backup);\r
+               }\r
+       }\r
+}\r
+\r
+void halbtc8723b2ant_rf_shrink(IN struct btc_coexist *btcoexist,\r
+                      IN boolean force_exec, IN boolean rx_rf_shrink_on)\r
+{\r
+       coex_dm->cur_rf_rx_lpf_shrink = rx_rf_shrink_on;\r
+\r
+       if (!force_exec) {\r
+               if (coex_dm->pre_rf_rx_lpf_shrink ==\r
+                   coex_dm->cur_rf_rx_lpf_shrink)\r
+                       return;\r
+       }\r
+       halbtc8723b2ant_set_sw_rf_rx_lpf_corner(btcoexist,\r
+                                               coex_dm->cur_rf_rx_lpf_shrink);\r
+\r
+       coex_dm->pre_rf_rx_lpf_shrink = coex_dm->cur_rf_rx_lpf_shrink;\r
+}\r
+\r
+void halbtc8723b2ant_set_sw_penalty_tx_rate_adaptive(IN struct btc_coexist\r
+               *btcoexist, IN boolean low_penalty_ra)\r
+{\r
+       u8                      h2c_parameter[6] = {0};\r
+\r
+       h2c_parameter[0] = 0x6; /* op_code, 0x6= Retry_Penalty */\r
+\r
+       if (low_penalty_ra) {\r
+               h2c_parameter[1] |= BIT(0);\r
+               h2c_parameter[2] =\r
+                       0x00;  /* normal rate except MCS7/6/5, OFDM54/48/36 */\r
+               h2c_parameter[3] = 0xf4;  /* MCS7 or OFDM54 */\r
+               h2c_parameter[4] = 0xf5;  /* MCS6 or OFDM48 */\r
+               h2c_parameter[5] = 0xf6;        /* MCS5 or OFDM36        */\r
+       }\r
+\r
+       btcoexist->btc_fill_h2c(btcoexist, 0x69, 6, h2c_parameter);\r
+}\r
+\r
+void halbtc8723b2ant_low_penalty_ra(IN struct btc_coexist *btcoexist,\r
+                           IN boolean force_exec, IN boolean low_penalty_ra)\r
+{\r
+       coex_dm->cur_low_penalty_ra = low_penalty_ra;\r
+\r
+       if (!force_exec) {\r
+               if (coex_dm->pre_low_penalty_ra == coex_dm->cur_low_penalty_ra)\r
+                       return;\r
+       }\r
+       halbtc8723b2ant_set_sw_penalty_tx_rate_adaptive(btcoexist,\r
+                       coex_dm->cur_low_penalty_ra);\r
+\r
+       coex_dm->pre_low_penalty_ra = coex_dm->cur_low_penalty_ra;\r
+}\r
+\r
+void halbtc8723b2ant_set_dac_swing_reg(IN struct btc_coexist *btcoexist,\r
+                                      IN u32 level)\r
+{\r
+       u8      val = (u8)level;\r
+\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                   "[BTCoex], Write SwDacSwing = 0x%x\n", level);\r
+       BTC_TRACE(trace_buf);\r
+       btcoexist->btc_write_1byte_bitmask(btcoexist, 0x883, 0x3e, val);\r
+}\r
+\r
+void halbtc8723b2ant_set_sw_full_time_dac_swing(IN struct btc_coexist\r
+               *btcoexist, IN boolean sw_dac_swing_on, IN u32 sw_dac_swing_lvl)\r
+{\r
+       if (sw_dac_swing_on)\r
+               halbtc8723b2ant_set_dac_swing_reg(btcoexist, sw_dac_swing_lvl);\r
+       else\r
+               halbtc8723b2ant_set_dac_swing_reg(btcoexist, 0x18);\r
+}\r
+\r
+\r
+void halbtc8723b2ant_dac_swing(IN struct btc_coexist *btcoexist,\r
+       IN boolean force_exec, IN boolean dac_swing_on, IN u32 dac_swing_lvl)\r
+{\r
+       coex_dm->cur_dac_swing_on = dac_swing_on;\r
+       coex_dm->cur_dac_swing_lvl = dac_swing_lvl;\r
+\r
+       if (!force_exec) {\r
+               if ((coex_dm->pre_dac_swing_on == coex_dm->cur_dac_swing_on) &&\r
+                   (coex_dm->pre_dac_swing_lvl ==\r
+                    coex_dm->cur_dac_swing_lvl))\r
+                       return;\r
+       }\r
+       delay_ms(30);\r
+       halbtc8723b2ant_set_sw_full_time_dac_swing(btcoexist, dac_swing_on,\r
+                       dac_swing_lvl);\r
+\r
+       coex_dm->pre_dac_swing_on = coex_dm->cur_dac_swing_on;\r
+       coex_dm->pre_dac_swing_lvl = coex_dm->cur_dac_swing_lvl;\r
+}\r
+\r
+void halbtc8723b2ant_set_adc_back_off(IN struct btc_coexist *btcoexist,\r
+                                     IN boolean adc_back_off)\r
+{\r
+       if (adc_back_off) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], BB BackOff Level On!\n");\r
+               BTC_TRACE(trace_buf);\r
+               btcoexist->btc_write_1byte_bitmask(btcoexist, 0xc05, 0x30, 0x3);\r
+       } else {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], BB BackOff Level Off!\n");\r
+               BTC_TRACE(trace_buf);\r
+               btcoexist->btc_write_1byte_bitmask(btcoexist, 0xc05, 0x30, 0x1);\r
+       }\r
+}\r
+\r
+void halbtc8723b2ant_adc_back_off(IN struct btc_coexist *btcoexist,\r
+                         IN boolean force_exec, IN boolean adc_back_off)\r
+{\r
+       coex_dm->cur_adc_back_off = adc_back_off;\r
+\r
+       if (!force_exec) {\r
+               if (coex_dm->pre_adc_back_off == coex_dm->cur_adc_back_off)\r
+                       return;\r
+       }\r
+       halbtc8723b2ant_set_adc_back_off(btcoexist, coex_dm->cur_adc_back_off);\r
+\r
+       coex_dm->pre_adc_back_off = coex_dm->cur_adc_back_off;\r
+}\r
+\r
+void halbtc8723b2ant_set_agc_table(IN struct btc_coexist *btcoexist,\r
+                                  IN boolean agc_table_en)\r
+{\r
+       u8              rssi_adjust_val = 0;\r
+\r
+       /* =================BB AGC Gain Table */\r
+       if (agc_table_en) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], BB Agc Table On!\n");\r
+               BTC_TRACE(trace_buf);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x6e1A0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x6d1B0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x6c1C0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x6b1D0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x6a1E0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x691F0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0x68200001);\r
+       } else {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], BB Agc Table Off!\n");\r
+               BTC_TRACE(trace_buf);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xaa1A0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa91B0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa81C0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa71D0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa61E0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa51F0001);\r
+               btcoexist->btc_write_4byte(btcoexist, 0xc78, 0xa4200001);\r
+       }\r
+\r
+\r
+       /* =================RF Gain */\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0xef, 0xfffff, 0x02000);\r
+       if (agc_table_en) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Agc Table On!\n");\r
+               BTC_TRACE(trace_buf);\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x3b, 0xfffff,\r
+                                         0x38fff);\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x3b, 0xfffff,\r
+                                         0x38ffe);\r
+       } else {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Agc Table Off!\n");\r
+               BTC_TRACE(trace_buf);\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x3b, 0xfffff,\r
+                                         0x380c3);\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x3b, 0xfffff,\r
+                                         0x28ce6);\r
+       }\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0xef, 0xfffff, 0x0);\r
+\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0xed, 0xfffff, 0x1);\r
+       if (agc_table_en) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Agc Table On!\n");\r
+               BTC_TRACE(trace_buf);\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x40, 0xfffff,\r
+                                         0x38fff);\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x40, 0xfffff,\r
+                                         0x38ffe);\r
+       } else {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Agc Table Off!\n");\r
+               BTC_TRACE(trace_buf);\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x40, 0xfffff,\r
+                                         0x380c3);\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x40, 0xfffff,\r
+                                         0x28ce6);\r
+       }\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0xed, 0xfffff, 0x0);\r
+\r
+       /* set rssi_adjust_val for wifi module. */\r
+       if (agc_table_en)\r
+               rssi_adjust_val = 8;\r
+       btcoexist->btc_set(btcoexist, BTC_SET_U1_RSSI_ADJ_VAL_FOR_AGC_TABLE_ON,\r
+                          &rssi_adjust_val);\r
+}\r
+\r
+void halbtc8723b2ant_agc_table(IN struct btc_coexist *btcoexist,\r
+                              IN boolean force_exec, IN boolean agc_table_en)\r
+{\r
+       coex_dm->cur_agc_table_en = agc_table_en;\r
+\r
+       if (!force_exec) {\r
+               if (coex_dm->pre_agc_table_en == coex_dm->cur_agc_table_en)\r
+                       return;\r
+       }\r
+       halbtc8723b2ant_set_agc_table(btcoexist, agc_table_en);\r
+\r
+       coex_dm->pre_agc_table_en = coex_dm->cur_agc_table_en;\r
+}\r
+\r
+void halbtc8723b2ant_set_coex_table(IN struct btc_coexist *btcoexist,\r
+           IN u32 val0x6c0, IN u32 val0x6c4, IN u32 val0x6c8, IN u8 val0x6cc)\r
+{\r
+       btcoexist->btc_write_4byte(btcoexist, 0x6c0, val0x6c0);\r
+\r
+       btcoexist->btc_write_4byte(btcoexist, 0x6c4, val0x6c4);\r
+\r
+       btcoexist->btc_write_4byte(btcoexist, 0x6c8, val0x6c8);\r
+\r
+       btcoexist->btc_write_1byte(btcoexist, 0x6cc, val0x6cc);\r
+}\r
+\r
+void halbtc8723b2ant_coex_table(IN struct btc_coexist *btcoexist,\r
+                       IN boolean force_exec, IN u32 val0x6c0, IN u32 val0x6c4,\r
+                               IN u32 val0x6c8, IN u8 val0x6cc)\r
+{\r
+       coex_dm->cur_val0x6c0 = val0x6c0;\r
+       coex_dm->cur_val0x6c4 = val0x6c4;\r
+       coex_dm->cur_val0x6c8 = val0x6c8;\r
+       coex_dm->cur_val0x6cc = val0x6cc;\r
+\r
+       if (!force_exec) {\r
+               if ((coex_dm->pre_val0x6c0 == coex_dm->cur_val0x6c0) &&\r
+                   (coex_dm->pre_val0x6c4 == coex_dm->cur_val0x6c4) &&\r
+                   (coex_dm->pre_val0x6c8 == coex_dm->cur_val0x6c8) &&\r
+                   (coex_dm->pre_val0x6cc == coex_dm->cur_val0x6cc))\r
+                       return;\r
+       }\r
+       halbtc8723b2ant_set_coex_table(btcoexist, val0x6c0, val0x6c4, val0x6c8,\r
+                                      val0x6cc);\r
+\r
+       coex_dm->pre_val0x6c0 = coex_dm->cur_val0x6c0;\r
+       coex_dm->pre_val0x6c4 = coex_dm->cur_val0x6c4;\r
+       coex_dm->pre_val0x6c8 = coex_dm->cur_val0x6c8;\r
+       coex_dm->pre_val0x6cc = coex_dm->cur_val0x6cc;\r
+}\r
+\r
+void halbtc8723b2ant_coex_table_with_type(IN struct btc_coexist *btcoexist,\r
+               IN boolean force_exec, IN u8 type)\r
+{\r
+       coex_sta->coex_table_type = type;\r
+\r
+       switch (type) {\r
+       case 0:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x55555555, 0x55555555, 0xffffff, 0x3);\r
+               break;\r
+       case 1:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x55555555, 0x5afa5afa, 0xffffff, 0x3);\r
+               break;\r
+       case 2:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x5ada5ada, 0x5ada5ada, 0xffffff, 0x3);\r
+               break;\r
+       case 3:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0xaaaaaaaa, 0xaaaaaaaa, 0xffffff, 0x3);\r
+               break;\r
+       case 4:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0xffffffff, 0xffffffff, 0xffffff, 0x3);\r
+               break;\r
+       case 5:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x5fff5fff, 0x5fff5fff, 0xffffff, 0x3);\r
+               break;\r
+       case 6:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x55ff55ff, 0x5a5a5a5a, 0xffffff, 0x3);\r
+               break;\r
+       case 7:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+               break;\r
+       case 8:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+               break;\r
+       case 9:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+               break;\r
+       case 10:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+               break;\r
+       case 11:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+               break;\r
+       case 12:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x55dd55dd, 0x5ada5ada, 0xffffff, 0x3);\r
+               break;\r
+       case 13:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x5fff5fff, 0xaaaaaaaa, 0xffffff, 0x3);\r
+               break;\r
+       case 14:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x5fff5fff, 0x5ada5ada, 0xffffff, 0x3);\r
+               break;\r
+       case 15:\r
+               halbtc8723b2ant_coex_table(btcoexist, force_exec,\r
+                                  0x55dd55dd, 0xaaaaaaaa, 0xffffff, 0x3);\r
+               break;\r
+       default:\r
+               break;\r
+       }\r
+}\r
+\r
+void halbtc8723b2ant_set_fw_ignore_wlan_act(IN struct btc_coexist *btcoexist,\r
+               IN boolean enable)\r
+{\r
+       u8                      h2c_parameter[1] = {0};\r
+\r
+       if (enable) {\r
+               h2c_parameter[0] |= BIT(0);             /* function enable */\r
+       }\r
+\r
+       btcoexist->btc_fill_h2c(btcoexist, 0x63, 1, h2c_parameter);\r
+}\r
+\r
+void halbtc8723b2ant_set_lps_rpwm(IN struct btc_coexist *btcoexist,\r
+                                 IN u8 lps_val, IN u8 rpwm_val)\r
+{\r
+       u8      lps = lps_val;\r
+       u8      rpwm = rpwm_val;\r
+\r
+       btcoexist->btc_set(btcoexist, BTC_SET_U1_LPS_VAL, &lps);\r
+       btcoexist->btc_set(btcoexist, BTC_SET_U1_RPWM_VAL, &rpwm);\r
+}\r
+\r
+void halbtc8723b2ant_lps_rpwm(IN struct btc_coexist *btcoexist,\r
+                     IN boolean force_exec, IN u8 lps_val, IN u8 rpwm_val)\r
+{\r
+       coex_dm->cur_lps = lps_val;\r
+       coex_dm->cur_rpwm = rpwm_val;\r
+\r
+       if (!force_exec) {\r
+               if ((coex_dm->pre_lps == coex_dm->cur_lps) &&\r
+                   (coex_dm->pre_rpwm == coex_dm->cur_rpwm))\r
+                       return;\r
+       }\r
+       halbtc8723b2ant_set_lps_rpwm(btcoexist, lps_val, rpwm_val);\r
+\r
+       coex_dm->pre_lps = coex_dm->cur_lps;\r
+       coex_dm->pre_rpwm = coex_dm->cur_rpwm;\r
+}\r
+\r
+void halbtc8723b2ant_ignore_wlan_act(IN struct btc_coexist *btcoexist,\r
+                                    IN boolean force_exec, IN boolean enable)\r
+{\r
+       coex_dm->cur_ignore_wlan_act = enable;\r
+\r
+       if (!force_exec) {\r
+               if (coex_dm->pre_ignore_wlan_act ==\r
+                   coex_dm->cur_ignore_wlan_act)\r
+                       return;\r
+       }\r
+       halbtc8723b2ant_set_fw_ignore_wlan_act(btcoexist, enable);\r
+\r
+       coex_dm->pre_ignore_wlan_act = coex_dm->cur_ignore_wlan_act;\r
+}\r
+\r
+void halbtc8723b2ant_set_fw_pstdma(IN struct btc_coexist *btcoexist,\r
+          IN u8 byte1, IN u8 byte2, IN u8 byte3, IN u8 byte4, IN u8 byte5)\r
+{\r
+       u8                      h2c_parameter[5] = {0};\r
+\r
+\r
+       if ((coex_sta->a2dp_exist) && (coex_sta->hid_exist))\r
+               byte5 = byte5 | 0x1;\r
+\r
+       h2c_parameter[0] = byte1;\r
+       h2c_parameter[1] = byte2;\r
+       h2c_parameter[2] = byte3;\r
+       h2c_parameter[3] = byte4;\r
+       h2c_parameter[4] = byte5;\r
+\r
+       coex_dm->ps_tdma_para[0] = byte1;\r
+       coex_dm->ps_tdma_para[1] = byte2;\r
+       coex_dm->ps_tdma_para[2] = byte3;\r
+       coex_dm->ps_tdma_para[3] = byte4;\r
+       coex_dm->ps_tdma_para[4] = byte5;\r
+\r
+       btcoexist->btc_fill_h2c(btcoexist, 0x60, 5, h2c_parameter);\r
+}\r
+\r
+void halbtc8723b2ant_sw_mechanism1(IN struct btc_coexist *btcoexist,\r
+                          IN boolean shrink_rx_lpf, IN boolean low_penalty_ra,\r
+                          IN boolean limited_dig, IN boolean bt_lna_constrain)\r
+{\r
+       /*\r
+       u32     wifi_bw;\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+\r
+       if(BTC_WIFI_BW_HT40 != wifi_bw)\r
+       {\r
+               if (shrink_rx_lpf)\r
+                       shrink_rx_lpf = false;\r
+       }\r
+       */\r
+\r
+       /* halbtc8723b2ant_rf_shrink(btcoexist, NORMAL_EXEC, shrink_rx_lpf); */\r
+       halbtc8723b2ant_low_penalty_ra(btcoexist, NORMAL_EXEC, low_penalty_ra);\r
+}\r
+\r
+void halbtc8723b2ant_sw_mechanism2(IN struct btc_coexist *btcoexist,\r
+                          IN boolean agc_table_shift, IN boolean adc_back_off,\r
+                          IN boolean sw_dac_swing, IN u32 dac_swing_lvl)\r
+{\r
+       /* halbtc8723b2ant_agc_table(btcoexist, NORMAL_EXEC, agc_table_shift); */\r
+       /* halbtc8723b2ant_adc_back_off(btcoexist, NORMAL_EXEC, adc_back_off); */\r
+       /* halbtc8723b2ant_dac_swing(btcoexist, NORMAL_EXEC, sw_dac_swing, dac_swing_lvl); */\r
+}\r
+\r
+void halbtc8723b2ant_set_ant_path(IN struct btc_coexist *btcoexist,\r
+         IN u8 ant_pos_type, IN boolean init_hwcfg, IN boolean wifi_off)\r
+{\r
+       struct  btc_board_info *board_info = &btcoexist->board_info;\r
+       PADAPTER                pAdapter = btcoexist->Adapter;\r
+       u32                     fw_ver = 0, u32tmp = 0, cnt_bt_cal_chk = 0;\r
+       boolean                 pg_ext_switch = false;\r
+       boolean                 use_ext_switch = false;\r
+       u8                      h2c_parameter[2] = {0};\r
+       u32                             u32tmp_1[4];\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_EXT_SWITCH, &pg_ext_switch);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_FW_VER,\r
+                          &fw_ver);    /* [31:16]=fw ver, [15:0]=fw sub ver */\r
+\r
+       if ((fw_ver > 0 && fw_ver < 0xc0000) || pg_ext_switch)\r
+               use_ext_switch = true;\r
+\r
+       if (init_hwcfg) {\r
+               btcoexist->btc_write_1byte_bitmask(btcoexist, 0x39, 0x8, 0x1);\r
+               btcoexist->btc_write_1byte(btcoexist, 0x974, 0xff);\r
+               btcoexist->btc_write_1byte_bitmask(btcoexist, 0x944, 0x3, 0x3);\r
+               btcoexist->btc_write_1byte(btcoexist, 0x930, 0x77);\r
+               btcoexist->btc_write_1byte_bitmask(btcoexist, 0x67, 0x20, 0x1);\r
+\r
+               if (fw_ver >= 0x180000) {\r
+                       /* Use H2C to set GNT_BT to High to avoid A2DP click */\r
+                       h2c_parameter[0] = 1;\r
+                       btcoexist->btc_fill_h2c(btcoexist, 0x6E, 1,\r
+                                               h2c_parameter);\r
+\r
+                       cnt_bt_cal_chk = 0;\r
+                       while(1)\r
+                       {\r
+                               if( pAdapter->bFWReady == FALSE )\r
+                               {\r
+                                       //RT_TRACE(COMP_INIT , DBG_LOUD, ("halbtc8723b2ant_SetAntPath(): we don't need to wait for H2C command completion because of Fw download fail!!!\n"));\r
+                                       break;\r
+                               }\r
+                               \r
+                               if( btcoexist->btc_read_1byte(btcoexist, 0x765) == 0x18 )\r
+                                       break;\r
+\r
+                               cnt_bt_cal_chk++;\r
+                               if( cnt_bt_cal_chk > 20 )\r
+                                       break;\r
+                       }\r
+               } else\r
+                       btcoexist->btc_write_1byte(btcoexist, 0x765, 0x18);\r
+               u32tmp_1[0] = btcoexist->btc_read_4byte(btcoexist, 0x948);\r
+               if( (u32tmp_1[0] == 0x40) || (u32tmp_1[0] == 0x240))\r
+                       btcoexist->btc_write_4byte(btcoexist, 0x948, u32tmp_1[0]);\r
+               else\r
+                       btcoexist->btc_write_4byte(btcoexist, 0x948, 0x0);\r
+\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,\r
+                                         0x0); /* WiFi TRx Mask off */\r
+               /* remove due to interrupt is disabled that polling c2h will fail and delay 100ms. */\r
+               /* btcoexist->btc_set_bt_reg(btcoexist, BTC_BT_REG_RF, 0x3c, 0x01); //BT TRx Mask off */\r
+\r
+               if (board_info->btdm_ant_pos == BTC_ANTENNA_AT_MAIN_PORT) {\r
+                       /* tell firmware "no antenna inverse" */\r
+                       h2c_parameter[0] = 0;\r
+               } else {\r
+                       /* tell firmware "antenna inverse" */\r
+                       h2c_parameter[0] = 1;\r
+               }\r
+\r
+               if (use_ext_switch) {\r
+                       /* ext switch type */\r
+                       h2c_parameter[1] = 1;\r
+               } else {\r
+                       /* int switch type */\r
+                       h2c_parameter[1] = 0;\r
+               }\r
+               btcoexist->btc_fill_h2c(btcoexist, 0x65, 2, h2c_parameter);\r
+       } else {\r
+               if (fw_ver >= 0x180000) {\r
+                       /* Use H2C to set GNT_BT to "Control by PTA"*/\r
+                       h2c_parameter[0] = 0;\r
+                       btcoexist->btc_fill_h2c(btcoexist, 0x6E, 1,\r
+                                               h2c_parameter);\r
+\r
+                       cnt_bt_cal_chk = 0;\r
+                       while(1)\r
+                       {\r
+                               if( pAdapter->bFWReady == FALSE )\r
+                               {\r
+                                       //RT_TRACE(COMP_INIT , DBG_LOUD, ("halbtc8723b2ant_SetAntPath(): we don't need to wait for H2C command completion because of Fw download fail!!!\n"));\r
+                                       break;\r
+                               }\r
+                               \r
+                               if( btcoexist->btc_read_1byte(btcoexist, 0x765) == 0x0 )\r
+                                       break;\r
+\r
+                               cnt_bt_cal_chk++;\r
+                               if( cnt_bt_cal_chk > 20 )\r
+                                       break;\r
+                       }\r
+               } else\r
+                       btcoexist->btc_write_1byte(btcoexist, 0x765, 0x0);\r
+       }\r
+\r
+       /* ext switch setting */\r
+       if (use_ext_switch) {\r
+               if (init_hwcfg) {\r
+                       /* 0x4c[23]=0, 0x4c[24]=1  Antenna control by WL/BT */\r
+                       u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c);\r
+                       u32tmp &= ~BIT(23);\r
+                       u32tmp |= BIT(24);\r
+                       btcoexist->btc_write_4byte(btcoexist, 0x4c, u32tmp);\r
+               }\r
+               u32tmp_1[0] = btcoexist->btc_read_4byte(btcoexist, 0x948);\r
+               if( (u32tmp_1[0] == 0x40) || (u32tmp_1[0] == 0x240))\r
+                       btcoexist->btc_write_4byte(btcoexist, 0x948, u32tmp_1[0]);\r
+               else\r
+                       btcoexist->btc_write_4byte(btcoexist, 0x948, 0x0);\r
+               \r
+               switch (ant_pos_type) {\r
+               case BTC_ANT_WIFI_AT_MAIN:\r
+                       btcoexist->btc_write_1byte_bitmask(btcoexist,\r
+                                                          0x92c, 0x3,\r
+                                          0x1);        /* ext switch main at wifi */\r
+                       break;\r
+               case BTC_ANT_WIFI_AT_AUX:\r
+                       btcoexist->btc_write_1byte_bitmask(btcoexist,\r
+                                                          0x92c, 0x3,\r
+                                          0x2);        /* ext switch aux at wifi */\r
+                       break;\r
+               }\r
+       } else {        /* internal switch */\r
+               if (init_hwcfg) {\r
+                       /* 0x4c[23]=0, 0x4c[24]=1  Antenna control by WL/BT */\r
+                       u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x4c);\r
+                       u32tmp |= BIT(23);\r
+                       u32tmp &= ~BIT(24);\r
+                       btcoexist->btc_write_4byte(btcoexist, 0x4c, u32tmp);\r
+               }\r
+\r
+               btcoexist->btc_write_1byte_bitmask(btcoexist, 0x64, 0x1,\r
+                          0x0); /* fixed external switch S1->Main, S0->Aux */\r
+               switch (ant_pos_type) {\r
+               case BTC_ANT_WIFI_AT_MAIN:\r
+                       u32tmp_1[0] = btcoexist->btc_read_4byte(btcoexist, 0x948);\r
+                       if( (u32tmp_1[0] == 0x40) || (u32tmp_1[0] == 0x240))\r
+                               btcoexist->btc_write_4byte(btcoexist, 0x948, u32tmp_1[0]);\r
+                       else\r
+                               btcoexist->btc_write_4byte(btcoexist, 0x948, 0x0);\r
+                       break;\r
+               case BTC_ANT_WIFI_AT_AUX:\r
+                       u32tmp_1[0] = btcoexist->btc_read_4byte(btcoexist, 0x948);\r
+                       if( (u32tmp_1[0] == 0x40) || (u32tmp_1[0] == 0x240))\r
+                               btcoexist->btc_write_4byte(btcoexist, 0x948, u32tmp_1[0]);\r
+                       else\r
+                               btcoexist->btc_write_4byte(btcoexist, 0x948, 0x280);\r
+                       break;\r
+               }\r
+       }\r
+}\r
+#if 0\r
+boolean halbtc8723b2ant_CoexSwitchThresCheck(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8 wifi_rssi_state1, bt_rssi_state;\r
+       u32 vendor;\r
+       u8 offset = 0;\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_VENDOR, &vendor);\r
+\r
+       /* if (vendor == BTC_VENDOR_LENOVO) */\r
+       /*      offset = 20; */\r
+\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+               &prewifi_rssi_state, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES\r
+                          - coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+\r
+       if (BTC_RSSI_LOW(wifi_rssi_state1) || BTC_RSSI_LOW(bt_rssi_state))\r
+               return true;\r
+\r
+       return false;\r
+}\r
+#endif\r
+\r
+void halbtc8723b2ant_ps_tdma(IN struct btc_coexist *btcoexist,\r
+                    IN boolean force_exec, IN boolean turn_on, IN u8 type)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8                      wifi_rssi_state1,  bt_rssi_state;\r
+       s8                      wifi_duration_adjust = 0x0;\r
+       u8                      psTdmaByte4Modify = 0x0;\r
+       struct  btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;\r
+\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+               &prewifi_rssi_state, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES\r
+                          - coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                   "[BTCoex], %s turn %s PS TDMA, type=%d\n",\r
+               (force_exec ? "force to" : ""), (turn_on ? "ON" : "OFF"), type);\r
+       BTC_TRACE(trace_buf);\r
+       coex_dm->cur_ps_tdma_on = turn_on;\r
+       coex_dm->cur_ps_tdma = type;\r
+\r
+       if (!(BTC_RSSI_HIGH(wifi_rssi_state1) &&\r
+             BTC_RSSI_HIGH(bt_rssi_state)) && turn_on)\r
+               /* if (halbtc8723b2ant_CoexSwitchThresCheck(btcoexist) &&  turn_on) */\r
+       {\r
+               type = type + 100; /* for WiFi RSSI low or BT RSSI low */\r
+               coex_dm->is_switch_to_1dot5_ant = true;\r
+       } else\r
+               coex_dm->is_switch_to_1dot5_ant = false;\r
+\r
+\r
+       if (!force_exec) {\r
+               if ((coex_dm->pre_ps_tdma_on == coex_dm->cur_ps_tdma_on) &&\r
+                   (coex_dm->pre_ps_tdma == coex_dm->cur_ps_tdma))\r
+                       return;\r
+       }\r
+\r
+       if (coex_sta->scan_ap_num <= 5) {\r
+               if (coex_sta->a2dp_bit_pool >= 45)\r
+                       wifi_duration_adjust = -15;\r
+               else if (coex_sta->a2dp_bit_pool >= 35)\r
+                       wifi_duration_adjust = -10;\r
+               else\r
+                       wifi_duration_adjust = 5;\r
+       } else  if (coex_sta->scan_ap_num <= 20) {\r
+               if (coex_sta->a2dp_bit_pool >= 45)\r
+                       wifi_duration_adjust = -15;\r
+               else if (coex_sta->a2dp_bit_pool >= 35)\r
+                       wifi_duration_adjust = -10;\r
+               else\r
+                       wifi_duration_adjust = 0;\r
+       } else if (coex_sta->scan_ap_num <= 40) {\r
+               if (coex_sta->a2dp_bit_pool >= 45)\r
+                       wifi_duration_adjust = -15;\r
+               else if (coex_sta->a2dp_bit_pool >= 35)\r
+                       wifi_duration_adjust = -10;\r
+               else\r
+                       wifi_duration_adjust = -5;\r
+       } else {\r
+               if (coex_sta->a2dp_bit_pool >= 45)\r
+                       wifi_duration_adjust = -15;\r
+               else if (coex_sta->a2dp_bit_pool >= 35)\r
+                       wifi_duration_adjust = -10;\r
+               else\r
+                       wifi_duration_adjust = -10;\r
+       }\r
+\r
+       if ((bt_link_info->slave_role == true)  && (bt_link_info->a2dp_exist))\r
+               psTdmaByte4Modify =\r
+                       0x1;  /* 0x778 = 0x1 at wifi slot (no blocking BT Low-Pri pkts) */\r
+\r
+\r
+       if (turn_on) {\r
+               switch (type) {\r
+               case 1:\r
+               default:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                     0x3c + wifi_duration_adjust, 0x03, 0xf1,\r
+                                                     0x90 | psTdmaByte4Modify);\r
+                       break;\r
+               case 2:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                     0x2d + wifi_duration_adjust, 0x03, 0xf1,\r
+                                                     0x90 | psTdmaByte4Modify);\r
+                       break;\r
+               case 3:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x1c, 0x3, 0xf1,  0x90 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;\r
+               case 4:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x10, 0x03, 0xf1,  0x90 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;\r
+               case 5:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                     0x3c + wifi_duration_adjust, 0x3, 0x70,\r
+                                                     0x90 | psTdmaByte4Modify);\r
+                       break;\r
+               case 6:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                     0x2d + wifi_duration_adjust, 0x3, 0x70,\r
+                                                     0x90 | psTdmaByte4Modify);\r
+                       break;\r
+               case 7:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x1c, 0x3, 0x70,  0x90 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;\r
+               case 8:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xa3,\r
+                                                     0x10, 0x3, 0x70,  0x90 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;\r
+               case 9:\r
+               /*\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                     0x3c + wifi_duration_adjust, 0x03, 0xf1,\r
+                                                     0x90 | psTdmaByte4Modify);\r
+               */\r
+               /* Bryant Modify for BT no-profile busy case */\r
+               halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                     0x3c + wifi_duration_adjust, 0x03, 0xf1,\r
+                                                     0x91);\r
+                                                     \r
+                       break;\r
+               case 10:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                     0x2d + wifi_duration_adjust, 0x03, 0xf1,\r
+                                                     0x90 | psTdmaByte4Modify);\r
+                       break;\r
+               case 11:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x1c, 0x3, 0xf1,  0x90 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;\r
+               case 12:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x10, 0x3, 0xf1,  0x90 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;\r
+               case 13:\r
+               /*\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                     0x3c + wifi_duration_adjust, 0x3, 0x70,\r
+                                                     0x90 | psTdmaByte4Modify);\r
+               */\r
+               /* Bryant Modify for BT no-profile busy case */\r
+               halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                     0x3c + wifi_duration_adjust, 0x3, 0x70,\r
+                                                     0x91);                                                  \r
+                       break;\r
+               case 14:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                     0x2d + wifi_duration_adjust, 0x3, 0x70,\r
+                                                     0x90 | psTdmaByte4Modify);\r
+                       break;\r
+               case 15:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x1c, 0x3, 0x70,  0x90 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;\r
+               case 16:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x10, 0x3, 0x70,  0x90 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;\r
+               case 17:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xa3,\r
+                                                     0x2f, 0x2f, 0x60, 0x90);\r
+                       break;\r
+               case 18:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x5, 0x5, 0xe1, 0x90);\r
+                       break;\r
+               case 19:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x25, 0x25, 0xe1, 0x90);\r
+                       break;\r
+               case 20:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x25, 0x25, 0x60, 0x90);\r
+                       break;\r
+               case 21:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x15, 0x03, 0x70, 0x90);\r
+                       break;\r
+         case 22:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x35, 0x03, 0xf1, 0x90);\r
+                       break;  \r
+               case 23:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x35, 0x03, 0x71, 0x10);\r
+                       break;  \r
+                       \r
+         case 33:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x1c, 0x3, 0xf1,  0x91);          \r
+               \r
+                       break;\r
+               case 71:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                     0x3c + wifi_duration_adjust, 0x03, 0xf1,\r
+                                                     0x90);\r
+                       break;\r
+               case 101:\r
+               case 105:\r
+               case 113:\r
+               case 171:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xd3,\r
+                                     0x3a + wifi_duration_adjust, 0x03, 0x70,\r
+                                                     0x50 | psTdmaByte4Modify);\r
+                       break;\r
+               case 102:\r
+               case 106:\r
+               case 110:\r
+               case 114:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xd3,\r
+                                     0x2d + wifi_duration_adjust, 0x03, 0x70,\r
+                                                     0x50 | psTdmaByte4Modify);\r
+                       break;\r
+               case 103:\r
+               case 107:\r
+               case 111:\r
+               case 115:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xd3,\r
+                                                     0x1c, 0x03, 0x70, 0x50 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;\r
+               case 104:\r
+               case 108:\r
+               case 112:\r
+               case 116:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xd3,\r
+                                                     0x10, 0x03, 0x70, 0x50 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;\r
+               case 109:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x3c, 0x03, 0xf1, 0x90 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;\r
+               /* case 113:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x3c, 0x03, 0x70, 0x90 |\r
+                                                     psTdmaByte4Modify);\r
+                       break; */\r
+               case 121:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x15, 0x03, 0x70, 0x90 |\r
+                                                     psTdmaByte4Modify);\r
+                       break;  \r
+               case 122:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x35, 0x03, 0x71, 0x11);\r
+                       break;\r
+         case 123:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xe3,\r
+                                                     0x35, 0x03, 0x71, 0x10);\r
+                       break;          \r
+         case 133:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0xd3,\r
+                                                     0x1c, 0x3, 0x70,  0x51);          \r
+               \r
+                       break;          \r
+               }\r
+       } else {\r
+               /* disable PS tdma */\r
+               switch (type) {\r
+               case 0:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0x0,\r
+                                                     0x0, 0x0, 0x40, 0x0);\r
+                       break;\r
+               case 1:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0x0,\r
+                                                     0x0, 0x0, 0x48, 0x0);\r
+                       break;\r
+               default:\r
+                       halbtc8723b2ant_set_fw_pstdma(btcoexist, 0x0,\r
+                                                     0x0, 0x0, 0x40, 0x0);\r
+                       break;\r
+               }\r
+       }\r
+\r
+       /* update pre state */\r
+       coex_dm->pre_ps_tdma_on = coex_dm->cur_ps_tdma_on;\r
+       coex_dm->pre_ps_tdma = coex_dm->cur_ps_tdma;\r
+}\r
+\r
+void halbtc8723b2ant_ps_tdma_check_for_power_save_state(\r
+       IN struct btc_coexist *btcoexist, IN boolean new_ps_state)\r
+{\r
+       u8      lps_mode = 0x0;\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U1_LPS_MODE, &lps_mode);\r
+\r
+       if (lps_mode) { /* already under LPS state */\r
+               if (new_ps_state) {\r
+                       /* keep state under LPS, do nothing. */\r
+               } else {\r
+                       /* will leave LPS state, turn off psTdma first */\r
+                       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false,\r
+                                               1);\r
+               }\r
+       } else {                                        /* NO PS state */\r
+               if (new_ps_state) {\r
+                       /* will enter LPS state, turn off psTdma first */\r
+                       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false,\r
+                                               1);\r
+               } else {\r
+                       /* keep state under NO PS state, do nothing. */\r
+               }\r
+       }\r
+}\r
+\r
+void halbtc8723b2ant_power_save_state(IN struct btc_coexist *btcoexist,\r
+                             IN u8 ps_type, IN u8 lps_val, IN u8 rpwm_val)\r
+{\r
+       boolean         low_pwr_disable = false;\r
+\r
+       switch (ps_type) {\r
+       case BTC_PS_WIFI_NATIVE:\r
+               /* recover to original 32k low power setting */\r
+               low_pwr_disable = false;\r
+               btcoexist->btc_set(btcoexist,\r
+                                  BTC_SET_ACT_DISABLE_LOW_POWER,\r
+                                  &low_pwr_disable);\r
+               btcoexist->btc_set(btcoexist, BTC_SET_ACT_NORMAL_LPS,\r
+                                  NULL);\r
+               coex_sta->force_lps_on = false;\r
+               break;\r
+       case BTC_PS_LPS_ON:\r
+               halbtc8723b2ant_ps_tdma_check_for_power_save_state(\r
+                       btcoexist, true);\r
+               halbtc8723b2ant_lps_rpwm(btcoexist, NORMAL_EXEC,\r
+                                        lps_val, rpwm_val);\r
+               /* when coex force to enter LPS, do not enter 32k low power. */\r
+               low_pwr_disable = true;\r
+               btcoexist->btc_set(btcoexist,\r
+                                  BTC_SET_ACT_DISABLE_LOW_POWER,\r
+                                  &low_pwr_disable);\r
+               /* power save must executed before psTdma.                       */\r
+               btcoexist->btc_set(btcoexist, BTC_SET_ACT_ENTER_LPS,\r
+                                  NULL);\r
+               coex_sta->force_lps_on = true;\r
+               break;\r
+       case BTC_PS_LPS_OFF:\r
+               halbtc8723b2ant_ps_tdma_check_for_power_save_state(\r
+                       btcoexist, false);\r
+               btcoexist->btc_set(btcoexist, BTC_SET_ACT_LEAVE_LPS,\r
+                                  NULL);\r
+               coex_sta->force_lps_on = false;\r
+               break;\r
+       default:\r
+               break;\r
+       }\r
+}\r
+\r
+\r
+void halbtc8723b2ant_coex_all_off(IN struct btc_coexist *btcoexist)\r
+{\r
+       /* fw all off */\r
+       halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0,\r
+                                        0x0);\r
+       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+       halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       /* sw all off */\r
+       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false);\r
+       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);\r
+\r
+       /* hw all off */\r
+       /* btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0); */\r
+       halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);\r
+}\r
+\r
+void halbtc8723b2ant_init_coex_dm(IN struct btc_coexist *btcoexist)\r
+{\r
+       /* force to reset coex mechanism */\r
+       halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0,\r
+                                        0x0);\r
+       halbtc8723b2ant_ps_tdma(btcoexist, FORCE_EXEC, false, 1);\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6);\r
+       halbtc8723b2ant_dec_bt_pwr(btcoexist, FORCE_EXEC, 0);\r
+\r
+       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false);\r
+       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);\r
+\r
+       coex_sta->pop_event_cnt = 0;\r
+\r
+}\r
+\r
+void halbtc8723b2ant_action_bt_inquiry(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW,\r
+                       prewifi_rssi_state1 = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8              wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;\r
+       boolean wifi_connected = false;\r
+       boolean low_pwr_disable = true;\r
+       boolean         scan = false, link = false, roam = false;\r
+       boolean wifi_busy = false;\r
+\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                          &prewifi_rssi_state1, 2,\r
+                          BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -\r
+                          coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+\r
+       btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,\r
+                          &low_pwr_disable);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,\r
+                          &wifi_connected);\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_SCAN, &scan);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);\r
+\r
+       halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0,\r
+                                        0x0);\r
+\r
+       if (coex_sta->bt_abnormal_scan) {\r
+               halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true,\r
+                                               23);\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 3);                                \r
+       } else if (scan || link || roam) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Wifi link process + BT Inq/Page!!\n");\r
+               BTC_TRACE(trace_buf);\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC,\r
+                                                    7);\r
+               halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3);\r
+       } else if (wifi_connected) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Wifi connected + BT Inq/Page!!\n");\r
+               BTC_TRACE(trace_buf);\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC,\r
+                                                    7);\r
+                                                    \r
+               if (wifi_busy)                               \r
+                       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 3);\r
+               else\r
+                 halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 33);    \r
+       } else {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Wifi no-link + BT Inq/Page!!\n");\r
+               BTC_TRACE(trace_buf);\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);\r
+               halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);\r
+       }\r
+\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, FORCE_EXEC, 6);\r
+       halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false);\r
+       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);\r
+       /*\r
+               coex_dm->need_recover0x948 = true;\r
+               coex_dm->backup0x948 = btcoexist->btc_read_4byte(btcoexist, 0x948);\r
+\r
+               halbtc8723b2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_AUX, false, false);\r
+       */\r
+}\r
+\r
+\r
+void halbtc8723b2ant_action_wifi_link_process(IN struct btc_coexist *btcoexist)\r
+{\r
+       u32     u32tmp;\r
+       u8      u8tmpa, u8tmpb;\r
+\r
+       halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 15);\r
+       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 22);\r
+\r
+       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false);\r
+       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);\r
+\r
+\r
+       u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x948);\r
+       u8tmpa = btcoexist->btc_read_1byte(btcoexist, 0x765);\r
+       u8tmpb = btcoexist->btc_read_1byte(btcoexist, 0x76e);\r
+\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+               "############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x76e=0x%x\n",\r
+                   u32tmp,  u8tmpa, u8tmpb);\r
+       BTC_TRACE(trace_buf);\r
+}\r
+\r
+boolean halbtc8723b2ant_action_wifi_idle_process(IN struct btc_coexist\r
+               *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW,\r
+                       prewifi_rssi_state1 = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8              wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;\r
+       u8              ap_num = 0;\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       /* wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist, 1, 2, BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES-coex_dm->switch_thres_offset-coex_dm->switch_thres_offset, 0); */\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                          &prewifi_rssi_state1, 2,\r
+                          BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -\r
+               coex_dm->switch_thres_offset - coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+               coex_dm->switch_thres_offset - coex_dm->switch_thres_offset, 0);\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM, &ap_num);\r
+\r
+       /* define the office environment */\r
+       if (BTC_RSSI_HIGH(wifi_rssi_state1) &&\r
+           (coex_sta->hid_exist == true) &&\r
+           (coex_sta->a2dp_exist == true)) {\r
+\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                       "[BTCoex], Wifi  idle process for BT HID+A2DP exist!!\n");\r
+               BTC_TRACE(trace_buf);\r
+\r
+               halbtc8723b2ant_dac_swing(btcoexist, NORMAL_EXEC, true, 0x6);\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+               /* sw all off */\r
+               halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false,\r
+                                             false);\r
+               halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false,\r
+                                             0x18);\r
+\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);\r
+\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,\r
+                                                0x0, 0x0);\r
+               halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);\r
+\r
+               return true;\r
+       } else {\r
+               halbtc8723b2ant_dac_swing(btcoexist, NORMAL_EXEC, true, 0x18);\r
+               return false;\r
+       }\r
+\r
+\r
+}\r
+\r
+\r
+\r
+boolean halbtc8723b2ant_is_common_action(IN struct btc_coexist *btcoexist)\r
+{\r
+       boolean                 common = false, wifi_connected = false, wifi_busy = false;\r
+       boolean                 bt_hs_on = false, low_pwr_disable = false;\r
+       boolean                 asus_8723b = false;\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_HS_OPERATION, &bt_hs_on);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,\r
+                          &wifi_connected);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_BUSY, &wifi_busy);\r
+\r
+       if (!wifi_connected) {\r
+               low_pwr_disable = false;\r
+               btcoexist->btc_set(btcoexist, BTC_SET_ACT_DISABLE_LOW_POWER,\r
+                                  &low_pwr_disable);\r
+               halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false,\r
+                                          0x8);\r
+\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Wifi non-connected idle!!\n");\r
+               BTC_TRACE(trace_buf);\r
+\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,\r
+                                         0x0);\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);\r
+\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,\r
+                                                0x0, 0x0);\r
+               halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);\r
+               halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+               halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false,\r
+                                             false);\r
+               halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false,\r
+                                             0x18);\r
+\r
+               common = true;\r
+       } else {\r
+               if (BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE ==\r
+                   coex_dm->bt_status) {\r
+                       low_pwr_disable = false;\r
+                       btcoexist->btc_set(btcoexist,\r
+                                          BTC_SET_ACT_DISABLE_LOW_POWER,\r
+                                          &low_pwr_disable);\r
+                       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC,\r
+                                                  false, false, 0x8);\r
+\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Wifi connected + BT non connected-idle!!\n");\r
+                       BTC_TRACE(trace_buf);\r
+\r
+                       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,\r
+                                                 0xfffff, 0x0);\r
+                       halbtc8723b2ant_coex_table_with_type(btcoexist,\r
+                                                            NORMAL_EXEC, 0);\r
+\r
+                       halbtc8723b2ant_power_save_state(btcoexist,\r
+                                                BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false,\r
+                                               1);\r
+                       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,\r
+                                                        0xb);\r
+                       halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false,\r
+                                                     false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+\r
+                       common = true;\r
+               } else if (BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE ==\r
+                          coex_dm->bt_status) {\r
+                       low_pwr_disable = true;\r
+                       btcoexist->btc_set(btcoexist,\r
+                                          BTC_SET_ACT_DISABLE_LOW_POWER,\r
+                                          &low_pwr_disable);\r
+\r
+                       if (bt_hs_on)\r
+                               return false;\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Wifi connected + BT connected-idle!!\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC,\r
+                                                  false, false, 0x8);\r
+\r
+                       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,\r
+                                                 0xfffff, 0x0);\r
+                       halbtc8723b2ant_coex_table_with_type(btcoexist,\r
+                                                            NORMAL_EXEC, 0);\r
+\r
+                       halbtc8723b2ant_power_save_state(btcoexist,\r
+                                                BTC_PS_WIFI_NATIVE, 0x0, 0x0);\r
+                       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false,\r
+                                               1);\r
+                       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,\r
+                                                        0xb);\r
+                       halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+\r
+                       common = true;\r
+               } else {\r
+                       low_pwr_disable = true;\r
+                       btcoexist->btc_set(btcoexist,\r
+                                          BTC_SET_ACT_DISABLE_LOW_POWER,\r
+                                          &low_pwr_disable);\r
+\r
+                       if (wifi_busy) {\r
+                               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                       "[BTCoex], Wifi Connected-Busy + BT Busy!!\n");\r
+                               BTC_TRACE(trace_buf);\r
+                               /* btcoexist->btc_get(btcoexist,\r
+                                       BTC_GET_BL_IS_ASUS_8723B, &asus_8723b);\r
+                               if (!asus_8723b) \r
+                                       common = false;\r
+                               else\r
+                                       common = halbtc8723b2ant_action_wifi_idle_process(\r
+                                                        btcoexist); */\r
+                               common = false;\r
+                       } else {\r
+                               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                       "[BTCoex], Wifi Connected-Idle + BT Busy!!\n");\r
+                               BTC_TRACE(trace_buf);\r
+                               /* common = false;       */\r
+                               common = halbtc8723b2ant_action_wifi_idle_process(\r
+                                                btcoexist);\r
+                       }\r
+               }\r
+       }\r
+\r
+       return common;\r
+}\r
+void halbtc8723b2ant_tdma_duration_adjust(IN struct btc_coexist *btcoexist,\r
+               IN boolean sco_hid, IN boolean tx_pause, IN u8 max_interval)\r
+{\r
+       static s32              up, dn, m, n, wait_count;\r
+       s32                     result;   /* 0: no change, +1: increase WiFi duration, -1: decrease WiFi duration */\r
+       u8                      retry_count = 0;\r
+\r
+       if (!coex_dm->auto_tdma_adjust) {\r
+               coex_dm->auto_tdma_adjust = true;\r
+               {\r
+                       if (sco_hid) {\r
+                               if (tx_pause) {\r
+                                       if (max_interval == 1) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 13);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       13;\r
+                                       } else if (max_interval == 2) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 14);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       14;\r
+                                       } else if (max_interval == 3) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 15);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       15;\r
+                                       } else {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 15);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       15;\r
+                                       }\r
+                               } else {\r
+                                       if (max_interval == 1) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 9);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       9;\r
+                                       } else if (max_interval == 2) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 10);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       10;\r
+                                       } else if (max_interval == 3) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 11);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       11;\r
+                                       } else {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 11);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       11;\r
+                                       }\r
+                               }\r
+                       } else {\r
+                               if (tx_pause) {\r
+                                       if (max_interval == 1) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 5);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       5;\r
+                                       } else if (max_interval == 2) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 6);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       6;\r
+                                       } else if (max_interval == 3) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 7);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       7;\r
+                                       } else {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 7);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       7;\r
+                                       }\r
+                               } else {\r
+                                       if (max_interval == 1) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 1);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       1;\r
+                                       } else if (max_interval == 2) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 2);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       2;\r
+                                       } else if (max_interval == 3) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 3);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       3;\r
+                                       } else {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 3);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       3;\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+               /* ============ */\r
+               up = 0;\r
+               dn = 0;\r
+               m = 1;\r
+               n = 3;\r
+               result = 0;\r
+               wait_count = 0;\r
+       } else {\r
+               /* accquire the BT TRx retry count from BT_Info byte2 */\r
+               retry_count = coex_sta->bt_retry_cnt;\r
+\r
+               if ((coex_sta->low_priority_tx) > 1050 ||\r
+                   (coex_sta->low_priority_rx) > 1250)\r
+                       retry_count++;\r
+\r
+               result = 0;\r
+               wait_count++;\r
+\r
+               if (retry_count ==\r
+                   0) { /* no retry in the last 2-second duration */\r
+                       up++;\r
+                       dn--;\r
+\r
+                       if (dn <= 0)\r
+                               dn = 0;\r
+\r
+                       if (up >= n) {  /* if retry count during continuous n*2 seconds is 0, enlarge WiFi duration */\r
+                               wait_count = 0;\r
+                               n = 3;\r
+                               up = 0;\r
+                               dn = 0;\r
+                               result = 1;\r
+                       }\r
+               } else if (retry_count <=\r
+                          3) { /* <=3 retry in the last 2-second duration */\r
+                       up--;\r
+                       dn++;\r
+\r
+                       if (up <= 0)\r
+                               up = 0;\r
+\r
+                       if (dn == 2) {/* if continuous 2 retry count(every 2 seconds) >0 and < 3, reduce WiFi duration */\r
+                               if (wait_count <= 2)\r
+                                       m++; /* to avoid loop between the two levels */\r
+                               else\r
+                                       m = 1;\r
+\r
+                               if (m >= 20)  /* maximum of m = 20 ' will recheck if need to adjust wifi duration in maximum time interval 120 seconds */\r
+                                       m = 20;\r
+\r
+                               n = 3 * m;\r
+                               up = 0;\r
+                               dn = 0;\r
+                               wait_count = 0;\r
+                               result = -1;\r
+                       }\r
+               } else { /* retry count > 3, once retry count > 3, to reduce WiFi duration */\r
+                       if (wait_count == 1)\r
+                               m++; /* to avoid loop between the two levels */\r
+                       else\r
+                               m = 1;\r
+\r
+                       if (m >= 20)  /* maximum of m = 20 ' will recheck if need to adjust wifi duration in maximum time interval 120 seconds */\r
+                               m = 20;\r
+\r
+                       n = 3 * m;\r
+                       up = 0;\r
+                       dn = 0;\r
+                       wait_count = 0;\r
+                       result = -1;\r
+               }\r
+\r
+               if (max_interval == 1) {\r
+                       if (tx_pause) {\r
+                               if (coex_dm->cur_ps_tdma == 71) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 5);\r
+                                       coex_dm->ps_tdma_du_adj_type = 5;\r
+                               } else if (coex_dm->cur_ps_tdma == 1) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 5);\r
+                                       coex_dm->ps_tdma_du_adj_type = 5;\r
+                               } else if (coex_dm->cur_ps_tdma == 2) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 6);\r
+                                       coex_dm->ps_tdma_du_adj_type = 6;\r
+                               } else if (coex_dm->cur_ps_tdma == 3) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 7);\r
+                                       coex_dm->ps_tdma_du_adj_type = 7;\r
+                               } else if (coex_dm->cur_ps_tdma == 4) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 8);\r
+                                       coex_dm->ps_tdma_du_adj_type = 8;\r
+                               }\r
+                               if (coex_dm->cur_ps_tdma == 9) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 13);\r
+                                       coex_dm->ps_tdma_du_adj_type = 13;\r
+                               } else if (coex_dm->cur_ps_tdma == 10) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 14);\r
+                                       coex_dm->ps_tdma_du_adj_type = 14;\r
+                               } else if (coex_dm->cur_ps_tdma == 11) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 15);\r
+                                       coex_dm->ps_tdma_du_adj_type = 15;\r
+                               } else if (coex_dm->cur_ps_tdma == 12) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 16);\r
+                                       coex_dm->ps_tdma_du_adj_type = 16;\r
+                               }\r
+\r
+                               if (result == -1) {\r
+                                       if (coex_dm->cur_ps_tdma == 5) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 6);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       6;\r
+                                       } else if (coex_dm->cur_ps_tdma == 6) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 7);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       7;\r
+                                       } else if (coex_dm->cur_ps_tdma == 7) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 8);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       8;\r
+                                       } else if (coex_dm->cur_ps_tdma == 13) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 14);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       14;\r
+                                       } else if (coex_dm->cur_ps_tdma == 14) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 15);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       15;\r
+                                       } else if (coex_dm->cur_ps_tdma == 15) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 16);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       16;\r
+                                       }\r
+                               } else if (result == 1) {\r
+                                       if (coex_dm->cur_ps_tdma == 8) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 7);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       7;\r
+                                       } else if (coex_dm->cur_ps_tdma == 7) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 6);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       6;\r
+                                       } else if (coex_dm->cur_ps_tdma == 6) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 5);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       5;\r
+                                       } else if (coex_dm->cur_ps_tdma == 16) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 15);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       15;\r
+                                       } else if (coex_dm->cur_ps_tdma == 15) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 14);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       14;\r
+                                       } else if (coex_dm->cur_ps_tdma == 14) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 13);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       13;\r
+                                       }\r
+                               }\r
+                       } else {\r
+                               if (coex_dm->cur_ps_tdma == 5) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 71);\r
+                                       coex_dm->ps_tdma_du_adj_type = 71;\r
+                               } else if (coex_dm->cur_ps_tdma == 6) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 2);\r
+                                       coex_dm->ps_tdma_du_adj_type = 2;\r
+                               } else if (coex_dm->cur_ps_tdma == 7) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 3);\r
+                                       coex_dm->ps_tdma_du_adj_type = 3;\r
+                               } else if (coex_dm->cur_ps_tdma == 8) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 4);\r
+                                       coex_dm->ps_tdma_du_adj_type = 4;\r
+                               }\r
+                               if (coex_dm->cur_ps_tdma == 13) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 9);\r
+                                       coex_dm->ps_tdma_du_adj_type = 9;\r
+                               } else if (coex_dm->cur_ps_tdma == 14) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 10);\r
+                                       coex_dm->ps_tdma_du_adj_type = 10;\r
+                               } else if (coex_dm->cur_ps_tdma == 15) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 11);\r
+                                       coex_dm->ps_tdma_du_adj_type = 11;\r
+                               } else if (coex_dm->cur_ps_tdma == 16) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 12);\r
+                                       coex_dm->ps_tdma_du_adj_type = 12;\r
+                               }\r
+\r
+                               if (result == -1) {\r
+                                       if (coex_dm->cur_ps_tdma == 71) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 1);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       1;\r
+                                       } else if (coex_dm->cur_ps_tdma == 1) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 2);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       2;\r
+                                       } else if (coex_dm->cur_ps_tdma == 2) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 3);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       3;\r
+                                       } else if (coex_dm->cur_ps_tdma == 3) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 4);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       4;\r
+                                       } else if (coex_dm->cur_ps_tdma == 9) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 10);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       10;\r
+                                       } else if (coex_dm->cur_ps_tdma == 10) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 11);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       11;\r
+                                       } else if (coex_dm->cur_ps_tdma == 11) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 12);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       12;\r
+                                       }\r
+                               } else if (result == 1) {\r
+                                       if (coex_dm->cur_ps_tdma == 4) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 3);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       3;\r
+                                       } else if (coex_dm->cur_ps_tdma == 3) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 2);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       2;\r
+                                       } else if (coex_dm->cur_ps_tdma == 2) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 1);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       1;\r
+                                       } else if (coex_dm->cur_ps_tdma == 1) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 71);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       71;\r
+                                       } else if (coex_dm->cur_ps_tdma == 12) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 11);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       11;\r
+                                       } else if (coex_dm->cur_ps_tdma == 11) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 10);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       10;\r
+                                       } else if (coex_dm->cur_ps_tdma == 10) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 9);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       9;\r
+                                       }\r
+                               }\r
+                       }\r
+               } else if (max_interval == 2) {\r
+                       if (tx_pause) {\r
+                               if (coex_dm->cur_ps_tdma == 1) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 6);\r
+                                       coex_dm->ps_tdma_du_adj_type = 6;\r
+                               } else if (coex_dm->cur_ps_tdma == 2) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 6);\r
+                                       coex_dm->ps_tdma_du_adj_type = 6;\r
+                               } else if (coex_dm->cur_ps_tdma == 3) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 7);\r
+                                       coex_dm->ps_tdma_du_adj_type = 7;\r
+                               } else if (coex_dm->cur_ps_tdma == 4) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 8);\r
+                                       coex_dm->ps_tdma_du_adj_type = 8;\r
+                               }\r
+                               if (coex_dm->cur_ps_tdma == 9) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 14);\r
+                                       coex_dm->ps_tdma_du_adj_type = 14;\r
+                               } else if (coex_dm->cur_ps_tdma == 10) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 14);\r
+                                       coex_dm->ps_tdma_du_adj_type = 14;\r
+                               } else if (coex_dm->cur_ps_tdma == 11) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 15);\r
+                                       coex_dm->ps_tdma_du_adj_type = 15;\r
+                               } else if (coex_dm->cur_ps_tdma == 12) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 16);\r
+                                       coex_dm->ps_tdma_du_adj_type = 16;\r
+                               }\r
+                               if (result == -1) {\r
+                                       if (coex_dm->cur_ps_tdma == 5) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 6);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       6;\r
+                                       } else if (coex_dm->cur_ps_tdma == 6) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 7);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       7;\r
+                                       } else if (coex_dm->cur_ps_tdma == 7) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 8);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       8;\r
+                                       } else if (coex_dm->cur_ps_tdma == 13) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 14);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       14;\r
+                                       } else if (coex_dm->cur_ps_tdma == 14) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 15);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       15;\r
+                                       } else if (coex_dm->cur_ps_tdma == 15) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 16);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       16;\r
+                                       }\r
+                               } else if (result == 1) {\r
+                                       if (coex_dm->cur_ps_tdma == 8) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 7);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       7;\r
+                                       } else if (coex_dm->cur_ps_tdma == 7) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 6);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       6;\r
+                                       } else if (coex_dm->cur_ps_tdma == 6) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 6);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       6;\r
+                                       } else if (coex_dm->cur_ps_tdma == 16) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 15);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       15;\r
+                                       } else if (coex_dm->cur_ps_tdma == 15) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 14);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       14;\r
+                                       } else if (coex_dm->cur_ps_tdma == 14) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 14);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       14;\r
+                                       }\r
+                               }\r
+                       } else {\r
+                               if (coex_dm->cur_ps_tdma == 5) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 2);\r
+                                       coex_dm->ps_tdma_du_adj_type = 2;\r
+                               } else if (coex_dm->cur_ps_tdma == 6) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 2);\r
+                                       coex_dm->ps_tdma_du_adj_type = 2;\r
+                               } else if (coex_dm->cur_ps_tdma == 7) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 3);\r
+                                       coex_dm->ps_tdma_du_adj_type = 3;\r
+                               } else if (coex_dm->cur_ps_tdma == 8) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 4);\r
+                                       coex_dm->ps_tdma_du_adj_type = 4;\r
+                               }\r
+                               if (coex_dm->cur_ps_tdma == 13) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 10);\r
+                                       coex_dm->ps_tdma_du_adj_type = 10;\r
+                               } else if (coex_dm->cur_ps_tdma == 14) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 10);\r
+                                       coex_dm->ps_tdma_du_adj_type = 10;\r
+                               } else if (coex_dm->cur_ps_tdma == 15) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 11);\r
+                                       coex_dm->ps_tdma_du_adj_type = 11;\r
+                               } else if (coex_dm->cur_ps_tdma == 16) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 12);\r
+                                       coex_dm->ps_tdma_du_adj_type = 12;\r
+                               }\r
+                               if (result == -1) {\r
+                                       if (coex_dm->cur_ps_tdma == 1) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 2);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       2;\r
+                                       } else if (coex_dm->cur_ps_tdma == 2) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 3);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       3;\r
+                                       } else if (coex_dm->cur_ps_tdma == 3) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 4);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       4;\r
+                                       } else if (coex_dm->cur_ps_tdma == 9) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 10);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       10;\r
+                                       } else if (coex_dm->cur_ps_tdma == 10) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 11);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       11;\r
+                                       } else if (coex_dm->cur_ps_tdma == 11) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 12);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       12;\r
+                                       }\r
+                               } else if (result == 1) {\r
+                                       if (coex_dm->cur_ps_tdma == 4) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 3);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       3;\r
+                                       } else if (coex_dm->cur_ps_tdma == 3) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 2);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       2;\r
+                                       } else if (coex_dm->cur_ps_tdma == 2) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 2);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       2;\r
+                                       } else if (coex_dm->cur_ps_tdma == 12) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 11);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       11;\r
+                                       } else if (coex_dm->cur_ps_tdma == 11) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 10);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       10;\r
+                                       } else if (coex_dm->cur_ps_tdma == 10) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 10);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       10;\r
+                                       }\r
+                               }\r
+                       }\r
+               } else if (max_interval == 3) {\r
+                       if (tx_pause) {\r
+                               if (coex_dm->cur_ps_tdma == 1) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 7);\r
+                                       coex_dm->ps_tdma_du_adj_type = 7;\r
+                               } else if (coex_dm->cur_ps_tdma == 2) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 7);\r
+                                       coex_dm->ps_tdma_du_adj_type = 7;\r
+                               } else if (coex_dm->cur_ps_tdma == 3) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 7);\r
+                                       coex_dm->ps_tdma_du_adj_type = 7;\r
+                               } else if (coex_dm->cur_ps_tdma == 4) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 8);\r
+                                       coex_dm->ps_tdma_du_adj_type = 8;\r
+                               }\r
+                               if (coex_dm->cur_ps_tdma == 9) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 15);\r
+                                       coex_dm->ps_tdma_du_adj_type = 15;\r
+                               } else if (coex_dm->cur_ps_tdma == 10) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 15);\r
+                                       coex_dm->ps_tdma_du_adj_type = 15;\r
+                               } else if (coex_dm->cur_ps_tdma == 11) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 15);\r
+                                       coex_dm->ps_tdma_du_adj_type = 15;\r
+                               } else if (coex_dm->cur_ps_tdma == 12) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 16);\r
+                                       coex_dm->ps_tdma_du_adj_type = 16;\r
+                               }\r
+                               if (result == -1) {\r
+                                       if (coex_dm->cur_ps_tdma == 5) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 7);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       7;\r
+                                       } else if (coex_dm->cur_ps_tdma == 6) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 7);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       7;\r
+                                       } else if (coex_dm->cur_ps_tdma == 7) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 8);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       8;\r
+                                       } else if (coex_dm->cur_ps_tdma == 13) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 15);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       15;\r
+                                       } else if (coex_dm->cur_ps_tdma == 14) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 15);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       15;\r
+                                       } else if (coex_dm->cur_ps_tdma == 15) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 16);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       16;\r
+                                       }\r
+                               } else if (result == 1) {\r
+                                       if (coex_dm->cur_ps_tdma == 8) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 7);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       7;\r
+                                       } else if (coex_dm->cur_ps_tdma == 7) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 7);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       7;\r
+                                       } else if (coex_dm->cur_ps_tdma == 6) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 7);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       7;\r
+                                       } else if (coex_dm->cur_ps_tdma == 16) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 15);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       15;\r
+                                       } else if (coex_dm->cur_ps_tdma == 15) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 15);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       15;\r
+                                       } else if (coex_dm->cur_ps_tdma == 14) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 15);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       15;\r
+                                       }\r
+                               }\r
+                       } else {\r
+                               if (coex_dm->cur_ps_tdma == 5) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 3);\r
+                                       coex_dm->ps_tdma_du_adj_type = 3;\r
+                               } else if (coex_dm->cur_ps_tdma == 6) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 3);\r
+                                       coex_dm->ps_tdma_du_adj_type = 3;\r
+                               } else if (coex_dm->cur_ps_tdma == 7) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 3);\r
+                                       coex_dm->ps_tdma_du_adj_type = 3;\r
+                               } else if (coex_dm->cur_ps_tdma == 8) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 4);\r
+                                       coex_dm->ps_tdma_du_adj_type = 4;\r
+                               }\r
+                               if (coex_dm->cur_ps_tdma == 13) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 11);\r
+                                       coex_dm->ps_tdma_du_adj_type = 11;\r
+                               } else if (coex_dm->cur_ps_tdma == 14) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 11);\r
+                                       coex_dm->ps_tdma_du_adj_type = 11;\r
+                               } else if (coex_dm->cur_ps_tdma == 15) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 11);\r
+                                       coex_dm->ps_tdma_du_adj_type = 11;\r
+                               } else if (coex_dm->cur_ps_tdma == 16) {\r
+                                       halbtc8723b2ant_ps_tdma(btcoexist,\r
+                                                       NORMAL_EXEC, true, 12);\r
+                                       coex_dm->ps_tdma_du_adj_type = 12;\r
+                               }\r
+                               if (result == -1) {\r
+                                       if (coex_dm->cur_ps_tdma == 1) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 3);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       3;\r
+                                       } else if (coex_dm->cur_ps_tdma == 2) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 3);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       3;\r
+                                       } else if (coex_dm->cur_ps_tdma == 3) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 4);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       4;\r
+                                       } else if (coex_dm->cur_ps_tdma == 9) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 11);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       11;\r
+                                       } else if (coex_dm->cur_ps_tdma == 10) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 11);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       11;\r
+                                       } else if (coex_dm->cur_ps_tdma == 11) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 12);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       12;\r
+                                       }\r
+                               } else if (result == 1) {\r
+                                       if (coex_dm->cur_ps_tdma == 4) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 3);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       3;\r
+                                       } else if (coex_dm->cur_ps_tdma == 3) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 3);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       3;\r
+                                       } else if (coex_dm->cur_ps_tdma == 2) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 3);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       3;\r
+                                       } else if (coex_dm->cur_ps_tdma == 12) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 11);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       11;\r
+                                       } else if (coex_dm->cur_ps_tdma == 11) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 11);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       11;\r
+                                       } else if (coex_dm->cur_ps_tdma == 10) {\r
+                                               halbtc8723b2ant_ps_tdma(\r
+                                                       btcoexist, NORMAL_EXEC,\r
+                                                       true, 11);\r
+                                               coex_dm->ps_tdma_du_adj_type =\r
+                                                       11;\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       /* if current PsTdma not match with the recorded one (when scan, dhcp...), */\r
+       /* then we have to adjust it back to the previous record one. */\r
+       if (coex_dm->cur_ps_tdma != coex_dm->ps_tdma_du_adj_type) {\r
+               boolean scan = false, link = false, roam = false;\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                       "[BTCoex], PsTdma type dismatch!!!, cur_ps_tdma=%d, recordPsTdma=%d\n",\r
+                           coex_dm->cur_ps_tdma, coex_dm->ps_tdma_du_adj_type);\r
+               BTC_TRACE(trace_buf);\r
+\r
+               btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_SCAN, &scan);\r
+               btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);\r
+               btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);\r
+\r
+               if (!scan && !link && !roam)\r
+                       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true,\r
+                                               coex_dm->ps_tdma_du_adj_type);\r
+               else {\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n");\r
+                       BTC_TRACE(trace_buf);\r
+               }\r
+       }\r
+}\r
+\r
+/* SCO only or SCO+PAN(HS) */\r
+void halbtc8723b2ant_action_sco(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8      wifi_rssi_state, bt_rssi_state;\r
+       u32     wifi_bw;\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);\r
+\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 4);\r
+\r
+       if (BTC_RSSI_HIGH(bt_rssi_state))\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+\r
+       if (BTC_WIFI_BW_LEGACY == wifi_bw) /* for SCO quality at 11b/g mode */\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 2);\r
+       else  /* for SCO quality & wifi performance balance at 11n mode */\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 8);\r
+\r
+       halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0,\r
+                                        0x0);\r
+       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false,\r
+                               0); /* for voice quality */\r
+\r
+       /* sw mechanism */\r
+       if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     true, 0x4);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     true, 0x4);\r
+               }\r
+       } else {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     true, 0x4);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     true, 0x4);\r
+               }\r
+       }\r
+}\r
+\r
+\r
+void halbtc8723b2ant_action_hid(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8      wifi_rssi_state, bt_rssi_state;\r
+       u32     wifi_bw;\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);\r
+\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+\r
+       if (BTC_RSSI_HIGH(bt_rssi_state))\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+\r
+       if (BTC_WIFI_BW_LEGACY == wifi_bw) /* for HID at 11b/g mode */\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);\r
+       else  /* for HID quality & wifi performance balance at 11n mode */\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 9);\r
+\r
+       halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0,\r
+                                        0x0);\r
+\r
+       if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+           (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))\r
+               halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 9);\r
+       else\r
+               halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 13);\r
+\r
+       /* sw mechanism */\r
+       if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       } else {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       }\r
+}\r
+\r
+/* A2DP only / PAN(EDR) only/ A2DP+PAN(HS) */\r
+void halbtc8723b2ant_action_a2dp(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW,\r
+                       prewifi_rssi_state1 = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8              wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;\r
+       u32             wifi_bw;\r
+       u8              ap_num = 0;\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                          &prewifi_rssi_state1, 2,\r
+                          BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -\r
+                          coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM, &ap_num);\r
+\r
+       /* define the office environment */\r
+       if ((ap_num >= 10) && BTC_RSSI_HIGH(wifi_rssi_state1) &&\r
+           BTC_RSSI_HIGH(bt_rssi_state)) {\r
+               /* dbg_print(" AP#>10(%d)\n", ap_num); */\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,\r
+                                                0x0, 0x0);\r
+\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,\r
+                                         0x0);\r
+               halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false,\r
+                                          0x8);\r
+               halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);\r
+\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,\r
+                                                0x0, 0x0);\r
+               halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);\r
+\r
+               /* sw mechanism */\r
+               btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+               if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     true, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     true, 0x18);\r
+               }\r
+               return;\r
+\r
+       }\r
+\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);\r
+\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+\r
+       if (BTC_RSSI_HIGH(bt_rssi_state))\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+\r
+       if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,\r
+                                                0x0, 0x0);\r
+       } else {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC,\r
+                                                    13);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,\r
+                                                0x4);\r
+       }\r
+\r
+\r
+       if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+           (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))\r
+               halbtc8723b2ant_tdma_duration_adjust(btcoexist, false, false,\r
+                                                    1);\r
+       else\r
+               halbtc8723b2ant_tdma_duration_adjust(btcoexist, false, true, 1);\r
+\r
+       /* sw mechanism */\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+       if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       } else {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       }\r
+}\r
+\r
+void halbtc8723b2ant_action_a2dp_pan_hs(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW,\r
+                       prewifi_rssi_state1 = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8              wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;\r
+       u32             wifi_bw;\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                          &prewifi_rssi_state1, 2,\r
+                          BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -\r
+                          coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);\r
+\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+\r
+       if (BTC_RSSI_HIGH(bt_rssi_state))\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,\r
+                                                0x0, 0x0);\r
+       } else {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC,\r
+                                                    13);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,\r
+                                                0x4);\r
+       }\r
+\r
+       halbtc8723b2ant_tdma_duration_adjust(btcoexist, false, true, 2);\r
+\r
+       /* sw mechanism */\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+       if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       } else {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       }\r
+}\r
+\r
+void halbtc8723b2ant_action_pan_edr(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW,\r
+                       prewifi_rssi_state1 = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8              wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;\r
+       u32             wifi_bw;\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                          &prewifi_rssi_state1, 2,\r
+                          BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -\r
+                          coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);\r
+\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+\r
+       if (BTC_RSSI_HIGH(bt_rssi_state))\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC,\r
+                                                    10);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,\r
+                                                0x0, 0x0);\r
+       } else {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC,\r
+                                                    13);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,\r
+                                                0x4);\r
+       }\r
+\r
+       if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+           (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH))\r
+               halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 1);\r
+       else\r
+               halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, true, 5);\r
+\r
+       /* sw mechanism */\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+       if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       } else {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       }\r
+}\r
+\r
+\r
+/* PAN(HS) only */\r
+void halbtc8723b2ant_action_pan_hs(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW,\r
+                       prewifi_rssi_state1 = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8              wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;\r
+       u32             wifi_bw;\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                          &prewifi_rssi_state1, 2,\r
+                          BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -\r
+                          coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);\r
+\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+\r
+       if (BTC_RSSI_HIGH(bt_rssi_state))\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);\r
+\r
+       halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0,\r
+                                        0x0);\r
+       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+       if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       } else {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       }\r
+}\r
+\r
+/* PAN(EDR)+A2DP */\r
+void halbtc8723b2ant_action_pan_edr_a2dp(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW,\r
+                       prewifi_rssi_state1 = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8              wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;\r
+       u8              ap_num = 0;\r
+       u32             wifi_bw;\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                          &prewifi_rssi_state1, 2,\r
+                          BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -\r
+                          coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);\r
+\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+\r
+       if (BTC_RSSI_HIGH(bt_rssi_state))\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state))\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,\r
+                                                0x0, 0x0);\r
+       else\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,\r
+                                                0x4);\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM,\r
+                                          &ap_num);\r
+\r
+       if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+           (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC,\r
+                                                    12);\r
+\r
+               if(ap_num < 10)\r
+                       halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, false, 1);\r
+               else\r
+                       halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, false, 3);\r
+\r
+       } else {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC,\r
+                                                    13);\r
+               if(ap_num < 10)\r
+                       halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 1);\r
+               else\r
+                       halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 3);\r
+       }\r
+\r
+       /* sw mechanism  */\r
+       if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       } else {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       }\r
+}\r
+\r
+void halbtc8723b2ant_action_pan_edr_hid(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW,\r
+                       prewifi_rssi_state1 = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8              wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;\r
+       u32             wifi_bw;\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                          &prewifi_rssi_state1, 2,\r
+                          BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -\r
+                          coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+\r
+       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);\r
+\r
+       if (BTC_RSSI_HIGH(bt_rssi_state))\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,\r
+                                                0x0, 0x0);\r
+       } else {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC,\r
+                                                    14);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,\r
+                                                0x4);\r
+       }\r
+\r
+       if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+           (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+               if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+                       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,\r
+                                                        3);\r
+                       /* halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 11); */\r
+                       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,\r
+                                                 0xfffff, 0x780);\r
+               } else {\r
+                       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC,\r
+                                                        6);\r
+                       /* halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7); */\r
+                       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1,\r
+                                                 0xfffff, 0x0);\r
+               }\r
+               halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, false, 2);\r
+       } else {\r
+               halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+               /* halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 14); */\r
+               btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,\r
+                                         0x0);\r
+               halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 2);\r
+       }\r
+\r
+       /* sw mechanism */\r
+       if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       } else {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       }\r
+}\r
+\r
+/* HID+A2DP+PAN(EDR) */\r
+void halbtc8723b2ant_action_hid_a2dp_pan_edr(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW,\r
+                       prewifi_rssi_state1 = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8              wifi_rssi_state, wifi_rssi_state1,  bt_rssi_state;\r
+       u32             wifi_bw;\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                          &prewifi_rssi_state1, 2,\r
+                          BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -\r
+                          coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 2,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 0);\r
+\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, false, 0x8);\r
+\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+\r
+       if (BTC_RSSI_HIGH(bt_rssi_state))\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+       else\r
+               halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,\r
+                                                0x0, 0x0);\r
+       } else {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC,\r
+                                                    14);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,\r
+                                                0x4);\r
+       }\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+\r
+       if ((bt_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+           (bt_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+               if (BTC_WIFI_BW_HT40 == wifi_bw)\r
+                       halbtc8723b2ant_tdma_duration_adjust(btcoexist, true,\r
+                                                            true, 3);\r
+               else\r
+                       halbtc8723b2ant_tdma_duration_adjust(btcoexist, true,\r
+                                                            false, 3);\r
+       } else\r
+               halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 3);\r
+\r
+       /* sw mechanism */\r
+       if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       } else {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       }\r
+}\r
+\r
+void halbtc8723b2ant_action_hid_a2dp(IN struct btc_coexist *btcoexist)\r
+{\r
+       static u8       prewifi_rssi_state = BTC_RSSI_STATE_LOW,\r
+                       prewifi_rssi_state1 = BTC_RSSI_STATE_LOW;\r
+       static u8       pre_bt_rssi_state = BTC_RSSI_STATE_LOW;\r
+       u8              wifi_rssi_state, wifi_rssi_state1, bt_rssi_state;\r
+       u32             wifi_bw;\r
+       u8              ap_num = 0;\r
+\r
+       wifi_rssi_state = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                         &prewifi_rssi_state, 2, 15, 0);\r
+       /* bt_rssi_state = halbtc8723b2ant_bt_rssi_state(2, 29, 0); */\r
+       wifi_rssi_state1 = halbtc8723b2ant_wifi_rssi_state(btcoexist,\r
+                          &prewifi_rssi_state1, 2,\r
+                          BT_8723B_2ANT_WIFI_RSSI_COEXSWITCH_THRES -\r
+                          coex_dm->switch_thres_offset, 0);\r
+       bt_rssi_state = halbtc8723b2ant_bt_rssi_state(&pre_bt_rssi_state, 3,\r
+                       BT_8723B_2ANT_BT_RSSI_COEXSWITCH_THRES -\r
+                       coex_dm->switch_thres_offset, 37);\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM,\r
+                                          &ap_num);\r
+\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0);\r
+\r
+       halbtc8723b2ant_limited_rx(btcoexist, NORMAL_EXEC, false, true, 0x5);\r
+\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+       if (BTC_WIFI_BW_LEGACY == wifi_bw) {\r
+               if (BTC_RSSI_HIGH(bt_rssi_state))\r
+                       halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+               else if (BTC_RSSI_MEDIUM(bt_rssi_state))\r
+                       halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+               else\r
+                       halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+       } else {\r
+               /* only 802.11N mode we have to dec bt power to 4 degree */\r
+               if (BTC_RSSI_HIGH(bt_rssi_state)) {\r
+                       /* need to check ap Number of Not */\r
+                       if (ap_num < 10)\r
+                               halbtc8723b2ant_dec_bt_pwr(btcoexist,\r
+                                                          NORMAL_EXEC, 4);\r
+                       else\r
+                               halbtc8723b2ant_dec_bt_pwr(btcoexist,\r
+                                                          NORMAL_EXEC, 2);\r
+               } else if (BTC_RSSI_MEDIUM(bt_rssi_state))\r
+                       halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 2);\r
+               else\r
+                       halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+       }\r
+\r
+       if (BTC_RSSI_HIGH(wifi_rssi_state1) && BTC_RSSI_HIGH(bt_rssi_state)) {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 7);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE,\r
+                                                0x0, 0x0);\r
+       } else {\r
+               halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC,\r
+                                                    14);\r
+               halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_LPS_ON, 0x50,\r
+                                                0x4);\r
+       }\r
+\r
+       if(BTC_RSSI_HIGH(bt_rssi_state)) {\r
+               if(ap_num < 10)\r
+                       halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, false, 1);\r
+               else\r
+                       halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, false, 3);\r
+       } else {\r
+               halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 18);\r
+               btcoexist->btc_write_1byte(btcoexist, 0x456, 0x38);\r
+               btcoexist->btc_write_2byte(btcoexist, 0x42a, 0x0808);\r
+               btcoexist->btc_write_4byte(btcoexist, 0x430, 0x0);\r
+               btcoexist->btc_write_4byte(btcoexist, 0x434, 0x01010000);\r
+\r
+               if(ap_num < 10)\r
+                       halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 1);\r
+               else\r
+                       halbtc8723b2ant_tdma_duration_adjust(btcoexist, true, true, 3);\r
+       }\r
+\r
+       /* sw mechanism */\r
+       if (BTC_WIFI_BW_HT40 == wifi_bw) {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, true, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       } else {\r
+               if ((wifi_rssi_state == BTC_RSSI_STATE_HIGH) ||\r
+                   (wifi_rssi_state == BTC_RSSI_STATE_STAY_HIGH)) {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, true, false,\r
+                                                     false, 0x18);\r
+               } else {\r
+                       halbtc8723b2ant_sw_mechanism1(btcoexist, false, true,\r
+                                                     false, false);\r
+                       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false,\r
+                                                     false, 0x18);\r
+               }\r
+       }\r
+}\r
+\r
+void halbtc8723b2ant_action_bt_whck_test(IN struct btc_coexist *btcoexist)\r
+{\r
+       halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       /* sw all off */\r
+       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false);\r
+       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);\r
+\r
+       halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0,\r
+                                        0x0);\r
+\r
+       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);\r
+       halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);\r
+}\r
+\r
+void halbtc8723b2ant_action_wifi_multi_port(IN struct btc_coexist *btcoexist)\r
+{\r
+       halbtc8723b2ant_fw_dac_swing_lvl(btcoexist, NORMAL_EXEC, 6);\r
+       halbtc8723b2ant_dec_bt_pwr(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       /* sw all off */\r
+       halbtc8723b2ant_sw_mechanism1(btcoexist, false, false, false, false);\r
+       halbtc8723b2ant_sw_mechanism2(btcoexist, false, false, false, 0x18);\r
+\r
+       /* hw all off */\r
+       /* btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff, 0x0); */\r
+       halbtc8723b2ant_coex_table_with_type(btcoexist, NORMAL_EXEC, 0);\r
+\r
+       halbtc8723b2ant_power_save_state(btcoexist, BTC_PS_WIFI_NATIVE, 0x0,\r
+                                        0x0);\r
+       halbtc8723b2ant_ps_tdma(btcoexist, NORMAL_EXEC, false, 1);\r
+}\r
+\r
+void halbtc8723b2ant_run_coexist_mechanism(IN struct btc_coexist *btcoexist)\r
+{\r
+       u8                              algorithm = 0;\r
+       u32                             num_of_wifi_link = 0;\r
+       u32                             wifi_link_status = 0;\r
+       struct  btc_bt_link_info *bt_link_info = &btcoexist->bt_link_info;\r
+       boolean                         miracast_plus_bt = false;\r
+       boolean                         scan = false, link = false, roam = false;\r
+\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                   "[BTCoex], RunCoexistMechanism()===>\n");\r
+       BTC_TRACE(trace_buf);\r
+\r
+       if (btcoexist->manual_control) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                       "[BTCoex], RunCoexistMechanism(), return for Manual CTRL <===\n");\r
+               BTC_TRACE(trace_buf);\r
+               return;\r
+       }\r
+\r
+       if (coex_sta->under_ips) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], wifi is under IPS !!!\n");\r
+               BTC_TRACE(trace_buf);\r
+               return;\r
+       }\r
+\r
+       if (coex_sta->bt_whck_test) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], BT is under WHCK TEST!!!\n");\r
+               BTC_TRACE(trace_buf);\r
+               halbtc8723b2ant_action_bt_whck_test(btcoexist);\r
+               return;\r
+       }\r
+\r
+       algorithm = halbtc8723b2ant_action_algorithm(btcoexist);\r
+       if (coex_sta->c2h_bt_inquiry_page &&\r
+           (BT_8723B_2ANT_COEX_ALGO_PANHS != algorithm)) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], BT is under inquiry/page scan !!\n");\r
+               BTC_TRACE(trace_buf);\r
+               halbtc8723b2ant_action_bt_inquiry(btcoexist);\r
+               return;\r
+       } else {\r
+               /*\r
+                       if(coex_dm->need_recover0x948)\r
+                       {\r
+                               coex_dm->need_recover0x948 = false;\r
+                               btcoexist->btc_write_4byte(btcoexist, 0x948, coex_dm->backup0x948);\r
+                       }\r
+               */\r
+       }\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_SCAN, &scan);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_LINK, &link);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_ROAM, &roam);\r
+\r
+       if (scan || link || roam) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], WiFi is under Link Process !!\n");\r
+               BTC_TRACE(trace_buf);\r
+               halbtc8723b2ant_action_wifi_link_process(btcoexist);\r
+               return;\r
+       }\r
+\r
+       /* for P2P */\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_LINK_STATUS,\r
+                          &wifi_link_status);\r
+       num_of_wifi_link = wifi_link_status >> 16;\r
+\r
+       if ((num_of_wifi_link >= 2) ||\r
+           (wifi_link_status & WIFI_P2P_GO_CONNECTED)) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                       "############# [BTCoex],  Multi-Port num_of_wifi_link = %d, wifi_link_status = 0x%x\n",\r
+                           num_of_wifi_link, wifi_link_status);\r
+               BTC_TRACE(trace_buf);\r
+\r
+               if (bt_link_info->bt_link_exist)\r
+                       miracast_plus_bt = true;\r
+               else\r
+                       miracast_plus_bt = false;\r
+\r
+               btcoexist->btc_set(btcoexist, BTC_SET_BL_MIRACAST_PLUS_BT,\r
+                                  &miracast_plus_bt);\r
+               halbtc8723b2ant_action_wifi_multi_port(btcoexist);\r
+\r
+               return;\r
+       } else {\r
+               miracast_plus_bt = false;\r
+               btcoexist->btc_set(btcoexist, BTC_SET_BL_MIRACAST_PLUS_BT,\r
+                                  &miracast_plus_bt);\r
+       }\r
+\r
+       coex_dm->cur_algorithm = algorithm;\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE, "[BTCoex], Algorithm = %d\n",\r
+                   coex_dm->cur_algorithm);\r
+       BTC_TRACE(trace_buf);\r
+\r
+       if (halbtc8723b2ant_is_common_action(btcoexist)) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Action 2-Ant common.\n");\r
+               BTC_TRACE(trace_buf);\r
+               coex_dm->auto_tdma_adjust = false;\r
+       } else {\r
+               if (coex_dm->cur_algorithm != coex_dm->pre_algorithm) {\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], pre_algorithm=%d, cur_algorithm=%d\n",\r
+                               coex_dm->pre_algorithm, coex_dm->cur_algorithm);\r
+                       BTC_TRACE(trace_buf);\r
+                       coex_dm->auto_tdma_adjust = false;\r
+               }\r
+               switch (coex_dm->cur_algorithm) {\r
+               case BT_8723B_2ANT_COEX_ALGO_SCO:\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Action 2-Ant, algorithm = SCO.\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_action_sco(btcoexist);\r
+                       break;\r
+               case BT_8723B_2ANT_COEX_ALGO_HID:\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Action 2-Ant, algorithm = HID.\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_action_hid(btcoexist);\r
+                       break;\r
+               case BT_8723B_2ANT_COEX_ALGO_A2DP:\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Action 2-Ant, algorithm = A2DP.\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_action_a2dp(btcoexist);\r
+                       break;\r
+               case BT_8723B_2ANT_COEX_ALGO_A2DP_PANHS:\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Action 2-Ant, algorithm = A2DP+PAN(HS).\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_action_a2dp_pan_hs(btcoexist);\r
+                       break;\r
+               case BT_8723B_2ANT_COEX_ALGO_PANEDR:\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Action 2-Ant, algorithm = PAN(EDR).\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_action_pan_edr(btcoexist);\r
+                       break;\r
+               case BT_8723B_2ANT_COEX_ALGO_PANHS:\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Action 2-Ant, algorithm = HS mode.\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_action_pan_hs(btcoexist);\r
+                       break;\r
+               case BT_8723B_2ANT_COEX_ALGO_PANEDR_A2DP:\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Action 2-Ant, algorithm = PAN+A2DP.\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_action_pan_edr_a2dp(btcoexist);\r
+                       break;\r
+               case BT_8723B_2ANT_COEX_ALGO_PANEDR_HID:\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Action 2-Ant, algorithm = PAN(EDR)+HID.\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_action_pan_edr_hid(btcoexist);\r
+                       break;\r
+               case BT_8723B_2ANT_COEX_ALGO_HID_A2DP_PANEDR:\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Action 2-Ant, algorithm = HID+A2DP+PAN.\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_action_hid_a2dp_pan_edr(\r
+                               btcoexist);\r
+                       break;\r
+               case BT_8723B_2ANT_COEX_ALGO_HID_A2DP:\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Action 2-Ant, algorithm = HID+A2DP.\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_action_hid_a2dp(btcoexist);\r
+                       break;\r
+               default:\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Action 2-Ant, algorithm = coexist All Off!!\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_coex_all_off(btcoexist);\r
+                       break;\r
+               }\r
+               coex_dm->pre_algorithm = coex_dm->cur_algorithm;\r
+       }\r
+}\r
+\r
+void halbtc8723b2ant_wifi_off_hw_cfg(IN struct btc_coexist *btcoexist)\r
+{\r
+       boolean is_in_mp_mode = false;\r
+       u8 h2c_parameter[2] = {0};\r
+       u32 fw_ver = 0;\r
+\r
+       /* set wlan_act to low */\r
+       btcoexist->btc_write_1byte(btcoexist, 0x76e, 0x4);\r
+\r
+       btcoexist->btc_set_rf_reg(btcoexist, BTC_RF_A, 0x1, 0xfffff,\r
+                         0x780); /* WiFi goto standby while GNT_BT 0-->1 */\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_FW_VER, &fw_ver);\r
+       if (fw_ver >= 0x180000) {\r
+               /* Use H2C to set GNT_BT to HIGH */\r
+               h2c_parameter[0] = 1;\r
+               btcoexist->btc_fill_h2c(btcoexist, 0x6E, 1, h2c_parameter);\r
+       } else\r
+               btcoexist->btc_write_1byte(btcoexist, 0x765, 0x18);\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_IS_IN_MP_MODE,\r
+                          &is_in_mp_mode);\r
+       if (!is_in_mp_mode)\r
+               btcoexist->btc_write_1byte_bitmask(btcoexist, 0x67, 0x20,\r
+                          0x0); /* BT select s0/s1 is controlled by BT */\r
+       else\r
+               btcoexist->btc_write_1byte_bitmask(btcoexist, 0x67, 0x20,\r
+                          0x1); /* BT select s0/s1 is controlled by WiFi */\r
+}\r
+\r
+void halbtc8723b2ant_init_hw_config(IN struct btc_coexist *btcoexist,\r
+                                   IN boolean back_up)\r
+{\r
+       u8      u8tmp = 0;\r
+       u32      vendor;\r
+\r
+\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                   "[BTCoex], 2Ant Init HW Config!!\n");\r
+       BTC_TRACE(trace_buf);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_VENDOR, &vendor);\r
+       if (vendor == BTC_VENDOR_LENOVO)\r
+               coex_dm->switch_thres_offset = 0;\r
+       else if (vendor == BTC_VENDOR_ASUS)\r
+               coex_dm->switch_thres_offset = 0;\r
+       else\r
+               coex_dm->switch_thres_offset = 20;\r
+\r
+       /* 0xf0[15:12] --> Chip Cut information */\r
+       coex_sta->cut_version = (btcoexist->btc_read_1byte(btcoexist,\r
+                                0xf1) & 0xf0) >> 4;\r
+\r
+       /* backup rf 0x1e value */\r
+       coex_dm->bt_rf_0x1e_backup =\r
+               btcoexist->btc_get_rf_reg(btcoexist, BTC_RF_A, 0x1e, 0xfffff);\r
+\r
+       /* 0x790[5:0]=0x5 */\r
+       u8tmp = btcoexist->btc_read_1byte(btcoexist, 0x790);\r
+       u8tmp &= 0xc0;\r
+       u8tmp |= 0x5;\r
+       btcoexist->btc_write_1byte(btcoexist, 0x790, u8tmp);\r
+\r
+       /* Antenna config        */\r
+       halbtc8723b2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_MAIN, true,\r
+                                    false);\r
+       coex_sta->dis_ver_info_cnt = 0;\r
+\r
+       /* PTA parameter */\r
+       halbtc8723b2ant_coex_table_with_type(btcoexist, FORCE_EXEC, 0);\r
+\r
+       /* Enable counter statistics */\r
+       btcoexist->btc_write_1byte(btcoexist, 0x76e,\r
+                          0x4); /* 0x76e[3] =1, WLAN_Act control by PTA */\r
+       btcoexist->btc_write_1byte(btcoexist, 0x778, 0x3);\r
+       btcoexist->btc_write_1byte_bitmask(btcoexist, 0x40, 0x20, 0x1);\r
+}\r
+\r
+/* ************************************************************\r
+ * work around function start with wa_halbtc8723b2ant_\r
+ * ************************************************************\r
+ * ************************************************************\r
+ * extern function start with ex_halbtc8723b2ant_\r
+ * ************************************************************ */\r
+void ex_halbtc8723b2ant_power_on_setting(IN struct btc_coexist *btcoexist)\r
+{\r
+       struct  btc_board_info  *board_info = &btcoexist->board_info;\r
+       u16 u16tmp = 0x0;\r
+       u32                             value = 0;\r
+       u32    u32tmp_1[4];\r
+\r
+       btcoexist->btc_write_1byte(btcoexist, 0x67, 0x20);\r
+\r
+       /* enable BB, REG_SYS_FUNC_EN such that we can write 0x948 correctly. */\r
+       u16tmp = btcoexist->btc_read_2byte(btcoexist, 0x2);\r
+       btcoexist->btc_write_2byte(btcoexist, 0x2, u16tmp | BIT(0) | BIT(1));\r
+ DbgPrint("--- TEST 5 ---\n");\r
+               \r
+       btcoexist->btc_write_4byte(btcoexist, 0x948, 0x0);\r
+\r
+       if (btcoexist->chip_interface == BTC_INTF_USB) {\r
+               /* fixed at S0 for USB interface */\r
+               board_info->btdm_ant_pos = BTC_ANTENNA_AT_AUX_PORT;\r
+       } else {\r
+               /* for PCIE and SDIO interface, we check efuse 0xc3[6] */\r
+               if (board_info->single_ant_path == 0) {\r
+                       /* set to S1 */\r
+                       board_info->btdm_ant_pos = BTC_ANTENNA_AT_MAIN_PORT;\r
+               } else if (board_info->single_ant_path == 1) {\r
+                       /* set to S0 */\r
+                       board_info->btdm_ant_pos = BTC_ANTENNA_AT_AUX_PORT;\r
+               }\r
+               btcoexist->btc_set(btcoexist, BTC_SET_ACT_ANTPOSREGRISTRY_CTRL,\r
+                                  &value);\r
+       }\r
+}\r
+\r
+void ex_halbtc8723b2ant_pre_load_firmware(IN struct btc_coexist *btcoexist)\r
+{\r
+       struct  btc_board_info  *board_info = &btcoexist->board_info;\r
+       u8 u8tmp = 0x4; /* Set BIT2 by default since it's 2ant case */\r
+\r
+       /*  */\r
+       /* S0 or S1 setting and Local register setting(By the setting fw can get ant number, S0/S1, ... info) */\r
+       /* Local setting bit define */\r
+       /*      BIT0: "0" for no antenna inverse; "1" for antenna inverse  */\r
+       /*      BIT1: "0" for internal switch; "1" for external switch */\r
+       /*      BIT2: "0" for one antenna; "1" for two antenna */\r
+       /* NOTE: here default all internal switch and 1-antenna ==> BIT1=0 and BIT2=0 */\r
+       if (btcoexist->chip_interface == BTC_INTF_USB) {\r
+               /* fixed at S0 for USB interface */\r
+               u8tmp |= 0x1;   /* antenna inverse */\r
+               btcoexist->btc_write_local_reg_1byte(btcoexist, 0xfe08, u8tmp);\r
+       } else {\r
+               /* for PCIE and SDIO interface, we check efuse 0xc3[6] */\r
+               if (board_info->single_ant_path == 0) {\r
+               } else if (board_info->single_ant_path == 1) {\r
+                       /* set to S0 */\r
+                       u8tmp |= 0x1;   /* antenna inverse */\r
+               }\r
+\r
+               if (btcoexist->chip_interface == BTC_INTF_PCI)\r
+                       btcoexist->btc_write_local_reg_1byte(btcoexist, 0x384,\r
+                                                            u8tmp);\r
+               else if (btcoexist->chip_interface == BTC_INTF_SDIO)\r
+                       btcoexist->btc_write_local_reg_1byte(btcoexist, 0x60,\r
+                                                            u8tmp);\r
+       }\r
+}\r
+\r
+void ex_halbtc8723b2ant_init_hw_config(IN struct btc_coexist *btcoexist,\r
+                                      IN boolean wifi_only)\r
+{\r
+       halbtc8723b2ant_init_hw_config(btcoexist, true);\r
+}\r
+\r
+void ex_halbtc8723b2ant_init_coex_dm(IN struct btc_coexist *btcoexist)\r
+{\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                   "[BTCoex], Coex Mechanism Init!!\n");\r
+       BTC_TRACE(trace_buf);\r
+\r
+       halbtc8723b2ant_init_coex_dm(btcoexist);\r
+}\r
+\r
+void ex_halbtc8723b2ant_display_coex_info(IN struct btc_coexist *btcoexist)\r
+{\r
+       struct  btc_board_info          *board_info = &btcoexist->board_info;\r
+       struct  btc_bt_link_info        *bt_link_info = &btcoexist->bt_link_info;\r
+       u8                              *cli_buf = btcoexist->cli_buf;\r
+       u8                              u8tmp[4], i, bt_info_ext, ps_tdma_case = 0;\r
+       u32                             u32tmp[4];\r
+       u32                             fa_of_dm, fa_cck;\r
+       u32                             fw_ver = 0, bt_patch_ver = 0;\r
+       static u8                       pop_report_in_10s = 0;\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,\r
+                  "\r\n ============[BT Coexist info]============");\r
+       CL_PRINTF(cli_buf);\r
+\r
+       if (btcoexist->manual_control) {\r
+               CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,\r
+                       "\r\n ============[Under Manual Control]============");\r
+               CL_PRINTF(cli_buf);\r
+               CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,\r
+                          "\r\n ==========================================");\r
+               CL_PRINTF(cli_buf);\r
+       }\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ",\r
+                  "Ant PG number/ Ant mechanism:",\r
+                  board_info->pg_ant_num, board_info->btdm_ant_num);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_BT_PATCH_VER, &bt_patch_ver);\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_FW_VER, &fw_ver);\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,\r
+                  "\r\n %-35s = %d_%x/ 0x%x/ 0x%x(%d)/ %c",\r
+                  "Version Coex/ Fw/ Patch/ Cut",\r
+                  glcoex_ver_date_8723b_2ant, glcoex_ver_8723b_2ant, fw_ver,\r
+                  bt_patch_ver, bt_patch_ver, coex_sta->cut_version + 65);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %02x %02x %02x ",\r
+                  "Wifi channel informed to BT",\r
+                  coex_dm->wifi_chnl_info[0], coex_dm->wifi_chnl_info[1],\r
+                  coex_dm->wifi_chnl_info[2]);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       /* wifi status */\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",\r
+                  "============[Wifi Status]============");\r
+       CL_PRINTF(cli_buf);\r
+       btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_WIFI_STATUS);\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",\r
+                  "============[BT Status]============");\r
+       CL_PRINTF(cli_buf);\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s",\r
+                  "BT Abnormal scan",\r
+                  (coex_sta->bt_abnormal_scan) ? "Yes" : "No");\r
+       CL_PRINTF(cli_buf);\r
+       \r
+       pop_report_in_10s++;\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = [%s/ %d/ %d/ %d] ",\r
+                  "BT [status/ rssi/ retryCnt/ popCnt]",\r
+                  ((coex_sta->bt_disabled) ? ("disabled") :    ((\r
+                  coex_sta->c2h_bt_inquiry_page) ? ("inquiry/page scan")\r
+                          : ((BT_8723B_1ANT_BT_STATUS_NON_CONNECTED_IDLE ==\r
+                              coex_dm->bt_status) ? "non-connected idle" :\r
+               ((BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE == coex_dm->bt_status)\r
+                                      ? "connected-idle" : "busy")))),\r
+                  coex_sta->bt_rssi - 100, coex_sta->bt_retry_cnt,\r
+                  coex_sta->pop_event_cnt);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       if (pop_report_in_10s >= 5) {\r
+               coex_sta->pop_event_cnt = 0;\r
+               pop_report_in_10s = 0;\r
+       }\r
+\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,\r
+                  "\r\n %-35s = %d / %d / %d / %d / %d / %d",\r
+                  "SCO/HID/PAN/A2DP/NameReq/WHQL",\r
+                  bt_link_info->sco_exist, bt_link_info->hid_exist,\r
+                  bt_link_info->pan_exist, bt_link_info->a2dp_exist,\r
+                  coex_sta->c2h_bt_remote_name_req,\r
+                  coex_sta->bt_whck_test);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       {\r
+               CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s",\r
+                          "BT Role",\r
+                          (bt_link_info->slave_role) ? "Slave" : "Master");\r
+               CL_PRINTF(cli_buf);\r
+       }\r
+\r
+       bt_info_ext = coex_sta->bt_info_ext;\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d",\r
+                  "A2DP Rate/Bitpool",\r
+               (bt_info_ext & BIT(0)) ? "BR" : "EDR", coex_sta->a2dp_bit_pool);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       for (i = 0; i < BT_INFO_SRC_8723B_2ANT_MAX; i++) {\r
+               if (coex_sta->bt_info_c2h_cnt[i]) {\r
+                       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,\r
+                               "\r\n %-35s = %02x %02x %02x %02x %02x %02x %02x(%d)",\r
+                                  glbt_info_src_8723b_2ant[i],\r
+                                  coex_sta->bt_info_c2h[i][0],\r
+                                  coex_sta->bt_info_c2h[i][1],\r
+                                  coex_sta->bt_info_c2h[i][2],\r
+                                  coex_sta->bt_info_c2h[i][3],\r
+                                  coex_sta->bt_info_c2h[i][4],\r
+                                  coex_sta->bt_info_c2h[i][5],\r
+                                  coex_sta->bt_info_c2h[i][6],\r
+                                  coex_sta->bt_info_c2h_cnt[i]);\r
+                       CL_PRINTF(cli_buf);\r
+               }\r
+       }\r
+\r
+       /* Sw mechanism  */\r
+       if (btcoexist->manual_control)\r
+               CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",\r
+                       "============[Sw mechanism] (before Manual)============");\r
+       else\r
+               CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",\r
+                          "============[Sw mechanism]============");\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d ",\r
+                  "SM1[ShRf/ LpRA/ LimDig]",\r
+                  coex_dm->cur_rf_rx_lpf_shrink, coex_dm->cur_low_penalty_ra,\r
+                  coex_dm->limited_dig);\r
+       CL_PRINTF(cli_buf);\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d(0x%x) ",\r
+                  "SM2[AgcT/ AdcB/ SwDacSwing(lvl)]",\r
+                  coex_dm->cur_agc_table_en, coex_dm->cur_adc_back_off,\r
+                  coex_dm->cur_dac_swing_on, coex_dm->cur_dac_swing_lvl);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       /* Fw mechanism          */\r
+       if (btcoexist->manual_control)\r
+               CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",\r
+                       "============[Fw mechanism] (before Manual) ============");\r
+       else\r
+               CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",\r
+                          "============[Fw mechanism]============");\r
+\r
+       ps_tdma_case = coex_dm->cur_ps_tdma;\r
+\r
+       if (coex_dm->is_switch_to_1dot5_ant)\r
+               ps_tdma_case = ps_tdma_case + 100;\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,\r
+                  "\r\n %-35s = %02x %02x %02x %02x %02x case-%d (%s,%s)",\r
+                  "PS TDMA",\r
+                  coex_dm->ps_tdma_para[0], coex_dm->ps_tdma_para[1],\r
+                  coex_dm->ps_tdma_para[2], coex_dm->ps_tdma_para[3],\r
+                  coex_dm->ps_tdma_para[4], ps_tdma_case,\r
+                  (coex_dm->cur_ps_tdma_on ? "On" : "Off"),\r
+                  (coex_dm->auto_tdma_adjust ? "Adj" : "Fix"));\r
+       CL_PRINTF(cli_buf);\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d",\r
+                  "Coex Table Type",\r
+                  coex_sta->coex_table_type);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d ",\r
+                  "DecBtPwr/ IgnWlanAct",\r
+                  coex_dm->cur_bt_dec_pwr_lvl, coex_dm->cur_ignore_wlan_act);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       /* Hw setting            */\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s",\r
+                  "============[Hw setting]============");\r
+       CL_PRINTF(cli_buf);\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x",\r
+                  "RF-A, 0x1e initVal",\r
+                  coex_dm->bt_rf_0x1e_backup);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x778);\r
+       u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x880);\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x",\r
+                  "0x778/0x880[29:25]",\r
+                  u8tmp[0], (u32tmp[0] & 0x3e000000) >> 25);\r
+       CL_PRINTF(cli_buf);\r
+\r
+\r
+       u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x948);\r
+       u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x67);\r
+       u8tmp[1] = btcoexist->btc_read_1byte(btcoexist, 0x765);\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x",\r
+                  "0x948/ 0x67[5] / 0x765",\r
+                  u32tmp[0], ((u8tmp[0] & 0x20) >> 5), u8tmp[1]);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x92c);\r
+       u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0x930);\r
+       u32tmp[2] = btcoexist->btc_read_4byte(btcoexist, 0x944);\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x",\r
+                  "0x92c[1:0]/ 0x930[7:0]/0x944[1:0]",\r
+                  u32tmp[0] & 0x3, u32tmp[1] & 0xff, u32tmp[2] & 0x3);\r
+       CL_PRINTF(cli_buf);\r
+\r
+\r
+       u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x39);\r
+       u8tmp[1] = btcoexist->btc_read_1byte(btcoexist, 0x40);\r
+       u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x4c);\r
+       u8tmp[2] = btcoexist->btc_read_1byte(btcoexist, 0x64);\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,\r
+                  "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x",\r
+                  "0x38[11]/0x40/0x4c[24:23]/0x64[0]",\r
+                  ((u8tmp[0] & 0x8) >> 3), u8tmp[1],\r
+                  ((u32tmp[0] & 0x01800000) >> 23), u8tmp[2] & 0x1);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x550);\r
+       u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x522);\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x",\r
+                  "0x550(bcn ctrl)/0x522",\r
+                  u32tmp[0], u8tmp[0]);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0xc50);\r
+       u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x49c);\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x",\r
+                  "0xc50(dig)/0x49c(null-drop)",\r
+                  u32tmp[0] & 0xff, u8tmp[0]);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0xda0);\r
+       u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0xda4);\r
+       u32tmp[2] = btcoexist->btc_read_4byte(btcoexist, 0xda8);\r
+       u32tmp[3] = btcoexist->btc_read_4byte(btcoexist, 0xcf0);\r
+\r
+       u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0xa5b);\r
+       u8tmp[1] = btcoexist->btc_read_1byte(btcoexist, 0xa5c);\r
+\r
+       fa_of_dm = ((u32tmp[0] & 0xffff0000) >> 16) + ((u32tmp[1] & 0xffff0000)\r
+                       >> 16) + (u32tmp[1] & 0xffff) + (u32tmp[2] & 0xffff) + \\r
+                  ((u32tmp[3] & 0xffff0000) >> 16) + (u32tmp[3] &\r
+                                  0xffff) ;\r
+       fa_cck = (u8tmp[0] << 8) + u8tmp[1];\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x",\r
+                  "OFDM-CCA/OFDM-FA/CCK-FA",\r
+                  u32tmp[0] & 0xffff, fa_of_dm, fa_cck);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d/ %d",\r
+                  "CRC_OK CCK/11g/11n/11n-Agg",\r
+                  coex_sta->crc_ok_cck, coex_sta->crc_ok_11g,\r
+                  coex_sta->crc_ok_11n, coex_sta->crc_ok_11n_agg);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d/ %d/ %d",\r
+                  "CRC_Err CCK/11g/11n/11n-Agg",\r
+                  coex_sta->crc_err_cck, coex_sta->crc_err_11g,\r
+                  coex_sta->crc_err_11n, coex_sta->crc_err_11n_agg);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       u32tmp[0] = btcoexist->btc_read_4byte(btcoexist, 0x6c0);\r
+       u32tmp[1] = btcoexist->btc_read_4byte(btcoexist, 0x6c4);\r
+       u32tmp[2] = btcoexist->btc_read_4byte(btcoexist, 0x6c8);\r
+       u8tmp[0] = btcoexist->btc_read_1byte(btcoexist, 0x6cc);\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE,\r
+                  "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x",\r
+                  "0x6c0/0x6c4/0x6c8/0x6cc(coexTable)",\r
+                  u32tmp[0], u32tmp[1], u32tmp[2], u8tmp[0]);\r
+       CL_PRINTF(cli_buf);\r
+\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d",\r
+                  "0x770(high-pri rx/tx)",\r
+                  coex_sta->high_priority_rx, coex_sta->high_priority_tx);\r
+       CL_PRINTF(cli_buf);\r
+       CL_SPRINTF(cli_buf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/ %d",\r
+                  "0x774(low-pri rx/tx)",\r
+                  coex_sta->low_priority_rx, coex_sta->low_priority_tx);\r
+       CL_PRINTF(cli_buf);\r
+#if (BT_AUTO_REPORT_ONLY_8723B_2ANT == 1)\r
+       /* halbtc8723b2ant_monitor_bt_ctr(btcoexist); */\r
+#endif\r
+       btcoexist->btc_disp_dbg_msg(btcoexist, BTC_DBG_DISP_COEX_STATISTICS);\r
+}\r
+\r
+\r
+void ex_halbtc8723b2ant_ips_notify(IN struct btc_coexist *btcoexist, IN u8 type)\r
+{\r
+       if (BTC_IPS_ENTER == type) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], IPS ENTER notify\n");\r
+               BTC_TRACE(trace_buf);\r
+               coex_sta->under_ips = true;\r
+               halbtc8723b2ant_wifi_off_hw_cfg(btcoexist);\r
+               halbtc8723b2ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);\r
+               halbtc8723b2ant_coex_all_off(btcoexist);\r
+       } else if (BTC_IPS_LEAVE == type) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], IPS LEAVE notify\n");\r
+               BTC_TRACE(trace_buf);\r
+               coex_sta->under_ips = false;\r
+               halbtc8723b2ant_init_hw_config(btcoexist, false);\r
+               halbtc8723b2ant_init_coex_dm(btcoexist);\r
+               halbtc8723b2ant_query_bt_info(btcoexist);\r
+       }\r
+}\r
+\r
+void ex_halbtc8723b2ant_lps_notify(IN struct btc_coexist *btcoexist, IN u8 type)\r
+{\r
+       if (BTC_LPS_ENABLE == type) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], LPS ENABLE notify\n");\r
+               BTC_TRACE(trace_buf);\r
+               coex_sta->under_lps = true;\r
+       } else if (BTC_LPS_DISABLE == type) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], LPS DISABLE notify\n");\r
+               BTC_TRACE(trace_buf);\r
+               coex_sta->under_lps = false;\r
+       }\r
+}\r
+\r
+void ex_halbtc8723b2ant_scan_notify(IN struct btc_coexist *btcoexist,\r
+                                   IN u8 type)\r
+{\r
+       u32     u32tmp;\r
+       u8      u8tmpa, u8tmpb;\r
+\r
+\r
+\r
+       u32tmp = btcoexist->btc_read_4byte(btcoexist, 0x948);\r
+       u8tmpa = btcoexist->btc_read_1byte(btcoexist, 0x765);\r
+       u8tmpb = btcoexist->btc_read_1byte(btcoexist, 0x76e);\r
+\r
+       if (BTC_SCAN_START == type) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], SCAN START notify\n");\r
+               BTC_TRACE(trace_buf);\r
+               halbtc8723b2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_MAIN, FALSE, FALSE);\r
+       } else if (BTC_SCAN_FINISH == type) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], SCAN FINISH notify\n");\r
+               BTC_TRACE(trace_buf);\r
+               btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM,\r
+                                  &coex_sta->scan_ap_num);\r
+       }\r
+\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+               "############# [BTCoex], 0x948=0x%x, 0x765=0x%x, 0x76e=0x%x\n",\r
+                   u32tmp,  u8tmpa, u8tmpb);\r
+       BTC_TRACE(trace_buf);\r
+}\r
+\r
+void ex_halbtc8723b2ant_connect_notify(IN struct btc_coexist *btcoexist,\r
+                                      IN u8 type)\r
+{\r
+       if (BTC_ASSOCIATE_START == type) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], CONNECT START notify\n");\r
+               BTC_TRACE(trace_buf);\r
+               halbtc8723b2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_MAIN, FALSE, FALSE);\r
+       } else if (BTC_ASSOCIATE_FINISH == type) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], CONNECT FINISH notify\n");\r
+               BTC_TRACE(trace_buf);\r
+       }\r
+}\r
+\r
+void ex_halbtc8723b2ant_media_status_notify(IN struct btc_coexist *btcoexist,\r
+               IN u8 type)\r
+{\r
+       u8                      h2c_parameter[3] = {0};\r
+       u32                     wifi_bw;\r
+       u8                      wifi_central_chnl;\r
+       u8                      ap_num = 0;\r
+\r
+       if (BTC_MEDIA_CONNECT == type) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], MEDIA connect notify\n");\r
+               BTC_TRACE(trace_buf);\r
+               halbtc8723b2ant_set_ant_path(btcoexist, BTC_ANT_WIFI_AT_MAIN, FALSE, FALSE);\r
+       } else {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], MEDIA disconnect notify\n");\r
+               BTC_TRACE(trace_buf);\r
+       }\r
+\r
+       /* only 2.4G we need to inform bt the chnl mask */\r
+       btcoexist->btc_get(btcoexist, BTC_GET_U1_WIFI_CENTRAL_CHNL,\r
+                          &wifi_central_chnl);\r
+       if ((BTC_MEDIA_CONNECT == type) &&\r
+           (wifi_central_chnl <= 14)) {\r
+               h2c_parameter[0] = 0x1;\r
+               h2c_parameter[1] = wifi_central_chnl;\r
+               btcoexist->btc_get(btcoexist, BTC_GET_U4_WIFI_BW, &wifi_bw);\r
+               if (BTC_WIFI_BW_HT40 == wifi_bw)\r
+                       h2c_parameter[2] = 0x30;\r
+               else {\r
+                       btcoexist->btc_get(btcoexist, BTC_GET_U1_AP_NUM,\r
+                                          &ap_num);\r
+                       if (ap_num < 10)\r
+                               h2c_parameter[2] = 0x30;\r
+                       else\r
+                               h2c_parameter[2] = 0x20;\r
+               }\r
+       }\r
+\r
+       coex_dm->wifi_chnl_info[0] = h2c_parameter[0];\r
+       coex_dm->wifi_chnl_info[1] = h2c_parameter[1];\r
+       coex_dm->wifi_chnl_info[2] = h2c_parameter[2];\r
+\r
+       btcoexist->btc_fill_h2c(btcoexist, 0x66, 3, h2c_parameter);\r
+}\r
+\r
+void ex_halbtc8723b2ant_specific_packet_notify(IN struct btc_coexist *btcoexist,\r
+               IN u8 type)\r
+{\r
+       if (type == BTC_PACKET_DHCP) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], DHCP Packet notify\n");\r
+               BTC_TRACE(trace_buf);\r
+       }\r
+}\r
+\r
+void ex_halbtc8723b2ant_bt_info_notify(IN struct btc_coexist *btcoexist,\r
+                                      IN u8 *tmp_buf, IN u8 length)\r
+{\r
+       u8                      bt_info = 0;\r
+       u8                      i, rsp_source = 0;\r
+       boolean                 bt_busy = false, limited_dig = false;\r
+       boolean                 wifi_connected = false;\r
+\r
+       coex_sta->c2h_bt_info_req_sent = false;\r
+\r
+       rsp_source = tmp_buf[0] & 0xf;\r
+       if (rsp_source >= BT_INFO_SRC_8723B_2ANT_MAX)\r
+               rsp_source = BT_INFO_SRC_8723B_2ANT_WIFI_FW;\r
+       coex_sta->bt_info_c2h_cnt[rsp_source]++;\r
+\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                   "[BTCoex], Bt info[%d], length=%d, hex data=[", rsp_source,\r
+                   length);\r
+       BTC_TRACE(trace_buf);\r
+       for (i = 0; i < length; i++) {\r
+               coex_sta->bt_info_c2h[rsp_source][i] = tmp_buf[i];\r
+               if (i == 1)\r
+                       bt_info = tmp_buf[i];\r
+               if (i == length - 1) {\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE, "0x%02x]\n",\r
+                                   tmp_buf[i]);\r
+                       BTC_TRACE(trace_buf);\r
+               } else {\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE, "0x%02x, ",\r
+                                   tmp_buf[i]);\r
+                       BTC_TRACE(trace_buf);\r
+               }\r
+       }\r
+\r
+       if (btcoexist->manual_control) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                       "[BTCoex], BtInfoNotify(), return for Manual CTRL<===\n");\r
+               BTC_TRACE(trace_buf);\r
+               return;\r
+       }\r
+\r
+       /* if 0xff, it means BT is under WHCK test */\r
+       if (bt_info == 0xff)\r
+               coex_sta->bt_whck_test = true;\r
+       else\r
+               coex_sta->bt_whck_test = false;\r
+\r
+       if (BT_INFO_SRC_8723B_2ANT_WIFI_FW != rsp_source) {\r
+               coex_sta->bt_retry_cnt =        /* [3:0] */\r
+                       coex_sta->bt_info_c2h[rsp_source][2] & 0xf;\r
+\r
+               if (coex_sta->bt_retry_cnt >= 1)\r
+                       coex_sta->pop_event_cnt++;\r
+\r
+               coex_sta->bt_rssi =\r
+                       coex_sta->bt_info_c2h[rsp_source][3] * 2 + 10;\r
+\r
+               coex_sta->bt_info_ext =\r
+                       coex_sta->bt_info_c2h[rsp_source][4];\r
+\r
+               if (coex_sta->bt_info_c2h[rsp_source][2] & 0x20)\r
+                       coex_sta->c2h_bt_remote_name_req = true;\r
+               else\r
+                       coex_sta->c2h_bt_remote_name_req = false;\r
+\r
+               if (coex_sta->bt_info_c2h[rsp_source][1] == 0x49) {\r
+                       coex_sta->a2dp_bit_pool =\r
+                               coex_sta->bt_info_c2h[rsp_source][6];\r
+               } else\r
+                       coex_sta->a2dp_bit_pool = 0;\r
+\r
+               coex_sta->bt_tx_rx_mask = (coex_sta->bt_info_c2h[rsp_source][2]\r
+                                          & 0x40);\r
+               btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_TX_RX_MASK,\r
+                                  &coex_sta->bt_tx_rx_mask);\r
+               if (coex_sta->bt_tx_rx_mask) {\r
+                       /* BT into is responded by BT FW and BT RF REG 0x3C != 0x01 => Need to switch BT TRx Mask */\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], Switch BT TRx Mask since BT RF REG 0x3C != 0x01\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       btcoexist->btc_set_bt_reg(btcoexist, BTC_BT_REG_RF,\r
+                                                 0x3c, 0x01);\r
+               }\r
+\r
+               /* Here we need to resend some wifi info to BT */\r
+               /* because bt is reset and loss of the info. */\r
+               if ((coex_sta->bt_info_ext & BIT(1))) {\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], BT ext info bit1 check, send wifi BW&Chnl to BT!!\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       btcoexist->btc_get(btcoexist, BTC_GET_BL_WIFI_CONNECTED,\r
+                                          &wifi_connected);\r
+                       if (wifi_connected)\r
+                               ex_halbtc8723b2ant_media_status_notify(\r
+                                       btcoexist, BTC_MEDIA_CONNECT);\r
+                       else\r
+                               ex_halbtc8723b2ant_media_status_notify(\r
+                                       btcoexist, BTC_MEDIA_DISCONNECT);\r
+               }\r
+\r
+               if ((coex_sta->bt_info_ext & BIT(3))) {\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                               "[BTCoex], BT ext info bit3 check, set BT NOT to ignore Wlan active!!\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_ignore_wlan_act(btcoexist, FORCE_EXEC,\r
+                                                       false);\r
+               } else {\r
+                       /* BT already NOT ignore Wlan active, do nothing here. */\r
+               }\r
+#if (BT_AUTO_REPORT_ONLY_8723B_2ANT == 0)\r
+               if ((coex_sta->bt_info_ext & BIT(4))) {\r
+                       /* BT auto report already enabled, do nothing */\r
+               } else\r
+                       halbtc8723b2ant_bt_auto_report(btcoexist, FORCE_EXEC,\r
+                                                      true);\r
+#endif\r
+       }\r
+\r
+       /* check BIT2 first ==> check if bt is under inquiry or page scan */\r
+       if (bt_info & BT_INFO_8723B_2ANT_B_INQ_PAGE)\r
+               coex_sta->c2h_bt_inquiry_page = true;\r
+       else\r
+               coex_sta->c2h_bt_inquiry_page = false;\r
+\r
+       /* set link exist status */\r
+       if (!(bt_info & BT_INFO_8723B_2ANT_B_CONNECTION)) {\r
+               coex_sta->bt_link_exist = false;\r
+               coex_sta->pan_exist = false;\r
+               coex_sta->a2dp_exist = false;\r
+               coex_sta->hid_exist = false;\r
+               coex_sta->sco_exist = false;\r
+       } else {        /* connection exists */\r
+               coex_sta->bt_link_exist = true;\r
+               if (bt_info & BT_INFO_8723B_2ANT_B_FTP)\r
+                       coex_sta->pan_exist = true;\r
+               else\r
+                       coex_sta->pan_exist = false;\r
+               if (bt_info & BT_INFO_8723B_2ANT_B_A2DP)\r
+                       coex_sta->a2dp_exist = true;\r
+               else\r
+                       coex_sta->a2dp_exist = false;\r
+               if (bt_info & BT_INFO_8723B_2ANT_B_HID)\r
+                       coex_sta->hid_exist = true;\r
+               else\r
+                       coex_sta->hid_exist = false;\r
+               if (bt_info & BT_INFO_8723B_2ANT_B_SCO_ESCO)\r
+                       coex_sta->sco_exist = true;\r
+               else\r
+                       coex_sta->sco_exist = false;\r
+\r
+               if ((coex_sta->hid_exist == false) &&\r
+                   (coex_sta->c2h_bt_inquiry_page == false) &&\r
+                   (coex_sta->sco_exist == false)) {\r
+                       if (coex_sta->high_priority_tx  +\r
+                           coex_sta->high_priority_rx >= 160) {\r
+                               coex_sta->hid_exist = true;\r
+                               bt_info = bt_info | 0x28;\r
+                       }\r
+               }\r
+       }\r
+\r
+       halbtc8723b2ant_update_bt_link_info(btcoexist);\r
+\r
+       if (!(bt_info & BT_INFO_8723B_2ANT_B_CONNECTION)) {\r
+               coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_NON_CONNECTED_IDLE;\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                       "[BTCoex], BtInfoNotify(), BT Non-Connected idle!!!\n");\r
+               BTC_TRACE(trace_buf);\r
+       } else if (bt_info ==\r
+               BT_INFO_8723B_2ANT_B_CONNECTION) {      /* connection exists but no busy */\r
+               coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_CONNECTED_IDLE;\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], BtInfoNotify(), BT Connected-idle!!!\n");\r
+               BTC_TRACE(trace_buf);\r
+       } else if ((bt_info & BT_INFO_8723B_2ANT_B_SCO_ESCO) ||\r
+                  (bt_info & BT_INFO_8723B_2ANT_B_SCO_BUSY)) {\r
+               coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_SCO_BUSY;\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], BtInfoNotify(), BT SCO busy!!!\n");\r
+               BTC_TRACE(trace_buf);\r
+       } else if (bt_info & BT_INFO_8723B_2ANT_B_ACL_BUSY) {\r
+               coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_ACL_BUSY;\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], BtInfoNotify(), BT ACL busy!!!\n");\r
+               BTC_TRACE(trace_buf);\r
+       } else {\r
+               coex_dm->bt_status = BT_8723B_2ANT_BT_STATUS_MAX;\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                       "[BTCoex], BtInfoNotify(), BT Non-Defined state!!!\n");\r
+               BTC_TRACE(trace_buf);\r
+       }\r
+\r
+       if ((BT_8723B_2ANT_BT_STATUS_ACL_BUSY == coex_dm->bt_status) ||\r
+           (BT_8723B_2ANT_BT_STATUS_SCO_BUSY == coex_dm->bt_status) ||\r
+           (BT_8723B_2ANT_BT_STATUS_ACL_SCO_BUSY == coex_dm->bt_status)) {\r
+               bt_busy = true;\r
+               limited_dig = true;\r
+       } else {\r
+               bt_busy = false;\r
+               limited_dig = false;\r
+       }\r
+\r
+       btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_TRAFFIC_BUSY, &bt_busy);\r
+\r
+       coex_dm->limited_dig = limited_dig;\r
+       btcoexist->btc_set(btcoexist, BTC_SET_BL_BT_LIMITED_DIG, &limited_dig);\r
+\r
+       halbtc8723b2ant_run_coexist_mechanism(btcoexist);\r
+}\r
+\r
+void ex_halbtc8723b2ant_halt_notify(IN struct btc_coexist *btcoexist)\r
+{\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE, "[BTCoex], Halt notify\n");\r
+       BTC_TRACE(trace_buf);\r
+\r
+       halbtc8723b2ant_wifi_off_hw_cfg(btcoexist);\r
+       /* remove due to interrupt is disabled that polling c2h will fail and delay 100ms. */\r
+       /* btcoexist->btc_set_bt_reg(btcoexist, BTC_BT_REG_RF, 0x3c, 0x15); //BT goto standby while GNT_BT 1-->0 */\r
+       halbtc8723b2ant_ignore_wlan_act(btcoexist, FORCE_EXEC, true);\r
+\r
+       ex_halbtc8723b2ant_media_status_notify(btcoexist, BTC_MEDIA_DISCONNECT);\r
+}\r
+\r
+void ex_halbtc8723b2ant_pnp_notify(IN struct btc_coexist *btcoexist,\r
+                                  IN u8 pnp_state)\r
+{\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE, "[BTCoex], Pnp notify\n");\r
+       BTC_TRACE(trace_buf);\r
+\r
+       if (BTC_WIFI_PNP_SLEEP == pnp_state) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Pnp notify to SLEEP\n");\r
+               BTC_TRACE(trace_buf);\r
+\r
+               /* Sinda 20150819, workaround for driver skip leave IPS/LPS to speed up sleep time. */\r
+               /* Driver do not leave IPS/LPS when driver is going to sleep, so BTCoexistence think wifi is still under IPS/LPS */\r
+               /* BT should clear UnderIPS/UnderLPS state to avoid mismatch state after wakeup. */\r
+               coex_sta->under_ips = false;\r
+               coex_sta->under_lps = false;\r
+       } else if (BTC_WIFI_PNP_WAKE_UP == pnp_state) {\r
+               BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                           "[BTCoex], Pnp notify to WAKE UP\n");\r
+               BTC_TRACE(trace_buf);\r
+               halbtc8723b2ant_init_hw_config(btcoexist, false);\r
+               halbtc8723b2ant_init_coex_dm(btcoexist);\r
+               halbtc8723b2ant_query_bt_info(btcoexist);\r
+       }\r
+}\r
+\r
+void ex_halbtc8723b2ant_periodical(IN struct btc_coexist *btcoexist)\r
+{\r
+       struct  btc_bt_link_info        *bt_link_info = &btcoexist->bt_link_info;\r
+\r
+       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+               "[BTCoex], ==========================Periodical===========================\n");\r
+       BTC_TRACE(trace_buf);\r
+       if (coex_sta->dis_ver_info_cnt <= 5) {\r
+               coex_sta->dis_ver_info_cnt += 1;\r
+               if (coex_sta->dis_ver_info_cnt == 3) {\r
+                       /* Antenna config to set 0x765 = 0x0 (GNT_BT control by PTA) after initial */\r
+                       BTC_SPRINTF(trace_buf, BT_TMP_BUF_SIZE,\r
+                                   "[BTCoex], Set GNT_BT control by PTA\n");\r
+                       BTC_TRACE(trace_buf);\r
+                       halbtc8723b2ant_set_ant_path(btcoexist,\r
+                                    BTC_ANT_WIFI_AT_MAIN, false, false);\r
+               }\r
+       }\r
+\r
+#if (BT_AUTO_REPORT_ONLY_8723B_2ANT == 0)\r
+       halbtc8723b2ant_query_bt_info(btcoexist);\r
+       halbtc8723b2ant_monitor_bt_enable_disable(btcoexist);\r
+#else\r
+       halbtc8723b2ant_monitor_bt_ctr(btcoexist);\r
+       halbtc8723b2ant_monitor_wifi_ctr(btcoexist);\r
+\r
+       /* for some BT speaker that Hi-Pri pkt appear begore start play, this will cause HID exist */\r
+       if ((coex_sta->high_priority_tx  + coex_sta->high_priority_rx < 50) &&\r
+           (bt_link_info->hid_exist == true))\r
+               bt_link_info->hid_exist  = false;\r
+\r
+       if (halbtc8723b2ant_is_wifi_status_changed(btcoexist) ||\r
+           coex_dm->auto_tdma_adjust)\r
+               halbtc8723b2ant_run_coexist_mechanism(btcoexist);\r
+#endif\r
+}\r
+\r
+#endif\r
+\r
+#endif /* #if (BT_SUPPORT == 1 && COEX_SUPPORT == 1) */\r
+\r