Skip to contentSkip to conversation

2.2 bcdDevice munging patch

DISCUSSION Plato 4 participants 5 messages Dec 4, 2001 – Dec 5, 2001

lore
Share & tools
lore

Plato

author
#0 lore raw

Hello,

I couldn't find a contact e-mail address on your site, so I'm posting here instead. Please CC me on replies, as I am not subscribed to this list.

I do not believe that your `munging' of bcdDevice numbers is working correctly. For instance, if PRODUCT is of the form

.../.../10.0

it does not give me .../.../0100

The attached patch seeks to rectify this. Please let me know if it is any use and whether or not it will be included in your releases.

Plato

(Tom Huckstep)

_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

#1 lore raw

On Tue, Dec 04, 2001 at 01:41:05AM +0000, Plato wrote:
OK. I should be more careful before I post to a public mailing list! Darn.

Quoted 2 lines

I do not believe that your `munging' of bcdDevice numbers is working correctly. For instance, if PRODUCT is of the form

I should say that this specifically refers to the environment variable PRODUCT as seen by /etc/hotplug/usb.agent.

Quoted 2 lines

The attached patch seeks to rectify this. Please let me know if it is any use and whether or not it will be included in your releases.

Hmmm ... here it is. This time :-)

Plato

ChangeLog +3 -0
diff -u -r hotplug-2001_09_19/ChangeLog hotplug-bcd_fix/ChangeLog
@@ -1,3 +1,6 @@
+Tue Dec 4 2001  Tom Huckstep <[email protected]>
+	- Fixed munging of usb_bcdDevice for 2.2 kernels
+
 Sun Sep 16 2001 kroah/dbrownell
 	- Added ieee1394.agent from Kristian Hogsberg
 	  <[email protected]>
etc/hotplug/usb.agent +22 -2
diff -u -r hotplug-2001_09_19/etc/hotplug/usb.agent hotplug-bcd_fix/etc/hotplug/usb.agent
@@ -120,8 +120,28 @@
     # work around 2.2 brokenness
     # munges the usb_bcdDevice such that it is a integer rather
     # than a float: e.g. 1.0 become 0100
-    PRODUCT=`echo $PRODUCT | sed -e "s+\.\([0-9]\)$+.\10+" -e "s/\.$/00/" \
-                                  -e "s+/\([0-9]\)\.\([0-9][0-9]\)+/0\1\2+"`
+
+    # In PRODUCT=x/y/z if z has only one digit after a decimal point then a
+    # trailing zero is added.  If z has only one digit before a decimal
+    # point then a leading zero is added.  The decimal point is then
+    # removed.
+
+    # e.g. a.b  -> 0ab0
+    #     ab.c  -> cab0
+    #      a.bc -> 0abc
+    #     ab.cd -> abcd
+
+    # Why does the kernel give us this in such a weird format?  I don't
+    # know, but looking at usb/usb.c in your 2.2 kernel source may help.
+    # N.B. to_bcd()
+
+    # Add the trailing zero
+    PRODUCT=`echo $PRODUCT | sed -e "s+\.\([0-9]\)$+.\10+"`
+    # Add the leading zero
+    PRODUCT=`echo $PRODUCT | sed -e "s/\/\([0-9].[0-9][0-9]\)$/\/0\1/"`
+    # Remove the decimal point
+    PRODUCT=`echo $PRODUCT | sed -e "s/\/\([0-9][0-9]\)\.\([0-9][0-9]\)/\/\1\2/"`
+
     set `echo $PRODUCT | $AWK -F/ '{print "0x" $1, "0x" $2, "0x" $3 }'` ''
     usb_idVendor=$1
     usb_idProduct=$2
#2 lore raw
In reply to Plato
Quoted 4 lines · Plato
Quoted 2 lines

The attached patch seeks to rectify this. Please let me know if it is any use and whether or not it will be included in your releases.

Hmmm ... here it is. This time :-)

I'd recommend fixing the 2.2 kernel code to work the same way as 2.4.x. The hotplug code was enabled right at the end of the 2.2.20 development cycle, and this problem must have slipped through.

thanks,

greg k-h

_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

#3 lore raw
In reply to Plato

Sounds fair to me. Though it'll need to be a bit smarter, since I think the current code says "if the kernel is 2.2 then ..." and it'd have to change to handle two types of 2.2 kernels (original, new).

That is, the newer 2.2 kernels would need updated hotplug scripts.

- Dave

----- Original Message -----
From: "Greg KH" <[email protected]>
To: "Plato" <[email protected]>
Cc: <[email protected]>
Sent: Monday, December 03, 2001 7:32 PM
Subject: Re: 2.2 bcdDevice munging patch

Quoted 10 lines · Plato
Quoted 4 lines
Quoted 2 lines

The attached patch seeks to rectify this. Please let me know if it is any use and whether or not it will be included in your releases.

Hmmm ... here it is. This time :-)

I'd recommend fixing the 2.2 kernel code to work the same way as 2.4.x. The hotplug code was enabled right at the end of the 2.2.20 development cycle, and this problem must have slipped through.

Quoted 8 lines

thanks,

greg k-h

_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

#4 lore raw
In reply to Plato

Sorry for the broken thread, but I've only just subscribed to the list.

Dave:

Quoted 3 lines

Sounds fair to me. Though it'll need to be a bit smarter, since I think the current code says "if the kernel is 2.2 then ..." and it'd have to change to handle two types of 2.2 kernels (original, new).

That's not necessary. usb.agent only cares which kernel version is running when deciding which of $MAP_CURRENT or $MAP_DISTMAP to use.

The code which munges the bcdDevice number is kernel independent. It will not change a four hex-digit number specified by a 2.4 kernel, but will change a number with a decimal point from a 2.2 kernel.

Quoted 1 line

That is, the newer 2.2 kernels would need updated hotplug scripts.

If 2.2.21 produced a four hex-digit number it would _not_ need an update to my patch.

Greg:

Quoted 3 lines

I'd recommend fixing the 2.2 kernel code to work the same way as 2.4.x. The hotplug code was enabled right at the end of the 2.2.20 development cycle, and this problem must have slipped through.

The problem has been solved now in userspace. If my patch is implemented then `broken' 2.2 kernels will work, along with 2.4, and later 2.2 kernels possibly incorporating a fix.

The munging already exists. Unfortunately it does not work for all possible values of bcdDevice. If you are going to continue to support 2.2 kernels you should fix this. I believe my patch fixes this.

The problem, for those of you that are not aware, is due to a difference in the PRODUCT environment variable for use by the usb.agent between 2.2 and 2.4 kernels. PRODUCT is of the form xxxx/xxxx/xxxx, i.e four hex numbers separated by slashes.

The 2.4 kernel specifies the third of these numbers as `abcd', where a, b, c, d are four hex digits.

The 2.2 kernel specifies the third of these numbers as `ab.cd' It also omits a and d if they are zero.

There is a `munge' in the current usb.agent which seeks to rectify this. Unfortunately it does not seem to work for some cases, e.g. PRODUCT=.../.../10.0

I'd be happy to hear any comments that you may have. Keep up the good work!

Plato

_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel