aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/ieee80211_i.h
diff options
context:
space:
mode:
authorKalle Valo <kalle.valo@nokia.com>2008-12-18 16:35:20 -0500
committerJohn W. Linville <linville@tuxdriver.com>2008-12-19 15:23:59 -0500
commitce7c9111a97492d04c504f40736a669c235d664a (patch)
tree6a294d373e19a99048dafa632966096371f3b1bb /net/mac80211/ieee80211_i.h
parente0cb686ff879dc9ac045ad7258ec687088d4e450 (diff)
mac80211: track master queue status
This is a preparation for the dynamic power save support. In future there are two paths to stop the master queues and we need to track this properly to avoid starting queues incorrectly. Implement this by adding a status array for each queue. The original idea and design is from Johannes Berg, I just did the implementation based on his notes. All the bugs are mine, of course. Signed-off-by: Kalle Valo <kalle.valo@nokia.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r--net/mac80211/ieee80211_i.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 18b91601770a..a74d6738b30a 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -538,6 +538,10 @@ enum {
538 IEEE80211_ADDBA_MSG = 4, 538 IEEE80211_ADDBA_MSG = 4,
539}; 539};
540 540
541enum queue_stop_reason {
542 IEEE80211_QUEUE_STOP_REASON_DRIVER,
543};
544
541/* maximum number of hardware queues we support. */ 545/* maximum number of hardware queues we support. */
542#define QD_MAX_QUEUES (IEEE80211_MAX_AMPDU_QUEUES + IEEE80211_MAX_QUEUES) 546#define QD_MAX_QUEUES (IEEE80211_MAX_AMPDU_QUEUES + IEEE80211_MAX_QUEUES)
543 547
@@ -554,7 +558,8 @@ struct ieee80211_local {
554 const struct ieee80211_ops *ops; 558 const struct ieee80211_ops *ops;
555 559
556 unsigned long queue_pool[BITS_TO_LONGS(QD_MAX_QUEUES)]; 560 unsigned long queue_pool[BITS_TO_LONGS(QD_MAX_QUEUES)];
557 561 unsigned long queue_stop_reasons[IEEE80211_MAX_QUEUES];
562 spinlock_t queue_stop_reason_lock;
558 struct net_device *mdev; /* wmaster# - "master" 802.11 device */ 563 struct net_device *mdev; /* wmaster# - "master" 802.11 device */
559 int open_count; 564 int open_count;
560 int monitors, cooked_mntrs; 565 int monitors, cooked_mntrs;
@@ -972,6 +977,11 @@ int ieee80211_set_freq(struct ieee80211_sub_if_data *sdata, int freq);
972u64 ieee80211_mandatory_rates(struct ieee80211_local *local, 977u64 ieee80211_mandatory_rates(struct ieee80211_local *local,
973 enum ieee80211_band band); 978 enum ieee80211_band band);
974 979
980void ieee80211_wake_queues_by_reason(struct ieee80211_hw *hw,
981 enum queue_stop_reason reason);
982void ieee80211_stop_queues_by_reason(struct ieee80211_hw *hw,
983 enum queue_stop_reason reason);
984
975#ifdef CONFIG_MAC80211_NOINLINE 985#ifdef CONFIG_MAC80211_NOINLINE
976#define debug_noinline noinline 986#define debug_noinline noinline
977#else 987#else