summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authoraugustss <augustss@NetBSD.org>2001-12-29 13:46:23 +0000
committeraugustss <augustss@NetBSD.org>2001-12-29 13:46:23 +0000
commit276b0094259a293f87ecdf15f2f64655ea5e7e2a (patch)
tree0119711bff7afab0bae88b3f99a4a3e129fa4150 /sys/dev
parenta926e1d1516cee949fa292f09b35ef5e06207691 (diff)
Introduce a field, busquirks, in the umass quirk table that is passed
directly to the quirk field for the bus.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/usb/umass.c6
-rw-r--r--sys/dev/usb/umass_quirks.c38
-rw-r--r--sys/dev/usb/umass_quirks.h3
-rw-r--r--sys/dev/usb/umass_scsipi.c10
-rw-r--r--sys/dev/usb/umassvar.h6
5 files changed, 42 insertions, 21 deletions
diff --git a/sys/dev/usb/umass.c b/sys/dev/usb/umass.c
index e1f354bcc6a..a9aafd751c2 100644
--- a/sys/dev/usb/umass.c
+++ b/sys/dev/usb/umass.c
@@ -1,4 +1,4 @@
-/* $NetBSD: umass.c,v 1.81 2001/12/24 19:24:33 augustss Exp $ */
+/* $NetBSD: umass.c,v 1.82 2001/12/29 13:46:23 augustss Exp $ */
/*-
* Copyright (c) 1999 MAEKAWA Masahide <bishop@rr.iij4u.or.jp>,
* Nick Hibma <n_hibma@freebsd.org>
@@ -94,7 +94,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.81 2001/12/24 19:24:33 augustss Exp $");
+__KERNEL_RCSID(0, "$NetBSD: umass.c,v 1.82 2001/12/29 13:46:23 augustss Exp $");
#include "atapibus.h"
#include "scsibus.h"
@@ -282,6 +282,7 @@ USB_ATTACH(umass)
sc->sc_wire = quirk->uq_wire;
sc->sc_cmd = quirk->uq_cmd;
sc->sc_quirks = quirk->uq_flags;
+ sc->sc_busquirks = quirk->uq_busquirks;
if (quirk->uq_fixup != NULL)
(*quirk->uq_fixup)(sc);
@@ -289,6 +290,7 @@ USB_ATTACH(umass)
sc->sc_wire = UMASS_WPROTO_UNSPEC;
sc->sc_cmd = UMASS_CPROTO_UNSPEC;
sc->sc_quirks = 0;
+ sc->sc_busquirks = 0;
}
id = usbd_get_interface_descriptor(sc->sc_iface);
diff --git a/sys/dev/usb/umass_quirks.c b/sys/dev/usb/umass_quirks.c
index d13853dc07f..9ebdc58df87 100644
--- a/sys/dev/usb/umass_quirks.c
+++ b/sys/dev/usb/umass_quirks.c
@@ -1,4 +1,4 @@
-/* $NetBSD: umass_quirks.c,v 1.6 2001/12/24 21:36:54 augustss Exp $ */
+/* $NetBSD: umass_quirks.c,v 1.7 2001/12/29 13:46:23 augustss Exp $ */
/*
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -41,6 +41,9 @@
#include <sys/device.h>
#include <sys/buf.h>
+#include <dev/scsipi/scsipi_all.h> /* for scsiconf.h below */
+#include <dev/scsipi/scsiconf.h> /* for quirks defines */
+
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdevs.h>
@@ -57,29 +60,32 @@ Static void umass_fixup_yedata(struct umass_softc *);
Static const struct umass_quirk umass_quirks[] = {
{ { USB_VENDOR_FUJIPHOTO, USB_PRODUCT_FUJIPHOTO_MASS0100 },
UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
- UMASS_QUIRK_NO_TEST_UNIT_READY | UMASS_QUIRK_NO_START_STOP |
- UMASS_QUIRK_NO_REQUEST_SENSE,
+ UMASS_QUIRK_NO_START_STOP,
+ PQUIRK_NOTUR | PQUIRK_NOSENSE,
UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
NULL, NULL
},
{ { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_USBCABLE },
UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI,
- UMASS_QUIRK_NO_TEST_UNIT_READY | UMASS_QUIRK_NO_START_STOP,
+ UMASS_QUIRK_NO_START_STOP,
+ PQUIRK_NOTUR,
UMATCH_VENDOR_PRODUCT,
umass_init_insystem, NULL
},
{ { USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP100 },
UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
- UMASS_QUIRK_NO_TEST_UNIT_READY,
+ 0,
+ PQUIRK_NOTUR,
UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
NULL, NULL
},
{ { USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP250 },
UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
- UMASS_QUIRK_NO_TEST_UNIT_READY,
+ 0,
+ PQUIRK_NOTUR,
UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
NULL, NULL
},
@@ -87,6 +93,7 @@ Static const struct umass_quirk umass_quirks[] = {
{ { USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_DPCM },
UMASS_WPROTO_CBI, UMASS_CPROTO_ATAPI,
0,
+ 0,
UMATCH_VENDOR_PRODUCT,
NULL, NULL
},
@@ -94,6 +101,7 @@ Static const struct umass_quirk umass_quirks[] = {
{ { USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C1 },
UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
UMASS_QUIRK_WRONG_CSWSIG,
+ 0,
UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
NULL, NULL
},
@@ -101,20 +109,23 @@ Static const struct umass_quirk umass_quirks[] = {
{ { USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_SL11R },
UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UFI,
0,
+ 0,
UMATCH_VENDOR_PRODUCT,
NULL, NULL
},
{ { USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSB },
UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI,
- UMASS_QUIRK_NO_TEST_UNIT_READY | UMASS_QUIRK_NO_START_STOP,
+ UMASS_QUIRK_NO_START_STOP,
+ PQUIRK_NOTUR,
UMATCH_VENDOR_PRODUCT,
umass_init_shuttle, NULL
},
{ { USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_ZIOMMC },
UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI,
- UMASS_QUIRK_NO_TEST_UNIT_READY | UMASS_QUIRK_NO_START_STOP,
+ UMASS_QUIRK_NO_START_STOP,
+ PQUIRK_NOTUR,
UMATCH_VENDOR_PRODUCT,
NULL, NULL
},
@@ -122,6 +133,7 @@ Static const struct umass_quirk umass_quirks[] = {
{ { USB_VENDOR_SONY, USB_PRODUCT_SONY_MSC },
UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UNSPEC,
UMASS_QUIRK_FORCE_SHORT_INQUIRY,
+ 0,
UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
NULL, umass_fixup_sony
},
@@ -129,6 +141,7 @@ Static const struct umass_quirk umass_quirks[] = {
{ { USB_VENDOR_SONY, USB_PRODUCT_ANY },
UMASS_WPROTO_UNSPEC, UMASS_CPROTO_RBC,
0,
+ 0,
UMATCH_DEVCLASS_DEVSUBCLASS_DEVPROTO,
NULL, umass_fixup_sony
},
@@ -136,6 +149,7 @@ Static const struct umass_quirk umass_quirks[] = {
{ { USB_VENDOR_YANO, USB_PRODUCT_YANO_U640MO },
UMASS_WPROTO_CBI_I, UMASS_CPROTO_ATAPI,
UMASS_QUIRK_FORCE_SHORT_INQUIRY,
+ 0,
UMATCH_VENDOR_PRODUCT,
NULL, NULL
},
@@ -143,6 +157,7 @@ Static const struct umass_quirk umass_quirks[] = {
{ { USB_VENDOR_YEDATA, USB_PRODUCT_YEDATA_FLASHBUSTERU },
UMASS_WPROTO_UNSPEC, UMASS_CPROTO_UFI,
UMASS_QUIRK_RS_NO_CLEAR_UA,
+ 0,
UMATCH_VENDOR_PRODUCT_REV,
NULL, umass_fixup_yedata
},
@@ -151,30 +166,35 @@ Static const struct umass_quirk umass_quirks[] = {
{ { USB_VENDOR_ATI, USB_PRODUCT_ATI2_205 },
UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
0,
+ 0,
UMATCH_VENDOR_PRODUCT,
NULL, NULL
},
{ { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ATAPI },
UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
0,
+ 0,
UMATCH_VENDOR_PRODUCT,
NULL, NULL
},
{ { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_DRIVEV2_5 },
UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
0,
+ 0,
UMATCH_VENDOR_PRODUCT,
NULL, NULL
},
{ { USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ADAPTERV2 },
UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
0,
+ 0,
UMATCH_VENDOR_PRODUCT,
NULL, NULL
},
{ { USB_VENDOR_SONY, USB_PRODUCT_SONY_DRIVEV2 },
UMASS_WPROTO_BBB, UMASS_CPROTO_ISD_ATA,
0,
+ 0,
UMATCH_VENDOR_PRODUCT,
NULL, NULL
},
@@ -250,5 +270,5 @@ umass_fixup_yedata(struct umass_softc *sc)
* Revisions == 1.28 have a broken TEST UNIT READY
*/
if (UGETW(dd->bcdDevice) <= 0x128)
- sc->sc_quirks |= UMASS_QUIRK_NO_TEST_UNIT_READY;
+ sc->sc_busquirks |= PQUIRK_NOTUR;
}
diff --git a/sys/dev/usb/umass_quirks.h b/sys/dev/usb/umass_quirks.h
index 8956c06ac58..ce5474eae1d 100644
--- a/sys/dev/usb/umass_quirks.h
+++ b/sys/dev/usb/umass_quirks.h
@@ -1,4 +1,4 @@
-/* $NetBSD: umass_quirks.h,v 1.2 2001/12/24 21:36:54 augustss Exp $ */
+/* $NetBSD: umass_quirks.h,v 1.3 2001/12/29 13:46:23 augustss Exp $ */
/*
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -49,6 +49,7 @@ struct umass_quirk {
u_int8_t uq_wire;
u_int8_t uq_cmd;
u_int32_t uq_flags;
+ u_int32_t uq_busquirks;
int uq_match;
umass_init_quirk uq_init;
diff --git a/sys/dev/usb/umass_scsipi.c b/sys/dev/usb/umass_scsipi.c
index 53c9b1bd7fa..c966f06761d 100644
--- a/sys/dev/usb/umass_scsipi.c
+++ b/sys/dev/usb/umass_scsipi.c
@@ -1,4 +1,4 @@
-/* $NetBSD: umass_scsipi.c,v 1.1 2001/12/24 13:25:52 augustss Exp $ */
+/* $NetBSD: umass_scsipi.c,v 1.2 2001/12/29 13:46:23 augustss Exp $ */
/*
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: umass_scsipi.c,v 1.1 2001/12/24 13:25:52 augustss Exp $");
+__KERNEL_RCSID(0, "$NetBSD: umass_scsipi.c,v 1.2 2001/12/29 13:46:23 augustss Exp $");
#include "atapibus.h"
#include "scsibus.h"
@@ -160,10 +160,7 @@ umass_atapi_attach(struct umass_softc *sc)
scbus->sc_channel.chan_ntargets = 2;
scbus->sc_channel.chan_nluns = 1;
- if (sc->sc_quirks & UMASS_QUIRK_NO_TEST_UNIT_READY)
- scbus->sc_channel.chan_defquirks |= PQUIRK_NOTUR;
- if (sc->sc_quirks & UMASS_QUIRK_NO_REQUEST_SENSE)
- scbus->sc_channel.chan_defquirks |= PQUIRK_NOSENSE;
+ scbus->sc_channel.chan_defquirks |= sc->sc_busquirks;
DPRINTF(UDMASS_USB, ("%s: umass_attach_bus: ATAPI\n",
USBDEVNAME(sc->sc_dev)));
scbus->base.sc_child =
@@ -197,6 +194,7 @@ umass_scsipi_setup(struct umass_softc *sc)
scbus->sc_channel.chan_flags = SCSIPI_CHAN_OPENINGS;
scbus->sc_channel.chan_openings = 1;
scbus->sc_channel.chan_max_periph = 1;
+ scbus->sc_channel.chan_defquirks |= sc->sc_busquirks;
return (scbus);
}
diff --git a/sys/dev/usb/umassvar.h b/sys/dev/usb/umassvar.h
index 3cfb168a750..9126e587be7 100644
--- a/sys/dev/usb/umassvar.h
+++ b/sys/dev/usb/umassvar.h
@@ -1,4 +1,4 @@
-/* $NetBSD: umassvar.h,v 1.13 2001/12/24 19:24:33 augustss Exp $ */
+/* $NetBSD: umassvar.h,v 1.14 2001/12/29 13:46:23 augustss Exp $ */
/*-
* Copyright (c) 1999 MAEKAWA Masahide <bishop@rr.iij4u.or.jp>,
* Nick Hibma <n_hibma@freebsd.org>
@@ -178,12 +178,12 @@ struct umass_softc {
#define UMASS_CPROTO_ISD_ATA 5
u_int32_t sc_quirks;
-#define UMASS_QUIRK_NO_TEST_UNIT_READY 0x00000001
#define UMASS_QUIRK_RS_NO_CLEAR_UA 0x00000002
#define UMASS_QUIRK_NO_START_STOP 0x00000004
#define UMASS_QUIRK_FORCE_SHORT_INQUIRY 0x00000008
#define UMASS_QUIRK_WRONG_CSWSIG 0x00000010
-#define UMASS_QUIRK_NO_REQUEST_SENSE 0x00000020
+
+ u_int32_t sc_busquirks;
/* Bulk specific variables for transfers in progress */
umass_bbb_cbw_t cbw; /* command block wrapper */