Skip to content

Commit

Permalink
USB: split hub.h into ch11.h and merge-in hcd.h
Browse files Browse the repository at this point in the history
Base on inputs from Alan Stern, split the hub.h header into:
- new ch11.h header (most of it) containing constants and
  structures from chapter 11 of the USB 2.0 spec.
- a small remaining part being merged into hcd.h.

Signed-of-by: Eric Lescouet <eric@lescouet.org>
Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Eric Lescouet authored and Greg Kroah-Hartman committed May 20, 2010
1 parent d65d7e7 commit d20db4b
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 41 deletions.
47 changes: 7 additions & 40 deletions include/linux/usb/hub.h → include/linux/usb/ch11.h
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
#ifndef __LINUX_HUB_H
#define __LINUX_HUB_H

/*
* Hub protocol and driver data structures.
* This file holds Hub protocol constants and data structures that are
* defined in chapter 11 (Hub Specification) of the USB 2.0 specification.
*
* Some of these are known to the "virtual root hub" code
* in host controller drivers.
* It is used/shared between the USB core, the HCDs and couple of other USB
* drivers.
*/

#ifndef __LINUX_HUB_H
#define __LINUX_HUB_H

#include <linux/list.h>
#include <linux/workqueue.h>
#include <linux/compiler.h> /* likely()/unlikely() */
Expand Down Expand Up @@ -162,44 +163,10 @@ enum hub_led_mode {
INDICATOR_ALT_BLINK, INDICATOR_ALT_BLINK_OFF
} __attribute__ ((packed));

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).
* The other type grows from high speed hubs when they connect to
* full/low speed devices using "Transaction Translators" (TTs).
*
* TTs should only be known to the hub driver, and high speed bus
* drivers (only EHCI for now). They affect periodic scheduling and
* sometimes control/bulk error recovery.
*/
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;
struct list_head clear_list; /* of usb_tt_clear */
struct work_struct clear_work;
};

struct usb_tt_clear {
struct list_head clear_list;
unsigned tt;
u16 devinfo;
struct usb_hcd *hcd;
struct usb_host_endpoint *ep;
};

extern int usb_hub_clear_tt_buffer(struct urb *urb);
extern void usb_ep0_reinit(struct usb_device *);

#endif /* __LINUX_HUB_H */
37 changes: 36 additions & 1 deletion include/linux/usb/hcd.h
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,42 @@ extern void usb_destroy_configuration(struct usb_device *dev);
* HCD Root Hub support
*/

#include <linux/usb/hub.h>
#include <linux/usb/ch11.h>

/*
* 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).
* The other type grows from high speed hubs when they connect to
* full/low speed devices using "Transaction Translators" (TTs).
*
* TTs should only be known to the hub driver, and high speed bus
* drivers (only EHCI for now). They affect periodic scheduling and
* sometimes control/bulk error recovery.
*/

struct usb_device;

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;
struct list_head clear_list; /* of usb_tt_clear */
struct work_struct clear_work;
};

struct usb_tt_clear {
struct list_head clear_list;
unsigned tt;
u16 devinfo;
struct usb_hcd *hcd;
struct usb_host_endpoint *ep;
};

extern int usb_hub_clear_tt_buffer(struct urb *urb);
extern void usb_ep0_reinit(struct usb_device *);

/* (shifted) direction/type/recipient from the USB 2.0 spec, table 9.2 */
#define DeviceRequest \
Expand Down

0 comments on commit d20db4b

Please sign in to comment.