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()
81 if (atomic_read(&vha->vref_count) == 0) { in qla24xx_deallocate_vp_id()
82 list_del(&vha->list); in qla24xx_deallocate_vp_id()
83 qlt_update_vp_map(vha, RESET_VP_IDX); in qla24xx_deallocate_vp_id()
94 ql_log(ql_log_info, vha, 0xfffa, in qla24xx_deallocate_vp_id()
95 "vha->vref_count=%u timeout\n", vha->vref_count.counter); in qla24xx_deallocate_vp_id()
97 list_del(&vha->list); in qla24xx_deallocate_vp_id()
98 qlt_update_vp_map(vha, RESET_VP_IDX); in qla24xx_deallocate_vp_id()
102 vp_id = vha->vp_idx; in qla24xx_deallocate_vp_id()
112 scsi_qla_host_t *vha; in qla24xx_find_vhost_by_name() local
118 list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) { in qla24xx_find_vhost_by_name()
119 if (!memcmp(port_name, vha->port_name, WWN_SIZE)) { in qla24xx_find_vhost_by_name()
121 return vha; in qla24xx_find_vhost_by_name()
142 qla2x00_mark_vp_devices_dead(scsi_qla_host_t *vha) in qla2x00_mark_vp_devices_dead() argument
152 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_mark_vp_devices_dead()
153 ql_dbg(ql_dbg_vport, vha, 0xa001, in qla2x00_mark_vp_devices_dead()
155 fcport->loop_id, fcport->vha->vp_idx); in qla2x00_mark_vp_devices_dead()
157 qla2x00_mark_device_lost(vha, fcport, 0); in qla2x00_mark_vp_devices_dead()
163 qla24xx_disable_vp(scsi_qla_host_t *vha) in qla24xx_disable_vp() argument
169 if (vha->hw->flags.edif_enabled) { in qla24xx_disable_vp()
170 if (DBELL_ACTIVE(vha)) in qla24xx_disable_vp()
171 qla2x00_post_aen_work(vha, FCH_EVT_VENDOR_UNIQUE, in qla24xx_disable_vp()
174 qla2x00_wait_for_sess_deletion(vha); in qla24xx_disable_vp()
177 if (vha->hw->flags.fw_started) in qla24xx_disable_vp()
178 ret = qla24xx_control_vp(vha, VCE_COMMAND_DISABLE_VPS_LOGO_ALL); in qla24xx_disable_vp()
180 atomic_set(&vha->loop_state, LOOP_DOWN); in qla24xx_disable_vp()
181 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla24xx_disable_vp()
182 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla24xx_disable_vp()
185 if (!vha->hw->flags.edif_enabled) in qla24xx_disable_vp()
186 qla2x00_wait_for_sess_deletion(vha); in qla24xx_disable_vp()
189 spin_lock_irqsave(&vha->hw->hardware_lock, flags); in qla24xx_disable_vp()
190 qlt_update_vp_map(vha, RESET_AL_PA); in qla24xx_disable_vp()
191 spin_unlock_irqrestore(&vha->hw->hardware_lock, flags); in qla24xx_disable_vp()
193 qla2x00_mark_vp_devices_dead(vha); in qla24xx_disable_vp()
194 atomic_set(&vha->vp_state, VP_FAILED); in qla24xx_disable_vp()
195 vha->flags.management_server_logged_in = 0; in qla24xx_disable_vp()
197 fc_vport_set_state(vha->fc_vport, FC_VPORT_DISABLED); in qla24xx_disable_vp()
199 fc_vport_set_state(vha->fc_vport, FC_VPORT_FAILED); in qla24xx_disable_vp()
206 qla24xx_enable_vp(scsi_qla_host_t *vha) in qla24xx_enable_vp() argument
209 struct qla_hw_data *ha = vha->hw; in qla24xx_enable_vp()
216 vha->vp_err_state = VP_ERR_PORTDWN; in qla24xx_enable_vp()
217 fc_vport_set_state(vha->fc_vport, FC_VPORT_LINKDOWN); in qla24xx_enable_vp()
218 ql_dbg(ql_dbg_taskm, vha, 0x800b, in qla24xx_enable_vp()
228 ret = qla24xx_modify_vp_config(vha); in qla24xx_enable_vp()
232 fc_vport_set_state(vha->fc_vport, FC_VPORT_FAILED); in qla24xx_enable_vp()
236 ql_dbg(ql_dbg_taskm, vha, 0x801a, in qla24xx_enable_vp()
237 "Virtual port with id: %d - Enabled.\n", vha->vp_idx); in qla24xx_enable_vp()
241 ql_dbg(ql_dbg_taskm, vha, 0x801b, in qla24xx_enable_vp()
242 "Virtual port with id: %d - Disabled.\n", vha->vp_idx); in qla24xx_enable_vp()
247 qla24xx_configure_vp(scsi_qla_host_t *vha) in qla24xx_configure_vp() argument
252 fc_vport = vha->fc_vport; in qla24xx_configure_vp()
254 ql_dbg(ql_dbg_vport, vha, 0xa002, in qla24xx_configure_vp()
256 ret = qla2x00_send_change_request(vha, 0x3, vha->vp_idx); in qla24xx_configure_vp()
258 ql_dbg(ql_dbg_vport, vha, 0xa003, "Failed to enable " in qla24xx_configure_vp()
263 clear_bit(VP_SCR_NEEDED, &vha->vp_flags); in qla24xx_configure_vp()
266 vha->flags.online = 1; in qla24xx_configure_vp()
267 if (qla24xx_configure_vhba(vha)) in qla24xx_configure_vp()
270 atomic_set(&vha->vp_state, VP_ACTIVE); in qla24xx_configure_vp()
277 scsi_qla_host_t *vha, *tvp; in qla2x00_alert_all_vps() local
283 list_for_each_entry_safe(vha, tvp, &ha->vp_list, list) { in qla2x00_alert_all_vps()
284 if (vha->vp_idx) { in qla2x00_alert_all_vps()
285 if (test_bit(VPORT_DELETE, &vha->dpc_flags)) in qla2x00_alert_all_vps()
288 atomic_inc(&vha->vref_count); in qla2x00_alert_all_vps()
298 ql_dbg(ql_dbg_async, vha, 0x5024, in qla2x00_alert_all_vps()
300 i, *mb, vha); in qla2x00_alert_all_vps()
301 qla2x00_async_event(vha, rsp, mb); in qla2x00_alert_all_vps()
305 if ((mb[3] & 0xff) == vha->vp_idx) { in qla2x00_alert_all_vps()
306 ql_dbg(ql_dbg_async, vha, 0x5024, in qla2x00_alert_all_vps()
308 i, *mb, vha); in qla2x00_alert_all_vps()
309 qla2x00_async_event(vha, rsp, mb); in qla2x00_alert_all_vps()
315 atomic_dec(&vha->vref_count); in qla2x00_alert_all_vps()
316 wake_up(&vha->vref_waitq); in qla2x00_alert_all_vps()
324 qla2x00_vp_abort_isp(scsi_qla_host_t *vha) in qla2x00_vp_abort_isp() argument
334 if (!test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags)) { in qla2x00_vp_abort_isp()
335 qla24xx_control_vp(vha, VCE_COMMAND_DISABLE_VPS_LOGO_ALL); in qla2x00_vp_abort_isp()
336 list_for_each_entry(fcport, &vha->vp_fcports, list) in qla2x00_vp_abort_isp()
344 if (atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_vp_abort_isp()
345 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_vp_abort_isp()
346 qla2x00_mark_all_devices_lost(vha); in qla2x00_vp_abort_isp()
348 if (!atomic_read(&vha->loop_down_timer)) in qla2x00_vp_abort_isp()
349 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla2x00_vp_abort_isp()
352 ql_dbg(ql_dbg_taskm, vha, 0x801d, in qla2x00_vp_abort_isp()
353 "Scheduling enable of Vport %d.\n", vha->vp_idx); in qla2x00_vp_abort_isp()
355 return qla24xx_enable_vp(vha); in qla2x00_vp_abort_isp()
359 qla2x00_do_dpc_vp(scsi_qla_host_t *vha) in qla2x00_do_dpc_vp() argument
361 struct qla_hw_data *ha = vha->hw; in qla2x00_do_dpc_vp()
364 ql_dbg(ql_dbg_dpc + ql_dbg_verbose, vha, 0x4012, in qla2x00_do_dpc_vp()
365 "Entering %s vp_flags: 0x%lx.\n", __func__, vha->vp_flags); in qla2x00_do_dpc_vp()
369 if (test_and_clear_bit(VP_IDX_ACQUIRED, &vha->vp_flags)) { in qla2x00_do_dpc_vp()
371 ql_dbg(ql_dbg_dpc, vha, 0x4014, in qla2x00_do_dpc_vp()
373 qla24xx_configure_vp(vha); in qla2x00_do_dpc_vp()
374 ql_dbg(ql_dbg_dpc, vha, 0x4015, in qla2x00_do_dpc_vp()
380 if (test_bit(PROCESS_PUREX_IOCB, &vha->dpc_flags)) { in qla2x00_do_dpc_vp()
381 if (atomic_read(&vha->loop_state) == LOOP_READY) { in qla2x00_do_dpc_vp()
382 qla24xx_process_purex_list(&vha->purex_list); in qla2x00_do_dpc_vp()
383 clear_bit(PROCESS_PUREX_IOCB, &vha->dpc_flags); in qla2x00_do_dpc_vp()
387 if (test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags)) { in qla2x00_do_dpc_vp()
388 ql_dbg(ql_dbg_dpc, vha, 0x4016, in qla2x00_do_dpc_vp()
390 qla2x00_update_fcports(vha); in qla2x00_do_dpc_vp()
391 clear_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags); in qla2x00_do_dpc_vp()
392 ql_dbg(ql_dbg_dpc, vha, 0x4017, in qla2x00_do_dpc_vp()
396 if (test_bit(RELOGIN_NEEDED, &vha->dpc_flags) && in qla2x00_do_dpc_vp()
397 !test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags) && in qla2x00_do_dpc_vp()
398 atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_do_dpc_vp()
400 if (!vha->relogin_jif || in qla2x00_do_dpc_vp()
401 time_after_eq(jiffies, vha->relogin_jif)) { in qla2x00_do_dpc_vp()
402 vha->relogin_jif = jiffies + HZ; in qla2x00_do_dpc_vp()
403 clear_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qla2x00_do_dpc_vp()
405 ql_dbg(ql_dbg_dpc, vha, 0x4018, in qla2x00_do_dpc_vp()
407 qla24xx_post_relogin_work(vha); in qla2x00_do_dpc_vp()
411 if (test_and_clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags) && in qla2x00_do_dpc_vp()
412 (!(test_and_set_bit(RESET_ACTIVE, &vha->dpc_flags)))) { in qla2x00_do_dpc_vp()
413 clear_bit(RESET_ACTIVE, &vha->dpc_flags); in qla2x00_do_dpc_vp()
416 if (test_and_clear_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) { in qla2x00_do_dpc_vp()
417 if (!(test_and_set_bit(LOOP_RESYNC_ACTIVE, &vha->dpc_flags))) { in qla2x00_do_dpc_vp()
418 ql_dbg(ql_dbg_dpc, vha, 0x401a, in qla2x00_do_dpc_vp()
420 qla2x00_loop_resync(vha); in qla2x00_do_dpc_vp()
421 clear_bit(LOOP_RESYNC_ACTIVE, &vha->dpc_flags); in qla2x00_do_dpc_vp()
422 ql_dbg(ql_dbg_dpc, vha, 0x401b, in qla2x00_do_dpc_vp()
427 ql_dbg(ql_dbg_dpc + ql_dbg_verbose, vha, 0x401c, in qla2x00_do_dpc_vp()
433 qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha) in qla2x00_do_dpc_all_vps() argument
435 struct qla_hw_data *ha = vha->hw; in qla2x00_do_dpc_all_vps()
439 if (vha->vp_idx) in qla2x00_do_dpc_all_vps()
444 clear_bit(VP_DPC_NEEDED, &vha->dpc_flags); in qla2x00_do_dpc_all_vps()
469 scsi_qla_host_t *vha; in qla24xx_vport_create_req_sanity_check() local
487 vha = qla24xx_find_vhost_by_name(ha, port_name); in qla24xx_vport_create_req_sanity_check()
488 if (vha) in qla24xx_vport_create_req_sanity_check()
493 ql_dbg(ql_dbg_vport, vha, 0xa004, in qla24xx_vport_create_req_sanity_check()
507 scsi_qla_host_t *vha; in qla24xx_create_vhost() local
511 vha = qla2x00_create_host(sht, ha); in qla24xx_create_vhost()
512 if (!vha) { in qla24xx_create_vhost()
513 ql_log(ql_log_warn, vha, 0xa005, in qla24xx_create_vhost()
518 host = vha->host; in qla24xx_create_vhost()
519 fc_vport->dd_data = vha; in qla24xx_create_vhost()
521 u64_to_wwn(fc_vport->node_name, vha->node_name); in qla24xx_create_vhost()
522 u64_to_wwn(fc_vport->port_name, vha->port_name); in qla24xx_create_vhost()
524 vha->fc_vport = fc_vport; in qla24xx_create_vhost()
525 vha->device_flags = 0; in qla24xx_create_vhost()
526 vha->vp_idx = qla24xx_allocate_vp_id(vha); in qla24xx_create_vhost()
527 if (vha->vp_idx > ha->max_npiv_vports) { in qla24xx_create_vhost()
528 ql_dbg(ql_dbg_vport, vha, 0xa006, in qla24xx_create_vhost()
532 vha->mgmt_svr_loop_id = qla2x00_reserve_mgmt_server_loop_id(vha); in qla24xx_create_vhost()
534 vha->dpc_flags = 0L; in qla24xx_create_vhost()
536 set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); in qla24xx_create_vhost()
537 set_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags); in qla24xx_create_vhost()
543 set_bit(VP_SCR_NEEDED, &vha->vp_flags); in qla24xx_create_vhost()
544 atomic_set(&vha->loop_state, LOOP_DOWN); in qla24xx_create_vhost()
545 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla24xx_create_vhost()
547 qla2x00_start_timer(vha, WATCH_INTERVAL); in qla24xx_create_vhost()
549 vha->req = base_vha->req; in qla24xx_create_vhost()
550 vha->flags.nvme_enabled = base_vha->flags.nvme_enabled; in qla24xx_create_vhost()
563 ql_dbg(ql_dbg_vport, vha, 0xa007, in qla24xx_create_vhost()
565 vha->host_no, vha); in qla24xx_create_vhost()
567 vha->flags.init_done = 1; in qla24xx_create_vhost()
570 set_bit(vha->vp_idx, ha->vp_idx_map); in qla24xx_create_vhost()
574 return vha; in qla24xx_create_vhost()
581 qla25xx_free_req_que(struct scsi_qla_host *vha, struct req_que *req) in qla25xx_free_req_que() argument
583 struct qla_hw_data *ha = vha->hw; in qla25xx_free_req_que()
602 qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) in qla25xx_free_rsp_que() argument
604 struct qla_hw_data *ha = vha->hw; in qla25xx_free_rsp_que()
628 qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req) in qla25xx_delete_req_que() argument
632 if (req && vha->flags.qpairs_req_created) { in qla25xx_delete_req_que()
634 ret = qla25xx_init_req_que(vha, req); in qla25xx_delete_req_que()
638 qla25xx_free_req_que(vha, req); in qla25xx_delete_req_que()
645 qla25xx_delete_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) in qla25xx_delete_rsp_que() argument
649 if (rsp && vha->flags.qpairs_rsp_created) { in qla25xx_delete_rsp_que()
651 ret = qla25xx_init_rsp_que(vha, rsp); in qla25xx_delete_rsp_que()
655 qla25xx_free_rsp_que(vha, rsp); in qla25xx_delete_rsp_que()
663 qla25xx_delete_queues(struct scsi_qla_host *vha) in qla25xx_delete_queues() argument
668 struct qla_hw_data *ha = vha->hw; in qla25xx_delete_queues()
672 list_for_each_entry_safe(qpair, tqpair, &vha->qp_list, in qla25xx_delete_queues()
674 qla2xxx_delete_qpair(vha, qpair); in qla25xx_delete_queues()
680 ret = qla25xx_delete_req_que(vha, req); in qla25xx_delete_queues()
682 ql_log(ql_log_warn, vha, 0x00ea, in qla25xx_delete_queues()
694 ret = qla25xx_delete_rsp_que(vha, rsp); in qla25xx_delete_queues()
696 ql_log(ql_log_warn, vha, 0x00eb, in qla25xx_delete_queues()
715 struct scsi_qla_host *vha = pci_get_drvdata(ha->pdev); in qla25xx_create_req_que() local
812 vha->flags.qpairs_req_created = 1; in qla25xx_create_req_que()
827 struct scsi_qla_host *vha = qpair->vha; in qla_do_work() local
830 qla24xx_process_response_queue(vha, qpair->rsp); in qla_do_work()
843 struct scsi_qla_host *vha = pci_get_drvdata(ha->pdev); in qla25xx_create_rsp_que() local
928 vha->flags.qpairs_rsp_created = 1; in qla25xx_create_rsp_que()
957 int qla24xx_control_vp(scsi_qla_host_t *vha, int cmd) in qla24xx_control_vp() argument
960 struct qla_hw_data *ha = vha->hw; in qla24xx_control_vp()
961 int vp_index = vha->vp_idx; in qla24xx_control_vp()
966 ql_dbg(ql_dbg_vport, vha, 0x10c1, in qla24xx_control_vp()
980 qla2x00_init_async_sp(sp, qla2x00_get_async_timeout(vha) + 2, in qla24xx_control_vp()
987 ql_dbg(ql_dbg_async, vha, 0xffff, in qla24xx_control_vp()
993 ql_dbg(ql_dbg_vport, vha, 0x113f, "%s hndl %x submitted\n", in qla24xx_control_vp()
1002 ql_dbg(ql_dbg_vport, vha, 0xffff, "%s: %s Timeout. %x.\n", in qla24xx_control_vp()
1006 ql_dbg(ql_dbg_vport, vha, 0xffff, "%s: %s done.\n", in qla24xx_control_vp()
1010 ql_dbg(ql_dbg_vport, vha, 0xffff, "%s: %s Failed. %x.\n", in qla24xx_control_vp()