Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * Filesystem based user-mode API to USB Gadget controller hardware | |
3 | * | |
a5262dcf | 4 | * Other than ep0 operations, most things are done by read() and write() |
1da177e4 LT |
5 | * on endpoint files found in one directory. They are configured by |
6 | * writing descriptors, and then may be used for normal stream style | |
7 | * i/o requests. When ep0 is configured, the device can enumerate; | |
a5262dcf DB |
8 | * when it's closed, the device disconnects from usb. Operations on |
9 | * ep0 require ioctl() operations. | |
1da177e4 LT |
10 | * |
11 | * Configuration and device descriptors get written to /dev/gadget/$CHIP, | |
12 | * which may then be used to read usb_gadgetfs_event structs. The driver | |
13 | * may activate endpoints as it handles SET_CONFIGURATION setup events, | |
14 | * or earlier; writing endpoint descriptors to /dev/gadget/$ENDPOINT | |
15 | * then performing data transfers by reading or writing. | |
16 | */ | |
17 | ||
dda43a0e RD |
18 | #ifndef __LINUX_USB_GADGETFS_H |
19 | #define __LINUX_USB_GADGETFS_H | |
20 | ||
4c866d44 | 21 | #include <linux/types.h> |
dda43a0e RD |
22 | #include <asm/ioctl.h> |
23 | ||
24 | #include <linux/usb/ch9.h> | |
25 | ||
1da177e4 | 26 | /* |
a5262dcf | 27 | * Events are delivered on the ep0 file descriptor, when the user mode driver |
1da177e4 | 28 | * reads from this file descriptor after writing the descriptors. Don't |
a5262dcf | 29 | * stop polling this descriptor. |
1da177e4 LT |
30 | */ |
31 | ||
32 | enum usb_gadgetfs_event_type { | |
33 | GADGETFS_NOP = 0, | |
34 | ||
35 | GADGETFS_CONNECT, | |
36 | GADGETFS_DISCONNECT, | |
37 | GADGETFS_SETUP, | |
38 | GADGETFS_SUSPEND, | |
41dceed5 | 39 | /* and likely more ! */ |
1da177e4 LT |
40 | }; |
41 | ||
a5262dcf DB |
42 | /* NOTE: this structure must stay the same size and layout on |
43 | * both 32-bit and 64-bit kernels. | |
44 | */ | |
1da177e4 | 45 | struct usb_gadgetfs_event { |
1da177e4 | 46 | union { |
41dceed5 GKH |
47 | /* NOP, DISCONNECT, SUSPEND: nothing |
48 | * ... some hardware can't report disconnection | |
49 | */ | |
1da177e4 | 50 | |
41dceed5 | 51 | /* CONNECT: just the speed */ |
1da177e4 LT |
52 | enum usb_device_speed speed; |
53 | ||
41dceed5 GKH |
54 | /* SETUP: packet; DATA phase i/o precedes next event |
55 | *(setup.bmRequestType & USB_DIR_IN) flags direction | |
56 | * ... includes SET_CONFIGURATION, SET_INTERFACE | |
57 | */ | |
1da177e4 LT |
58 | struct usb_ctrlrequest setup; |
59 | } u; | |
a5262dcf | 60 | enum usb_gadgetfs_event_type type; |
1da177e4 LT |
61 | }; |
62 | ||
63 | ||
25a010c8 CN |
64 | /* The 'g' code is also used by printer gadget ioctl requests. |
65 | * Don't add any colliding codes to either driver, and keep | |
66 | * them in unique ranges (size 0x20 for now). | |
67 | */ | |
68 | ||
1da177e4 LT |
69 | /* endpoint ioctls */ |
70 | ||
71 | /* IN transfers may be reported to the gadget driver as complete | |
a5262dcf | 72 | * when the fifo is loaded, before the host reads the data; |
1da177e4 | 73 | * OUT transfers may be reported to the host's "client" driver as |
a5262dcf | 74 | * complete when they're sitting in the FIFO unread. |
1da177e4 LT |
75 | * THIS returns how many bytes are "unclaimed" in the endpoint fifo |
76 | * (needed for precise fault handling, when the hardware allows it) | |
77 | */ | |
41dceed5 | 78 | #define GADGETFS_FIFO_STATUS _IO('g', 1) |
1da177e4 LT |
79 | |
80 | /* discards any unclaimed data in the fifo. */ | |
41dceed5 | 81 | #define GADGETFS_FIFO_FLUSH _IO('g', 2) |
1da177e4 LT |
82 | |
83 | /* resets endpoint halt+toggle; used to implement set_interface. | |
84 | * some hardware (like pxa2xx) can't support this. | |
85 | */ | |
41dceed5 | 86 | #define GADGETFS_CLEAR_HALT _IO('g', 3) |
1da177e4 | 87 | |
a5262dcf | 88 | #endif /* __LINUX_USB_GADGETFS_H */ |