Lines Matching refs:xs
437 #define XS2DMA(xs) \
438 ((((xs)->xs_control & XS_CTL_DATA_IN) ? BUS_DMA_READ : BUS_DMA_WRITE) | \
439 (((xs)->xs_control & XS_CTL_NOSLEEP) ? BUS_DMA_NOWAIT : BUS_DMA_WAITOK) | \
442 #define XS2DMAPRE(xs) (((xs)->xs_control & XS_CTL_DATA_IN) ? \
445 #define XS2DMAPOST(xs) (((xs)->xs_control & XS_CTL_DATA_IN) ? \
454 struct scsipi_xfer *xs;
485 xs = arg;
487 if (xs->cmdlen > MAX_SRB_DATA) {
489 xs->cmdlen);
490 memset(&xs->sense, 0, sizeof(xs->sense));
491 xs->sense.scsi_sense.response_code =
493 xs->sense.scsi_sense.flags = SSD_ILI;
494 xs->sense.scsi_sense.asc = 0x20;
495 hvs_scsi_done(xs, XS_SENSE);
502 hvs_scsi_done(xs, XS_RESOURCE_SHORTAGE);
506 periph = xs->xs_periph;
514 srb->srb_cdblen = xs->cmdlen;
515 memcpy(srb->srb_data, xs->cmd, xs->cmdlen);
522 switch (xs->xs_control & (XS_CTL_DATA_IN | XS_CTL_DATA_OUT)) {
540 srb->srb_datalen = xs->datalen;
547 if (xs->datalen > 0) {
548 error = bus_dmamap_load(sc->sc_dmat, ccb->ccb_dmap, xs->data,
549 xs->datalen, NULL, XS2DMA(xs));
552 "failed to load %d bytes (%d)\n", xs->datalen,
555 hvs_scsi_done(xs, (error == ENOMEM || error == EAGAIN) ?
559 bus_dmamap_sync(sc->sc_dmat, ccb->ccb_dmap, 0, xs->datalen,
560 XS2DMAPRE(xs));
562 ccb->ccb_sgl->gpa_len = xs->datalen;
563 ccb->ccb_sgl->gpa_ofs = (vaddr_t)xs->data & PAGE_MASK;
571 ccb->ccb_xfer = xs;
578 ccb->ccb_rid, xs->cmd->opcode, xs->xs_control, xs->datalen);
581 if (xs->xs_control & XS_CTL_POLL)
587 hvs_scsi_done(xs, (error == ENOMEM || error == EAGAIN) ?
737 fixup_inquiry(struct scsipi_xfer *xs, struct hvs_srb *srb)
739 struct scsipi_periph *periph = xs->xs_periph;
743 struct scsipi_inquiry_data *inq = (void *)xs->data;
773 struct scsipi_xfer *xs = ccb->ccb_xfer;
774 struct scsipi_periph *periph = xs->xs_periph;
784 bus_dmamap_sync(sc->sc_dmat, map, 0, map->dm_mapsize, XS2DMAPOST(xs));
787 xs = ccb->ccb_xfer;
790 xs->status = srb->srb_scsistatus & 0xff;
792 switch (xs->status) {
808 memcpy(&xs->sense, srb->srb_data,
809 MIN(sizeof(xs->sense), srb->srb_senselen));
820 if (xs->cmd->opcode == INQUIRY)
821 fixup_inquiry(xs, srb);
823 xs->resid = xs->datalen - srb->srb_datalen;
827 hvs_scsi_done(xs, error);
840 hvs_scsi_done(struct scsipi_xfer *xs, int error)
843 xs->error = error;
844 scsipi_done(xs);