diff options
author | Johannes Berg <johannes.berg@intel.com> | 2012-04-03 10:28:50 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-04-11 16:23:50 -0400 |
commit | 3a25a8c8b75b430c4f4022918e26fa51d557ecde (patch) | |
tree | d4863b7f17c2ea44fb523e29951b6bd202ddb1ad /net/mac80211/ieee80211_i.h | |
parent | 4b6f1dd6a6faf4ed8d209bbd548e78b15e55aee8 (diff) |
mac80211: add improved HW queue control
mac80211 currently only supports one hardware queue
per AC. This is already problematic for off-channel
uses since if we go off channel while the BE queue
is full and then try to send an off-channel frame
the frame will never go out. This will become worse
when we support multi-channel since then a queue on
one channel might be full, but we have to stop the
software queue for all channels. That is obviously
not desirable.
To address this problem allow drivers to register
more hardware queues, and allow them to map them to
virtual interfaces. When they stop a hardware queue
the corresponding AC software queues on the correct
interfaces will be stopped as well. Additionally,
there's an off-channel queue to solve that problem
and a per-interface after-DTIM beacon queue. This
allows drivers to manage software queues closer to
how the hardware works.
Currently, there's a limit of 16 hardware queues.
This may or may not be sufficient, we can adjust it
as needed.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
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 | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 8ed074f7e6cd..4be11ea3dfc4 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -1449,6 +1449,7 @@ void ieee80211_wake_queue_by_reason(struct ieee80211_hw *hw, int queue, | |||
1449 | enum queue_stop_reason reason); | 1449 | enum queue_stop_reason reason); |
1450 | void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue, | 1450 | void ieee80211_stop_queue_by_reason(struct ieee80211_hw *hw, int queue, |
1451 | enum queue_stop_reason reason); | 1451 | enum queue_stop_reason reason); |
1452 | void ieee80211_propagate_queue_wake(struct ieee80211_local *local, int queue); | ||
1452 | void ieee80211_add_pending_skb(struct ieee80211_local *local, | 1453 | void ieee80211_add_pending_skb(struct ieee80211_local *local, |
1453 | struct sk_buff *skb); | 1454 | struct sk_buff *skb); |
1454 | void ieee80211_add_pending_skbs_fn(struct ieee80211_local *local, | 1455 | void ieee80211_add_pending_skbs_fn(struct ieee80211_local *local, |