Lines Matching refs:vha
241 static void qla83xx_disable_laser(scsi_qla_host_t *vha);
283 qla2x00_start_timer(scsi_qla_host_t *vha, void *func, unsigned long interval) in qla2x00_start_timer() argument
285 init_timer(&vha->timer); in qla2x00_start_timer()
286 vha->timer.expires = jiffies + interval * HZ; in qla2x00_start_timer()
287 vha->timer.data = (unsigned long)vha; in qla2x00_start_timer()
288 vha->timer.function = (void (*)(unsigned long))func; in qla2x00_start_timer()
289 add_timer(&vha->timer); in qla2x00_start_timer()
290 vha->timer_active = 1; in qla2x00_start_timer()
294 qla2x00_restart_timer(scsi_qla_host_t *vha, unsigned long interval) in qla2x00_restart_timer() argument
297 if (vha->device_flags & DFLG_DEV_FAILED) { in qla2x00_restart_timer()
298 ql_dbg(ql_dbg_timer, vha, 0x600d, in qla2x00_restart_timer()
303 mod_timer(&vha->timer, jiffies + interval * HZ); in qla2x00_restart_timer()
307 qla2x00_stop_timer(scsi_qla_host_t *vha) in qla2x00_stop_timer() argument
309 del_timer_sync(&vha->timer); in qla2x00_stop_timer()
310 vha->timer_active = 0; in qla2x00_stop_timer()
326 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); in qla2x00_alloc_queues() local
330 ql_log(ql_log_fatal, vha, 0x003b, in qla2x00_alloc_queues()
338 ql_log(ql_log_fatal, vha, 0x003c, in qla2x00_alloc_queues()
421 static int qla25xx_setup_mode(struct scsi_qla_host *vha) in qla25xx_setup_mode() argument
425 struct qla_hw_data *ha = vha->hw; in qla25xx_setup_mode()
428 ql_log(ql_log_warn, vha, 0x00d8, in qla25xx_setup_mode()
438 ql_log(ql_log_warn, vha, 0x00e0, in qla25xx_setup_mode()
443 vha->req = ha->req_q_map[req]; in qla25xx_setup_mode()
448 ql_log(ql_log_warn, vha, 0x00e8, in qla25xx_setup_mode()
454 ql_dbg(ql_dbg_multiq, vha, 0xc007, in qla25xx_setup_mode()
458 ql_dbg(ql_dbg_init, vha, 0x00e9, in qla25xx_setup_mode()
465 qla25xx_delete_queues(vha); in qla25xx_setup_mode()
468 vha->req = ha->req_q_map[0]; in qla25xx_setup_mode()
478 qla2x00_pci_info_str(struct scsi_qla_host *vha, char *str) in qla2x00_pci_info_str() argument
480 struct qla_hw_data *ha = vha->hw; in qla2x00_pci_info_str()
502 qla24xx_pci_info_str(struct scsi_qla_host *vha, char *str) in qla24xx_pci_info_str() argument
505 struct qla_hw_data *ha = vha->hw; in qla24xx_pci_info_str()
557 qla2x00_fw_version_str(struct scsi_qla_host *vha, char *str, size_t size) in qla2x00_fw_version_str() argument
560 struct qla_hw_data *ha = vha->hw; in qla2x00_fw_version_str()
595 qla24xx_fw_version_str(struct scsi_qla_host *vha, char *str, size_t size) in qla24xx_fw_version_str() argument
597 struct qla_hw_data *ha = vha->hw; in qla24xx_fw_version_str()
605 qla2x00_sp_free_dma(void *vha, void *ptr) in qla2x00_sp_free_dma() argument
609 struct qla_hw_data *ha = sp->fcport->vha->hw; in qla2x00_sp_free_dma()
648 qla2x00_rel_sp(sp->fcport->vha, sp); in qla2x00_sp_free_dma()
661 ql_dbg(ql_dbg_io, sp->fcport->vha, 0x3015, in qla2x00_sp_compl()
681 scsi_qla_host_t *vha = shost_priv(host); in qla2xxx_queuecommand() local
684 struct qla_hw_data *ha = vha->hw; in qla2xxx_queuecommand()
691 ql_dbg(ql_dbg_aer, vha, 0x9010, in qla2xxx_queuecommand()
696 ql_dbg(ql_dbg_aer, vha, 0x9011, in qla2xxx_queuecommand()
706 ql_dbg(ql_dbg_io + ql_dbg_verbose, vha, 0x3003, in qla2xxx_queuecommand()
712 if (!vha->flags.difdix_supported && in qla2xxx_queuecommand()
714 ql_dbg(ql_dbg_io, vha, 0x3004, in qla2xxx_queuecommand()
729 ql_dbg(ql_dbg_io, vha, 0x3005, in qla2xxx_queuecommand()
750 sp = qla2x00_get_sp(vha, fcport, GFP_ATOMIC); in qla2xxx_queuecommand()
763 ql_dbg(ql_dbg_io + ql_dbg_verbose, vha, 0x3013, in qla2xxx_queuecommand()
803 scsi_qla_host_t *vha = shost_priv(cmd->device->host); in qla2x00_eh_wait_on_command() local
804 struct qla_hw_data *ha = vha->hw; in qla2x00_eh_wait_on_command()
808 ql_dbg(ql_dbg_taskm, vha, 0x8005, in qla2x00_eh_wait_on_command()
840 qla2x00_wait_for_hba_online(scsi_qla_host_t *vha) in qla2x00_wait_for_hba_online() argument
844 struct qla_hw_data *ha = vha->hw; in qla2x00_wait_for_hba_online()
876 qla2x00_wait_for_hba_ready(scsi_qla_host_t *vha) in qla2x00_wait_for_hba_ready() argument
878 struct qla_hw_data *ha = vha->hw; in qla2x00_wait_for_hba_ready()
880 while (((qla2x00_reset_active(vha)) || ha->dpc_active || in qla2x00_wait_for_hba_ready()
882 test_bit(FX00_RESET_RECOVERY, &vha->dpc_flags) || in qla2x00_wait_for_hba_ready()
883 test_bit(FX00_TARGET_SCAN, &vha->dpc_flags)) in qla2x00_wait_for_hba_ready()
888 qla2x00_wait_for_chip_reset(scsi_qla_host_t *vha) in qla2x00_wait_for_chip_reset() argument
892 struct qla_hw_data *ha = vha->hw; in qla2x00_wait_for_chip_reset()
939 scsi_qla_host_t *vha = shost_priv(cmd->device->host); in qla2xxx_eh_abort() local
946 struct qla_hw_data *ha = vha->hw; in qla2xxx_eh_abort()
966 ql_dbg(ql_dbg_taskm, vha, 0x8002, in qla2xxx_eh_abort()
968 vha->host_no, id, lun, sp, cmd); in qla2xxx_eh_abort()
986 ql_dbg(ql_dbg_taskm, vha, 0x8003, in qla2xxx_eh_abort()
989 ql_dbg(ql_dbg_taskm, vha, 0x8004, in qla2xxx_eh_abort()
1000 vha->req->outstanding_cmds[sp->handle] = NULL; in qla2xxx_eh_abort()
1011 ql_log(ql_log_warn, vha, 0x8006, in qla2xxx_eh_abort()
1017 ql_log(ql_log_info, vha, 0x801c, in qla2xxx_eh_abort()
1019 vha->host_no, id, lun, wait, ret); in qla2xxx_eh_abort()
1025 qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *vha, unsigned int t, in qla2x00_eh_wait_for_pending_commands() argument
1030 struct qla_hw_data *ha = vha->hw; in qla2x00_eh_wait_for_pending_commands()
1038 req = vha->req; in qla2x00_eh_wait_for_pending_commands()
1046 if (vha->vp_idx != sp->fcport->vha->vp_idx) in qla2x00_eh_wait_for_pending_commands()
1085 scsi_qla_host_t *vha = shost_priv(cmd->device->host); in __qla2xxx_eh_generic_reset() local
1097 ql_log(ql_log_info, vha, 0x8009, in __qla2xxx_eh_generic_reset()
1098 "%s RESET ISSUED nexus=%ld:%d:%llu cmd=%p.\n", name, vha->host_no, in __qla2xxx_eh_generic_reset()
1102 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { in __qla2xxx_eh_generic_reset()
1103 ql_log(ql_log_warn, vha, 0x800a, in __qla2xxx_eh_generic_reset()
1110 ql_log(ql_log_warn, vha, 0x800c, in __qla2xxx_eh_generic_reset()
1115 if (qla2x00_eh_wait_for_pending_commands(vha, cmd->device->id, in __qla2xxx_eh_generic_reset()
1117 ql_log(ql_log_warn, vha, 0x800d, in __qla2xxx_eh_generic_reset()
1122 ql_log(ql_log_info, vha, 0x800e, in __qla2xxx_eh_generic_reset()
1124 vha->host_no, cmd->device->id, cmd->device->lun, cmd); in __qla2xxx_eh_generic_reset()
1129 ql_log(ql_log_info, vha, 0x800f, in __qla2xxx_eh_generic_reset()
1131 reset_errors[err], vha->host_no, cmd->device->id, cmd->device->lun, in __qla2xxx_eh_generic_reset()
1139 scsi_qla_host_t *vha = shost_priv(cmd->device->host); in qla2xxx_eh_device_reset() local
1140 struct qla_hw_data *ha = vha->hw; in qla2xxx_eh_device_reset()
1149 scsi_qla_host_t *vha = shost_priv(cmd->device->host); in qla2xxx_eh_target_reset() local
1150 struct qla_hw_data *ha = vha->hw; in qla2xxx_eh_target_reset()
1174 scsi_qla_host_t *vha = shost_priv(cmd->device->host); in qla2xxx_eh_bus_reset() local
1192 ql_log(ql_log_info, vha, 0x8012, in qla2xxx_eh_bus_reset()
1193 "BUS RESET ISSUED nexus=%ld:%d:%llu.\n", vha->host_no, id, lun); in qla2xxx_eh_bus_reset()
1195 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { in qla2xxx_eh_bus_reset()
1196 ql_log(ql_log_fatal, vha, 0x8013, in qla2xxx_eh_bus_reset()
1201 if (qla2x00_loop_reset(vha) == QLA_SUCCESS) in qla2xxx_eh_bus_reset()
1208 if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0, WAIT_HOST) != in qla2xxx_eh_bus_reset()
1210 ql_log(ql_log_warn, vha, 0x8014, in qla2xxx_eh_bus_reset()
1216 ql_log(ql_log_warn, vha, 0x802b, in qla2xxx_eh_bus_reset()
1218 (ret == FAILED) ? "FAILED" : "SUCCEEDED", vha->host_no, id, lun); in qla2xxx_eh_bus_reset()
1241 scsi_qla_host_t *vha = shost_priv(cmd->device->host); in qla2xxx_eh_host_reset() local
1242 struct qla_hw_data *ha = vha->hw; in qla2xxx_eh_host_reset()
1251 ql_log(ql_log_info, vha, 0x8018, in qla2xxx_eh_host_reset()
1252 "ADAPTER RESET ISSUED nexus=%ld:%d:%llu.\n", vha->host_no, id, lun); in qla2xxx_eh_host_reset()
1258 if (qla2x00_reset_active(vha) || ha->optrom_state != QLA_SWAITING) in qla2xxx_eh_host_reset()
1261 if (vha != base_vha) { in qla2xxx_eh_host_reset()
1262 if (qla2x00_vp_abort_isp(vha)) in qla2xxx_eh_host_reset()
1265 if (IS_P3P_TYPE(vha->hw)) { in qla2xxx_eh_host_reset()
1266 if (!qla82xx_fcoe_ctx_reset(vha)) { in qla2xxx_eh_host_reset()
1282 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { in qla2xxx_eh_host_reset()
1283 ql_log(ql_log_warn, vha, 0x802a, in qla2xxx_eh_host_reset()
1292 if (qla2x00_eh_wait_for_pending_commands(vha, 0, 0, WAIT_HOST) == in qla2xxx_eh_host_reset()
1297 ql_log(ql_log_info, vha, 0x8017, in qla2xxx_eh_host_reset()
1299 (ret == FAILED) ? "FAILED" : "SUCCEEDED", vha->host_no, id, lun); in qla2xxx_eh_host_reset()
1315 qla2x00_loop_reset(scsi_qla_host_t *vha) in qla2x00_loop_reset() argument
1319 struct qla_hw_data *ha = vha->hw; in qla2x00_loop_reset()
1322 return qlafx00_loop_reset(vha); in qla2x00_loop_reset()
1326 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_loop_reset()
1332 ql_dbg(ql_dbg_taskm, vha, 0x802c, in qla2x00_loop_reset()
1341 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_loop_reset()
1342 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla2x00_loop_reset()
1343 qla2x00_mark_all_devices_lost(vha, 0); in qla2x00_loop_reset()
1344 ret = qla2x00_full_login_lip(vha); in qla2x00_loop_reset()
1346 ql_dbg(ql_dbg_taskm, vha, 0x802d, in qla2x00_loop_reset()
1352 ret = qla2x00_lip_reset(vha); in qla2x00_loop_reset()
1354 ql_dbg(ql_dbg_taskm, vha, 0x802e, in qla2x00_loop_reset()
1359 vha->marker_needed = 1; in qla2x00_loop_reset()
1365 qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) in qla2x00_abort_all_cmds() argument
1370 struct qla_hw_data *ha = vha->hw; in qla2x00_abort_all_cmds()
1386 sp->done(vha, sp, res); in qla2x00_abort_all_cmds()
1409 scsi_qla_host_t *vha = shost_priv(sdev->host); in qla2xxx_slave_configure() local
1410 struct req_que *req = vha->req; in qla2xxx_slave_configure()
1412 if (IS_T10_PI_CAPABLE(vha->hw)) in qla2xxx_slave_configure()
2249 scsi_qla_host_t *vha = shost_priv(shost); in qla2xxx_scan_start() local
2251 if (vha->hw->flags.running_gold_fw) in qla2xxx_scan_start()
2254 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qla2xxx_scan_start()
2255 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qla2xxx_scan_start()
2256 set_bit(RSCN_UPDATE, &vha->dpc_flags); in qla2xxx_scan_start()
2257 set_bit(NPIV_CONFIG_NEEDED, &vha->dpc_flags); in qla2xxx_scan_start()
2263 scsi_qla_host_t *vha = shost_priv(shost); in qla2xxx_scan_finished() local
2265 if (!vha->host) in qla2xxx_scan_finished()
2267 if (time > vha->hw->loop_reset_delay * HZ) in qla2xxx_scan_finished()
2270 return atomic_read(&vha->loop_state) == LOOP_READY; in qla2xxx_scan_finished()
2595 ha->mr.fcport.vha = base_vha; in qla2x00_probe_one()
2935 scsi_qla_host_t *vha; in qla2x00_shutdown() local
2941 vha = pci_get_drvdata(pdev); in qla2x00_shutdown()
2942 ha = vha->hw; in qla2x00_shutdown()
2946 qlafx00_driver_shutdown(vha, 20); in qla2x00_shutdown()
2950 qla2x00_disable_fce_trace(vha, NULL, NULL); in qla2x00_shutdown()
2956 qla2x00_disable_eft_trace(vha); in qla2x00_shutdown()
2959 qla2x00_try_to_stop_firmware(vha); in qla2x00_shutdown()
2962 vha->flags.online = 0; in qla2x00_shutdown()
2966 vha->flags.init_done = 0; in qla2x00_shutdown()
2970 qla2x00_free_irqs(vha); in qla2x00_shutdown()
2983 scsi_qla_host_t *vha; in qla2x00_delete_all_vps() local
2992 vha = list_first_entry(&base_vha->list, scsi_qla_host_t, list); in qla2x00_delete_all_vps()
2993 scsi_host = scsi_host_get(vha->host); in qla2x00_delete_all_vps()
2998 fc_vport_terminate(vha->fc_vport); in qla2x00_delete_all_vps()
2999 scsi_host_put(vha->host); in qla2x00_delete_all_vps()
3169 qla2x00_free_device(scsi_qla_host_t *vha) in qla2x00_free_device() argument
3171 struct qla_hw_data *ha = vha->hw; in qla2x00_free_device()
3173 qla2x00_abort_all_cmds(vha, DID_NO_CONNECT << 16); in qla2x00_free_device()
3176 if (vha->timer_active) in qla2x00_free_device()
3177 qla2x00_stop_timer(vha); in qla2x00_free_device()
3179 qla25xx_delete_queues(vha); in qla2x00_free_device()
3182 qla2x00_disable_fce_trace(vha, NULL, NULL); in qla2x00_free_device()
3185 qla2x00_disable_eft_trace(vha); in qla2x00_free_device()
3188 qla2x00_try_to_stop_firmware(vha); in qla2x00_free_device()
3190 vha->flags.online = 0; in qla2x00_free_device()
3194 vha->flags.init_done = 0; in qla2x00_free_device()
3198 qla2x00_free_irqs(vha); in qla2x00_free_device()
3200 qla2x00_free_fcports(vha); in qla2x00_free_device()
3204 qla82xx_md_free(vha); in qla2x00_free_device()
3209 void qla2x00_free_fcports(struct scsi_qla_host *vha) in qla2x00_free_fcports() argument
3213 list_for_each_entry_safe(fcport, tfcport, &vha->vp_fcports, list) { in qla2x00_free_fcports()
3222 qla2x00_schedule_rport_del(struct scsi_qla_host *vha, fc_port_t *fcport, in qla2x00_schedule_rport_del() argument
3234 base_vha = pci_get_drvdata(vha->hw->pdev); in qla2x00_schedule_rport_del()
3235 spin_lock_irqsave(vha->host->host_lock, flags); in qla2x00_schedule_rport_del()
3237 spin_unlock_irqrestore(vha->host->host_lock, flags); in qla2x00_schedule_rport_del()
3238 qlt_do_generation_tick(vha, &base_vha->total_fcport_update_gen); in qla2x00_schedule_rport_del()
3244 qlt_do_generation_tick(vha, &now); in qla2x00_schedule_rport_del()
3245 qlt_fc_port_deleted(vha, fcport, now); in qla2x00_schedule_rport_del()
3258 void qla2x00_mark_device_lost(scsi_qla_host_t *vha, fc_port_t *fcport, in qla2x00_mark_device_lost() argument
3261 if (IS_QLAFX00(vha->hw)) { in qla2x00_mark_device_lost()
3263 qla2x00_schedule_rport_del(vha, fcport, defer); in qla2x00_mark_device_lost()
3268 vha->vp_idx == fcport->vha->vp_idx) { in qla2x00_mark_device_lost()
3270 qla2x00_schedule_rport_del(vha, fcport, defer); in qla2x00_mark_device_lost()
3283 fcport->login_retry = vha->hw->login_retry_count; in qla2x00_mark_device_lost()
3284 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_mark_device_lost()
3286 ql_dbg(ql_dbg_disc, vha, 0x2067, in qla2x00_mark_device_lost()
3306 qla2x00_mark_all_devices_lost(scsi_qla_host_t *vha, int defer) in qla2x00_mark_all_devices_lost() argument
3310 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_mark_all_devices_lost()
3311 if (vha->vp_idx != 0 && vha->vp_idx != fcport->vha->vp_idx) in qla2x00_mark_all_devices_lost()
3323 qla2x00_schedule_rport_del(vha, fcport, defer); in qla2x00_mark_all_devices_lost()
3324 else if (vha->vp_idx == fcport->vha->vp_idx) in qla2x00_mark_all_devices_lost()
3325 qla2x00_schedule_rport_del(vha, fcport, defer); in qla2x00_mark_all_devices_lost()
3755 struct scsi_qla_host *vha = NULL; in qla2x00_create_host() local
3765 vha = shost_priv(host); in qla2x00_create_host()
3766 memset(vha, 0, sizeof(scsi_qla_host_t)); in qla2x00_create_host()
3768 vha->host = host; in qla2x00_create_host()
3769 vha->host_no = host->host_no; in qla2x00_create_host()
3770 vha->hw = ha; in qla2x00_create_host()
3772 INIT_LIST_HEAD(&vha->vp_fcports); in qla2x00_create_host()
3773 INIT_LIST_HEAD(&vha->work_list); in qla2x00_create_host()
3774 INIT_LIST_HEAD(&vha->list); in qla2x00_create_host()
3775 INIT_LIST_HEAD(&vha->qla_cmd_list); in qla2x00_create_host()
3776 INIT_LIST_HEAD(&vha->qla_sess_op_cmd_list); in qla2x00_create_host()
3778 spin_lock_init(&vha->work_lock); in qla2x00_create_host()
3779 spin_lock_init(&vha->cmd_list_lock); in qla2x00_create_host()
3781 sprintf(vha->host_str, "%s_%ld", QLA2XXX_DRIVER_NAME, vha->host_no); in qla2x00_create_host()
3782 ql_dbg(ql_dbg_init, vha, 0x0041, in qla2x00_create_host()
3784 vha->host, vha->hw, vha, in qla2x00_create_host()
3787 return vha; in qla2x00_create_host()
3790 return vha; in qla2x00_create_host()
3794 qla2x00_alloc_work(struct scsi_qla_host *vha, enum qla_work_type type) in qla2x00_alloc_work() argument
3799 QLA_VHA_MARK_BUSY(vha, bail); in qla2x00_alloc_work()
3805 QLA_VHA_MARK_NOT_BUSY(vha); in qla2x00_alloc_work()
3816 qla2x00_post_work(struct scsi_qla_host *vha, struct qla_work_evt *e) in qla2x00_post_work() argument
3820 spin_lock_irqsave(&vha->work_lock, flags); in qla2x00_post_work()
3821 list_add_tail(&e->list, &vha->work_list); in qla2x00_post_work()
3822 spin_unlock_irqrestore(&vha->work_lock, flags); in qla2x00_post_work()
3823 qla2xxx_wake_dpc(vha); in qla2x00_post_work()
3829 qla2x00_post_aen_work(struct scsi_qla_host *vha, enum fc_host_event_code code, in qla2x00_post_aen_work() argument
3834 e = qla2x00_alloc_work(vha, QLA_EVT_AEN); in qla2x00_post_aen_work()
3840 return qla2x00_post_work(vha, e); in qla2x00_post_aen_work()
3844 qla2x00_post_idc_ack_work(struct scsi_qla_host *vha, uint16_t *mb) in qla2x00_post_idc_ack_work() argument
3848 e = qla2x00_alloc_work(vha, QLA_EVT_IDC_ACK); in qla2x00_post_idc_ack_work()
3853 return qla2x00_post_work(vha, e); in qla2x00_post_idc_ack_work()
3858 struct scsi_qla_host *vha, \
3863 e = qla2x00_alloc_work(vha, type); \
3872 return qla2x00_post_work(vha, e); \
3883 qla2x00_post_uevent_work(struct scsi_qla_host *vha, u32 code) in qla2x00_post_uevent_work() argument
3887 e = qla2x00_alloc_work(vha, QLA_EVT_UEVENT); in qla2x00_post_uevent_work()
3892 return qla2x00_post_work(vha, e); in qla2x00_post_uevent_work()
3896 qla2x00_uevent_emit(struct scsi_qla_host *vha, u32 code) in qla2x00_uevent_emit() argument
3904 vha->host_no); in qla2x00_uevent_emit()
3910 kobject_uevent_env(&vha->hw->pdev->dev.kobj, KOBJ_CHANGE, envp); in qla2x00_uevent_emit()
3914 qlafx00_post_aenfx_work(struct scsi_qla_host *vha, uint32_t evtcode, in qlafx00_post_aenfx_work() argument
3919 e = qla2x00_alloc_work(vha, QLA_EVT_AENFX); in qlafx00_post_aenfx_work()
3926 return qla2x00_post_work(vha, e); in qlafx00_post_aenfx_work()
3930 qla2x00_do_work(struct scsi_qla_host *vha) in qla2x00_do_work() argument
3936 spin_lock_irqsave(&vha->work_lock, flags); in qla2x00_do_work()
3937 list_splice_init(&vha->work_list, &work); in qla2x00_do_work()
3938 spin_unlock_irqrestore(&vha->work_lock, flags); in qla2x00_do_work()
3945 fc_host_post_event(vha->host, fc_get_event_number(), in qla2x00_do_work()
3949 qla81xx_idc_ack(vha, e->u.idc_ack.mb); in qla2x00_do_work()
3952 qla2x00_async_login(vha, e->u.logio.fcport, in qla2x00_do_work()
3956 qla2x00_async_login_done(vha, e->u.logio.fcport, in qla2x00_do_work()
3960 qla2x00_async_logout(vha, e->u.logio.fcport); in qla2x00_do_work()
3963 qla2x00_async_logout_done(vha, e->u.logio.fcport, in qla2x00_do_work()
3967 qla2x00_async_adisc(vha, e->u.logio.fcport, in qla2x00_do_work()
3971 qla2x00_async_adisc_done(vha, e->u.logio.fcport, in qla2x00_do_work()
3975 qla2x00_uevent_emit(vha, e->u.uevent.code); in qla2x00_do_work()
3978 qlafx00_process_aen(vha, e); in qla2x00_do_work()
3985 QLA_VHA_MARK_NOT_BUSY(vha); in qla2x00_do_work()
3992 void qla2x00_relogin(struct scsi_qla_host *vha) in qla2x00_relogin() argument
3997 struct qla_hw_data *ha = vha->hw; in qla2x00_relogin()
4000 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_relogin()
4010 ha->isp_ops->fabric_logout(vha, in qla2x00_relogin()
4020 vha, fcport); in qla2x00_relogin()
4032 vha, fcport, data); in qla2x00_relogin()
4038 status = qla2x00_fabric_login(vha, in qla2x00_relogin()
4050 vha, fcport, opts); in qla2x00_relogin()
4056 status = qla2x00_local_device_login(vha, in qla2x00_relogin()
4062 ql_dbg(ql_dbg_disc, vha, 0x2003, in qla2x00_relogin()
4066 qla2x00_update_fcport(vha, fcport); in qla2x00_relogin()
4069 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_relogin()
4071 ql_dbg(ql_dbg_disc, vha, 0x2007, in qla2x00_relogin()
4081 if (test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) in qla2x00_relogin()
4487 __qla83xx_set_drv_presence(scsi_qla_host_t *vha) in __qla83xx_set_drv_presence() argument
4490 struct qla_hw_data *ha = vha->hw; in __qla83xx_set_drv_presence()
4493 rval = qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence); in __qla83xx_set_drv_presence()
4496 rval = qla83xx_wr_reg(vha, QLA83XX_IDC_DRV_PRESENCE, in __qla83xx_set_drv_presence()
4504 qla83xx_set_drv_presence(scsi_qla_host_t *vha) in qla83xx_set_drv_presence() argument
4508 qla83xx_idc_lock(vha, 0); in qla83xx_set_drv_presence()
4509 rval = __qla83xx_set_drv_presence(vha); in qla83xx_set_drv_presence()
4510 qla83xx_idc_unlock(vha, 0); in qla83xx_set_drv_presence()
4516 __qla83xx_clear_drv_presence(scsi_qla_host_t *vha) in __qla83xx_clear_drv_presence() argument
4519 struct qla_hw_data *ha = vha->hw; in __qla83xx_clear_drv_presence()
4522 rval = qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence); in __qla83xx_clear_drv_presence()
4525 rval = qla83xx_wr_reg(vha, QLA83XX_IDC_DRV_PRESENCE, in __qla83xx_clear_drv_presence()
4533 qla83xx_clear_drv_presence(scsi_qla_host_t *vha) in qla83xx_clear_drv_presence() argument
4537 qla83xx_idc_lock(vha, 0); in qla83xx_clear_drv_presence()
4538 rval = __qla83xx_clear_drv_presence(vha); in qla83xx_clear_drv_presence()
4539 qla83xx_idc_unlock(vha, 0); in qla83xx_clear_drv_presence()
4545 qla83xx_need_reset_handler(scsi_qla_host_t *vha) in qla83xx_need_reset_handler() argument
4547 struct qla_hw_data *ha = vha->hw; in qla83xx_need_reset_handler()
4554 qla83xx_rd_reg(vha, QLA83XX_IDC_DRIVER_ACK, &drv_ack); in qla83xx_need_reset_handler()
4555 qla83xx_rd_reg(vha, QLA83XX_IDC_DRV_PRESENCE, &drv_presence); in qla83xx_need_reset_handler()
4560 ql_log(ql_log_warn, vha, 0xb067, in qla83xx_need_reset_handler()
4569 qla83xx_wr_reg(vha, QLA83XX_IDC_DRV_PRESENCE, in qla83xx_need_reset_handler()
4574 qla83xx_idc_unlock(vha, 0); in qla83xx_need_reset_handler()
4576 qla83xx_idc_lock(vha, 0); in qla83xx_need_reset_handler()
4579 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, QLA8XXX_DEV_COLD); in qla83xx_need_reset_handler()
4580 ql_log(ql_log_info, vha, 0xb068, "HW State: COLD/RE-INIT.\n"); in qla83xx_need_reset_handler()
4584 qla83xx_device_bootstrap(scsi_qla_host_t *vha) in qla83xx_device_bootstrap() argument
4589 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, QLA8XXX_DEV_INITIALIZING); in qla83xx_device_bootstrap()
4590 ql_log(ql_log_info, vha, 0xb069, "HW State: INITIALIZING.\n"); in qla83xx_device_bootstrap()
4593 __qla83xx_get_idc_control(vha, &idc_control); in qla83xx_device_bootstrap()
4595 __qla83xx_set_idc_control(vha, 0); in qla83xx_device_bootstrap()
4597 qla83xx_idc_unlock(vha, 0); in qla83xx_device_bootstrap()
4598 rval = qla83xx_restart_nic_firmware(vha); in qla83xx_device_bootstrap()
4599 qla83xx_idc_lock(vha, 0); in qla83xx_device_bootstrap()
4602 ql_log(ql_log_fatal, vha, 0xb06a, in qla83xx_device_bootstrap()
4604 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, QLA8XXX_DEV_FAILED); in qla83xx_device_bootstrap()
4605 ql_log(ql_log_info, vha, 0xb06b, "HW State: FAILED.\n"); in qla83xx_device_bootstrap()
4607 ql_dbg(ql_dbg_p3p, vha, 0xb06c, in qla83xx_device_bootstrap()
4609 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, QLA8XXX_DEV_READY); in qla83xx_device_bootstrap()
4610 ql_log(ql_log_info, vha, 0xb06d, "HW State: READY.\n"); in qla83xx_device_bootstrap()
5088 qla2xxx_wake_dpc(struct scsi_qla_host *vha) in qla2xxx_wake_dpc() argument
5090 struct qla_hw_data *ha = vha->hw; in qla2xxx_wake_dpc()
5093 if (!test_bit(UNLOADING, &vha->dpc_flags) && t) in qla2xxx_wake_dpc()
5105 qla2x00_rst_aen(scsi_qla_host_t *vha) in qla2x00_rst_aen() argument
5107 if (vha->flags.online && !vha->flags.reset_active && in qla2x00_rst_aen()
5108 !atomic_read(&vha->loop_down_timer) && in qla2x00_rst_aen()
5109 !(test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags))) { in qla2x00_rst_aen()
5111 clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags); in qla2x00_rst_aen()
5117 vha->marker_needed = 1; in qla2x00_rst_aen()
5118 } while (!atomic_read(&vha->loop_down_timer) && in qla2x00_rst_aen()
5119 (test_bit(RESET_MARKER_NEEDED, &vha->dpc_flags))); in qla2x00_rst_aen()
5132 qla2x00_timer(scsi_qla_host_t *vha) in qla2x00_timer() argument
5139 struct qla_hw_data *ha = vha->hw; in qla2x00_timer()
5143 ql_dbg(ql_dbg_timer, vha, 0x6000, in qla2x00_timer()
5146 qla2x00_restart_timer(vha, WATCH_INTERVAL); in qla2x00_timer()
5156 qla2x00_check_reg16_for_disconnect(vha, w); in qla2x00_timer()
5160 if (!vha->vp_idx && IS_P3P_TYPE(ha)) { in qla2x00_timer()
5161 if (test_bit(ISP_QUIESCE_NEEDED, &vha->dpc_flags)) in qla2x00_timer()
5164 qla82xx_watchdog(vha); in qla2x00_timer()
5166 qla8044_watchdog(vha); in qla2x00_timer()
5169 if (!vha->vp_idx && IS_QLAFX00(ha)) in qla2x00_timer()
5170 qlafx00_timer_routine(vha); in qla2x00_timer()
5173 if (atomic_read(&vha->loop_down_timer) > 0 && in qla2x00_timer()
5174 !(test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags)) && in qla2x00_timer()
5175 !(test_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags)) in qla2x00_timer()
5176 && vha->flags.online) { in qla2x00_timer()
5178 if (atomic_read(&vha->loop_down_timer) == in qla2x00_timer()
5179 vha->loop_down_abort_time) { in qla2x00_timer()
5181 ql_log(ql_log_info, vha, 0x6008, in qla2x00_timer()
5184 if (!IS_QLA2100(ha) && vha->link_down_timeout) in qla2x00_timer()
5185 atomic_set(&vha->loop_state, LOOP_DEAD); in qla2x00_timer()
5192 if (!vha->vp_idx) { in qla2x00_timer()
5212 &vha->dpc_flags); in qla2x00_timer()
5215 &vha->dpc_flags); in qla2x00_timer()
5225 if (atomic_dec_and_test(&vha->loop_down_timer) != 0) { in qla2x00_timer()
5226 if (!(vha->device_flags & DFLG_NO_CABLE)) { in qla2x00_timer()
5227 ql_log(ql_log_warn, vha, 0x6009, in qla2x00_timer()
5232 &vha->dpc_flags); in qla2x00_timer()
5235 &vha->dpc_flags); in qla2x00_timer()
5238 ql_dbg(ql_dbg_timer, vha, 0x600a, in qla2x00_timer()
5240 atomic_read(&vha->loop_down_timer)); in qla2x00_timer()
5243 if (!vha->vp_idx && (ha->beacon_blink_led == 1)) { in qla2x00_timer()
5246 set_bit(BEACON_BLINK_NEEDED, &vha->dpc_flags); in qla2x00_timer()
5252 if (!list_empty(&vha->work_list)) in qla2x00_timer()
5256 if ((test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
5257 test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
5258 test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
5260 test_bit(RESET_MARKER_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
5261 test_bit(BEACON_BLINK_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
5262 test_bit(ISP_UNRECOVERABLE, &vha->dpc_flags) || in qla2x00_timer()
5263 test_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
5264 test_bit(VP_DPC_NEEDED, &vha->dpc_flags) || in qla2x00_timer()
5265 test_bit(RELOGIN_NEEDED, &vha->dpc_flags))) { in qla2x00_timer()
5266 ql_dbg(ql_dbg_timer, vha, 0x600b, in qla2x00_timer()
5270 test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags), in qla2x00_timer()
5271 test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags), in qla2x00_timer()
5272 test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags), in qla2x00_timer()
5274 test_bit(RESET_MARKER_NEEDED, &vha->dpc_flags)); in qla2x00_timer()
5275 ql_dbg(ql_dbg_timer, vha, 0x600c, in qla2x00_timer()
5279 test_bit(BEACON_BLINK_NEEDED, &vha->dpc_flags), in qla2x00_timer()
5280 test_bit(ISP_UNRECOVERABLE, &vha->dpc_flags), in qla2x00_timer()
5281 test_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags), in qla2x00_timer()
5282 test_bit(VP_DPC_NEEDED, &vha->dpc_flags), in qla2x00_timer()
5283 test_bit(RELOGIN_NEEDED, &vha->dpc_flags)); in qla2x00_timer()
5284 qla2xxx_wake_dpc(vha); in qla2x00_timer()
5287 qla2x00_restart_timer(vha, WATCH_INTERVAL); in qla2x00_timer()
5335 qla2x00_request_firmware(scsi_qla_host_t *vha) in qla2x00_request_firmware() argument
5337 struct qla_hw_data *ha = vha->hw; in qla2x00_request_firmware()
5371 ql_log(ql_log_warn, vha, 0x0063, in qla2x00_request_firmware()
5397 scsi_qla_host_t *vha = pci_get_drvdata(pdev); in qla2xxx_pci_error_detected() local
5398 struct qla_hw_data *ha = vha->hw; in qla2xxx_pci_error_detected()
5400 ql_dbg(ql_dbg_aer, vha, 0x9000, in qla2xxx_pci_error_detected()
5412 ql_dbg(ql_dbg_aer, vha, 0x9001, "Pci channel io frozen\n"); in qla2xxx_pci_error_detected()
5413 qla82xx_clear_pending_mbx(vha); in qla2xxx_pci_error_detected()
5415 qla2x00_free_irqs(vha); in qla2xxx_pci_error_detected()
5418 qla2x00_abort_all_cmds(vha, DID_RESET << 16); in qla2xxx_pci_error_detected()
5422 qla2x00_abort_all_cmds(vha, DID_NO_CONNECT << 16); in qla2xxx_pci_error_detected()
5665 qla83xx_disable_laser(scsi_qla_host_t *vha) in qla83xx_disable_laser() argument
5668 struct qla_hw_data *ha = vha->hw; in qla83xx_disable_laser()
5672 ql_dbg(ql_dbg_init, vha, 0x004b, in qla83xx_disable_laser()
5673 "Disabling Laser for hba: %p\n", vha); in qla83xx_disable_laser()
5687 qla83xx_wr_reg(vha, reg, data); in qla83xx_disable_laser()