Lines Matching refs:xs
245 di_sense(struct scsipi_xfer *xs, uint8_t skey, uint8_t asc, uint8_t ascq)
247 struct scsi_sense_data *sense = &xs->sense.scsi_sense;
249 xs->error = XS_SENSE;
257 di_request_error_sync(struct di_softc *sc, struct scsipi_xfer *xs)
275 di_sense(xs, (imm >> 16) & 0xff, (imm >> 8) & 0xff, imm & 0xff);
279 di_transfer_error(struct di_softc *sc, struct scsipi_xfer *xs)
281 if (xs == NULL) {
288 di_request_error_sync(sc, xs);
290 scsipi_done(xs);
296 di_transfer_complete(struct di_softc *sc, struct scsipi_xfer *xs)
306 if (xs == NULL) {
311 KASSERT(sc->sc_cur_xs == xs);
313 cmd = xs->cmd;
317 inqbuf = (struct scsipi_inquiry_data *)xs->data;
338 xs->resid = 0;
347 di_sense(xs, (imm >> 16) & 0xff, (imm >> 8) & 0xff,
351 di_sense(xs, SKEY_MEDIUM_ERROR, 0, 0);
359 bus_dmamap_sync(sc->sc_dmat, sc->sc_dma_map, 0, xs->datalen,
361 memcpy(xs->data, sc->sc_dma_addr, xs->datalen);
362 xs->resid = 0;
368 memcpy(xs->data + 4, sc->sc_dma_addr, xs->datalen - 4);
369 xs->resid = 0;
373 cdcap = (struct scsipi_read_cd_cap_data *)xs->data;
384 scsipi_done(xs);
425 struct scsipi_xfer *xs = sc->sc_cur_xs;
428 xs->cmd->opcode, RD4(sc, DISR));
429 xs->error = XS_TIMEOUT;
430 scsipi_done(xs);
451 di_start_request(struct di_softc *sc, struct scsipi_xfer *xs)
454 sc->sc_cur_xs = xs;
455 if (xs->timeout != 0) {
456 callout_schedule(&sc->sc_timeout, mstohz(xs->timeout) + 1);
502 di_stop_motor(struct di_softc *sc, struct scsipi_xfer *xs, bool eject)
517 di_start_request(sc, xs);
525 struct scsipi_xfer *xs;
540 xs = arg;
541 cmd = xs->cmd;
555 di_start_request(sc, xs);
567 di_start_request(sc, xs);
580 if (xs->datalen == 0) {
581 xs->error = XS_DRIVER_STUFFUP;
582 scsipi_done(xs);
587 0, xs->datalen, BUS_DMASYNC_PREREAD);
592 WR4(sc, DICMDBUF2, howmany(xs->datalen, DVDBLOCKSIZE));
593 WR4(sc, DILENGTH, roundup(xs->datalen, DVDBLOCKSIZE));
596 di_start_request(sc, xs);
601 if (xs->datalen == 0) {
603 xs->error = XS_DRIVER_STUFFUP;
604 scsipi_done(xs);
609 0, xs->datalen, BUS_DMASYNC_PREREAD);
615 WR4(sc, DILENGTH, roundup(xs->datalen, DVDBLOCKSIZE));
618 di_start_request(sc, xs);
623 if (xs->datalen == 0) {
625 xs->error = XS_DRIVER_STUFFUP;
626 scsipi_done(xs);
631 0, xs->datalen, BUS_DMASYNC_PREREAD);
637 WR4(sc, DILENGTH, roundup(xs->datalen, 0x20));
640 di_start_request(sc, xs);
655 di_start_request(sc, xs);
660 memset(xs->data, 0, sizeof(struct scsipi_get_conf_data));
661 xs->resid = 0;
662 scsipi_done(xs);
666 memset(xs->data, 0, sizeof(struct scsipi_toc_header));
667 xs->resid = 0;
668 scsipi_done(xs);
673 di_sense(xs, SKEY_ILLEGAL_REQUEST, 0, 0);
674 scsipi_done(xs);
681 scsipi_done(xs);
683 di_stop_motor(sc, xs, (ss->how & SSS_LOEJ) != 0);
690 scsipi_done(xs);
695 scsipi_done(xs);