Apply by doing: cd /usr/src patch -p0 < 004_scsi.patch Rebuild your kernel. Index: sys/dev/ic/siop.c =================================================================== RCS file: /cvs/src/sys/dev/ic/siop.c,v retrieving revision 1.31 retrieving revision 1.31.2.1 diff -u -p -r1.31 -r1.31.2.1 --- sys/dev/ic/siop.c 21 Oct 2003 18:58:49 -0000 1.31 +++ sys/dev/ic/siop.c 30 Apr 2004 22:07:37 -0000 1.31.2.1 @@ -769,6 +769,15 @@ scintr: /* no table to flush here */ CALL_SCRIPT(Ent_msgin_ack); return 1; + } else if (msg == MSG_EXTENDED && + extmsg == MSG_EXT_PPR) { + /* PPR negotiation rejected */ + siop_target->target_c.offset = 0; + siop_target->target_c.period = 0; + siop_target->target_c.status = TARST_ASYNC; + siop_target->target_c.flags &= ~(TARF_DT | TARF_ISDT); + CALL_SCRIPT(Ent_msgin_ack); + return 1; } else if (msg == MSG_SIMPLE_Q_TAG || msg == MSG_HEAD_OF_Q_TAG || msg == MSG_ORDERED_Q_TAG) { @@ -1417,7 +1426,6 @@ siop_scsicmd(xs) /* Set TARF_DT here because if it is turned off during PPR, it must STAY off! */ if ((lun == 0) && - (((struct scsi_inquiry_data *)xs->data)->flags2 & SID_CLOCKING) && (sc->sc_c.features & SF_BUS_ULTRA3)) sc->sc_c.targets[target]->flags |= TARF_DT; /* Can't do lun 0 here, because flags not set yet */ Index: sys/dev/ieee1394/fwscsi.c =================================================================== RCS file: /cvs/src/sys/dev/ieee1394/fwscsi.c,v retrieving revision 1.14 retrieving revision 1.14.2.1 diff -u -p -r1.14 -r1.14.2.1 --- sys/dev/ieee1394/fwscsi.c 14 Jan 2004 02:00:41 -0000 1.14 +++ sys/dev/ieee1394/fwscsi.c 30 Apr 2004 22:07:37 -0000 1.14.2.1 @@ -301,7 +301,6 @@ fwscsi_attach(struct device *parent, str sc->sc_adapter_link.adapter_softc = sc; sc->sc_adapter_link.flags = 0; sc->sc_adapter_link.inquiry_flags = 0; - sc->sc_adapter_link.inquiry_flags2 = 0; sc->sc_adapter_link.quirks |= SDEV_NOTAGS | SDEV_ONLYBIG; sc->sc_speed = fwsc->sc_sc1394.sc1394_link_speed; Index: sys/scsi/scsi_base.c =================================================================== RCS file: /cvs/src/sys/scsi/scsi_base.c,v retrieving revision 1.55 retrieving revision 1.55.2.1 diff -u -p -r1.55 -r1.55.2.1 --- sys/scsi/scsi_base.c 14 Mar 2004 22:46:47 -0000 1.55 +++ sys/scsi/scsi_base.c 30 Apr 2004 22:07:37 -0000 1.55.2.1 @@ -311,38 +311,13 @@ scsi_inquire(sc_link, inqbuf, flags) memset(&inqbuf->extra, ' ', sizeof inqbuf->extra); /* - * First try for the basic 36 bytes of SCSI2 inquiry information. This + * Ask for only the basic 36 bytes of SCSI2 inquiry information. This * avoids problems with devices that choke trying to supply more. */ scsi_cmd.length = SID_INQUIRY_HDR + SID_SCSI2_ALEN; error = scsi_scsi_cmd(sc_link, (struct scsi_generic *)&scsi_cmd, sizeof(scsi_cmd), (u_char *)inqbuf, scsi_cmd.length, 2, 10000, NULL, SCSI_DATA_IN | flags); - - /* - * If the device can supply more information, ask for as much - * as we can handle or as much as it has, whichever is less. - */ - if (!error && inqbuf->additional_length > SID_SCSI2_ALEN) { - switch (inqbuf->device & SID_QUAL) { - case SID_QUAL_RSVD: - case SID_QUAL_BAD_LU: - case SID_QUAL_LU_OFFLINE: - return (0); - case SID_QUAL_LU_OK: - if ((inqbuf->device & SID_TYPE) == T_NODEVICE) - return (0); - break; - default: - break; - } - - scsi_cmd.length = min(sizeof(struct scsi_inquiry_data), - SID_INQUIRY_HDR + inqbuf->additional_length); - error = scsi_scsi_cmd(sc_link, (struct scsi_generic *)&scsi_cmd, - sizeof(scsi_cmd), (u_char *)inqbuf, scsi_cmd.length, 2, - 10000, NULL, SCSI_DATA_IN | flags); - } return (error); } Index: sys/scsi/scsiconf.c =================================================================== RCS file: /cvs/src/sys/scsi/scsiconf.c,v retrieving revision 1.87 retrieving revision 1.87.2.1 diff -u -p -r1.87 -r1.87.2.1 --- sys/scsi/scsiconf.c 10 Mar 2004 01:37:40 -0000 1.87 +++ sys/scsi/scsiconf.c 30 Apr 2004 22:07:37 -0000 1.87.2.1 @@ -634,7 +634,6 @@ scsi_probedev(scsi, inqbuflun0, target, sc_link->lun = lun; sc_link->device = &probe_switch; sc_link->inquiry_flags = 0; - sc_link->inquiry_flags2 = 0; SC_DEBUG(sc_link, SDEV_DB2, ("scsi_link created.\n")); @@ -739,7 +738,6 @@ scsi_probedev(scsi, inqbuflun0, target, * Save INQUIRY "flags" (SID_Linked, etc.) for low-level drivers. */ sc_link->inquiry_flags = inqbuf.flags; - sc_link->inquiry_flags2 = inqbuf.flags2; /* * note what BASIC type of device it is Index: sys/scsi/scsiconf.h =================================================================== RCS file: /cvs/src/sys/scsi/scsiconf.h,v retrieving revision 1.42 retrieving revision 1.42.2.1 diff -u -p -r1.42 -r1.42.2.1 --- sys/scsi/scsiconf.h 10 Mar 2004 01:37:40 -0000 1.42 +++ sys/scsi/scsiconf.h 30 Apr 2004 22:07:37 -0000 1.42.2.1 @@ -199,7 +199,6 @@ struct scsi_link { #define ADEV_NODOORLOCK 0x2000 /* can't lock door */ #define SDEV_ONLYBIG 0x4000 /* always use READ_BIG and WRITE_BIG */ u_int8_t inquiry_flags; /* copy of flags from probe INQUIRY */ - u_int8_t inquiry_flags2; /* copy of flags2 from probe INQUIRY */ struct scsi_device *device; /* device entry points etc. */ void *device_softc; /* needed for call to foo_start */ struct scsi_adapter *adapter; /* adapter entry points etc. */