|
@@ -415,6 +415,12 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
|
|
{
|
|
{
|
|
struct ieee80211_hw *hw = mvm->hw;
|
|
struct ieee80211_hw *hw = mvm->hw;
|
|
int num_mac, ret, i;
|
|
int num_mac, ret, i;
|
|
|
|
+ static const u32 mvm_ciphers[] = {
|
|
|
|
+ WLAN_CIPHER_SUITE_WEP40,
|
|
|
|
+ WLAN_CIPHER_SUITE_WEP104,
|
|
|
|
+ WLAN_CIPHER_SUITE_TKIP,
|
|
|
|
+ WLAN_CIPHER_SUITE_CCMP,
|
|
|
|
+ };
|
|
|
|
|
|
/* Tell mac80211 our characteristics */
|
|
/* Tell mac80211 our characteristics */
|
|
hw->flags = IEEE80211_HW_SIGNAL_DBM |
|
|
hw->flags = IEEE80211_HW_SIGNAL_DBM |
|
|
@@ -441,14 +447,32 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
|
|
hw->uapsd_queues = IWL_MVM_UAPSD_QUEUES;
|
|
hw->uapsd_queues = IWL_MVM_UAPSD_QUEUES;
|
|
hw->uapsd_max_sp_len = IWL_UAPSD_MAX_SP;
|
|
hw->uapsd_max_sp_len = IWL_UAPSD_MAX_SP;
|
|
|
|
|
|
|
|
+ BUILD_BUG_ON(ARRAY_SIZE(mvm->ciphers) < ARRAY_SIZE(mvm_ciphers) + 2);
|
|
|
|
+ memcpy(mvm->ciphers, mvm_ciphers, sizeof(mvm_ciphers));
|
|
|
|
+ hw->wiphy->n_cipher_suites = ARRAY_SIZE(mvm_ciphers);
|
|
|
|
+ hw->wiphy->cipher_suites = mvm->ciphers;
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Enable 11w if advertised by firmware and software crypto
|
|
* Enable 11w if advertised by firmware and software crypto
|
|
* is not enabled (as the firmware will interpret some mgmt
|
|
* is not enabled (as the firmware will interpret some mgmt
|
|
* packets, so enabling it with software crypto isn't safe)
|
|
* packets, so enabling it with software crypto isn't safe)
|
|
*/
|
|
*/
|
|
if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_MFP &&
|
|
if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_MFP &&
|
|
- !iwlwifi_mod_params.sw_crypto)
|
|
|
|
|
|
+ !iwlwifi_mod_params.sw_crypto) {
|
|
hw->flags |= IEEE80211_HW_MFP_CAPABLE;
|
|
hw->flags |= IEEE80211_HW_MFP_CAPABLE;
|
|
|
|
+ mvm->ciphers[hw->wiphy->n_cipher_suites] =
|
|
|
|
+ WLAN_CIPHER_SUITE_AES_CMAC;
|
|
|
|
+ hw->wiphy->n_cipher_suites++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /* currently FW API supports only one optional cipher scheme */
|
|
|
|
+ if (mvm->fw->cs[0].cipher) {
|
|
|
|
+ mvm->hw->n_cipher_schemes = 1;
|
|
|
|
+ mvm->hw->cipher_schemes = &mvm->fw->cs[0];
|
|
|
|
+ mvm->ciphers[hw->wiphy->n_cipher_suites] =
|
|
|
|
+ mvm->fw->cs[0].cipher;
|
|
|
|
+ hw->wiphy->n_cipher_suites++;
|
|
|
|
+ }
|
|
|
|
|
|
hw->flags |= IEEE80211_SINGLE_HW_SCAN_ON_ALL_BANDS;
|
|
hw->flags |= IEEE80211_SINGLE_HW_SCAN_ON_ALL_BANDS;
|
|
hw->wiphy->features |=
|
|
hw->wiphy->features |=
|
|
@@ -574,12 +598,6 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
|
|
|
|
|
|
mvm->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD;
|
|
mvm->rts_threshold = IEEE80211_MAX_RTS_THRESHOLD;
|
|
|
|
|
|
- /* currently FW API supports only one optional cipher scheme */
|
|
|
|
- if (mvm->fw->cs[0].cipher) {
|
|
|
|
- mvm->hw->n_cipher_schemes = 1;
|
|
|
|
- mvm->hw->cipher_schemes = &mvm->fw->cs[0];
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
#ifdef CONFIG_PM_SLEEP
|
|
#ifdef CONFIG_PM_SLEEP
|
|
if (iwl_mvm_is_d0i3_supported(mvm) &&
|
|
if (iwl_mvm_is_d0i3_supported(mvm) &&
|
|
device_can_wakeup(mvm->trans->dev)) {
|
|
device_can_wakeup(mvm->trans->dev)) {
|