diff options
author | David Spinadel <david.spinadel@intel.com> | 2012-03-10 16:00:10 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-03-12 14:22:02 -0400 |
commit | 8f7ffbe2b275e5315773322161945a24518e31f4 (patch) | |
tree | ca73d736a52b9e443ce79a010c16d19cfb081f75 /drivers/net/wireless/iwlwifi/iwl-testmode.c | |
parent | 69a10b29eb87cf186cac20921b4884e349b59c97 (diff) |
iwlwifi: avoid some operations if no uCode loaded
Printing the SRAM and similar testmode operations could
be triggered when no uCode is loaded; prevent those
invalid operations by tracking whether uCode is loaded.
Signed-off-by: David Spinadel <david.spinadel@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-testmode.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-testmode.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-testmode.c b/drivers/net/wireless/iwlwifi/iwl-testmode.c index b06c6763cb7a..c6c084f45b72 100644 --- a/drivers/net/wireless/iwlwifi/iwl-testmode.c +++ b/drivers/net/wireless/iwlwifi/iwl-testmode.c | |||
@@ -494,6 +494,7 @@ static int iwl_testmode_driver(struct ieee80211_hw *hw, struct nlattr **tb) | |||
494 | 494 | ||
495 | case IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB: | 495 | case IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB: |
496 | iwl_testmode_cfg_init_calib(priv); | 496 | iwl_testmode_cfg_init_calib(priv); |
497 | priv->ucode_loaded = false; | ||
497 | iwl_trans_stop_device(trans); | 498 | iwl_trans_stop_device(trans); |
498 | break; | 499 | break; |
499 | 500 | ||
@@ -512,6 +513,7 @@ static int iwl_testmode_driver(struct ieee80211_hw *hw, struct nlattr **tb) | |||
512 | 513 | ||
513 | case IWL_TM_CMD_APP2DEV_LOAD_WOWLAN_FW: | 514 | case IWL_TM_CMD_APP2DEV_LOAD_WOWLAN_FW: |
514 | iwl_scan_cancel_timeout(priv, 200); | 515 | iwl_scan_cancel_timeout(priv, 200); |
516 | priv->ucode_loaded = false; | ||
515 | iwl_trans_stop_device(trans); | 517 | iwl_trans_stop_device(trans); |
516 | status = iwl_load_ucode_wait_alive(priv, IWL_UCODE_WOWLAN); | 518 | status = iwl_load_ucode_wait_alive(priv, IWL_UCODE_WOWLAN); |
517 | if (status) { | 519 | if (status) { |
@@ -591,25 +593,27 @@ static int iwl_testmode_driver(struct ieee80211_hw *hw, struct nlattr **tb) | |||
591 | IWL_ERR(priv, "Memory allocation fail\n"); | 593 | IWL_ERR(priv, "Memory allocation fail\n"); |
592 | return -ENOMEM; | 594 | return -ENOMEM; |
593 | } | 595 | } |
594 | switch (priv->shrd->ucode_type) { | 596 | if (!priv->ucode_loaded) { |
595 | case IWL_UCODE_REGULAR: | ||
596 | inst_size = priv->fw->ucode_rt.code.len; | ||
597 | data_size = priv->fw->ucode_rt.data.len; | ||
598 | break; | ||
599 | case IWL_UCODE_INIT: | ||
600 | inst_size = priv->fw->ucode_init.code.len; | ||
601 | data_size = priv->fw->ucode_init.data.len; | ||
602 | break; | ||
603 | case IWL_UCODE_WOWLAN: | ||
604 | inst_size = priv->fw->ucode_wowlan.code.len; | ||
605 | data_size = priv->fw->ucode_wowlan.data.len; | ||
606 | break; | ||
607 | case IWL_UCODE_NONE: | ||
608 | IWL_ERR(priv, "No uCode has not been loaded\n"); | 597 | IWL_ERR(priv, "No uCode has not been loaded\n"); |
609 | break; | 598 | return -EINVAL; |
610 | default: | 599 | } else { |
611 | IWL_ERR(priv, "Unsupported uCode type\n"); | 600 | switch (priv->shrd->ucode_type) { |
612 | break; | 601 | case IWL_UCODE_REGULAR: |
602 | inst_size = priv->fw->ucode_rt.code.len; | ||
603 | data_size = priv->fw->ucode_rt.data.len; | ||
604 | break; | ||
605 | case IWL_UCODE_INIT: | ||
606 | inst_size = priv->fw->ucode_init.code.len; | ||
607 | data_size = priv->fw->ucode_init.data.len; | ||
608 | break; | ||
609 | case IWL_UCODE_WOWLAN: | ||
610 | inst_size = priv->fw->ucode_wowlan.code.len; | ||
611 | data_size = priv->fw->ucode_wowlan.data.len; | ||
612 | break; | ||
613 | default: | ||
614 | IWL_ERR(priv, "Unsupported uCode type\n"); | ||
615 | break; | ||
616 | } | ||
613 | } | 617 | } |
614 | NLA_PUT_U32(skb, IWL_TM_ATTR_FW_TYPE, priv->shrd->ucode_type); | 618 | NLA_PUT_U32(skb, IWL_TM_ATTR_FW_TYPE, priv->shrd->ucode_type); |
615 | NLA_PUT_U32(skb, IWL_TM_ATTR_FW_INST_SIZE, inst_size); | 619 | NLA_PUT_U32(skb, IWL_TM_ATTR_FW_INST_SIZE, inst_size); |