1<html><head><meta http-equiv="Content-Type" content="text/html; charset=ANSI_X3.4-1968"><title>Chapter 9. Powersave support</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1"><link rel="home" href="index.html" title="The 802.11 subsystems – for kernel developers"><link rel="up" href="advanced.html" title="Part II. 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 10. 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 9. Powersave support</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="API-ieee80211-get-tkip-p2k.html">Prev</a> </td><th width="60%" align="center">Part II. Advanced driver interface</th><td width="20%" align="right"> <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 9. 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> </td><td width="20%" align="center"><a accesskey="u" href="advanced.html">Up</a></td><td width="40%" align="right"> <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> </td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"> Chapter 10. Beacon filter support</td></tr></table></div></body></html> 60