13 #include <linux/kernel.h>
14 #include <linux/errno.h>
15 #include <linux/slab.h>
17 #include <linux/tty.h>
19 #include <linux/module.h>
25 #include <linux/serial.h>
27 #ifdef CONFIG_USB_SERIAL_GENERIC
46 .id_table = generic_device_ids,
56 &usb_serial_generic_device,
NULL
65 #ifdef CONFIG_USB_SERIAL_GENERIC
66 generic_device_ids[0].idVendor =
vendor;
67 generic_device_ids[0].idProduct =
product;
68 generic_device_ids[0].match_flags =
73 "usbserial_generic", generic_device_ids);
80 #ifdef CONFIG_USB_SERIAL_GENERIC
95 spin_unlock_irqrestore(&port->
lock, flags);
119 spin_unlock_irqrestore(&port->
lock, flags);
130 generic_cleanup(port);
146 static int usb_serial_generic_write_start(
struct usb_serial_port *port)
159 spin_unlock_irqrestore(&port->
lock, flags);
164 spin_unlock_irqrestore(&port->
lock, flags);
167 count = port->
serial->type->prepare_write_buffer(port,
168 urb->transfer_buffer,
170 urb->transfer_buffer_length =
count;
171 usb_serial_debug_data(&port->
dev, __func__, count, urb->transfer_buffer);
174 spin_unlock_irqrestore(&port->
lock, flags);
184 spin_unlock_irqrestore(&port->
lock, flags);
224 result = usb_serial_generic_write_start(port);
243 spin_unlock_irqrestore(&port->
lock, flags);
245 dev_dbg(&port->
dev,
"%s - returns %d\n", __func__, room);
260 spin_unlock_irqrestore(&port->
lock, flags);
262 dev_dbg(&port->
dev,
"%s - returns %d\n", __func__, chars);
266 static int usb_serial_generic_submit_read_urb(
struct usb_serial_port *port,
274 dev_dbg(&port->
dev,
"%s - port %d, urb %d\n", __func__,
281 "%s - usb_submit_urb failed: %d\n",
298 res = usb_serial_generic_submit_read_urb(port, i, mem_flags);
316 char *ch = (
char *)urb->transfer_buffer;
319 if (!urb->actual_length)
330 tty_insert_flip_string(tty, ch, urb->actual_length);
332 for (i = 0; i < urb->actual_length; i++, ch++) {
345 unsigned char *
data = urb->transfer_buffer;
355 dev_dbg(&port->
dev,
"%s - port %d, urb %d, len %d\n",
356 __func__, port->
number, i, urb->actual_length);
359 dev_dbg(&port->
dev,
"%s - non-zero urb status: %d\n",
360 __func__, urb->status);
364 usb_serial_debug_data(&port->
dev, __func__, urb->actual_length, data);
365 port->
serial->type->process_read_urb(urb);
371 spin_unlock_irqrestore(&port->
lock, flags);
372 usb_serial_generic_submit_read_urb(port, i,
GFP_ATOMIC);
374 spin_unlock_irqrestore(&port->
lock, flags);
390 port->
tx_bytes -= urb->transfer_buffer_length;
392 spin_unlock_irqrestore(&port->
lock, flags);
395 dev_dbg(&port->
dev,
"%s - non-zero urb status: %d\n",
400 spin_unlock_irqrestore(&port->
lock, flags);
402 usb_serial_generic_write_start(port);
418 spin_unlock_irqrestore(&port->
lock, flags);
428 spin_lock_irq(&port->
lock);
431 spin_unlock_irq(&port->
lock);
438 #ifdef CONFIG_MAGIC_SYSRQ
481 dev_dbg(&usb_port->
dev,
"%s - port %d, status %d\n", __func__,
482 usb_port->
number, status);
496 for (i = 0; i < serial->
num_ports; i++) {
497 port = serial->
port[
i];
509 r = usb_serial_generic_write_start(port);
525 generic_cleanup(serial->
port[i]);