aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/pm.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2012-01-20 07:55:21 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-02-06 14:48:24 -0500
commitf09603a259ffef69ad4516a04eb06cd65ac522fe (patch)
tree3f826769c697eb15a76771e25291bbb54f9f58ab /net/mac80211/pm.c
parent71ec375c75095002f36f083ceb32bbb8725734ae (diff)
mac80211: add sta_state callback
(based on Eliad's patch) Add a callback to notify the low-level driver whenever the state of a station changes. The driver is only notified when the station is actually in the mac80211 hash table, not for pre-insert state transitions. To allow the driver to replace sta_add/remove calls with this, call extra transitions with the NOTEXIST state. This callback can fail, so we need to be careful in handling it when a station is inserted, particularly in the IBSS case where we still keep the station entry around for mac80211 purposes. Signed-off-by: Eliad Peller <eliad@wizery.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/pm.c')
-rw-r--r--net/mac80211/pm.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/net/mac80211/pm.c b/net/mac80211/pm.c
index c65ff471acce..af49ac4f0826 100644
--- a/net/mac80211/pm.c
+++ b/net/mac80211/pm.c
@@ -97,9 +97,17 @@ int __ieee80211_suspend(struct ieee80211_hw *hw, struct cfg80211_wowlan *wowlan)
97 /* tear down aggregation sessions and remove STAs */ 97 /* tear down aggregation sessions and remove STAs */
98 mutex_lock(&local->sta_mtx); 98 mutex_lock(&local->sta_mtx);
99 list_for_each_entry(sta, &local->sta_list, list) { 99 list_for_each_entry(sta, &local->sta_list, list) {
100 if (sta->uploaded) 100 if (sta->uploaded) {
101 enum ieee80211_sta_state state;
102
101 drv_sta_remove(local, sta->sdata, &sta->sta); 103 drv_sta_remove(local, sta->sdata, &sta->sta);
102 104
105 state = sta->sta_state;
106 for (; state > IEEE80211_STA_NOTEXIST; state--)
107 WARN_ON(drv_sta_state(local, sdata, sta,
108 state, state - 1));
109 }
110
103 mesh_plink_quiesce(sta); 111 mesh_plink_quiesce(sta);
104 } 112 }
105 mutex_unlock(&local->sta_mtx); 113 mutex_unlock(&local->sta_mtx);