usb: ehci should use u16 for isochronous intervals
authorDavid Brownell <david-b@pacbell.net>
Thu, 24 Jan 2008 20:30:34 +0000 (12:30 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 1 Feb 2008 22:35:06 +0000 (14:35 -0800)
While most isochronous endpoints have short polling intervals, the
EHCI driver won't necessarily handle larger ones correctly.

This patch switches to use a "u16" to represent those periods, not
a u8, since it can always work:  the largest expressible period
is 2^15 units ... not the previous too-short limit of 128 frames
(full or low speeds) or microframes (high speed, 32 frames).

This bug is essentially theoretical, since the few ISO endpoints
I've seen which don't use one transfer per frame are high speed
ones using more than that (including high bandwidth, 24 KB/msec).

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/ehci.h

index 42969e9d8c447d05a93b110486ee00123da236ee..bf92d209a1a9bad0091983ce0d35ff5ee0fc011e 100644 (file)
@@ -550,8 +550,8 @@ struct ehci_iso_stream {
         * trusting urb->interval == f(epdesc->bInterval) and
         * including the extra info for hw_bufp[0..2]
         */
-       u8                      interval;
        u8                      usecs, c_usecs;
+       u16                     interval;
        u16                     tt_usecs;
        u16                     maxp;
        u16                     raw_mask;