From fb41829ffb7a597b16f0417cac907d6dca29432d Mon Sep 17 00:00:00 2001 From: Bob Copeland Date: Wed, 26 Nov 2008 16:17:25 -0500 Subject: [PATCH] --- yaml --- r: 122475 b: refs/heads/master c: f650470a8f506bc33a15778432ebb8cdcf89175b h: refs/heads/master i: 122473: 445e665e069fa9e97a8556bdc5a7d696f3046092 122471: 34bc261efaa9c33bdae0a12678706f79507c8daa v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/ath5k/ath5k.h | 1 + trunk/drivers/net/wireless/ath5k/attach.c | 6 +++++ trunk/drivers/net/wireless/ath5k/pcu.c | 28 +++++++++++------------ trunk/drivers/net/wireless/ath5k/reg.h | 1 + 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/[refs] b/[refs] index d24116849c0a..a204da336ffd 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 671434904633876f89be70af415c35c89fb90115 +refs/heads/master: f650470a8f506bc33a15778432ebb8cdcf89175b diff --git a/trunk/drivers/net/wireless/ath5k/ath5k.h b/trunk/drivers/net/wireless/ath5k/ath5k.h index 5ee2dd1814c2..13df1191b070 100644 --- a/trunk/drivers/net/wireless/ath5k/ath5k.h +++ b/trunk/drivers/net/wireless/ath5k/ath5k.h @@ -1052,6 +1052,7 @@ struct ath5k_hw { bool ah_calibration; bool ah_running; bool ah_single_chip; + bool ah_combined_mic; enum ath5k_rfgain ah_rf_gain; u32 ah_mac_srev; diff --git a/trunk/drivers/net/wireless/ath5k/attach.c b/trunk/drivers/net/wireless/ath5k/attach.c index 49d82d79d3fc..dea378f76731 100644 --- a/trunk/drivers/net/wireless/ath5k/attach.c +++ b/trunk/drivers/net/wireless/ath5k/attach.c @@ -317,6 +317,12 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version) goto err_free; } + if (srev >= AR5K_SREV_AR2414) { + ah->ah_combined_mic = true; + AR5K_REG_ENABLE_BITS(ah, AR5K_MISC_MODE, + AR5K_MISC_MODE_COMBINED_MIC); + } + /* MAC address is cleared until add_interface */ ath5k_hw_set_lladdr(ah, mac); diff --git a/trunk/drivers/net/wireless/ath5k/pcu.c b/trunk/drivers/net/wireless/ath5k/pcu.c index ad7ea36502bd..dabe42219e2a 100644 --- a/trunk/drivers/net/wireless/ath5k/pcu.c +++ b/trunk/drivers/net/wireless/ath5k/pcu.c @@ -1096,20 +1096,20 @@ int ath5k_hw_set_key(struct ath5k_hw *ah, u16 entry, /* Install rx/tx MIC */ rxmic = (__le32 *) &key->key[16]; txmic = (__le32 *) &key->key[24]; -#if 0 - /* MISC_MODE register & 0x04 - for mac srev >= griffin */ - key_v[0] = rxmic[0]; - key_v[1] = (txmic[0] >> 16) & 0xffff; - key_v[2] = rxmic[1]; - key_v[3] = txmic[0] & 0xffff; - key_v[4] = txmic[1]; -#else - key_v[0] = rxmic[0]; - key_v[1] = 0; - key_v[2] = rxmic[1]; - key_v[3] = 0; - key_v[4] = 0; -#endif + + if (ah->ah_combined_mic) { + key_v[0] = rxmic[0]; + key_v[1] = (txmic[0] >> 16) & 0xffff; + key_v[2] = rxmic[1]; + key_v[3] = txmic[0] & 0xffff; + key_v[4] = txmic[1]; + } else { + key_v[0] = rxmic[0]; + key_v[1] = 0; + key_v[2] = rxmic[1]; + key_v[3] = 0; + key_v[4] = 0; + } for (i = 0; i < ARRAY_SIZE(key_v); i++) ath5k_hw_reg_write(ah, le32_to_cpu(key_v[i]), AR5K_KEYTABLE_OFF(micentry, i)); diff --git a/trunk/drivers/net/wireless/ath5k/reg.h b/trunk/drivers/net/wireless/ath5k/reg.h index 69755fc2f9be..91aaeaf88199 100644 --- a/trunk/drivers/net/wireless/ath5k/reg.h +++ b/trunk/drivers/net/wireless/ath5k/reg.h @@ -1729,6 +1729,7 @@ #define AR5K_MISC_MODE 0x8120 /* Register Address */ #define AR5K_MISC_MODE_FBSSID_MATCH 0x00000001 /* Force BSSID match */ #define AR5K_MISC_MODE_ACKSIFS_MEM 0x00000002 /* ACK SIFS memory (?) */ +#define AR5K_MISC_MODE_COMBINED_MIC 0x00000004 /* use rx/tx MIC key */ /* more bits */ /*