Commit d0384200 authored by david-b@pacbell.net's avatar david-b@pacbell.net Committed by Greg Kroah-Hartman

[PATCH] ehci: add tt_usecs

This adds the field tt_usecs to ehci_qh and ehci_iso_stream, and sets it
appropriately when setting them up as periodic endpoints.  It records
the transation translator's think_time (added in last patch) plus the
downstream (i.e. low or full speed) bustime of the transfer associated
with each interrupt or iso frame, as calculated by usb_calc_bus_time.
Signed-off-by: default avatarDan Streetman <ddstreet@ieee.org>
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent e09711ae
...@@ -677,6 +677,9 @@ qh_make ( ...@@ -677,6 +677,9 @@ qh_make (
goto done; goto done;
} }
} else { } else {
struct usb_tt *tt = urb->dev->tt;
int think_time;
/* gap is f(FS/LS transfer times) */ /* gap is f(FS/LS transfer times) */
qh->gap_uf = 1 + usb_calc_bus_time (urb->dev->speed, qh->gap_uf = 1 + usb_calc_bus_time (urb->dev->speed,
is_input, 0, maxp) / (125 * 1000); is_input, 0, maxp) / (125 * 1000);
...@@ -690,6 +693,10 @@ qh_make ( ...@@ -690,6 +693,10 @@ qh_make (
qh->c_usecs = HS_USECS (0); qh->c_usecs = HS_USECS (0);
} }
think_time = tt ? tt->think_time : 0;
qh->tt_usecs = NS_TO_US (think_time +
usb_calc_bus_time (urb->dev->speed,
is_input, 0, max_packet (maxp)));
qh->period = urb->interval; qh->period = urb->interval;
} }
} }
......
...@@ -700,6 +700,7 @@ iso_stream_init ( ...@@ -700,6 +700,7 @@ iso_stream_init (
} else { } else {
u32 addr; u32 addr;
int think_time;
addr = dev->ttport << 24; addr = dev->ttport << 24;
if (!ehci_is_TDI(ehci) if (!ehci_is_TDI(ehci)
...@@ -709,6 +710,9 @@ iso_stream_init ( ...@@ -709,6 +710,9 @@ iso_stream_init (
addr |= epnum << 8; addr |= epnum << 8;
addr |= dev->devnum; addr |= dev->devnum;
stream->usecs = HS_USECS_ISO (maxp); stream->usecs = HS_USECS_ISO (maxp);
think_time = dev->tt ? dev->tt->think_time : 0;
stream->tt_usecs = NS_TO_US (think_time + usb_calc_bus_time (
dev->speed, is_input, 1, maxp));
if (is_input) { if (is_input) {
u32 tmp; u32 tmp;
......
...@@ -421,6 +421,7 @@ struct ehci_qh { ...@@ -421,6 +421,7 @@ struct ehci_qh {
u8 usecs; /* intr bandwidth */ u8 usecs; /* intr bandwidth */
u8 gap_uf; /* uframes split/csplit gap */ u8 gap_uf; /* uframes split/csplit gap */
u8 c_usecs; /* ... split completion bw */ u8 c_usecs; /* ... split completion bw */
u16 tt_usecs; /* tt downstream bandwidth */
unsigned short period; /* polling interval */ unsigned short period; /* polling interval */
unsigned short start; /* where polling starts */ unsigned short start; /* where polling starts */
#define NO_FRAME ((unsigned short)~0) /* pick new start */ #define NO_FRAME ((unsigned short)~0) /* pick new start */
...@@ -479,6 +480,7 @@ struct ehci_iso_stream { ...@@ -479,6 +480,7 @@ struct ehci_iso_stream {
*/ */
u8 interval; u8 interval;
u8 usecs, c_usecs; u8 usecs, c_usecs;
u16 tt_usecs;
u16 maxp; u16 maxp;
u16 raw_mask; u16 raw_mask;
unsigned bandwidth; unsigned bandwidth;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment