diff options
Diffstat (limited to 'package/mac80211/patches/551-ath9k_fix_keymiss_handling.patch')
-rw-r--r-- | package/mac80211/patches/551-ath9k_fix_keymiss_handling.patch | 93 |
1 files changed, 0 insertions, 93 deletions
diff --git a/package/mac80211/patches/551-ath9k_fix_keymiss_handling.patch b/package/mac80211/patches/551-ath9k_fix_keymiss_handling.patch deleted file mode 100644 index 931c50e0ce..0000000000 --- a/package/mac80211/patches/551-ath9k_fix_keymiss_handling.patch +++ /dev/null @@ -1,93 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c -+++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c -@@ -525,8 +525,8 @@ int ath9k_hw_process_rxdesc_edma(struct - rxs->rs_status |= ATH9K_RXERR_DECRYPT; - else if (rxsp->status11 & AR_MichaelErr) - rxs->rs_status |= ATH9K_RXERR_MIC; -- else if (rxsp->status11 & AR_KeyMiss) -- rxs->rs_status |= ATH9K_RXERR_DECRYPT; -+ if (rxsp->status11 & AR_KeyMiss) -+ rxs->rs_status |= ATH9K_RXERR_KEYMISS; - } - - return 0; ---- a/drivers/net/wireless/ath/ath9k/mac.c -+++ b/drivers/net/wireless/ath/ath9k/mac.c -@@ -620,8 +620,8 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a - rs->rs_status |= ATH9K_RXERR_DECRYPT; - else if (ads.ds_rxstatus8 & AR_MichaelErr) - rs->rs_status |= ATH9K_RXERR_MIC; -- else if (ads.ds_rxstatus8 & AR_KeyMiss) -- rs->rs_status |= ATH9K_RXERR_DECRYPT; -+ if (ads.ds_rxstatus8 & AR_KeyMiss) -+ rs->rs_status |= ATH9K_RXERR_KEYMISS; - } - - return 0; ---- a/drivers/net/wireless/ath/ath9k/mac.h -+++ b/drivers/net/wireless/ath/ath9k/mac.h -@@ -181,6 +181,7 @@ struct ath_htc_rx_status { - #define ATH9K_RXERR_FIFO 0x04 - #define ATH9K_RXERR_DECRYPT 0x08 - #define ATH9K_RXERR_MIC 0x10 -+#define ATH9K_RXERR_KEYMISS 0x20 - - #define ATH9K_RX_MORE 0x01 - #define ATH9K_RX_MORE_AGGR 0x02 ---- a/drivers/net/wireless/ath/ath9k/recv.c -+++ b/drivers/net/wireless/ath/ath9k/recv.c -@@ -826,7 +826,8 @@ static bool ath9k_rx_accept(struct ath_c - test_bit(rx_stats->rs_keyix, common->tkip_keymap); - strip_mic = is_valid_tkip && ieee80211_is_data(fc) && - !(rx_stats->rs_status & -- (ATH9K_RXERR_DECRYPT | ATH9K_RXERR_CRC | ATH9K_RXERR_MIC)); -+ (ATH9K_RXERR_DECRYPT | ATH9K_RXERR_CRC | ATH9K_RXERR_MIC | -+ ATH9K_RXERR_KEYMISS)); - - if (!rx_stats->rs_datalen) - return false; -@@ -854,6 +855,8 @@ static bool ath9k_rx_accept(struct ath_c - * descriptors. - */ - if (rx_stats->rs_status != 0) { -+ u8 status_mask; -+ - if (rx_stats->rs_status & ATH9K_RXERR_CRC) { - rxs->flag |= RX_FLAG_FAILED_FCS_CRC; - mic_error = false; -@@ -861,7 +864,8 @@ static bool ath9k_rx_accept(struct ath_c - if (rx_stats->rs_status & ATH9K_RXERR_PHY) - return false; - -- if (rx_stats->rs_status & ATH9K_RXERR_DECRYPT) { -+ if ((rx_stats->rs_status & ATH9K_RXERR_DECRYPT) || -+ (!is_mc && (rx_stats->rs_status & ATH9K_RXERR_KEYMISS))) { - *decrypt_error = true; - mic_error = false; - } -@@ -871,17 +875,14 @@ static bool ath9k_rx_accept(struct ath_c - * decryption and MIC failures. For monitor mode, - * we also ignore the CRC error. - */ -- if (ah->is_monitoring) { -- if (rx_stats->rs_status & -- ~(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_MIC | -- ATH9K_RXERR_CRC)) -- return false; -- } else { -- if (rx_stats->rs_status & -- ~(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_MIC)) { -- return false; -- } -- } -+ status_mask = ATH9K_RXERR_DECRYPT | ATH9K_RXERR_MIC | -+ ATH9K_RXERR_KEYMISS; -+ -+ if (ah->is_monitoring) -+ status_mask |= ATH9K_RXERR_CRC; -+ -+ if (rx_stats->rs_status & ~status_mask) -+ return false; - } - - /* |