Hi, guys:
In the current libusual system, if a device is listed in unusual_devs.h,
it cannot be serviced by ub. Which is fine most of the time, because
listed devices are largely obscure. Unfortunately, iPod is listed too,
but I wish [to continue] to drive my iPod with ub. So, I would like to
have something like the attached patch.
Architecturally, this is the best approach from those I tried. I can
pack everything into libsusual, but it makes the decision unclear
and there's a danger of making a device refused by either of storage
backends. With the explicit flag like below, things are much safer.
However, a certain uglification occurs...
Phil, Matt, Alan, I'd like some feedback about this before I try to
send it out.
Thank you,
-- Pete
P.S. I have an SDDR-31 as well as iPod, so I marked it as bias-able too.
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/block/ub.c
linux-2.6.17-rc2-lem/drivers/block/ub.c
--- linux-2.6.17-rc2/drivers/block/ub.c 2006-04-23 21:05:39.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/block/ub.c 2006-04-28 20:19:12.000000000
-0700
@@ -327,6 +327,7 @@ struct ub_dev {
char name[12];
struct usb_device *dev;
struct usb_interface *intf;
+ unsigned long us_flags;
struct list_head luns;
@@ -1900,7 +1897,9 @@ static int ub_sync_read_cap(struct ub_de
}
/* sd.c special-cases sector size of 0 to mean 512. Needed? Safe? */
- nsec = be32_to_cpu(*(__be32 *)p) + 1;
+ nsec = be32_to_cpu(*(__be32 *)p);
+ if (!(sc->us_flags & US_FL_FIX_CAPACITY))
+ nsec++;
bsize = be32_to_cpu(*(__be32 *)(p + 4));
switch (bsize) {
case 512: shift = 0; break;
@@ -2226,6 +2225,7 @@ static int ub_probe(struct usb_interface
snprintf(sc->name, 12, DRV_NAME "(%d.%d)",
sc->dev->bus->busnum, sc->dev->devnum);
+ sc->us_flags = USB_US_ORIG_FLAGS(dev_id->driver_info);
/* XXX Verify that we can handle the device (from descriptors) */
if (ub_get_pipes(sc, sc->dev, intf) != 0)
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/storage/libusual.c
linux-2.6.17-rc2-lem/drivers/usb/storage/libusual.c
--- linux-2.6.17-rc2/drivers/usb/storage/libusual.c 2006-03-27
07:45:23.000000000 -0800
+++ linux-2.6.17-rc2-lem/drivers/usb/storage/libusual.c 2006-04-28
19:09:24.000000000 -0700
@@ -44,6 +44,12 @@ static int usu_probe_thread(void *arg);
{ USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin,bcdDeviceMax), \
.driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+#define UNUSUAL_DEV2(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \
+ vendorName, productName, useProtocol, useTransport, \
+ initFunction, flags, useType) \
+{ USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin,bcdDeviceMax), \
+ .driver_info = (flags)|((useType)<<24) }
+
#define USUAL_DEV(useProto, useTrans, useType) \
{ USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, useProto, useTrans), \
.driver_info = ((useType)<<24) }
@@ -54,6 +60,7 @@ struct usb_device_id storage_usb_ids []
};
#undef USUAL_DEV
+#undef UNUSUAL_DEV2
#undef UNUSUAL_DEV
MODULE_DEVICE_TABLE(usb, storage_usb_ids);
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/storage/unusual_devs.h
linux-2.6.17-rc2-lem/drivers/usb/storage/unusual_devs.h
--- linux-2.6.17-rc2/drivers/usb/storage/unusual_devs.h 2006-04-23
21:06:19.000000000 -0700
+++ linux-2.6.17-rc2-lem/drivers/usb/storage/unusual_devs.h 2006-04-28
19:09:24.000000000 -0700
@@ -638,40 +638,40 @@ UNUSUAL_DEV( 0x05ab, 0x5701, 0x0100, 0x
* to change with firmware updates, I changed the range to maximum for all
* iPod entries.
*/
-UNUSUAL_DEV( 0x05ac, 0x1202, 0x0000, 0x9999,
+UNUSUAL_DEV2( 0x05ac, 0x1202, 0x0000, 0x9999,
"Apple",
"iPod",
US_SC_DEVICE, US_PR_DEVICE, NULL,
- US_FL_FIX_CAPACITY ),
+ US_FL_FIX_CAPACITY, 0 ),
/* Reported by Avi Kivity <[EMAIL PROTECTED]> */
-UNUSUAL_DEV( 0x05ac, 0x1203, 0x0000, 0x9999,
+UNUSUAL_DEV2( 0x05ac, 0x1203, 0x0000, 0x9999,
"Apple",
"iPod",
US_SC_DEVICE, US_PR_DEVICE, NULL,
- US_FL_FIX_CAPACITY ),
+ US_FL_FIX_CAPACITY, 0 ),
-UNUSUAL_DEV( 0x05ac, 0x1204, 0x0000, 0x9999,
+UNUSUAL_DEV2( 0x05ac, 0x1204, 0x0000, 0x9999,
"Apple",
"iPod",
US_SC_DEVICE, US_PR_DEVICE, NULL,
- US_FL_FIX_CAPACITY ),
+ US_FL_FIX_CAPACITY, 0 ),
-UNUSUAL_DEV( 0x05ac, 0x1205, 0x0000, 0x9999,
+UNUSUAL_DEV2( 0x05ac, 0x1205, 0x0000, 0x9999,
"Apple",
"iPod",
US_SC_DEVICE, US_PR_DEVICE, NULL,
- US_FL_FIX_CAPACITY ),
+ US_FL_FIX_CAPACITY, 0 ),
/*
* Reported by Tyson Vinson <[EMAIL PROTECTED]>
* This particular productId is the iPod Nano
*/
-UNUSUAL_DEV( 0x05ac, 0x120a, 0x0000, 0x9999,
+UNUSUAL_DEV2( 0x05ac, 0x120a, 0x0000, 0x9999,
"Apple",
"iPod",
US_SC_DEVICE, US_PR_DEVICE, NULL,
- US_FL_FIX_CAPACITY ),
+ US_FL_FIX_CAPACITY, 0 ),
#ifdef CONFIG_USB_STORAGE_JUMPSHOT
UNUSUAL_DEV( 0x05dc, 0x0001, 0x0000, 0x0001,
@@ -780,11 +780,11 @@ UNUSUAL_DEV( 0x0781, 0x0001, 0x0200, 0x
US_SC_SCSI, US_PR_CB, NULL,
US_FL_SINGLE_LUN ),
-UNUSUAL_DEV( 0x0781, 0x0002, 0x0009, 0x0009,
+UNUSUAL_DEV2( 0x0781, 0x0002, 0x0009, 0x0009,
"SanDisk Corporation",
"ImageMate CompactFlash USB",
US_SC_DEVICE, US_PR_DEVICE, NULL,
- US_FL_FIX_CAPACITY ),
+ US_FL_FIX_CAPACITY, 0 ),
#ifdef CONFIG_USB_STORAGE_USBAT
UNUSUAL_DEV( 0x0781, 0x0005, 0x0005, 0x0005,
@@ -1103,6 +1103,16 @@ UNUSUAL_DEV( 0x0c45, 0x1060, 0x0100, 0x0
US_SC_DEVICE, US_PR_DEVICE, NULL,
US_FL_SINGLE_LUN ),
+/*
+ * Pete Zaitcev <[EMAIL PROTECTED]>, bz#164688.
+ * The device blatantly ignores LUN and returns 1 in GetMaxLUN.
+ */
+UNUSUAL_DEV( 0x0c45, 0x1060, 0x0100, 0x0100,
+ "Unknown",
+ "Unknown",
+ US_SC_DEVICE, US_PR_DEVICE, NULL,
+ US_FL_SINGLE_LUN ),
+
/* Submitted by Joris Struyve <[EMAIL PROTECTED]> */
UNUSUAL_DEV( 0x0d96, 0x410a, 0x0001, 0xffff,
"Medion",
diff -urp -X dontdiff linux-2.6.17-rc2/drivers/usb/storage/usb.c
linux-2.6.17-rc2-lem/drivers/usb/storage/usb.c
--- linux-2.6.17-rc2/drivers/usb/storage/usb.c 2006-04-23 21:06:19.000000000
-0700
+++ linux-2.6.17-rc2-lem/drivers/usb/storage/usb.c 2006-04-28
19:09:24.000000000 -0700
@@ -128,6 +128,9 @@ static DECLARE_COMPLETION(threads_gone);
{ USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin,bcdDeviceMax), \
.driver_info = (flags)|(USB_US_TYPE_STOR<<24) }
+#define UNUSUAL_DEV2(v,p,m0,m1,vn,pn,pt,tr,i,f,t) \
+ UNUSUAL_DEV(v,p,m0,m1,vn,pn,pt,tr,i,f)
+
#define USUAL_DEV(useProto, useTrans, useType) \
{ USB_INTERFACE_INFO(USB_CLASS_MASS_STORAGE, useProto, useTrans), \
.driver_info = (USB_US_TYPE_STOR<<24) }
@@ -136,6 +139,7 @@ static struct usb_device_id storage_usb_
# include "unusual_devs.h"
#undef UNUSUAL_DEV
+#undef UNUSUAL_DEV2
#undef USUAL_DEV
/* Terminating entry */
{ }
@@ -166,6 +170,9 @@ MODULE_DEVICE_TABLE (usb, storage_usb_id
.initFunction = init_function, \
}
+#define UNUSUAL_DEV2(v,p,m0,m1,vn,pn,pt,tr,i,f,t) \
+ UNUSUAL_DEV(v,p,m0,m1,vn,pn,pt,tr,i,f)
+
#define USUAL_DEV(use_protocol, use_transport, use_type) \
{ \
.useProtocol = use_protocol, \
@@ -175,6 +182,7 @@ MODULE_DEVICE_TABLE (usb, storage_usb_id
static struct us_unusual_dev us_unusual_dev_list[] = {
# include "unusual_devs.h"
# undef UNUSUAL_DEV
+# undef UNUSUAL_DEV2
# undef USUAL_DEV
/* Terminating entry */
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel