diff options
author | Sujith Manoharan <c_manoha@qca.qualcomm.com> | 2014-08-23 13:29:19 +0530 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-08-28 14:49:37 -0400 |
commit | 0e08b5fb81111662bf9fa5f67f8a412791923b6f (patch) | |
tree | c3956624a8dbf5633a5753b58cadcc3218ac0466 | |
parent | 70b06dacfe8bd1f62de058e2116388b8f7c58531 (diff) | |
download | linux-0e08b5fb81111662bf9fa5f67f8a412791923b6f.tar.bz2 |
ath9k: Add ath9k_chanctx_wake_queues
Introduce a function that handles queues in channel
context mode.
Signed-off-by: Sujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ath9k.h | 4 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/channel.c | 26 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/main.c | 15 |
3 files changed, 32 insertions, 13 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index 352c5dabdf75..892ca4af75ef 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h @@ -432,6 +432,7 @@ void ath9k_p2p_beacon_sync(struct ath_softc *sc); void ath9k_p2p_bss_info_changed(struct ath_softc *sc, struct ieee80211_vif *vif); void ath9k_p2p_ps_timer(void *priv); +void ath9k_chanctx_wake_queues(struct ath_softc *sc); void ath_chanctx_beacon_recv_ev(struct ath_softc *sc, u32 ts, enum ath_chanctx_event ev); @@ -491,6 +492,9 @@ static inline void ath9k_p2p_bss_info_changed(struct ath_softc *sc, static inline void ath9k_p2p_ps_timer(struct ath_softc *sc) { } +static inline void ath9k_chanctx_wake_queues(struct ath_softc *sc) +{ +} #endif /* CONFIG_ATH9K_CHANNEL_CONTEXT */ int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan); diff --git a/drivers/net/wireless/ath/ath9k/channel.c b/drivers/net/wireless/ath/ath9k/channel.c index 39df24c964c3..f719c36fe47d 100644 --- a/drivers/net/wireless/ath/ath9k/channel.c +++ b/drivers/net/wireless/ath/ath9k/channel.c @@ -196,6 +196,10 @@ void ath_chanctx_set_channel(struct ath_softc *sc, struct ath_chanctx *ctx, #ifdef CONFIG_ATH9K_CHANNEL_CONTEXT +/**********************************************************/ +/* Functions to handle the channel context state machine. */ +/**********************************************************/ + static const char *offchannel_state_string(enum ath_offchannel_state state) { #define case_rtn_string(val) case val: return #val @@ -958,6 +962,28 @@ bool ath9k_is_chanctx_enabled(void) return (ath9k_use_chanctx == 1); } +/********************/ +/* Queue management */ +/********************/ + +void ath9k_chanctx_wake_queues(struct ath_softc *sc) +{ + struct ath_hw *ah = sc->sc_ah; + int i; + + if (sc->cur_chan == &sc->offchannel.chan) { + ieee80211_wake_queue(sc->hw, + sc->hw->offchannel_tx_hw_queue); + } else { + for (i = 0; i < IEEE80211_NUM_ACS; i++) + ieee80211_wake_queue(sc->hw, + sc->cur_chan->hw_queue_base + i); + } + + if (ah->opmode == NL80211_IFTYPE_AP) + ieee80211_wake_queue(sc->hw, sc->hw->queues - 2); +} + /*****************/ /* P2P Powersave */ /*****************/ diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c index 30e0db215387..e31f130b5137 100644 --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -223,7 +223,6 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start) struct ath_hw *ah = sc->sc_ah; struct ath_common *common = ath9k_hw_common(ah); unsigned long flags; - int i; if (ath_startrecv(sc) != 0) { ath_err(common, "Unable to restart recv logic\n"); @@ -270,18 +269,8 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start) if (!ath9k_is_chanctx_enabled()) ieee80211_wake_queues(sc->hw); - else { - if (sc->cur_chan == &sc->offchannel.chan) - ieee80211_wake_queue(sc->hw, - sc->hw->offchannel_tx_hw_queue); - else { - for (i = 0; i < IEEE80211_NUM_ACS; i++) - ieee80211_wake_queue(sc->hw, - sc->cur_chan->hw_queue_base + i); - } - if (ah->opmode == NL80211_IFTYPE_AP) - ieee80211_wake_queue(sc->hw, sc->hw->queues - 2); - } + else + ath9k_chanctx_wake_queues(sc); ath9k_p2p_ps_timer(sc); |