forked from Minki/linux
iwlwifi: store cipher scheme independent of mac80211
In order to reduce reliance on mac80211 structs in the core iwlwifi code, store the cipher schemes in the format given by the firmware and convert it later, rather than storing it in the mac80211 format. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
60dec5233c
commit
24ddddf367
@ -326,8 +326,6 @@ static int iwl_store_cscheme(struct iwl_fw *fw, const u8 *data, const u32 len)
|
|||||||
int i, j;
|
int i, j;
|
||||||
struct iwl_fw_cscheme_list *l = (struct iwl_fw_cscheme_list *)data;
|
struct iwl_fw_cscheme_list *l = (struct iwl_fw_cscheme_list *)data;
|
||||||
struct iwl_fw_cipher_scheme *fwcs;
|
struct iwl_fw_cipher_scheme *fwcs;
|
||||||
struct ieee80211_cipher_scheme *cs;
|
|
||||||
u32 cipher;
|
|
||||||
|
|
||||||
if (len < sizeof(*l) ||
|
if (len < sizeof(*l) ||
|
||||||
len < sizeof(l->size) + l->size * sizeof(l->cs[0]))
|
len < sizeof(l->size) + l->size * sizeof(l->cs[0]))
|
||||||
@ -335,22 +333,12 @@ static int iwl_store_cscheme(struct iwl_fw *fw, const u8 *data, const u32 len)
|
|||||||
|
|
||||||
for (i = 0, j = 0; i < IWL_UCODE_MAX_CS && i < l->size; i++) {
|
for (i = 0, j = 0; i < IWL_UCODE_MAX_CS && i < l->size; i++) {
|
||||||
fwcs = &l->cs[j];
|
fwcs = &l->cs[j];
|
||||||
cipher = le32_to_cpu(fwcs->cipher);
|
|
||||||
|
|
||||||
/* we skip schemes with zero cipher suite selector */
|
/* we skip schemes with zero cipher suite selector */
|
||||||
if (!cipher)
|
if (!fwcs->cipher)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
cs = &fw->cs[j++];
|
fw->cs[j++] = *fwcs;
|
||||||
cs->cipher = cipher;
|
|
||||||
cs->iftype = BIT(NL80211_IFTYPE_STATION);
|
|
||||||
cs->hdr_len = fwcs->hdr_len;
|
|
||||||
cs->pn_len = fwcs->pn_len;
|
|
||||||
cs->pn_off = fwcs->pn_off;
|
|
||||||
cs->key_idx_off = fwcs->key_idx_off;
|
|
||||||
cs->key_idx_mask = fwcs->key_idx_mask;
|
|
||||||
cs->key_idx_shift = fwcs->key_idx_shift;
|
|
||||||
cs->mic_len = fwcs->mic_len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -67,7 +67,6 @@
|
|||||||
#ifndef __iwl_fw_h__
|
#ifndef __iwl_fw_h__
|
||||||
#define __iwl_fw_h__
|
#define __iwl_fw_h__
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <net/mac80211.h>
|
|
||||||
|
|
||||||
#include "iwl-fw-file.h"
|
#include "iwl-fw-file.h"
|
||||||
#include "iwl-fw-error-dump.h"
|
#include "iwl-fw-error-dump.h"
|
||||||
@ -287,7 +286,7 @@ struct iwl_fw {
|
|||||||
|
|
||||||
enum iwl_fw_type type;
|
enum iwl_fw_type type;
|
||||||
|
|
||||||
struct ieee80211_cipher_scheme cs[IWL_UCODE_MAX_CS];
|
struct iwl_fw_cipher_scheme cs[IWL_UCODE_MAX_CS];
|
||||||
u8 human_readable[FW_VER_HUMAN_READABLE_SZ];
|
u8 human_readable[FW_VER_HUMAN_READABLE_SZ];
|
||||||
|
|
||||||
u32 sdio_adma_addr;
|
u32 sdio_adma_addr;
|
||||||
|
@ -494,10 +494,23 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
|
|||||||
|
|
||||||
/* currently FW API supports only one optional cipher scheme */
|
/* currently FW API supports only one optional cipher scheme */
|
||||||
if (mvm->fw->cs[0].cipher) {
|
if (mvm->fw->cs[0].cipher) {
|
||||||
|
const struct iwl_fw_cipher_scheme *fwcs = &mvm->fw->cs[0];
|
||||||
|
struct ieee80211_cipher_scheme *cs = &mvm->cs[0];
|
||||||
|
|
||||||
mvm->hw->n_cipher_schemes = 1;
|
mvm->hw->n_cipher_schemes = 1;
|
||||||
mvm->hw->cipher_schemes = &mvm->fw->cs[0];
|
|
||||||
mvm->ciphers[hw->wiphy->n_cipher_suites] =
|
cs->cipher = le32_to_cpu(fwcs->cipher);
|
||||||
mvm->fw->cs[0].cipher;
|
cs->iftype = BIT(NL80211_IFTYPE_STATION);
|
||||||
|
cs->hdr_len = fwcs->hdr_len;
|
||||||
|
cs->pn_len = fwcs->pn_len;
|
||||||
|
cs->pn_off = fwcs->pn_off;
|
||||||
|
cs->key_idx_off = fwcs->key_idx_off;
|
||||||
|
cs->key_idx_mask = fwcs->key_idx_mask;
|
||||||
|
cs->key_idx_shift = fwcs->key_idx_shift;
|
||||||
|
cs->mic_len = fwcs->mic_len;
|
||||||
|
|
||||||
|
mvm->hw->cipher_schemes = mvm->cs;
|
||||||
|
mvm->ciphers[hw->wiphy->n_cipher_suites] = cs->cipher;
|
||||||
hw->wiphy->n_cipher_suites++;
|
hw->wiphy->n_cipher_suites++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1012,6 +1012,7 @@ struct iwl_mvm {
|
|||||||
struct iwl_mvm_shared_mem_cfg shared_mem_cfg;
|
struct iwl_mvm_shared_mem_cfg shared_mem_cfg;
|
||||||
|
|
||||||
u32 ciphers[IWL_MVM_NUM_CIPHERS];
|
u32 ciphers[IWL_MVM_NUM_CIPHERS];
|
||||||
|
struct ieee80211_cipher_scheme cs[IWL_UCODE_MAX_CS];
|
||||||
struct iwl_mvm_tof_data tof_data;
|
struct iwl_mvm_tof_data tof_data;
|
||||||
|
|
||||||
struct ieee80211_vif *nan_vif;
|
struct ieee80211_vif *nan_vif;
|
||||||
|
Loading…
Reference in New Issue
Block a user