Commit 0e08b5fb authored by Sujith Manoharan's avatar Sujith Manoharan Committed by John W. Linville

ath9k: Add ath9k_chanctx_wake_queues

Introduce a function that handles queues in channel
context mode.
Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 70b06dac
...@@ -432,6 +432,7 @@ void ath9k_p2p_beacon_sync(struct ath_softc *sc); ...@@ -432,6 +432,7 @@ void ath9k_p2p_beacon_sync(struct ath_softc *sc);
void ath9k_p2p_bss_info_changed(struct ath_softc *sc, void ath9k_p2p_bss_info_changed(struct ath_softc *sc,
struct ieee80211_vif *vif); struct ieee80211_vif *vif);
void ath9k_p2p_ps_timer(void *priv); 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, void ath_chanctx_beacon_recv_ev(struct ath_softc *sc, u32 ts,
enum ath_chanctx_event ev); enum ath_chanctx_event ev);
...@@ -491,6 +492,9 @@ static inline void ath9k_p2p_bss_info_changed(struct ath_softc *sc, ...@@ -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_p2p_ps_timer(struct ath_softc *sc)
{ {
} }
static inline void ath9k_chanctx_wake_queues(struct ath_softc *sc)
{
}
#endif /* CONFIG_ATH9K_CHANNEL_CONTEXT */ #endif /* CONFIG_ATH9K_CHANNEL_CONTEXT */
int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan); int ath_reset_internal(struct ath_softc *sc, struct ath9k_channel *hchan);
......
...@@ -196,6 +196,10 @@ void ath_chanctx_set_channel(struct ath_softc *sc, struct ath_chanctx *ctx, ...@@ -196,6 +196,10 @@ void ath_chanctx_set_channel(struct ath_softc *sc, struct ath_chanctx *ctx,
#ifdef CONFIG_ATH9K_CHANNEL_CONTEXT #ifdef CONFIG_ATH9K_CHANNEL_CONTEXT
/**********************************************************/
/* Functions to handle the channel context state machine. */
/**********************************************************/
static const char *offchannel_state_string(enum ath_offchannel_state state) static const char *offchannel_state_string(enum ath_offchannel_state state)
{ {
#define case_rtn_string(val) case val: return #val #define case_rtn_string(val) case val: return #val
...@@ -958,6 +962,28 @@ bool ath9k_is_chanctx_enabled(void) ...@@ -958,6 +962,28 @@ bool ath9k_is_chanctx_enabled(void)
return (ath9k_use_chanctx == 1); 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 */ /* P2P Powersave */
/*****************/ /*****************/
......
...@@ -223,7 +223,6 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start) ...@@ -223,7 +223,6 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start)
struct ath_hw *ah = sc->sc_ah; struct ath_hw *ah = sc->sc_ah;
struct ath_common *common = ath9k_hw_common(ah); struct ath_common *common = ath9k_hw_common(ah);
unsigned long flags; unsigned long flags;
int i;
if (ath_startrecv(sc) != 0) { if (ath_startrecv(sc) != 0) {
ath_err(common, "Unable to restart recv logic\n"); ath_err(common, "Unable to restart recv logic\n");
...@@ -270,18 +269,8 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start) ...@@ -270,18 +269,8 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start)
if (!ath9k_is_chanctx_enabled()) if (!ath9k_is_chanctx_enabled())
ieee80211_wake_queues(sc->hw); ieee80211_wake_queues(sc->hw);
else { else
if (sc->cur_chan == &sc->offchannel.chan) ath9k_chanctx_wake_queues(sc);
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);
}
ath9k_p2p_ps_timer(sc); ath9k_p2p_ps_timer(sc);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment