aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-commands.h1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-sta.c18
2 files changed, 18 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-commands.h b/drivers/net/wireless/iwlwifi/iwl-commands.h
index a093f5b83cb6..b58f79626e10 100644
--- a/drivers/net/wireless/iwlwifi/iwl-commands.h
+++ b/drivers/net/wireless/iwlwifi/iwl-commands.h
@@ -1002,6 +1002,7 @@ struct iwl_wep_cmd {
1002#define WEP_KEY_WEP_TYPE 1 1002#define WEP_KEY_WEP_TYPE 1
1003#define WEP_KEYS_MAX 4 1003#define WEP_KEYS_MAX 4
1004#define WEP_INVALID_OFFSET 0xff 1004#define WEP_INVALID_OFFSET 0xff
1005#define WEP_KEY_LEN_64 5
1005#define WEP_KEY_LEN_128 13 1006#define WEP_KEY_LEN_128 13
1006 1007
1007/****************************************************************************** 1008/******************************************************************************
diff --git a/drivers/net/wireless/iwlwifi/iwl-sta.c b/drivers/net/wireless/iwlwifi/iwl-sta.c
index b3caed487f03..3e257cfb44a2 100644
--- a/drivers/net/wireless/iwlwifi/iwl-sta.c
+++ b/drivers/net/wireless/iwlwifi/iwl-sta.c
@@ -488,6 +488,8 @@ int iwl_remove_default_wep_key(struct iwl_priv *priv,
488 priv->default_wep_key--; 488 priv->default_wep_key--;
489 memset(&priv->wep_keys[keyconf->keyidx], 0, sizeof(priv->wep_keys[0])); 489 memset(&priv->wep_keys[keyconf->keyidx], 0, sizeof(priv->wep_keys[0]));
490 ret = iwl_send_static_wepkey_cmd(priv, 1); 490 ret = iwl_send_static_wepkey_cmd(priv, 1);
491 IWL_DEBUG_WEP("Remove default WEP key: idx=%d ret=%d\n",
492 keyconf->keyidx, ret);
491 spin_unlock_irqrestore(&priv->sta_lock, flags); 493 spin_unlock_irqrestore(&priv->sta_lock, flags);
492 494
493 return ret; 495 return ret;
@@ -500,6 +502,12 @@ int iwl_set_default_wep_key(struct iwl_priv *priv,
500 int ret; 502 int ret;
501 unsigned long flags; 503 unsigned long flags;
502 504
505 if (keyconf->keylen != WEP_KEY_LEN_128 &&
506 keyconf->keylen != WEP_KEY_LEN_64) {
507 IWL_DEBUG_WEP("Bad WEP key length %d\n", keyconf->keylen);
508 return -EINVAL;
509 }
510
503 keyconf->flags &= ~IEEE80211_KEY_FLAG_GENERATE_IV; 511 keyconf->flags &= ~IEEE80211_KEY_FLAG_GENERATE_IV;
504 keyconf->hw_key_idx = HW_KEY_DEFAULT; 512 keyconf->hw_key_idx = HW_KEY_DEFAULT;
505 priv->stations[IWL_AP_ID].keyinfo.alg = ALG_WEP; 513 priv->stations[IWL_AP_ID].keyinfo.alg = ALG_WEP;
@@ -516,6 +524,8 @@ int iwl_set_default_wep_key(struct iwl_priv *priv,
516 keyconf->keylen); 524 keyconf->keylen);
517 525
518 ret = iwl_send_static_wepkey_cmd(priv, 0); 526 ret = iwl_send_static_wepkey_cmd(priv, 0);
527 IWL_DEBUG_WEP("Set default WEP key: len=%d idx=%d ret=%d\n",
528 keyconf->keylen, keyconf->keyidx, ret);
519 spin_unlock_irqrestore(&priv->sta_lock, flags); 529 spin_unlock_irqrestore(&priv->sta_lock, flags);
520 530
521 return ret; 531 return ret;
@@ -662,6 +672,9 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
662 key_flags = le16_to_cpu(priv->stations[sta_id].sta.key.key_flags); 672 key_flags = le16_to_cpu(priv->stations[sta_id].sta.key.key_flags);
663 keyidx = (key_flags >> STA_KEY_FLG_KEYID_POS) & 0x3; 673 keyidx = (key_flags >> STA_KEY_FLG_KEYID_POS) & 0x3;
664 674
675 IWL_DEBUG_WEP("Remove dynamic key: idx=%d sta=%d\n",
676 keyconf->keyidx, sta_id);
677
665 if (keyconf->keyidx != keyidx) { 678 if (keyconf->keyidx != keyidx) {
666 /* We need to remove a key with index different that the one 679 /* We need to remove a key with index different that the one
667 * in the uCode. This means that the key we need to remove has 680 * in the uCode. This means that the key we need to remove has
@@ -686,7 +699,6 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
686 priv->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; 699 priv->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK;
687 priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; 700 priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK;
688 701
689 IWL_DEBUG_INFO("hwcrypto: clear ucode station key info\n");
690 ret = iwl_send_add_sta(priv, &priv->stations[sta_id].sta, CMD_ASYNC); 702 ret = iwl_send_add_sta(priv, &priv->stations[sta_id].sta, CMD_ASYNC);
691 spin_unlock_irqrestore(&priv->sta_lock, flags); 703 spin_unlock_irqrestore(&priv->sta_lock, flags);
692 return ret; 704 return ret;
@@ -716,6 +728,10 @@ int iwl_set_dynamic_key(struct iwl_priv *priv,
716 ret = -EINVAL; 728 ret = -EINVAL;
717 } 729 }
718 730
731 IWL_DEBUG_WEP("Set dynamic key: alg= %d len=%d idx=%d sta=%d ret=%d\n",
732 keyconf->alg, keyconf->keylen, keyconf->keyidx,
733 sta_id, ret);
734
719 return ret; 735 return ret;
720} 736}
721EXPORT_SYMBOL(iwl_set_dynamic_key); 737EXPORT_SYMBOL(iwl_set_dynamic_key);