Commit d216aaa6 authored by Jouni Malinen's avatar Jouni Malinen Committed by John W. Linville

ath9k: Clean up setkey operations

There is no need to use ath_keyset() wrapper for
ath9k_hw_set_keycache_entry() calls. In addition, improve the comments
describing the key setting operations.
Signed-off-by: default avatarJouni Malinen <jouni.malinen@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent aebe2b56
...@@ -638,17 +638,6 @@ static u32 ath_get_extchanmode(struct ath_softc *sc, ...@@ -638,17 +638,6 @@ static u32 ath_get_extchanmode(struct ath_softc *sc,
return chanmode; return chanmode;
} }
static int ath_keyset(struct ath_softc *sc, u16 keyix,
struct ath9k_keyval *hk, const u8 mac[ETH_ALEN])
{
bool status;
status = ath9k_hw_set_keycache_entry(sc->sc_ah,
keyix, hk, mac);
return status != false;
}
static int ath_setkey_tkip(struct ath_softc *sc, u16 keyix, const u8 *key, static int ath_setkey_tkip(struct ath_softc *sc, u16 keyix, const u8 *key,
struct ath9k_keyval *hk, const u8 *addr, struct ath9k_keyval *hk, const u8 *addr,
bool authenticator) bool authenticator)
...@@ -660,7 +649,11 @@ static int ath_setkey_tkip(struct ath_softc *sc, u16 keyix, const u8 *key, ...@@ -660,7 +649,11 @@ static int ath_setkey_tkip(struct ath_softc *sc, u16 keyix, const u8 *key,
key_rxmic = key + NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY; key_rxmic = key + NL80211_TKIP_DATA_OFFSET_RX_MIC_KEY;
if (addr == NULL) { if (addr == NULL) {
/* Group key installation */ /*
* Group key installation - only two key cache entries are used
* regardless of splitmic capability since group key is only
* used either for TX or RX.
*/
if (authenticator) { if (authenticator) {
memcpy(hk->kv_mic, key_txmic, sizeof(hk->kv_mic)); memcpy(hk->kv_mic, key_txmic, sizeof(hk->kv_mic));
memcpy(hk->kv_txmic, key_txmic, sizeof(hk->kv_mic)); memcpy(hk->kv_txmic, key_txmic, sizeof(hk->kv_mic));
...@@ -668,24 +661,21 @@ static int ath_setkey_tkip(struct ath_softc *sc, u16 keyix, const u8 *key, ...@@ -668,24 +661,21 @@ static int ath_setkey_tkip(struct ath_softc *sc, u16 keyix, const u8 *key,
memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic)); memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
memcpy(hk->kv_txmic, key_rxmic, sizeof(hk->kv_mic)); memcpy(hk->kv_txmic, key_rxmic, sizeof(hk->kv_mic));
} }
return ath_keyset(sc, keyix, hk, addr); return ath9k_hw_set_keycache_entry(sc->sc_ah, keyix, hk, addr);
} }
if (!sc->splitmic) { if (!sc->splitmic) {
/* /* TX and RX keys share the same key cache entry. */
* data key goes at first index,
* the hal handles the MIC keys at index+64.
*/
memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic)); memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
memcpy(hk->kv_txmic, key_txmic, sizeof(hk->kv_txmic)); memcpy(hk->kv_txmic, key_txmic, sizeof(hk->kv_txmic));
return ath_keyset(sc, keyix, hk, addr); return ath9k_hw_set_keycache_entry(sc->sc_ah, keyix, hk, addr);
} }
/*
* TX key goes at first index, RX key at +32. /* Separate key cache entries for TX and RX */
* The hal handles the MIC keys at index+64.
*/ /* TX key goes at first index, RX key at +32. */
memcpy(hk->kv_mic, key_txmic, sizeof(hk->kv_mic)); memcpy(hk->kv_mic, key_txmic, sizeof(hk->kv_mic));
if (!ath_keyset(sc, keyix, hk, NULL)) { if (!ath9k_hw_set_keycache_entry(sc->sc_ah, keyix, hk, NULL)) {
/* Txmic entry failed. No need to proceed further */ /* TX MIC entry failed. No need to proceed further */
DPRINTF(sc, ATH_DBG_KEYCACHE, DPRINTF(sc, ATH_DBG_KEYCACHE,
"Setting TX MIC Key Failed\n"); "Setting TX MIC Key Failed\n");
return 0; return 0;
...@@ -693,7 +683,7 @@ static int ath_setkey_tkip(struct ath_softc *sc, u16 keyix, const u8 *key, ...@@ -693,7 +683,7 @@ static int ath_setkey_tkip(struct ath_softc *sc, u16 keyix, const u8 *key,
memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic)); memcpy(hk->kv_mic, key_rxmic, sizeof(hk->kv_mic));
/* XXX delete tx key on failure? */ /* XXX delete tx key on failure? */
return ath_keyset(sc, keyix + 32, hk, addr); return ath9k_hw_set_keycache_entry(sc->sc_ah, keyix + 32, hk, addr);
} }
static int ath_reserve_key_cache_slot_tkip(struct ath_softc *sc) static int ath_reserve_key_cache_slot_tkip(struct ath_softc *sc)
...@@ -840,7 +830,7 @@ static int ath_key_config(struct ath_softc *sc, ...@@ -840,7 +830,7 @@ static int ath_key_config(struct ath_softc *sc,
ret = ath_setkey_tkip(sc, idx, key->key, &hk, mac, ret = ath_setkey_tkip(sc, idx, key->key, &hk, mac,
vif->type == NL80211_IFTYPE_AP); vif->type == NL80211_IFTYPE_AP);
else else
ret = ath_keyset(sc, idx, &hk, mac); ret = ath9k_hw_set_keycache_entry(sc->sc_ah, idx, &hk, mac);
if (!ret) if (!ret)
return -EIO; return -EIO;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment