aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/ieee80211_i.h
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2009-12-01 07:37:02 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-12-22 13:31:16 -0500
commit0f78231bffb868a30e8533aace142213266bb811 (patch)
tree317f65dc6d89e9a89ad83f94fadd780dd1e0ca83 /net/mac80211/ieee80211_i.h
parent18974b5b0b5e758d416c550553b143e5c8038281 (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.h14
1 files changed, 14 insertions, 0 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 178e329f925..e63aecbddfb 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
978void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata, 985void 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);
988int 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
982void ieee80211_sta_stop_rx_ba_session(struct ieee80211_sub_if_data *sdata, u8 *da, 992void 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,
1088u32 ieee80211_sta_get_rates(struct ieee80211_local *local, 1098u32 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);
1101int __ieee80211_request_smps(struct ieee80211_sub_if_data *sdata,
1102 enum ieee80211_smps_mode smps_mode);
1103void 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