diff options
author | Johannes Berg <johannes@sipsolutions.net> | 2010-05-05 09:28:27 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-05-07 14:55:51 -0400 |
commit | 0aaffa9b9699894aab3266195a529baf9f96ac29 (patch) | |
tree | 26fe5f5277ac6d7061ea723f92d4038b0c28b0b8 /net/mac80211/ieee80211_i.h | |
parent | f444de05d20e27cdd960c13fcbcfca3099f03143 (diff) |
mac80211: improve HT channel handling
Currently, when one interface switches HT mode,
all others will follow along. This is clearly
undesirable, since the new one might switch to
no-HT while another one is operating in HT.
Address this issue by keeping track of the HT
mode per interface, and allowing only changes
that are compatible, i.e. switching into HT40+
is not possible when another interface is in
HT40-, in that case the second one needs to
fall back to HT20.
Also, to allow drivers to know what's going on,
store the per-interface HT mode (channel type)
in the virtual interface's bss_conf.
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 | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index 359edff31471..69e7f4131f46 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h | |||
@@ -768,7 +768,7 @@ struct ieee80211_local { | |||
768 | enum mac80211_scan_state next_scan_state; | 768 | enum mac80211_scan_state next_scan_state; |
769 | struct delayed_work scan_work; | 769 | struct delayed_work scan_work; |
770 | struct ieee80211_sub_if_data *scan_sdata; | 770 | struct ieee80211_sub_if_data *scan_sdata; |
771 | enum nl80211_channel_type oper_channel_type; | 771 | enum nl80211_channel_type _oper_channel_type; |
772 | struct ieee80211_channel *oper_channel, *csa_channel; | 772 | struct ieee80211_channel *oper_channel, *csa_channel; |
773 | 773 | ||
774 | /* Temporary remain-on-channel for off-channel operations */ | 774 | /* Temporary remain-on-channel for off-channel operations */ |
@@ -1239,6 +1239,9 @@ enum ieee80211_chan_mode { | |||
1239 | enum ieee80211_chan_mode | 1239 | enum ieee80211_chan_mode |
1240 | ieee80211_get_channel_mode(struct ieee80211_local *local, | 1240 | ieee80211_get_channel_mode(struct ieee80211_local *local, |
1241 | struct ieee80211_sub_if_data *ignore); | 1241 | struct ieee80211_sub_if_data *ignore); |
1242 | bool ieee80211_set_channel_type(struct ieee80211_local *local, | ||
1243 | struct ieee80211_sub_if_data *sdata, | ||
1244 | enum nl80211_channel_type chantype); | ||
1242 | 1245 | ||
1243 | #ifdef CONFIG_MAC80211_NOINLINE | 1246 | #ifdef CONFIG_MAC80211_NOINLINE |
1244 | #define debug_noinline noinline | 1247 | #define debug_noinline noinline |