iwlmei needs to know about the follwing events: * Association * De-association * Country Code change * SW Rfkill change * SAR table changes iwlmei can take the device away from us, so report the new rfkill type when this happens. Advertise the required data from the CSME firmware to the usersapce: mostly, the AP that the CSME firmware is currently associated to in case there is an active link protection session. Generate the HOST_ASSOC / HOST_DISSASSOC messages. Don't support WPA1 (non-RSNA) for now. Don't support shared wep either. We can then determine the AUTH parameter by checking the AKM. Feed the cipher from the key installation. SW Rfkill will be implemented later when cfg80211 will allow us to read the SW Rfkill state. Co-Developed-by: Ayala Beker <ayala.beker@intel.com> Signed-off-by: Ayala Beker <ayala.beker@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> v7: Ayala added her signed-off remove pointless function declaration fix a bug due to merge conflict in the HOST_ASSOC message v8: leave a print if we have a SAP connection on a device we do not support (yet) Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/20211112062814.7502-4-emmanuel.grumbach@intel.com
93 lines
3 KiB
C
93 lines
3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
|
|
/*
|
|
* Copyright (C) 2005-2015, 2018-2021 Intel Corporation
|
|
* Copyright (C) 2016-2017 Intel Deutschland GmbH
|
|
*/
|
|
#ifndef __iwl_nvm_parse_h__
|
|
#define __iwl_nvm_parse_h__
|
|
|
|
#include <net/cfg80211.h>
|
|
#include "iwl-eeprom-parse.h"
|
|
#include "mei/iwl-mei.h"
|
|
|
|
/**
|
|
* enum iwl_nvm_sbands_flags - modification flags for the channel profiles
|
|
*
|
|
* @IWL_NVM_SBANDS_FLAGS_LAR: LAR is enabled
|
|
* @IWL_NVM_SBANDS_FLAGS_NO_WIDE_IN_5GHZ: disallow 40, 80 and 160MHz on 5GHz
|
|
*/
|
|
enum iwl_nvm_sbands_flags {
|
|
IWL_NVM_SBANDS_FLAGS_LAR = BIT(0),
|
|
IWL_NVM_SBANDS_FLAGS_NO_WIDE_IN_5GHZ = BIT(1),
|
|
};
|
|
|
|
/**
|
|
* iwl_parse_nvm_data - parse NVM data and return values
|
|
*
|
|
* This function parses all NVM values we need and then
|
|
* returns a (newly allocated) struct containing all the
|
|
* relevant values for driver use. The struct must be freed
|
|
* later with iwl_free_nvm_data().
|
|
*/
|
|
struct iwl_nvm_data *
|
|
iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg,
|
|
const struct iwl_fw *fw,
|
|
const __be16 *nvm_hw, const __le16 *nvm_sw,
|
|
const __le16 *nvm_calib, const __le16 *regulatory,
|
|
const __le16 *mac_override, const __le16 *phy_sku,
|
|
u8 tx_chains, u8 rx_chains);
|
|
|
|
/**
|
|
* iwl_parse_mcc_info - parse MCC (mobile country code) info coming from FW
|
|
*
|
|
* This function parses the regulatory channel data received as a
|
|
* MCC_UPDATE_CMD command. It returns a newly allocation regulatory domain,
|
|
* to be fed into the regulatory core. In case the geo_info is set handle
|
|
* accordingly. An ERR_PTR is returned on error.
|
|
* If not given to the regulatory core, the user is responsible for freeing
|
|
* the regdomain returned here with kfree.
|
|
*/
|
|
struct ieee80211_regdomain *
|
|
iwl_parse_nvm_mcc_info(struct device *dev, const struct iwl_cfg *cfg,
|
|
int num_of_ch, __le32 *channels, u16 fw_mcc,
|
|
u16 geo_info, u16 cap, u8 resp_ver);
|
|
|
|
/**
|
|
* struct iwl_nvm_section - describes an NVM section in memory.
|
|
*
|
|
* This struct holds an NVM section read from the NIC using NVM_ACCESS_CMD,
|
|
* and saved for later use by the driver. Not all NVM sections are saved
|
|
* this way, only the needed ones.
|
|
*/
|
|
struct iwl_nvm_section {
|
|
u16 length;
|
|
const u8 *data;
|
|
};
|
|
|
|
/**
|
|
* iwl_read_external_nvm - Reads external NVM from a file into nvm_sections
|
|
*/
|
|
int iwl_read_external_nvm(struct iwl_trans *trans,
|
|
const char *nvm_file_name,
|
|
struct iwl_nvm_section *nvm_sections);
|
|
void iwl_nvm_fixups(u32 hw_id, unsigned int section, u8 *data,
|
|
unsigned int len);
|
|
|
|
/**
|
|
* iwl_get_nvm - retrieve NVM data from firmware
|
|
*
|
|
* Allocates a new iwl_nvm_data structure, fills it with
|
|
* NVM data, and returns it to caller.
|
|
*/
|
|
struct iwl_nvm_data *iwl_get_nvm(struct iwl_trans *trans,
|
|
const struct iwl_fw *fw);
|
|
|
|
/**
|
|
* iwl_parse_mei_nvm_data - parse the mei_nvm_data and get an iwl_nvm_data
|
|
*/
|
|
struct iwl_nvm_data *
|
|
iwl_parse_mei_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg,
|
|
const struct iwl_mei_nvm *mei_nvm,
|
|
const struct iwl_fw *fw);
|
|
|
|
#endif /* __iwl_nvm_parse_h__ */
|