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>