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()
54 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()
78 while (atomic_read(&vha->vref_count)) { in qla24xx_deallocate_vp_id()
85 list_del(&vha->list); in qla24xx_deallocate_vp_id()
86 qlt_update_vp_map(vha, RESET_VP_IDX); in qla24xx_deallocate_vp_id()
89 vp_id = vha->vp_idx; in qla24xx_deallocate_vp_id()
99 scsi_qla_host_t *vha; in qla24xx_find_vhost_by_name() local
105 list_for_each_entry_safe(vha, tvha, &ha->vp_list, list) { in qla24xx_find_vhost_by_name()
106 if (!memcmp(port_name, vha->port_name, WWN_SIZE)) { in qla24xx_find_vhost_by_name()
108 return vha; in qla24xx_find_vhost_by_name()
129 qla2x00_mark_vp_devices_dead(scsi_qla_host_t *vha) in qla2x00_mark_vp_devices_dead() argument
139 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qla2x00_mark_vp_devices_dead()
140 ql_dbg(ql_dbg_vport, vha, 0xa001, in qla2x00_mark_vp_devices_dead()
142 fcport->loop_id, fcport->vha->vp_idx); in qla2x00_mark_vp_devices_dead()
144 qla2x00_mark_device_lost(vha, fcport, 0, 0); in qla2x00_mark_vp_devices_dead()
150 qla24xx_disable_vp(scsi_qla_host_t *vha) in qla24xx_disable_vp() argument
155 ret = qla24xx_control_vp(vha, VCE_COMMAND_DISABLE_VPS_LOGO_ALL); in qla24xx_disable_vp()
156 atomic_set(&vha->loop_state, LOOP_DOWN); in qla24xx_disable_vp()
157 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla24xx_disable_vp()
160 spin_lock_irqsave(&vha->hw->vport_slock, flags); in qla24xx_disable_vp()
161 qlt_update_vp_map(vha, RESET_AL_PA); in qla24xx_disable_vp()
162 spin_unlock_irqrestore(&vha->hw->vport_slock, flags); in qla24xx_disable_vp()
164 qla2x00_mark_vp_devices_dead(vha); in qla24xx_disable_vp()
165 atomic_set(&vha->vp_state, VP_FAILED); in qla24xx_disable_vp()
166 vha->flags.management_server_logged_in = 0; in qla24xx_disable_vp()
168 fc_vport_set_state(vha->fc_vport, FC_VPORT_DISABLED); in qla24xx_disable_vp()
170 fc_vport_set_state(vha->fc_vport, FC_VPORT_FAILED); in qla24xx_disable_vp()
177 qla24xx_enable_vp(scsi_qla_host_t *vha) in qla24xx_enable_vp() argument
180 struct qla_hw_data *ha = vha->hw; in qla24xx_enable_vp()
187 vha->vp_err_state = VP_ERR_PORTDWN; in qla24xx_enable_vp()
188 fc_vport_set_state(vha->fc_vport, FC_VPORT_LINKDOWN); in qla24xx_enable_vp()
194 ret = qla24xx_modify_vp_config(vha); in qla24xx_enable_vp()
198 fc_vport_set_state(vha->fc_vport, FC_VPORT_FAILED); in qla24xx_enable_vp()
202 ql_dbg(ql_dbg_taskm, vha, 0x801a, in qla24xx_enable_vp()
203 "Virtual port with id: %d - Enabled.\n", vha->vp_idx); in qla24xx_enable_vp()
207 ql_dbg(ql_dbg_taskm, vha, 0x801b, in qla24xx_enable_vp()
208 "Virtual port with id: %d - Disabled.\n", vha->vp_idx); in qla24xx_enable_vp()
213 qla24xx_configure_vp(scsi_qla_host_t *vha) in qla24xx_configure_vp() argument
218 fc_vport = vha->fc_vport; in qla24xx_configure_vp()
220 ql_dbg(ql_dbg_vport, vha, 0xa002, in qla24xx_configure_vp()
222 ret = qla2x00_send_change_request(vha, 0x3, vha->vp_idx); in qla24xx_configure_vp()
224 ql_dbg(ql_dbg_vport, vha, 0xa003, "Failed to enable " in qla24xx_configure_vp()
229 clear_bit(VP_SCR_NEEDED, &vha->vp_flags); in qla24xx_configure_vp()
232 vha->flags.online = 1; in qla24xx_configure_vp()
233 if (qla24xx_configure_vhba(vha)) in qla24xx_configure_vp()
236 atomic_set(&vha->vp_state, VP_ACTIVE); in qla24xx_configure_vp()
243 scsi_qla_host_t *vha; in qla2x00_alert_all_vps() local
249 list_for_each_entry(vha, &ha->vp_list, list) { in qla2x00_alert_all_vps()
250 if (vha->vp_idx) { in qla2x00_alert_all_vps()
251 atomic_inc(&vha->vref_count); in qla2x00_alert_all_vps()
263 ql_dbg(ql_dbg_async, vha, 0x5024, in qla2x00_alert_all_vps()
265 i, *mb, vha); in qla2x00_alert_all_vps()
266 qla2x00_async_event(vha, rsp, mb); in qla2x00_alert_all_vps()
271 atomic_dec(&vha->vref_count); in qla2x00_alert_all_vps()
279 qla2x00_vp_abort_isp(scsi_qla_host_t *vha) in qla2x00_vp_abort_isp() argument
285 if (atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_vp_abort_isp()
286 atomic_set(&vha->loop_state, LOOP_DOWN); in qla2x00_vp_abort_isp()
287 qla2x00_mark_all_devices_lost(vha, 0); in qla2x00_vp_abort_isp()
289 if (!atomic_read(&vha->loop_down_timer)) in qla2x00_vp_abort_isp()
290 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla2x00_vp_abort_isp()
298 if (!test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags)) in qla2x00_vp_abort_isp()
299 qla24xx_control_vp(vha, VCE_COMMAND_DISABLE_VPS_LOGO_ALL); in qla2x00_vp_abort_isp()
301 ql_dbg(ql_dbg_taskm, vha, 0x801d, in qla2x00_vp_abort_isp()
302 "Scheduling enable of Vport %d.\n", vha->vp_idx); in qla2x00_vp_abort_isp()
303 return qla24xx_enable_vp(vha); in qla2x00_vp_abort_isp()
307 qla2x00_do_dpc_vp(scsi_qla_host_t *vha) in qla2x00_do_dpc_vp() argument
309 struct qla_hw_data *ha = vha->hw; in qla2x00_do_dpc_vp()
312 ql_dbg(ql_dbg_dpc + ql_dbg_verbose, vha, 0x4012, in qla2x00_do_dpc_vp()
313 "Entering %s vp_flags: 0x%lx.\n", __func__, vha->vp_flags); in qla2x00_do_dpc_vp()
315 qla2x00_do_work(vha); in qla2x00_do_dpc_vp()
319 if (test_and_clear_bit(VP_IDX_ACQUIRED, &vha->vp_flags)) { in qla2x00_do_dpc_vp()
321 ql_dbg(ql_dbg_dpc, vha, 0x4014, in qla2x00_do_dpc_vp()
323 qla24xx_configure_vp(vha); in qla2x00_do_dpc_vp()
324 ql_dbg(ql_dbg_dpc, vha, 0x4015, in qla2x00_do_dpc_vp()
330 if (test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags)) { in qla2x00_do_dpc_vp()
331 ql_dbg(ql_dbg_dpc, vha, 0x4016, in qla2x00_do_dpc_vp()
333 qla2x00_update_fcports(vha); in qla2x00_do_dpc_vp()
334 clear_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags); in qla2x00_do_dpc_vp()
335 ql_dbg(ql_dbg_dpc, vha, 0x4017, in qla2x00_do_dpc_vp()
339 if ((test_and_clear_bit(RELOGIN_NEEDED, &vha->dpc_flags)) && in qla2x00_do_dpc_vp()
340 !test_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags) && in qla2x00_do_dpc_vp()
341 atomic_read(&vha->loop_state) != LOOP_DOWN) { in qla2x00_do_dpc_vp()
343 ql_dbg(ql_dbg_dpc, vha, 0x4018, in qla2x00_do_dpc_vp()
345 qla2x00_relogin(vha); in qla2x00_do_dpc_vp()
346 ql_dbg(ql_dbg_dpc, vha, 0x4019, in qla2x00_do_dpc_vp()
350 if (test_and_clear_bit(RESET_MARKER_NEEDED, &vha->dpc_flags) && in qla2x00_do_dpc_vp()
351 (!(test_and_set_bit(RESET_ACTIVE, &vha->dpc_flags)))) { in qla2x00_do_dpc_vp()
352 clear_bit(RESET_ACTIVE, &vha->dpc_flags); in qla2x00_do_dpc_vp()
355 if (test_and_clear_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags)) { in qla2x00_do_dpc_vp()
356 if (!(test_and_set_bit(LOOP_RESYNC_ACTIVE, &vha->dpc_flags))) { in qla2x00_do_dpc_vp()
357 ql_dbg(ql_dbg_dpc, vha, 0x401a, in qla2x00_do_dpc_vp()
359 qla2x00_loop_resync(vha); in qla2x00_do_dpc_vp()
360 clear_bit(LOOP_RESYNC_ACTIVE, &vha->dpc_flags); in qla2x00_do_dpc_vp()
361 ql_dbg(ql_dbg_dpc, vha, 0x401b, in qla2x00_do_dpc_vp()
366 ql_dbg(ql_dbg_dpc + ql_dbg_verbose, vha, 0x401c, in qla2x00_do_dpc_vp()
372 qla2x00_do_dpc_all_vps(scsi_qla_host_t *vha) in qla2x00_do_dpc_all_vps() argument
374 struct qla_hw_data *ha = vha->hw; in qla2x00_do_dpc_all_vps()
378 if (vha->vp_idx) in qla2x00_do_dpc_all_vps()
383 clear_bit(VP_DPC_NEEDED, &vha->dpc_flags); in qla2x00_do_dpc_all_vps()
408 scsi_qla_host_t *vha; in qla24xx_vport_create_req_sanity_check() local
426 vha = qla24xx_find_vhost_by_name(ha, port_name); in qla24xx_vport_create_req_sanity_check()
427 if (vha) in qla24xx_vport_create_req_sanity_check()
432 ql_dbg(ql_dbg_vport, vha, 0xa004, in qla24xx_vport_create_req_sanity_check()
446 scsi_qla_host_t *vha; in qla24xx_create_vhost() local
450 vha = qla2x00_create_host(sht, ha); in qla24xx_create_vhost()
451 if (!vha) { in qla24xx_create_vhost()
452 ql_log(ql_log_warn, vha, 0xa005, in qla24xx_create_vhost()
457 host = vha->host; in qla24xx_create_vhost()
458 fc_vport->dd_data = vha; in qla24xx_create_vhost()
460 u64_to_wwn(fc_vport->node_name, vha->node_name); in qla24xx_create_vhost()
461 u64_to_wwn(fc_vport->port_name, vha->port_name); in qla24xx_create_vhost()
463 vha->fc_vport = fc_vport; in qla24xx_create_vhost()
464 vha->device_flags = 0; in qla24xx_create_vhost()
465 vha->vp_idx = qla24xx_allocate_vp_id(vha); in qla24xx_create_vhost()
466 if (vha->vp_idx > ha->max_npiv_vports) { in qla24xx_create_vhost()
467 ql_dbg(ql_dbg_vport, vha, 0xa006, in qla24xx_create_vhost()
471 vha->mgmt_svr_loop_id = 10 + vha->vp_idx; in qla24xx_create_vhost()
473 vha->dpc_flags = 0L; in qla24xx_create_vhost()
479 set_bit(VP_SCR_NEEDED, &vha->vp_flags); in qla24xx_create_vhost()
480 atomic_set(&vha->loop_state, LOOP_DOWN); in qla24xx_create_vhost()
481 atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); in qla24xx_create_vhost()
483 qla2x00_start_timer(vha, qla2x00_timer, WATCH_INTERVAL); in qla24xx_create_vhost()
485 vha->req = base_vha->req; in qla24xx_create_vhost()
498 ql_dbg(ql_dbg_vport, vha, 0xa007, in qla24xx_create_vhost()
500 vha->host_no, vha); in qla24xx_create_vhost()
502 vha->flags.init_done = 1; in qla24xx_create_vhost()
505 set_bit(vha->vp_idx, ha->vp_idx_map); in qla24xx_create_vhost()
509 return vha; in qla24xx_create_vhost()
516 qla25xx_free_req_que(struct scsi_qla_host *vha, struct req_que *req) in qla25xx_free_req_que() argument
518 struct qla_hw_data *ha = vha->hw; in qla25xx_free_req_que()
537 qla25xx_free_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) in qla25xx_free_rsp_que() argument
539 struct qla_hw_data *ha = vha->hw; in qla25xx_free_rsp_que()
562 qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req) in qla25xx_delete_req_que() argument
568 ret = qla25xx_init_req_que(vha, req); in qla25xx_delete_req_que()
571 qla25xx_free_req_que(vha, req); in qla25xx_delete_req_que()
577 qla25xx_delete_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp) in qla25xx_delete_rsp_que() argument
583 ret = qla25xx_init_rsp_que(vha, rsp); in qla25xx_delete_rsp_que()
586 qla25xx_free_rsp_que(vha, rsp); in qla25xx_delete_rsp_que()
593 qla25xx_delete_queues(struct scsi_qla_host *vha) in qla25xx_delete_queues() argument
598 struct qla_hw_data *ha = vha->hw; in qla25xx_delete_queues()
604 ret = qla25xx_delete_req_que(vha, req); in qla25xx_delete_queues()
606 ql_log(ql_log_warn, vha, 0x00ea, in qla25xx_delete_queues()
618 ret = qla25xx_delete_rsp_que(vha, rsp); in qla25xx_delete_queues()
620 ql_log(ql_log_warn, vha, 0x00eb, in qla25xx_delete_queues()
745 struct scsi_qla_host *vha; in qla_do_work() local
749 vha = pci_get_drvdata(ha->pdev); in qla_do_work()
750 qla24xx_process_response_queue(vha, rsp); in qla_do_work()