mac80211: powersave documentation improvements
Subsystems (2)
cover mac80211: powersave documentation improvements
Hi,
he are some improvements to the mac80211 powersave documentation. I wanted to fix few warnings at the same.
---
Kalle Valo (2):
mac80211: fix mac80211.h documentation warnings
mac80211: improve powersave documentation
Documentation/DocBook/mac80211.tmpl | 2 - include/net/mac80211.h | 82 ++++++++++++++++++++++++++--------- 2 files changed, 61 insertions(+), 23 deletions(-)
PATCH 1/2 mac80211: fix mac80211.h documentation warnings
From: Kalle Valo <[email protected]>
There were some warnings about missing documentation and a missing reference.
Signed-off-by Kalle Valo <[email protected]>
--- Documentation/DocBook/mac80211.tmpl | 2 +- include/net/mac80211.h | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-)
Documentation/DocBook/mac80211.tmpl +1 -1
@@ -144,7 +144,7 @@ usage should require reading the full document. this though and the recommendation to allow only a single interface in STA mode at first! </para> -!Finclude/net/mac80211.h ieee80211_if_init_conf +!Finclude/net/mac80211.h ieee80211_vif </chapter> <chapter id="rx-tx">
include/net/mac80211.h +6 -1
@@ -107,6 +107,7 @@ enum ieee80211_max_queues {* 2^n-1 in the range 1..32767] * @cw_max: maximum contention window [like @cw_min] * @txop: maximum burst time in units of 32 usecs, 0 meaning disabled +* @uapsd: is U-APSD mode enabled for the queue */ struct ieee80211_tx_queue_params {u16 txop;
@@ -608,7 +609,11 @@ enum ieee80211_conf_changed {/** * enum ieee80211_smps_mode - spatial multiplexing power save mode * -* @ +* @IEEE80211_SMPS_AUTOMATIC: automatic +* @IEEE80211_SMPS_OFF: off +* @IEEE80211_SMPS_STATIC: static +* @IEEE80211_SMPS_DYNAMIC: dynamic +* @IEEE80211_SMPS_NUM_MODES: internal, don't use */ enum ieee80211_smps_mode {IEEE80211_SMPS_AUTOMATIC ,
PATCH 2/2 mac80211: improve powersave documentation
In reply to Kalle ValoFrom: Kalle Valo <[email protected]>
There has been some confusion how drivers should implement powersave support. Improve the documentation a bit to make it more clear what drivers need to do. Also mention about U-APSD.
Signed-off-by Kalle Valo <[email protected]>
--- include/net/mac80211.h | 75 +++++++++++++++++++++++++++++++++++------------- 1 files changed, 54 insertions(+), 21 deletions(-)
include/net/mac80211.h +54 -21
@@ -569,7 +569,13 @@ struct ieee80211_rx_status {* @IEEE80211_CONF_MONITOR: there's a monitor interface present -- use this * to determine for example whether to calculate timestamps for packets * or not, do not use instead of filter flags! -* @IEEE80211_CONF_PS: Enable 802.11 power save mode (managed mode only) +* @IEEE80211_CONF_PS: Enable 802.11 power save mode (managed mode only). +* This is the power save mode defined by IEEE 802.11-2007 section 11.2, +* meaning that the hardware still wakes up for beacons, is able to +* transmit frames and receive the possible acknowledgment frames. +* Not to be confused with hardware specific wakeup/sleep states, +* driver is responsible for that. See the section "Powersave support" +* for more. * @IEEE80211_CONF_IDLE: The device is running, but idle; if the flag is set * the driver should be prepared to handle configuration requests but * may turn the device off as much as possible. Typically, this flag will
@@ -1138,18 +1144,24 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,* * mac80211 has support for various powersave implementations. * -* First, it can support hardware that handles all powersaving by -* itself, such hardware should simply set the %IEEE80211_HW_SUPPORTS_PS -* hardware flag. In that case, it will be told about the desired -* powersave mode depending on the association status, and the driver -* must take care of sending nullfunc frames when necessary, i.e. when -* entering and leaving powersave mode. The driver is required to look at -* the AID in beacons and signal to the AP that it woke up when it finds -* traffic directed to it. This mode supports dynamic PS by simply -* enabling/disabling PS. -* -* Additionally, such hardware may set the %IEEE80211_HW_SUPPORTS_DYNAMIC_PS -* flag to indicate that it can support dynamic PS mode itself (see below). +* First, it can support hardware that handles all powersaving by itself, +* such hardware should simply set the %IEEE80211_HW_SUPPORTS_PS hardware +* flag. In that case, it will be told about the desired powersave mode +* with the %IEEE80211_CONF_PS flag depending on the association status. +* The hardware must take care of sending nullfunc frames when necessary, +* i.e. when entering and leaving powersave mode. The hardware is required +* to look at the AID in beacons and signal to the AP that it woke up when +* it finds traffic directed to it. +* +* %IEEE80211_CONF_PS flag enabled means that the powersave mode defined in +* IEEE 802.11-2007 section 11.2 is enabled. This is not to be confused +* with hardware wakeup and sleep states. Driver is responsible for waking +* up the hardware before issueing commands to the hardware and putting it +* back to sleep at approriate times. +* +* When PS is enabled, hardware needs to wakeup for beacons and receive the +* buffered multicast/broadcast frames after the beacon. Also it must be +* possible to send frames and receive the acknowledment frame. * * Other hardware designs cannot send nullfunc frames by themselves and also * need software support for parsing the TIM bitmap. This is also supported
@@ -1157,14 +1169,35 @@ ieee80211_get_alt_retry_rate(const struct ieee80211_hw *hw,* %IEEE80211_HW_PS_NULLFUNC_STACK flags. The hardware is of course still * required to pass up beacons. The hardware is still required to handle * waking up for multicast traffic; if it cannot the driver must handle that -* as best as it can, mac80211 is too slow. -* -* Dynamic powersave mode is an extension to normal powersave mode in which -* the hardware stays awake for a user-specified period of time after sending -* a frame so that reply frames need not be buffered and therefore delayed -* to the next wakeup. This can either be supported by hardware, in which case -* the driver needs to look at the @dynamic_ps_timeout hardware configuration -* value, or by the stack if all nullfunc handling is in the stack. +* as best as it can, mac80211 is too slow to do that. +* +* Dynamic powersave is an extension to normal powersave in which the +* hardware stays awake for a user-specified period of time after sending a +* frame so that reply frames need not be buffered and therefore delayed to +* the next wakeup. It's compromise of getting good enough latency when +* there's data traffic and still saving significantly power in idle +* periods. +* +* Dynamic powersave is supported by simply mac80211 enabling and disabling +* PS based on traffic. Driver needs to only set %IEEE80211_HW_SUPPORTS_PS +* flag and mac80211 will handle everything automatically. Additionally, +* hardware having support for the dynamic PS feature may set the +* %IEEE80211_HW_SUPPORTS_DYNAMIC_PS flag to indicate that it can support +* dynamic PS mode itself. The driver needs to look at the +* @dynamic_ps_timeout hardware configuration value and use it that value +* whenever %IEEE80211_CONF_PS is set. In this case mac80211 will disable +* dynamic PS feature in stack and will just keep %IEEE80211_CONF_PS +* enabled whenever user has enabled powersave. +* +* Driver informs U-APSD client support by enabling +* %IEEE80211_HW_SUPPORTS_UAPSD flag. The mode is configured through the +* uapsd paramater in conf_tx() operation. Hardware needs to send the QoS +* Nullfunc frames and stay awake until the service period has ended. To +* utilize U-APSD, dynamic powersave is disabled for voip AC and all frames +* from that AC are transmitted with powersave enabled. +* +* Note: U-APSD client mode is not yet supported with +* %IEEE80211_HW_PS_NULLFUNC_STACK. */ /**