Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 2 Mar 2008 19:07:49 GMT
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 136682 for review
Message-ID:  <200803021907.m22J7nPS021025@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=136682

Change 136682 by hselasky@hselasky_laptop001 on 2008/03/02 19:07:21

	
	This bug fix is related to USB device side support and
	should not affect USB host functionality.
	
	In USB host mode "udev->address" == "udev->device_index".
	In USB device mode "udev->address" != "udev->device_index".
	
	When initialising an USB pipe we need to compare with the 
	device index and not the device address, hence the
	device address is not constant in USB device mode and
	can have the same value like the address of the virtual
	root HUB.

Affected files ...

.. //depot/projects/usb/src/sys/dev/usb/at9100_dci.c#14 edit
.. //depot/projects/usb/src/sys/dev/usb/ehci.c#73 edit
.. //depot/projects/usb/src/sys/dev/usb/ohci.c#60 edit
.. //depot/projects/usb/src/sys/dev/usb/uhci.c#61 edit
.. //depot/projects/usb/src/sys/dev/usb/usb_subr.c#99 edit
.. //depot/projects/usb/src/sys/dev/usb/usb_subr.h#99 edit
.. //depot/projects/usb/src/sys/dev/usb/uss820_dci.c#9 edit

Differences ...

==== //depot/projects/usb/src/sys/dev/usb/at9100_dci.c#14 (text+ko) ====

@@ -2507,7 +2507,7 @@
 	    edesc->bEndpointAddress, udev->flags.usb_mode,
 	    sc->sc_rt_addr);
 
-	if (udev->address == sc->sc_rt_addr) {
+	if (udev->device_index == sc->sc_rt_addr) {
 
 		if (udev->flags.usb_mode != USB_MODE_HOST) {
 			/* not supported */

==== //depot/projects/usb/src/sys/dev/usb/ehci.c#73 (text+ko) ====

@@ -3796,7 +3796,7 @@
 		/* not supported */
 		return;
 	}
-	if (udev->address == sc->sc_addr) {
+	if (udev->device_index == sc->sc_addr) {
 		switch (edesc->bEndpointAddress) {
 		case USB_CONTROL_ENDPOINT:
 			pipe->methods = &ehci_root_ctrl_methods;

==== //depot/projects/usb/src/sys/dev/usb/ohci.c#60 (text+ko) ====

@@ -2776,7 +2776,7 @@
 		/* not supported */
 		return;
 	}
-	if (udev->address == sc->sc_addr) {
+	if (udev->device_index == sc->sc_addr) {
 		switch (edesc->bEndpointAddress) {
 		case USB_CONTROL_ENDPOINT:
 			pipe->methods = &ohci_root_ctrl_methods;

==== //depot/projects/usb/src/sys/dev/usb/uhci.c#61 (text+ko) ====

@@ -3231,7 +3231,7 @@
 		/* not supported */
 		return;
 	}
-	if (udev->address == sc->sc_addr) {
+	if (udev->device_index == sc->sc_addr) {
 		switch (edesc->bEndpointAddress) {
 		case USB_CONTROL_ENDPOINT:
 			pipe->methods = &uhci_root_ctrl_methods;

==== //depot/projects/usb/src/sys/dev/usb/usb_subr.c#99 (text+ko) ====

@@ -1905,6 +1905,9 @@
 	    &udev->default_ep_desc,
 	    &udev->default_pipe);
 
+	/* set device index */
+	udev->device_index = device_index;
+
 	if (udev->flags.usb_mode == USB_MODE_HOST) {
 
 		err = usbreq_set_address(udev, &usb_global_lock, device_index);

==== //depot/projects/usb/src/sys/dev/usb/usb_subr.h#99 (text+ko) ====

@@ -570,6 +570,7 @@
 	uint16_t langid;		/* language for strings */
 
 	uint8_t	address;		/* device addess */
+	uint8_t device_index;		/* device index in "bus->devices" */
 	uint8_t	curr_config_no;		/* current configuration # */
 	uint8_t	depth;			/* distance from root HUB */
 	uint8_t	speed;			/* low/full/high speed */

==== //depot/projects/usb/src/sys/dev/usb/uss820_dci.c#9 (text+ko) ====

@@ -2629,7 +2629,7 @@
 	    edesc->bEndpointAddress, udev->flags.usb_mode,
 	    sc->sc_rt_addr);
 
-	if (udev->address == sc->sc_rt_addr) {
+	if (udev->device_index == sc->sc_rt_addr) {
 
 		if (udev->flags.usb_mode != USB_MODE_HOST) {
 			/* not supported */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200803021907.m22J7nPS021025>