ath9k: Ensure we set FTP_STOMP_LOW weight when WLAN is idle
authorMohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
Mon, 8 Oct 2012 16:00:51 +0000 (21:30 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 29 Oct 2012 19:18:50 +0000 (15:18 -0400)
When WLAN is idle ensure we downgrade to FTP_STOMP_LOW weight
(from STOMP_LOW) to provide more bandwidth for BT FTP profile.
WLAN's idleness can be estimated by taking into account of the
rx data packets and just ignore beacons, qos nullfunc etc.

Also update bt_wait_time even if the chip is in NETWORK SLEEP
mode. This should help BT throughput when WLAN is idle.

Signed-off-by: Mohammed Shafi Shajakhan <mohammed@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/gpio.c
drivers/net/wireless/ath/ath9k/recv.c

index bf4fb7db15eb20e14ea4e2aa68c7b18ae01caf2a..9e63a03330cb631e05be6c8b2874cc9ced1992d9 100644 (file)
@@ -193,7 +193,6 @@ static void ath_mci_ftp_adjust(struct ath_softc *sc)
        struct ath_mci_profile *mci = &btcoex->mci;
        struct ath_hw *ah = sc->sc_ah;
 
-       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) &&
                    (mci->num_pan || mci->num_other_acl))
@@ -222,6 +221,7 @@ static void ath_btcoex_period_timer(unsigned long data)
 
        spin_lock_irqsave(&sc->sc_pm_lock, flags);
        if (sc->sc_ah->power_mode == ATH9K_PM_NETWORK_SLEEP) {
+               btcoex->bt_wait_time += btcoex->btcoex_period;
                spin_unlock_irqrestore(&sc->sc_pm_lock, flags);
                goto skip_hw_wakeup;
        }
index 83d16e7ed27239bfa4734a2b1b66e98b2800dbf4..a04028bce28bbb2f9a5194d9c07b698d89ec6fc5 100644 (file)
@@ -1105,7 +1105,10 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp)
                else
                        rs.is_mybeacon = false;
 
-               sc->rx.num_pkts++;
+               if (ieee80211_is_data_present(hdr->frame_control) &&
+                   !ieee80211_is_qos_nullfunc(hdr->frame_control))
+                       sc->rx.num_pkts++;
+
                ath_debug_stat_rx(sc, &rs);
 
                /*