Rev 422 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
422 | giacomo | 1 | /*****************************************************************************/ |
2 | |||
3 | /* |
||
4 | * usbdevice_fs.h -- USB device file system. |
||
5 | * |
||
6 | * Copyright (C) 2000 |
||
7 | * Thomas Sailer (sailer@ife.ee.ethz.ch) |
||
8 | * |
||
9 | * This program is free software; you can redistribute it and/or modify |
||
10 | * it under the terms of the GNU General Public License as published by |
||
11 | * the Free Software Foundation; either version 2 of the License, or |
||
12 | * (at your option) any later version. |
||
13 | * |
||
14 | * This program is distributed in the hope that it will be useful, |
||
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||
17 | * GNU General Public License for more details. |
||
18 | * |
||
19 | * You should have received a copy of the GNU General Public License |
||
20 | * along with this program; if not, write to the Free Software |
||
21 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
||
22 | * |
||
23 | * History: |
||
24 | * 0.1 04.01.2000 Created |
||
25 | * |
||
26 | * $Id: usbdevice_fs.h,v 1.1 2004-01-28 15:26:57 giacomo Exp $ |
||
27 | */ |
||
28 | |||
29 | /*****************************************************************************/ |
||
30 | |||
31 | #ifndef _LINUX_USBDEVICE_FS_H |
||
32 | #define _LINUX_USBDEVICE_FS_H |
||
33 | |||
34 | #include <linux/types.h> |
||
35 | |||
36 | /* --------------------------------------------------------------------- */ |
||
37 | |||
38 | #define USBDEVICE_SUPER_MAGIC 0x9fa2 |
||
39 | |||
40 | /* usbdevfs ioctl codes */ |
||
41 | |||
42 | struct usbdevfs_ctrltransfer { |
||
43 | __u8 bRequestType; |
||
44 | __u8 bRequest; |
||
45 | __u16 wValue; |
||
46 | __u16 wIndex; |
||
47 | __u16 wLength; |
||
48 | __u32 timeout; /* in milliseconds */ |
||
49 | void __user *data; |
||
50 | }; |
||
51 | |||
52 | struct usbdevfs_bulktransfer { |
||
53 | unsigned int ep; |
||
54 | unsigned int len; |
||
55 | unsigned int timeout; /* in milliseconds */ |
||
56 | void __user *data; |
||
57 | }; |
||
58 | |||
59 | struct usbdevfs_setinterface { |
||
60 | unsigned int interface; |
||
61 | unsigned int altsetting; |
||
62 | }; |
||
63 | |||
64 | struct usbdevfs_disconnectsignal { |
||
65 | unsigned int signr; |
||
66 | void *context; |
||
67 | }; |
||
68 | |||
69 | #define USBDEVFS_MAXDRIVERNAME 255 |
||
70 | |||
71 | struct usbdevfs_getdriver { |
||
72 | unsigned int interface; |
||
73 | char driver[USBDEVFS_MAXDRIVERNAME + 1]; |
||
74 | }; |
||
75 | |||
76 | struct usbdevfs_connectinfo { |
||
77 | unsigned int devnum; |
||
78 | unsigned char slow; |
||
79 | }; |
||
80 | |||
81 | #define USBDEVFS_URB_SHORT_NOT_OK 1 |
||
82 | #define USBDEVFS_URB_ISO_ASAP 2 |
||
83 | |||
84 | #define USBDEVFS_URB_TYPE_ISO 0 |
||
85 | #define USBDEVFS_URB_TYPE_INTERRUPT 1 |
||
86 | #define USBDEVFS_URB_TYPE_CONTROL 2 |
||
87 | #define USBDEVFS_URB_TYPE_BULK 3 |
||
88 | |||
89 | struct usbdevfs_iso_packet_desc { |
||
90 | unsigned int length; |
||
91 | unsigned int actual_length; |
||
92 | unsigned int status; |
||
93 | }; |
||
94 | |||
95 | struct usbdevfs_urb { |
||
96 | unsigned char type; |
||
97 | unsigned char endpoint; |
||
98 | int status; |
||
99 | unsigned int flags; |
||
100 | void __user *buffer; |
||
101 | int buffer_length; |
||
102 | int actual_length; |
||
103 | int start_frame; |
||
104 | int number_of_packets; |
||
105 | int error_count; |
||
106 | unsigned int signr; /* signal to be sent on error, -1 if none should be sent */ |
||
107 | void *usercontext; |
||
108 | struct usbdevfs_iso_packet_desc iso_frame_desc[0]; |
||
109 | }; |
||
110 | |||
111 | /* ioctls for talking directly to drivers */ |
||
112 | struct usbdevfs_ioctl { |
||
113 | int ifno; /* interface 0..N ; negative numbers reserved */ |
||
114 | int ioctl_code; /* MUST encode size + direction of data so the |
||
115 | * macros in <asm/ioctl.h> give correct values */ |
||
116 | void __user *data; /* param buffer (in, or out) */ |
||
117 | }; |
||
118 | |||
119 | /* You can do most things with hubs just through control messages, |
||
120 | * except find out what device connects to what port. */ |
||
121 | struct usbdevfs_hub_portinfo { |
||
122 | char nports; /* number of downstream ports in this hub */ |
||
123 | char port [127]; /* e.g. port 3 connects to device 27 */ |
||
124 | }; |
||
125 | |||
126 | #define USBDEVFS_CONTROL _IOWR('U', 0, struct usbdevfs_ctrltransfer) |
||
127 | #define USBDEVFS_BULK _IOWR('U', 2, struct usbdevfs_bulktransfer) |
||
128 | #define USBDEVFS_RESETEP _IOR('U', 3, unsigned int) |
||
129 | #define USBDEVFS_SETINTERFACE _IOR('U', 4, struct usbdevfs_setinterface) |
||
130 | #define USBDEVFS_SETCONFIGURATION _IOR('U', 5, unsigned int) |
||
131 | #define USBDEVFS_GETDRIVER _IOW('U', 8, struct usbdevfs_getdriver) |
||
132 | #define USBDEVFS_SUBMITURB _IOR('U', 10, struct usbdevfs_urb) |
||
133 | #define USBDEVFS_DISCARDURB _IO('U', 11) |
||
134 | #define USBDEVFS_REAPURB _IOW('U', 12, void *) |
||
135 | #define USBDEVFS_REAPURBNDELAY _IOW('U', 13, void *) |
||
136 | #define USBDEVFS_DISCSIGNAL _IOR('U', 14, struct usbdevfs_disconnectsignal) |
||
137 | #define USBDEVFS_CLAIMINTERFACE _IOR('U', 15, unsigned int) |
||
138 | #define USBDEVFS_RELEASEINTERFACE _IOR('U', 16, unsigned int) |
||
139 | #define USBDEVFS_CONNECTINFO _IOW('U', 17, struct usbdevfs_connectinfo) |
||
140 | #define USBDEVFS_IOCTL _IOWR('U', 18, struct usbdevfs_ioctl) |
||
141 | #define USBDEVFS_HUB_PORTINFO _IOR('U', 19, struct usbdevfs_hub_portinfo) |
||
142 | #define USBDEVFS_RESET _IO('U', 20) |
||
143 | #define USBDEVFS_CLEAR_HALT _IOR('U', 21, unsigned int) |
||
144 | #define USBDEVFS_DISCONNECT _IO('U', 22) |
||
145 | #define USBDEVFS_CONNECT _IO('U', 23) |
||
146 | |||
147 | /* --------------------------------------------------------------------- */ |
||
148 | |||
149 | #ifdef __KERNEL__ |
||
150 | |||
151 | #include <linux/list.h> |
||
152 | #include <asm/semaphore.h> |
||
153 | |||
154 | |||
155 | struct dev_state { |
||
156 | struct list_head list; /* state list */ |
||
157 | struct rw_semaphore devsem; /* protects modifications to dev (dev == NULL indicating disconnect) */ |
||
158 | struct usb_device *dev; |
||
159 | struct file *file; |
||
160 | spinlock_t lock; /* protects the async urb lists */ |
||
161 | struct list_head async_pending; |
||
162 | struct list_head async_completed; |
||
163 | wait_queue_head_t wait; /* wake up if a request completed */ |
||
164 | unsigned int discsignr; |
||
165 | struct task_struct *disctask; |
||
166 | void *disccontext; |
||
167 | unsigned long ifclaimed; |
||
168 | }; |
||
169 | |||
170 | /* internal methods & data */ |
||
171 | extern struct usb_driver usbdevfs_driver; |
||
172 | extern struct file_operations usbdevfs_drivers_fops; |
||
173 | extern struct file_operations usbdevfs_devices_fops; |
||
174 | extern struct file_operations usbdevfs_device_file_operations; |
||
175 | extern struct inode_operations usbdevfs_device_inode_operations; |
||
176 | extern struct inode_operations usbdevfs_bus_inode_operations; |
||
177 | extern struct file_operations usbdevfs_bus_file_operations; |
||
178 | extern void usbdevfs_conn_disc_event(void); |
||
179 | |||
180 | #endif /* __KERNEL__ */ |
||
181 | |||
182 | /* --------------------------------------------------------------------- */ |
||
183 | #endif /* _LINUX_USBDEVICE_FS_H */ |