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/sysrq.h>
19#include <linux/kfifo.h>
20
21#define SERIAL_TTY_MAJOR 188
22#define SERIAL_TTY_MINORS 254
23#define SERIAL_TTY_NO_MINOR 255
24
25
26#define MAX_NUM_PORTS 8
27
28
29#define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
30
31
32#define USB_SERIAL_WRITE_BUSY 0
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 unsigned char 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 int tx_bytes;
112
113 unsigned long flags;
114 wait_queue_head_t write_wait;
115 struct work_struct work;
116 char throttled;
117 char throttle_req;
118 unsigned long sysrq;
119 struct device dev;
120};
121#define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
122
123
124static inline void *usb_get_serial_port_data(struct usb_serial_port *port)
125{
126 return dev_get_drvdata(&port->dev);
127}
128
129static inline void usb_set_serial_port_data(struct usb_serial_port *port,
130 void *data)
131{
132 dev_set_drvdata(&port->dev, data);
133}
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 minor;
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
253
254
255 int (*open)(struct tty_struct *tty, struct usb_serial_port *port);
256 void (*close)(struct usb_serial_port *port);
257 int (*write)(struct tty_struct *tty, struct usb_serial_port *port,
258 const unsigned char *buf, int count);
259
260 int (*write_room)(struct tty_struct *tty);
261 int (*ioctl)(struct tty_struct *tty,
262 unsigned int cmd, unsigned long arg);
263 void (*set_termios)(struct tty_struct *tty,
264 struct usb_serial_port *port, struct ktermios *old);
265 void (*break_ctl)(struct tty_struct *tty, int break_state);
266 int (*chars_in_buffer)(struct tty_struct *tty);
267 void (*throttle)(struct tty_struct *tty);
268 void (*unthrottle)(struct tty_struct *tty);
269 int (*tiocmget)(struct tty_struct *tty);
270 int (*tiocmset)(struct tty_struct *tty,
271 unsigned int set, unsigned int clear);
272 int (*get_icount)(struct tty_struct *tty,
273 struct serial_icounter_struct *icount);
274
275
276 void (*dtr_rts)(struct usb_serial_port *port, int on);
277 int (*carrier_raised)(struct usb_serial_port *port);
278
279
280 void (*init_termios)(struct tty_struct *tty);
281
282 void (*read_int_callback)(struct urb *urb);
283 void (*write_int_callback)(struct urb *urb);
284 void (*read_bulk_callback)(struct urb *urb);
285 void (*write_bulk_callback)(struct urb *urb);
286
287 void (*process_read_urb)(struct urb *urb);
288
289 int (*prepare_write_buffer)(struct usb_serial_port *port,
290 void *dest, size_t size);
291};
292#define to_usb_serial_driver(d) \
293 container_of(d, struct usb_serial_driver, driver)
294
295extern int usb_serial_register_drivers(struct usb_driver *udriver,
296 struct usb_serial_driver * const serial_drivers[]);
297extern void usb_serial_deregister_drivers(struct usb_driver *udriver,
298 struct usb_serial_driver * const serial_drivers[]);
299extern void usb_serial_port_softint(struct usb_serial_port *port);
300
301extern int usb_serial_probe(struct usb_interface *iface,
302 const struct usb_device_id *id);
303extern void usb_serial_disconnect(struct usb_interface *iface);
304
305extern int usb_serial_suspend(struct usb_interface *intf, pm_message_t message);
306extern int usb_serial_resume(struct usb_interface *intf);
307
308extern int ezusb_writememory(struct usb_serial *serial, int address,
309 unsigned char *data, int length, __u8 bRequest);
310extern int ezusb_set_reset(struct usb_serial *serial, unsigned char reset_bit);
311
312
313#ifdef CONFIG_USB_SERIAL_CONSOLE
314extern void usb_serial_console_init(int debug, int minor);
315extern void usb_serial_console_exit(void);
316extern void usb_serial_console_disconnect(struct usb_serial *serial);
317#else
318static inline void usb_serial_console_init(int debug, int minor) { }
319static inline void usb_serial_console_exit(void) { }
320static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
321#endif
322
323
324extern struct usb_serial *usb_serial_get_by_index(unsigned int minor);
325extern void usb_serial_put(struct usb_serial *serial);
326extern int usb_serial_generic_open(struct tty_struct *tty,
327 struct usb_serial_port *port);
328extern int usb_serial_generic_write(struct tty_struct *tty,
329 struct usb_serial_port *port, const unsigned char *buf, int count);
330extern void usb_serial_generic_close(struct usb_serial_port *port);
331extern int usb_serial_generic_resume(struct usb_serial *serial);
332extern int usb_serial_generic_write_room(struct tty_struct *tty);
333extern int usb_serial_generic_chars_in_buffer(struct tty_struct *tty);
334extern void usb_serial_generic_read_bulk_callback(struct urb *urb);
335extern void usb_serial_generic_write_bulk_callback(struct urb *urb);
336extern void usb_serial_generic_throttle(struct tty_struct *tty);
337extern void usb_serial_generic_unthrottle(struct tty_struct *tty);
338extern void usb_serial_generic_disconnect(struct usb_serial *serial);
339extern void usb_serial_generic_release(struct usb_serial *serial);
340extern int usb_serial_generic_register(int debug);
341extern void usb_serial_generic_deregister(void);
342extern int usb_serial_generic_submit_read_urbs(struct usb_serial_port *port,
343 gfp_t mem_flags);
344extern void usb_serial_generic_process_read_urb(struct urb *urb);
345extern int usb_serial_generic_prepare_write_buffer(struct usb_serial_port *port,
346 void *dest, size_t size);
347extern int usb_serial_handle_sysrq_char(struct usb_serial_port *port,
348 unsigned int ch);
349extern int usb_serial_handle_break(struct usb_serial_port *port);
350extern void usb_serial_handle_dcd_change(struct usb_serial_port *usb_port,
351 struct tty_struct *tty,
352 unsigned int status);
353
354
355extern int usb_serial_bus_register(struct usb_serial_driver *device);
356extern void usb_serial_bus_deregister(struct usb_serial_driver *device);
357
358extern struct usb_serial_driver usb_serial_generic_device;
359extern struct bus_type usb_serial_bus_type;
360extern struct tty_driver *usb_serial_tty_driver;
361
362static inline void usb_serial_debug_data(int debug,
363 struct device *dev,
364 const char *function, int size,
365 const unsigned char *data)
366{
367 int i;
368
369 if (debug) {
370 dev_printk(KERN_DEBUG, dev, "%s - length = %d, data = ",
371 function, size);
372 for (i = 0; i < size; ++i)
373 printk("%.2x ", data[i]);
374 printk("\n");
375 }
376}
377
378
379#undef dbg
380#define dbg(format, arg...) \
381do { \
382 if (debug) \
383 printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg); \
384} while (0)
385
386
387
388
389
390#define dev_err_console(usport, fmt, ...) \
391do { \
392 static bool __print_once; \
393 struct usb_serial_port *__port = (usport); \
394 \
395 if (!__port->port.console || !__print_once) { \
396 __print_once = true; \
397 dev_err(&__port->dev, fmt, ##__VA_ARGS__); \
398 } \
399} while (0)
400
401
402
403
404
405
406
407
408
409
410
411
412#define module_usb_serial_driver(__usb_driver, __serial_drivers) \
413 module_driver(__usb_driver, usb_serial_register_drivers, \
414 usb_serial_deregister_drivers, __serial_drivers)
415
416#endif
417
418