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