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()
1415 rc = ha->tgt.tgt_ops->handle_tmr(mcmd, lun, TMR_ABORT_TASK, in __qlt_24xx_handle_abts()
1466 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_24xx_handle_abts()
1574 ha->tgt.tgt_ops->free_mcmd(mcmd); in qlt_xmit_tm_rsp()
1598 ha->tgt.tgt_ops->free_mcmd(mcmd); in qlt_xmit_tm_rsp()
1611 prm->seg_cnt = pci_map_sg(prm->tgt->ha->pdev, cmd->sg, in qlt_pci_map_calc_cnt()
1623 if (prm->seg_cnt > prm->tgt->datasegs_per_cmd) in qlt_pci_map_calc_cnt()
1625 prm->tgt->datasegs_per_cmd, in qlt_pci_map_calc_cnt()
1626 prm->tgt->datasegs_per_cont); in qlt_pci_map_calc_cnt()
1638 prm->prot_seg_cnt = pci_map_sg(prm->tgt->ha->pdev, in qlt_pci_map_calc_cnt()
1735 h = ha->tgt.current_handle; in qlt_make_handle()
1741 if (h == ha->tgt.current_handle) { in qlt_make_handle()
1750 (ha->tgt.cmds[h-1] != NULL)); in qlt_make_handle()
1753 ha->tgt.current_handle = h; in qlt_make_handle()
1785 ha->tgt.cmds[h-1] = prm->cmd; in qlt_24xx_build_ctio_pkt()
1811 int enable_64bit_addressing = prm->tgt->tgt_enable_64bit_addr; in qlt_load_cont_data_segments()
1843 cnt < prm->tgt->datasegs_per_cont && prm->seg_cnt; in qlt_load_cont_data_segments()
1870 int enable_64bit_addressing = prm->tgt->tgt_enable_64bit_addr; in qlt_load_data_segments()
1893 (cnt < prm->tgt->datasegs_per_cmd) && prm->seg_cnt; in qlt_load_data_segments()
1922 struct qla_tgt *tgt = cmd->tgt; in qlt_pre_xmit_response() local
1923 struct scsi_qla_host *vha = tgt->vha; in qlt_pre_xmit_response()
1928 prm->tgt = tgt; in qlt_pre_xmit_response()
1987 if (ha->tgt.enable_class_2) in qlt_need_explicit_conf()
1993 return ha->tgt.enable_explicit_conf && in qlt_need_explicit_conf()
2093 if (qlt_need_explicit_conf(prm->tgt->ha, prm->cmd, 0)) { in qlt_24xx_init_ctio_to_isp()
2103 if (qlt_need_explicit_conf(prm->tgt->ha, prm->cmd, 1)) { in qlt_24xx_init_ctio_to_isp()
2133 "lost", prm->tgt->ha->vp_idx, in qlt_24xx_init_ctio_to_isp()
2367 ha->tgt.cmds[h-1] = prm->cmd; in qlt_build_ctio_crc2_pkt()
2639 struct qla_tgt *tgt = cmd->tgt; in qlt_rdy_to_xfer() local
2646 prm.tgt = tgt; in qlt_rdy_to_xfer()
3023 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_send_term_exchange()
3037 vha->hw->tgt.leak_exchg_thresh_hold = in qlt_init_term_exchange()
3041 if (!list_empty(&vha->hw->tgt.q_full_list)) { in qlt_init_term_exchange()
3043 list_splice_init(&vha->hw->tgt.q_full_list, &free_list); in qlt_init_term_exchange()
3051 vha->hw->tgt.num_qfull_cmds_alloc--; in qlt_init_term_exchange()
3054 vha->hw->tgt.num_qfull_cmds_dropped = 0; in qlt_init_term_exchange()
3061 total_leaked = vha->hw->tgt.num_qfull_cmds_dropped; in qlt_chk_exch_leak_thresh_hold()
3063 if (vha->hw->tgt.leak_exchg_thresh_hold && in qlt_chk_exch_leak_thresh_hold()
3064 (total_leaked > vha->hw->tgt.leak_exchg_thresh_hold)) { in qlt_chk_exch_leak_thresh_hold()
3081 struct qla_tgt *tgt = cmd->tgt; in qlt_abort_cmd() local
3082 struct scsi_qla_host *vha = tgt->vha; in qlt_abort_cmd()
3130 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_prepare_srr_ctio() local
3133 tgt->ctio_srr_id++; in qlt_prepare_srr_ctio()
3150 spin_lock(&tgt->srr_lock); in qlt_prepare_srr_ctio()
3151 sc->srr_id = tgt->ctio_srr_id; in qlt_prepare_srr_ctio()
3153 &tgt->srr_ctio_list); in qlt_prepare_srr_ctio()
3156 if (tgt->imm_srr_id == tgt->ctio_srr_id) { in qlt_prepare_srr_ctio()
3158 list_for_each_entry(imm, &tgt->srr_imm_list, in qlt_prepare_srr_ctio()
3168 schedule_work(&tgt->srr_work); in qlt_prepare_srr_ctio()
3175 tgt->ctio_srr_id, sc); in qlt_prepare_srr_ctio()
3177 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_ctio()
3183 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_ctio()
3190 spin_lock(&tgt->srr_lock); in qlt_prepare_srr_ctio()
3191 list_for_each_entry_safe(imm, ti, &tgt->srr_imm_list, in qlt_prepare_srr_ctio()
3193 if (imm->srr_id == tgt->ctio_srr_id) { in qlt_prepare_srr_ctio()
3201 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_ctio()
3237 if (ha->tgt.cmds[handle] != NULL) { in qlt_get_cmd()
3238 struct qla_tgt_cmd *cmd = ha->tgt.cmds[handle]; in qlt_get_cmd()
3239 ha->tgt.cmds[handle] = NULL; in qlt_get_cmd()
3308 ha->tgt.tgt_ops->handle_data(cmd); in qlt_abort_cmd_on_host_reset()
3321 ha->tgt.tgt_ops->free_cmd(cmd); in qlt_abort_cmd_on_host_reset()
3331 struct qla_tgt *tgt = base_vha->vha_tgt.qla_tgt; in qlt_host_reset_handler() local
3334 if (!base_vha->hw->tgt.tgt_ops) in qlt_host_reset_handler()
3337 if (!tgt || qla_ini_mode_enabled(base_vha)) { in qlt_host_reset_handler()
3446 ha->tgt.tgt_ops->handle_dif_err(cmd); in qlt_do_ctio_completion()
3493 ha->tgt.tgt_ops->handle_data(cmd); in qlt_do_ctio_completion()
3511 ha->tgt.tgt_ops->free_cmd(cmd); in qlt_do_ctio_completion()
3555 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in __qlt_do_work() local
3565 if (tgt->tgt_stop) in __qlt_do_work()
3597 ret = ha->tgt.tgt_ops->handle_cmd(vha, cmd, cdb, data_length, in __qlt_do_work()
3605 ha->tgt.tgt_ops->put_sess(sess); in __qlt_do_work()
3621 ha->tgt.tgt_ops->put_sess(sess); in __qlt_do_work()
3655 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_get_tag()
3723 ha->tgt.tgt_ops->put_sess(sess); in qlt_create_sess_from_atio()
3749 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_handle_cmd_for_atio() local
3753 if (unlikely(tgt->tgt_stop)) { in qlt_handle_cmd_for_atio()
3755 "New command while device %p is shutting down\n", tgt); in qlt_handle_cmd_for_atio()
3759 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, atio->u.isp24.fcp_hdr.s_id); in qlt_handle_cmd_for_atio()
3796 ha->tgt.tgt_ops->put_sess(sess); in qlt_handle_cmd_for_atio()
3911 res = ha->tgt.tgt_ops->handle_tmr(mcmd, lun, tmr_func, 0); in qlt_issue_task_mgmt()
3928 struct qla_tgt *tgt; in qlt_handle_task_mgmt() local
3933 tgt = vha->vha_tgt.qla_tgt; in qlt_handle_task_mgmt()
3938 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in qlt_handle_task_mgmt()
3946 return qlt_sched_sess_work(tgt, QLA_TGT_SESS_WORK_TM, iocb, in qlt_handle_task_mgmt()
3983 rc = ha->tgt.tgt_ops->handle_tmr(mcmd, unpacked_lun, TMR_ABORT_TASK, in __qlt_abort_task()
4006 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id); in qlt_abort_task()
4055 qlt_find_sess_invalidate_other(struct qla_tgt *tgt, uint64_t wwn, in qlt_find_sess_invalidate_other() argument
4061 list_for_each_entry(other_sess, &tgt->sess_list, sess_list_entry) { in qlt_find_sess_invalidate_other()
4074 ql_dbg(ql_dbg_tgt_tmr, tgt->vha, 0x1000c, in qlt_find_sess_invalidate_other()
4099 ql_dbg(ql_dbg_tgt_tmr, tgt->vha, 0x1000d, in qlt_find_sess_invalidate_other()
4150 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_handle_els() local
4182 sess = qlt_find_sess_invalidate_other(tgt, wwn, in qlt_24xx_handle_els()
4244 sess = qlt_find_sess_invalidate_other(tgt, wwn, port_id, in qlt_24xx_handle_els()
4299 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_handle_els() local
4300 if (tgt->link_reinit_iocb_pending) { in qlt_24xx_handle_els()
4301 qlt_send_notify_ack(vha, &tgt->link_reinit_iocb, in qlt_24xx_handle_els()
4303 tgt->link_reinit_iocb_pending = 0; in qlt_24xx_handle_els()
4598 struct qla_tgt *tgt = container_of(work, struct qla_tgt, srr_work); in qlt_handle_srr_work() local
4599 struct scsi_qla_host *vha = tgt->vha; in qlt_handle_srr_work()
4604 tgt); in qlt_handle_srr_work()
4607 spin_lock_irqsave(&tgt->srr_lock, flags); in qlt_handle_srr_work()
4608 list_for_each_entry(sctio, &tgt->srr_ctio_list, srr_list_entry) { in qlt_handle_srr_work()
4614 list_for_each_entry_safe(i, ti, &tgt->srr_imm_list, in qlt_handle_srr_work()
4624 qlt_reject_free_srr_imm(tgt->vha, i, 0); in qlt_handle_srr_work()
4642 spin_unlock_irqrestore(&tgt->srr_lock, flags); in qlt_handle_srr_work()
4673 spin_unlock_irqrestore(&tgt->srr_lock, flags); in qlt_handle_srr_work()
4681 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_prepare_srr_imm() local
4684 tgt->imm_srr_id++; in qlt_prepare_srr_imm()
4694 spin_lock(&tgt->srr_lock); in qlt_prepare_srr_imm()
4695 imm->srr_id = tgt->imm_srr_id; in qlt_prepare_srr_imm()
4697 &tgt->srr_imm_list); in qlt_prepare_srr_imm()
4701 if (tgt->imm_srr_id == tgt->ctio_srr_id) { in qlt_prepare_srr_imm()
4703 list_for_each_entry(sctio, &tgt->srr_ctio_list, in qlt_prepare_srr_imm()
4713 schedule_work(&tgt->srr_work); in qlt_prepare_srr_imm()
4719 "SRR %p\n", vha->vp_idx, tgt->ctio_srr_id, in qlt_prepare_srr_imm()
4725 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_imm()
4729 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_imm()
4738 spin_lock(&tgt->srr_lock); in qlt_prepare_srr_imm()
4739 list_for_each_entry_safe(sctio, ts, &tgt->srr_ctio_list, in qlt_prepare_srr_imm()
4741 if (sctio->srr_id == tgt->imm_srr_id) { in qlt_prepare_srr_imm()
4751 spin_unlock(&tgt->srr_lock); in qlt_prepare_srr_imm()
4791 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_handle_imm_notify() local
4797 if (tgt->link_reinit_iocb_pending) { in qlt_handle_imm_notify()
4798 qlt_send_notify_ack(vha, &tgt->link_reinit_iocb, in qlt_handle_imm_notify()
4801 memcpy(&tgt->link_reinit_iocb, iocb, sizeof(*iocb)); in qlt_handle_imm_notify()
4802 tgt->link_reinit_iocb_pending = 1; in qlt_handle_imm_notify()
4914 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in __qlt_send_busy()
4967 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_alloc_qfull_cmd() local
4974 if (unlikely(tgt->tgt_stop)) { in qlt_alloc_qfull_cmd()
4976 "New command while device %p is shutting down\n", tgt); in qlt_alloc_qfull_cmd()
4980 if ((vha->hw->tgt.num_qfull_cmds_alloc + 1) > MAX_QFULL_CMDS_ALLOC) { in qlt_alloc_qfull_cmd()
4981 vha->hw->tgt.num_qfull_cmds_dropped++; in qlt_alloc_qfull_cmd()
4982 if (vha->hw->tgt.num_qfull_cmds_dropped > in qlt_alloc_qfull_cmd()
4985 vha->hw->tgt.num_qfull_cmds_dropped; in qlt_alloc_qfull_cmd()
4990 vha->hw->tgt.num_qfull_cmds_dropped); in qlt_alloc_qfull_cmd()
4996 sess = ha->tgt.tgt_ops->find_sess_by_s_id in qlt_alloc_qfull_cmd()
5013 vha->hw->tgt.num_qfull_cmds_dropped++; in qlt_alloc_qfull_cmd()
5014 if (vha->hw->tgt.num_qfull_cmds_dropped > in qlt_alloc_qfull_cmd()
5017 vha->hw->tgt.num_qfull_cmds_dropped; in qlt_alloc_qfull_cmd()
5029 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_alloc_qfull_cmd()
5041 list_add_tail(&cmd->cmd_list, &vha->hw->tgt.q_full_list); in qlt_alloc_qfull_cmd()
5043 vha->hw->tgt.num_qfull_cmds_alloc++; in qlt_alloc_qfull_cmd()
5044 if (vha->hw->tgt.num_qfull_cmds_alloc > in qlt_alloc_qfull_cmd()
5047 vha->hw->tgt.num_qfull_cmds_alloc; in qlt_alloc_qfull_cmd()
5059 if (list_empty(&ha->tgt.q_full_list)) in qlt_free_qfull_cmds()
5066 if (list_empty(&ha->tgt.q_full_list)) { in qlt_free_qfull_cmds()
5071 list_for_each_entry_safe(cmd, tcmd, &ha->tgt.q_full_list, cmd_list) { in qlt_free_qfull_cmds()
5098 vha->hw->tgt.num_qfull_cmds_alloc--; in qlt_free_qfull_cmds()
5132 if (ha->tgt.num_pend_cmds < Q_FULL_THRESH_HOLD(ha)) in qlt_chk_qfull_thresh_hold()
5146 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_atio_pkt() local
5149 if (unlikely(tgt == NULL)) { in qlt_24xx_atio_pkt()
5159 tgt->irq_cmd_count++; in qlt_24xx_atio_pkt()
5178 tgt->irq_cmd_count--; in qlt_24xx_atio_pkt()
5193 if (tgt->tgt_stop) { in qlt_24xx_atio_pkt()
5231 tgt->irq_cmd_count--; in qlt_24xx_atio_pkt()
5239 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_response_pkt() local
5241 if (unlikely(tgt == NULL)) { in qlt_response_pkt()
5253 tgt->irq_cmd_count++; in qlt_response_pkt()
5281 tgt->irq_cmd_count--; in qlt_response_pkt()
5294 if (tgt->tgt_stop) { in qlt_response_pkt()
5337 if (tgt->notify_ack_expected > 0) { in qlt_response_pkt()
5343 tgt->notify_ack_expected--; in qlt_response_pkt()
5365 if (tgt->abts_resp_expected > 0) { in qlt_response_pkt()
5371 tgt->abts_resp_expected--; in qlt_response_pkt()
5415 tgt->irq_cmd_count--; in qlt_response_pkt()
5425 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_async_event() local
5428 if (!ha->tgt.tgt_ops) in qlt_async_event()
5431 if (unlikely(tgt == NULL)) { in qlt_async_event()
5445 tgt->irq_cmd_count++; in qlt_async_event()
5467 if (tgt->link_reinit_iocb_pending) { in qlt_async_event()
5468 qlt_send_notify_ack(vha, (void *)&tgt->link_reinit_iocb, in qlt_async_event()
5470 tgt->link_reinit_iocb_pending = 0; in qlt_async_event()
5507 tgt->irq_cmd_count--; in qlt_async_event()
5593 static void qlt_abort_work(struct qla_tgt *tgt, in qlt_abort_work() argument
5596 struct scsi_qla_host *vha = tgt->vha; in qlt_abort_work()
5606 if (tgt->tgt_stop) in qlt_abort_work()
5613 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in qlt_abort_work()
5635 if (tgt->tgt_stop) in qlt_abort_work()
5642 ha->tgt.tgt_ops->put_sess(sess); in qlt_abort_work()
5649 ha->tgt.tgt_ops->put_sess(sess); in qlt_abort_work()
5653 static void qlt_tmr_work(struct qla_tgt *tgt, in qlt_tmr_work() argument
5657 struct scsi_qla_host *vha = tgt->vha; in qlt_tmr_work()
5669 if (tgt->tgt_stop) in qlt_tmr_work()
5673 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_tmr_work()
5704 ha->tgt.tgt_ops->put_sess(sess); in qlt_tmr_work()
5711 ha->tgt.tgt_ops->put_sess(sess); in qlt_tmr_work()
5717 struct qla_tgt *tgt = container_of(work, struct qla_tgt, sess_work); in qlt_sess_work_fn() local
5718 struct scsi_qla_host *vha = tgt->vha; in qlt_sess_work_fn()
5721 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf000, "Sess work (tgt %p)", tgt); in qlt_sess_work_fn()
5723 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
5724 while (!list_empty(&tgt->sess_works_list)) { in qlt_sess_work_fn()
5726 tgt->sess_works_list.next, typeof(*prm), in qlt_sess_work_fn()
5735 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
5739 qlt_abort_work(tgt, prm); in qlt_sess_work_fn()
5742 qlt_tmr_work(tgt, prm); in qlt_sess_work_fn()
5749 spin_lock_irqsave(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
5753 spin_unlock_irqrestore(&tgt->sess_work_lock, flags); in qlt_sess_work_fn()
5759 struct qla_tgt *tgt; in qlt_add_target() local
5775 tgt = kzalloc(sizeof(struct qla_tgt), GFP_KERNEL); in qlt_add_target()
5776 if (!tgt) { in qlt_add_target()
5785 tgt->ha = ha; in qlt_add_target()
5786 tgt->vha = base_vha; in qlt_add_target()
5787 init_waitqueue_head(&tgt->waitQ); in qlt_add_target()
5788 INIT_LIST_HEAD(&tgt->sess_list); in qlt_add_target()
5789 INIT_LIST_HEAD(&tgt->del_sess_list); in qlt_add_target()
5790 INIT_DELAYED_WORK(&tgt->sess_del_work, in qlt_add_target()
5792 spin_lock_init(&tgt->sess_work_lock); in qlt_add_target()
5793 INIT_WORK(&tgt->sess_work, qlt_sess_work_fn); in qlt_add_target()
5794 INIT_LIST_HEAD(&tgt->sess_works_list); in qlt_add_target()
5795 spin_lock_init(&tgt->srr_lock); in qlt_add_target()
5796 INIT_LIST_HEAD(&tgt->srr_ctio_list); in qlt_add_target()
5797 INIT_LIST_HEAD(&tgt->srr_imm_list); in qlt_add_target()
5798 INIT_WORK(&tgt->srr_work, qlt_handle_srr_work); in qlt_add_target()
5799 atomic_set(&tgt->tgt_global_resets_count, 0); in qlt_add_target()
5801 base_vha->vha_tgt.qla_tgt = tgt; in qlt_add_target()
5806 tgt->tgt_enable_64bit_addr = 1; in qlt_add_target()
5808 tgt->sg_tablesize = QLA_TGT_MAX_SG_24XX(base_vha->req->length - 3); in qlt_add_target()
5809 tgt->datasegs_per_cmd = QLA_TGT_DATASEGS_PER_CMD_24XX; in qlt_add_target()
5810 tgt->datasegs_per_cont = QLA_TGT_DATASEGS_PER_CONT_24XX; in qlt_add_target()
5816 list_add_tail(&tgt->tgt_list_entry, &qla_tgt_glist); in qlt_add_target()
5880 struct qla_tgt *tgt; in qlt_lport_register() local
5889 list_for_each_entry(tgt, &qla_tgt_glist, tgt_list_entry) { in qlt_lport_register()
5890 vha = tgt->vha; in qlt_lport_register()
5907 if (tgt->tgt_stop) { in qlt_lport_register()
5953 ha->tgt.tgt_ops = NULL; in qlt_lport_deregister()
5978 if (ha->tgt.ini_mode_force_reverse) in qlt_set_mode()
6001 if (ha->tgt.ini_mode_force_reverse) in qlt_clear_mode()
6014 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_enable_vha() local
6018 if (!tgt) { in qlt_enable_vha()
6027 tgt->tgt_stopped = 0; in qlt_enable_vha()
6050 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_disable_vha() local
6053 if (!tgt) { in qlt_disable_vha()
6094 ha->tgt.atio_q_length = ATIO_ENTRY_CNT_24XX; in qlt_vport_create()
6129 struct atio_from_isp *pkt = (struct atio_from_isp *)ha->tgt.atio_ring; in qlt_init_atio_q_entries()
6134 for (cnt = 0; cnt < ha->tgt.atio_q_length; cnt++) { in qlt_init_atio_q_entries()
6155 while (ha->tgt.atio_ring_ptr->signature != ATIO_PROCESSED) { in qlt_24xx_process_atio_queue()
6156 pkt = (struct atio_from_isp *)ha->tgt.atio_ring_ptr; in qlt_24xx_process_atio_queue()
6162 ha->tgt.atio_ring_index++; in qlt_24xx_process_atio_queue()
6163 if (ha->tgt.atio_ring_index == ha->tgt.atio_q_length) { in qlt_24xx_process_atio_queue()
6164 ha->tgt.atio_ring_index = 0; in qlt_24xx_process_atio_queue()
6165 ha->tgt.atio_ring_ptr = ha->tgt.atio_ring; in qlt_24xx_process_atio_queue()
6167 ha->tgt.atio_ring_ptr++; in qlt_24xx_process_atio_queue()
6170 pkt = (struct atio_from_isp *)ha->tgt.atio_ring_ptr; in qlt_24xx_process_atio_queue()
6176 WRT_REG_DWORD(ISP_ATIO_Q_OUT(vha), ha->tgt.atio_ring_index); in qlt_24xx_process_atio_queue()
6207 if (!ha->tgt.saved_set) { in qlt_24xx_config_nvram_stage1()
6209 ha->tgt.saved_exchange_count = nv->exchange_count; in qlt_24xx_config_nvram_stage1()
6210 ha->tgt.saved_firmware_options_1 = in qlt_24xx_config_nvram_stage1()
6212 ha->tgt.saved_firmware_options_2 = in qlt_24xx_config_nvram_stage1()
6214 ha->tgt.saved_firmware_options_3 = in qlt_24xx_config_nvram_stage1()
6216 ha->tgt.saved_set = 1; in qlt_24xx_config_nvram_stage1()
6244 if (ha->tgt.saved_set) { in qlt_24xx_config_nvram_stage1()
6245 nv->exchange_count = ha->tgt.saved_exchange_count; in qlt_24xx_config_nvram_stage1()
6247 ha->tgt.saved_firmware_options_1; in qlt_24xx_config_nvram_stage1()
6249 ha->tgt.saved_firmware_options_2; in qlt_24xx_config_nvram_stage1()
6251 ha->tgt.saved_firmware_options_3; in qlt_24xx_config_nvram_stage1()
6259 if (ha->tgt.enable_class_2) { in qlt_24xx_config_nvram_stage1()
6279 if (ha->tgt.node_name_set) { in qlt_24xx_config_nvram_stage2()
6280 memcpy(icb->node_name, ha->tgt.tgt_node_name, WWN_SIZE); in qlt_24xx_config_nvram_stage2()
6294 if (!ha->tgt.saved_set) { in qlt_81xx_config_nvram_stage1()
6296 ha->tgt.saved_exchange_count = nv->exchange_count; in qlt_81xx_config_nvram_stage1()
6297 ha->tgt.saved_firmware_options_1 = in qlt_81xx_config_nvram_stage1()
6299 ha->tgt.saved_firmware_options_2 = in qlt_81xx_config_nvram_stage1()
6301 ha->tgt.saved_firmware_options_3 = in qlt_81xx_config_nvram_stage1()
6303 ha->tgt.saved_set = 1; in qlt_81xx_config_nvram_stage1()
6332 if (ha->tgt.saved_set) { in qlt_81xx_config_nvram_stage1()
6333 nv->exchange_count = ha->tgt.saved_exchange_count; in qlt_81xx_config_nvram_stage1()
6335 ha->tgt.saved_firmware_options_1; in qlt_81xx_config_nvram_stage1()
6337 ha->tgt.saved_firmware_options_2; in qlt_81xx_config_nvram_stage1()
6339 ha->tgt.saved_firmware_options_3; in qlt_81xx_config_nvram_stage1()
6347 if (ha->tgt.enable_class_2) { in qlt_81xx_config_nvram_stage1()
6370 if (ha->tgt.node_name_set) { in qlt_81xx_config_nvram_stage2()
6371 memcpy(icb->node_name, ha->tgt.tgt_node_name, WWN_SIZE); in qlt_81xx_config_nvram_stage2()
6459 ha->tgt.tgt_vp_map = kzalloc(sizeof(struct qla_tgt_vp_map) * in qlt_mem_alloc()
6461 if (!ha->tgt.tgt_vp_map) in qlt_mem_alloc()
6464 ha->tgt.atio_ring = dma_alloc_coherent(&ha->pdev->dev, in qlt_mem_alloc()
6465 (ha->tgt.atio_q_length + 1) * sizeof(struct atio_from_isp), in qlt_mem_alloc()
6466 &ha->tgt.atio_dma, GFP_KERNEL); in qlt_mem_alloc()
6467 if (!ha->tgt.atio_ring) { in qlt_mem_alloc()
6468 kfree(ha->tgt.tgt_vp_map); in qlt_mem_alloc()
6480 if (ha->tgt.atio_ring) { in qlt_mem_free()
6481 dma_free_coherent(&ha->pdev->dev, (ha->tgt.atio_q_length + 1) * in qlt_mem_free()
6482 sizeof(struct atio_from_isp), ha->tgt.atio_ring, in qlt_mem_free()
6483 ha->tgt.atio_dma); in qlt_mem_free()
6485 kfree(ha->tgt.tgt_vp_map); in qlt_mem_free()
6497 vha->hw->tgt.tgt_vp_map[vha->vp_idx].vha = vha; in qlt_update_vp_map()
6500 vha->hw->tgt.tgt_vp_map[vha->d_id.b.al_pa].idx = vha->vp_idx; in qlt_update_vp_map()
6503 vha->hw->tgt.tgt_vp_map[vha->vp_idx].vha = NULL; in qlt_update_vp_map()
6506 vha->hw->tgt.tgt_vp_map[vha->d_id.b.al_pa].idx = 0; in qlt_update_vp_map()