rt2x00: Add autowake support for USB hardware

The USB drivers don't support automatically waking up when in powersaving mode,
add a work object which will wakeup the device in time to receive the next beacon.
Based on that beacon, we either go back into powersaving mode, or we remain awake
to receive the buffered frames for our station.

Some part of the code, especially rt2x00lib_find_ie and rt2x00lib_rxdone_check_ps
are inspired on the code from carl9170.

Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Ivo van Doorn
2011-04-30 17:18:18 +02:00
committed by John W. Linville
parent fdbc7b0a26
commit 1c0bcf89d8
6 changed files with 139 additions and 0 deletions

View File

@@ -662,6 +662,7 @@ enum rt2x00_state_flags {
* Driver configuration
*/
CONFIG_CHANNEL_HT40,
CONFIG_POWERSAVING,
};
/*
@@ -681,6 +682,7 @@ enum rt2x00_capability_flags {
REQUIRE_TASKLET_CONTEXT,
REQUIRE_SW_SEQNO,
REQUIRE_HT_TX_DESC,
REQUIRE_PS_AUTOWAKE,
/*
* Capabilities
@@ -874,11 +876,21 @@ struct rt2x00_dev {
*/
u8 calibration[2];
/*
* Association id.
*/
u16 aid;
/*
* Beacon interval.
*/
u16 beacon_int;
/**
* Timestamp of last received beacon
*/
unsigned long last_beacon;
/*
* Low level statistics which will have
* to be kept up to date while device is running.
@@ -906,6 +918,11 @@ struct rt2x00_dev {
struct work_struct rxdone_work;
struct work_struct txdone_work;
/*
* Powersaving work
*/
struct delayed_work autowakeup_work;
/*
* Data queue arrays for RX, TX, Beacon and ATIM.
*/