+// new struct from 2.6\r
+struct hc_driver {\r
+ const char *description; /* "ehci-hcd" etc */\r
+\r
+ /* irq handler */\r
+ irqreturn_t (*irq) (struct usb_hcd *hcd, struct pt_regs *regs);\r
+\r
+ int flags;\r
+#define HCD_MEMORY 0x0001 /* HC regs use memory (else I/O) */\r
+#define HCD_USB11 0x0010 /* USB 1.1 */\r
+#define HCD_USB2 0x0020 /* USB 2.0 */\r
+\r
+ /* called to init HCD and root hub */\r
+ int (*reset) (struct usb_hcd *hcd);\r
+ int (*start) (struct usb_hcd *hcd);\r
+\r
+ /* called after all devices were suspended */\r
+ int (*suspend) (struct usb_hcd *hcd, u32 state);\r
+\r
+ /* called before any devices get resumed */\r
+ int (*resume) (struct usb_hcd *hcd);\r
+\r
+ /* cleanly make HCD stop writing memory and doing I/O */\r
+ void (*stop) (struct usb_hcd *hcd);\r
+\r
+ /* return current frame number */\r
+ int (*get_frame_number) (struct usb_hcd *hcd);\r
+\r
+ /* memory lifecycle */\r
+ struct usb_hcd *(*hcd_alloc) (void);\r
+ void (*hcd_free) (struct usb_hcd *hcd);\r
+\r
+ /* manage i/o requests, device state */\r
+ int (*urb_enqueue) (struct usb_hcd *hcd, struct urb *urb,\r
+ int mem_flags);\r
+ int (*urb_dequeue) (struct usb_hcd *hcd, struct urb *urb);\r
+\r
+ /* hw synch, freeing endpoint resources that urb_dequeue can't */\r
+ void (*endpoint_disable)(struct usb_hcd *hcd,\r
+ struct hcd_dev *dev, int bEndpointAddress);\r
+\r
+ /* root hub support */\r
+ int (*hub_status_data) (struct usb_hcd *hcd, char *buf);\r
+ int (*hub_control) (struct usb_hcd *hcd,\r
+ u16 typeReq, u16 wValue, u16 wIndex,\r
+ char *buf, u16 wLength);\r
+};\r
+\r
+// old version, "just in case"\r
+#if 0\r