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. */