Lines Matching refs:sc

36 #define snic_cmd_tag(sc)	(((struct scsi_cmnd *) sc)->request->tag)  argument
112 snic_io_lock_hash(struct snic *snic, struct scsi_cmnd *sc) in snic_io_lock_hash() argument
114 u32 hash = snic_cmd_tag(sc) & (SNIC_IO_LOCKS - 1); in snic_io_lock_hash()
129 struct scsi_cmnd *sc) in snic_release_req_buf() argument
134 SNIC_BUG_ON(!((CMD_STATE(sc) == SNIC_IOREQ_COMPLETE) || in snic_release_req_buf()
135 (CMD_STATE(sc) == SNIC_IOREQ_ABTS_COMPLETE) || in snic_release_req_buf()
136 (CMD_FLAGS(sc) & SNIC_DEV_RST_NOTSUP) || in snic_release_req_buf()
137 (CMD_FLAGS(sc) & SNIC_IO_INTERNAL_TERM_ISSUED) || in snic_release_req_buf()
138 (CMD_FLAGS(sc) & SNIC_DEV_RST_TERM_ISSUED) || in snic_release_req_buf()
139 (CMD_FLAGS(sc) & SNIC_SCSI_CLEANUP) || in snic_release_req_buf()
140 (CMD_STATE(sc) == SNIC_IOREQ_LR_COMPLETE))); in snic_release_req_buf()
144 sc, snic_cmd_tag(sc), rqi, rqi->req, rqi->abort_req, in snic_release_req_buf()
145 rqi->dr_req, snic_ioreq_state_to_str(CMD_STATE(sc)), in snic_release_req_buf()
146 CMD_FLAGS(sc)); in snic_release_req_buf()
154 scsi_dma_unmap(sc); in snic_release_req_buf()
165 struct scsi_cmnd *sc, in snic_queue_icmnd_req() argument
180 for_each_sg(scsi_sglist(sc), sg, sg_cnt, i) { in snic_queue_icmnd_req()
189 sc->sense_buffer, in snic_queue_icmnd_req()
196 sc->sense_buffer, snic_cmd_tag(sc)); in snic_queue_icmnd_req()
202 int_to_scsilun(sc->device->lun, &lun); in snic_queue_icmnd_req()
203 if (sc->sc_data_direction == DMA_FROM_DEVICE) in snic_queue_icmnd_req()
205 if (sc->sc_data_direction == DMA_TO_DEVICE) in snic_queue_icmnd_req()
210 snic_cmd_tag(sc), in snic_queue_icmnd_req()
216 sc->cmnd, in snic_queue_icmnd_req()
217 sc->cmd_len, in snic_queue_icmnd_req()
218 scsi_bufflen(sc), in snic_queue_icmnd_req()
243 struct scsi_cmnd *sc) in snic_issue_scsi_req() argument
248 u32 tag = snic_cmd_tag(sc); in snic_issue_scsi_req()
253 CMD_STATE(sc) = SNIC_IOREQ_NOT_INITED; in snic_issue_scsi_req()
254 CMD_FLAGS(sc) = SNIC_NO_FLAGS; in snic_issue_scsi_req()
255 sg_cnt = scsi_dma_map(sc); in snic_issue_scsi_req()
257 SNIC_TRC((u16)snic->shost->host_no, tag, (ulong) sc, 0, in snic_issue_scsi_req()
258 sc->cmnd[0], sg_cnt, CMD_STATE(sc)); in snic_issue_scsi_req()
268 scsi_dma_unmap(sc); in snic_issue_scsi_req()
275 rqi->sc = sc; in snic_issue_scsi_req()
277 CMD_STATE(sc) = SNIC_IOREQ_PENDING; in snic_issue_scsi_req()
278 CMD_SP(sc) = (char *) rqi; in snic_issue_scsi_req()
279 cmd_trc = SNIC_TRC_CMD(sc); in snic_issue_scsi_req()
280 CMD_FLAGS(sc) |= (SNIC_IO_INITIALIZED | SNIC_IO_ISSUED); in snic_issue_scsi_req()
281 cmd_st_flags = SNIC_TRC_CMD_STATE_FLAGS(sc); in snic_issue_scsi_req()
282 io_lock = snic_io_lock_hash(snic, sc); in snic_issue_scsi_req()
285 ret = snic_queue_icmnd_req(snic, rqi, sc, sg_cnt); in snic_issue_scsi_req()
289 sc, ret); in snic_issue_scsi_req()
292 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_issue_scsi_req()
293 CMD_SP(sc) = NULL; in snic_issue_scsi_req()
294 CMD_STATE(sc) = SNIC_IOREQ_COMPLETE; in snic_issue_scsi_req()
295 CMD_FLAGS(sc) &= ~SNIC_IO_ISSUED; /* turn off the flag */ in snic_issue_scsi_req()
299 snic_release_req_buf(snic, rqi, sc); in snic_issue_scsi_req()
301 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, 0, 0, 0, in snic_issue_scsi_req()
302 SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_issue_scsi_req()
304 u32 io_sz = scsi_bufflen(sc) >> 9; in snic_issue_scsi_req()
316 sc, tag); in snic_issue_scsi_req()
318 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, (ulong) rqi, in snic_issue_scsi_req()
334 snic_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *sc) in snic_queuecommand() argument
340 tgt = starget_to_tgt(scsi_target(sc->device)); in snic_queuecommand()
345 sc->result = ret; in snic_queuecommand()
346 sc->scsi_done(sc); in snic_queuecommand()
360 sc, snic_cmd_tag(sc), sc->cmnd[0], sc->device->lun); in snic_queuecommand()
362 ret = snic_issue_scsi_req(snic, tgt, sc); in snic_queuecommand()
379 struct scsi_cmnd *sc, in snic_proc_tmreq_pending_state() argument
382 int state = CMD_STATE(sc); in snic_proc_tmreq_pending_state()
385 CMD_FLAGS(sc) |= SNIC_IO_ABTS_PENDING; in snic_proc_tmreq_pending_state()
387 CMD_FLAGS(sc) |= SNIC_DEV_RST_PENDING; in snic_proc_tmreq_pending_state()
393 CMD_FLAGS(sc) |= SNIC_IO_DONE; in snic_proc_tmreq_pending_state()
397 CMD_FLAGS(sc) |= SNIC_IO_ABORTED; in snic_proc_tmreq_pending_state()
412 struct scsi_cmnd *sc, in snic_process_io_failed_state() argument
430 scsi_set_resid(sc, le32_to_cpu(icmnd_cmpl->resid)); in snic_process_io_failed_state()
476 snic_io_status_to_str(cmpl_stat), CMD_FLAGS(sc)); in snic_process_io_failed_state()
479 sc->result = (res << 16) | icmnd_cmpl->scsi_status; in snic_process_io_failed_state()
486 snic_tmreq_pending(struct scsi_cmnd *sc) in snic_tmreq_pending() argument
488 int state = CMD_STATE(sc); in snic_tmreq_pending()
502 struct scsi_cmnd *sc) in snic_process_icmnd_cmpl_status() argument
509 CMD_STATE(sc) = SNIC_IOREQ_COMPLETE; in snic_process_icmnd_cmpl_status()
512 sc->result = (DID_OK << 16) | scsi_stat; in snic_process_icmnd_cmpl_status()
514 xfer_len = scsi_bufflen(sc); in snic_process_icmnd_cmpl_status()
517 scsi_set_resid(sc, le32_to_cpu(icmnd_cmpl->resid)); in snic_process_icmnd_cmpl_status()
529 snic_process_io_failed_state(snic, icmnd_cmpl, sc, cmpl_stat); in snic_process_icmnd_cmpl_status()
533 snic_io_status_to_str(cmpl_stat), CMD_FLAGS(sc)); in snic_process_icmnd_cmpl_status()
551 struct scsi_cmnd *sc = NULL; in snic_icmnd_cmpl_handler() local
574 sc = scsi_host_find_tag(snic->shost, cmnd_id); in snic_icmnd_cmpl_handler()
575 WARN_ON_ONCE(!sc); in snic_icmnd_cmpl_handler()
577 if (!sc) { in snic_icmnd_cmpl_handler()
593 io_lock = snic_io_lock_hash(snic, sc); in snic_icmnd_cmpl_handler()
596 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_icmnd_cmpl_handler()
599 sc->device->lun, sc, sc->cmnd[0], snic_cmd_tag(sc), in snic_icmnd_cmpl_handler()
600 CMD_FLAGS(sc), rqi); in snic_icmnd_cmpl_handler()
602 if (CMD_FLAGS(sc) & SNIC_HOST_RESET_CMD_TERM) { in snic_icmnd_cmpl_handler()
612 CMD_FLAGS(sc) |= SNIC_IO_REQ_NULL; in snic_icmnd_cmpl_handler()
618 cmnd_id, sc, CMD_FLAGS(sc)); in snic_icmnd_cmpl_handler()
632 if (unlikely(snic_tmreq_pending(sc))) { in snic_icmnd_cmpl_handler()
633 snic_proc_tmreq_pending_state(snic, sc, hdr_stat); in snic_icmnd_cmpl_handler()
644 snic_ioreq_state_to_str(CMD_STATE(sc)), in snic_icmnd_cmpl_handler()
646 sc, sc_stat, le32_to_cpu(icmnd_cmpl->resid), in snic_icmnd_cmpl_handler()
647 CMD_FLAGS(sc)); in snic_icmnd_cmpl_handler()
649 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc, in snic_icmnd_cmpl_handler()
651 SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_icmnd_cmpl_handler()
656 if (snic_process_icmnd_cmpl_status(snic, icmnd_cmpl, hdr_stat, sc)) { in snic_icmnd_cmpl_handler()
657 scsi_print_command(sc); in snic_icmnd_cmpl_handler()
660 sc, sc->cmnd[0], cmnd_id, in snic_icmnd_cmpl_handler()
661 snic_io_status_to_str(hdr_stat), CMD_FLAGS(sc)); in snic_icmnd_cmpl_handler()
665 CMD_SP(sc) = NULL; in snic_icmnd_cmpl_handler()
666 CMD_FLAGS(sc) |= SNIC_IO_DONE; in snic_icmnd_cmpl_handler()
673 snic_release_req_buf(snic, rqi, sc); in snic_icmnd_cmpl_handler()
675 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc, in snic_icmnd_cmpl_handler()
677 SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_icmnd_cmpl_handler()
680 if (sc->scsi_done) in snic_icmnd_cmpl_handler()
681 sc->scsi_done(sc); in snic_icmnd_cmpl_handler()
691 struct scsi_cmnd *sc) in snic_proc_dr_cmpl_locked() argument
693 struct snic_req_info *rqi = (struct snic_req_info *) CMD_SP(sc); in snic_proc_dr_cmpl_locked()
696 CMD_LR_STATUS(sc) = cmpl_stat; in snic_proc_dr_cmpl_locked()
699 snic_ioreq_state_to_str(CMD_STATE(sc))); in snic_proc_dr_cmpl_locked()
701 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) { in snic_proc_dr_cmpl_locked()
702 CMD_FLAGS(sc) |= SNIC_DEV_RST_ABTS_PENDING; in snic_proc_dr_cmpl_locked()
704 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc, in snic_proc_dr_cmpl_locked()
706 (ulong) fwreq, 0, SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_proc_dr_cmpl_locked()
712 CMD_FLAGS(sc)); in snic_proc_dr_cmpl_locked()
718 if (CMD_FLAGS(sc) & SNIC_DEV_RST_TIMEDOUT) { in snic_proc_dr_cmpl_locked()
719 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc, in snic_proc_dr_cmpl_locked()
721 (ulong) fwreq, 0, SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_proc_dr_cmpl_locked()
727 CMD_FLAGS(sc)); in snic_proc_dr_cmpl_locked()
732 CMD_STATE(sc) = SNIC_IOREQ_LR_COMPLETE; in snic_proc_dr_cmpl_locked()
733 CMD_FLAGS(sc) |= SNIC_DEV_RST_DONE; in snic_proc_dr_cmpl_locked()
739 CMD_FLAGS(sc)); in snic_proc_dr_cmpl_locked()
778 struct scsi_cmnd *sc) in snic_process_itmf_cmpl() argument
787 io_lock = snic_io_lock_hash(snic, sc); in snic_process_itmf_cmpl()
789 if (CMD_FLAGS(sc) & SNIC_HOST_RESET_CMD_TERM) { in snic_process_itmf_cmpl()
794 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_process_itmf_cmpl()
800 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_REQ_NULL; in snic_process_itmf_cmpl()
803 snic_io_status_to_str(cmpl_stat), cmnd_id, sc, in snic_process_itmf_cmpl()
804 CMD_FLAGS(sc)); in snic_process_itmf_cmpl()
820 if (CMD_STATE(sc) != SNIC_IOREQ_ABTS_PENDING) { in snic_process_itmf_cmpl()
827 CMD_STATE(sc) = SNIC_IOREQ_ABTS_COMPLETE; in snic_process_itmf_cmpl()
828 CMD_ABTS_STATUS(sc) = cmpl_stat; in snic_process_itmf_cmpl()
829 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_DONE; in snic_process_itmf_cmpl()
835 CMD_FLAGS(sc)); in snic_process_itmf_cmpl()
849 CMD_SP(sc) = NULL; in snic_process_itmf_cmpl()
850 sc->result = (DID_ERROR << 16); in snic_process_itmf_cmpl()
853 sc, CMD_FLAGS(sc)); in snic_process_itmf_cmpl()
857 snic_release_req_buf(snic, rqi, sc); in snic_process_itmf_cmpl()
859 if (sc->scsi_done) { in snic_process_itmf_cmpl()
860 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc, in snic_process_itmf_cmpl()
862 (ulong) fwreq, SNIC_TRC_CMD(sc), in snic_process_itmf_cmpl()
863 SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_process_itmf_cmpl()
865 sc->scsi_done(sc); in snic_process_itmf_cmpl()
872 snic_proc_dr_cmpl_locked(snic, fwreq, cmpl_stat, cmnd_id, sc); in snic_process_itmf_cmpl()
881 CMD_STATE(sc) = SNIC_IOREQ_ABTS_COMPLETE; in snic_process_itmf_cmpl()
882 CMD_ABTS_STATUS(sc) = cmpl_stat; in snic_process_itmf_cmpl()
883 CMD_FLAGS(sc) |= SNIC_DEV_RST_DONE; in snic_process_itmf_cmpl()
888 CMD_FLAGS(sc)); in snic_process_itmf_cmpl()
904 snic_ioreq_state_to_str(CMD_STATE(sc)), in snic_process_itmf_cmpl()
906 CMD_FLAGS(sc)); in snic_process_itmf_cmpl()
923 struct scsi_cmnd *sc = NULL; in snic_itmf_cmpl_handler() local
945 sc = rqi->sc; in snic_itmf_cmpl_handler()
959 sc = scsi_host_find_tag(snic->shost, cmnd_id & SNIC_TAG_MASK); in snic_itmf_cmpl_handler()
960 WARN_ON_ONCE(!sc); in snic_itmf_cmpl_handler()
963 if (!sc) { in snic_itmf_cmpl_handler()
972 snic_process_itmf_cmpl(snic, fwreq, cmnd_id, hdr_stat, sc); in snic_itmf_cmpl_handler()
978 snic_hba_reset_scsi_cleanup(struct snic *snic, struct scsi_cmnd *sc) in snic_hba_reset_scsi_cleanup() argument
984 snic_scsi_cleanup(snic, snic_cmd_tag(sc)); in snic_hba_reset_scsi_cleanup()
1010 struct scsi_cmnd *sc = NULL; in snic_hba_reset_cmpl_handler() local
1031 sc = rqi->sc; in snic_hba_reset_cmpl_handler()
1045 sc = scsi_host_find_tag(snic->shost, cmnd_id); in snic_hba_reset_cmpl_handler()
1047 if (!sc) { in snic_hba_reset_cmpl_handler()
1059 sc, rqi, cmnd_id, CMD_FLAGS(sc)); in snic_hba_reset_cmpl_handler()
1061 io_lock = snic_io_lock_hash(snic, sc); in snic_hba_reset_cmpl_handler()
1073 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_hba_reset_cmpl_handler()
1079 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_REQ_NULL; in snic_hba_reset_cmpl_handler()
1082 snic_io_status_to_str(hdr_stat), cmnd_id, sc, in snic_hba_reset_cmpl_handler()
1083 CMD_FLAGS(sc)); in snic_hba_reset_cmpl_handler()
1093 snic_hba_reset_scsi_cleanup(snic, sc); in snic_hba_reset_cmpl_handler()
1310 struct scsi_cmnd *sc, in snic_queue_itmf_req() argument
1316 int tm_tag = snic_cmd_tag(sc) | rqi->tm_tag; in snic_queue_itmf_req()
1323 int_to_scsilun(sc->device->lun, &lun); in snic_queue_itmf_req()
1347 tmf, sc, rqi, req_id, snic_cmd_tag(sc), ret); in snic_queue_itmf_req()
1351 tmf, sc, rqi, req_id, snic_cmd_tag(sc)); in snic_queue_itmf_req()
1359 struct scsi_cmnd *sc, in snic_issue_tm_req() argument
1363 int req_id = 0, tag = snic_cmd_tag(sc); in snic_issue_tm_req()
1390 ret = snic_queue_itmf_req(snic, tmreq, sc, tmf, req_id); in snic_issue_tm_req()
1400 tmf, sc, rqi, req_id, tag, ret); in snic_issue_tm_req()
1404 tmf, sc, rqi, req_id, tag); in snic_issue_tm_req()
1418 struct scsi_cmnd *sc, in snic_queue_abort_req() argument
1422 sc, rqi, snic_cmd_tag(sc), tmf); in snic_queue_abort_req()
1427 return snic_issue_tm_req(snic, rqi, sc, tmf); in snic_queue_abort_req()
1434 snic_abort_finish(struct snic *snic, struct scsi_cmnd *sc) in snic_abort_finish() argument
1439 int ret = 0, tag = snic_cmd_tag(sc); in snic_abort_finish()
1441 io_lock = snic_io_lock_hash(snic, sc); in snic_abort_finish()
1443 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_abort_finish()
1446 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_REQ_NULL; in snic_abort_finish()
1450 tag, sc, CMD_FLAGS(sc)); in snic_abort_finish()
1461 switch (CMD_ABTS_STATUS(sc)) { in snic_abort_finish()
1464 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TIMEDOUT; in snic_abort_finish()
1468 sc, snic_cmd_tag(sc), CMD_FLAGS(sc)); in snic_abort_finish()
1482 sc->result = (DID_ERROR << 16); in snic_abort_finish()
1483 sc->scsi_done(sc); in snic_abort_finish()
1493 CMD_SP(sc) = NULL; in snic_abort_finish()
1496 tag, snic_io_status_to_str(CMD_ABTS_STATUS(sc)), in snic_abort_finish()
1497 CMD_FLAGS(sc)); in snic_abort_finish()
1502 snic_release_req_buf(snic, rqi, sc); in snic_abort_finish()
1511 snic_send_abort_and_wait(struct snic *snic, struct scsi_cmnd *sc) in snic_send_abort_and_wait() argument
1519 int ret = 0, tmf = 0, tag = snic_cmd_tag(sc); in snic_send_abort_and_wait()
1521 tgt = starget_to_tgt(scsi_target(sc->device)); in snic_send_abort_and_wait()
1529 io_lock = snic_io_lock_hash(snic, sc); in snic_send_abort_and_wait()
1544 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_send_abort_and_wait()
1550 tag, CMD_FLAGS(sc)); in snic_send_abort_and_wait()
1558 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) { in snic_send_abort_and_wait()
1567 sv_state = CMD_STATE(sc); in snic_send_abort_and_wait()
1575 CMD_STATE(sc) = SNIC_IOREQ_ABTS_PENDING; in snic_send_abort_and_wait()
1576 CMD_ABTS_STATUS(sc) = SNIC_INVALID_CODE; in snic_send_abort_and_wait()
1583 ret = snic_queue_abort_req(snic, rqi, sc, tmf); in snic_send_abort_and_wait()
1588 tag, ret, CMD_FLAGS(sc)); in snic_send_abort_and_wait()
1592 CMD_STATE(sc) = sv_state; in snic_send_abort_and_wait()
1593 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_send_abort_and_wait()
1604 CMD_FLAGS(sc) |= SNIC_IO_ABTS_ISSUED; in snic_send_abort_and_wait()
1608 CMD_FLAGS(sc) |= SNIC_IO_TERM_ISSUED; in snic_send_abort_and_wait()
1614 sc, tag, CMD_FLAGS(sc)); in snic_send_abort_and_wait()
1637 snic_abort_cmd(struct scsi_cmnd *sc) in snic_abort_cmd() argument
1639 struct snic *snic = shost_priv(sc->device->host); in snic_abort_cmd()
1640 int ret = SUCCESS, tag = snic_cmd_tag(sc); in snic_abort_cmd()
1644 sc, sc->cmnd[0], sc->request, tag); in snic_abort_cmd()
1656 ret = snic_send_abort_and_wait(snic, sc); in snic_abort_cmd()
1660 ret = snic_abort_finish(snic, sc); in snic_abort_cmd()
1663 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, in snic_abort_cmd()
1665 SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_abort_cmd()
1681 struct scsi_cmnd *sc = NULL; in snic_is_abts_pending() local
1695 sc = scsi_host_find_tag(snic->shost, tag); in snic_is_abts_pending()
1697 if (!sc || (lr_sc && (sc->device != lr_sdev || sc == lr_sc))) { in snic_is_abts_pending()
1703 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_is_abts_pending()
1715 snic_ioreq_state_to_str(CMD_STATE(sc))); in snic_is_abts_pending()
1717 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) { in snic_is_abts_pending()
1736 struct scsi_cmnd *sc = NULL; in snic_dr_clean_single_req() local
1745 sc = scsi_host_find_tag(snic->shost, tag); in snic_dr_clean_single_req()
1748 if (!sc || sc->device != lr_sdev) in snic_dr_clean_single_req()
1751 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_clean_single_req()
1757 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) in snic_dr_clean_single_req()
1761 if ((CMD_FLAGS(sc) & SNIC_DEVICE_RESET) && in snic_dr_clean_single_req()
1762 (!(CMD_FLAGS(sc) & SNIC_DEV_RST_ISSUED))) { in snic_dr_clean_single_req()
1766 sc); in snic_dr_clean_single_req()
1773 snic_ioreq_state_to_str(CMD_STATE(sc))); in snic_dr_clean_single_req()
1776 sv_state = CMD_STATE(sc); in snic_dr_clean_single_req()
1786 CMD_STATE(sc) = SNIC_IOREQ_ABTS_PENDING; in snic_dr_clean_single_req()
1789 if (CMD_FLAGS(sc) & SNIC_DEVICE_RESET) { in snic_dr_clean_single_req()
1793 "clean_single_req:devrst sc 0x%p\n", sc); in snic_dr_clean_single_req()
1796 CMD_ABTS_STATUS(sc) = SNIC_INVALID_CODE; in snic_dr_clean_single_req()
1800 tgt = starget_to_tgt(scsi_target(sc->device)); in snic_dr_clean_single_req()
1807 ret = snic_queue_abort_req(snic, rqi, sc, tmf); in snic_dr_clean_single_req()
1811 sc, tag, rqi->tm_tag, CMD_FLAGS(sc)); in snic_dr_clean_single_req()
1814 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_clean_single_req()
1819 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) in snic_dr_clean_single_req()
1820 CMD_STATE(sc) = sv_state; in snic_dr_clean_single_req()
1827 if (CMD_FLAGS(sc) & SNIC_DEVICE_RESET) in snic_dr_clean_single_req()
1828 CMD_FLAGS(sc) |= SNIC_DEV_RST_TERM_ISSUED; in snic_dr_clean_single_req()
1830 CMD_FLAGS(sc) |= SNIC_IO_INTERNAL_TERM_ISSUED; in snic_dr_clean_single_req()
1837 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_clean_single_req()
1839 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_REQ_NULL; in snic_dr_clean_single_req()
1845 if (CMD_ABTS_STATUS(sc) == SNIC_INVALID_CODE) { in snic_dr_clean_single_req()
1848 sc, tag, rqi->tm_tag, CMD_FLAGS(sc)); in snic_dr_clean_single_req()
1850 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_DONE; in snic_dr_clean_single_req()
1856 CMD_STATE(sc) = SNIC_IOREQ_ABTS_COMPLETE; in snic_dr_clean_single_req()
1857 CMD_SP(sc) = NULL; in snic_dr_clean_single_req()
1860 snic_release_req_buf(snic, rqi, sc); in snic_dr_clean_single_req()
1862 sc->result = (DID_ERROR << 16); in snic_dr_clean_single_req()
1863 sc->scsi_done(sc); in snic_dr_clean_single_req()
1922 snic_dr_finish(struct snic *snic, struct scsi_cmnd *sc) in snic_dr_finish() argument
1930 io_lock = snic_io_lock_hash(snic, sc); in snic_dr_finish()
1932 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_finish()
1937 snic_cmd_tag(sc), sc, CMD_FLAGS(sc)); in snic_dr_finish()
1945 lr_res = CMD_LR_STATUS(sc); in snic_dr_finish()
1952 snic_cmd_tag(sc), CMD_FLAGS(sc)); in snic_dr_finish()
1954 CMD_FLAGS(sc) |= SNIC_DEV_RST_TIMEDOUT; in snic_dr_finish()
1962 snic_cmd_tag(sc)); in snic_dr_finish()
1969 snic_cmd_tag(sc), in snic_dr_finish()
1970 snic_io_status_to_str(lr_res), CMD_FLAGS(sc)); in snic_dr_finish()
1984 ret = snic_dr_clean_pending_req(snic, sc); in snic_dr_finish()
1989 snic_cmd_tag(sc)); in snic_dr_finish()
1990 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_finish()
1996 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_finish()
2006 CMD_SP(sc) = NULL; in snic_dr_finish()
2010 snic_release_req_buf(snic, rqi, sc); in snic_dr_finish()
2019 struct scsi_cmnd *sc) in snic_queue_dr_req() argument
2024 return snic_issue_tm_req(snic, rqi, sc, SNIC_ITMF_LUN_RESET); in snic_queue_dr_req()
2028 snic_send_dr_and_wait(struct snic *snic, struct scsi_cmnd *sc) in snic_send_dr_and_wait() argument
2035 int ret = FAILED, tag = snic_cmd_tag(sc); in snic_send_dr_and_wait()
2037 io_lock = snic_io_lock_hash(snic, sc); in snic_send_dr_and_wait()
2039 CMD_FLAGS(sc) |= SNIC_DEVICE_RESET; in snic_send_dr_and_wait()
2040 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_send_dr_and_wait()
2044 tag, CMD_FLAGS(sc)); in snic_send_dr_and_wait()
2052 sv_state = CMD_STATE(sc); in snic_send_dr_and_wait()
2054 CMD_STATE(sc) = SNIC_IOREQ_LR_PENDING; in snic_send_dr_and_wait()
2055 CMD_LR_STATUS(sc) = SNIC_INVALID_CODE; in snic_send_dr_and_wait()
2070 ret = snic_queue_dr_req(snic, rqi, sc); in snic_send_dr_and_wait()
2074 tag, ret, CMD_FLAGS(sc)); in snic_send_dr_and_wait()
2078 CMD_STATE(sc) = sv_state; in snic_send_dr_and_wait()
2079 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_send_dr_and_wait()
2090 CMD_FLAGS(sc) |= SNIC_DEV_RST_ISSUED; in snic_send_dr_and_wait()
2117 snic_unlink_and_release_req(struct snic *snic, struct scsi_cmnd *sc, int flag) in snic_unlink_and_release_req() argument
2124 io_lock = snic_io_lock_hash(snic, sc); in snic_unlink_and_release_req()
2126 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_unlink_and_release_req()
2129 CMD_SP(sc) = NULL; in snic_unlink_and_release_req()
2132 CMD_FLAGS(sc) |= flag; in snic_unlink_and_release_req()
2136 snic_release_req_buf(snic, rqi, sc); in snic_unlink_and_release_req()
2138 SNIC_TRC(snic->shost->host_no, snic_cmd_tag(sc), (ulong) sc, in snic_unlink_and_release_req()
2140 SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_unlink_and_release_req()
2149 snic_device_reset(struct scsi_cmnd *sc) in snic_device_reset() argument
2151 struct Scsi_Host *shost = sc->device->host; in snic_device_reset()
2154 int tag = snic_cmd_tag(sc); in snic_device_reset()
2160 sc, sc->cmnd[0], sc->request, in snic_device_reset()
2161 snic_cmd_tag(sc)); in snic_device_reset()
2162 dr_supp = snic_dev_reset_supported(sc->device); in snic_device_reset()
2166 snic_unlink_and_release_req(snic, sc, SNIC_DEV_RST_NOTSUP); in snic_device_reset()
2172 snic_unlink_and_release_req(snic, sc, 0); in snic_device_reset()
2187 memset(scsi_cmd_priv(sc), 0, in snic_device_reset()
2189 CMD_SP(sc) = (char *)rqi; in snic_device_reset()
2190 CMD_FLAGS(sc) = SNIC_NO_FLAGS; in snic_device_reset()
2194 rqi->sc = sc; in snic_device_reset()
2197 ret = snic_send_dr_and_wait(snic, sc); in snic_device_reset()
2203 snic_unlink_and_release_req(snic, sc, 0); in snic_device_reset()
2208 ret = snic_dr_finish(snic, sc); in snic_device_reset()
2211 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, in snic_device_reset()
2213 0, SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_device_reset()
2233 snic_issue_hba_reset(struct snic *snic, struct scsi_cmnd *sc) in snic_issue_hba_reset() argument
2249 if (snic_cmd_tag(sc) == SCSI_NO_TAG) { in snic_issue_hba_reset()
2250 memset(scsi_cmd_priv(sc), 0, in snic_issue_hba_reset()
2253 rqi->sc = sc; in snic_issue_hba_reset()
2258 io_lock = snic_io_lock_hash(snic, sc); in snic_issue_hba_reset()
2260 SNIC_BUG_ON(CMD_SP(sc) != NULL); in snic_issue_hba_reset()
2261 CMD_STATE(sc) = SNIC_IOREQ_PENDING; in snic_issue_hba_reset()
2262 CMD_SP(sc) = (char *) rqi; in snic_issue_hba_reset()
2263 CMD_FLAGS(sc) |= SNIC_IO_INITIALIZED; in snic_issue_hba_reset()
2268 snic_io_hdr_enc(&req->hdr, SNIC_REQ_HBA_RESET, 0, snic_cmd_tag(sc), in snic_issue_hba_reset()
2283 CMD_FLAGS(sc) |= SNIC_HOST_RESET_ISSUED; in snic_issue_hba_reset()
2300 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_issue_hba_reset()
2301 CMD_SP(sc) = NULL; in snic_issue_hba_reset()
2314 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_issue_hba_reset()
2315 CMD_SP(sc) = NULL; in snic_issue_hba_reset()
2330 snic_reset(struct Scsi_Host *shost, struct scsi_cmnd *sc) in snic_reset() argument
2359 ret = snic_issue_hba_reset(snic, sc); in snic_reset()
2387 snic_host_reset(struct scsi_cmnd *sc) in snic_host_reset() argument
2389 struct Scsi_Host *shost = sc->device->host; in snic_host_reset()
2395 sc, sc->cmnd[0], sc->request, in snic_host_reset()
2396 snic_cmd_tag(sc), CMD_FLAGS(sc)); in snic_host_reset()
2398 ret = snic_reset(shost, sc); in snic_host_reset()
2400 SNIC_TRC(shost->host_no, snic_cmd_tag(sc), (ulong) sc, in snic_host_reset()
2402 0, SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_host_reset()
2411 snic_cmpl_pending_tmreq(struct snic *snic, struct scsi_cmnd *sc) in snic_cmpl_pending_tmreq() argument
2417 sc, snic_io_status_to_str(CMD_STATE(sc)), CMD_FLAGS(sc)); in snic_cmpl_pending_tmreq()
2424 CMD_ABTS_STATUS(sc) = SNIC_STAT_IO_SUCCESS; in snic_cmpl_pending_tmreq()
2426 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_cmpl_pending_tmreq()
2443 struct scsi_cmnd *sc = NULL; in snic_scsi_cleanup() local
2458 sc = scsi_host_find_tag(snic->shost, tag); in snic_scsi_cleanup()
2459 if (!sc) { in snic_scsi_cleanup()
2465 if (unlikely(snic_tmreq_pending(sc))) { in snic_scsi_cleanup()
2470 snic_cmpl_pending_tmreq(snic, sc); in snic_scsi_cleanup()
2476 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_scsi_cleanup()
2485 sc, rqi, tag, CMD_FLAGS(sc)); in snic_scsi_cleanup()
2487 CMD_SP(sc) = NULL; in snic_scsi_cleanup()
2488 CMD_FLAGS(sc) |= SNIC_SCSI_CLEANUP; in snic_scsi_cleanup()
2494 rqi, CMD_FLAGS(sc)); in snic_scsi_cleanup()
2496 snic_release_req_buf(snic, rqi, sc); in snic_scsi_cleanup()
2499 sc->result = DID_TRANSPORT_DISRUPTED << 16; in snic_scsi_cleanup()
2502 sc, sc->request->tag, CMD_FLAGS(sc), rqi, in snic_scsi_cleanup()
2508 if (sc->scsi_done) { in snic_scsi_cleanup()
2509 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, in snic_scsi_cleanup()
2511 SNIC_TRC_CMD(sc), in snic_scsi_cleanup()
2512 SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_scsi_cleanup()
2514 sc->scsi_done(sc); in snic_scsi_cleanup()
2532 snic_internal_abort_io(struct snic *snic, struct scsi_cmnd *sc, int tmf) in snic_internal_abort_io() argument
2540 io_lock = snic_io_lock_hash(snic, sc); in snic_internal_abort_io()
2542 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_internal_abort_io()
2546 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) in snic_internal_abort_io()
2549 if ((CMD_FLAGS(sc) & SNIC_DEVICE_RESET) && in snic_internal_abort_io()
2550 (!(CMD_FLAGS(sc) & SNIC_DEV_RST_ISSUED))) { in snic_internal_abort_io()
2554 sc); in snic_internal_abort_io()
2560 if (!(CMD_FLAGS(sc) & SNIC_IO_ISSUED)) { in snic_internal_abort_io()
2563 sc, snic_cmd_tag(sc), CMD_FLAGS(sc), CMD_STATE(sc)); in snic_internal_abort_io()
2568 sv_state = CMD_STATE(sc); in snic_internal_abort_io()
2569 CMD_STATE(sc) = SNIC_IOREQ_ABTS_PENDING; in snic_internal_abort_io()
2570 CMD_ABTS_STATUS(sc) = SNIC_INVALID_CODE; in snic_internal_abort_io()
2571 CMD_FLAGS(sc) |= SNIC_IO_INTERNAL_TERM_PENDING; in snic_internal_abort_io()
2573 if (CMD_FLAGS(sc) & SNIC_DEVICE_RESET) { in snic_internal_abort_io()
2576 SNIC_SCSI_DBG(snic->shost, "internal_abts:dev rst sc %p\n", sc); in snic_internal_abort_io()
2580 snic_cmd_tag(sc)); in snic_internal_abort_io()
2584 ret = snic_queue_abort_req(snic, rqi, sc, tmf); in snic_internal_abort_io()
2588 snic_cmd_tag(sc), ret); in snic_internal_abort_io()
2592 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) in snic_internal_abort_io()
2593 CMD_STATE(sc) = sv_state; in snic_internal_abort_io()
2599 if (CMD_FLAGS(sc) & SNIC_DEVICE_RESET) in snic_internal_abort_io()
2600 CMD_FLAGS(sc) |= SNIC_DEV_RST_TERM_ISSUED; in snic_internal_abort_io()
2602 CMD_FLAGS(sc) |= SNIC_IO_INTERNAL_TERM_ISSUED; in snic_internal_abort_io()
2620 struct scsi_cmnd *sc = NULL; in snic_tgt_scsi_abort_io() local
2641 sc = scsi_host_find_tag(snic->shost, tag); in snic_tgt_scsi_abort_io()
2642 if (!sc) { in snic_tgt_scsi_abort_io()
2648 sc_tgt = starget_to_tgt(scsi_target(sc->device)); in snic_tgt_scsi_abort_io()
2656 ret = snic_internal_abort_io(snic, sc, tmf); in snic_tgt_scsi_abort_io()