patch-2.3.51 linux/drivers/usb/uhci.h

Next file: linux/drivers/usb/usb-core.c
Previous file: linux/drivers/usb/uhci.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.3.50/linux/drivers/usb/uhci.h linux/drivers/usb/uhci.h
@@ -2,8 +2,7 @@
 #define __LINUX_UHCI_H
 
 #include <linux/list.h>
-
-#include "usb.h"
+#include <linux/usb.h>
 
 /*
  * This nested spinlock code is courtesy of Davide Libenzi <dlibenzi@maticad.it>
@@ -106,11 +105,12 @@
 	__u32 element;				/* Queue element pointer */
 
 	/* Software fields */
-	struct uhci_qh *prevqh, *nextqh;	/* Previous and next TD in queue */
+	/* Can't use list_head since we want a specific order */
+	struct uhci_qh *prevqh, *nextqh;
 
 	struct usb_device *dev;			/* The owning device */
 
-	struct list_head list;
+	struct list_head remove_list;
 } __attribute__((aligned(16)));
 
 struct uhci_framelist {
@@ -184,10 +184,10 @@
 
 	struct usb_device *dev;
 	struct urb *urb;		/* URB this TD belongs to */
-	struct uhci_td *next;		/* List of chained TD's for an URB */
-
-	struct list_head irq_list;	/* Active interrupt list.. */
-	struct list_head list;
+	/* We can't use list_head since we need a specific order */
+	struct ut_list {
+		struct uhci_td *prev, *next;
+	} list;
 } __attribute__((aligned(16)));
 
 /*
@@ -233,7 +233,7 @@
  * labels (below) are only signficant to the root hub's QH's
  */
 
-#define UHCI_NUM_SKELTD		9
+#define UHCI_NUM_SKELTD		10
 #define skel_int1_td		skeltd[0]
 #define skel_int2_td		skeltd[1]
 #define skel_int4_td		skeltd[2]
@@ -243,6 +243,7 @@
 #define skel_int64_td		skeltd[6]
 #define skel_int128_td		skeltd[7]
 #define skel_int256_td		skeltd[8]
+#define skel_term_td		skeltd[9]	/* To work around PIIX UHCI bug */
 
 #define UHCI_NUM_SKELQH		4
 #define skel_ls_control_qh	skelqh[0]
@@ -306,6 +307,7 @@
  * a subset of what the full implementation needs.
  */
 struct uhci {
+	/* Grabbed from PCI */
 	int irq;
 	unsigned int io_addr;
 	unsigned int io_size;
@@ -317,25 +319,32 @@
 	struct uhci_td skeltd[UHCI_NUM_SKELTD];	/* Skeleton TD's */
 	struct uhci_qh skelqh[UHCI_NUM_SKELQH];	/* Skeleton QH's */
 
+	spinlock_t framelist_lock;
 	struct uhci_framelist *fl;		/* Frame list */
+	int fsbr;				/* Full speed bandwidth reclamation */
 
-	struct s_nested_lock irqlist_lock;
-	struct list_head interrupt_list;	/* List of interrupt-active TD's for this uhci */
+	spinlock_t qh_remove_lock;
+	struct list_head qh_remove_list;
+
+	spinlock_t urb_remove_lock;
+	struct list_head urb_remove_list;
 
 	struct s_nested_lock urblist_lock;
 	struct list_head urb_list;
 
-	spinlock_t framelist_lock;
-
-	int fsbr;			/* Full speed bandwidth reclamation */
-
 	struct virt_root_hub rh;	/* private data of the virtual root hub */
 };
 
 struct urb_priv {
 	struct uhci_qh *qh;		/* QH for this URB */
-	struct uhci_td *begin;
-	struct uhci_td *end;
+
+	int fsbr;
+
+	unsigned long inserttime;	/* In jiffies */
+
+	struct up_list {
+		struct uhci_td *begin, *end;
+	} list;
 };
 
 /* -------------------------------------------------------------------------

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)