summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSujith Manoharan <c_manoha@qca.qualcomm.com>2014-08-23 13:29:19 +0530
committerJohn W. Linville <linville@tuxdriver.com>2014-08-28 14:49:37 -0400
commit0e08b5fb81111662bf9fa5f67f8a412791923b6f (patch)
treec3956624a8dbf5633a5753b58cadcc3218ac0466
parent70b06dacfe8bd1f62de058e2116388b8f7c58531 (diff)
downloadop-kernel-dev-0e08b5fb81111662bf9fa5f67f8a412791923b6f.zip
op-kernel-dev-0e08b5fb81111662bf9fa5f67f8a412791923b6f.tar.gz
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.h4
-rw-r--r--drivers/net/wireless/ath/ath9k/channel.c26
-rw-r--r--drivers/net/wireless/ath/ath9k/main.c15
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 352c5da..892ca4a 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 39df24c..f719c36 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 30e0db2..e31f130 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);
OpenPOWER on IntegriCloud