Lines Matching refs:cm
117 struct mps_command *cm);
119 static void mpssas_abort_complete(struct mps_softc *sc, struct mps_command *cm);
121 struct mps_command *cm, union ccb *ccb);
125 static void mpssas_smpio_complete(struct mps_softc *sc, struct mps_command *cm);
134 struct mps_command *cm);
293 mpssas_log_command(struct mps_command *cm, u_int level, const char *fmt, ...) in mpssas_log_command() argument
299 if (cm == NULL) in mpssas_log_command()
303 if ((cm->cm_sc->mps_debug & level) == 0) in mpssas_log_command()
310 if (cm->cm_ccb != NULL) { in mpssas_log_command()
311 xpt_path_sbuf(cm->cm_ccb->csio.ccb_h.path, &sb); in mpssas_log_command()
312 if (cm->cm_ccb->ccb_h.func_code == XPT_SCSI_IO) { in mpssas_log_command()
313 scsi_command_string(&cm->cm_ccb->csio, &sb); in mpssas_log_command()
315 cm->cm_ccb->csio.dxfer_len); in mpssas_log_command()
320 cam_sim_name(cm->cm_sc->sassc->sim), in mpssas_log_command()
321 cam_sim_unit(cm->cm_sc->sassc->sim), in mpssas_log_command()
322 cam_sim_bus(cm->cm_sc->sassc->sim), in mpssas_log_command()
323 cm->cm_targ ? cm->cm_targ->tid : 0xFFFFFFFF, in mpssas_log_command()
324 cm->cm_lun); in mpssas_log_command()
327 sbuf_printf(&sb, "SMID %u ", cm->cm_desc.Default.SMID); in mpssas_log_command()
330 mps_print_field(cm->cm_sc, "%s", sbuf_data(&sb)); in mpssas_log_command()
474 struct mps_command *cm; in mpssas_prepare_remove() local
492 cm = mpssas_alloc_tm(sc); in mpssas_prepare_remove()
493 if (cm == NULL) { in mpssas_prepare_remove()
501 req = (MPI2_SCSI_TASK_MANAGE_REQUEST *)cm->cm_req; in mpssas_prepare_remove()
508 cm->cm_targ = targ; in mpssas_prepare_remove()
509 cm->cm_data = NULL; in mpssas_prepare_remove()
510 cm->cm_complete = mpssas_remove_device; in mpssas_prepare_remove()
511 cm->cm_complete_data = (void *)(uintptr_t)handle; in mpssas_prepare_remove()
515 mpssas_prepare_for_tm(sc, cm, targ, CAM_LUN_WILDCARD); in mpssas_prepare_remove()
517 mps_map_command(sc, cm); in mpssas_prepare_remove()
1047 struct mps_command *cm; in mpssas_complete_all_commands() local
1056 cm = &sc->commands[i]; in mpssas_complete_all_commands()
1057 if (cm->cm_state == MPS_CM_STATE_FREE) in mpssas_complete_all_commands()
1060 cm->cm_state = MPS_CM_STATE_BUSY; in mpssas_complete_all_commands()
1061 cm->cm_reply = NULL; in mpssas_complete_all_commands()
1064 if (cm->cm_flags & MPS_CM_FLAGS_SATA_ID_TIMEOUT) { in mpssas_complete_all_commands()
1065 MPASS(cm->cm_data); in mpssas_complete_all_commands()
1066 free(cm->cm_data, M_MPT2); in mpssas_complete_all_commands()
1067 cm->cm_data = NULL; in mpssas_complete_all_commands()
1070 if (cm->cm_flags & MPS_CM_FLAGS_POLLED) in mpssas_complete_all_commands()
1071 cm->cm_flags |= MPS_CM_FLAGS_COMPLETE; in mpssas_complete_all_commands()
1073 if (cm->cm_complete != NULL) { in mpssas_complete_all_commands()
1074 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_complete_all_commands()
1076 cm, cm->cm_state, cm->cm_ccb); in mpssas_complete_all_commands()
1078 cm->cm_complete(sc, cm); in mpssas_complete_all_commands()
1080 } else if (cm->cm_flags & MPS_CM_FLAGS_WAKEUP) { in mpssas_complete_all_commands()
1081 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_complete_all_commands()
1083 cm, cm->cm_state, cm->cm_ccb); in mpssas_complete_all_commands()
1084 wakeup(cm); in mpssas_complete_all_commands()
1088 if ((completed == 0) && (cm->cm_state != MPS_CM_STATE_FREE)) { in mpssas_complete_all_commands()
1090 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_complete_all_commands()
1092 "reset\n", cm, cm->cm_state, cm->cm_flags, in mpssas_complete_all_commands()
1093 cm->cm_ccb); in mpssas_complete_all_commands()
1167 struct mps_command *cm; in mpssas_logical_unit_reset_complete() local
1218 TAILQ_FOREACH(cm, &targ->commands, cm_link) { in mpssas_logical_unit_reset_complete()
1219 if (cm->cm_lun == tm->cm_lun) in mpssas_logical_unit_reset_complete()
1235 cm = TAILQ_FIRST(&targ->timedout_commands); in mpssas_logical_unit_reset_complete()
1236 if (cm) { in mpssas_logical_unit_reset_complete()
1240 mpssas_send_abort(sc, tm, cm); in mpssas_logical_unit_reset_complete()
1398 struct mps_command *cm; in mpssas_abort_complete() local
1447 cm = TAILQ_FIRST(&tm->cm_targ->timedout_commands); in mpssas_abort_complete()
1448 if (cm == NULL) { in mpssas_abort_complete()
1458 } else if (le16toh(req->TaskMID) != cm->cm_desc.Default.SMID) { in mpssas_abort_complete()
1463 mpssas_send_abort(sc, tm, cm); in mpssas_abort_complete()
1480 mpssas_send_abort(struct mps_softc *sc, struct mps_command *tm, struct mps_command *cm) in mpssas_send_abort() argument
1486 targ = cm->cm_targ; in mpssas_send_abort()
1490 __func__, cm->cm_ccb->ccb_h.target_id); in mpssas_send_abort()
1494 mpssas_log_command(cm, MPS_RECOVERY|MPS_INFO, in mpssas_send_abort()
1495 "Aborting command %p\n", cm); in mpssas_send_abort()
1502 MPS_SET_LUN(req->LUN, cm->cm_ccb->ccb_h.target_lun); in mpssas_send_abort()
1504 req->TaskMID = htole16(cm->cm_desc.Default.SMID); in mpssas_send_abort()
1509 tm->cm_targ = cm->cm_targ; in mpssas_send_abort()
1510 tm->cm_lun = cm->cm_lun; in mpssas_send_abort()
1523 err, cm, req->TaskMID); in mpssas_send_abort()
1533 struct mps_command *cm; in mpssas_scsiio_timeout() local
1536 cm = (struct mps_command *)data; in mpssas_scsiio_timeout()
1537 sc = cm->cm_sc; in mpssas_scsiio_timeout()
1538 ccb = cm->cm_ccb; in mpssas_scsiio_timeout()
1544 mps_dprint(sc, MPS_XINFO|MPS_RECOVERY, "Timeout checking cm %p\n", cm); in mpssas_scsiio_timeout()
1552 if (cm->cm_flags & MPS_CM_FLAGS_ON_RECOVERY) { in mpssas_scsiio_timeout()
1553 mpssas_log_command(cm, MPS_XINFO, in mpssas_scsiio_timeout()
1554 "SCSI command %p almost timed out\n", cm); in mpssas_scsiio_timeout()
1558 if (cm->cm_ccb == NULL) { in mpssas_scsiio_timeout()
1563 targ = cm->cm_targ; in mpssas_scsiio_timeout()
1567 mpssas_log_command(cm, MPS_INFO|MPS_RECOVERY, in mpssas_scsiio_timeout()
1575 mpssas_set_ccbstatus(cm->cm_ccb, CAM_CMD_TIMEOUT); in mpssas_scsiio_timeout()
1576 cm->cm_flags |= MPS_CM_FLAGS_ON_RECOVERY | MPS_CM_FLAGS_TIMEDOUT; in mpssas_scsiio_timeout()
1577 TAILQ_INSERT_TAIL(&targ->timedout_commands, cm, cm_recovery); in mpssas_scsiio_timeout()
1585 cm, targ->tm); in mpssas_scsiio_timeout()
1589 cm->cm_desc.Default.SMID); in mpssas_scsiio_timeout()
1591 cm, targ->tm); in mpssas_scsiio_timeout()
1594 mpssas_send_abort(sc, targ->tm, cm); in mpssas_scsiio_timeout()
1606 "timedout cm %p failed to allocate a tm\n", cm); in mpssas_scsiio_timeout()
1619 struct mps_command *cm; in mpssas_action_scsiio() local
1706 cm = mps_alloc_command(sc); in mpssas_action_scsiio()
1707 if (cm == NULL || (sc->mps_flags & MPS_FLAGS_DIAGRESET)) { in mpssas_action_scsiio()
1708 if (cm != NULL) { in mpssas_action_scsiio()
1709 mps_free_command(sc, cm); in mpssas_action_scsiio()
1721 req = (MPI2_SCSI_IO_REQUEST *)cm->cm_req; in mpssas_action_scsiio()
1726 req->SenseBufferLowAddress = htole32(cm->cm_sense_busaddr); in mpssas_action_scsiio()
1744 cm->cm_flags |= MPS_CM_FLAGS_DATAIN; in mpssas_action_scsiio()
1748 cm->cm_flags |= MPS_CM_FLAGS_DATAOUT; in mpssas_action_scsiio()
1784 mps_free_command(sc, cm); in mpssas_action_scsiio()
1850 cm->cm_length = csio->dxfer_len; in mpssas_action_scsiio()
1851 if (cm->cm_length != 0) { in mpssas_action_scsiio()
1852 cm->cm_data = ccb; in mpssas_action_scsiio()
1853 cm->cm_flags |= MPS_CM_FLAGS_USE_CCB; in mpssas_action_scsiio()
1855 cm->cm_data = NULL; in mpssas_action_scsiio()
1857 cm->cm_sge = &req->SGL; in mpssas_action_scsiio()
1858 cm->cm_sglsize = (32 - 24) * 4; in mpssas_action_scsiio()
1859 cm->cm_desc.SCSIIO.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_SCSI_IO; in mpssas_action_scsiio()
1860 cm->cm_desc.SCSIIO.DevHandle = htole16(targ->handle); in mpssas_action_scsiio()
1861 cm->cm_complete = mpssas_scsiio_complete; in mpssas_action_scsiio()
1862 cm->cm_complete_data = ccb; in mpssas_action_scsiio()
1863 cm->cm_targ = targ; in mpssas_action_scsiio()
1864 cm->cm_lun = csio->ccb_h.target_lun; in mpssas_action_scsiio()
1865 cm->cm_ccb = ccb; in mpssas_action_scsiio()
1874 mpssas_direct_drive_io(sassc, cm, ccb); in mpssas_action_scsiio()
1885 callout_reset_sbt(&cm->cm_callout, SBT_1MS * ccb->ccb_h.timeout, 0, in mpssas_action_scsiio()
1886 mpssas_scsiio_timeout, cm, 0); in mpssas_action_scsiio()
1890 TAILQ_INSERT_TAIL(&targ->commands, cm, cm_link); in mpssas_action_scsiio()
1893 mpssas_log_command(cm, MPS_XINFO, "%s cm %p ccb %p outstanding %u\n", in mpssas_action_scsiio()
1894 __func__, cm, ccb, targ->outstanding); in mpssas_action_scsiio()
1896 mps_map_command(sc, cm); in mpssas_action_scsiio()
1954 mpssas_scsiio_complete(struct mps_softc *sc, struct mps_command *cm) in mpssas_scsiio_complete() argument
1969 "cm %p SMID %u ccb %p reply %p outstanding %u\n", cm, in mpssas_scsiio_complete()
1970 cm->cm_desc.Default.SMID, cm->cm_ccb, cm->cm_reply, in mpssas_scsiio_complete()
1971 cm->cm_targ->outstanding); in mpssas_scsiio_complete()
1973 callout_stop(&cm->cm_callout); in mpssas_scsiio_complete()
1977 ccb = cm->cm_complete_data; in mpssas_scsiio_complete()
1980 rep = (MPI2_SCSI_IO_REPLY *)cm->cm_reply; in mpssas_scsiio_complete()
1986 if (cm->cm_data != NULL) { in mpssas_scsiio_complete()
1987 if (cm->cm_flags & MPS_CM_FLAGS_DATAIN) in mpssas_scsiio_complete()
1989 else if (cm->cm_flags & MPS_CM_FLAGS_DATAOUT) in mpssas_scsiio_complete()
1991 bus_dmamap_sync(sc->buffer_dmat, cm->cm_dmamap, dir); in mpssas_scsiio_complete()
1992 bus_dmamap_unload(sc->buffer_dmat, cm->cm_dmamap); in mpssas_scsiio_complete()
1995 cm->cm_targ->completed++; in mpssas_scsiio_complete()
1996 cm->cm_targ->outstanding--; in mpssas_scsiio_complete()
1997 TAILQ_REMOVE(&cm->cm_targ->commands, cm, cm_link); in mpssas_scsiio_complete()
2005 if (cm->cm_flags & MPS_CM_FLAGS_ON_RECOVERY) { in mpssas_scsiio_complete()
2006 TAILQ_REMOVE(&cm->cm_targ->timedout_commands, cm, cm_recovery); in mpssas_scsiio_complete()
2007 KASSERT(cm->cm_state == MPS_CM_STATE_BUSY, in mpssas_scsiio_complete()
2008 ("Not busy for CM_FLAGS_TIMEDOUT: %u\n", cm->cm_state)); in mpssas_scsiio_complete()
2009 cm->cm_flags &= ~MPS_CM_FLAGS_ON_RECOVERY; in mpssas_scsiio_complete()
2010 if (cm->cm_reply != NULL) in mpssas_scsiio_complete()
2011 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_scsiio_complete()
2014 cm, cm->cm_ccb, le16toh(rep->IOCStatus), in mpssas_scsiio_complete()
2018 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_scsiio_complete()
2020 cm, cm->cm_ccb); in mpssas_scsiio_complete()
2021 } else if (cm->cm_targ->tm != NULL) { in mpssas_scsiio_complete()
2022 if (cm->cm_reply != NULL) in mpssas_scsiio_complete()
2023 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_scsiio_complete()
2026 cm, cm->cm_ccb, le16toh(rep->IOCStatus), in mpssas_scsiio_complete()
2030 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_scsiio_complete()
2032 cm, cm->cm_ccb); in mpssas_scsiio_complete()
2034 mpssas_log_command(cm, MPS_RECOVERY, in mpssas_scsiio_complete()
2036 cm, cm->cm_ccb); in mpssas_scsiio_complete()
2039 if ((cm->cm_flags & MPS_CM_FLAGS_ERROR_MASK) != 0) { in mpssas_scsiio_complete()
2082 if (cm->cm_reply == NULL) { in mpssas_scsiio_complete()
2112 mps_free_command(sc, cm); in mpssas_scsiio_complete()
2117 mpssas_log_command(cm, MPS_XINFO, in mpssas_scsiio_complete()
2128 if (cm->cm_flags & MPS_CM_FLAGS_DD_IO) { in mpssas_scsiio_complete()
2129 mps_free_command(sc, cm); in mpssas_scsiio_complete()
2138 csio->resid = cm->cm_length - le32toh(rep->TransferCount); in mpssas_scsiio_complete()
2145 mpssas_log_command(cm, MPS_XINFO, "recovered error\n"); in mpssas_scsiio_complete()
2210 bcopy(cm->cm_sense, &ccb->csio.sense_data, sense_len); in mpssas_scsiio_complete()
2273 if (cm->cm_targ->devinfo == 0) in mpssas_scsiio_complete()
2279 mps_print_scsiio_cmd(sc, cm); in mpssas_scsiio_complete()
2292 if (cm->cm_flags & MPS_CM_FLAGS_TIMEDOUT) in mpssas_scsiio_complete()
2321 if (cm->cm_targ->flags & MPSSAS_TARGET_INREMOVAL) in mpssas_scsiio_complete()
2329 target_id, cm->cm_desc.Default.SMID, in mpssas_scsiio_complete()
2331 (cm->cm_targ->flags & MPSSAS_TARGET_INREMOVAL) ? " departing" : ""); in mpssas_scsiio_complete()
2348 mpssas_log_command(cm, MPS_XINFO, in mpssas_scsiio_complete()
2353 csio->resid = cm->cm_length; in mpssas_scsiio_complete()
2378 if (cm->cm_targ->flags & MPSSAS_TARGET_INREMOVAL) { in mpssas_scsiio_complete()
2379 if (TAILQ_FIRST(&cm->cm_targ->commands) == NULL && in mpssas_scsiio_complete()
2380 cm->cm_targ->pending_remove_tm != NULL) { in mpssas_scsiio_complete()
2383 cm->cm_targ->tid, cm->cm_targ->handle); in mpssas_scsiio_complete()
2384 mps_map_command(sc, cm->cm_targ->pending_remove_tm); in mpssas_scsiio_complete()
2385 cm->cm_targ->pending_remove_tm = NULL; in mpssas_scsiio_complete()
2389 mps_free_command(sc, cm); in mpssas_scsiio_complete()
2395 mpssas_direct_drive_io(struct mpssas_softc *sassc, struct mps_command *cm, in mpssas_direct_drive_io() argument
2410 pIO_req = (pMpi2SCSIIORequest_t)cm->cm_req; in mpssas_direct_drive_io()
2421 io_size = (cm->cm_length >> sc->DD_block_exponent); in mpssas_direct_drive_io()
2454 cm->cm_desc.SCSIIO.DevHandle = in mpssas_direct_drive_io()
2473 cm->cm_flags |= MPS_CM_FLAGS_DD_IO; in mpssas_direct_drive_io()
2499 io_size = (cm->cm_length >> sc->DD_block_exponent); in mpssas_direct_drive_io()
2543 cm->cm_desc.SCSIIO.DevHandle = in mpssas_direct_drive_io()
2570 cm->cm_flags |= MPS_CM_FLAGS_DD_IO; in mpssas_direct_drive_io()
2578 io_size = (cm->cm_length >> sc->DD_block_exponent); in mpssas_direct_drive_io()
2621 cm->cm_desc.SCSIIO.DevHandle = in mpssas_direct_drive_io()
2655 cm->cm_flags |= MPS_CM_FLAGS_DD_IO; in mpssas_direct_drive_io()
2663 mpssas_smpio_complete(struct mps_softc *sc, struct mps_command *cm) in mpssas_smpio_complete() argument
2670 ccb = cm->cm_complete_data; in mpssas_smpio_complete()
2678 if ((cm->cm_flags & MPS_CM_FLAGS_ERROR_MASK) != 0) { in mpssas_smpio_complete()
2680 __func__, cm->cm_flags); in mpssas_smpio_complete()
2685 rpl = (MPI2_SMP_PASSTHROUGH_REPLY *)cm->cm_reply; in mpssas_smpio_complete()
2692 req = (MPI2_SMP_PASSTHROUGH_REQUEST *)cm->cm_req; in mpssas_smpio_complete()
2719 bus_dmamap_sync(sc->buffer_dmat, cm->cm_dmamap, in mpssas_smpio_complete()
2721 bus_dmamap_unload(sc->buffer_dmat, cm->cm_dmamap); in mpssas_smpio_complete()
2722 mps_free_command(sc, cm); in mpssas_smpio_complete()
2729 struct mps_command *cm; in mpssas_send_smpcmd() local
2799 cm = mps_alloc_command(sc); in mpssas_send_smpcmd()
2800 if (cm == NULL) { in mpssas_send_smpcmd()
2808 req = (MPI2_SMP_PASSTHROUGH_REQUEST *)cm->cm_req; in mpssas_send_smpcmd()
2822 mpi_init_sge(cm, req, &req->SGL); in mpssas_send_smpcmd()
2828 cm->cm_uio.uio_iov = cm->cm_iovec; in mpssas_send_smpcmd()
2829 cm->cm_uio.uio_iovcnt = 2; in mpssas_send_smpcmd()
2830 cm->cm_uio.uio_segflg = UIO_SYSSPACE; in mpssas_send_smpcmd()
2837 cm->cm_uio.uio_rw = UIO_WRITE; in mpssas_send_smpcmd()
2839 cm->cm_iovec[0].iov_base = request; in mpssas_send_smpcmd()
2840 cm->cm_iovec[0].iov_len = le16toh(req->RequestDataLength); in mpssas_send_smpcmd()
2841 cm->cm_iovec[1].iov_base = response; in mpssas_send_smpcmd()
2842 cm->cm_iovec[1].iov_len = ccb->smpio.smp_response_len; in mpssas_send_smpcmd()
2844 cm->cm_uio.uio_resid = cm->cm_iovec[0].iov_len + in mpssas_send_smpcmd()
2845 cm->cm_iovec[1].iov_len; in mpssas_send_smpcmd()
2852 cm->cm_max_segs = 2; in mpssas_send_smpcmd()
2854 cm->cm_desc.Default.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE; in mpssas_send_smpcmd()
2855 cm->cm_complete = mpssas_smpio_complete; in mpssas_send_smpcmd()
2856 cm->cm_complete_data = ccb; in mpssas_send_smpcmd()
2864 cm->cm_flags |= MPS_CM_FLAGS_USE_UIO | MPS_CM_FLAGS_SMP_PASS | in mpssas_send_smpcmd()
2879 error = mps_map_command(sc, cm); in mpssas_send_smpcmd()
2890 mps_free_command(sc, cm); in mpssas_send_smpcmd()
3296 struct mps_command *cm; in mpssas_send_portenable() local
3300 if ((cm = mps_alloc_command(sc)) == NULL) in mpssas_send_portenable()
3302 request = (MPI2_PORT_ENABLE_REQUEST *)cm->cm_req; in mpssas_send_portenable()
3306 cm->cm_desc.Default.RequestFlags = MPI2_REQ_DESCRIPT_FLAGS_DEFAULT_TYPE; in mpssas_send_portenable()
3307 cm->cm_complete = mpssas_portenable_complete; in mpssas_send_portenable()
3308 cm->cm_data = NULL; in mpssas_send_portenable()
3309 cm->cm_sge = NULL; in mpssas_send_portenable()
3311 mps_map_command(sc, cm); in mpssas_send_portenable()
3314 cm, cm->cm_req, cm->cm_complete); in mpssas_send_portenable()
3319 mpssas_portenable_complete(struct mps_softc *sc, struct mps_command *cm) in mpssas_portenable_complete() argument
3332 if ((cm->cm_flags & MPS_CM_FLAGS_ERROR_MASK) != 0) { in mpssas_portenable_complete()
3334 "This should not happen!\n", __func__, cm->cm_flags); in mpssas_portenable_complete()
3337 reply = (MPI2_PORT_ENABLE_REPLY *)cm->cm_reply; in mpssas_portenable_complete()
3344 mps_free_command(sc, cm); in mpssas_portenable_complete()