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 driver
19 #include <linux/kernel.h>
20 #include <linux/errno.h>
21 #include <linux/init.h>
22 #include <linux/slab.h>
23 #include <linux/tty.h>
24 #include <linux/tty_driver.h>
25 #include <linux/tty_flip.h>
26 #include <linux/module.h>
27 #include <linux/moduleparam.h>
28 #include <linux/spinlock.h>
29 #include <linux/mutex.h>
30 #include <linux/list.h>
31 #include <linux/smp_lock.h>
32 #include <asm/uaccess.h>
33 #include <linux/usb.h>
34 #include <linux/usb/serial.h>
40 #define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/"
41 #define DRIVER_DESC "USB Serial Driver core"
43 static void port_free(struct usb_serial_port *port);
45 /* Driver structure we register with the USB core */
46 static struct usb_driver usb_serial_driver = {
48 .probe = usb_serial_probe,
49 .disconnect = usb_serial_disconnect,
53 /* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
54 the MODULE_DEVICE_TABLE declarations in each serial driver
55 cause the "hotplug" program to pull in whatever module is necessary
56 via modprobe, and modprobe will load usbserial because the serial
61 static struct usb_serial *serial_table[SERIAL_TTY_MINORS]; /* initially all NULL */
62 static spinlock_t table_lock;
63 static LIST_HEAD(usb_serial_driver_list);
65 struct usb_serial *usb_serial_get_by_index(unsigned index)
67 struct usb_serial *serial;
69 spin_lock(&table_lock);
70 serial = serial_table[index];
73 kref_get(&serial->kref);
74 spin_unlock(&table_lock);
78 static struct usb_serial *get_free_serial (struct usb_serial *serial, int num_ports, unsigned int *minor)
83 dbg("%s %d", __FUNCTION__, num_ports);
86 spin_lock(&table_lock);
87 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
92 for (j = 1; j <= num_ports-1; ++j)
93 if ((i+j >= SERIAL_TTY_MINORS) || (serial_table[i+j])) {
102 dbg("%s - minor base = %d", __FUNCTION__, *minor);
103 for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i)
104 serial_table[i] = serial;
105 spin_unlock(&table_lock);
108 spin_unlock(&table_lock);
112 static void return_serial(struct usb_serial *serial)
116 dbg("%s", __FUNCTION__);
121 spin_lock(&table_lock);
122 for (i = 0; i < serial->num_ports; ++i) {
123 serial_table[serial->minor + i] = NULL;
125 spin_unlock(&table_lock);
128 static void destroy_serial(struct kref *kref)
130 struct usb_serial *serial;
131 struct usb_serial_port *port;
134 serial = to_usb_serial(kref);
136 dbg("%s - %s", __FUNCTION__, serial->type->description);
138 serial->type->shutdown(serial);
140 /* return the minor range that this device had */
141 return_serial(serial);
143 for (i = 0; i < serial->num_ports; ++i)
144 serial->port[i]->open_count = 0;
146 /* the ports are cleaned up and released in port_release() */
147 for (i = 0; i < serial->num_ports; ++i)
148 if (serial->port[i]->dev.parent != NULL) {
149 device_unregister(&serial->port[i]->dev);
150 serial->port[i] = NULL;
153 /* If this is a "fake" port, we have to clean it up here, as it will
154 * not get cleaned up in port_release() as it was never registered with
156 if (serial->num_ports < serial->num_port_pointers) {
157 for (i = serial->num_ports; i < serial->num_port_pointers; ++i) {
158 port = serial->port[i];
165 usb_put_dev(serial->dev);
167 /* free up any memory that we allocated */
171 void usb_serial_put(struct usb_serial *serial)
173 kref_put(&serial->kref, destroy_serial);
176 /*****************************************************************************
177 * Driver tty interface functions
178 *****************************************************************************/
179 static int serial_open (struct tty_struct *tty, struct file * filp)
181 struct usb_serial *serial;
182 struct usb_serial_port *port;
183 unsigned int portNumber;
186 dbg("%s", __FUNCTION__);
188 /* get the serial object associated with this tty pointer */
189 serial = usb_serial_get_by_index(tty->index);
191 tty->driver_data = NULL;
195 portNumber = tty->index - serial->minor;
196 port = serial->port[portNumber];
199 goto bailout_kref_put;
202 if (mutex_lock_interruptible(&port->mutex)) {
203 retval = -ERESTARTSYS;
204 goto bailout_kref_put;
209 /* set up our port structure making the tty driver
210 * remember our port object, and us it */
211 tty->driver_data = port;
214 if (port->open_count == 1) {
216 /* lock this module before we call it
217 * this may fail, which means we must bail out,
218 * safe because we are called with BKL held */
219 if (!try_module_get(serial->type->driver.owner)) {
221 goto bailout_mutex_unlock;
224 /* only call the device specific open if this
225 * is the first time the port is opened */
226 retval = serial->type->open(port, filp);
228 goto bailout_module_put;
231 mutex_unlock(&port->mutex);
235 module_put(serial->type->driver.owner);
236 bailout_mutex_unlock:
237 port->open_count = 0;
238 tty->driver_data = NULL;
240 mutex_unlock(&port->mutex);
242 usb_serial_put(serial);
246 static void serial_close(struct tty_struct *tty, struct file * filp)
248 struct usb_serial_port *port = tty->driver_data;
253 dbg("%s - port %d", __FUNCTION__, port->number);
255 mutex_lock(&port->mutex);
257 if (port->open_count == 0) {
258 mutex_unlock(&port->mutex);
263 if (port->open_count == 0) {
264 /* only call the device specific close if this
265 * port is being closed by the last owner */
266 port->serial->type->close(port, filp);
269 if (port->tty->driver_data)
270 port->tty->driver_data = NULL;
274 module_put(port->serial->type->driver.owner);
277 mutex_unlock(&port->mutex);
278 usb_serial_put(port->serial);
281 static int serial_write (struct tty_struct * tty, const unsigned char *buf, int count)
283 struct usb_serial_port *port = tty->driver_data;
284 int retval = -ENODEV;
286 if (!port || port->serial->dev->state == USB_STATE_NOTATTACHED)
289 dbg("%s - port %d, %d byte(s)", __FUNCTION__, port->number, count);
291 if (!port->open_count) {
293 dbg("%s - port not opened", __FUNCTION__);
297 /* pass on to the driver specific version of this function */
298 retval = port->serial->type->write(port, buf, count);
304 static int serial_write_room (struct tty_struct *tty)
306 struct usb_serial_port *port = tty->driver_data;
307 int retval = -ENODEV;
312 dbg("%s - port %d", __FUNCTION__, port->number);
314 if (!port->open_count) {
315 dbg("%s - port not open", __FUNCTION__);
319 /* pass on to the driver specific version of this function */
320 retval = port->serial->type->write_room(port);
326 static int serial_chars_in_buffer (struct tty_struct *tty)
328 struct usb_serial_port *port = tty->driver_data;
329 int retval = -ENODEV;
334 dbg("%s = port %d", __FUNCTION__, port->number);
336 if (!port->open_count) {
337 dbg("%s - port not open", __FUNCTION__);
341 /* pass on to the driver specific version of this function */
342 retval = port->serial->type->chars_in_buffer(port);
348 static void serial_throttle (struct tty_struct * tty)
350 struct usb_serial_port *port = tty->driver_data;
355 dbg("%s - port %d", __FUNCTION__, port->number);
357 if (!port->open_count) {
358 dbg ("%s - port not open", __FUNCTION__);
362 /* pass on to the driver specific version of this function */
363 if (port->serial->type->throttle)
364 port->serial->type->throttle(port);
367 static void serial_unthrottle (struct tty_struct * tty)
369 struct usb_serial_port *port = tty->driver_data;
374 dbg("%s - port %d", __FUNCTION__, port->number);
376 if (!port->open_count) {
377 dbg("%s - port not open", __FUNCTION__);
381 /* pass on to the driver specific version of this function */
382 if (port->serial->type->unthrottle)
383 port->serial->type->unthrottle(port);
386 static int serial_ioctl (struct tty_struct *tty, struct file * file, unsigned int cmd, unsigned long arg)
388 struct usb_serial_port *port = tty->driver_data;
389 int retval = -ENODEV;
394 dbg("%s - port %d, cmd 0x%.4x", __FUNCTION__, port->number, cmd);
396 if (!port->open_count) {
397 dbg ("%s - port not open", __FUNCTION__);
401 /* pass on to the driver specific version of this function if it is available */
402 if (port->serial->type->ioctl)
403 retval = port->serial->type->ioctl(port, file, cmd, arg);
405 retval = -ENOIOCTLCMD;
411 static void serial_set_termios (struct tty_struct *tty, struct ktermios * old)
413 struct usb_serial_port *port = tty->driver_data;
418 dbg("%s - port %d", __FUNCTION__, port->number);
420 if (!port->open_count) {
421 dbg("%s - port not open", __FUNCTION__);
425 /* pass on to the driver specific version of this function if it is available */
426 if (port->serial->type->set_termios)
427 port->serial->type->set_termios(port, old);
430 static void serial_break (struct tty_struct *tty, int break_state)
432 struct usb_serial_port *port = tty->driver_data;
437 dbg("%s - port %d", __FUNCTION__, port->number);
439 if (!port->open_count) {
440 dbg("%s - port not open", __FUNCTION__);
444 /* pass on to the driver specific version of this function if it is available */
445 if (port->serial->type->break_ctl)
446 port->serial->type->break_ctl(port, break_state);
449 static int serial_read_proc (char *page, char **start, off_t off, int count, int *eof, void *data)
451 struct usb_serial *serial;
457 dbg("%s", __FUNCTION__);
458 length += sprintf (page, "usbserinfo:1.0 driver:2.0\n");
459 for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) {
460 serial = usb_serial_get_by_index(i);
464 length += sprintf (page+length, "%d:", i);
465 if (serial->type->driver.owner)
466 length += sprintf (page+length, " module:%s", module_name(serial->type->driver.owner));
467 length += sprintf (page+length, " name:\"%s\"", serial->type->description);
468 length += sprintf (page+length, " vendor:%04x product:%04x",
469 le16_to_cpu(serial->dev->descriptor.idVendor),
470 le16_to_cpu(serial->dev->descriptor.idProduct));
471 length += sprintf (page+length, " num_ports:%d", serial->num_ports);
472 length += sprintf (page+length, " port:%d", i - serial->minor + 1);
474 usb_make_path(serial->dev, tmp, sizeof(tmp));
475 length += sprintf (page+length, " path:%s", tmp);
477 length += sprintf (page+length, "\n");
478 if ((length + begin) > (off + count)) {
479 usb_serial_put(serial);
482 if ((length + begin) < off) {
486 usb_serial_put(serial);
490 if (off >= (length + begin))
492 *start = page + (off-begin);
493 return ((count < begin+length-off) ? count : begin+length-off);
496 static int serial_tiocmget (struct tty_struct *tty, struct file *file)
498 struct usb_serial_port *port = tty->driver_data;
503 dbg("%s - port %d", __FUNCTION__, port->number);
505 if (!port->open_count) {
506 dbg("%s - port not open", __FUNCTION__);
510 if (port->serial->type->tiocmget)
511 return port->serial->type->tiocmget(port, file);
516 static int serial_tiocmset (struct tty_struct *tty, struct file *file,
517 unsigned int set, unsigned int clear)
519 struct usb_serial_port *port = tty->driver_data;
524 dbg("%s - port %d", __FUNCTION__, port->number);
526 if (!port->open_count) {
527 dbg("%s - port not open", __FUNCTION__);
531 if (port->serial->type->tiocmset)
532 return port->serial->type->tiocmset(port, file, set, clear);
538 * We would be calling tty_wakeup here, but unfortunately some line
539 * disciplines have an annoying habit of calling tty->write from
540 * the write wakeup callback (e.g. n_hdlc.c).
542 void usb_serial_port_softint(struct usb_serial_port *port)
544 schedule_work(&port->work);
547 static void usb_serial_port_work(struct work_struct *work)
549 struct usb_serial_port *port =
550 container_of(work, struct usb_serial_port, work);
551 struct tty_struct *tty;
553 dbg("%s - port %d", __FUNCTION__, port->number);
565 static void port_release(struct device *dev)
567 struct usb_serial_port *port = to_usb_serial_port(dev);
569 dbg ("%s - %s", __FUNCTION__, dev->bus_id);
573 static void kill_traffic(struct usb_serial_port *port)
575 usb_kill_urb(port->read_urb);
576 usb_kill_urb(port->write_urb);
577 usb_kill_urb(port->interrupt_in_urb);
578 usb_kill_urb(port->interrupt_out_urb);
581 static void port_free(struct usb_serial_port *port)
584 usb_free_urb(port->read_urb);
585 usb_free_urb(port->write_urb);
586 usb_free_urb(port->interrupt_in_urb);
587 usb_free_urb(port->interrupt_out_urb);
588 kfree(port->bulk_in_buffer);
589 kfree(port->bulk_out_buffer);
590 kfree(port->interrupt_in_buffer);
591 kfree(port->interrupt_out_buffer);
592 flush_scheduled_work(); /* port->work */
596 static struct usb_serial * create_serial (struct usb_device *dev,
597 struct usb_interface *interface,
598 struct usb_serial_driver *driver)
600 struct usb_serial *serial;
602 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
604 dev_err(&dev->dev, "%s - out of memory\n", __FUNCTION__);
607 serial->dev = usb_get_dev(dev);
608 serial->type = driver;
609 serial->interface = interface;
610 kref_init(&serial->kref);
615 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
616 struct usb_serial_driver *drv)
618 struct usb_dynid *dynid;
620 spin_lock(&drv->dynids.lock);
621 list_for_each_entry(dynid, &drv->dynids.list, node) {
622 if (usb_match_one_id(intf, &dynid->id)) {
623 spin_unlock(&drv->dynids.lock);
627 spin_unlock(&drv->dynids.lock);
631 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
632 struct usb_interface *intf)
634 const struct usb_device_id *id;
636 id = usb_match_id(intf, drv->id_table);
638 dbg("static descriptor matches");
641 id = match_dynamic_id(intf, drv);
643 dbg("dynamic descriptor matches");
648 static struct usb_serial_driver *search_serial_device(struct usb_interface *iface)
651 const struct usb_device_id *id;
652 struct usb_serial_driver *t;
654 /* Check if the usb id matches a known device */
655 list_for_each(p, &usb_serial_driver_list) {
656 t = list_entry(p, struct usb_serial_driver, driver_list);
657 id = get_iface_id(t, iface);
665 int usb_serial_probe(struct usb_interface *interface,
666 const struct usb_device_id *id)
668 struct usb_device *dev = interface_to_usbdev (interface);
669 struct usb_serial *serial = NULL;
670 struct usb_serial_port *port;
671 struct usb_host_interface *iface_desc;
672 struct usb_endpoint_descriptor *endpoint;
673 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
674 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
675 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
676 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
677 struct usb_serial_driver *type = NULL;
682 int num_interrupt_in = 0;
683 int num_interrupt_out = 0;
685 int num_bulk_out = 0;
689 lock_kernel(); /* guard against unloading a serial driver module */
690 type = search_serial_device(interface);
697 serial = create_serial (dev, interface, type);
700 dev_err(&interface->dev, "%s - out of memory\n", __FUNCTION__);
704 /* if this device type has a probe function, call it */
706 const struct usb_device_id *id;
708 if (!try_module_get(type->driver.owner)) {
710 dev_err(&interface->dev, "module get failed, exiting\n");
715 id = get_iface_id(type, interface);
716 retval = type->probe(serial, id);
717 module_put(type->driver.owner);
721 dbg ("sub driver rejected device");
727 /* descriptor matches, let's find the endpoints needed */
728 /* check out the endpoints */
729 iface_desc = interface->cur_altsetting;
730 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
731 endpoint = &iface_desc->endpoint[i].desc;
733 if (usb_endpoint_is_bulk_in(endpoint)) {
734 /* we found a bulk in endpoint */
735 dbg("found bulk in on endpoint %d", i);
736 bulk_in_endpoint[num_bulk_in] = endpoint;
740 if (usb_endpoint_is_bulk_out(endpoint)) {
741 /* we found a bulk out endpoint */
742 dbg("found bulk out on endpoint %d", i);
743 bulk_out_endpoint[num_bulk_out] = endpoint;
747 if (usb_endpoint_is_int_in(endpoint)) {
748 /* we found a interrupt in endpoint */
749 dbg("found interrupt in on endpoint %d", i);
750 interrupt_in_endpoint[num_interrupt_in] = endpoint;
754 if (usb_endpoint_is_int_out(endpoint)) {
755 /* we found an interrupt out endpoint */
756 dbg("found interrupt out on endpoint %d", i);
757 interrupt_out_endpoint[num_interrupt_out] = endpoint;
762 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
763 /* BEGIN HORRIBLE HACK FOR PL2303 */
764 /* this is needed due to the looney way its endpoints are set up */
765 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
766 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
767 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
768 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
769 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
770 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID))) {
771 if (interface != dev->actconfig->interface[0]) {
772 /* check out the endpoints of the other interface*/
773 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
774 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
775 endpoint = &iface_desc->endpoint[i].desc;
776 if (usb_endpoint_is_int_in(endpoint)) {
777 /* we found a interrupt in endpoint */
778 dbg("found interrupt in for Prolific device on separate interface");
779 interrupt_in_endpoint[num_interrupt_in] = endpoint;
785 /* Now make sure the PL-2303 is configured correctly.
786 * If not, give up now and hope this hack will work
787 * properly during a later invocation of usb_serial_probe
789 if (num_bulk_in == 0 || num_bulk_out == 0) {
791 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
796 /* END HORRIBLE HACK FOR PL2303 */
799 /* found all that we need */
800 dev_info(&interface->dev, "%s converter detected\n", type->description);
802 #ifdef CONFIG_USB_SERIAL_GENERIC
803 if (type == &usb_serial_generic_device) {
804 num_ports = num_bulk_out;
805 if (num_ports == 0) {
807 dev_err(&interface->dev, "Generic device with no bulk out, not allowed.\n");
814 /* if this device type has a calc_num_ports function, call it */
815 if (type->calc_num_ports) {
816 if (!try_module_get(type->driver.owner)) {
818 dev_err(&interface->dev, "module get failed, exiting\n");
822 num_ports = type->calc_num_ports (serial);
823 module_put(type->driver.owner);
826 num_ports = type->num_ports;
829 serial->minor = minor;
830 serial->num_ports = num_ports;
831 serial->num_bulk_in = num_bulk_in;
832 serial->num_bulk_out = num_bulk_out;
833 serial->num_interrupt_in = num_interrupt_in;
834 serial->num_interrupt_out = num_interrupt_out;
836 /* create our ports, we need as many as the max endpoints */
837 /* we don't use num_ports here cauz some devices have more endpoint pairs than ports */
838 max_endpoints = max(num_bulk_in, num_bulk_out);
839 max_endpoints = max(max_endpoints, num_interrupt_in);
840 max_endpoints = max(max_endpoints, num_interrupt_out);
841 max_endpoints = max(max_endpoints, (int)serial->num_ports);
842 serial->num_port_pointers = max_endpoints;
845 dbg("%s - setting up %d port structures for this device", __FUNCTION__, max_endpoints);
846 for (i = 0; i < max_endpoints; ++i) {
847 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
850 port->number = i + serial->minor;
851 port->serial = serial;
852 spin_lock_init(&port->lock);
853 mutex_init(&port->mutex);
854 INIT_WORK(&port->work, usb_serial_port_work);
855 serial->port[i] = port;
858 /* set up the endpoint information */
859 for (i = 0; i < num_bulk_in; ++i) {
860 endpoint = bulk_in_endpoint[i];
861 port = serial->port[i];
862 port->read_urb = usb_alloc_urb (0, GFP_KERNEL);
863 if (!port->read_urb) {
864 dev_err(&interface->dev, "No free urbs available\n");
867 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
868 port->bulk_in_size = buffer_size;
869 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
870 port->bulk_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
871 if (!port->bulk_in_buffer) {
872 dev_err(&interface->dev, "Couldn't allocate bulk_in_buffer\n");
875 usb_fill_bulk_urb (port->read_urb, dev,
876 usb_rcvbulkpipe (dev,
877 endpoint->bEndpointAddress),
878 port->bulk_in_buffer, buffer_size,
879 serial->type->read_bulk_callback,
883 for (i = 0; i < num_bulk_out; ++i) {
884 endpoint = bulk_out_endpoint[i];
885 port = serial->port[i];
886 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
887 if (!port->write_urb) {
888 dev_err(&interface->dev, "No free urbs available\n");
891 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
892 port->bulk_out_size = buffer_size;
893 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
894 port->bulk_out_buffer = kmalloc (buffer_size, GFP_KERNEL);
895 if (!port->bulk_out_buffer) {
896 dev_err(&interface->dev, "Couldn't allocate bulk_out_buffer\n");
899 usb_fill_bulk_urb (port->write_urb, dev,
900 usb_sndbulkpipe (dev,
901 endpoint->bEndpointAddress),
902 port->bulk_out_buffer, buffer_size,
903 serial->type->write_bulk_callback,
907 if (serial->type->read_int_callback) {
908 for (i = 0; i < num_interrupt_in; ++i) {
909 endpoint = interrupt_in_endpoint[i];
910 port = serial->port[i];
911 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
912 if (!port->interrupt_in_urb) {
913 dev_err(&interface->dev, "No free urbs available\n");
916 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
917 port->interrupt_in_endpointAddress = endpoint->bEndpointAddress;
918 port->interrupt_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
919 if (!port->interrupt_in_buffer) {
920 dev_err(&interface->dev, "Couldn't allocate interrupt_in_buffer\n");
923 usb_fill_int_urb (port->interrupt_in_urb, dev,
925 endpoint->bEndpointAddress),
926 port->interrupt_in_buffer, buffer_size,
927 serial->type->read_int_callback, port,
928 endpoint->bInterval);
930 } else if (num_interrupt_in) {
931 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
934 if (serial->type->write_int_callback) {
935 for (i = 0; i < num_interrupt_out; ++i) {
936 endpoint = interrupt_out_endpoint[i];
937 port = serial->port[i];
938 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
939 if (!port->interrupt_out_urb) {
940 dev_err(&interface->dev, "No free urbs available\n");
943 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
944 port->interrupt_out_size = buffer_size;
945 port->interrupt_out_endpointAddress = endpoint->bEndpointAddress;
946 port->interrupt_out_buffer = kmalloc (buffer_size, GFP_KERNEL);
947 if (!port->interrupt_out_buffer) {
948 dev_err(&interface->dev, "Couldn't allocate interrupt_out_buffer\n");
951 usb_fill_int_urb (port->interrupt_out_urb, dev,
953 endpoint->bEndpointAddress),
954 port->interrupt_out_buffer, buffer_size,
955 serial->type->write_int_callback, port,
956 endpoint->bInterval);
958 } else if (num_interrupt_out) {
959 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
962 /* if this device type has an attach function, call it */
964 if (!try_module_get(type->driver.owner)) {
965 dev_err(&interface->dev, "module get failed, exiting\n");
968 retval = type->attach (serial);
969 module_put(type->driver.owner);
973 /* quietly accept this device, but don't bind to a serial port
974 * as it's about to disappear */
979 if (get_free_serial (serial, num_ports, &minor) == NULL) {
980 dev_err(&interface->dev, "No more free serial devices\n");
984 /* register all of the individual ports with the driver core */
985 for (i = 0; i < num_ports; ++i) {
986 port = serial->port[i];
987 port->dev.parent = &interface->dev;
988 port->dev.driver = NULL;
989 port->dev.bus = &usb_serial_bus_type;
990 port->dev.release = &port_release;
992 snprintf (&port->dev.bus_id[0], sizeof(port->dev.bus_id), "ttyUSB%d", port->number);
993 dbg ("%s - registering %s", __FUNCTION__, port->dev.bus_id);
994 retval = device_register(&port->dev);
996 dev_err(&port->dev, "Error registering port device, "
1000 usb_serial_console_init (debug, minor);
1004 usb_set_intfdata (interface, serial);
1008 for (i = 0; i < num_bulk_in; ++i) {
1009 port = serial->port[i];
1012 usb_free_urb(port->read_urb);
1013 kfree(port->bulk_in_buffer);
1015 for (i = 0; i < num_bulk_out; ++i) {
1016 port = serial->port[i];
1019 usb_free_urb(port->write_urb);
1020 kfree(port->bulk_out_buffer);
1022 for (i = 0; i < num_interrupt_in; ++i) {
1023 port = serial->port[i];
1026 usb_free_urb(port->interrupt_in_urb);
1027 kfree(port->interrupt_in_buffer);
1029 for (i = 0; i < num_interrupt_out; ++i) {
1030 port = serial->port[i];
1033 usb_free_urb(port->interrupt_out_urb);
1034 kfree(port->interrupt_out_buffer);
1037 /* return the minor range that this device had */
1038 return_serial (serial);
1040 /* free up any memory that we allocated */
1041 for (i = 0; i < serial->num_port_pointers; ++i)
1042 kfree(serial->port[i]);
1047 void usb_serial_disconnect(struct usb_interface *interface)
1050 struct usb_serial *serial = usb_get_intfdata (interface);
1051 struct device *dev = &interface->dev;
1052 struct usb_serial_port *port;
1054 usb_serial_console_disconnect(serial);
1055 dbg ("%s", __FUNCTION__);
1057 usb_set_intfdata (interface, NULL);
1059 for (i = 0; i < serial->num_ports; ++i) {
1060 port = serial->port[i];
1063 tty_hangup(port->tty);
1067 /* let the last holder of this object
1068 * cause it to be cleaned up */
1069 usb_serial_put(serial);
1071 dev_info(dev, "device disconnected\n");
1074 static const struct tty_operations serial_ops = {
1075 .open = serial_open,
1076 .close = serial_close,
1077 .write = serial_write,
1078 .write_room = serial_write_room,
1079 .ioctl = serial_ioctl,
1080 .set_termios = serial_set_termios,
1081 .throttle = serial_throttle,
1082 .unthrottle = serial_unthrottle,
1083 .break_ctl = serial_break,
1084 .chars_in_buffer = serial_chars_in_buffer,
1085 .read_proc = serial_read_proc,
1086 .tiocmget = serial_tiocmget,
1087 .tiocmset = serial_tiocmset,
1090 struct tty_driver *usb_serial_tty_driver;
1092 static int __init usb_serial_init(void)
1097 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1098 if (!usb_serial_tty_driver)
1101 /* Initialize our global data */
1102 spin_lock_init(&table_lock);
1103 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
1104 serial_table[i] = NULL;
1107 result = bus_register(&usb_serial_bus_type);
1109 err("%s - registering bus driver failed", __FUNCTION__);
1113 usb_serial_tty_driver->owner = THIS_MODULE;
1114 usb_serial_tty_driver->driver_name = "usbserial";
1115 usb_serial_tty_driver->name = "ttyUSB";
1116 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1117 usb_serial_tty_driver->minor_start = 0;
1118 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1119 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1120 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1121 usb_serial_tty_driver->init_termios = tty_std_termios;
1122 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1123 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1124 result = tty_register_driver(usb_serial_tty_driver);
1126 err("%s - tty_register_driver failed", __FUNCTION__);
1127 goto exit_reg_driver;
1130 /* register the USB driver */
1131 result = usb_register(&usb_serial_driver);
1133 err("%s - usb_register failed", __FUNCTION__);
1137 /* register the generic driver, if we should */
1138 result = usb_serial_generic_register(debug);
1140 err("%s - registering generic driver failed", __FUNCTION__);
1149 usb_deregister(&usb_serial_driver);
1152 tty_unregister_driver(usb_serial_tty_driver);
1155 bus_unregister(&usb_serial_bus_type);
1158 err ("%s - returning with error %d", __FUNCTION__, result);
1159 put_tty_driver(usb_serial_tty_driver);
1164 static void __exit usb_serial_exit(void)
1166 usb_serial_console_exit();
1168 usb_serial_generic_deregister();
1170 usb_deregister(&usb_serial_driver);
1171 tty_unregister_driver(usb_serial_tty_driver);
1172 put_tty_driver(usb_serial_tty_driver);
1173 bus_unregister(&usb_serial_bus_type);
1177 module_init(usb_serial_init);
1178 module_exit(usb_serial_exit);
1180 #define set_to_generic_if_null(type, function) \
1182 if (!type->function) { \
1183 type->function = usb_serial_generic_##function; \
1184 dbg("Had to override the " #function \
1185 " usb serial operation with the generic one.");\
1189 static void fixup_generic(struct usb_serial_driver *device)
1191 set_to_generic_if_null(device, open);
1192 set_to_generic_if_null(device, write);
1193 set_to_generic_if_null(device, close);
1194 set_to_generic_if_null(device, write_room);
1195 set_to_generic_if_null(device, chars_in_buffer);
1196 set_to_generic_if_null(device, read_bulk_callback);
1197 set_to_generic_if_null(device, write_bulk_callback);
1198 set_to_generic_if_null(device, shutdown);
1201 int usb_serial_register(struct usb_serial_driver *driver) /* must be called with BKL held */
1205 fixup_generic(driver);
1207 if (!driver->description)
1208 driver->description = driver->driver.name;
1210 /* Add this device to our list of devices */
1211 list_add(&driver->driver_list, &usb_serial_driver_list);
1213 retval = usb_serial_bus_register(driver);
1215 err("problem %d when registering driver %s", retval, driver->description);
1216 list_del(&driver->driver_list);
1219 info("USB Serial support registered for %s", driver->description);
1225 void usb_serial_deregister(struct usb_serial_driver *device) /* must be called with BKL held */
1227 info("USB Serial deregistering driver %s", device->description);
1228 list_del(&device->driver_list);
1229 usb_serial_bus_deregister(device);
1234 /* If the usb-serial core is built into the core, the usb-serial drivers
1235 need these symbols to load properly as modules. */
1236 EXPORT_SYMBOL_GPL(usb_serial_register);
1237 EXPORT_SYMBOL_GPL(usb_serial_deregister);
1238 EXPORT_SYMBOL_GPL(usb_serial_probe);
1239 EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1240 EXPORT_SYMBOL_GPL(usb_serial_port_softint);
1243 /* Module information */
1244 MODULE_AUTHOR( DRIVER_AUTHOR );
1245 MODULE_DESCRIPTION( DRIVER_DESC );
1246 MODULE_LICENSE("GPL");
1248 module_param(debug, bool, S_IRUGO | S_IWUSR);
1249 MODULE_PARM_DESC(debug, "Debug enabled or not");