Lines Matching refs:tgt
116 static void qlt_clear_tgt_db(struct qla_tgt *tgt);
142 struct qla_tgt *tgt, in qlt_find_sess_by_port_name() argument
147 list_for_each_entry(sess, &tgt->sess_list, sess_list_entry) { in qlt_find_sess_by_port_name()
184 BUG_ON(ha->tgt.tgt_vp_map == NULL); in qlt_find_host_by_d_id()
185 vp_idx = ha->tgt.tgt_vp_map[d_id[2]].idx; in qlt_find_host_by_d_id()
187 return ha->tgt.tgt_vp_map[vp_idx].vha; in qlt_find_host_by_d_id()
201 BUG_ON(ha->tgt.tgt_vp_map == NULL); in qlt_find_host_by_vp_idx()
203 return ha->tgt.tgt_vp_map[vp_idx].vha; in qlt_find_host_by_vp_idx()
212 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_incr_num_pend_cmds()
214 vha->hw->tgt.num_pend_cmds++; in qlt_incr_num_pend_cmds()
215 if (vha->hw->tgt.num_pend_cmds > vha->hw->qla_stats.stat_max_pend_cmds) in qlt_incr_num_pend_cmds()
217 vha->hw->tgt.num_pend_cmds; in qlt_incr_num_pend_cmds()
218 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_incr_num_pend_cmds()
224 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_decr_num_pend_cmds()
225 vha->hw->tgt.num_pend_cmds--; in qlt_decr_num_pend_cmds()
226 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_decr_num_pend_cmds()
396 struct qla_tgt *tgt = sess->tgt; in qlt_free_session_done() local
411 BUG_ON(!tgt); in qlt_free_session_done()
436 ha->tgt.tgt_ops->free_session(sess); in qlt_free_session_done()
474 tgt->sess_count--; in qlt_free_session_done()
475 if (tgt->sess_count == 0) in qlt_free_session_done()
476 wake_up_all(&tgt->waitQ); in qlt_free_session_done()
484 vha->hw->tgt.tgt_ops->clear_nacl_from_fcport_map(sess); in qlt_unreg_sess()
512 if (!list_empty(&ha->tgt.qla_tgt->sess_list)) { in qlt_reset()
513 sess = list_entry(ha->tgt.qla_tgt->sess_list.next, in qlt_reset()
537 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id); in qlt_reset()
563 struct qla_tgt *tgt = sess->tgt; in qlt_schedule_sess_for_deletion() local
564 uint32_t dev_loss_tmo = tgt->ha->port_down_retry_count + 5; in qlt_schedule_sess_for_deletion()
580 list_add(&sess->del_list_entry, &tgt->del_sess_list); in qlt_schedule_sess_for_deletion()
583 list_add_tail(&sess->del_list_entry, &tgt->del_sess_list); in qlt_schedule_sess_for_deletion()
597 mod_delayed_work(system_wq, &tgt->sess_del_work, 0); in qlt_schedule_sess_for_deletion()
599 schedule_delayed_work(&tgt->sess_del_work, in qlt_schedule_sess_for_deletion()
604 static void qlt_clear_tgt_db(struct qla_tgt *tgt) in qlt_clear_tgt_db() argument
608 list_for_each_entry(sess, &tgt->sess_list, sess_list_entry) in qlt_clear_tgt_db()
674 struct qla_tgt *tgt = container_of(work, struct qla_tgt, in qlt_del_sess_work_fn() local
676 struct scsi_qla_host *vha = tgt->vha; in qlt_del_sess_work_fn()
682 while (!list_empty(&tgt->del_sess_list)) { in qlt_del_sess_work_fn()
683 sess = list_entry(tgt->del_sess_list.next, typeof(*sess), in qlt_del_sess_work_fn()
694 ha->tgt.tgt_ops->shutdown_sess(sess); in qlt_del_sess_work_fn()
695 ha->tgt.tgt_ops->put_sess(sess); in qlt_del_sess_work_fn()
697 schedule_delayed_work(&tgt->sess_del_work, in qlt_del_sess_work_fn()
744 ha->tgt.tgt_ops->update_sess(sess, fcport->d_id, fcport->loop_id, in qlt_create_sess()
768 sess->tgt = vha->vha_tgt.qla_tgt; in qlt_create_sess()
795 if (ha->tgt.tgt_ops->check_initiator_node_acl(vha, in qlt_create_sess()
832 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_fc_port_added() local
836 if (!vha->hw->tgt.tgt_ops) in qlt_fc_port_added()
839 if (!tgt || (fcport->port_type != FCT_INITIATOR)) in qlt_fc_port_added()
846 if (tgt->tgt_stop) { in qlt_fc_port_added()
850 sess = qlt_find_sess_by_port_name(tgt, fcport->port_name); in qlt_fc_port_added()
878 ha->tgt.tgt_ops->update_sess(sess, fcport->d_id, fcport->loop_id, in qlt_fc_port_added()
889 ha->tgt.tgt_ops->put_sess(sess); in qlt_fc_port_added()
900 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_fc_port_deleted() local
903 if (!vha->hw->tgt.tgt_ops) in qlt_fc_port_deleted()
906 if (!tgt) in qlt_fc_port_deleted()
909 if (tgt->tgt_stop) { in qlt_fc_port_deleted()
912 sess = qlt_find_sess_by_port_name(tgt, fcport->port_name); in qlt_fc_port_deleted()
932 static inline int test_tgt_sess_count(struct qla_tgt *tgt) in test_tgt_sess_count() argument
934 struct qla_hw_data *ha = tgt->ha; in test_tgt_sess_count()
942 ql_dbg(ql_dbg_tgt, tgt->vha, 0xe002, in test_tgt_sess_count()
944 tgt, list_empty(&tgt->sess_list), tgt->sess_count); in test_tgt_sess_count()
945 res = (tgt->sess_count == 0); in test_tgt_sess_count()
952 int qlt_stop_phase1(struct qla_tgt *tgt) in qlt_stop_phase1() argument
954 struct scsi_qla_host *vha = tgt->vha; in qlt_stop_phase1()
955 struct qla_hw_data *ha = tgt->ha; in qlt_stop_phase1()
973 if (tgt->tgt_stop || tgt->tgt_stopped) { in qlt_stop_phase1()
988 tgt->tgt_stop = 1; in qlt_stop_phase1()
989 qlt_clear_tgt_db(tgt); in qlt_stop_phase1()
994 flush_delayed_work(&tgt->sess_del_work); in qlt_stop_phase1()
997 "Waiting for sess works (tgt %p)", tgt); in qlt_stop_phase1()
998 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_stop_phase1()
999 while (!list_empty(&tgt->sess_works_list)) { in qlt_stop_phase1()
1000 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_stop_phase1()
1002 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_stop_phase1()
1004 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_stop_phase1()
1008 "sess_count=%d\n", tgt, list_empty(&tgt->sess_list), in qlt_stop_phase1()
1009 tgt->sess_count); in qlt_stop_phase1()
1011 wait_event(tgt->waitQ, test_tgt_sess_count(tgt)); in qlt_stop_phase1()
1018 wait_event(tgt->waitQ, test_tgt_sess_count(tgt)); in qlt_stop_phase1()
1024 void qlt_stop_phase2(struct qla_tgt *tgt) in qlt_stop_phase2() argument
1026 struct qla_hw_data *ha = tgt->ha; in qlt_stop_phase2()
1030 if (tgt->tgt_stopped) { in qlt_stop_phase2()
1039 tgt->irq_cmd_count, tgt); in qlt_stop_phase2()
1043 while (tgt->irq_cmd_count != 0) { in qlt_stop_phase2()
1048 tgt->tgt_stop = 0; in qlt_stop_phase2()
1049 tgt->tgt_stopped = 1; in qlt_stop_phase2()
1054 tgt); in qlt_stop_phase2()
1059 static void qlt_release(struct qla_tgt *tgt) in qlt_release() argument
1061 scsi_qla_host_t *vha = tgt->vha; in qlt_release()
1063 if ((vha->vha_tgt.qla_tgt != NULL) && !tgt->tgt_stopped) in qlt_release()
1064 qlt_stop_phase2(tgt); in qlt_release()
1069 "Release of tgt %p finished\n", tgt); in qlt_release()
1071 kfree(tgt); in qlt_release()
1075 static int qlt_sched_sess_work(struct qla_tgt *tgt, int type, in qlt_sched_sess_work() argument
1083 ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xf050, in qlt_sched_sess_work()
1089 ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xf00e, in qlt_sched_sess_work()
1092 type, prm, param, param_size, tgt); in qlt_sched_sess_work()
1097 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_sched_sess_work()
1098 list_add_tail(&prm->sess_works_list_entry, &tgt->sess_works_list); in qlt_sched_sess_work()
1099 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_sched_sess_work()
1101 schedule_work(&tgt->sess_work); in qlt_sched_sess_work()
1414 rc = ha->tgt.tgt_ops->handle_tmr(mcmd, lun, TMR_ABORT_TASK, in __qlt_24xx_handle_abts()
1465 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_24xx_handle_abts()
1572 ha->tgt.tgt_ops->free_mcmd(mcmd); in qlt_xmit_tm_rsp()
1596 ha->tgt.tgt_ops->free_mcmd(mcmd); in qlt_xmit_tm_rsp()
1609 prm->seg_cnt = pci_map_sg(prm->tgt->ha->pdev, cmd->sg, in qlt_pci_map_calc_cnt()
1621 if (prm->seg_cnt > prm->tgt->datasegs_per_cmd) in qlt_pci_map_calc_cnt()
1623 prm->tgt->datasegs_per_cmd, in qlt_pci_map_calc_cnt()
1624 prm->tgt->datasegs_per_cont); in qlt_pci_map_calc_cnt()
1636 prm->prot_seg_cnt = pci_map_sg(prm->tgt->ha->pdev, in qlt_pci_map_calc_cnt()
1733 h = ha->tgt.current_handle; in qlt_make_handle()
1739 if (h == ha->tgt.current_handle) { in qlt_make_handle()
1748 (ha->tgt.cmds[h-1] != NULL)); in qlt_make_handle()
1751 ha->tgt.current_handle = h; in qlt_make_handle()
1783 ha->tgt.cmds[h-1] = prm->cmd; in qlt_24xx_build_ctio_pkt()
1809 int enable_64bit_addressing = prm->tgt->tgt_enable_64bit_addr; in qlt_load_cont_data_segments()
1841 cnt < prm->tgt->datasegs_per_cont && prm->seg_cnt; in qlt_load_cont_data_segments()
1868 int enable_64bit_addressing = prm->tgt->tgt_enable_64bit_addr; in qlt_load_data_segments()
1891 (cnt < prm->tgt->datasegs_per_cmd) && prm->seg_cnt; in qlt_load_data_segments()
1920 struct qla_tgt *tgt = cmd->tgt; in qlt_pre_xmit_response() local
1921 struct scsi_qla_host *vha = tgt->vha; in qlt_pre_xmit_response()
1926 prm->tgt = tgt; in qlt_pre_xmit_response()
1984 if (ha->tgt.enable_class_2) in qlt_need_explicit_conf()
1990 return ha->tgt.enable_explicit_conf && in qlt_need_explicit_conf()
2089 if (qlt_need_explicit_conf(prm->tgt->ha, prm->cmd, 0)) { in qlt_24xx_init_ctio_to_isp()
2099 if (qlt_need_explicit_conf(prm->tgt->ha, prm->cmd, 1)) { in qlt_24xx_init_ctio_to_isp()
2129 "lost", prm->tgt->ha->vp_idx, in qlt_24xx_init_ctio_to_isp()
2361 ha->tgt.cmds[h-1] = prm->cmd; in qlt_build_ctio_crc2_pkt()
2633 struct qla_tgt *tgt = cmd->tgt; in qlt_rdy_to_xfer() local
2640 prm.tgt = tgt; in qlt_rdy_to_xfer()
3016 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_send_term_exchange()
3030 vha->hw->tgt.leak_exchg_thresh_hold = in qlt_init_term_exchange()
3034 if (!list_empty(&vha->hw->tgt.q_full_list)) { in qlt_init_term_exchange()
3036 list_splice_init(&vha->hw->tgt.q_full_list, &free_list); in qlt_init_term_exchange()
3044 vha->hw->tgt.num_qfull_cmds_alloc--; in qlt_init_term_exchange()
3047 vha->hw->tgt.num_qfull_cmds_dropped = 0; in qlt_init_term_exchange()
3054 total_leaked = vha->hw->tgt.num_qfull_cmds_dropped; in qlt_chk_exch_leak_thresh_hold()
3056 if (vha->hw->tgt.leak_exchg_thresh_hold && in qlt_chk_exch_leak_thresh_hold()
3057 (total_leaked > vha->hw->tgt.leak_exchg_thresh_hold)) { in qlt_chk_exch_leak_thresh_hold()
3074 struct qla_tgt *tgt = cmd->tgt; in qlt_abort_cmd() local
3075 struct scsi_qla_host *vha = tgt->vha; in qlt_abort_cmd()
3123 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_prepare_srr_ctio() local
3126 tgt->ctio_srr_id++; in qlt_prepare_srr_ctio()
3143 spin_lock(&tgt->srr_lock); in qlt_prepare_srr_ctio()
3144 sc->srr_id = tgt->ctio_srr_id; in qlt_prepare_srr_ctio()
3146 &tgt->srr_ctio_list); in qlt_prepare_srr_ctio()
3149 if (tgt->imm_srr_id == tgt->ctio_srr_id) { in qlt_prepare_srr_ctio()
3151 list_for_each_entry(imm, &tgt->srr_imm_list, in qlt_prepare_srr_ctio()
3161 schedule_work(&tgt->srr_work); in qlt_prepare_srr_ctio()
3168 tgt->ctio_srr_id, sc); in qlt_prepare_srr_ctio()
3170 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_ctio()
3176 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_ctio()
3183 spin_lock(&tgt->srr_lock); in qlt_prepare_srr_ctio()
3184 list_for_each_entry_safe(imm, ti, &tgt->srr_imm_list, in qlt_prepare_srr_ctio()
3186 if (imm->srr_id == tgt->ctio_srr_id) { in qlt_prepare_srr_ctio()
3194 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_ctio()
3230 if (ha->tgt.cmds[handle] != NULL) { in qlt_get_cmd()
3231 struct qla_tgt_cmd *cmd = ha->tgt.cmds[handle]; in qlt_get_cmd()
3232 ha->tgt.cmds[handle] = NULL; in qlt_get_cmd()
3301 ha->tgt.tgt_ops->handle_data(cmd); in qlt_abort_cmd_on_host_reset()
3314 ha->tgt.tgt_ops->free_cmd(cmd); in qlt_abort_cmd_on_host_reset()
3324 struct qla_tgt *tgt = base_vha->vha_tgt.qla_tgt; in qlt_host_reset_handler() local
3327 if (!base_vha->hw->tgt.tgt_ops) in qlt_host_reset_handler()
3330 if (!tgt || qla_ini_mode_enabled(base_vha)) { in qlt_host_reset_handler()
3437 ha->tgt.tgt_ops->handle_dif_err(cmd); in qlt_do_ctio_completion()
3480 ha->tgt.tgt_ops->handle_data(cmd); in qlt_do_ctio_completion()
3499 ha->tgt.tgt_ops->free_cmd(cmd); in qlt_do_ctio_completion()
3543 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in __qlt_do_work() local
3553 if (tgt->tgt_stop) in __qlt_do_work()
3585 ret = ha->tgt.tgt_ops->handle_cmd(vha, cmd, cdb, data_length, in __qlt_do_work()
3593 ha->tgt.tgt_ops->put_sess(sess); in __qlt_do_work()
3609 ha->tgt.tgt_ops->put_sess(sess); in __qlt_do_work()
3643 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_get_tag()
3711 ha->tgt.tgt_ops->put_sess(sess); in qlt_create_sess_from_atio()
3737 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_handle_cmd_for_atio() local
3741 if (unlikely(tgt->tgt_stop)) { in qlt_handle_cmd_for_atio()
3743 "New command while device %p is shutting down\n", tgt); in qlt_handle_cmd_for_atio()
3747 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, atio->u.isp24.fcp_hdr.s_id); in qlt_handle_cmd_for_atio()
3784 ha->tgt.tgt_ops->put_sess(sess); in qlt_handle_cmd_for_atio()
3899 res = ha->tgt.tgt_ops->handle_tmr(mcmd, lun, tmr_func, 0); in qlt_issue_task_mgmt()
3916 struct qla_tgt *tgt; in qlt_handle_task_mgmt() local
3921 tgt = vha->vha_tgt.qla_tgt; in qlt_handle_task_mgmt()
3925 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in qlt_handle_task_mgmt()
3933 return qlt_sched_sess_work(tgt, QLA_TGT_SESS_WORK_TM, iocb, in qlt_handle_task_mgmt()
3970 rc = ha->tgt.tgt_ops->handle_tmr(mcmd, unpacked_lun, TMR_ABORT_TASK, in __qlt_abort_task()
3993 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id); in qlt_abort_task()
4042 qlt_find_sess_invalidate_other(struct qla_tgt *tgt, uint64_t wwn, in qlt_find_sess_invalidate_other() argument
4048 list_for_each_entry(other_sess, &tgt->sess_list, sess_list_entry) { in qlt_find_sess_invalidate_other()
4061 ql_dbg(ql_dbg_tgt_tmr, tgt->vha, 0x1000c, in qlt_find_sess_invalidate_other()
4086 ql_dbg(ql_dbg_tgt_tmr, tgt->vha, 0x1000d, in qlt_find_sess_invalidate_other()
4137 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_handle_els() local
4169 sess = qlt_find_sess_invalidate_other(tgt, wwn, in qlt_24xx_handle_els()
4231 sess = qlt_find_sess_invalidate_other(tgt, wwn, port_id, in qlt_24xx_handle_els()
4286 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_handle_els() local
4287 if (tgt->link_reinit_iocb_pending) { in qlt_24xx_handle_els()
4288 qlt_send_notify_ack(vha, &tgt->link_reinit_iocb, in qlt_24xx_handle_els()
4290 tgt->link_reinit_iocb_pending = 0; in qlt_24xx_handle_els()
4588 struct qla_tgt *tgt = container_of(work, struct qla_tgt, srr_work); in qlt_handle_srr_work() local
4589 struct scsi_qla_host *vha = tgt->vha; in qlt_handle_srr_work()
4594 tgt); in qlt_handle_srr_work()
4597 spin_lock_irqsave(&tgt->srr_lock, flags); in qlt_handle_srr_work()
4598 list_for_each_entry(sctio, &tgt->srr_ctio_list, srr_list_entry) { in qlt_handle_srr_work()
4604 list_for_each_entry_safe(i, ti, &tgt->srr_imm_list, in qlt_handle_srr_work()
4614 qlt_reject_free_srr_imm(tgt->vha, i, 0); in qlt_handle_srr_work()
4632 spin_unlock_irqrestore(&tgt->srr_lock, flags); in qlt_handle_srr_work()
4662 spin_unlock_irqrestore(&tgt->srr_lock, flags); in qlt_handle_srr_work()
4670 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_prepare_srr_imm() local
4673 tgt->imm_srr_id++; in qlt_prepare_srr_imm()
4683 spin_lock(&tgt->srr_lock); in qlt_prepare_srr_imm()
4684 imm->srr_id = tgt->imm_srr_id; in qlt_prepare_srr_imm()
4686 &tgt->srr_imm_list); in qlt_prepare_srr_imm()
4690 if (tgt->imm_srr_id == tgt->ctio_srr_id) { in qlt_prepare_srr_imm()
4692 list_for_each_entry(sctio, &tgt->srr_ctio_list, in qlt_prepare_srr_imm()
4702 schedule_work(&tgt->srr_work); in qlt_prepare_srr_imm()
4708 "SRR %p\n", vha->vp_idx, tgt->ctio_srr_id, in qlt_prepare_srr_imm()
4714 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_imm()
4718 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_imm()
4727 spin_lock(&tgt->srr_lock); in qlt_prepare_srr_imm()
4728 list_for_each_entry_safe(sctio, ts, &tgt->srr_ctio_list, in qlt_prepare_srr_imm()
4730 if (sctio->srr_id == tgt->imm_srr_id) { in qlt_prepare_srr_imm()
4740 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_imm()
4780 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_handle_imm_notify() local
4786 if (tgt->link_reinit_iocb_pending) { in qlt_handle_imm_notify()
4787 qlt_send_notify_ack(vha, &tgt->link_reinit_iocb, in qlt_handle_imm_notify()
4790 memcpy(&tgt->link_reinit_iocb, iocb, sizeof(*iocb)); in qlt_handle_imm_notify()
4791 tgt->link_reinit_iocb_pending = 1; in qlt_handle_imm_notify()
4903 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in __qlt_send_busy()
4956 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_alloc_qfull_cmd() local
4963 if (unlikely(tgt->tgt_stop)) { in qlt_alloc_qfull_cmd()
4965 "New command while device %p is shutting down\n", tgt); in qlt_alloc_qfull_cmd()
4969 if ((vha->hw->tgt.num_qfull_cmds_alloc + 1) > MAX_QFULL_CMDS_ALLOC) { in qlt_alloc_qfull_cmd()
4970 vha->hw->tgt.num_qfull_cmds_dropped++; in qlt_alloc_qfull_cmd()
4971 if (vha->hw->tgt.num_qfull_cmds_dropped > in qlt_alloc_qfull_cmd()
4974 vha->hw->tgt.num_qfull_cmds_dropped; in qlt_alloc_qfull_cmd()
4979 vha->hw->tgt.num_qfull_cmds_dropped); in qlt_alloc_qfull_cmd()
4985 sess = ha->tgt.tgt_ops->find_sess_by_s_id in qlt_alloc_qfull_cmd()
5002 vha->hw->tgt.num_qfull_cmds_dropped++; in qlt_alloc_qfull_cmd()
5003 if (vha->hw->tgt.num_qfull_cmds_dropped > in qlt_alloc_qfull_cmd()
5006 vha->hw->tgt.num_qfull_cmds_dropped; in qlt_alloc_qfull_cmd()
5018 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_alloc_qfull_cmd()
5030 list_add_tail(&cmd->cmd_list, &vha->hw->tgt.q_full_list); in qlt_alloc_qfull_cmd()
5032 vha->hw->tgt.num_qfull_cmds_alloc++; in qlt_alloc_qfull_cmd()
5033 if (vha->hw->tgt.num_qfull_cmds_alloc > in qlt_alloc_qfull_cmd()
5036 vha->hw->tgt.num_qfull_cmds_alloc; in qlt_alloc_qfull_cmd()
5048 if (list_empty(&ha->tgt.q_full_list)) in qlt_free_qfull_cmds()
5055 if (list_empty(&ha->tgt.q_full_list)) { in qlt_free_qfull_cmds()
5060 list_for_each_entry_safe(cmd, tcmd, &ha->tgt.q_full_list, cmd_list) { in qlt_free_qfull_cmds()
5087 vha->hw->tgt.num_qfull_cmds_alloc--; in qlt_free_qfull_cmds()
5121 if (ha->tgt.num_pend_cmds < Q_FULL_THRESH_HOLD(ha)) in qlt_chk_qfull_thresh_hold()
5135 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_atio_pkt() local
5138 if (unlikely(tgt == NULL)) { in qlt_24xx_atio_pkt()
5148 tgt->irq_cmd_count++; in qlt_24xx_atio_pkt()
5167 tgt->irq_cmd_count--; in qlt_24xx_atio_pkt()
5182 if (tgt->tgt_stop) { in qlt_24xx_atio_pkt()
5220 tgt->irq_cmd_count--; in qlt_24xx_atio_pkt()
5228 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_response_pkt() local
5230 if (unlikely(tgt == NULL)) { in qlt_response_pkt()
5242 tgt->irq_cmd_count++; in qlt_response_pkt()
5270 tgt->irq_cmd_count--; in qlt_response_pkt()
5283 if (tgt->tgt_stop) { in qlt_response_pkt()
5326 if (tgt->notify_ack_expected > 0) { in qlt_response_pkt()
5332 tgt->notify_ack_expected--; in qlt_response_pkt()
5354 if (tgt->abts_resp_expected > 0) { in qlt_response_pkt()
5360 tgt->abts_resp_expected--; in qlt_response_pkt()
5404 tgt->irq_cmd_count--; in qlt_response_pkt()
5414 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_async_event() local
5417 if (!ha->tgt.tgt_ops) in qlt_async_event()
5420 if (unlikely(tgt == NULL)) { in qlt_async_event()
5434 tgt->irq_cmd_count++; in qlt_async_event()
5456 if (tgt->link_reinit_iocb_pending) { in qlt_async_event()
5457 qlt_send_notify_ack(vha, (void *)&tgt->link_reinit_iocb, in qlt_async_event()
5459 tgt->link_reinit_iocb_pending = 0; in qlt_async_event()
5496 tgt->irq_cmd_count--; in qlt_async_event()
5582 static void qlt_abort_work(struct qla_tgt *tgt, in qlt_abort_work() argument
5585 struct scsi_qla_host *vha = tgt->vha; in qlt_abort_work()
5595 if (tgt->tgt_stop) in qlt_abort_work()
5602 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in qlt_abort_work()
5624 if (tgt->tgt_stop) in qlt_abort_work()
5631 ha->tgt.tgt_ops->put_sess(sess); in qlt_abort_work()
5638 ha->tgt.tgt_ops->put_sess(sess); in qlt_abort_work()
5642 static void qlt_tmr_work(struct qla_tgt *tgt, in qlt_tmr_work() argument
5646 struct scsi_qla_host *vha = tgt->vha; in qlt_tmr_work()
5658 if (tgt->tgt_stop) in qlt_tmr_work()
5662 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_tmr_work()
5692 ha->tgt.tgt_ops->put_sess(sess); in qlt_tmr_work()
5699 ha->tgt.tgt_ops->put_sess(sess); in qlt_tmr_work()
5705 struct qla_tgt *tgt = container_of(work, struct qla_tgt, sess_work); in qlt_sess_work_fn() local
5706 struct scsi_qla_host *vha = tgt->vha; in qlt_sess_work_fn()
5709 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf000, "Sess work (tgt %p)", tgt); in qlt_sess_work_fn()
5711 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
5712 while (!list_empty(&tgt->sess_works_list)) { in qlt_sess_work_fn()
5714 tgt->sess_works_list.next, typeof(*prm), in qlt_sess_work_fn()
5723 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
5727 qlt_abort_work(tgt, prm); in qlt_sess_work_fn()
5730 qlt_tmr_work(tgt, prm); in qlt_sess_work_fn()
5737 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
5741 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
5747 struct qla_tgt *tgt; in qlt_add_target() local
5763 tgt = kzalloc(sizeof(struct qla_tgt), GFP_KERNEL); in qlt_add_target()
5764 if (!tgt) { in qlt_add_target()
5773 tgt->ha = ha; in qlt_add_target()
5774 tgt->vha = base_vha; in qlt_add_target()
5775 init_waitqueue_head(&tgt->waitQ); in qlt_add_target()
5776 INIT_LIST_HEAD(&tgt->sess_list); in qlt_add_target()
5777 INIT_LIST_HEAD(&tgt->del_sess_list); in qlt_add_target()
5778 INIT_DELAYED_WORK(&tgt->sess_del_work, in qlt_add_target()
5780 spin_lock_init(&tgt->sess_work_lock); in qlt_add_target()
5781 INIT_WORK(&tgt->sess_work, qlt_sess_work_fn); in qlt_add_target()
5782 INIT_LIST_HEAD(&tgt->sess_works_list); in qlt_add_target()
5783 spin_lock_init(&tgt->srr_lock); in qlt_add_target()
5784 INIT_LIST_HEAD(&tgt->srr_ctio_list); in qlt_add_target()
5785 INIT_LIST_HEAD(&tgt->srr_imm_list); in qlt_add_target()
5786 INIT_WORK(&tgt->srr_work, qlt_handle_srr_work); in qlt_add_target()
5787 atomic_set(&tgt->tgt_global_resets_count, 0); in qlt_add_target()
5789 base_vha->vha_tgt.qla_tgt = tgt; in qlt_add_target()
5794 tgt->tgt_enable_64bit_addr = 1; in qlt_add_target()
5796 tgt->sg_tablesize = QLA_TGT_MAX_SG_24XX(base_vha->req->length - 3); in qlt_add_target()
5797 tgt->datasegs_per_cmd = QLA_TGT_DATASEGS_PER_CMD_24XX; in qlt_add_target()
5798 tgt->datasegs_per_cont = QLA_TGT_DATASEGS_PER_CONT_24XX; in qlt_add_target()
5804 list_add_tail(&tgt->tgt_list_entry, &qla_tgt_glist); in qlt_add_target()
5868 struct qla_tgt *tgt; in qlt_lport_register() local
5877 list_for_each_entry(tgt, &qla_tgt_glist, tgt_list_entry) { in qlt_lport_register()
5878 vha = tgt->vha; in qlt_lport_register()
5895 if (tgt->tgt_stop) { in qlt_lport_register()
5941 ha->tgt.tgt_ops = NULL; in qlt_lport_deregister()
5966 if (ha->tgt.ini_mode_force_reverse) in qlt_set_mode()
5989 if (ha->tgt.ini_mode_force_reverse) in qlt_clear_mode()
6002 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_enable_vha() local
6006 if (!tgt) { in qlt_enable_vha()
6015 tgt->tgt_stopped = 0; in qlt_enable_vha()
6038 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_disable_vha() local
6041 if (!tgt) { in qlt_disable_vha()
6082 ha->tgt.atio_q_length = ATIO_ENTRY_CNT_24XX; in qlt_vport_create()
6117 struct atio_from_isp *pkt = (struct atio_from_isp *)ha->tgt.atio_ring; in qlt_init_atio_q_entries()
6122 for (cnt = 0; cnt < ha->tgt.atio_q_length; cnt++) { in qlt_init_atio_q_entries()
6143 while (ha->tgt.atio_ring_ptr->signature != ATIO_PROCESSED) { in qlt_24xx_process_atio_queue()
6144 pkt = (struct atio_from_isp *)ha->tgt.atio_ring_ptr; in qlt_24xx_process_atio_queue()
6150 ha->tgt.atio_ring_index++; in qlt_24xx_process_atio_queue()
6151 if (ha->tgt.atio_ring_index == ha->tgt.atio_q_length) { in qlt_24xx_process_atio_queue()
6152 ha->tgt.atio_ring_index = 0; in qlt_24xx_process_atio_queue()
6153 ha->tgt.atio_ring_ptr = ha->tgt.atio_ring; in qlt_24xx_process_atio_queue()
6155 ha->tgt.atio_ring_ptr++; in qlt_24xx_process_atio_queue()
6158 pkt = (struct atio_from_isp *)ha->tgt.atio_ring_ptr; in qlt_24xx_process_atio_queue()
6164 WRT_REG_DWORD(ISP_ATIO_Q_OUT(vha), ha->tgt.atio_ring_index); in qlt_24xx_process_atio_queue()
6196 if (!ha->tgt.saved_set) { in qlt_24xx_config_nvram_stage1()
6198 ha->tgt.saved_exchange_count = nv->exchange_count; in qlt_24xx_config_nvram_stage1()
6199 ha->tgt.saved_firmware_options_1 = in qlt_24xx_config_nvram_stage1()
6201 ha->tgt.saved_firmware_options_2 = in qlt_24xx_config_nvram_stage1()
6203 ha->tgt.saved_firmware_options_3 = in qlt_24xx_config_nvram_stage1()
6205 ha->tgt.saved_set = 1; in qlt_24xx_config_nvram_stage1()
6233 if (ha->tgt.saved_set) { in qlt_24xx_config_nvram_stage1()
6234 nv->exchange_count = ha->tgt.saved_exchange_count; in qlt_24xx_config_nvram_stage1()
6236 ha->tgt.saved_firmware_options_1; in qlt_24xx_config_nvram_stage1()
6238 ha->tgt.saved_firmware_options_2; in qlt_24xx_config_nvram_stage1()
6240 ha->tgt.saved_firmware_options_3; in qlt_24xx_config_nvram_stage1()
6248 if (ha->tgt.enable_class_2) { in qlt_24xx_config_nvram_stage1()
6268 if (ha->tgt.node_name_set) { in qlt_24xx_config_nvram_stage2()
6269 memcpy(icb->node_name, ha->tgt.tgt_node_name, WWN_SIZE); in qlt_24xx_config_nvram_stage2()
6283 if (!ha->tgt.saved_set) { in qlt_81xx_config_nvram_stage1()
6285 ha->tgt.saved_exchange_count = nv->exchange_count; in qlt_81xx_config_nvram_stage1()
6286 ha->tgt.saved_firmware_options_1 = in qlt_81xx_config_nvram_stage1()
6288 ha->tgt.saved_firmware_options_2 = in qlt_81xx_config_nvram_stage1()
6290 ha->tgt.saved_firmware_options_3 = in qlt_81xx_config_nvram_stage1()
6292 ha->tgt.saved_set = 1; in qlt_81xx_config_nvram_stage1()
6320 if (ha->tgt.saved_set) { in qlt_81xx_config_nvram_stage1()
6321 nv->exchange_count = ha->tgt.saved_exchange_count; in qlt_81xx_config_nvram_stage1()
6323 ha->tgt.saved_firmware_options_1; in qlt_81xx_config_nvram_stage1()
6325 ha->tgt.saved_firmware_options_2; in qlt_81xx_config_nvram_stage1()
6327 ha->tgt.saved_firmware_options_3; in qlt_81xx_config_nvram_stage1()
6335 if (ha->tgt.enable_class_2) { in qlt_81xx_config_nvram_stage1()
6358 if (ha->tgt.node_name_set) { in qlt_81xx_config_nvram_stage2()
6359 memcpy(icb->node_name, ha->tgt.tgt_node_name, WWN_SIZE); in qlt_81xx_config_nvram_stage2()
6447 ha->tgt.tgt_vp_map = kzalloc(sizeof(struct qla_tgt_vp_map) * in qlt_mem_alloc()
6449 if (!ha->tgt.tgt_vp_map) in qlt_mem_alloc()
6452 ha->tgt.atio_ring = dma_alloc_coherent(&ha->pdev->dev, in qlt_mem_alloc()
6453 (ha->tgt.atio_q_length + 1) * sizeof(struct atio_from_isp), in qlt_mem_alloc()
6454 &ha->tgt.atio_dma, GFP_KERNEL); in qlt_mem_alloc()
6455 if (!ha->tgt.atio_ring) { in qlt_mem_alloc()
6456 kfree(ha->tgt.tgt_vp_map); in qlt_mem_alloc()
6468 if (ha->tgt.atio_ring) { in qlt_mem_free()
6469 dma_free_coherent(&ha->pdev->dev, (ha->tgt.atio_q_length + 1) * in qlt_mem_free()
6470 sizeof(struct atio_from_isp), ha->tgt.atio_ring, in qlt_mem_free()
6471 ha->tgt.atio_dma); in qlt_mem_free()
6473 kfree(ha->tgt.tgt_vp_map); in qlt_mem_free()
6485 vha->hw->tgt.tgt_vp_map[vha->vp_idx].vha = vha; in qlt_update_vp_map()
6488 vha->hw->tgt.tgt_vp_map[vha->d_id.b.al_pa].idx = vha->vp_idx; in qlt_update_vp_map()
6491 vha->hw->tgt.tgt_vp_map[vha->vp_idx].vha = NULL; in qlt_update_vp_map()
6494 vha->hw->tgt.tgt_vp_map[vha->d_id.b.al_pa].idx = 0; in qlt_update_vp_map()