Merge branch 'upstream-linus' of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik...
[linux-2.6] / include / linux / usb_gadgetfs.h
1
2 #include <asm/types.h>
3 #include <asm/ioctl.h>
4
5 #include <linux/usb_ch9.h>
6
7 /*
8  * Filesystem based user-mode API to USB Gadget controller hardware
9  *
10  * Almost everything can be done with only read and write operations,
11  * on endpoint files found in one directory.  They are configured by
12  * writing descriptors, and then may be used for normal stream style
13  * i/o requests.  When ep0 is configured, the device can enumerate;
14  * when it's closed, the device disconnects from usb.
15  *
16  * Configuration and device descriptors get written to /dev/gadget/$CHIP,
17  * which may then be used to read usb_gadgetfs_event structs.  The driver
18  * may activate endpoints as it handles SET_CONFIGURATION setup events,
19  * or earlier; writing endpoint descriptors to /dev/gadget/$ENDPOINT
20  * then performing data transfers by reading or writing.
21  */
22
23 /*
24  * Events are delivered on the ep0 file descriptor, if the user mode driver
25  * reads from this file descriptor after writing the descriptors.  Don't
26  * stop polling this descriptor, if you write that kind of driver.
27  */
28
29 enum usb_gadgetfs_event_type {
30         GADGETFS_NOP = 0,
31
32         GADGETFS_CONNECT,
33         GADGETFS_DISCONNECT,
34         GADGETFS_SETUP,
35         GADGETFS_SUSPEND,
36         // and likely more !
37 };
38
39 struct usb_gadgetfs_event {
40         enum usb_gadgetfs_event_type    type;
41         union {
42                 // NOP, DISCONNECT, SUSPEND: nothing
43                 // ... some hardware can't report disconnection
44
45                 // CONNECT: just the speed
46                 enum usb_device_speed   speed;
47
48                 // SETUP: packet; DATA phase i/o precedes next event
49                 // (setup.bmRequestType & USB_DIR_IN) flags direction 
50                 // ... includes SET_CONFIGURATION, SET_INTERFACE
51                 struct usb_ctrlrequest  setup;
52         } u;
53 };
54
55
56 /* endpoint ioctls */
57
58 /* IN transfers may be reported to the gadget driver as complete
59  *      when the fifo is loaded, before the host reads the data;
60  * OUT transfers may be reported to the host's "client" driver as
61  *      complete when they're sitting in the FIFO unread.
62  * THIS returns how many bytes are "unclaimed" in the endpoint fifo
63  * (needed for precise fault handling, when the hardware allows it)
64  */
65 #define GADGETFS_FIFO_STATUS    _IO('g',1)
66
67 /* discards any unclaimed data in the fifo. */
68 #define GADGETFS_FIFO_FLUSH     _IO('g',2)
69
70 /* resets endpoint halt+toggle; used to implement set_interface.
71  * some hardware (like pxa2xx) can't support this.
72  */
73 #define GADGETFS_CLEAR_HALT     _IO('g',3)
74
75