Dr Andrew Scott G7VAV

My photo
 
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


gadgetfs.h
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: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/