Subject: Re: old SCSI devices that don't support INQUIRY
To: Michael L. Hitch <mhitch@lightning.msu.montana.edu>
From: Matthew Jacob <mjacob@feral.com>
List: tech-kern
Date: 09/13/2001 22:02:11
That handles the INQUIRY command, but doesn't handle other commands.
On Thu, 13 Sep 2001, Michael L. Hitch wrote:
> On Thu, 13 Sep 2001, Matthew Fredette wrote:
>
> >
> > Hi. Sun-2s often have MFM hard drives sitting behind Adaptec ACB-4000
> > SCSI->MFM converter boards. These boards are really old and don't
> > understand the INQUIRY command. What's the best way to go about
> > adding support for them? Thanks -
>
> I've used the following patch for quite a while on my Amiga.
>
> --- sys/dev/scsipi/scsipi_base.c.orig Fri Jun 9 02:54:24 2000
> +++ sys/dev/scsipi/scsipi_base.c Mon Jan 15 00:05:23 2001
> @@ -409,6 +409,13 @@ scsipi_interpret_sense(xs)
> * Not code 70, just report it
> */
> default:
> + if ((sense->error_code & SSD_ERRCODE) == 0x20) {
> + if ((xs->xs_control & XS_CTL_IGNORE_ILLEGAL_REQUEST) != 0)
> + return 0;
> + return (EINVAL); /* Adaptec A4000 invalid request */
> + }
> + if ((sense->error_code & SSD_ERRCODE) == 0x25)
> + return (EACCES); /* Adaptec A4000 invalid LUN */
> #if defined(SCSIDEBUG) || defined(DEBUG)
> {
> static char *uc = "undecodable sense error";
> @@ -511,15 +518,27 @@ scsipi_inquire(sc_link, inqbuf, flags)
> int flags;
> {
> struct scsipi_inquiry scsipi_cmd;
> + int error;
>
> bzero(&scsipi_cmd, sizeof(scsipi_cmd));
> scsipi_cmd.opcode = INQUIRY;
> scsipi_cmd.length = sizeof(struct scsipi_inquiry_data);
>
> - return (scsipi_command(sc_link,
> + error = scsipi_command(sc_link,
> (struct scsipi_generic *) &scsipi_cmd, sizeof(scsipi_cmd),
> (u_char *) inqbuf, sizeof(struct scsipi_inquiry_data),
> - SCSIPIRETRIES, 10000, NULL, XS_CTL_DATA_IN | flags));
> + SCSIPIRETRIES, 10000, NULL, XS_CTL_DATA_IN | flags);
> + /*
> + * Kludge for Adaptec A4000, which doesn't support the inquire
> + * command.
> + */
> + if (error == EINVAL || error == EACCES) {
> + bzero (inqbuf, 4);
> + if (error == EACCES)
> + inqbuf->device = SID_QUAL_BAD_LU | SID_TYPE;
> + error = 0;
> + }
> + return error;
> }
>
> /*
>
>
> --
> Michael L. Hitch mhitch@montana.edu
> Computer Consultant
> Information Technology Center
> Montana State University Bozeman, MT USA
>
>