|
@@ -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 :
|