ath5k: add hardware CCMP encyption support
authorBob Copeland <me@bobcopeland.com>
Tue, 25 Aug 2009 03:00:33 +0000 (23:00 -0400)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 28 Aug 2009 18:40:44 +0000 (14:40 -0400)
Recent ath5k hardware is capable of doing CCMP acceleration.
Enable it for the cards that support it.

Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath5k/ath5k.h
drivers/net/wireless/ath/ath5k/attach.c
drivers/net/wireless/ath/ath5k/base.c

index 862762c..cdc79cd 100644 (file)
@@ -1037,6 +1037,7 @@ struct ath5k_hw {
        bool                    ah_turbo;
        bool                    ah_calibration;
        bool                    ah_single_chip;
+       bool                    ah_aes_support;
        bool                    ah_combined_mic;
 
        enum ath5k_version      ah_version;
index 65d438b..109ab7b 100644 (file)
@@ -106,6 +106,7 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version)
 {
        struct ath5k_hw *ah;
        struct pci_dev *pdev = sc->pdev;
+       struct ath5k_eeprom_info *ee;
        int ret;
        u32 srev;
 
@@ -315,6 +316,15 @@ struct ath5k_hw *ath5k_hw_attach(struct ath5k_softc *sc, u8 mac_version)
                goto err_free;
        }
 
+       /* Crypto settings */
+       ee = &ah->ah_capabilities.cap_eeprom;
+       ah->ah_aes_support =
+               (ee->ee_version >= AR5K_EEPROM_VERSION_5_0 &&
+                !AR5K_EEPROM_AES_DIS(ee->ee_misc5) &&
+                (ah->ah_mac_version > (AR5K_SREV_AR5212 >> 4) ||
+                 (ah->ah_mac_version == (AR5K_SREV_AR5212 >> 4) &&
+                  ah->ah_mac_revision >= (AR5K_SREV_AR5211 >> 4))));
+
        if (srev >= AR5K_SREV_AR2414) {
                ah->ah_combined_mic = true;
                AR5K_REG_ENABLE_BITS(ah, AR5K_MISC_MODE,
index 10bf015..94d46fd 100644 (file)
@@ -3022,6 +3022,9 @@ ath5k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
        case ALG_TKIP:
                break;
        case ALG_CCMP:
+               if (sc->ah->ah_aes_support)
+                       break;
+
                return -EOPNOTSUPP;
        default:
                WARN_ON(1);