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
@@ -58,6 +58,15 @@ struct ieee80211_local;
|
||||
|
||||
#define TU_TO_EXP_TIME(x) (jiffies + usecs_to_jiffies((x) * 1024))
|
||||
|
||||
#define IEEE80211_DEFAULT_UAPSD_QUEUES \
|
||||
(IEEE80211_WMM_IE_STA_QOSINFO_AC_BK | \
|
||||
IEEE80211_WMM_IE_STA_QOSINFO_AC_BE | \
|
||||
IEEE80211_WMM_IE_STA_QOSINFO_AC_VI | \
|
||||
IEEE80211_WMM_IE_STA_QOSINFO_AC_VO)
|
||||
|
||||
#define IEEE80211_DEFAULT_MAX_SP_LEN \
|
||||
IEEE80211_WMM_IE_STA_QOSINFO_SP_ALL
|
||||
|
||||
struct ieee80211_fragment_entry {
|
||||
unsigned long first_frag_time;
|
||||
unsigned int seq;
|
||||
@@ -78,6 +87,7 @@ struct ieee80211_bss {
|
||||
u8 dtim_period;
|
||||
|
||||
bool wmm_used;
|
||||
bool uapsd_supported;
|
||||
|
||||
unsigned long last_probe_resp;
|
||||
|
||||
@@ -285,7 +295,7 @@ struct ieee80211_work {
|
||||
u8 ssid[IEEE80211_MAX_SSID_LEN];
|
||||
u8 ssid_len;
|
||||
u8 supp_rates_len;
|
||||
bool wmm_used, use_11n;
|
||||
bool wmm_used, use_11n, uapsd_used;
|
||||
} assoc;
|
||||
struct {
|
||||
u32 duration;
|
||||
@@ -306,6 +316,7 @@ enum ieee80211_sta_flags {
|
||||
IEEE80211_STA_DISABLE_11N = BIT(4),
|
||||
IEEE80211_STA_CSA_RECEIVED = BIT(5),
|
||||
IEEE80211_STA_MFP_ENABLED = BIT(6),
|
||||
IEEE80211_STA_UAPSD_ENABLED = BIT(7),
|
||||
};
|
||||
|
||||
struct ieee80211_if_managed {
|
||||
|
Reference in New Issue
Block a user