1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968"><title>Chapter&#160;9.&#160;Powersave support</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="index.html" title="The 802.11 subsystems &#8211; for kernel developers"><link rel="up" href="advanced.html" title="Part&#160;II.&#160;Advanced driver interface"><link rel="prev" href="API-ieee80211-get-tkip-p2k.html" title="ieee80211_get_tkip_p2k"><link rel="next" href="beacon-filter.html" title="Chapter&#160;10.&#160;Beacon filter support"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Chapter&#160;9.&#160;Powersave support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="API-ieee80211-get-tkip-p2k.html">Prev</a>&#160;</td><th width="60%" align="center">Part&#160;II.&#160;Advanced driver interface</th><td width="20%" align="right">&#160;<a accesskey="n" href="beacon-filter.html">Next</a></td></tr></table><hr></div><div class="chapter"><div class="titlepage"><div><div><h2 class="title"><a name="powersave"></a>Chapter&#160;9.&#160;Powersave support</h2></div></div></div><p>
2   </p><p>
3   mac80211 has support for various powersave implementations.
4   </p><p>
5   First, it can support hardware that handles all powersaving by itself,
6   such hardware should simply set the <code class="constant">IEEE80211_HW_SUPPORTS_PS</code> hardware
7   flag. In that case, it will be told about the desired powersave mode
8   with the <code class="constant">IEEE80211_CONF_PS</code> flag depending on the association status.
9   The hardware must take care of sending nullfunc frames when necessary,
10   i.e. when entering and leaving powersave mode. The hardware is required
11   to look at the AID in beacons and signal to the AP that it woke up when
12   it finds traffic directed to it.
13   </p><p>
14   <code class="constant">IEEE80211_CONF_PS</code> flag enabled means that the powersave mode defined in
15   IEEE 802.11-2007 section 11.2 is enabled. This is not to be confused
16   with hardware wakeup and sleep states. Driver is responsible for waking
17   up the hardware before issuing commands to the hardware and putting it
18   back to sleep at appropriate times.
19   </p><p>
20   When PS is enabled, hardware needs to wakeup for beacons and receive the
21   buffered multicast/broadcast frames after the beacon. Also it must be
22   possible to send frames and receive the acknowledment frame.
23   </p><p>
24   Other hardware designs cannot send nullfunc frames by themselves and also
25   need software support for parsing the TIM bitmap. This is also supported
26   by mac80211 by combining the <code class="constant">IEEE80211_HW_SUPPORTS_PS</code> and
27   <code class="constant">IEEE80211_HW_PS_NULLFUNC_STACK</code> flags. The hardware is of course still
28   required to pass up beacons. The hardware is still required to handle
29   waking up for multicast traffic; if it cannot the driver must handle that
30   as best as it can, mac80211 is too slow to do that.
31   </p><p>
32   Dynamic powersave is an extension to normal powersave in which the
33   hardware stays awake for a user-specified period of time after sending a
34   frame so that reply frames need not be buffered and therefore delayed to
35   the next wakeup. It's compromise of getting good enough latency when
36   there's data traffic and still saving significantly power in idle
37   periods.
38   </p><p>
39   Dynamic powersave is simply supported by mac80211 enabling and disabling
40   PS based on traffic. Driver needs to only set <code class="constant">IEEE80211_HW_SUPPORTS_PS</code>
41   flag and mac80211 will handle everything automatically. Additionally,
42   hardware having support for the dynamic PS feature may set the
43   <code class="constant">IEEE80211_HW_SUPPORTS_DYNAMIC_PS</code> flag to indicate that it can support
44   dynamic PS mode itself. The driver needs to look at the
45   <em class="parameter"><code>dynamic_ps_timeout</code></em> hardware configuration value and use it that value
46   whenever <code class="constant">IEEE80211_CONF_PS</code> is set. In this case mac80211 will disable
47   dynamic PS feature in stack and will just keep <code class="constant">IEEE80211_CONF_PS</code>
48   enabled whenever user has enabled powersave.
49   </p><p>
50   Driver informs U-APSD client support by enabling
51   <code class="constant">IEEE80211_VIF_SUPPORTS_UAPSD</code> flag. The mode is configured through the
52   uapsd parameter in <code class="function">conf_tx</code> operation. Hardware needs to send the QoS
53   Nullfunc frames and stay awake until the service period has ended. To
54   utilize U-APSD, dynamic powersave is disabled for voip AC and all frames
55   from that AC are transmitted with powersave enabled.
56   </p><p>
57   Note: U-APSD client mode is not yet supported with
58   <code class="constant">IEEE80211_HW_PS_NULLFUNC_STACK</code>.
59</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="API-ieee80211-get-tkip-p2k.html">Prev</a>&#160;</td><td width="20%" align="center"><a accesskey="u" href="advanced.html">Up</a></td><td width="40%" align="right">&#160;<a accesskey="n" href="beacon-filter.html">Next</a></td></tr><tr><td width="40%" align="left" valign="top"><span class="phrase">ieee80211_get_tkip_p2k</span>&#160;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top">&#160;Chapter&#160;10.&#160;Beacon filter support</td></tr></table></div></body></html>
60