* See USB 2.0 spec Table 11-19 and Table 11-20
*/
struct usb_port_status {
- __u16 wPortStatus;
- __u16 wPortChange;
+ __le16 wPortStatus;
+ __le16 wPortChange;
} __attribute__ ((packed));
/*
#define HUB_CHAR_PORTIND 0x0080 /* D7 */
struct usb_hub_status {
- __u16 wHubStatus;
- __u16 wHubChange;
+ __le16 wHubStatus;
+ __le16 wHubChange;
} __attribute__ ((packed));
/*
__u8 bDescLength;
__u8 bDescriptorType;
__u8 bNbrPorts;
- __u16 wHubCharacteristics;
+ __le16 wHubCharacteristics;
__u8 bPwrOn2PwrGood;
__u8 bHubContrCurrent;
/* add 1 bit for hub status change; round to bytes */
struct usb_device;
+/* Transaction Translator Think Times, in bits */
+#define HUB_TTTT_8_BITS 0x00
+#define HUB_TTTT_16_BITS 0x20
+#define HUB_TTTT_24_BITS 0x40
+#define HUB_TTTT_32_BITS 0x60
+
/*
* As of USB 2.0, full/low speed devices are segregated into trees.
* One type grows from USB 1.1 host controllers (OHCI, UHCI etc).
struct usb_tt {
struct usb_device *hub; /* upstream highspeed hub */
int multi; /* true means one TT per port */
+ unsigned think_time; /* think time in ns */
/* for control/bulk error recovery (CLEAR_TT_BUFFER) */
spinlock_t lock;
extern void usb_hub_tt_clear_buffer (struct usb_device *dev, int pipe);
-struct usb_hub {
- struct usb_interface *intf; /* the "real" device */
- struct urb *urb; /* for interrupt polling pipe */
- struct completion *urb_complete; /* wait for urb to end */
- unsigned int urb_active:1;
-
- /* buffer for urb ... 1 bit each for hub and children, rounded up */
- char (*buffer)[(USB_MAXCHILDREN + 1 + 7) / 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 hub_list; /* all hubs */
- struct list_head event_list; /* hubs w/data or errs ready */
-
- struct usb_hub_descriptor *descriptor; /* class descriptor */
- struct semaphore khubd_sem;
- struct usb_tt tt; /* Transaction Translator */
-
- u8 power_budget; /* in 2mA units; or zero */
-
- unsigned has_indicators:1;
- enum hub_led_mode indicator[USB_MAXCHILDREN];
- struct work_struct leds;
-};
-
#endif /* __LINUX_HUB_H */