diff options
Diffstat (limited to 'sys/scsi')
-rw-r--r-- | sys/scsi/atapi_base.c | 196 | ||||
-rw-r--r-- | sys/scsi/cd_atapi.c | 5 | ||||
-rw-r--r-- | sys/scsi/cd_scsi.c | 6 | ||||
-rw-r--r-- | sys/scsi/scsiconf.c | 11 |
4 files changed, 4 insertions, 214 deletions
diff --git a/sys/scsi/atapi_base.c b/sys/scsi/atapi_base.c index 351e98c7059..9adc4f0e46a 100644 --- a/sys/scsi/atapi_base.c +++ b/sys/scsi/atapi_base.c @@ -1,4 +1,4 @@ -/* $OpenBSD: atapi_base.c,v 1.1 1999/07/20 06:21:59 csapuntz Exp $ */ +/* $OpenBSD: atapi_base.c,v 1.2 2004/05/09 14:08:11 krw Exp $ */ /* $NetBSD: atapi_base.c,v 1.12 1999/06/25 18:58:54 thorpej Exp $ */ /*- @@ -52,200 +52,6 @@ #include <scsi/atapi_all.h> #include <scsi/scsiconf.h> -#ifndef __OpenBSD__ -/* - * Look at the returned sense and act on the error, determining - * the unix error number to pass back. (0 = report no error) - * - * THIS IS THE DEFAULT ERROR HANDLER - */ -int -atapi_interpret_sense(xs) - struct scsipi_xfer *xs; -{ - int key, error; - struct scsipi_link *sc_link = xs->sc_link; - char *msg = NULL; - - /* - * If the device has it's own error handler, call it first. - * If it returns a legit error value, return that, otherwise - * it wants us to continue with normal error processing. - */ - if (sc_link->device->err_handler) { - SC_DEBUG(sc_link, SDEV_DB2, - ("calling private err_handler()\n")); - error = (*sc_link->device->err_handler) (xs); - if (error != SCSIRET_CONTINUE) - return (error); /* error >= 0 better ? */ - } - /* - * otherwise use the default, call the generic sense handler if we have - * more than the sense key - */ - if (xs->error == XS_SENSE) - return (scsipi_interpret_sense(xs)); - - key = (xs->sense.atapi_sense & 0xf0) >> 4; - switch (key) { - case SKEY_RECOVERED_ERROR: - msg = "soft error (corrected)"; - case SKEY_NO_SENSE: - if (xs->resid == xs->datalen) - xs->resid = 0; /* not short read */ - error = 0; - break; - case SKEY_NOT_READY: - if ((sc_link->flags & SDEV_REMOVABLE) != 0) - sc_link->flags &= ~SDEV_MEDIA_LOADED; - if ((xs->flags & SCSI_IGNORE_NOT_READY) != 0) - return (0); - if ((xs->flags & SCSI_SILENT) != 0) - return (EIO); - msg = "not ready"; - error = EIO; - break; - case SKEY_MEDIUM_ERROR: /* MEDIUM ERROR */ - msg = "medium error"; - error = EIO; - break; - case SKEY_HARDWARE_ERROR: - msg = "non-media hardware failure"; - error = EIO; - break; - case SKEY_ILLEGAL_REQUEST: - if ((xs->flags & SCSI_IGNORE_ILLEGAL_REQUEST) != 0) - return (0); - if ((xs->flags & SCSI_SILENT) != 0) - return (EIO); - msg = "illegal request"; - error = EINVAL; - break; - case SKEY_UNIT_ATTENTION: - if ((sc_link->flags & SDEV_REMOVABLE) != 0) - sc_link->flags &= ~SDEV_MEDIA_LOADED; - if ((xs->flags & SCSI_IGNORE_MEDIA_CHANGE) != 0 || - /* XXX Should reupload any transient state. */ - (sc_link->flags & SDEV_REMOVABLE) == 0) - return (ERESTART); - if ((xs->flags & SCSI_SILENT) != 0) - return (EIO); - msg = "unit attention"; - error = EIO; - break; - case SKEY_WRITE_PROTECT: - msg = "readonly device"; - error = EROFS; - break; - case SKEY_ABORTED_COMMAND: - msg = "command aborted"; - error = ERESTART; - break; - default: - error = EIO; - break; - } - - if (!key) { - if (xs->sense.atapi_sense & 0x01) { - /* Illegal length indication */ - msg = "ATA illegal length indication"; - error = EIO; - } - if (xs->sense.atapi_sense & 0x02) { /* vol overflow */ - msg = "ATA volume overflow"; - error = ENOSPC; - } - if (xs->sense.atapi_sense & 0x04) { /* Aborted command */ - msg = "ATA command aborted"; - error = ERESTART; - } - } - if (msg) { - sc_link->sc_print_addr(sc_link); - printf("%s\n", msg); - } else { - if (error) { - sc_link->sc_print_addr(sc_link); - printf("unknown error code %d\n", - xs->sense.atapi_sense); - } - } - - return (error); - -} - -/* - * Utility routines often used in SCSI stuff - */ - - -/* - * Print out the scsi_link structure's address info. - */ -void -atapi_print_addr(sc_link) - struct scsipi_link *sc_link; -{ - - printf("%s(%s:%d:%d): ", - sc_link->device_softc ? - ((struct device *)sc_link->device_softc)->dv_xname : "probe", - ((struct device *)sc_link->adapter_softc)->dv_xname, - sc_link->scsipi_atapi.channel, sc_link->scsipi_atapi.drive); -} - -/* - * ask the atapi driver to perform a command for us. - * tell it where to read/write the data, and how - * long the data is supposed to be. If we have a buf - * to associate with the transfer, we need that too. - */ -int -atapi_scsipi_cmd(sc_link, scsipi_cmd, cmdlen, data_addr, datalen, - retries, timeout, bp, flags) - struct scsipi_link *sc_link; - struct scsipi_generic *scsipi_cmd; - int cmdlen; - u_char *data_addr; - int datalen; - int retries; - int timeout; - struct buf *bp; - int flags; -{ - struct scsipi_xfer *xs; - int error, s; - - SC_DEBUG(sc_link, SDEV_DB2, ("atapi_cmd\n")); - -#ifdef DIAGNOSTIC - if (bp != 0 && (flags & SCSI_NOSLEEP) == 0) - panic("atapi_scsipi_cmd: buffer without nosleep"); -#endif - - if ((xs = scsipi_make_xs(sc_link, scsipi_cmd, cmdlen, data_addr, - datalen, retries, timeout, bp, flags)) == NULL) - return (ENOMEM); - - xs->cmdlen = (sc_link->scsipi_atapi.cap & ACAP_LEN) ? 16 : 12; - - if ((error = scsipi_execute_xs(xs)) == EJUSTRETURN) - return (0); - - /* - * we have finished with the xfer stuct, free it and - * check if anyone else needs to be started up. - */ - s = splbio(); - scsipi_free_xs(xs, flags); - splx(s); - return (error); -} - -#endif - int atapi_mode_select(l, data, len, flags, retries, timeout) struct scsi_link *l; diff --git a/sys/scsi/cd_atapi.c b/sys/scsi/cd_atapi.c index 94bb0fa7d3f..f1158b367c1 100644 --- a/sys/scsi/cd_atapi.c +++ b/sys/scsi/cd_atapi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cd_atapi.c,v 1.2 2002/03/14 01:27:13 millert Exp $ */ +/* $OpenBSD: cd_atapi.c,v 1.3 2004/05/09 14:08:11 krw Exp $ */ /* $NetBSD: cd_atapi.c,v 1.10 1998/08/31 22:28:06 cgd Exp $ */ /* @@ -46,9 +46,6 @@ * * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992 */ -#ifndef __OpenBSD__ -#include "rnd.h" -#endif #include <sys/types.h> #include <sys/param.h> diff --git a/sys/scsi/cd_scsi.c b/sys/scsi/cd_scsi.c index 1e3e476c3a5..a423823d0b6 100644 --- a/sys/scsi/cd_scsi.c +++ b/sys/scsi/cd_scsi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cd_scsi.c,v 1.4 2002/03/14 01:27:13 millert Exp $ */ +/* $OpenBSD: cd_scsi.c,v 1.5 2004/05/09 14:08:11 krw Exp $ */ /* $NetBSD: cd_scsi.c,v 1.14 1998/08/31 22:28:06 cgd Exp $ */ /*- @@ -54,10 +54,6 @@ * Ported to run under 386BSD by Julian Elischer (julian@tfs.com) Sept 1992 */ -#ifndef __OpenBSD__ -#include "rnd.h" -#endif - #include <sys/types.h> #include <sys/param.h> #include <sys/systm.h> diff --git a/sys/scsi/scsiconf.c b/sys/scsi/scsiconf.c index b28db536476..2c8cb75494c 100644 --- a/sys/scsi/scsiconf.c +++ b/sys/scsi/scsiconf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: scsiconf.c,v 1.90 2004/05/07 22:56:19 krw Exp $ */ +/* $OpenBSD: scsiconf.c,v 1.91 2004/05/09 14:08:11 krw Exp $ */ /* $NetBSD: scsiconf.c,v 1.57 1996/05/02 01:09:01 neil Exp $ */ /* @@ -121,19 +121,10 @@ scsiprint(aux, pnp) void *aux; const char *pnp; { -#ifndef __OpenBSD__ - struct scsi_link *l = aux; -#endif - /* only "scsibus"es can attach to "scsi"s; easy. */ if (pnp) printf("scsibus at %s", pnp); -#ifndef __OpenBSD__ - /* don't print channel if the controller says there can be only one. */ - if (l->channel != SCSI_CHANNEL_ONLY_ONE) - printf(" channel %d", l->channel); -#endif return (UNCONF); } |