diff options
author | Kalle Valo <kalle.valo@nokia.com> | 2009-02-10 10:09:31 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-02-13 13:45:17 -0500 |
commit | 572e00122190e3064fa19bd9780b146d2d0f1905 (patch) | |
tree | ae8423958dd012af1dca83718b3035f2e75c53ec /net/mac80211/ieee80211_i.h | |
parent | 1fb3606bc5864c64c78ce4e1751e5382a9a5aa84 (diff) |
mac80211: use ps-poll when dynamic power save mode is disabled
When a directed tim bit is set, mac80211 currently disables power save
ands sends a null frame to the AP. But if dynamic power save is
disabled, mac80211 will not enable power save ever gain. Fix this by
adding ps-poll functionality to mac80211. When a directed tim bit is
set, mac80211 sends a ps-poll frame to the AP and checks for the more
data bit in the returned data frames.
Using ps-poll is slower than waking up with null frame, but it's saves more
power in cases where the traffic is low. Userspace can control if either
ps-poll or null wakeup method is used by enabling and disabling dynamic
power save.
Signed-off-by: Kalle Valo <kalle.valo@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/ieee80211_i.h')
-rw-r--r-- | net/mac80211/ieee80211_i.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 5a1f19ad43c8..67bd5220cf40 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -728,6 +728,7 @@ struct ieee80211_local { | |||
728 | unsigned int wmm_acm; /* bit field of ACM bits (BIT(802.1D tag)) */ | 728 | unsigned int wmm_acm; /* bit field of ACM bits (BIT(802.1D tag)) */ |
729 | 729 | ||
730 | bool powersave; | 730 | bool powersave; |
731 | bool pspolling; | ||
731 | struct work_struct dynamic_ps_enable_work; | 732 | struct work_struct dynamic_ps_enable_work; |
732 | struct work_struct dynamic_ps_disable_work; | 733 | struct work_struct dynamic_ps_disable_work; |
733 | struct timer_list dynamic_ps_timer; | 734 | struct timer_list dynamic_ps_timer; |
@@ -921,6 +922,8 @@ u32 ieee80211_sta_get_rates(struct ieee80211_local *local, | |||
921 | enum ieee80211_band band); | 922 | enum ieee80211_band band); |
922 | void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, | 923 | void ieee80211_send_probe_req(struct ieee80211_sub_if_data *sdata, u8 *dst, |
923 | u8 *ssid, size_t ssid_len); | 924 | u8 *ssid, size_t ssid_len); |
925 | void ieee80211_send_pspoll(struct ieee80211_local *local, | ||
926 | struct ieee80211_sub_if_data *sdata); | ||
924 | 927 | ||
925 | /* scan/BSS handling */ | 928 | /* scan/BSS handling */ |
926 | int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata, | 929 | int ieee80211_request_scan(struct ieee80211_sub_if_data *sdata, |