summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2012-02-21 18:31:06 +0200
committerWey-Yi Guy <wey-yi.w.guy@intel.com>2012-02-27 13:25:06 -0800
commita78be210d53b24cc3437d4362912c510b895a8eb (patch)
tree3b8e30a6df0a44a876a719c3f76d8977f471d831 /drivers
parente211b2427a61e92e5a6bdd629bc2c2e6114c2dc1 (diff)
downloadop-kernel-dev-a78be210d53b24cc3437d4362912c510b895a8eb.zip
op-kernel-dev-a78be210d53b24cc3437d4362912c510b895a8eb.tar.gz
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c23
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-ucode.c14
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 5e476a8..d70dd6f 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 99f89b2..3645bf3 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);
OpenPOWER on IntegriCloud