USB: omninet: fix write_room
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / usb / serial / usb-serial.c
blobf23f3b47ac166f48020a748040945cfac3825ab0
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;
565 static int serial_get_icount(struct tty_struct *tty,
566 struct serial_icounter_struct *icount)
568 struct usb_serial_port *port = tty->driver_data;
570 dbg("%s - port %d", __func__, port->number);
572 if (port->serial->type->get_icount)
573 return port->serial->type->get_icount(tty, icount);
574 return -EINVAL;
578 * We would be calling tty_wakeup here, but unfortunately some line
579 * disciplines have an annoying habit of calling tty->write from
580 * the write wakeup callback (e.g. n_hdlc.c).
582 void usb_serial_port_softint(struct usb_serial_port *port)
584 schedule_work(&port->work);
586 EXPORT_SYMBOL_GPL(usb_serial_port_softint);
588 static void usb_serial_port_work(struct work_struct *work)
590 struct usb_serial_port *port =
591 container_of(work, struct usb_serial_port, work);
592 struct tty_struct *tty;
594 dbg("%s - port %d", __func__, port->number);
596 tty = tty_port_tty_get(&port->port);
597 if (!tty)
598 return;
600 tty_wakeup(tty);
601 tty_kref_put(tty);
604 static void kill_traffic(struct usb_serial_port *port)
606 usb_kill_urb(port->read_urb);
607 usb_kill_urb(port->write_urb);
609 * This is tricky.
610 * Some drivers submit the read_urb in the
611 * handler for the write_urb or vice versa
612 * this order determines the order in which
613 * usb_kill_urb() must be used to reliably
614 * kill the URBs. As it is unknown here,
615 * both orders must be used in turn.
616 * The call below is not redundant.
618 usb_kill_urb(port->read_urb);
619 usb_kill_urb(port->interrupt_in_urb);
620 usb_kill_urb(port->interrupt_out_urb);
623 static void port_release(struct device *dev)
625 struct usb_serial_port *port = to_usb_serial_port(dev);
627 dbg ("%s - %s", __func__, dev_name(dev));
630 * Stop all the traffic before cancelling the work, so that
631 * nobody will restart it by calling usb_serial_port_softint.
633 kill_traffic(port);
634 cancel_work_sync(&port->work);
636 usb_free_urb(port->read_urb);
637 usb_free_urb(port->write_urb);
638 usb_free_urb(port->interrupt_in_urb);
639 usb_free_urb(port->interrupt_out_urb);
640 if (!IS_ERR(port->write_fifo) && port->write_fifo)
641 kfifo_free(port->write_fifo);
642 kfree(port->bulk_in_buffer);
643 kfree(port->bulk_out_buffer);
644 kfree(port->interrupt_in_buffer);
645 kfree(port->interrupt_out_buffer);
646 kfree(port);
649 static struct usb_serial *create_serial(struct usb_device *dev,
650 struct usb_interface *interface,
651 struct usb_serial_driver *driver)
653 struct usb_serial *serial;
655 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
656 if (!serial) {
657 dev_err(&dev->dev, "%s - out of memory\n", __func__);
658 return NULL;
660 serial->dev = usb_get_dev(dev);
661 serial->type = driver;
662 serial->interface = interface;
663 kref_init(&serial->kref);
664 mutex_init(&serial->disc_mutex);
665 serial->minor = SERIAL_TTY_NO_MINOR;
667 return serial;
670 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
671 struct usb_serial_driver *drv)
673 struct usb_dynid *dynid;
675 spin_lock(&drv->dynids.lock);
676 list_for_each_entry(dynid, &drv->dynids.list, node) {
677 if (usb_match_one_id(intf, &dynid->id)) {
678 spin_unlock(&drv->dynids.lock);
679 return &dynid->id;
682 spin_unlock(&drv->dynids.lock);
683 return NULL;
686 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
687 struct usb_interface *intf)
689 const struct usb_device_id *id;
691 id = usb_match_id(intf, drv->id_table);
692 if (id) {
693 dbg("static descriptor matches");
694 goto exit;
696 id = match_dynamic_id(intf, drv);
697 if (id)
698 dbg("dynamic descriptor matches");
699 exit:
700 return id;
703 static struct usb_serial_driver *search_serial_device(
704 struct usb_interface *iface)
706 const struct usb_device_id *id;
707 struct usb_serial_driver *drv;
709 /* Check if the usb id matches a known device */
710 list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
711 id = get_iface_id(drv, iface);
712 if (id)
713 return drv;
716 return NULL;
719 static int serial_carrier_raised(struct tty_port *port)
721 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
722 struct usb_serial_driver *drv = p->serial->type;
723 if (drv->carrier_raised)
724 return drv->carrier_raised(p);
725 /* No carrier control - don't block */
726 return 1;
729 static void serial_dtr_rts(struct tty_port *port, int on)
731 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
732 struct usb_serial_driver *drv = p->serial->type;
733 if (drv->dtr_rts)
734 drv->dtr_rts(p, on);
737 static const struct tty_port_operations serial_port_ops = {
738 .carrier_raised = serial_carrier_raised,
739 .dtr_rts = serial_dtr_rts,
742 int usb_serial_probe(struct usb_interface *interface,
743 const struct usb_device_id *id)
745 struct usb_device *dev = interface_to_usbdev(interface);
746 struct usb_serial *serial = NULL;
747 struct usb_serial_port *port;
748 struct usb_host_interface *iface_desc;
749 struct usb_endpoint_descriptor *endpoint;
750 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
751 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
752 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
753 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
754 struct usb_serial_driver *type = NULL;
755 int retval;
756 unsigned int minor;
757 int buffer_size;
758 int i;
759 int num_interrupt_in = 0;
760 int num_interrupt_out = 0;
761 int num_bulk_in = 0;
762 int num_bulk_out = 0;
763 int num_ports = 0;
764 int max_endpoints;
766 lock_kernel(); /* guard against unloading a serial driver module */
767 type = search_serial_device(interface);
768 if (!type) {
769 unlock_kernel();
770 dbg("none matched");
771 return -ENODEV;
774 serial = create_serial(dev, interface, type);
775 if (!serial) {
776 unlock_kernel();
777 dev_err(&interface->dev, "%s - out of memory\n", __func__);
778 return -ENOMEM;
781 /* if this device type has a probe function, call it */
782 if (type->probe) {
783 const struct usb_device_id *id;
785 if (!try_module_get(type->driver.owner)) {
786 unlock_kernel();
787 dev_err(&interface->dev,
788 "module get failed, exiting\n");
789 kfree(serial);
790 return -EIO;
793 id = get_iface_id(type, interface);
794 retval = type->probe(serial, id);
795 module_put(type->driver.owner);
797 if (retval) {
798 unlock_kernel();
799 dbg("sub driver rejected device");
800 kfree(serial);
801 return retval;
805 /* descriptor matches, let's find the endpoints needed */
806 /* check out the endpoints */
807 iface_desc = interface->cur_altsetting;
808 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
809 endpoint = &iface_desc->endpoint[i].desc;
811 if (usb_endpoint_is_bulk_in(endpoint)) {
812 /* we found a bulk in endpoint */
813 dbg("found bulk in on endpoint %d", i);
814 bulk_in_endpoint[num_bulk_in] = endpoint;
815 ++num_bulk_in;
818 if (usb_endpoint_is_bulk_out(endpoint)) {
819 /* we found a bulk out endpoint */
820 dbg("found bulk out on endpoint %d", i);
821 bulk_out_endpoint[num_bulk_out] = endpoint;
822 ++num_bulk_out;
825 if (usb_endpoint_is_int_in(endpoint)) {
826 /* we found a interrupt in endpoint */
827 dbg("found interrupt in on endpoint %d", i);
828 interrupt_in_endpoint[num_interrupt_in] = endpoint;
829 ++num_interrupt_in;
832 if (usb_endpoint_is_int_out(endpoint)) {
833 /* we found an interrupt out endpoint */
834 dbg("found interrupt out on endpoint %d", i);
835 interrupt_out_endpoint[num_interrupt_out] = endpoint;
836 ++num_interrupt_out;
840 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
841 /* BEGIN HORRIBLE HACK FOR PL2303 */
842 /* this is needed due to the looney way its endpoints are set up */
843 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
844 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
845 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
846 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
847 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
848 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
849 ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
850 (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
851 if (interface != dev->actconfig->interface[0]) {
852 /* check out the endpoints of the other interface*/
853 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
854 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
855 endpoint = &iface_desc->endpoint[i].desc;
856 if (usb_endpoint_is_int_in(endpoint)) {
857 /* we found a interrupt in endpoint */
858 dbg("found interrupt in for Prolific device on separate interface");
859 interrupt_in_endpoint[num_interrupt_in] = endpoint;
860 ++num_interrupt_in;
865 /* Now make sure the PL-2303 is configured correctly.
866 * If not, give up now and hope this hack will work
867 * properly during a later invocation of usb_serial_probe
869 if (num_bulk_in == 0 || num_bulk_out == 0) {
870 unlock_kernel();
871 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
872 kfree(serial);
873 return -ENODEV;
876 /* END HORRIBLE HACK FOR PL2303 */
877 #endif
879 #ifdef CONFIG_USB_SERIAL_GENERIC
880 if (type == &usb_serial_generic_device) {
881 num_ports = num_bulk_out;
882 if (num_ports == 0) {
883 unlock_kernel();
884 dev_err(&interface->dev,
885 "Generic device with no bulk out, not allowed.\n");
886 kfree(serial);
887 return -EIO;
890 #endif
891 if (!num_ports) {
892 /* if this device type has a calc_num_ports function, call it */
893 if (type->calc_num_ports) {
894 if (!try_module_get(type->driver.owner)) {
895 unlock_kernel();
896 dev_err(&interface->dev,
897 "module get failed, exiting\n");
898 kfree(serial);
899 return -EIO;
901 num_ports = type->calc_num_ports(serial);
902 module_put(type->driver.owner);
904 if (!num_ports)
905 num_ports = type->num_ports;
908 serial->num_ports = num_ports;
909 serial->num_bulk_in = num_bulk_in;
910 serial->num_bulk_out = num_bulk_out;
911 serial->num_interrupt_in = num_interrupt_in;
912 serial->num_interrupt_out = num_interrupt_out;
914 /* found all that we need */
915 dev_info(&interface->dev, "%s converter detected\n",
916 type->description);
918 /* create our ports, we need as many as the max endpoints */
919 /* we don't use num_ports here because some devices have more
920 endpoint pairs than ports */
921 max_endpoints = max(num_bulk_in, num_bulk_out);
922 max_endpoints = max(max_endpoints, num_interrupt_in);
923 max_endpoints = max(max_endpoints, num_interrupt_out);
924 max_endpoints = max(max_endpoints, (int)serial->num_ports);
925 serial->num_port_pointers = max_endpoints;
926 unlock_kernel();
928 dbg("%s - setting up %d port structures for this device",
929 __func__, max_endpoints);
930 for (i = 0; i < max_endpoints; ++i) {
931 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
932 if (!port)
933 goto probe_error;
934 tty_port_init(&port->port);
935 port->port.ops = &serial_port_ops;
936 port->serial = serial;
937 spin_lock_init(&port->lock);
938 mutex_init(&port->mutex);
939 INIT_WORK(&port->work, usb_serial_port_work);
940 serial->port[i] = port;
941 port->dev.parent = &interface->dev;
942 port->dev.driver = NULL;
943 port->dev.bus = &usb_serial_bus_type;
944 port->dev.release = &port_release;
945 device_initialize(&port->dev);
948 /* set up the endpoint information */
949 for (i = 0; i < num_bulk_in; ++i) {
950 endpoint = bulk_in_endpoint[i];
951 port = serial->port[i];
952 port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
953 if (!port->read_urb) {
954 dev_err(&interface->dev, "No free urbs available\n");
955 goto probe_error;
957 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
958 port->bulk_in_size = buffer_size;
959 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
960 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
961 if (!port->bulk_in_buffer) {
962 dev_err(&interface->dev,
963 "Couldn't allocate bulk_in_buffer\n");
964 goto probe_error;
966 usb_fill_bulk_urb(port->read_urb, dev,
967 usb_rcvbulkpipe(dev,
968 endpoint->bEndpointAddress),
969 port->bulk_in_buffer, buffer_size,
970 serial->type->read_bulk_callback, port);
973 for (i = 0; i < num_bulk_out; ++i) {
974 endpoint = bulk_out_endpoint[i];
975 port = serial->port[i];
976 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
977 if (!port->write_urb) {
978 dev_err(&interface->dev, "No free urbs available\n");
979 goto probe_error;
981 port->write_fifo = kfifo_alloc(PAGE_SIZE, GFP_KERNEL,
982 &port->lock);
983 if (IS_ERR(port->write_fifo))
984 goto probe_error;
985 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
986 port->bulk_out_size = buffer_size;
987 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
988 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
989 if (!port->bulk_out_buffer) {
990 dev_err(&interface->dev,
991 "Couldn't allocate bulk_out_buffer\n");
992 goto probe_error;
994 usb_fill_bulk_urb(port->write_urb, dev,
995 usb_sndbulkpipe(dev,
996 endpoint->bEndpointAddress),
997 port->bulk_out_buffer, buffer_size,
998 serial->type->write_bulk_callback, port);
1001 if (serial->type->read_int_callback) {
1002 for (i = 0; i < num_interrupt_in; ++i) {
1003 endpoint = interrupt_in_endpoint[i];
1004 port = serial->port[i];
1005 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
1006 if (!port->interrupt_in_urb) {
1007 dev_err(&interface->dev,
1008 "No free urbs available\n");
1009 goto probe_error;
1011 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
1012 port->interrupt_in_endpointAddress =
1013 endpoint->bEndpointAddress;
1014 port->interrupt_in_buffer = kmalloc(buffer_size,
1015 GFP_KERNEL);
1016 if (!port->interrupt_in_buffer) {
1017 dev_err(&interface->dev,
1018 "Couldn't allocate interrupt_in_buffer\n");
1019 goto probe_error;
1021 usb_fill_int_urb(port->interrupt_in_urb, dev,
1022 usb_rcvintpipe(dev,
1023 endpoint->bEndpointAddress),
1024 port->interrupt_in_buffer, buffer_size,
1025 serial->type->read_int_callback, port,
1026 endpoint->bInterval);
1028 } else if (num_interrupt_in) {
1029 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
1032 if (serial->type->write_int_callback) {
1033 for (i = 0; i < num_interrupt_out; ++i) {
1034 endpoint = interrupt_out_endpoint[i];
1035 port = serial->port[i];
1036 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
1037 if (!port->interrupt_out_urb) {
1038 dev_err(&interface->dev,
1039 "No free urbs available\n");
1040 goto probe_error;
1042 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
1043 port->interrupt_out_size = buffer_size;
1044 port->interrupt_out_endpointAddress =
1045 endpoint->bEndpointAddress;
1046 port->interrupt_out_buffer = kmalloc(buffer_size,
1047 GFP_KERNEL);
1048 if (!port->interrupt_out_buffer) {
1049 dev_err(&interface->dev,
1050 "Couldn't allocate interrupt_out_buffer\n");
1051 goto probe_error;
1053 usb_fill_int_urb(port->interrupt_out_urb, dev,
1054 usb_sndintpipe(dev,
1055 endpoint->bEndpointAddress),
1056 port->interrupt_out_buffer, buffer_size,
1057 serial->type->write_int_callback, port,
1058 endpoint->bInterval);
1060 } else if (num_interrupt_out) {
1061 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
1064 /* if this device type has an attach function, call it */
1065 if (type->attach) {
1066 if (!try_module_get(type->driver.owner)) {
1067 dev_err(&interface->dev,
1068 "module get failed, exiting\n");
1069 goto probe_error;
1071 retval = type->attach(serial);
1072 module_put(type->driver.owner);
1073 if (retval < 0)
1074 goto probe_error;
1075 serial->attached = 1;
1076 if (retval > 0) {
1077 /* quietly accept this device, but don't bind to a
1078 serial port as it's about to disappear */
1079 serial->num_ports = 0;
1080 goto exit;
1082 } else {
1083 serial->attached = 1;
1086 if (get_free_serial(serial, num_ports, &minor) == NULL) {
1087 dev_err(&interface->dev, "No more free serial devices\n");
1088 goto probe_error;
1090 serial->minor = minor;
1092 /* register all of the individual ports with the driver core */
1093 for (i = 0; i < num_ports; ++i) {
1094 port = serial->port[i];
1095 dev_set_name(&port->dev, "ttyUSB%d", port->number);
1096 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
1097 port->dev_state = PORT_REGISTERING;
1098 retval = device_add(&port->dev);
1099 if (retval) {
1100 dev_err(&port->dev, "Error registering port device, "
1101 "continuing\n");
1102 port->dev_state = PORT_UNREGISTERED;
1103 } else {
1104 port->dev_state = PORT_REGISTERED;
1108 usb_serial_console_init(debug, minor);
1110 exit:
1111 /* success */
1112 usb_set_intfdata(interface, serial);
1113 return 0;
1115 probe_error:
1116 usb_serial_put(serial);
1117 return -EIO;
1119 EXPORT_SYMBOL_GPL(usb_serial_probe);
1121 void usb_serial_disconnect(struct usb_interface *interface)
1123 int i;
1124 struct usb_serial *serial = usb_get_intfdata(interface);
1125 struct device *dev = &interface->dev;
1126 struct usb_serial_port *port;
1128 usb_serial_console_disconnect(serial);
1129 dbg("%s", __func__);
1131 mutex_lock(&serial->disc_mutex);
1132 usb_set_intfdata(interface, NULL);
1133 /* must set a flag, to signal subdrivers */
1134 serial->disconnected = 1;
1135 mutex_unlock(&serial->disc_mutex);
1137 for (i = 0; i < serial->num_ports; ++i) {
1138 port = serial->port[i];
1139 if (port) {
1140 struct tty_struct *tty = tty_port_tty_get(&port->port);
1141 if (tty) {
1142 tty_vhangup(tty);
1143 tty_kref_put(tty);
1145 kill_traffic(port);
1146 cancel_work_sync(&port->work);
1147 if (port->dev_state == PORT_REGISTERED) {
1149 /* Make sure the port is bound so that the
1150 * driver's port_remove method is called.
1152 if (!port->dev.driver) {
1153 int rc;
1155 port->dev.driver =
1156 &serial->type->driver;
1157 rc = device_bind_driver(&port->dev);
1159 port->dev_state = PORT_UNREGISTERING;
1160 device_del(&port->dev);
1161 port->dev_state = PORT_UNREGISTERED;
1165 serial->type->disconnect(serial);
1167 /* let the last holder of this object cause it to be cleaned up */
1168 usb_serial_put(serial);
1169 dev_info(dev, "device disconnected\n");
1171 EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1173 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1175 struct usb_serial *serial = usb_get_intfdata(intf);
1176 struct usb_serial_port *port;
1177 int i, r = 0;
1179 serial->suspending = 1;
1181 if (serial->type->suspend) {
1182 r = serial->type->suspend(serial, message);
1183 if (r < 0) {
1184 serial->suspending = 0;
1185 goto err_out;
1189 for (i = 0; i < serial->num_ports; ++i) {
1190 port = serial->port[i];
1191 if (port)
1192 kill_traffic(port);
1195 err_out:
1196 return r;
1198 EXPORT_SYMBOL(usb_serial_suspend);
1200 int usb_serial_resume(struct usb_interface *intf)
1202 struct usb_serial *serial = usb_get_intfdata(intf);
1203 int rv;
1205 serial->suspending = 0;
1206 if (serial->type->resume)
1207 rv = serial->type->resume(serial);
1208 else
1209 rv = usb_serial_generic_resume(serial);
1211 return rv;
1213 EXPORT_SYMBOL(usb_serial_resume);
1215 static const struct tty_operations serial_ops = {
1216 .open = serial_open,
1217 .close = serial_close,
1218 .write = serial_write,
1219 .hangup = serial_hangup,
1220 .write_room = serial_write_room,
1221 .ioctl = serial_ioctl,
1222 .set_termios = serial_set_termios,
1223 .throttle = serial_throttle,
1224 .unthrottle = serial_unthrottle,
1225 .break_ctl = serial_break,
1226 .chars_in_buffer = serial_chars_in_buffer,
1227 .tiocmget = serial_tiocmget,
1228 .tiocmset = serial_tiocmset,
1229 .get_icount = serial_get_icount,
1230 .cleanup = serial_cleanup,
1231 .install = serial_install,
1232 .proc_fops = &serial_proc_fops,
1236 struct tty_driver *usb_serial_tty_driver;
1238 static int __init usb_serial_init(void)
1240 int i;
1241 int result;
1243 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1244 if (!usb_serial_tty_driver)
1245 return -ENOMEM;
1247 /* Initialize our global data */
1248 for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1249 serial_table[i] = NULL;
1251 result = bus_register(&usb_serial_bus_type);
1252 if (result) {
1253 printk(KERN_ERR "usb-serial: %s - registering bus driver "
1254 "failed\n", __func__);
1255 goto exit_bus;
1258 usb_serial_tty_driver->owner = THIS_MODULE;
1259 usb_serial_tty_driver->driver_name = "usbserial";
1260 usb_serial_tty_driver->name = "ttyUSB";
1261 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1262 usb_serial_tty_driver->minor_start = 0;
1263 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1264 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1265 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1266 TTY_DRIVER_DYNAMIC_DEV;
1267 usb_serial_tty_driver->init_termios = tty_std_termios;
1268 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1269 | HUPCL | CLOCAL;
1270 usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1271 usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1272 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1273 result = tty_register_driver(usb_serial_tty_driver);
1274 if (result) {
1275 printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n",
1276 __func__);
1277 goto exit_reg_driver;
1280 /* register the USB driver */
1281 result = usb_register(&usb_serial_driver);
1282 if (result < 0) {
1283 printk(KERN_ERR "usb-serial: %s - usb_register failed\n",
1284 __func__);
1285 goto exit_tty;
1288 /* register the generic driver, if we should */
1289 result = usb_serial_generic_register(debug);
1290 if (result < 0) {
1291 printk(KERN_ERR "usb-serial: %s - registering generic "
1292 "driver failed\n", __func__);
1293 goto exit_generic;
1296 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1298 return result;
1300 exit_generic:
1301 usb_deregister(&usb_serial_driver);
1303 exit_tty:
1304 tty_unregister_driver(usb_serial_tty_driver);
1306 exit_reg_driver:
1307 bus_unregister(&usb_serial_bus_type);
1309 exit_bus:
1310 printk(KERN_ERR "usb-serial: %s - returning with error %d\n",
1311 __func__, result);
1312 put_tty_driver(usb_serial_tty_driver);
1313 return result;
1317 static void __exit usb_serial_exit(void)
1319 usb_serial_console_exit();
1321 usb_serial_generic_deregister();
1323 usb_deregister(&usb_serial_driver);
1324 tty_unregister_driver(usb_serial_tty_driver);
1325 put_tty_driver(usb_serial_tty_driver);
1326 bus_unregister(&usb_serial_bus_type);
1330 module_init(usb_serial_init);
1331 module_exit(usb_serial_exit);
1333 #define set_to_generic_if_null(type, function) \
1334 do { \
1335 if (!type->function) { \
1336 type->function = usb_serial_generic_##function; \
1337 dbg("Had to override the " #function \
1338 " usb serial operation with the generic one.");\
1340 } while (0)
1342 static void fixup_generic(struct usb_serial_driver *device)
1344 set_to_generic_if_null(device, open);
1345 set_to_generic_if_null(device, write);
1346 set_to_generic_if_null(device, close);
1347 set_to_generic_if_null(device, write_room);
1348 set_to_generic_if_null(device, chars_in_buffer);
1349 set_to_generic_if_null(device, read_bulk_callback);
1350 set_to_generic_if_null(device, write_bulk_callback);
1351 set_to_generic_if_null(device, disconnect);
1352 set_to_generic_if_null(device, release);
1355 int usb_serial_register(struct usb_serial_driver *driver)
1357 /* must be called with BKL held */
1358 int retval;
1360 if (usb_disabled())
1361 return -ENODEV;
1363 fixup_generic(driver);
1365 if (!driver->description)
1366 driver->description = driver->driver.name;
1368 /* Add this device to our list of devices */
1369 list_add(&driver->driver_list, &usb_serial_driver_list);
1371 retval = usb_serial_bus_register(driver);
1372 if (retval) {
1373 printk(KERN_ERR "usb-serial: problem %d when registering "
1374 "driver %s\n", retval, driver->description);
1375 list_del(&driver->driver_list);
1376 } else
1377 printk(KERN_INFO "USB Serial support registered for %s\n",
1378 driver->description);
1380 return retval;
1382 EXPORT_SYMBOL_GPL(usb_serial_register);
1385 void usb_serial_deregister(struct usb_serial_driver *device)
1387 /* must be called with BKL held */
1388 printk(KERN_INFO "USB Serial deregistering driver %s\n",
1389 device->description);
1390 list_del(&device->driver_list);
1391 usb_serial_bus_deregister(device);
1393 EXPORT_SYMBOL_GPL(usb_serial_deregister);
1395 /* Module information */
1396 MODULE_AUTHOR(DRIVER_AUTHOR);
1397 MODULE_DESCRIPTION(DRIVER_DESC);
1398 MODULE_LICENSE("GPL");
1400 module_param(debug, bool, S_IRUGO | S_IWUSR);
1401 MODULE_PARM_DESC(debug, "Debug enabled or not");