aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/usb
diff options
context:
space:
mode:
authorJason Wessel <jason.wessel@windriver.com>2009-05-11 16:24:09 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2009-06-16 00:44:45 -0400
commit98fcb5f78165b8a3d93870ad7afd4d9ebbb8b43a (patch)
treeed64298e8b6bf47ba9c57db298e732429f7f669e /include/linux/usb
parent87c1edd217a6742e48028db6664d7763de0449f6 (diff)
USB: serial: usb_debug,usb_generic_serial: implement sysrq and serial break
The usb_debug driver was modified to implement serial break handling by using a "magic" data packet comprised of the sequence: 0x00 0xff 0x01 0xfe 0x00 0xfe 0x01 0xff When the tty layer requests a serial break the usb_debug driver sends the magic packet. On the receiving side the magic packet is thrown away or a sysrq is activated depending on what kernel .config options have been set. The generic serial driver was modified as well as the usb serial headers to generically implement sysrq processing in the same way the non usb uart based drivers implement the sysrq handling. This will allow other usb serial devices to implement sysrq handling as desired. The new usb serial functions are named similarly and implemented similarly to the uart functions as follows: usb_serial_handle_break <-> uart_handle_break usb_serial_handle_sysrq_char <-> uart_handle_sysrq_char Signed-off-by: Jason Wessel <jason.wessel@windriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'include/linux/usb')
-rw-r--r--include/linux/usb/serial.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h
index e2938fd179e2..e29ebcf3287b 100644
--- a/include/linux/usb/serial.h
+++ b/include/linux/usb/serial.h
@@ -15,6 +15,7 @@
15 15
16#include <linux/kref.h> 16#include <linux/kref.h>
17#include <linux/mutex.h> 17#include <linux/mutex.h>
18#include <linux/sysrq.h>
18 19
19#define SERIAL_TTY_MAJOR 188 /* Nice legal number now */ 20#define SERIAL_TTY_MAJOR 188 /* Nice legal number now */
20#define SERIAL_TTY_MINORS 254 /* loads of devices :) */ 21#define SERIAL_TTY_MINORS 254 /* loads of devices :) */
@@ -99,6 +100,7 @@ struct usb_serial_port {
99 char throttled; 100 char throttled;
100 char throttle_req; 101 char throttle_req;
101 char console; 102 char console;
103 unsigned long sysrq; /* sysrq timeout */
102 struct device dev; 104 struct device dev;
103}; 105};
104#define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev) 106#define to_usb_serial_port(d) container_of(d, struct usb_serial_port, dev)
@@ -301,6 +303,12 @@ extern void usb_serial_generic_unthrottle(struct tty_struct *tty);
301extern void usb_serial_generic_shutdown(struct usb_serial *serial); 303extern void usb_serial_generic_shutdown(struct usb_serial *serial);
302extern int usb_serial_generic_register(int debug); 304extern int usb_serial_generic_register(int debug);
303extern void usb_serial_generic_deregister(void); 305extern void usb_serial_generic_deregister(void);
306extern void usb_serial_generic_resubmit_read_urb(struct usb_serial_port *port,
307 gfp_t mem_flags);
308extern int usb_serial_handle_sysrq_char(struct usb_serial_port *port,
309 unsigned int ch);
310extern int usb_serial_handle_break(struct usb_serial_port *port);
311
304 312
305extern int usb_serial_bus_register(struct usb_serial_driver *device); 313extern int usb_serial_bus_register(struct usb_serial_driver *device);
306extern void usb_serial_bus_deregister(struct usb_serial_driver *device); 314extern void usb_serial_bus_deregister(struct usb_serial_driver *device);