summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-agn.c
diff options
context:
space:
mode:
authorJohannes Berg2010-03-30 19:11:46 +0200
committerReinette Chatre2010-04-09 20:27:31 +0200
commit335348b1702cf78c9e79987a3d66e85a05c98b5c (patch)
tree92cb89d0b0da052129346aac9c22fbbe22dff633 /drivers/net/wireless/iwlwifi/iwl-agn.c
parentiwlwifi: default max event log size (diff)
downloadkernel-qcow2-linux-335348b1702cf78c9e79987a3d66e85a05c98b5c.tar.gz
kernel-qcow2-linux-335348b1702cf78c9e79987a3d66e85a05c98b5c.tar.xz
kernel-qcow2-linux-335348b1702cf78c9e79987a3d66e85a05c98b5c.zip
iwlwifi: make WEP key restoring explicit
The firmware clears default WEP keys on transitions to !associated, so we need to restore them just like stations. This is rather implicit as part of sending a station right now, which is odd. Make it explicit instead and only for agn since 3945 doesn't use hw crypto for WEP. Due to that, iwl_send_static_wepkey_cmd is now only used in iwl-sta.c and can be static. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-agn.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c25
1 files changed, 10 insertions, 15 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 978604f8ae92..8a3b0edf83b0 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -158,6 +158,11 @@ int iwl_commit_rxon(struct iwl_priv *priv)
}
iwl_clear_ucode_stations(priv, false);
iwl_restore_stations(priv);
+ ret = iwl_restore_default_wep_keys(priv);
+ if (ret) {
+ IWL_ERR(priv, "Failed to restore WEP keys (%d)\n", ret);
+ return ret;
+ }
}
IWL_DEBUG_INFO(priv, "Sending RXON\n"
@@ -185,6 +190,11 @@ int iwl_commit_rxon(struct iwl_priv *priv)
memcpy(active_rxon, &priv->staging_rxon, sizeof(*active_rxon));
iwl_clear_ucode_stations(priv, false);
iwl_restore_stations(priv);
+ ret = iwl_restore_default_wep_keys(priv);
+ if (ret) {
+ IWL_ERR(priv, "Failed to restore WEP keys (%d)\n", ret);
+ return ret;
+ }
}
priv->start_calib = 0;
@@ -3030,19 +3040,6 @@ static void iwl_mac_sta_notify(struct ieee80211_hw *hw,
}
}
-/**
- * iwl_restore_wepkeys - Restore WEP keys to device
- */
-static void iwl_restore_wepkeys(struct iwl_priv *priv)
-{
- mutex_lock(&priv->mutex);
- if (priv->iw_mode == NL80211_IFTYPE_STATION &&
- priv->default_wep_key &&
- iwl_send_static_wepkey_cmd(priv, 0))
- IWL_ERR(priv, "Could not send WEP static key\n");
- mutex_unlock(&priv->mutex);
-}
-
static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta)
@@ -3069,8 +3066,6 @@ static int iwlagn_mac_sta_add(struct ieee80211_hw *hw,
return ret;
}
- iwl_restore_wepkeys(priv);
-
/* Initialize rate scaling */
IWL_DEBUG_INFO(priv, "Initializing rate scaling for station %pM\n",
sta->addr);