Begin fleshing out support for net80211 provided (legacy) sleep management.
authoradrian <adrian@FreeBSD.org>
Thu, 24 Apr 2014 01:39:53 +0000 (01:39 +0000)
committeradrian <adrian@FreeBSD.org>
Thu, 24 Apr 2014 01:39:53 +0000 (01:39 +0000)
commitad8f268a6ea2c48dac4f58af5f2f4f1b41688c64
tree6648918d63e86483613b59b9d2ef72f1bd1a869f
parent535eed4ef9b2879f8feea4a5c433c08a66f0acbd
Begin fleshing out support for net80211 provided (legacy) sleep management.

This transitions the VAP in and out of SLEEP state based on:

* whether there's been an active transmission in the last (hardcoded) 500ms;
* whether the TIM from the AP indicates there is data available.

It uses the beacon reception to trigger the active traffic check.
This way there's no further timer running to wake up the CPU
from its own sleep states.

Right now the VAP isn't woken up for multicast traffic - mostly because
the only NIC I plan on doing this for right will auto wakeup and stay
awake for multicast traffic indicated in the TIM.  So I don't have
to manually keep the hardware awake.

This doesn't do anything if the NIC doesn't advertise it implements
the new SWSLEEP capability AND if the VAP doesn't have powersave
enabled.

It also doesn't do much with ath(4) as it doesn't currently implement
the SLEEP state.

Tested:

* AR5416, STA mode (with local ath(4) changes)
sys/net80211/ieee80211_power.c
sys/net80211/ieee80211_power.h
sys/net80211/ieee80211_sta.c