aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/mlme.c
diff options
context:
space:
mode:
authorKalle Valo <kalle.valo@nokia.com>2008-12-18 16:35:13 -0500
committerJohn W. Linville <linville@tuxdriver.com>2008-12-19 15:23:57 -0500
commite0cb686ff879dc9ac045ad7258ec687088d4e450 (patch)
tree4792dc94d6a36be8367987b88b922157acf59808 /net/mac80211/mlme.c
parentd10d0e5707fb7b8afa7e68a14d69e752604ee294 (diff)
mac80211: enable IEEE80211_CONF_PS only when associated
Also disable power save when disassociated. It makes no sense to have power save enabled while disassociated. iwlwifi seems to have this check in the driver, but it's better to do this in mac80211 instead. Signed-off-by: Kalle Valo <kalle.valo@nokia.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r--net/mac80211/mlme.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 1374b8c750ab..dac8bd37dcf5 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -744,6 +744,11 @@ static void ieee80211_set_associated(struct ieee80211_sub_if_data *sdata,
744 bss_info_changed |= BSS_CHANGED_BASIC_RATES; 744 bss_info_changed |= BSS_CHANGED_BASIC_RATES;
745 ieee80211_bss_info_change_notify(sdata, bss_info_changed); 745 ieee80211_bss_info_change_notify(sdata, bss_info_changed);
746 746
747 if (local->powersave) {
748 local->hw.conf.flags |= IEEE80211_CONF_PS;
749 ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
750 }
751
747 netif_tx_start_all_queues(sdata->dev); 752 netif_tx_start_all_queues(sdata->dev);
748 netif_carrier_on(sdata->dev); 753 netif_carrier_on(sdata->dev);
749 754
@@ -812,7 +817,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
812{ 817{
813 struct ieee80211_local *local = sdata->local; 818 struct ieee80211_local *local = sdata->local;
814 struct sta_info *sta; 819 struct sta_info *sta;
815 u32 changed = 0; 820 u32 changed = 0, config_changed = 0;
816 821
817 rcu_read_lock(); 822 rcu_read_lock();
818 823
@@ -859,8 +864,14 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
859 864
860 local->hw.conf.ht.enabled = false; 865 local->hw.conf.ht.enabled = false;
861 local->oper_channel_type = NL80211_CHAN_NO_HT; 866 local->oper_channel_type = NL80211_CHAN_NO_HT;
862 ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_HT); 867 config_changed |= IEEE80211_CONF_CHANGE_HT;
868
869 if (local->hw.conf.flags & IEEE80211_CONF_PS) {
870 local->hw.conf.flags &= ~IEEE80211_CONF_PS;
871 config_changed |= IEEE80211_CONF_CHANGE_PS;
872 }
863 873
874 ieee80211_hw_config(local, config_changed);
864 ieee80211_bss_info_change_notify(sdata, changed); 875 ieee80211_bss_info_change_notify(sdata, changed);
865 876
866 rcu_read_lock(); 877 rcu_read_lock();