diff options
| author | augustss <augustss@NetBSD.org> | 2001-12-29 13:46:23 +0000 |
|---|---|---|
| committer | augustss <augustss@NetBSD.org> | 2001-12-29 13:46:23 +0000 |
| commit | 276b0094259a293f87ecdf15f2f64655ea5e7e2a (patch) | |
| tree | 0119711bff7afab0bae88b3f99a4a3e129fa4150 /sys/dev | |
| parent | a926e1d1516cee949fa292f09b35ef5e06207691 (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.c | 6 | ||||
| -rw-r--r-- | sys/dev/usb/umass_quirks.c | 38 | ||||
| -rw-r--r-- | sys/dev/usb/umass_quirks.h | 3 | ||||
| -rw-r--r-- | sys/dev/usb/umass_scsipi.c | 10 | ||||
| -rw-r--r-- | sys/dev/usb/umassvar.h | 6 |
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 */ |
