aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/sta_info.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-09-29 10:04:26 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-09-30 15:57:10 -0400
commit042ec4533720122e6cb93dd9f3b6a75fe2fcff16 (patch)
treeed8fad40c171ab54155ce316496f68d79b438b01 /net/mac80211/sta_info.c
parent941c93cd039852b7ab02c74f4698c99d82bd6cfe (diff)
mac80211: let drivers inform it about per TID buffered frames
For uAPSD implementation, it is necessary to know on which ACs frames are buffered. mac80211 obviously knows about the frames it has buffered itself, but with aggregation many drivers buffer frames. Thus, mac80211 needs to be informed about this. For now, since we don't have APSD in any form, this will unconditionally set the TIM bit for the station but later with uAPSD only some ACs might cause the TIM bit to be set. ath9k is the only driver using this API and I only modify it in the most basic way, it won't be able to implement uAPSD with this yet. But it can't do that anyway since there's no way to selectively release frames to the peer yet. Since drivers will buffer frames per TID, let them inform mac80211 on a per TID basis, mac80211 will then sort out the AC mapping itself. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/sta_info.c')
-rw-r--r--net/mac80211/sta_info.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index c52e58c0a979..016742d4c48e 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -1117,11 +1117,15 @@ void ieee80211_sta_block_awake(struct ieee80211_hw *hw,
1117} 1117}
1118EXPORT_SYMBOL(ieee80211_sta_block_awake); 1118EXPORT_SYMBOL(ieee80211_sta_block_awake);
1119 1119
1120void ieee80211_sta_set_tim(struct ieee80211_sta *pubsta) 1120void ieee80211_sta_set_buffered(struct ieee80211_sta *pubsta,
1121 u8 tid, bool buffered)
1121{ 1122{
1122 struct sta_info *sta = container_of(pubsta, struct sta_info, sta); 1123 struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
1123 1124
1125 if (!buffered)
1126 return;
1127
1124 set_sta_flags(sta, WLAN_STA_PS_DRIVER_BUF); 1128 set_sta_flags(sta, WLAN_STA_PS_DRIVER_BUF);
1125 sta_info_set_tim_bit(sta); 1129 sta_info_set_tim_bit(sta);
1126} 1130}
1127EXPORT_SYMBOL(ieee80211_sta_set_tim); 1131EXPORT_SYMBOL(ieee80211_sta_set_buffered);