usb gadget: split out serial core
This abstracts the "gadget serial" driver TTY glue into a separate
component, cleaning it up and disentangling it from connection state.
It also changed some behaviors for the better:
- Stops using "experimental" major #127, and switches over to
having the TTY layer allocate the dev_t numbers.
- Provides /sys/class/tty/ttyGS* nodes, thus mdev/udev support.
(Note "mdev" hotplug bug in Busybox v1.7.2: /dev/ttyGS0 will
be a *block* device without CONFIG_SYSFS_DEPRECATED_V2.)
- The tty nodes no longer reject opens when there's no host.
Now they can support normal getty configs in /etc/inttab...
- Now implements RX throttling. When the line discipline says
it doesn't want any more data, only packets in flight will be
delivered (currently, max 1K/8K at full/high speeds) until it
unthrottles the data.
- Supports low_latency. This is a good policy for all USB serial
adapters, since it eliminates scheduler overhead on RX paths.
This also includes much cleanup including better comments, fixing
memory leaks and other bugs (including some locking fixes), messaging
cleanup, and an interface audit and tightening. This added up to a
significant object code shrinkage, on the order of 20% (!) depending
on CPU and compiler.
A separate patch actually kicks in this new code, using the functions
declared in this new header, and removes the previous glue.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-06-20 08:51:44 +08:00
|
|
|
/*
|
|
|
|
* u_serial.h - interface to USB gadget "serial port"/TTY utilities
|
|
|
|
*
|
|
|
|
* Copyright (C) 2008 David Brownell
|
|
|
|
* Copyright (C) 2008 by Nokia Corporation
|
|
|
|
*
|
|
|
|
* This software is distributed under the terms of the GNU General
|
|
|
|
* Public License ("GPL") as published by the Free Software Foundation,
|
|
|
|
* either version 2 of that License or (at your option) any later version.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __U_SERIAL_H
|
|
|
|
#define __U_SERIAL_H
|
|
|
|
|
2008-06-20 09:18:40 +08:00
|
|
|
#include <linux/usb/composite.h>
|
usb gadget: split out serial core
This abstracts the "gadget serial" driver TTY glue into a separate
component, cleaning it up and disentangling it from connection state.
It also changed some behaviors for the better:
- Stops using "experimental" major #127, and switches over to
having the TTY layer allocate the dev_t numbers.
- Provides /sys/class/tty/ttyGS* nodes, thus mdev/udev support.
(Note "mdev" hotplug bug in Busybox v1.7.2: /dev/ttyGS0 will
be a *block* device without CONFIG_SYSFS_DEPRECATED_V2.)
- The tty nodes no longer reject opens when there's no host.
Now they can support normal getty configs in /etc/inttab...
- Now implements RX throttling. When the line discipline says
it doesn't want any more data, only packets in flight will be
delivered (currently, max 1K/8K at full/high speeds) until it
unthrottles the data.
- Supports low_latency. This is a good policy for all USB serial
adapters, since it eliminates scheduler overhead on RX paths.
This also includes much cleanup including better comments, fixing
memory leaks and other bugs (including some locking fixes), messaging
cleanup, and an interface audit and tightening. This added up to a
significant object code shrinkage, on the order of 20% (!) depending
on CPU and compiler.
A separate patch actually kicks in this new code, using the functions
declared in this new header, and removes the previous glue.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-06-20 08:51:44 +08:00
|
|
|
#include <linux/usb/cdc.h>
|
|
|
|
|
|
|
|
/*
|
|
|
|
* One non-multiplexed "serial" I/O port ... there can be several of these
|
|
|
|
* on any given USB peripheral device, if it provides enough endpoints.
|
|
|
|
*
|
|
|
|
* The "u_serial" utility component exists to do one thing: manage TTY
|
|
|
|
* style I/O using the USB peripheral endpoints listed here, including
|
|
|
|
* hookups to sysfs and /dev for each logical "tty" device.
|
|
|
|
*
|
2008-08-07 09:49:57 +08:00
|
|
|
* REVISIT at least ACM could support tiocmget() if needed.
|
usb gadget: split out serial core
This abstracts the "gadget serial" driver TTY glue into a separate
component, cleaning it up and disentangling it from connection state.
It also changed some behaviors for the better:
- Stops using "experimental" major #127, and switches over to
having the TTY layer allocate the dev_t numbers.
- Provides /sys/class/tty/ttyGS* nodes, thus mdev/udev support.
(Note "mdev" hotplug bug in Busybox v1.7.2: /dev/ttyGS0 will
be a *block* device without CONFIG_SYSFS_DEPRECATED_V2.)
- The tty nodes no longer reject opens when there's no host.
Now they can support normal getty configs in /etc/inttab...
- Now implements RX throttling. When the line discipline says
it doesn't want any more data, only packets in flight will be
delivered (currently, max 1K/8K at full/high speeds) until it
unthrottles the data.
- Supports low_latency. This is a good policy for all USB serial
adapters, since it eliminates scheduler overhead on RX paths.
This also includes much cleanup including better comments, fixing
memory leaks and other bugs (including some locking fixes), messaging
cleanup, and an interface audit and tightening. This added up to a
significant object code shrinkage, on the order of 20% (!) depending
on CPU and compiler.
A separate patch actually kicks in this new code, using the functions
declared in this new header, and removes the previous glue.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-06-20 08:51:44 +08:00
|
|
|
*
|
|
|
|
* REVISIT someday, allow multiplexing several TTYs over these endpoints.
|
|
|
|
*/
|
|
|
|
struct gserial {
|
2008-06-20 09:18:40 +08:00
|
|
|
struct usb_function func;
|
usb gadget: split out serial core
This abstracts the "gadget serial" driver TTY glue into a separate
component, cleaning it up and disentangling it from connection state.
It also changed some behaviors for the better:
- Stops using "experimental" major #127, and switches over to
having the TTY layer allocate the dev_t numbers.
- Provides /sys/class/tty/ttyGS* nodes, thus mdev/udev support.
(Note "mdev" hotplug bug in Busybox v1.7.2: /dev/ttyGS0 will
be a *block* device without CONFIG_SYSFS_DEPRECATED_V2.)
- The tty nodes no longer reject opens when there's no host.
Now they can support normal getty configs in /etc/inttab...
- Now implements RX throttling. When the line discipline says
it doesn't want any more data, only packets in flight will be
delivered (currently, max 1K/8K at full/high speeds) until it
unthrottles the data.
- Supports low_latency. This is a good policy for all USB serial
adapters, since it eliminates scheduler overhead on RX paths.
This also includes much cleanup including better comments, fixing
memory leaks and other bugs (including some locking fixes), messaging
cleanup, and an interface audit and tightening. This added up to a
significant object code shrinkage, on the order of 20% (!) depending
on CPU and compiler.
A separate patch actually kicks in this new code, using the functions
declared in this new header, and removes the previous glue.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-06-20 08:51:44 +08:00
|
|
|
|
|
|
|
/* port is managed by gserial_{connect,disconnect} */
|
|
|
|
struct gs_port *ioport;
|
|
|
|
|
|
|
|
struct usb_ep *in;
|
|
|
|
struct usb_ep *out;
|
|
|
|
struct usb_endpoint_descriptor *in_desc;
|
|
|
|
struct usb_endpoint_descriptor *out_desc;
|
|
|
|
|
|
|
|
/* REVISIT avoid this CDC-ACM support harder ... */
|
|
|
|
struct usb_cdc_line_coding port_line_coding; /* 9600-8-N-1 etc */
|
2008-08-07 09:49:57 +08:00
|
|
|
|
|
|
|
/* notification callbacks */
|
|
|
|
void (*connect)(struct gserial *p);
|
|
|
|
void (*disconnect)(struct gserial *p);
|
|
|
|
int (*send_break)(struct gserial *p, int duration);
|
usb gadget: split out serial core
This abstracts the "gadget serial" driver TTY glue into a separate
component, cleaning it up and disentangling it from connection state.
It also changed some behaviors for the better:
- Stops using "experimental" major #127, and switches over to
having the TTY layer allocate the dev_t numbers.
- Provides /sys/class/tty/ttyGS* nodes, thus mdev/udev support.
(Note "mdev" hotplug bug in Busybox v1.7.2: /dev/ttyGS0 will
be a *block* device without CONFIG_SYSFS_DEPRECATED_V2.)
- The tty nodes no longer reject opens when there's no host.
Now they can support normal getty configs in /etc/inttab...
- Now implements RX throttling. When the line discipline says
it doesn't want any more data, only packets in flight will be
delivered (currently, max 1K/8K at full/high speeds) until it
unthrottles the data.
- Supports low_latency. This is a good policy for all USB serial
adapters, since it eliminates scheduler overhead on RX paths.
This also includes much cleanup including better comments, fixing
memory leaks and other bugs (including some locking fixes), messaging
cleanup, and an interface audit and tightening. This added up to a
significant object code shrinkage, on the order of 20% (!) depending
on CPU and compiler.
A separate patch actually kicks in this new code, using the functions
declared in this new header, and removes the previous glue.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-06-20 08:51:44 +08:00
|
|
|
};
|
|
|
|
|
2008-08-07 09:49:57 +08:00
|
|
|
/* utilities to allocate/free request and buffer */
|
|
|
|
struct usb_request *gs_alloc_req(struct usb_ep *ep, unsigned len, gfp_t flags);
|
|
|
|
void gs_free_req(struct usb_ep *, struct usb_request *req);
|
|
|
|
|
usb gadget: split out serial core
This abstracts the "gadget serial" driver TTY glue into a separate
component, cleaning it up and disentangling it from connection state.
It also changed some behaviors for the better:
- Stops using "experimental" major #127, and switches over to
having the TTY layer allocate the dev_t numbers.
- Provides /sys/class/tty/ttyGS* nodes, thus mdev/udev support.
(Note "mdev" hotplug bug in Busybox v1.7.2: /dev/ttyGS0 will
be a *block* device without CONFIG_SYSFS_DEPRECATED_V2.)
- The tty nodes no longer reject opens when there's no host.
Now they can support normal getty configs in /etc/inttab...
- Now implements RX throttling. When the line discipline says
it doesn't want any more data, only packets in flight will be
delivered (currently, max 1K/8K at full/high speeds) until it
unthrottles the data.
- Supports low_latency. This is a good policy for all USB serial
adapters, since it eliminates scheduler overhead on RX paths.
This also includes much cleanup including better comments, fixing
memory leaks and other bugs (including some locking fixes), messaging
cleanup, and an interface audit and tightening. This added up to a
significant object code shrinkage, on the order of 20% (!) depending
on CPU and compiler.
A separate patch actually kicks in this new code, using the functions
declared in this new header, and removes the previous glue.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-06-20 08:51:44 +08:00
|
|
|
/* port setup/teardown is handled by gadget driver */
|
|
|
|
int gserial_setup(struct usb_gadget *g, unsigned n_ports);
|
|
|
|
void gserial_cleanup(void);
|
|
|
|
|
|
|
|
/* connect/disconnect is handled by individual functions */
|
|
|
|
int gserial_connect(struct gserial *, u8 port_num);
|
|
|
|
void gserial_disconnect(struct gserial *);
|
|
|
|
|
2008-06-20 09:18:40 +08:00
|
|
|
/* functions are bound to configurations by a config or gadget driver */
|
|
|
|
int acm_bind_config(struct usb_configuration *c, u8 port_num);
|
2008-06-20 09:18:50 +08:00
|
|
|
int gser_bind_config(struct usb_configuration *c, u8 port_num);
|
2008-08-19 08:39:30 +08:00
|
|
|
int obex_bind_config(struct usb_configuration *c, u8 port_num);
|
2008-06-20 09:18:40 +08:00
|
|
|
|
usb gadget: split out serial core
This abstracts the "gadget serial" driver TTY glue into a separate
component, cleaning it up and disentangling it from connection state.
It also changed some behaviors for the better:
- Stops using "experimental" major #127, and switches over to
having the TTY layer allocate the dev_t numbers.
- Provides /sys/class/tty/ttyGS* nodes, thus mdev/udev support.
(Note "mdev" hotplug bug in Busybox v1.7.2: /dev/ttyGS0 will
be a *block* device without CONFIG_SYSFS_DEPRECATED_V2.)
- The tty nodes no longer reject opens when there's no host.
Now they can support normal getty configs in /etc/inttab...
- Now implements RX throttling. When the line discipline says
it doesn't want any more data, only packets in flight will be
delivered (currently, max 1K/8K at full/high speeds) until it
unthrottles the data.
- Supports low_latency. This is a good policy for all USB serial
adapters, since it eliminates scheduler overhead on RX paths.
This also includes much cleanup including better comments, fixing
memory leaks and other bugs (including some locking fixes), messaging
cleanup, and an interface audit and tightening. This added up to a
significant object code shrinkage, on the order of 20% (!) depending
on CPU and compiler.
A separate patch actually kicks in this new code, using the functions
declared in this new header, and removes the previous glue.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-06-20 08:51:44 +08:00
|
|
|
#endif /* __U_SERIAL_H */
|