at v2.6.21 2.3 kB view raw
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 29enum 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 39struct 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