diff options
author | Tatyana Brokhman <tlinder@codeaurora.org> | 2011-06-29 09:41:50 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-07-01 17:27:05 -0400 |
commit | bdb64d727216b49a18c2b8337658adc6b2db82ea (patch) | |
tree | 93215946a88413fabb656d0cb868a86b2c72c8c1 /include/linux/usb/gadget.h | |
parent | 35a0e0bf6f6b2b900d461e9f35c286953b2b1afc (diff) |
usb: gadget: add SuperSpeed support to the Gadget Framework
SuperSpeed USB has defined a new descriptor, called
the Binary Device Object Store (BOS) Descriptor. It
has also changed a bit the definition of SET_FEATURE
and GET_STATUS requests to add USB3-specific details.
This patch implements both changes to the Composite
Gadget Framework.
[ balbi@ti.com : slight changes to commit log
fixed a compile error on ARM ]
Signed-off-by: Tatyana Brokhman <tlinder@codeaurora.org>
Signed-off-by: Felipe Balbi <balbi@ti.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include/linux/usb/gadget.h')
-rw-r--r-- | include/linux/usb/gadget.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 625971292c20..e22ce7e5a444 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h | |||
@@ -136,6 +136,8 @@ struct usb_ep_ops { | |||
136 | * the endpoint descriptor used to configure the endpoint. | 136 | * the endpoint descriptor used to configure the endpoint. |
137 | * @max_streams: The maximum number of streams supported | 137 | * @max_streams: The maximum number of streams supported |
138 | * by this EP (0 - 16, actual number is 2^n) | 138 | * by this EP (0 - 16, actual number is 2^n) |
139 | * @mult: multiplier, 'mult' value for SS Isoc EPs | ||
140 | * @maxburst: the maximum number of bursts supported by this EP (for usb3) | ||
139 | * @driver_data:for use by the gadget driver. | 141 | * @driver_data:for use by the gadget driver. |
140 | * @address: used to identify the endpoint when finding descriptor that | 142 | * @address: used to identify the endpoint when finding descriptor that |
141 | * matches connection speed | 143 | * matches connection speed |
@@ -156,6 +158,8 @@ struct usb_ep { | |||
156 | struct list_head ep_list; | 158 | struct list_head ep_list; |
157 | unsigned maxpacket:16; | 159 | unsigned maxpacket:16; |
158 | unsigned max_streams:16; | 160 | unsigned max_streams:16; |
161 | unsigned mult:2; | ||
162 | unsigned maxburst:4; | ||
159 | u8 address; | 163 | u8 address; |
160 | const struct usb_endpoint_descriptor *desc; | 164 | const struct usb_endpoint_descriptor *desc; |
161 | const struct usb_ss_ep_comp_descriptor *comp_desc; | 165 | const struct usb_ss_ep_comp_descriptor *comp_desc; |
@@ -426,6 +430,14 @@ static inline void usb_ep_fifo_flush(struct usb_ep *ep) | |||
426 | 430 | ||
427 | /*-------------------------------------------------------------------------*/ | 431 | /*-------------------------------------------------------------------------*/ |
428 | 432 | ||
433 | struct usb_dcd_config_params { | ||
434 | __u8 bU1devExitLat; /* U1 Device exit Latency */ | ||
435 | #define USB_DEFULT_U1_DEV_EXIT_LAT 0x01 /* Less then 1 microsec */ | ||
436 | __le16 bU2DevExitLat; /* U2 Device exit Latency */ | ||
437 | #define USB_DEFULT_U2_DEV_EXIT_LAT 0x1F4 /* Less then 500 microsec */ | ||
438 | }; | ||
439 | |||
440 | |||
429 | struct usb_gadget; | 441 | struct usb_gadget; |
430 | struct usb_gadget_driver; | 442 | struct usb_gadget_driver; |
431 | 443 | ||
@@ -441,6 +453,7 @@ struct usb_gadget_ops { | |||
441 | int (*pullup) (struct usb_gadget *, int is_on); | 453 | int (*pullup) (struct usb_gadget *, int is_on); |
442 | int (*ioctl)(struct usb_gadget *, | 454 | int (*ioctl)(struct usb_gadget *, |
443 | unsigned code, unsigned long param); | 455 | unsigned code, unsigned long param); |
456 | void (*get_config_params)(struct usb_dcd_config_params *); | ||
444 | int (*start)(struct usb_gadget_driver *, | 457 | int (*start)(struct usb_gadget_driver *, |
445 | int (*bind)(struct usb_gadget *)); | 458 | int (*bind)(struct usb_gadget *)); |
446 | int (*stop)(struct usb_gadget_driver *); | 459 | int (*stop)(struct usb_gadget_driver *); |
@@ -535,6 +548,24 @@ static inline int gadget_is_dualspeed(struct usb_gadget *g) | |||
535 | } | 548 | } |
536 | 549 | ||
537 | /** | 550 | /** |
551 | * gadget_is_superspeed() - return true if the hardware handles | ||
552 | * supperspeed | ||
553 | * @g: controller that might support supper speed | ||
554 | */ | ||
555 | static inline int gadget_is_superspeed(struct usb_gadget *g) | ||
556 | { | ||
557 | #ifdef CONFIG_USB_GADGET_SUPERSPEED | ||
558 | /* | ||
559 | * runtime test would check "g->is_superspeed" ... that might be | ||
560 | * useful to work around hardware bugs, but is mostly pointless | ||
561 | */ | ||
562 | return 1; | ||
563 | #else | ||
564 | return 0; | ||
565 | #endif | ||
566 | } | ||
567 | |||
568 | /** | ||
538 | * gadget_is_otg - return true iff the hardware is OTG-ready | 569 | * gadget_is_otg - return true iff the hardware is OTG-ready |
539 | * @g: controller that might have a Mini-AB connector | 570 | * @g: controller that might have a Mini-AB connector |
540 | * | 571 | * |