diff options
author | Kalle Valo <kalle.valo@nokia.com> | 2008-12-18 16:35:20 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-12-19 15:23:59 -0500 |
commit | ce7c9111a97492d04c504f40736a669c235d664a (patch) | |
tree | 6a294d373e19a99048dafa632966096371f3b1bb /net/mac80211/ieee80211_i.h | |
parent | e0cb686ff879dc9ac045ad7258ec687088d4e450 (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.h | 12 |
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 | ||
541 | enum 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); | |||
972 | u64 ieee80211_mandatory_rates(struct ieee80211_local *local, | 977 | u64 ieee80211_mandatory_rates(struct ieee80211_local *local, |
973 | enum ieee80211_band band); | 978 | enum ieee80211_band band); |
974 | 979 | ||
980 | void ieee80211_wake_queues_by_reason(struct ieee80211_hw *hw, | ||
981 | enum queue_stop_reason reason); | ||
982 | void 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 |