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#include <linux/serial.h>
20#include <linux/kfifo.h>
21
22
23#define MAX_NUM_PORTS 16
24
25
26#define USB_SERIAL_WRITE_BUSY 0
27#define USB_SERIAL_THROTTLED 1
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
64
65
66
67
68
69
70
71
72struct usb_serial_port {
73 struct usb_serial *serial;
74 struct tty_port port;
75 spinlock_t lock;
76 u32 minor;
77 u8 port_number;
78
79 unsigned char *interrupt_in_buffer;
80 struct urb *interrupt_in_urb;
81 __u8 interrupt_in_endpointAddress;
82
83 unsigned char *interrupt_out_buffer;
84 int interrupt_out_size;
85 struct urb *interrupt_out_urb;
86 __u8 interrupt_out_endpointAddress;
87
88 unsigned char *bulk_in_buffer;
89 int bulk_in_size;
90 struct urb *read_urb;
91 __u8 bulk_in_endpointAddress;
92
93 unsigned char *bulk_in_buffers[2];
94 struct urb *read_urbs[2];
95 unsigned long read_urbs_free;
96
97 unsigned char *bulk_out_buffer;
98 int bulk_out_size;
99 struct urb *write_urb;
100 struct kfifo write_fifo;
101
102 unsigned char *bulk_out_buffers[2];
103 struct urb *write_urbs[2];
104 unsigned long write_urbs_free;
105 __u8 bulk_out_endpointAddress;
106
107 struct async_icount icount;
108 int tx_bytes;
109
110 unsigned long flags;
111 wait_queue_head_t write_wait;
112 struct work_struct work;
113 unsigned long sysrq;
114 struct device dev;
115};
116#define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
117
118
119static inline void *usb_get_serial_port_data(struct usb_serial_port *port)
120{
121 return dev_get_drvdata(&port->dev);
122}
123
124static inline void usb_set_serial_port_data(struct usb_serial_port *port,
125 void *data)
126{
127 dev_set_drvdata(&port->dev, data);
128}
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146struct usb_serial {
147 struct usb_device *dev;
148 struct usb_serial_driver *type;
149 struct usb_interface *interface;
150 unsigned char disconnected:1;
151 unsigned char suspending:1;
152 unsigned char attached:1;
153 unsigned char minors_reserved:1;
154 unsigned char num_ports;
155 unsigned char num_port_pointers;
156 unsigned char num_interrupt_in;
157 unsigned char num_interrupt_out;
158 unsigned char num_bulk_in;
159 unsigned char num_bulk_out;
160 struct usb_serial_port *port[MAX_NUM_PORTS];
161 struct kref kref;
162 struct mutex disc_mutex;
163 void *private;
164};
165#define to_usb_serial(d) container_of(d, struct usb_serial, kref)
166
167
168static inline void *usb_get_serial_data(struct usb_serial *serial)
169{
170 return serial->private;
171}
172
173static inline void usb_set_serial_data(struct usb_serial *serial, void *data)
174{
175 serial->private = data;
176}
177
178struct usb_serial_endpoints {
179 unsigned char num_bulk_in;
180 unsigned char num_bulk_out;
181 unsigned char num_interrupt_in;
182 unsigned char num_interrupt_out;
183 struct usb_endpoint_descriptor *bulk_in[MAX_NUM_PORTS];
184 struct usb_endpoint_descriptor *bulk_out[MAX_NUM_PORTS];
185 struct usb_endpoint_descriptor *interrupt_in[MAX_NUM_PORTS];
186 struct usb_endpoint_descriptor *interrupt_out[MAX_NUM_PORTS];
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
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
237struct usb_serial_driver {
238 const char *description;
239 const struct usb_device_id *id_table;
240
241 struct list_head driver_list;
242 struct device_driver driver;
243 struct usb_driver *usb_driver;
244 struct usb_dynids dynids;
245
246 unsigned char num_ports;
247
248 unsigned char num_bulk_in;
249 unsigned char num_bulk_out;
250 unsigned char num_interrupt_in;
251 unsigned char num_interrupt_out;
252
253 size_t bulk_in_size;
254 size_t bulk_out_size;
255
256 int (*probe)(struct usb_serial *serial, const struct usb_device_id *id);
257 int (*attach)(struct usb_serial *serial);
258 int (*calc_num_ports)(struct usb_serial *serial,
259 struct usb_serial_endpoints *epds);
260
261 void (*disconnect)(struct usb_serial *serial);
262 void (*release)(struct usb_serial *serial);
263
264 int (*port_probe)(struct usb_serial_port *port);
265 int (*port_remove)(struct usb_serial_port *port);
266
267 int (*suspend)(struct usb_serial *serial, pm_message_t message);
268 int (*resume)(struct usb_serial *serial);
269 int (*reset_resume)(struct usb_serial *serial);
270
271
272
273 int (*open)(struct tty_struct *tty, struct usb_serial_port *port);
274 void (*close)(struct usb_serial_port *port);
275 int (*write)(struct tty_struct *tty, struct usb_serial_port *port,
276 const unsigned char *buf, int count);
277
278 int (*write_room)(struct tty_struct *tty);
279 int (*ioctl)(struct tty_struct *tty,
280 unsigned int cmd, unsigned long arg);
281 int (*get_serial)(struct tty_struct *tty, struct serial_struct *ss);
282 int (*set_serial)(struct tty_struct *tty, struct serial_struct *ss);
283 void (*set_termios)(struct tty_struct *tty,
284 struct usb_serial_port *port, struct ktermios *old);
285 void (*break_ctl)(struct tty_struct *tty, int break_state);
286 int (*chars_in_buffer)(struct tty_struct *tty);
287 void (*wait_until_sent)(struct tty_struct *tty, long timeout);
288 bool (*tx_empty)(struct usb_serial_port *port);
289 void (*throttle)(struct tty_struct *tty);
290 void (*unthrottle)(struct tty_struct *tty);
291 int (*tiocmget)(struct tty_struct *tty);
292 int (*tiocmset)(struct tty_struct *tty,
293 unsigned int set, unsigned int clear);
294 int (*tiocmiwait)(struct tty_struct *tty, unsigned long arg);
295 int (*get_icount)(struct tty_struct *tty,
296 struct serial_icounter_struct *icount);
297
298
299 void (*dtr_rts)(struct usb_serial_port *port, int on);
300 int (*carrier_raised)(struct usb_serial_port *port);
301
302
303 void (*init_termios)(struct tty_struct *tty);
304
305 void (*read_int_callback)(struct urb *urb);
306 void (*write_int_callback)(struct urb *urb);
307 void (*read_bulk_callback)(struct urb *urb);
308 void (*write_bulk_callback)(struct urb *urb);
309
310 void (*process_read_urb)(struct urb *urb);
311
312 int (*prepare_write_buffer)(struct usb_serial_port *port,
313 void *dest, size_t size);
314};
315#define to_usb_serial_driver(d) \
316 container_of(d, struct usb_serial_driver, driver)
317
318int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[],
319 const char *name, const struct usb_device_id *id_table);
320void usb_serial_deregister_drivers(struct usb_serial_driver *const serial_drivers[]);
321void usb_serial_port_softint(struct usb_serial_port *port);
322
323int usb_serial_suspend(struct usb_interface *intf, pm_message_t message);
324int usb_serial_resume(struct usb_interface *intf);
325
326
327#ifdef CONFIG_USB_SERIAL_CONSOLE
328void usb_serial_console_init(int minor);
329void usb_serial_console_exit(void);
330void usb_serial_console_disconnect(struct usb_serial *serial);
331#else
332static inline void usb_serial_console_init(int minor) { }
333static inline void usb_serial_console_exit(void) { }
334static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
335#endif
336
337
338struct usb_serial_port *usb_serial_port_get_by_minor(unsigned int minor);
339void usb_serial_put(struct usb_serial *serial);
340int usb_serial_generic_open(struct tty_struct *tty, struct usb_serial_port *port);
341int usb_serial_generic_write_start(struct usb_serial_port *port, gfp_t mem_flags);
342int usb_serial_generic_write(struct tty_struct *tty, struct usb_serial_port *port,
343 const unsigned char *buf, int count);
344void usb_serial_generic_close(struct usb_serial_port *port);
345int usb_serial_generic_resume(struct usb_serial *serial);
346int usb_serial_generic_write_room(struct tty_struct *tty);
347int usb_serial_generic_chars_in_buffer(struct tty_struct *tty);
348void usb_serial_generic_wait_until_sent(struct tty_struct *tty, long timeout);
349void usb_serial_generic_read_bulk_callback(struct urb *urb);
350void usb_serial_generic_write_bulk_callback(struct urb *urb);
351void usb_serial_generic_throttle(struct tty_struct *tty);
352void usb_serial_generic_unthrottle(struct tty_struct *tty);
353int usb_serial_generic_tiocmiwait(struct tty_struct *tty, unsigned long arg);
354int usb_serial_generic_get_icount(struct tty_struct *tty, struct serial_icounter_struct *icount);
355int usb_serial_generic_register(void);
356void usb_serial_generic_deregister(void);
357int usb_serial_generic_submit_read_urbs(struct usb_serial_port *port, gfp_t mem_flags);
358void usb_serial_generic_process_read_urb(struct urb *urb);
359int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port, void *dest, size_t size);
360
361#if defined(CONFIG_USB_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
362int usb_serial_handle_sysrq_char(struct usb_serial_port *port, unsigned int ch);
363int usb_serial_handle_break(struct usb_serial_port *port);
364#else
365static inline int usb_serial_handle_sysrq_char(struct usb_serial_port *port, unsigned int ch)
366{
367 return 0;
368}
369static inline int usb_serial_handle_break(struct usb_serial_port *port)
370{
371 return 0;
372}
373#endif
374
375void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port,
376 struct tty_struct *tty, unsigned int status);
377
378
379int usb_serial_bus_register(struct usb_serial_driver *device);
380void 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