USB: ftdi_sio: re-implement read processing
[linux-2.6/mini2440.git] / drivers / usb / serial / usb-serial.c
blobaa6b2ae951ae9a15f1b28b7de4438ce8d551aaaf
1 /*
2 * USB Serial Converter driver
4 * Copyright (C) 1999 - 2005 Greg Kroah-Hartman (greg@kroah.com)
5 * Copyright (C) 2000 Peter Berger (pberger@brimson.com)
6 * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com)
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License version
10 * 2 as published by the Free Software Foundation.
12 * This driver was originally based on the ACM driver by Armin Fuerst (which was
13 * based on a driver by Brad Keryan)
15 * See Documentation/usb/usb-serial.txt for more information on using this
16 * driver
20 #include <linux/kernel.h>
21 #include <linux/errno.h>
22 #include <linux/init.h>
23 #include <linux/slab.h>
24 #include <linux/smp_lock.h>
25 #include <linux/tty.h>
26 #include <linux/tty_driver.h>
27 #include <linux/tty_flip.h>
28 #include <linux/module.h>
29 #include <linux/moduleparam.h>
30 #include <linux/seq_file.h>
31 #include <linux/spinlock.h>
32 #include <linux/mutex.h>
33 #include <linux/list.h>
34 #include <linux/uaccess.h>
35 #include <linux/serial.h>
36 #include <linux/usb.h>
37 #include <linux/usb/serial.h>
38 #include <linux/kfifo.h>
39 #include "pl2303.h"
42 * Version Information
44 #define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/"
45 #define DRIVER_DESC "USB Serial Driver core"
47 /* Driver structure we register with the USB core */
48 static struct usb_driver usb_serial_driver = {
49 .name = "usbserial",
50 .probe = usb_serial_probe,
51 .disconnect = usb_serial_disconnect,
52 .suspend = usb_serial_suspend,
53 .resume = usb_serial_resume,
54 .no_dynamic_id = 1,
57 /* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
58 the MODULE_DEVICE_TABLE declarations in each serial driver
59 cause the "hotplug" program to pull in whatever module is necessary
60 via modprobe, and modprobe will load usbserial because the serial
61 drivers depend on it.
64 static int debug;
65 /* initially all NULL */
66 static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
67 static DEFINE_MUTEX(table_lock);
68 static LIST_HEAD(usb_serial_driver_list);
71 * Look up the serial structure. If it is found and it hasn't been
72 * disconnected, return with its disc_mutex held and its refcount
73 * incremented. Otherwise return NULL.
75 struct usb_serial *usb_serial_get_by_index(unsigned index)
77 struct usb_serial *serial;
79 mutex_lock(&table_lock);
80 serial = serial_table[index];
82 if (serial) {
83 mutex_lock(&serial->disc_mutex);
84 if (serial->disconnected) {
85 mutex_unlock(&serial->disc_mutex);
86 serial = NULL;
87 } else {
88 kref_get(&serial->kref);
91 mutex_unlock(&table_lock);
92 return serial;
95 static struct usb_serial *get_free_serial(struct usb_serial *serial,
96 int num_ports, unsigned int *minor)
98 unsigned int i, j;
99 int good_spot;
101 dbg("%s %d", __func__, num_ports);
103 *minor = 0;
104 mutex_lock(&table_lock);
105 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
106 if (serial_table[i])
107 continue;
109 good_spot = 1;
110 for (j = 1; j <= num_ports-1; ++j)
111 if ((i+j >= SERIAL_TTY_MINORS) || (serial_table[i+j])) {
112 good_spot = 0;
113 i += j;
114 break;
116 if (good_spot == 0)
117 continue;
119 *minor = i;
120 j = 0;
121 dbg("%s - minor base = %d", __func__, *minor);
122 for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i) {
123 serial_table[i] = serial;
124 serial->port[j++]->number = i;
126 mutex_unlock(&table_lock);
127 return serial;
129 mutex_unlock(&table_lock);
130 return NULL;
133 static void return_serial(struct usb_serial *serial)
135 int i;
137 dbg("%s", __func__);
139 mutex_lock(&table_lock);
140 for (i = 0; i < serial->num_ports; ++i)
141 serial_table[serial->minor + i] = NULL;
142 mutex_unlock(&table_lock);
145 static void destroy_serial(struct kref *kref)
147 struct usb_serial *serial;
148 struct usb_serial_port *port;
149 int i;
151 serial = to_usb_serial(kref);
153 dbg("%s - %s", __func__, serial->type->description);
155 /* return the minor range that this device had */
156 if (serial->minor != SERIAL_TTY_NO_MINOR)
157 return_serial(serial);
159 serial->type->release(serial);
161 /* Now that nothing is using the ports, they can be freed */
162 for (i = 0; i < serial->num_port_pointers; ++i) {
163 port = serial->port[i];
164 if (port) {
165 port->serial = NULL;
166 put_device(&port->dev);
170 usb_put_dev(serial->dev);
171 kfree(serial);
174 void usb_serial_put(struct usb_serial *serial)
176 kref_put(&serial->kref, destroy_serial);
179 /*****************************************************************************
180 * Driver tty interface functions
181 *****************************************************************************/
184 * serial_install - install tty
185 * @driver: the driver (USB in our case)
186 * @tty: the tty being created
188 * Create the termios objects for this tty. We use the default
189 * USB serial settings but permit them to be overridden by
190 * serial->type->init_termios.
192 * This is the first place a new tty gets used. Hence this is where we
193 * acquire references to the usb_serial structure and the driver module,
194 * where we store a pointer to the port, and where we do an autoresume.
195 * All these actions are reversed in serial_cleanup().
197 static int serial_install(struct tty_driver *driver, struct tty_struct *tty)
199 int idx = tty->index;
200 struct usb_serial *serial;
201 struct usb_serial_port *port;
202 int retval = -ENODEV;
204 dbg("%s", __func__);
206 serial = usb_serial_get_by_index(idx);
207 if (!serial)
208 return retval;
210 port = serial->port[idx - serial->minor];
211 if (!port)
212 goto error_no_port;
213 if (!try_module_get(serial->type->driver.owner))
214 goto error_module_get;
216 /* perform the standard setup */
217 retval = tty_init_termios(tty);
218 if (retval)
219 goto error_init_termios;
221 retval = usb_autopm_get_interface(serial->interface);
222 if (retval)
223 goto error_get_interface;
225 mutex_unlock(&serial->disc_mutex);
227 /* allow the driver to update the settings */
228 if (serial->type->init_termios)
229 serial->type->init_termios(tty);
231 tty->driver_data = port;
233 /* Final install (we use the default method) */
234 tty_driver_kref_get(driver);
235 tty->count++;
236 driver->ttys[idx] = tty;
237 return retval;
239 error_get_interface:
240 error_init_termios:
241 module_put(serial->type->driver.owner);
242 error_module_get:
243 error_no_port:
244 usb_serial_put(serial);
245 mutex_unlock(&serial->disc_mutex);
246 return retval;
249 static int serial_open(struct tty_struct *tty, struct file *filp)
251 struct usb_serial_port *port = tty->driver_data;
252 struct usb_serial *serial = port->serial;
253 int retval;
255 dbg("%s - port %d", __func__, port->number);
257 spin_lock_irq(&port->port.lock);
258 if (!tty_hung_up_p(filp))
259 ++port->port.count;
260 spin_unlock_irq(&port->port.lock);
261 tty_port_tty_set(&port->port, tty);
263 /* Do the device-specific open only if the hardware isn't
264 * already initialized.
266 if (!test_bit(ASYNCB_INITIALIZED, &port->port.flags)) {
267 if (mutex_lock_interruptible(&port->mutex))
268 return -ERESTARTSYS;
269 mutex_lock(&serial->disc_mutex);
270 if (serial->disconnected)
271 retval = -ENODEV;
272 else
273 retval = port->serial->type->open(tty, port);
274 mutex_unlock(&serial->disc_mutex);
275 mutex_unlock(&port->mutex);
276 if (retval)
277 return retval;
278 set_bit(ASYNCB_INITIALIZED, &port->port.flags);
281 /* Now do the correct tty layer semantics */
282 retval = tty_port_block_til_ready(&port->port, tty, filp);
283 return retval;
287 * serial_down - shut down hardware
288 * @port: port to shut down
290 * Shut down a USB serial port unless it is the console. We never
291 * shut down the console hardware as it will always be in use.
293 static void serial_down(struct usb_serial_port *port)
295 struct usb_serial_driver *drv = port->serial->type;
298 * The console is magical. Do not hang up the console hardware
299 * or there will be tears.
301 if (port->console)
302 return;
304 /* Don't call the close method if the hardware hasn't been
305 * initialized.
307 if (!test_and_clear_bit(ASYNCB_INITIALIZED, &port->port.flags))
308 return;
310 mutex_lock(&port->mutex);
311 if (drv->close)
312 drv->close(port);
313 mutex_unlock(&port->mutex);
316 static void serial_hangup(struct tty_struct *tty)
318 struct usb_serial_port *port = tty->driver_data;
320 dbg("%s - port %d", __func__, port->number);
322 serial_down(port);
323 tty_port_hangup(&port->port);
326 static void serial_close(struct tty_struct *tty, struct file *filp)
328 struct usb_serial_port *port = tty->driver_data;
330 dbg("%s - port %d", __func__, port->number);
332 if (tty_hung_up_p(filp))
333 return;
334 if (tty_port_close_start(&port->port, tty, filp) == 0)
335 return;
336 serial_down(port);
337 tty_port_close_end(&port->port, tty);
338 tty_port_tty_set(&port->port, NULL);
342 * serial_cleanup - free resources post close/hangup
343 * @port: port to free up
345 * Do the resource freeing and refcount dropping for the port.
346 * Avoid freeing the console.
348 * Called asynchronously after the last tty kref is dropped,
349 * and the tty layer has already done the tty_shutdown(tty);
351 static void serial_cleanup(struct tty_struct *tty)
353 struct usb_serial_port *port = tty->driver_data;
354 struct usb_serial *serial;
355 struct module *owner;
357 /* The console is magical. Do not hang up the console hardware
358 * or there will be tears.
360 if (port->console)
361 return;
363 dbg("%s - port %d", __func__, port->number);
365 tty->driver_data = NULL;
367 serial = port->serial;
368 owner = serial->type->driver.owner;
370 mutex_lock(&serial->disc_mutex);
371 if (!serial->disconnected)
372 usb_autopm_put_interface(serial->interface);
373 mutex_unlock(&serial->disc_mutex);
375 usb_serial_put(serial);
376 module_put(owner);
379 static int serial_write(struct tty_struct *tty, const unsigned char *buf,
380 int count)
382 struct usb_serial_port *port = tty->driver_data;
383 int retval = -ENODEV;
385 if (port->serial->dev->state == USB_STATE_NOTATTACHED)
386 goto exit;
388 dbg("%s - port %d, %d byte(s)", __func__, port->number, count);
390 /* count is managed under the mutex lock for the tty so cannot
391 drop to zero until after the last close completes */
392 WARN_ON(!port->port.count);
394 /* pass on to the driver specific version of this function */
395 retval = port->serial->type->write(tty, port, buf, count);
397 exit:
398 return retval;
401 static int serial_write_room(struct tty_struct *tty)
403 struct usb_serial_port *port = tty->driver_data;
404 dbg("%s - port %d", __func__, port->number);
405 WARN_ON(!port->port.count);
406 /* pass on to the driver specific version of this function */
407 return port->serial->type->write_room(tty);
410 static int serial_chars_in_buffer(struct tty_struct *tty)
412 struct usb_serial_port *port = tty->driver_data;
413 dbg("%s = port %d", __func__, port->number);
415 /* if the device was unplugged then any remaining characters
416 fell out of the connector ;) */
417 if (port->serial->disconnected)
418 return 0;
419 /* pass on to the driver specific version of this function */
420 return port->serial->type->chars_in_buffer(tty);
423 static void serial_throttle(struct tty_struct *tty)
425 struct usb_serial_port *port = tty->driver_data;
426 dbg("%s - port %d", __func__, port->number);
428 WARN_ON(!port->port.count);
429 /* pass on to the driver specific version of this function */
430 if (port->serial->type->throttle)
431 port->serial->type->throttle(tty);
434 static void serial_unthrottle(struct tty_struct *tty)
436 struct usb_serial_port *port = tty->driver_data;
437 dbg("%s - port %d", __func__, port->number);
439 WARN_ON(!port->port.count);
440 /* pass on to the driver specific version of this function */
441 if (port->serial->type->unthrottle)
442 port->serial->type->unthrottle(tty);
445 static int serial_ioctl(struct tty_struct *tty, struct file *file,
446 unsigned int cmd, unsigned long arg)
448 struct usb_serial_port *port = tty->driver_data;
449 int retval = -ENODEV;
451 dbg("%s - port %d, cmd 0x%.4x", __func__, port->number, cmd);
453 WARN_ON(!port->port.count);
455 /* pass on to the driver specific version of this function
456 if it is available */
457 if (port->serial->type->ioctl) {
458 retval = port->serial->type->ioctl(tty, file, cmd, arg);
459 } else
460 retval = -ENOIOCTLCMD;
461 return retval;
464 static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
466 struct usb_serial_port *port = tty->driver_data;
467 dbg("%s - port %d", __func__, port->number);
469 WARN_ON(!port->port.count);
470 /* pass on to the driver specific version of this function
471 if it is available */
472 if (port->serial->type->set_termios)
473 port->serial->type->set_termios(tty, port, old);
474 else
475 tty_termios_copy_hw(tty->termios, old);
478 static int serial_break(struct tty_struct *tty, int break_state)
480 struct usb_serial_port *port = tty->driver_data;
482 dbg("%s - port %d", __func__, port->number);
484 WARN_ON(!port->port.count);
485 /* pass on to the driver specific version of this function
486 if it is available */
487 if (port->serial->type->break_ctl)
488 port->serial->type->break_ctl(tty, break_state);
489 return 0;
492 static int serial_proc_show(struct seq_file *m, void *v)
494 struct usb_serial *serial;
495 int i;
496 char tmp[40];
498 dbg("%s", __func__);
499 seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
500 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
501 serial = usb_serial_get_by_index(i);
502 if (serial == NULL)
503 continue;
505 seq_printf(m, "%d:", i);
506 if (serial->type->driver.owner)
507 seq_printf(m, " module:%s",
508 module_name(serial->type->driver.owner));
509 seq_printf(m, " name:\"%s\"",
510 serial->type->description);
511 seq_printf(m, " vendor:%04x product:%04x",
512 le16_to_cpu(serial->dev->descriptor.idVendor),
513 le16_to_cpu(serial->dev->descriptor.idProduct));
514 seq_printf(m, " num_ports:%d", serial->num_ports);
515 seq_printf(m, " port:%d", i - serial->minor + 1);
516 usb_make_path(serial->dev, tmp, sizeof(tmp));
517 seq_printf(m, " path:%s", tmp);
519 seq_putc(m, '\n');
520 usb_serial_put(serial);
521 mutex_unlock(&serial->disc_mutex);
523 return 0;
526 static int serial_proc_open(struct inode *inode, struct file *file)
528 return single_open(file, serial_proc_show, NULL);
531 static const struct file_operations serial_proc_fops = {
532 .owner = THIS_MODULE,
533 .open = serial_proc_open,
534 .read = seq_read,
535 .llseek = seq_lseek,
536 .release = single_release,
539 static int serial_tiocmget(struct tty_struct *tty, struct file *file)
541 struct usb_serial_port *port = tty->driver_data;
543 dbg("%s - port %d", __func__, port->number);
545 WARN_ON(!port->port.count);
546 if (port->serial->type->tiocmget)
547 return port->serial->type->tiocmget(tty, file);
548 return -EINVAL;
551 static int serial_tiocmset(struct tty_struct *tty, struct file *file,
552 unsigned int set, unsigned int clear)
554 struct usb_serial_port *port = tty->driver_data;
556 dbg("%s - port %d", __func__, port->number);
558 WARN_ON(!port->port.count);
559 if (port->serial->type->tiocmset)
560 return port->serial->type->tiocmset(tty, file, set, clear);
561 return -EINVAL;
565 * We would be calling tty_wakeup here, but unfortunately some line
566 * disciplines have an annoying habit of calling tty->write from
567 * the write wakeup callback (e.g. n_hdlc.c).
569 void usb_serial_port_softint(struct usb_serial_port *port)
571 schedule_work(&port->work);
573 EXPORT_SYMBOL_GPL(usb_serial_port_softint);
575 static void usb_serial_port_work(struct work_struct *work)
577 struct usb_serial_port *port =
578 container_of(work, struct usb_serial_port, work);
579 struct tty_struct *tty;
581 dbg("%s - port %d", __func__, port->number);
583 tty = tty_port_tty_get(&port->port);
584 if (!tty)
585 return;
587 tty_wakeup(tty);
588 tty_kref_put(tty);
591 static void kill_traffic(struct usb_serial_port *port)
593 usb_kill_urb(port->read_urb);
594 usb_kill_urb(port->write_urb);
596 * This is tricky.
597 * Some drivers submit the read_urb in the
598 * handler for the write_urb or vice versa
599 * this order determines the order in which
600 * usb_kill_urb() must be used to reliably
601 * kill the URBs. As it is unknown here,
602 * both orders must be used in turn.
603 * The call below is not redundant.
605 usb_kill_urb(port->read_urb);
606 usb_kill_urb(port->interrupt_in_urb);
607 usb_kill_urb(port->interrupt_out_urb);
610 static void port_release(struct device *dev)
612 struct usb_serial_port *port = to_usb_serial_port(dev);
614 dbg ("%s - %s", __func__, dev_name(dev));
617 * Stop all the traffic before cancelling the work, so that
618 * nobody will restart it by calling usb_serial_port_softint.
620 kill_traffic(port);
621 cancel_work_sync(&port->work);
623 usb_free_urb(port->read_urb);
624 usb_free_urb(port->write_urb);
625 usb_free_urb(port->interrupt_in_urb);
626 usb_free_urb(port->interrupt_out_urb);
627 if (!IS_ERR(port->write_fifo) && port->write_fifo)
628 kfifo_free(port->write_fifo);
629 kfree(port->bulk_in_buffer);
630 kfree(port->bulk_out_buffer);
631 kfree(port->interrupt_in_buffer);
632 kfree(port->interrupt_out_buffer);
633 kfree(port);
636 static struct usb_serial *create_serial(struct usb_device *dev,
637 struct usb_interface *interface,
638 struct usb_serial_driver *driver)
640 struct usb_serial *serial;
642 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
643 if (!serial) {
644 dev_err(&dev->dev, "%s - out of memory\n", __func__);
645 return NULL;
647 serial->dev = usb_get_dev(dev);
648 serial->type = driver;
649 serial->interface = interface;
650 kref_init(&serial->kref);
651 mutex_init(&serial->disc_mutex);
652 serial->minor = SERIAL_TTY_NO_MINOR;
654 return serial;
657 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
658 struct usb_serial_driver *drv)
660 struct usb_dynid *dynid;
662 spin_lock(&drv->dynids.lock);
663 list_for_each_entry(dynid, &drv->dynids.list, node) {
664 if (usb_match_one_id(intf, &dynid->id)) {
665 spin_unlock(&drv->dynids.lock);
666 return &dynid->id;
669 spin_unlock(&drv->dynids.lock);
670 return NULL;
673 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
674 struct usb_interface *intf)
676 const struct usb_device_id *id;
678 id = usb_match_id(intf, drv->id_table);
679 if (id) {
680 dbg("static descriptor matches");
681 goto exit;
683 id = match_dynamic_id(intf, drv);
684 if (id)
685 dbg("dynamic descriptor matches");
686 exit:
687 return id;
690 static struct usb_serial_driver *search_serial_device(
691 struct usb_interface *iface)
693 const struct usb_device_id *id;
694 struct usb_serial_driver *drv;
696 /* Check if the usb id matches a known device */
697 list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
698 id = get_iface_id(drv, iface);
699 if (id)
700 return drv;
703 return NULL;
706 static int serial_carrier_raised(struct tty_port *port)
708 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
709 struct usb_serial_driver *drv = p->serial->type;
710 if (drv->carrier_raised)
711 return drv->carrier_raised(p);
712 /* No carrier control - don't block */
713 return 1;
716 static void serial_dtr_rts(struct tty_port *port, int on)
718 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
719 struct usb_serial_driver *drv = p->serial->type;
720 if (drv->dtr_rts)
721 drv->dtr_rts(p, on);
724 static const struct tty_port_operations serial_port_ops = {
725 .carrier_raised = serial_carrier_raised,
726 .dtr_rts = serial_dtr_rts,
729 int usb_serial_probe(struct usb_interface *interface,
730 const struct usb_device_id *id)
732 struct usb_device *dev = interface_to_usbdev(interface);
733 struct usb_serial *serial = NULL;
734 struct usb_serial_port *port;
735 struct usb_host_interface *iface_desc;
736 struct usb_endpoint_descriptor *endpoint;
737 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
738 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
739 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
740 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
741 struct usb_serial_driver *type = NULL;
742 int retval;
743 unsigned int minor;
744 int buffer_size;
745 int i;
746 int num_interrupt_in = 0;
747 int num_interrupt_out = 0;
748 int num_bulk_in = 0;
749 int num_bulk_out = 0;
750 int num_ports = 0;
751 int max_endpoints;
753 lock_kernel(); /* guard against unloading a serial driver module */
754 type = search_serial_device(interface);
755 if (!type) {
756 unlock_kernel();
757 dbg("none matched");
758 return -ENODEV;
761 serial = create_serial(dev, interface, type);
762 if (!serial) {
763 unlock_kernel();
764 dev_err(&interface->dev, "%s - out of memory\n", __func__);
765 return -ENOMEM;
768 /* if this device type has a probe function, call it */
769 if (type->probe) {
770 const struct usb_device_id *id;
772 if (!try_module_get(type->driver.owner)) {
773 unlock_kernel();
774 dev_err(&interface->dev,
775 "module get failed, exiting\n");
776 kfree(serial);
777 return -EIO;
780 id = get_iface_id(type, interface);
781 retval = type->probe(serial, id);
782 module_put(type->driver.owner);
784 if (retval) {
785 unlock_kernel();
786 dbg("sub driver rejected device");
787 kfree(serial);
788 return retval;
792 /* descriptor matches, let's find the endpoints needed */
793 /* check out the endpoints */
794 iface_desc = interface->cur_altsetting;
795 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
796 endpoint = &iface_desc->endpoint[i].desc;
798 if (usb_endpoint_is_bulk_in(endpoint)) {
799 /* we found a bulk in endpoint */
800 dbg("found bulk in on endpoint %d", i);
801 bulk_in_endpoint[num_bulk_in] = endpoint;
802 ++num_bulk_in;
805 if (usb_endpoint_is_bulk_out(endpoint)) {
806 /* we found a bulk out endpoint */
807 dbg("found bulk out on endpoint %d", i);
808 bulk_out_endpoint[num_bulk_out] = endpoint;
809 ++num_bulk_out;
812 if (usb_endpoint_is_int_in(endpoint)) {
813 /* we found a interrupt in endpoint */
814 dbg("found interrupt in on endpoint %d", i);
815 interrupt_in_endpoint[num_interrupt_in] = endpoint;
816 ++num_interrupt_in;
819 if (usb_endpoint_is_int_out(endpoint)) {
820 /* we found an interrupt out endpoint */
821 dbg("found interrupt out on endpoint %d", i);
822 interrupt_out_endpoint[num_interrupt_out] = endpoint;
823 ++num_interrupt_out;
827 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
828 /* BEGIN HORRIBLE HACK FOR PL2303 */
829 /* this is needed due to the looney way its endpoints are set up */
830 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
831 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
832 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
833 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
834 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
835 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
836 ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
837 (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
838 if (interface != dev->actconfig->interface[0]) {
839 /* check out the endpoints of the other interface*/
840 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
841 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
842 endpoint = &iface_desc->endpoint[i].desc;
843 if (usb_endpoint_is_int_in(endpoint)) {
844 /* we found a interrupt in endpoint */
845 dbg("found interrupt in for Prolific device on separate interface");
846 interrupt_in_endpoint[num_interrupt_in] = endpoint;
847 ++num_interrupt_in;
852 /* Now make sure the PL-2303 is configured correctly.
853 * If not, give up now and hope this hack will work
854 * properly during a later invocation of usb_serial_probe
856 if (num_bulk_in == 0 || num_bulk_out == 0) {
857 unlock_kernel();
858 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
859 kfree(serial);
860 return -ENODEV;
863 /* END HORRIBLE HACK FOR PL2303 */
864 #endif
866 #ifdef CONFIG_USB_SERIAL_GENERIC
867 if (type == &usb_serial_generic_device) {
868 num_ports = num_bulk_out;
869 if (num_ports == 0) {
870 unlock_kernel();
871 dev_err(&interface->dev,
872 "Generic device with no bulk out, not allowed.\n");
873 kfree(serial);
874 return -EIO;
877 #endif
878 if (!num_ports) {
879 /* if this device type has a calc_num_ports function, call it */
880 if (type->calc_num_ports) {
881 if (!try_module_get(type->driver.owner)) {
882 unlock_kernel();
883 dev_err(&interface->dev,
884 "module get failed, exiting\n");
885 kfree(serial);
886 return -EIO;
888 num_ports = type->calc_num_ports(serial);
889 module_put(type->driver.owner);
891 if (!num_ports)
892 num_ports = type->num_ports;
895 serial->num_ports = num_ports;
896 serial->num_bulk_in = num_bulk_in;
897 serial->num_bulk_out = num_bulk_out;
898 serial->num_interrupt_in = num_interrupt_in;
899 serial->num_interrupt_out = num_interrupt_out;
901 /* found all that we need */
902 dev_info(&interface->dev, "%s converter detected\n",
903 type->description);
905 /* create our ports, we need as many as the max endpoints */
906 /* we don't use num_ports here because some devices have more
907 endpoint pairs than ports */
908 max_endpoints = max(num_bulk_in, num_bulk_out);
909 max_endpoints = max(max_endpoints, num_interrupt_in);
910 max_endpoints = max(max_endpoints, num_interrupt_out);
911 max_endpoints = max(max_endpoints, (int)serial->num_ports);
912 serial->num_port_pointers = max_endpoints;
913 unlock_kernel();
915 dbg("%s - setting up %d port structures for this device",
916 __func__, max_endpoints);
917 for (i = 0; i < max_endpoints; ++i) {
918 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
919 if (!port)
920 goto probe_error;
921 tty_port_init(&port->port);
922 port->port.ops = &serial_port_ops;
923 port->serial = serial;
924 spin_lock_init(&port->lock);
925 mutex_init(&port->mutex);
926 INIT_WORK(&port->work, usb_serial_port_work);
927 serial->port[i] = port;
928 port->dev.parent = &interface->dev;
929 port->dev.driver = NULL;
930 port->dev.bus = &usb_serial_bus_type;
931 port->dev.release = &port_release;
932 device_initialize(&port->dev);
935 /* set up the endpoint information */
936 for (i = 0; i < num_bulk_in; ++i) {
937 endpoint = bulk_in_endpoint[i];
938 port = serial->port[i];
939 port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
940 if (!port->read_urb) {
941 dev_err(&interface->dev, "No free urbs available\n");
942 goto probe_error;
944 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
945 port->bulk_in_size = buffer_size;
946 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
947 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
948 if (!port->bulk_in_buffer) {
949 dev_err(&interface->dev,
950 "Couldn't allocate bulk_in_buffer\n");
951 goto probe_error;
953 usb_fill_bulk_urb(port->read_urb, dev,
954 usb_rcvbulkpipe(dev,
955 endpoint->bEndpointAddress),
956 port->bulk_in_buffer, buffer_size,
957 serial->type->read_bulk_callback, port);
960 for (i = 0; i < num_bulk_out; ++i) {
961 endpoint = bulk_out_endpoint[i];
962 port = serial->port[i];
963 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
964 if (!port->write_urb) {
965 dev_err(&interface->dev, "No free urbs available\n");
966 goto probe_error;
968 port->write_fifo = kfifo_alloc(PAGE_SIZE, GFP_KERNEL,
969 &port->lock);
970 if (IS_ERR(port->write_fifo))
971 goto probe_error;
972 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
973 port->bulk_out_size = buffer_size;
974 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
975 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
976 if (!port->bulk_out_buffer) {
977 dev_err(&interface->dev,
978 "Couldn't allocate bulk_out_buffer\n");
979 goto probe_error;
981 usb_fill_bulk_urb(port->write_urb, dev,
982 usb_sndbulkpipe(dev,
983 endpoint->bEndpointAddress),
984 port->bulk_out_buffer, buffer_size,
985 serial->type->write_bulk_callback, port);
988 if (serial->type->read_int_callback) {
989 for (i = 0; i < num_interrupt_in; ++i) {
990 endpoint = interrupt_in_endpoint[i];
991 port = serial->port[i];
992 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
993 if (!port->interrupt_in_urb) {
994 dev_err(&interface->dev,
995 "No free urbs available\n");
996 goto probe_error;
998 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
999 port->interrupt_in_endpointAddress =
1000 endpoint->bEndpointAddress;
1001 port->interrupt_in_buffer = kmalloc(buffer_size,
1002 GFP_KERNEL);
1003 if (!port->interrupt_in_buffer) {
1004 dev_err(&interface->dev,
1005 "Couldn't allocate interrupt_in_buffer\n");
1006 goto probe_error;
1008 usb_fill_int_urb(port->interrupt_in_urb, dev,
1009 usb_rcvintpipe(dev,
1010 endpoint->bEndpointAddress),
1011 port->interrupt_in_buffer, buffer_size,
1012 serial->type->read_int_callback, port,
1013 endpoint->bInterval);
1015 } else if (num_interrupt_in) {
1016 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
1019 if (serial->type->write_int_callback) {
1020 for (i = 0; i < num_interrupt_out; ++i) {
1021 endpoint = interrupt_out_endpoint[i];
1022 port = serial->port[i];
1023 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
1024 if (!port->interrupt_out_urb) {
1025 dev_err(&interface->dev,
1026 "No free urbs available\n");
1027 goto probe_error;
1029 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
1030 port->interrupt_out_size = buffer_size;
1031 port->interrupt_out_endpointAddress =
1032 endpoint->bEndpointAddress;
1033 port->interrupt_out_buffer = kmalloc(buffer_size,
1034 GFP_KERNEL);
1035 if (!port->interrupt_out_buffer) {
1036 dev_err(&interface->dev,
1037 "Couldn't allocate interrupt_out_buffer\n");
1038 goto probe_error;
1040 usb_fill_int_urb(port->interrupt_out_urb, dev,
1041 usb_sndintpipe(dev,
1042 endpoint->bEndpointAddress),
1043 port->interrupt_out_buffer, buffer_size,
1044 serial->type->write_int_callback, port,
1045 endpoint->bInterval);
1047 } else if (num_interrupt_out) {
1048 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
1051 /* if this device type has an attach function, call it */
1052 if (type->attach) {
1053 if (!try_module_get(type->driver.owner)) {
1054 dev_err(&interface->dev,
1055 "module get failed, exiting\n");
1056 goto probe_error;
1058 retval = type->attach(serial);
1059 module_put(type->driver.owner);
1060 if (retval < 0)
1061 goto probe_error;
1062 if (retval > 0) {
1063 /* quietly accept this device, but don't bind to a
1064 serial port as it's about to disappear */
1065 serial->num_ports = 0;
1066 goto exit;
1070 if (get_free_serial(serial, num_ports, &minor) == NULL) {
1071 dev_err(&interface->dev, "No more free serial devices\n");
1072 goto probe_error;
1074 serial->minor = minor;
1076 /* register all of the individual ports with the driver core */
1077 for (i = 0; i < num_ports; ++i) {
1078 port = serial->port[i];
1079 dev_set_name(&port->dev, "ttyUSB%d", port->number);
1080 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
1081 port->dev_state = PORT_REGISTERING;
1082 retval = device_add(&port->dev);
1083 if (retval) {
1084 dev_err(&port->dev, "Error registering port device, "
1085 "continuing\n");
1086 port->dev_state = PORT_UNREGISTERED;
1087 } else {
1088 port->dev_state = PORT_REGISTERED;
1092 usb_serial_console_init(debug, minor);
1094 exit:
1095 /* success */
1096 usb_set_intfdata(interface, serial);
1097 return 0;
1099 probe_error:
1100 usb_serial_put(serial);
1101 return -EIO;
1103 EXPORT_SYMBOL_GPL(usb_serial_probe);
1105 void usb_serial_disconnect(struct usb_interface *interface)
1107 int i;
1108 struct usb_serial *serial = usb_get_intfdata(interface);
1109 struct device *dev = &interface->dev;
1110 struct usb_serial_port *port;
1112 usb_serial_console_disconnect(serial);
1113 dbg("%s", __func__);
1115 mutex_lock(&serial->disc_mutex);
1116 usb_set_intfdata(interface, NULL);
1117 /* must set a flag, to signal subdrivers */
1118 serial->disconnected = 1;
1119 mutex_unlock(&serial->disc_mutex);
1121 for (i = 0; i < serial->num_ports; ++i) {
1122 port = serial->port[i];
1123 if (port) {
1124 struct tty_struct *tty = tty_port_tty_get(&port->port);
1125 if (tty) {
1126 tty_vhangup(tty);
1127 tty_kref_put(tty);
1129 kill_traffic(port);
1130 cancel_work_sync(&port->work);
1131 if (port->dev_state == PORT_REGISTERED) {
1133 /* Make sure the port is bound so that the
1134 * driver's port_remove method is called.
1136 if (!port->dev.driver) {
1137 int rc;
1139 port->dev.driver =
1140 &serial->type->driver;
1141 rc = device_bind_driver(&port->dev);
1143 port->dev_state = PORT_UNREGISTERING;
1144 device_del(&port->dev);
1145 port->dev_state = PORT_UNREGISTERED;
1149 serial->type->disconnect(serial);
1151 /* let the last holder of this object cause it to be cleaned up */
1152 usb_serial_put(serial);
1153 dev_info(dev, "device disconnected\n");
1155 EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1157 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1159 struct usb_serial *serial = usb_get_intfdata(intf);
1160 struct usb_serial_port *port;
1161 int i, r = 0;
1163 serial->suspending = 1;
1165 if (serial->type->suspend) {
1166 r = serial->type->suspend(serial, message);
1167 if (r < 0)
1168 goto err_out;
1171 for (i = 0; i < serial->num_ports; ++i) {
1172 port = serial->port[i];
1173 if (port)
1174 kill_traffic(port);
1177 err_out:
1178 return r;
1180 EXPORT_SYMBOL(usb_serial_suspend);
1182 int usb_serial_resume(struct usb_interface *intf)
1184 struct usb_serial *serial = usb_get_intfdata(intf);
1185 int rv;
1187 serial->suspending = 0;
1188 if (serial->type->resume)
1189 rv = serial->type->resume(serial);
1190 else
1191 rv = usb_serial_generic_resume(serial);
1193 return rv;
1195 EXPORT_SYMBOL(usb_serial_resume);
1197 static const struct tty_operations serial_ops = {
1198 .open = serial_open,
1199 .close = serial_close,
1200 .write = serial_write,
1201 .hangup = serial_hangup,
1202 .write_room = serial_write_room,
1203 .ioctl = serial_ioctl,
1204 .set_termios = serial_set_termios,
1205 .throttle = serial_throttle,
1206 .unthrottle = serial_unthrottle,
1207 .break_ctl = serial_break,
1208 .chars_in_buffer = serial_chars_in_buffer,
1209 .tiocmget = serial_tiocmget,
1210 .tiocmset = serial_tiocmset,
1211 .cleanup = serial_cleanup,
1212 .install = serial_install,
1213 .proc_fops = &serial_proc_fops,
1217 struct tty_driver *usb_serial_tty_driver;
1219 static int __init usb_serial_init(void)
1221 int i;
1222 int result;
1224 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1225 if (!usb_serial_tty_driver)
1226 return -ENOMEM;
1228 /* Initialize our global data */
1229 for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1230 serial_table[i] = NULL;
1232 result = bus_register(&usb_serial_bus_type);
1233 if (result) {
1234 printk(KERN_ERR "usb-serial: %s - registering bus driver "
1235 "failed\n", __func__);
1236 goto exit_bus;
1239 usb_serial_tty_driver->owner = THIS_MODULE;
1240 usb_serial_tty_driver->driver_name = "usbserial";
1241 usb_serial_tty_driver->name = "ttyUSB";
1242 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1243 usb_serial_tty_driver->minor_start = 0;
1244 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1245 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1246 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1247 TTY_DRIVER_DYNAMIC_DEV;
1248 usb_serial_tty_driver->init_termios = tty_std_termios;
1249 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1250 | HUPCL | CLOCAL;
1251 usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1252 usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1253 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1254 result = tty_register_driver(usb_serial_tty_driver);
1255 if (result) {
1256 printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n",
1257 __func__);
1258 goto exit_reg_driver;
1261 /* register the USB driver */
1262 result = usb_register(&usb_serial_driver);
1263 if (result < 0) {
1264 printk(KERN_ERR "usb-serial: %s - usb_register failed\n",
1265 __func__);
1266 goto exit_tty;
1269 /* register the generic driver, if we should */
1270 result = usb_serial_generic_register(debug);
1271 if (result < 0) {
1272 printk(KERN_ERR "usb-serial: %s - registering generic "
1273 "driver failed\n", __func__);
1274 goto exit_generic;
1277 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1279 return result;
1281 exit_generic:
1282 usb_deregister(&usb_serial_driver);
1284 exit_tty:
1285 tty_unregister_driver(usb_serial_tty_driver);
1287 exit_reg_driver:
1288 bus_unregister(&usb_serial_bus_type);
1290 exit_bus:
1291 printk(KERN_ERR "usb-serial: %s - returning with error %d\n",
1292 __func__, result);
1293 put_tty_driver(usb_serial_tty_driver);
1294 return result;
1298 static void __exit usb_serial_exit(void)
1300 usb_serial_console_exit();
1302 usb_serial_generic_deregister();
1304 usb_deregister(&usb_serial_driver);
1305 tty_unregister_driver(usb_serial_tty_driver);
1306 put_tty_driver(usb_serial_tty_driver);
1307 bus_unregister(&usb_serial_bus_type);
1311 module_init(usb_serial_init);
1312 module_exit(usb_serial_exit);
1314 #define set_to_generic_if_null(type, function) \
1315 do { \
1316 if (!type->function) { \
1317 type->function = usb_serial_generic_##function; \
1318 dbg("Had to override the " #function \
1319 " usb serial operation with the generic one.");\
1321 } while (0)
1323 static void fixup_generic(struct usb_serial_driver *device)
1325 set_to_generic_if_null(device, open);
1326 set_to_generic_if_null(device, write);
1327 set_to_generic_if_null(device, close);
1328 set_to_generic_if_null(device, write_room);
1329 set_to_generic_if_null(device, chars_in_buffer);
1330 set_to_generic_if_null(device, read_bulk_callback);
1331 set_to_generic_if_null(device, write_bulk_callback);
1332 set_to_generic_if_null(device, disconnect);
1333 set_to_generic_if_null(device, release);
1336 int usb_serial_register(struct usb_serial_driver *driver)
1338 /* must be called with BKL held */
1339 int retval;
1341 if (usb_disabled())
1342 return -ENODEV;
1344 fixup_generic(driver);
1346 if (!driver->description)
1347 driver->description = driver->driver.name;
1349 /* Add this device to our list of devices */
1350 list_add(&driver->driver_list, &usb_serial_driver_list);
1352 retval = usb_serial_bus_register(driver);
1353 if (retval) {
1354 printk(KERN_ERR "usb-serial: problem %d when registering "
1355 "driver %s\n", retval, driver->description);
1356 list_del(&driver->driver_list);
1357 } else
1358 printk(KERN_INFO "USB Serial support registered for %s\n",
1359 driver->description);
1361 return retval;
1363 EXPORT_SYMBOL_GPL(usb_serial_register);
1366 void usb_serial_deregister(struct usb_serial_driver *device)
1368 /* must be called with BKL held */
1369 printk(KERN_INFO "USB Serial deregistering driver %s\n",
1370 device->description);
1371 list_del(&device->driver_list);
1372 usb_serial_bus_deregister(device);
1374 EXPORT_SYMBOL_GPL(usb_serial_deregister);
1376 /* Module information */
1377 MODULE_AUTHOR(DRIVER_AUTHOR);
1378 MODULE_DESCRIPTION(DRIVER_DESC);
1379 MODULE_LICENSE("GPL");
1381 module_param(debug, bool, S_IRUGO | S_IWUSR);
1382 MODULE_PARM_DESC(debug, "Debug enabled or not");