Lines Matching refs:ha
18 static void qla4xxx_copy_sense(struct scsi_qla_host *ha, in qla4xxx_copy_sense() argument
28 DEBUG2(ql4_printk(KERN_INFO, ha, "scsi%ld:%d:%d:%llu: %s:" in qla4xxx_copy_sense()
29 " sense len 0\n", ha->host_no, in qla4xxx_copy_sense()
32 ha->status_srb = NULL; in qla4xxx_copy_sense()
46 "ASL= %02x, ASC/ASCQ = %02x/%02x\n", ha->host_no, in qla4xxx_copy_sense()
61 ha->status_srb = srb; in qla4xxx_copy_sense()
63 ha->status_srb = NULL; in qla4xxx_copy_sense()
74 qla4xxx_status_cont_entry(struct scsi_qla_host *ha, in qla4xxx_status_cont_entry() argument
77 struct srb *srb = ha->status_srb; in qla4xxx_status_cont_entry()
87 "back to OS srb=%p srb->state:%d\n", ha->host_no, in qla4xxx_status_cont_entry()
89 ha->status_srb = NULL; in qla4xxx_status_cont_entry()
105 ha->status_srb = NULL; in qla4xxx_status_cont_entry()
114 static void qla4xxx_status_entry(struct scsi_qla_host *ha, in qla4xxx_status_entry() argument
123 srb = qla4xxx_del_from_active_array(ha, le32_to_cpu(sts_entry->handle)); in qla4xxx_status_entry()
125 ql4_printk(KERN_WARNING, ha, "%s invalid status entry: " in qla4xxx_status_entry()
128 if (is_qla80XX(ha)) in qla4xxx_status_entry()
129 set_bit(DPC_RESET_HA_FW_CONTEXT, &ha->dpc_flags); in qla4xxx_status_entry()
131 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_status_entry()
139 ha->host_no, __func__, sts_entry->handle, in qla4xxx_status_entry()
141 ql4_printk(KERN_WARNING, ha, "Command is NULL:" in qla4xxx_status_entry()
174 "residual = 0x%x\n", ha->host_no, in qla4xxx_status_entry()
189 qla4xxx_copy_sense(ha, sts_entry, srb); in qla4xxx_status_entry()
200 ha->host_no, cmd->device->channel, in qla4xxx_status_entry()
208 ha->host_no, cmd->device->channel, in qla4xxx_status_entry()
216 ha->host_no, cmd->device->channel, in qla4xxx_status_entry()
235 ha->host_no, in qla4xxx_status_entry()
260 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_status_entry()
262 ha->host_no, in qla4xxx_status_entry()
292 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_status_entry()
294 ha->host_no, in qla4xxx_status_entry()
309 qla4xxx_copy_sense(ha, sts_entry, srb); in qla4xxx_status_entry()
316 "state: 0x%x\n", ha->host_no, in qla4xxx_status_entry()
337 " iResp=%02x\n", ha->host_no, cmd->device->id, in qla4xxx_status_entry()
354 if (ha->status_srb == NULL) in qla4xxx_status_entry()
363 static void qla4xxx_passthru_status_entry(struct scsi_qla_host *ha, in qla4xxx_passthru_status_entry() argument
377 ddb_entry = qla4xxx_lookup_ddb_by_fw_index(ha, fw_ddb_index); in qla4xxx_passthru_status_entry()
380 ql4_printk(KERN_ERR, ha, "%s: Invalid target index = 0x%x\n", in qla4xxx_passthru_status_entry()
392 ql4_printk(KERN_ERR, ha, "%s: Task is NULL\n", __func__); in qla4xxx_passthru_status_entry()
398 ha->iocb_cnt -= task_data->iocb_req_cnt; in qla4xxx_passthru_status_entry()
399 queue_work(ha->task_wq, &task_data->task_work); in qla4xxx_passthru_status_entry()
402 static struct mrb *qla4xxx_del_mrb_from_active_array(struct scsi_qla_host *ha, in qla4xxx_del_mrb_from_active_array() argument
411 mrb = ha->active_mrb_array[index]; in qla4xxx_del_mrb_from_active_array()
412 ha->active_mrb_array[index] = NULL; in qla4xxx_del_mrb_from_active_array()
417 ha->iocb_cnt -= mrb->iocb_cnt; in qla4xxx_del_mrb_from_active_array()
422 static void qla4xxx_mbox_status_entry(struct scsi_qla_host *ha, in qla4xxx_mbox_status_entry() argument
429 mrb = qla4xxx_del_mrb_from_active_array(ha, in qla4xxx_mbox_status_entry()
433 ql4_printk(KERN_WARNING, ha, "%s: mrb[%d] is null\n", __func__, in qla4xxx_mbox_status_entry()
440 DEBUG2(ql4_printk(KERN_INFO, ha, "%s: mbox_cmd = 0x%x, " in qla4xxx_mbox_status_entry()
453 qla4xxx_post_ping_evt_work(ha, status, mrb->pid, data_size, in qla4xxx_mbox_status_entry()
458 DEBUG2(ql4_printk(KERN_WARNING, ha, "%s: invalid mbox_cmd = " in qla4xxx_mbox_status_entry()
473 void qla4xxx_process_response_queue(struct scsi_qla_host *ha) in qla4xxx_process_response_queue() argument
479 while ((ha->response_ptr->signature != RESPONSE_PROCESSED)) { in qla4xxx_process_response_queue()
480 sts_entry = (struct status_entry *) ha->response_ptr; in qla4xxx_process_response_queue()
483 if (ha->response_out == (RESPONSE_QUEUE_DEPTH - 1)) { in qla4xxx_process_response_queue()
484 ha->response_out = 0; in qla4xxx_process_response_queue()
485 ha->response_ptr = ha->response_ring; in qla4xxx_process_response_queue()
487 ha->response_out++; in qla4xxx_process_response_queue()
488 ha->response_ptr++; in qla4xxx_process_response_queue()
495 qla4xxx_status_entry(ha, sts_entry); in qla4xxx_process_response_queue()
500 qla4xxx_passthru_status_entry(ha, in qla4xxx_process_response_queue()
503 ql4_printk(KERN_ERR, ha, in qla4xxx_process_response_queue()
510 qla4xxx_status_cont_entry(ha, in qla4xxx_process_response_queue()
519 srb = qla4xxx_del_from_active_array(ha, in qla4xxx_process_response_queue()
526 "srb %p\n", ha->host_no, __func__, srb)); in qla4xxx_process_response_queue()
537 "ignoring\n", ha->host_no, __func__)); in qla4xxx_process_response_queue()
541 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_process_response_queue()
543 qla4xxx_mbox_status_entry(ha, in qla4xxx_process_response_queue()
553 "response queue \n", ha->host_no, in qla4xxx_process_response_queue()
565 ha->isp_ops->complete_iocb(ha); in qla4xxx_process_response_queue()
571 ha->host_no, __func__, srb, sts_entry->hdr.entryType, in qla4xxx_process_response_queue()
575 ha->isp_ops->complete_iocb(ha); in qla4xxx_process_response_queue()
576 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_process_response_queue()
584 static int qla4_83xx_loopback_in_progress(struct scsi_qla_host *ha) in qla4_83xx_loopback_in_progress() argument
588 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_83xx_loopback_in_progress()
589 if ((ha->idc_info.info2 & ENABLE_INTERNAL_LOOPBACK) || in qla4_83xx_loopback_in_progress()
590 (ha->idc_info.info2 & ENABLE_EXTERNAL_LOOPBACK)) { in qla4_83xx_loopback_in_progress()
591 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_83xx_loopback_in_progress()
596 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_83xx_loopback_in_progress()
606 static void qla4xxx_update_ipaddr_state(struct scsi_qla_host *ha, in qla4xxx_update_ipaddr_state() argument
618 ha->ip_config.ipv4_addr_state = ipaddr_state; in qla4xxx_update_ipaddr_state()
621 ha->ip_config.ipv6_link_local_state = ipaddr_state; in qla4xxx_update_ipaddr_state()
624 ha->ip_config.ipv6_addr0_state = ipaddr_state; in qla4xxx_update_ipaddr_state()
627 ha->ip_config.ipv6_addr1_state = ipaddr_state; in qla4xxx_update_ipaddr_state()
630 ql4_printk(KERN_INFO, ha, "%s: Invalid IPADDR index %d\n", in qla4xxx_update_ipaddr_state()
635 static void qla4xxx_default_router_changed(struct scsi_qla_host *ha, in qla4xxx_default_router_changed() argument
638 memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[0], in qla4xxx_default_router_changed()
640 memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[1], in qla4xxx_default_router_changed()
642 memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[2], in qla4xxx_default_router_changed()
644 memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[3], in qla4xxx_default_router_changed()
656 static void qla4xxx_isr_decode_mailbox(struct scsi_qla_host * ha, in qla4xxx_isr_decode_mailbox() argument
664 if (is_qla8032(ha) || is_qla8042(ha)) in qla4xxx_isr_decode_mailbox()
665 mailbox_out = &ha->qla4_83xx_reg->mailbox_out[0]; in qla4xxx_isr_decode_mailbox()
666 else if (is_qla8022(ha)) in qla4xxx_isr_decode_mailbox()
667 mailbox_out = &ha->qla4_82xx_reg->mailbox_out[0]; in qla4xxx_isr_decode_mailbox()
669 mailbox_out = &ha->reg->mailbox[0]; in qla4xxx_isr_decode_mailbox()
674 ha->mbox_status[0] = mbox_status; in qla4xxx_isr_decode_mailbox()
676 if (test_bit(AF_MBOX_COMMAND, &ha->flags)) { in qla4xxx_isr_decode_mailbox()
681 for (i = 0; i < ha->mbox_status_count; i++) in qla4xxx_isr_decode_mailbox()
682 ha->mbox_status[i] = readl(&mailbox_out[i]); in qla4xxx_isr_decode_mailbox()
684 set_bit(AF_MBOX_COMMAND_DONE, &ha->flags); in qla4xxx_isr_decode_mailbox()
686 if (test_bit(AF_MBOX_COMMAND_NOPOLL, &ha->flags)) in qla4xxx_isr_decode_mailbox()
687 complete(&ha->mbx_intr_comp); in qla4xxx_isr_decode_mailbox()
695 if (ha->aen_log.count < MAX_AEN_ENTRIES) { in qla4xxx_isr_decode_mailbox()
697 ha->aen_log.entry[ha->aen_log.count].mbox_sts[i] = in qla4xxx_isr_decode_mailbox()
699 ha->aen_log.count++; in qla4xxx_isr_decode_mailbox()
704 ql4_printk(KERN_INFO, ha, "%s: System Err\n", __func__); in qla4xxx_isr_decode_mailbox()
705 qla4xxx_dump_registers(ha); in qla4xxx_isr_decode_mailbox()
707 if ((is_qla8022(ha) && ql4xdontresethba) || in qla4xxx_isr_decode_mailbox()
708 ((is_qla8032(ha) || is_qla8042(ha)) && in qla4xxx_isr_decode_mailbox()
709 qla4_83xx_idc_dontreset(ha))) { in qla4xxx_isr_decode_mailbox()
711 ha->host_no, __func__)); in qla4xxx_isr_decode_mailbox()
713 set_bit(AF_GET_CRASH_RECORD, &ha->flags); in qla4xxx_isr_decode_mailbox()
714 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
724 "Reset HA\n", ha->host_no, mbox_status)); in qla4xxx_isr_decode_mailbox()
725 if (is_qla80XX(ha)) in qla4xxx_isr_decode_mailbox()
727 &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
729 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
733 set_bit(AF_LINK_UP, &ha->flags); in qla4xxx_isr_decode_mailbox()
734 if (test_bit(AF_INIT_DONE, &ha->flags)) in qla4xxx_isr_decode_mailbox()
735 set_bit(DPC_LINK_CHANGED, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
737 ql4_printk(KERN_INFO, ha, "%s: LINK UP\n", __func__); in qla4xxx_isr_decode_mailbox()
738 qla4xxx_post_aen_work(ha, ISCSI_EVENT_LINKUP, in qla4xxx_isr_decode_mailbox()
742 if ((is_qla8032(ha) || is_qla8042(ha)) && in qla4xxx_isr_decode_mailbox()
743 ha->notify_link_up_comp) in qla4xxx_isr_decode_mailbox()
744 complete(&ha->link_up_comp); in qla4xxx_isr_decode_mailbox()
749 clear_bit(AF_LINK_UP, &ha->flags); in qla4xxx_isr_decode_mailbox()
750 if (test_bit(AF_INIT_DONE, &ha->flags)) { in qla4xxx_isr_decode_mailbox()
751 set_bit(DPC_LINK_CHANGED, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
752 qla4xxx_wake_dpc(ha); in qla4xxx_isr_decode_mailbox()
755 ql4_printk(KERN_INFO, ha, "%s: LINK DOWN\n", __func__); in qla4xxx_isr_decode_mailbox()
756 qla4xxx_post_aen_work(ha, ISCSI_EVENT_LINKDOWN, in qla4xxx_isr_decode_mailbox()
762 ha->seconds_since_last_heartbeat = 0; in qla4xxx_isr_decode_mailbox()
767 "ACQUIRED\n", ha->host_no, mbox_status)); in qla4xxx_isr_decode_mailbox()
768 set_bit(DPC_GET_DHCP_IP_ADDR, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
780 DEBUG2(printk("scsi%ld: AEN %04x\n", ha->host_no, in qla4xxx_isr_decode_mailbox()
786 "mbox_sts[3]=%04x\n", ha->host_no, mbox_sts[0], in qla4xxx_isr_decode_mailbox()
789 qla4xxx_update_ipaddr_state(ha, mbox_sts[5], in qla4xxx_isr_decode_mailbox()
796 set_bit(DPC_GET_DHCP_IP_ADDR, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
799 if (is_qla80XX(ha)) in qla4xxx_isr_decode_mailbox()
801 &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
803 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
805 ql4_printk(KERN_INFO, ha, "scsi%ld: %s: ACB in disabling state\n", in qla4xxx_isr_decode_mailbox()
806 ha->host_no, __func__); in qla4xxx_isr_decode_mailbox()
808 complete(&ha->disable_acb_comp); in qla4xxx_isr_decode_mailbox()
809 ql4_printk(KERN_INFO, ha, "scsi%ld: %s: ACB state unconfigured\n", in qla4xxx_isr_decode_mailbox()
810 ha->host_no, __func__); in qla4xxx_isr_decode_mailbox()
818 DEBUG2(ql4_printk(KERN_INFO, ha, "scsi%ld: AEN %04x\n", in qla4xxx_isr_decode_mailbox()
819 ha->host_no, mbox_status)); in qla4xxx_isr_decode_mailbox()
823 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
826 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
836 ha->host_no, mbox_sts[0], in qla4xxx_isr_decode_mailbox()
845 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
852 if (ha->aen_q_count > 0) { in qla4xxx_isr_decode_mailbox()
855 ha->aen_q_count--; in qla4xxx_isr_decode_mailbox()
858 ha->aen_q[ha->aen_in].mbox_sts[i] = in qla4xxx_isr_decode_mailbox()
865 ha->host_no, ha->aen_in, in qla4xxx_isr_decode_mailbox()
871 ha->aen_in++; in qla4xxx_isr_decode_mailbox()
872 if (ha->aen_in == MAX_AEN_ENTRIES) in qla4xxx_isr_decode_mailbox()
873 ha->aen_in = 0; in qla4xxx_isr_decode_mailbox()
876 set_bit(DPC_AEN, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
880 ha->host_no, __func__, in qla4xxx_isr_decode_mailbox()
884 ha->host_no)); in qla4xxx_isr_decode_mailbox()
898 " inserted\n", ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
904 " removed\n", ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
908 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4xxx_isr_decode_mailbox()
909 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
911 ha->host_no, mbox_sts[0], in qla4xxx_isr_decode_mailbox()
918 &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
919 ha->idc_info.request_desc = mbox_sts[1]; in qla4xxx_isr_decode_mailbox()
920 ha->idc_info.info1 = mbox_sts[2]; in qla4xxx_isr_decode_mailbox()
921 ha->idc_info.info2 = mbox_sts[3]; in qla4xxx_isr_decode_mailbox()
922 ha->idc_info.info3 = mbox_sts[4]; in qla4xxx_isr_decode_mailbox()
923 qla4xxx_wake_dpc(ha); in qla4xxx_isr_decode_mailbox()
929 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4xxx_isr_decode_mailbox()
930 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
932 ha->host_no, mbox_sts[0], in qla4xxx_isr_decode_mailbox()
935 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
937 ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
940 if (ha->notify_idc_comp) in qla4xxx_isr_decode_mailbox()
941 complete(&ha->idc_comp); in qla4xxx_isr_decode_mailbox()
945 ha->idc_info.info2 = mbox_sts[3]; in qla4xxx_isr_decode_mailbox()
947 if (qla4_83xx_loopback_in_progress(ha)) { in qla4xxx_isr_decode_mailbox()
948 set_bit(AF_LOOPBACK, &ha->flags); in qla4xxx_isr_decode_mailbox()
950 clear_bit(AF_LOOPBACK, &ha->flags); in qla4xxx_isr_decode_mailbox()
951 if (ha->saved_acb) in qla4xxx_isr_decode_mailbox()
953 &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
955 qla4xxx_wake_dpc(ha); in qla4xxx_isr_decode_mailbox()
960 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
962 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
965 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
967 ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
968 qla4xxx_default_router_changed(ha, mbox_sts); in qla4xxx_isr_decode_mailbox()
972 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
974 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
977 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
979 ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
981 ha->idc_extend_tmo = mbox_sts[1]; in qla4xxx_isr_decode_mailbox()
985 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
987 ha->host_no, mbox_sts[0], in qla4xxx_isr_decode_mailbox()
992 DEBUG2(ql4_printk(KERN_WARNING, ha, in qla4xxx_isr_decode_mailbox()
994 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
1000 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
1002 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
1005 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
1007 ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
1013 ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
1018 ha->host_no, mbox_status)); in qla4xxx_isr_decode_mailbox()
1020 ha->mbox_status[0] = mbox_status; in qla4xxx_isr_decode_mailbox()
1024 void qla4_83xx_interrupt_service_routine(struct scsi_qla_host *ha, in qla4_83xx_interrupt_service_routine() argument
1029 qla4xxx_isr_decode_mailbox(ha, in qla4_83xx_interrupt_service_routine()
1030 readl(&ha->qla4_83xx_reg->mailbox_out[0])); in qla4_83xx_interrupt_service_routine()
1032 writel(0, &ha->qla4_83xx_reg->risc_intr); in qla4_83xx_interrupt_service_routine()
1034 qla4xxx_process_response_queue(ha); in qla4_83xx_interrupt_service_routine()
1038 writel(0, &ha->qla4_83xx_reg->mb_int_mask); in qla4_83xx_interrupt_service_routine()
1049 void qla4_82xx_interrupt_service_routine(struct scsi_qla_host *ha, in qla4_82xx_interrupt_service_routine() argument
1054 test_bit(AF_INIT_DONE, &ha->flags)) in qla4_82xx_interrupt_service_routine()
1055 qla4xxx_process_response_queue(ha); in qla4_82xx_interrupt_service_routine()
1059 qla4xxx_isr_decode_mailbox(ha, in qla4_82xx_interrupt_service_routine()
1060 readl(&ha->qla4_82xx_reg->mailbox_out[0])); in qla4_82xx_interrupt_service_routine()
1063 writel(0, &ha->qla4_82xx_reg->host_int); in qla4_82xx_interrupt_service_routine()
1064 readl(&ha->qla4_82xx_reg->host_int); in qla4_82xx_interrupt_service_routine()
1075 void qla4xxx_interrupt_service_routine(struct scsi_qla_host * ha, in qla4xxx_interrupt_service_routine() argument
1080 qla4xxx_process_response_queue(ha); in qla4xxx_interrupt_service_routine()
1084 qla4xxx_isr_decode_mailbox(ha, in qla4xxx_interrupt_service_routine()
1085 readl(&ha->reg->mailbox[0])); in qla4xxx_interrupt_service_routine()
1089 &ha->reg->ctrl_status); in qla4xxx_interrupt_service_routine()
1090 readl(&ha->reg->ctrl_status); in qla4xxx_interrupt_service_routine()
1100 static void qla4_82xx_spurious_interrupt(struct scsi_qla_host *ha, in qla4_82xx_spurious_interrupt() argument
1106 DEBUG2(ql4_printk(KERN_INFO, ha, "Spurious Interrupt\n")); in qla4_82xx_spurious_interrupt()
1107 if (is_qla8022(ha)) { in qla4_82xx_spurious_interrupt()
1108 writel(0, &ha->qla4_82xx_reg->host_int); in qla4_82xx_spurious_interrupt()
1109 if (!ha->pdev->msi_enabled && !ha->pdev->msix_enabled) in qla4_82xx_spurious_interrupt()
1110 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_mask_reg, in qla4_82xx_spurious_interrupt()
1113 ha->spurious_int_count++; in qla4_82xx_spurious_interrupt()
1123 struct scsi_qla_host *ha; in qla4xxx_intr_handler() local
1128 ha = (struct scsi_qla_host *) dev_id; in qla4xxx_intr_handler()
1129 if (!ha) { in qla4xxx_intr_handler()
1135 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_intr_handler()
1137 ha->isr_count++; in qla4xxx_intr_handler()
1146 if (ha->isp_ops->rd_shdw_rsp_q_in(ha) != in qla4xxx_intr_handler()
1147 ha->response_out) in qla4xxx_intr_handler()
1150 intr_status = readl(&ha->reg->ctrl_status); in qla4xxx_intr_handler()
1155 ha->spurious_int_count++; in qla4xxx_intr_handler()
1161 "Status 0x%04x\n", ha->host_no, in qla4xxx_intr_handler()
1162 readl(isp_port_error_status (ha)))); in qla4xxx_intr_handler()
1171 if ((readl(&ha->reg->ctrl_status) & in qla4xxx_intr_handler()
1174 &ha->reg->ctrl_status); in qla4xxx_intr_handler()
1175 readl(&ha->reg->ctrl_status); in qla4xxx_intr_handler()
1179 &ha->reg->ctrl_status); in qla4xxx_intr_handler()
1180 readl(&ha->reg->ctrl_status); in qla4xxx_intr_handler()
1182 __qla4xxx_disable_intrs(ha); in qla4xxx_intr_handler()
1184 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_intr_handler()
1188 clear_bit(AF_ONLINE, &ha->flags); in qla4xxx_intr_handler()
1189 __qla4xxx_disable_intrs(ha); in qla4xxx_intr_handler()
1192 &ha->reg->ctrl_status); in qla4xxx_intr_handler()
1193 readl(&ha->reg->ctrl_status); in qla4xxx_intr_handler()
1195 if (!test_bit(AF_HA_REMOVAL, &ha->flags)) in qla4xxx_intr_handler()
1196 set_bit(DPC_RESET_HA_INTR, &ha->dpc_flags); in qla4xxx_intr_handler()
1200 ha->isp_ops->interrupt_service_routine(ha, intr_status); in qla4xxx_intr_handler()
1201 ha->total_io_count++; in qla4xxx_intr_handler()
1207 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_intr_handler()
1219 struct scsi_qla_host *ha = dev_id; in qla4_82xx_intr_handler() local
1225 if (unlikely(pci_channel_offline(ha->pdev))) in qla4_82xx_intr_handler()
1228 ha->isr_count++; in qla4_82xx_intr_handler()
1229 status = qla4_82xx_rd_32(ha, ISR_INT_VECTOR); in qla4_82xx_intr_handler()
1230 if (!(status & ha->nx_legacy_intr.int_vec_bit)) in qla4_82xx_intr_handler()
1233 status = qla4_82xx_rd_32(ha, ISR_INT_STATE_REG); in qla4_82xx_intr_handler()
1235 DEBUG7(ql4_printk(KERN_INFO, ha, in qla4_82xx_intr_handler()
1241 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_status_reg, 0xffffffff); in qla4_82xx_intr_handler()
1244 qla4_82xx_rd_32(ha, ISR_INT_VECTOR); in qla4_82xx_intr_handler()
1245 qla4_82xx_rd_32(ha, ISR_INT_VECTOR); in qla4_82xx_intr_handler()
1247 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4_82xx_intr_handler()
1249 if (!(readl(&ha->qla4_82xx_reg->host_int) & in qla4_82xx_intr_handler()
1251 qla4_82xx_spurious_interrupt(ha, reqs_count); in qla4_82xx_intr_handler()
1254 intr_status = readl(&ha->qla4_82xx_reg->host_status); in qla4_82xx_intr_handler()
1257 qla4_82xx_spurious_interrupt(ha, reqs_count); in qla4_82xx_intr_handler()
1261 ha->isp_ops->interrupt_service_routine(ha, intr_status); in qla4_82xx_intr_handler()
1264 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_mask_reg, 0xfbff); in qla4_82xx_intr_handler()
1270 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4_82xx_intr_handler()
1285 struct scsi_qla_host *ha = dev_id; in qla4_83xx_intr_handler() local
1289 ha->isr_count++; in qla4_83xx_intr_handler()
1290 leg_int_ptr = readl(&ha->qla4_83xx_reg->leg_int_ptr); in qla4_83xx_intr_handler()
1294 DEBUG7(ql4_printk(KERN_ERR, ha, in qla4_83xx_intr_handler()
1301 if ((leg_int_ptr & PF_BITS_MASK) != ha->pf_bit) { in qla4_83xx_intr_handler()
1302 DEBUG7(ql4_printk(KERN_ERR, ha, in qla4_83xx_intr_handler()
1305 ha->pf_bit)); in qla4_83xx_intr_handler()
1313 writel(0, &ha->qla4_83xx_reg->leg_int_trig); in qla4_83xx_intr_handler()
1315 leg_int_ptr = readl(&ha->qla4_83xx_reg->leg_int_ptr); in qla4_83xx_intr_handler()
1316 if ((leg_int_ptr & PF_BITS_MASK) != ha->pf_bit) in qla4_83xx_intr_handler()
1320 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4_83xx_intr_handler()
1321 leg_int_ptr = readl(&ha->qla4_83xx_reg->risc_intr); in qla4_83xx_intr_handler()
1322 ha->isp_ops->interrupt_service_routine(ha, leg_int_ptr); in qla4_83xx_intr_handler()
1323 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4_83xx_intr_handler()
1331 struct scsi_qla_host *ha; in qla4_8xxx_msi_handler() local
1333 ha = (struct scsi_qla_host *) dev_id; in qla4_8xxx_msi_handler()
1334 if (!ha) { in qla4_8xxx_msi_handler()
1340 ha->isr_count++; in qla4_8xxx_msi_handler()
1342 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_status_reg, 0xffffffff); in qla4_8xxx_msi_handler()
1345 qla4_82xx_rd_32(ha, ISR_INT_VECTOR); in qla4_8xxx_msi_handler()
1346 qla4_82xx_rd_32(ha, ISR_INT_VECTOR); in qla4_8xxx_msi_handler()
1353 struct scsi_qla_host *ha = dev_id; in qla4_83xx_mailbox_intr_handler() local
1357 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4_83xx_mailbox_intr_handler()
1359 ival = readl(&ha->qla4_83xx_reg->risc_intr); in qla4_83xx_mailbox_intr_handler()
1361 ql4_printk(KERN_INFO, ha, in qla4_83xx_mailbox_intr_handler()
1364 ival = readl(&ha->qla4_83xx_reg->mb_int_mask); in qla4_83xx_mailbox_intr_handler()
1366 writel(ival, &ha->qla4_83xx_reg->mb_int_mask); in qla4_83xx_mailbox_intr_handler()
1370 qla4xxx_isr_decode_mailbox(ha, in qla4_83xx_mailbox_intr_handler()
1371 readl(&ha->qla4_83xx_reg->mailbox_out[0])); in qla4_83xx_mailbox_intr_handler()
1372 writel(0, &ha->qla4_83xx_reg->risc_intr); in qla4_83xx_mailbox_intr_handler()
1373 ival = readl(&ha->qla4_83xx_reg->mb_int_mask); in qla4_83xx_mailbox_intr_handler()
1375 writel(ival, &ha->qla4_83xx_reg->mb_int_mask); in qla4_83xx_mailbox_intr_handler()
1376 ha->isr_count++; in qla4_83xx_mailbox_intr_handler()
1378 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4_83xx_mailbox_intr_handler()
1393 struct scsi_qla_host *ha = dev_id; in qla4_8xxx_default_intr_handler() local
1398 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_default_intr_handler()
1401 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4_8xxx_default_intr_handler()
1403 if (!(readl(&ha->qla4_82xx_reg->host_int) & in qla4_8xxx_default_intr_handler()
1405 qla4_82xx_spurious_interrupt(ha, reqs_count); in qla4_8xxx_default_intr_handler()
1409 intr_status = readl(&ha->qla4_82xx_reg->host_status); in qla4_8xxx_default_intr_handler()
1412 qla4_82xx_spurious_interrupt(ha, reqs_count); in qla4_8xxx_default_intr_handler()
1416 ha->isp_ops->interrupt_service_routine(ha, intr_status); in qla4_8xxx_default_intr_handler()
1421 ha->isr_count++; in qla4_8xxx_default_intr_handler()
1422 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4_8xxx_default_intr_handler()
1430 struct scsi_qla_host *ha = dev_id; in qla4_8xxx_msix_rsp_q() local
1435 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4_8xxx_msix_rsp_q()
1436 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_msix_rsp_q()
1437 ival = readl(&ha->qla4_83xx_reg->iocb_int_mask); in qla4_8xxx_msix_rsp_q()
1439 ql4_printk(KERN_INFO, ha, "%s: It is a spurious iocb interrupt!\n", in qla4_8xxx_msix_rsp_q()
1443 qla4xxx_process_response_queue(ha); in qla4_8xxx_msix_rsp_q()
1444 writel(0, &ha->qla4_83xx_reg->iocb_int_mask); in qla4_8xxx_msix_rsp_q()
1446 intr_status = readl(&ha->qla4_82xx_reg->host_status); in qla4_8xxx_msix_rsp_q()
1448 qla4xxx_process_response_queue(ha); in qla4_8xxx_msix_rsp_q()
1449 writel(0, &ha->qla4_82xx_reg->host_int); in qla4_8xxx_msix_rsp_q()
1451 ql4_printk(KERN_INFO, ha, "%s: spurious iocb interrupt...\n", in qla4_8xxx_msix_rsp_q()
1456 ha->isr_count++; in qla4_8xxx_msix_rsp_q()
1458 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4_8xxx_msix_rsp_q()
1473 void qla4xxx_process_aen(struct scsi_qla_host * ha, uint8_t process_aen) in qla4xxx_process_aen() argument
1480 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_process_aen()
1481 while (ha->aen_out != ha->aen_in) { in qla4xxx_process_aen()
1482 aen = &ha->aen_q[ha->aen_out]; in qla4xxx_process_aen()
1487 ha->aen_q_count++; in qla4xxx_process_aen()
1488 ha->aen_out++; in qla4xxx_process_aen()
1490 if (ha->aen_out == MAX_AEN_ENTRIES) in qla4xxx_process_aen()
1491 ha->aen_out = 0; in qla4xxx_process_aen()
1493 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_process_aen()
1496 " mbx3=0x%08x mbx4=0x%08x\n", ha->host_no, in qla4xxx_process_aen()
1497 (ha->aen_out ? (ha->aen_out-1): (MAX_AEN_ENTRIES-1)), in qla4xxx_process_aen()
1507 ha->host_no, ha->aen_out, in qla4xxx_process_aen()
1515 qla4xxx_process_ddb_changed(ha, in qla4xxx_process_aen()
1521 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_process_aen()
1523 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_process_aen()
1526 int qla4xxx_request_irqs(struct scsi_qla_host *ha) in qla4xxx_request_irqs() argument
1531 if (is_qla40XX(ha)) in qla4xxx_request_irqs()
1536 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4xxx_request_irqs()
1537 …ql4_printk(KERN_INFO, ha, "%s: MSI Interrupts not supported for ISP%04x, Falling back-to INTx mode… in qla4xxx_request_irqs()
1538 __func__, ha->pdev->device); in qla4xxx_request_irqs()
1548 ret = qla4_8xxx_enable_msix(ha); in qla4xxx_request_irqs()
1550 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_request_irqs()
1551 "MSI-X: Enabled (0x%X).\n", ha->revision_id)); in qla4xxx_request_irqs()
1554 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4xxx_request_irqs()
1555 ql4_printk(KERN_INFO, ha, "%s: ISP%04x: MSI-X: Falling back-to INTx mode. ret = %d\n", in qla4xxx_request_irqs()
1556 __func__, ha->pdev->device, ret); in qla4xxx_request_irqs()
1561 ql4_printk(KERN_WARNING, ha, in qla4xxx_request_irqs()
1566 ret = pci_alloc_irq_vectors(ha->pdev, 1, 1, PCI_IRQ_MSI); in qla4xxx_request_irqs()
1568 ret = request_irq(ha->pdev->irq, qla4_8xxx_msi_handler, in qla4xxx_request_irqs()
1569 0, DRIVER_NAME, ha); in qla4xxx_request_irqs()
1571 DEBUG2(ql4_printk(KERN_INFO, ha, "MSI: Enabled.\n")); in qla4xxx_request_irqs()
1574 ql4_printk(KERN_WARNING, ha, in qla4xxx_request_irqs()
1576 "already in use.\n", ha->pdev->irq); in qla4xxx_request_irqs()
1577 pci_free_irq_vectors(ha->pdev); in qla4xxx_request_irqs()
1582 if (is_qla8022(ha)) { in qla4xxx_request_irqs()
1583 ql4_printk(KERN_WARNING, ha, "%s: ISP82xx Legacy interrupt not supported\n", in qla4xxx_request_irqs()
1589 ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler, in qla4xxx_request_irqs()
1590 IRQF_SHARED, DRIVER_NAME, ha); in qla4xxx_request_irqs()
1592 DEBUG2(ql4_printk(KERN_INFO, ha, "INTx: Enabled.\n")); in qla4xxx_request_irqs()
1596 ql4_printk(KERN_WARNING, ha, in qla4xxx_request_irqs()
1598 " use.\n", ha->pdev->irq); in qla4xxx_request_irqs()
1603 set_bit(AF_IRQ_ATTACHED, &ha->flags); in qla4xxx_request_irqs()
1604 ha->host->irq = ha->pdev->irq; in qla4xxx_request_irqs()
1605 ql4_printk(KERN_INFO, ha, "%s: irq %d attached\n", in qla4xxx_request_irqs()
1606 __func__, ha->pdev->irq); in qla4xxx_request_irqs()
1612 void qla4xxx_free_irqs(struct scsi_qla_host *ha) in qla4xxx_free_irqs() argument
1614 if (!test_and_clear_bit(AF_IRQ_ATTACHED, &ha->flags)) in qla4xxx_free_irqs()
1617 if (ha->pdev->msix_enabled) in qla4xxx_free_irqs()
1618 free_irq(pci_irq_vector(ha->pdev, 1), ha); in qla4xxx_free_irqs()
1619 free_irq(pci_irq_vector(ha->pdev, 0), ha); in qla4xxx_free_irqs()
1620 pci_free_irq_vectors(ha->pdev); in qla4xxx_free_irqs()