ath10k: add new cipher suite support
QCA99x0 and QCA4019 family chips support CCMP-256, GCMP-128, and GCMP-256 ciphers in hardware, so advertise support for these. As firmware does not support group management frame ciphers (BIP), handle them in software (mac80211). Reviewed-by: Sebastian Gottschall <s.gottschall@dd-wrt.com> Cc: Jouni Malinen <jouni@qca.qualcomm.com> Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:

committed by
Kalle Valo

parent
36d9cdb6fb
commit
2ea9f12cef
@@ -242,6 +242,16 @@ static int ath10k_send_key(struct ath10k_vif *arvif,
|
||||
case WLAN_CIPHER_SUITE_WEP104:
|
||||
arg.key_cipher = WMI_CIPHER_WEP;
|
||||
break;
|
||||
case WLAN_CIPHER_SUITE_CCMP_256:
|
||||
arg.key_cipher = WMI_CIPHER_AES_CCM;
|
||||
break;
|
||||
case WLAN_CIPHER_SUITE_GCMP:
|
||||
case WLAN_CIPHER_SUITE_GCMP_256:
|
||||
arg.key_cipher = WMI_CIPHER_AES_GCM;
|
||||
break;
|
||||
case WLAN_CIPHER_SUITE_BIP_GMAC_128:
|
||||
case WLAN_CIPHER_SUITE_BIP_GMAC_256:
|
||||
case WLAN_CIPHER_SUITE_BIP_CMAC_256:
|
||||
case WLAN_CIPHER_SUITE_AES_CMAC:
|
||||
WARN_ON(1);
|
||||
return -EINVAL;
|
||||
@@ -5723,7 +5733,10 @@ static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
||||
u32 flags2;
|
||||
|
||||
/* this one needs to be done in software */
|
||||
if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC)
|
||||
if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC ||
|
||||
key->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_128 ||
|
||||
key->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_256 ||
|
||||
key->cipher == WLAN_CIPHER_SUITE_BIP_CMAC_256)
|
||||
return 1;
|
||||
|
||||
if (arvif->nohwcrypt)
|
||||
@@ -8074,7 +8087,22 @@ int ath10k_mac_register(struct ath10k *ar)
|
||||
WLAN_CIPHER_SUITE_WEP104,
|
||||
WLAN_CIPHER_SUITE_TKIP,
|
||||
WLAN_CIPHER_SUITE_CCMP,
|
||||
|
||||
/* Do not add hardware supported ciphers before this line.
|
||||
* Allow software encryption for all chips. Don't forget to
|
||||
* update n_cipher_suites below.
|
||||
*/
|
||||
WLAN_CIPHER_SUITE_AES_CMAC,
|
||||
WLAN_CIPHER_SUITE_BIP_CMAC_256,
|
||||
WLAN_CIPHER_SUITE_BIP_GMAC_128,
|
||||
WLAN_CIPHER_SUITE_BIP_GMAC_256,
|
||||
|
||||
/* Only QCA99x0 and QCA4019 varients support GCMP-128, GCMP-256
|
||||
* and CCMP-256 in hardware.
|
||||
*/
|
||||
WLAN_CIPHER_SUITE_GCMP,
|
||||
WLAN_CIPHER_SUITE_GCMP_256,
|
||||
WLAN_CIPHER_SUITE_CCMP_256,
|
||||
};
|
||||
struct ieee80211_supported_band *band;
|
||||
void *channels;
|
||||
@@ -8318,7 +8346,18 @@ int ath10k_mac_register(struct ath10k *ar)
|
||||
}
|
||||
|
||||
ar->hw->wiphy->cipher_suites = cipher_suites;
|
||||
ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
|
||||
|
||||
/* QCA988x and QCA6174 family chips do not support CCMP-256, GCMP-128
|
||||
* and GCMP-256 ciphers in hardware. Fetch number of ciphers supported
|
||||
* from chip specific hw_param table.
|
||||
*/
|
||||
if (!ar->hw_params.n_cipher_suites ||
|
||||
ar->hw_params.n_cipher_suites > ARRAY_SIZE(cipher_suites)) {
|
||||
ath10k_err(ar, "invalid hw_params.n_cipher_suites %d\n",
|
||||
ar->hw_params.n_cipher_suites);
|
||||
ar->hw_params.n_cipher_suites = 8;
|
||||
}
|
||||
ar->hw->wiphy->n_cipher_suites = ar->hw_params.n_cipher_suites;
|
||||
|
||||
wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
|
||||
|
||||
|
Reference in New Issue
Block a user