Root/
Source at commit 262b52b created 13 years 9 months ago. By nbd, backport the latest version of the mac80211 package to backfire. includes fixes for wpa key handling, throughput issues, etc. | |
---|---|
1 | --- a/drivers/net/wireless/ath/ath9k/hw.c |
2 | +++ b/drivers/net/wireless/ath/ath9k/hw.c |
3 | @@ -1497,6 +1497,7 @@ EXPORT_SYMBOL(ath9k_hw_keyreset); |
4 | bool ath9k_hw_keysetmac(struct ath_hw *ah, u16 entry, const u8 *mac) |
5 | { |
6 | u32 macHi, macLo; |
7 | + u32 unicast_flag = AR_KEYTABLE_VALID; |
8 | |
9 | if (entry >= ah->caps.keycache_size) { |
10 | ath_print(ath9k_hw_common(ah), ATH_DBG_FATAL, |
11 | @@ -1505,6 +1506,16 @@ bool ath9k_hw_keysetmac(struct ath_hw *a |
12 | } |
13 | |
14 | if (mac != NULL) { |
15 | + /* |
16 | + * AR_KEYTABLE_VALID indicates that the address is a unicast |
17 | + * address, which must match the transmitter address for |
18 | + * decrypting frames. |
19 | + * Not setting this bit allows the hardware to use the key |
20 | + * for multicast frame decryption. |
21 | + */ |
22 | + if (mac[0] & 0x01) |
23 | + unicast_flag = 0; |
24 | + |
25 | macHi = (mac[5] << 8) | mac[4]; |
26 | macLo = (mac[3] << 24) | |
27 | (mac[2] << 16) | |
28 | @@ -1517,7 +1528,7 @@ bool ath9k_hw_keysetmac(struct ath_hw *a |
29 | macLo = macHi = 0; |
30 | } |
31 | REG_WRITE(ah, AR_KEYTABLE_MAC0(entry), macLo); |
32 | - REG_WRITE(ah, AR_KEYTABLE_MAC1(entry), macHi | AR_KEYTABLE_VALID); |
33 | + REG_WRITE(ah, AR_KEYTABLE_MAC1(entry), macHi | unicast_flag); |
34 | |
35 | return true; |
36 | } |
37 |