summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorNick Hibma <n_hibma@FreeBSD.org>2000-07-02 12:31:42 +0000
committerNick Hibma <n_hibma@FreeBSD.org>2000-07-02 12:31:42 +0000
commit25e915c536fb34add946d508f19c7124dc7e891b (patch)
treeac58de1af2a41897fa19baafea963280077b68e4 /sys/dev
parentd6344759914aa22dc1fd8f4c79807805d1b3be52 (diff)
Notes
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/usb/umass.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/sys/dev/usb/umass.c b/sys/dev/usb/umass.c
index ab4a207bfa80..79dbbdf2fc7f 100644
--- a/sys/dev/usb/umass.c
+++ b/sys/dev/usb/umass.c
@@ -272,7 +272,8 @@ struct umass_softc {
unsigned char drive;
# define DRIVE_GENERIC 0 /* use defaults for this one */
# define ZIP_100 1 /* to be used for quirks */
-# define SHUTTLE_EUSB 2
+# define ZIP_250 2 /* to be used for quirks */
+# define SHUTTLE_EUSB 3
unsigned char quirks;
/* The drive does not support Test Unit Ready. Convert to
@@ -575,20 +576,29 @@ umass_match_proto(struct umass_softc *sc, usbd_interface_handle iface,
return(UMATCH_VENDOR_PRODUCT);
}
+ if (UGETW(dd->idVendor) == USB_VENDOR_INSYSTEM
+ && UGETW(dd->idProduct) == USB_PRODUCT_INSYSTEM_USBCABLE) {
+ sc->proto = PROTO_ATAPI | PROTO_CBI;
+ sc->quirks |= NO_TEST_UNIT_READY | NO_START_STOP;
+ return(UMATCH_VENDOR_PRODUCT);
+ }
+
if (UGETW(dd->idVendor) == USB_VENDOR_YEDATA
&& UGETW(dd->idProduct) == USB_PRODUCT_YEDATA_FLASHBUSTERU) {
/* Revisions < 1.28 do not handle the inerrupt endpoint
* very well.
*/
- if (UGETW(dd->bcdDevice) < 0x128)
+ if (UGETW(dd->bcdDevice) < 0x128) {
sc->proto = PROTO_UFI | PROTO_CBI;
- else
+ } else {
#if CBI_I
sc->proto = PROTO_UFI | PROTO_CBI_I;
#else
sc->proto = PROTO_UFI | PROTO_CBI;
#endif
+ }
+
/*
* Revisions < 1.28 do not have the TEST UNIT READY command
* Revisions == 1.28 have a broken TEST UNIT READY
@@ -598,11 +608,9 @@ umass_match_proto(struct umass_softc *sc, usbd_interface_handle iface,
sc->quirks |= RS_NO_CLEAR_UA;
sc->transfer_speed = UMASS_FLOPPY_TRANSFER_SPEED;
- return(UMATCH_VENDOR_PRODUCT_REV);
+ return(UMATCH_VENDOR_PRODUCT);
}
-
-
id = usbd_get_interface_descriptor(iface);
if (id == NULL || id->bInterfaceClass != UCLASS_MASS)
return(UMATCH_NONE);
@@ -2108,7 +2116,7 @@ umass_cam_action(struct cam_sim *sim, union ccb *ccb)
/* the opcodes requiring a target. These should never occur. */
if (sc == NULL) {
printf("%s:%d:%d:%d:func_code 0x%04x: "
- "Invalid target\n",
+ "Invalid target (target needed)\n",
DEVNAME_SIM, cam_sim_path(umass_sim),
ccb->ccb_h.target_id, ccb->ccb_h.target_lun,
ccb->ccb_h.func_code);
@@ -2126,7 +2134,7 @@ umass_cam_action(struct cam_sim *sim, union ccb *ccb)
*/
if (sc == NULL && ccb->ccb_h.target_id != CAM_TARGET_WILDCARD) {
DPRINTF(UDMASS_SCSI, ("%s:%d:%d:%d:func_code 0x%04x: "
- "Invalid target\n",
+ "Invalid target (no wildcard)\n",
DEVNAME_SIM, cam_sim_path(umass_sim),
ccb->ccb_h.target_id, ccb->ccb_h.target_lun,
ccb->ccb_h.func_code));