Lines Matching refs:ha

19 static void qla4xxx_copy_sense(struct scsi_qla_host *ha,  in qla4xxx_copy_sense()  argument
29 DEBUG2(ql4_printk(KERN_INFO, ha, "scsi%ld:%d:%d:%llu: %s:" in qla4xxx_copy_sense()
30 " sense len 0\n", ha->host_no, in qla4xxx_copy_sense()
33 ha->status_srb = NULL; in qla4xxx_copy_sense()
47 "ASL= %02x, ASC/ASCQ = %02x/%02x\n", ha->host_no, in qla4xxx_copy_sense()
62 ha->status_srb = srb; in qla4xxx_copy_sense()
64 ha->status_srb = NULL; in qla4xxx_copy_sense()
75 qla4xxx_status_cont_entry(struct scsi_qla_host *ha, in qla4xxx_status_cont_entry() argument
78 struct srb *srb = ha->status_srb; in qla4xxx_status_cont_entry()
88 "back to OS srb=%p srb->state:%d\n", ha->host_no, in qla4xxx_status_cont_entry()
90 ha->status_srb = NULL; in qla4xxx_status_cont_entry()
106 ha->status_srb = NULL; in qla4xxx_status_cont_entry()
115 static void qla4xxx_status_entry(struct scsi_qla_host *ha, in qla4xxx_status_entry() argument
124 srb = qla4xxx_del_from_active_array(ha, le32_to_cpu(sts_entry->handle)); in qla4xxx_status_entry()
126 ql4_printk(KERN_WARNING, ha, "%s invalid status entry: " in qla4xxx_status_entry()
129 if (is_qla80XX(ha)) in qla4xxx_status_entry()
130 set_bit(DPC_RESET_HA_FW_CONTEXT, &ha->dpc_flags); in qla4xxx_status_entry()
132 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_status_entry()
140 ha->host_no, __func__, sts_entry->handle, in qla4xxx_status_entry()
142 ql4_printk(KERN_WARNING, ha, "Command is NULL:" in qla4xxx_status_entry()
175 "residual = 0x%x\n", ha->host_no, in qla4xxx_status_entry()
190 qla4xxx_copy_sense(ha, sts_entry, srb); in qla4xxx_status_entry()
201 ha->host_no, cmd->device->channel, in qla4xxx_status_entry()
209 ha->host_no, cmd->device->channel, in qla4xxx_status_entry()
217 ha->host_no, cmd->device->channel, in qla4xxx_status_entry()
236 ha->host_no, in qla4xxx_status_entry()
261 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_status_entry()
263 ha->host_no, in qla4xxx_status_entry()
293 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_status_entry()
295 ha->host_no, in qla4xxx_status_entry()
310 qla4xxx_copy_sense(ha, sts_entry, srb); in qla4xxx_status_entry()
317 "state: 0x%x\n", ha->host_no, in qla4xxx_status_entry()
338 " iResp=%02x\n", ha->host_no, cmd->device->id, in qla4xxx_status_entry()
355 if (ha->status_srb == NULL) in qla4xxx_status_entry()
364 static void qla4xxx_passthru_status_entry(struct scsi_qla_host *ha, in qla4xxx_passthru_status_entry() argument
378 ddb_entry = qla4xxx_lookup_ddb_by_fw_index(ha, fw_ddb_index); in qla4xxx_passthru_status_entry()
381 ql4_printk(KERN_ERR, ha, "%s: Invalid target index = 0x%x\n", in qla4xxx_passthru_status_entry()
393 ql4_printk(KERN_ERR, ha, "%s: Task is NULL\n", __func__); in qla4xxx_passthru_status_entry()
399 ha->iocb_cnt -= task_data->iocb_req_cnt; in qla4xxx_passthru_status_entry()
400 queue_work(ha->task_wq, &task_data->task_work); in qla4xxx_passthru_status_entry()
403 static struct mrb *qla4xxx_del_mrb_from_active_array(struct scsi_qla_host *ha, in qla4xxx_del_mrb_from_active_array() argument
412 mrb = ha->active_mrb_array[index]; in qla4xxx_del_mrb_from_active_array()
413 ha->active_mrb_array[index] = NULL; in qla4xxx_del_mrb_from_active_array()
418 ha->iocb_cnt -= mrb->iocb_cnt; in qla4xxx_del_mrb_from_active_array()
423 static void qla4xxx_mbox_status_entry(struct scsi_qla_host *ha, in qla4xxx_mbox_status_entry() argument
430 mrb = qla4xxx_del_mrb_from_active_array(ha, in qla4xxx_mbox_status_entry()
434 ql4_printk(KERN_WARNING, ha, "%s: mrb[%d] is null\n", __func__, in qla4xxx_mbox_status_entry()
441 DEBUG2(ql4_printk(KERN_INFO, ha, "%s: mbox_cmd = 0x%x, " in qla4xxx_mbox_status_entry()
454 qla4xxx_post_ping_evt_work(ha, status, mrb->pid, data_size, in qla4xxx_mbox_status_entry()
459 DEBUG2(ql4_printk(KERN_WARNING, ha, "%s: invalid mbox_cmd = " in qla4xxx_mbox_status_entry()
474 void qla4xxx_process_response_queue(struct scsi_qla_host *ha) in qla4xxx_process_response_queue() argument
481 while ((ha->response_ptr->signature != RESPONSE_PROCESSED)) { in qla4xxx_process_response_queue()
482 sts_entry = (struct status_entry *) ha->response_ptr; in qla4xxx_process_response_queue()
486 if (ha->response_out == (RESPONSE_QUEUE_DEPTH - 1)) { in qla4xxx_process_response_queue()
487 ha->response_out = 0; in qla4xxx_process_response_queue()
488 ha->response_ptr = ha->response_ring; in qla4xxx_process_response_queue()
490 ha->response_out++; in qla4xxx_process_response_queue()
491 ha->response_ptr++; in qla4xxx_process_response_queue()
498 qla4xxx_status_entry(ha, sts_entry); in qla4xxx_process_response_queue()
503 qla4xxx_passthru_status_entry(ha, in qla4xxx_process_response_queue()
506 ql4_printk(KERN_ERR, ha, in qla4xxx_process_response_queue()
513 qla4xxx_status_cont_entry(ha, in qla4xxx_process_response_queue()
522 srb = qla4xxx_del_from_active_array(ha, in qla4xxx_process_response_queue()
529 "srb %p\n", ha->host_no, __func__, srb)); in qla4xxx_process_response_queue()
540 "ignoring\n", ha->host_no, __func__)); in qla4xxx_process_response_queue()
544 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_process_response_queue()
546 qla4xxx_mbox_status_entry(ha, in qla4xxx_process_response_queue()
556 "response queue \n", ha->host_no, in qla4xxx_process_response_queue()
568 ha->isp_ops->complete_iocb(ha); in qla4xxx_process_response_queue()
574 ha->host_no, __func__, srb, sts_entry->hdr.entryType, in qla4xxx_process_response_queue()
578 ha->isp_ops->complete_iocb(ha); in qla4xxx_process_response_queue()
579 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_process_response_queue()
587 static int qla4_83xx_loopback_in_progress(struct scsi_qla_host *ha) in qla4_83xx_loopback_in_progress() argument
591 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_83xx_loopback_in_progress()
592 if ((ha->idc_info.info2 & ENABLE_INTERNAL_LOOPBACK) || in qla4_83xx_loopback_in_progress()
593 (ha->idc_info.info2 & ENABLE_EXTERNAL_LOOPBACK)) { in qla4_83xx_loopback_in_progress()
594 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_83xx_loopback_in_progress()
599 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4_83xx_loopback_in_progress()
609 static void qla4xxx_update_ipaddr_state(struct scsi_qla_host *ha, in qla4xxx_update_ipaddr_state() argument
621 ha->ip_config.ipv4_addr_state = ipaddr_state; in qla4xxx_update_ipaddr_state()
624 ha->ip_config.ipv6_link_local_state = ipaddr_state; in qla4xxx_update_ipaddr_state()
627 ha->ip_config.ipv6_addr0_state = ipaddr_state; in qla4xxx_update_ipaddr_state()
630 ha->ip_config.ipv6_addr1_state = ipaddr_state; in qla4xxx_update_ipaddr_state()
633 ql4_printk(KERN_INFO, ha, "%s: Invalid IPADDR index %d\n", in qla4xxx_update_ipaddr_state()
638 static void qla4xxx_default_router_changed(struct scsi_qla_host *ha, in qla4xxx_default_router_changed() argument
641 memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[0], in qla4xxx_default_router_changed()
643 memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[1], in qla4xxx_default_router_changed()
645 memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[2], in qla4xxx_default_router_changed()
647 memcpy(&ha->ip_config.ipv6_default_router_addr.s6_addr32[3], in qla4xxx_default_router_changed()
659 static void qla4xxx_isr_decode_mailbox(struct scsi_qla_host * ha, in qla4xxx_isr_decode_mailbox() argument
667 if (is_qla8032(ha) || is_qla8042(ha)) in qla4xxx_isr_decode_mailbox()
668 mailbox_out = &ha->qla4_83xx_reg->mailbox_out[0]; in qla4xxx_isr_decode_mailbox()
669 else if (is_qla8022(ha)) in qla4xxx_isr_decode_mailbox()
670 mailbox_out = &ha->qla4_82xx_reg->mailbox_out[0]; in qla4xxx_isr_decode_mailbox()
672 mailbox_out = &ha->reg->mailbox[0]; in qla4xxx_isr_decode_mailbox()
677 ha->mbox_status[0] = mbox_status; in qla4xxx_isr_decode_mailbox()
679 if (test_bit(AF_MBOX_COMMAND, &ha->flags)) { in qla4xxx_isr_decode_mailbox()
684 for (i = 0; i < ha->mbox_status_count; i++) in qla4xxx_isr_decode_mailbox()
685 ha->mbox_status[i] = readl(&mailbox_out[i]); in qla4xxx_isr_decode_mailbox()
687 set_bit(AF_MBOX_COMMAND_DONE, &ha->flags); in qla4xxx_isr_decode_mailbox()
689 if (test_bit(AF_MBOX_COMMAND_NOPOLL, &ha->flags)) in qla4xxx_isr_decode_mailbox()
690 complete(&ha->mbx_intr_comp); in qla4xxx_isr_decode_mailbox()
698 if (ha->aen_log.count < MAX_AEN_ENTRIES) { in qla4xxx_isr_decode_mailbox()
700 ha->aen_log.entry[ha->aen_log.count].mbox_sts[i] = in qla4xxx_isr_decode_mailbox()
702 ha->aen_log.count++; in qla4xxx_isr_decode_mailbox()
707 ql4_printk(KERN_INFO, ha, "%s: System Err\n", __func__); in qla4xxx_isr_decode_mailbox()
708 qla4xxx_dump_registers(ha); in qla4xxx_isr_decode_mailbox()
710 if ((is_qla8022(ha) && ql4xdontresethba) || in qla4xxx_isr_decode_mailbox()
711 ((is_qla8032(ha) || is_qla8042(ha)) && in qla4xxx_isr_decode_mailbox()
712 qla4_83xx_idc_dontreset(ha))) { in qla4xxx_isr_decode_mailbox()
714 ha->host_no, __func__)); in qla4xxx_isr_decode_mailbox()
716 set_bit(AF_GET_CRASH_RECORD, &ha->flags); in qla4xxx_isr_decode_mailbox()
717 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
727 "Reset HA\n", ha->host_no, mbox_status)); in qla4xxx_isr_decode_mailbox()
728 if (is_qla80XX(ha)) in qla4xxx_isr_decode_mailbox()
730 &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
732 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
736 set_bit(AF_LINK_UP, &ha->flags); in qla4xxx_isr_decode_mailbox()
737 if (test_bit(AF_INIT_DONE, &ha->flags)) in qla4xxx_isr_decode_mailbox()
738 set_bit(DPC_LINK_CHANGED, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
740 ql4_printk(KERN_INFO, ha, "%s: LINK UP\n", __func__); in qla4xxx_isr_decode_mailbox()
741 qla4xxx_post_aen_work(ha, ISCSI_EVENT_LINKUP, in qla4xxx_isr_decode_mailbox()
745 if ((is_qla8032(ha) || is_qla8042(ha)) && in qla4xxx_isr_decode_mailbox()
746 ha->notify_link_up_comp) in qla4xxx_isr_decode_mailbox()
747 complete(&ha->link_up_comp); in qla4xxx_isr_decode_mailbox()
752 clear_bit(AF_LINK_UP, &ha->flags); in qla4xxx_isr_decode_mailbox()
753 if (test_bit(AF_INIT_DONE, &ha->flags)) { in qla4xxx_isr_decode_mailbox()
754 set_bit(DPC_LINK_CHANGED, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
755 qla4xxx_wake_dpc(ha); in qla4xxx_isr_decode_mailbox()
758 ql4_printk(KERN_INFO, ha, "%s: LINK DOWN\n", __func__); in qla4xxx_isr_decode_mailbox()
759 qla4xxx_post_aen_work(ha, ISCSI_EVENT_LINKDOWN, in qla4xxx_isr_decode_mailbox()
765 ha->seconds_since_last_heartbeat = 0; in qla4xxx_isr_decode_mailbox()
770 "ACQUIRED\n", ha->host_no, mbox_status)); in qla4xxx_isr_decode_mailbox()
771 set_bit(DPC_GET_DHCP_IP_ADDR, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
783 DEBUG2(printk("scsi%ld: AEN %04x\n", ha->host_no, in qla4xxx_isr_decode_mailbox()
789 "mbox_sts[3]=%04x\n", ha->host_no, mbox_sts[0], in qla4xxx_isr_decode_mailbox()
792 qla4xxx_update_ipaddr_state(ha, mbox_sts[5], in qla4xxx_isr_decode_mailbox()
799 set_bit(DPC_GET_DHCP_IP_ADDR, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
802 if (is_qla80XX(ha)) in qla4xxx_isr_decode_mailbox()
804 &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
806 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
808 ql4_printk(KERN_INFO, ha, "scsi%ld: %s: ACB in disabling state\n", in qla4xxx_isr_decode_mailbox()
809 ha->host_no, __func__); in qla4xxx_isr_decode_mailbox()
811 complete(&ha->disable_acb_comp); in qla4xxx_isr_decode_mailbox()
812 ql4_printk(KERN_INFO, ha, "scsi%ld: %s: ACB state unconfigured\n", in qla4xxx_isr_decode_mailbox()
813 ha->host_no, __func__); in qla4xxx_isr_decode_mailbox()
821 DEBUG2(ql4_printk(KERN_INFO, ha, "scsi%ld: AEN %04x\n", in qla4xxx_isr_decode_mailbox()
822 ha->host_no, mbox_status)); in qla4xxx_isr_decode_mailbox()
826 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
829 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
839 ha->host_no, mbox_sts[0], in qla4xxx_isr_decode_mailbox()
848 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
855 if (ha->aen_q_count > 0) { in qla4xxx_isr_decode_mailbox()
858 ha->aen_q_count--; in qla4xxx_isr_decode_mailbox()
861 ha->aen_q[ha->aen_in].mbox_sts[i] = in qla4xxx_isr_decode_mailbox()
868 ha->host_no, ha->aen_in, in qla4xxx_isr_decode_mailbox()
874 ha->aen_in++; in qla4xxx_isr_decode_mailbox()
875 if (ha->aen_in == MAX_AEN_ENTRIES) in qla4xxx_isr_decode_mailbox()
876 ha->aen_in = 0; in qla4xxx_isr_decode_mailbox()
879 set_bit(DPC_AEN, &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
883 ha->host_no, __func__, in qla4xxx_isr_decode_mailbox()
887 ha->host_no)); in qla4xxx_isr_decode_mailbox()
901 " inserted\n", ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
907 " removed\n", ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
911 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4xxx_isr_decode_mailbox()
912 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
914 ha->host_no, mbox_sts[0], in qla4xxx_isr_decode_mailbox()
921 &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
922 ha->idc_info.request_desc = mbox_sts[1]; in qla4xxx_isr_decode_mailbox()
923 ha->idc_info.info1 = mbox_sts[2]; in qla4xxx_isr_decode_mailbox()
924 ha->idc_info.info2 = mbox_sts[3]; in qla4xxx_isr_decode_mailbox()
925 ha->idc_info.info3 = mbox_sts[4]; in qla4xxx_isr_decode_mailbox()
926 qla4xxx_wake_dpc(ha); in qla4xxx_isr_decode_mailbox()
932 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4xxx_isr_decode_mailbox()
933 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
935 ha->host_no, mbox_sts[0], in qla4xxx_isr_decode_mailbox()
938 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
940 ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
943 if (ha->notify_idc_comp) in qla4xxx_isr_decode_mailbox()
944 complete(&ha->idc_comp); in qla4xxx_isr_decode_mailbox()
948 ha->idc_info.info2 = mbox_sts[3]; in qla4xxx_isr_decode_mailbox()
950 if (qla4_83xx_loopback_in_progress(ha)) { in qla4xxx_isr_decode_mailbox()
951 set_bit(AF_LOOPBACK, &ha->flags); in qla4xxx_isr_decode_mailbox()
953 clear_bit(AF_LOOPBACK, &ha->flags); in qla4xxx_isr_decode_mailbox()
954 if (ha->saved_acb) in qla4xxx_isr_decode_mailbox()
956 &ha->dpc_flags); in qla4xxx_isr_decode_mailbox()
958 qla4xxx_wake_dpc(ha); in qla4xxx_isr_decode_mailbox()
963 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
965 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
968 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
970 ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
971 qla4xxx_default_router_changed(ha, mbox_sts); in qla4xxx_isr_decode_mailbox()
975 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
977 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
980 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
982 ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
984 ha->idc_extend_tmo = mbox_sts[1]; in qla4xxx_isr_decode_mailbox()
988 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
990 ha->host_no, mbox_sts[0], in qla4xxx_isr_decode_mailbox()
995 DEBUG2(ql4_printk(KERN_WARNING, ha, in qla4xxx_isr_decode_mailbox()
997 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
1003 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
1005 ha->host_no, mbox_sts[0], mbox_sts[1], in qla4xxx_isr_decode_mailbox()
1008 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_isr_decode_mailbox()
1010 ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
1016 ha->host_no, mbox_sts[0])); in qla4xxx_isr_decode_mailbox()
1021 ha->host_no, mbox_status)); in qla4xxx_isr_decode_mailbox()
1023 ha->mbox_status[0] = mbox_status; in qla4xxx_isr_decode_mailbox()
1027 void qla4_83xx_interrupt_service_routine(struct scsi_qla_host *ha, in qla4_83xx_interrupt_service_routine() argument
1032 qla4xxx_isr_decode_mailbox(ha, in qla4_83xx_interrupt_service_routine()
1033 readl(&ha->qla4_83xx_reg->mailbox_out[0])); in qla4_83xx_interrupt_service_routine()
1035 writel(0, &ha->qla4_83xx_reg->risc_intr); in qla4_83xx_interrupt_service_routine()
1037 qla4xxx_process_response_queue(ha); in qla4_83xx_interrupt_service_routine()
1041 writel(0, &ha->qla4_83xx_reg->mb_int_mask); in qla4_83xx_interrupt_service_routine()
1051 void qla4_82xx_interrupt_service_routine(struct scsi_qla_host *ha, in qla4_82xx_interrupt_service_routine() argument
1056 test_bit(AF_INIT_DONE, &ha->flags)) in qla4_82xx_interrupt_service_routine()
1057 qla4xxx_process_response_queue(ha); in qla4_82xx_interrupt_service_routine()
1061 qla4xxx_isr_decode_mailbox(ha, in qla4_82xx_interrupt_service_routine()
1062 readl(&ha->qla4_82xx_reg->mailbox_out[0])); in qla4_82xx_interrupt_service_routine()
1065 writel(0, &ha->qla4_82xx_reg->host_int); in qla4_82xx_interrupt_service_routine()
1066 readl(&ha->qla4_82xx_reg->host_int); in qla4_82xx_interrupt_service_routine()
1076 void qla4xxx_interrupt_service_routine(struct scsi_qla_host * ha, in qla4xxx_interrupt_service_routine() argument
1081 qla4xxx_process_response_queue(ha); in qla4xxx_interrupt_service_routine()
1085 qla4xxx_isr_decode_mailbox(ha, in qla4xxx_interrupt_service_routine()
1086 readl(&ha->reg->mailbox[0])); in qla4xxx_interrupt_service_routine()
1090 &ha->reg->ctrl_status); in qla4xxx_interrupt_service_routine()
1091 readl(&ha->reg->ctrl_status); in qla4xxx_interrupt_service_routine()
1101 static void qla4_82xx_spurious_interrupt(struct scsi_qla_host *ha, in qla4_82xx_spurious_interrupt() argument
1107 DEBUG2(ql4_printk(KERN_INFO, ha, "Spurious Interrupt\n")); in qla4_82xx_spurious_interrupt()
1108 if (is_qla8022(ha)) { in qla4_82xx_spurious_interrupt()
1109 writel(0, &ha->qla4_82xx_reg->host_int); in qla4_82xx_spurious_interrupt()
1110 if (test_bit(AF_INTx_ENABLED, &ha->flags)) in qla4_82xx_spurious_interrupt()
1111 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_mask_reg, in qla4_82xx_spurious_interrupt()
1114 ha->spurious_int_count++; in qla4_82xx_spurious_interrupt()
1124 struct scsi_qla_host *ha; in qla4xxx_intr_handler() local
1129 ha = (struct scsi_qla_host *) dev_id; in qla4xxx_intr_handler()
1130 if (!ha) { in qla4xxx_intr_handler()
1136 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_intr_handler()
1138 ha->isr_count++; in qla4xxx_intr_handler()
1147 if (ha->isp_ops->rd_shdw_rsp_q_in(ha) != in qla4xxx_intr_handler()
1148 ha->response_out) in qla4xxx_intr_handler()
1151 intr_status = readl(&ha->reg->ctrl_status); in qla4xxx_intr_handler()
1156 ha->spurious_int_count++; in qla4xxx_intr_handler()
1162 "Status 0x%04x\n", ha->host_no, in qla4xxx_intr_handler()
1163 readl(isp_port_error_status (ha)))); in qla4xxx_intr_handler()
1172 if ((readl(&ha->reg->ctrl_status) & in qla4xxx_intr_handler()
1175 &ha->reg->ctrl_status); in qla4xxx_intr_handler()
1176 readl(&ha->reg->ctrl_status); in qla4xxx_intr_handler()
1180 &ha->reg->ctrl_status); in qla4xxx_intr_handler()
1181 readl(&ha->reg->ctrl_status); in qla4xxx_intr_handler()
1183 __qla4xxx_disable_intrs(ha); in qla4xxx_intr_handler()
1185 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_intr_handler()
1189 clear_bit(AF_ONLINE, &ha->flags); in qla4xxx_intr_handler()
1190 __qla4xxx_disable_intrs(ha); in qla4xxx_intr_handler()
1193 &ha->reg->ctrl_status); in qla4xxx_intr_handler()
1194 readl(&ha->reg->ctrl_status); in qla4xxx_intr_handler()
1196 if (!test_bit(AF_HA_REMOVAL, &ha->flags)) in qla4xxx_intr_handler()
1197 set_bit(DPC_RESET_HA_INTR, &ha->dpc_flags); in qla4xxx_intr_handler()
1201 ha->isp_ops->interrupt_service_routine(ha, intr_status); in qla4xxx_intr_handler()
1202 ha->total_io_count++; in qla4xxx_intr_handler()
1208 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_intr_handler()
1220 struct scsi_qla_host *ha = dev_id; in qla4_82xx_intr_handler() local
1226 if (unlikely(pci_channel_offline(ha->pdev))) in qla4_82xx_intr_handler()
1229 ha->isr_count++; in qla4_82xx_intr_handler()
1230 status = qla4_82xx_rd_32(ha, ISR_INT_VECTOR); in qla4_82xx_intr_handler()
1231 if (!(status & ha->nx_legacy_intr.int_vec_bit)) in qla4_82xx_intr_handler()
1234 status = qla4_82xx_rd_32(ha, ISR_INT_STATE_REG); in qla4_82xx_intr_handler()
1236 DEBUG7(ql4_printk(KERN_INFO, ha, in qla4_82xx_intr_handler()
1242 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_status_reg, 0xffffffff); in qla4_82xx_intr_handler()
1245 qla4_82xx_rd_32(ha, ISR_INT_VECTOR); in qla4_82xx_intr_handler()
1246 qla4_82xx_rd_32(ha, ISR_INT_VECTOR); in qla4_82xx_intr_handler()
1248 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4_82xx_intr_handler()
1250 if (!(readl(&ha->qla4_82xx_reg->host_int) & in qla4_82xx_intr_handler()
1252 qla4_82xx_spurious_interrupt(ha, reqs_count); in qla4_82xx_intr_handler()
1255 intr_status = readl(&ha->qla4_82xx_reg->host_status); in qla4_82xx_intr_handler()
1258 qla4_82xx_spurious_interrupt(ha, reqs_count); in qla4_82xx_intr_handler()
1262 ha->isp_ops->interrupt_service_routine(ha, intr_status); in qla4_82xx_intr_handler()
1265 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_mask_reg, 0xfbff); in qla4_82xx_intr_handler()
1271 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4_82xx_intr_handler()
1286 struct scsi_qla_host *ha = dev_id; in qla4_83xx_intr_handler() local
1290 ha->isr_count++; in qla4_83xx_intr_handler()
1291 leg_int_ptr = readl(&ha->qla4_83xx_reg->leg_int_ptr); in qla4_83xx_intr_handler()
1295 DEBUG7(ql4_printk(KERN_ERR, ha, in qla4_83xx_intr_handler()
1302 if ((leg_int_ptr & PF_BITS_MASK) != ha->pf_bit) { in qla4_83xx_intr_handler()
1303 DEBUG7(ql4_printk(KERN_ERR, ha, in qla4_83xx_intr_handler()
1306 ha->pf_bit)); in qla4_83xx_intr_handler()
1314 writel(0, &ha->qla4_83xx_reg->leg_int_trig); in qla4_83xx_intr_handler()
1316 leg_int_ptr = readl(&ha->qla4_83xx_reg->leg_int_ptr); in qla4_83xx_intr_handler()
1317 if ((leg_int_ptr & PF_BITS_MASK) != ha->pf_bit) in qla4_83xx_intr_handler()
1321 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4_83xx_intr_handler()
1322 leg_int_ptr = readl(&ha->qla4_83xx_reg->risc_intr); in qla4_83xx_intr_handler()
1323 ha->isp_ops->interrupt_service_routine(ha, leg_int_ptr); in qla4_83xx_intr_handler()
1324 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4_83xx_intr_handler()
1332 struct scsi_qla_host *ha; in qla4_8xxx_msi_handler() local
1334 ha = (struct scsi_qla_host *) dev_id; in qla4_8xxx_msi_handler()
1335 if (!ha) { in qla4_8xxx_msi_handler()
1341 ha->isr_count++; in qla4_8xxx_msi_handler()
1343 qla4_82xx_wr_32(ha, ha->nx_legacy_intr.tgt_status_reg, 0xffffffff); in qla4_8xxx_msi_handler()
1346 qla4_82xx_rd_32(ha, ISR_INT_VECTOR); in qla4_8xxx_msi_handler()
1347 qla4_82xx_rd_32(ha, ISR_INT_VECTOR); in qla4_8xxx_msi_handler()
1354 struct scsi_qla_host *ha = dev_id; in qla4_83xx_mailbox_intr_handler() local
1358 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4_83xx_mailbox_intr_handler()
1360 ival = readl(&ha->qla4_83xx_reg->risc_intr); in qla4_83xx_mailbox_intr_handler()
1362 ql4_printk(KERN_INFO, ha, in qla4_83xx_mailbox_intr_handler()
1365 ival = readl(&ha->qla4_83xx_reg->mb_int_mask); in qla4_83xx_mailbox_intr_handler()
1367 writel(ival, &ha->qla4_83xx_reg->mb_int_mask); in qla4_83xx_mailbox_intr_handler()
1371 qla4xxx_isr_decode_mailbox(ha, in qla4_83xx_mailbox_intr_handler()
1372 readl(&ha->qla4_83xx_reg->mailbox_out[0])); in qla4_83xx_mailbox_intr_handler()
1373 writel(0, &ha->qla4_83xx_reg->risc_intr); in qla4_83xx_mailbox_intr_handler()
1374 ival = readl(&ha->qla4_83xx_reg->mb_int_mask); in qla4_83xx_mailbox_intr_handler()
1376 writel(ival, &ha->qla4_83xx_reg->mb_int_mask); in qla4_83xx_mailbox_intr_handler()
1377 ha->isr_count++; in qla4_83xx_mailbox_intr_handler()
1379 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4_83xx_mailbox_intr_handler()
1394 struct scsi_qla_host *ha = dev_id; in qla4_8xxx_default_intr_handler() local
1399 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_default_intr_handler()
1402 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4_8xxx_default_intr_handler()
1404 if (!(readl(&ha->qla4_82xx_reg->host_int) & in qla4_8xxx_default_intr_handler()
1406 qla4_82xx_spurious_interrupt(ha, reqs_count); in qla4_8xxx_default_intr_handler()
1410 intr_status = readl(&ha->qla4_82xx_reg->host_status); in qla4_8xxx_default_intr_handler()
1413 qla4_82xx_spurious_interrupt(ha, reqs_count); in qla4_8xxx_default_intr_handler()
1417 ha->isp_ops->interrupt_service_routine(ha, intr_status); in qla4_8xxx_default_intr_handler()
1422 ha->isr_count++; in qla4_8xxx_default_intr_handler()
1423 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4_8xxx_default_intr_handler()
1431 struct scsi_qla_host *ha = dev_id; in qla4_8xxx_msix_rsp_q() local
1436 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4_8xxx_msix_rsp_q()
1437 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4_8xxx_msix_rsp_q()
1438 ival = readl(&ha->qla4_83xx_reg->iocb_int_mask); in qla4_8xxx_msix_rsp_q()
1440 ql4_printk(KERN_INFO, ha, "%s: It is a spurious iocb interrupt!\n", in qla4_8xxx_msix_rsp_q()
1444 qla4xxx_process_response_queue(ha); in qla4_8xxx_msix_rsp_q()
1445 writel(0, &ha->qla4_83xx_reg->iocb_int_mask); in qla4_8xxx_msix_rsp_q()
1447 intr_status = readl(&ha->qla4_82xx_reg->host_status); in qla4_8xxx_msix_rsp_q()
1449 qla4xxx_process_response_queue(ha); in qla4_8xxx_msix_rsp_q()
1450 writel(0, &ha->qla4_82xx_reg->host_int); in qla4_8xxx_msix_rsp_q()
1452 ql4_printk(KERN_INFO, ha, "%s: spurious iocb interrupt...\n", in qla4_8xxx_msix_rsp_q()
1457 ha->isr_count++; in qla4_8xxx_msix_rsp_q()
1459 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4_8xxx_msix_rsp_q()
1474 void qla4xxx_process_aen(struct scsi_qla_host * ha, uint8_t process_aen) in qla4xxx_process_aen() argument
1481 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_process_aen()
1482 while (ha->aen_out != ha->aen_in) { in qla4xxx_process_aen()
1483 aen = &ha->aen_q[ha->aen_out]; in qla4xxx_process_aen()
1488 ha->aen_q_count++; in qla4xxx_process_aen()
1489 ha->aen_out++; in qla4xxx_process_aen()
1491 if (ha->aen_out == MAX_AEN_ENTRIES) in qla4xxx_process_aen()
1492 ha->aen_out = 0; in qla4xxx_process_aen()
1494 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_process_aen()
1497 " mbx3=0x%08x mbx4=0x%08x\n", ha->host_no, in qla4xxx_process_aen()
1498 (ha->aen_out ? (ha->aen_out-1): (MAX_AEN_ENTRIES-1)), in qla4xxx_process_aen()
1508 ha->host_no, ha->aen_out, in qla4xxx_process_aen()
1516 qla4xxx_process_ddb_changed(ha, in qla4xxx_process_aen()
1522 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_process_aen()
1524 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_process_aen()
1527 int qla4xxx_request_irqs(struct scsi_qla_host *ha) in qla4xxx_request_irqs() argument
1532 if (is_qla40XX(ha)) in qla4xxx_request_irqs()
1537 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4xxx_request_irqs()
1538 …ql4_printk(KERN_INFO, ha, "%s: MSI Interrupts not supported for ISP%04x, Falling back-to INTx mode… in qla4xxx_request_irqs()
1539 __func__, ha->pdev->device); in qla4xxx_request_irqs()
1549 ret = qla4_8xxx_enable_msix(ha); in qla4xxx_request_irqs()
1551 DEBUG2(ql4_printk(KERN_INFO, ha, in qla4xxx_request_irqs()
1552 "MSI-X: Enabled (0x%X).\n", ha->revision_id)); in qla4xxx_request_irqs()
1555 if (is_qla8032(ha) || is_qla8042(ha)) { in qla4xxx_request_irqs()
1556 ql4_printk(KERN_INFO, ha, "%s: ISP%04x: MSI-X: Falling back-to INTx mode. ret = %d\n", in qla4xxx_request_irqs()
1557 __func__, ha->pdev->device, ret); in qla4xxx_request_irqs()
1562 ql4_printk(KERN_WARNING, ha, in qla4xxx_request_irqs()
1567 ret = pci_enable_msi(ha->pdev); in qla4xxx_request_irqs()
1569 ret = request_irq(ha->pdev->irq, qla4_8xxx_msi_handler, in qla4xxx_request_irqs()
1570 0, DRIVER_NAME, ha); in qla4xxx_request_irqs()
1572 DEBUG2(ql4_printk(KERN_INFO, ha, "MSI: Enabled.\n")); in qla4xxx_request_irqs()
1573 set_bit(AF_MSI_ENABLED, &ha->flags); in qla4xxx_request_irqs()
1576 ql4_printk(KERN_WARNING, ha, in qla4xxx_request_irqs()
1578 "already in use.\n", ha->pdev->irq); in qla4xxx_request_irqs()
1579 pci_disable_msi(ha->pdev); in qla4xxx_request_irqs()
1584 if (is_qla8022(ha)) { in qla4xxx_request_irqs()
1585 ql4_printk(KERN_WARNING, ha, "%s: ISP82xx Legacy interrupt not supported\n", in qla4xxx_request_irqs()
1591 ret = request_irq(ha->pdev->irq, ha->isp_ops->intr_handler, in qla4xxx_request_irqs()
1592 IRQF_SHARED, DRIVER_NAME, ha); in qla4xxx_request_irqs()
1594 DEBUG2(ql4_printk(KERN_INFO, ha, "INTx: Enabled.\n")); in qla4xxx_request_irqs()
1595 set_bit(AF_INTx_ENABLED, &ha->flags); in qla4xxx_request_irqs()
1599 ql4_printk(KERN_WARNING, ha, in qla4xxx_request_irqs()
1601 " use.\n", ha->pdev->irq); in qla4xxx_request_irqs()
1606 set_bit(AF_IRQ_ATTACHED, &ha->flags); in qla4xxx_request_irqs()
1607 ha->host->irq = ha->pdev->irq; in qla4xxx_request_irqs()
1608 ql4_printk(KERN_INFO, ha, "%s: irq %d attached\n", in qla4xxx_request_irqs()
1609 __func__, ha->pdev->irq); in qla4xxx_request_irqs()
1615 void qla4xxx_free_irqs(struct scsi_qla_host *ha) in qla4xxx_free_irqs() argument
1617 if (test_and_clear_bit(AF_IRQ_ATTACHED, &ha->flags)) { in qla4xxx_free_irqs()
1618 if (test_bit(AF_MSIX_ENABLED, &ha->flags)) { in qla4xxx_free_irqs()
1619 qla4_8xxx_disable_msix(ha); in qla4xxx_free_irqs()
1620 } else if (test_and_clear_bit(AF_MSI_ENABLED, &ha->flags)) { in qla4xxx_free_irqs()
1621 free_irq(ha->pdev->irq, ha); in qla4xxx_free_irqs()
1622 pci_disable_msi(ha->pdev); in qla4xxx_free_irqs()
1623 } else if (test_and_clear_bit(AF_INTx_ENABLED, &ha->flags)) { in qla4xxx_free_irqs()
1624 free_irq(ha->pdev->irq, ha); in qla4xxx_free_irqs()