diff options
author | Johannes Berg <johannes.berg@intel.com> | 2011-07-05 14:35:39 (GMT) |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-07-06 19:05:41 (GMT) |
commit | 830af02f24fbc087999b757b8eca51829c67fa6f (patch) | |
tree | 9a029493580c0d822badfa9f2218ef0c72ae6f33 /net/mac80211/key.c | |
parent | 68dd49ef907f92127aabb30b3368b80eb0ffb459 (diff) | |
download | linux-830af02f24fbc087999b757b8eca51829c67fa6f.tar.xz |
mac80211: allow driver to iterate keys
When in suspend/wowlan, devices might implement crypto
offload differently (more features), and might require
reprogramming keys for the WoWLAN (as it is the case
for Intel devices that use another uCode image). Thus
allow the driver to iterate all keys in this context.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/key.c')
-rw-r--r-- | net/mac80211/key.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/net/mac80211/key.c b/net/mac80211/key.c index 0af958c..fcab5fe 100644 --- a/net/mac80211/key.c +++ b/net/mac80211/key.c @@ -551,6 +551,39 @@ void ieee80211_enable_keys(struct ieee80211_sub_if_data *sdata) mutex_unlock(&sdata->local->key_mtx); } +void ieee80211_iter_keys(struct ieee80211_hw *hw, + struct ieee80211_vif *vif, + void (*iter)(struct ieee80211_hw *hw, + struct ieee80211_vif *vif, + struct ieee80211_sta *sta, + struct ieee80211_key_conf *key, + void *data), + void *iter_data) +{ + struct ieee80211_local *local = hw_to_local(hw); + struct ieee80211_key *key; + struct ieee80211_sub_if_data *sdata; + + ASSERT_RTNL(); + + mutex_lock(&local->key_mtx); + if (vif) { + sdata = vif_to_sdata(vif); + list_for_each_entry(key, &sdata->key_list, list) + iter(hw, &sdata->vif, + key->sta ? &key->sta->sta : NULL, + &key->conf, iter_data); + } else { + list_for_each_entry(sdata, &local->interfaces, list) + list_for_each_entry(key, &sdata->key_list, list) + iter(hw, &sdata->vif, + key->sta ? &key->sta->sta : NULL, + &key->conf, iter_data); + } + mutex_unlock(&local->key_mtx); +} +EXPORT_SYMBOL(ieee80211_iter_keys); + void ieee80211_disable_keys(struct ieee80211_sub_if_data *sdata) { struct ieee80211_key *key; |