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 8
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 char num_interrupt_in;
163 char num_interrupt_out;
164 char num_bulk_in;
165 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
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
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227struct usb_serial_driver {
228 const char *description;
229 const struct usb_device_id *id_table;
230 char num_ports;
231
232 struct list_head driver_list;
233 struct device_driver driver;
234 struct usb_driver *usb_driver;
235 struct usb_dynids dynids;
236
237 size_t bulk_in_size;
238 size_t bulk_out_size;
239
240 int (*probe)(struct usb_serial *serial, const struct usb_device_id *id);
241 int (*attach)(struct usb_serial *serial);
242 int (*calc_num_ports) (struct usb_serial *serial);
243
244 void (*disconnect)(struct usb_serial *serial);
245 void (*release)(struct usb_serial *serial);
246
247 int (*port_probe)(struct usb_serial_port *port);
248 int (*port_remove)(struct usb_serial_port *port);
249
250 int (*suspend)(struct usb_serial *serial, pm_message_t message);
251 int (*resume)(struct usb_serial *serial);
252 int (*reset_resume)(struct usb_serial *serial);
253
254
255
256 int (*open)(struct tty_struct *tty, struct usb_serial_port *port);
257 void (*close)(struct usb_serial_port *port);
258 int (*write)(struct tty_struct *tty, struct usb_serial_port *port,
259 const unsigned char *buf, int count);
260
261 int (*write_room)(struct tty_struct *tty);
262 int (*ioctl)(struct tty_struct *tty,
263 unsigned int cmd, unsigned long arg);
264 void (*set_termios)(struct tty_struct *tty,
265 struct usb_serial_port *port, struct ktermios *old);
266 void (*break_ctl)(struct tty_struct *tty, int break_state);
267 int (*chars_in_buffer)(struct tty_struct *tty);
268 void (*wait_until_sent)(struct tty_struct *tty, long timeout);
269 bool (*tx_empty)(struct usb_serial_port *port);
270 void (*throttle)(struct tty_struct *tty);
271 void (*unthrottle)(struct tty_struct *tty);
272 int (*tiocmget)(struct tty_struct *tty);
273 int (*tiocmset)(struct tty_struct *tty,
274 unsigned int set, unsigned int clear);
275 int (*tiocmiwait)(struct tty_struct *tty, unsigned long arg);
276 int (*get_icount)(struct tty_struct *tty,
277 struct serial_icounter_struct *icount);
278
279
280 void (*dtr_rts)(struct usb_serial_port *port, int on);
281 int (*carrier_raised)(struct usb_serial_port *port);
282
283
284 void (*init_termios)(struct tty_struct *tty);
285
286 void (*read_int_callback)(struct urb *urb);
287 void (*write_int_callback)(struct urb *urb);
288 void (*read_bulk_callback)(struct urb *urb);
289 void (*write_bulk_callback)(struct urb *urb);
290
291 void (*process_read_urb)(struct urb *urb);
292
293 int (*prepare_write_buffer)(struct usb_serial_port *port,
294 void *dest, size_t size);
295};
296#define to_usb_serial_driver(d) \
297 container_of(d, struct usb_serial_driver, driver)
298
299extern int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[],
300 const char *name, const struct usb_device_id *id_table);
301extern void usb_serial_deregister_drivers(struct usb_serial_driver *const serial_drivers[]);
302extern void usb_serial_port_softint(struct usb_serial_port *port);
303
304extern int usb_serial_suspend(struct usb_interface *intf, pm_message_t message);
305extern int usb_serial_resume(struct usb_interface *intf);
306
307
308#ifdef CONFIG_USB_SERIAL_CONSOLE
309extern void usb_serial_console_init(int minor);
310extern void usb_serial_console_exit(void);
311extern void usb_serial_console_disconnect(struct usb_serial *serial);
312#else
313static inline void usb_serial_console_init(int minor) { }
314static inline void usb_serial_console_exit(void) { }
315static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
316#endif
317
318
319extern struct usb_serial_port *usb_serial_port_get_by_minor(unsigned int minor);
320extern void usb_serial_put(struct usb_serial *serial);
321extern int usb_serial_generic_open(struct tty_struct *tty,
322 struct usb_serial_port *port);
323extern int usb_serial_generic_write_start(struct usb_serial_port *port,
324 gfp_t mem_flags);
325extern int usb_serial_generic_write(struct tty_struct *tty,
326 struct usb_serial_port *port, const unsigned char *buf, int count);
327extern void usb_serial_generic_close(struct usb_serial_port *port);
328extern int usb_serial_generic_resume(struct usb_serial *serial);
329extern int usb_serial_generic_write_room(struct tty_struct *tty);
330extern int usb_serial_generic_chars_in_buffer(struct tty_struct *tty);
331extern void usb_serial_generic_wait_until_sent(struct tty_struct *tty,
332 long timeout);
333extern void usb_serial_generic_read_bulk_callback(struct urb *urb);
334extern void usb_serial_generic_write_bulk_callback(struct urb *urb);
335extern void usb_serial_generic_throttle(struct tty_struct *tty);
336extern void usb_serial_generic_unthrottle(struct tty_struct *tty);
337extern int usb_serial_generic_tiocmiwait(struct tty_struct *tty,
338 unsigned long arg);
339extern int usb_serial_generic_get_icount(struct tty_struct *tty,
340 struct serial_icounter_struct *icount);
341extern int usb_serial_generic_register(void);
342extern void usb_serial_generic_deregister(void);
343extern int usb_serial_generic_submit_read_urbs(struct usb_serial_port *port,
344 gfp_t mem_flags);
345extern void usb_serial_generic_process_read_urb(struct urb *urb);
346extern int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port,
347 void *dest, size_t size);
348extern int usb_serial_handle_sysrq_char(struct usb_serial_port *port,
349 unsigned int ch);
350extern int usb_serial_handle_break(struct usb_serial_port *port);
351extern void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port,
352 struct tty_struct *tty,
353 unsigned int status);
354
355
356extern int usb_serial_bus_register(struct usb_serial_driver *device);
357extern void usb_serial_bus_deregister(struct usb_serial_driver *device);
358
359extern struct usb_serial_driver usb_serial_generic_device;
360extern struct bus_type usb_serial_bus_type;
361extern struct tty_driver *usb_serial_tty_driver;
362
363static inline void usb_serial_debug_data(struct device *dev,
364 const char *function, int size,
365 const unsigned char *data)
366{
367 dev_dbg(dev, "%s - length = %d, data = %*ph\n",
368 function, size, size, data);
369}
370
371
372
373
374
375#define dev_err_console(usport, fmt, ...) \
376do { \
377 static bool __print_once; \
378 struct usb_serial_port *__port = (usport); \
379 \
380 if (!__port->port.console || !__print_once) { \
381 __print_once = true; \
382 dev_err(&__port->dev, fmt, ##__VA_ARGS__); \
383 } \
384} while (0)
385
386
387
388
389
390
391
392
393
394
395
396
397#define usb_serial_module_driver(__name, __serial_drivers, __ids) \
398static int __init usb_serial_module_init(void) \
399{ \
400 return usb_serial_register_drivers(__serial_drivers, \
401 __name, __ids); \
402} \
403module_init(usb_serial_module_init); \
404static void __exit usb_serial_module_exit(void) \
405{ \
406 usb_serial_deregister_drivers(__serial_drivers); \
407} \
408module_exit(usb_serial_module_exit);
409
410#define module_usb_serial_driver(__serial_drivers, __ids) \
411 usb_serial_module_driver(KBUILD_MODNAME, __serial_drivers, __ids)
412
413#endif
414
415