Lines Matching refs:vha
367 qla2x00_start_timer(scsi_qla_host_t *vha, unsigned long interval) in qla2x00_start_timer() argument
369 timer_setup(&vha->timer, qla2x00_timer, 0); in qla2x00_start_timer()
370 vha->timer.expires = jiffies + interval * HZ; in qla2x00_start_timer()
371 add_timer(&vha->timer); in qla2x00_start_timer()
372 vha->timer_active = 1; in qla2x00_start_timer()
376 qla2x00_restart_timer(scsi_qla_host_t *vha, unsigned long interval) in qla2x00_restart_timer() argument
379 if (vha->device_flags & DFLG_DEV_FAILED) { in qla2x00_restart_timer()
380 ql_dbg(ql_dbg_timer, vha, 0x600d, in qla2x00_restart_timer()
385 mod_timer(&vha->timer, jiffies + interval * HZ); in qla2x00_restart_timer()
389 qla2x00_stop_timer(scsi_qla_host_t *vha) in qla2x00_stop_timer() argument
391 del_timer_sync(&vha->timer); in qla2x00_stop_timer()
392 vha->timer_active = 0; in qla2x00_stop_timer()
407 static void qla_init_base_qpair(struct scsi_qla_host *vha, struct req_que *req, in qla_init_base_qpair() argument
410 struct qla_hw_data *ha = vha->hw; in qla_init_base_qpair()
417 ha->base_qpair->vha = vha; in qla_init_base_qpair()
435 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); in qla2x00_alloc_queues() local
440 ql_log(ql_log_fatal, vha, 0x003b, in qla2x00_alloc_queues()
448 ql_log(ql_log_fatal, vha, 0x003c, in qla2x00_alloc_queues()
455 ql_log(ql_log_warn, vha, 0x00e0, in qla2x00_alloc_queues()
460 qla_init_base_qpair(vha, req, rsp); in qla2x00_alloc_queues()
466 ql_log(ql_log_fatal, vha, 0x0180, in qla2x00_alloc_queues()
588 qla2x00_pci_info_str(struct scsi_qla_host *vha, char *str, size_t str_len) in qla2x00_pci_info_str() argument
590 struct qla_hw_data *ha = vha->hw; in qla2x00_pci_info_str()
609 qla24xx_pci_info_str(struct scsi_qla_host *vha, char *str, size_t str_len) in qla24xx_pci_info_str() argument
614 struct qla_hw_data *ha = vha->hw; in qla24xx_pci_info_str()
660 qla2x00_fw_version_str(struct scsi_qla_host *vha, char *str, size_t size) in qla2x00_fw_version_str() argument
663 struct qla_hw_data *ha = vha->hw; in qla2x00_fw_version_str()
698 qla24xx_fw_version_str(struct scsi_qla_host *vha, char *str, size_t size) in qla24xx_fw_version_str() argument
700 struct qla_hw_data *ha = vha->hw; in qla24xx_fw_version_str()
709 struct qla_hw_data *ha = sp->vha->hw; in qla2x00_sp_free_dma()
765 struct qla_hw_data *ha = sp->fcport->vha->hw; in qla2xxx_qpair_sp_free_dma()
807 ql_dbg(ql_dbg_tgt+ql_dbg_verbose, sp->vha, 0xe022, in qla2xxx_qpair_sp_free_dma()
813 ql_dbg(ql_dbg_tgt+ql_dbg_verbose, sp->vha, 0xe022, in qla2xxx_qpair_sp_free_dma()
857 scsi_qla_host_t *vha = shost_priv(host); in qla2xxx_queuecommand() local
860 struct qla_hw_data *ha = vha->hw; in qla2xxx_queuecommand()
886 ql_dbg(ql_dbg_aer, vha, 0x9010, in qla2xxx_queuecommand()
891 ql_dbg(ql_dbg_aer, vha, 0x9011, in qla2xxx_queuecommand()
901 ql_dbg(ql_dbg_io + ql_dbg_verbose, vha, 0x3003, in qla2xxx_queuecommand()
907 if (!vha->flags.difdix_supported && in qla2xxx_queuecommand()
909 ql_dbg(ql_dbg_io, vha, 0x3004, in qla2xxx_queuecommand()
924 ql_dbg(ql_dbg_io, vha, 0x3005, in qla2xxx_queuecommand()
947 qla2xxx_init_sp(sp, vha, vha->hw->base_qpair, fcport); in qla2xxx_queuecommand()
958 ql_dbg(ql_dbg_io + ql_dbg_verbose, vha, 0x3013, in qla2xxx_queuecommand()
983 scsi_qla_host_t *vha = shost_priv(host); in qla2xxx_mqueuecommand() local
986 struct qla_hw_data *ha = vha->hw; in qla2xxx_mqueuecommand()
994 ql_dbg(ql_dbg_io + ql_dbg_verbose, vha, 0x3076, in qla2xxx_mqueuecommand()
1001 ql_dbg(ql_dbg_io, vha, 0x3077, in qla2xxx_mqueuecommand()
1015 ql_dbg(ql_dbg_io, vha, 0x3077, in qla2xxx_mqueuecommand()
1038 qla2xxx_init_sp(sp, vha, qpair, fcport); in qla2xxx_mqueuecommand()
1048 ql_dbg(ql_dbg_io + ql_dbg_verbose, vha, 0x3078, in qla2xxx_mqueuecommand()
1086 scsi_qla_host_t *vha = shost_priv(cmd->device->host); in qla2x00_eh_wait_on_command() local
1087 struct qla_hw_data *ha = vha->hw; in qla2x00_eh_wait_on_command()
1091 ql_dbg(ql_dbg_taskm, vha, 0x8005, in qla2x00_eh_wait_on_command()
1123 qla2x00_wait_for_hba_online(scsi_qla_host_t *vha) in qla2x00_wait_for_hba_online() argument
1127 struct qla_hw_data *ha = vha->hw; in qla2x00_wait_for_hba_online()
1146 static inline int test_fcport_count(scsi_qla_host_t *vha) in test_fcport_count() argument
1148 struct qla_hw_data *ha = vha->hw; in test_fcport_count()
1154 ql_dbg(ql_dbg_init, vha, 0x00ec, in test_fcport_count()
1156 vha, vha->fcport_count); in test_fcport_count()
1157 res = (vha->fcport_count == 0); in test_fcport_count()
1161 list_for_each_entry(fcport, &vha->vp_fcports, list) { in test_fcport_count()
1183 qla2x00_wait_for_sess_deletion(scsi_qla_host_t *vha) in qla2x00_wait_for_sess_deletion() argument
1187 qla2x00_mark_all_devices_lost(vha); in qla2x00_wait_for_sess_deletion()
1190 if (wait_event_timeout(vha->fcport_waitQ, in qla2x00_wait_for_sess_deletion()
1191 test_fcport_count(vha), HZ) > 0) in qla2x00_wait_for_sess_deletion()
1195 flush_workqueue(vha->hw->wq); in qla2x00_wait_for_sess_deletion()
1211 qla2x00_wait_for_hba_ready(scsi_qla_host_t *vha) in qla2x00_wait_for_hba_ready() argument
1213 struct qla_hw_data *ha = vha->hw; in qla2x00_wait_for_hba_ready()
1216 while ((qla2x00_reset_active(vha) || ha->dpc_active || in qla2x00_wait_for_hba_ready()
1218 test_bit(FX00_RESET_RECOVERY, &vha->dpc_flags) || in qla2x00_wait_for_hba_ready()
1219 test_bit(FX00_TARGET_SCAN, &vha->dpc_flags)) { in qla2x00_wait_for_hba_ready()
1227 qla2x00_wait_for_chip_reset(scsi_qla_host_t *vha) in qla2x00_wait_for_chip_reset() argument
1231 struct qla_hw_data *ha = vha->hw; in qla2x00_wait_for_chip_reset()
1272 scsi_qla_host_t *vha = shost_priv(cmd->device->host); in qla2xxx_eh_abort() local
1279 struct qla_hw_data *ha = vha->hw; in qla2xxx_eh_abort()
1286 ql_log(ql_log_info, vha, 0x8042, in qla2xxx_eh_abort()
1288 qla_pci_set_eeh_busy(vha); in qla2xxx_eh_abort()
1300 vha->cmd_timeout_cnt++; in qla2xxx_eh_abort()
1313 ql_dbg(ql_dbg_taskm, vha, 0x8002, in qla2xxx_eh_abort()
1315 vha->host_no, id, lun, sp, cmd, sp->handle); in qla2xxx_eh_abort()
1324 ql_dbg(ql_dbg_taskm, vha, 0x8003, in qla2xxx_eh_abort()
1333 ql_dbg(ql_dbg_taskm, vha, 0xffff, in qla2xxx_eh_abort()
1348 ql_log(ql_log_info, vha, 0x801c, in qla2xxx_eh_abort()
1350 vha->host_no, id, lun, ret); in qla2xxx_eh_abort()
1364 scsi_qla_host_t *vha = qpair->vha; in __qla2x00_eh_wait_for_pending_commands() local
1379 if (vha->vp_idx != sp->vha->vp_idx) in __qla2x00_eh_wait_for_pending_commands()
1408 qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *vha, unsigned int t, in qla2x00_eh_wait_for_pending_commands() argument
1412 struct qla_hw_data *ha = vha->hw; in qla2x00_eh_wait_for_pending_commands()
1438 scsi_qla_host_t *vha = shost_priv(sdev->host); in qla2xxx_eh_device_reset() local
1441 struct qla_hw_data *ha = vha->hw; in qla2xxx_eh_device_reset()
1445 ql_log(ql_log_info, vha, 0x803e, in qla2xxx_eh_device_reset()
1447 qla_pci_set_eeh_busy(vha); in qla2xxx_eh_device_reset()
1462 ql_log(ql_log_info, vha, 0x8009, in qla2xxx_eh_device_reset()
1463 "DEVICE RESET ISSUED nexus=%ld:%d:%llu cmd=%p.\n", vha->host_no, in qla2xxx_eh_device_reset()
1467 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { in qla2xxx_eh_device_reset()
1468 ql_log(ql_log_warn, vha, 0x800a, in qla2xxx_eh_device_reset()
1475 ql_log(ql_log_warn, vha, 0x800c, in qla2xxx_eh_device_reset()
1480 if (qla2x00_eh_wait_for_pending_commands(vha, fcport->d_id.b24, in qla2xxx_eh_device_reset()
1483 ql_log(ql_log_warn, vha, 0x800d, in qla2xxx_eh_device_reset()
1488 ql_log(ql_log_info, vha, 0x800e, in qla2xxx_eh_device_reset()
1490 vha->host_no, sdev->id, sdev->lun, cmd); in qla2xxx_eh_device_reset()
1495 ql_log(ql_log_info, vha, 0x800f, in qla2xxx_eh_device_reset()
1497 reset_errors[err], vha->host_no, sdev->id, sdev->lun, in qla2xxx_eh_device_reset()
1499 vha->reset_cmd_err_cnt++; in qla2xxx_eh_device_reset()
1508 scsi_qla_host_t *vha = shost_priv(rport_to_shost(rport)); in qla2xxx_eh_target_reset() local
1509 struct qla_hw_data *ha = vha->hw; in qla2xxx_eh_target_reset()
1514 ql_log(ql_log_info, vha, 0x803f, in qla2xxx_eh_target_reset()
1516 qla_pci_set_eeh_busy(vha); in qla2xxx_eh_target_reset()
1531 ql_log(ql_log_info, vha, 0x8009, in qla2xxx_eh_target_reset()
1532 "TARGET RESET ISSUED nexus=%ld:%d cmd=%p.\n", vha->host_no, in qla2xxx_eh_target_reset()
1536 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { in qla2xxx_eh_target_reset()
1537 ql_log(ql_log_warn, vha, 0x800a, in qla2xxx_eh_target_reset()
1543 ql_log(ql_log_warn, vha, 0x800c, in qla2xxx_eh_target_reset()
1548 if (qla2x00_eh_wait_for_pending_commands(vha, fcport->d_id.b24, 0, in qla2xxx_eh_target_reset()
1550 ql_log(ql_log_warn, vha, 0x800d, in qla2xxx_eh_target_reset()
1555 ql_log(ql_log_info, vha, 0x800e, in qla2xxx_eh_target_reset()
1557 vha->host_no, sdev->id, cmd); in qla2xxx_eh_target_reset()
1562 ql_log(ql_log_info, vha, 0x800f, in qla2xxx_eh_target_reset()
1564 reset_errors[err], vha->host_no, cmd->device->id, cmd->device->lun, in qla2xxx_eh_target_reset()
1566 vha->reset_cmd_err_cnt++; in qla2xxx_eh_target_reset()
1588 scsi_qla_host_t *vha = shost_priv(cmd->device->host); in qla2xxx_eh_bus_reset() local
1592 struct qla_hw_data *ha = vha->hw; in qla2xxx_eh_bus_reset()
1595 ql_log(ql_log_info, vha, 0x8040, in qla2xxx_eh_bus_reset()
1597 qla_pci_set_eeh_busy(vha); in qla2xxx_eh_bus_reset()
1604 if (qla2x00_chip_is_down(vha)) in qla2xxx_eh_bus_reset()
1607 ql_log(ql_log_info, vha, 0x8012, in qla2xxx_eh_bus_reset()
1608 "BUS RESET ISSUED nexus=%ld:%d:%llu.\n", vha->host_no, id, lun); in qla2xxx_eh_bus_reset()
1610 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { in qla2xxx_eh_bus_reset()
1611 ql_log(ql_log_fatal, vha, 0x8013, in qla2xxx_eh_bus_reset()
1616 if (qla2x00_loop_reset(vha) == QLA_SUCCESS) in qla2xxx_eh_bus_reset()
1623 if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0, WAIT_HOST) != in qla2xxx_eh_bus_reset()
1625 ql_log(ql_log_warn, vha, 0x8014, in qla2xxx_eh_bus_reset()
1631 ql_log(ql_log_warn, vha, 0x802b, in qla2xxx_eh_bus_reset()
1633 (ret == FAILED) ? "FAILED" : "SUCCEEDED", vha->host_no, id, lun); in qla2xxx_eh_bus_reset()
1656 scsi_qla_host_t *vha = shost_priv(cmd->device->host); in qla2xxx_eh_host_reset() local
1657 struct qla_hw_data *ha = vha->hw; in qla2xxx_eh_host_reset()
1664 ql_log(ql_log_info, vha, 0x8041, in qla2xxx_eh_host_reset()
1666 qla_pci_set_eeh_busy(vha); in qla2xxx_eh_host_reset()
1673 ql_log(ql_log_info, vha, 0x8018, in qla2xxx_eh_host_reset()
1674 "ADAPTER RESET ISSUED nexus=%ld:%d:%llu.\n", vha->host_no, id, lun); in qla2xxx_eh_host_reset()
1680 if (qla2x00_reset_active(vha) || ha->optrom_state != QLA_SWAITING) in qla2xxx_eh_host_reset()
1683 if (vha != base_vha) { in qla2xxx_eh_host_reset()
1684 if (qla2x00_vp_abort_isp(vha)) in qla2xxx_eh_host_reset()
1687 if (IS_P3P_TYPE(vha->hw)) { in qla2xxx_eh_host_reset()
1688 if (!qla82xx_fcoe_ctx_reset(vha)) { in qla2xxx_eh_host_reset()
1704 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { in qla2xxx_eh_host_reset()
1705 ql_log(ql_log_warn, vha, 0x802a, in qla2xxx_eh_host_reset()
1714 if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0, WAIT_HOST) == in qla2xxx_eh_host_reset()
1719 ql_log(ql_log_info, vha, 0x8017, in qla2xxx_eh_host_reset()
1721 (ret == FAILED) ? "FAILED" : "SUCCEEDED", vha->host_no, id, lun); in qla2xxx_eh_host_reset()
1737 qla2x00_loop_reset(scsi_qla_host_t *vha) in qla2x00_loop_reset() argument
1740 struct qla_hw_data *ha = vha->hw; in qla2x00_loop_reset()
1746 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_loop_reset()
1747 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla2x00_loop_reset()
1748 qla2x00_mark_all_devices_lost(vha); in qla2x00_loop_reset()
1749 ret = qla2x00_full_login_lip(vha); in qla2x00_loop_reset()
1751 ql_dbg(ql_dbg_taskm, vha, 0x802d, in qla2x00_loop_reset()
1757 ret = qla2x00_lip_reset(vha); in qla2x00_loop_reset()
1759 ql_dbg(ql_dbg_taskm, vha, 0x802e, in qla2x00_loop_reset()
1764 vha->marker_needed = 1; in qla2x00_loop_reset()
1779 scsi_qla_host_t *vha = qp->vha; in qla2x00_abort_srb() local
1780 struct qla_hw_data *ha = vha->hw; in qla2x00_abort_srb()
1788 if (qla2x00_chip_is_down(vha)) { in qla2x00_abort_srb()
1795 !test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags) && in qla2x00_abort_srb()
1813 ql_dbg(ql_dbg_taskm, vha, 0xffff, in qla2x00_abort_srb()
1851 scsi_qla_host_t *vha = qp->vha; in __qla2x00_abort_all_cmds() local
1852 struct qla_hw_data *ha = vha->hw; in __qla2x00_abort_all_cmds()
1854 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in __qla2x00_abort_all_cmds()
1867 if (qla2x00_chip_is_down(vha)) { in __qla2x00_abort_all_cmds()
1880 if (!vha->hw->tgt.tgt_ops || !tgt || in __qla2x00_abort_all_cmds()
1881 qla_ini_mode_enabled(vha)) { in __qla2x00_abort_all_cmds()
1882 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf003, in __qla2x00_abort_all_cmds()
1884 vha->dpc_flags); in __qla2x00_abort_all_cmds()
1907 qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) in qla2x00_abort_all_cmds() argument
1910 struct qla_hw_data *ha = vha->hw; in qla2x00_abort_all_cmds()
1943 scsi_qla_host_t *vha = shost_priv(sdev->host); in qla2xxx_slave_configure() local
1944 struct req_que *req = vha->req; in qla2xxx_slave_configure()
1946 if (IS_T10_PI_CAPABLE(vha->hw)) in qla2xxx_slave_configure()
2817 scsi_qla_host_t *vha = shost_priv(shost); in qla2xxx_scan_start() local
2819 if (vha->hw->flags.running_gold_fw) in qla2xxx_scan_start()
2822 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2xxx_scan_start()
2823 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla2xxx_scan_start()
2824 set_bit(RSCN_UPDATE, &vha->dpc_flags); in qla2xxx_scan_start()
2825 set_bit(NPIV_CONFIG_NEEDED, &vha->dpc_flags); in qla2xxx_scan_start()
2831 scsi_qla_host_t *vha = shost_priv(shost); in qla2xxx_scan_finished() local
2833 if (test_bit(UNLOADING, &vha->dpc_flags)) in qla2xxx_scan_finished()
2835 if (!vha->host) in qla2xxx_scan_finished()
2837 if (time > vha->hw->loop_reset_delay * HZ) in qla2xxx_scan_finished()
2840 return atomic_read(&vha->loop_state) == LOOP_READY; in qla2xxx_scan_finished()
2855 struct scsi_qla_host *vha = container_of(work, in qla2x00_iocb_work_fn() local
2857 struct qla_hw_data *ha = vha->hw; in qla2x00_iocb_work_fn()
2865 while (!list_empty(&vha->work_list) && i > 0) { in qla2x00_iocb_work_fn()
2866 qla2x00_do_work(vha); in qla2x00_iocb_work_fn()
2870 spin_lock_irqsave(&vha->work_lock, flags); in qla2x00_iocb_work_fn()
2871 clear_bit(IOCB_WORK_ACTIVE, &vha->dpc_flags); in qla2x00_iocb_work_fn()
2872 spin_unlock_irqrestore(&vha->work_lock, flags); in qla2x00_iocb_work_fn()
3247 ha->mr.fcport.vha = base_vha; in qla2x00_probe_one()
3678 scsi_qla_host_t *vha; in qla2x00_shutdown() local
3681 vha = pci_get_drvdata(pdev); in qla2x00_shutdown()
3682 ha = vha->hw; in qla2x00_shutdown()
3684 ql_log(ql_log_info, vha, 0xfffa, in qla2x00_shutdown()
3691 __qla_set_remove_flag(vha); in qla2x00_shutdown()
3699 qlafx00_driver_shutdown(vha, 20); in qla2x00_shutdown()
3703 qla2x00_disable_fce_trace(vha, NULL, NULL); in qla2x00_shutdown()
3709 qla2x00_disable_eft_trace(vha); in qla2x00_shutdown()
3714 qla2x00_abort_isp_cleanup(vha); in qla2x00_shutdown()
3717 qla2x00_try_to_stop_firmware(vha); in qla2x00_shutdown()
3721 if (vha->timer_active) in qla2x00_shutdown()
3722 qla2x00_stop_timer(vha); in qla2x00_shutdown()
3725 vha->flags.online = 0; in qla2x00_shutdown()
3729 vha->flags.init_done = 0; in qla2x00_shutdown()
3733 qla2x00_free_irqs(vha); in qla2x00_shutdown()
3738 ql_log(ql_log_info, vha, 0xfffe, in qla2x00_shutdown()
3746 scsi_qla_host_t *vha; in qla2x00_delete_all_vps() local
3755 vha = list_first_entry(&base_vha->list, scsi_qla_host_t, list); in qla2x00_delete_all_vps()
3756 scsi_host_get(vha->host); in qla2x00_delete_all_vps()
3761 qla_nvme_delete(vha); in qla2x00_delete_all_vps()
3763 fc_vport_terminate(vha->fc_vport); in qla2x00_delete_all_vps()
3764 scsi_host_put(vha->host); in qla2x00_delete_all_vps()
3963 if (item == &item->vha->default_item) in qla24xx_free_purex_list()
3971 qla2x00_free_device(scsi_qla_host_t *vha) in qla2x00_free_device() argument
3973 struct qla_hw_data *ha = vha->hw; in qla2x00_free_device()
3975 qla2x00_abort_all_cmds(vha, DID_NO_CONNECT << 16); in qla2x00_free_device()
3978 if (vha->timer_active) in qla2x00_free_device()
3979 qla2x00_stop_timer(vha); in qla2x00_free_device()
3981 qla25xx_delete_queues(vha); in qla2x00_free_device()
3982 vha->flags.online = 0; in qla2x00_free_device()
3986 vha->flags.init_done = 0; in qla2x00_free_device()
3990 qla2x00_free_fcports(vha); in qla2x00_free_device()
3992 qla2x00_free_irqs(vha); in qla2x00_free_device()
4002 qla24xx_free_purex_list(&vha->purex_list); in qla2x00_free_device()
4006 qla82xx_md_free(vha); in qla2x00_free_device()
4014 void qla2x00_free_fcports(struct scsi_qla_host *vha) in qla2x00_free_fcports() argument
4018 list_for_each_entry_safe(fcport, tfcport, &vha->vp_fcports, list) in qla2x00_free_fcports()
4023 qla2x00_schedule_rport_del(struct scsi_qla_host *vha, fc_port_t *fcport) in qla2x00_schedule_rport_del() argument
4031 ql_dbg(ql_dbg_disc, fcport->vha, 0x2109, in qla2x00_schedule_rport_del()
4037 qlt_do_generation_tick(vha, &now); in qla2x00_schedule_rport_del()
4049 void qla2x00_mark_device_lost(scsi_qla_host_t *vha, fc_port_t *fcport, in qla2x00_mark_device_lost() argument
4052 if (IS_QLAFX00(vha->hw)) { in qla2x00_mark_device_lost()
4054 qla2x00_schedule_rport_del(vha, fcport); in qla2x00_mark_device_lost()
4059 vha->vp_idx == fcport->vha->vp_idx) { in qla2x00_mark_device_lost()
4061 qla2x00_schedule_rport_del(vha, fcport); in qla2x00_mark_device_lost()
4074 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_mark_device_lost()
4078 qla2x00_mark_all_devices_lost(scsi_qla_host_t *vha) in qla2x00_mark_all_devices_lost() argument
4082 ql_dbg(ql_dbg_disc, vha, 0x20f1, in qla2x00_mark_all_devices_lost()
4085 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_mark_all_devices_lost()
4089 !qla2x00_reset_active(vha)) { in qla2x00_mark_all_devices_lost()
4090 ql_dbg(ql_dbg_disc, vha, 0x211a, in qla2x00_mark_all_devices_lost()
4558 qla2x00_set_exlogins_buffer(scsi_qla_host_t *vha) in qla2x00_set_exlogins_buffer() argument
4563 struct qla_hw_data *ha = vha->hw; in qla2x00_set_exlogins_buffer()
4572 ql_log(ql_log_info, vha, 0xd021, "EXLOGIN count: %d.\n", ql2xexlogins); in qla2x00_set_exlogins_buffer()
4574 rval = qla_get_exlogin_status(vha, &size, &max_cnt); in qla2x00_set_exlogins_buffer()
4588 ql_log(ql_log_info, vha, 0xd024, in qla2x00_set_exlogins_buffer()
4592 ql_log(ql_log_info, vha, 0xd025, in qla2x00_set_exlogins_buffer()
4606 rval = qla_set_exlogin_mem_cfg(vha, ha->exlogin_buf_dma); in qla2x00_set_exlogins_buffer()
4608 ql_log(ql_log_fatal, vha, 0xd033, in qla2x00_set_exlogins_buffer()
4634 qla2x00_number_of_exch(scsi_qla_host_t *vha, u32 *ret_cnt, u16 max_cnt) in qla2x00_number_of_exch() argument
4637 struct init_cb_81xx *icb = (struct init_cb_81xx *)&vha->hw->init_cb; in qla2x00_number_of_exch()
4640 if (max_cnt > vha->hw->max_exchg) in qla2x00_number_of_exch()
4641 max_cnt = vha->hw->max_exchg; in qla2x00_number_of_exch()
4643 if (qla_ini_mode_enabled(vha)) { in qla2x00_number_of_exch()
4644 if (vha->ql2xiniexchg > max_cnt) in qla2x00_number_of_exch()
4645 vha->ql2xiniexchg = max_cnt; in qla2x00_number_of_exch()
4647 if (vha->ql2xiniexchg > FW_DEF_EXCHANGES_CNT) in qla2x00_number_of_exch()
4648 *ret_cnt = vha->ql2xiniexchg; in qla2x00_number_of_exch()
4650 } else if (qla_tgt_mode_enabled(vha)) { in qla2x00_number_of_exch()
4651 if (vha->ql2xexchoffld > max_cnt) { in qla2x00_number_of_exch()
4652 vha->ql2xexchoffld = max_cnt; in qla2x00_number_of_exch()
4653 icb->exchange_count = cpu_to_le16(vha->ql2xexchoffld); in qla2x00_number_of_exch()
4656 if (vha->ql2xexchoffld > FW_DEF_EXCHANGES_CNT) in qla2x00_number_of_exch()
4657 *ret_cnt = vha->ql2xexchoffld; in qla2x00_number_of_exch()
4658 } else if (qla_dual_mode_enabled(vha)) { in qla2x00_number_of_exch()
4659 temp = vha->ql2xiniexchg + vha->ql2xexchoffld; in qla2x00_number_of_exch()
4661 vha->ql2xiniexchg -= (temp - max_cnt)/2; in qla2x00_number_of_exch()
4662 vha->ql2xexchoffld -= (((temp - max_cnt)/2) + 1); in qla2x00_number_of_exch()
4664 icb->exchange_count = cpu_to_le16(vha->ql2xexchoffld); in qla2x00_number_of_exch()
4673 qla2x00_set_exchoffld_buffer(scsi_qla_host_t *vha) in qla2x00_set_exchoffld_buffer() argument
4678 struct qla_hw_data *ha = vha->hw; in qla2x00_set_exchoffld_buffer()
4687 rval = qla_get_exchoffld_status(vha, &size, &max_cnt); in qla2x00_set_exchoffld_buffer()
4694 qla2x00_number_of_exch(vha, &actual_cnt, max_cnt); in qla2x00_set_exchoffld_buffer()
4695 ql_log(ql_log_info, vha, 0xd014, in qla2x00_set_exchoffld_buffer()
4710 ql_log(ql_log_info, vha, 0xd016, in qla2x00_set_exchoffld_buffer()
4714 ql_log(ql_log_info, vha, 0xd017, in qla2x00_set_exchoffld_buffer()
4745 ql_log(ql_log_info, vha, 0xd016, in qla2x00_set_exchoffld_buffer()
4752 rval = qla_set_exchoffld_mem_cfg(vha); in qla2x00_set_exchoffld_buffer()
4754 ql_log(ql_log_fatal, vha, 0xd02e, in qla2x00_set_exchoffld_buffer()
4761 if (qla_ini_mode_enabled(vha)) in qla2x00_set_exchoffld_buffer()
4764 icb->exchange_count = cpu_to_le16(vha->ql2xexchoffld); in qla2x00_set_exchoffld_buffer()
4998 struct scsi_qla_host *vha = NULL; in qla2x00_create_host() local
5008 vha = shost_priv(host); in qla2x00_create_host()
5009 memset(vha, 0, sizeof(scsi_qla_host_t)); in qla2x00_create_host()
5011 vha->host = host; in qla2x00_create_host()
5012 vha->host_no = host->host_no; in qla2x00_create_host()
5013 vha->hw = ha; in qla2x00_create_host()
5015 vha->qlini_mode = ql2x_ini_mode; in qla2x00_create_host()
5016 vha->ql2xexchoffld = ql2xexchoffld; in qla2x00_create_host()
5017 vha->ql2xiniexchg = ql2xiniexchg; in qla2x00_create_host()
5019 INIT_LIST_HEAD(&vha->vp_fcports); in qla2x00_create_host()
5020 INIT_LIST_HEAD(&vha->work_list); in qla2x00_create_host()
5021 INIT_LIST_HEAD(&vha->list); in qla2x00_create_host()
5022 INIT_LIST_HEAD(&vha->qla_cmd_list); in qla2x00_create_host()
5023 INIT_LIST_HEAD(&vha->qla_sess_op_cmd_list); in qla2x00_create_host()
5024 INIT_LIST_HEAD(&vha->logo_list); in qla2x00_create_host()
5025 INIT_LIST_HEAD(&vha->plogi_ack_list); in qla2x00_create_host()
5026 INIT_LIST_HEAD(&vha->qp_list); in qla2x00_create_host()
5027 INIT_LIST_HEAD(&vha->gnl.fcports); in qla2x00_create_host()
5028 INIT_LIST_HEAD(&vha->gpnid_list); in qla2x00_create_host()
5029 INIT_WORK(&vha->iocb_work, qla2x00_iocb_work_fn); in qla2x00_create_host()
5031 INIT_LIST_HEAD(&vha->purex_list.head); in qla2x00_create_host()
5032 spin_lock_init(&vha->purex_list.lock); in qla2x00_create_host()
5034 spin_lock_init(&vha->work_lock); in qla2x00_create_host()
5035 spin_lock_init(&vha->cmd_list_lock); in qla2x00_create_host()
5036 init_waitqueue_head(&vha->fcport_waitQ); in qla2x00_create_host()
5037 init_waitqueue_head(&vha->vref_waitq); in qla2x00_create_host()
5038 qla_enode_init(vha); in qla2x00_create_host()
5039 qla_edb_init(vha); in qla2x00_create_host()
5042 vha->gnl.size = sizeof(struct get_name_list_extended) * in qla2x00_create_host()
5044 vha->gnl.l = dma_alloc_coherent(&ha->pdev->dev, in qla2x00_create_host()
5045 vha->gnl.size, &vha->gnl.ldma, GFP_KERNEL); in qla2x00_create_host()
5046 if (!vha->gnl.l) { in qla2x00_create_host()
5047 ql_log(ql_log_fatal, vha, 0xd04a, in qla2x00_create_host()
5049 scsi_host_put(vha->host); in qla2x00_create_host()
5054 vha->scan.size = ha->max_fibre_devices * sizeof(struct fab_scan_rp); in qla2x00_create_host()
5055 vha->scan.l = vmalloc(vha->scan.size); in qla2x00_create_host()
5056 if (!vha->scan.l) { in qla2x00_create_host()
5057 ql_log(ql_log_fatal, vha, 0xd04a, in qla2x00_create_host()
5059 dma_free_coherent(&ha->pdev->dev, vha->gnl.size, in qla2x00_create_host()
5060 vha->gnl.l, vha->gnl.ldma); in qla2x00_create_host()
5061 vha->gnl.l = NULL; in qla2x00_create_host()
5062 scsi_host_put(vha->host); in qla2x00_create_host()
5065 INIT_DELAYED_WORK(&vha->scan.scan_work, qla_scan_work_fn); in qla2x00_create_host()
5067 snprintf(vha->host_str, sizeof(vha->host_str), "%s_%lu", in qla2x00_create_host()
5068 QLA2XXX_DRIVER_NAME, vha->host_no); in qla2x00_create_host()
5069 ql_dbg(ql_dbg_init, vha, 0x0041, in qla2x00_create_host()
5071 vha->host, vha->hw, vha, in qla2x00_create_host()
5074 return vha; in qla2x00_create_host()
5078 qla2x00_alloc_work(struct scsi_qla_host *vha, enum qla_work_type type) in qla2x00_alloc_work() argument
5082 if (test_bit(UNLOADING, &vha->dpc_flags)) in qla2x00_alloc_work()
5085 if (qla_vha_mark_busy(vha)) in qla2x00_alloc_work()
5090 QLA_VHA_MARK_NOT_BUSY(vha); in qla2x00_alloc_work()
5101 qla2x00_post_work(struct scsi_qla_host *vha, struct qla_work_evt *e) in qla2x00_post_work() argument
5106 spin_lock_irqsave(&vha->work_lock, flags); in qla2x00_post_work()
5107 list_add_tail(&e->list, &vha->work_list); in qla2x00_post_work()
5109 if (!test_and_set_bit(IOCB_WORK_ACTIVE, &vha->dpc_flags)) in qla2x00_post_work()
5112 spin_unlock_irqrestore(&vha->work_lock, flags); in qla2x00_post_work()
5115 queue_work(vha->hw->wq, &vha->iocb_work); in qla2x00_post_work()
5121 qla2x00_post_aen_work(struct scsi_qla_host *vha, enum fc_host_event_code code, in qla2x00_post_aen_work() argument
5126 e = qla2x00_alloc_work(vha, QLA_EVT_AEN); in qla2x00_post_aen_work()
5132 return qla2x00_post_work(vha, e); in qla2x00_post_aen_work()
5136 qla2x00_post_idc_ack_work(struct scsi_qla_host *vha, uint16_t *mb) in qla2x00_post_idc_ack_work() argument
5140 e = qla2x00_alloc_work(vha, QLA_EVT_IDC_ACK); in qla2x00_post_idc_ack_work()
5145 return qla2x00_post_work(vha, e); in qla2x00_post_idc_ack_work()
5150 struct scsi_qla_host *vha, \
5155 e = qla2x00_alloc_work(vha, type); \
5165 return qla2x00_post_work(vha, e); \
5175 qla2x00_post_uevent_work(struct scsi_qla_host *vha, u32 code) in qla2x00_post_uevent_work() argument
5179 e = qla2x00_alloc_work(vha, QLA_EVT_UEVENT); in qla2x00_post_uevent_work()
5184 return qla2x00_post_work(vha, e); in qla2x00_post_uevent_work()
5188 qla2x00_uevent_emit(struct scsi_qla_host *vha, u32 code) in qla2x00_uevent_emit() argument
5196 vha->host_no); in qla2x00_uevent_emit()
5202 kobject_uevent_env(&vha->hw->pdev->dev.kobj, KOBJ_CHANGE, envp); in qla2x00_uevent_emit()
5206 qlafx00_post_aenfx_work(struct scsi_qla_host *vha, uint32_t evtcode, in qlafx00_post_aenfx_work() argument
5211 e = qla2x00_alloc_work(vha, QLA_EVT_AENFX); in qlafx00_post_aenfx_work()
5218 return qla2x00_post_work(vha, e); in qlafx00_post_aenfx_work()
5228 spin_lock_irqsave(&fcport->vha->work_lock, flags); in qla24xx_sched_upd_fcport()
5230 spin_unlock_irqrestore(&fcport->vha->work_lock, flags); in qla24xx_sched_upd_fcport()
5237 spin_unlock_irqrestore(&fcport->vha->work_lock, flags); in qla24xx_sched_upd_fcport()
5243 void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e) in qla24xx_create_new_sess() argument
5251 ql_dbg(ql_dbg_disc, vha, 0xffff, in qla24xx_create_new_sess()
5255 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla24xx_create_new_sess()
5256 fcport = qla2x00_find_fcport_by_wwpn(vha, e->u.new_sess.port_name, 1); in qla24xx_create_new_sess()
5264 qlt_plogi_ack_link(vha, pla, fcport, QLT_PLOGI_LINK_SAME_WWN); in qla24xx_create_new_sess()
5271 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla24xx_create_new_sess()
5272 fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL); in qla24xx_create_new_sess()
5283 if (NVME_PRIORITY(vha->hw, fcport)) in qla24xx_create_new_sess()
5293 if (vha->flags.nvme_enabled) in qla24xx_create_new_sess()
5298 ql_dbg(ql_dbg_disc, vha, 0xffff, in qla24xx_create_new_sess()
5309 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla24xx_create_new_sess()
5311 tfcp = qla2x00_find_fcport_by_wwpn(vha, in qla24xx_create_new_sess()
5315 ql_dbg(ql_dbg_disc, vha, 0xffff, in qla24xx_create_new_sess()
5322 list_add_tail(&fcport->list, &vha->vp_fcports); in qla24xx_create_new_sess()
5326 qlt_plogi_ack_link(vha, pla, fcport, in qla24xx_create_new_sess()
5331 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla24xx_create_new_sess()
5336 fcport->chip_reset = vha->hw->base_qpair->chip_reset; in qla24xx_create_new_sess()
5361 qlt_plogi_ack_unref(vha, pla); in qla24xx_create_new_sess()
5365 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla24xx_create_new_sess()
5366 tfcp = qla2x00_find_fcport_by_nportid(vha, in qla24xx_create_new_sess()
5372 ql_dbg(ql_dbg_disc, vha, 0xffff, in qla24xx_create_new_sess()
5391 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla24xx_create_new_sess()
5395 if (N2N_TOPO(vha->hw)) { in qla24xx_create_new_sess()
5398 if (vha->flags.nvme_enabled) { in qla24xx_create_new_sess()
5405 schedule_delayed_work(&vha->scan.scan_work, 5); in qla24xx_create_new_sess()
5407 qla24xx_fcport_handle_login(vha, fcport); in qla24xx_create_new_sess()
5421 static void qla_sp_retry(struct scsi_qla_host *vha, struct qla_work_evt *e) in qla_sp_retry() argument
5428 ql_dbg(ql_dbg_disc, vha, 0x2043, in qla_sp_retry()
5431 qla24xx_sp_unmap(vha, sp); in qla_sp_retry()
5436 qla2x00_do_work(struct scsi_qla_host *vha) in qla2x00_do_work() argument
5443 spin_lock_irqsave(&vha->work_lock, flags); in qla2x00_do_work()
5444 list_splice_init(&vha->work_list, &work); in qla2x00_do_work()
5445 spin_unlock_irqrestore(&vha->work_lock, flags); in qla2x00_do_work()
5451 fc_host_post_event(vha->host, fc_get_event_number(), in qla2x00_do_work()
5455 qla81xx_idc_ack(vha, e->u.idc_ack.mb); in qla2x00_do_work()
5458 qla2x00_async_login(vha, e->u.logio.fcport, in qla2x00_do_work()
5462 rc = qla2x00_async_logout(vha, e->u.logio.fcport); in qla2x00_do_work()
5465 qla2x00_async_adisc(vha, e->u.logio.fcport, in qla2x00_do_work()
5469 qla2x00_uevent_emit(vha, e->u.uevent.code); in qla2x00_do_work()
5472 qlafx00_process_aen(vha, e); in qla2x00_do_work()
5475 qla24xx_async_gpnid(vha, &e->u.gpnid.id); in qla2x00_do_work()
5478 qla24xx_sp_unmap(vha, e->u.iosb.sp); in qla2x00_do_work()
5481 qla2x00_relogin(vha); in qla2x00_do_work()
5484 qla24xx_create_new_sess(vha, e); in qla2x00_do_work()
5487 qla24xx_async_gpdb(vha, e->u.fcport.fcport, in qla2x00_do_work()
5491 qla24xx_async_prli(vha, e->u.fcport.fcport); in qla2x00_do_work()
5494 qla24xx_async_gpsc(vha, e->u.fcport.fcport); in qla2x00_do_work()
5497 qla24xx_async_gnl(vha, e->u.fcport.fcport); in qla2x00_do_work()
5500 qla24xx_do_nack_work(vha, e); in qla2x00_do_work()
5503 rc = qla2x00_async_prlo(vha, e->u.logio.fcport); in qla2x00_do_work()
5506 qla2x00_async_prlo_done(vha, e->u.logio.fcport, in qla2x00_do_work()
5510 qla24xx_async_gpnft(vha, e->u.gpnft.fc4_type, in qla2x00_do_work()
5514 qla24xx_async_gpnft_done(vha, e->u.iosb.sp); in qla2x00_do_work()
5517 qla24xx_async_gnnft_done(vha, e->u.iosb.sp); in qla2x00_do_work()
5520 qla24xx_async_gnnid(vha, e->u.fcport.fcport); in qla2x00_do_work()
5523 qla24xx_async_gfpnid(vha, e->u.fcport.fcport); in qla2x00_do_work()
5526 qla_sp_retry(vha, e); in qla2x00_do_work()
5529 qla_do_iidma_work(vha, e->u.fcport.fcport); in qla2x00_do_work()
5532 qla24xx_els_dcmd2_iocb(vha, ELS_DCMD_PLOGI, in qla2x00_do_work()
5536 rc = qla24xx_issue_sa_replace_iocb(vha, e); in qla2x00_do_work()
5542 spin_lock_irqsave(&vha->work_lock, flags); in qla2x00_do_work()
5543 list_splice(&work, &vha->work_list); in qla2x00_do_work()
5544 spin_unlock_irqrestore(&vha->work_lock, flags); in qla2x00_do_work()
5552 QLA_VHA_MARK_NOT_BUSY(vha); in qla2x00_do_work()
5556 int qla24xx_post_relogin_work(struct scsi_qla_host *vha) in qla24xx_post_relogin_work() argument
5560 e = qla2x00_alloc_work(vha, QLA_EVT_RELOGIN); in qla24xx_post_relogin_work()
5563 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla24xx_post_relogin_work()
5567 return qla2x00_post_work(vha, e); in qla24xx_post_relogin_work()
5573 void qla2x00_relogin(struct scsi_qla_host *vha) in qla2x00_relogin() argument
5579 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_relogin()
5595 if (vha->hw->current_topology != ISP_CFG_NL) { in qla2x00_relogin()
5598 qla24xx_handle_relogin_event(vha, &ea); in qla2x00_relogin()
5599 } else if (vha->hw->current_topology == in qla2x00_relogin()
5601 IS_QLA2XXX_MIDTYPE(vha->hw)) { in qla2x00_relogin()
5602 (void)qla24xx_fcport_handle_login(vha, in qla2x00_relogin()
5604 } else if (vha->hw->current_topology == in qla2x00_relogin()
5608 qla2x00_local_device_login(vha, in qla2x00_relogin()
5613 ql_dbg(ql_dbg_disc, vha, 0x2003, in qla2x00_relogin()
5617 (vha, fcport); in qla2x00_relogin()
5620 &vha->dpc_flags); in qla2x00_relogin()
5622 ql_dbg(ql_dbg_disc, vha, 0x2007, in qla2x00_relogin()
5636 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_relogin()
5641 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_relogin()
5643 ql_dbg(ql_dbg_disc, vha, 0x400e, in qla2x00_relogin()
5966 qla25xx_rdp_rsp_reduce_size(struct scsi_qla_host *vha, in qla25xx_rdp_rsp_reduce_size() argument
5978 ql_dbg(ql_dbg_init, vha, 0x0181, "%s: s_id=%#x\n", __func__, sid); in qla25xx_rdp_rsp_reduce_size()
5982 ql_dbg(ql_dbg_init, vha, 0x0181, in qla25xx_rdp_rsp_reduce_size()
5984 } else if (qla24xx_get_port_database(vha, in qla25xx_rdp_rsp_reduce_size()
5986 ql_dbg(ql_dbg_init, vha, 0x0181, in qla25xx_rdp_rsp_reduce_size()
5990 ql_dbg(ql_dbg_init, vha, 0x0181, in qla25xx_rdp_rsp_reduce_size()
5999 vha->hw->isp_ops->fw_version_str(vha, fwstr, sizeof(fwstr)); in qla25xx_rdp_rsp_reduce_size()
6005 ql_dbg(ql_dbg_init, vha, 0x0181, "%s: fw=%s\n", __func__, fwstr); in qla25xx_rdp_rsp_reduce_size()
6021 void qla24xx_process_purex_rdp(struct scsi_qla_host *vha, in qla24xx_process_purex_rdp() argument
6024 struct qla_hw_data *ha = vha->hw; in qla24xx_process_purex_rdp()
6039 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x0180, in qla24xx_process_purex_rdp()
6042 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x0181, in qla24xx_process_purex_rdp()
6044 ql_dump_buffer(ql_dbg_init + ql_dbg_verbose, vha, 0x0182, in qla24xx_process_purex_rdp()
6047 if (qla25xx_rdp_rsp_reduce_size(vha, purex)) { in qla24xx_process_purex_rdp()
6050 ql_dbg(ql_dbg_init, vha, 0x0181, in qla24xx_process_purex_rdp()
6058 ql_log(ql_log_warn, vha, 0x0183, in qla24xx_process_purex_rdp()
6066 ql_log(ql_log_warn, vha, 0x0184, in qla24xx_process_purex_rdp()
6132 rval = qla2x00_read_sfp(vha, sfp_dma, sfp, 0xa0, 0x7, 2, 0); in qla24xx_process_purex_rdp()
6145 rval = qla2x00_read_sfp(vha, sfp_dma, sfp, 0xa0, 0x0, 1, 0); in qla24xx_process_purex_rdp()
6156 rval = qla2x00_read_sfp(vha, sfp_dma, sfp, 0xa2, 0x60, 10, 0); in qla24xx_process_purex_rdp()
6182 rval = qla24xx_get_isp_stats(vha, stat, stat_dma, 0); in qla24xx_process_purex_rdp()
6205 vha->node_name, in qla24xx_process_purex_rdp()
6208 vha->port_name, in qla24xx_process_purex_rdp()
6216 vha->fabric_node_name, in qla24xx_process_purex_rdp()
6219 vha->fabric_port_name, in qla24xx_process_purex_rdp()
6262 rval = qla2x00_read_sfp(vha, sfp_dma, sfp, 0xa2, 0, 64, 0); in qla24xx_process_purex_rdp()
6308 rval = qla2x00_read_sfp(vha, sfp_dma, sfp, 0xa2, 112, 64, 0); in qla24xx_process_purex_rdp()
6359 rval = qla2x00_read_sfp(vha, sfp_dma, sfp, 0xa0, 20, 64, 0); in qla24xx_process_purex_rdp()
6376 rval = qla2x00_read_sfp(vha, sfp_dma, sfp, 0xa0, 84, 8, 0); in qla24xx_process_purex_rdp()
6385 ql_dbg(ql_dbg_init, vha, 0x0183, in qla24xx_process_purex_rdp()
6387 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x0184, in qla24xx_process_purex_rdp()
6389 ql_dump_buffer(ql_dbg_init + ql_dbg_verbose, vha, 0x0185, in qla24xx_process_purex_rdp()
6391 ql_dbg(ql_dbg_init + ql_dbg_verbose, vha, 0x0186, in qla24xx_process_purex_rdp()
6393 ql_dump_buffer(ql_dbg_init + ql_dbg_verbose, vha, 0x0187, in qla24xx_process_purex_rdp()
6396 rval = qla2x00_issue_iocb(vha, rsp_els, rsp_els_dma, 0); in qla24xx_process_purex_rdp()
6399 ql_log(ql_log_warn, vha, 0x0188, in qla24xx_process_purex_rdp()
6402 ql_log(ql_log_warn, vha, 0x0189, in qla24xx_process_purex_rdp()
6407 ql_dbg(ql_dbg_init, vha, 0x018a, "%s: done.\n", __func__); in qla24xx_process_purex_rdp()
6428 if (item == &item->vha->default_item) in qla24xx_free_purex_item()
6429 memset(&item->vha->default_item, 0, sizeof(struct purex_item)); in qla24xx_free_purex_item()
6446 item->process_item(item->vha, item); in qla24xx_process_purex_list()
6518 __qla83xx_set_drv_presence(scsi_qla_host_t *vha) in __qla83xx_set_drv_presence() argument
6521 struct qla_hw_data *ha = vha->hw; in __qla83xx_set_drv_presence()
6524 rval = qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence); in __qla83xx_set_drv_presence()
6527 rval = qla83xx_wr_reg(vha, QLA83XX_IDC_DRV_PRESENCE, in __qla83xx_set_drv_presence()
6535 qla83xx_set_drv_presence(scsi_qla_host_t *vha) in qla83xx_set_drv_presence() argument
6539 qla83xx_idc_lock(vha, 0); in qla83xx_set_drv_presence()
6540 rval = __qla83xx_set_drv_presence(vha); in qla83xx_set_drv_presence()
6541 qla83xx_idc_unlock(vha, 0); in qla83xx_set_drv_presence()
6547 __qla83xx_clear_drv_presence(scsi_qla_host_t *vha) in __qla83xx_clear_drv_presence() argument
6550 struct qla_hw_data *ha = vha->hw; in __qla83xx_clear_drv_presence()
6553 rval = qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence); in __qla83xx_clear_drv_presence()
6556 rval = qla83xx_wr_reg(vha, QLA83XX_IDC_DRV_PRESENCE, in __qla83xx_clear_drv_presence()
6564 qla83xx_clear_drv_presence(scsi_qla_host_t *vha) in qla83xx_clear_drv_presence() argument
6568 qla83xx_idc_lock(vha, 0); in qla83xx_clear_drv_presence()
6569 rval = __qla83xx_clear_drv_presence(vha); in qla83xx_clear_drv_presence()
6570 qla83xx_idc_unlock(vha, 0); in qla83xx_clear_drv_presence()
6576 qla83xx_need_reset_handler(scsi_qla_host_t *vha) in qla83xx_need_reset_handler() argument
6578 struct qla_hw_data *ha = vha->hw; in qla83xx_need_reset_handler()
6585 qla83xx_rd_reg(vha, QLA83XX_IDC_DRIVER_ACK, &drv_ack); in qla83xx_need_reset_handler()
6586 qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence); in qla83xx_need_reset_handler()
6591 ql_log(ql_log_warn, vha, 0xb067, in qla83xx_need_reset_handler()
6600 qla83xx_wr_reg(vha, QLA83XX_IDC_DRV_PRESENCE, in qla83xx_need_reset_handler()
6605 qla83xx_idc_unlock(vha, 0); in qla83xx_need_reset_handler()
6607 qla83xx_idc_lock(vha, 0); in qla83xx_need_reset_handler()
6610 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, QLA8XXX_DEV_COLD); in qla83xx_need_reset_handler()
6611 ql_log(ql_log_info, vha, 0xb068, "HW State: COLD/RE-INIT.\n"); in qla83xx_need_reset_handler()
6615 qla83xx_device_bootstrap(scsi_qla_host_t *vha) in qla83xx_device_bootstrap() argument
6620 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, QLA8XXX_DEV_INITIALIZING); in qla83xx_device_bootstrap()
6621 ql_log(ql_log_info, vha, 0xb069, "HW State: INITIALIZING.\n"); in qla83xx_device_bootstrap()
6624 __qla83xx_get_idc_control(vha, &idc_control); in qla83xx_device_bootstrap()
6626 __qla83xx_set_idc_control(vha, 0); in qla83xx_device_bootstrap()
6628 qla83xx_idc_unlock(vha, 0); in qla83xx_device_bootstrap()
6629 rval = qla83xx_restart_nic_firmware(vha); in qla83xx_device_bootstrap()
6630 qla83xx_idc_lock(vha, 0); in qla83xx_device_bootstrap()
6633 ql_log(ql_log_fatal, vha, 0xb06a, in qla83xx_device_bootstrap()
6635 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, QLA8XXX_DEV_FAILED); in qla83xx_device_bootstrap()
6636 ql_log(ql_log_info, vha, 0xb06b, "HW State: FAILED.\n"); in qla83xx_device_bootstrap()
6638 ql_dbg(ql_dbg_p3p, vha, 0xb06c, in qla83xx_device_bootstrap()
6640 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, QLA8XXX_DEV_READY); in qla83xx_device_bootstrap()
6641 ql_log(ql_log_info, vha, 0xb06d, "HW State: READY.\n"); in qla83xx_device_bootstrap()
7210 qla2xxx_wake_dpc(struct scsi_qla_host *vha) in qla2xxx_wake_dpc() argument
7212 struct qla_hw_data *ha = vha->hw; in qla2xxx_wake_dpc()
7215 if (!test_bit(UNLOADING, &vha->dpc_flags) && t) in qla2xxx_wake_dpc()
7227 qla2x00_rst_aen(scsi_qla_host_t *vha) in qla2x00_rst_aen() argument
7229 if (vha->flags.online && !vha->flags.reset_active && in qla2x00_rst_aen()
7230 !atomic_read(&vha->loop_down_timer) && in qla2x00_rst_aen()
7231 !(test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags))) { in qla2x00_rst_aen()
7233 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla2x00_rst_aen()
7239 vha->marker_needed = 1; in qla2x00_rst_aen()
7240 } while (!atomic_read(&vha->loop_down_timer) && in qla2x00_rst_aen()
7241 (test_bit(RESET_MARKER_NEEDED, &vha->dpc_flags))); in qla2x00_rst_aen()
7245 static bool qla_do_heartbeat(struct scsi_qla_host *vha) in qla_do_heartbeat() argument
7247 struct qla_hw_data *ha = vha->hw; in qla_do_heartbeat()
7280 static void qla_heart_beat(struct scsi_qla_host *vha, u16 dpc_started) in qla_heart_beat() argument
7282 struct qla_hw_data *ha = vha->hw; in qla_heart_beat()
7284 if (vha->vp_idx) in qla_heart_beat()
7287 if (vha->hw->flags.eeh_busy || qla2x00_chip_is_down(vha)) in qla_heart_beat()
7299 if (qla_do_heartbeat(vha)) { in qla_heart_beat()
7305 static void qla_wind_down_chip(scsi_qla_host_t *vha) in qla_wind_down_chip() argument
7307 struct qla_hw_data *ha = vha->hw; in qla_wind_down_chip()
7321 ql_log(ql_log_info, vha, 0x9009, in qla_wind_down_chip()
7324 ha->isp_ops->reset_chip(vha); in qla_wind_down_chip()
7335 qla2x00_abort_isp_cleanup(vha); in qla_wind_down_chip()
7338 ql_log(ql_log_info, vha, 0x900a, in qla_wind_down_chip()
7354 scsi_qla_host_t *vha = from_timer(vha, t, timer); in qla2x00_timer() local
7360 struct qla_hw_data *ha = vha->hw; in qla2x00_timer()
7366 qla_wind_down_chip(vha); in qla2x00_timer()
7368 ql_dbg(ql_dbg_timer, vha, 0x6000, in qla2x00_timer()
7371 qla2x00_restart_timer(vha, WATCH_INTERVAL); in qla2x00_timer()
7381 qla2x00_check_reg16_for_disconnect(vha, w); in qla2x00_timer()
7385 if (!vha->vp_idx && IS_P3P_TYPE(ha)) { in qla2x00_timer()
7386 if (test_bit(ISP_QUIESCE_NEEDED, &vha->dpc_flags)) in qla2x00_timer()
7389 qla82xx_watchdog(vha); in qla2x00_timer()
7391 qla8044_watchdog(vha); in qla2x00_timer()
7394 if (!vha->vp_idx && IS_QLAFX00(ha)) in qla2x00_timer()
7395 qlafx00_timer_routine(vha); in qla2x00_timer()
7397 if (vha->link_down_time < QLA2XX_MAX_LINK_DOWN_TIME) in qla2x00_timer()
7398 vha->link_down_time++; in qla2x00_timer()
7400 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla2x00_timer()
7401 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_timer()
7405 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla2x00_timer()
7408 if (atomic_read(&vha->loop_down_timer) > 0 && in qla2x00_timer()
7409 !(test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags)) && in qla2x00_timer()
7410 !(test_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags)) in qla2x00_timer()
7411 && vha->flags.online) { in qla2x00_timer()
7413 if (atomic_read(&vha->loop_down_timer) == in qla2x00_timer()
7414 vha->loop_down_abort_time) { in qla2x00_timer()
7416 ql_log(ql_log_info, vha, 0x6008, in qla2x00_timer()
7419 if (!IS_QLA2100(ha) && vha->link_down_timeout) in qla2x00_timer()
7420 atomic_set(&vha->loop_state, LOOP_DEAD); in qla2x00_timer()
7427 if (!vha->vp_idx) { in qla2x00_timer()
7449 &vha->dpc_flags); in qla2x00_timer()
7452 &vha->dpc_flags); in qla2x00_timer()
7462 if (atomic_dec_and_test(&vha->loop_down_timer) != 0) { in qla2x00_timer()
7463 if (!(vha->device_flags & DFLG_NO_CABLE) && !vha->vp_idx) { in qla2x00_timer()
7464 ql_log(ql_log_warn, vha, 0x6009, in qla2x00_timer()
7469 &vha->dpc_flags); in qla2x00_timer()
7472 &vha->dpc_flags); in qla2x00_timer()
7475 ql_dbg(ql_dbg_timer, vha, 0x600a, in qla2x00_timer()
7477 atomic_read(&vha->loop_down_timer)); in qla2x00_timer()
7480 if (!vha->vp_idx && (ha->beacon_blink_led == 1)) { in qla2x00_timer()
7483 set_bit(BEACON_BLINK_NEEDED, &vha->dpc_flags); in qla2x00_timer()
7489 if (vha->hw->flags.edif_enabled) in qla2x00_timer()
7490 qla_edif_timer(vha); in qla2x00_timer()
7493 if (!list_empty(&vha->work_list)) { in qla2x00_timer()
7497 spin_lock_irqsave(&vha->work_lock, flags); in qla2x00_timer()
7498 if (!test_and_set_bit(IOCB_WORK_ACTIVE, &vha->dpc_flags)) in qla2x00_timer()
7500 spin_unlock_irqrestore(&vha->work_lock, flags); in qla2x00_timer()
7502 queue_work(vha->hw->wq, &vha->iocb_work); in qla2x00_timer()
7510 if (!vha->vp_idx && in qla2x00_timer()
7515 ql_log(ql_log_info, vha, 0x3002, in qla2x00_timer()
7518 set_bit(SET_ZIO_THRESHOLD_NEEDED, &vha->dpc_flags); in qla2x00_timer()
7522 if (!vha->vp_idx && in qla2x00_timer()
7525 ql_log(ql_log_info, vha, 0x3002, in qla2x00_timer()
7529 set_bit(SET_ZIO_THRESHOLD_NEEDED, &vha->dpc_flags); in qla2x00_timer()
7536 if ((test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
7537 test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
7538 test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
7540 test_bit(RESET_MARKER_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
7541 test_bit(BEACON_BLINK_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
7542 test_bit(ISP_UNRECOVERABLE, &vha->dpc_flags) || in qla2x00_timer()
7543 test_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
7544 test_bit(VP_DPC_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
7545 test_bit(RELOGIN_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
7546 test_bit(PROCESS_PUREX_IOCB, &vha->dpc_flags))) { in qla2x00_timer()
7547 ql_dbg(ql_dbg_timer, vha, 0x600b, in qla2x00_timer()
7551 test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags), in qla2x00_timer()
7552 test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags), in qla2x00_timer()
7553 test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags), in qla2x00_timer()
7555 test_bit(RESET_MARKER_NEEDED, &vha->dpc_flags)); in qla2x00_timer()
7556 ql_dbg(ql_dbg_timer, vha, 0x600c, in qla2x00_timer()
7560 test_bit(BEACON_BLINK_NEEDED, &vha->dpc_flags), in qla2x00_timer()
7561 test_bit(ISP_UNRECOVERABLE, &vha->dpc_flags), in qla2x00_timer()
7562 test_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags), in qla2x00_timer()
7563 test_bit(VP_DPC_NEEDED, &vha->dpc_flags), in qla2x00_timer()
7564 test_bit(RELOGIN_NEEDED, &vha->dpc_flags), in qla2x00_timer()
7565 test_bit(PROCESS_PUREX_IOCB, &vha->dpc_flags)); in qla2x00_timer()
7566 qla2xxx_wake_dpc(vha); in qla2x00_timer()
7570 qla_heart_beat(vha, w); in qla2x00_timer()
7572 qla2x00_restart_timer(vha, WATCH_INTERVAL); in qla2x00_timer()
7623 qla2x00_request_firmware(scsi_qla_host_t *vha) in qla2x00_request_firmware() argument
7625 struct qla_hw_data *ha = vha->hw; in qla2x00_request_firmware()
7664 ql_log(ql_log_warn, vha, 0x0063, in qla2x00_request_firmware()
7686 static void qla_pci_error_cleanup(scsi_qla_host_t *vha) in qla_pci_error_cleanup() argument
7688 struct qla_hw_data *ha = vha->hw; in qla_pci_error_cleanup()
7696 ql_dbg(ql_dbg_aer, vha, 0x9000, in qla_pci_error_cleanup()
7719 qla2x00_mark_all_devices_lost(vha); in qla_pci_error_cleanup()
7732 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla_pci_error_cleanup()
7751 scsi_qla_host_t *vha = pci_get_drvdata(pdev); in qla2xxx_pci_error_detected() local
7752 struct qla_hw_data *ha = vha->hw; in qla2xxx_pci_error_detected()
7755 ql_log(ql_log_warn, vha, 0x9000, in qla2xxx_pci_error_detected()
7760 ql_log(ql_log_info, vha, 0xffff, in qla2xxx_pci_error_detected()
7768 qla_pci_set_eeh_busy(vha); in qla2xxx_pci_error_detected()
7770 set_bit(QPAIR_ONLINE_CHECK_NEEDED, &vha->dpc_flags); in qla2xxx_pci_error_detected()
7771 qla2xxx_wake_dpc(vha); in qla2xxx_pci_error_detected()
7776 qla_pci_set_eeh_busy(vha); in qla2xxx_pci_error_detected()
7781 qla2x00_abort_all_cmds(vha, DID_NO_CONNECT << 16); in qla2xxx_pci_error_detected()
7783 set_bit(QPAIR_ONLINE_CHECK_NEEDED, &vha->dpc_flags); in qla2xxx_pci_error_detected()
7784 qla2xxx_wake_dpc(vha); in qla2xxx_pci_error_detected()
7789 ql_dbg(ql_dbg_aer, vha, 0x600d, in qla2xxx_pci_error_detected()
7936 void qla_pci_set_eeh_busy(struct scsi_qla_host *vha) in qla_pci_set_eeh_busy() argument
7938 struct qla_hw_data *ha = vha->hw; in qla_pci_set_eeh_busy()
7964 void qla_schedule_eeh_work(struct scsi_qla_host *vha) in qla_schedule_eeh_work() argument
7966 struct qla_hw_data *ha = vha->hw; in qla_schedule_eeh_work()
8030 scsi_qla_host_t *vha = (scsi_qla_host_t *)shost->hostdata; in qla2xxx_map_queues() local
8033 if (USER_CTRL_IRQ(vha->hw) || !vha->hw->mqiobase) in qla2xxx_map_queues()
8036 rc = blk_mq_pci_map_queues(qmap, vha->hw->pdev, vha->irq_offset); in qla2xxx_map_queues()