1 /* 2 * Filesystem based user-mode API to USB Gadget controller hardware 3 * 4 * Other than ep0 operations, most things are done by read() and write() 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; 8 * when it's closed, the device disconnects from usb. Operations on 9 * ep0 require ioctl() operations. 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 18 #ifndef __LINUX_USB_GADGETFS_H 19 #define __LINUX_USB_GADGETFS_H 20 21 #include <linux/types.h> 22 #include <linux/ioctl.h> 23 24 #include <linux/usb/ch9.h> 25 26 /* 27 * Events are delivered on the ep0 file descriptor, when the user mode driver 28 * reads from this file descriptor after writing the descriptors. Don't 29 * stop polling this descriptor. 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, 39 /* and likely more ! */ 40 }; 41 42 /* NOTE: this structure must stay the same size and layout on 43 * both 32-bit and 64-bit kernels. 44 */ 45 struct usb_gadgetfs_event { 46 union { 47 /* NOP, DISCONNECT, SUSPEND: nothing 48 * ... some hardware can't report disconnection 49 */ 50 51 /* CONNECT: just the speed */ 52 enum usb_device_speed speed; 53 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 */ 58 struct usb_ctrlrequest setup; 59 } u; 60 enum usb_gadgetfs_event_type type; 61 }; 62 63 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 69 /* endpoint ioctls */ 70 71 /* IN transfers may be reported to the gadget driver as complete 72 * when the fifo is loaded, before the host reads the data; 73 * OUT transfers may be reported to the host's "client" driver as 74 * complete when they're sitting in the FIFO unread. 75 * THIS returns how many bytes are "unclaimed" in the endpoint fifo 76 * (needed for precise fault handling, when the hardware allows it) 77 */ 78 #define GADGETFS_FIFO_STATUS _IO('g', 1) 79 80 /* discards any unclaimed data in the fifo. */ 81 #define GADGETFS_FIFO_FLUSH _IO('g', 2) 82 83 /* resets endpoint halt+toggle; used to implement set_interface. 84 * some hardware (like pxa2xx) can't support this. 85 */ 86 #define GADGETFS_CLEAR_HALT _IO('g', 3) 87 88 #endif /* __LINUX_USB_GADGETFS_H */ 89