On 06/21/2017 04:50 PM, Johannes Berg wrote:
From: Johannes Berg <johannes.b...@intel.com>

Some drivers may want to also use the TXQ abstraction with
non-data packets that need powersave buffering, so add a
hardware flag to allow this.

Change ath9k/ath10k to use these by dequeuing the frames
immediately and invoking the normal TX path for them.

Signed-off-by: Johannes Berg <johannes.b...@intel.com>

--- a/drivers/net/wireless/ath/ath9k/xmit.c
+++ b/drivers/net/wireless/ath/ath9k/xmit.c
@@ -154,8 +154,24 @@ void ath9k_wake_tx_queue(struct ieee80211_hw *hw, struct 
ieee80211_txq *queue)
 {
        struct ath_softc *sc = hw->priv;
        struct ath_common *common = ath9k_hw_common(sc->sc_ah);
-       struct ath_atx_tid *tid = (struct ath_atx_tid *) queue->drv_priv;
-       struct ath_txq *txq = tid->txq;
+       struct ath_atx_tid *tid;
+       struct ath_txq *txq;
+
+       if (unlikely(queue->tid == IEEE80211_NUM_TIDS)) {
+               struct sk_buff *skb = ieee80211_tx_dequeue(hw, queue);
+               struct ieee80211_tx_control control = {
+                       .sta = queue->sta,
+               };
+
+               if (WARN_ON(!skb))
+                       return;
+
+               ath9k_tx(hw, &control, skb);
+               return;
+       }

I think a comment for the above code block would be warranted (and for ath10k 
as well).

I guess this is the part about dequeueing the frames immediately?

Thanks,
Ben

--
Ben Greear <gree...@candelatech.com>
Candela Technologies Inc  http://www.candelatech.com

Reply via email to