Lines Matching refs:cmd

66     struct mrsas_mpt_cmd *cmd, union ccb *ccb);
68 mrsas_build_ldio(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
71 mrsas_build_dcdb(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
74 mrsas_setup_io(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd,
80 void mrsas_release_mpt_cmd(struct mrsas_mpt_cmd *cmd);
81 void mrsas_unmap_request(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd);
82 void mrsas_cmd_done(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd);
91 static void mrsas_freeze_simq(struct mrsas_mpt_cmd *cmd, struct cam_sim *sim);
372 struct mrsas_mpt_cmd *cmd; in mrsas_scsiio_timeout() local
375 cmd = (struct mrsas_mpt_cmd *)data; in mrsas_scsiio_timeout()
376 sc = cmd->sc; in mrsas_scsiio_timeout()
378 if (cmd->ccb_ptr == NULL) { in mrsas_scsiio_timeout()
389 callout_reset_sbt(&cmd->cm_callout, SBT_1S * 600, 0, in mrsas_scsiio_timeout()
390 mrsas_scsiio_timeout, cmd, 0); in mrsas_scsiio_timeout()
392 callout_reset(&cmd->cm_callout, (600000 * hz) / 1000, in mrsas_scsiio_timeout()
393 mrsas_scsiio_timeout, cmd); in mrsas_scsiio_timeout()
414 struct mrsas_mpt_cmd *cmd; in mrsas_startio() local
425 cmd = mrsas_get_mpt_cmd(sc); in mrsas_startio()
427 if (!cmd) { in mrsas_startio()
434 cmd->flags |= MRSAS_DIR_IN; in mrsas_startio()
436 cmd->flags |= MRSAS_DIR_OUT; in mrsas_startio()
438 cmd->flags = MRSAS_DIR_NONE; /* no data */ in mrsas_startio()
450 mrsas_release_mpt_cmd(cmd); in mrsas_startio()
457 mrsas_release_mpt_cmd(cmd); in mrsas_startio()
462 mrsas_release_mpt_cmd(cmd); in mrsas_startio()
466 cmd->length = csio->dxfer_len; in mrsas_startio()
467 if (cmd->length) in mrsas_startio()
468 cmd->data = csio->data_ptr; in mrsas_startio()
471 cmd->length = csio->dxfer_len; in mrsas_startio()
472 if (cmd->length) in mrsas_startio()
473 cmd->data = csio->data_ptr; in mrsas_startio()
483 mrsas_release_mpt_cmd(cmd); in mrsas_startio()
487 cmd->length = csio->dxfer_len; in mrsas_startio()
488 if (cmd->length) in mrsas_startio()
489 cmd->data = csio->data_ptr; in mrsas_startio()
491 mrsas_release_mpt_cmd(cmd); in mrsas_startio()
496 mrsas_release_mpt_cmd(cmd); in mrsas_startio()
503 cmd->ccb_ptr = ccb; in mrsas_startio()
505 req_desc = mrsas_get_request_desc(sc, (cmd->index) - 1); in mrsas_startio()
511 cmd->request_desc = req_desc; in mrsas_startio()
514 bcopy(csio->cdb_io.cdb_ptr, cmd->io_request->CDB.CDB32, csio->cdb_len); in mrsas_startio()
516 bcopy(csio->cdb_io.cdb_bytes, cmd->io_request->CDB.CDB32, csio->cdb_len); in mrsas_startio()
522 if (mrsas_build_ldio(sc, cmd, ccb)) { in mrsas_startio()
528 if (mrsas_build_dcdb(sc, cmd, ccb, sim)) { in mrsas_startio()
536 if (cmd->flags == MRSAS_DIR_IN) /* from device */ in mrsas_startio()
537 cmd->io_request->Control |= MPI2_SCSIIO_CONTROL_READ; in mrsas_startio()
538 else if (cmd->flags == MRSAS_DIR_OUT) /* to device */ in mrsas_startio()
539 cmd->io_request->Control |= MPI2_SCSIIO_CONTROL_WRITE; in mrsas_startio()
541 cmd->io_request->SGLFlags = MPI2_SGE_FLAGS_64_BIT_ADDRESSING; in mrsas_startio()
542 cmd->io_request->SGLOffset0 = offsetof(MRSAS_RAID_SCSI_IO_REQUEST, SGL) / 4; in mrsas_startio()
543 cmd->io_request->SenseBufferLowAddress = cmd->sense_phys_addr; in mrsas_startio()
544 cmd->io_request->SenseBufferLength = MRSAS_SCSI_SENSE_BUFFERSIZE; in mrsas_startio()
546 req_desc = cmd->request_desc; in mrsas_startio()
547 req_desc->SCSIIO.SMID = cmd->index; in mrsas_startio()
553 callout_reset_sbt(&cmd->cm_callout, SBT_1S * 600, 0, in mrsas_startio()
554 mrsas_scsiio_timeout, cmd, 0); in mrsas_startio()
556 callout_reset(&cmd->cm_callout, (600000 * hz) / 1000, in mrsas_startio()
557 mrsas_scsiio_timeout, cmd); in mrsas_startio()
611 struct mrsas_mpt_cmd *cmd = NULL; in mrsas_get_mpt_cmd() local
615 cmd = TAILQ_FIRST(&sc->mrsas_mpt_cmd_list_head); in mrsas_get_mpt_cmd()
616 TAILQ_REMOVE(&sc->mrsas_mpt_cmd_list_head, cmd, next); in mrsas_get_mpt_cmd()
618 memset((uint8_t *)cmd->io_request, 0, MRSAS_MPI2_RAID_DEFAULT_IO_FRAME_SIZE); in mrsas_get_mpt_cmd()
619 cmd->data = NULL; in mrsas_get_mpt_cmd()
620 cmd->length = 0; in mrsas_get_mpt_cmd()
621 cmd->flags = 0; in mrsas_get_mpt_cmd()
622 cmd->error_code = 0; in mrsas_get_mpt_cmd()
623 cmd->load_balance = 0; in mrsas_get_mpt_cmd()
624 cmd->ccb_ptr = NULL; in mrsas_get_mpt_cmd()
627 return cmd; in mrsas_get_mpt_cmd()
637 mrsas_release_mpt_cmd(struct mrsas_mpt_cmd *cmd) in mrsas_release_mpt_cmd() argument
639 struct mrsas_softc *sc = cmd->sc; in mrsas_release_mpt_cmd()
642 cmd->sync_cmd_idx = (u_int32_t)MRSAS_ULONG_MAX; in mrsas_release_mpt_cmd()
643 TAILQ_INSERT_TAIL(&(sc->mrsas_mpt_cmd_list_head), cmd, next); in mrsas_release_mpt_cmd()
680 mrsas_build_ldio(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd, in mrsas_build_ldio() argument
690 io_request = cmd->io_request; in mrsas_build_ldio()
698 if (mrsas_setup_io(sc, cmd, ccb, device_id, io_request) != SUCCESS) in mrsas_build_ldio()
701 io_request->DataLength = cmd->length; in mrsas_build_ldio()
703 if (mrsas_map_request(sc, cmd, ccb) == SUCCESS) { in mrsas_build_ldio()
704 if (cmd->sge_count > MRSAS_MAX_SGL) { in mrsas_build_ldio()
706 "max (0x%x) allowed\n", cmd->sge_count, sc->max_num_sge); in mrsas_build_ldio()
709 io_request->RaidContext.numSGE = cmd->sge_count; in mrsas_build_ldio()
727 mrsas_setup_io(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd, in mrsas_setup_io() argument
824 cmd->request_desc->SCSIIO.MSIxIndex = in mrsas_setup_io()
832 cmd->request_desc->SCSIIO.RequestFlags = in mrsas_setup_io()
837 cmd->request_desc->SCSIIO.RequestFlags = in mrsas_setup_io()
852 cmd->load_balance = MRSAS_LOAD_BALANCE_FLAG; in mrsas_setup_io()
853 cmd->pd_r1_lb = io_info.pd_after_lb; in mrsas_setup_io()
855 cmd->load_balance = 0; in mrsas_setup_io()
856 cmd->request_desc->SCSIIO.DevHandle = io_info.devHandle; in mrsas_setup_io()
861 cmd->request_desc->SCSIIO.RequestFlags = in mrsas_setup_io()
866 cmd->request_desc->SCSIIO.RequestFlags = in mrsas_setup_io()
891 mrsas_build_dcdb(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd, in mrsas_build_dcdb() argument
899 io_request = cmd->io_request; in mrsas_build_dcdb()
915 cmd->request_desc->SCSIIO.DevHandle = io_request->DevHandle; in mrsas_build_dcdb()
916 cmd->request_desc->SCSIIO.MSIxIndex = in mrsas_build_dcdb()
922 cmd->request_desc->SCSIIO.RequestFlags = in mrsas_build_dcdb()
932 cmd->request_desc->SCSIIO.RequestFlags = in mrsas_build_dcdb()
948 cmd->request_desc->SCSIIO.RequestFlags = in mrsas_build_dcdb()
955 io_request->DataLength = cmd->length; in mrsas_build_dcdb()
957 if (mrsas_map_request(sc, cmd, ccb) == SUCCESS) { in mrsas_build_dcdb()
958 if (cmd->sge_count > sc->max_num_sge) { in mrsas_build_dcdb()
960 "max (0x%x) allowed\n", cmd->sge_count, sc->max_num_sge); in mrsas_build_dcdb()
963 io_request->RaidContext.numSGE = cmd->sge_count; in mrsas_build_dcdb()
982 struct mrsas_mpt_cmd *cmd, union ccb *ccb) in mrsas_map_request() argument
987 sim = xpt_path_sim(cmd->ccb_ptr->ccb_h.path); in mrsas_map_request()
989 if (cmd->data != NULL) { in mrsas_map_request()
993 retcode = bus_dmamap_load_ccb(sc->data_tag, cmd->data_dmamap, ccb, in mrsas_map_request()
994 mrsas_data_load_cb, cmd, 0); in mrsas_map_request()
996 retcode = bus_dmamap_load(sc->data_tag, cmd->data_dmamap, cmd->data, in mrsas_map_request()
997 cmd->length, mrsas_data_load_cb, cmd, BUS_DMA_NOWAIT); in mrsas_map_request()
1004 mrsas_freeze_simq(cmd, sim); in mrsas_map_request()
1007 if (cmd->error_code) in mrsas_map_request()
1020 mrsas_unmap_request(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd) in mrsas_unmap_request() argument
1022 if (cmd->data != NULL) { in mrsas_unmap_request()
1023 if (cmd->flags & MRSAS_DIR_IN) in mrsas_unmap_request()
1024 bus_dmamap_sync(sc->data_tag, cmd->data_dmamap, BUS_DMASYNC_POSTREAD); in mrsas_unmap_request()
1025 if (cmd->flags & MRSAS_DIR_OUT) in mrsas_unmap_request()
1026 bus_dmamap_sync(sc->data_tag, cmd->data_dmamap, BUS_DMASYNC_POSTWRITE); in mrsas_unmap_request()
1028 bus_dmamap_unload(sc->data_tag, cmd->data_dmamap); in mrsas_unmap_request()
1045 struct mrsas_mpt_cmd *cmd = (struct mrsas_mpt_cmd *)arg; in mrsas_data_load_cb() local
1046 struct mrsas_softc *sc = cmd->sc; in mrsas_data_load_cb()
1052 cmd->error_code = error; in mrsas_data_load_cb()
1055 cmd->ccb_ptr->ccb_h.status = CAM_REQ_TOO_BIG; in mrsas_data_load_cb()
1059 if (cmd->flags & MRSAS_DIR_IN) in mrsas_data_load_cb()
1060 bus_dmamap_sync(cmd->sc->data_tag, cmd->data_dmamap, in mrsas_data_load_cb()
1062 if (cmd->flags & MRSAS_DIR_OUT) in mrsas_data_load_cb()
1063 bus_dmamap_sync(cmd->sc->data_tag, cmd->data_dmamap, in mrsas_data_load_cb()
1069 io_request = cmd->io_request; in mrsas_data_load_cb()
1094 if ((cmd->io_request->IoFlags & MPI25_SAS_DEVICE0_FLAGS_ENABLED_FAST_PATH) in mrsas_data_load_cb()
1096 cmd->io_request->ChainOffset = sc->chain_offset_io_request; in mrsas_data_load_cb()
1098 cmd->io_request->ChainOffset = 0; in mrsas_data_load_cb()
1100 cmd->io_request->ChainOffset = sc->chain_offset_io_request; in mrsas_data_load_cb()
1107 sg_chain->Address = cmd->chain_frame_phys_addr; in mrsas_data_load_cb()
1108 sgl_ptr = (pMpi25IeeeSgeChain64_t)cmd->chain_frame; in mrsas_data_load_cb()
1112 cmd->sge_count = nseg; in mrsas_data_load_cb()
1123 mrsas_freeze_simq(struct mrsas_mpt_cmd *cmd, struct cam_sim *sim) in mrsas_freeze_simq() argument
1125 union ccb *ccb = (union ccb *)(cmd->ccb_ptr); in mrsas_freeze_simq()
1153 mrsas_cmd_done(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd) in mrsas_cmd_done() argument
1155 callout_stop(&cmd->cm_callout); in mrsas_cmd_done()
1156 mrsas_unmap_request(sc, cmd); in mrsas_cmd_done()
1158 xpt_done(cmd->ccb_ptr); in mrsas_cmd_done()
1159 cmd->ccb_ptr = NULL; in mrsas_cmd_done()
1161 mrsas_release_mpt_cmd(cmd); in mrsas_cmd_done()