|
@@ -1299,6 +1299,8 @@ struct il_priv {
|
|
|
/* queue refcounts */
|
|
|
#define IL_MAX_HW_QUEUES 32
|
|
|
unsigned long queue_stopped[BITS_TO_LONGS(IL_MAX_HW_QUEUES)];
|
|
|
+#define IL_STOP_REASON_PASSIVE 0
|
|
|
+ unsigned long stop_reason;
|
|
|
/* for each AC */
|
|
|
atomic_t queue_stop_count[4];
|
|
|
|
|
@@ -2291,6 +2293,26 @@ il_stop_queue(struct il_priv *il, struct il_tx_queue *txq)
|
|
|
_il_stop_queue(il, ac);
|
|
|
}
|
|
|
|
|
|
+static inline void
|
|
|
+il_wake_queues_by_reason(struct il_priv *il, int reason)
|
|
|
+{
|
|
|
+ u8 ac;
|
|
|
+
|
|
|
+ if (test_and_clear_bit(reason, &il->stop_reason))
|
|
|
+ for (ac = 0; ac < 4; ac++)
|
|
|
+ _il_wake_queue(il, ac);
|
|
|
+}
|
|
|
+
|
|
|
+static inline void
|
|
|
+il_stop_queues_by_reason(struct il_priv *il, int reason)
|
|
|
+{
|
|
|
+ u8 ac;
|
|
|
+
|
|
|
+ if (!test_and_set_bit(reason, &il->stop_reason))
|
|
|
+ for (ac = 0; ac < 4; ac++)
|
|
|
+ _il_stop_queue(il, ac);
|
|
|
+}
|
|
|
+
|
|
|
#ifdef ieee80211_stop_queue
|
|
|
#undef ieee80211_stop_queue
|
|
|
#endif
|