[SCSI] qla2xxx: Notify ISPFX00 firmware when driver is unloaded or system is shut...
authorArmen Baloyan <armen.baloyan@qlogic.com>
Tue, 27 Aug 2013 05:37:37 +0000 (01:37 -0400)
committerJames Bottomley <JBottomley@Parallels.com>
Tue, 3 Sep 2013 14:28:03 +0000 (07:28 -0700)
Signed-off-by: Armen Baloyan <armen.baloyan@qlogic.com>
Acked-by: Srinivasa Rao <srinivasa.rao@qlogic.com>
Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/qla2xxx/qla_gbl.h
drivers/scsi/qla2xxx/qla_mr.c
drivers/scsi/qla2xxx/qla_os.c

index d55fefd34afea35fd0e1999ea17ed17fac9b8247..4446bf5fe2921dafe7ccafa23fb73589446020c8 100644 (file)
@@ -594,6 +594,7 @@ extern int qlafx00_start_scsi(srb_t *);
 extern int qlafx00_abort_isp(scsi_qla_host_t *);
 extern int qlafx00_iospace_config(struct qla_hw_data *);
 extern int qlafx00_init_firmware(scsi_qla_host_t *, uint16_t);
+extern int qlafx00_driver_shutdown(scsi_qla_host_t *, int);
 extern int qlafx00_fw_ready(scsi_qla_host_t *);
 extern int qlafx00_configure_devices(scsi_qla_host_t *);
 extern int qlafx00_reset_initialize(scsi_qla_host_t *);
index e087a4999965761fa2ab034dd34e0372eb39df49..ab2ae8e26fea26521ee714929d733ed10d7c3061 100644 (file)
@@ -294,7 +294,7 @@ premature_exit:
  * Context:
  *     Kernel context.
  */
-static int
+int
 qlafx00_driver_shutdown(scsi_qla_host_t *vha, int tmo)
 {
        int rval;
index 3f53151734d3477e9dd17853a1e60f10cecca8be..17a86b69cb08e5f1eff63a61ae489485d90a4503 100644 (file)
@@ -3006,6 +3006,10 @@ qla2x00_shutdown(struct pci_dev *pdev)
        vha = pci_get_drvdata(pdev);
        ha = vha->hw;
 
+       /* Notify ISPFX00 firmware */
+       if (IS_QLAFX00(ha))
+               qlafx00_driver_shutdown(vha, 20);
+
        /* Turn-off FCE trace */
        if (ha->flags.fce_enabled) {
                qla2x00_disable_fce_trace(vha, NULL, NULL);
@@ -3053,6 +3057,9 @@ qla2x00_remove_one(struct pci_dev *pdev)
        ha->flags.host_shutting_down = 1;
 
        set_bit(UNLOADING, &base_vha->dpc_flags);
+       if (IS_QLAFX00(ha))
+               qlafx00_driver_shutdown(base_vha, 20);
+
        mutex_lock(&ha->vport_lock);
        while (ha->cur_vport_count) {
                spin_lock_irqsave(&ha->vport_slock, flags);