Lines Matching refs:vha
21 qla2x00_vp_stop_timer(scsi_qla_host_t *vha) in qla2x00_vp_stop_timer() argument
23 if (vha->vp_idx && vha->timer_active) { in qla2x00_vp_stop_timer()
24 del_timer_sync(&vha->timer); in qla2x00_vp_stop_timer()
25 vha->timer_active = 0; in qla2x00_vp_stop_timer()
30 qla24xx_allocate_vp_id(scsi_qla_host_t *vha) in qla24xx_allocate_vp_id() argument
33 struct qla_hw_data *ha = vha->hw; in qla24xx_allocate_vp_id()
40 ql_dbg(ql_dbg_vport, vha, 0xa000, in qla24xx_allocate_vp_id()
49 vha->vp_idx = vp_id; in qla24xx_allocate_vp_id()
52 list_add_tail(&vha->list, &ha->vp_list); in qla24xx_allocate_vp_id()
56 qlt_update_vp_map(vha, SET_VP_IDX); in qla24xx_allocate_vp_id()
64 qla24xx_deallocate_vp_id(scsi_qla_host_t *vha) in qla24xx_deallocate_vp_id() argument
67 struct qla_hw_data *ha = vha->hw; in qla24xx_deallocate_vp_id()
78 wait_event_timeout(vha->vref_waitq, !atomic_read(&vha->vref_count), in qla24xx_deallocate_vp_id()
82 if (atomic_read(&vha->vref_count)) { in qla24xx_deallocate_vp_id()
83 ql_dbg(ql_dbg_vport, vha, 0xfffa, in qla24xx_deallocate_vp_id()
84 "vha->vref_count=%u timeout\n", vha->vref_count.counter); in qla24xx_deallocate_vp_id()
85 vha->vref_count = (atomic_t)ATOMIC_INIT(0); in qla24xx_deallocate_vp_id()
87 list_del(&vha->list); in qla24xx_deallocate_vp_id()
88 qlt_update_vp_map(vha, RESET_VP_IDX); in qla24xx_deallocate_vp_id()
91 vp_id = vha->vp_idx; in qla24xx_deallocate_vp_id()
101 scsi_qla_host_t *vha; in qla24xx_find_vhost_by_name() local
107 list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) { in qla24xx_find_vhost_by_name()
108 if (!memcmp(port_name, vha->port_name, WWN_SIZE)) { in qla24xx_find_vhost_by_name()
110 return vha; in qla24xx_find_vhost_by_name()
131 qla2x00_mark_vp_devices_dead(scsi_qla_host_t *vha) in qla2x00_mark_vp_devices_dead() argument
141 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_mark_vp_devices_dead()
142 ql_dbg(ql_dbg_vport, vha, 0xa001, in qla2x00_mark_vp_devices_dead()
144 fcport->loop_id, fcport->vha->vp_idx); in qla2x00_mark_vp_devices_dead()
146 qla2x00_mark_device_lost(vha, fcport, 0, 0); in qla2x00_mark_vp_devices_dead()
152 qla24xx_disable_vp(scsi_qla_host_t *vha) in qla24xx_disable_vp() argument
158 if (vha->hw->flags.fw_started) in qla24xx_disable_vp()
159 ret = qla24xx_control_vp(vha, VCE_COMMAND_DISABLE_VPS_LOGO_ALL); in qla24xx_disable_vp()
161 atomic_set(&vha->loop_state, LOOP_DOWN); in qla24xx_disable_vp()
162 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla24xx_disable_vp()
163 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla24xx_disable_vp()
166 qla2x00_mark_all_devices_lost(vha, 0); in qla24xx_disable_vp()
169 spin_lock_irqsave(&vha->hw->hardware_lock, flags); in qla24xx_disable_vp()
170 qlt_update_vp_map(vha, RESET_AL_PA); in qla24xx_disable_vp()
171 spin_unlock_irqrestore(&vha->hw->hardware_lock, flags); in qla24xx_disable_vp()
173 qla2x00_mark_vp_devices_dead(vha); in qla24xx_disable_vp()
174 atomic_set(&vha->vp_state, VP_FAILED); in qla24xx_disable_vp()
175 vha->flags.management_server_logged_in = 0; in qla24xx_disable_vp()
177 fc_vport_set_state(vha->fc_vport, FC_VPORT_DISABLED); in qla24xx_disable_vp()
179 fc_vport_set_state(vha->fc_vport, FC_VPORT_FAILED); in qla24xx_disable_vp()
186 qla24xx_enable_vp(scsi_qla_host_t *vha) in qla24xx_enable_vp() argument
189 struct qla_hw_data *ha = vha->hw; in qla24xx_enable_vp()
196 vha->vp_err_state = VP_ERR_PORTDWN; in qla24xx_enable_vp()
197 fc_vport_set_state(vha->fc_vport, FC_VPORT_LINKDOWN); in qla24xx_enable_vp()
198 ql_dbg(ql_dbg_taskm, vha, 0x800b, in qla24xx_enable_vp()
208 ret = qla24xx_modify_vp_config(vha); in qla24xx_enable_vp()
212 fc_vport_set_state(vha->fc_vport, FC_VPORT_FAILED); in qla24xx_enable_vp()
216 ql_dbg(ql_dbg_taskm, vha, 0x801a, in qla24xx_enable_vp()
217 "Virtual port with id: %d - Enabled.\n", vha->vp_idx); in qla24xx_enable_vp()
221 ql_dbg(ql_dbg_taskm, vha, 0x801b, in qla24xx_enable_vp()
222 "Virtual port with id: %d - Disabled.\n", vha->vp_idx); in qla24xx_enable_vp()
227 qla24xx_configure_vp(scsi_qla_host_t *vha) in qla24xx_configure_vp() argument
232 fc_vport = vha->fc_vport; in qla24xx_configure_vp()
234 ql_dbg(ql_dbg_vport, vha, 0xa002, in qla24xx_configure_vp()
236 ret = qla2x00_send_change_request(vha, 0x3, vha->vp_idx); in qla24xx_configure_vp()
238 ql_dbg(ql_dbg_vport, vha, 0xa003, "Failed to enable " in qla24xx_configure_vp()
243 clear_bit(VP_SCR_NEEDED, &vha->vp_flags); in qla24xx_configure_vp()
246 vha->flags.online = 1; in qla24xx_configure_vp()
247 if (qla24xx_configure_vhba(vha)) in qla24xx_configure_vp()
250 atomic_set(&vha->vp_state, VP_ACTIVE); in qla24xx_configure_vp()
257 scsi_qla_host_t *vha; in qla2x00_alert_all_vps() local
263 list_for_each_entry(vha, &ha->vp_list, list) { in qla2x00_alert_all_vps()
264 if (vha->vp_idx) { in qla2x00_alert_all_vps()
265 atomic_inc(&vha->vref_count); in qla2x00_alert_all_vps()
275 ql_dbg(ql_dbg_async, vha, 0x5024, in qla2x00_alert_all_vps()
277 i, *mb, vha); in qla2x00_alert_all_vps()
278 qla2x00_async_event(vha, rsp, mb); in qla2x00_alert_all_vps()
282 if ((mb[3] & 0xff) == vha->vp_idx) { in qla2x00_alert_all_vps()
283 ql_dbg(ql_dbg_async, vha, 0x5024, in qla2x00_alert_all_vps()
285 i, *mb, vha); in qla2x00_alert_all_vps()
286 qla2x00_async_event(vha, rsp, mb); in qla2x00_alert_all_vps()
292 atomic_dec(&vha->vref_count); in qla2x00_alert_all_vps()
293 wake_up(&vha->vref_waitq); in qla2x00_alert_all_vps()
301 qla2x00_vp_abort_isp(scsi_qla_host_t *vha) in qla2x00_vp_abort_isp() argument
307 if (atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_vp_abort_isp()
308 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_vp_abort_isp()
309 qla2x00_mark_all_devices_lost(vha, 0); in qla2x00_vp_abort_isp()
311 if (!atomic_read(&vha->loop_down_timer)) in qla2x00_vp_abort_isp()
312 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla2x00_vp_abort_isp()
320 if (!test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags)) in qla2x00_vp_abort_isp()
321 qla24xx_control_vp(vha, VCE_COMMAND_DISABLE_VPS_LOGO_ALL); in qla2x00_vp_abort_isp()
323 ql_dbg(ql_dbg_taskm, vha, 0x801d, in qla2x00_vp_abort_isp()
324 "Scheduling enable of Vport %d.\n", vha->vp_idx); in qla2x00_vp_abort_isp()
325 return qla24xx_enable_vp(vha); in qla2x00_vp_abort_isp()
329 qla2x00_do_dpc_vp(scsi_qla_host_t *vha) in qla2x00_do_dpc_vp() argument
331 struct qla_hw_data *ha = vha->hw; in qla2x00_do_dpc_vp()
334 ql_dbg(ql_dbg_dpc + ql_dbg_verbose, vha, 0x4012, in qla2x00_do_dpc_vp()
335 "Entering %s vp_flags: 0x%lx.\n", __func__, vha->vp_flags); in qla2x00_do_dpc_vp()
339 if (test_and_clear_bit(VP_IDX_ACQUIRED, &vha->vp_flags)) { in qla2x00_do_dpc_vp()
341 ql_dbg(ql_dbg_dpc, vha, 0x4014, in qla2x00_do_dpc_vp()
343 qla24xx_configure_vp(vha); in qla2x00_do_dpc_vp()
344 ql_dbg(ql_dbg_dpc, vha, 0x4015, in qla2x00_do_dpc_vp()
350 if (test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags)) { in qla2x00_do_dpc_vp()
351 ql_dbg(ql_dbg_dpc, vha, 0x4016, in qla2x00_do_dpc_vp()
353 qla2x00_update_fcports(vha); in qla2x00_do_dpc_vp()
354 clear_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags); in qla2x00_do_dpc_vp()
355 ql_dbg(ql_dbg_dpc, vha, 0x4017, in qla2x00_do_dpc_vp()
359 if (test_bit(RELOGIN_NEEDED, &vha->dpc_flags) && in qla2x00_do_dpc_vp()
360 !test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags) && in qla2x00_do_dpc_vp()
361 atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_do_dpc_vp()
363 if (!vha->relogin_jif || in qla2x00_do_dpc_vp()
364 time_after_eq(jiffies, vha->relogin_jif)) { in qla2x00_do_dpc_vp()
365 vha->relogin_jif = jiffies + HZ; in qla2x00_do_dpc_vp()
366 clear_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_do_dpc_vp()
368 ql_dbg(ql_dbg_dpc, vha, 0x4018, in qla2x00_do_dpc_vp()
370 qla24xx_post_relogin_work(vha); in qla2x00_do_dpc_vp()
374 if (test_and_clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags) && in qla2x00_do_dpc_vp()
375 (!(test_and_set_bit(RESET_ACTIVE, &vha->dpc_flags)))) { in qla2x00_do_dpc_vp()
376 clear_bit(RESET_ACTIVE, &vha->dpc_flags); in qla2x00_do_dpc_vp()
379 if (test_and_clear_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) { in qla2x00_do_dpc_vp()
380 if (!(test_and_set_bit(LOOP_RESYNC_ACTIVE, &vha->dpc_flags))) { in qla2x00_do_dpc_vp()
381 ql_dbg(ql_dbg_dpc, vha, 0x401a, in qla2x00_do_dpc_vp()
383 qla2x00_loop_resync(vha); in qla2x00_do_dpc_vp()
384 clear_bit(LOOP_RESYNC_ACTIVE, &vha->dpc_flags); in qla2x00_do_dpc_vp()
385 ql_dbg(ql_dbg_dpc, vha, 0x401b, in qla2x00_do_dpc_vp()
390 ql_dbg(ql_dbg_dpc + ql_dbg_verbose, vha, 0x401c, in qla2x00_do_dpc_vp()
396 qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha) in qla2x00_do_dpc_all_vps() argument
398 struct qla_hw_data *ha = vha->hw; in qla2x00_do_dpc_all_vps()
402 if (vha->vp_idx) in qla2x00_do_dpc_all_vps()
407 clear_bit(VP_DPC_NEEDED, &vha->dpc_flags); in qla2x00_do_dpc_all_vps()
432 scsi_qla_host_t *vha; in qla24xx_vport_create_req_sanity_check() local
450 vha = qla24xx_find_vhost_by_name(ha, port_name); in qla24xx_vport_create_req_sanity_check()
451 if (vha) in qla24xx_vport_create_req_sanity_check()
456 ql_dbg(ql_dbg_vport, vha, 0xa004, in qla24xx_vport_create_req_sanity_check()
470 scsi_qla_host_t *vha; in qla24xx_create_vhost() local
474 vha = qla2x00_create_host(sht, ha); in qla24xx_create_vhost()
475 if (!vha) { in qla24xx_create_vhost()
476 ql_log(ql_log_warn, vha, 0xa005, in qla24xx_create_vhost()
481 host = vha->host; in qla24xx_create_vhost()
482 fc_vport->dd_data = vha; in qla24xx_create_vhost()
484 u64_to_wwn(fc_vport->node_name, vha->node_name); in qla24xx_create_vhost()
485 u64_to_wwn(fc_vport->port_name, vha->port_name); in qla24xx_create_vhost()
487 vha->fc_vport = fc_vport; in qla24xx_create_vhost()
488 vha->device_flags = 0; in qla24xx_create_vhost()
489 vha->vp_idx = qla24xx_allocate_vp_id(vha); in qla24xx_create_vhost()
490 if (vha->vp_idx > ha->max_npiv_vports) { in qla24xx_create_vhost()
491 ql_dbg(ql_dbg_vport, vha, 0xa006, in qla24xx_create_vhost()
495 vha->mgmt_svr_loop_id = qla2x00_reserve_mgmt_server_loop_id(vha); in qla24xx_create_vhost()
497 vha->dpc_flags = 0L; in qla24xx_create_vhost()
503 set_bit(VP_SCR_NEEDED, &vha->vp_flags); in qla24xx_create_vhost()
504 atomic_set(&vha->loop_state, LOOP_DOWN); in qla24xx_create_vhost()
505 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla24xx_create_vhost()
507 qla2x00_start_timer(vha, WATCH_INTERVAL); in qla24xx_create_vhost()
509 vha->req = base_vha->req; in qla24xx_create_vhost()
522 ql_dbg(ql_dbg_vport, vha, 0xa007, in qla24xx_create_vhost()
524 vha->host_no, vha); in qla24xx_create_vhost()
526 vha->flags.init_done = 1; in qla24xx_create_vhost()
529 set_bit(vha->vp_idx, ha->vp_idx_map); in qla24xx_create_vhost()
533 return vha; in qla24xx_create_vhost()
540 qla25xx_free_req_que(struct scsi_qla_host *vha, struct req_que *req) in qla25xx_free_req_que() argument
542 struct qla_hw_data *ha = vha->hw; in qla25xx_free_req_que()
561 qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) in qla25xx_free_rsp_que() argument
563 struct qla_hw_data *ha = vha->hw; in qla25xx_free_rsp_que()
587 qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req) in qla25xx_delete_req_que() argument
591 if (req && vha->flags.qpairs_req_created) { in qla25xx_delete_req_que()
593 ret = qla25xx_init_req_que(vha, req); in qla25xx_delete_req_que()
597 qla25xx_free_req_que(vha, req); in qla25xx_delete_req_que()
604 qla25xx_delete_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) in qla25xx_delete_rsp_que() argument
608 if (rsp && vha->flags.qpairs_rsp_created) { in qla25xx_delete_rsp_que()
610 ret = qla25xx_init_rsp_que(vha, rsp); in qla25xx_delete_rsp_que()
614 qla25xx_free_rsp_que(vha, rsp); in qla25xx_delete_rsp_que()
622 qla25xx_delete_queues(struct scsi_qla_host *vha) in qla25xx_delete_queues() argument
627 struct qla_hw_data *ha = vha->hw; in qla25xx_delete_queues()
631 list_for_each_entry_safe(qpair, tqpair, &vha->qp_list, in qla25xx_delete_queues()
633 qla2xxx_delete_qpair(vha, qpair); in qla25xx_delete_queues()
639 ret = qla25xx_delete_req_que(vha, req); in qla25xx_delete_queues()
641 ql_log(ql_log_warn, vha, 0x00ea, in qla25xx_delete_queues()
653 ret = qla25xx_delete_rsp_que(vha, rsp); in qla25xx_delete_queues()
655 ql_log(ql_log_warn, vha, 0x00eb, in qla25xx_delete_queues()
674 struct scsi_qla_host *vha = pci_get_drvdata(ha->pdev); in qla25xx_create_req_que() local
771 vha->flags.qpairs_req_created = 1; in qla25xx_create_req_que()
786 struct scsi_qla_host *vha; in qla_do_work() local
790 vha = pci_get_drvdata(ha->pdev); in qla_do_work()
791 qla24xx_process_response_queue(vha, qpair->rsp); in qla_do_work()
804 struct scsi_qla_host *vha = pci_get_drvdata(ha->pdev); in qla25xx_create_rsp_que() local
888 vha->flags.qpairs_rsp_created = 1; in qla25xx_create_rsp_que()
918 int qla24xx_control_vp(scsi_qla_host_t *vha, int cmd) in qla24xx_control_vp() argument
921 struct qla_hw_data *ha = vha->hw; in qla24xx_control_vp()
922 int vp_index = vha->vp_idx; in qla24xx_control_vp()
926 ql_dbg(ql_dbg_vport, vha, 0x10c1, in qla24xx_control_vp()
940 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); in qla24xx_control_vp()
946 ql_dbg(ql_dbg_async, vha, 0xffff, in qla24xx_control_vp()
952 ql_dbg(ql_dbg_vport, vha, 0x113f, "%s hndl %x submitted\n", in qla24xx_control_vp()
959 ql_dbg(ql_dbg_vport, vha, 0xffff, "%s: %s Timeout. %x.\n", in qla24xx_control_vp()
963 ql_dbg(ql_dbg_vport, vha, 0xffff, "%s: %s done.\n", in qla24xx_control_vp()
967 ql_dbg(ql_dbg_vport, vha, 0xffff, "%s: %s Failed. %x.\n", in qla24xx_control_vp()