Lines Matching refs:xs
252 #define XS2DMA(xs) \
253 ((((xs)->xs_control & XS_CTL_DATA_IN) ? BUS_DMA_READ : BUS_DMA_WRITE) | \
254 (((xs)->xs_control & XS_CTL_NOSLEEP) ? BUS_DMA_NOWAIT : BUS_DMA_WAITOK) | \
257 #define XS2DMAPRE(xs) (((xs)->xs_control & XS_CTL_DATA_IN) ? \
260 #define XS2DMAPOST(xs) (((xs)->xs_control & XS_CTL_DATA_IN) ? \
270 struct scsipi_xfer *xs;
297 xs = arg;
298 periph = xs->xs_periph;
305 xs->error = XS_BUSY;
306 scsipi_done(xs);
329 xs, periph->periph_target, periph->periph_lun, slot));
332 switch (XS_CTL_TAGTYPE(xs)) {
354 if ((size_t)xs->cmdlen > sizeof(req->cdb)) {
356 (size_t)xs->cmdlen, sizeof(req->cdb)));
361 memcpy(req->cdb, xs->cmd, xs->cmdlen);
364 xs->data, xs->datalen, NULL, XS2DMA(xs));
374 xs->error = XS_RESOURCE_SHORTAGE;
378 xs->error = XS_DRIVER_STUFFUP;
382 scsipi_done(xs);
387 if ((xs->xs_control & (XS_CTL_DATA_IN|XS_CTL_DATA_OUT)) != 0)
394 xs->error = XS_BUSY;
395 scsipi_done(xs);
399 vr->vr_xs = xs;
409 if ((xs->xs_control & (XS_CTL_DATA_IN|XS_CTL_DATA_OUT)) != 0)
410 bus_dmamap_sync(virtio_dmat(vsc), vr->vr_data, 0, xs->datalen,
411 XS2DMAPRE(xs));
416 if (xs->xs_control & XS_CTL_DATA_OUT)
421 if (xs->xs_control & XS_CTL_DATA_IN)
423 dopoll = (xs->xs_control & XS_CTL_POLL) != 0;
434 if (vr->vr_xs != xs)
439 if (vr->vr_xs == xs) {
441 xs->error = XS_TIMEOUT;
442 xs->resid = xs->datalen;
444 scsipi_done(xs);
447 xs, timeout));
454 struct scsipi_xfer *xs = vr->vr_xs;
467 if (xs->datalen)
468 bus_dmamap_sync(virtio_dmat(vsc), vr->vr_data, 0, xs->datalen,
469 XS2DMAPOST(xs));
471 xs->status = vr->vr_res.status;
472 xs->resid = virtio_rw32(vsc, vr->vr_res.residual);
476 sense_len = MIN(sizeof(xs->sense),
478 memcpy(&xs->sense, vr->vr_res.sense, sense_len);
479 xs->error = (sense_len == 0) ? XS_NOERROR : XS_SENSE;
482 vioscsi_bad_target(xs);
486 xs->error = XS_DRIVER_STUFFUP;
487 xs->resid = xs->datalen;
492 xs, xs->error, xs->status, xs->resid));
500 scsipi_done(xs);
505 vioscsi_bad_target(struct scsipi_xfer *xs)
507 struct scsi_sense_data *sense = &xs->sense.scsi_sense;
510 xs->xs_periph->periph_target, xs->xs_periph->periph_lun));
515 xs->error = XS_SENSE;
516 xs->status = 0;
517 xs->resid = 0;