Lines Matching refs:cm
116 struct mps_command *cm);
118 static void mpssas_abort_complete(struct mps_softc *sc, struct mps_command *cm);
120 struct mps_command *cm, union ccb *ccb);
124 static void mpssas_smpio_complete(struct mps_softc *sc, struct mps_command *cm);
133 struct mps_command *cm);
292 mpssas_log_command(struct mps_command *cm, u_int level, const char *fmt, ...) in mpssas_log_command() argument
298 if (cm == NULL) in mpssas_log_command()
302 if ((cm->cm_sc->mps_debug & level) == 0) in mpssas_log_command()
309 if (cm->cm_ccb != NULL) { in mpssas_log_command()
310 xpt_path_sbuf(cm->cm_ccb->csio.ccb_h.path, &sb); in mpssas_log_command()
311 if (cm->cm_ccb->ccb_h.func_code == XPT_SCSI_IO) { in mpssas_log_command()
312 scsi_command_string(&cm->cm_ccb->csio, &sb); in mpssas_log_command()
314 cm->cm_ccb->csio.dxfer_len); in mpssas_log_command()
319 cam_sim_name(cm->cm_sc->sassc->sim), in mpssas_log_command()
320 cam_sim_unit(cm->cm_sc->sassc->sim), in mpssas_log_command()
321 cam_sim_bus(cm->cm_sc->sassc->sim), in mpssas_log_command()
322 cm->cm_targ ? cm->cm_targ->tid : 0xFFFFFFFF, in mpssas_log_command()
323 cm->cm_lun); in mpssas_log_command()
326 sbuf_printf(&sb, "SMID %u ", cm->cm_desc.Default.SMID); in mpssas_log_command()
329 mps_print_field(cm->cm_sc, "%s", sbuf_data(&sb)); in mpssas_log_command()
473 struct mps_command *cm; in mpssas_prepare_remove() local
491 cm = mpssas_alloc_tm(sc); in mpssas_prepare_remove()
492 if (cm == NULL) { in mpssas_prepare_remove()
500 req = (MPI2_SCSI_TASK_MANAGE_REQUEST *)cm->cm_req; in mpssas_prepare_remove()
507 cm->cm_targ = targ; in mpssas_prepare_remove()
508 cm->cm_data = NULL; in mpssas_prepare_remove()
509 cm->cm_complete = mpssas_remove_device; in mpssas_prepare_remove()
510 cm->cm_complete_data = (void *)(uintptr_t)handle; in mpssas_prepare_remove()
514 mpssas_prepare_for_tm(sc, cm, targ, CAM_LUN_WILDCARD); in mpssas_prepare_remove()
516 mps_map_command(sc, cm); in mpssas_prepare_remove()
1046 struct mps_command *cm; in mpssas_complete_all_commands() local
1055 cm = &sc->commands[i]; in mpssas_complete_all_commands()
1056 if (cm->cm_state == MPS_CM_STATE_FREE) in mpssas_complete_all_commands()
1059 cm->cm_state = MPS_CM_STATE_BUSY; in mpssas_complete_all_commands()
1060 cm->cm_reply = NULL; in mpssas_complete_all_commands()
1063 if (cm->cm_flags & MPS_CM_FLAGS_SATA_ID_TIMEOUT) { in mpssas_complete_all_commands()
1064 MPASS(cm->cm_data); in mpssas_complete_all_commands()
1065 free(cm->cm_data, M_MPT2); in mpssas_complete_all_commands()
1066 cm->cm_data = NULL; in mpssas_complete_all_commands()
1069 if (cm->cm_flags & MPS_CM_FLAGS_POLLED) in mpssas_complete_all_commands()
1070 cm->cm_flags |= MPS_CM_FLAGS_COMPLETE; in mpssas_complete_all_commands()
1072 if (cm->cm_complete != NULL) { in mpssas_complete_all_commands()
1073 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_complete_all_commands()
1075 cm, cm->cm_state, cm->cm_ccb); in mpssas_complete_all_commands()
1077 cm->cm_complete(sc, cm); in mpssas_complete_all_commands()
1079 } else if (cm->cm_flags & MPS_CM_FLAGS_WAKEUP) { in mpssas_complete_all_commands()
1080 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_complete_all_commands()
1082 cm, cm->cm_state, cm->cm_ccb); in mpssas_complete_all_commands()
1083 wakeup(cm); in mpssas_complete_all_commands()
1087 if ((completed == 0) && (cm->cm_state != MPS_CM_STATE_FREE)) { in mpssas_complete_all_commands()
1089 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_complete_all_commands()
1091 "reset\n", cm, cm->cm_state, cm->cm_flags, in mpssas_complete_all_commands()
1092 cm->cm_ccb); in mpssas_complete_all_commands()
1166 struct mps_command *cm; in mpssas_logical_unit_reset_complete() local
1217 TAILQ_FOREACH(cm, &targ->commands, cm_link) { in mpssas_logical_unit_reset_complete()
1218 if (cm->cm_lun == tm->cm_lun) in mpssas_logical_unit_reset_complete()
1234 cm = TAILQ_FIRST(&targ->timedout_commands); in mpssas_logical_unit_reset_complete()
1235 if (cm) { in mpssas_logical_unit_reset_complete()
1239 mpssas_send_abort(sc, tm, cm); in mpssas_logical_unit_reset_complete()
1397 struct mps_command *cm; in mpssas_abort_complete() local
1446 cm = TAILQ_FIRST(&tm->cm_targ->timedout_commands); in mpssas_abort_complete()
1447 if (cm == NULL) { in mpssas_abort_complete()
1457 } else if (le16toh(req->TaskMID) != cm->cm_desc.Default.SMID) { in mpssas_abort_complete()
1462 mpssas_send_abort(sc, tm, cm); in mpssas_abort_complete()
1479 mpssas_send_abort(struct mps_softc *sc, struct mps_command *tm, struct mps_command *cm) in mpssas_send_abort() argument
1485 targ = cm->cm_targ; in mpssas_send_abort()
1489 __func__, cm->cm_ccb->ccb_h.target_id); in mpssas_send_abort()
1493 mpssas_log_command(cm, MPS_RECOVERY|MPS_INFO, in mpssas_send_abort()
1494 "Aborting command %p\n", cm); in mpssas_send_abort()
1501 MPS_SET_LUN(req->LUN, cm->cm_ccb->ccb_h.target_lun); in mpssas_send_abort()
1503 req->TaskMID = htole16(cm->cm_desc.Default.SMID); in mpssas_send_abort()
1508 tm->cm_targ = cm->cm_targ; in mpssas_send_abort()
1509 tm->cm_lun = cm->cm_lun; in mpssas_send_abort()
1522 err, cm, req->TaskMID); in mpssas_send_abort()
1532 struct mps_command *cm; in mpssas_scsiio_timeout() local
1535 cm = (struct mps_command *)data; in mpssas_scsiio_timeout()
1536 sc = cm->cm_sc; in mpssas_scsiio_timeout()
1537 ccb = cm->cm_ccb; in mpssas_scsiio_timeout()
1543 mps_dprint(sc, MPS_XINFO|MPS_RECOVERY, "Timeout checking cm %p\n", cm); in mpssas_scsiio_timeout()
1551 if (cm->cm_flags & MPS_CM_FLAGS_ON_RECOVERY) { in mpssas_scsiio_timeout()
1552 mpssas_log_command(cm, MPS_XINFO, in mpssas_scsiio_timeout()
1553 "SCSI command %p almost timed out\n", cm); in mpssas_scsiio_timeout()
1557 if (cm->cm_ccb == NULL) { in mpssas_scsiio_timeout()
1562 targ = cm->cm_targ; in mpssas_scsiio_timeout()
1566 mpssas_log_command(cm, MPS_INFO|MPS_RECOVERY, in mpssas_scsiio_timeout()
1574 mpssas_set_ccbstatus(cm->cm_ccb, CAM_CMD_TIMEOUT); in mpssas_scsiio_timeout()
1575 cm->cm_flags |= MPS_CM_FLAGS_ON_RECOVERY | MPS_CM_FLAGS_TIMEDOUT; in mpssas_scsiio_timeout()
1576 TAILQ_INSERT_TAIL(&targ->timedout_commands, cm, cm_recovery); in mpssas_scsiio_timeout()
1584 cm, targ->tm); in mpssas_scsiio_timeout()
1588 cm->cm_desc.Default.SMID); in mpssas_scsiio_timeout()
1590 cm, targ->tm); in mpssas_scsiio_timeout()
1593 mpssas_send_abort(sc, targ->tm, cm); in mpssas_scsiio_timeout()
1605 "timedout cm %p failed to allocate a tm\n", cm); in mpssas_scsiio_timeout()
1618 struct mps_command *cm; in mpssas_action_scsiio() local
1705 cm = mps_alloc_command(sc); in mpssas_action_scsiio()
1706 if (cm == NULL || (sc->mps_flags & MPS_FLAGS_DIAGRESET)) { in mpssas_action_scsiio()
1707 if (cm != NULL) { in mpssas_action_scsiio()
1708 mps_free_command(sc, cm); in mpssas_action_scsiio()
1720 req = (MPI2_SCSI_IO_REQUEST *)cm->cm_req; in mpssas_action_scsiio()
1725 req->SenseBufferLowAddress = htole32(cm->cm_sense_busaddr); in mpssas_action_scsiio()
1743 cm->cm_flags |= MPS_CM_FLAGS_DATAIN; in mpssas_action_scsiio()
1747 cm->cm_flags |= MPS_CM_FLAGS_DATAOUT; in mpssas_action_scsiio()
1783 mps_free_command(sc, cm); in mpssas_action_scsiio()
1849 cm->cm_length = csio->dxfer_len; in mpssas_action_scsiio()
1850 if (cm->cm_length != 0) { in mpssas_action_scsiio()
1851 cm->cm_data = ccb; in mpssas_action_scsiio()
1852 cm->cm_flags |= MPS_CM_FLAGS_USE_CCB; in mpssas_action_scsiio()
1854 cm->cm_data = NULL; in mpssas_action_scsiio()
1856 cm->cm_sge = &req->SGL; in mpssas_action_scsiio()
1857 cm->cm_sglsize = (32 - 24) * 4; in mpssas_action_scsiio()
1858 cm->cm_desc.SCSIIO.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO; in mpssas_action_scsiio()
1859 cm->cm_desc.SCSIIO.DevHandle = htole16(targ->handle); in mpssas_action_scsiio()
1860 cm->cm_complete = mpssas_scsiio_complete; in mpssas_action_scsiio()
1861 cm->cm_complete_data = ccb; in mpssas_action_scsiio()
1862 cm->cm_targ = targ; in mpssas_action_scsiio()
1863 cm->cm_lun = csio->ccb_h.target_lun; in mpssas_action_scsiio()
1864 cm->cm_ccb = ccb; in mpssas_action_scsiio()
1873 mpssas_direct_drive_io(sassc, cm, ccb); in mpssas_action_scsiio()
1884 callout_reset_sbt(&cm->cm_callout, SBT_1MS * ccb->ccb_h.timeout, 0, in mpssas_action_scsiio()
1885 mpssas_scsiio_timeout, cm, 0); in mpssas_action_scsiio()
1889 TAILQ_INSERT_TAIL(&targ->commands, cm, cm_link); in mpssas_action_scsiio()
1892 mpssas_log_command(cm, MPS_XINFO, "%s cm %p ccb %p outstanding %u\n", in mpssas_action_scsiio()
1893 __func__, cm, ccb, targ->outstanding); in mpssas_action_scsiio()
1895 mps_map_command(sc, cm); in mpssas_action_scsiio()
1953 mpssas_scsiio_complete(struct mps_softc *sc, struct mps_command *cm) in mpssas_scsiio_complete() argument
1968 "cm %p SMID %u ccb %p reply %p outstanding %u\n", cm, in mpssas_scsiio_complete()
1969 cm->cm_desc.Default.SMID, cm->cm_ccb, cm->cm_reply, in mpssas_scsiio_complete()
1970 cm->cm_targ->outstanding); in mpssas_scsiio_complete()
1972 callout_stop(&cm->cm_callout); in mpssas_scsiio_complete()
1976 ccb = cm->cm_complete_data; in mpssas_scsiio_complete()
1979 rep = (MPI2_SCSI_IO_REPLY *)cm->cm_reply; in mpssas_scsiio_complete()
1985 if (cm->cm_data != NULL) { in mpssas_scsiio_complete()
1986 if (cm->cm_flags & MPS_CM_FLAGS_DATAIN) in mpssas_scsiio_complete()
1988 else if (cm->cm_flags & MPS_CM_FLAGS_DATAOUT) in mpssas_scsiio_complete()
1990 bus_dmamap_sync(sc->buffer_dmat, cm->cm_dmamap, dir); in mpssas_scsiio_complete()
1991 bus_dmamap_unload(sc->buffer_dmat, cm->cm_dmamap); in mpssas_scsiio_complete()
1994 cm->cm_targ->completed++; in mpssas_scsiio_complete()
1995 cm->cm_targ->outstanding--; in mpssas_scsiio_complete()
1996 TAILQ_REMOVE(&cm->cm_targ->commands, cm, cm_link); in mpssas_scsiio_complete()
2004 if (cm->cm_flags & MPS_CM_FLAGS_ON_RECOVERY) { in mpssas_scsiio_complete()
2005 TAILQ_REMOVE(&cm->cm_targ->timedout_commands, cm, cm_recovery); in mpssas_scsiio_complete()
2006 KASSERT(cm->cm_state == MPS_CM_STATE_BUSY, in mpssas_scsiio_complete()
2007 ("Not busy for CM_FLAGS_TIMEDOUT: %u\n", cm->cm_state)); in mpssas_scsiio_complete()
2008 cm->cm_flags &= ~MPS_CM_FLAGS_ON_RECOVERY; in mpssas_scsiio_complete()
2009 if (cm->cm_reply != NULL) in mpssas_scsiio_complete()
2010 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_scsiio_complete()
2013 cm, cm->cm_ccb, le16toh(rep->IOCStatus), in mpssas_scsiio_complete()
2017 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_scsiio_complete()
2019 cm, cm->cm_ccb); in mpssas_scsiio_complete()
2020 } else if (cm->cm_targ->tm != NULL) { in mpssas_scsiio_complete()
2021 if (cm->cm_reply != NULL) in mpssas_scsiio_complete()
2022 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_scsiio_complete()
2025 cm, cm->cm_ccb, le16toh(rep->IOCStatus), in mpssas_scsiio_complete()
2029 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_scsiio_complete()
2031 cm, cm->cm_ccb); in mpssas_scsiio_complete()
2033 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_scsiio_complete()
2035 cm, cm->cm_ccb); in mpssas_scsiio_complete()
2038 if ((cm->cm_flags & MPS_CM_FLAGS_ERROR_MASK) != 0) { in mpssas_scsiio_complete()
2081 if (cm->cm_reply == NULL) { in mpssas_scsiio_complete()
2111 mps_free_command(sc, cm); in mpssas_scsiio_complete()
2116 mpssas_log_command(cm, MPS_XINFO, in mpssas_scsiio_complete()
2127 if (cm->cm_flags & MPS_CM_FLAGS_DD_IO) { in mpssas_scsiio_complete()
2128 mps_free_command(sc, cm); in mpssas_scsiio_complete()
2137 csio->resid = cm->cm_length - le32toh(rep->TransferCount); in mpssas_scsiio_complete()
2144 mpssas_log_command(cm, MPS_XINFO, "recovered error\n"); in mpssas_scsiio_complete()
2209 bcopy(cm->cm_sense, &ccb->csio.sense_data, sense_len); in mpssas_scsiio_complete()
2272 if (cm->cm_targ->devinfo == 0) in mpssas_scsiio_complete()
2278 mps_print_scsiio_cmd(sc, cm); in mpssas_scsiio_complete()
2291 if (cm->cm_flags & MPS_CM_FLAGS_TIMEDOUT) in mpssas_scsiio_complete()
2320 if (cm->cm_targ->flags & MPSSAS_TARGET_INREMOVAL) in mpssas_scsiio_complete()
2328 target_id, cm->cm_desc.Default.SMID, in mpssas_scsiio_complete()
2330 (cm->cm_targ->flags & MPSSAS_TARGET_INREMOVAL) ? " departing" : ""); in mpssas_scsiio_complete()
2347 mpssas_log_command(cm, MPS_XINFO, in mpssas_scsiio_complete()
2352 csio->resid = cm->cm_length; in mpssas_scsiio_complete()
2377 if (cm->cm_targ->flags & MPSSAS_TARGET_INREMOVAL) { in mpssas_scsiio_complete()
2378 if (TAILQ_FIRST(&cm->cm_targ->commands) == NULL && in mpssas_scsiio_complete()
2379 cm->cm_targ->pending_remove_tm != NULL) { in mpssas_scsiio_complete()
2382 cm->cm_targ->tid, cm->cm_targ->handle); in mpssas_scsiio_complete()
2383 mps_map_command(sc, cm->cm_targ->pending_remove_tm); in mpssas_scsiio_complete()
2384 cm->cm_targ->pending_remove_tm = NULL; in mpssas_scsiio_complete()
2388 mps_free_command(sc, cm); in mpssas_scsiio_complete()
2394 mpssas_direct_drive_io(struct mpssas_softc *sassc, struct mps_command *cm, in mpssas_direct_drive_io() argument
2409 pIO_req = (pMpi2SCSIIORequest_t)cm->cm_req; in mpssas_direct_drive_io()
2420 io_size = (cm->cm_length >> sc->DD_block_exponent); in mpssas_direct_drive_io()
2453 cm->cm_desc.SCSIIO.DevHandle = in mpssas_direct_drive_io()
2472 cm->cm_flags |= MPS_CM_FLAGS_DD_IO; in mpssas_direct_drive_io()
2498 io_size = (cm->cm_length >> sc->DD_block_exponent); in mpssas_direct_drive_io()
2542 cm->cm_desc.SCSIIO.DevHandle = in mpssas_direct_drive_io()
2569 cm->cm_flags |= MPS_CM_FLAGS_DD_IO; in mpssas_direct_drive_io()
2577 io_size = (cm->cm_length >> sc->DD_block_exponent); in mpssas_direct_drive_io()
2620 cm->cm_desc.SCSIIO.DevHandle = in mpssas_direct_drive_io()
2654 cm->cm_flags |= MPS_CM_FLAGS_DD_IO; in mpssas_direct_drive_io()
2662 mpssas_smpio_complete(struct mps_softc *sc, struct mps_command *cm) in mpssas_smpio_complete() argument
2669 ccb = cm->cm_complete_data; in mpssas_smpio_complete()
2677 if ((cm->cm_flags & MPS_CM_FLAGS_ERROR_MASK) != 0) { in mpssas_smpio_complete()
2679 __func__, cm->cm_flags); in mpssas_smpio_complete()
2684 rpl = (MPI2_SMP_PASSTHROUGH_REPLY *)cm->cm_reply; in mpssas_smpio_complete()
2691 req = (MPI2_SMP_PASSTHROUGH_REQUEST *)cm->cm_req; in mpssas_smpio_complete()
2718 bus_dmamap_sync(sc->buffer_dmat, cm->cm_dmamap, in mpssas_smpio_complete()
2720 bus_dmamap_unload(sc->buffer_dmat, cm->cm_dmamap); in mpssas_smpio_complete()
2721 mps_free_command(sc, cm); in mpssas_smpio_complete()
2728 struct mps_command *cm; in mpssas_send_smpcmd() local
2798 cm = mps_alloc_command(sc); in mpssas_send_smpcmd()
2799 if (cm == NULL) { in mpssas_send_smpcmd()
2807 req = (MPI2_SMP_PASSTHROUGH_REQUEST *)cm->cm_req; in mpssas_send_smpcmd()
2821 mpi_init_sge(cm, req, &req->SGL); in mpssas_send_smpcmd()
2827 cm->cm_uio.uio_iov = cm->cm_iovec; in mpssas_send_smpcmd()
2828 cm->cm_uio.uio_iovcnt = 2; in mpssas_send_smpcmd()
2829 cm->cm_uio.uio_segflg = UIO_SYSSPACE; in mpssas_send_smpcmd()
2836 cm->cm_uio.uio_rw = UIO_WRITE; in mpssas_send_smpcmd()
2838 cm->cm_iovec[0].iov_base = request; in mpssas_send_smpcmd()
2839 cm->cm_iovec[0].iov_len = le16toh(req->RequestDataLength); in mpssas_send_smpcmd()
2840 cm->cm_iovec[1].iov_base = response; in mpssas_send_smpcmd()
2841 cm->cm_iovec[1].iov_len = ccb->smpio.smp_response_len; in mpssas_send_smpcmd()
2843 cm->cm_uio.uio_resid = cm->cm_iovec[0].iov_len + in mpssas_send_smpcmd()
2844 cm->cm_iovec[1].iov_len; in mpssas_send_smpcmd()
2851 cm->cm_max_segs = 2; in mpssas_send_smpcmd()
2853 cm->cm_desc.Default.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE; in mpssas_send_smpcmd()
2854 cm->cm_complete = mpssas_smpio_complete; in mpssas_send_smpcmd()
2855 cm->cm_complete_data = ccb; in mpssas_send_smpcmd()
2863 cm->cm_flags |= MPS_CM_FLAGS_USE_UIO | MPS_CM_FLAGS_SMP_PASS | in mpssas_send_smpcmd()
2878 error = mps_map_command(sc, cm); in mpssas_send_smpcmd()
2889 mps_free_command(sc, cm); in mpssas_send_smpcmd()
3295 struct mps_command *cm; in mpssas_send_portenable() local
3299 if ((cm = mps_alloc_command(sc)) == NULL) in mpssas_send_portenable()
3301 request = (MPI2_PORT_ENABLE_REQUEST *)cm->cm_req; in mpssas_send_portenable()
3305 cm->cm_desc.Default.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE; in mpssas_send_portenable()
3306 cm->cm_complete = mpssas_portenable_complete; in mpssas_send_portenable()
3307 cm->cm_data = NULL; in mpssas_send_portenable()
3308 cm->cm_sge = NULL; in mpssas_send_portenable()
3310 mps_map_command(sc, cm); in mpssas_send_portenable()
3313 cm, cm->cm_req, cm->cm_complete); in mpssas_send_portenable()
3318 mpssas_portenable_complete(struct mps_softc *sc, struct mps_command *cm) in mpssas_portenable_complete() argument
3331 if ((cm->cm_flags & MPS_CM_FLAGS_ERROR_MASK) != 0) { in mpssas_portenable_complete()
3333 "This should not happen!\n", __func__, cm->cm_flags); in mpssas_portenable_complete()
3336 reply = (MPI2_PORT_ENABLE_REPLY *)cm->cm_reply; in mpssas_portenable_complete()
3343 mps_free_command(sc, cm); in mpssas_portenable_complete()