aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla2xxx/qla_nx.c
diff options
context:
space:
mode:
authorGiridhar Malavali <giridhar.malavali@qlogic.com>2011-08-16 14:31:54 -0400
committerJames Bottomley <JBottomley@Parallels.com>2011-08-29 03:14:57 -0400
commit3173167f015b779e549e1be04707316cce1b57f1 (patch)
tree36c87222aaa7d50b75edfdff3ba7a4904b871e31 /drivers/scsi/qla2xxx/qla_nx.c
parentb668ae37f10e5cefe65303150867e3fa2e631b93 (diff)
[SCSI] qla2xxx: Issue mailbox command only when firmware hung bit is reset for ISP82xx.
Signed-off-by: Giridhar Malavali <giridhar.malavali@qlogic.com> Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_nx.c')
-rw-r--r--drivers/scsi/qla2xxx/qla_nx.c74
1 files changed, 41 insertions, 33 deletions
diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c
index e5ae84c9598c..77fde8b13447 100644
--- a/drivers/scsi/qla2xxx/qla_nx.c
+++ b/drivers/scsi/qla2xxx/qla_nx.c
@@ -3619,44 +3619,52 @@ qla82xx_need_reset_handler(scsi_qla_host_t *vha)
3619 } 3619 }
3620} 3620}
3621 3621
3622static void 3622int
3623qla82xx_check_md_needed(scsi_qla_host_t *vha) 3623qla82xx_check_md_needed(scsi_qla_host_t *vha)
3624{ 3624{
3625 struct qla_hw_data *ha = vha->hw; 3625 struct qla_hw_data *ha = vha->hw;
3626 uint16_t fw_major_version, fw_minor_version, fw_subminor_version; 3626 uint16_t fw_major_version, fw_minor_version, fw_subminor_version;
3627 uint16_t fw_attributes; 3627 int rval = QLA_SUCCESS;
3628 uint32_t fw_memory_size, mpi_capabilities; 3628
3629 uint8_t mpi_version[3], phy_version[3]; 3629 fw_major_version = ha->fw_major_version;
3630 3630 fw_minor_version = ha->fw_minor_version;
3631 if (!ha->fw_dumped) { 3631 fw_subminor_version = ha->fw_subminor_version;
3632 qla2x00_get_fw_version(vha, 3632
3633 &fw_major_version, 3633 rval = qla2x00_get_fw_version(vha, &ha->fw_major_version,
3634 &fw_minor_version, 3634 &ha->fw_minor_version, &ha->fw_subminor_version,
3635 &fw_subminor_version, 3635 &ha->fw_attributes, &ha->fw_memory_size,
3636 &fw_attributes, &fw_memory_size, 3636 ha->mpi_version, &ha->mpi_capabilities,
3637 mpi_version, &mpi_capabilities, 3637 ha->phy_version);
3638 phy_version); 3638
3639 3639 if (rval != QLA_SUCCESS)
3640 if (fw_major_version != ha->fw_major_version || 3640 return rval;
3641 fw_minor_version != ha->fw_minor_version || 3641
3642 fw_subminor_version != ha->fw_subminor_version) { 3642 if (ql2xmdenable) {
3643 ql_log(ql_log_info, vha, 0xb02d, 3643 if (!ha->fw_dumped) {
3644 "Firmware version differs " 3644 if (fw_major_version != ha->fw_major_version ||
3645 "Previous version: %d:%d:%d - " 3645 fw_minor_version != ha->fw_minor_version ||
3646 "New version: %d:%d:%d\n", 3646 fw_subminor_version != ha->fw_subminor_version) {
3647 ha->fw_major_version, 3647
3648 ha->fw_minor_version, ha->fw_subminor_version, 3648 ql_log(ql_log_info, vha, 0xb02d,
3649 fw_major_version, fw_minor_version, 3649 "Firmware version differs "
3650 fw_subminor_version); 3650 "Previous version: %d:%d:%d - "
3651 /* Release MiniDump resources */ 3651 "New version: %d:%d:%d\n",
3652 qla82xx_md_free(vha); 3652 ha->fw_major_version,
3653 /* ALlocate MiniDump resources */ 3653 ha->fw_minor_version,
3654 qla82xx_md_prep(vha); 3654 ha->fw_subminor_version,
3655 fw_major_version, fw_minor_version,
3656 fw_subminor_version);
3657 /* Release MiniDump resources */
3658 qla82xx_md_free(vha);
3659 /* ALlocate MiniDump resources */
3660 qla82xx_md_prep(vha);
3661 } else
3662 ql_log(ql_log_info, vha, 0xb02e,
3663 "Firmware dump available to retrieve\n",
3664 vha->host_no);
3655 } 3665 }
3656 } else 3666 }
3657 ql_log(ql_log_info, vha, 0xb02e, 3667 return rval;
3658 "Firmware dump available to retrieve\n",
3659 vha->host_no);
3660} 3668}
3661 3669
3662 3670