fix USB devices with multiple configurations
PATCH 1/1 fix USB devices with multiple configurations
This patch fixes bugs in usbdcore*.c related to the use of devices with multiple configurations.
The original code made mistakes about the meaning of configuration value and configuration index, and the resulting off-by-one errors resulted in:
* SET_CONFIGURATION always selected the first configuration, no matter what wValue is being passed.
* GET_DESCRIPTOR/CONFIGURATION always returned the descriptor for the first configuration (index 0).
drivers/usb/usbdcore.c +2 -5
@@ -147,12 +147,9 @@ struct usb_string_descriptor *usbd_get_string (__u8 index)static struct usb_configuration_instance *usbd_device_configuration_instance (struct usb_device_instance *device,unsigned int port,unsigned int configuration) { -/* XXX */ - configuration = configuration ? configuration -1 :0 ; - -if (configuration >= device->configurations) { +if (configuration >= device->configurations)return NULL ; - } +return device->configuration_instance_array + configuration; }
drivers/usb/usbdcore_ep0.c +4 -10
@@ -237,8 +237,8 @@ static int ep0_get_descriptor (struct usb_device_instance *device,return -1 ; }/*dbg_ep0(2, "%d %d", index, device_descriptor->bNumConfigurations); */ -if (index > device_descriptor->bNumConfigurations) { -dbg_ep0 (0 ,"index too large: %d > %d" , index, +if (index >= device_descriptor->bNumConfigurations) { +dbg_ep0 (0 ,"index too large: %d >= %d" , index, device_descriptor-> bNumConfigurations);return -1 ;
@@ -612,14 +612,8 @@ int ep0_recv_setup (struct urb *urb)case USB_REQ_SET_CONFIGURATION :/* c.f. 9.4.7 - the top half of wValue is reserved */ -/* */ -if ((device->configuration = -le16_to_cpu (request->wValue) &0xFF80 ) !=0 ) { -/* c.f. 9.4.7 - zero is the default or addressed state, in our case this */ -/* is the same is configuration zero */ -serial_printf ("error setting dev->config to zero!\n" ); - device->configuration =0 ;/* TBR - ?????? */ - } + device->configuration =le16_to_cpu (request->wValue) &0xff ; +/* reset interface and alternate settings */ device->interface = device->alternate =0 ;
Signature · 11 lines
- Harald Welte <[email protected]> http://laforge.gnumonks.org/ ============================================================================ "Privacy in residential applications is a desirable marketing option." (ETSI EN 300 175-7 Ch. A6) -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: Digital signature Url : http://lists.denx.de/pipermail/u-boot/attachments/20080707/ae645ae3/attachment.pgp
PATCH 1/1 fix USB devices with multiple configurations
Quoted 7 lines · In message <[email protected]> you wrote:
This patch fixes bugs in usbdcore*.c related to the use of devices with multiple configurations.
The original code made mistakes about the meaning of configuration value and configuration index, and the resulting off-by-one errors resulted in:
Quoted 6 lines
*
SET_CONFIGURATIONalways selected the first configuration, no matter what wValue is being passed.
* GET_DESCRIPTOR/CONFIGURATION always returned the descriptor for the first configuration (index 0).Signed-off-by Harald Welte <[email protected]>
Markus, are you going to add this to the USB repo any time soon?
Or you could just ACK it (if you think so) and tell me to pick up directly.
Thanks in advance.
Best regards,
Wolfgang Denk
Signature · 5 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
It's all Klatchian to me.
- Terry Pratchett & Stephen Briggs, _The Discworld Companion_PATCH 1/1 fix USB devices with multiple configurations
Quoted 8 lines · Wolfgang Denk
Quoted 7 lines · In message <[email protected]> you wrote:
This patch fixes bugs in usbdcore*.c related to the use of devices with multiple configurations.
The original code made mistakes about the meaning of configuration value and configuration index, and the resulting off-by-one errors resulted in:
Quoted 6 lines
Quoted 6 lines
*
SET_CONFIGURATIONalways selected the first configuration, no matter what wValue is being passed.
* GET_DESCRIPTOR/CONFIGURATION always returned the descriptor for the first configuration (index 0).Signed-off-by Harald Welte <[email protected]>
Quoted 4 lines
Markus, are you going to add this to the USB repo any time soon?
Or you could just ACK it (if you think so) and tell me to pick up directly.
Wolfgang, please apply.
Sorry for the delay.
Best regards
Markus Klotzbuecher
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
PATCH 1/1 fix USB devices with multiple configurations
Quoted 2 lines · In message <[email protected]> you wrote:
thanks.
Quoted 1 line
Wolfgang, please apply.
Done, thanks.
Best regards,
Wolfgang Denk
Signature · 7 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de We're all sorry for the other guy when he loses his job to a machine. But when it comes to your job -- that's different. And it always will be different. -- McCoy, "The Ultimate Computer", stardate 4729.4
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/1 fix USB devices with multiple configurations
Quoted 14 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 13 lines · Wolfgang Denk
Quoted 12 lines · In message <[email protected]> you wrote:
This patch fixes bugs in usbdcore*.c related to the use of devices with multiple configurations.
The original code made mistakes about the meaning of configuration value and configuration index, and the resulting off-by-one errors resulted in:
*
SET_CONFIGURATIONalways selected the first configuration, no matter what wValue is being passed.
* GET_DESCRIPTOR/CONFIGURATION always returned the descriptor for the first configuration (index 0).
Quoted 7 lines
Quoted 6 lines
Quoted 1 line
Signed-off-by Harald Welte <[email protected]>Markus, are you going to add this to the USB repo any time soon?
Or you could just ACK it (if you think so) and tell me to pick up directly.
Any news about this patch?
Has been merged a long time ago as
cc83b27217f7380041fea386ddb6d6d9b261617d
Or what type of news are you looking for?
Best regards
Markus
Signature · 3 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de")
Wolfgang Denk
AppliedPATCH 1/1 fix USB devices with multiple configurations
In reply to Harald WelteQuoted 7 lines · In message <[email protected]> you wrote:
This patch fixes bugs in usbdcore*.c related to the use of devices with multiple configurations.
The original code made mistakes about the meaning of configuration value and configuration index, and the resulting off-by-one errors resulted in:
Quoted 6 lines
*
SET_CONFIGURATIONalways selected the first configuration, no matter what wValue is being passed.
* GET_DESCRIPTOR/CONFIGURATION always returned the descriptor for the first configuration (index 0).Signed-off-by Harald Welte <[email protected]>
Applied, thanks.
Best regards,
Wolfgang Denk
Signature · 9 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Everyone who comes in here wants three things:
1. They want it quick.
2. They want it good.
3. They want it cheap.
I tell 'em to pick two and call me back.
- sign on the back wall of a small printing company in Delaware