Lines Matching refs:vha
127 static void qlt_alloc_qfull_cmd(struct scsi_qla_host *vha,
129 static void qlt_disable_vha(struct scsi_qla_host *vha);
135 static void qlt_send_term_imm_notif(struct scsi_qla_host *vha,
137 static struct fc_port *qlt_create_sess(struct scsi_qla_host *vha,
171 void qlt_do_generation_tick(struct scsi_qla_host *vha, int *dest) in qlt_do_generation_tick() argument
173 scsi_qla_host_t *base_vha = pci_get_drvdata(vha->hw->pdev); in qlt_do_generation_tick()
180 static inline int qlt_issue_marker(struct scsi_qla_host *vha, int vha_locked) in qlt_issue_marker() argument
183 if (unlikely(vha->marker_needed != 0)) { in qlt_issue_marker()
184 int rc = qla2x00_issue_marker(vha, vha_locked); in qlt_issue_marker()
186 ql_dbg(ql_dbg_tgt, vha, 0xe03d, in qlt_issue_marker()
188 vha->vp_idx); in qlt_issue_marker()
196 struct scsi_qla_host *qlt_find_host_by_d_id(struct scsi_qla_host *vha, in qlt_find_host_by_d_id() argument
202 if ((vha->d_id.b.area == d_id[1]) && (vha->d_id.b.domain == d_id[0]) && in qlt_find_host_by_d_id()
203 (vha->d_id.b.al_pa == d_id[2])) in qlt_find_host_by_d_id()
204 return vha; in qlt_find_host_by_d_id()
210 host = btree_lookup32(&vha->hw->tgt.host_map, key); in qlt_find_host_by_d_id()
212 ql_dbg(ql_dbg_tgt_mgt + ql_dbg_verbose, vha, 0xf005, in qlt_find_host_by_d_id()
219 struct scsi_qla_host *qlt_find_host_by_vp_idx(struct scsi_qla_host *vha, in qlt_find_host_by_vp_idx() argument
222 struct qla_hw_data *ha = vha->hw; in qlt_find_host_by_vp_idx()
224 if (vha->vp_idx == vp_idx) in qlt_find_host_by_vp_idx()
225 return vha; in qlt_find_host_by_vp_idx()
229 return ha->tgt.tgt_vp_map[vp_idx].vha; in qlt_find_host_by_vp_idx()
234 static inline void qlt_incr_num_pend_cmds(struct scsi_qla_host *vha) in qlt_incr_num_pend_cmds() argument
238 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_incr_num_pend_cmds()
240 vha->hw->tgt.num_pend_cmds++; in qlt_incr_num_pend_cmds()
241 if (vha->hw->tgt.num_pend_cmds > vha->qla_stats.stat_max_pend_cmds) in qlt_incr_num_pend_cmds()
242 vha->qla_stats.stat_max_pend_cmds = in qlt_incr_num_pend_cmds()
243 vha->hw->tgt.num_pend_cmds; in qlt_incr_num_pend_cmds()
244 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_incr_num_pend_cmds()
246 static inline void qlt_decr_num_pend_cmds(struct scsi_qla_host *vha) in qlt_decr_num_pend_cmds() argument
250 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_decr_num_pend_cmds()
251 vha->hw->tgt.num_pend_cmds--; in qlt_decr_num_pend_cmds()
252 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_decr_num_pend_cmds()
256 static void qlt_queue_unknown_atio(scsi_qla_host_t *vha, in qlt_queue_unknown_atio() argument
260 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_queue_unknown_atio()
264 ql_dbg(ql_dbg_async, vha, 0x502c, in qlt_queue_unknown_atio()
266 vha->vp_idx); in qlt_queue_unknown_atio()
274 u->vha = vha; in qlt_queue_unknown_atio()
278 spin_lock_irqsave(&vha->cmd_list_lock, flags); in qlt_queue_unknown_atio()
279 list_add_tail(&u->cmd_list, &vha->unknown_atio_list); in qlt_queue_unknown_atio()
280 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in qlt_queue_unknown_atio()
282 schedule_delayed_work(&vha->unknown_atio_work, 1); in qlt_queue_unknown_atio()
288 qlt_send_term_exchange(vha->hw->base_qpair, NULL, atio, ha_locked, 0); in qlt_queue_unknown_atio()
292 static void qlt_try_to_dequeue_unknown_atios(struct scsi_qla_host *vha, in qlt_try_to_dequeue_unknown_atios() argument
297 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_try_to_dequeue_unknown_atios()
301 list_for_each_entry_safe(u, t, &vha->unknown_atio_list, cmd_list) { in qlt_try_to_dequeue_unknown_atios()
303 ql_dbg(ql_dbg_async, vha, 0x502e, in qlt_try_to_dequeue_unknown_atios()
306 qlt_send_term_exchange(vha->hw->base_qpair, NULL, in qlt_try_to_dequeue_unknown_atios()
311 host = qlt_find_host_by_d_id(vha, u->atio.u.isp24.fcp_hdr.d_id); in qlt_try_to_dequeue_unknown_atios()
313 ql_dbg(ql_dbg_async + ql_dbg_verbose, vha, 0x502f, in qlt_try_to_dequeue_unknown_atios()
317 ql_dbg(ql_dbg_async + ql_dbg_verbose, vha, 0x503a, in qlt_try_to_dequeue_unknown_atios()
320 qlt_send_term_exchange(vha->hw->base_qpair, NULL, in qlt_try_to_dequeue_unknown_atios()
323 ql_dbg(ql_dbg_async + ql_dbg_verbose, vha, 0x503d, in qlt_try_to_dequeue_unknown_atios()
324 "Reschedule u %p, vha %p, host %p\n", u, vha, host); in qlt_try_to_dequeue_unknown_atios()
327 schedule_delayed_work(&vha->unknown_atio_work, in qlt_try_to_dequeue_unknown_atios()
334 spin_lock_irqsave(&vha->cmd_list_lock, flags); in qlt_try_to_dequeue_unknown_atios()
336 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in qlt_try_to_dequeue_unknown_atios()
343 struct scsi_qla_host *vha = container_of(to_delayed_work(work), in qlt_unknown_atio_work_fn() local
346 qlt_try_to_dequeue_unknown_atios(vha, 0); in qlt_unknown_atio_work_fn()
349 static bool qlt_24xx_atio_pkt_all_vps(struct scsi_qla_host *vha, in qlt_24xx_atio_pkt_all_vps() argument
352 ql_dbg(ql_dbg_tgt, vha, 0xe072, in qlt_24xx_atio_pkt_all_vps()
354 __func__, vha->vp_idx, atio->u.raw.entry_type, in qlt_24xx_atio_pkt_all_vps()
360 struct scsi_qla_host *host = qlt_find_host_by_d_id(vha, in qlt_24xx_atio_pkt_all_vps()
363 ql_dbg(ql_dbg_tgt, vha, 0xe03e, in qlt_24xx_atio_pkt_all_vps()
365 "with unknown d_id %x:%x:%x\n", vha->vp_idx, in qlt_24xx_atio_pkt_all_vps()
371 qlt_queue_unknown_atio(vha, atio, ha_locked); in qlt_24xx_atio_pkt_all_vps()
374 if (unlikely(!list_empty(&vha->unknown_atio_list))) in qlt_24xx_atio_pkt_all_vps()
375 qlt_try_to_dequeue_unknown_atios(vha, ha_locked); in qlt_24xx_atio_pkt_all_vps()
383 struct scsi_qla_host *host = vha; in qlt_24xx_atio_pkt_all_vps()
387 qlt_issue_marker(vha, ha_locked); in qlt_24xx_atio_pkt_all_vps()
391 host = qlt_find_host_by_vp_idx(vha, in qlt_24xx_atio_pkt_all_vps()
394 ql_dbg(ql_dbg_tgt, vha, 0xe03f, in qlt_24xx_atio_pkt_all_vps()
398 vha->vp_idx, entry->u.isp24.vp_index); in qlt_24xx_atio_pkt_all_vps()
407 qla24xx_report_id_acquisition(vha, in qlt_24xx_atio_pkt_all_vps()
415 struct scsi_qla_host *host = qlt_find_host_by_vp_idx(vha, in qlt_24xx_atio_pkt_all_vps()
420 ql_dbg(ql_dbg_tgt, vha, 0xe00a, in qlt_24xx_atio_pkt_all_vps()
423 vha->vp_idx, entry->vp_index); in qlt_24xx_atio_pkt_all_vps()
437 ql_dbg(ql_dbg_tgt, vha, 0xe040, in qlt_24xx_atio_pkt_all_vps()
439 "type %x\n", vha->vp_idx, atio->u.raw.entry_type); in qlt_24xx_atio_pkt_all_vps()
446 void qlt_response_pkt_all_vps(struct scsi_qla_host *vha, in qlt_response_pkt_all_vps() argument
451 ql_dbg(ql_dbg_tgt, vha, 0xe073, in qlt_response_pkt_all_vps()
453 vha->vp_idx, __func__); in qlt_response_pkt_all_vps()
458 struct scsi_qla_host *host = qlt_find_host_by_vp_idx(vha, in qlt_response_pkt_all_vps()
461 ql_dbg(ql_dbg_tgt, vha, 0xe041, in qlt_response_pkt_all_vps()
464 vha->vp_idx, entry->vp_index); in qlt_response_pkt_all_vps()
473 struct scsi_qla_host *host = vha; in qlt_response_pkt_all_vps()
477 host = qlt_find_host_by_vp_idx(vha, entry->u.isp24.vp_index); in qlt_response_pkt_all_vps()
479 ql_dbg(ql_dbg_tgt, vha, 0xe042, in qlt_response_pkt_all_vps()
482 vha->vp_idx, entry->u.isp24.vp_index); in qlt_response_pkt_all_vps()
491 struct scsi_qla_host *host = vha; in qlt_response_pkt_all_vps()
495 host = qlt_find_host_by_vp_idx(vha, in qlt_response_pkt_all_vps()
498 ql_dbg(ql_dbg_tgt, vha, 0xe043, in qlt_response_pkt_all_vps()
502 "vp_index %d\n", vha->vp_idx, in qlt_response_pkt_all_vps()
515 struct scsi_qla_host *host = qlt_find_host_by_vp_idx(vha, in qlt_response_pkt_all_vps()
518 ql_dbg(ql_dbg_tgt, vha, 0xe044, in qlt_response_pkt_all_vps()
521 "vp_index %d\n", vha->vp_idx, entry->vp_index); in qlt_response_pkt_all_vps()
532 struct scsi_qla_host *host = qlt_find_host_by_vp_idx(vha, in qlt_response_pkt_all_vps()
535 ql_dbg(ql_dbg_tgt, vha, 0xe045, in qlt_response_pkt_all_vps()
538 "vp_index %d\n", vha->vp_idx, entry->vp_index); in qlt_response_pkt_all_vps()
546 qlt_response_pkt(vha, rsp, pkt); in qlt_response_pkt_all_vps()
555 static int qla24xx_post_nack_work(struct scsi_qla_host *vha, fc_port_t *fcport, in qla24xx_post_nack_work() argument
559 e = qla2x00_alloc_work(vha, QLA_EVT_NACK); in qla24xx_post_nack_work()
566 return qla2x00_post_work(vha, e); in qla24xx_post_nack_work()
573 struct scsi_qla_host *vha = sp->vha; in qla2x00_async_nack_sp_done() local
576 ql_dbg(ql_dbg_disc, vha, 0x20f2, in qla2x00_async_nack_sp_done()
580 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla2x00_async_nack_sp_done()
582 sp->fcport->chip_reset = vha->hw->base_qpair->chip_reset; in qla2x00_async_nack_sp_done()
602 vha->fcport_count++; in qla2x00_async_nack_sp_done()
604 ql_dbg(ql_dbg_disc, vha, 0x20f3, in qla2x00_async_nack_sp_done()
608 vha->fcport_count); in qla2x00_async_nack_sp_done()
610 qla24xx_post_upd_fcport_work(vha, sp->fcport); in qla2x00_async_nack_sp_done()
625 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla2x00_async_nack_sp_done()
630 int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport, in qla24xx_async_notify_ack() argument
654 sp = qla2x00_get_sp(vha, fcport, GFP_ATOMIC); in qla24xx_async_notify_ack()
662 qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha)+2); in qla24xx_async_notify_ack()
671 ql_dbg(ql_dbg_disc, vha, 0x20f4, in qla24xx_async_notify_ack()
684 void qla24xx_do_nack_work(struct scsi_qla_host *vha, struct qla_work_evt *e) in qla24xx_do_nack_work() argument
691 mutex_lock(&vha->vha_tgt.tgt_mutex); in qla24xx_do_nack_work()
692 t = qlt_create_sess(vha, e->u.nack.fcport, 0); in qla24xx_do_nack_work()
693 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qla24xx_do_nack_work()
695 ql_log(ql_log_info, vha, 0xd034, in qla24xx_do_nack_work()
697 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qla24xx_do_nack_work()
699 vha->hw->tgt.tgt_ops->put_sess(e->u.nack.fcport); in qla24xx_do_nack_work()
700 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qla24xx_do_nack_work()
704 qla24xx_async_notify_ack(vha, e->u.nack.fcport, in qla24xx_do_nack_work()
711 struct qla_hw_data *ha = fcport->vha->hw; in qla24xx_delete_sess_fn()
728 void qlt_fc_port_added(struct scsi_qla_host *vha, fc_port_t *fcport) in qlt_fc_port_added() argument
730 struct qla_hw_data *ha = vha->hw; in qlt_fc_port_added()
731 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_fc_port_added()
735 if (!vha->hw->tgt.tgt_ops) in qlt_fc_port_added()
752 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_fc_port_added()
753 sess = qlt_create_sess(vha, fcport, false); in qlt_fc_port_added()
754 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_fc_port_added()
764 ql_dbg(ql_dbg_disc, vha, 0x2107, in qlt_fc_port_added()
771 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf04c, in qlt_fc_port_added()
773 "(loop ID %d) reappeared\n", vha->vp_idx, in qlt_fc_port_added()
776 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf007, in qlt_fc_port_added()
785 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf04d, in qlt_fc_port_added()
787 "port %8phC (loop ID %d) became global\n", vha->vp_idx, in qlt_fc_port_added()
801 qlt_plogi_ack_find_add(struct scsi_qla_host *vha, port_id_t *id, in qlt_plogi_ack_find_add() argument
806 list_for_each_entry(pla, &vha->plogi_ack_list, list) { in qlt_plogi_ack_find_add()
808 ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0x210d, in qlt_plogi_ack_find_add()
812 qlt_send_term_imm_notif(vha, &pla->iocb, 1); in qlt_plogi_ack_find_add()
820 ql_dbg(ql_dbg_async, vha, 0x5088, in qlt_plogi_ack_find_add()
822 vha->vp_idx); in qlt_plogi_ack_find_add()
828 list_add_tail(&pla->list, &vha->plogi_ack_list); in qlt_plogi_ack_find_add()
833 void qlt_plogi_ack_unref(struct scsi_qla_host *vha, in qlt_plogi_ack_unref() argument
847 ql_dbg(ql_dbg_disc, vha, 0x5089, in qlt_plogi_ack_unref()
865 qla24xx_post_nack_work(vha, fcport, iocb, SRB_NACK_PLOGI); in qlt_plogi_ack_unref()
867 qla24xx_post_nack_work(vha, fcport, iocb, SRB_NACK_PRLI); in qlt_plogi_ack_unref()
869 list_for_each_entry(fcport, &vha->vp_fcports, list) { in qlt_plogi_ack_unref()
881 qlt_plogi_ack_link(struct scsi_qla_host *vha, struct qlt_plogi_ack_t *pla, in qlt_plogi_ack_link() argument
888 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf097, in qlt_plogi_ack_link()
908 qlt_plogi_ack_unref(vha, sess->plogi_link[link]); in qlt_plogi_ack_link()
931 qlt_send_first_logo(struct scsi_qla_host *vha, qlt_port_logo_t *logo) in qlt_send_first_logo() argument
936 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_send_first_logo()
938 list_for_each_entry(tmp, &vha->logo_list, list) { in qlt_send_first_logo()
941 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_send_first_logo()
946 list_add_tail(&logo->list, &vha->logo_list); in qlt_send_first_logo()
948 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_send_first_logo()
950 res = qla24xx_els_dcmd_iocb(vha, ELS_DCMD_LOGO, logo->id); in qlt_send_first_logo()
952 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_send_first_logo()
954 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_send_first_logo()
956 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf098, in qlt_send_first_logo()
967 struct scsi_qla_host *vha = sess->vha; in qlt_free_session_done() local
968 struct qla_hw_data *ha = vha->hw; in qlt_free_session_done()
975 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf084, in qlt_free_session_done()
990 qlt_send_first_logo(vha, &logo); in qlt_free_session_done()
1000 rc = qla2x00_post_async_logout_work(vha, sess, in qlt_free_session_done()
1003 ql_log(ql_log_warn, vha, 0xf085, in qlt_free_session_done()
1010 rc = qla2x00_post_async_prlo_work(vha, sess, in qlt_free_session_done()
1013 ql_log(ql_log_warn, vha, 0xf085, in qlt_free_session_done()
1033 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf086, in qlt_free_session_done()
1041 ql_dbg(ql_dbg_disc, vha, 0xf087, in qlt_free_session_done()
1047 qla24xx_async_notify_ack(vha, sess, in qlt_free_session_done()
1063 vha->fcport_count--; in qlt_free_session_done()
1072 if (!test_bit(UNLOADING, &vha->dpc_flags)) in qlt_free_session_done()
1073 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qlt_free_session_done()
1084 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf099, in qlt_free_session_done()
1091 qlt_plogi_ack_unref(vha, con); in qlt_free_session_done()
1094 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf09a, in qlt_free_session_done()
1104 qlt_plogi_ack_unref(vha, own); in qlt_free_session_done()
1111 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf001, in qlt_free_session_done()
1113 sess, sess->port_name, vha->fcport_count); in qlt_free_session_done()
1118 if (vha->fcport_count == 0) in qlt_free_session_done()
1119 wake_up_all(&vha->fcport_waitQ); in qlt_free_session_done()
1128 if ((!tgt || !tgt->tgt_stop) && !LOOP_TRANSITION(vha)) { in qlt_free_session_done()
1129 switch (vha->host->active_mode) { in qlt_free_session_done()
1132 set_bit(RELOGIN_NEEDED, &vha->dpc_flags); in qlt_free_session_done()
1133 qla2xxx_wake_dpc(vha); in qlt_free_session_done()
1146 struct scsi_qla_host *vha = sess->vha; in qlt_unreg_sess() local
1149 ql_dbg(ql_dbg_disc, sess->vha, 0x210a, in qlt_unreg_sess()
1153 spin_lock_irqsave(&sess->vha->work_lock, flags); in qlt_unreg_sess()
1155 spin_unlock_irqrestore(&sess->vha->work_lock, flags); in qlt_unreg_sess()
1159 spin_unlock_irqrestore(&sess->vha->work_lock, flags); in qlt_unreg_sess()
1162 vha->hw->tgt.tgt_ops->clear_nacl_from_fcport_map(sess); in qlt_unreg_sess()
1164 qla2x00_mark_device_lost(vha, sess, 0, 0); in qlt_unreg_sess()
1182 static int qlt_reset(struct scsi_qla_host *vha, void *iocb, int mcmd) in qlt_reset() argument
1184 struct qla_hw_data *ha = vha->hw; in qlt_reset()
1194 atomic_inc(&vha->vha_tgt.qla_tgt->tgt_global_resets_count); in qlt_reset()
1196 qlt_clear_tgt_db(vha->vha_tgt.qla_tgt); in qlt_reset()
1200 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id); in qlt_reset()
1204 ql_dbg(ql_dbg_tgt, vha, 0xe000, in qlt_reset()
1211 ql_dbg(ql_dbg_tgt, vha, 0xe047, in qlt_reset()
1213 "loop_id %d)\n", vha->host_no, sess, sess->port_name, in qlt_reset()
1221 if (sess->chip_reset != sess->vha->hw->base_qpair->chip_reset) { in qla24xx_chk_fcp_state()
1240 if (sess->vha->fcport_count == 0) in qlt_schedule_sess_for_deletion()
1241 wake_up_all(&sess->vha->fcport_waitQ); in qlt_schedule_sess_for_deletion()
1251 spin_lock_irqsave(&sess->vha->work_lock, flags); in qlt_schedule_sess_for_deletion()
1253 spin_unlock_irqrestore(&sess->vha->work_lock, flags); in qlt_schedule_sess_for_deletion()
1257 spin_unlock_irqrestore(&sess->vha->work_lock, flags); in qlt_schedule_sess_for_deletion()
1263 ql_dbg(ql_dbg_tgt, sess->vha, 0xe001, in qlt_schedule_sess_for_deletion()
1267 WARN_ON(!queue_work(sess->vha->hw->wq, &sess->del_work)); in qlt_schedule_sess_for_deletion()
1273 scsi_qla_host_t *vha = tgt->vha; in qlt_clear_tgt_db() local
1275 list_for_each_entry(sess, &vha->vp_fcports, list) { in qlt_clear_tgt_db()
1283 static int qla24xx_get_loop_id(struct scsi_qla_host *vha, const uint8_t *s_id, in qla24xx_get_loop_id() argument
1286 struct qla_hw_data *ha = vha->hw; in qla24xx_get_loop_id()
1296 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf044, in qla24xx_get_loop_id()
1298 vha->vp_idx, qla2x00_gid_list_size(ha)); in qla24xx_get_loop_id()
1303 rc = qla24xx_gidlist_wait(vha, gid_list, gid_list_dma, &entries); in qla24xx_get_loop_id()
1305 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf045, in qla24xx_get_loop_id()
1307 vha->vp_idx, rc); in qla24xx_get_loop_id()
1337 struct scsi_qla_host *vha, in qlt_create_sess() argument
1341 struct qla_hw_data *ha = vha->hw; in qlt_create_sess()
1345 if (vha->vha_tgt.qla_tgt->tgt_stop) in qlt_create_sess()
1350 ql_dbg(ql_dbg_disc, vha, 0x20f6, in qlt_create_sess()
1357 sess->tgt = vha->vha_tgt.qla_tgt; in qlt_create_sess()
1370 if (ha->tgt.tgt_ops->check_initiator_node_acl(vha, in qlt_create_sess()
1372 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf015, in qlt_create_sess()
1374 vha->vp_idx, fcport->port_name); in qlt_create_sess()
1383 ql_dbg(ql_dbg_disc, vha, 0x20f7, in qlt_create_sess()
1391 vha->vha_tgt.qla_tgt->sess_count++; in qlt_create_sess()
1393 qlt_do_generation_tick(vha, &sess->generation); in qlt_create_sess()
1397 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf006, in qlt_create_sess()
1399 sess, sess->se_sess, vha->vha_tgt.qla_tgt, in qlt_create_sess()
1400 vha->vha_tgt.qla_tgt->sess_count); in qlt_create_sess()
1402 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf04b, in qlt_create_sess()
1405 vha->vp_idx, local ? "local " : "", fcport->port_name, in qlt_create_sess()
1417 qlt_fc_port_deleted(struct scsi_qla_host *vha, fc_port_t *fcport, int max_gen) in qlt_fc_port_deleted() argument
1419 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_fc_port_deleted()
1423 if (!vha->hw->tgt.tgt_ops) in qlt_fc_port_deleted()
1429 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qlt_fc_port_deleted()
1431 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_fc_port_deleted()
1435 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_fc_port_deleted()
1440 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_fc_port_deleted()
1441 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf092, in qlt_fc_port_deleted()
1449 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf008, "qla_tgt_fc_port_deleted %p", sess); in qlt_fc_port_deleted()
1452 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_fc_port_deleted()
1466 ql_dbg(ql_dbg_tgt, tgt->vha, 0xe002, in test_tgt_sess_count()
1478 struct scsi_qla_host *vha = tgt->vha; in qlt_stop_phase1() local
1483 if (!vha->fc_vport) { in qlt_stop_phase1()
1484 struct Scsi_Host *sh = vha->host; in qlt_stop_phase1()
1494 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf021, in qlt_stop_phase1()
1500 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf04e, in qlt_stop_phase1()
1506 ql_dbg(ql_dbg_tgt_mgt, vha, 0xe003, "Stopping target for host %ld(%p)\n", in qlt_stop_phase1()
1507 vha->host_no, vha); in qlt_stop_phase1()
1512 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_stop_phase1()
1515 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_stop_phase1()
1518 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf009, in qlt_stop_phase1()
1528 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf00a, in qlt_stop_phase1()
1535 (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha))) in qlt_stop_phase1()
1536 qlt_disable_vha(vha); in qlt_stop_phase1()
1547 scsi_qla_host_t *vha = tgt->vha; in qlt_stop_phase2() local
1550 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf04f, in qlt_stop_phase2()
1556 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf00b, in qlt_stop_phase2()
1562 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_stop_phase2()
1565 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_stop_phase2()
1567 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf00c, "Stop of tgt %p finished\n", in qlt_stop_phase2()
1575 scsi_qla_host_t *vha = tgt->vha; in qlt_release() local
1580 struct qla_hw_data *ha = vha->hw; in qlt_release()
1582 if ((vha->vha_tgt.qla_tgt != NULL) && !tgt->tgt_stop && in qlt_release()
1586 if ((vha->vha_tgt.qla_tgt != NULL) && !tgt->tgt_stopped) in qlt_release()
1589 for (i = 0; i < vha->hw->max_qpairs + 1; i++) { in qlt_release()
1602 list_del(&vha->vha_tgt.qla_tgt->tgt_list_entry); in qlt_release()
1610 if (vha->vp_idx) in qlt_release()
1613 vha->vha_tgt.target_lport_ptr) in qlt_release()
1614 ha->tgt.tgt_ops->remove_target(vha); in qlt_release()
1616 vha->vha_tgt.qla_tgt = NULL; in qlt_release()
1618 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf00d, in qlt_release()
1633 ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xf050, in qlt_sched_sess_work()
1639 ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xf00e, in qlt_sched_sess_work()
1664 struct scsi_qla_host *vha = qpair->vha; in qlt_send_notify_ack() local
1665 struct qla_hw_data *ha = vha->hw; in qlt_send_notify_ack()
1672 ql_dbg(ql_dbg_tgt, vha, 0xe004, "Sending NOTIFY_ACK (ha=%p)\n", ha); in qlt_send_notify_ack()
1676 ql_dbg(ql_dbg_tgt, vha, 0xe049, in qlt_send_notify_ack()
1678 "request packet\n", vha->vp_idx, __func__); in qlt_send_notify_ack()
1682 if (vha->vha_tgt.qla_tgt != NULL) in qlt_send_notify_ack()
1683 vha->vha_tgt.qla_tgt->notify_ack_expected++; in qlt_send_notify_ack()
1709 ql_dbg(ql_dbg_tgt, vha, 0xe005, in qlt_send_notify_ack()
1711 vha->vp_idx, nack->u.isp24.status); in qlt_send_notify_ack()
1715 qla2x00_start_iocbs(vha, qpair->req); in qlt_send_notify_ack()
1725 struct scsi_qla_host *vha = qpair->vha; in qlt_24xx_send_abts_resp() local
1726 struct qla_hw_data *ha = vha->hw; in qlt_24xx_send_abts_resp()
1731 ql_dbg(ql_dbg_tgt, vha, 0xe006, in qlt_24xx_send_abts_resp()
1738 ql_dbg(ql_dbg_tgt, vha, 0xe04a, in qlt_24xx_send_abts_resp()
1740 "request packet", vha->vp_idx, __func__); in qlt_24xx_send_abts_resp()
1747 resp->vp_index = vha->vp_idx; in qlt_24xx_send_abts_resp()
1788 vha->vha_tgt.qla_tgt->abts_resp_expected++; in qlt_24xx_send_abts_resp()
1795 qla2x00_start_iocbs(vha, qpair->req); in qlt_24xx_send_abts_resp()
1801 static void qlt_24xx_retry_term_exchange(struct scsi_qla_host *vha, in qlt_24xx_retry_term_exchange() argument
1806 ql_dbg(ql_dbg_tgt, vha, 0xe007, in qlt_24xx_retry_term_exchange()
1807 "Sending retry TERM EXCH CTIO7 (ha=%p)\n", vha->hw); in qlt_24xx_retry_term_exchange()
1810 vha->hw->base_qpair, NULL); in qlt_24xx_retry_term_exchange()
1812 ql_dbg(ql_dbg_tgt, vha, 0xe04b, in qlt_24xx_retry_term_exchange()
1814 "request packet\n", vha->vp_idx, __func__); in qlt_24xx_retry_term_exchange()
1828 ctio->vp_index = vha->vp_idx; in qlt_24xx_retry_term_exchange()
1839 qla2x00_start_iocbs(vha, vha->req); in qlt_24xx_retry_term_exchange()
1841 qlt_24xx_send_abts_resp(vha->hw->base_qpair, in qlt_24xx_retry_term_exchange()
1846 static int abort_cmd_for_tag(struct scsi_qla_host *vha, uint32_t tag) in abort_cmd_for_tag() argument
1852 spin_lock_irqsave(&vha->cmd_list_lock, flags); in abort_cmd_for_tag()
1853 list_for_each_entry(op, &vha->qla_sess_op_cmd_list, cmd_list) { in abort_cmd_for_tag()
1856 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in abort_cmd_for_tag()
1861 list_for_each_entry(op, &vha->unknown_atio_list, cmd_list) { in abort_cmd_for_tag()
1864 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in abort_cmd_for_tag()
1869 list_for_each_entry(cmd, &vha->qla_cmd_list, cmd_list) { in abort_cmd_for_tag()
1872 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in abort_cmd_for_tag()
1876 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in abort_cmd_for_tag()
1886 static void abort_cmds_for_lun(struct scsi_qla_host *vha, in abort_cmds_for_lun() argument
1895 spin_lock_irqsave(&vha->cmd_list_lock, flags); in abort_cmds_for_lun()
1896 list_for_each_entry(op, &vha->qla_sess_op_cmd_list, cmd_list) { in abort_cmds_for_lun()
1907 list_for_each_entry(op, &vha->unknown_atio_list, cmd_list) { in abort_cmds_for_lun()
1918 list_for_each_entry(cmd, &vha->qla_cmd_list, cmd_list) { in abort_cmds_for_lun()
1928 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in abort_cmds_for_lun()
1931 static struct qla_qpair_hint *qlt_find_qphint(struct scsi_qla_host *vha, in qlt_find_qphint() argument
1934 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_find_qphint()
1937 if (vha->flags.qpairs_available) { in qlt_find_qphint()
1952 struct qla_hw_data *ha = mcmd->vha->hw; in qlt_do_tmr_work()
1995 ql_dbg(ql_dbg_tgt_mgt, mcmd->vha, 0xf052, in qlt_do_tmr_work()
1997 mcmd->vha->vp_idx, rc); in qlt_do_tmr_work()
2003 static int __qlt_24xx_handle_abts(struct scsi_qla_host *vha, in __qlt_24xx_handle_abts() argument
2006 struct qla_hw_data *ha = vha->hw; in __qlt_24xx_handle_abts()
2008 struct qla_qpair_hint *h = &vha->vha_tgt.qla_tgt->qphints[0]; in __qlt_24xx_handle_abts()
2010 if (abort_cmd_for_tag(vha, abts->exchange_addr_to_abort)) { in __qlt_24xx_handle_abts()
2016 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf00f, in __qlt_24xx_handle_abts()
2018 vha->vp_idx, abts->exchange_addr_to_abort); in __qlt_24xx_handle_abts()
2022 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf051, in __qlt_24xx_handle_abts()
2024 vha->vp_idx, __func__); in __qlt_24xx_handle_abts()
2034 mcmd->vha = vha; in __qlt_24xx_handle_abts()
2062 static void qlt_24xx_handle_abts(struct scsi_qla_host *vha, in qlt_24xx_handle_abts() argument
2065 struct qla_hw_data *ha = vha->hw; in qlt_24xx_handle_abts()
2073 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf053, in qlt_24xx_handle_abts()
2075 "supported\n", vha->vp_idx); in qlt_24xx_handle_abts()
2082 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf010, in qlt_24xx_handle_abts()
2084 "Address received\n", vha->vp_idx); in qlt_24xx_handle_abts()
2090 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf011, in qlt_24xx_handle_abts()
2092 "tag=%d, param=%x)\n", vha->vp_idx, abts->fcp_hdr_le.s_id[2], in qlt_24xx_handle_abts()
2101 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_24xx_handle_abts()
2103 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf012, in qlt_24xx_handle_abts()
2105 vha->vp_idx); in qlt_24xx_handle_abts()
2121 rc = __qlt_24xx_handle_abts(vha, abts, sess); in qlt_24xx_handle_abts()
2123 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf054, in qlt_24xx_handle_abts()
2125 vha->vp_idx, rc); in qlt_24xx_handle_abts()
2138 struct scsi_qla_host *ha = mcmd->vha; in qlt_24xx_send_task_mgmt_ctio()
2200 struct scsi_qla_host *vha = cmd->vha; in qlt_send_resp_ctio() local
2202 ql_dbg(ql_dbg_tgt_dif, vha, 0x3066, in qlt_send_resp_ctio()
2205 vha, atio, scsi_status, sense_key, asc, ascq); in qlt_send_resp_ctio()
2207 ctio = (struct ctio7_to_24xx *)qla2x00_alloc_iocbs(vha, NULL); in qlt_send_resp_ctio()
2209 ql_dbg(ql_dbg_async, vha, 0x3067, in qlt_send_resp_ctio()
2211 vha->host_no, __func__); in qlt_send_resp_ctio()
2220 ctio->vp_index = vha->vp_idx; in qlt_send_resp_ctio()
2254 qla2x00_start_iocbs(vha, qpair->req); in qlt_send_resp_ctio()
2263 struct scsi_qla_host *vha = mcmd->sess->vha; in qlt_xmit_tm_rsp() local
2264 struct qla_hw_data *ha = vha->hw; in qlt_xmit_tm_rsp()
2268 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf013, in qlt_xmit_tm_rsp()
2274 if (!vha->flags.online || mcmd->reset_count != qpair->chip_reset) { in qlt_xmit_tm_rsp()
2279 ql_dbg(ql_dbg_async, vha, 0xe100, in qlt_xmit_tm_rsp()
2281 vha->flags.online, qla2x00_reset_active(vha), in qlt_xmit_tm_rsp()
2295 ql_dbg(ql_dbg_disc, vha, 0x2106, in qlt_xmit_tm_rsp()
2301 qlt_send_notify_ack(vha->hw->base_qpair, in qlt_xmit_tm_rsp()
2386 static void qlt_unmap_sg(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd) in qlt_unmap_sg() argument
2405 ha = vha->hw; in qlt_unmap_sg()
2479 ql_dbg(ql_dbg_io, qpair->vha, 0x305b, in qlt_make_handle()
2481 qpair->vha->vp_idx); in qlt_make_handle()
2633 struct scsi_qla_host *vha; in qlt_print_dif_err() local
2638 vha = cmd->vha; in qlt_print_dif_err()
2642 ql_dbg(ql_dbg_tgt_dif, vha, 0xe00b, in qlt_print_dif_err()
2649 ql_dbg(ql_dbg_tgt_dif, vha, 0xe00c, in qlt_print_dif_err()
2656 ql_dbg(ql_dbg_tgt_dif, vha, 0xe00f, in qlt_print_dif_err()
2663 ql_dbg(ql_dbg_tgt_dif, vha, 0xe010, in qlt_print_dif_err()
2670 ql_dump_buffer(ql_dbg_tgt_dif, vha, 0xe011, cmd->cdb, 16); in qlt_print_dif_err()
2730 (IS_FWI2_CAPABLE(cmd->vha->hw) && in qlt_pre_xmit_response()
2859 scsi_qla_host_t *vha = cmd->tgt->vha; in qla_tgt_set_dif_tags() local
2860 struct qla_hw_data *ha = vha->hw; in qla_tgt_set_dif_tags()
2958 scsi_qla_host_t *vha = cmd->vha; in qlt_build_ctio_crc2_pkt() local
2960 ha = vha->hw; in qlt_build_ctio_crc2_pkt()
3113 tc.vha = vha; in qlt_build_ctio_crc2_pkt()
3157 struct scsi_qla_host *vha = cmd->vha; in qlt_xmit_response() local
3169 qlt_abort_cmd_on_host_reset(cmd->vha, cmd); in qlt_xmit_response()
3200 qlt_abort_cmd_on_host_reset(cmd->vha, cmd); in qlt_xmit_response()
3203 vha->flags.online, qla2x00_reset_active(vha), in qlt_xmit_response()
3299 qla2x00_start_iocbs(vha, qpair->req); in qlt_xmit_response()
3305 qlt_unmap_sg(vha, cmd); in qlt_xmit_response()
3315 struct scsi_qla_host *vha = cmd->vha; in qlt_rdy_to_xfer() local
3339 qlt_abort_cmd_on_host_reset(cmd->vha, cmd); in qlt_rdy_to_xfer()
3342 vha->flags.online, qla2x00_reset_active(vha), in qlt_rdy_to_xfer()
3377 qla2x00_start_iocbs(vha, qpair->req); in qlt_rdy_to_xfer()
3383 qlt_unmap_sg(vha, cmd); in qlt_rdy_to_xfer()
3403 struct scsi_qla_host *vha = cmd->vha; in qlt_handle_dif_error() local
3415 ql_dbg(ql_dbg_tgt_dif, vha, 0xf075, in qlt_handle_dif_error()
3422 ql_dbg(ql_dbg_tgt_dif, vha, 0xe00d, in qlt_handle_dif_error()
3438 ql_dbg(ql_dbg_tgt_dif, vha, 0xe00e, in qlt_handle_dif_error()
3455 ql_dbg(ql_dbg_tgt_dif, vha, 0xe012, in qlt_handle_dif_error()
3473 vha->hw->tgt.tgt_ops->handle_data(cmd); in qlt_handle_dif_error()
3479 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_handle_dif_error()
3489 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_handle_dif_error()
3496 static int __qlt_send_term_imm_notif(struct scsi_qla_host *vha, in __qlt_send_term_imm_notif() argument
3500 struct qla_hw_data *ha = vha->hw; in __qlt_send_term_imm_notif()
3504 ql_dbg(ql_dbg_tgt_tmr, vha, 0xe01c, in __qlt_send_term_imm_notif()
3507 pkt = (request_t *)qla2x00_alloc_iocbs(vha, NULL); in __qlt_send_term_imm_notif()
3509 ql_dbg(ql_dbg_tgt, vha, 0xe080, in __qlt_send_term_imm_notif()
3511 "request packet\n", vha->vp_idx, __func__); in __qlt_send_term_imm_notif()
3541 qla2x00_start_iocbs(vha, vha->req); in __qlt_send_term_imm_notif()
3545 static void qlt_send_term_imm_notif(struct scsi_qla_host *vha, in qlt_send_term_imm_notif() argument
3552 rc = __qlt_send_term_imm_notif(vha, imm); in qlt_send_term_imm_notif()
3556 qlt_alloc_qfull_cmd(vha, imm, 0, 0); in qlt_send_term_imm_notif()
3564 spin_lock_irqsave(&vha->hw->hardware_lock, flags); in qlt_send_term_imm_notif()
3565 rc = __qlt_send_term_imm_notif(vha, imm); in qlt_send_term_imm_notif()
3569 qlt_alloc_qfull_cmd(vha, imm, 0, 0); in qlt_send_term_imm_notif()
3574 spin_unlock_irqrestore(&vha->hw->hardware_lock, flags); in qlt_send_term_imm_notif()
3585 struct scsi_qla_host *vha = qpair->vha; in __qlt_send_term_exchange() local
3587 struct qla_hw_data *ha = vha->hw; in __qlt_send_term_exchange()
3592 ql_dbg(ql_dbg_tgt, vha, 0xe009, "Sending TERM EXCH CTIO (ha=%p)\n", ha); in __qlt_send_term_exchange()
3595 vha = cmd->vha; in __qlt_send_term_exchange()
3599 ql_dbg(ql_dbg_tgt, vha, 0xe050, in __qlt_send_term_exchange()
3601 "request packet\n", vha->vp_idx, __func__); in __qlt_send_term_exchange()
3607 ql_dbg(ql_dbg_tgt, vha, 0xe051, in __qlt_send_term_exchange()
3609 "incorrect state %d\n", vha->vp_idx, cmd, in __qlt_send_term_exchange()
3623 ctio24->vp_index = vha->vp_idx; in __qlt_send_term_exchange()
3639 qla2x00_start_iocbs(vha, qpair->req); in __qlt_send_term_exchange()
3647 struct scsi_qla_host *vha; in qlt_send_term_exchange() local
3653 vha = cmd->vha; in qlt_send_term_exchange()
3655 vha = qpair->vha; in qlt_send_term_exchange()
3660 qlt_alloc_qfull_cmd(vha, atio, 0, 0); in qlt_send_term_exchange()
3666 qlt_alloc_qfull_cmd(vha, atio, 0, 0); in qlt_send_term_exchange()
3671 qlt_unmap_sg(vha, cmd); in qlt_send_term_exchange()
3672 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_send_term_exchange()
3681 static void qlt_init_term_exchange(struct scsi_qla_host *vha) in qlt_init_term_exchange() argument
3686 vha->hw->tgt.leak_exchg_thresh_hold = in qlt_init_term_exchange()
3687 (vha->hw->cur_fw_xcb_count/100) * LEAK_EXCHG_THRESH_HOLD_PERCENT; in qlt_init_term_exchange()
3690 if (!list_empty(&vha->hw->tgt.q_full_list)) { in qlt_init_term_exchange()
3692 list_splice_init(&vha->hw->tgt.q_full_list, &free_list); in qlt_init_term_exchange()
3700 vha->hw->tgt.num_qfull_cmds_alloc--; in qlt_init_term_exchange()
3703 vha->hw->tgt.num_qfull_cmds_dropped = 0; in qlt_init_term_exchange()
3706 static void qlt_chk_exch_leak_thresh_hold(struct scsi_qla_host *vha) in qlt_chk_exch_leak_thresh_hold() argument
3710 total_leaked = vha->hw->tgt.num_qfull_cmds_dropped; in qlt_chk_exch_leak_thresh_hold()
3712 if (vha->hw->tgt.leak_exchg_thresh_hold && in qlt_chk_exch_leak_thresh_hold()
3713 (total_leaked > vha->hw->tgt.leak_exchg_thresh_hold)) { in qlt_chk_exch_leak_thresh_hold()
3715 ql_dbg(ql_dbg_tgt, vha, 0xe079, in qlt_chk_exch_leak_thresh_hold()
3717 total_leaked, vha->hw->cur_fw_xcb_count); in qlt_chk_exch_leak_thresh_hold()
3719 if (IS_P3P_TYPE(vha->hw)) in qlt_chk_exch_leak_thresh_hold()
3720 set_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags); in qlt_chk_exch_leak_thresh_hold()
3722 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qlt_chk_exch_leak_thresh_hold()
3723 qla2xxx_wake_dpc(vha); in qlt_chk_exch_leak_thresh_hold()
3731 struct scsi_qla_host *vha = tgt->vha; in qlt_abort_cmd() local
3735 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf014, in qlt_abort_cmd()
3737 "(se_cmd=%p, tag=%llu)", vha->vp_idx, cmd, &cmd->se_cmd, in qlt_abort_cmd()
3748 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf016, in qlt_abort_cmd()
3767 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe074, in qlt_free_cmd()
3775 qlt_unmap_sg(cmd->vha, cmd); in qlt_free_cmd()
3778 qlt_decr_num_pend_cmds(cmd->vha); in qlt_free_cmd()
3801 struct scsi_qla_host *vha = qpair->vha; in qlt_term_ctio_exchange() local
3804 ql_dbg(ql_dbg_tgt_dif, vha, 0xe013, in qlt_term_ctio_exchange()
3828 static struct qla_tgt_cmd *qlt_ctio_to_cmd(struct scsi_qla_host *vha, in qlt_ctio_to_cmd() argument
3841 } else if (vha->hw->req_q_map[qid]) { in qlt_ctio_to_cmd()
3842 ql_dbg(ql_dbg_tgt_mgt, vha, 0x1000a, in qlt_ctio_to_cmd()
3844 vha->vp_idx, rsp->id, handle); in qlt_ctio_to_cmd()
3845 req = vha->hw->req_q_map[qid]; in qlt_ctio_to_cmd()
3854 ql_dbg(ql_dbg_tgt, vha, 0xe052, in qlt_ctio_to_cmd()
3856 vha->vp_idx, handle); in qlt_ctio_to_cmd()
3862 ql_dbg(ql_dbg_async, vha, 0xe053, in qlt_ctio_to_cmd()
3864 vha->vp_idx, handle, req->id, rsp->id); in qlt_ctio_to_cmd()
3870 ql_dbg(ql_dbg_tgt, vha, 0xe054, in qlt_ctio_to_cmd()
3872 "support NULL handles\n", vha->vp_idx); in qlt_ctio_to_cmd()
3881 qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd) in qlt_abort_cmd_on_host_reset() argument
3883 struct qla_hw_data *ha = vha->hw; in qlt_abort_cmd_on_host_reset()
3886 qlt_unmap_sg(vha, cmd); in qlt_abort_cmd_on_host_reset()
3890 ql_dbg(ql_dbg_io, vha, 0xff00, in qlt_abort_cmd_on_host_reset()
3896 ql_dbg(ql_dbg_io, vha, 0xff01, in qlt_abort_cmd_on_host_reset()
3902 ql_dbg(ql_dbg_io, vha, 0xff03, in qlt_abort_cmd_on_host_reset()
3915 static void qlt_do_ctio_completion(struct scsi_qla_host *vha, in qlt_do_ctio_completion() argument
3918 struct qla_hw_data *ha = vha->hw; in qlt_do_ctio_completion()
3926 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01d, in qlt_do_ctio_completion()
3933 cmd = qlt_ctio_to_cmd(vha, rsp, handle, ctio); in qlt_do_ctio_completion()
3940 qlt_unmap_sg(vha, cmd); in qlt_do_ctio_completion()
3951 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf058, in qlt_do_ctio_completion()
3955 "TIMEOUT=b, INVALID_RX_ID=8)\n", vha->vp_idx, in qlt_do_ctio_completion()
3965 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf059, in qlt_do_ctio_completion()
3967 "received (state %x, se_cmd %p)\n", vha->vp_idx, in qlt_do_ctio_completion()
3978 ql_dbg(ql_dbg_disc, vha, 0x20f8, in qlt_do_ctio_completion()
3989 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf073, in qlt_do_ctio_completion()
3993 vha->vp_idx, status, cmd->state, se_cmd, in qlt_do_ctio_completion()
4001 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf05b, in qlt_do_ctio_completion()
4003 vha->vp_idx, status, cmd->state, se_cmd); in qlt_do_ctio_completion()
4034 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01e, in qlt_do_ctio_completion()
4038 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf05c, in qlt_do_ctio_completion()
4040 "not return a CTIO complete\n", vha->vp_idx, cmd->state); in qlt_do_ctio_completion()
4045 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01f, "Finishing failed CTIO\n"); in qlt_do_ctio_completion()
4052 static inline int qlt_get_fcp_task_attr(struct scsi_qla_host *vha, in qlt_get_fcp_task_attr() argument
4074 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf05d, in qlt_get_fcp_task_attr()
4091 scsi_qla_host_t *vha = cmd->vha; in __qlt_do_work() local
4092 struct qla_hw_data *ha = vha->hw; in __qlt_do_work()
4105 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf082, in __qlt_do_work()
4126 fcp_task_attr = qlt_get_fcp_task_attr(vha, in __qlt_do_work()
4130 ret = ha->tgt.tgt_ops->handle_cmd(vha, cmd, cdb, data_length, in __qlt_do_work()
4143 ql_dbg(ql_dbg_io, vha, 0x3060, "Terminating work cmd %p", cmd); in __qlt_do_work()
4152 qlt_decr_num_pend_cmds(vha); in __qlt_do_work()
4164 scsi_qla_host_t *vha = cmd->vha; in qlt_do_work() local
4167 spin_lock_irqsave(&vha->cmd_list_lock, flags); in qlt_do_work()
4169 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in qlt_do_work()
4174 void qlt_clr_qp_table(struct scsi_qla_host *vha) in qlt_clr_qp_table() argument
4177 struct qla_hw_data *ha = vha->hw; in qlt_clr_qp_table()
4178 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_clr_qp_table()
4182 ql_log(ql_log_info, vha, 0x706c, in qlt_clr_qp_table()
4199 static void qlt_assign_qpair(struct scsi_qla_host *vha, in qlt_assign_qpair() argument
4203 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_assign_qpair()
4206 if (vha->flags.qpairs_available) { in qlt_assign_qpair()
4212 pci_get_drvdata(vha->hw->pdev); in qlt_assign_qpair()
4214 qpair = vha->hw->base_qpair; in qlt_assign_qpair()
4223 ql_log(ql_log_info, vha, 0xd037, in qlt_assign_qpair()
4243 ql_log(ql_log_info, vha, 0xd038, in qlt_assign_qpair()
4265 ql_log(ql_log_info, vha, 0xd039, in qlt_assign_qpair()
4278 static struct qla_tgt_cmd *qlt_get_tag(scsi_qla_host_t *vha, in qlt_get_tag() argument
4295 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_get_tag()
4296 qlt_incr_num_pend_cmds(vha); in qlt_get_tag()
4297 cmd->vha = vha; in qlt_get_tag()
4309 qlt_assign_qpair(vha, cmd); in qlt_get_tag()
4310 cmd->reset_count = vha->hw->base_qpair->chip_reset; in qlt_get_tag()
4311 cmd->vp_idx = vha->vp_idx; in qlt_get_tag()
4317 static int qlt_handle_cmd_for_atio(struct scsi_qla_host *vha, in qlt_handle_cmd_for_atio() argument
4320 struct qla_hw_data *ha = vha->hw; in qlt_handle_cmd_for_atio()
4321 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_handle_cmd_for_atio()
4328 ql_dbg(ql_dbg_io, vha, 0x3061, in qlt_handle_cmd_for_atio()
4339 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, atio->u.isp24.fcp_hdr.s_id); in qlt_handle_cmd_for_atio()
4346 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf002, in qlt_handle_cmd_for_atio()
4356 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf004, in qlt_handle_cmd_for_atio()
4363 cmd = qlt_get_tag(vha, sess, atio); in qlt_handle_cmd_for_atio()
4365 ql_dbg(ql_dbg_io, vha, 0x3062, in qlt_handle_cmd_for_atio()
4366 "qla_target(%d): Allocation of cmd failed\n", vha->vp_idx); in qlt_handle_cmd_for_atio()
4376 spin_lock_irqsave(&vha->cmd_list_lock, flags); in qlt_handle_cmd_for_atio()
4377 list_add_tail(&cmd->cmd_list, &vha->qla_cmd_list); in qlt_handle_cmd_for_atio()
4378 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in qlt_handle_cmd_for_atio()
4381 if (vha->flags.qpairs_available) { in qlt_handle_cmd_for_atio()
4401 struct scsi_qla_host *vha = sess->vha; in qlt_issue_task_mgmt() local
4402 struct qla_hw_data *ha = vha->hw; in qlt_issue_task_mgmt()
4405 struct qla_qpair_hint *h = &vha->vha_tgt.qla_tgt->qphints[0]; in qlt_issue_task_mgmt()
4409 ql_dbg(ql_dbg_tgt_tmr, vha, 0x10009, in qlt_issue_task_mgmt()
4412 "leak\n", vha->vp_idx); in qlt_issue_task_mgmt()
4426 mcmd->vha = vha; in qlt_issue_task_mgmt()
4434 abort_cmds_for_lun(vha, lun, a->u.isp24.fcp_hdr.s_id); in qlt_issue_task_mgmt()
4437 h = qlt_find_qphint(vha, mcmd->unpacked_lun); in qlt_issue_task_mgmt()
4459 static int qlt_handle_task_mgmt(struct scsi_qla_host *vha, void *iocb) in qlt_handle_task_mgmt() argument
4462 struct qla_hw_data *ha = vha->hw; in qlt_handle_task_mgmt()
4471 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in qlt_handle_task_mgmt()
4485 static int __qlt_abort_task(struct scsi_qla_host *vha, in __qlt_abort_task() argument
4489 struct qla_hw_data *ha = vha->hw; in __qlt_abort_task()
4496 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf05f, in __qlt_abort_task()
4498 vha->vp_idx, __func__); in __qlt_abort_task()
4516 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf060, in __qlt_abort_task()
4518 vha->vp_idx, rc); in __qlt_abort_task()
4527 static int qlt_abort_task(struct scsi_qla_host *vha, in qlt_abort_task() argument
4530 struct qla_hw_data *ha = vha->hw; in qlt_abort_task()
4538 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id); in qlt_abort_task()
4542 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf025, in qlt_abort_task()
4544 "session\n", vha->vp_idx); in qlt_abort_task()
4545 return qlt_sched_sess_work(vha->vha_tgt.qla_tgt, in qlt_abort_task()
4549 return __qlt_abort_task(vha, iocb, sess); in qlt_abort_task()
4555 ql_dbg(ql_dbg_tgt_mgt, fcport->vha, 0xf093, in qlt_logo_completion_handler()
4578 qlt_find_sess_invalidate_other(scsi_qla_host_t *vha, uint64_t wwn, in qlt_find_sess_invalidate_other() argument
4586 list_for_each_entry(other_sess, &vha->vp_fcports, list) { in qlt_find_sess_invalidate_other()
4599 ql_dbg(ql_dbg_tgt_tmr, vha, 0x1000c, in qlt_find_sess_invalidate_other()
4615 ql_dbg(ql_dbg_tgt_tmr, vha, 0xf01b, in qlt_find_sess_invalidate_other()
4630 ql_dbg(ql_dbg_tgt_tmr, vha, 0x1000d, in qlt_find_sess_invalidate_other()
4644 static int abort_cmds_for_s_id(struct scsi_qla_host *vha, port_id_t *s_id) in abort_cmds_for_s_id() argument
4656 spin_lock_irqsave(&vha->cmd_list_lock, flags); in abort_cmds_for_s_id()
4657 list_for_each_entry(op, &vha->qla_sess_op_cmd_list, cmd_list) { in abort_cmds_for_s_id()
4666 list_for_each_entry(op, &vha->unknown_atio_list, cmd_list) { in abort_cmds_for_s_id()
4674 list_for_each_entry(cmd, &vha->qla_cmd_list, cmd_list) { in abort_cmds_for_s_id()
4681 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in abort_cmds_for_s_id()
4686 static int qlt_handle_login(struct scsi_qla_host *vha, in qlt_handle_login() argument
4707 abort_cmds_for_s_id(vha, &port_id); in qlt_handle_login()
4710 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qlt_handle_login()
4711 sess = qlt_find_sess_invalidate_other(vha, wwn, in qlt_handle_login()
4713 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_handle_login()
4721 pla = qlt_plogi_ack_find_add(vha, &port_id, iocb); in qlt_handle_login()
4723 ql_dbg(ql_dbg_disc + ql_dbg_verbose, vha, 0xffff, in qlt_handle_login()
4727 qlt_send_term_imm_notif(vha, iocb, 1); in qlt_handle_login()
4733 qlt_plogi_ack_link(vha, pla, conflict_sess, in qlt_handle_login()
4739 ql_dbg(ql_dbg_disc, vha, 0xffff, in qlt_handle_login()
4743 qla24xx_post_newsess_work(vha, &port_id, in qlt_handle_login()
4748 qla24xx_post_newsess_work(vha, &port_id, in qlt_handle_login()
4755 qlt_plogi_ack_link(vha, pla, sess, QLT_PLOGI_LINK_SAME_WWN); in qlt_handle_login()
4779 ql_dbg(ql_dbg_disc, vha, 0x20f9, in qlt_handle_login()
4785 qlt_plogi_ack_unref(vha, pla); in qlt_handle_login()
4810 ql_dbg(ql_dbg_disc, vha, 0x20f9, in qlt_handle_login()
4825 static int qlt_24xx_handle_els(struct scsi_qla_host *vha, in qlt_24xx_handle_els() argument
4828 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_handle_els()
4829 struct qla_hw_data *ha = vha->hw; in qlt_24xx_handle_els()
4847 ql_dbg(ql_dbg_disc, vha, 0xf026, in qlt_24xx_handle_els()
4849 vha->vp_idx, iocb->u.isp24.port_id[2], in qlt_24xx_handle_els()
4859 res = qlt_handle_login(vha, iocb); in qlt_24xx_handle_els()
4864 sess = qla2x00_find_fcport_by_wwpn(vha, in qlt_24xx_handle_els()
4868 ql_dbg(ql_dbg_disc, vha, 0xffff, in qlt_24xx_handle_els()
4872 qlt_send_term_imm_notif(vha, iocb, 1); in qlt_24xx_handle_els()
4876 res = qlt_handle_login(vha, iocb); in qlt_24xx_handle_els()
4889 sess = qlt_find_sess_invalidate_other(vha, wwn, port_id, in qlt_24xx_handle_els()
4900 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf09b, in qlt_24xx_handle_els()
4905 qlt_send_term_imm_notif(vha, iocb, 1); in qlt_24xx_handle_els()
4944 ql_log(ql_log_warn, sess->vha, 0xf095, in qlt_24xx_handle_els()
4947 qlt_send_term_imm_notif(vha, iocb, 1); in qlt_24xx_handle_els()
4956 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf096, in qlt_24xx_handle_els()
4980 ql_dbg(ql_dbg_disc, vha, 0x20fa, in qlt_24xx_handle_els()
4983 qla24xx_post_nack_work(vha, sess, iocb, in qlt_24xx_handle_els()
4987 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qlt_24xx_handle_els()
4988 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qlt_24xx_handle_els()
4989 qla2xxx_wake_dpc(vha); in qlt_24xx_handle_els()
4993 ql_dbg(ql_dbg_disc, vha, 0x20fb, in qlt_24xx_handle_els()
4996 qla24xx_post_nack_work(vha, sess, iocb, in qlt_24xx_handle_els()
5007 qlt_reset(vha, iocb, QLA_TGT_NEXUS_LOSS); in qlt_24xx_handle_els()
5015 sess = qla2x00_find_fcport_by_loopid(vha, loop_id); in qlt_24xx_handle_els()
5025 res = qlt_reset(vha, iocb, QLA_TGT_NEXUS_LOSS_SESS); in qlt_24xx_handle_els()
5027 ql_dbg(ql_dbg_disc, vha, 0x20fc, in qlt_24xx_handle_els()
5049 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_handle_els()
5056 sess = qla2x00_find_fcport_by_wwpn(vha, in qlt_24xx_handle_els()
5059 ql_dbg(ql_dbg_disc, vha, 0x20fd, in qlt_24xx_handle_els()
5071 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf061, in qlt_24xx_handle_els()
5073 "received\n", vha->vp_idx, iocb->u.isp24.status_subcode); in qlt_24xx_handle_els()
5074 res = qlt_reset(vha, iocb, QLA_TGT_NEXUS_LOSS_SESS); in qlt_24xx_handle_els()
5078 ql_dbg(ql_dbg_disc, vha, 0xf026, in qlt_24xx_handle_els()
5080 vha->vp_idx, iocb->u.isp24.status_subcode, res); in qlt_24xx_handle_els()
5088 static void qlt_handle_imm_notify(struct scsi_qla_host *vha, in qlt_handle_imm_notify() argument
5091 struct qla_hw_data *ha = vha->hw; in qlt_handle_imm_notify()
5100 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf032, in qlt_handle_imm_notify()
5102 vha->vp_idx, le16_to_cpu(iocb->u.isp24.nport_handle), in qlt_handle_imm_notify()
5105 if (qlt_reset(vha, iocb, QLA_TGT_ABORT_ALL) == 0) in qlt_handle_imm_notify()
5112 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_handle_imm_notify()
5113 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf033, in qlt_handle_imm_notify()
5115 "subcode %x)\n", vha->vp_idx, in qlt_handle_imm_notify()
5133 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf034, in qlt_handle_imm_notify()
5135 "%#x, subcode %x)\n", vha->vp_idx, in qlt_handle_imm_notify()
5139 if (qlt_reset(vha, iocb, QLA_TGT_NEXUS_LOSS_SESS) == 0) in qlt_handle_imm_notify()
5145 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf035, in qlt_handle_imm_notify()
5146 "qla_target(%d): Global TPRLO (%x)\n", vha->vp_idx, status); in qlt_handle_imm_notify()
5147 if (qlt_reset(vha, iocb, QLA_TGT_NEXUS_LOSS) == 0) in qlt_handle_imm_notify()
5153 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf036, in qlt_handle_imm_notify()
5154 "qla_target(%d): Port config changed (%x)\n", vha->vp_idx, in qlt_handle_imm_notify()
5156 if (qlt_reset(vha, iocb, QLA_TGT_ABORT_ALL) == 0) in qlt_handle_imm_notify()
5162 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06a, in qlt_handle_imm_notify()
5164 vha->vp_idx); in qlt_handle_imm_notify()
5166 if (qlt_reset(vha, iocb, QLA_TGT_NEXUS_LOSS) == 0) in qlt_handle_imm_notify()
5171 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06b, in qlt_handle_imm_notify()
5174 "resource count)\n", vha->vp_idx); in qlt_handle_imm_notify()
5178 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf037, in qlt_handle_imm_notify()
5180 "L %#x)\n", vha->vp_idx, in qlt_handle_imm_notify()
5184 if (qlt_abort_task(vha, iocb) == 0) in qlt_handle_imm_notify()
5189 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06c, in qlt_handle_imm_notify()
5191 vha->vp_idx, vha->host_no); in qlt_handle_imm_notify()
5195 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf038, in qlt_handle_imm_notify()
5197 vha->vp_idx, iocb->u.isp2x.task_flags); in qlt_handle_imm_notify()
5201 if (qlt_24xx_handle_els(vha, iocb) == 0) in qlt_handle_imm_notify()
5205 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06d, in qlt_handle_imm_notify()
5207 "notify status %x\n", vha->vp_idx, status); in qlt_handle_imm_notify()
5223 struct scsi_qla_host *vha = qpair->vha; in __qlt_send_busy() local
5225 struct qla_hw_data *ha = vha->hw; in __qlt_send_busy()
5238 sess = qla2x00_find_fcport_by_nportid(vha, &id, 1); in __qlt_send_busy()
5248 ql_dbg(ql_dbg_io, vha, 0x3063, in __qlt_send_busy()
5250 "request packet", vha->vp_idx, __func__); in __qlt_send_busy()
5262 ctio24->vp_index = vha->vp_idx; in __qlt_send_busy()
5288 qla2x00_start_iocbs(vha, qpair->req); in __qlt_send_busy()
5298 qlt_alloc_qfull_cmd(struct scsi_qla_host *vha, in qlt_alloc_qfull_cmd() argument
5301 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_alloc_qfull_cmd()
5302 struct qla_hw_data *ha = vha->hw; in qlt_alloc_qfull_cmd()
5310 ql_dbg(ql_dbg_io, vha, 0x300a, in qlt_alloc_qfull_cmd()
5315 if ((vha->hw->tgt.num_qfull_cmds_alloc + 1) > MAX_QFULL_CMDS_ALLOC) { in qlt_alloc_qfull_cmd()
5316 vha->hw->tgt.num_qfull_cmds_dropped++; in qlt_alloc_qfull_cmd()
5317 if (vha->hw->tgt.num_qfull_cmds_dropped > in qlt_alloc_qfull_cmd()
5318 vha->qla_stats.stat_max_qfull_cmds_dropped) in qlt_alloc_qfull_cmd()
5319 vha->qla_stats.stat_max_qfull_cmds_dropped = in qlt_alloc_qfull_cmd()
5320 vha->hw->tgt.num_qfull_cmds_dropped; in qlt_alloc_qfull_cmd()
5322 ql_dbg(ql_dbg_io, vha, 0x3068, in qlt_alloc_qfull_cmd()
5324 vha->vp_idx, __func__, in qlt_alloc_qfull_cmd()
5325 vha->hw->tgt.num_qfull_cmds_dropped); in qlt_alloc_qfull_cmd()
5327 qlt_chk_exch_leak_thresh_hold(vha); in qlt_alloc_qfull_cmd()
5332 (vha, atio->u.isp24.fcp_hdr.s_id); in qlt_alloc_qfull_cmd()
5344 ql_dbg(ql_dbg_io, vha, 0x3009, in qlt_alloc_qfull_cmd()
5346 vha->vp_idx, __func__); in qlt_alloc_qfull_cmd()
5348 vha->hw->tgt.num_qfull_cmds_dropped++; in qlt_alloc_qfull_cmd()
5349 if (vha->hw->tgt.num_qfull_cmds_dropped > in qlt_alloc_qfull_cmd()
5350 vha->qla_stats.stat_max_qfull_cmds_dropped) in qlt_alloc_qfull_cmd()
5351 vha->qla_stats.stat_max_qfull_cmds_dropped = in qlt_alloc_qfull_cmd()
5352 vha->hw->tgt.num_qfull_cmds_dropped; in qlt_alloc_qfull_cmd()
5354 qlt_chk_exch_leak_thresh_hold(vha); in qlt_alloc_qfull_cmd()
5360 qlt_incr_num_pend_cmds(vha); in qlt_alloc_qfull_cmd()
5364 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_alloc_qfull_cmd()
5365 cmd->vha = vha; in qlt_alloc_qfull_cmd()
5378 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_alloc_qfull_cmd()
5379 list_add_tail(&cmd->cmd_list, &vha->hw->tgt.q_full_list); in qlt_alloc_qfull_cmd()
5381 vha->hw->tgt.num_qfull_cmds_alloc++; in qlt_alloc_qfull_cmd()
5382 if (vha->hw->tgt.num_qfull_cmds_alloc > in qlt_alloc_qfull_cmd()
5383 vha->qla_stats.stat_max_qfull_cmds_alloc) in qlt_alloc_qfull_cmd()
5384 vha->qla_stats.stat_max_qfull_cmds_alloc = in qlt_alloc_qfull_cmd()
5385 vha->hw->tgt.num_qfull_cmds_alloc; in qlt_alloc_qfull_cmd()
5386 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_alloc_qfull_cmd()
5392 struct scsi_qla_host *vha = qpair->vha; in qlt_free_qfull_cmds() local
5393 struct qla_hw_data *ha = vha->hw; in qlt_free_qfull_cmds()
5405 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_free_qfull_cmds()
5407 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_free_qfull_cmds()
5411 list_splice_init(&vha->hw->tgt.q_full_list, &q_full_list); in qlt_free_qfull_cmds()
5412 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_free_qfull_cmds()
5426 ql_dbg(ql_dbg_io, vha, 0x3006, in qlt_free_qfull_cmds()
5430 ql_dbg(ql_dbg_io, vha, 0x3007, in qlt_free_qfull_cmds()
5434 ql_dbg(ql_dbg_io, vha, 0x3008, in qlt_free_qfull_cmds()
5442 vha->hw->tgt.num_qfull_cmds_alloc--; in qlt_free_qfull_cmds()
5457 spin_lock_irqsave(&vha->hw->tgt.q_full_lock, flags); in qlt_free_qfull_cmds()
5458 list_splice(&q_full_list, &vha->hw->tgt.q_full_list); in qlt_free_qfull_cmds()
5459 spin_unlock_irqrestore(&vha->hw->tgt.q_full_lock, flags); in qlt_free_qfull_cmds()
5470 struct scsi_qla_host *vha = qpair->vha; in qlt_send_busy() local
5474 qlt_alloc_qfull_cmd(vha, atio, status, 1); in qlt_send_busy()
5478 qlt_chk_qfull_thresh_hold(struct scsi_qla_host *vha, struct qla_qpair *qpair, in qlt_chk_qfull_thresh_hold() argument
5481 struct qla_hw_data *ha = vha->hw; in qlt_chk_qfull_thresh_hold()
5498 static void qlt_24xx_atio_pkt(struct scsi_qla_host *vha, in qlt_24xx_atio_pkt() argument
5501 struct qla_hw_data *ha = vha->hw; in qlt_24xx_atio_pkt()
5502 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_atio_pkt()
5507 ql_dbg(ql_dbg_tgt, vha, 0x3064, in qlt_24xx_atio_pkt()
5522 ql_dbg(ql_dbg_io, vha, 0x3065, in qlt_24xx_atio_pkt()
5525 "sending QUEUE_FULL\n", vha->vp_idx); in qlt_24xx_atio_pkt()
5536 rc = qlt_chk_qfull_thresh_hold(vha, ha->base_qpair, in qlt_24xx_atio_pkt()
5542 rc = qlt_handle_cmd_for_atio(vha, atio); in qlt_24xx_atio_pkt()
5544 rc = qlt_handle_task_mgmt(vha, atio); in qlt_24xx_atio_pkt()
5551 ql_dbg(ql_dbg_tgt, vha, 0xe05f, in qlt_24xx_atio_pkt()
5555 ql_dbg(ql_dbg_tgt, vha, 0xe05f, in qlt_24xx_atio_pkt()
5561 ql_dbg(ql_dbg_tgt, vha, 0xe060, in qlt_24xx_atio_pkt()
5563 vha->vp_idx); in qlt_24xx_atio_pkt()
5568 ql_dbg(ql_dbg_tgt, vha, 0xe060, in qlt_24xx_atio_pkt()
5570 vha->vp_idx); in qlt_24xx_atio_pkt()
5584 ql_dbg(ql_dbg_tgt, vha, 0xe05b, in qlt_24xx_atio_pkt()
5586 "with error status %x\n", vha->vp_idx, in qlt_24xx_atio_pkt()
5591 ql_dbg(ql_dbg_tgt, vha, 0xe02e, "%s", "IMMED_NOTIFY ATIO"); in qlt_24xx_atio_pkt()
5595 qlt_handle_imm_notify(vha, (struct imm_ntfy_from_isp *)atio); in qlt_24xx_atio_pkt()
5602 ql_dbg(ql_dbg_tgt, vha, 0xe05c, in qlt_24xx_atio_pkt()
5604 "type %x\n", vha->vp_idx, atio->u.raw.entry_type); in qlt_24xx_atio_pkt()
5613 static void qlt_response_pkt(struct scsi_qla_host *vha, in qlt_response_pkt() argument
5616 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_response_pkt()
5619 ql_dbg(ql_dbg_tgt, vha, 0xe05d, in qlt_response_pkt()
5621 vha->vp_idx, pkt->entry_type, vha->hw); in qlt_response_pkt()
5635 qlt_do_ctio_completion(vha, rsp, entry->handle, in qlt_response_pkt()
5647 ql_dbg(ql_dbg_tgt, vha, 0xe05e, in qlt_response_pkt()
5649 "status %x received\n", vha->vp_idx, in qlt_response_pkt()
5654 rc = qlt_chk_qfull_thresh_hold(vha, rsp->qpair, atio, 1); in qlt_response_pkt()
5658 rc = qlt_handle_cmd_for_atio(vha, atio); in qlt_response_pkt()
5662 ql_dbg(ql_dbg_tgt, vha, 0xe05f, in qlt_response_pkt()
5666 ql_dbg(ql_dbg_tgt, vha, 0xe05f, in qlt_response_pkt()
5672 ql_dbg(ql_dbg_tgt, vha, 0xe060, in qlt_response_pkt()
5674 vha->vp_idx); in qlt_response_pkt()
5679 ql_dbg(ql_dbg_tgt, vha, 0xe060, in qlt_response_pkt()
5681 vha->vp_idx); in qlt_response_pkt()
5693 qlt_do_ctio_completion(vha, rsp, entry->handle, in qlt_response_pkt()
5702 qlt_do_ctio_completion(vha, rsp, entry->handle, in qlt_response_pkt()
5709 ql_dbg(ql_dbg_tgt, vha, 0xe035, "%s", "IMMED_NOTIFY\n"); in qlt_response_pkt()
5710 qlt_handle_imm_notify(vha, (struct imm_ntfy_from_isp *)pkt); in qlt_response_pkt()
5716 ql_dbg(ql_dbg_tgt, vha, 0xe036, in qlt_response_pkt()
5723 ql_dbg(ql_dbg_tgt, vha, 0xe061, in qlt_response_pkt()
5725 "failed %x\n", vha->vp_idx, in qlt_response_pkt()
5729 ql_dbg(ql_dbg_tgt, vha, 0xe062, in qlt_response_pkt()
5731 vha->vp_idx); in qlt_response_pkt()
5736 ql_dbg(ql_dbg_tgt, vha, 0xe037, in qlt_response_pkt()
5737 "ABTS_RECV_24XX: instance %d\n", vha->vp_idx); in qlt_response_pkt()
5738 qlt_24xx_handle_abts(vha, (struct abts_recv_from_24xx *)pkt); in qlt_response_pkt()
5745 ql_dbg(ql_dbg_tgt, vha, 0xe038, in qlt_response_pkt()
5768 qlt_24xx_retry_term_exchange(vha, in qlt_response_pkt()
5771 ql_dbg(ql_dbg_tgt, vha, 0xe063, in qlt_response_pkt()
5774 vha->vp_idx, entry->compl_status, in qlt_response_pkt()
5779 ql_dbg(ql_dbg_tgt, vha, 0xe064, in qlt_response_pkt()
5781 "received\n", vha->vp_idx); in qlt_response_pkt()
5786 ql_dbg(ql_dbg_tgt, vha, 0xe065, in qlt_response_pkt()
5788 "type %x\n", vha->vp_idx, pkt->entry_type); in qlt_response_pkt()
5797 void qlt_async_event(uint16_t code, struct scsi_qla_host *vha, in qlt_async_event() argument
5800 struct qla_hw_data *ha = vha->hw; in qlt_async_event()
5801 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_async_event()
5821 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03a, in qlt_async_event()
5823 "occurred", vha->vp_idx, code); in qlt_async_event()
5826 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qlt_async_event()
5831 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03b, in qlt_async_event()
5833 "(m[0]=%x, m[1]=%x, m[2]=%x, m[3]=%x)", vha->vp_idx, in qlt_async_event()
5849 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03c, in qlt_async_event()
5851 "(m[0]=%x, m[1]=%x, m[2]=%x, m[3]=%x)", vha->vp_idx, code, in qlt_async_event()
5857 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf017, in qlt_async_event()
5859 vha->vp_idx, in qlt_async_event()
5865 vha->hw->exch_starvation++; in qlt_async_event()
5866 if (vha->hw->exch_starvation > 5) { in qlt_async_event()
5867 ql_log(ql_log_warn, vha, 0xd03a, in qlt_async_event()
5870 vha->hw->exch_starvation = 0; in qlt_async_event()
5871 if (IS_P3P_TYPE(vha->hw)) in qlt_async_event()
5873 &vha->dpc_flags); in qlt_async_event()
5876 &vha->dpc_flags); in qlt_async_event()
5877 qla2xxx_wake_dpc(vha); in qlt_async_event()
5883 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03d, in qlt_async_event()
5886 "m[2]=%x, m[3]=%x)", vha->vp_idx, code, in qlt_async_event()
5892 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03e, in qlt_async_event()
5894 vha->hw->exch_starvation = 0; in qlt_async_event()
5896 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03f, in qlt_async_event()
5905 static fc_port_t *qlt_get_port_database(struct scsi_qla_host *vha, in qlt_get_port_database() argument
5913 fcport = qla2x00_alloc_fcport(vha, GFP_KERNEL); in qlt_get_port_database()
5915 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06f, in qlt_get_port_database()
5917 vha->vp_idx); in qlt_get_port_database()
5923 rc = qla24xx_gpdb_wait(vha, fcport, 0); in qlt_get_port_database()
5925 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf070, in qlt_get_port_database()
5928 "(loop_id=0x%04x)", vha->vp_idx, rc, loop_id); in qlt_get_port_database()
5934 spin_lock_irqsave(&vha->hw->tgt.sess_lock, flags); in qlt_get_port_database()
5935 tfcp = qla2x00_find_fcport_by_wwpn(vha, fcport->port_name, 1); in qlt_get_port_database()
5947 if (vha->hw->current_topology == ISP_CFG_F) in qlt_get_port_database()
5950 list_add_tail(&fcport->list, &vha->vp_fcports); in qlt_get_port_database()
5952 vha->fcport_count++; in qlt_get_port_database()
5960 spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags); in qlt_get_port_database()
5962 switch (vha->host->active_mode) { in qlt_get_port_database()
5966 if (!IS_IIDMA_CAPABLE(vha->hw) || !vha->hw->flags.gpsc_supported) { in qlt_get_port_database()
5967 ql_dbg(ql_dbg_disc, vha, 0x20fe, in qlt_get_port_database()
5969 __func__, __LINE__, fcport->port_name, vha->fcport_count); in qlt_get_port_database()
5970 qla24xx_post_upd_fcport_work(vha, fcport); in qlt_get_port_database()
5972 ql_dbg(ql_dbg_disc, vha, 0x20ff, in qlt_get_port_database()
5974 __func__, __LINE__, fcport->port_name, vha->fcport_count); in qlt_get_port_database()
5975 qla24xx_post_gpsc_work(vha, fcport); in qlt_get_port_database()
5991 static struct fc_port *qlt_make_local_sess(struct scsi_qla_host *vha, in qlt_make_local_sess() argument
6004 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf042, in qlt_make_local_sess()
6010 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_make_local_sess()
6014 atomic_read(&vha->vha_tgt.qla_tgt->tgt_global_resets_count); in qlt_make_local_sess()
6016 rc = qla24xx_get_loop_id(vha, s_id, &loop_id); in qlt_make_local_sess()
6018 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_make_local_sess()
6020 ql_log(ql_log_info, vha, 0xf071, in qlt_make_local_sess()
6023 vha->vp_idx, s_id[0], s_id[1], in qlt_make_local_sess()
6030 qlt_send_first_logo(vha, &logo); in qlt_make_local_sess()
6036 fcport = qlt_get_port_database(vha, loop_id); in qlt_make_local_sess()
6038 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_make_local_sess()
6043 atomic_read(&vha->vha_tgt.qla_tgt->tgt_global_resets_count)) { in qlt_make_local_sess()
6044 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf043, in qlt_make_local_sess()
6046 "(counter was %d, new %d), retrying", vha->vp_idx, in qlt_make_local_sess()
6048 atomic_read(&vha->vha_tgt. in qlt_make_local_sess()
6053 sess = qlt_create_sess(vha, fcport, true); in qlt_make_local_sess()
6055 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_make_local_sess()
6063 struct scsi_qla_host *vha = tgt->vha; in qlt_abort_work() local
6064 struct qla_hw_data *ha = vha->hw; in qlt_abort_work()
6080 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in qlt_abort_work()
6085 sess = qlt_make_local_sess(vha, s_id); in qlt_abort_work()
6098 ql_dbg(ql_dbg_tgt_tmr, vha, 0xf01c, in qlt_abort_work()
6106 rc = __qlt_24xx_handle_abts(vha, &prm->abts, sess); in qlt_abort_work()
6130 struct scsi_qla_host *vha = tgt->vha; in qlt_tmr_work() local
6131 struct qla_hw_data *ha = vha->hw; in qlt_tmr_work()
6146 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_tmr_work()
6150 sess = qlt_make_local_sess(vha, s_id); in qlt_tmr_work()
6163 ql_dbg(ql_dbg_tgt_tmr, vha, 0xf020, in qlt_tmr_work()
6195 struct scsi_qla_host *vha = tgt->vha; in qlt_sess_work_fn() local
6198 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf000, "Sess work (tgt %p)", tgt); in qlt_sess_work_fn()
6304 tgt->vha = base_vha; in qlt_add_target()
6331 int qlt_remove_target(struct qla_hw_data *ha, struct scsi_qla_host *vha) in qlt_remove_target() argument
6333 if (!vha->vha_tgt.qla_tgt) in qlt_remove_target()
6336 if (vha->fc_vport) { in qlt_remove_target()
6337 qlt_release(vha->vha_tgt.qla_tgt); in qlt_remove_target()
6342 qlt_init_term_exchange(vha); in qlt_remove_target()
6344 ql_dbg(ql_dbg_tgt, vha, 0xe03c, "Unregistering target for host %ld(%p)", in qlt_remove_target()
6345 vha->host_no, ha); in qlt_remove_target()
6346 qlt_release(vha->vha_tgt.qla_tgt); in qlt_remove_target()
6362 static void qlt_lport_dump(struct scsi_qla_host *vha, u64 wwpn, in qlt_lport_dump() argument
6369 pr_debug("%02x ", vha->node_name[i]); in qlt_lport_dump()
6373 pr_debug("%02x ", vha->port_name[i]); in qlt_lport_dump()
6397 struct scsi_qla_host *vha; in qlt_lport_register() local
6406 vha = tgt->vha; in qlt_lport_register()
6407 ha = vha->hw; in qlt_lport_register()
6409 host = vha->host; in qlt_lport_register()
6432 ql_dbg(ql_dbg_tgt, vha, 0xe068, in qlt_lport_register()
6437 qlt_lport_dump(vha, phys_wwpn, b); in qlt_lport_register()
6439 if (memcmp(vha->port_name, b, WWN_SIZE)) { in qlt_lport_register()
6443 rc = (*callback)(vha, target_lport_ptr, npiv_wwpn, npiv_wwnn); in qlt_lport_register()
6461 void qlt_lport_deregister(struct scsi_qla_host *vha) in qlt_lport_deregister() argument
6463 struct qla_hw_data *ha = vha->hw; in qlt_lport_deregister()
6464 struct Scsi_Host *sh = vha->host; in qlt_lport_deregister()
6468 vha->vha_tgt.target_lport_ptr = NULL; in qlt_lport_deregister()
6478 static void qlt_set_mode(struct scsi_qla_host *vha) in qlt_set_mode() argument
6483 vha->host->active_mode = MODE_TARGET; in qlt_set_mode()
6486 vha->host->active_mode = MODE_UNKNOWN; in qlt_set_mode()
6489 vha->host->active_mode = MODE_DUAL; in qlt_set_mode()
6497 static void qlt_clear_mode(struct scsi_qla_host *vha) in qlt_clear_mode() argument
6501 vha->host->active_mode = MODE_UNKNOWN; in qlt_clear_mode()
6504 vha->host->active_mode = MODE_INITIATOR; in qlt_clear_mode()
6508 vha->host->active_mode = MODE_INITIATOR; in qlt_clear_mode()
6521 qlt_enable_vha(struct scsi_qla_host *vha) in qlt_enable_vha() argument
6523 struct qla_hw_data *ha = vha->hw; in qlt_enable_vha()
6524 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_enable_vha()
6529 ql_dbg(ql_dbg_tgt, vha, 0xe069, in qlt_enable_vha()
6538 qlt_set_mode(vha); in qlt_enable_vha()
6541 if (vha->vp_idx) { in qlt_enable_vha()
6542 qla24xx_disable_vp(vha); in qlt_enable_vha()
6543 qla24xx_enable_vp(vha); in qlt_enable_vha()
6557 static void qlt_disable_vha(struct scsi_qla_host *vha) in qlt_disable_vha() argument
6559 struct qla_hw_data *ha = vha->hw; in qlt_disable_vha()
6560 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_disable_vha()
6564 ql_dbg(ql_dbg_tgt, vha, 0xe06a, in qlt_disable_vha()
6572 qlt_clear_mode(vha); in qlt_disable_vha()
6575 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qlt_disable_vha()
6576 qla2xxx_wake_dpc(vha); in qlt_disable_vha()
6577 qla2x00_wait_for_hba_online(vha); in qlt_disable_vha()
6586 qlt_vport_create(struct scsi_qla_host *vha, struct qla_hw_data *ha) in qlt_vport_create() argument
6588 vha->vha_tgt.qla_tgt = NULL; in qlt_vport_create()
6590 mutex_init(&vha->vha_tgt.tgt_mutex); in qlt_vport_create()
6591 mutex_init(&vha->vha_tgt.tgt_host_action_mutex); in qlt_vport_create()
6593 qlt_clear_mode(vha); in qlt_vport_create()
6603 qlt_add_target(ha, vha); in qlt_vport_create()
6607 qlt_rff_id(struct scsi_qla_host *vha) in qlt_rff_id() argument
6613 if (qla_tgt_mode_enabled(vha)) { in qlt_rff_id()
6615 } else if (qla_ini_mode_enabled(vha)) { in qlt_rff_id()
6617 } else if (qla_dual_mode_enabled(vha)) in qlt_rff_id()
6633 qlt_init_atio_q_entries(struct scsi_qla_host *vha) in qlt_init_atio_q_entries() argument
6635 struct qla_hw_data *ha = vha->hw; in qlt_init_atio_q_entries()
6639 if (qla_ini_mode_enabled(vha)) in qlt_init_atio_q_entries()
6654 qlt_24xx_process_atio_queue(struct scsi_qla_host *vha, uint8_t ha_locked) in qlt_24xx_process_atio_queue() argument
6656 struct qla_hw_data *ha = vha->hw; in qlt_24xx_process_atio_queue()
6674 ql_log(ql_log_warn, vha, 0xd03c, in qlt_24xx_process_atio_queue()
6684 qlt_24xx_atio_pkt_all_vps(vha, in qlt_24xx_process_atio_queue()
6703 WRT_REG_DWORD(ISP_ATIO_Q_OUT(vha), ha->tgt.atio_ring_index); in qlt_24xx_process_atio_queue()
6707 qlt_24xx_config_rings(struct scsi_qla_host *vha) in qlt_24xx_config_rings() argument
6709 struct qla_hw_data *ha = vha->hw; in qlt_24xx_config_rings()
6716 WRT_REG_DWORD(ISP_ATIO_Q_IN(vha), 0); in qlt_24xx_config_rings()
6717 WRT_REG_DWORD(ISP_ATIO_Q_OUT(vha), 0); in qlt_24xx_config_rings()
6718 RD_REG_DWORD(ISP_ATIO_Q_OUT(vha)); in qlt_24xx_config_rings()
6730 ql_dbg(ql_dbg_init, vha, 0xf072, in qlt_24xx_config_rings()
6739 ql_dbg(ql_dbg_init, vha, 0xf072, in qlt_24xx_config_rings()
6746 qlt_24xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_24xx *nv) in qlt_24xx_config_nvram_stage1() argument
6748 struct qla_hw_data *ha = vha->hw; in qlt_24xx_config_nvram_stage1()
6754 if (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha)) { in qlt_24xx_config_nvram_stage1()
6767 if (qla_tgt_mode_enabled(vha)) in qlt_24xx_config_nvram_stage1()
6776 if (qla_tgt_mode_enabled(vha)) in qlt_24xx_config_nvram_stage1()
6823 if (vha->flags.init_done) in qlt_24xx_config_nvram_stage1()
6824 fc_host_supported_classes(vha->host) = in qlt_24xx_config_nvram_stage1()
6829 if (vha->flags.init_done) in qlt_24xx_config_nvram_stage1()
6830 fc_host_supported_classes(vha->host) = FC_COS_CLASS3; in qlt_24xx_config_nvram_stage1()
6837 qlt_24xx_config_nvram_stage2(struct scsi_qla_host *vha, in qlt_24xx_config_nvram_stage2() argument
6840 struct qla_hw_data *ha = vha->hw; in qlt_24xx_config_nvram_stage2()
6851 if (!vha->flags.init_done) { in qlt_24xx_config_nvram_stage2()
6860 qlt_81xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_81xx *nv) in qlt_81xx_config_nvram_stage1() argument
6862 struct qla_hw_data *ha = vha->hw; in qlt_81xx_config_nvram_stage1()
6868 if (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha)) { in qlt_81xx_config_nvram_stage1()
6881 if (qla_tgt_mode_enabled(vha)) in qlt_81xx_config_nvram_stage1()
6890 if (qla_tgt_mode_enabled(vha)) in qlt_81xx_config_nvram_stage1()
6934 if (vha->flags.init_done) in qlt_81xx_config_nvram_stage1()
6935 fc_host_supported_classes(vha->host) = in qlt_81xx_config_nvram_stage1()
6940 if (vha->flags.init_done) in qlt_81xx_config_nvram_stage1()
6941 fc_host_supported_classes(vha->host) = FC_COS_CLASS3; in qlt_81xx_config_nvram_stage1()
6948 qlt_81xx_config_nvram_stage2(struct scsi_qla_host *vha, in qlt_81xx_config_nvram_stage2() argument
6951 struct qla_hw_data *ha = vha->hw; in qlt_81xx_config_nvram_stage2()
6962 if (!vha->flags.init_done) { in qlt_81xx_config_nvram_stage2()
6982 qlt_modify_vp_config(struct scsi_qla_host *vha, in qlt_modify_vp_config() argument
6986 if (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha)) in qlt_modify_vp_config()
6990 if (qla_tgt_mode_enabled(vha)) in qlt_modify_vp_config()
7031 scsi_qla_host_t *vha; in qla83xx_msix_atio_q() local
7037 vha = pci_get_drvdata(ha->pdev); in qla83xx_msix_atio_q()
7041 qlt_24xx_process_atio_queue(vha, 0); in qla83xx_msix_atio_q()
7053 scsi_qla_host_t *vha = op->vha; in qlt_handle_abts_recv_work() local
7054 struct qla_hw_data *ha = vha->hw; in qlt_handle_abts_recv_work()
7057 if (qla2x00_reset_active(vha) || in qlt_handle_abts_recv_work()
7062 qlt_24xx_process_atio_queue(vha, 0); in qlt_handle_abts_recv_work()
7066 qlt_response_pkt_all_vps(vha, op->rsp, (response_t *)&op->atio); in qlt_handle_abts_recv_work()
7073 qlt_handle_abts_recv(struct scsi_qla_host *vha, struct rsp_que *rsp, in qlt_handle_abts_recv() argument
7084 qlt_response_pkt_all_vps(vha, rsp, pkt); in qlt_handle_abts_recv()
7089 op->vha = vha; in qlt_handle_abts_recv()
7090 op->chip_reset = vha->hw->base_qpair->chip_reset; in qlt_handle_abts_recv()
7135 qlt_update_vp_map(struct scsi_qla_host *vha, int cmd) in qlt_update_vp_map() argument
7144 key = vha->d_id.b24; in qlt_update_vp_map()
7148 vha->hw->tgt.tgt_vp_map[vha->vp_idx].vha = vha; in qlt_update_vp_map()
7151 slot = btree_lookup32(&vha->hw->tgt.host_map, key); in qlt_update_vp_map()
7153 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf018, in qlt_update_vp_map()
7154 "Save vha in host_map %p %06x\n", vha, key); in qlt_update_vp_map()
7155 rc = btree_insert32(&vha->hw->tgt.host_map, in qlt_update_vp_map()
7156 key, vha, GFP_ATOMIC); in qlt_update_vp_map()
7158 ql_log(ql_log_info, vha, 0xd03e, in qlt_update_vp_map()
7163 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf019, in qlt_update_vp_map()
7164 "replace existing vha in host_map %p %06x\n", vha, key); in qlt_update_vp_map()
7165 btree_update32(&vha->hw->tgt.host_map, key, vha); in qlt_update_vp_map()
7168 vha->hw->tgt.tgt_vp_map[vha->vp_idx].vha = NULL; in qlt_update_vp_map()
7171 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01a, in qlt_update_vp_map()
7172 "clear vha in host_map %p %06x\n", vha, key); in qlt_update_vp_map()
7173 slot = btree_lookup32(&vha->hw->tgt.host_map, key); in qlt_update_vp_map()
7175 btree_remove32(&vha->hw->tgt.host_map, key); in qlt_update_vp_map()
7176 vha->d_id.b24 = 0; in qlt_update_vp_map()
7181 void qlt_update_host_map(struct scsi_qla_host *vha, port_id_t id) in qlt_update_host_map() argument
7184 if (!vha->d_id.b24) { in qlt_update_host_map()
7185 vha->d_id = id; in qlt_update_host_map()
7186 qlt_update_vp_map(vha, SET_AL_PA); in qlt_update_host_map()
7187 } else if (vha->d_id.b24 != id.b24) { in qlt_update_host_map()
7188 qlt_update_vp_map(vha, RESET_AL_PA); in qlt_update_host_map()
7189 vha->d_id = id; in qlt_update_host_map()
7190 qlt_update_vp_map(vha, SET_AL_PA); in qlt_update_host_map()