Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
serial.h
Go to the documentation of this file.
1 /*
2  * USB Serial Converter stuff
3  *
4  * Copyright (C) 1999 - 2012
5  * Greg Kroah-Hartman ([email protected])
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; version 2 of the License.
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 /* Nice legal number now */
22 #define SERIAL_TTY_MINORS 254 /* loads of devices :) */
23 #define SERIAL_TTY_NO_MINOR 255 /* No minor was assigned */
24 
25 /* The maximum number of ports one device can grab at once */
26 #define MAX_NUM_PORTS 8
27 
28 /* parity check flag */
29 #define RELEVANT_IFLAG(iflag) (iflag & (IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK))
30 
31 /* USB serial flags */
32 #define USB_SERIAL_WRITE_BUSY 0
33 
78  struct usb_serial *serial;
79  struct tty_port port;
81  unsigned char number;
82 
83  unsigned char *interrupt_in_buffer;
86 
87  unsigned char *interrupt_out_buffer;
91 
92  unsigned char *bulk_in_buffer;
94  struct urb *read_urb;
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;
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;
110 
111  int tx_bytes;
112 
113  unsigned long flags;
116  char throttled;
118  unsigned long sysrq; /* sysrq timeout */
119  struct device dev;
120 };
121 #define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
122 
123 /* get and set the port private data pointer helper functions */
124 static inline void *usb_get_serial_port_data(struct usb_serial_port *port)
125 {
126  return dev_get_drvdata(&port->dev);
127 }
128 
129 static 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 
152 struct usb_serial {
153  struct usb_device *dev;
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;
167  struct kref kref;
169  void *private;
170 };
171 #define to_usb_serial(d) container_of(d, struct usb_serial, kref)
172 
173 /* get and set the serial private data pointer helper functions */
174 static inline void *usb_get_serial_data(struct usb_serial *serial)
175 {
176  return serial->private;
177 }
178 
179 static inline void usb_set_serial_data(struct usb_serial *serial, void *data)
180 {
181  serial->private = data;
182 }
183 
228  const char *description;
229  const struct usb_device_id *id_table;
230  char num_ports;
231 
235  struct usb_dynids dynids;
236 
237  size_t bulk_in_size;
239 
240  int (*probe)(struct usb_serial *serial, const struct usb_device_id *id);
243 
246 
249 
253 
254  /* serial function calls */
255  /* Called by console and by the tty layer */
256  int (*open)(struct tty_struct *tty, 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  /* Called only by the tty layer */
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 (*throttle)(struct tty_struct *tty);
269  void (*unthrottle)(struct tty_struct *tty);
270  int (*tiocmget)(struct tty_struct *tty);
271  int (*tiocmset)(struct tty_struct *tty,
272  unsigned int set, unsigned int clear);
273  int (*get_icount)(struct tty_struct *tty,
274  struct serial_icounter_struct *icount);
275  /* Called by the tty layer for port level work. There may or may not
276  be an attached tty at this point */
277  void (*dtr_rts)(struct usb_serial_port *port, int on);
279  /* Called by the usb serial hooks to allow the user to rework the
280  termios state */
281  void (*init_termios)(struct tty_struct *tty);
282  /* USB events */
287  /* Called by the generic read bulk callback */
289  /* Called by the generic write implementation */
291  void *dest, size_t size);
292 };
293 #define to_usb_serial_driver(d) \
294  container_of(d, struct usb_serial_driver, driver)
295 
296 extern int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[],
297  const char *name, const struct usb_device_id *id_table);
298 extern void usb_serial_deregister_drivers(struct usb_serial_driver *const serial_drivers[]);
299 extern void usb_serial_port_softint(struct usb_serial_port *port);
300 
302 extern int usb_serial_resume(struct usb_interface *intf);
303 
304 /* USB Serial console functions */
305 #ifdef CONFIG_USB_SERIAL_CONSOLE
306 extern void usb_serial_console_init(int minor);
307 extern void usb_serial_console_exit(void);
308 extern void usb_serial_console_disconnect(struct usb_serial *serial);
309 #else
310 static inline void usb_serial_console_init(int minor) { }
311 static inline void usb_serial_console_exit(void) { }
312 static inline void usb_serial_console_disconnect(struct usb_serial *serial) {}
313 #endif
314 
315 /* Functions needed by other parts of the usbserial core */
316 extern struct usb_serial *usb_serial_get_by_index(unsigned int minor);
317 extern void usb_serial_put(struct usb_serial *serial);
318 extern int usb_serial_generic_open(struct tty_struct *tty,
319  struct usb_serial_port *port);
320 extern int usb_serial_generic_write(struct tty_struct *tty,
321  struct usb_serial_port *port, const unsigned char *buf, int count);
322 extern void usb_serial_generic_close(struct usb_serial_port *port);
323 extern int usb_serial_generic_resume(struct usb_serial *serial);
324 extern int usb_serial_generic_write_room(struct tty_struct *tty);
325 extern int usb_serial_generic_chars_in_buffer(struct tty_struct *tty);
326 extern void usb_serial_generic_read_bulk_callback(struct urb *urb);
327 extern void usb_serial_generic_write_bulk_callback(struct urb *urb);
328 extern void usb_serial_generic_throttle(struct tty_struct *tty);
329 extern void usb_serial_generic_unthrottle(struct tty_struct *tty);
330 extern void usb_serial_generic_disconnect(struct usb_serial *serial);
331 extern void usb_serial_generic_release(struct usb_serial *serial);
332 extern int usb_serial_generic_register(void);
333 extern void usb_serial_generic_deregister(void);
335  gfp_t mem_flags);
336 extern void usb_serial_generic_process_read_urb(struct urb *urb);
338  void *dest, size_t size);
340  unsigned int ch);
341 extern int usb_serial_handle_break(struct usb_serial_port *port);
343  struct tty_struct *tty,
344  unsigned int status);
345 
346 
349 
351 extern struct bus_type usb_serial_bus_type;
352 extern struct tty_driver *usb_serial_tty_driver;
353 
354 static inline void usb_serial_debug_data(struct device *dev,
355  const char *function, int size,
356  const unsigned char *data)
357 {
358  dev_dbg(dev, "%s - length = %d, data = %*ph\n",
359  function, size, size, data);
360 }
361 
362 /*
363  * Macro for reporting errors in write path to avoid inifinite loop
364  * when port is used as a console.
365  */
366 #define dev_err_console(usport, fmt, ...) \
367 do { \
368  static bool __print_once; \
369  struct usb_serial_port *__port = (usport); \
370  \
371  if (!__port->port.console || !__print_once) { \
372  __print_once = true; \
373  dev_err(&__port->dev, fmt, ##__VA_ARGS__); \
374  } \
375 } while (0)
376 
377 /*
378  * module_usb_serial_driver() - Helper macro for registering a USB Serial driver
379  * @__serial_drivers: list of usb_serial drivers to register
380  * @__ids: all device ids that @__serial_drivers bind to
381  *
382  * Helper macro for USB serial drivers which do not do anything special
383  * in module init/exit. This eliminates a lot of boilerplate. Each
384  * module may only use this macro once, and calling it replaces
385  * module_init() and module_exit()
386  *
387  */
388 #define usb_serial_module_driver(__name, __serial_drivers, __ids) \
389 static int __init usb_serial_module_init(void) \
390 { \
391  return usb_serial_register_drivers(__serial_drivers, \
392  __name, __ids); \
393 } \
394 module_init(usb_serial_module_init); \
395 static void __exit usb_serial_module_exit(void) \
396 { \
397  usb_serial_deregister_drivers(__serial_drivers); \
398 } \
399 module_exit(usb_serial_module_exit);
400 
401 #define module_usb_serial_driver(__serial_drivers, __ids) \
402  usb_serial_module_driver(KBUILD_MODNAME, __serial_drivers, __ids)
403 
404 #endif /* __LINUX_USB_SERIAL_H */
405