Commit 4a986777 authored by Don Fry's avatar Don Fry Committed by Wey-Yi Guy

iwlwifi: save ucode capabilities in iwl_fw

The capabilities parsed from the ucode file are never saved.  Save
them in the iwl_fw structure.
Signed-off-by: default avatarDon Fry <donald.h.fry@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
parent 06e03f8c
...@@ -65,11 +65,7 @@ ...@@ -65,11 +65,7 @@
#include "iwl-dev.h" #include "iwl-dev.h"
struct iwlagn_ucode_capabilities { struct iwl_ucode_capabilities;
u32 max_probe_length;
u32 standard_phy_calibration_size;
u32 flags;
};
extern struct ieee80211_ops iwlagn_hw_ops; extern struct ieee80211_ops iwlagn_hw_ops;
...@@ -88,7 +84,7 @@ void iwlagn_prepare_restart(struct iwl_priv *priv); ...@@ -88,7 +84,7 @@ void iwlagn_prepare_restart(struct iwl_priv *priv);
/* MAC80211 */ /* MAC80211 */
struct ieee80211_hw *iwl_alloc_all(void); struct ieee80211_hw *iwl_alloc_all(void);
int iwlagn_mac_setup_register(struct iwl_priv *priv, int iwlagn_mac_setup_register(struct iwl_priv *priv,
struct iwlagn_ucode_capabilities *capa); struct iwl_ucode_capabilities *capa);
void iwlagn_mac_unregister(struct iwl_priv *priv); void iwlagn_mac_unregister(struct iwl_priv *priv);
/* RXON */ /* RXON */
......
...@@ -136,7 +136,7 @@ iwlagn_iface_combinations_p2p[] = { ...@@ -136,7 +136,7 @@ iwlagn_iface_combinations_p2p[] = {
* other mac80211 functions grouped here. * other mac80211 functions grouped here.
*/ */
int iwlagn_mac_setup_register(struct iwl_priv *priv, int iwlagn_mac_setup_register(struct iwl_priv *priv,
struct iwlagn_ucode_capabilities *capa) struct iwl_ucode_capabilities *capa)
{ {
int ret; int ret;
struct ieee80211_hw *hw = priv->hw; struct ieee80211_hw *hw = priv->hw;
......
...@@ -321,9 +321,6 @@ enum iwl_trans_state { ...@@ -321,9 +321,6 @@ enum iwl_trans_state {
* Set during transport allocation. * Set during transport allocation.
* @hw_id_str: a string with info about HW ID. Set during transport allocation. * @hw_id_str: a string with info about HW ID. Set during transport allocation.
* @ucode_write_complete: indicates that the ucode has been copied. * @ucode_write_complete: indicates that the ucode has been copied.
* @ucode_rt: run time ucode image
* @ucode_init: init ucode image
* @ucode_wowlan: wake on wireless ucode image (optional)
* @nvm_device_type: indicates OTP or eeprom * @nvm_device_type: indicates OTP or eeprom
* @pm_support: set to true in start_hw if link pm is supported * @pm_support: set to true in start_hw if link pm is supported
* @calib_results: list head for init calibration results * @calib_results: list head for init calibration results
......
...@@ -805,7 +805,7 @@ static int iwl_parse_v1_v2_firmware(struct iwl_nic *nic, ...@@ -805,7 +805,7 @@ static int iwl_parse_v1_v2_firmware(struct iwl_nic *nic,
static int iwl_parse_tlv_firmware(struct iwl_nic *nic, static int iwl_parse_tlv_firmware(struct iwl_nic *nic,
const struct firmware *ucode_raw, const struct firmware *ucode_raw,
struct iwlagn_firmware_pieces *pieces, struct iwlagn_firmware_pieces *pieces,
struct iwlagn_ucode_capabilities *capa) struct iwl_ucode_capabilities *capa)
{ {
struct iwl_tlv_ucode_header *ucode = (void *)ucode_raw->data; struct iwl_tlv_ucode_header *ucode = (void *)ucode_raw->data;
struct iwl_ucode_tlv *tlv; struct iwl_ucode_tlv *tlv;
...@@ -1012,6 +1012,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context) ...@@ -1012,6 +1012,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
{ {
struct iwl_nic *nic = context; struct iwl_nic *nic = context;
struct iwl_cfg *cfg = cfg(nic); struct iwl_cfg *cfg = cfg(nic);
struct iwl_fw *fw = &nic->fw;
struct iwl_priv *priv = priv(nic); /* temporary */ struct iwl_priv *priv = priv(nic); /* temporary */
struct iwl_ucode_header *ucode; struct iwl_ucode_header *ucode;
int err; int err;
...@@ -1022,11 +1023,10 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context) ...@@ -1022,11 +1023,10 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
u32 api_ver; u32 api_ver;
char buildstr[25]; char buildstr[25];
u32 build; u32 build;
struct iwlagn_ucode_capabilities ucode_capa = {
.max_probe_length = 200, fw->ucode_capa.max_probe_length = 200;
.standard_phy_calibration_size = fw->ucode_capa.standard_phy_calibration_size =
IWL_DEFAULT_STANDARD_PHY_CALIBRATE_TBL_SIZE, IWL_DEFAULT_STANDARD_PHY_CALIBRATE_TBL_SIZE;
};
if (!api_ok) if (!api_ok)
api_ok = api_max; api_ok = api_max;
...@@ -1057,7 +1057,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context) ...@@ -1057,7 +1057,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
err = iwl_parse_v1_v2_firmware(nic, ucode_raw, &pieces); err = iwl_parse_v1_v2_firmware(nic, ucode_raw, &pieces);
else else
err = iwl_parse_tlv_firmware(nic, ucode_raw, &pieces, err = iwl_parse_tlv_firmware(nic, ucode_raw, &pieces,
&ucode_capa); &fw->ucode_capa);
if (err) if (err)
goto try_again; goto try_again;
...@@ -1219,23 +1219,23 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context) ...@@ -1219,23 +1219,23 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
cfg->base_params->max_event_log_size; cfg->base_params->max_event_log_size;
nic->inst_errlog_ptr = pieces.inst_errlog_ptr; nic->inst_errlog_ptr = pieces.inst_errlog_ptr;
#ifndef CONFIG_IWLWIFI_P2P #ifndef CONFIG_IWLWIFI_P2P
ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_PAN; fw->ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_PAN;
#endif #endif
priv->new_scan_threshold_behaviour = priv->new_scan_threshold_behaviour =
!!(ucode_capa.flags & IWL_UCODE_TLV_FLAGS_NEWSCAN); !!(fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_NEWSCAN);
if (!(cfg->sku & EEPROM_SKU_CAP_IPAN_ENABLE)) if (!(cfg->sku & EEPROM_SKU_CAP_IPAN_ENABLE))
ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_PAN; fw->ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_PAN;
/* /*
* if not PAN, then don't support P2P -- might be a uCode * if not PAN, then don't support P2P -- might be a uCode
* packaging bug or due to the eeprom check above * packaging bug or due to the eeprom check above
*/ */
if (!(ucode_capa.flags & IWL_UCODE_TLV_FLAGS_PAN)) if (!(fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_PAN))
ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_P2P; fw->ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_P2P;
if (ucode_capa.flags & IWL_UCODE_TLV_FLAGS_PAN) { if (fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_PAN) {
priv->sta_key_max_num = STA_KEY_MAX_NUM_PAN; priv->sta_key_max_num = STA_KEY_MAX_NUM_PAN;
nic->shrd->cmd_queue = IWL_IPAN_CMD_QUEUE_NUM; nic->shrd->cmd_queue = IWL_IPAN_CMD_QUEUE_NUM;
} else { } else {
...@@ -1246,25 +1246,25 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context) ...@@ -1246,25 +1246,25 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context)
* figure out the offset of chain noise reset and gain commands * figure out the offset of chain noise reset and gain commands
* base on the size of standard phy calibration commands table size * base on the size of standard phy calibration commands table size
*/ */
if (ucode_capa.standard_phy_calibration_size > if (fw->ucode_capa.standard_phy_calibration_size >
IWL_MAX_PHY_CALIBRATE_TBL_SIZE) IWL_MAX_PHY_CALIBRATE_TBL_SIZE)
ucode_capa.standard_phy_calibration_size = fw->ucode_capa.standard_phy_calibration_size =
IWL_MAX_STANDARD_PHY_CALIBRATE_TBL_SIZE; IWL_MAX_STANDARD_PHY_CALIBRATE_TBL_SIZE;
priv->phy_calib_chain_noise_reset_cmd = priv->phy_calib_chain_noise_reset_cmd =
ucode_capa.standard_phy_calibration_size; fw->ucode_capa.standard_phy_calibration_size;
priv->phy_calib_chain_noise_gain_cmd = priv->phy_calib_chain_noise_gain_cmd =
ucode_capa.standard_phy_calibration_size + 1; fw->ucode_capa.standard_phy_calibration_size + 1;
/* initialize all valid contexts */ /* initialize all valid contexts */
iwl_init_context(priv, ucode_capa.flags); iwl_init_context(priv, fw->ucode_capa.flags);
/************************************************** /**************************************************
* This is still part of probe() in a sense... * This is still part of probe() in a sense...
* *
* 9. Setup and register with mac80211 and debugfs * 9. Setup and register with mac80211 and debugfs
**************************************************/ **************************************************/
err = iwlagn_mac_setup_register(priv, &ucode_capa); err = iwlagn_mac_setup_register(priv, &fw->ucode_capa);
if (err) if (err)
goto out_unbind; goto out_unbind;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment