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
@ -202,7 +202,7 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata,
|
||||
struct ieee80211_local *local = sdata->local;
|
||||
struct sk_buff *skb;
|
||||
struct ieee80211_mgmt *mgmt;
|
||||
u8 *pos;
|
||||
u8 *pos, qos_info;
|
||||
const u8 *ies;
|
||||
size_t offset = 0, noffset;
|
||||
int i, len, count, rates_len, supp_rates_len;
|
||||
@ -375,6 +375,14 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata,
|
||||
}
|
||||
|
||||
if (wk->assoc.wmm_used && local->hw.queues >= 4) {
|
||||
if (wk->assoc.uapsd_used) {
|
||||
qos_info = IEEE80211_DEFAULT_UAPSD_QUEUES;
|
||||
qos_info |= (IEEE80211_DEFAULT_MAX_SP_LEN <<
|
||||
IEEE80211_WMM_IE_STA_QOSINFO_SP_SHIFT);
|
||||
} else {
|
||||
qos_info = 0;
|
||||
}
|
||||
|
||||
pos = skb_put(skb, 9);
|
||||
*pos++ = WLAN_EID_VENDOR_SPECIFIC;
|
||||
*pos++ = 7; /* len */
|
||||
@ -384,7 +392,7 @@ static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata,
|
||||
*pos++ = 2; /* WME */
|
||||
*pos++ = 0; /* WME info */
|
||||
*pos++ = 1; /* WME ver */
|
||||
*pos++ = 0;
|
||||
*pos++ = qos_info;
|
||||
}
|
||||
|
||||
/* add any remaining custom (i.e. vendor specific here) IEs */
|
||||
|
Reference in New Issue
Block a user