Lines Matching refs:vha
20 qla2x00_vp_stop_timer(scsi_qla_host_t *vha) in qla2x00_vp_stop_timer() argument
22 if (vha->vp_idx && vha->timer_active) { in qla2x00_vp_stop_timer()
23 del_timer_sync(&vha->timer); in qla2x00_vp_stop_timer()
24 vha->timer_active = 0; in qla2x00_vp_stop_timer()
29 qla24xx_allocate_vp_id(scsi_qla_host_t *vha) in qla24xx_allocate_vp_id() argument
32 struct qla_hw_data *ha = vha->hw; in qla24xx_allocate_vp_id()
39 ql_dbg(ql_dbg_vport, vha, 0xa000, in qla24xx_allocate_vp_id()
48 vha->vp_idx = vp_id; in qla24xx_allocate_vp_id()
51 list_add_tail(&vha->list, &ha->vp_list); in qla24xx_allocate_vp_id()
55 qlt_update_vp_map(vha, SET_VP_IDX); in qla24xx_allocate_vp_id()
63 qla24xx_deallocate_vp_id(scsi_qla_host_t *vha) in qla24xx_deallocate_vp_id() argument
66 struct qla_hw_data *ha = vha->hw; in qla24xx_deallocate_vp_id()
79 if (wait_event_timeout(vha->vref_waitq, in qla24xx_deallocate_vp_id()
80 !atomic_read(&vha->vref_count), HZ) > 0) in qla24xx_deallocate_vp_id()
85 if (atomic_read(&vha->vref_count)) { in qla24xx_deallocate_vp_id()
86 ql_dbg(ql_dbg_vport, vha, 0xfffa, in qla24xx_deallocate_vp_id()
87 "vha->vref_count=%u timeout\n", vha->vref_count.counter); in qla24xx_deallocate_vp_id()
88 vha->vref_count = (atomic_t)ATOMIC_INIT(0); in qla24xx_deallocate_vp_id()
90 list_del(&vha->list); in qla24xx_deallocate_vp_id()
91 qlt_update_vp_map(vha, RESET_VP_IDX); in qla24xx_deallocate_vp_id()
94 vp_id = vha->vp_idx; in qla24xx_deallocate_vp_id()
104 scsi_qla_host_t *vha; in qla24xx_find_vhost_by_name() local
110 list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) { in qla24xx_find_vhost_by_name()
111 if (!memcmp(port_name, vha->port_name, WWN_SIZE)) { in qla24xx_find_vhost_by_name()
113 return vha; in qla24xx_find_vhost_by_name()
134 qla2x00_mark_vp_devices_dead(scsi_qla_host_t *vha) in qla2x00_mark_vp_devices_dead() argument
144 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_mark_vp_devices_dead()
145 ql_dbg(ql_dbg_vport, vha, 0xa001, in qla2x00_mark_vp_devices_dead()
147 fcport->loop_id, fcport->vha->vp_idx); in qla2x00_mark_vp_devices_dead()
149 qla2x00_mark_device_lost(vha, fcport, 0); in qla2x00_mark_vp_devices_dead()
155 qla24xx_disable_vp(scsi_qla_host_t *vha) in qla24xx_disable_vp() argument
161 if (vha->hw->flags.fw_started) in qla24xx_disable_vp()
162 ret = qla24xx_control_vp(vha, VCE_COMMAND_DISABLE_VPS_LOGO_ALL); in qla24xx_disable_vp()
164 atomic_set(&vha->loop_state, LOOP_DOWN); in qla24xx_disable_vp()
165 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla24xx_disable_vp()
166 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla24xx_disable_vp()
169 qla2x00_mark_all_devices_lost(vha); in qla24xx_disable_vp()
172 spin_lock_irqsave(&vha->hw->hardware_lock, flags); in qla24xx_disable_vp()
173 qlt_update_vp_map(vha, RESET_AL_PA); in qla24xx_disable_vp()
174 spin_unlock_irqrestore(&vha->hw->hardware_lock, flags); in qla24xx_disable_vp()
176 qla2x00_mark_vp_devices_dead(vha); in qla24xx_disable_vp()
177 atomic_set(&vha->vp_state, VP_FAILED); in qla24xx_disable_vp()
178 vha->flags.management_server_logged_in = 0; in qla24xx_disable_vp()
180 fc_vport_set_state(vha->fc_vport, FC_VPORT_DISABLED); in qla24xx_disable_vp()
182 fc_vport_set_state(vha->fc_vport, FC_VPORT_FAILED); in qla24xx_disable_vp()
189 qla24xx_enable_vp(scsi_qla_host_t *vha) in qla24xx_enable_vp() argument
192 struct qla_hw_data *ha = vha->hw; in qla24xx_enable_vp()
199 vha->vp_err_state = VP_ERR_PORTDWN; in qla24xx_enable_vp()
200 fc_vport_set_state(vha->fc_vport, FC_VPORT_LINKDOWN); in qla24xx_enable_vp()
201 ql_dbg(ql_dbg_taskm, vha, 0x800b, in qla24xx_enable_vp()
211 ret = qla24xx_modify_vp_config(vha); in qla24xx_enable_vp()
215 fc_vport_set_state(vha->fc_vport, FC_VPORT_FAILED); in qla24xx_enable_vp()
219 ql_dbg(ql_dbg_taskm, vha, 0x801a, in qla24xx_enable_vp()
220 "Virtual port with id: %d - Enabled.\n", vha->vp_idx); in qla24xx_enable_vp()
224 ql_dbg(ql_dbg_taskm, vha, 0x801b, in qla24xx_enable_vp()
225 "Virtual port with id: %d - Disabled.\n", vha->vp_idx); in qla24xx_enable_vp()
230 qla24xx_configure_vp(scsi_qla_host_t *vha) in qla24xx_configure_vp() argument
235 fc_vport = vha->fc_vport; in qla24xx_configure_vp()
237 ql_dbg(ql_dbg_vport, vha, 0xa002, in qla24xx_configure_vp()
239 ret = qla2x00_send_change_request(vha, 0x3, vha->vp_idx); in qla24xx_configure_vp()
241 ql_dbg(ql_dbg_vport, vha, 0xa003, "Failed to enable " in qla24xx_configure_vp()
246 clear_bit(VP_SCR_NEEDED, &vha->vp_flags); in qla24xx_configure_vp()
249 vha->flags.online = 1; in qla24xx_configure_vp()
250 if (qla24xx_configure_vhba(vha)) in qla24xx_configure_vp()
253 atomic_set(&vha->vp_state, VP_ACTIVE); in qla24xx_configure_vp()
260 scsi_qla_host_t *vha; in qla2x00_alert_all_vps() local
266 list_for_each_entry(vha, &ha->vp_list, list) { in qla2x00_alert_all_vps()
267 if (vha->vp_idx) { in qla2x00_alert_all_vps()
268 if (test_bit(VPORT_DELETE, &vha->dpc_flags)) in qla2x00_alert_all_vps()
271 atomic_inc(&vha->vref_count); in qla2x00_alert_all_vps()
281 ql_dbg(ql_dbg_async, vha, 0x5024, in qla2x00_alert_all_vps()
283 i, *mb, vha); in qla2x00_alert_all_vps()
284 qla2x00_async_event(vha, rsp, mb); in qla2x00_alert_all_vps()
288 if ((mb[3] & 0xff) == vha->vp_idx) { in qla2x00_alert_all_vps()
289 ql_dbg(ql_dbg_async, vha, 0x5024, in qla2x00_alert_all_vps()
291 i, *mb, vha); in qla2x00_alert_all_vps()
292 qla2x00_async_event(vha, rsp, mb); in qla2x00_alert_all_vps()
298 atomic_dec(&vha->vref_count); in qla2x00_alert_all_vps()
299 wake_up(&vha->vref_waitq); in qla2x00_alert_all_vps()
307 qla2x00_vp_abort_isp(scsi_qla_host_t *vha) in qla2x00_vp_abort_isp() argument
317 if (!test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags)) { in qla2x00_vp_abort_isp()
318 qla24xx_control_vp(vha, VCE_COMMAND_DISABLE_VPS_LOGO_ALL); in qla2x00_vp_abort_isp()
319 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla2x00_vp_abort_isp()
327 if (atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_vp_abort_isp()
328 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_vp_abort_isp()
329 qla2x00_mark_all_devices_lost(vha); in qla2x00_vp_abort_isp()
331 if (!atomic_read(&vha->loop_down_timer)) in qla2x00_vp_abort_isp()
332 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla2x00_vp_abort_isp()
335 ql_dbg(ql_dbg_taskm, vha, 0x801d, in qla2x00_vp_abort_isp()
336 "Scheduling enable of Vport %d.\n", vha->vp_idx); in qla2x00_vp_abort_isp()
338 return qla24xx_enable_vp(vha); in qla2x00_vp_abort_isp()
342 qla2x00_do_dpc_vp(scsi_qla_host_t *vha) in qla2x00_do_dpc_vp() argument
344 struct qla_hw_data *ha = vha->hw; in qla2x00_do_dpc_vp()
347 ql_dbg(ql_dbg_dpc + ql_dbg_verbose, vha, 0x4012, in qla2x00_do_dpc_vp()
348 "Entering %s vp_flags: 0x%lx.\n", __func__, vha->vp_flags); in qla2x00_do_dpc_vp()
352 if (test_and_clear_bit(VP_IDX_ACQUIRED, &vha->vp_flags)) { in qla2x00_do_dpc_vp()
354 ql_dbg(ql_dbg_dpc, vha, 0x4014, in qla2x00_do_dpc_vp()
356 qla24xx_configure_vp(vha); in qla2x00_do_dpc_vp()
357 ql_dbg(ql_dbg_dpc, vha, 0x4015, in qla2x00_do_dpc_vp()
363 if (test_bit(PROCESS_PUREX_IOCB, &vha->dpc_flags)) { in qla2x00_do_dpc_vp()
364 if (atomic_read(&vha->loop_state) == LOOP_READY) { in qla2x00_do_dpc_vp()
365 qla24xx_process_purex_list(&vha->purex_list); in qla2x00_do_dpc_vp()
366 clear_bit(PROCESS_PUREX_IOCB, &vha->dpc_flags); in qla2x00_do_dpc_vp()
370 if (test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags)) { in qla2x00_do_dpc_vp()
371 ql_dbg(ql_dbg_dpc, vha, 0x4016, in qla2x00_do_dpc_vp()
373 qla2x00_update_fcports(vha); in qla2x00_do_dpc_vp()
374 clear_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags); in qla2x00_do_dpc_vp()
375 ql_dbg(ql_dbg_dpc, vha, 0x4017, in qla2x00_do_dpc_vp()
379 if (test_bit(RELOGIN_NEEDED, &vha->dpc_flags) && in qla2x00_do_dpc_vp()
380 !test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags) && in qla2x00_do_dpc_vp()
381 atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_do_dpc_vp()
383 if (!vha->relogin_jif || in qla2x00_do_dpc_vp()
384 time_after_eq(jiffies, vha->relogin_jif)) { in qla2x00_do_dpc_vp()
385 vha->relogin_jif = jiffies + HZ; in qla2x00_do_dpc_vp()
386 clear_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_do_dpc_vp()
388 ql_dbg(ql_dbg_dpc, vha, 0x4018, in qla2x00_do_dpc_vp()
390 qla24xx_post_relogin_work(vha); in qla2x00_do_dpc_vp()
394 if (test_and_clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags) && in qla2x00_do_dpc_vp()
395 (!(test_and_set_bit(RESET_ACTIVE, &vha->dpc_flags)))) { in qla2x00_do_dpc_vp()
396 clear_bit(RESET_ACTIVE, &vha->dpc_flags); in qla2x00_do_dpc_vp()
399 if (test_and_clear_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) { in qla2x00_do_dpc_vp()
400 if (!(test_and_set_bit(LOOP_RESYNC_ACTIVE, &vha->dpc_flags))) { in qla2x00_do_dpc_vp()
401 ql_dbg(ql_dbg_dpc, vha, 0x401a, in qla2x00_do_dpc_vp()
403 qla2x00_loop_resync(vha); in qla2x00_do_dpc_vp()
404 clear_bit(LOOP_RESYNC_ACTIVE, &vha->dpc_flags); in qla2x00_do_dpc_vp()
405 ql_dbg(ql_dbg_dpc, vha, 0x401b, in qla2x00_do_dpc_vp()
410 ql_dbg(ql_dbg_dpc + ql_dbg_verbose, vha, 0x401c, in qla2x00_do_dpc_vp()
416 qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha) in qla2x00_do_dpc_all_vps() argument
418 struct qla_hw_data *ha = vha->hw; in qla2x00_do_dpc_all_vps()
422 if (vha->vp_idx) in qla2x00_do_dpc_all_vps()
427 clear_bit(VP_DPC_NEEDED, &vha->dpc_flags); in qla2x00_do_dpc_all_vps()
452 scsi_qla_host_t *vha; in qla24xx_vport_create_req_sanity_check() local
470 vha = qla24xx_find_vhost_by_name(ha, port_name); in qla24xx_vport_create_req_sanity_check()
471 if (vha) in qla24xx_vport_create_req_sanity_check()
476 ql_dbg(ql_dbg_vport, vha, 0xa004, in qla24xx_vport_create_req_sanity_check()
490 scsi_qla_host_t *vha; in qla24xx_create_vhost() local
494 vha = qla2x00_create_host(sht, ha); in qla24xx_create_vhost()
495 if (!vha) { in qla24xx_create_vhost()
496 ql_log(ql_log_warn, vha, 0xa005, in qla24xx_create_vhost()
501 host = vha->host; in qla24xx_create_vhost()
502 fc_vport->dd_data = vha; in qla24xx_create_vhost()
504 u64_to_wwn(fc_vport->node_name, vha->node_name); in qla24xx_create_vhost()
505 u64_to_wwn(fc_vport->port_name, vha->port_name); in qla24xx_create_vhost()
507 vha->fc_vport = fc_vport; in qla24xx_create_vhost()
508 vha->device_flags = 0; in qla24xx_create_vhost()
509 vha->vp_idx = qla24xx_allocate_vp_id(vha); in qla24xx_create_vhost()
510 if (vha->vp_idx > ha->max_npiv_vports) { in qla24xx_create_vhost()
511 ql_dbg(ql_dbg_vport, vha, 0xa006, in qla24xx_create_vhost()
515 vha->mgmt_svr_loop_id = qla2x00_reserve_mgmt_server_loop_id(vha); in qla24xx_create_vhost()
517 vha->dpc_flags = 0L; in qla24xx_create_vhost()
519 set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); in qla24xx_create_vhost()
520 set_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags); in qla24xx_create_vhost()
526 set_bit(VP_SCR_NEEDED, &vha->vp_flags); in qla24xx_create_vhost()
527 atomic_set(&vha->loop_state, LOOP_DOWN); in qla24xx_create_vhost()
528 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla24xx_create_vhost()
530 qla2x00_start_timer(vha, WATCH_INTERVAL); in qla24xx_create_vhost()
532 vha->req = base_vha->req; in qla24xx_create_vhost()
533 vha->flags.nvme_enabled = base_vha->flags.nvme_enabled; in qla24xx_create_vhost()
546 ql_dbg(ql_dbg_vport, vha, 0xa007, in qla24xx_create_vhost()
548 vha->host_no, vha); in qla24xx_create_vhost()
550 vha->flags.init_done = 1; in qla24xx_create_vhost()
553 set_bit(vha->vp_idx, ha->vp_idx_map); in qla24xx_create_vhost()
557 return vha; in qla24xx_create_vhost()
564 qla25xx_free_req_que(struct scsi_qla_host *vha, struct req_que *req) in qla25xx_free_req_que() argument
566 struct qla_hw_data *ha = vha->hw; in qla25xx_free_req_que()
585 qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) in qla25xx_free_rsp_que() argument
587 struct qla_hw_data *ha = vha->hw; in qla25xx_free_rsp_que()
611 qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req) in qla25xx_delete_req_que() argument
615 if (req && vha->flags.qpairs_req_created) { in qla25xx_delete_req_que()
617 ret = qla25xx_init_req_que(vha, req); in qla25xx_delete_req_que()
621 qla25xx_free_req_que(vha, req); in qla25xx_delete_req_que()
628 qla25xx_delete_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) in qla25xx_delete_rsp_que() argument
632 if (rsp && vha->flags.qpairs_rsp_created) { in qla25xx_delete_rsp_que()
634 ret = qla25xx_init_rsp_que(vha, rsp); in qla25xx_delete_rsp_que()
638 qla25xx_free_rsp_que(vha, rsp); in qla25xx_delete_rsp_que()
646 qla25xx_delete_queues(struct scsi_qla_host *vha) in qla25xx_delete_queues() argument
651 struct qla_hw_data *ha = vha->hw; in qla25xx_delete_queues()
655 list_for_each_entry_safe(qpair, tqpair, &vha->qp_list, in qla25xx_delete_queues()
657 qla2xxx_delete_qpair(vha, qpair); in qla25xx_delete_queues()
663 ret = qla25xx_delete_req_que(vha, req); in qla25xx_delete_queues()
665 ql_log(ql_log_warn, vha, 0x00ea, in qla25xx_delete_queues()
677 ret = qla25xx_delete_rsp_que(vha, rsp); in qla25xx_delete_queues()
679 ql_log(ql_log_warn, vha, 0x00eb, in qla25xx_delete_queues()
698 struct scsi_qla_host *vha = pci_get_drvdata(ha->pdev); in qla25xx_create_req_que() local
795 vha->flags.qpairs_req_created = 1; in qla25xx_create_req_que()
810 struct scsi_qla_host *vha = qpair->vha; in qla_do_work() local
813 qla24xx_process_response_queue(vha, qpair->rsp); in qla_do_work()
826 struct scsi_qla_host *vha = pci_get_drvdata(ha->pdev); in qla25xx_create_rsp_que() local
911 vha->flags.qpairs_rsp_created = 1; in qla25xx_create_rsp_que()
940 int qla24xx_control_vp(scsi_qla_host_t *vha, int cmd) in qla24xx_control_vp() argument
943 struct qla_hw_data *ha = vha->hw; in qla24xx_control_vp()
944 int vp_index = vha->vp_idx; in qla24xx_control_vp()
949 ql_dbg(ql_dbg_vport, vha, 0x10c1, in qla24xx_control_vp()
964 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); in qla24xx_control_vp()
970 ql_dbg(ql_dbg_async, vha, 0xffff, in qla24xx_control_vp()
976 ql_dbg(ql_dbg_vport, vha, 0x113f, "%s hndl %x submitted\n", in qla24xx_control_vp()
985 ql_dbg(ql_dbg_vport, vha, 0xffff, "%s: %s Timeout. %x.\n", in qla24xx_control_vp()
989 ql_dbg(ql_dbg_vport, vha, 0xffff, "%s: %s done.\n", in qla24xx_control_vp()
993 ql_dbg(ql_dbg_vport, vha, 0xffff, "%s: %s Failed. %x.\n", in qla24xx_control_vp()