June 2025 | ||||||
Mo | Tu | We | Th | Fr | Sa | Su |
26 | 27 | 28 | 29 | 30 | 31 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 1 | 2 | 3 | 4 | 5 | 6 |
01: /* 02: * Filesystem based user-mode API to USB Gadget controller hardware 03: * 04: * Other than ep0 operations, most things are done by read() and write() 05: * on endpoint files found in one directory. They are configured by 06: * writing descriptors, and then may be used for normal stream style 07: * i/o requests. When ep0 is configured, the device can enumerate; 08: * when it's closed, the device disconnects from usb. Operations on 09: * 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: