]> Pileus Git - ~andy/linux/blobdiff - drivers/net/wireless/ath/ath9k/gpio.c
ath9k: improve BT FTP/PAN performance
[~andy/linux] / drivers / net / wireless / ath / ath9k / gpio.c
index 9397a6d2ed5d9a20a96fdec98ebbf6eed0691dcc..af6d27350291a7ed1c770c001acbf8823107f408 100644 (file)
@@ -191,6 +191,7 @@ static void ath_btcoex_period_timer(unsigned long data)
        struct ath_softc *sc = (struct ath_softc *) data;
        struct ath_hw *ah = sc->sc_ah;
        struct ath_btcoex *btcoex = &sc->btcoex;
+       struct ath_mci_profile *mci = &btcoex->mci;
        u32 timer_period;
        bool is_btscan;
 
@@ -199,6 +200,18 @@ static void ath_btcoex_period_timer(unsigned long data)
                ath_detect_bt_priority(sc);
        is_btscan = test_bit(BT_OP_SCAN, &btcoex->op_flags);
 
+       btcoex->bt_wait_time += btcoex->btcoex_period;
+       if (btcoex->bt_wait_time > ATH_BTCOEX_RX_WAIT_TIME) {
+               if (ar9003_mci_state(ah, MCI_STATE_NEED_FTP_STOMP, NULL) &&
+                   (mci->num_pan || mci->num_other_acl))
+                       ah->btcoex_hw.mci.stomp_ftp =
+                               (sc->rx.num_pkts < ATH_BTCOEX_STOMP_FTP_THRESH);
+               else
+                       ah->btcoex_hw.mci.stomp_ftp = false;
+               btcoex->bt_wait_time = 0;
+               sc->rx.num_pkts = 0;
+       }
+
        spin_lock_bh(&btcoex->btcoex_lock);
 
        ath9k_hw_btcoex_bt_stomp(ah, is_btscan ? ATH_BTCOEX_STOMP_ALL :