Lines Matching refs:vha
111 static void qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha,
113 static void qlt_alloc_qfull_cmd(struct scsi_qla_host *vha,
115 static void qlt_disable_vha(struct scsi_qla_host *vha);
117 static void qlt_send_notify_ack(struct scsi_qla_host *vha,
132 void qlt_do_generation_tick(struct scsi_qla_host *vha, int *dest) in qlt_do_generation_tick() argument
134 scsi_qla_host_t *base_vha = pci_get_drvdata(vha->hw->pdev); in qlt_do_generation_tick()
156 static inline int qlt_issue_marker(struct scsi_qla_host *vha, int vha_locked) in qlt_issue_marker() argument
159 if (unlikely(vha->marker_needed != 0)) { in qlt_issue_marker()
160 int rc = qla2x00_issue_marker(vha, vha_locked); in qlt_issue_marker()
162 ql_dbg(ql_dbg_tgt, vha, 0xe03d, in qlt_issue_marker()
164 vha->vp_idx); in qlt_issue_marker()
172 struct scsi_qla_host *qlt_find_host_by_d_id(struct scsi_qla_host *vha, in qlt_find_host_by_d_id() argument
175 struct qla_hw_data *ha = vha->hw; in qlt_find_host_by_d_id()
178 if ((vha->d_id.b.area != d_id[1]) || (vha->d_id.b.domain != d_id[0])) in qlt_find_host_by_d_id()
181 if (vha->d_id.b.al_pa == d_id[2]) in qlt_find_host_by_d_id()
182 return vha; in qlt_find_host_by_d_id()
187 return ha->tgt.tgt_vp_map[vp_idx].vha; in qlt_find_host_by_d_id()
193 struct scsi_qla_host *qlt_find_host_by_vp_idx(struct scsi_qla_host *vha, in qlt_find_host_by_vp_idx() argument
196 struct qla_hw_data *ha = vha->hw; in qlt_find_host_by_vp_idx()
198 if (vha->vp_idx == vp_idx) in qlt_find_host_by_vp_idx()
199 return vha; in qlt_find_host_by_vp_idx()
203 return ha->tgt.tgt_vp_map[vp_idx].vha; in qlt_find_host_by_vp_idx()
208 static inline void qlt_incr_num_pend_cmds(struct scsi_qla_host *vha) in qlt_incr_num_pend_cmds() argument
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()
216 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()
220 static inline void qlt_decr_num_pend_cmds(struct scsi_qla_host *vha) in qlt_decr_num_pend_cmds() argument
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()
229 static void qlt_24xx_atio_pkt_all_vps(struct scsi_qla_host *vha, in qlt_24xx_atio_pkt_all_vps() argument
232 ql_dbg(ql_dbg_tgt, vha, 0xe072, in qlt_24xx_atio_pkt_all_vps()
234 __func__, vha->vp_idx, atio->u.raw.entry_type, in qlt_24xx_atio_pkt_all_vps()
240 struct scsi_qla_host *host = qlt_find_host_by_d_id(vha, in qlt_24xx_atio_pkt_all_vps()
243 ql_dbg(ql_dbg_tgt, vha, 0xe03e, in qlt_24xx_atio_pkt_all_vps()
245 "with unknown d_id %x:%x:%x\n", vha->vp_idx, in qlt_24xx_atio_pkt_all_vps()
257 struct scsi_qla_host *host = vha; in qlt_24xx_atio_pkt_all_vps()
263 host = qlt_find_host_by_vp_idx(vha, in qlt_24xx_atio_pkt_all_vps()
266 ql_dbg(ql_dbg_tgt, vha, 0xe03f, in qlt_24xx_atio_pkt_all_vps()
270 vha->vp_idx, entry->u.isp24.vp_index); in qlt_24xx_atio_pkt_all_vps()
279 ql_dbg(ql_dbg_tgt, vha, 0xe040, in qlt_24xx_atio_pkt_all_vps()
281 "type %x\n", vha->vp_idx, atio->u.raw.entry_type); in qlt_24xx_atio_pkt_all_vps()
288 void qlt_response_pkt_all_vps(struct scsi_qla_host *vha, response_t *pkt) in qlt_response_pkt_all_vps() argument
292 ql_dbg(ql_dbg_tgt, vha, 0xe073, in qlt_response_pkt_all_vps()
294 vha->vp_idx, __func__); in qlt_response_pkt_all_vps()
298 struct scsi_qla_host *host = qlt_find_host_by_vp_idx(vha, in qlt_response_pkt_all_vps()
301 ql_dbg(ql_dbg_tgt, vha, 0xe041, in qlt_response_pkt_all_vps()
304 vha->vp_idx, entry->vp_index); in qlt_response_pkt_all_vps()
313 struct scsi_qla_host *host = vha; in qlt_response_pkt_all_vps()
317 host = qlt_find_host_by_vp_idx(vha, entry->u.isp24.vp_index); in qlt_response_pkt_all_vps()
319 ql_dbg(ql_dbg_tgt, vha, 0xe042, in qlt_response_pkt_all_vps()
322 vha->vp_idx, entry->u.isp24.vp_index); in qlt_response_pkt_all_vps()
331 struct scsi_qla_host *host = vha; in qlt_response_pkt_all_vps()
335 host = qlt_find_host_by_vp_idx(vha, in qlt_response_pkt_all_vps()
338 ql_dbg(ql_dbg_tgt, vha, 0xe043, in qlt_response_pkt_all_vps()
342 "vp_index %d\n", vha->vp_idx, in qlt_response_pkt_all_vps()
355 struct scsi_qla_host *host = qlt_find_host_by_vp_idx(vha, in qlt_response_pkt_all_vps()
358 ql_dbg(ql_dbg_tgt, vha, 0xe044, in qlt_response_pkt_all_vps()
361 "vp_index %d\n", vha->vp_idx, entry->vp_index); in qlt_response_pkt_all_vps()
372 struct scsi_qla_host *host = qlt_find_host_by_vp_idx(vha, in qlt_response_pkt_all_vps()
375 ql_dbg(ql_dbg_tgt, vha, 0xe045, in qlt_response_pkt_all_vps()
378 "vp_index %d\n", vha->vp_idx, entry->vp_index); in qlt_response_pkt_all_vps()
386 qlt_response_pkt(vha, pkt); in qlt_response_pkt_all_vps()
397 struct scsi_qla_host *vha = sess->vha; in qlt_free_session_done() local
398 struct qla_hw_data *ha = vha->hw; in qlt_free_session_done()
403 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf084, in qlt_free_session_done()
420 fcport.vha = vha; in qlt_free_session_done()
423 rc = qla2x00_post_async_logout_work(vha, &fcport, NULL); in qlt_free_session_done()
425 ql_log(ql_log_warn, vha, 0xf085, in qlt_free_session_done()
443 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf086, in qlt_free_session_done()
451 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf087, in qlt_free_session_done()
459 qlt_send_notify_ack(vha, &sess->tm_iocb, in qlt_free_session_done()
466 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf001, in qlt_free_session_done()
482 struct scsi_qla_host *vha = sess->vha; in qlt_unreg_sess() local
484 vha->hw->tgt.tgt_ops->clear_nacl_from_fcport_map(sess); in qlt_unreg_sess()
496 static int qlt_reset(struct scsi_qla_host *vha, void *iocb, int mcmd) in qlt_reset() argument
498 struct qla_hw_data *ha = vha->hw; in qlt_reset()
509 atomic_inc(&vha->vha_tgt.qla_tgt->tgt_global_resets_count); in qlt_reset()
510 qlt_clear_tgt_db(vha->vha_tgt.qla_tgt); in qlt_reset()
526 ql_dbg(ql_dbg_tgt, vha, 0xe046, in qlt_reset()
528 "command %x in %s", vha->vp_idx, in qlt_reset()
537 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id); in qlt_reset()
540 ql_dbg(ql_dbg_tgt, vha, 0xe000, in qlt_reset()
547 ql_dbg(ql_dbg_tgt, vha, 0xe047, in qlt_reset()
549 "loop_id %d)\n", vha->host_no, sess, sess->port_name, in qlt_reset()
574 ql_dbg(ql_dbg_tgt, sess->vha, 0xe001, in qlt_schedule_sess_for_deletion()
588 ql_dbg(ql_dbg_tgt, sess->vha, 0xe048, in qlt_schedule_sess_for_deletion()
591 sess->vha->vp_idx, sess->port_name, sess->loop_id, in qlt_schedule_sess_for_deletion()
614 static int qla24xx_get_loop_id(struct scsi_qla_host *vha, const uint8_t *s_id, in qla24xx_get_loop_id() argument
617 struct qla_hw_data *ha = vha->hw; in qla24xx_get_loop_id()
627 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf044, in qla24xx_get_loop_id()
629 vha->vp_idx, qla2x00_gid_list_size(ha)); in qla24xx_get_loop_id()
634 rc = qla2x00_get_id_list(vha, gid_list, gid_list_dma, &entries); in qla24xx_get_loop_id()
636 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf045, in qla24xx_get_loop_id()
638 vha->vp_idx, rc); in qla24xx_get_loop_id()
676 struct scsi_qla_host *vha = tgt->vha; in qlt_del_sess_work_fn() local
677 struct qla_hw_data *ha = vha->hw; in qlt_del_sess_work_fn()
691 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf004, in qlt_del_sess_work_fn()
710 struct scsi_qla_host *vha, in qlt_create_sess() argument
714 struct qla_hw_data *ha = vha->hw; in qlt_create_sess()
721 list_for_each_entry(sess, &vha->vha_tgt.qla_tgt->sess_list, in qlt_create_sess()
724 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf005, in qlt_create_sess()
750 qlt_do_generation_tick(vha, &sess->generation); in qlt_create_sess()
761 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf04a, in qlt_create_sess()
763 "from port %8phC will be refused", vha->vp_idx, in qlt_create_sess()
768 sess->tgt = vha->vha_tgt.qla_tgt; in qlt_create_sess()
769 sess->vha = vha; in qlt_create_sess()
782 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf006, in qlt_create_sess()
784 sess, vha->vha_tgt.qla_tgt); in qlt_create_sess()
795 if (ha->tgt.tgt_ops->check_initiator_node_acl(vha, in qlt_create_sess()
811 list_add_tail(&sess->sess_list_entry, &vha->vha_tgt.qla_tgt->sess_list); in qlt_create_sess()
812 vha->vha_tgt.qla_tgt->sess_count++; in qlt_create_sess()
813 qlt_do_generation_tick(vha, &sess->generation); in qlt_create_sess()
816 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf04b, in qlt_create_sess()
819 vha->vp_idx, local ? "local " : "", fcport->port_name, in qlt_create_sess()
829 void qlt_fc_port_added(struct scsi_qla_host *vha, fc_port_t *fcport) in qlt_fc_port_added() argument
831 struct qla_hw_data *ha = vha->hw; in qlt_fc_port_added()
832 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_fc_port_added()
836 if (!vha->hw->tgt.tgt_ops) in qlt_fc_port_added()
842 if (qla_ini_mode_enabled(vha)) in qlt_fc_port_added()
854 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_fc_port_added()
855 sess = qlt_create_sess(vha, fcport, false); in qlt_fc_port_added()
856 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_fc_port_added()
869 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf04c, in qlt_fc_port_added()
871 "(loop ID %d) reappeared\n", vha->vp_idx, in qlt_fc_port_added()
875 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf007, in qlt_fc_port_added()
883 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf04d, in qlt_fc_port_added()
885 "port %8phC (loop ID %d) became global\n", vha->vp_idx, in qlt_fc_port_added()
898 qlt_fc_port_deleted(struct scsi_qla_host *vha, fc_port_t *fcport, int max_gen) in qlt_fc_port_deleted() argument
900 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_fc_port_deleted()
903 if (!vha->hw->tgt.tgt_ops) in qlt_fc_port_deleted()
918 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf092, in qlt_fc_port_deleted()
926 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf008, "qla_tgt_fc_port_deleted %p", sess); in qlt_fc_port_deleted()
942 ql_dbg(ql_dbg_tgt, tgt->vha, 0xe002, in test_tgt_sess_count()
954 struct scsi_qla_host *vha = tgt->vha; in qlt_stop_phase1() local
959 if (!vha->fc_vport) { in qlt_stop_phase1()
960 struct Scsi_Host *sh = vha->host; in qlt_stop_phase1()
974 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf04e, in qlt_stop_phase1()
980 ql_dbg(ql_dbg_tgt, vha, 0xe003, "Stopping target for host %ld(%p)\n", in qlt_stop_phase1()
981 vha->host_no, vha); in qlt_stop_phase1()
986 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_stop_phase1()
991 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_stop_phase1()
996 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf009, in qlt_stop_phase1()
1006 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf00a, in qlt_stop_phase1()
1014 if (!ha->flags.host_shutting_down && qla_tgt_mode_enabled(vha)) in qlt_stop_phase1()
1015 qlt_disable_vha(vha); in qlt_stop_phase1()
1027 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); in qlt_stop_phase2() local
1031 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf04f, in qlt_stop_phase2()
1037 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf00b, in qlt_stop_phase2()
1041 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_stop_phase2()
1051 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_stop_phase2()
1053 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf00c, "Stop of tgt %p finished", in qlt_stop_phase2()
1061 scsi_qla_host_t *vha = tgt->vha; in qlt_release() local
1063 if ((vha->vha_tgt.qla_tgt != NULL) && !tgt->tgt_stopped) in qlt_release()
1066 vha->vha_tgt.qla_tgt = NULL; in qlt_release()
1068 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf00d, in qlt_release()
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()
1109 static void qlt_send_notify_ack(struct scsi_qla_host *vha, in qlt_send_notify_ack() argument
1114 struct qla_hw_data *ha = vha->hw; in qlt_send_notify_ack()
1118 ql_dbg(ql_dbg_tgt, vha, 0xe004, "Sending NOTIFY_ACK (ha=%p)\n", ha); in qlt_send_notify_ack()
1121 if (qlt_issue_marker(vha, 1) != QLA_SUCCESS) in qlt_send_notify_ack()
1124 pkt = (request_t *)qla2x00_alloc_iocbs(vha, NULL); in qlt_send_notify_ack()
1126 ql_dbg(ql_dbg_tgt, vha, 0xe049, in qlt_send_notify_ack()
1128 "request packet\n", vha->vp_idx, __func__); in qlt_send_notify_ack()
1132 if (vha->vha_tgt.qla_tgt != NULL) in qlt_send_notify_ack()
1133 vha->vha_tgt.qla_tgt->notify_ack_expected++; in qlt_send_notify_ack()
1158 ql_dbg(ql_dbg_tgt, vha, 0xe005, in qlt_send_notify_ack()
1160 vha->vp_idx, nack->u.isp24.status); in qlt_send_notify_ack()
1164 qla2x00_start_iocbs(vha, vha->req); in qlt_send_notify_ack()
1170 static void qlt_24xx_send_abts_resp(struct scsi_qla_host *vha, in qlt_24xx_send_abts_resp() argument
1174 struct qla_hw_data *ha = vha->hw; in qlt_24xx_send_abts_resp()
1179 ql_dbg(ql_dbg_tgt, vha, 0xe006, in qlt_24xx_send_abts_resp()
1184 if (qlt_issue_marker(vha, 1) != QLA_SUCCESS) in qlt_24xx_send_abts_resp()
1187 resp = (struct abts_resp_to_24xx *)qla2x00_alloc_iocbs_ready(vha, NULL); in qlt_24xx_send_abts_resp()
1189 ql_dbg(ql_dbg_tgt, vha, 0xe04a, in qlt_24xx_send_abts_resp()
1191 "request packet", vha->vp_idx, __func__); in qlt_24xx_send_abts_resp()
1198 resp->vp_index = vha->vp_idx; in qlt_24xx_send_abts_resp()
1239 vha->vha_tgt.qla_tgt->abts_resp_expected++; in qlt_24xx_send_abts_resp()
1243 qla2x00_start_iocbs(vha, vha->req); in qlt_24xx_send_abts_resp()
1249 static void qlt_24xx_retry_term_exchange(struct scsi_qla_host *vha, in qlt_24xx_retry_term_exchange() argument
1254 ql_dbg(ql_dbg_tgt, vha, 0xe007, in qlt_24xx_retry_term_exchange()
1255 "Sending retry TERM EXCH CTIO7 (ha=%p)\n", vha->hw); in qlt_24xx_retry_term_exchange()
1257 if (qlt_issue_marker(vha, 1) != QLA_SUCCESS) in qlt_24xx_retry_term_exchange()
1260 ctio = (struct ctio7_to_24xx *)qla2x00_alloc_iocbs_ready(vha, NULL); in qlt_24xx_retry_term_exchange()
1262 ql_dbg(ql_dbg_tgt, vha, 0xe04b, in qlt_24xx_retry_term_exchange()
1264 "request packet\n", vha->vp_idx, __func__); in qlt_24xx_retry_term_exchange()
1278 ctio->vp_index = vha->vp_idx; in qlt_24xx_retry_term_exchange()
1289 qla2x00_start_iocbs(vha, vha->req); in qlt_24xx_retry_term_exchange()
1291 qlt_24xx_send_abts_resp(vha, (struct abts_recv_from_24xx *)entry, in qlt_24xx_retry_term_exchange()
1295 static int abort_cmd_for_tag(struct scsi_qla_host *vha, uint32_t tag) in abort_cmd_for_tag() argument
1300 spin_lock(&vha->cmd_list_lock); in abort_cmd_for_tag()
1302 list_for_each_entry(op, &vha->qla_sess_op_cmd_list, cmd_list) { in abort_cmd_for_tag()
1305 spin_unlock(&vha->cmd_list_lock); in abort_cmd_for_tag()
1310 list_for_each_entry(cmd, &vha->qla_cmd_list, cmd_list) { in abort_cmd_for_tag()
1313 spin_unlock(&vha->cmd_list_lock); in abort_cmd_for_tag()
1318 spin_unlock(&vha->cmd_list_lock); in abort_cmd_for_tag()
1327 static void abort_cmds_for_lun(struct scsi_qla_host *vha, in abort_cmds_for_lun() argument
1335 spin_lock(&vha->cmd_list_lock); in abort_cmds_for_lun()
1336 list_for_each_entry(op, &vha->qla_sess_op_cmd_list, cmd_list) { in abort_cmds_for_lun()
1346 list_for_each_entry(cmd, &vha->qla_cmd_list, cmd_list) { in abort_cmds_for_lun()
1356 spin_unlock(&vha->cmd_list_lock); in abort_cmds_for_lun()
1360 static int __qlt_24xx_handle_abts(struct scsi_qla_host *vha, in __qlt_24xx_handle_abts() argument
1363 struct qla_hw_data *ha = vha->hw; in __qlt_24xx_handle_abts()
1385 if (abort_cmd_for_tag(vha, abts->exchange_addr_to_abort)) { in __qlt_24xx_handle_abts()
1387 qlt_24xx_send_abts_resp(vha, abts, FCP_TMF_CMPL, false); in __qlt_24xx_handle_abts()
1390 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf081, in __qlt_24xx_handle_abts()
1397 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf00f, in __qlt_24xx_handle_abts()
1399 vha->vp_idx, abts->exchange_addr_to_abort); in __qlt_24xx_handle_abts()
1403 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf051, in __qlt_24xx_handle_abts()
1405 vha->vp_idx, __func__); in __qlt_24xx_handle_abts()
1412 mcmd->reset_count = vha->hw->chip_reset; in __qlt_24xx_handle_abts()
1417 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf052, in __qlt_24xx_handle_abts()
1419 " failed: %d", vha->vp_idx, rc); in __qlt_24xx_handle_abts()
1430 static void qlt_24xx_handle_abts(struct scsi_qla_host *vha, in qlt_24xx_handle_abts() argument
1433 struct qla_hw_data *ha = vha->hw; in qlt_24xx_handle_abts()
1440 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf053, in qlt_24xx_handle_abts()
1442 "supported\n", vha->vp_idx); in qlt_24xx_handle_abts()
1443 qlt_24xx_send_abts_resp(vha, abts, FCP_TMF_REJECTED, false); in qlt_24xx_handle_abts()
1448 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf010, in qlt_24xx_handle_abts()
1450 "Address received\n", vha->vp_idx); in qlt_24xx_handle_abts()
1451 qlt_24xx_send_abts_resp(vha, abts, FCP_TMF_REJECTED, false); in qlt_24xx_handle_abts()
1455 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf011, in qlt_24xx_handle_abts()
1457 "tag=%d, param=%x)\n", vha->vp_idx, abts->fcp_hdr_le.s_id[2], in qlt_24xx_handle_abts()
1465 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_24xx_handle_abts()
1467 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf012, in qlt_24xx_handle_abts()
1469 vha->vp_idx); in qlt_24xx_handle_abts()
1470 rc = qlt_sched_sess_work(vha->vha_tgt.qla_tgt, in qlt_24xx_handle_abts()
1473 qlt_24xx_send_abts_resp(vha, abts, FCP_TMF_REJECTED, in qlt_24xx_handle_abts()
1480 qlt_24xx_send_abts_resp(vha, abts, FCP_TMF_REJECTED, false); in qlt_24xx_handle_abts()
1484 rc = __qlt_24xx_handle_abts(vha, abts, sess); in qlt_24xx_handle_abts()
1486 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf054, in qlt_24xx_handle_abts()
1488 vha->vp_idx, rc); in qlt_24xx_handle_abts()
1489 qlt_24xx_send_abts_resp(vha, abts, FCP_TMF_REJECTED, false); in qlt_24xx_handle_abts()
1553 struct scsi_qla_host *vha = mcmd->sess->vha; in qlt_xmit_tm_rsp() local
1554 struct qla_hw_data *ha = vha->hw; in qlt_xmit_tm_rsp()
1557 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf013, in qlt_xmit_tm_rsp()
1563 if (qla2x00_reset_active(vha) || mcmd->reset_count != ha->chip_reset) { in qlt_xmit_tm_rsp()
1568 ql_dbg(ql_dbg_async, vha, 0xe100, in qlt_xmit_tm_rsp()
1570 qla2x00_reset_active(vha), mcmd->reset_count, in qlt_xmit_tm_rsp()
1578 qlt_send_notify_ack(vha, &mcmd->orig_iocb.imm_ntfy, in qlt_xmit_tm_rsp()
1582 qlt_24xx_send_abts_resp(vha, &mcmd->orig_iocb.abts, in qlt_xmit_tm_rsp()
1585 qlt_24xx_send_task_mgmt_ctio(vha, mcmd, in qlt_xmit_tm_rsp()
1656 ql_dbg(ql_dbg_tgt, prm->cmd->vha, 0xe04d, in qlt_pci_map_calc_cnt()
1662 static void qlt_unmap_sg(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd) in qlt_unmap_sg() argument
1664 struct qla_hw_data *ha = vha->hw; in qlt_unmap_sg()
1683 static int qlt_check_reserve_free_req(struct scsi_qla_host *vha, in qlt_check_reserve_free_req() argument
1688 if (vha->req->cnt < (req_cnt + 2)) { in qlt_check_reserve_free_req()
1689 cnt = (uint16_t)RD_REG_DWORD(vha->req->req_q_out); in qlt_check_reserve_free_req()
1690 cnt_in = (uint16_t)RD_REG_DWORD(vha->req->req_q_in); in qlt_check_reserve_free_req()
1692 if (vha->req->ring_index < cnt) in qlt_check_reserve_free_req()
1693 vha->req->cnt = cnt - vha->req->ring_index; in qlt_check_reserve_free_req()
1695 vha->req->cnt = vha->req->length - in qlt_check_reserve_free_req()
1696 (vha->req->ring_index - cnt); in qlt_check_reserve_free_req()
1699 if (unlikely(vha->req->cnt < (req_cnt + 2))) { in qlt_check_reserve_free_req()
1700 ql_dbg(ql_dbg_io, vha, 0x305a, in qlt_check_reserve_free_req()
1702 vha->vp_idx, vha->req->ring_index, in qlt_check_reserve_free_req()
1703 vha->req->cnt, req_cnt, cnt, cnt_in, vha->req->length); in qlt_check_reserve_free_req()
1706 vha->req->cnt -= req_cnt; in qlt_check_reserve_free_req()
1714 static inline void *qlt_get_req_pkt(struct scsi_qla_host *vha) in qlt_get_req_pkt() argument
1717 vha->req->ring_index++; in qlt_get_req_pkt()
1718 if (vha->req->ring_index == vha->req->length) { in qlt_get_req_pkt()
1719 vha->req->ring_index = 0; in qlt_get_req_pkt()
1720 vha->req->ring_ptr = vha->req->ring; in qlt_get_req_pkt()
1722 vha->req->ring_ptr++; in qlt_get_req_pkt()
1724 return (cont_entry_t *)vha->req->ring_ptr; in qlt_get_req_pkt()
1728 static inline uint32_t qlt_make_handle(struct scsi_qla_host *vha) in qlt_make_handle() argument
1730 struct qla_hw_data *ha = vha->hw; in qlt_make_handle()
1740 ql_dbg(ql_dbg_io, vha, 0x305b, in qlt_make_handle()
1742 "empty cmd slots in ha %p\n", vha->vp_idx, ha); in qlt_make_handle()
1758 struct scsi_qla_host *vha) in qlt_24xx_build_ctio_pkt() argument
1762 struct qla_hw_data *ha = vha->hw; in qlt_24xx_build_ctio_pkt()
1766 pkt = (struct ctio7_to_24xx *)vha->req->ring_ptr; in qlt_24xx_build_ctio_pkt()
1772 pkt->vp_index = vha->vp_idx; in qlt_24xx_build_ctio_pkt()
1774 h = qlt_make_handle(vha); in qlt_24xx_build_ctio_pkt()
1805 struct scsi_qla_host *vha) in qlt_load_cont_data_segments() argument
1814 (cont_a64_entry_t *)qlt_get_req_pkt(vha); in qlt_load_cont_data_segments()
1864 struct scsi_qla_host *vha) in qlt_load_data_segments() argument
1905 qlt_load_cont_data_segments(prm, vha); in qlt_load_data_segments()
1921 struct scsi_qla_host *vha = tgt->vha; in qlt_pre_xmit_response() local
1922 struct qla_hw_data *ha = vha->hw; in qlt_pre_xmit_response()
1936 if (qlt_issue_marker(vha, 0) != QLA_SUCCESS) in qlt_pre_xmit_response()
1948 ql_dbg(ql_dbg_io + ql_dbg_verbose, vha, 0x305c, in qlt_pre_xmit_response()
1956 ql_dbg(ql_dbg_io, vha, 0x305d, in qlt_pre_xmit_response()
2031 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf015, in qlt_check_srr_debug()
2053 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf016, in qlt_check_srr_debug()
2066 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf017, in qlt_check_srr_debug()
2073 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf018, in qlt_check_srr_debug()
2101 ql_dbg(ql_dbg_tgt, prm->cmd->vha, 0xe017, in qlt_24xx_init_ctio_to_isp()
2127 ql_dbg(ql_dbg_tgt, vha, 0xe04f, in qlt_24xx_init_ctio_to_isp()
2258 qlt_build_ctio_crc2_pkt(struct qla_tgt_prm *prm, scsi_qla_host_t *vha) in qlt_build_ctio_crc2_pkt() argument
2277 ha = vha->hw; in qlt_build_ctio_crc2_pkt()
2279 pkt = (struct ctio_crc2_to_fw *)vha->req->ring_ptr; in qlt_build_ctio_crc2_pkt()
2283 ql_dbg(ql_dbg_tgt, vha, 0xe071, in qlt_build_ctio_crc2_pkt()
2285 vha->vp_idx, __func__, se_cmd, se_cmd->prot_op, in qlt_build_ctio_crc2_pkt()
2350 pkt->vp_index = vha->vp_idx; in qlt_build_ctio_crc2_pkt()
2352 h = qlt_make_handle(vha); in qlt_build_ctio_crc2_pkt()
2475 struct scsi_qla_host *vha = cmd->vha; in qlt_xmit_response() local
2476 struct qla_hw_data *ha = vha->hw; in qlt_xmit_response()
2488 qlt_abort_cmd_on_host_reset(cmd->vha, cmd); in qlt_xmit_response()
2490 qlt_send_term_exchange(vha, cmd, &cmd->atio, 1); in qlt_xmit_response()
2499 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe018, in qlt_xmit_response()
2513 if (qla2x00_reset_active(vha) || cmd->reset_count != ha->chip_reset) { in qlt_xmit_response()
2519 qlt_abort_cmd_on_host_reset(cmd->vha, cmd); in qlt_xmit_response()
2520 ql_dbg(ql_dbg_async, vha, 0xe101, in qlt_xmit_response()
2522 qla2x00_reset_active(vha), cmd->reset_count, in qlt_xmit_response()
2529 res = qlt_check_reserve_free_req(vha, full_req_cnt); in qlt_xmit_response()
2534 res = qlt_build_ctio_crc2_pkt(&prm, vha); in qlt_xmit_response()
2536 res = qlt_24xx_build_ctio_pkt(&prm, vha); in qlt_xmit_response()
2538 vha->req->cnt += full_req_cnt; in qlt_xmit_response()
2550 qlt_load_data_segments(&prm, vha); in qlt_xmit_response()
2575 (struct ctio7_to_24xx *)qlt_get_req_pkt(vha); in qlt_xmit_response()
2577 ql_dbg(ql_dbg_io, vha, 0x305e, in qlt_xmit_response()
2615 qla2x00_start_iocbs(vha, vha->req); in qlt_xmit_response()
2621 qlt_unmap_sg(vha, cmd); in qlt_xmit_response()
2631 struct scsi_qla_host *vha = cmd->vha; in qlt_rdy_to_xfer() local
2632 struct qla_hw_data *ha = vha->hw; in qlt_rdy_to_xfer()
2645 if (qlt_issue_marker(vha, 0) != QLA_SUCCESS) in qlt_rdy_to_xfer()
2654 if (qla2x00_reset_active(vha) || (cmd->reset_count != ha->chip_reset) || in qlt_rdy_to_xfer()
2661 qlt_abort_cmd_on_host_reset(cmd->vha, cmd); in qlt_rdy_to_xfer()
2662 ql_dbg(ql_dbg_async, vha, 0xe102, in qlt_rdy_to_xfer()
2664 qla2x00_reset_active(vha), cmd->reset_count, in qlt_rdy_to_xfer()
2671 res = qlt_check_reserve_free_req(vha, prm.req_cnt); in qlt_rdy_to_xfer()
2675 res = qlt_build_ctio_crc2_pkt(&prm, vha); in qlt_rdy_to_xfer()
2677 res = qlt_24xx_build_ctio_pkt(&prm, vha); in qlt_rdy_to_xfer()
2680 vha->req->cnt += prm.req_cnt; in qlt_rdy_to_xfer()
2689 qlt_load_data_segments(&prm, vha); in qlt_rdy_to_xfer()
2696 qla2x00_start_iocbs(vha, vha->req); in qlt_rdy_to_xfer()
2702 qlt_unmap_sg(vha, cmd); in qlt_rdy_to_xfer()
2715 qlt_handle_dif_error(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd, in qlt_handle_dif_error() argument
2733 ql_dbg(ql_dbg_tgt, vha, 0xe075, in qlt_handle_dif_error()
2736 ql_dbg(ql_dbg_tgt, vha, 0xf075, in qlt_handle_dif_error()
2755 ql_dbg(ql_dbg_tgt, vha, 0xf074, in qlt_handle_dif_error()
2778 ql_log(ql_log_warn, vha, 0xf076, in qlt_handle_dif_error()
2807 ql_log(ql_log_warn, vha, 0xe076, in qlt_handle_dif_error()
2820 ql_log(ql_log_warn, vha, 0xe077, in qlt_handle_dif_error()
2833 ql_log(ql_log_warn, vha, 0xe078, in qlt_handle_dif_error()
2847 static int __qlt_send_term_imm_notif(struct scsi_qla_host *vha, in __qlt_send_term_imm_notif() argument
2851 struct qla_hw_data *ha = vha->hw; in __qlt_send_term_imm_notif()
2855 ql_dbg(ql_dbg_tgt_tmr, vha, 0xe01c, in __qlt_send_term_imm_notif()
2858 pkt = (request_t *)qla2x00_alloc_iocbs_ready(vha, NULL); in __qlt_send_term_imm_notif()
2860 ql_dbg(ql_dbg_tgt, vha, 0xe080, in __qlt_send_term_imm_notif()
2862 "request packet\n", vha->vp_idx, __func__); in __qlt_send_term_imm_notif()
2892 qla2x00_start_iocbs(vha, vha->req); in __qlt_send_term_imm_notif()
2896 static void qlt_send_term_imm_notif(struct scsi_qla_host *vha, in qlt_send_term_imm_notif() argument
2902 if (qlt_issue_marker(vha, ha_locked) < 0) in qlt_send_term_imm_notif()
2906 rc = __qlt_send_term_imm_notif(vha, imm); in qlt_send_term_imm_notif()
2910 qlt_alloc_qfull_cmd(vha, imm, 0, 0); in qlt_send_term_imm_notif()
2915 spin_lock_irqsave(&vha->hw->hardware_lock, flags); in qlt_send_term_imm_notif()
2916 rc = __qlt_send_term_imm_notif(vha, imm); in qlt_send_term_imm_notif()
2920 qlt_alloc_qfull_cmd(vha, imm, 0, 0); in qlt_send_term_imm_notif()
2925 spin_unlock_irqrestore(&vha->hw->hardware_lock, flags); in qlt_send_term_imm_notif()
2930 static int __qlt_send_term_exchange(struct scsi_qla_host *vha, in __qlt_send_term_exchange() argument
2935 struct qla_hw_data *ha = vha->hw; in __qlt_send_term_exchange()
2940 ql_dbg(ql_dbg_tgt, vha, 0xe01c, "Sending TERM EXCH CTIO (ha=%p)\n", ha); in __qlt_send_term_exchange()
2942 pkt = (request_t *)qla2x00_alloc_iocbs_ready(vha, NULL); in __qlt_send_term_exchange()
2944 ql_dbg(ql_dbg_tgt, vha, 0xe050, in __qlt_send_term_exchange()
2946 "request packet\n", vha->vp_idx, __func__); in __qlt_send_term_exchange()
2952 ql_dbg(ql_dbg_tgt, vha, 0xe051, in __qlt_send_term_exchange()
2954 "incorrect state %d\n", vha->vp_idx, cmd, in __qlt_send_term_exchange()
2967 ctio24->vp_index = vha->vp_idx; in __qlt_send_term_exchange()
2987 qla2x00_start_iocbs(vha, vha->req); in __qlt_send_term_exchange()
2991 static void qlt_send_term_exchange(struct scsi_qla_host *vha, in qlt_send_term_exchange() argument
2997 if (qlt_issue_marker(vha, ha_locked) < 0) in qlt_send_term_exchange()
3001 rc = __qlt_send_term_exchange(vha, cmd, atio); in qlt_send_term_exchange()
3003 qlt_alloc_qfull_cmd(vha, atio, 0, 0); in qlt_send_term_exchange()
3006 spin_lock_irqsave(&vha->hw->hardware_lock, flags); in qlt_send_term_exchange()
3007 rc = __qlt_send_term_exchange(vha, cmd, atio); in qlt_send_term_exchange()
3009 qlt_alloc_qfull_cmd(vha, atio, 0, 0); in qlt_send_term_exchange()
3015 qlt_unmap_sg(vha, cmd); in qlt_send_term_exchange()
3016 vha->hw->tgt.tgt_ops->free_cmd(cmd); in qlt_send_term_exchange()
3020 spin_unlock_irqrestore(&vha->hw->hardware_lock, flags); in qlt_send_term_exchange()
3025 static void qlt_init_term_exchange(struct scsi_qla_host *vha) in qlt_init_term_exchange() argument
3030 vha->hw->tgt.leak_exchg_thresh_hold = in qlt_init_term_exchange()
3031 (vha->hw->fw_xcb_count/100) * LEAK_EXCHG_THRESH_HOLD_PERCENT; in qlt_init_term_exchange()
3034 if (!list_empty(&vha->hw->tgt.q_full_list)) { in qlt_init_term_exchange()
3036 list_splice_init(&vha->hw->tgt.q_full_list, &free_list); in qlt_init_term_exchange()
3044 vha->hw->tgt.num_qfull_cmds_alloc--; in qlt_init_term_exchange()
3047 vha->hw->tgt.num_qfull_cmds_dropped = 0; in qlt_init_term_exchange()
3050 static void qlt_chk_exch_leak_thresh_hold(struct scsi_qla_host *vha) in qlt_chk_exch_leak_thresh_hold() argument
3054 total_leaked = vha->hw->tgt.num_qfull_cmds_dropped; in qlt_chk_exch_leak_thresh_hold()
3056 if (vha->hw->tgt.leak_exchg_thresh_hold && in qlt_chk_exch_leak_thresh_hold()
3057 (total_leaked > vha->hw->tgt.leak_exchg_thresh_hold)) { in qlt_chk_exch_leak_thresh_hold()
3059 ql_dbg(ql_dbg_tgt, vha, 0xe079, in qlt_chk_exch_leak_thresh_hold()
3061 total_leaked, vha->hw->fw_xcb_count); in qlt_chk_exch_leak_thresh_hold()
3063 if (IS_P3P_TYPE(vha->hw)) in qlt_chk_exch_leak_thresh_hold()
3064 set_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags); in qlt_chk_exch_leak_thresh_hold()
3066 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qlt_chk_exch_leak_thresh_hold()
3067 qla2xxx_wake_dpc(vha); in qlt_chk_exch_leak_thresh_hold()
3075 struct scsi_qla_host *vha = tgt->vha; in qlt_abort_cmd() local
3078 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf014, in qlt_abort_cmd()
3080 "(se_cmd=%p, tag=%llu)", vha->vp_idx, cmd, &cmd->se_cmd, in qlt_abort_cmd()
3086 qlt_send_term_exchange(vha, cmd, &cmd->atio, 0); in qlt_abort_cmd()
3094 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe074, in qlt_free_cmd()
3102 qlt_decr_num_pend_cmds(cmd->vha); in qlt_free_cmd()
3119 static int qlt_prepare_srr_ctio(struct scsi_qla_host *vha, in qlt_prepare_srr_ctio() argument
3123 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_prepare_srr_ctio()
3129 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf019, in qlt_prepare_srr_ctio()
3130 "qla_target(%d): CTIO with SRR status received\n", vha->vp_idx); in qlt_prepare_srr_ctio()
3133 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf055, in qlt_prepare_srr_ctio()
3135 vha->vp_idx); in qlt_prepare_srr_ctio()
3147 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01a, in qlt_prepare_srr_ctio()
3159 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01b, in qlt_prepare_srr_ctio()
3163 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf056, in qlt_prepare_srr_ctio()
3167 "SRR %p\n", vha->vp_idx, in qlt_prepare_srr_ctio()
3180 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf057, in qlt_prepare_srr_ctio()
3182 vha->vp_idx); in qlt_prepare_srr_ctio()
3187 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01c, in qlt_prepare_srr_ctio()
3191 qlt_reject_free_srr_imm(vha, imm, 1); in qlt_prepare_srr_ctio()
3205 static int qlt_term_ctio_exchange(struct scsi_qla_host *vha, void *ctio, in qlt_term_ctio_exchange() argument
3218 qlt_send_term_exchange(vha, cmd, &cmd->atio, 1); in qlt_term_ctio_exchange()
3224 static inline struct qla_tgt_cmd *qlt_get_cmd(struct scsi_qla_host *vha, in qlt_get_cmd() argument
3227 struct qla_hw_data *ha = vha->hw; in qlt_get_cmd()
3239 static struct qla_tgt_cmd *qlt_ctio_to_cmd(struct scsi_qla_host *vha, in qlt_ctio_to_cmd() argument
3254 ql_dbg(ql_dbg_tgt, vha, 0xe052, in qlt_ctio_to_cmd()
3256 vha->vp_idx, handle); in qlt_ctio_to_cmd()
3259 cmd = qlt_get_cmd(vha, handle); in qlt_ctio_to_cmd()
3261 ql_dbg(ql_dbg_tgt, vha, 0xe053, in qlt_ctio_to_cmd()
3263 "find the command with handle %x\n", vha->vp_idx, in qlt_ctio_to_cmd()
3269 ql_dbg(ql_dbg_tgt, vha, 0xe054, in qlt_ctio_to_cmd()
3271 "support NULL handles\n", vha->vp_idx); in qlt_ctio_to_cmd()
3280 qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd) in qlt_abort_cmd_on_host_reset() argument
3282 struct qla_hw_data *ha = vha->hw; in qlt_abort_cmd_on_host_reset()
3286 qlt_unmap_sg(vha, cmd); in qlt_abort_cmd_on_host_reset()
3288 handle = qlt_make_handle(vha); in qlt_abort_cmd_on_host_reset()
3292 ql_dbg(ql_dbg_io, vha, 0xff00, in qlt_abort_cmd_on_host_reset()
3298 ql_dbg(ql_dbg_io, vha, 0xff01, in qlt_abort_cmd_on_host_reset()
3304 ql_dbg(ql_dbg_io, vha, 0xff02, in qlt_abort_cmd_on_host_reset()
3307 ql_dbg(ql_dbg_io, vha, 0xff03, in qlt_abort_cmd_on_host_reset()
3323 scsi_qla_host_t *vha = NULL; in qlt_host_reset_handler() local
3331 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf003, in qlt_host_reset_handler()
3336 ql_dbg(ql_dbg_tgt_mgt, vha, 0xff10, in qlt_host_reset_handler()
3346 vha = cmd->vha; in qlt_host_reset_handler()
3347 qlt_abort_cmd_on_host_reset(vha, cmd); in qlt_host_reset_handler()
3356 static void qlt_do_ctio_completion(struct scsi_qla_host *vha, uint32_t handle, in qlt_do_ctio_completion() argument
3359 struct qla_hw_data *ha = vha->hw; in qlt_do_ctio_completion()
3366 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01d, in qlt_do_ctio_completion()
3373 cmd = qlt_ctio_to_cmd(vha, handle, ctio); in qlt_do_ctio_completion()
3380 qlt_unmap_sg(vha, cmd); in qlt_do_ctio_completion()
3391 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf058, in qlt_do_ctio_completion()
3395 "TIMEOUT=b, INVALID_RX_ID=8)\n", vha->vp_idx, in qlt_do_ctio_completion()
3401 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf059, in qlt_do_ctio_completion()
3404 "received (state %x, se_cmd %p)\n", vha->vp_idx, in qlt_do_ctio_completion()
3409 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf05a, in qlt_do_ctio_completion()
3412 vha->vp_idx, status, cmd->state, se_cmd); in qlt_do_ctio_completion()
3413 if (qlt_prepare_srr_ctio(vha, cmd, ctio) != 0) in qlt_do_ctio_completion()
3421 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf073, in qlt_do_ctio_completion()
3423 vha->vp_idx, status, cmd->state, se_cmd, in qlt_do_ctio_completion()
3427 if (qlt_handle_dif_error(vha, cmd, ctio)) { in qlt_do_ctio_completion()
3450 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf05b, in qlt_do_ctio_completion()
3452 vha->vp_idx, status, cmd->state, se_cmd); in qlt_do_ctio_completion()
3466 if (qlt_term_ctio_exchange(vha, ctio, cmd, status)) in qlt_do_ctio_completion()
3484 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01e, in qlt_do_ctio_completion()
3488 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf05c, in qlt_do_ctio_completion()
3490 "not return a CTIO complete\n", vha->vp_idx, cmd->state); in qlt_do_ctio_completion()
3495 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf01f, "Finishing failed CTIO\n"); in qlt_do_ctio_completion()
3502 static inline int qlt_get_fcp_task_attr(struct scsi_qla_host *vha, in qlt_get_fcp_task_attr() argument
3524 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf05d, in qlt_get_fcp_task_attr()
3541 scsi_qla_host_t *vha = cmd->vha; in __qlt_do_work() local
3542 struct qla_hw_data *ha = vha->hw; in __qlt_do_work()
3543 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in __qlt_do_work()
3557 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf082, in __qlt_do_work()
3579 fcp_task_attr = qlt_get_fcp_task_attr(vha, in __qlt_do_work()
3585 ret = ha->tgt.tgt_ops->handle_cmd(vha, cmd, cdb, data_length, in __qlt_do_work()
3598 ql_dbg(ql_dbg_io, vha, 0x3060, "Terminating work cmd %p", cmd); in __qlt_do_work()
3605 qlt_send_term_exchange(vha, NULL, &cmd->atio, 1); in __qlt_do_work()
3607 qlt_decr_num_pend_cmds(vha); in __qlt_do_work()
3616 scsi_qla_host_t *vha = cmd->vha; in qlt_do_work() local
3619 spin_lock_irqsave(&vha->cmd_list_lock, flags); in qlt_do_work()
3621 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in qlt_do_work()
3626 static struct qla_tgt_cmd *qlt_get_tag(scsi_qla_host_t *vha, in qlt_get_tag() argument
3643 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_get_tag()
3644 qlt_incr_num_pend_cmds(vha); in qlt_get_tag()
3645 cmd->vha = vha; in qlt_get_tag()
3654 cmd->reset_count = vha->hw->chip_reset; in qlt_get_tag()
3666 scsi_qla_host_t *vha = op->vha; in qlt_create_sess_from_atio() local
3667 struct qla_hw_data *ha = vha->hw; in qlt_create_sess_from_atio()
3673 spin_lock_irqsave(&vha->cmd_list_lock, flags); in qlt_create_sess_from_atio()
3675 spin_unlock_irqrestore(&vha->cmd_list_lock, flags); in qlt_create_sess_from_atio()
3678 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf083, in qlt_create_sess_from_atio()
3684 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf022, in qlt_create_sess_from_atio()
3687 vha->vp_idx, s_id[0], s_id[1], s_id[2]); in qlt_create_sess_from_atio()
3690 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf023, in qlt_create_sess_from_atio()
3695 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_create_sess_from_atio()
3696 sess = qlt_make_local_sess(vha, s_id); in qlt_create_sess_from_atio()
3698 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_create_sess_from_atio()
3707 cmd = qlt_get_tag(vha, sess, &op->atio); in qlt_create_sess_from_atio()
3710 qlt_send_busy(vha, &op->atio, SAM_STAT_BUSY); in qlt_create_sess_from_atio()
3726 qlt_send_term_exchange(vha, NULL, &op->atio, 1); in qlt_create_sess_from_atio()
3733 static int qlt_handle_cmd_for_atio(struct scsi_qla_host *vha, in qlt_handle_cmd_for_atio() argument
3736 struct qla_hw_data *ha = vha->hw; in qlt_handle_cmd_for_atio()
3737 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_handle_cmd_for_atio()
3742 ql_dbg(ql_dbg_io, vha, 0x3061, in qlt_handle_cmd_for_atio()
3747 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, atio->u.isp24.fcp_hdr.s_id); in qlt_handle_cmd_for_atio()
3755 op->vha = vha; in qlt_handle_cmd_for_atio()
3757 spin_lock(&vha->cmd_list_lock); in qlt_handle_cmd_for_atio()
3758 list_add_tail(&op->cmd_list, &vha->qla_sess_op_cmd_list); in qlt_handle_cmd_for_atio()
3759 spin_unlock(&vha->cmd_list_lock); in qlt_handle_cmd_for_atio()
3769 ql_dbg(ql_dbg_io, vha, 0x3061, in qlt_handle_cmd_for_atio()
3780 cmd = qlt_get_tag(vha, sess, atio); in qlt_handle_cmd_for_atio()
3782 ql_dbg(ql_dbg_io, vha, 0x3062, in qlt_handle_cmd_for_atio()
3783 "qla_target(%d): Allocation of cmd failed\n", vha->vp_idx); in qlt_handle_cmd_for_atio()
3791 spin_lock(&vha->cmd_list_lock); in qlt_handle_cmd_for_atio()
3792 list_add_tail(&cmd->cmd_list, &vha->qla_cmd_list); in qlt_handle_cmd_for_atio()
3793 spin_unlock(&vha->cmd_list_lock); in qlt_handle_cmd_for_atio()
3805 struct scsi_qla_host *vha = sess->vha; in qlt_issue_task_mgmt() local
3806 struct qla_hw_data *ha = vha->hw; in qlt_issue_task_mgmt()
3814 ql_dbg(ql_dbg_tgt_tmr, vha, 0x10009, in qlt_issue_task_mgmt()
3817 "leak\n", vha->vp_idx); in qlt_issue_task_mgmt()
3829 mcmd->reset_count = vha->hw->chip_reset; in qlt_issue_task_mgmt()
3833 ql_dbg(ql_dbg_tgt_tmr, vha, 0x10000, in qlt_issue_task_mgmt()
3834 "qla_target(%d): CLEAR_ACA received\n", sess->vha->vp_idx); in qlt_issue_task_mgmt()
3839 ql_dbg(ql_dbg_tgt_tmr, vha, 0x10001, in qlt_issue_task_mgmt()
3841 sess->vha->vp_idx); in qlt_issue_task_mgmt()
3846 ql_dbg(ql_dbg_tgt_tmr, vha, 0x10002, in qlt_issue_task_mgmt()
3847 "qla_target(%d): LUN_RESET received\n", sess->vha->vp_idx); in qlt_issue_task_mgmt()
3849 abort_cmds_for_lun(vha, lun, a->u.isp24.fcp_hdr.s_id); in qlt_issue_task_mgmt()
3853 ql_dbg(ql_dbg_tgt_tmr, vha, 0x10003, in qlt_issue_task_mgmt()
3854 "qla_target(%d): CLEAR_TS received\n", sess->vha->vp_idx); in qlt_issue_task_mgmt()
3859 ql_dbg(ql_dbg_tgt_tmr, vha, 0x10004, in qlt_issue_task_mgmt()
3860 "qla_target(%d): ABORT_TS received\n", sess->vha->vp_idx); in qlt_issue_task_mgmt()
3865 ql_dbg(ql_dbg_tgt_tmr, vha, 0x10005, in qlt_issue_task_mgmt()
3867 sess->vha->vp_idx); in qlt_issue_task_mgmt()
3872 ql_dbg(ql_dbg_tgt_tmr, vha, 0x10006, in qlt_issue_task_mgmt()
3874 sess->vha->vp_idx); in qlt_issue_task_mgmt()
3879 ql_dbg(ql_dbg_tgt_tmr, vha, 0x10007, in qlt_issue_task_mgmt()
3881 sess->vha->vp_idx); in qlt_issue_task_mgmt()
3886 ql_dbg(ql_dbg_tgt_tmr, vha, 0x10008, in qlt_issue_task_mgmt()
3887 "qla_target(%d): Doing NEXUS_LOSS\n", sess->vha->vp_idx); in qlt_issue_task_mgmt()
3892 ql_dbg(ql_dbg_tgt_tmr, vha, 0x1000a, in qlt_issue_task_mgmt()
3894 sess->vha->vp_idx, fn); in qlt_issue_task_mgmt()
3901 ql_dbg(ql_dbg_tgt_tmr, vha, 0x1000b, in qlt_issue_task_mgmt()
3903 sess->vha->vp_idx, res); in qlt_issue_task_mgmt()
3912 static int qlt_handle_task_mgmt(struct scsi_qla_host *vha, void *iocb) in qlt_handle_task_mgmt() argument
3915 struct qla_hw_data *ha = vha->hw; in qlt_handle_task_mgmt()
3921 tgt = vha->vha_tgt.qla_tgt; in qlt_handle_task_mgmt()
3925 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in qlt_handle_task_mgmt()
3930 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf024, in qlt_handle_task_mgmt()
3932 "non-existant session\n", vha->vp_idx, fn); in qlt_handle_task_mgmt()
3944 static int __qlt_abort_task(struct scsi_qla_host *vha, in __qlt_abort_task() argument
3948 struct qla_hw_data *ha = vha->hw; in __qlt_abort_task()
3955 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf05f, in __qlt_abort_task()
3957 vha->vp_idx, __func__); in __qlt_abort_task()
3968 mcmd->reset_count = vha->hw->chip_reset; in __qlt_abort_task()
3973 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf060, in __qlt_abort_task()
3975 vha->vp_idx, rc); in __qlt_abort_task()
3984 static int qlt_abort_task(struct scsi_qla_host *vha, in qlt_abort_task() argument
3987 struct qla_hw_data *ha = vha->hw; in qlt_abort_task()
3993 sess = ha->tgt.tgt_ops->find_sess_by_loop_id(vha, loop_id); in qlt_abort_task()
3995 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf025, in qlt_abort_task()
3997 "session\n", vha->vp_idx); in qlt_abort_task()
3998 return qlt_sched_sess_work(vha->vha_tgt.qla_tgt, in qlt_abort_task()
4002 return __qlt_abort_task(vha, iocb, sess); in qlt_abort_task()
4009 ql_dbg(ql_dbg_tgt_mgt, fcport->vha, 0xf093, in qlt_logo_completion_handler()
4061 ql_dbg(ql_dbg_tgt_tmr, tgt->vha, 0x1000c, in qlt_find_sess_invalidate_other()
4086 ql_dbg(ql_dbg_tgt_tmr, tgt->vha, 0x1000d, in qlt_find_sess_invalidate_other()
4100 static int abort_cmds_for_s_id(struct scsi_qla_host *vha, port_id_t *s_id) in abort_cmds_for_s_id() argument
4111 spin_lock(&vha->cmd_list_lock); in abort_cmds_for_s_id()
4112 list_for_each_entry(op, &vha->qla_sess_op_cmd_list, cmd_list) { in abort_cmds_for_s_id()
4119 list_for_each_entry(cmd, &vha->qla_cmd_list, cmd_list) { in abort_cmds_for_s_id()
4126 spin_unlock(&vha->cmd_list_lock); in abort_cmds_for_s_id()
4134 static int qlt_24xx_handle_els(struct scsi_qla_host *vha, in qlt_24xx_handle_els() argument
4137 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_handle_els()
4138 struct qla_hw_data *ha = vha->hw; in qlt_24xx_handle_els()
4155 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf026, in qlt_24xx_handle_els()
4157 vha->vp_idx, iocb->u.isp24.port_id, iocb->u.isp24.status_subcode); in qlt_24xx_handle_els()
4166 abort_cmds_for_s_id(vha, &port_id); in qlt_24xx_handle_els()
4184 ql_log(ql_log_warn, sess->vha, 0xf094, in qlt_24xx_handle_els()
4189 qlt_send_term_imm_notif(vha, iocb, 1); in qlt_24xx_handle_els()
4241 ql_log(ql_log_warn, sess->vha, 0xf095, in qlt_24xx_handle_els()
4244 qlt_send_term_imm_notif(vha, iocb, 1); in qlt_24xx_handle_els()
4253 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf096, in qlt_24xx_handle_els()
4269 set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); in qlt_24xx_handle_els()
4270 set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); in qlt_24xx_handle_els()
4271 qla2xxx_wake_dpc(vha); in qlt_24xx_handle_els()
4281 res = qlt_reset(vha, iocb, QLA_TGT_NEXUS_LOSS_SESS); in qlt_24xx_handle_els()
4286 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_handle_els()
4288 qlt_send_notify_ack(vha, &tgt->link_reinit_iocb, in qlt_24xx_handle_els()
4298 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf061, in qlt_24xx_handle_els()
4300 "received\n", vha->vp_idx, iocb->u.isp24.status_subcode); in qlt_24xx_handle_els()
4301 res = qlt_reset(vha, iocb, QLA_TGT_NEXUS_LOSS_SESS); in qlt_24xx_handle_els()
4322 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe023, in qlt_set_data_offset()
4328 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe055, in qlt_set_data_offset()
4337 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe024, in qlt_set_data_offset()
4344 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe025, in qlt_set_data_offset()
4355 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe056, in qlt_set_data_offset()
4363 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe057, in qlt_set_data_offset()
4394 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe026, "New cmd->sg: %p\n", cmd->sg); in qlt_set_data_offset()
4395 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe027, "New cmd->sg_cnt: %u\n", in qlt_set_data_offset()
4397 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe028, "New cmd->bufflen: %u\n", in qlt_set_data_offset()
4399 ql_dbg(ql_dbg_tgt, cmd->vha, 0xe029, "New cmd->offset: %u\n", in qlt_set_data_offset()
4418 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf027, "srr_rel_offs=%d, rel_offs=%d", in qlt_srr_adjust_data()
4424 ql_dbg(ql_dbg_tgt_mgt, cmd->vha, 0xf062, in qlt_srr_adjust_data()
4426 cmd->vha->vp_idx, rel_offs); in qlt_srr_adjust_data()
4437 static void qlt_handle_srr(struct scsi_qla_host *vha, in qlt_handle_srr() argument
4442 struct qla_hw_data *ha = vha->hw; in qlt_handle_srr()
4453 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf028, "SRR cmd %p, srr_ui %x\n", in qlt_handle_srr()
4459 qlt_send_notify_ack(vha, ntfy, in qlt_handle_srr()
4467 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf063, in qlt_handle_srr()
4474 ql_dbg(ql_dbg_tgt, vha, 0xe02a, in qlt_handle_srr()
4485 qlt_send_notify_ack(vha, ntfy, in qlt_handle_srr()
4490 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf064, in qlt_handle_srr()
4492 vha->vp_idx, se_cmd->tag, in qlt_handle_srr()
4499 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf065, in qlt_handle_srr()
4506 ql_dbg(ql_dbg_tgt, vha, 0xe02b, in qlt_handle_srr()
4517 qlt_send_notify_ack(vha, ntfy, in qlt_handle_srr()
4525 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf066, in qlt_handle_srr()
4527 vha->vp_idx, se_cmd->tag, cmd->se_cmd.scsi_status); in qlt_handle_srr()
4532 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf067, in qlt_handle_srr()
4534 vha->vp_idx, srr_ui); in qlt_handle_srr()
4548 qlt_send_notify_ack(vha, ntfy, 0, 0, 0, in qlt_handle_srr()
4557 qlt_send_term_exchange(vha, cmd, &cmd->atio, 1); in qlt_handle_srr()
4562 static void qlt_reject_free_srr_imm(struct scsi_qla_host *vha, in qlt_reject_free_srr_imm() argument
4565 struct qla_hw_data *ha = vha->hw; in qlt_reject_free_srr_imm()
4573 qlt_send_notify_ack(vha, (void *)&imm->imm_ntfy, 0, 0, 0, in qlt_reject_free_srr_imm()
4589 struct scsi_qla_host *vha = tgt->vha; in qlt_handle_srr_work() local
4593 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf029, "Entering SRR work (tgt %p)\n", in qlt_handle_srr_work()
4609 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf068, in qlt_handle_srr_work()
4613 vha->vp_idx, i, i->srr_id, sctio); in qlt_handle_srr_work()
4614 qlt_reject_free_srr_imm(tgt->vha, i, 0); in qlt_handle_srr_work()
4620 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf02a, in qlt_handle_srr_work()
4625 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf02b, in qlt_handle_srr_work()
4651 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf02c, in qlt_handle_srr_work()
4656 qlt_handle_srr(vha, sctio, imm); in qlt_handle_srr_work()
4666 static void qlt_prepare_srr_imm(struct scsi_qla_host *vha, in qlt_prepare_srr_imm() argument
4670 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_prepare_srr_imm()
4675 ql_log(ql_log_warn, vha, 0xf02d, "qla_target(%d): SRR received\n", in qlt_prepare_srr_imm()
4676 vha->vp_idx); in qlt_prepare_srr_imm()
4687 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf02e, in qlt_prepare_srr_imm()
4700 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf02f, "%s", in qlt_prepare_srr_imm()
4704 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf030, in qlt_prepare_srr_imm()
4708 "SRR %p\n", vha->vp_idx, tgt->ctio_srr_id, in qlt_prepare_srr_imm()
4722 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf069, in qlt_prepare_srr_imm()
4724 "entry, SRR request will be rejected\n", vha->vp_idx); in qlt_prepare_srr_imm()
4731 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf031, in qlt_prepare_srr_imm()
4735 qlt_send_term_exchange(vha, sctio->cmd, in qlt_prepare_srr_imm()
4747 qlt_send_notify_ack(vha, iocb, 0, 0, 0, in qlt_prepare_srr_imm()
4756 static void qlt_handle_imm_notify(struct scsi_qla_host *vha, in qlt_handle_imm_notify() argument
4759 struct qla_hw_data *ha = vha->hw; in qlt_handle_imm_notify()
4768 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf032, in qlt_handle_imm_notify()
4770 vha->vp_idx, le16_to_cpu(iocb->u.isp24.nport_handle), in qlt_handle_imm_notify()
4773 if (qlt_reset(vha, iocb, QLA_TGT_ABORT_ALL) == 0) in qlt_handle_imm_notify()
4780 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_handle_imm_notify()
4781 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf033, in qlt_handle_imm_notify()
4783 "subcode %x)\n", vha->vp_idx, in qlt_handle_imm_notify()
4787 qlt_send_notify_ack(vha, &tgt->link_reinit_iocb, in qlt_handle_imm_notify()
4801 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf034, in qlt_handle_imm_notify()
4803 "%#x, subcode %x)\n", vha->vp_idx, in qlt_handle_imm_notify()
4807 if (qlt_reset(vha, iocb, QLA_TGT_NEXUS_LOSS_SESS) == 0) in qlt_handle_imm_notify()
4813 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf035, in qlt_handle_imm_notify()
4814 "qla_target(%d): Global TPRLO (%x)\n", vha->vp_idx, status); in qlt_handle_imm_notify()
4815 if (qlt_reset(vha, iocb, QLA_TGT_NEXUS_LOSS) == 0) in qlt_handle_imm_notify()
4821 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf036, in qlt_handle_imm_notify()
4822 "qla_target(%d): Port config changed (%x)\n", vha->vp_idx, in qlt_handle_imm_notify()
4824 if (qlt_reset(vha, iocb, QLA_TGT_ABORT_ALL) == 0) in qlt_handle_imm_notify()
4830 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06a, in qlt_handle_imm_notify()
4832 vha->vp_idx); in qlt_handle_imm_notify()
4834 if (qlt_reset(vha, iocb, QLA_TGT_NEXUS_LOSS) == 0) in qlt_handle_imm_notify()
4839 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06b, in qlt_handle_imm_notify()
4842 "resource count)\n", vha->vp_idx); in qlt_handle_imm_notify()
4846 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf037, in qlt_handle_imm_notify()
4848 "L %#x)\n", vha->vp_idx, in qlt_handle_imm_notify()
4852 if (qlt_abort_task(vha, iocb) == 0) in qlt_handle_imm_notify()
4857 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06c, in qlt_handle_imm_notify()
4859 vha->vp_idx, vha->host_no); in qlt_handle_imm_notify()
4863 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf038, in qlt_handle_imm_notify()
4865 vha->vp_idx, iocb->u.isp2x.task_flags); in qlt_handle_imm_notify()
4866 if (qlt_handle_task_mgmt(vha, iocb) == 0) in qlt_handle_imm_notify()
4871 if (qlt_24xx_handle_els(vha, iocb) == 0) in qlt_handle_imm_notify()
4876 qlt_prepare_srr_imm(vha, iocb); in qlt_handle_imm_notify()
4881 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06d, in qlt_handle_imm_notify()
4883 "notify status %x\n", vha->vp_idx, status); in qlt_handle_imm_notify()
4888 qlt_send_notify_ack(vha, iocb, add_flags, 0, 0, 0, 0, 0); in qlt_handle_imm_notify()
4895 static int __qlt_send_busy(struct scsi_qla_host *vha, in __qlt_send_busy() argument
4899 struct qla_hw_data *ha = vha->hw; in __qlt_send_busy()
4903 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in __qlt_send_busy()
4906 qlt_send_term_exchange(vha, NULL, atio, 1); in __qlt_send_busy()
4911 pkt = (request_t *)qla2x00_alloc_iocbs(vha, NULL); in __qlt_send_busy()
4913 ql_dbg(ql_dbg_io, vha, 0x3063, in __qlt_send_busy()
4915 "request packet", vha->vp_idx, __func__); in __qlt_send_busy()
4926 ctio24->vp_index = vha->vp_idx; in __qlt_send_busy()
4943 qla2x00_start_iocbs(vha, vha->req); in __qlt_send_busy()
4953 qlt_alloc_qfull_cmd(struct scsi_qla_host *vha, in qlt_alloc_qfull_cmd() argument
4956 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_alloc_qfull_cmd()
4957 struct qla_hw_data *ha = vha->hw; in qlt_alloc_qfull_cmd()
4964 ql_dbg(ql_dbg_io, vha, 0x300a, in qlt_alloc_qfull_cmd()
4969 if ((vha->hw->tgt.num_qfull_cmds_alloc + 1) > MAX_QFULL_CMDS_ALLOC) { in qlt_alloc_qfull_cmd()
4970 vha->hw->tgt.num_qfull_cmds_dropped++; in qlt_alloc_qfull_cmd()
4971 if (vha->hw->tgt.num_qfull_cmds_dropped > in qlt_alloc_qfull_cmd()
4972 vha->hw->qla_stats.stat_max_qfull_cmds_dropped) in qlt_alloc_qfull_cmd()
4973 vha->hw->qla_stats.stat_max_qfull_cmds_dropped = in qlt_alloc_qfull_cmd()
4974 vha->hw->tgt.num_qfull_cmds_dropped; in qlt_alloc_qfull_cmd()
4976 ql_dbg(ql_dbg_io, vha, 0x3068, in qlt_alloc_qfull_cmd()
4978 vha->vp_idx, __func__, in qlt_alloc_qfull_cmd()
4979 vha->hw->tgt.num_qfull_cmds_dropped); in qlt_alloc_qfull_cmd()
4981 qlt_chk_exch_leak_thresh_hold(vha); in qlt_alloc_qfull_cmd()
4986 (vha, atio->u.isp24.fcp_hdr.s_id); in qlt_alloc_qfull_cmd()
4998 ql_dbg(ql_dbg_io, vha, 0x3009, in qlt_alloc_qfull_cmd()
5000 vha->vp_idx, __func__); in qlt_alloc_qfull_cmd()
5002 vha->hw->tgt.num_qfull_cmds_dropped++; in qlt_alloc_qfull_cmd()
5003 if (vha->hw->tgt.num_qfull_cmds_dropped > in qlt_alloc_qfull_cmd()
5004 vha->hw->qla_stats.stat_max_qfull_cmds_dropped) in qlt_alloc_qfull_cmd()
5005 vha->hw->qla_stats.stat_max_qfull_cmds_dropped = in qlt_alloc_qfull_cmd()
5006 vha->hw->tgt.num_qfull_cmds_dropped; in qlt_alloc_qfull_cmd()
5008 qlt_chk_exch_leak_thresh_hold(vha); in qlt_alloc_qfull_cmd()
5014 qlt_incr_num_pend_cmds(vha); in qlt_alloc_qfull_cmd()
5018 cmd->tgt = vha->vha_tgt.qla_tgt; in qlt_alloc_qfull_cmd()
5019 cmd->vha = vha; in qlt_alloc_qfull_cmd()
5020 cmd->reset_count = vha->hw->chip_reset; in qlt_alloc_qfull_cmd()
5030 list_add_tail(&cmd->cmd_list, &vha->hw->tgt.q_full_list); in qlt_alloc_qfull_cmd()
5032 vha->hw->tgt.num_qfull_cmds_alloc++; in qlt_alloc_qfull_cmd()
5033 if (vha->hw->tgt.num_qfull_cmds_alloc > in qlt_alloc_qfull_cmd()
5034 vha->hw->qla_stats.stat_max_qfull_cmds_alloc) in qlt_alloc_qfull_cmd()
5035 vha->hw->qla_stats.stat_max_qfull_cmds_alloc = in qlt_alloc_qfull_cmd()
5036 vha->hw->tgt.num_qfull_cmds_alloc; in qlt_alloc_qfull_cmd()
5040 qlt_free_qfull_cmds(struct scsi_qla_host *vha) in qlt_free_qfull_cmds() argument
5042 struct qla_hw_data *ha = vha->hw; in qlt_free_qfull_cmds()
5053 spin_lock_irqsave(&vha->hw->hardware_lock, flags); in qlt_free_qfull_cmds()
5056 spin_unlock_irqrestore(&vha->hw->hardware_lock, flags); in qlt_free_qfull_cmds()
5063 rc = __qlt_send_busy(vha, &cmd->atio, cmd->state); in qlt_free_qfull_cmds()
5065 rc = __qlt_send_term_exchange(vha, NULL, &cmd->atio); in qlt_free_qfull_cmds()
5071 ql_dbg(ql_dbg_io, vha, 0x3006, in qlt_free_qfull_cmds()
5075 ql_dbg(ql_dbg_io, vha, 0x3007, in qlt_free_qfull_cmds()
5079 ql_dbg(ql_dbg_io, vha, 0x3008, in qlt_free_qfull_cmds()
5087 vha->hw->tgt.num_qfull_cmds_alloc--; in qlt_free_qfull_cmds()
5089 spin_unlock_irqrestore(&vha->hw->hardware_lock, flags); in qlt_free_qfull_cmds()
5104 qlt_send_busy(struct scsi_qla_host *vha, in qlt_send_busy() argument
5109 rc = __qlt_send_busy(vha, atio, status); in qlt_send_busy()
5111 qlt_alloc_qfull_cmd(vha, atio, status, 1); in qlt_send_busy()
5115 qlt_chk_qfull_thresh_hold(struct scsi_qla_host *vha, in qlt_chk_qfull_thresh_hold() argument
5118 struct qla_hw_data *ha = vha->hw; in qlt_chk_qfull_thresh_hold()
5125 qlt_send_busy(vha, atio, status); in qlt_chk_qfull_thresh_hold()
5131 static void qlt_24xx_atio_pkt(struct scsi_qla_host *vha, in qlt_24xx_atio_pkt() argument
5134 struct qla_hw_data *ha = vha->hw; in qlt_24xx_atio_pkt()
5135 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_24xx_atio_pkt()
5139 ql_dbg(ql_dbg_io, vha, 0x3064, in qlt_24xx_atio_pkt()
5154 ql_dbg(ql_dbg_io, vha, 0x3065, in qlt_24xx_atio_pkt()
5157 "sending QUEUE_FULL\n", vha->vp_idx); in qlt_24xx_atio_pkt()
5158 qlt_send_busy(vha, atio, SAM_STAT_TASK_SET_FULL); in qlt_24xx_atio_pkt()
5165 rc = qlt_chk_qfull_thresh_hold(vha, atio); in qlt_24xx_atio_pkt()
5170 rc = qlt_handle_cmd_for_atio(vha, atio); in qlt_24xx_atio_pkt()
5172 rc = qlt_handle_task_mgmt(vha, atio); in qlt_24xx_atio_pkt()
5177 qlt_send_busy(vha, atio, SAM_STAT_BUSY); in qlt_24xx_atio_pkt()
5179 qlt_send_term_exchange(vha, NULL, atio, 1); in qlt_24xx_atio_pkt()
5183 ql_dbg(ql_dbg_tgt, vha, 0xe059, in qlt_24xx_atio_pkt()
5188 ql_dbg(ql_dbg_tgt, vha, 0xe05a, in qlt_24xx_atio_pkt()
5191 "status.\n", vha->vp_idx); in qlt_24xx_atio_pkt()
5192 qlt_send_busy(vha, atio, SAM_STAT_BUSY); in qlt_24xx_atio_pkt()
5201 ql_dbg(ql_dbg_tgt, vha, 0xe05b, in qlt_24xx_atio_pkt()
5203 "with error status %x\n", vha->vp_idx, in qlt_24xx_atio_pkt()
5208 ql_dbg(ql_dbg_tgt, vha, 0xe02e, "%s", "IMMED_NOTIFY ATIO"); in qlt_24xx_atio_pkt()
5209 qlt_handle_imm_notify(vha, (struct imm_ntfy_from_isp *)atio); in qlt_24xx_atio_pkt()
5214 ql_dbg(ql_dbg_tgt, vha, 0xe05c, in qlt_24xx_atio_pkt()
5216 "type %x\n", vha->vp_idx, atio->u.raw.entry_type); in qlt_24xx_atio_pkt()
5225 static void qlt_response_pkt(struct scsi_qla_host *vha, response_t *pkt) in qlt_response_pkt() argument
5227 struct qla_hw_data *ha = vha->hw; in qlt_response_pkt()
5228 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_response_pkt()
5231 ql_dbg(ql_dbg_tgt, vha, 0xe05d, in qlt_response_pkt()
5233 "tgt (ha %p)\n", vha->vp_idx, pkt->entry_type, ha); in qlt_response_pkt()
5249 qlt_do_ctio_completion(vha, entry->handle, in qlt_response_pkt()
5261 ql_dbg(ql_dbg_tgt, vha, 0xe05e, in qlt_response_pkt()
5263 "status %x received\n", vha->vp_idx, in qlt_response_pkt()
5268 rc = qlt_chk_qfull_thresh_hold(vha, atio); in qlt_response_pkt()
5274 rc = qlt_handle_cmd_for_atio(vha, atio); in qlt_response_pkt()
5278 qlt_send_busy(vha, atio, 0); in qlt_response_pkt()
5280 qlt_send_term_exchange(vha, NULL, atio, 1); in qlt_response_pkt()
5284 ql_dbg(ql_dbg_tgt, vha, 0xe05f, in qlt_response_pkt()
5288 qlt_send_term_exchange(vha, NULL, in qlt_response_pkt()
5291 ql_dbg(ql_dbg_tgt, vha, 0xe060, in qlt_response_pkt()
5294 "status\n", vha->vp_idx); in qlt_response_pkt()
5295 qlt_send_busy(vha, atio, 0); in qlt_response_pkt()
5305 qlt_do_ctio_completion(vha, entry->handle, in qlt_response_pkt()
5314 qlt_do_ctio_completion(vha, entry->handle, in qlt_response_pkt()
5321 ql_dbg(ql_dbg_tgt, vha, 0xe035, "%s", "IMMED_NOTIFY\n"); in qlt_response_pkt()
5322 qlt_handle_imm_notify(vha, (struct imm_ntfy_from_isp *)pkt); in qlt_response_pkt()
5328 ql_dbg(ql_dbg_tgt, vha, 0xe036, in qlt_response_pkt()
5335 ql_dbg(ql_dbg_tgt, vha, 0xe061, in qlt_response_pkt()
5337 "failed %x\n", vha->vp_idx, in qlt_response_pkt()
5341 ql_dbg(ql_dbg_tgt, vha, 0xe062, in qlt_response_pkt()
5343 vha->vp_idx); in qlt_response_pkt()
5348 ql_dbg(ql_dbg_tgt, vha, 0xe037, in qlt_response_pkt()
5349 "ABTS_RECV_24XX: instance %d\n", vha->vp_idx); in qlt_response_pkt()
5350 qlt_24xx_handle_abts(vha, (struct abts_recv_from_24xx *)pkt); in qlt_response_pkt()
5357 ql_dbg(ql_dbg_tgt, vha, 0xe038, in qlt_response_pkt()
5380 qlt_24xx_retry_term_exchange(vha, in qlt_response_pkt()
5383 ql_dbg(ql_dbg_tgt, vha, 0xe063, in qlt_response_pkt()
5386 vha->vp_idx, entry->compl_status, in qlt_response_pkt()
5391 ql_dbg(ql_dbg_tgt, vha, 0xe064, in qlt_response_pkt()
5393 "received\n", vha->vp_idx); in qlt_response_pkt()
5398 ql_dbg(ql_dbg_tgt, vha, 0xe065, in qlt_response_pkt()
5400 "type %x\n", vha->vp_idx, pkt->entry_type); in qlt_response_pkt()
5410 void qlt_async_event(uint16_t code, struct scsi_qla_host *vha, in qlt_async_event() argument
5413 struct qla_hw_data *ha = vha->hw; in qlt_async_event()
5414 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_async_event()
5421 ql_dbg(ql_dbg_tgt, vha, 0xe03a, in qlt_async_event()
5441 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03a, in qlt_async_event()
5443 "occurred", vha->vp_idx, code); in qlt_async_event()
5446 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qlt_async_event()
5451 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03b, in qlt_async_event()
5453 "(m[0]=%x, m[1]=%x, m[2]=%x, m[3]=%x)", vha->vp_idx, in qlt_async_event()
5457 qlt_send_notify_ack(vha, (void *)&tgt->link_reinit_iocb, in qlt_async_event()
5468 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03c, in qlt_async_event()
5470 "(m[0]=%x, m[1]=%x, m[2]=%x, m[3]=%x)", vha->vp_idx, code, in qlt_async_event()
5476 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03d, in qlt_async_event()
5479 "m[2]=%x, m[3]=%x)", vha->vp_idx, code, in qlt_async_event()
5485 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03e, in qlt_async_event()
5488 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03f, in qlt_async_event()
5499 static fc_port_t *qlt_get_port_database(struct scsi_qla_host *vha, in qlt_get_port_database() argument
5507 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf06f, in qlt_get_port_database()
5509 vha->vp_idx); in qlt_get_port_database()
5515 rc = qla2x00_get_port_database(vha, fcport, 0); in qlt_get_port_database()
5517 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf070, in qlt_get_port_database()
5520 "(loop_id=0x%04x)", vha->vp_idx, rc, loop_id); in qlt_get_port_database()
5529 static struct qla_tgt_sess *qlt_make_local_sess(struct scsi_qla_host *vha, in qlt_make_local_sess() argument
5539 atomic_read(&vha->vha_tgt.qla_tgt->tgt_global_resets_count); in qlt_make_local_sess()
5541 rc = qla24xx_get_loop_id(vha, s_id, &loop_id); in qlt_make_local_sess()
5549 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf042, in qlt_make_local_sess()
5553 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf071, in qlt_make_local_sess()
5556 vha->vp_idx, s_id[0], s_id[1], in qlt_make_local_sess()
5561 fcport = qlt_get_port_database(vha, loop_id); in qlt_make_local_sess()
5566 atomic_read(&vha->vha_tgt.qla_tgt->tgt_global_resets_count)) { in qlt_make_local_sess()
5567 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf043, in qlt_make_local_sess()
5569 "(counter was %d, new %d), retrying", vha->vp_idx, in qlt_make_local_sess()
5571 atomic_read(&vha->vha_tgt. in qlt_make_local_sess()
5576 sess = qlt_create_sess(vha, fcport, true); in qlt_make_local_sess()
5585 struct scsi_qla_host *vha = tgt->vha; in qlt_abort_work() local
5586 struct qla_hw_data *ha = vha->hw; in qlt_abort_work()
5602 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, in qlt_abort_work()
5607 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_abort_work()
5608 sess = qlt_make_local_sess(vha, s_id); in qlt_abort_work()
5610 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_abort_work()
5627 rc = __qlt_24xx_handle_abts(vha, &prm->abts, sess); in qlt_abort_work()
5636 qlt_24xx_send_abts_resp(vha, &prm->abts, FCP_TMF_REJECTED, false); in qlt_abort_work()
5646 struct scsi_qla_host *vha = tgt->vha; in qlt_tmr_work() local
5647 struct qla_hw_data *ha = vha->hw; in qlt_tmr_work()
5662 sess = ha->tgt.tgt_ops->find_sess_by_s_id(vha, s_id); in qlt_tmr_work()
5666 mutex_lock(&vha->vha_tgt.tgt_mutex); in qlt_tmr_work()
5667 sess = qlt_make_local_sess(vha, s_id); in qlt_tmr_work()
5669 mutex_unlock(&vha->vha_tgt.tgt_mutex); in qlt_tmr_work()
5697 qlt_send_term_exchange(vha, NULL, &prm->tm_iocb2, 1); in qlt_tmr_work()
5706 struct scsi_qla_host *vha = tgt->vha; in qlt_sess_work_fn() local
5709 ql_dbg(ql_dbg_tgt_mgt, vha, 0xf000, "Sess work (tgt %p)", tgt); in qlt_sess_work_fn()
5774 tgt->vha = base_vha; in qlt_add_target()
5811 int qlt_remove_target(struct qla_hw_data *ha, struct scsi_qla_host *vha) in qlt_remove_target() argument
5813 if (!vha->vha_tgt.qla_tgt) in qlt_remove_target()
5816 if (vha->fc_vport) { in qlt_remove_target()
5817 qlt_release(vha->vha_tgt.qla_tgt); in qlt_remove_target()
5822 qlt_init_term_exchange(vha); in qlt_remove_target()
5825 list_del(&vha->vha_tgt.qla_tgt->tgt_list_entry); in qlt_remove_target()
5828 ql_dbg(ql_dbg_tgt, vha, 0xe03c, "Unregistering target for host %ld(%p)", in qlt_remove_target()
5829 vha->host_no, ha); in qlt_remove_target()
5830 qlt_release(vha->vha_tgt.qla_tgt); in qlt_remove_target()
5835 static void qlt_lport_dump(struct scsi_qla_host *vha, u64 wwpn, in qlt_lport_dump() argument
5842 pr_debug("%02x ", vha->node_name[i]); in qlt_lport_dump()
5846 pr_debug("%02x ", vha->port_name[i]); in qlt_lport_dump()
5869 struct scsi_qla_host *vha; in qlt_lport_register() local
5878 vha = tgt->vha; in qlt_lport_register()
5879 ha = vha->hw; in qlt_lport_register()
5881 host = vha->host; in qlt_lport_register()
5904 ql_dbg(ql_dbg_tgt, vha, 0xe068, in qlt_lport_register()
5909 qlt_lport_dump(vha, phys_wwpn, b); in qlt_lport_register()
5911 if (memcmp(vha->port_name, b, WWN_SIZE)) { in qlt_lport_register()
5915 rc = (*callback)(vha, target_lport_ptr, npiv_wwpn, npiv_wwnn); in qlt_lport_register()
5933 void qlt_lport_deregister(struct scsi_qla_host *vha) in qlt_lport_deregister() argument
5935 struct qla_hw_data *ha = vha->hw; in qlt_lport_deregister()
5936 struct Scsi_Host *sh = vha->host; in qlt_lport_deregister()
5940 vha->vha_tgt.target_lport_ptr = NULL; in qlt_lport_deregister()
5950 static void qlt_set_mode(struct scsi_qla_host *vha) in qlt_set_mode() argument
5952 struct qla_hw_data *ha = vha->hw; in qlt_set_mode()
5957 vha->host->active_mode = MODE_TARGET; in qlt_set_mode()
5960 vha->host->active_mode |= MODE_TARGET; in qlt_set_mode()
5967 qla_reverse_ini_mode(vha); in qlt_set_mode()
5971 static void qlt_clear_mode(struct scsi_qla_host *vha) in qlt_clear_mode() argument
5973 struct qla_hw_data *ha = vha->hw; in qlt_clear_mode()
5977 vha->host->active_mode = MODE_UNKNOWN; in qlt_clear_mode()
5980 vha->host->active_mode = MODE_INITIATOR; in qlt_clear_mode()
5983 vha->host->active_mode &= ~MODE_TARGET; in qlt_clear_mode()
5990 qla_reverse_ini_mode(vha); in qlt_clear_mode()
5999 qlt_enable_vha(struct scsi_qla_host *vha) in qlt_enable_vha() argument
6001 struct qla_hw_data *ha = vha->hw; in qlt_enable_vha()
6002 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_enable_vha()
6007 ql_dbg(ql_dbg_tgt, vha, 0xe069, in qlt_enable_vha()
6016 qlt_set_mode(vha); in qlt_enable_vha()
6019 if (vha->vp_idx) { in qlt_enable_vha()
6020 qla24xx_disable_vp(vha); in qlt_enable_vha()
6021 qla24xx_enable_vp(vha); in qlt_enable_vha()
6035 static void qlt_disable_vha(struct scsi_qla_host *vha) in qlt_disable_vha() argument
6037 struct qla_hw_data *ha = vha->hw; in qlt_disable_vha()
6038 struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; in qlt_disable_vha()
6042 ql_dbg(ql_dbg_tgt, vha, 0xe06a, in qlt_disable_vha()
6050 qlt_clear_mode(vha); in qlt_disable_vha()
6053 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); in qlt_disable_vha()
6054 qla2xxx_wake_dpc(vha); in qlt_disable_vha()
6055 qla2x00_wait_for_hba_online(vha); in qlt_disable_vha()
6064 qlt_vport_create(struct scsi_qla_host *vha, struct qla_hw_data *ha) in qlt_vport_create() argument
6066 if (!qla_tgt_mode_enabled(vha)) in qlt_vport_create()
6069 vha->vha_tgt.qla_tgt = NULL; in qlt_vport_create()
6071 mutex_init(&vha->vha_tgt.tgt_mutex); in qlt_vport_create()
6072 mutex_init(&vha->vha_tgt.tgt_host_action_mutex); in qlt_vport_create()
6074 qlt_clear_mode(vha); in qlt_vport_create()
6084 qlt_add_target(ha, vha); in qlt_vport_create()
6088 qlt_rff_id(struct scsi_qla_host *vha, struct ct_sns_req *ct_req) in qlt_rff_id() argument
6093 if (qla_tgt_mode_enabled(vha)) { in qlt_rff_id()
6094 if (qla_ini_mode_enabled(vha)) in qlt_rff_id()
6098 } else if (qla_ini_mode_enabled(vha)) { in qlt_rff_id()
6113 qlt_init_atio_q_entries(struct scsi_qla_host *vha) in qlt_init_atio_q_entries() argument
6115 struct qla_hw_data *ha = vha->hw; in qlt_init_atio_q_entries()
6119 if (!qla_tgt_mode_enabled(vha)) in qlt_init_atio_q_entries()
6134 qlt_24xx_process_atio_queue(struct scsi_qla_host *vha) in qlt_24xx_process_atio_queue() argument
6136 struct qla_hw_data *ha = vha->hw; in qlt_24xx_process_atio_queue()
6140 if (!vha->flags.online) in qlt_24xx_process_atio_queue()
6147 qlt_24xx_atio_pkt_all_vps(vha, (struct atio_from_isp *)pkt); in qlt_24xx_process_atio_queue()
6164 WRT_REG_DWORD(ISP_ATIO_Q_OUT(vha), ha->tgt.atio_ring_index); in qlt_24xx_process_atio_queue()
6165 RD_REG_DWORD_RELAXED(ISP_ATIO_Q_OUT(vha)); in qlt_24xx_process_atio_queue()
6169 qlt_24xx_config_rings(struct scsi_qla_host *vha) in qlt_24xx_config_rings() argument
6171 struct qla_hw_data *ha = vha->hw; in qlt_24xx_config_rings()
6175 WRT_REG_DWORD(ISP_ATIO_Q_IN(vha), 0); in qlt_24xx_config_rings()
6176 WRT_REG_DWORD(ISP_ATIO_Q_OUT(vha), 0); in qlt_24xx_config_rings()
6177 RD_REG_DWORD(ISP_ATIO_Q_OUT(vha)); in qlt_24xx_config_rings()
6184 ql_dbg(ql_dbg_init, vha, 0xf072, in qlt_24xx_config_rings()
6191 qlt_24xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_24xx *nv) in qlt_24xx_config_nvram_stage1() argument
6193 struct qla_hw_data *ha = vha->hw; in qlt_24xx_config_nvram_stage1()
6195 if (qla_tgt_mode_enabled(vha)) { in qlt_24xx_config_nvram_stage1()
6214 if (!qla_ini_mode_enabled(vha)) in qlt_24xx_config_nvram_stage1()
6249 if (vha->flags.init_done) in qlt_24xx_config_nvram_stage1()
6250 fc_host_supported_classes(vha->host) = in qlt_24xx_config_nvram_stage1()
6255 if (vha->flags.init_done) in qlt_24xx_config_nvram_stage1()
6256 fc_host_supported_classes(vha->host) = FC_COS_CLASS3; in qlt_24xx_config_nvram_stage1()
6263 qlt_24xx_config_nvram_stage2(struct scsi_qla_host *vha, in qlt_24xx_config_nvram_stage2() argument
6266 struct qla_hw_data *ha = vha->hw; in qlt_24xx_config_nvram_stage2()
6275 qlt_81xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_81xx *nv) in qlt_81xx_config_nvram_stage1() argument
6277 struct qla_hw_data *ha = vha->hw; in qlt_81xx_config_nvram_stage1()
6282 if (qla_tgt_mode_enabled(vha)) { in qlt_81xx_config_nvram_stage1()
6301 if (!qla_ini_mode_enabled(vha)) in qlt_81xx_config_nvram_stage1()
6336 if (vha->flags.init_done) in qlt_81xx_config_nvram_stage1()
6337 fc_host_supported_classes(vha->host) = in qlt_81xx_config_nvram_stage1()
6342 if (vha->flags.init_done) in qlt_81xx_config_nvram_stage1()
6343 fc_host_supported_classes(vha->host) = FC_COS_CLASS3; in qlt_81xx_config_nvram_stage1()
6350 qlt_81xx_config_nvram_stage2(struct scsi_qla_host *vha, in qlt_81xx_config_nvram_stage2() argument
6353 struct qla_hw_data *ha = vha->hw; in qlt_81xx_config_nvram_stage2()
6374 qlt_24xx_process_response_error(struct scsi_qla_host *vha, in qlt_24xx_process_response_error() argument
6390 qlt_modify_vp_config(struct scsi_qla_host *vha, in qlt_modify_vp_config() argument
6393 if (qla_tgt_mode_enabled(vha)) in qlt_modify_vp_config()
6396 if (!qla_ini_mode_enabled(vha)) in qlt_modify_vp_config()
6423 scsi_qla_host_t *vha; in qla83xx_msix_atio_q() local
6429 vha = pci_get_drvdata(ha->pdev); in qla83xx_msix_atio_q()
6433 qlt_24xx_process_atio_queue(vha); in qla83xx_msix_atio_q()
6434 qla24xx_process_response_queue(vha, rsp); in qla83xx_msix_atio_q()
6478 qlt_update_vp_map(struct scsi_qla_host *vha, int cmd) in qlt_update_vp_map() argument
6485 vha->hw->tgt.tgt_vp_map[vha->vp_idx].vha = vha; in qlt_update_vp_map()
6488 vha->hw->tgt.tgt_vp_map[vha->d_id.b.al_pa].idx = vha->vp_idx; in qlt_update_vp_map()
6491 vha->hw->tgt.tgt_vp_map[vha->vp_idx].vha = NULL; in qlt_update_vp_map()
6494 vha->hw->tgt.tgt_vp_map[vha->d_id.b.al_pa].idx = 0; in qlt_update_vp_map()