Lines Matching defs:cmd

66     struct mrsas_mpt_cmd *cmd, union ccb *ccb);
68 mrsas_build_ldio_rw(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
71 mrsas_build_ldio_nonrw(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
74 mrsas_build_syspdio(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
77 mrsas_setup_io(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
83 void mrsas_release_mpt_cmd(struct mrsas_mpt_cmd *cmd);
84 void mrsas_unmap_request(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd);
85 void mrsas_cmd_done(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd);
94 static void mrsas_freeze_simq(struct mrsas_mpt_cmd *cmd, struct cam_sim *sim);
376 struct mrsas_mpt_cmd *cmd;
379 cmd = (struct mrsas_mpt_cmd *)data;
380 sc = cmd->sc;
382 if (cmd->ccb_ptr == NULL) {
393 callout_reset_sbt(&cmd->cm_callout, SBT_1S * 600, 0,
394 mrsas_scsiio_timeout, cmd, 0);
396 callout_reset(&cmd->cm_callout, (600000 * hz) / 1000,
397 mrsas_scsiio_timeout, cmd);
418 struct mrsas_mpt_cmd *cmd;
430 cmd = mrsas_get_mpt_cmd(sc);
432 if (!cmd) {
439 cmd->flags |= MRSAS_DIR_IN;
441 cmd->flags |= MRSAS_DIR_OUT;
443 cmd->flags = MRSAS_DIR_NONE; /* no data */
455 mrsas_release_mpt_cmd(cmd);
462 mrsas_release_mpt_cmd(cmd);
467 mrsas_release_mpt_cmd(cmd);
471 cmd->length = csio->dxfer_len;
472 if (cmd->length)
473 cmd->data = csio->data_ptr;
477 mrsas_release_mpt_cmd(cmd);
481 cmd->length = csio->dxfer_len;
482 if (cmd->length)
483 cmd->data = csio->data_ptr;
493 mrsas_release_mpt_cmd(cmd);
497 cmd->length = csio->dxfer_len;
498 if (cmd->length)
499 cmd->data = csio->data_ptr;
501 mrsas_release_mpt_cmd(cmd);
506 mrsas_release_mpt_cmd(cmd);
513 cmd->ccb_ptr = ccb;
515 req_desc = mrsas_get_request_desc(sc, (cmd->index) - 1);
521 cmd->request_desc = req_desc;
524 bcopy(csio->cdb_io.cdb_ptr, cmd->io_request->CDB.CDB32, csio->cdb_len);
526 bcopy(csio->cdb_io.cdb_bytes, cmd->io_request->CDB.CDB32, csio->cdb_len);
534 if (mrsas_build_ldio_rw(sc, cmd, ccb)) {
542 if (mrsas_build_ldio_nonrw(sc, cmd, ccb)) {
553 if (mrsas_build_syspdio(sc, cmd, ccb, sim, 0)) {
561 if (mrsas_build_syspdio(sc, cmd, ccb, sim, 1)) {
571 if (cmd->flags == MRSAS_DIR_IN) /* from device */
572 cmd->io_request->Control |= MPI2_SCSIIO_CONTROL_READ;
573 else if (cmd->flags == MRSAS_DIR_OUT) /* to device */
574 cmd->io_request->Control |= MPI2_SCSIIO_CONTROL_WRITE;
576 cmd->io_request->SGLFlags = MPI2_SGE_FLAGS_64_BIT_ADDRESSING;
577 cmd->io_request->SGLOffset0 = offsetof(MRSAS_RAID_SCSI_IO_REQUEST, SGL) / 4;
578 cmd->io_request->SenseBufferLowAddress = cmd->sense_phys_addr;
579 cmd->io_request->SenseBufferLength = MRSAS_SCSI_SENSE_BUFFERSIZE;
581 req_desc = cmd->request_desc;
582 req_desc->SCSIIO.SMID = cmd->index;
588 callout_reset_sbt(&cmd->cm_callout, SBT_1S * 600, 0,
589 mrsas_scsiio_timeout, cmd, 0);
591 callout_reset(&cmd->cm_callout, (600000 * hz) / 1000,
592 mrsas_scsiio_timeout, cmd);
637 * mrsas_get_mpt_cmd: Get a cmd from free command pool
646 struct mrsas_mpt_cmd *cmd = NULL;
650 cmd = TAILQ_FIRST(&sc->mrsas_mpt_cmd_list_head);
651 TAILQ_REMOVE(&sc->mrsas_mpt_cmd_list_head, cmd, next);
656 memset((uint8_t *)cmd->io_request, 0, MRSAS_MPI2_RAID_DEFAULT_IO_FRAME_SIZE);
657 cmd->data = NULL;
658 cmd->length = 0;
659 cmd->flags = 0;
660 cmd->error_code = 0;
661 cmd->load_balance = 0;
662 cmd->ccb_ptr = NULL;
666 return cmd;
670 * mrsas_release_mpt_cmd: Return a cmd to free command pool
676 mrsas_release_mpt_cmd(struct mrsas_mpt_cmd *cmd)
678 struct mrsas_softc *sc = cmd->sc;
681 cmd->sync_cmd_idx = (u_int32_t)MRSAS_ULONG_MAX;
682 TAILQ_INSERT_TAIL(&(sc->mrsas_mpt_cmd_list_head), cmd, next);
719 mrsas_build_ldio_rw(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
729 io_request = cmd->io_request;
737 if (mrsas_setup_io(sc, cmd, ccb, device_id, io_request) != SUCCESS)
740 io_request->DataLength = cmd->length;
742 if (mrsas_map_request(sc, cmd, ccb) == SUCCESS) {
743 if (cmd->sge_count > sc->max_num_sge) {
745 "max (0x%x) allowed\n", cmd->sge_count, sc->max_num_sge);
752 io_request->RaidContext.numSGE = cmd->sge_count;
753 io_request->RaidContext.numSGEExt = (uint8_t)(cmd->sge_count >> 8);
772 mrsas_setup_io(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
869 cmd->request_desc->SCSIIO.MSIxIndex =
877 cmd->request_desc->SCSIIO.RequestFlags =
887 cmd->request_desc->SCSIIO.RequestFlags =
902 cmd->load_balance = MRSAS_LOAD_BALANCE_FLAG;
903 cmd->pd_r1_lb = io_info.pd_after_lb;
905 cmd->load_balance = 0;
906 cmd->request_desc->SCSIIO.DevHandle = io_info.devHandle;
911 cmd->request_desc->SCSIIO.RequestFlags =
921 cmd->request_desc->SCSIIO.RequestFlags =
946 mrsas_build_ldio_nonrw(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
953 io_request = cmd->io_request;
959 cmd->request_desc->SCSIIO.RequestFlags =
965 io_request->DataLength = cmd->length;
967 if (mrsas_map_request(sc, cmd, ccb) == SUCCESS) {
968 if (cmd->sge_count > sc->max_num_sge) {
970 "max (0x%x) allowed\n", cmd->sge_count, sc->max_num_sge);
977 io_request->RaidContext.numSGE = cmd->sge_count;
978 io_request->RaidContext.numSGEExt = (uint8_t)(cmd->sge_count >> 8);
996 mrsas_build_syspdio(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
1007 io_request = cmd->io_request;
1042 cmd->request_desc->SCSIIO.DevHandle = io_request->DevHandle;
1043 cmd->request_desc->SCSIIO.MSIxIndex =
1049 cmd->request_desc->SCSIIO.RequestFlags =
1067 cmd->request_desc->SCSIIO.RequestFlags =
1073 io_request->DataLength = cmd->length;
1075 if (mrsas_map_request(sc, cmd, ccb) == SUCCESS) {
1076 if (cmd->sge_count > sc->max_num_sge) {
1078 "max (0x%x) allowed\n", cmd->sge_count, sc->max_num_sge);
1085 io_request->RaidContext.numSGE = cmd->sge_count;
1086 io_request->RaidContext.numSGEExt = (uint8_t)(cmd->sge_count >> 8);
1101 * cmd->error_code will contain the error code and a 1 is returned.
1105 struct mrsas_mpt_cmd *cmd, union ccb *ccb)
1110 sim = xpt_path_sim(cmd->ccb_ptr->ccb_h.path);
1112 if (cmd->data != NULL) {
1116 retcode = bus_dmamap_load_ccb(sc->data_tag, cmd->data_dmamap, ccb,
1117 mrsas_data_load_cb, cmd, 0);
1119 retcode = bus_dmamap_load(sc->data_tag, cmd->data_dmamap, cmd->data,
1120 cmd->length, mrsas_data_load_cb, cmd, BUS_DMA_NOWAIT);
1127 mrsas_freeze_simq(cmd, sim);
1130 if (cmd->error_code)
1143 mrsas_unmap_request(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd)
1145 if (cmd->data != NULL) {
1146 if (cmd->flags & MRSAS_DIR_IN)
1147 bus_dmamap_sync(sc->data_tag, cmd->data_dmamap, BUS_DMASYNC_POSTREAD);
1148 if (cmd->flags & MRSAS_DIR_OUT)
1149 bus_dmamap_sync(sc->data_tag, cmd->data_dmamap, BUS_DMASYNC_POSTWRITE);
1151 bus_dmamap_unload(sc->data_tag, cmd->data_dmamap);
1168 struct mrsas_mpt_cmd *cmd = (struct mrsas_mpt_cmd *)arg;
1169 struct mrsas_softc *sc = cmd->sc;
1175 cmd->error_code = error;
1178 cmd->ccb_ptr->ccb_h.status = CAM_REQ_TOO_BIG;
1182 if (cmd->flags & MRSAS_DIR_IN)
1183 bus_dmamap_sync(cmd->sc->data_tag, cmd->data_dmamap,
1185 if (cmd->flags & MRSAS_DIR_OUT)
1186 bus_dmamap_sync(cmd->sc->data_tag, cmd->data_dmamap,
1192 io_request = cmd->io_request;
1232 if ((cmd->io_request->IoFlags & MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH)
1234 cmd->io_request->ChainOffset = sc->chain_offset_io_request;
1236 cmd->io_request->ChainOffset = 0;
1238 cmd->io_request->ChainOffset = sc->chain_offset_io_request;
1250 sg_chain->Address = cmd->chain_frame_phys_addr;
1251 sgl_ptr = (pMpi25IeeeSgeChain64_t)cmd->chain_frame;
1255 cmd->sge_count = nseg;
1266 mrsas_freeze_simq(struct mrsas_mpt_cmd *cmd, struct cam_sim *sim)
1268 union ccb *ccb = (union ccb *)(cmd->ccb_ptr);
1296 mrsas_cmd_done(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd)
1298 callout_stop(&cmd->cm_callout);
1299 mrsas_unmap_request(sc, cmd);
1301 xpt_done(cmd->ccb_ptr);
1302 cmd->ccb_ptr = NULL;
1304 mrsas_release_mpt_cmd(cmd);