This adds the US_FL_GO_SLOW flag. This flag is for devices that need a
110 usec delay during high-speed transfers. This seems to be limited to
USB-to-IDE chips. Unusual_dev entries for affected devices are included.

This has been thrown around in the usb-storage list for a while now, and
I believe everyone is happy with it.

Greg, please apply.

Signed-off-by: Phil Dibowitz <[EMAIL PROTECTED]>

--
Phil Dibowitz                             [EMAIL PROTECTED]
Freeware and Technical Pages              Insanity Palace of Metallica
http://www.phildev.net/                   http://www.ipom.com/

"They that can give up essential liberty to obtain a little temporary
safety deserve neither liberty nor safety."
 - Benjamin Franklin, 1759

[DESC]
Added US_FL_GO_SLOW flag
[EDESC]

This adds the US_FL_GO_SLOW flag. This flag is for devices that need a 100 usec 
delay during high-speed transfers. This seems to be limited to USB-to-IDE 
chips. Unusual_dev entries for affected devices are included.

Greg, please apply.

Signed-off-by: Phil Dibowitz <[EMAIL PROTECTED]>

---


diff -puN drivers/usb/storage/transport.c~add_slow_flag 
drivers/usb/storage/transport.c
--- linux-2.6.11-rc4/drivers/usb/storage/transport.c~add_slow_flag      
2005-02-13 16:57:48.000000000 -0800
+++ linux-2.6.11-rc4-phil/drivers/usb/storage/transport.c       2005-02-17 
11:36:34.000000000 -0800
@@ -991,10 +991,10 @@ int usb_stor_Bulk_transport(struct scsi_
        /* DATA STAGE */
        /* send/receive data payload, if there is any */

-       /* Genesys Logic interface chips need a 100us delay between the
+       /* Some USB-IDE converter chips need a 100us delay between the
         * command phase and the data phase.  Some devices need a little
         * more than that, probably because of clock rate inaccuracies. */
-       if (le16_to_cpu(us->pusb_dev->descriptor.idVendor) == 
USB_VENDOR_ID_GENESYS)
+       if (unlikely(us->flags & US_FL_GO_SLOW))
                udelay(110);

        if (transfer_length) {
diff -puN drivers/usb/storage/usb.h~add_slow_flag drivers/usb/storage/usb.h
--- linux-2.6.11-rc4/drivers/usb/storage/usb.h~add_slow_flag    2005-02-13 
16:57:48.000000000 -0800
+++ linux-2.6.11-rc4-phil/drivers/usb/storage/usb.h     2005-02-13 
17:00:06.000000000 -0800
@@ -75,6 +75,7 @@ struct us_unusual_dev {
 #define US_FL_FIX_CAPACITY    0x00000080 /* READ CAPACITY response too big  */
 #define US_FL_IGNORE_RESIDUE  0x00000100 /* reported residue is wrong      */
 #define US_FL_BULK32          0x00000200 /* Uses 32-byte CBW length         */
+#define US_FL_GO_SLOW         0x00000400 /* Can't really handle high speed  */

 /* Dynamic flag definitions: used in set_bit() etc. */
 #define US_FLIDX_URB_ACTIVE    18  /* 0x00040000  current_urb is in use  */
diff -puN drivers/usb/storage/unusual_devs.h~add_slow_flag 
drivers/usb/storage/unusual_devs.h
--- linux-2.6.11-rc4/drivers/usb/storage/unusual_devs.h~add_slow_flag   
2005-02-13 16:57:48.000000000 -0800
+++ linux-2.6.11-rc4-phil/drivers/usb/storage/unusual_devs.h    2005-02-16 
09:41:11.000000000 -0800
@@ -512,6 +512,25 @@ UNUSUAL_DEV(  0x05dc, 0xb002, 0x0000, 0x
                US_SC_DEVICE, US_PR_DEVICE, NULL,
                US_FL_FIX_INQUIRY ),

+/* The following two entries are for a Genesys USB to IDE
+ * converter chip, but it changes its ProductId depending
+ * on whether or not a disk or an optical device is enclosed
+ * They were originally reported by Alexander Oltu
+ * <[EMAIL PROTECTED]> and Peter Marks <[EMAIL PROTECTED]>
+ * respectively.
+ */
+UNUSUAL_DEV(  0x05e3, 0x0701, 0x0000, 0xffff,
+               "Genesys Logic",
+               "USB to IDE Optical",
+               US_SC_DEVICE, US_PR_DEVICE, NULL,
+               US_FL_GO_SLOW ),
+
+UNUSUAL_DEV(  0x05e3, 0x0702, 0x0000, 0xffff,
+               "Genesys Logic",
+               "USB to IDE Disk",
+               US_SC_DEVICE, US_PR_DEVICE, NULL,
+               US_FL_GO_SLOW ),
+
 /* Reported by Hanno Boeck <[EMAIL PROTECTED]>
  * Taken from the Lycoris Kernel */
 UNUSUAL_DEV(  0x0636, 0x0003, 0x0000, 0x9999,
@@ -540,19 +559,19 @@ UNUSUAL_DEV( 0x066f, 0x8000, 0x0001, 0x0
                US_SC_DEVICE, US_PR_DEVICE, NULL,
                US_FL_FIX_CAPACITY ),

-/* Reported by Alex Butcher <[EMAIL PROTECTED]> */
-UNUSUAL_DEV( 0x067b, 0x3507, 0x0001, 0x0001,
+/* Reported by Richard -=[]=- <[EMAIL PROTECTED]> */
+UNUSUAL_DEV( 0x067b, 0x2507, 0x0100, 0x0100,
                "Prolific Technology Inc.",
-               "ATAPI-6 Bridge Controller",
+               "Mass Storage Device",
                US_SC_DEVICE, US_PR_DEVICE, NULL,
-               US_FL_FIX_CAPACITY ),
+               US_FL_FIX_CAPACITY | US_FL_GO_SLOW ),

 /* Reported by Alex Butcher <[EMAIL PROTECTED]> */
 UNUSUAL_DEV( 0x067b, 0x3507, 0x0001, 0x0001,
                "Prolific Technology Inc.",
                "ATAPI-6 Bridge Controller",
                US_SC_DEVICE, US_PR_DEVICE, NULL,
-               US_FL_FIX_CAPACITY ),
+               US_FL_FIX_CAPACITY | US_FL_GO_SLOW ),

 /* Submitted by Benny Sjostrand <[EMAIL PROTECTED]> */
 UNUSUAL_DEV( 0x0686, 0x4011, 0x0001, 0x0001,
@@ -917,6 +936,13 @@ UNUSUAL_DEV(  0x1370, 0x6828, 0x0110, 0x
                US_SC_DEVICE, US_PR_DEVICE, NULL,
                US_FL_IGNORE_RESIDUE ),

+/* Reported by Radovan Garabik <[EMAIL PROTECTED]> */
+UNUSUAL_DEV(  0x2735, 0x100b, 0x0000, 0x9999,
+               "MPIO",
+               "HS200",
+               US_SC_DEVICE, US_PR_DEVICE, NULL,
+               US_FL_GO_SLOW ),
+
 #ifdef CONFIG_USB_STORAGE_SDDR55
 UNUSUAL_DEV(  0x55aa, 0xa103, 0x0000, 0x9999,
                "Sandisk",
diff -puN drivers/usb/storage/usb.c~add_slow_flag drivers/usb/storage/usb.c
--- linux-2.6.11-rc4/drivers/usb/storage/usb.c~add_slow_flag    2005-02-16 
23:17:55.000000000 -0800
+++ linux-2.6.11-rc4-phil/drivers/usb/storage/usb.c     2005-02-17 
11:36:48.000000000 -0800
@@ -483,6 +483,13 @@ static void get_device_info(struct us_da
                        unusual_dev->useTransport;
        us->flags = unusual_dev->flags;

+       /*
+        * This flag is only needed when we're in high-speed, so let's
+        * disable it if we're in full-speed
+        */
+       if (dev->speed != USB_SPEED_HIGH)
+               us->flags &= ~US_FL_GO_SLOW;
+
        /* Log a message if a non-generic unusual_dev entry contains an
         * unnecessary subclass or protocol override.  This may stimulate
         * reports from users that will help us remove unneeded entries
_

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to