struct rtw_coex *coex = &rtwdev->coex;
        struct rtw_coex_stat *coex_stat = &coex->stat;
        struct rtw_chip_info *chip = rtwdev->chip;
+       struct rtw_coex_dm *coex_dm = &coex->dm;
        u32 bt_relink_time;
        u8 i, rsp_source = 0, type;
        bool inq_page = false;
 
        rsp_source = buf[0] & 0xf;
        if (rsp_source >= COEX_BTINFO_SRC_MAX)
-               rsp_source = COEX_BTINFO_SRC_WL_FW;
+               return;
+       coex_stat->cnt_bt_info_c2h[rsp_source]++;
 
        if (rsp_source == COEX_BTINFO_SRC_BT_IQK) {
                coex_stat->bt_iqk_state = buf[1];
-               if (coex_stat->bt_iqk_state == 1)
+               if (coex_stat->bt_iqk_state == 0)
                        coex_stat->cnt_bt[COEX_CNT_BT_IQK]++;
                else if (coex_stat->bt_iqk_state == 2)
                        coex_stat->cnt_bt[COEX_CNT_BT_IQKFAIL]++;
                return;
        }
 
+       if (rsp_source == COEX_BTINFO_SRC_H2C60) {
+               for (i = 1; i <= COEX_WL_TDMA_PARA_LENGTH; i++)
+                       coex_dm->fw_tdma_para[i - 1] = buf[i];
+               return;
+       }
+
+       if (rsp_source == COEX_BTINFO_SRC_WL_FW) {
+               rtw_coex_update_bt_link_info(rtwdev);
+               return;
+       }
+
        if (rsp_source == COEX_BTINFO_SRC_BT_RSP ||
            rsp_source == COEX_BTINFO_SRC_BT_ACT) {
                if (coex_stat->bt_disabled) {
                }
        }
 
-       for (i = 0; i < length; i++) {
-               if (i < COEX_BTINFO_LENGTH_MAX)
-                       coex_stat->bt_info_c2h[rsp_source][i] = buf[i];
-               else
-                       break;
-       }
+       if (length != COEX_BTINFO_LENGTH) {
+               rtw_dbg(rtwdev, RTW_DBG_COEX,
+                       "[BTCoex], Bt_info length = %d invalid!!\n", length);
 
-       if (rsp_source == COEX_BTINFO_SRC_WL_FW) {
-               rtw_coex_update_bt_link_info(rtwdev);
-               rtw_coex_run_coex(rtwdev, COEX_RSN_BTINFO);
                return;
        }
 
+       for (i = 0; i < COEX_BTINFO_LENGTH; i++)
+               coex_stat->bt_info_c2h[rsp_source][i] = buf[i];
+
        /* get the same info from bt, skip it */
        if (coex_stat->bt_info_c2h[rsp_source][1] == coex_stat->bt_info_lb2 &&
            coex_stat->bt_info_c2h[rsp_source][2] == coex_stat->bt_info_lb3 &&
                coex_stat->cnt_bt[COEX_CNT_BT_INQ]++;
 
        coex_stat->bt_page = ((coex_stat->bt_info_lb3 & BIT(7)) == BIT(7));
-       if (coex_stat->bt_page) {
+       if (coex_stat->bt_page)
                coex_stat->cnt_bt[COEX_CNT_BT_PAGE]++;
-               if (coex_stat->wl_linkscan_proc ||
-                   coex_stat->wl_hi_pri_task1 ||
-                   coex_stat->wl_hi_pri_task2 || coex_stat->wl_gl_busy)
-                       rtw_coex_write_scbd(rtwdev, COEX_SCBD_SCAN, true);
-               else
-                       rtw_coex_write_scbd(rtwdev, COEX_SCBD_SCAN, false);
-       } else {
-               rtw_coex_write_scbd(rtwdev, COEX_SCBD_SCAN, false);
-       }
 
        /* unit: % (value-100 to translate to unit: dBm in coex info) */
        if (chip->bt_rssi_type == COEX_BTRSSI_RATIO) {
 
        bool wlg_at_btg;
 };
 
+#define COEX_WL_TDMA_PARA_LENGTH       5
+
 struct rtw_coex_dm {
        bool cur_ps_tdma_on;
        bool cur_wl_rx_low_gain_en;
        u32 cur_ant_pos_type;
        u32 cur_switch_status;
        u32 setting_tdma;
+       u8 fw_tdma_para[COEX_WL_TDMA_PARA_LENGTH];
 };
 
 #define COEX_BTINFO_SRC_WL_FW  0x0
 #define COEX_BTINFO_SRC_BT_ACT 0x2
 #define COEX_BTINFO_SRC_BT_IQK 0x3
 #define COEX_BTINFO_SRC_BT_SCBD        0x4
-#define COEX_BTINFO_SRC_MAX    0x5
+#define COEX_BTINFO_SRC_H2C60  0x5
+#define COEX_BTINFO_SRC_MAX    0x6
 
 #define COEX_INFO_FTP          BIT(7)
 #define COEX_INFO_A2DP         BIT(6)
 #define COEX_INFO_SCO_ESCO     BIT(1)
 #define COEX_INFO_CONNECTION   BIT(0)
 #define COEX_BTINFO_LENGTH_MAX 10
+#define COEX_BTINFO_LENGTH     7
 
 struct rtw_coex_stat {
        bool bt_disabled;
        /* counters to record wifi states */
        u32 cnt_wl[COEX_CNT_WL_MAX];
 
+       /* counters to record bt c2h data */
+       u32 cnt_bt_info_c2h[COEX_BTINFO_SRC_MAX];
+
        u32 darfrc;
        u32 darfrch;
 };