]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
ath9k|ath9k_htc: Seperate the software crypto flag for Tx and Rx
authorChun-Yeow Yeoh <yeohchunyeow@gmail.com>
Sat, 15 Nov 2014 19:05:40 +0000 (03:05 +0800)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 17 Nov 2014 20:32:15 +0000 (15:32 -0500)
Use the sw_mgmt_crypto_tx flag to trigger the CCMP encryption
for transmitted management frames to be done in software while
the sw_mgmt_crypto_rx flag is used to trigger the CCMP decryption
for received management frames to be done in software.

Signed-off-by: Chun-Yeow Yeoh <yeohchunyeow@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/common.c
drivers/net/wireless/ath/ath9k/htc_drv_main.c
drivers/net/wireless/ath/ath9k/hw.c
drivers/net/wireless/ath/ath9k/hw.h
drivers/net/wireless/ath/ath9k/main.c

index c6dd7f1fed65ed52b2ed1d0fd72c474260b5656f..eb62c58dd0f7ade60b018cc54207dd57ce47a121 100644 (file)
@@ -159,7 +159,7 @@ void ath9k_cmn_rx_skb_postprocess(struct ath_common *common,
                if (test_bit(keyix, common->keymap))
                        rxs->flag |= RX_FLAG_DECRYPTED;
        }
-       if (ah->sw_mgmt_crypto &&
+       if (ah->sw_mgmt_crypto_rx &&
            (rxs->flag & RX_FLAG_DECRYPTED) &&
            ieee80211_is_mgmt(fc))
                /* Use software decrypt for management frames. */
index 689ac998b87e393830743c29671545f276747518..c7d12efaa86a8ad92306b96b196e5abc52cc42ad 100644 (file)
@@ -1447,7 +1447,7 @@ static int ath9k_htc_set_key(struct ieee80211_hw *hw,
                        key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
                        if (key->cipher == WLAN_CIPHER_SUITE_TKIP)
                                key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
-                       if (priv->ah->sw_mgmt_crypto &&
+                       if (priv->ah->sw_mgmt_crypto_tx &&
                            key->cipher == WLAN_CIPHER_SUITE_CCMP)
                                key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
                        ret = 0;
index ee9fb52cec62aa9ee07cdda616ea4d1ac041f342..c1c2f2158b7547cfd4afafb4d5b38213f643a7f2 100644 (file)
@@ -1598,16 +1598,19 @@ static void ath9k_hw_init_mfp(struct ath_hw *ah)
                 * frames when constructing CCMP AAD. */
                REG_RMW_FIELD(ah, AR_AES_MUTE_MASK1, AR_AES_MUTE_MASK1_FC_MGMT,
                              0xc7ff);
-               ah->sw_mgmt_crypto = false;
+               ah->sw_mgmt_crypto_tx = false;
+               ah->sw_mgmt_crypto_rx = false;
        } else if (AR_SREV_9160_10_OR_LATER(ah)) {
                /* Disable hardware crypto for management frames */
                REG_CLR_BIT(ah, AR_PCU_MISC_MODE2,
                            AR_PCU_MISC_MODE2_MGMT_CRYPTO_ENABLE);
                REG_SET_BIT(ah, AR_PCU_MISC_MODE2,
                            AR_PCU_MISC_MODE2_NO_CRYPTO_FOR_NON_DATA_PKT);
-               ah->sw_mgmt_crypto = true;
+               ah->sw_mgmt_crypto_tx = true;
+               ah->sw_mgmt_crypto_rx = true;
        } else {
-               ah->sw_mgmt_crypto = true;
+               ah->sw_mgmt_crypto_tx = true;
+               ah->sw_mgmt_crypto_rx = true;
        }
 }
 
index e49721e85f6a17879d68ae6c03075bcaf1847cbc..55ee0a5bc6fa1301d397b67aa8158daa0a073df7 100644 (file)
@@ -753,7 +753,8 @@ struct ath_hw {
        } eeprom;
        const struct eeprom_ops *eep_ops;
 
-       bool sw_mgmt_crypto;
+       bool sw_mgmt_crypto_tx;
+       bool sw_mgmt_crypto_rx;
        bool is_pciexpress;
        bool aspm_enabled;
        bool is_monitoring;
index 6aed6a236066222707249ae3719b48fcdf776d5e..ca71f2fdc27636c7b94690fb0761a5db096cd367 100644 (file)
@@ -1655,7 +1655,7 @@ static int ath9k_set_key(struct ieee80211_hw *hw,
                        key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV;
                        if (key->cipher == WLAN_CIPHER_SUITE_TKIP)
                                key->flags |= IEEE80211_KEY_FLAG_GENERATE_MMIC;
-                       if (sc->sc_ah->sw_mgmt_crypto &&
+                       if (sc->sc_ah->sw_mgmt_crypto_tx &&
                            key->cipher == WLAN_CIPHER_SUITE_CCMP)
                                key->flags |= IEEE80211_KEY_FLAG_SW_MGMT_TX;
                        ret = 0;