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
144
145
146struct usb_serial {
147 struct usb_device *dev;
148 struct usb_serial_driver *type;
149 struct usb_interface *interface;
150 struct usb_interface *sibling;
151 unsigned int suspend_count;
152 unsigned char disconnected:1;
153 unsigned char attached:1;
154 unsigned char minors_reserved:1;
155 unsigned char num_ports;
156 unsigned char num_port_pointers;
157 unsigned char num_interrupt_in;
158 unsigned char num_interrupt_out;
159 unsigned char num_bulk_in;
160 unsigned char num_bulk_out;
161 struct usb_serial_port *port[MAX_NUM_PORTS];
162 struct kref kref;
163 struct mutex disc_mutex;
164 void *private;
165};
166#define to_usb_serial(d) container_of(d, struct usb_serial, kref)
167
168
169static inline void *usb_get_serial_data(struct usb_serial *serial)
170{
171 return serial->private;
172}
173
174static inline void usb_set_serial_data(struct usb_serial *serial, void *data)
175{
176 serial->private = data;
177}
178
179struct usb_serial_endpoints {
180 unsigned char num_bulk_in;
181 unsigned char num_bulk_out;
182 unsigned char num_interrupt_in;
183 unsigned char num_interrupt_out;
184 struct usb_endpoint_descriptor *bulk_in[MAX_NUM_PORTS];
185 struct usb_endpoint_descriptor *bulk_out[MAX_NUM_PORTS];
186 struct usb_endpoint_descriptor *interrupt_in[MAX_NUM_PORTS];
187 struct usb_endpoint_descriptor *interrupt_out[MAX_NUM_PORTS];
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
237
238struct usb_serial_driver {
239 const char *description;
240 const struct usb_device_id *id_table;
241
242 struct list_head driver_list;
243 struct device_driver driver;
244 struct usb_driver *usb_driver;
245 struct usb_dynids dynids;
246
247 unsigned char num_ports;
248
249 unsigned char num_bulk_in;
250 unsigned char num_bulk_out;
251 unsigned char num_interrupt_in;
252 unsigned char num_interrupt_out;
253
254 size_t bulk_in_size;
255 size_t bulk_out_size;
256
257 int (*probe)(struct usb_serial *serial, const struct usb_device_id *id);
258 int (*attach)(struct usb_serial *serial);
259 int (*calc_num_ports)(struct usb_serial *serial,
260 struct usb_serial_endpoints *epds);
261
262 void (*disconnect)(struct usb_serial *serial);
263 void (*release)(struct usb_serial *serial);
264
265 int (*port_probe)(struct usb_serial_port *port);
266 void (*port_remove)(struct usb_serial_port *port);
267
268 int (*suspend)(struct usb_serial *serial, pm_message_t message);
269 int (*resume)(struct usb_serial *serial);
270 int (*reset_resume)(struct usb_serial *serial);
271
272
273
274 int (*open)(struct tty_struct *tty, struct usb_serial_port *port);
275 void (*close)(struct usb_serial_port *port);
276 int (*write)(struct tty_struct *tty, struct usb_serial_port *port,
277 const unsigned char *buf, int count);
278
279 unsigned int (*write_room)(struct tty_struct *tty);
280 int (*ioctl)(struct tty_struct *tty,
281 unsigned int cmd, unsigned long arg);
282 void (*get_serial)(struct tty_struct *tty, struct serial_struct *ss);
283 int (*set_serial)(struct tty_struct *tty, struct serial_struct *ss);
284 void (*set_termios)(struct tty_struct *tty,
285 struct usb_serial_port *port, struct ktermios *old);
286 void (*break_ctl)(struct tty_struct *tty, int break_state);
287 unsigned int (*chars_in_buffer)(struct tty_struct *tty);
288 void (*wait_until_sent)(struct tty_struct *tty, long timeout);
289 bool (*tx_empty)(struct usb_serial_port *port);
290 void (*throttle)(struct tty_struct *tty);
291 void (*unthrottle)(struct tty_struct *tty);
292 int (*tiocmget)(struct tty_struct *tty);
293 int (*tiocmset)(struct tty_struct *tty,
294 unsigned int set, unsigned int clear);
295 int (*tiocmiwait)(struct tty_struct *tty, unsigned long arg);
296 int (*get_icount)(struct tty_struct *tty,
297 struct serial_icounter_struct *icount);
298
299
300 void (*dtr_rts)(struct usb_serial_port *port, int on);
301 int (*carrier_raised)(struct usb_serial_port *port);
302
303
304 void (*init_termios)(struct tty_struct *tty);
305
306 void (*read_int_callback)(struct urb *urb);
307 void (*write_int_callback)(struct urb *urb);
308 void (*read_bulk_callback)(struct urb *urb);
309 void (*write_bulk_callback)(struct urb *urb);
310
311 void (*process_read_urb)(struct urb *urb);
312
313 int (*prepare_write_buffer)(struct usb_serial_port *port,
314 void *dest, size_t size);
315};
316#define to_usb_serial_driver(d) \
317 container_of(d, struct usb_serial_driver, driver)
318
319int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[],
320 const char *name, const struct usb_device_id *id_table);
321void usb_serial_deregister_drivers(struct usb_serial_driver *const serial_drivers[]);
322void usb_serial_port_softint(struct usb_serial_port *port);
323
324int usb_serial_suspend(struct usb_interface *intf, pm_message_t message);
325int usb_serial_resume(struct usb_interface *intf);
326
327
328#ifdef CONFIG_USB_SERIAL_CONSOLE
329void usb_serial_console_init(int minor);
330void usb_serial_console_exit(void);
331void usb_serial_console_disconnect(struct usb_serial *serial);
332#else
333static inline void usb_serial_console_init(int minor) { }
334static inline void usb_serial_console_exit(void) { }
335static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
336#endif
337
338
339struct usb_serial_port *usb_serial_port_get_by_minor(unsigned int minor);
340void usb_serial_put(struct usb_serial *serial);
341
342int usb_serial_claim_interface(struct usb_serial *serial, struct usb_interface *intf);
343
344int usb_serial_generic_open(struct tty_struct *tty, struct usb_serial_port *port);
345int usb_serial_generic_write_start(struct usb_serial_port *port, gfp_t mem_flags);
346int usb_serial_generic_write(struct tty_struct *tty, struct usb_serial_port *port,
347 const unsigned char *buf, int count);
348void usb_serial_generic_close(struct usb_serial_port *port);
349int usb_serial_generic_resume(struct usb_serial *serial);
350unsigned int usb_serial_generic_write_room(struct tty_struct *tty);
351unsigned int usb_serial_generic_chars_in_buffer(struct tty_struct *tty);
352void usb_serial_generic_wait_until_sent(struct tty_struct *tty, long timeout);
353void usb_serial_generic_read_bulk_callback(struct urb *urb);
354void usb_serial_generic_write_bulk_callback(struct urb *urb);
355void usb_serial_generic_throttle(struct tty_struct *tty);
356void usb_serial_generic_unthrottle(struct tty_struct *tty);
357int usb_serial_generic_tiocmiwait(struct tty_struct *tty, unsigned long arg);
358int usb_serial_generic_get_icount(struct tty_struct *tty, struct serial_icounter_struct *icount);
359int usb_serial_generic_register(void);
360void usb_serial_generic_deregister(void);
361int usb_serial_generic_submit_read_urbs(struct usb_serial_port *port, gfp_t mem_flags);
362void usb_serial_generic_process_read_urb(struct urb *urb);
363int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port, void *dest, size_t size);
364
365#if defined(CONFIG_USB_SERIAL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
366int usb_serial_handle_sysrq_char(struct usb_serial_port *port, unsigned int ch);
367int usb_serial_handle_break(struct usb_serial_port *port);
368#else
369static inline int usb_serial_handle_sysrq_char(struct usb_serial_port *port, unsigned int ch)
370{
371 return 0;
372}
373static inline int usb_serial_handle_break(struct usb_serial_port *port)
374{
375 return 0;
376}
377#endif
378
379void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port,
380 struct tty_struct *tty, unsigned int status);
381
382
383int usb_serial_bus_register(struct usb_serial_driver *device);
384void usb_serial_bus_deregister(struct usb_serial_driver *device);
385
386extern struct bus_type usb_serial_bus_type;
387extern struct tty_driver *usb_serial_tty_driver;
388
389static inline void usb_serial_debug_data(struct device *dev,
390 const char *function, int size,
391 const unsigned char *data)
392{
393 dev_dbg(dev, "%s - length = %d, data = %*ph\n",
394 function, size, size, data);
395}
396
397
398
399
400
401#define dev_err_console(usport, fmt, ...) \
402do { \
403 static bool __print_once; \
404 struct usb_serial_port *__port = (usport); \
405 \
406 if (!__port->port.console || !__print_once) { \
407 __print_once = true; \
408 dev_err(&__port->dev, fmt, ##__VA_ARGS__); \
409 } \
410} while (0)
411
412
413
414
415
416
417
418
419
420
421
422
423#define usb_serial_module_driver(__name, __serial_drivers, __ids) \
424static int __init usb_serial_module_init(void) \
425{ \
426 return usb_serial_register_drivers(__serial_drivers, \
427 __name, __ids); \
428} \
429module_init(usb_serial_module_init); \
430static void __exit usb_serial_module_exit(void) \
431{ \
432 usb_serial_deregister_drivers(__serial_drivers); \
433} \
434module_exit(usb_serial_module_exit);
435
436#define module_usb_serial_driver(__serial_drivers, __ids) \
437 usb_serial_module_driver(KBUILD_MODNAME, __serial_drivers, __ids)
438
439#endif
440
441