aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/driver-ops.h
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/driver-ops.h
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/driver-ops.h')
-rw-r--r--net/mac80211/driver-ops.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h
index b8673f6100df..4bd266ec5333 100644
--- a/net/mac80211/driver-ops.h
+++ b/net/mac80211/driver-ops.h
@@ -478,6 +478,28 @@ static inline void drv_sta_remove(struct ieee80211_local *local,
478 trace_drv_return_void(local); 478 trace_drv_return_void(local);
479} 479}
480 480
481static inline __must_check
482int drv_sta_state(struct ieee80211_local *local,
483 struct ieee80211_sub_if_data *sdata,
484 struct sta_info *sta,
485 enum ieee80211_sta_state old_state,
486 enum ieee80211_sta_state new_state)
487{
488 int ret = 0;
489
490 might_sleep();
491
492 sdata = get_bss_sdata(sdata);
493 check_sdata_in_driver(sdata);
494
495 trace_drv_sta_state(local, sdata, &sta->sta, old_state, new_state);
496 if (local->ops->sta_state)
497 ret = local->ops->sta_state(&local->hw, &sdata->vif, &sta->sta,
498 old_state, new_state);
499 trace_drv_return_int(local, ret);
500 return ret;
501}
502
481static inline int drv_conf_tx(struct ieee80211_local *local, 503static inline int drv_conf_tx(struct ieee80211_local *local,
482 struct ieee80211_sub_if_data *sdata, u16 queue, 504 struct ieee80211_sub_if_data *sdata, u16 queue,
483 const struct ieee80211_tx_queue_params *params) 505 const struct ieee80211_tx_queue_params *params)