1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef __LINUX_USB_SERIAL_H
14#define __LINUX_USB_SERIAL_H
15
16#include <linux/kref.h>
17#include <linux/mutex.h>
18#include <linux/serial.h>
19#include <linux/sysrq.h>
20#include <linux/kfifo.h>
21
22
23#define MAX_NUM_PORTS 16
24
25
26#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
27
28
29#define USB_SERIAL_WRITE_BUSY 0
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
64
65
66
67
68
69
70
71
72
73
74
75
76struct usb_serial_port {
77 struct usb_serial *serial;
78 struct tty_port port;
79 spinlock_t lock;
80 u32 minor;
81 u8 port_number;
82
83 unsigned char *interrupt_in_buffer;
84 struct urb *interrupt_in_urb;
85 __u8 interrupt_in_endpointAddress;
86
87 unsigned char *interrupt_out_buffer;
88 int interrupt_out_size;
89 struct urb *interrupt_out_urb;
90 __u8 interrupt_out_endpointAddress;
91
92 unsigned char *bulk_in_buffer;
93 int bulk_in_size;
94 struct urb *read_urb;
95 __u8 bulk_in_endpointAddress;
96
97 unsigned char *bulk_in_buffers[2];
98 struct urb *read_urbs[2];
99 unsigned long read_urbs_free;
100
101 unsigned char *bulk_out_buffer;
102 int bulk_out_size;
103 struct urb *write_urb;
104 struct kfifo write_fifo;
105
106 unsigned char *bulk_out_buffers[2];
107 struct urb *write_urbs[2];
108 unsigned long write_urbs_free;
109 __u8 bulk_out_endpointAddress;
110
111 struct async_icount icount;
112 int tx_bytes;
113
114 unsigned long flags;
115 wait_queue_head_t write_wait;
116 struct work_struct work;
117 char throttled;
118 char throttle_req;
119 unsigned long sysrq;
120 struct device dev;
121};
122#define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
123
124
125static inline void *usb_get_serial_port_data(struct usb_serial_port *port)
126{
127 return dev_get_drvdata(&port->dev);
128}
129
130static inline void usb_set_serial_port_data(struct usb_serial_port *port,
131 void *data)
132{
133 dev_set_drvdata(&port->dev, data);
134}
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152struct usb_serial {
153 struct usb_device *dev;
154 struct usb_serial_driver *type;
155 struct usb_interface *interface;
156 unsigned char disconnected:1;
157 unsigned char suspending:1;
158 unsigned char attached:1;
159 unsigned char minors_reserved:1;
160 unsigned char num_ports;
161 unsigned char num_port_pointers;
162 unsigned char num_interrupt_in;
163 unsigned char num_interrupt_out;
164 unsigned char num_bulk_in;
165 unsigned char num_bulk_out;
166 struct usb_serial_port *port[MAX_NUM_PORTS];
167 struct kref kref;
168 struct mutex disc_mutex;
169 void *private;
170};
171#define to_usb_serial(d) container_of(d, struct usb_serial, kref)
172
173
174static inline void *usb_get_serial_data(struct usb_serial *serial)
175{
176 return serial->private;
177}
178
179static inline void usb_set_serial_data(struct usb_serial *serial, void *data)
180{
181 serial->private = data;
182}
183
184struct usb_serial_endpoints {
185 unsigned char num_bulk_in;
186 unsigned char num_bulk_out;
187 unsigned char num_interrupt_in;
188 unsigned char num_interrupt_out;
189 struct usb_endpoint_descriptor *bulk_in[MAX_NUM_PORTS];
190 struct usb_endpoint_descriptor *bulk_out[MAX_NUM_PORTS];
191 struct usb_endpoint_descriptor *interrupt_in[MAX_NUM_PORTS];
192 struct usb_endpoint_descriptor *interrupt_out[MAX_NUM_PORTS];
193};
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243struct usb_serial_driver {
244 const char *description;
245 const struct usb_device_id *id_table;
246
247 struct list_head driver_list;
248 struct device_driver driver;
249 struct usb_driver *usb_driver;
250 struct usb_dynids dynids;
251
252 unsigned char num_ports;
253
254 unsigned char num_bulk_in;
255 unsigned char num_bulk_out;
256 unsigned char num_interrupt_in;
257 unsigned char num_interrupt_out;
258
259 size_t bulk_in_size;
260 size_t bulk_out_size;
261
262 int (*probe)(struct usb_serial *serial, const struct usb_device_id *id);
263 int (*attach)(struct usb_serial *serial);
264 int (*calc_num_ports)(struct usb_serial *serial,
265 struct usb_serial_endpoints *epds);
266
267 void (*disconnect)(struct usb_serial *serial);
268 void (*release)(struct usb_serial *serial);
269
270 int (*port_probe)(struct usb_serial_port *port);
271 int (*port_remove)(struct usb_serial_port *port);
272
273 int (*suspend)(struct usb_serial *serial, pm_message_t message);
274 int (*resume)(struct usb_serial *serial);
275 int (*reset_resume)(struct usb_serial *serial);
276
277
278
279 int (*open)(struct tty_struct *tty, struct usb_serial_port *port);
280 void (*close)(struct usb_serial_port *port);
281 int (*write)(struct tty_struct *tty, struct usb_serial_port *port,
282 const unsigned char *buf, int count);
283
284 int (*write_room)(struct tty_struct *tty);
285 int (*ioctl)(struct tty_struct *tty,
286 unsigned int cmd, unsigned long arg);
287 void (*set_termios)(struct tty_struct *tty,
288 struct usb_serial_port *port, struct ktermios *old);
289 void (*break_ctl)(struct tty_struct *tty, int break_state);
290 int (*chars_in_buffer)(struct tty_struct *tty);
291 void (*wait_until_sent)(struct tty_struct *tty, long timeout);
292 bool (*tx_empty)(struct usb_serial_port *port);
293 void (*throttle)(struct tty_struct *tty);
294 void (*unthrottle)(struct tty_struct *tty);
295 int (*tiocmget)(struct tty_struct *tty);
296 int (*tiocmset)(struct tty_struct *tty,
297 unsigned int set, unsigned int clear);
298 int (*tiocmiwait)(struct tty_struct *tty, unsigned long arg);
299 int (*get_icount)(struct tty_struct *tty,
300 struct serial_icounter_struct *icount);
301
302
303 void (*dtr_rts)(struct usb_serial_port *port, int on);
304 int (*carrier_raised)(struct usb_serial_port *port);
305
306
307 void (*init_termios)(struct tty_struct *tty);
308
309 void (*read_int_callback)(struct urb *urb);
310 void (*write_int_callback)(struct urb *urb);
311 void (*read_bulk_callback)(struct urb *urb);
312 void (*write_bulk_callback)(struct urb *urb);
313
314 void (*process_read_urb)(struct urb *urb);
315
316 int (*prepare_write_buffer)(struct usb_serial_port *port,
317 void *dest, size_t size);
318};
319#define to_usb_serial_driver(d) \
320 container_of(d, struct usb_serial_driver, driver)
321
322extern int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[],
323 const char *name, const struct usb_device_id *id_table);
324extern void usb_serial_deregister_drivers(struct usb_serial_driver *const serial_drivers[]);
325extern void usb_serial_port_softint(struct usb_serial_port *port);
326
327extern int usb_serial_suspend(struct usb_interface *intf, pm_message_t message);
328extern int usb_serial_resume(struct usb_interface *intf);
329
330
331#ifdef CONFIG_USB_SERIAL_CONSOLE
332extern void usb_serial_console_init(int minor);
333extern void usb_serial_console_exit(void);
334extern void usb_serial_console_disconnect(struct usb_serial *serial);
335#else
336static inline void usb_serial_console_init(int minor) { }
337static inline void usb_serial_console_exit(void) { }
338static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
339#endif
340
341
342extern struct usb_serial_port *usb_serial_port_get_by_minor(unsigned int minor);
343extern void usb_serial_put(struct usb_serial *serial);
344extern int usb_serial_generic_open(struct tty_struct *tty,
345 struct usb_serial_port *port);
346extern int usb_serial_generic_write_start(struct usb_serial_port *port,
347 gfp_t mem_flags);
348extern int usb_serial_generic_write(struct tty_struct *tty,
349 struct usb_serial_port *port, const unsigned char *buf, int count);
350extern void usb_serial_generic_close(struct usb_serial_port *port);
351extern int usb_serial_generic_resume(struct usb_serial *serial);
352extern int usb_serial_generic_write_room(struct tty_struct *tty);
353extern int usb_serial_generic_chars_in_buffer(struct tty_struct *tty);
354extern void usb_serial_generic_wait_until_sent(struct tty_struct *tty,
355 long timeout);
356extern void usb_serial_generic_read_bulk_callback(struct urb *urb);
357extern void usb_serial_generic_write_bulk_callback(struct urb *urb);
358extern void usb_serial_generic_throttle(struct tty_struct *tty);
359extern void usb_serial_generic_unthrottle(struct tty_struct *tty);
360extern int usb_serial_generic_tiocmiwait(struct tty_struct *tty,
361 unsigned long arg);
362extern int usb_serial_generic_get_icount(struct tty_struct *tty,
363 struct serial_icounter_struct *icount);
364extern int usb_serial_generic_register(void);
365extern void usb_serial_generic_deregister(void);
366extern int usb_serial_generic_submit_read_urbs(struct usb_serial_port *port,
367 gfp_t mem_flags);
368extern void usb_serial_generic_process_read_urb(struct urb *urb);
369extern int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port,
370 void *dest, size_t size);
371extern int usb_serial_handle_sysrq_char(struct usb_serial_port *port,
372 unsigned int ch);
373extern int usb_serial_handle_break(struct usb_serial_port *port);
374extern void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port,
375 struct tty_struct *tty,
376 unsigned int status);
377
378
379extern int usb_serial_bus_register(struct usb_serial_driver *device);
380extern void usb_serial_bus_deregister(struct usb_serial_driver *device);
381
382extern struct bus_type usb_serial_bus_type;
383extern struct tty_driver *usb_serial_tty_driver;
384
385static inline void usb_serial_debug_data(struct device *dev,
386 const char *function, int size,
387 const unsigned char *data)
388{
389 dev_dbg(dev, "%s - length = %d, data = %*ph\n",
390 function, size, size, data);
391}
392
393
394
395
396
397#define dev_err_console(usport, fmt, ...) \
398do { \
399 static bool __print_once; \
400 struct usb_serial_port *__port = (usport); \
401 \
402 if (!__port->port.console || !__print_once) { \
403 __print_once = true; \
404 dev_err(&__port->dev, fmt, ##__VA_ARGS__); \
405 } \
406} while (0)
407
408
409
410
411
412
413
414
415
416
417
418
419#define usb_serial_module_driver(__name, __serial_drivers, __ids) \
420static int __init usb_serial_module_init(void) \
421{ \
422 return usb_serial_register_drivers(__serial_drivers, \
423 __name, __ids); \
424} \
425module_init(usb_serial_module_init); \
426static void __exit usb_serial_module_exit(void) \
427{ \
428 usb_serial_deregister_drivers(__serial_drivers); \
429} \
430module_exit(usb_serial_module_exit);
431
432#define module_usb_serial_driver(__serial_drivers, __ids) \
433 usb_serial_module_driver(KBUILD_MODNAME, __serial_drivers, __ids)
434
435#endif
436
437