@@ -465,6 +465,16 @@ int ath_key_config(struct ath_common *common,
hk.kv_len = key->keylen;
memcpy(hk.kv_val, key->key, key->keylen);
+ /* set WEP keys directly to index */
+ if ((key->cipher == WLAN_CIPHER_SUITE_WEP40 ||
+ key->cipher == WLAN_CIPHER_SUITE_WEP104) && key->keyidx < 4) {
+ ret = ath_hw_set_keycache_entry(common, key->keyidx, &hk, NULL);
+ if (!ret)
+ return -EIO;
+ set_bit(key->keyidx, common->keymap);
+ return key->keyidx;
+ }
+
if (!(key->flags & IEEE80211_KEY_FLAG_PAIRWISE)) {
switch (vif->type) {
case NL80211_IFTYPE_AP:
@@ -541,10 +551,8 @@ EXPORT_SYMBOL(ath_key_config);
void ath_key_delete(struct ath_common *common, struct ieee80211_key_conf *key)
{
ath_hw_keyreset(common, key->hw_key_idx);
- if (key->hw_key_idx < IEEE80211_WEP_NKID)
- return;
-
clear_bit(key->hw_key_idx, common->keymap);
+
if (key->cipher != WLAN_CIPHER_SUITE_TKIP)
return;