USB CDRW ScanLogic: Quirk does not work?

Federico Galvez-Durand federicogalvezdurand at yahoo.com
Sun Feb 6 09:05:06 PST 2005


http://lists.freebsd.org/pipermail/freebsd-usb/2004-December/000318.html

Hello, I am replying to my own message, in case it is
interesting for someone else.
I managed to mount my CDRW (using ScanLogic SL11R)
by patching umass.c (patch enclosed at the end of this
email)
Unfortunately it is not recognised as a CD device but
as a DA device.
I can do "mount -t cd9660 /dev/da0 /mnt" and read a
video file
with fairly good quality.
Now I am trying to figure out why it is not recognised
as
a CD device.
Obviously, cdrecord does not find any CDRW device.
I did not achieve my primary goal yet: write a data
CD.

Fico

patch applied to umass.c ($FreeBSD:
src/sys/dev/usb/umass.c,v 1.117 2004/11/28 21:49:30
iedowse Exp
$)

--- umass.c.orig        Sun Feb  6 17:02:16 2005
+++ umass.c     Sun Feb  6 17:35:22 2005
@@ -313,4 +313,6 @@
        /* Device cannot handle INQUIRY EVPD, return
CHECK CONDITION */
 #      define NO_INQUIRY_EVPD          0x0800
+       /* Device has firmware problems*/
+#   define WRONG_CSWTag     0x1000
 };

@@ -420,5 +422,5 @@
        { USB_VENDOR_SCANLOGIC,
USB_PRODUCT_SCANLOGIC_SL11R, RID_WILDCARD,
          UMASS_PROTO_ATAPI | UMASS_PROTO_BBB,
-         NO_INQUIRY
+         NO_INQUIRY | WRONG_CSWTag
        },
        { USB_VENDOR_SHUTTLE,
USB_PRODUCT_SHUTTLE_EUSB, RID_WILDCARD,
@@ -1614,14 +1616,16 @@
                        umass_bbb_reset(sc,
STATUS_WIRE_FAILED);
                        return;
-               } else if (UGETDW(sc->csw.dCSWTag)
-                               !=
UGETDW(sc->cbw.dCBWTag)) {
-                       printf("%s: Invalid CSW: tag
%d should be %d\n",
-                              
USBDEVNAME(sc->sc_dev),
-                              
UGETDW(sc->csw.dCSWTag),
-                              
UGETDW(sc->cbw.dCBWTag));
-
-                       umass_bbb_reset(sc,
STATUS_WIRE_FAILED);
-                       return;
-
+               } else if (UGETDW(sc->csw.dCSWTag) !=
UGETDW(sc->cbw.dCBWTag)) {
+                if (sc->quirks & WRONG_CSWTag) {
+                   
USETDW(sc->csw.dCSWTag,UGETDW(sc->cbw.dCBWTag));
+                } else {
+                    printf("%s: Invalid CSW: tag %d
should be %d\n",
+                        USBDEVNAME(sc->sc_dev),
+                        UGETDW(sc->csw.dCSWTag),
+                        UGETDW(sc->cbw.dCBWTag));
+
+                    umass_bbb_reset(sc,
STATUS_WIRE_FAILED);
+                    return;
+                }
                /* CSW is valid here */
                } else if (sc->csw.bCSWStatus >
CSWSTATUS_PHASE) {





__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


More information about the freebsd-usb mailing list