aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomas Winkler <tomas.winkler@intel.com>2007-09-30 07:52:37 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:54:21 -0400
commit478f8d2ba56b40ad1c17e21c1503669b83c96e8e (patch)
tree899c01c91848a8927d6f296f7cf7ad0a265e43ce
parent42613db7605a68a70f97513137392bda9b27bb9e (diff)
[MAC80211]: add sta_notify callback
This patch adds sta_notify callback and removes sta_table_notification which was not used by any driver. sta_notify() is essential for drivers that keeps notion of station internally and need to be notified about removal or addition of a station to the (I)BSS or assocation to an AP. This version adds interface id to the parameter list as suggested by Johannes Berg Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Acked-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--include/net/mac80211.h20
-rw-r--r--net/mac80211/sta_info.c13
2 files changed, 23 insertions, 10 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index eac670a22ef..9bc03f053af 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -613,6 +613,18 @@ enum set_key_cmd {
613 SET_KEY, DISABLE_KEY, 613 SET_KEY, DISABLE_KEY,
614}; 614};
615 615
616/**
617 * enum sta_notify_cmd - sta notify command
618 *
619 * Used with the sta_notify() callback in &struct ieee80211_ops, this
620 * indicates addition and removal of a station to station table
621 *
622 * @STA_NOTIFY_ADD: a station was added to the station table
623 * @STA_NOTIFY_REMOVE: a station being removed from the station table
624 */
625enum sta_notify_cmd {
626 STA_NOTIFY_ADD, STA_NOTIFY_REMOVE
627};
616 628
617/** 629/**
618 * enum ieee80211_hw_flags - hardware flags 630 * enum ieee80211_hw_flags - hardware flags
@@ -957,8 +969,8 @@ enum ieee80211_erp_change_flags {
957 * 969 *
958 * @set_retry_limit: Configuration of retry limits (if device needs it) 970 * @set_retry_limit: Configuration of retry limits (if device needs it)
959 * 971 *
960 * @sta_table_notification: Number of STAs in STA table notification. Must 972 * @sta_notify: Notifies low level driver about addition or removal
961 * be atomic. 973 * of assocaited station or AP.
962 * 974 *
963 * @erp_ie_changed: Handle ERP IE change notifications. Must be atomic. 975 * @erp_ie_changed: Handle ERP IE change notifications. Must be atomic.
964 * 976 *
@@ -1025,8 +1037,8 @@ struct ieee80211_ops {
1025 int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value); 1037 int (*set_frag_threshold)(struct ieee80211_hw *hw, u32 value);
1026 int (*set_retry_limit)(struct ieee80211_hw *hw, 1038 int (*set_retry_limit)(struct ieee80211_hw *hw,
1027 u32 short_retry, u32 long_retr); 1039 u32 short_retry, u32 long_retr);
1028 void (*sta_table_notification)(struct ieee80211_hw *hw, 1040 void (*sta_notify)(struct ieee80211_hw *hw, int if_id,
1029 int num_sta); 1041 enum sta_notify_cmd, const u8 *addr);
1030 void (*erp_ie_changed)(struct ieee80211_hw *hw, u8 changes, 1042 void (*erp_ie_changed)(struct ieee80211_hw *hw, u8 changes,
1031 int cts_protection, int preamble); 1043 int cts_protection, int preamble);
1032 int (*conf_tx)(struct ieee80211_hw *hw, int queue, 1044 int (*conf_tx)(struct ieee80211_hw *hw, int queue,
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 7c7df87f673..e8491554a5d 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -159,9 +159,9 @@ struct sta_info * sta_info_add(struct ieee80211_local *local,
159 list_add(&sta->list, &local->sta_list); 159 list_add(&sta->list, &local->sta_list);
160 local->num_sta++; 160 local->num_sta++;
161 sta_info_hash_add(local, sta); 161 sta_info_hash_add(local, sta);
162 if (local->ops->sta_table_notification) 162 if (local->ops->sta_notify)
163 local->ops->sta_table_notification(local_to_hw(local), 163 local->ops->sta_notify(local_to_hw(local), dev->ifindex,
164 local->num_sta); 164 STA_NOTIFY_ADD, addr);
165 write_unlock_bh(&local->sta_lock); 165 write_unlock_bh(&local->sta_lock);
166 166
167#ifdef CONFIG_MAC80211_VERBOSE_DEBUG 167#ifdef CONFIG_MAC80211_VERBOSE_DEBUG
@@ -199,9 +199,6 @@ void sta_info_remove(struct sta_info *sta)
199 local->num_sta--; 199 local->num_sta--;
200 sta_info_remove_aid_ptr(sta); 200 sta_info_remove_aid_ptr(sta);
201 201
202 if (local->ops->sta_table_notification)
203 local->ops->sta_table_notification(local_to_hw(local),
204 local->num_sta);
205} 202}
206 203
207void sta_info_free(struct sta_info *sta) 204void sta_info_free(struct sta_info *sta)
@@ -232,6 +229,10 @@ void sta_info_free(struct sta_info *sta)
232 ieee80211_key_free(sta->key); 229 ieee80211_key_free(sta->key);
233 sta->key = NULL; 230 sta->key = NULL;
234 231
232 if (local->ops->sta_notify)
233 local->ops->sta_notify(local_to_hw(local), sta->dev->ifindex,
234 STA_NOTIFY_REMOVE, sta->addr);
235
235 rate_control_remove_sta_debugfs(sta); 236 rate_control_remove_sta_debugfs(sta);
236 ieee80211_sta_debugfs_remove(sta); 237 ieee80211_sta_debugfs_remove(sta);
237 238