• Home
  • Raw
  • Download

Lines Matching refs:ha

54 static void qla4xxx_config_dma_addressing(struct scsi_qla_host *ha);
130 struct scsi_qla_host *ha = ddb_entry->ha; in qla4xxx_recovery_timedout() local
137 ha->host_no, __func__, ddb_entry->fw_ddb_index, in qla4xxx_recovery_timedout()
138 ha->port_down_retry_count)); in qla4xxx_recovery_timedout()
142 ha->host_no, __func__, ha->dpc_flags)); in qla4xxx_recovery_timedout()
143 queue_work(ha->dpc_thread, &ha->dpc_work); in qla4xxx_recovery_timedout()
150 struct scsi_qla_host *ha = to_qla_host(shost); in qla4xxx_host_get_param() local
155 len = sysfs_format_mac(buf, ha->my_mac, MAC_ADDR_LEN); in qla4xxx_host_get_param()
158 len = sprintf(buf, "%d.%d.%d.%d\n", ha->ip_address[0], in qla4xxx_host_get_param()
159 ha->ip_address[1], ha->ip_address[2], in qla4xxx_host_get_param()
160 ha->ip_address[3]); in qla4xxx_host_get_param()
163 len = sprintf(buf, "%s\n", ha->name_string); in qla4xxx_host_get_param()
222 struct scsi_qla_host *ha; in qla4xxx_tgt_dscvr() local
227 ha = (struct scsi_qla_host *) shost->hostdata; in qla4xxx_tgt_dscvr()
233 if (qla4xxx_send_tgts(ha, (char *)&addr->sin_addr, in qla4xxx_tgt_dscvr()
241 if (qla4xxx_send_tgts(ha, (char *)&addr6->sin6_addr, in qla4xxx_tgt_dscvr()
269 ddb_entry->sess->recovery_tmo = ddb_entry->ha->port_down_retry_count; in qla4xxx_add_sess()
288 struct ddb_entry *qla4xxx_alloc_sess(struct scsi_qla_host *ha) in qla4xxx_alloc_sess() argument
293 sess = iscsi_alloc_session(ha->host, &qla4xxx_iscsi_transport, in qla4xxx_alloc_sess()
300 ddb_entry->ha = ha; in qla4xxx_alloc_sess()
307 struct scsi_qla_host *ha = shost_priv(shost); in qla4xxx_scan_start() local
311 list_for_each_entry_safe(ddb_entry, ddbtemp, &ha->ddb_list, list) { in qla4xxx_scan_start()
321 static void qla4xxx_start_timer(struct scsi_qla_host *ha, void *func, in qla4xxx_start_timer() argument
325 __func__, ha->host->host_no)); in qla4xxx_start_timer()
326 init_timer(&ha->timer); in qla4xxx_start_timer()
327 ha->timer.expires = jiffies + interval * HZ; in qla4xxx_start_timer()
328 ha->timer.data = (unsigned long)ha; in qla4xxx_start_timer()
329 ha->timer.function = (void (*)(unsigned long))func; in qla4xxx_start_timer()
330 add_timer(&ha->timer); in qla4xxx_start_timer()
331 ha->timer_active = 1; in qla4xxx_start_timer()
334 static void qla4xxx_stop_timer(struct scsi_qla_host *ha) in qla4xxx_stop_timer() argument
336 del_timer_sync(&ha->timer); in qla4xxx_stop_timer()
337 ha->timer_active = 0; in qla4xxx_stop_timer()
347 void qla4xxx_mark_device_missing(struct scsi_qla_host *ha, in qla4xxx_mark_device_missing() argument
352 ha->host_no, ddb_entry->bus, ddb_entry->target, in qla4xxx_mark_device_missing()
358 static struct srb* qla4xxx_get_new_srb(struct scsi_qla_host *ha, in qla4xxx_get_new_srb() argument
365 srb = mempool_alloc(ha->srb_mempool, GFP_ATOMIC); in qla4xxx_get_new_srb()
370 srb->ha = ha; in qla4xxx_get_new_srb()
380 static void qla4xxx_srb_free_dma(struct scsi_qla_host *ha, struct srb *srb) in qla4xxx_srb_free_dma() argument
391 void qla4xxx_srb_compl(struct scsi_qla_host *ha, struct srb *srb) in qla4xxx_srb_compl() argument
395 qla4xxx_srb_free_dma(ha, srb); in qla4xxx_srb_compl()
397 mempool_free(srb, ha->srb_mempool); in qla4xxx_srb_compl()
419 struct scsi_qla_host *ha = to_qla_host(cmd->device->host); in qla4xxx_queuecommand() local
444 if (test_bit(DPC_RESET_HA_INTR, &ha->dpc_flags)) in qla4xxx_queuecommand()
447 spin_unlock_irq(ha->host->host_lock); in qla4xxx_queuecommand()
449 srb = qla4xxx_get_new_srb(ha, ddb_entry, cmd, done); in qla4xxx_queuecommand()
453 rval = qla4xxx_send_command_to_isp(ha, srb); in qla4xxx_queuecommand()
457 spin_lock_irq(ha->host->host_lock); in qla4xxx_queuecommand()
461 qla4xxx_srb_free_dma(ha, srb); in qla4xxx_queuecommand()
462 mempool_free(srb, ha->srb_mempool); in qla4xxx_queuecommand()
465 spin_lock_irq(ha->host->host_lock); in qla4xxx_queuecommand()
482 static void qla4xxx_mem_free(struct scsi_qla_host *ha) in qla4xxx_mem_free() argument
484 if (ha->queues) in qla4xxx_mem_free()
485 dma_free_coherent(&ha->pdev->dev, ha->queues_len, ha->queues, in qla4xxx_mem_free()
486 ha->queues_dma); in qla4xxx_mem_free()
488 ha->queues_len = 0; in qla4xxx_mem_free()
489 ha->queues = NULL; in qla4xxx_mem_free()
490 ha->queues_dma = 0; in qla4xxx_mem_free()
491 ha->request_ring = NULL; in qla4xxx_mem_free()
492 ha->request_dma = 0; in qla4xxx_mem_free()
493 ha->response_ring = NULL; in qla4xxx_mem_free()
494 ha->response_dma = 0; in qla4xxx_mem_free()
495 ha->shadow_regs = NULL; in qla4xxx_mem_free()
496 ha->shadow_regs_dma = 0; in qla4xxx_mem_free()
499 if (ha->srb_mempool) in qla4xxx_mem_free()
500 mempool_destroy(ha->srb_mempool); in qla4xxx_mem_free()
502 ha->srb_mempool = NULL; in qla4xxx_mem_free()
505 if (ha->reg) in qla4xxx_mem_free()
506 iounmap(ha->reg); in qla4xxx_mem_free()
507 pci_release_regions(ha->pdev); in qla4xxx_mem_free()
517 static int qla4xxx_mem_alloc(struct scsi_qla_host *ha) in qla4xxx_mem_alloc() argument
522 ha->queues_len = ((REQUEST_QUEUE_DEPTH * QUEUE_SIZE) + in qla4xxx_mem_alloc()
527 ha->queues = dma_alloc_coherent(&ha->pdev->dev, ha->queues_len, in qla4xxx_mem_alloc()
528 &ha->queues_dma, GFP_KERNEL); in qla4xxx_mem_alloc()
529 if (ha->queues == NULL) { in qla4xxx_mem_alloc()
530 dev_warn(&ha->pdev->dev, in qla4xxx_mem_alloc()
535 memset(ha->queues, 0, ha->queues_len); in qla4xxx_mem_alloc()
542 if ((unsigned long)ha->queues_dma & (MEM_ALIGN_VALUE - 1)) in qla4xxx_mem_alloc()
543 align = MEM_ALIGN_VALUE - ((unsigned long)ha->queues_dma & in qla4xxx_mem_alloc()
547 ha->request_dma = ha->queues_dma + align; in qla4xxx_mem_alloc()
548 ha->request_ring = (struct queue_entry *) (ha->queues + align); in qla4xxx_mem_alloc()
549 ha->response_dma = ha->queues_dma + align + in qla4xxx_mem_alloc()
551 ha->response_ring = (struct queue_entry *) (ha->queues + align + in qla4xxx_mem_alloc()
554 ha->shadow_regs_dma = ha->queues_dma + align + in qla4xxx_mem_alloc()
557 ha->shadow_regs = (struct shadow_regs *) (ha->queues + align + in qla4xxx_mem_alloc()
564 ha->srb_mempool = mempool_create(SRB_MIN_REQ, mempool_alloc_slab, in qla4xxx_mem_alloc()
566 if (ha->srb_mempool == NULL) { in qla4xxx_mem_alloc()
567 dev_warn(&ha->pdev->dev, in qla4xxx_mem_alloc()
576 qla4xxx_mem_free(ha); in qla4xxx_mem_alloc()
584 static void qla4xxx_timer(struct scsi_qla_host *ha) in qla4xxx_timer() argument
590 list_for_each_entry_safe(ddb_entry, dtemp, &ha->ddb_list, list) { in qla4xxx_timer()
592 if (adapter_up(ha) && in qla4xxx_timer()
603 &ha->dpc_flags); in qla4xxx_timer()
607 ha->host_no, __func__, in qla4xxx_timer()
631 ha->host_no, in qla4xxx_timer()
640 ha->host_no, ddb_entry->bus, in qla4xxx_timer()
653 if (ha->firmware_options & FWOPT_HEARTBEAT_ENABLE && in qla4xxx_timer()
654 ha->heartbeat_interval != 0) { in qla4xxx_timer()
655 ha->seconds_since_last_heartbeat++; in qla4xxx_timer()
656 if (ha->seconds_since_last_heartbeat > in qla4xxx_timer()
657 ha->heartbeat_interval + 2) in qla4xxx_timer()
658 set_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_timer()
664 test_bit(DPC_RESET_HA, &ha->dpc_flags) || in qla4xxx_timer()
665 test_bit(DPC_RETRY_RESET_HA, &ha->dpc_flags) || in qla4xxx_timer()
666 test_bit(DPC_RELOGIN_DEVICE, &ha->dpc_flags) || in qla4xxx_timer()
667 test_bit(DPC_RESET_HA_DESTROY_DDB_LIST, &ha->dpc_flags) || in qla4xxx_timer()
668 test_bit(DPC_RESET_HA_INTR, &ha->dpc_flags) || in qla4xxx_timer()
669 test_bit(DPC_GET_DHCP_IP_ADDR, &ha->dpc_flags) || in qla4xxx_timer()
670 test_bit(DPC_AEN, &ha->dpc_flags)) && in qla4xxx_timer()
671 ha->dpc_thread) { in qla4xxx_timer()
674 ha->host_no, __func__, ha->dpc_flags)); in qla4xxx_timer()
675 queue_work(ha->dpc_thread, &ha->dpc_work); in qla4xxx_timer()
679 mod_timer(&ha->timer, jiffies + HZ); in qla4xxx_timer()
681 DEBUG2(ha->seconds_since_last_intr++); in qla4xxx_timer()
691 static int qla4xxx_cmd_wait(struct scsi_qla_host *ha) in qla4xxx_cmd_wait() argument
704 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_cmd_wait()
706 for (index = 0; index < ha->host->can_queue; index++) { in qla4xxx_cmd_wait()
707 cmd = scsi_host_find_tag(ha->host, index); in qla4xxx_cmd_wait()
711 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_cmd_wait()
714 if (index == ha->host->can_queue) { in qla4xxx_cmd_wait()
732 void qla4xxx_hw_reset(struct scsi_qla_host *ha) in qla4xxx_hw_reset() argument
737 DEBUG2(printk(KERN_ERR "scsi%ld: %s\n", ha->host_no, __func__)); in qla4xxx_hw_reset()
739 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_hw_reset()
745 ctrl_status = readw(&ha->reg->ctrl_status); in qla4xxx_hw_reset()
747 writel(set_rmask(CSR_SCSI_RESET_INTR), &ha->reg->ctrl_status); in qla4xxx_hw_reset()
750 writel(set_rmask(CSR_SOFT_RESET), &ha->reg->ctrl_status); in qla4xxx_hw_reset()
751 readl(&ha->reg->ctrl_status); in qla4xxx_hw_reset()
753 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_hw_reset()
760 int qla4xxx_soft_reset(struct scsi_qla_host *ha) in qla4xxx_soft_reset() argument
767 qla4xxx_hw_reset(ha); in qla4xxx_soft_reset()
772 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
773 ctrl_status = readw(&ha->reg->ctrl_status); in qla4xxx_soft_reset()
774 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
786 ha->host_no)); in qla4xxx_soft_reset()
787 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
788 writel(set_rmask(CSR_NET_RESET_INTR), &ha->reg->ctrl_status); in qla4xxx_soft_reset()
789 readl(&ha->reg->ctrl_status); in qla4xxx_soft_reset()
790 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
796 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
797 ctrl_status = readw(&ha->reg->ctrl_status); in qla4xxx_soft_reset()
798 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
812 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
813 ctrl_status = readw(&ha->reg->ctrl_status); in qla4xxx_soft_reset()
815 writel(set_rmask(CSR_SCSI_RESET_INTR), &ha->reg->ctrl_status); in qla4xxx_soft_reset()
816 readl(&ha->reg->ctrl_status); in qla4xxx_soft_reset()
818 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
828 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
829 writel(set_rmask(CSR_FORCE_SOFT_RESET), &ha->reg->ctrl_status); in qla4xxx_soft_reset()
830 readl(&ha->reg->ctrl_status); in qla4xxx_soft_reset()
831 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
835 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
836 ctrl_status = readw(&ha->reg->ctrl_status); in qla4xxx_soft_reset()
837 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_soft_reset()
860 static void qla4xxx_flush_active_srbs(struct scsi_qla_host *ha) in qla4xxx_flush_active_srbs() argument
866 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_flush_active_srbs()
867 for (i = 0; i < ha->host->can_queue; i++) { in qla4xxx_flush_active_srbs()
868 srb = qla4xxx_del_from_active_array(ha, i); in qla4xxx_flush_active_srbs()
871 qla4xxx_srb_compl(ha, srb); in qla4xxx_flush_active_srbs()
874 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_flush_active_srbs()
886 static int qla4xxx_recover_adapter(struct scsi_qla_host *ha, in qla4xxx_recover_adapter() argument
892 clear_bit(AF_ONLINE, &ha->flags); in qla4xxx_recover_adapter()
894 DEBUG2(printk("scsi%ld: %s calling qla4xxx_cmd_wait\n", ha->host_no, in qla4xxx_recover_adapter()
900 status = qla4xxx_cmd_wait(ha); in qla4xxx_recover_adapter()
902 qla4xxx_disable_intrs(ha); in qla4xxx_recover_adapter()
905 qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS); in qla4xxx_recover_adapter()
912 ha->host_no, __func__)); in qla4xxx_recover_adapter()
913 qla4xxx_flush_active_srbs(ha); in qla4xxx_recover_adapter()
914 if (ql4xxx_lock_drvr_wait(ha) == QLA_SUCCESS) in qla4xxx_recover_adapter()
915 status = qla4xxx_soft_reset(ha); in qla4xxx_recover_adapter()
921 qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS); in qla4xxx_recover_adapter()
927 ha->host_no, __func__)); in qla4xxx_recover_adapter()
931 status = qla4xxx_initialize_adapter(ha, renew_ddb_list); in qla4xxx_recover_adapter()
936 if ((test_bit(AF_ONLINE, &ha->flags) == 0) && in qla4xxx_recover_adapter()
937 (test_bit(DPC_RESET_HA, &ha->dpc_flags))) { in qla4xxx_recover_adapter()
940 if (!test_bit(DPC_RETRY_RESET_HA, &ha->dpc_flags)) { in qla4xxx_recover_adapter()
941 ha->retry_reset_ha_cnt = MAX_RESET_HA_RETRIES; in qla4xxx_recover_adapter()
943 "(%d) more times\n", ha->host_no, in qla4xxx_recover_adapter()
944 ha->retry_reset_ha_cnt)); in qla4xxx_recover_adapter()
945 set_bit(DPC_RETRY_RESET_HA, &ha->dpc_flags); in qla4xxx_recover_adapter()
948 if (ha->retry_reset_ha_cnt > 0) { in qla4xxx_recover_adapter()
950 ha->retry_reset_ha_cnt--; in qla4xxx_recover_adapter()
953 ha->host_no, in qla4xxx_recover_adapter()
954 ha->retry_reset_ha_cnt)); in qla4xxx_recover_adapter()
958 if (ha->retry_reset_ha_cnt == 0) { in qla4xxx_recover_adapter()
963 ha->host_no)); in qla4xxx_recover_adapter()
964 qla4xxx_flush_active_srbs(ha); in qla4xxx_recover_adapter()
965 clear_bit(DPC_RETRY_RESET_HA, &ha->dpc_flags); in qla4xxx_recover_adapter()
966 clear_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_recover_adapter()
968 &ha->dpc_flags); in qla4xxx_recover_adapter()
973 clear_bit(DPC_RESET_HA, &ha->dpc_flags); in qla4xxx_recover_adapter()
974 clear_bit(DPC_RESET_HA_DESTROY_DDB_LIST, &ha->dpc_flags); in qla4xxx_recover_adapter()
975 clear_bit(DPC_RETRY_RESET_HA, &ha->dpc_flags); in qla4xxx_recover_adapter()
978 ha->adapter_error_count++; in qla4xxx_recover_adapter()
981 qla4xxx_enable_intrs(ha); in qla4xxx_recover_adapter()
983 DEBUG2(printk("scsi%ld: recover adapter .. DONE\n", ha->host_no)); in qla4xxx_recover_adapter()
1000 struct scsi_qla_host *ha = in qla4xxx_do_dpc() local
1007 ha->host_no, __func__, ha->flags, ha->dpc_flags, in qla4xxx_do_dpc()
1008 readw(&ha->reg->ctrl_status))); in qla4xxx_do_dpc()
1011 if (!test_bit(AF_INIT_DONE, &ha->flags)) in qla4xxx_do_dpc()
1014 if (adapter_up(ha) || in qla4xxx_do_dpc()
1015 test_bit(DPC_RESET_HA, &ha->dpc_flags) || in qla4xxx_do_dpc()
1016 test_bit(DPC_RESET_HA_INTR, &ha->dpc_flags) || in qla4xxx_do_dpc()
1017 test_bit(DPC_RESET_HA_DESTROY_DDB_LIST, &ha->dpc_flags)) { in qla4xxx_do_dpc()
1018 if (test_bit(DPC_RESET_HA_DESTROY_DDB_LIST, &ha->dpc_flags) || in qla4xxx_do_dpc()
1019 test_bit(DPC_RESET_HA, &ha->dpc_flags)) in qla4xxx_do_dpc()
1020 qla4xxx_recover_adapter(ha, PRESERVE_DDB_LIST); in qla4xxx_do_dpc()
1022 if (test_bit(DPC_RESET_HA_INTR, &ha->dpc_flags)) { in qla4xxx_do_dpc()
1025 while ((readw(&ha->reg->ctrl_status) & in qla4xxx_do_dpc()
1034 ha->host_no, __func__)); in qla4xxx_do_dpc()
1035 qla4xxx_flush_active_srbs(ha); in qla4xxx_do_dpc()
1036 if (ql4xxx_lock_drvr_wait(ha) == QLA_SUCCESS) { in qla4xxx_do_dpc()
1037 qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS); in qla4xxx_do_dpc()
1038 status = qla4xxx_initialize_adapter(ha, in qla4xxx_do_dpc()
1041 clear_bit(DPC_RESET_HA_INTR, &ha->dpc_flags); in qla4xxx_do_dpc()
1043 qla4xxx_enable_intrs(ha); in qla4xxx_do_dpc()
1048 if (test_and_clear_bit(DPC_AEN, &ha->dpc_flags)) in qla4xxx_do_dpc()
1049 qla4xxx_process_aen(ha, PROCESS_ALL_AENS); in qla4xxx_do_dpc()
1052 if (test_and_clear_bit(DPC_GET_DHCP_IP_ADDR, &ha->dpc_flags)) in qla4xxx_do_dpc()
1053 qla4xxx_get_dhcp_ip_address(ha); in qla4xxx_do_dpc()
1056 if (adapter_up(ha) && in qla4xxx_do_dpc()
1057 test_and_clear_bit(DPC_RELOGIN_DEVICE, &ha->dpc_flags)) { in qla4xxx_do_dpc()
1059 &ha->ddb_list, list) { in qla4xxx_do_dpc()
1062 qla4xxx_relogin_device(ha, ddb_entry); in qla4xxx_do_dpc()
1070 if (test_bit(DPC_RESET_HA, &ha->dpc_flags)) { in qla4xxx_do_dpc()
1073 ha->host_no, __func__); in qla4xxx_do_dpc()
1084 static void qla4xxx_free_adapter(struct scsi_qla_host *ha) in qla4xxx_free_adapter() argument
1087 if (test_bit(AF_INTERRUPTS_ON, &ha->flags)) { in qla4xxx_free_adapter()
1089 qla4xxx_disable_intrs(ha); in qla4xxx_free_adapter()
1093 if (ha->dpc_thread) in qla4xxx_free_adapter()
1094 destroy_workqueue(ha->dpc_thread); in qla4xxx_free_adapter()
1097 if (ql4xxx_lock_drvr_wait(ha) == QLA_SUCCESS) in qla4xxx_free_adapter()
1098 qla4xxx_hw_reset(ha); in qla4xxx_free_adapter()
1101 if (ha->timer_active) in qla4xxx_free_adapter()
1102 qla4xxx_stop_timer(ha); in qla4xxx_free_adapter()
1105 if (test_and_clear_bit(AF_IRQ_ATTACHED, &ha->flags)) in qla4xxx_free_adapter()
1106 free_irq(ha->pdev->irq, ha); in qla4xxx_free_adapter()
1109 qla4xxx_mem_free(ha); in qla4xxx_free_adapter()
1111 pci_disable_device(ha->pdev); in qla4xxx_free_adapter()
1122 static int qla4xxx_iospace_config(struct scsi_qla_host *ha) in qla4xxx_iospace_config() argument
1127 pio = pci_resource_start(ha->pdev, 0); in qla4xxx_iospace_config()
1128 pio_len = pci_resource_len(ha->pdev, 0); in qla4xxx_iospace_config()
1129 pio_flags = pci_resource_flags(ha->pdev, 0); in qla4xxx_iospace_config()
1132 dev_warn(&ha->pdev->dev, in qla4xxx_iospace_config()
1137 dev_warn(&ha->pdev->dev, "region #0 not a PIO resource\n"); in qla4xxx_iospace_config()
1142 mmio = pci_resource_start(ha->pdev, 1); in qla4xxx_iospace_config()
1143 mmio_len = pci_resource_len(ha->pdev, 1); in qla4xxx_iospace_config()
1144 mmio_flags = pci_resource_flags(ha->pdev, 1); in qla4xxx_iospace_config()
1147 dev_err(&ha->pdev->dev, in qla4xxx_iospace_config()
1153 dev_err(&ha->pdev->dev, in qla4xxx_iospace_config()
1158 if (pci_request_regions(ha->pdev, DRIVER_NAME)) { in qla4xxx_iospace_config()
1159 dev_warn(&ha->pdev->dev, in qla4xxx_iospace_config()
1165 ha->pio_address = pio; in qla4xxx_iospace_config()
1166 ha->pio_length = pio_len; in qla4xxx_iospace_config()
1167 ha->reg = ioremap(mmio, MIN_IOBASE_LEN); in qla4xxx_iospace_config()
1168 if (!ha->reg) { in qla4xxx_iospace_config()
1169 dev_err(&ha->pdev->dev, in qla4xxx_iospace_config()
1195 struct scsi_qla_host *ha; in qla4xxx_probe_adapter() local
1202 host = scsi_host_alloc(&qla4xxx_driver_template, sizeof(*ha)); in qla4xxx_probe_adapter()
1210 ha = (struct scsi_qla_host *) host->hostdata; in qla4xxx_probe_adapter()
1211 memset(ha, 0, sizeof(*ha)); in qla4xxx_probe_adapter()
1214 ha->pdev = pdev; in qla4xxx_probe_adapter()
1215 ha->host = host; in qla4xxx_probe_adapter()
1216 ha->host_no = host->host_no; in qla4xxx_probe_adapter()
1219 ret = qla4xxx_iospace_config(ha); in qla4xxx_probe_adapter()
1223 dev_info(&ha->pdev->dev, "Found an ISP%04x, irq %d, iobase 0x%p\n", in qla4xxx_probe_adapter()
1224 pdev->device, pdev->irq, ha->reg); in qla4xxx_probe_adapter()
1226 qla4xxx_config_dma_addressing(ha); in qla4xxx_probe_adapter()
1229 INIT_LIST_HEAD(&ha->ddb_list); in qla4xxx_probe_adapter()
1230 INIT_LIST_HEAD(&ha->free_srb_q); in qla4xxx_probe_adapter()
1232 mutex_init(&ha->mbox_sem); in qla4xxx_probe_adapter()
1234 spin_lock_init(&ha->hardware_lock); in qla4xxx_probe_adapter()
1237 if (qla4xxx_mem_alloc(ha)) { in qla4xxx_probe_adapter()
1238 dev_warn(&ha->pdev->dev, in qla4xxx_probe_adapter()
1250 status = qla4xxx_initialize_adapter(ha, REBUILD_DDB_LIST); in qla4xxx_probe_adapter()
1254 qla4xxx_soft_reset(ha); in qla4xxx_probe_adapter()
1255 status = qla4xxx_initialize_adapter(ha, REBUILD_DDB_LIST); in qla4xxx_probe_adapter()
1258 dev_warn(&ha->pdev->dev, "Failed to initialize adapter\n"); in qla4xxx_probe_adapter()
1274 dev_warn(&ha->pdev->dev, "scsi_init_shared_tag_map failed\n"); in qla4xxx_probe_adapter()
1281 sprintf(buf, "qla4xxx_%lu_dpc", ha->host_no); in qla4xxx_probe_adapter()
1282 ha->dpc_thread = create_singlethread_workqueue(buf); in qla4xxx_probe_adapter()
1283 if (!ha->dpc_thread) { in qla4xxx_probe_adapter()
1284 dev_warn(&ha->pdev->dev, "Unable to start DPC thread!\n"); in qla4xxx_probe_adapter()
1288 INIT_WORK(&ha->dpc_work, qla4xxx_do_dpc); in qla4xxx_probe_adapter()
1291 IRQF_DISABLED | IRQF_SHARED, "qla4xxx", ha); in qla4xxx_probe_adapter()
1293 dev_warn(&ha->pdev->dev, "Failed to reserve interrupt %d" in qla4xxx_probe_adapter()
1297 set_bit(AF_IRQ_ATTACHED, &ha->flags); in qla4xxx_probe_adapter()
1299 DEBUG(printk("scsi%d: irq %d attached\n", ha->host_no, ha->pdev->irq)); in qla4xxx_probe_adapter()
1301 qla4xxx_enable_intrs(ha); in qla4xxx_probe_adapter()
1304 qla4xxx_start_timer(ha, qla4xxx_timer, 1); in qla4xxx_probe_adapter()
1306 set_bit(AF_INIT_DONE, &ha->flags); in qla4xxx_probe_adapter()
1308 pci_set_drvdata(pdev, ha); in qla4xxx_probe_adapter()
1317 qla4xxx_version_str, ha->pdev->device, pci_name(ha->pdev), in qla4xxx_probe_adapter()
1318 ha->host_no, ha->firmware_version[0], ha->firmware_version[1], in qla4xxx_probe_adapter()
1319 ha->patch_number, ha->build_number); in qla4xxx_probe_adapter()
1324 qla4xxx_free_adapter(ha); in qla4xxx_probe_adapter()
1325 scsi_host_put(ha->host); in qla4xxx_probe_adapter()
1339 struct scsi_qla_host *ha; in qla4xxx_remove_adapter() local
1341 ha = pci_get_drvdata(pdev); in qla4xxx_remove_adapter()
1343 qla4xxx_disable_intrs(ha); in qla4xxx_remove_adapter()
1345 while (test_bit(DPC_RESET_HA_INTR, &ha->dpc_flags)) in qla4xxx_remove_adapter()
1349 qla4xxx_free_ddb_list(ha); in qla4xxx_remove_adapter()
1351 scsi_remove_host(ha->host); in qla4xxx_remove_adapter()
1353 qla4xxx_free_adapter(ha); in qla4xxx_remove_adapter()
1355 scsi_host_put(ha->host); in qla4xxx_remove_adapter()
1367 static void qla4xxx_config_dma_addressing(struct scsi_qla_host *ha) in qla4xxx_config_dma_addressing() argument
1372 if (pci_set_dma_mask(ha->pdev, DMA_64BIT_MASK) == 0) { in qla4xxx_config_dma_addressing()
1373 if (pci_set_consistent_dma_mask(ha->pdev, DMA_64BIT_MASK)) { in qla4xxx_config_dma_addressing()
1374 dev_dbg(&ha->pdev->dev, in qla4xxx_config_dma_addressing()
1377 retval = pci_set_consistent_dma_mask(ha->pdev, in qla4xxx_config_dma_addressing()
1381 retval = pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK); in qla4xxx_config_dma_addressing()
1413 struct srb * qla4xxx_del_from_active_array(struct scsi_qla_host *ha, uint32_t index) in qla4xxx_del_from_active_array() argument
1418 if (!(cmd = scsi_host_find_tag(ha->host, index))) in qla4xxx_del_from_active_array()
1426 ha->req_q_count += srb->iocb_cnt; in qla4xxx_del_from_active_array()
1427 ha->iocb_cnt -= srb->iocb_cnt; in qla4xxx_del_from_active_array()
1442 static int qla4xxx_eh_wait_on_command(struct scsi_qla_host *ha, in qla4xxx_eh_wait_on_command() argument
1467 static int qla4xxx_wait_for_hba_online(struct scsi_qla_host *ha) in qla4xxx_wait_for_hba_online() argument
1474 if (adapter_up(ha)) in qla4xxx_wait_for_hba_online()
1476 else if (ha->retry_reset_ha_cnt == 0) in qla4xxx_wait_for_hba_online()
1494 static int qla4xxx_eh_wait_for_commands(struct scsi_qla_host *ha, in qla4xxx_eh_wait_for_commands() argument
1506 for (cnt = 0; cnt < ha->host->can_queue; cnt++) { in qla4xxx_eh_wait_for_commands()
1507 cmd = scsi_host_find_tag(ha->host, cnt); in qla4xxx_eh_wait_for_commands()
1510 if (!qla4xxx_eh_wait_on_command(ha, cmd)) { in qla4xxx_eh_wait_for_commands()
1528 struct scsi_qla_host *ha = to_qla_host(cmd->device->host); in qla4xxx_eh_device_reset() local
1537 dev_info(&ha->pdev->dev, in qla4xxx_eh_device_reset()
1538 "scsi%ld:%d:%d:%d: DEVICE RESET ISSUED.\n", ha->host_no, in qla4xxx_eh_device_reset()
1543 "dpc_flags=%lx, status=%x allowed=%d\n", ha->host_no, in qla4xxx_eh_device_reset()
1545 ha->dpc_flags, cmd->result, cmd->allowed)); in qla4xxx_eh_device_reset()
1548 stat = qla4xxx_reset_lun(ha, ddb_entry, cmd->device->lun); in qla4xxx_eh_device_reset()
1550 dev_info(&ha->pdev->dev, "DEVICE RESET FAILED. %d\n", stat); in qla4xxx_eh_device_reset()
1554 if (qla4xxx_eh_wait_for_commands(ha, scsi_target(cmd->device), in qla4xxx_eh_device_reset()
1556 dev_info(&ha->pdev->dev, in qla4xxx_eh_device_reset()
1563 if (qla4xxx_send_marker_iocb(ha, ddb_entry, cmd->device->lun, in qla4xxx_eh_device_reset()
1567 dev_info(&ha->pdev->dev, in qla4xxx_eh_device_reset()
1569 ha->host_no, cmd->device->channel, cmd->device->id, in qla4xxx_eh_device_reset()
1587 struct scsi_qla_host *ha = to_qla_host(cmd->device->host); in qla4xxx_eh_target_reset() local
1600 ha->host_no, cmd, jiffies, cmd->request->timeout / HZ, in qla4xxx_eh_target_reset()
1601 ha->dpc_flags, cmd->result, cmd->allowed)); in qla4xxx_eh_target_reset()
1603 stat = qla4xxx_reset_target(ha, ddb_entry); in qla4xxx_eh_target_reset()
1610 if (qla4xxx_eh_wait_for_commands(ha, scsi_target(cmd->device), in qla4xxx_eh_target_reset()
1619 if (qla4xxx_send_marker_iocb(ha, ddb_entry, cmd->device->lun, in qla4xxx_eh_target_reset()
1642 struct scsi_qla_host *ha; in qla4xxx_eh_host_reset() local
1644 ha = (struct scsi_qla_host *) cmd->device->host->hostdata; in qla4xxx_eh_host_reset()
1646 dev_info(&ha->pdev->dev, in qla4xxx_eh_host_reset()
1647 "scsi(%ld:%d:%d:%d): ADAPTER RESET ISSUED.\n", ha->host_no, in qla4xxx_eh_host_reset()
1650 if (qla4xxx_wait_for_hba_online(ha) != QLA_SUCCESS) { in qla4xxx_eh_host_reset()
1652 "DEAD.\n", ha->host_no, cmd->device->channel, in qla4xxx_eh_host_reset()
1659 clear_bit(AF_ONLINE, &ha->flags); in qla4xxx_eh_host_reset()
1660 flush_workqueue(ha->dpc_thread); in qla4xxx_eh_host_reset()
1662 if (qla4xxx_recover_adapter(ha, PRESERVE_DDB_LIST) == QLA_SUCCESS) in qla4xxx_eh_host_reset()
1665 dev_info(&ha->pdev->dev, "HOST RESET %s.\n", in qla4xxx_eh_host_reset()