From owner-p4-projects@FreeBSD.ORG Sun Mar 2 19:07:50 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6AFB0106566C; Sun, 2 Mar 2008 19:07:50 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2A44E1065677 for ; Sun, 2 Mar 2008 19:07:50 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id F067D8FC18 for ; Sun, 2 Mar 2008 19:07:49 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.1/8.14.1) with ESMTP id m22J7nqO021027 for ; Sun, 2 Mar 2008 19:07:49 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.1/8.14.1/Submit) id m22J7nPS021025 for perforce@freebsd.org; Sun, 2 Mar 2008 19:07:49 GMT (envelope-from hselasky@FreeBSD.org) Date: Sun, 2 Mar 2008 19:07:49 GMT Message-Id: <200803021907.m22J7nPS021025@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 136682 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 02 Mar 2008 19:07:50 -0000 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 */