rtlwifi: btcoex: 21a 2ant: monitor wifi counter to check network status
authorYan-Hsuan Chuang <yhchuang@realtek.com>
Thu, 13 Apr 2017 18:06:54 +0000 (13:06 -0500)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 20 Apr 2017 07:24:02 +0000 (10:24 +0300)
If there are a lot of low-rate packets, then the connection of wifi is
unstable. If so, we should switch resource to bt to have a higher
transmission quality, or wifi resource will be wasted

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/halbtc8821a2ant.c
drivers/net/wireless/realtek/rtlwifi/btcoexist/halbtc8821a2ant.h

index 7f685a02d8659d732e44caf98bbc585c3ab8246d..e23670a23e4d21e13e7caa7a3bb06a2772a436dd 100644 (file)
@@ -306,6 +306,43 @@ static void btc8821a2ant_monitor_bt_ctr(struct btc_coexist *btcoexist)
        btcoexist->btc_write_1byte(btcoexist, 0x76e, 0xc);
 }
 
+static void btc8821a2ant_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 btc8821a2ant_query_bt_info(struct btc_coexist *btcoexist)
 {
        struct rtl_priv *rtlpriv = btcoexist->adapter;
@@ -2888,4 +2925,5 @@ void ex_btc8821a2ant_periodical(struct btc_coexist *btcoexist)
 
        btc8821a2ant_query_bt_info(btcoexist);
        btc8821a2ant_monitor_bt_ctr(btcoexist);
+       btc8821a2ant_monitor_wifi_ctr(btcoexist);
 }
index b4cf1f53d5105845b875f3f5ebb9e408dcb7151d..ce8e0d719e78a6ba0d2c16fcd43e66c3fe743e5c 100644 (file)
@@ -141,6 +141,16 @@ struct coex_sta_8821a_2ant {
        bool    c2h_bt_inquiry_page;
        u8      bt_retry_cnt;
        u8      bt_info_ext;
+
+       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;
 };
 
 /*===========================================