• Home
  • Raw
  • Download

Lines Matching refs:sc

36 #define snic_cmd_tag(sc)	(scsi_cmd_to_rq(sc)->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()
195 sc->sense_buffer, snic_cmd_tag(sc)); in snic_queue_icmnd_req()
201 int_to_scsilun(sc->device->lun, &lun); in snic_queue_icmnd_req()
202 if (sc->sc_data_direction == DMA_FROM_DEVICE) in snic_queue_icmnd_req()
204 if (sc->sc_data_direction == DMA_TO_DEVICE) in snic_queue_icmnd_req()
209 snic_cmd_tag(sc), in snic_queue_icmnd_req()
215 sc->cmnd, in snic_queue_icmnd_req()
216 sc->cmd_len, in snic_queue_icmnd_req()
217 scsi_bufflen(sc), in snic_queue_icmnd_req()
242 struct scsi_cmnd *sc) in snic_issue_scsi_req() argument
247 u32 tag = snic_cmd_tag(sc); in snic_issue_scsi_req()
252 CMD_STATE(sc) = SNIC_IOREQ_NOT_INITED; in snic_issue_scsi_req()
253 CMD_FLAGS(sc) = SNIC_NO_FLAGS; in snic_issue_scsi_req()
254 sg_cnt = scsi_dma_map(sc); in snic_issue_scsi_req()
256 SNIC_TRC((u16)snic->shost->host_no, tag, (ulong) sc, 0, in snic_issue_scsi_req()
257 sc->cmnd[0], sg_cnt, CMD_STATE(sc)); in snic_issue_scsi_req()
267 scsi_dma_unmap(sc); in snic_issue_scsi_req()
274 rqi->sc = sc; in snic_issue_scsi_req()
276 CMD_STATE(sc) = SNIC_IOREQ_PENDING; in snic_issue_scsi_req()
277 CMD_SP(sc) = (char *) rqi; in snic_issue_scsi_req()
278 cmd_trc = SNIC_TRC_CMD(sc); in snic_issue_scsi_req()
279 CMD_FLAGS(sc) |= (SNIC_IO_INITIALIZED | SNIC_IO_ISSUED); in snic_issue_scsi_req()
280 cmd_st_flags = SNIC_TRC_CMD_STATE_FLAGS(sc); in snic_issue_scsi_req()
281 io_lock = snic_io_lock_hash(snic, sc); in snic_issue_scsi_req()
284 ret = snic_queue_icmnd_req(snic, rqi, sc, sg_cnt); in snic_issue_scsi_req()
288 sc, ret); in snic_issue_scsi_req()
291 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_issue_scsi_req()
292 CMD_SP(sc) = NULL; in snic_issue_scsi_req()
293 CMD_STATE(sc) = SNIC_IOREQ_COMPLETE; in snic_issue_scsi_req()
294 CMD_FLAGS(sc) &= ~SNIC_IO_ISSUED; /* turn off the flag */ in snic_issue_scsi_req()
298 snic_release_req_buf(snic, rqi, sc); in snic_issue_scsi_req()
300 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, 0, 0, 0, in snic_issue_scsi_req()
301 SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_issue_scsi_req()
303 u32 io_sz = scsi_bufflen(sc) >> 9; in snic_issue_scsi_req()
315 sc, tag); in snic_issue_scsi_req()
317 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, (ulong) rqi, in snic_issue_scsi_req()
333 snic_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *sc) in snic_queuecommand() argument
339 tgt = starget_to_tgt(scsi_target(sc->device)); in snic_queuecommand()
344 sc->result = ret; in snic_queuecommand()
345 sc->scsi_done(sc); in snic_queuecommand()
359 sc, snic_cmd_tag(sc), sc->cmnd[0], sc->device->lun); in snic_queuecommand()
361 ret = snic_issue_scsi_req(snic, tgt, sc); in snic_queuecommand()
378 struct scsi_cmnd *sc, in snic_proc_tmreq_pending_state() argument
381 int state = CMD_STATE(sc); in snic_proc_tmreq_pending_state()
384 CMD_FLAGS(sc) |= SNIC_IO_ABTS_PENDING; in snic_proc_tmreq_pending_state()
386 CMD_FLAGS(sc) |= SNIC_DEV_RST_PENDING; in snic_proc_tmreq_pending_state()
392 CMD_FLAGS(sc) |= SNIC_IO_DONE; in snic_proc_tmreq_pending_state()
396 CMD_FLAGS(sc) |= SNIC_IO_ABORTED; in snic_proc_tmreq_pending_state()
411 struct scsi_cmnd *sc, in snic_process_io_failed_state() argument
429 scsi_set_resid(sc, le32_to_cpu(icmnd_cmpl->resid)); in snic_process_io_failed_state()
475 snic_io_status_to_str(cmpl_stat), CMD_FLAGS(sc)); in snic_process_io_failed_state()
478 sc->result = (res << 16) | icmnd_cmpl->scsi_status; in snic_process_io_failed_state()
485 snic_tmreq_pending(struct scsi_cmnd *sc) in snic_tmreq_pending() argument
487 int state = CMD_STATE(sc); in snic_tmreq_pending()
501 struct scsi_cmnd *sc) in snic_process_icmnd_cmpl_status() argument
508 CMD_STATE(sc) = SNIC_IOREQ_COMPLETE; in snic_process_icmnd_cmpl_status()
511 sc->result = (DID_OK << 16) | scsi_stat; in snic_process_icmnd_cmpl_status()
513 xfer_len = scsi_bufflen(sc); in snic_process_icmnd_cmpl_status()
516 scsi_set_resid(sc, le32_to_cpu(icmnd_cmpl->resid)); in snic_process_icmnd_cmpl_status()
528 snic_process_io_failed_state(snic, icmnd_cmpl, sc, cmpl_stat); in snic_process_icmnd_cmpl_status()
532 snic_io_status_to_str(cmpl_stat), CMD_FLAGS(sc)); in snic_process_icmnd_cmpl_status()
550 struct scsi_cmnd *sc = NULL; in snic_icmnd_cmpl_handler() local
573 sc = scsi_host_find_tag(snic->shost, cmnd_id); in snic_icmnd_cmpl_handler()
574 WARN_ON_ONCE(!sc); in snic_icmnd_cmpl_handler()
576 if (!sc) { in snic_icmnd_cmpl_handler()
592 io_lock = snic_io_lock_hash(snic, sc); in snic_icmnd_cmpl_handler()
595 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_icmnd_cmpl_handler()
598 sc->device->lun, sc, sc->cmnd[0], snic_cmd_tag(sc), in snic_icmnd_cmpl_handler()
599 CMD_FLAGS(sc), rqi); in snic_icmnd_cmpl_handler()
601 if (CMD_FLAGS(sc) & SNIC_HOST_RESET_CMD_TERM) { in snic_icmnd_cmpl_handler()
611 CMD_FLAGS(sc) |= SNIC_IO_REQ_NULL; in snic_icmnd_cmpl_handler()
617 cmnd_id, sc, CMD_FLAGS(sc)); in snic_icmnd_cmpl_handler()
631 if (unlikely(snic_tmreq_pending(sc))) { in snic_icmnd_cmpl_handler()
632 snic_proc_tmreq_pending_state(snic, sc, hdr_stat); in snic_icmnd_cmpl_handler()
643 snic_ioreq_state_to_str(CMD_STATE(sc)), in snic_icmnd_cmpl_handler()
645 sc, sc_stat, le32_to_cpu(icmnd_cmpl->resid), in snic_icmnd_cmpl_handler()
646 CMD_FLAGS(sc)); in snic_icmnd_cmpl_handler()
648 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc, in snic_icmnd_cmpl_handler()
650 SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_icmnd_cmpl_handler()
655 if (snic_process_icmnd_cmpl_status(snic, icmnd_cmpl, hdr_stat, sc)) { in snic_icmnd_cmpl_handler()
656 scsi_print_command(sc); in snic_icmnd_cmpl_handler()
659 sc, sc->cmnd[0], cmnd_id, in snic_icmnd_cmpl_handler()
660 snic_io_status_to_str(hdr_stat), CMD_FLAGS(sc)); in snic_icmnd_cmpl_handler()
664 CMD_SP(sc) = NULL; in snic_icmnd_cmpl_handler()
665 CMD_FLAGS(sc) |= SNIC_IO_DONE; in snic_icmnd_cmpl_handler()
672 snic_release_req_buf(snic, rqi, sc); in snic_icmnd_cmpl_handler()
674 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc, in snic_icmnd_cmpl_handler()
676 SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_icmnd_cmpl_handler()
679 if (sc->scsi_done) in snic_icmnd_cmpl_handler()
680 sc->scsi_done(sc); in snic_icmnd_cmpl_handler()
690 struct scsi_cmnd *sc) in snic_proc_dr_cmpl_locked() argument
692 struct snic_req_info *rqi = (struct snic_req_info *) CMD_SP(sc); in snic_proc_dr_cmpl_locked()
695 CMD_LR_STATUS(sc) = cmpl_stat; in snic_proc_dr_cmpl_locked()
698 snic_ioreq_state_to_str(CMD_STATE(sc))); in snic_proc_dr_cmpl_locked()
700 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) { in snic_proc_dr_cmpl_locked()
701 CMD_FLAGS(sc) |= SNIC_DEV_RST_ABTS_PENDING; in snic_proc_dr_cmpl_locked()
703 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc, in snic_proc_dr_cmpl_locked()
705 (ulong) fwreq, 0, SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_proc_dr_cmpl_locked()
711 CMD_FLAGS(sc)); in snic_proc_dr_cmpl_locked()
717 if (CMD_FLAGS(sc) & SNIC_DEV_RST_TIMEDOUT) { in snic_proc_dr_cmpl_locked()
718 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc, in snic_proc_dr_cmpl_locked()
720 (ulong) fwreq, 0, SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_proc_dr_cmpl_locked()
726 CMD_FLAGS(sc)); in snic_proc_dr_cmpl_locked()
731 CMD_STATE(sc) = SNIC_IOREQ_LR_COMPLETE; in snic_proc_dr_cmpl_locked()
732 CMD_FLAGS(sc) |= SNIC_DEV_RST_DONE; in snic_proc_dr_cmpl_locked()
738 CMD_FLAGS(sc)); in snic_proc_dr_cmpl_locked()
777 struct scsi_cmnd *sc) in snic_process_itmf_cmpl() argument
786 io_lock = snic_io_lock_hash(snic, sc); in snic_process_itmf_cmpl()
788 if (CMD_FLAGS(sc) & SNIC_HOST_RESET_CMD_TERM) { in snic_process_itmf_cmpl()
793 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_process_itmf_cmpl()
799 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_REQ_NULL; in snic_process_itmf_cmpl()
802 snic_io_status_to_str(cmpl_stat), cmnd_id, sc, in snic_process_itmf_cmpl()
803 CMD_FLAGS(sc)); in snic_process_itmf_cmpl()
819 if (CMD_STATE(sc) != SNIC_IOREQ_ABTS_PENDING) { in snic_process_itmf_cmpl()
826 CMD_STATE(sc) = SNIC_IOREQ_ABTS_COMPLETE; in snic_process_itmf_cmpl()
827 CMD_ABTS_STATUS(sc) = cmpl_stat; in snic_process_itmf_cmpl()
828 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_DONE; in snic_process_itmf_cmpl()
834 CMD_FLAGS(sc)); in snic_process_itmf_cmpl()
848 CMD_SP(sc) = NULL; in snic_process_itmf_cmpl()
849 sc->result = (DID_ERROR << 16); in snic_process_itmf_cmpl()
852 sc, CMD_FLAGS(sc)); in snic_process_itmf_cmpl()
856 snic_release_req_buf(snic, rqi, sc); in snic_process_itmf_cmpl()
858 if (sc->scsi_done) { in snic_process_itmf_cmpl()
859 SNIC_TRC(snic->shost->host_no, cmnd_id, (ulong) sc, in snic_process_itmf_cmpl()
861 (ulong) fwreq, SNIC_TRC_CMD(sc), in snic_process_itmf_cmpl()
862 SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_process_itmf_cmpl()
864 sc->scsi_done(sc); in snic_process_itmf_cmpl()
871 snic_proc_dr_cmpl_locked(snic, fwreq, cmpl_stat, cmnd_id, sc); in snic_process_itmf_cmpl()
880 CMD_STATE(sc) = SNIC_IOREQ_ABTS_COMPLETE; in snic_process_itmf_cmpl()
881 CMD_ABTS_STATUS(sc) = cmpl_stat; in snic_process_itmf_cmpl()
882 CMD_FLAGS(sc) |= SNIC_DEV_RST_DONE; in snic_process_itmf_cmpl()
887 CMD_FLAGS(sc)); in snic_process_itmf_cmpl()
903 snic_ioreq_state_to_str(CMD_STATE(sc)), in snic_process_itmf_cmpl()
905 CMD_FLAGS(sc)); in snic_process_itmf_cmpl()
922 struct scsi_cmnd *sc = NULL; in snic_itmf_cmpl_handler() local
944 sc = rqi->sc; in snic_itmf_cmpl_handler()
958 sc = scsi_host_find_tag(snic->shost, cmnd_id & SNIC_TAG_MASK); in snic_itmf_cmpl_handler()
959 WARN_ON_ONCE(!sc); in snic_itmf_cmpl_handler()
962 if (!sc) { in snic_itmf_cmpl_handler()
971 snic_process_itmf_cmpl(snic, fwreq, cmnd_id, hdr_stat, sc); in snic_itmf_cmpl_handler()
977 snic_hba_reset_scsi_cleanup(struct snic *snic, struct scsi_cmnd *sc) in snic_hba_reset_scsi_cleanup() argument
983 snic_scsi_cleanup(snic, snic_cmd_tag(sc)); in snic_hba_reset_scsi_cleanup()
1009 struct scsi_cmnd *sc = NULL; in snic_hba_reset_cmpl_handler() local
1030 sc = rqi->sc; in snic_hba_reset_cmpl_handler()
1044 sc = scsi_host_find_tag(snic->shost, cmnd_id); in snic_hba_reset_cmpl_handler()
1046 if (!sc) { in snic_hba_reset_cmpl_handler()
1058 sc, rqi, cmnd_id, CMD_FLAGS(sc)); in snic_hba_reset_cmpl_handler()
1060 io_lock = snic_io_lock_hash(snic, sc); in snic_hba_reset_cmpl_handler()
1072 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_hba_reset_cmpl_handler()
1078 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_REQ_NULL; in snic_hba_reset_cmpl_handler()
1081 snic_io_status_to_str(hdr_stat), cmnd_id, sc, in snic_hba_reset_cmpl_handler()
1082 CMD_FLAGS(sc)); in snic_hba_reset_cmpl_handler()
1092 snic_hba_reset_scsi_cleanup(snic, sc); in snic_hba_reset_cmpl_handler()
1309 struct scsi_cmnd *sc, in snic_queue_itmf_req() argument
1315 int tm_tag = snic_cmd_tag(sc) | rqi->tm_tag; in snic_queue_itmf_req()
1322 int_to_scsilun(sc->device->lun, &lun); in snic_queue_itmf_req()
1346 tmf, sc, rqi, req_id, snic_cmd_tag(sc), ret); in snic_queue_itmf_req()
1350 tmf, sc, rqi, req_id, snic_cmd_tag(sc)); in snic_queue_itmf_req()
1358 struct scsi_cmnd *sc, in snic_issue_tm_req() argument
1362 int req_id = 0, tag = snic_cmd_tag(sc); in snic_issue_tm_req()
1389 ret = snic_queue_itmf_req(snic, tmreq, sc, tmf, req_id); in snic_issue_tm_req()
1395 tmf, sc, rqi, req_id, tag, ret); in snic_issue_tm_req()
1399 tmf, sc, rqi, req_id, tag); in snic_issue_tm_req()
1413 struct scsi_cmnd *sc, in snic_queue_abort_req() argument
1417 sc, rqi, snic_cmd_tag(sc), tmf); in snic_queue_abort_req()
1422 return snic_issue_tm_req(snic, rqi, sc, tmf); in snic_queue_abort_req()
1429 snic_abort_finish(struct snic *snic, struct scsi_cmnd *sc) in snic_abort_finish() argument
1434 int ret = 0, tag = snic_cmd_tag(sc); in snic_abort_finish()
1436 io_lock = snic_io_lock_hash(snic, sc); in snic_abort_finish()
1438 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_abort_finish()
1441 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_REQ_NULL; in snic_abort_finish()
1445 tag, sc, CMD_FLAGS(sc)); in snic_abort_finish()
1456 switch (CMD_ABTS_STATUS(sc)) { in snic_abort_finish()
1459 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TIMEDOUT; in snic_abort_finish()
1463 sc, snic_cmd_tag(sc), CMD_FLAGS(sc)); in snic_abort_finish()
1477 sc->result = (DID_ERROR << 16); in snic_abort_finish()
1478 sc->scsi_done(sc); in snic_abort_finish()
1488 CMD_SP(sc) = NULL; in snic_abort_finish()
1491 tag, snic_io_status_to_str(CMD_ABTS_STATUS(sc)), in snic_abort_finish()
1492 CMD_FLAGS(sc)); in snic_abort_finish()
1497 snic_release_req_buf(snic, rqi, sc); in snic_abort_finish()
1506 snic_send_abort_and_wait(struct snic *snic, struct scsi_cmnd *sc) in snic_send_abort_and_wait() argument
1514 int ret = 0, tmf = 0, tag = snic_cmd_tag(sc); in snic_send_abort_and_wait()
1516 tgt = starget_to_tgt(scsi_target(sc->device)); in snic_send_abort_and_wait()
1524 io_lock = snic_io_lock_hash(snic, sc); in snic_send_abort_and_wait()
1539 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_send_abort_and_wait()
1545 tag, CMD_FLAGS(sc)); in snic_send_abort_and_wait()
1553 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) { in snic_send_abort_and_wait()
1562 sv_state = CMD_STATE(sc); in snic_send_abort_and_wait()
1570 CMD_STATE(sc) = SNIC_IOREQ_ABTS_PENDING; in snic_send_abort_and_wait()
1571 CMD_ABTS_STATUS(sc) = SNIC_INVALID_CODE; in snic_send_abort_and_wait()
1578 ret = snic_queue_abort_req(snic, rqi, sc, tmf); in snic_send_abort_and_wait()
1583 tag, ret, CMD_FLAGS(sc)); in snic_send_abort_and_wait()
1587 CMD_STATE(sc) = sv_state; in snic_send_abort_and_wait()
1588 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_send_abort_and_wait()
1599 CMD_FLAGS(sc) |= SNIC_IO_ABTS_ISSUED; in snic_send_abort_and_wait()
1603 CMD_FLAGS(sc) |= SNIC_IO_TERM_ISSUED; in snic_send_abort_and_wait()
1609 sc, tag, CMD_FLAGS(sc)); in snic_send_abort_and_wait()
1632 snic_abort_cmd(struct scsi_cmnd *sc) in snic_abort_cmd() argument
1634 struct snic *snic = shost_priv(sc->device->host); in snic_abort_cmd()
1635 int ret = SUCCESS, tag = snic_cmd_tag(sc); in snic_abort_cmd()
1639 sc, sc->cmnd[0], scsi_cmd_to_rq(sc), tag); in snic_abort_cmd()
1651 ret = snic_send_abort_and_wait(snic, sc); in snic_abort_cmd()
1655 ret = snic_abort_finish(snic, sc); in snic_abort_cmd()
1658 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, in snic_abort_cmd()
1660 SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_abort_cmd()
1676 struct scsi_cmnd *sc = NULL; in snic_is_abts_pending() local
1690 sc = scsi_host_find_tag(snic->shost, tag); in snic_is_abts_pending()
1692 if (!sc || (lr_sc && (sc->device != lr_sdev || sc == lr_sc))) { in snic_is_abts_pending()
1698 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_is_abts_pending()
1710 snic_ioreq_state_to_str(CMD_STATE(sc))); in snic_is_abts_pending()
1712 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) { in snic_is_abts_pending()
1731 struct scsi_cmnd *sc = NULL; in snic_dr_clean_single_req() local
1740 sc = scsi_host_find_tag(snic->shost, tag); in snic_dr_clean_single_req()
1743 if (!sc || sc->device != lr_sdev) in snic_dr_clean_single_req()
1746 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_clean_single_req()
1752 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) in snic_dr_clean_single_req()
1756 if ((CMD_FLAGS(sc) & SNIC_DEVICE_RESET) && in snic_dr_clean_single_req()
1757 (!(CMD_FLAGS(sc) & SNIC_DEV_RST_ISSUED))) { in snic_dr_clean_single_req()
1761 sc); in snic_dr_clean_single_req()
1768 snic_ioreq_state_to_str(CMD_STATE(sc))); in snic_dr_clean_single_req()
1771 sv_state = CMD_STATE(sc); in snic_dr_clean_single_req()
1781 CMD_STATE(sc) = SNIC_IOREQ_ABTS_PENDING; in snic_dr_clean_single_req()
1784 if (CMD_FLAGS(sc) & SNIC_DEVICE_RESET) { in snic_dr_clean_single_req()
1788 "clean_single_req:devrst sc 0x%p\n", sc); in snic_dr_clean_single_req()
1791 CMD_ABTS_STATUS(sc) = SNIC_INVALID_CODE; in snic_dr_clean_single_req()
1795 tgt = starget_to_tgt(scsi_target(sc->device)); in snic_dr_clean_single_req()
1802 ret = snic_queue_abort_req(snic, rqi, sc, tmf); in snic_dr_clean_single_req()
1806 sc, tag, rqi->tm_tag, CMD_FLAGS(sc)); in snic_dr_clean_single_req()
1809 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_clean_single_req()
1814 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) in snic_dr_clean_single_req()
1815 CMD_STATE(sc) = sv_state; in snic_dr_clean_single_req()
1822 if (CMD_FLAGS(sc) & SNIC_DEVICE_RESET) in snic_dr_clean_single_req()
1823 CMD_FLAGS(sc) |= SNIC_DEV_RST_TERM_ISSUED; in snic_dr_clean_single_req()
1825 CMD_FLAGS(sc) |= SNIC_IO_INTERNAL_TERM_ISSUED; in snic_dr_clean_single_req()
1832 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_clean_single_req()
1834 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_REQ_NULL; in snic_dr_clean_single_req()
1840 if (CMD_ABTS_STATUS(sc) == SNIC_INVALID_CODE) { in snic_dr_clean_single_req()
1843 sc, tag, rqi->tm_tag, CMD_FLAGS(sc)); in snic_dr_clean_single_req()
1845 CMD_FLAGS(sc) |= SNIC_IO_ABTS_TERM_DONE; in snic_dr_clean_single_req()
1851 CMD_STATE(sc) = SNIC_IOREQ_ABTS_COMPLETE; in snic_dr_clean_single_req()
1852 CMD_SP(sc) = NULL; in snic_dr_clean_single_req()
1855 snic_release_req_buf(snic, rqi, sc); in snic_dr_clean_single_req()
1857 sc->result = (DID_ERROR << 16); in snic_dr_clean_single_req()
1858 sc->scsi_done(sc); in snic_dr_clean_single_req()
1917 snic_dr_finish(struct snic *snic, struct scsi_cmnd *sc) in snic_dr_finish() argument
1925 io_lock = snic_io_lock_hash(snic, sc); in snic_dr_finish()
1927 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_finish()
1932 snic_cmd_tag(sc), sc, CMD_FLAGS(sc)); in snic_dr_finish()
1940 lr_res = CMD_LR_STATUS(sc); in snic_dr_finish()
1947 snic_cmd_tag(sc), CMD_FLAGS(sc)); in snic_dr_finish()
1949 CMD_FLAGS(sc) |= SNIC_DEV_RST_TIMEDOUT; in snic_dr_finish()
1957 snic_cmd_tag(sc)); in snic_dr_finish()
1964 snic_cmd_tag(sc), in snic_dr_finish()
1965 snic_io_status_to_str(lr_res), CMD_FLAGS(sc)); in snic_dr_finish()
1979 ret = snic_dr_clean_pending_req(snic, sc); in snic_dr_finish()
1984 snic_cmd_tag(sc)); in snic_dr_finish()
1985 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_finish()
1991 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_dr_finish()
2001 CMD_SP(sc) = NULL; in snic_dr_finish()
2005 snic_release_req_buf(snic, rqi, sc); in snic_dr_finish()
2014 struct scsi_cmnd *sc) in snic_queue_dr_req() argument
2019 return snic_issue_tm_req(snic, rqi, sc, SNIC_ITMF_LUN_RESET); in snic_queue_dr_req()
2023 snic_send_dr_and_wait(struct snic *snic, struct scsi_cmnd *sc) in snic_send_dr_and_wait() argument
2030 int ret = FAILED, tag = snic_cmd_tag(sc); in snic_send_dr_and_wait()
2032 io_lock = snic_io_lock_hash(snic, sc); in snic_send_dr_and_wait()
2034 CMD_FLAGS(sc) |= SNIC_DEVICE_RESET; in snic_send_dr_and_wait()
2035 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_send_dr_and_wait()
2039 tag, CMD_FLAGS(sc)); in snic_send_dr_and_wait()
2047 sv_state = CMD_STATE(sc); in snic_send_dr_and_wait()
2049 CMD_STATE(sc) = SNIC_IOREQ_LR_PENDING; in snic_send_dr_and_wait()
2050 CMD_LR_STATUS(sc) = SNIC_INVALID_CODE; in snic_send_dr_and_wait()
2065 ret = snic_queue_dr_req(snic, rqi, sc); in snic_send_dr_and_wait()
2069 tag, ret, CMD_FLAGS(sc)); in snic_send_dr_and_wait()
2073 CMD_STATE(sc) = sv_state; in snic_send_dr_and_wait()
2074 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_send_dr_and_wait()
2085 CMD_FLAGS(sc) |= SNIC_DEV_RST_ISSUED; in snic_send_dr_and_wait()
2112 snic_unlink_and_release_req(struct snic *snic, struct scsi_cmnd *sc, int flag) in snic_unlink_and_release_req() argument
2119 io_lock = snic_io_lock_hash(snic, sc); in snic_unlink_and_release_req()
2121 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_unlink_and_release_req()
2124 CMD_SP(sc) = NULL; in snic_unlink_and_release_req()
2127 CMD_FLAGS(sc) |= flag; in snic_unlink_and_release_req()
2131 snic_release_req_buf(snic, rqi, sc); in snic_unlink_and_release_req()
2133 SNIC_TRC(snic->shost->host_no, snic_cmd_tag(sc), (ulong) sc, in snic_unlink_and_release_req()
2135 SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_unlink_and_release_req()
2144 snic_device_reset(struct scsi_cmnd *sc) in snic_device_reset() argument
2146 struct Scsi_Host *shost = sc->device->host; in snic_device_reset()
2149 int tag = snic_cmd_tag(sc); in snic_device_reset()
2155 sc, sc->cmnd[0], scsi_cmd_to_rq(sc), in snic_device_reset()
2156 snic_cmd_tag(sc)); in snic_device_reset()
2157 dr_supp = snic_dev_reset_supported(sc->device); in snic_device_reset()
2161 snic_unlink_and_release_req(snic, sc, SNIC_DEV_RST_NOTSUP); in snic_device_reset()
2167 snic_unlink_and_release_req(snic, sc, 0); in snic_device_reset()
2182 memset(scsi_cmd_priv(sc), 0, in snic_device_reset()
2184 CMD_SP(sc) = (char *)rqi; in snic_device_reset()
2185 CMD_FLAGS(sc) = SNIC_NO_FLAGS; in snic_device_reset()
2189 rqi->sc = sc; in snic_device_reset()
2192 ret = snic_send_dr_and_wait(snic, sc); in snic_device_reset()
2198 snic_unlink_and_release_req(snic, sc, 0); in snic_device_reset()
2203 ret = snic_dr_finish(snic, sc); in snic_device_reset()
2206 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, in snic_device_reset()
2208 0, SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_device_reset()
2228 snic_issue_hba_reset(struct snic *snic, struct scsi_cmnd *sc) in snic_issue_hba_reset() argument
2244 if (snic_cmd_tag(sc) == SCSI_NO_TAG) { in snic_issue_hba_reset()
2245 memset(scsi_cmd_priv(sc), 0, in snic_issue_hba_reset()
2248 rqi->sc = sc; in snic_issue_hba_reset()
2253 io_lock = snic_io_lock_hash(snic, sc); in snic_issue_hba_reset()
2255 SNIC_BUG_ON(CMD_SP(sc) != NULL); in snic_issue_hba_reset()
2256 CMD_STATE(sc) = SNIC_IOREQ_PENDING; in snic_issue_hba_reset()
2257 CMD_SP(sc) = (char *) rqi; in snic_issue_hba_reset()
2258 CMD_FLAGS(sc) |= SNIC_IO_INITIALIZED; in snic_issue_hba_reset()
2263 snic_io_hdr_enc(&req->hdr, SNIC_REQ_HBA_RESET, 0, snic_cmd_tag(sc), in snic_issue_hba_reset()
2278 CMD_FLAGS(sc) |= SNIC_HOST_RESET_ISSUED; in snic_issue_hba_reset()
2295 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_issue_hba_reset()
2296 CMD_SP(sc) = NULL; in snic_issue_hba_reset()
2309 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_issue_hba_reset()
2310 CMD_SP(sc) = NULL; in snic_issue_hba_reset()
2325 snic_reset(struct Scsi_Host *shost, struct scsi_cmnd *sc) in snic_reset() argument
2354 ret = snic_issue_hba_reset(snic, sc); in snic_reset()
2382 snic_host_reset(struct scsi_cmnd *sc) in snic_host_reset() argument
2384 struct Scsi_Host *shost = sc->device->host; in snic_host_reset()
2390 sc, sc->cmnd[0], scsi_cmd_to_rq(sc), in snic_host_reset()
2391 snic_cmd_tag(sc), CMD_FLAGS(sc)); in snic_host_reset()
2393 ret = snic_reset(shost, sc); in snic_host_reset()
2395 SNIC_TRC(shost->host_no, snic_cmd_tag(sc), (ulong) sc, in snic_host_reset()
2397 0, SNIC_TRC_CMD(sc), SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_host_reset()
2406 snic_cmpl_pending_tmreq(struct snic *snic, struct scsi_cmnd *sc) in snic_cmpl_pending_tmreq() argument
2412 sc, snic_io_status_to_str(CMD_STATE(sc)), CMD_FLAGS(sc)); in snic_cmpl_pending_tmreq()
2419 CMD_ABTS_STATUS(sc) = SNIC_STAT_IO_SUCCESS; in snic_cmpl_pending_tmreq()
2421 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_cmpl_pending_tmreq()
2438 struct scsi_cmnd *sc = NULL; in snic_scsi_cleanup() local
2453 sc = scsi_host_find_tag(snic->shost, tag); in snic_scsi_cleanup()
2454 if (!sc) { in snic_scsi_cleanup()
2460 if (unlikely(snic_tmreq_pending(sc))) { in snic_scsi_cleanup()
2465 snic_cmpl_pending_tmreq(snic, sc); in snic_scsi_cleanup()
2471 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_scsi_cleanup()
2480 sc, rqi, tag, CMD_FLAGS(sc)); in snic_scsi_cleanup()
2482 CMD_SP(sc) = NULL; in snic_scsi_cleanup()
2483 CMD_FLAGS(sc) |= SNIC_SCSI_CLEANUP; in snic_scsi_cleanup()
2489 rqi, CMD_FLAGS(sc)); in snic_scsi_cleanup()
2491 snic_release_req_buf(snic, rqi, sc); in snic_scsi_cleanup()
2494 sc->result = DID_TRANSPORT_DISRUPTED << 16; in snic_scsi_cleanup()
2497 sc, scsi_cmd_to_rq(sc)->tag, CMD_FLAGS(sc), rqi, in snic_scsi_cleanup()
2503 if (sc->scsi_done) { in snic_scsi_cleanup()
2504 SNIC_TRC(snic->shost->host_no, tag, (ulong) sc, in snic_scsi_cleanup()
2506 SNIC_TRC_CMD(sc), in snic_scsi_cleanup()
2507 SNIC_TRC_CMD_STATE_FLAGS(sc)); in snic_scsi_cleanup()
2509 sc->scsi_done(sc); in snic_scsi_cleanup()
2527 snic_internal_abort_io(struct snic *snic, struct scsi_cmnd *sc, int tmf) in snic_internal_abort_io() argument
2535 io_lock = snic_io_lock_hash(snic, sc); in snic_internal_abort_io()
2537 rqi = (struct snic_req_info *) CMD_SP(sc); in snic_internal_abort_io()
2541 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) in snic_internal_abort_io()
2544 if ((CMD_FLAGS(sc) & SNIC_DEVICE_RESET) && in snic_internal_abort_io()
2545 (!(CMD_FLAGS(sc) & SNIC_DEV_RST_ISSUED))) { in snic_internal_abort_io()
2549 sc); in snic_internal_abort_io()
2555 if (!(CMD_FLAGS(sc) & SNIC_IO_ISSUED)) { in snic_internal_abort_io()
2558 sc, snic_cmd_tag(sc), CMD_FLAGS(sc), CMD_STATE(sc)); in snic_internal_abort_io()
2563 sv_state = CMD_STATE(sc); in snic_internal_abort_io()
2564 CMD_STATE(sc) = SNIC_IOREQ_ABTS_PENDING; in snic_internal_abort_io()
2565 CMD_ABTS_STATUS(sc) = SNIC_INVALID_CODE; in snic_internal_abort_io()
2566 CMD_FLAGS(sc) |= SNIC_IO_INTERNAL_TERM_PENDING; in snic_internal_abort_io()
2568 if (CMD_FLAGS(sc) & SNIC_DEVICE_RESET) { in snic_internal_abort_io()
2571 SNIC_SCSI_DBG(snic->shost, "internal_abts:dev rst sc %p\n", sc); in snic_internal_abort_io()
2575 snic_cmd_tag(sc)); in snic_internal_abort_io()
2579 ret = snic_queue_abort_req(snic, rqi, sc, tmf); in snic_internal_abort_io()
2583 snic_cmd_tag(sc), ret); in snic_internal_abort_io()
2587 if (CMD_STATE(sc) == SNIC_IOREQ_ABTS_PENDING) in snic_internal_abort_io()
2588 CMD_STATE(sc) = sv_state; in snic_internal_abort_io()
2594 if (CMD_FLAGS(sc) & SNIC_DEVICE_RESET) in snic_internal_abort_io()
2595 CMD_FLAGS(sc) |= SNIC_DEV_RST_TERM_ISSUED; in snic_internal_abort_io()
2597 CMD_FLAGS(sc) |= SNIC_IO_INTERNAL_TERM_ISSUED; in snic_internal_abort_io()
2615 struct scsi_cmnd *sc = NULL; in snic_tgt_scsi_abort_io() local
2636 sc = scsi_host_find_tag(snic->shost, tag); in snic_tgt_scsi_abort_io()
2637 if (!sc) { in snic_tgt_scsi_abort_io()
2643 sc_tgt = starget_to_tgt(scsi_target(sc->device)); in snic_tgt_scsi_abort_io()
2651 ret = snic_internal_abort_io(snic, sc, tmf); in snic_tgt_scsi_abort_io()