mac80211: add U-APSD client support
Add Unscheduled Automatic Power-Save Delivery (U-APSD) client support. The idea is that the data frames from the client trigger AP to send the buffered frames with ACs which have U-APSD enabled. This decreases latency and makes it possible to save even more power. Driver needs to use IEEE80211_HW_UAPSD to enable the feature. The current implementation assumes that firmware takes care of the wakeup and hardware needing IEEE80211_HW_PS_NULLFUNC_STACK is not yet supported. Tested with wl1251 on a Nokia N900 and Cisco Aironet 1231G AP and running various test traffic with ping. Signed-off-by: Kalle Valo <kalle.valo@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
2d46d7c121
commit
ab13315af9
@@ -54,6 +54,23 @@ void ieee80211_rx_bss_put(struct ieee80211_local *local,
|
||||
cfg80211_put_bss(container_of((void *)bss, struct cfg80211_bss, priv));
|
||||
}
|
||||
|
||||
static bool is_uapsd_supported(struct ieee802_11_elems *elems)
|
||||
{
|
||||
u8 qos_info;
|
||||
|
||||
if (elems->wmm_info && elems->wmm_info_len == 7
|
||||
&& elems->wmm_info[5] == 1)
|
||||
qos_info = elems->wmm_info[6];
|
||||
else if (elems->wmm_param && elems->wmm_param_len == 24
|
||||
&& elems->wmm_param[5] == 1)
|
||||
qos_info = elems->wmm_param[6];
|
||||
else
|
||||
/* no valid wmm information or parameter element found */
|
||||
return false;
|
||||
|
||||
return qos_info & IEEE80211_WMM_IE_AP_QOSINFO_UAPSD;
|
||||
}
|
||||
|
||||
struct ieee80211_bss *
|
||||
ieee80211_bss_info_update(struct ieee80211_local *local,
|
||||
struct ieee80211_rx_status *rx_status,
|
||||
@@ -117,6 +134,7 @@ ieee80211_bss_info_update(struct ieee80211_local *local,
|
||||
}
|
||||
|
||||
bss->wmm_used = elems->wmm_param || elems->wmm_info;
|
||||
bss->uapsd_supported = is_uapsd_supported(elems);
|
||||
|
||||
if (!beacon)
|
||||
bss->last_probe_resp = jiffies;
|
||||
|
Reference in New Issue
Block a user