OMAP3 SRF: Generic shared resource f/w
[linux-ginger.git] / drivers / usb / serial / usb-serial.c
blobbd3fa7ff15b12166bf0cf2ad86f3214144f914c0
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 if (serial->attached)
160 serial->type->release(serial);
162 /* Now that nothing is using the ports, they can be freed */
163 for (i = 0; i < serial->num_port_pointers; ++i) {
164 port = serial->port[i];
165 if (port) {
166 port->serial = NULL;
167 put_device(&port->dev);
171 usb_put_dev(serial->dev);
172 kfree(serial);
175 void usb_serial_put(struct usb_serial *serial)
177 kref_put(&serial->kref, destroy_serial);
180 /*****************************************************************************
181 * Driver tty interface functions
182 *****************************************************************************/
185 * serial_install - install tty
186 * @driver: the driver (USB in our case)
187 * @tty: the tty being created
189 * Create the termios objects for this tty. We use the default
190 * USB serial settings but permit them to be overridden by
191 * serial->type->init_termios.
193 * This is the first place a new tty gets used. Hence this is where we
194 * acquire references to the usb_serial structure and the driver module,
195 * where we store a pointer to the port, and where we do an autoresume.
196 * All these actions are reversed in serial_cleanup().
198 static int serial_install(struct tty_driver *driver, struct tty_struct *tty)
200 int idx = tty->index;
201 struct usb_serial *serial;
202 struct usb_serial_port *port;
203 int retval = -ENODEV;
205 dbg("%s", __func__);
207 serial = usb_serial_get_by_index(idx);
208 if (!serial)
209 return retval;
211 port = serial->port[idx - serial->minor];
212 if (!port)
213 goto error_no_port;
214 if (!try_module_get(serial->type->driver.owner))
215 goto error_module_get;
217 /* perform the standard setup */
218 retval = tty_init_termios(tty);
219 if (retval)
220 goto error_init_termios;
222 retval = usb_autopm_get_interface(serial->interface);
223 if (retval)
224 goto error_get_interface;
226 mutex_unlock(&serial->disc_mutex);
228 /* allow the driver to update the settings */
229 if (serial->type->init_termios)
230 serial->type->init_termios(tty);
232 tty->driver_data = port;
234 /* Final install (we use the default method) */
235 tty_driver_kref_get(driver);
236 tty->count++;
237 driver->ttys[idx] = tty;
238 return retval;
240 error_get_interface:
241 error_init_termios:
242 module_put(serial->type->driver.owner);
243 error_module_get:
244 error_no_port:
245 usb_serial_put(serial);
246 mutex_unlock(&serial->disc_mutex);
247 return retval;
250 static int serial_open(struct tty_struct *tty, struct file *filp)
252 struct usb_serial_port *port = tty->driver_data;
253 struct usb_serial *serial = port->serial;
254 int retval;
256 dbg("%s - port %d", __func__, port->number);
258 spin_lock_irq(&port->port.lock);
259 if (!tty_hung_up_p(filp))
260 ++port->port.count;
261 spin_unlock_irq(&port->port.lock);
262 tty_port_tty_set(&port->port, tty);
264 /* Do the device-specific open only if the hardware isn't
265 * already initialized.
267 if (!test_bit(ASYNCB_INITIALIZED, &port->port.flags)) {
268 if (mutex_lock_interruptible(&port->mutex))
269 return -ERESTARTSYS;
270 mutex_lock(&serial->disc_mutex);
271 if (serial->disconnected)
272 retval = -ENODEV;
273 else
274 retval = port->serial->type->open(tty, port);
275 mutex_unlock(&serial->disc_mutex);
276 mutex_unlock(&port->mutex);
277 if (retval)
278 return retval;
279 set_bit(ASYNCB_INITIALIZED, &port->port.flags);
282 /* Now do the correct tty layer semantics */
283 retval = tty_port_block_til_ready(&port->port, tty, filp);
284 return retval;
288 * serial_down - shut down hardware
289 * @port: port to shut down
291 * Shut down a USB serial port unless it is the console. We never
292 * shut down the console hardware as it will always be in use.
294 static void serial_down(struct usb_serial_port *port)
296 struct usb_serial_driver *drv = port->serial->type;
299 * The console is magical. Do not hang up the console hardware
300 * or there will be tears.
302 if (port->console)
303 return;
305 /* Don't call the close method if the hardware hasn't been
306 * initialized.
308 if (!test_and_clear_bit(ASYNCB_INITIALIZED, &port->port.flags))
309 return;
311 mutex_lock(&port->mutex);
312 if (drv->close)
313 drv->close(port);
314 mutex_unlock(&port->mutex);
317 static void serial_hangup(struct tty_struct *tty)
319 struct usb_serial_port *port = tty->driver_data;
321 dbg("%s - port %d", __func__, port->number);
323 serial_down(port);
324 tty_port_hangup(&port->port);
327 static void serial_close(struct tty_struct *tty, struct file *filp)
329 struct usb_serial_port *port = tty->driver_data;
331 dbg("%s - port %d", __func__, port->number);
333 if (tty_hung_up_p(filp))
334 return;
335 if (tty_port_close_start(&port->port, tty, filp) == 0)
336 return;
337 serial_down(port);
338 tty_port_close_end(&port->port, tty);
339 tty_port_tty_set(&port->port, NULL);
343 * serial_cleanup - free resources post close/hangup
344 * @port: port to free up
346 * Do the resource freeing and refcount dropping for the port.
347 * Avoid freeing the console.
349 * Called asynchronously after the last tty kref is dropped,
350 * and the tty layer has already done the tty_shutdown(tty);
352 static void serial_cleanup(struct tty_struct *tty)
354 struct usb_serial_port *port = tty->driver_data;
355 struct usb_serial *serial;
356 struct module *owner;
358 /* The console is magical. Do not hang up the console hardware
359 * or there will be tears.
361 if (port->console)
362 return;
364 dbg("%s - port %d", __func__, port->number);
366 tty->driver_data = NULL;
368 serial = port->serial;
369 owner = serial->type->driver.owner;
371 mutex_lock(&serial->disc_mutex);
372 if (!serial->disconnected)
373 usb_autopm_put_interface(serial->interface);
374 mutex_unlock(&serial->disc_mutex);
376 usb_serial_put(serial);
377 module_put(owner);
380 static int serial_write(struct tty_struct *tty, const unsigned char *buf,
381 int count)
383 struct usb_serial_port *port = tty->driver_data;
384 int retval = -ENODEV;
386 if (port->serial->dev->state == USB_STATE_NOTATTACHED)
387 goto exit;
389 dbg("%s - port %d, %d byte(s)", __func__, port->number, count);
391 /* count is managed under the mutex lock for the tty so cannot
392 drop to zero until after the last close completes */
393 WARN_ON(!port->port.count);
395 /* pass on to the driver specific version of this function */
396 retval = port->serial->type->write(tty, port, buf, count);
398 exit:
399 return retval;
402 static int serial_write_room(struct tty_struct *tty)
404 struct usb_serial_port *port = tty->driver_data;
405 dbg("%s - port %d", __func__, port->number);
406 WARN_ON(!port->port.count);
407 /* pass on to the driver specific version of this function */
408 return port->serial->type->write_room(tty);
411 static int serial_chars_in_buffer(struct tty_struct *tty)
413 struct usb_serial_port *port = tty->driver_data;
414 dbg("%s = port %d", __func__, port->number);
416 /* if the device was unplugged then any remaining characters
417 fell out of the connector ;) */
418 if (port->serial->disconnected)
419 return 0;
420 /* pass on to the driver specific version of this function */
421 return port->serial->type->chars_in_buffer(tty);
424 static void serial_throttle(struct tty_struct *tty)
426 struct usb_serial_port *port = tty->driver_data;
427 dbg("%s - port %d", __func__, port->number);
429 WARN_ON(!port->port.count);
430 /* pass on to the driver specific version of this function */
431 if (port->serial->type->throttle)
432 port->serial->type->throttle(tty);
435 static void serial_unthrottle(struct tty_struct *tty)
437 struct usb_serial_port *port = tty->driver_data;
438 dbg("%s - port %d", __func__, port->number);
440 WARN_ON(!port->port.count);
441 /* pass on to the driver specific version of this function */
442 if (port->serial->type->unthrottle)
443 port->serial->type->unthrottle(tty);
446 static int serial_ioctl(struct tty_struct *tty, struct file *file,
447 unsigned int cmd, unsigned long arg)
449 struct usb_serial_port *port = tty->driver_data;
450 int retval = -ENODEV;
452 dbg("%s - port %d, cmd 0x%.4x", __func__, port->number, cmd);
454 WARN_ON(!port->port.count);
456 /* pass on to the driver specific version of this function
457 if it is available */
458 if (port->serial->type->ioctl) {
459 retval = port->serial->type->ioctl(tty, file, cmd, arg);
460 } else
461 retval = -ENOIOCTLCMD;
462 return retval;
465 static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
467 struct usb_serial_port *port = tty->driver_data;
468 dbg("%s - port %d", __func__, port->number);
470 WARN_ON(!port->port.count);
471 /* pass on to the driver specific version of this function
472 if it is available */
473 if (port->serial->type->set_termios)
474 port->serial->type->set_termios(tty, port, old);
475 else
476 tty_termios_copy_hw(tty->termios, old);
479 static int serial_break(struct tty_struct *tty, int break_state)
481 struct usb_serial_port *port = tty->driver_data;
483 dbg("%s - port %d", __func__, port->number);
485 WARN_ON(!port->port.count);
486 /* pass on to the driver specific version of this function
487 if it is available */
488 if (port->serial->type->break_ctl)
489 port->serial->type->break_ctl(tty, break_state);
490 return 0;
493 static int serial_proc_show(struct seq_file *m, void *v)
495 struct usb_serial *serial;
496 int i;
497 char tmp[40];
499 dbg("%s", __func__);
500 seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
501 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
502 serial = usb_serial_get_by_index(i);
503 if (serial == NULL)
504 continue;
506 seq_printf(m, "%d:", i);
507 if (serial->type->driver.owner)
508 seq_printf(m, " module:%s",
509 module_name(serial->type->driver.owner));
510 seq_printf(m, " name:\"%s\"",
511 serial->type->description);
512 seq_printf(m, " vendor:%04x product:%04x",
513 le16_to_cpu(serial->dev->descriptor.idVendor),
514 le16_to_cpu(serial->dev->descriptor.idProduct));
515 seq_printf(m, " num_ports:%d", serial->num_ports);
516 seq_printf(m, " port:%d", i - serial->minor + 1);
517 usb_make_path(serial->dev, tmp, sizeof(tmp));
518 seq_printf(m, " path:%s", tmp);
520 seq_putc(m, '\n');
521 usb_serial_put(serial);
522 mutex_unlock(&serial->disc_mutex);
524 return 0;
527 static int serial_proc_open(struct inode *inode, struct file *file)
529 return single_open(file, serial_proc_show, NULL);
532 static const struct file_operations serial_proc_fops = {
533 .owner = THIS_MODULE,
534 .open = serial_proc_open,
535 .read = seq_read,
536 .llseek = seq_lseek,
537 .release = single_release,
540 static int serial_tiocmget(struct tty_struct *tty, struct file *file)
542 struct usb_serial_port *port = tty->driver_data;
544 dbg("%s - port %d", __func__, port->number);
546 WARN_ON(!port->port.count);
547 if (port->serial->type->tiocmget)
548 return port->serial->type->tiocmget(tty, file);
549 return -EINVAL;
552 static int serial_tiocmset(struct tty_struct *tty, struct file *file,
553 unsigned int set, unsigned int clear)
555 struct usb_serial_port *port = tty->driver_data;
557 dbg("%s - port %d", __func__, port->number);
559 WARN_ON(!port->port.count);
560 if (port->serial->type->tiocmset)
561 return port->serial->type->tiocmset(tty, file, set, clear);
562 return -EINVAL;
566 * We would be calling tty_wakeup here, but unfortunately some line
567 * disciplines have an annoying habit of calling tty->write from
568 * the write wakeup callback (e.g. n_hdlc.c).
570 void usb_serial_port_softint(struct usb_serial_port *port)
572 schedule_work(&port->work);
574 EXPORT_SYMBOL_GPL(usb_serial_port_softint);
576 static void usb_serial_port_work(struct work_struct *work)
578 struct usb_serial_port *port =
579 container_of(work, struct usb_serial_port, work);
580 struct tty_struct *tty;
582 dbg("%s - port %d", __func__, port->number);
584 tty = tty_port_tty_get(&port->port);
585 if (!tty)
586 return;
588 tty_wakeup(tty);
589 tty_kref_put(tty);
592 static void kill_traffic(struct usb_serial_port *port)
594 usb_kill_urb(port->read_urb);
595 usb_kill_urb(port->write_urb);
597 * This is tricky.
598 * Some drivers submit the read_urb in the
599 * handler for the write_urb or vice versa
600 * this order determines the order in which
601 * usb_kill_urb() must be used to reliably
602 * kill the URBs. As it is unknown here,
603 * both orders must be used in turn.
604 * The call below is not redundant.
606 usb_kill_urb(port->read_urb);
607 usb_kill_urb(port->interrupt_in_urb);
608 usb_kill_urb(port->interrupt_out_urb);
611 static void port_release(struct device *dev)
613 struct usb_serial_port *port = to_usb_serial_port(dev);
615 dbg ("%s - %s", __func__, dev_name(dev));
618 * Stop all the traffic before cancelling the work, so that
619 * nobody will restart it by calling usb_serial_port_softint.
621 kill_traffic(port);
622 cancel_work_sync(&port->work);
624 usb_free_urb(port->read_urb);
625 usb_free_urb(port->write_urb);
626 usb_free_urb(port->interrupt_in_urb);
627 usb_free_urb(port->interrupt_out_urb);
628 if (!IS_ERR(port->write_fifo) && port->write_fifo)
629 kfifo_free(port->write_fifo);
630 kfree(port->bulk_in_buffer);
631 kfree(port->bulk_out_buffer);
632 kfree(port->interrupt_in_buffer);
633 kfree(port->interrupt_out_buffer);
634 kfree(port);
637 static struct usb_serial *create_serial(struct usb_device *dev,
638 struct usb_interface *interface,
639 struct usb_serial_driver *driver)
641 struct usb_serial *serial;
643 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
644 if (!serial) {
645 dev_err(&dev->dev, "%s - out of memory\n", __func__);
646 return NULL;
648 serial->dev = usb_get_dev(dev);
649 serial->type = driver;
650 serial->interface = interface;
651 kref_init(&serial->kref);
652 mutex_init(&serial->disc_mutex);
653 serial->minor = SERIAL_TTY_NO_MINOR;
655 return serial;
658 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
659 struct usb_serial_driver *drv)
661 struct usb_dynid *dynid;
663 spin_lock(&drv->dynids.lock);
664 list_for_each_entry(dynid, &drv->dynids.list, node) {
665 if (usb_match_one_id(intf, &dynid->id)) {
666 spin_unlock(&drv->dynids.lock);
667 return &dynid->id;
670 spin_unlock(&drv->dynids.lock);
671 return NULL;
674 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
675 struct usb_interface *intf)
677 const struct usb_device_id *id;
679 id = usb_match_id(intf, drv->id_table);
680 if (id) {
681 dbg("static descriptor matches");
682 goto exit;
684 id = match_dynamic_id(intf, drv);
685 if (id)
686 dbg("dynamic descriptor matches");
687 exit:
688 return id;
691 static struct usb_serial_driver *search_serial_device(
692 struct usb_interface *iface)
694 const struct usb_device_id *id;
695 struct usb_serial_driver *drv;
697 /* Check if the usb id matches a known device */
698 list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
699 id = get_iface_id(drv, iface);
700 if (id)
701 return drv;
704 return NULL;
707 static int serial_carrier_raised(struct tty_port *port)
709 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
710 struct usb_serial_driver *drv = p->serial->type;
711 if (drv->carrier_raised)
712 return drv->carrier_raised(p);
713 /* No carrier control - don't block */
714 return 1;
717 static void serial_dtr_rts(struct tty_port *port, int on)
719 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
720 struct usb_serial_driver *drv = p->serial->type;
721 if (drv->dtr_rts)
722 drv->dtr_rts(p, on);
725 static const struct tty_port_operations serial_port_ops = {
726 .carrier_raised = serial_carrier_raised,
727 .dtr_rts = serial_dtr_rts,
730 int usb_serial_probe(struct usb_interface *interface,
731 const struct usb_device_id *id)
733 struct usb_device *dev = interface_to_usbdev(interface);
734 struct usb_serial *serial = NULL;
735 struct usb_serial_port *port;
736 struct usb_host_interface *iface_desc;
737 struct usb_endpoint_descriptor *endpoint;
738 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
739 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
740 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
741 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
742 struct usb_serial_driver *type = NULL;
743 int retval;
744 unsigned int minor;
745 int buffer_size;
746 int i;
747 int num_interrupt_in = 0;
748 int num_interrupt_out = 0;
749 int num_bulk_in = 0;
750 int num_bulk_out = 0;
751 int num_ports = 0;
752 int max_endpoints;
754 lock_kernel(); /* guard against unloading a serial driver module */
755 type = search_serial_device(interface);
756 if (!type) {
757 unlock_kernel();
758 dbg("none matched");
759 return -ENODEV;
762 serial = create_serial(dev, interface, type);
763 if (!serial) {
764 unlock_kernel();
765 dev_err(&interface->dev, "%s - out of memory\n", __func__);
766 return -ENOMEM;
769 /* if this device type has a probe function, call it */
770 if (type->probe) {
771 const struct usb_device_id *id;
773 if (!try_module_get(type->driver.owner)) {
774 unlock_kernel();
775 dev_err(&interface->dev,
776 "module get failed, exiting\n");
777 kfree(serial);
778 return -EIO;
781 id = get_iface_id(type, interface);
782 retval = type->probe(serial, id);
783 module_put(type->driver.owner);
785 if (retval) {
786 unlock_kernel();
787 dbg("sub driver rejected device");
788 kfree(serial);
789 return retval;
793 /* descriptor matches, let's find the endpoints needed */
794 /* check out the endpoints */
795 iface_desc = interface->cur_altsetting;
796 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
797 endpoint = &iface_desc->endpoint[i].desc;
799 if (usb_endpoint_is_bulk_in(endpoint)) {
800 /* we found a bulk in endpoint */
801 dbg("found bulk in on endpoint %d", i);
802 bulk_in_endpoint[num_bulk_in] = endpoint;
803 ++num_bulk_in;
806 if (usb_endpoint_is_bulk_out(endpoint)) {
807 /* we found a bulk out endpoint */
808 dbg("found bulk out on endpoint %d", i);
809 bulk_out_endpoint[num_bulk_out] = endpoint;
810 ++num_bulk_out;
813 if (usb_endpoint_is_int_in(endpoint)) {
814 /* we found a interrupt in endpoint */
815 dbg("found interrupt in on endpoint %d", i);
816 interrupt_in_endpoint[num_interrupt_in] = endpoint;
817 ++num_interrupt_in;
820 if (usb_endpoint_is_int_out(endpoint)) {
821 /* we found an interrupt out endpoint */
822 dbg("found interrupt out on endpoint %d", i);
823 interrupt_out_endpoint[num_interrupt_out] = endpoint;
824 ++num_interrupt_out;
828 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
829 /* BEGIN HORRIBLE HACK FOR PL2303 */
830 /* this is needed due to the looney way its endpoints are set up */
831 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
832 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
833 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
834 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
835 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
836 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
837 ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
838 (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
839 if (interface != dev->actconfig->interface[0]) {
840 /* check out the endpoints of the other interface*/
841 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
842 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
843 endpoint = &iface_desc->endpoint[i].desc;
844 if (usb_endpoint_is_int_in(endpoint)) {
845 /* we found a interrupt in endpoint */
846 dbg("found interrupt in for Prolific device on separate interface");
847 interrupt_in_endpoint[num_interrupt_in] = endpoint;
848 ++num_interrupt_in;
853 /* Now make sure the PL-2303 is configured correctly.
854 * If not, give up now and hope this hack will work
855 * properly during a later invocation of usb_serial_probe
857 if (num_bulk_in == 0 || num_bulk_out == 0) {
858 unlock_kernel();
859 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
860 kfree(serial);
861 return -ENODEV;
864 /* END HORRIBLE HACK FOR PL2303 */
865 #endif
867 #ifdef CONFIG_USB_SERIAL_GENERIC
868 if (type == &usb_serial_generic_device) {
869 num_ports = num_bulk_out;
870 if (num_ports == 0) {
871 unlock_kernel();
872 dev_err(&interface->dev,
873 "Generic device with no bulk out, not allowed.\n");
874 kfree(serial);
875 return -EIO;
878 #endif
879 if (!num_ports) {
880 /* if this device type has a calc_num_ports function, call it */
881 if (type->calc_num_ports) {
882 if (!try_module_get(type->driver.owner)) {
883 unlock_kernel();
884 dev_err(&interface->dev,
885 "module get failed, exiting\n");
886 kfree(serial);
887 return -EIO;
889 num_ports = type->calc_num_ports(serial);
890 module_put(type->driver.owner);
892 if (!num_ports)
893 num_ports = type->num_ports;
896 serial->num_ports = num_ports;
897 serial->num_bulk_in = num_bulk_in;
898 serial->num_bulk_out = num_bulk_out;
899 serial->num_interrupt_in = num_interrupt_in;
900 serial->num_interrupt_out = num_interrupt_out;
902 /* found all that we need */
903 dev_info(&interface->dev, "%s converter detected\n",
904 type->description);
906 /* create our ports, we need as many as the max endpoints */
907 /* we don't use num_ports here because some devices have more
908 endpoint pairs than ports */
909 max_endpoints = max(num_bulk_in, num_bulk_out);
910 max_endpoints = max(max_endpoints, num_interrupt_in);
911 max_endpoints = max(max_endpoints, num_interrupt_out);
912 max_endpoints = max(max_endpoints, (int)serial->num_ports);
913 serial->num_port_pointers = max_endpoints;
914 unlock_kernel();
916 dbg("%s - setting up %d port structures for this device",
917 __func__, max_endpoints);
918 for (i = 0; i < max_endpoints; ++i) {
919 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
920 if (!port)
921 goto probe_error;
922 tty_port_init(&port->port);
923 port->port.ops = &serial_port_ops;
924 port->serial = serial;
925 spin_lock_init(&port->lock);
926 mutex_init(&port->mutex);
927 INIT_WORK(&port->work, usb_serial_port_work);
928 serial->port[i] = port;
929 port->dev.parent = &interface->dev;
930 port->dev.driver = NULL;
931 port->dev.bus = &usb_serial_bus_type;
932 port->dev.release = &port_release;
933 device_initialize(&port->dev);
936 /* set up the endpoint information */
937 for (i = 0; i < num_bulk_in; ++i) {
938 endpoint = bulk_in_endpoint[i];
939 port = serial->port[i];
940 port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
941 if (!port->read_urb) {
942 dev_err(&interface->dev, "No free urbs available\n");
943 goto probe_error;
945 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
946 port->bulk_in_size = buffer_size;
947 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
948 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
949 if (!port->bulk_in_buffer) {
950 dev_err(&interface->dev,
951 "Couldn't allocate bulk_in_buffer\n");
952 goto probe_error;
954 usb_fill_bulk_urb(port->read_urb, dev,
955 usb_rcvbulkpipe(dev,
956 endpoint->bEndpointAddress),
957 port->bulk_in_buffer, buffer_size,
958 serial->type->read_bulk_callback, port);
961 for (i = 0; i < num_bulk_out; ++i) {
962 endpoint = bulk_out_endpoint[i];
963 port = serial->port[i];
964 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
965 if (!port->write_urb) {
966 dev_err(&interface->dev, "No free urbs available\n");
967 goto probe_error;
969 port->write_fifo = kfifo_alloc(PAGE_SIZE, GFP_KERNEL,
970 &port->lock);
971 if (IS_ERR(port->write_fifo))
972 goto probe_error;
973 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
974 port->bulk_out_size = buffer_size;
975 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
976 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
977 if (!port->bulk_out_buffer) {
978 dev_err(&interface->dev,
979 "Couldn't allocate bulk_out_buffer\n");
980 goto probe_error;
982 usb_fill_bulk_urb(port->write_urb, dev,
983 usb_sndbulkpipe(dev,
984 endpoint->bEndpointAddress),
985 port->bulk_out_buffer, buffer_size,
986 serial->type->write_bulk_callback, port);
989 if (serial->type->read_int_callback) {
990 for (i = 0; i < num_interrupt_in; ++i) {
991 endpoint = interrupt_in_endpoint[i];
992 port = serial->port[i];
993 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
994 if (!port->interrupt_in_urb) {
995 dev_err(&interface->dev,
996 "No free urbs available\n");
997 goto probe_error;
999 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
1000 port->interrupt_in_endpointAddress =
1001 endpoint->bEndpointAddress;
1002 port->interrupt_in_buffer = kmalloc(buffer_size,
1003 GFP_KERNEL);
1004 if (!port->interrupt_in_buffer) {
1005 dev_err(&interface->dev,
1006 "Couldn't allocate interrupt_in_buffer\n");
1007 goto probe_error;
1009 usb_fill_int_urb(port->interrupt_in_urb, dev,
1010 usb_rcvintpipe(dev,
1011 endpoint->bEndpointAddress),
1012 port->interrupt_in_buffer, buffer_size,
1013 serial->type->read_int_callback, port,
1014 endpoint->bInterval);
1016 } else if (num_interrupt_in) {
1017 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
1020 if (serial->type->write_int_callback) {
1021 for (i = 0; i < num_interrupt_out; ++i) {
1022 endpoint = interrupt_out_endpoint[i];
1023 port = serial->port[i];
1024 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
1025 if (!port->interrupt_out_urb) {
1026 dev_err(&interface->dev,
1027 "No free urbs available\n");
1028 goto probe_error;
1030 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
1031 port->interrupt_out_size = buffer_size;
1032 port->interrupt_out_endpointAddress =
1033 endpoint->bEndpointAddress;
1034 port->interrupt_out_buffer = kmalloc(buffer_size,
1035 GFP_KERNEL);
1036 if (!port->interrupt_out_buffer) {
1037 dev_err(&interface->dev,
1038 "Couldn't allocate interrupt_out_buffer\n");
1039 goto probe_error;
1041 usb_fill_int_urb(port->interrupt_out_urb, dev,
1042 usb_sndintpipe(dev,
1043 endpoint->bEndpointAddress),
1044 port->interrupt_out_buffer, buffer_size,
1045 serial->type->write_int_callback, port,
1046 endpoint->bInterval);
1048 } else if (num_interrupt_out) {
1049 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
1052 /* if this device type has an attach function, call it */
1053 if (type->attach) {
1054 if (!try_module_get(type->driver.owner)) {
1055 dev_err(&interface->dev,
1056 "module get failed, exiting\n");
1057 goto probe_error;
1059 retval = type->attach(serial);
1060 module_put(type->driver.owner);
1061 if (retval < 0)
1062 goto probe_error;
1063 serial->attached = 1;
1064 if (retval > 0) {
1065 /* quietly accept this device, but don't bind to a
1066 serial port as it's about to disappear */
1067 serial->num_ports = 0;
1068 goto exit;
1070 } else {
1071 serial->attached = 1;
1074 if (get_free_serial(serial, num_ports, &minor) == NULL) {
1075 dev_err(&interface->dev, "No more free serial devices\n");
1076 goto probe_error;
1078 serial->minor = minor;
1080 /* register all of the individual ports with the driver core */
1081 for (i = 0; i < num_ports; ++i) {
1082 port = serial->port[i];
1083 dev_set_name(&port->dev, "ttyUSB%d", port->number);
1084 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
1085 port->dev_state = PORT_REGISTERING;
1086 retval = device_add(&port->dev);
1087 if (retval) {
1088 dev_err(&port->dev, "Error registering port device, "
1089 "continuing\n");
1090 port->dev_state = PORT_UNREGISTERED;
1091 } else {
1092 port->dev_state = PORT_REGISTERED;
1096 usb_serial_console_init(debug, minor);
1098 exit:
1099 /* success */
1100 usb_set_intfdata(interface, serial);
1101 return 0;
1103 probe_error:
1104 usb_serial_put(serial);
1105 return -EIO;
1107 EXPORT_SYMBOL_GPL(usb_serial_probe);
1109 void usb_serial_disconnect(struct usb_interface *interface)
1111 int i;
1112 struct usb_serial *serial = usb_get_intfdata(interface);
1113 struct device *dev = &interface->dev;
1114 struct usb_serial_port *port;
1116 usb_serial_console_disconnect(serial);
1117 dbg("%s", __func__);
1119 mutex_lock(&serial->disc_mutex);
1120 usb_set_intfdata(interface, NULL);
1121 /* must set a flag, to signal subdrivers */
1122 serial->disconnected = 1;
1123 mutex_unlock(&serial->disc_mutex);
1125 for (i = 0; i < serial->num_ports; ++i) {
1126 port = serial->port[i];
1127 if (port) {
1128 struct tty_struct *tty = tty_port_tty_get(&port->port);
1129 if (tty) {
1130 tty_vhangup(tty);
1131 tty_kref_put(tty);
1133 kill_traffic(port);
1134 cancel_work_sync(&port->work);
1135 if (port->dev_state == PORT_REGISTERED) {
1137 /* Make sure the port is bound so that the
1138 * driver's port_remove method is called.
1140 if (!port->dev.driver) {
1141 int rc;
1143 port->dev.driver =
1144 &serial->type->driver;
1145 rc = device_bind_driver(&port->dev);
1147 port->dev_state = PORT_UNREGISTERING;
1148 device_del(&port->dev);
1149 port->dev_state = PORT_UNREGISTERED;
1153 serial->type->disconnect(serial);
1155 /* let the last holder of this object cause it to be cleaned up */
1156 usb_serial_put(serial);
1157 dev_info(dev, "device disconnected\n");
1159 EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1161 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1163 struct usb_serial *serial = usb_get_intfdata(intf);
1164 struct usb_serial_port *port;
1165 int i, r = 0;
1167 serial->suspending = 1;
1169 if (serial->type->suspend) {
1170 r = serial->type->suspend(serial, message);
1171 if (r < 0) {
1172 serial->suspending = 0;
1173 goto err_out;
1177 for (i = 0; i < serial->num_ports; ++i) {
1178 port = serial->port[i];
1179 if (port)
1180 kill_traffic(port);
1183 err_out:
1184 return r;
1186 EXPORT_SYMBOL(usb_serial_suspend);
1188 int usb_serial_resume(struct usb_interface *intf)
1190 struct usb_serial *serial = usb_get_intfdata(intf);
1191 int rv;
1193 serial->suspending = 0;
1194 if (serial->type->resume)
1195 rv = serial->type->resume(serial);
1196 else
1197 rv = usb_serial_generic_resume(serial);
1199 return rv;
1201 EXPORT_SYMBOL(usb_serial_resume);
1203 static const struct tty_operations serial_ops = {
1204 .open = serial_open,
1205 .close = serial_close,
1206 .write = serial_write,
1207 .hangup = serial_hangup,
1208 .write_room = serial_write_room,
1209 .ioctl = serial_ioctl,
1210 .set_termios = serial_set_termios,
1211 .throttle = serial_throttle,
1212 .unthrottle = serial_unthrottle,
1213 .break_ctl = serial_break,
1214 .chars_in_buffer = serial_chars_in_buffer,
1215 .tiocmget = serial_tiocmget,
1216 .tiocmset = serial_tiocmset,
1217 .cleanup = serial_cleanup,
1218 .install = serial_install,
1219 .proc_fops = &serial_proc_fops,
1223 struct tty_driver *usb_serial_tty_driver;
1225 static int __init usb_serial_init(void)
1227 int i;
1228 int result;
1230 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1231 if (!usb_serial_tty_driver)
1232 return -ENOMEM;
1234 /* Initialize our global data */
1235 for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1236 serial_table[i] = NULL;
1238 result = bus_register(&usb_serial_bus_type);
1239 if (result) {
1240 printk(KERN_ERR "usb-serial: %s - registering bus driver "
1241 "failed\n", __func__);
1242 goto exit_bus;
1245 usb_serial_tty_driver->owner = THIS_MODULE;
1246 usb_serial_tty_driver->driver_name = "usbserial";
1247 usb_serial_tty_driver->name = "ttyUSB";
1248 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1249 usb_serial_tty_driver->minor_start = 0;
1250 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1251 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1252 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1253 TTY_DRIVER_DYNAMIC_DEV;
1254 usb_serial_tty_driver->init_termios = tty_std_termios;
1255 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1256 | HUPCL | CLOCAL;
1257 usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1258 usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1259 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1260 result = tty_register_driver(usb_serial_tty_driver);
1261 if (result) {
1262 printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n",
1263 __func__);
1264 goto exit_reg_driver;
1267 /* register the USB driver */
1268 result = usb_register(&usb_serial_driver);
1269 if (result < 0) {
1270 printk(KERN_ERR "usb-serial: %s - usb_register failed\n",
1271 __func__);
1272 goto exit_tty;
1275 /* register the generic driver, if we should */
1276 result = usb_serial_generic_register(debug);
1277 if (result < 0) {
1278 printk(KERN_ERR "usb-serial: %s - registering generic "
1279 "driver failed\n", __func__);
1280 goto exit_generic;
1283 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1285 return result;
1287 exit_generic:
1288 usb_deregister(&usb_serial_driver);
1290 exit_tty:
1291 tty_unregister_driver(usb_serial_tty_driver);
1293 exit_reg_driver:
1294 bus_unregister(&usb_serial_bus_type);
1296 exit_bus:
1297 printk(KERN_ERR "usb-serial: %s - returning with error %d\n",
1298 __func__, result);
1299 put_tty_driver(usb_serial_tty_driver);
1300 return result;
1304 static void __exit usb_serial_exit(void)
1306 usb_serial_console_exit();
1308 usb_serial_generic_deregister();
1310 usb_deregister(&usb_serial_driver);
1311 tty_unregister_driver(usb_serial_tty_driver);
1312 put_tty_driver(usb_serial_tty_driver);
1313 bus_unregister(&usb_serial_bus_type);
1317 module_init(usb_serial_init);
1318 module_exit(usb_serial_exit);
1320 #define set_to_generic_if_null(type, function) \
1321 do { \
1322 if (!type->function) { \
1323 type->function = usb_serial_generic_##function; \
1324 dbg("Had to override the " #function \
1325 " usb serial operation with the generic one.");\
1327 } while (0)
1329 static void fixup_generic(struct usb_serial_driver *device)
1331 set_to_generic_if_null(device, open);
1332 set_to_generic_if_null(device, write);
1333 set_to_generic_if_null(device, close);
1334 set_to_generic_if_null(device, write_room);
1335 set_to_generic_if_null(device, chars_in_buffer);
1336 set_to_generic_if_null(device, read_bulk_callback);
1337 set_to_generic_if_null(device, write_bulk_callback);
1338 set_to_generic_if_null(device, disconnect);
1339 set_to_generic_if_null(device, release);
1342 int usb_serial_register(struct usb_serial_driver *driver)
1344 /* must be called with BKL held */
1345 int retval;
1347 if (usb_disabled())
1348 return -ENODEV;
1350 fixup_generic(driver);
1352 if (!driver->description)
1353 driver->description = driver->driver.name;
1355 /* Add this device to our list of devices */
1356 list_add(&driver->driver_list, &usb_serial_driver_list);
1358 retval = usb_serial_bus_register(driver);
1359 if (retval) {
1360 printk(KERN_ERR "usb-serial: problem %d when registering "
1361 "driver %s\n", retval, driver->description);
1362 list_del(&driver->driver_list);
1363 } else
1364 printk(KERN_INFO "USB Serial support registered for %s\n",
1365 driver->description);
1367 return retval;
1369 EXPORT_SYMBOL_GPL(usb_serial_register);
1372 void usb_serial_deregister(struct usb_serial_driver *device)
1374 /* must be called with BKL held */
1375 printk(KERN_INFO "USB Serial deregistering driver %s\n",
1376 device->description);
1377 list_del(&device->driver_list);
1378 usb_serial_bus_deregister(device);
1380 EXPORT_SYMBOL_GPL(usb_serial_deregister);
1382 /* Module information */
1383 MODULE_AUTHOR(DRIVER_AUTHOR);
1384 MODULE_DESCRIPTION(DRIVER_DESC);
1385 MODULE_LICENSE("GPL");
1387 module_param(debug, bool, S_IRUGO | S_IWUSR);
1388 MODULE_PARM_DESC(debug, "Debug enabled or not");