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