Subversion Repositories shark

Rev

Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 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
 
29
enum 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
 
39
struct 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