Lines Matching refs:ctio

75 					 struct ccb_scsiio *ctio, int dir);
131 tcmd_handle(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio, io_ops event) in tcmd_handle() argument
139 warnx("tcmd_handle atio %p ctio %p atioflags %#x", atio, ctio, in tcmd_handle()
159 last_cmd->done(atio, ctio, event); in tcmd_handle()
161 free_ccb((union ccb *)ctio); in tcmd_handle()
172 tcmd_illegal_req(atio, ctio); in tcmd_handle()
173 send_ccb((union ccb *)ctio, /*priority*/1); in tcmd_handle()
177 istate = tcmd_get_istate(ctio->init_id); in tcmd_handle()
179 tcmd_illegal_req(atio, ctio); in tcmd_handle()
180 send_ccb((union ccb *)ctio, /*priority*/1); in tcmd_handle()
186 tcmd_sense(ctio->init_id, ctio, SSD_KEY_UNIT_ATTENTION, in tcmd_handle()
193 send_ccb((union ccb *)ctio, /*priority*/1); in tcmd_handle()
214 ret = last_cmd->start(atio, ctio); in tcmd_handle()
217 a_descr->init_req += ctio->dxfer_len; in tcmd_handle()
218 send_ccb((union ccb *)ctio, /*priority*/1); in tcmd_handle()
237 tcmd_sense(u_int init_id, struct ccb_scsiio *ctio, u_int8_t flags, in tcmd_sense() argument
259 if (ctio != NULL) { in tcmd_sense()
260 bcopy(sense, &ctio->sense_data, sizeof(*sense)); in tcmd_sense()
261 ctio->sense_len = sizeof(*sense); /* XXX */ in tcmd_sense()
262 ctio->ccb_h.flags &= ~CAM_DIR_MASK; in tcmd_sense()
263 ctio->ccb_h.flags |= CAM_DIR_NONE | CAM_SEND_SENSE | in tcmd_sense()
265 ctio->dxfer_len = 0; in tcmd_sense()
266 ctio->scsi_status = SCSI_STATUS_CHECK_COND; in tcmd_sense()
292 tcmd_inquiry(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio) in tcmd_inquiry() argument
308 istate = tcmd_get_istate(ctio->init_id); in tcmd_inquiry()
311 tcmd_illegal_req(atio, ctio); in tcmd_inquiry()
318 tcmd_illegal_req(atio, ctio); in tcmd_inquiry()
324 bcopy(&inq_data, ctio->data_ptr, sizeof(inq_data)); in tcmd_inquiry()
325 ctio->dxfer_len = inq_data.additional_length + 4; in tcmd_inquiry()
326 ctio->dxfer_len = min(ctio->dxfer_len, in tcmd_inquiry()
328 ctio->ccb_h.flags |= CAM_DIR_IN | CAM_SEND_STATUS; in tcmd_inquiry()
329 ctio->scsi_status = SCSI_STATUS_OK; in tcmd_inquiry()
372 tcmd_req_sense(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio) in tcmd_req_sense() argument
383 istate = tcmd_get_istate(ctio->init_id); in tcmd_req_sense()
393 tcmd_sense(ctio->init_id, NULL, SSD_KEY_NO_SENSE, 0, 0); in tcmd_req_sense()
395 ctio->init_id); in tcmd_req_sense()
398 bcopy(sense, ctio->data_ptr, sizeof(struct scsi_sense_data)); in tcmd_req_sense()
401 ctio->dxfer_len = min(dlen, SCSI_CDB6_LEN(rsense->length)); in tcmd_req_sense()
402 ctio->ccb_h.flags |= CAM_DIR_IN | CAM_SEND_STATUS; in tcmd_req_sense()
403 ctio->scsi_status = SCSI_STATUS_OK; in tcmd_req_sense()
408 tcmd_rd_cap(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio) in tcmd_rd_cap() argument
415 srp = (struct scsi_read_capacity_data *)ctio->data_ptr; in tcmd_rd_cap()
431 ctio->dxfer_len = sizeof(*srp); in tcmd_rd_cap()
432 ctio->ccb_h.flags |= CAM_DIR_IN | CAM_SEND_STATUS; in tcmd_rd_cap()
433 ctio->scsi_status = SCSI_STATUS_OK; in tcmd_rd_cap()
439 tcmd_rd_cap16(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio) in tcmd_rd_cap16() argument
447 srp = (struct scsi_read_capacity_data_long *)ctio->data_ptr; in tcmd_rd_cap16()
450 tcmd_illegal_req(atio, ctio); in tcmd_rd_cap16()
463 ctio->dxfer_len = sizeof(*srp); in tcmd_rd_cap16()
464 ctio->ccb_h.flags |= CAM_DIR_IN | CAM_SEND_STATUS; in tcmd_rd_cap16()
465 ctio->scsi_status = SCSI_STATUS_OK; in tcmd_rd_cap16()
471 tcmd_rdwr(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio) in tcmd_rdwr() argument
478 c_descr = (struct ctio_descr *)ctio->ccb_h.targ_descr; in tcmd_rdwr()
484 ret = tcmd_rdwr_decode(atio, ctio); in tcmd_rdwr()
486 send_ccb((union ccb *)ctio, /*priority*/1); in tcmd_rdwr()
490 ctio->ccb_h.flags |= a_descr->flags; in tcmd_rdwr()
494 ret = start_io(atio, ctio, CAM_DIR_IN); in tcmd_rdwr()
499 ret = start_io(atio, ctio, CAM_DIR_OUT); in tcmd_rdwr()
509 tcmd_rdwr_decode(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio) in tcmd_rdwr_decode() argument
549 tcmd_illegal_req(atio, ctio); in tcmd_rdwr_decode()
554 tcmd_sense(ctio->init_id, ctio, in tcmd_rdwr_decode()
565 tcmd_null_ok(atio, ctio); in tcmd_rdwr_decode()
580 start_io(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio, int dir) in start_io() argument
588 c_descr = (struct ctio_descr *)ctio->ccb_h.targ_descr; in start_io()
592 ctio->dxfer_len = a_descr->total_len - a_descr->targ_req; in start_io()
595 ctio->dxfer_len = a_descr->total_len - a_descr->init_req; in start_io()
597 ctio->dxfer_len = min(ctio->dxfer_len, buf_size); in start_io()
598 assert(ctio->dxfer_len >= 0); in start_io()
601 c_descr->aiocb.aio_nbytes = ctio->dxfer_len; in start_io()
610 (ctio->dxfer_len / sector_size), in start_io()
619 ctio->dxfer_len) != ctio->dxfer_len) { in start_io()
626 (ctio->dxfer_len / sector_size), in start_io()
632 a_descr->targ_req += ctio->dxfer_len; in start_io()
635 ctio->ccb_h.flags |= CAM_SEND_STATUS; in start_io()
636 ctio->scsi_status = SCSI_STATUS_OK; in start_io()
640 tcmd_rdwr_done(atio, ctio, AIO_DONE); in start_io()
643 tcmd_null_ok(atio, ctio); in start_io()
644 a_descr->init_req += ctio->dxfer_len; in start_io()
646 ctio->dxfer_len > 0) { in start_io()
654 send_ccb((union ccb *)ctio, /*priority*/1); in start_io()
661 tcmd_rdwr_done(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio, in tcmd_rdwr_done() argument
668 c_descr = (struct ctio_descr *)ctio->ccb_h.targ_descr; in tcmd_rdwr_done()
675 tcmd_sense(ctio->init_id, ctio, in tcmd_rdwr_done()
677 send_ccb((union ccb *)ctio, /*priority*/1); in tcmd_rdwr_done()
680 a_descr->targ_ack += ctio->dxfer_len; in tcmd_rdwr_done()
688 a_descr->init_req += ctio->dxfer_len; in tcmd_rdwr_done()
689 send_ccb((union ccb *)ctio, /*priority*/1); in tcmd_rdwr_done()
696 free_ccb((union ccb *)ctio); in tcmd_rdwr_done()
700 switch (ctio->ccb_h.status & CAM_STATUS_MASK) { in tcmd_rdwr_done()
716 errx(1, "CTIO failed, status %#x", ctio->ccb_h.status); in tcmd_rdwr_done()
718 a_descr->init_ack += ctio->dxfer_len; in tcmd_rdwr_done()
720 ctio->dxfer_len > 0) { in tcmd_rdwr_done()
721 a_descr->targ_req += ctio->dxfer_len; in tcmd_rdwr_done()
726 (ctio->dxfer_len / sector_size), in tcmd_rdwr_done()
735 ctio->dxfer_len) != ctio->dxfer_len) { in tcmd_rdwr_done()
738 tcmd_rdwr_done(atio, ctio, AIO_DONE); in tcmd_rdwr_done()
743 (ctio->dxfer_len / sector_size), in tcmd_rdwr_done()
752 free_ccb((union ccb *)ctio); in tcmd_rdwr_done()
764 tcmd_null_ok(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio) in tcmd_null_ok() argument
773 ctio->dxfer_len = 0; in tcmd_null_ok()
774 ctio->ccb_h.flags &= ~CAM_DIR_MASK; in tcmd_null_ok()
775 ctio->ccb_h.flags |= CAM_DIR_NONE | CAM_SEND_STATUS; in tcmd_null_ok()
776 ctio->scsi_status = SCSI_STATUS_OK; in tcmd_null_ok()
782 tcmd_illegal_req(struct ccb_accept_tio *atio, struct ccb_scsiio *ctio) in tcmd_illegal_req() argument
791 tcmd_sense(atio->init_id, ctio, SSD_KEY_ILLEGAL_REQUEST, in tcmd_illegal_req()