]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | |
2 | #include <asm/types.h> | |
3 | #include <asm/ioctl.h> | |
4 | ||
5f848137 | 5 | #include <linux/usb/ch9.h> |
1da177e4 LT |
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 |