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