aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/usb2/core/usb2_request.c
diff options
context:
space:
mode:
authorAlfred Perlstein <alfred@FreeBSD.org>2008-11-25 08:04:40 +0000
committerAlfred Perlstein <alfred@FreeBSD.org>2008-11-25 08:04:40 +0000
commit6fda742dfecee374888313250d440413e45b1ecf (patch)
treeb851b7a53f0f261e0502bfc568ba90e068cfdcca /sys/dev/usb2/core/usb2_request.c
parent3f3137fee5946f0c64456dfa13a6bcd17f8771bb (diff)
downloadsrc-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.c20
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);