rtlwifi: btcoex: 23b 2ant: monitor wifi counter for allocate tdma time
authorYan-Hsuan Chuang <yhchuang@realtek.com>
Mon, 3 Apr 2017 18:41:35 +0000 (13:41 -0500)
committerKalle Valo <kvalo@codeaurora.org>
Wed, 5 Apr 2017 12:53:27 +0000 (15:53 +0300)
If there are too many CRC error packets, it means the wifi is operating
under low quality circumstances. If so, we need to reallocate the
resources of wifi and bt

Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Pkshih <pkshih@realtek.com>
Cc: Birming Chiu <birming@realtek.com>
Cc: Shaofu <shaofu@realtek.com>
Cc: Steven Ting <steventing@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b2ant.c
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8723b2ant.h

index 2c9f626..e9c692a 100644 (file)
@@ -309,6 +309,43 @@ static void btc8723b2ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
        btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);
 }
 
+static void btc8723b2ant_monitor_wifi_ctr(struct btc_coexist *btcoexist)
+{
+       if (coex_sta->under_ips) {
+               coex_sta->crc_ok_cck = 0;
+               coex_sta->crc_ok_11g = 0;
+               coex_sta->crc_ok_11n = 0;
+               coex_sta->crc_ok_11n_agg = 0;
+
+               coex_sta->crc_err_cck = 0;
+               coex_sta->crc_err_11g = 0;
+               coex_sta->crc_err_11n = 0;
+               coex_sta->crc_err_11n_agg = 0;
+       } else {
+               coex_sta->crc_ok_cck =
+                       btcoexist->btc_read_4byte(btcoexist, 0xf88);
+               coex_sta->crc_ok_11g =
+                       btcoexist->btc_read_2byte(btcoexist, 0xf94);
+               coex_sta->crc_ok_11n =
+                       btcoexist->btc_read_2byte(btcoexist, 0xf90);
+               coex_sta->crc_ok_11n_agg =
+                       btcoexist->btc_read_2byte(btcoexist, 0xfb8);
+
+               coex_sta->crc_err_cck =
+                       btcoexist->btc_read_4byte(btcoexist, 0xf84);
+               coex_sta->crc_err_11g =
+                       btcoexist->btc_read_2byte(btcoexist, 0xf96);
+               coex_sta->crc_err_11n =
+                       btcoexist->btc_read_2byte(btcoexist, 0xf92);
+               coex_sta->crc_err_11n_agg =
+                       btcoexist->btc_read_2byte(btcoexist, 0xfba);
+       }
+
+       /* reset counter */
+       btcoexist->btc_write_1byte_bitmask(btcoexist, 0xf16, 0x1, 0x1);
+       btcoexist->btc_write_1byte_bitmask(btcoexist, 0xf16, 0x1, 0x0);
+}
+
 static void btc8723b2ant_query_bt_info(struct btc_coexist *btcoexist)
 {
        struct rtl_priv *rtlpriv = btcoexist->adapter;
@@ -2875,6 +2912,9 @@ void ex_btc8723b2ant_periodical(struct btc_coexist *btcoexist)
 #if (BT_AUTO_REPORT_ONLY_8723B_2ANT == 0)
        btc8723b2ant_query_bt_info(btcoexist);
 #else
+       btc8723b2ant_monitor_bt_ctr(btcoexist);
+       btc8723b2ant_monitor_wifi_ctr(btcoexist);
+
        if (btc8723b2ant_is_wifi_status_changed(btcoexist) ||
            coex_dm->auto_tdma_adjust)
                btc8723b2ant_run_coexist_mechanism(btcoexist);
index d787ae3..d1bfdbe 100644 (file)
@@ -149,6 +149,16 @@ struct coex_sta_8723b_2ant {
        u8 bt_retry_cnt;
        u8 bt_info_ext;
        u32 pop_event_cnt;
+
+       u32 crc_ok_cck;
+       u32 crc_ok_11g;
+       u32 crc_ok_11n;
+       u32 crc_ok_11n_agg;
+
+       u32 crc_err_cck;
+       u32 crc_err_11g;
+       u32 crc_err_11n;
+       u32 crc_err_11n_agg;
 };
 
 /*********************************************************************