diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2009-12-01 07:37:02 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-12-22 13:31:16 -0500 |
commit | 0f78231bffb868a30e8533aace142213266bb811 (patch) | |
tree | 317f65dc6d89e9a89ad83f94fadd780dd1e0ca83 /net/mac80211/ieee80211_i.h | |
parent | 18974b5b0b5e758d416c550553b143e5c8038281 (diff) |
mac80211: enable spatial multiplexing powersave
Enable spatial multiplexing in mac80211 by telling the
driver what to do and, where necessary, sending action
frames to the AP to update the requested SMPS mode.
Also includes a trivial implementation for hwsim that
just logs the requested mode.
For now, the userspace interface is in debugfs only,
and let you toggle the requested mode at any time.
Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
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 | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 178e329f9257..e63aecbddfbe 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -297,6 +297,8 @@ struct ieee80211_if_managed { | |||
297 | 297 | ||
298 | unsigned long timers_running; /* used for quiesce/restart */ | 298 | unsigned long timers_running; /* used for quiesce/restart */ |
299 | bool powersave; /* powersave requested for this iface */ | 299 | bool powersave; /* powersave requested for this iface */ |
300 | enum ieee80211_smps_mode req_smps, /* requested smps mode */ | ||
301 | ap_smps; /* smps mode AP thinks we're in */ | ||
300 | 302 | ||
301 | unsigned long request; | 303 | unsigned long request; |
302 | 304 | ||
@@ -587,6 +589,9 @@ struct ieee80211_local { | |||
587 | /* used for uploading changed mc list */ | 589 | /* used for uploading changed mc list */ |
588 | struct work_struct reconfig_filter; | 590 | struct work_struct reconfig_filter; |
589 | 591 | ||
592 | /* used to reconfigure hardware SM PS */ | ||
593 | struct work_struct recalc_smps; | ||
594 | |||
590 | /* aggregated multicast list */ | 595 | /* aggregated multicast list */ |
591 | struct dev_addr_list *mc_list; | 596 | struct dev_addr_list *mc_list; |
592 | int mc_count; | 597 | int mc_count; |
@@ -760,6 +765,8 @@ struct ieee80211_local { | |||
760 | int user_power_level; /* in dBm */ | 765 | int user_power_level; /* in dBm */ |
761 | int power_constr_level; /* in dBm */ | 766 | int power_constr_level; /* in dBm */ |
762 | 767 | ||
768 | enum ieee80211_smps_mode smps_mode; | ||
769 | |||
763 | struct work_struct restart_work; | 770 | struct work_struct restart_work; |
764 | 771 | ||
765 | #ifdef CONFIG_MAC80211_DEBUGFS | 772 | #ifdef CONFIG_MAC80211_DEBUGFS |
@@ -978,6 +985,9 @@ void ieee80211_send_bar(struct ieee80211_sub_if_data *sdata, u8 *ra, u16 tid, u1 | |||
978 | void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, | 985 | void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, |
979 | const u8 *da, u16 tid, | 986 | const u8 *da, u16 tid, |
980 | u16 initiator, u16 reason_code); | 987 | u16 initiator, u16 reason_code); |
988 | int ieee80211_send_smps_action(struct ieee80211_sub_if_data *sdata, | ||
989 | enum ieee80211_smps_mode smps, const u8 *da, | ||
990 | const u8 *bssid); | ||
981 | 991 | ||
982 | void ieee80211_sta_stop_rx_ba_session(struct ieee80211_sub_if_data *sdata, u8 *da, | 992 | void ieee80211_sta_stop_rx_ba_session(struct ieee80211_sub_if_data *sdata, u8 *da, |
983 | u16 tid, u16 initiator, u16 reason); | 993 | u16 tid, u16 initiator, u16 reason); |
@@ -1088,6 +1098,10 @@ void ieee80211_sta_def_wmm_params(struct ieee80211_sub_if_data *sdata, | |||
1088 | u32 ieee80211_sta_get_rates(struct ieee80211_local *local, | 1098 | u32 ieee80211_sta_get_rates(struct ieee80211_local *local, |
1089 | struct ieee802_11_elems *elems, | 1099 | struct ieee802_11_elems *elems, |
1090 | enum ieee80211_band band); | 1100 | enum ieee80211_band band); |
1101 | int __ieee80211_request_smps(struct ieee80211_sub_if_data *sdata, | ||
1102 | enum ieee80211_smps_mode smps_mode); | ||
1103 | void ieee80211_recalc_smps(struct ieee80211_local *local, | ||
1104 | struct ieee80211_sub_if_data *forsdata); | ||
1091 | 1105 | ||
1092 | #ifdef CONFIG_MAC80211_NOINLINE | 1106 | #ifdef CONFIG_MAC80211_NOINLINE |
1093 | #define debug_noinline noinline | 1107 | #define debug_noinline noinline |