aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/uhci-hcd.h
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2006-05-19 16:52:35 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2006-06-21 18:04:12 -0400
commitc8155cc5d839838f8425dbea568fc537337176a7 (patch)
treefc50ffe774fa59a1a3d18e8543bb7e04d1e80726 /drivers/usb/host/uhci-hcd.h
parentcaf3827a65af476c71eaeb79636869a4ab128d48 (diff)
[PATCH] UHCI: remove ISO TDs as they are used
This patch (as690) does the same thing for ISO TDs as as680 did for non-ISO TDs: free them as they are used rather than all at once when an URB is complete. At the same time it fixes a minor buglet (I'm not aware of it ever affecting anyone): An ISO TD should be retired when its frame is over, regardless of whether or not the hardware has marked it inactive. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host/uhci-hcd.h')
-rw-r--r--drivers/usb/host/uhci-hcd.h10
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/usb/host/uhci-hcd.h b/drivers/usb/host/uhci-hcd.h
index eaac6ddf03a0..469b4268b850 100644
--- a/drivers/usb/host/uhci-hcd.h
+++ b/drivers/usb/host/uhci-hcd.h
@@ -128,8 +128,6 @@ struct uhci_qh {
128 __le32 element; /* Queue element (TD) pointer */ 128 __le32 element; /* Queue element (TD) pointer */
129 129
130 /* Software fields */ 130 /* Software fields */
131 dma_addr_t dma_handle;
132
133 struct list_head node; /* Node in the list of QHs */ 131 struct list_head node; /* Node in the list of QHs */
134 struct usb_host_endpoint *hep; /* Endpoint information */ 132 struct usb_host_endpoint *hep; /* Endpoint information */
135 struct usb_device *udev; 133 struct usb_device *udev;
@@ -138,13 +136,19 @@ struct uhci_qh {
138 struct uhci_td *dummy_td; /* Dummy TD to end the queue */ 136 struct uhci_td *dummy_td; /* Dummy TD to end the queue */
139 struct uhci_td *post_td; /* Last TD completed */ 137 struct uhci_td *post_td; /* Last TD completed */
140 138
139 struct usb_iso_packet_descriptor *iso_packet_desc;
140 /* Next urb->iso_frame_desc entry */
141 unsigned long advance_jiffies; /* Time of last queue advance */ 141 unsigned long advance_jiffies; /* Time of last queue advance */
142 unsigned int unlink_frame; /* When the QH was unlinked */ 142 unsigned int unlink_frame; /* When the QH was unlinked */
143 unsigned int period; /* For Interrupt and Isochronous QHs */ 143 unsigned int period; /* For Interrupt and Isochronous QHs */
144 unsigned int iso_frame; /* Frame # for iso_packet_desc */
145 int iso_status; /* Status for Isochronous URBs */
144 146
145 int state; /* QH_STATE_xxx; see above */ 147 int state; /* QH_STATE_xxx; see above */
146 int type; /* Queue type (control, bulk, etc) */ 148 int type; /* Queue type (control, bulk, etc) */
147 149
150 dma_addr_t dma_handle;
151
148 unsigned int initial_toggle:1; /* Endpoint's current toggle value */ 152 unsigned int initial_toggle:1; /* Endpoint's current toggle value */
149 unsigned int needs_fixup:1; /* Must fix the TD toggle values */ 153 unsigned int needs_fixup:1; /* Must fix the TD toggle values */
150 unsigned int is_stopped:1; /* Queue was stopped by error/unlink */ 154 unsigned int is_stopped:1; /* Queue was stopped by error/unlink */
@@ -386,6 +390,8 @@ struct uhci_hcd {
386 unsigned int frame_number; /* As of last check */ 390 unsigned int frame_number; /* As of last check */
387 unsigned int is_stopped; 391 unsigned int is_stopped;
388#define UHCI_IS_STOPPED 9999 /* Larger than a frame # */ 392#define UHCI_IS_STOPPED 9999 /* Larger than a frame # */
393 unsigned int last_iso_frame; /* Frame of last scan */
394 unsigned int cur_iso_frame; /* Frame for current scan */
389 395
390 unsigned int scan_in_progress:1; /* Schedule scan is running */ 396 unsigned int scan_in_progress:1; /* Schedule scan is running */
391 unsigned int need_rescan:1; /* Redo the schedule scan */ 397 unsigned int need_rescan:1; /* Redo the schedule scan */