ath9k: Add ath9k_chanctx_wake_queues
authorSujith Manoharan <c_manoha@qca.qualcomm.com>
Sat, 23 Aug 2014 07:59:19 +0000 (13:29 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 28 Aug 2014 18:49:37 +0000 (14:49 -0400)
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>
drivers/net/wireless/ath/ath9k/ath9k.h
drivers/net/wireless/ath/ath9k/channel.c
drivers/net/wireless/ath/ath9k/main.c

index 352c5da..892ca4a 100644 (file)
@@ -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);
index 39df24c..f719c36 100644 (file)
@@ -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 */
 /*****************/
index 30e0db2..e31f130 100644 (file)
@@ -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);