diff options
author | Johannes Berg <johannes.berg@intel.com> | 2012-02-21 20:31:06 +0400 |
---|---|---|
committer | Wey-Yi Guy <wey-yi.w.guy@intel.com> | 2012-02-28 01:25:06 +0400 |
commit | a78be210d53b24cc3437d4362912c510b895a8eb (patch) | |
tree | 3b8e30a6df0a44a876a719c3f76d8977f471d831 | |
parent | e211b2427a61e92e5a6bdd629bc2c2e6114c2dc1 (diff) | |
download | linux-a78be210d53b24cc3437d4362912c510b895a8eb.tar.xz |
iwlwifi: move uCode flags handling to op_mode
The uCode flags modification is op_mode dependent
since the P2P config is an op-mode config.
This also fixes P2P enabling: due to the uCode
loading code shuffle moving the SKU check before
the EEPROM was read it was always false and would
always disable PAN/P2P.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 23 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-ucode.c | 14 |
2 files changed, 21 insertions, 16 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index 5e476a80bd8c..d70dd6fff4f5 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c @@ -1151,6 +1151,7 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus, struct iwl_priv *priv; struct ieee80211_hw *hw; u16 num_mac; + u32 ucode_flags; /************************ * 1. Allocating HW data @@ -1242,6 +1243,22 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus, ************************/ iwl_set_hw_params(priv); + ucode_flags = fw->ucode_capa.flags; + +#ifndef CONFIG_IWLWIFI_P2P + ucode_flags &= ~IWL_UCODE_TLV_FLAGS_PAN; +#endif + if (!(hw_params(priv).sku & EEPROM_SKU_CAP_IPAN_ENABLE)) + ucode_flags &= ~IWL_UCODE_TLV_FLAGS_PAN; + + /* + * if not PAN, then don't support P2P -- might be a uCode + * packaging bug or due to the eeprom check above + */ + if (!(ucode_flags & IWL_UCODE_TLV_FLAGS_PAN)) + ucode_flags &= ~IWL_UCODE_TLV_FLAGS_P2P; + + /******************* * 6. Setup priv *******************/ @@ -1266,9 +1283,9 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus, "%s", fw->fw_version); priv->new_scan_threshold_behaviour = - !!(fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_NEWSCAN); + !!(ucode_flags & IWL_UCODE_TLV_FLAGS_NEWSCAN); - if (fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_PAN) { + if (ucode_flags & IWL_UCODE_TLV_FLAGS_PAN) { priv->sta_key_max_num = STA_KEY_MAX_NUM_PAN; priv->shrd->cmd_queue = IWL_IPAN_CMD_QUEUE_NUM; } else { @@ -1282,7 +1299,7 @@ int iwl_op_mode_dvm_start(struct iwl_bus *bus, fw->ucode_capa.standard_phy_calibration_size + 1; /* initialize all valid contexts */ - iwl_init_context(priv, fw->ucode_capa.flags); + iwl_init_context(priv, ucode_flags); /************************************************** * This is still part of probe() in a sense... diff --git a/drivers/net/wireless/iwlwifi/iwl-ucode.c b/drivers/net/wireless/iwlwifi/iwl-ucode.c index 99f89b27f42c..3645bf3d61c6 100644 --- a/drivers/net/wireless/iwlwifi/iwl-ucode.c +++ b/drivers/net/wireless/iwlwifi/iwl-ucode.c @@ -1226,9 +1226,7 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context) nic->inst_evtlog_size = cfg->base_params->max_event_log_size; nic->inst_errlog_ptr = pieces.inst_errlog_ptr; -#ifndef CONFIG_IWLWIFI_P2P - fw->ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_PAN; -#endif + /* * figure out the offset of chain noise reset and gain commands * base on the size of standard phy calibration commands table size @@ -1238,16 +1236,6 @@ static void iwl_ucode_callback(const struct firmware *ucode_raw, void *context) fw->ucode_capa.standard_phy_calibration_size = IWL_MAX_STANDARD_PHY_CALIBRATE_TBL_SIZE; - if (!(cfg->sku & EEPROM_SKU_CAP_IPAN_ENABLE)) - fw->ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_PAN; - - /* - * if not PAN, then don't support P2P -- might be a uCode - * packaging bug or due to the eeprom check above - */ - if (!(fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_PAN)) - fw->ucode_capa.flags &= ~IWL_UCODE_TLV_FLAGS_P2P; - /* We have our copies now, allow OS release its copies */ release_firmware(ucode_raw); complete(&nic->request_firmware_complete); |