aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/qla4xxx/ql4_isr.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi/qla4xxx/ql4_isr.c')
-rw-r--r--drivers/scsi/qla4xxx/ql4_isr.c36
1 files changed, 35 insertions, 1 deletions
diff --git a/drivers/scsi/qla4xxx/ql4_isr.c b/drivers/scsi/qla4xxx/ql4_isr.c
index 81909d949905..1b83dc283d2e 100644
--- a/drivers/scsi/qla4xxx/ql4_isr.c
+++ b/drivers/scsi/qla4xxx/ql4_isr.c
@@ -582,6 +582,33 @@ exit_prq_error:
582} 582}
583 583
584/** 584/**
585 * qla4_83xx_loopback_in_progress: Is loopback in progress?
586 * @ha: Pointer to host adapter structure.
587 * @ret: 1 = loopback in progress, 0 = loopback not in progress
588 **/
589static int qla4_83xx_loopback_in_progress(struct scsi_qla_host *ha)
590{
591 int rval = 1;
592
593 if (is_qla8032(ha)) {
594 if ((ha->idc_info.info2 & ENABLE_INTERNAL_LOOPBACK) ||
595 (ha->idc_info.info2 & ENABLE_EXTERNAL_LOOPBACK)) {
596 DEBUG2(ql4_printk(KERN_INFO, ha,
597 "%s: Loopback diagnostics in progress\n",
598 __func__));
599 rval = 1;
600 } else {
601 DEBUG2(ql4_printk(KERN_INFO, ha,
602 "%s: Loopback diagnostics not in progress\n",
603 __func__));
604 rval = 0;
605 }
606 }
607
608 return rval;
609}
610
611/**
585 * qla4xxx_isr_decode_mailbox - decodes mailbox status 612 * qla4xxx_isr_decode_mailbox - decodes mailbox status
586 * @ha: Pointer to host adapter structure. 613 * @ha: Pointer to host adapter structure.
587 * @mailbox_status: Mailbox status. 614 * @mailbox_status: Mailbox status.
@@ -676,8 +703,10 @@ static void qla4xxx_isr_decode_mailbox(struct scsi_qla_host * ha,
676 703
677 case MBOX_ASTS_LINK_DOWN: 704 case MBOX_ASTS_LINK_DOWN:
678 clear_bit(AF_LINK_UP, &ha->flags); 705 clear_bit(AF_LINK_UP, &ha->flags);
679 if (test_bit(AF_INIT_DONE, &ha->flags)) 706 if (test_bit(AF_INIT_DONE, &ha->flags)) {
680 set_bit(DPC_LINK_CHANGED, &ha->dpc_flags); 707 set_bit(DPC_LINK_CHANGED, &ha->dpc_flags);
708 qla4xxx_wake_dpc(ha);
709 }
681 710
682 ql4_printk(KERN_INFO, ha, "%s: LINK DOWN\n", __func__); 711 ql4_printk(KERN_INFO, ha, "%s: LINK DOWN\n", __func__);
683 qla4xxx_post_aen_work(ha, ISCSI_EVENT_LINKDOWN, 712 qla4xxx_post_aen_work(ha, ISCSI_EVENT_LINKDOWN,
@@ -840,6 +869,11 @@ static void qla4xxx_isr_decode_mailbox(struct scsi_qla_host * ha,
840 DEBUG2(ql4_printk(KERN_INFO, ha, 869 DEBUG2(ql4_printk(KERN_INFO, ha,
841 "scsi:%ld: AEN %04x IDC Complete notification\n", 870 "scsi:%ld: AEN %04x IDC Complete notification\n",
842 ha->host_no, mbox_sts[0])); 871 ha->host_no, mbox_sts[0]));
872
873 if (qla4_83xx_loopback_in_progress(ha))
874 set_bit(AF_LOOPBACK, &ha->flags);
875 else
876 clear_bit(AF_LOOPBACK, &ha->flags);
843 } 877 }
844 break; 878 break;
845 879