lkml.org 
[lkml]   [2005]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 28/29] USB: fix in usb_calc_bus_time
    From: Dan Streetman <ddstreet@ieee.org>

    This patch does the same swap, i.e. use the ISO macro if (isoc).
    Additionally, it fixes the return value - the usb_calc_bus_time function
    returns the time in nanoseconds (I didn't notice that before) while the
    HS_USECS and HS_USECS_ISO are microseconds. This fixes the function to
    return nanoseconds always, and adjusts ehci-q.c (the only high-speed
    caller of the function) to wrap the call in NS_TO_US().

    Signed-off-by: Dan Streetman <ddstreet@ieee.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>


    ---
    drivers/usb/core/hcd.c | 4 ++--
    drivers/usb/core/hcd.h | 8 +++++---
    drivers/usb/host/ehci-q.c | 4 ++--
    3 files changed, 9 insertions(+), 7 deletions(-)

    --- gregkh-2.6.orig/drivers/usb/core/hcd.c 2005-07-29 11:30:03.000000000 -0700
    +++ gregkh-2.6/drivers/usb/core/hcd.c 2005-07-29 11:36:34.000000000 -0700
    @@ -939,9 +939,9 @@
    case USB_SPEED_HIGH: /* ISOC or INTR */
    // FIXME adjust for input vs output
    if (isoc)
    - tmp = HS_USECS (bytecount);
    + tmp = HS_NSECS_ISO (bytecount);
    else
    - tmp = HS_USECS_ISO (bytecount);
    + tmp = HS_NSECS (bytecount);
    return tmp;
    default:
    pr_debug ("%s: bogus device speed!\n", usbcore_name);
    --- gregkh-2.6.orig/drivers/usb/core/hcd.h 2005-07-29 11:29:47.000000000 -0700
    +++ gregkh-2.6/drivers/usb/core/hcd.h 2005-07-29 11:36:34.000000000 -0700
    @@ -334,17 +334,19 @@
    extern int usb_check_bandwidth (struct usb_device *dev, struct urb *urb);

    /*
    - * Ceiling microseconds (typical) for that many bytes at high speed
    + * Ceiling [nano/micro]seconds (typical) for that many bytes at high speed
    * ISO is a bit less, no ACK ... from USB 2.0 spec, 5.11.3 (and needed
    * to preallocate bandwidth)
    */
    #define USB2_HOST_DELAY 5 /* nsec, guess */
    -#define HS_USECS(bytes) NS_TO_US ( ((55 * 8 * 2083)/1000) \
    +#define HS_NSECS(bytes) ( ((55 * 8 * 2083)/1000) \
    + ((2083UL * (3167 + BitTime (bytes)))/1000) \
    + USB2_HOST_DELAY)
    -#define HS_USECS_ISO(bytes) NS_TO_US ( ((38 * 8 * 2083)/1000) \
    +#define HS_NSECS_ISO(bytes) ( ((38 * 8 * 2083)/1000) \
    + ((2083UL * (3167 + BitTime (bytes)))/1000) \
    + USB2_HOST_DELAY)
    +#define HS_USECS(bytes) NS_TO_US (HS_NSECS(bytes))
    +#define HS_USECS_ISO(bytes) NS_TO_US (HS_NSECS_ISO(bytes))

    extern long usb_calc_bus_time (int speed, int is_input,
    int isoc, int bytecount);
    --- gregkh-2.6.orig/drivers/usb/host/ehci-q.c 2005-07-29 11:29:47.000000000 -0700
    +++ gregkh-2.6/drivers/usb/host/ehci-q.c 2005-07-29 11:36:34.000000000 -0700
    @@ -657,8 +657,8 @@
    * For control/bulk requests, the HC or TT handles these.
    */
    if (type == PIPE_INTERRUPT) {
    - qh->usecs = usb_calc_bus_time (USB_SPEED_HIGH, is_input, 0,
    - hb_mult (maxp) * max_packet (maxp));
    + qh->usecs = NS_TO_US (usb_calc_bus_time (USB_SPEED_HIGH, is_input, 0,
    + hb_mult (maxp) * max_packet (maxp)));
    qh->start = NO_FRAME;

    if (urb->dev->speed == USB_SPEED_HIGH) {
    --
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2005-07-30 03:02    [W:0.027 / U:33.324 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site