Forward: hotplugging usb-storage: bcdDevice at fault?
Hi,
I received the attached mail from a user. As he said, some entries have bcdDevice_lo == bcdDevice_hi with match_flag & 0x0C == 0x0C, which means matches for both device_lo and device_hi. For examples, in drivers/usb/storage/unusual_devs.h:
UNUSUAL_DEV( 0x03f0, 0x0207, 0x0001, 0x0001,
"HP",
"CD-Writer+ 8200e",
US_SC_8070, US_PR_SCM_ATAPI, init_8200e, 0),But usb.agent code to match device_lo and device_hi is bcdDevice_lo <= bcdDevice < bcdDevice_hi, so it is always fails because bcdDevice_lo == bcdDevice_hi.
So, why usb.agent doesn't match bcdDevice_lo <= bcdDevice <=bcdDevice_hi? Is it bugs of usb_device_id entries?
Thanks,
Fumitoshi UKAI
Dear Fumatoshi,
I'm having trouble getting hotplug to work with my HP 8230e CD Writer. It's a USB cdwriter, and works with the usb-storage module. It works fine if I modprobe usb-storage in by hand.
But hotplug doesn't recognise it, saying:
/etc/hotplug/usb.agent: ... no modules for USB product 3f0/207/1
The entry for the device in /lib/modules/2.4.17/modules.usbmap is present, and looks like
usb-storage 0x000f 0x03f0 0x0207 0x0001 0x00010x00 0x00 0x00 0x00 0x000x00 0x00000000
Watching the hotplug process carefully as it runs /etc/hotplug/usb.agent when I plug the device in, I notice that it fails because bcdDevice_lo and bcdDevice_hi are both set to 1, but the usb device (usb_bcdDevice) must follow bcdDevice_lo <= bcdDevice < bcdDevice_hi. That is, the module fails to load because bcdDevice is not strictly less than bcdDevice_hi (all values are equal to 1).
What does this mean? What do I need to do to get it to run? I notice that your FinePix40i example in README.Debian:
usb-storage 0 0x04cb 0x0100 0x0000 0x0000 ...
also has bcdDevice_lo = bcdDevice_hi = 0,
and therefore ought to fail also for the same reason my cdwriter fails. Why does your camera succeed, while my cdwriter fails?
Thanks for any help you can provide.
Sincerely,
Drew Parsons
Signature · 2 lines
PGP public key available at http://people.debian.org/~dparsons/drewskey.txt Fingerprint: A110 EAE1 D7D2 8076 5FE0 EC0A B6CE 7041 6412 4E4A
The match algorithm in userland is supposed to be exactly the same as that in the kernel. If it doesn't do the same thing, then fix the userland version ...
There was some uncertainty about the documentation for that kernel algorithm too, though: it may not have matched the code with respect to this stuff.
- Dave
----- Original Message -----
From: "Fumitoshi UKAI" <[email protected]>
To: <[email protected]>
Sent: Thursday, January 17, 2002 8:22 AM
Subject: Forward: hotplugging usb-storage: bcdDevice at fault?
Quoted 16 lines
Hi,
I received the attached mail from a user. As he said, some entries have
bcdDevice_lo=bcdDevice_hiwithmatch_flag&0x0C=0x0C, which means matches for bothdevice_loanddevice_hi. For examples, indrivers/usb/storage/unusual_devs.h:UNUSUAL_DEV(
0x03f0,0x0207,0x0001,0x0001,"HP", "CD-Writer+ 8200e", US_SC_8070, US_PR_SCM_ATAPI, init_8200e, 0),But usb.agent code to match
device_loanddevice_hiisbcdDevice_lo<= bcdDevice <bcdDevice_hi, so it is always fails becausebcdDevice_lo=bcdDevice_hi.
Quoted 7 lines
So, why usb.agent doesn't match
bcdDevice_lo<= bcdDevice <¼dDevice_hi? Is it bugs ofusb_device_identries?Thanks,
Fumitoshi UKAI
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
At Thu, 17 Jan 2002 12:22:39 -0800,
Quoted 4 lines · David Brownell
The match algorithm in userland is supposed to be exactly the same as that in the kernel. If it doesn't do the same thing, then fix the userland version ...
Ok. The match algorithm about device_id in kernel drivers/usb/usb.c:usb_match_id() as follows:
/* No need to test id->bcdDevice_lo != 0, since 0 is never greater than any unsigned number. */ if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) && (id->bcdDevice_lo > dev->descriptor.bcdDevice)) continue; if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) && (id->bcdDevice_hi < dev->descriptor.bcdDevice)) continue;
I believe this code has not been changed, according to
http://linuxusb.bitkeeper.com:8088/usb-2.4/anno/drivers/usb/[email protected]?nav=index.html|src/.|src/drivers|src/drivers/usb
So, I'll apply the following patch.
Index: etc/hotplug/usb.agent
=================================RCS file: /cvsroot/linux-hotplug/admin/etc/hotplug/usb.agent,v retrieving revision 1.18
hotplug/usb.agent +2 -2
@@ -233,9 +233,9 @@ continue fi - # bcdDevice_lo <= bcdDevice < bcdDevice_hi + # bcdDevice_lo <= bcdDevice <= bcdDevice_hi if [ $USB_MATCH_DEV_HI -eq $(( $match_flags & $USB_MATCH_DEV_HI )) ] && - [ $usb_bcdDevice -ge $bcdDevice_hi ]; then + [ $usb_bcdDevice -gt $bcdDevice_hi ]; then continue fi
Regards,
Fumitoshi UKAI
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
Hrm... this isn't right.
We discussed this a long time ago, and decided that the better way to do this was to use an "or equals" comparison on one end.
The idea was that the common construct was to say that "devices up to revisions x.xx have this bug", so the comparison was supposed to be ">= and <"
The kernel was supposed to be changed long ago, but I guess it never got done.
Matt
Quoted 51 lines · Fumitoshi UKAI
At Thu, 17 Jan 2002 12:22:39 -0800,
Quoted 4 lines · David Brownell
The match algorithm in userland is supposed to be exactly the same as that in the kernel. If it doesn't do the same thing, then fix the userland version ...
Ok. The match algorithm about
device_idin kerneldrivers/usb/usb.c:usb_match_id()as follows:/* No need to test id->bcdDevice_lo != 0, since 0 is never greater than any unsigned number. */ if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) && (id->bcdDevice_lo > dev->descriptor.bcdDevice)) continue; if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI) && (id->bcdDevice_hi < dev->descriptor.bcdDevice)) continue;I believe this code has not been changed, according to
http://linuxusb.bitkeeper.com:8088/usb-2.4/anno/drivers/usb/[email protected]?nav=index.html|src/.|src/drivers|src/drivers/usbSo, I'll apply the following patch.
Index: etc/hotplug/usb.agent
===================================================================
RCS file: /cvsroot/linux-hotplug/admin/etc/hotplug/usb.agent,v retrieving revision 1.18
diff -u -u -r1.18 usb.agenthotplug/usb.agent +2
-2@@ -233,9 +233,9 @@ continue fi - # bcdDevice_lo <= bcdDevice < bcdDevice_hi + # bcdDevice_lo <= bcdDevice <= bcdDevice_hi if [ $USB_MATCH_DEV_HI -eq $(( $match_flags & $USB_MATCH_DEV_HI )) ] && - [ $usb_bcdDevice -ge $bcdDevice_hi ]; then + [ $usb_bcdDevice -gt $bcdDevice_hi ]; then continue fiRegards,
Fumitoshi UKAI_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
Signature · 6 lines
Matthew Dharm Home: [email protected] Maintainer, Linux USB Mass Storage Driver I see you've been reading alt.sex.chubby.sheep voraciously. -- Tanya User Friendly, 11/24/97