Module Name: src Committed By: sborrill Date: Fri Feb 7 11:33:34 UTC 2014
Modified Files: src/sys/dev/usb [netbsd-6]: usb_subr.c Log Message: Pull up the following revisions(s) (requested by skrll in ticket #1015): sys/dev/usb/usb_subr.c: revision 1.190, 1.192 Fix PR/48496. Only set wMaxPacketSize to 64 for HS/FS and set to 8 for LS to be within the USB spec. Reload the full device descriptor after re-establishing the default pipe with the new address. To generate a diff of this commit: cvs rdiff -u -r1.180 -r1.180.8.1 src/sys/dev/usb/usb_subr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/usb/usb_subr.c diff -u src/sys/dev/usb/usb_subr.c:1.180 src/sys/dev/usb/usb_subr.c:1.180.8.1 --- src/sys/dev/usb/usb_subr.c:1.180 Thu Jun 9 19:08:33 2011 +++ src/sys/dev/usb/usb_subr.c Fri Feb 7 11:33:34 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: usb_subr.c,v 1.180 2011/06/09 19:08:33 matt Exp $ */ +/* $NetBSD: usb_subr.c,v 1.180.8.1 2014/02/07 11:33:34 sborrill Exp $ */ /* $FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $ */ /* @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.180 2011/06/09 19:08:33 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: usb_subr.c,v 1.180.8.1 2014/02/07 11:33:34 sborrill Exp $"); #include "opt_compat_netbsd.h" #include "opt_usbverbose.h" @@ -1103,7 +1103,11 @@ usbd_new_device(device_t parent, usbd_bu * (which uses 64 bytes so it shouldn't be less), * highspeed devices must support 64 byte packets anyway */ - USETW(dev->def_ep_desc.wMaxPacketSize, 64); + if (speed == USB_SPEED_HIGH || speed == USB_SPEED_FULL) + USETW(dev->def_ep_desc.wMaxPacketSize, 64); + else + USETW(dev->def_ep_desc.wMaxPacketSize, USB_MAX_IPACKET); + dev->def_ep_desc.bInterval = 0; /* doesn't matter, just don't let it uninitialized */ @@ -1219,14 +1223,6 @@ usbd_new_device(device_t parent, usbd_bu dev->address = addr; /* new device address now */ bus->devices[addr] = dev; - err = usbd_reload_device_desc(dev); - if (err) { - DPRINTFN(-1, ("usbd_new_device: addr=%d, getting full desc " - "failed\n", addr)); - usbd_remove_device(dev, up); - return (err); - } - /* Re-establish the default pipe with the new address. */ usbd_kill_pipe(dev->default_pipe); err = usbd_setup_pipe(dev, 0, &dev->def_ep, USBD_DEFAULT_INTERVAL, @@ -1237,6 +1233,14 @@ usbd_new_device(device_t parent, usbd_bu return err; } + err = usbd_reload_device_desc(dev); + if (err) { + DPRINTFN(-1, ("usbd_new_device: addr=%d, getting full desc " + "failed\n", addr)); + usbd_remove_device(dev, up); + return (err); + } + /* Assume 100mA bus powered for now. Changed when configured. */ dev->power = USB_MIN_POWER; dev->self_powered = 0;