On Wed, Mar 17, David Brownell wrote:
Actually what's needed is a _correct_ patch ... that's been the holdup all along. All endpoint transfer intervals use a log2 encoding, except full/low speed interrupt transfers.
The attached patch should be correct.
zero size patch? I love these :)
Ah, right filename from wrong kernel tree. Whoops! Here it is.
--- 1.55/drivers/usb/core/devio.c Fri Dec 5 14:42:24 2003 +++ edited/drivers/usb/core/devio.c Wed Mar 17 13:46:17 2004 @@ -837,6 +837,9 @@ /* arbitrary limit */ if (uurb.number_of_packets < 1 || uurb.number_of_packets > 128) return -EINVAL; + if (!(ep_desc = usb_epnum_to_ep_desc(ps->dev, uurb.endpoint))) + return -ENOENT; + interval = (1 << (min ((u8)16,ep_desc->bInterval) - 1)); isofrmlen = sizeof(struct usbdevfs_iso_packet_desc) * uurb.number_of_packets; if (!(isopkt = kmalloc(isofrmlen, GFP_KERNEL))) return -ENOMEM; @@ -862,7 +865,10 @@ uurb.number_of_packets = 0; if (!(ep_desc = usb_epnum_to_ep_desc(ps->dev, uurb.endpoint))) return -ENOENT; - interval = ep_desc->bInterval; + if (ps->dev->speed == USB_SPEED_HIGH) + interval = (1 << (min ((u8)16,ep_desc->bInterval) - 1)); + else + interval = ep_desc->bInterval; if (uurb.buffer_length > 16384) return -EINVAL; if (!access_ok((uurb.endpoint & USB_DIR_IN) ? VERIFY_WRITE : VERIFY_READ, uurb.buffer, uurb.buffer_length))