1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef __LINUX_USB_SERIAL_H
15#define __LINUX_USB_SERIAL_H
16
17#include <linux/kref.h>
18#include <linux/mutex.h>
19
20#define SERIAL_TTY_MAJOR 188
21#define SERIAL_TTY_MINORS 255
22
23
24#define MAX_NUM_PORTS 8
25
26
27#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64struct usb_serial_port {
65 struct usb_serial *serial;
66 struct tty_struct *tty;
67 spinlock_t lock;
68 struct mutex mutex;
69 unsigned char number;
70
71 unsigned char *interrupt_in_buffer;
72 struct urb *interrupt_in_urb;
73 __u8 interrupt_in_endpointAddress;
74
75 unsigned char *interrupt_out_buffer;
76 int interrupt_out_size;
77 struct urb *interrupt_out_urb;
78 __u8 interrupt_out_endpointAddress;
79
80 unsigned char *bulk_in_buffer;
81 int bulk_in_size;
82 struct urb *read_urb;
83 __u8 bulk_in_endpointAddress;
84
85 unsigned char *bulk_out_buffer;
86 int bulk_out_size;
87 struct urb *write_urb;
88 int write_urb_busy;
89 __u8 bulk_out_endpointAddress;
90
91 wait_queue_head_t write_wait;
92 struct work_struct work;
93 int open_count;
94 char throttled;
95 char throttle_req;
96 char console;
97 struct device dev;
98};
99#define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
100
101
102static inline void *usb_get_serial_port_data(struct usb_serial_port *port)
103{
104 return dev_get_drvdata(&port->dev);
105}
106
107static inline void usb_set_serial_port_data(struct usb_serial_port *port,
108 void *data)
109{
110 dev_set_drvdata(&port->dev, data);
111}
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130struct usb_serial {
131 struct usb_device *dev;
132 struct usb_serial_driver *type;
133 struct usb_interface *interface;
134 unsigned char disconnected;
135 unsigned char minor;
136 unsigned char num_ports;
137 unsigned char num_port_pointers;
138 char num_interrupt_in;
139 char num_interrupt_out;
140 char num_bulk_in;
141 char num_bulk_out;
142 struct usb_serial_port *port[MAX_NUM_PORTS];
143 struct kref kref;
144 struct mutex disc_mutex;
145 void *private;
146};
147#define to_usb_serial(d) container_of(d, struct usb_serial, kref)
148
149#define NUM_DONT_CARE 99
150
151
152static inline void *usb_get_serial_data(struct usb_serial *serial)
153{
154 return serial->private;
155}
156
157static inline void usb_set_serial_data(struct usb_serial *serial, void *data)
158{
159 serial->private = data;
160}
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212struct usb_serial_driver {
213 const char *description;
214 const struct usb_device_id *id_table;
215 char num_interrupt_in;
216 char num_interrupt_out;
217 char num_bulk_in;
218 char num_bulk_out;
219 char num_ports;
220
221 struct list_head driver_list;
222 struct device_driver driver;
223 struct usb_driver *usb_driver;
224 struct usb_dynids dynids;
225
226 int (*probe)(struct usb_serial *serial, const struct usb_device_id *id);
227 int (*attach)(struct usb_serial *serial);
228 int (*calc_num_ports) (struct usb_serial *serial);
229
230 void (*shutdown)(struct usb_serial *serial);
231
232 int (*port_probe)(struct usb_serial_port *port);
233 int (*port_remove)(struct usb_serial_port *port);
234
235 int (*suspend)(struct usb_serial *serial, pm_message_t message);
236 int (*resume)(struct usb_serial *serial);
237
238
239 int (*open)(struct usb_serial_port *port, struct file *filp);
240 void (*close)(struct usb_serial_port *port, struct file *filp);
241 int (*write)(struct usb_serial_port *port, const unsigned char *buf,
242 int count);
243 int (*write_room)(struct usb_serial_port *port);
244 int (*ioctl)(struct usb_serial_port *port, struct file *file,
245 unsigned int cmd, unsigned long arg);
246 void (*set_termios)(struct usb_serial_port *port, struct ktermios *old);
247 void (*break_ctl)(struct usb_serial_port *port, int break_state);
248 int (*chars_in_buffer)(struct usb_serial_port *port);
249 void (*throttle)(struct usb_serial_port *port);
250 void (*unthrottle)(struct usb_serial_port *port);
251 int (*tiocmget)(struct usb_serial_port *port, struct file *file);
252 int (*tiocmset)(struct usb_serial_port *port, struct file *file,
253 unsigned int set, unsigned int clear);
254
255 void (*read_int_callback)(struct urb *urb);
256 void (*write_int_callback)(struct urb *urb);
257 void (*read_bulk_callback)(struct urb *urb);
258 void (*write_bulk_callback)(struct urb *urb);
259};
260#define to_usb_serial_driver(d) \
261 container_of(d, struct usb_serial_driver, driver)
262
263extern int usb_serial_register(struct usb_serial_driver *driver);
264extern void usb_serial_deregister(struct usb_serial_driver *driver);
265extern void usb_serial_port_softint(struct usb_serial_port *port);
266
267extern int usb_serial_probe(struct usb_interface *iface,
268 const struct usb_device_id *id);
269extern void usb_serial_disconnect(struct usb_interface *iface);
270
271extern int usb_serial_suspend(struct usb_interface *intf, pm_message_t message);
272extern int usb_serial_resume(struct usb_interface *intf);
273
274extern int ezusb_writememory(struct usb_serial *serial, int address,
275 unsigned char *data, int length, __u8 bRequest);
276extern int ezusb_set_reset(struct usb_serial *serial, unsigned char reset_bit);
277
278
279#ifdef CONFIG_USB_SERIAL_CONSOLE
280extern void usb_serial_console_init(int debug, int minor);
281extern void usb_serial_console_exit(void);
282extern void usb_serial_console_disconnect(struct usb_serial *serial);
283#else
284static inline void usb_serial_console_init(int debug, int minor) { }
285static inline void usb_serial_console_exit(void) { }
286static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
287#endif
288
289
290extern struct usb_serial *usb_serial_get_by_index(unsigned int minor);
291extern void usb_serial_put(struct usb_serial *serial);
292extern int usb_serial_generic_open(struct usb_serial_port *port,
293 struct file *filp);
294extern int usb_serial_generic_write(struct usb_serial_port *port,
295 const unsigned char *buf, int count);
296extern void usb_serial_generic_close(struct usb_serial_port *port,
297 struct file *filp);
298extern int usb_serial_generic_resume(struct usb_serial *serial);
299extern int usb_serial_generic_write_room(struct usb_serial_port *port);
300extern int usb_serial_generic_chars_in_buffer(struct usb_serial_port *port);
301extern void usb_serial_generic_read_bulk_callback(struct urb *urb);
302extern void usb_serial_generic_write_bulk_callback(struct urb *urb);
303extern void usb_serial_generic_throttle(struct usb_serial_port *port);
304extern void usb_serial_generic_unthrottle(struct usb_serial_port *port);
305extern void usb_serial_generic_shutdown(struct usb_serial *serial);
306extern int usb_serial_generic_register(int debug);
307extern void usb_serial_generic_deregister(void);
308
309extern int usb_serial_bus_register(struct usb_serial_driver *device);
310extern void usb_serial_bus_deregister(struct usb_serial_driver *device);
311
312extern struct usb_serial_driver usb_serial_generic_device;
313extern struct bus_type usb_serial_bus_type;
314extern struct tty_driver *usb_serial_tty_driver;
315
316static inline void usb_serial_debug_data(int debug,
317 struct device *dev,
318 const char *function, int size,
319 const unsigned char *data)
320{
321 int i;
322
323 if (debug) {
324 dev_printk(KERN_DEBUG, dev, "%s - length = %d, data = ",
325 function, size);
326 for (i = 0; i < size; ++i)
327 printk("%.2x ", data[i]);
328 printk("\n");
329 }
330}
331
332
333#undef dbg
334#define dbg(format, arg...) \
335 do { \
336 if (debug) \
337 printk(KERN_DEBUG "%s: " format "\n" , __FILE__ , \
338 ## arg); \
339 } while (0)
340
341
342
343#endif
344
345