Skip to contentSkip to conversation

fix USB devices with multiple configurations

PATCH New Harald Welte 3 participants 6 messages Jul 6, 2008 – Aug 29, 2008 1 message not in the archive USB

lore
Share & tools
lore
#0 lore raw

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
index 65a5724..a2e6711 100644
@@ -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
index 2c89304..d9808f9 100644
@@ -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 
#1 lore raw

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_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).

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_
#2 lore raw

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_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).

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

#3 lore raw

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]

#5 lore raw

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_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).

Quoted 7 lines
Quoted 6 lines
Quoted 1 line

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")
#6 lore raw

PATCH 1/1 fix USB devices with multiple configurations

In reply to Harald Welte
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_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).

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