summaryrefslogtreecommitdiffstats
path: root/drivers/usb/serial/aircable.c
diff options
context:
space:
mode:
authorJohan Hovold <jhovold@gmail.com>2010-05-05 23:58:13 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2010-05-20 13:21:42 -0700
commitc23e5fc1f7dba228558b4a46e68f7af89515b13c (patch)
treeadd71b10dc2275c98d3439fe3756829c2ec0afc9 /drivers/usb/serial/aircable.c
parent27c7acf22047fbe4ec4cc36b7c2610dba227697c (diff)
downloadlinux-c23e5fc1f7dba228558b4a46e68f7af89515b13c.tar.gz
linux-c23e5fc1f7dba228558b4a46e68f7af89515b13c.tar.bz2
linux-c23e5fc1f7dba228558b4a46e68f7af89515b13c.zip
USB: serial: remove multi-urb write from generic driver
Remove multi-urb write from the generic driver and simplify the prepare_write_buffer prototype: int (*prepare_write_buffer)(struct usb_serial_port *port, void *dest, size_t size); The default implementation simply fills dest with data from port write fifo but drivers can override it if they need to process the outgoing data (e.g. add headers). Turn ftdi_sio into a generic fifo-based driver, which lowers CPU usage significantly for small writes while retaining maximum throughput. Signed-off-by: Johan Hovold <jhovold@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/serial/aircable.c')
-rw-r--r--drivers/usb/serial/aircable.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/usb/serial/aircable.c b/drivers/usb/serial/aircable.c
index cac5162937b3..8a990a763c21 100644
--- a/drivers/usb/serial/aircable.c
+++ b/drivers/usb/serial/aircable.c
@@ -84,9 +84,10 @@ static const struct usb_device_id id_table[] = {
MODULE_DEVICE_TABLE(usb, id_table);
static int aircable_prepare_write_buffer(struct usb_serial_port *port,
- void **dest, size_t size, const void *src, size_t count)
+ void *dest, size_t size)
{
- unsigned char *buf = *dest;
+ int count;
+ unsigned char *buf = dest;
count = kfifo_out_locked(&port->write_fifo, buf + HCI_HEADER_LENGTH,
size - HCI_HEADER_LENGTH, &port->lock);
@@ -185,8 +186,6 @@ static struct usb_serial_driver aircable_device = {
.id_table = id_table,
.num_ports = 1,
.bulk_out_size = HCI_COMPLETE_FRAME,
- /* Must modify prepare_write_buffer if multi_urb_write is changed. */
- .multi_urb_write = 0,
.probe = aircable_probe,
.process_read_urb = aircable_process_read_urb,
.prepare_write_buffer = aircable_prepare_write_buffer,