|
@@ -31,6 +31,48 @@
|
|
#include "hcd.h"
|
|
#include "hcd.h"
|
|
#include "hub.h"
|
|
#include "hub.h"
|
|
|
|
|
|
|
|
+struct usb_hub {
|
|
|
|
+ struct device *intfdev; /* the "interface" device */
|
|
|
|
+ struct usb_device *hdev;
|
|
|
|
+ struct urb *urb; /* for interrupt polling pipe */
|
|
|
|
+
|
|
|
|
+ /* buffer for urb ... with extra space in case of babble */
|
|
|
|
+ char (*buffer)[8];
|
|
|
|
+ dma_addr_t buffer_dma; /* DMA address for buffer */
|
|
|
|
+ union {
|
|
|
|
+ struct usb_hub_status hub;
|
|
|
|
+ struct usb_port_status port;
|
|
|
|
+ } *status; /* buffer for status reports */
|
|
|
|
+
|
|
|
|
+ int error; /* last reported error */
|
|
|
|
+ int nerrors; /* track consecutive errors */
|
|
|
|
+
|
|
|
|
+ struct list_head event_list; /* hubs w/data or errs ready */
|
|
|
|
+ unsigned long event_bits[1]; /* status change bitmask */
|
|
|
|
+ unsigned long change_bits[1]; /* ports with logical connect
|
|
|
|
+ status change */
|
|
|
|
+ unsigned long busy_bits[1]; /* ports being reset or
|
|
|
|
+ resumed */
|
|
|
|
+#if USB_MAXCHILDREN > 31 /* 8*sizeof(unsigned long) - 1 */
|
|
|
|
+#error event_bits[] is too short!
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+ struct usb_hub_descriptor *descriptor; /* class descriptor */
|
|
|
|
+ struct usb_tt tt; /* Transaction Translator */
|
|
|
|
+
|
|
|
|
+ unsigned mA_per_port; /* current for each child */
|
|
|
|
+
|
|
|
|
+ unsigned limited_power:1;
|
|
|
|
+ unsigned quiescing:1;
|
|
|
|
+ unsigned activating:1;
|
|
|
|
+ unsigned resume_root_hub:1;
|
|
|
|
+
|
|
|
|
+ unsigned has_indicators:1;
|
|
|
|
+ u8 indicator[USB_MAXCHILDREN];
|
|
|
|
+ struct work_struct leds;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+
|
|
/* Protect struct usb_device->state and ->children members
|
|
/* Protect struct usb_device->state and ->children members
|
|
* Note: Both are also protected by ->dev.sem, except that ->state can
|
|
* Note: Both are also protected by ->dev.sem, except that ->state can
|
|
* change to USB_STATE_NOTATTACHED even when the semaphore isn't held. */
|
|
* change to USB_STATE_NOTATTACHED even when the semaphore isn't held. */
|