diff options
author | Alfred Perlstein <alfred@FreeBSD.org> | 2008-11-25 08:04:40 +0000 |
---|---|---|
committer | Alfred Perlstein <alfred@FreeBSD.org> | 2008-11-25 08:04:40 +0000 |
commit | 6fda742dfecee374888313250d440413e45b1ecf (patch) | |
tree | b851b7a53f0f261e0502bfc568ba90e068cfdcca /sys/dev/usb2/core/usb2_request.c | |
parent | 3f3137fee5946f0c64456dfa13a6bcd17f8771bb (diff) | |
download | src-6fda742dfecee374888313250d440413e45b1ecf.tar.gz src-6fda742dfecee374888313250d440413e45b1ecf.zip |
src/lib/libusb20/libusb20_compat01.c
Fix some issues about re-scanning of the devices.
src/lib/libusb20/libusb20_ugen20.c
Fix issue about libusb20 having to release the
USB transfers before doing a SET_CONFIG, else
the kernel will kill the file handle.
src/sys/dev/usb2/core/usb2_device.
src/sys/dev/usb2/core/usb2_generic.c
src/sys/dev/usb2/core/usb2_generic.h
Add support for U3G devices.
Improve and cleanup FIFO free handling.
Improve device re-enumeration.
src/sys/dev/usb2/core/usb2_msctest.c
src/sys/dev/usb2/core/usb2_msctest.h
Fix some problems in the USB Mass Storage Test.
Add Huawei vendor specific quirks.
src/sys/dev/usb2/core/usb2_request.c
Improve device re-enumeration.
src/sys/dev/usb2/ethernet/if_aue2.c
src/sys/dev/usb2/include/usb2_devid.h
src/sys/dev/usb2/include/usb2_devtable.h
src/sys/dev/usb2/quirk/usb2_quirk.c
Integrate changes from the old USB driver.
src/sys/dev/usb2/include/usb2_standard.h
Add definition of USB3.0 structures from USB.org.
src/sys/dev/usb2/serial/u3g2.c
src/sys/dev/usb2/serial/ugensa2.c
src/sys/modules/usb2/Makefile
src/sys/modules/usb2/serial_3g/Makefile
Import U3G driver.
Submitted by: Hans Petter Selasky (usb4bsd)
Notes
Notes:
svn path=/head/; revision=185290
Diffstat (limited to 'sys/dev/usb2/core/usb2_request.c')
-rw-r--r-- | sys/dev/usb2/core/usb2_request.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/sys/dev/usb2/core/usb2_request.c b/sys/dev/usb2/core/usb2_request.c index bfb3bbbf3013..b32d6899a52f 100644 --- a/sys/dev/usb2/core/usb2_request.c +++ b/sys/dev/usb2/core/usb2_request.c @@ -1325,16 +1325,17 @@ usb2_req_get_config(struct usb2_device *udev, struct mtx *mtx, uint8_t *pconf) usb2_error_t usb2_req_re_enumerate(struct usb2_device *udev, struct mtx *mtx) { - struct usb2_device_descriptor ddesc; struct usb2_device *parent_hub; usb2_error_t err; uint8_t old_addr; + if (udev->flags.usb2_mode != USB_MODE_HOST) { + return (USB_ERR_INVAL); + } old_addr = udev->address; parent_hub = udev->parent_hub; if (parent_hub == NULL) { - err = USB_ERR_INVAL; - goto done; + return (USB_ERR_INVAL); } err = usb2_req_reset_port(parent_hub, mtx, udev->port_no); if (err) { @@ -1347,6 +1348,9 @@ usb2_req_re_enumerate(struct usb2_device *udev, struct mtx *mtx) */ udev->address = USB_START_ADDR; + /* reset "bMaxPacketSize" */ + udev->ddesc.bMaxPacketSize = USB_MAX_IPACKET; + /* * Restore device address: */ @@ -1364,7 +1368,15 @@ usb2_req_re_enumerate(struct usb2_device *udev, struct mtx *mtx) usb2_pause_mtx(mtx, USB_SET_ADDRESS_SETTLE); /* get the device descriptor */ - err = usb2_req_get_device_desc(udev, mtx, &ddesc); + err = usb2_req_get_desc(udev, mtx, &udev->ddesc, + USB_MAX_IPACKET, USB_MAX_IPACKET, 0, UDESC_DEVICE, 0, 0); + if (err) { + DPRINTFN(0, "getting device descriptor " + "at addr %d failed!\n", udev->address); + goto done; + } + /* get the full device descriptor */ + err = usb2_req_get_device_desc(udev, mtx, &udev->ddesc); if (err) { DPRINTFN(0, "addr=%d, getting device " "descriptor failed!\n", old_addr); |