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 = -EINVAL;
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) {
292 dbg("%s - port not opened", __FUNCTION__);
296 /* pass on to the driver specific version of this function */
297 retval = port->serial->type->write(port, buf, count);
303 static int serial_write_room (struct tty_struct *tty)
305 struct usb_serial_port *port = tty->driver_data;
306 int retval = -ENODEV;
311 dbg("%s - port %d", __FUNCTION__, port->number);
313 if (!port->open_count) {
314 dbg("%s - port not open", __FUNCTION__);
318 /* pass on to the driver specific version of this function */
319 retval = port->serial->type->write_room(port);
325 static int serial_chars_in_buffer (struct tty_struct *tty)
327 struct usb_serial_port *port = tty->driver_data;
328 int retval = -ENODEV;
333 dbg("%s = port %d", __FUNCTION__, port->number);
335 if (!port->open_count) {
336 dbg("%s - port not open", __FUNCTION__);
340 /* pass on to the driver specific version of this function */
341 retval = port->serial->type->chars_in_buffer(port);
347 static void serial_throttle (struct tty_struct * tty)
349 struct usb_serial_port *port = tty->driver_data;
354 dbg("%s - port %d", __FUNCTION__, port->number);
356 if (!port->open_count) {
357 dbg ("%s - port not open", __FUNCTION__);
361 /* pass on to the driver specific version of this function */
362 if (port->serial->type->throttle)
363 port->serial->type->throttle(port);
366 static void serial_unthrottle (struct tty_struct * tty)
368 struct usb_serial_port *port = tty->driver_data;
373 dbg("%s - port %d", __FUNCTION__, port->number);
375 if (!port->open_count) {
376 dbg("%s - port not open", __FUNCTION__);
380 /* pass on to the driver specific version of this function */
381 if (port->serial->type->unthrottle)
382 port->serial->type->unthrottle(port);
385 static int serial_ioctl (struct tty_struct *tty, struct file * file, unsigned int cmd, unsigned long arg)
387 struct usb_serial_port *port = tty->driver_data;
388 int retval = -ENODEV;
393 dbg("%s - port %d, cmd 0x%.4x", __FUNCTION__, port->number, cmd);
395 if (!port->open_count) {
396 dbg ("%s - port not open", __FUNCTION__);
400 /* pass on to the driver specific version of this function if it is available */
401 if (port->serial->type->ioctl)
402 retval = port->serial->type->ioctl(port, file, cmd, arg);
404 retval = -ENOIOCTLCMD;
410 static void serial_set_termios (struct tty_struct *tty, struct ktermios * old)
412 struct usb_serial_port *port = tty->driver_data;
417 dbg("%s - port %d", __FUNCTION__, port->number);
419 if (!port->open_count) {
420 dbg("%s - port not open", __FUNCTION__);
424 /* pass on to the driver specific version of this function if it is available */
425 if (port->serial->type->set_termios)
426 port->serial->type->set_termios(port, old);
429 static void serial_break (struct tty_struct *tty, int break_state)
431 struct usb_serial_port *port = tty->driver_data;
436 dbg("%s - port %d", __FUNCTION__, port->number);
438 if (!port->open_count) {
439 dbg("%s - port not open", __FUNCTION__);
443 /* pass on to the driver specific version of this function if it is available */
444 if (port->serial->type->break_ctl)
445 port->serial->type->break_ctl(port, break_state);
448 static int serial_read_proc (char *page, char **start, off_t off, int count, int *eof, void *data)
450 struct usb_serial *serial;
456 dbg("%s", __FUNCTION__);
457 length += sprintf (page, "usbserinfo:1.0 driver:2.0\n");
458 for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) {
459 serial = usb_serial_get_by_index(i);
463 length += sprintf (page+length, "%d:", i);
464 if (serial->type->driver.owner)
465 length += sprintf (page+length, " module:%s", module_name(serial->type->driver.owner));
466 length += sprintf (page+length, " name:\"%s\"", serial->type->description);
467 length += sprintf (page+length, " vendor:%04x product:%04x",
468 le16_to_cpu(serial->dev->descriptor.idVendor),
469 le16_to_cpu(serial->dev->descriptor.idProduct));
470 length += sprintf (page+length, " num_ports:%d", serial->num_ports);
471 length += sprintf (page+length, " port:%d", i - serial->minor + 1);
473 usb_make_path(serial->dev, tmp, sizeof(tmp));
474 length += sprintf (page+length, " path:%s", tmp);
476 length += sprintf (page+length, "\n");
477 if ((length + begin) > (off + count)) {
478 usb_serial_put(serial);
481 if ((length + begin) < off) {
485 usb_serial_put(serial);
489 if (off >= (length + begin))
491 *start = page + (off-begin);
492 return ((count < begin+length-off) ? count : begin+length-off);
495 static int serial_tiocmget (struct tty_struct *tty, struct file *file)
497 struct usb_serial_port *port = tty->driver_data;
502 dbg("%s - port %d", __FUNCTION__, port->number);
504 if (!port->open_count) {
505 dbg("%s - port not open", __FUNCTION__);
509 if (port->serial->type->tiocmget)
510 return port->serial->type->tiocmget(port, file);
515 static int serial_tiocmset (struct tty_struct *tty, struct file *file,
516 unsigned int set, unsigned int clear)
518 struct usb_serial_port *port = tty->driver_data;
523 dbg("%s - port %d", __FUNCTION__, port->number);
525 if (!port->open_count) {
526 dbg("%s - port not open", __FUNCTION__);
530 if (port->serial->type->tiocmset)
531 return port->serial->type->tiocmset(port, file, set, clear);
537 * We would be calling tty_wakeup here, but unfortunately some line
538 * disciplines have an annoying habit of calling tty->write from
539 * the write wakeup callback (e.g. n_hdlc.c).
541 void usb_serial_port_softint(struct usb_serial_port *port)
543 schedule_work(&port->work);
546 static void usb_serial_port_work(struct work_struct *work)
548 struct usb_serial_port *port =
549 container_of(work, struct usb_serial_port, work);
550 struct tty_struct *tty;
552 dbg("%s - port %d", __FUNCTION__, port->number);
564 static void port_release(struct device *dev)
566 struct usb_serial_port *port = to_usb_serial_port(dev);
568 dbg ("%s - %s", __FUNCTION__, dev->bus_id);
572 static void kill_traffic(struct usb_serial_port *port)
574 usb_kill_urb(port->read_urb);
575 usb_kill_urb(port->write_urb);
576 usb_kill_urb(port->interrupt_in_urb);
577 usb_kill_urb(port->interrupt_out_urb);
580 static void port_free(struct usb_serial_port *port)
583 usb_free_urb(port->read_urb);
584 usb_free_urb(port->write_urb);
585 usb_free_urb(port->interrupt_in_urb);
586 usb_free_urb(port->interrupt_out_urb);
587 kfree(port->bulk_in_buffer);
588 kfree(port->bulk_out_buffer);
589 kfree(port->interrupt_in_buffer);
590 kfree(port->interrupt_out_buffer);
591 flush_scheduled_work(); /* port->work */
595 static struct usb_serial * create_serial (struct usb_device *dev,
596 struct usb_interface *interface,
597 struct usb_serial_driver *driver)
599 struct usb_serial *serial;
601 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
603 dev_err(&dev->dev, "%s - out of memory\n", __FUNCTION__);
606 serial->dev = usb_get_dev(dev);
607 serial->type = driver;
608 serial->interface = interface;
609 kref_init(&serial->kref);
614 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
615 struct usb_serial_driver *drv)
617 struct usb_dynid *dynid;
619 spin_lock(&drv->dynids.lock);
620 list_for_each_entry(dynid, &drv->dynids.list, node) {
621 if (usb_match_one_id(intf, &dynid->id)) {
622 spin_unlock(&drv->dynids.lock);
626 spin_unlock(&drv->dynids.lock);
630 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
631 struct usb_interface *intf)
633 const struct usb_device_id *id;
635 id = usb_match_id(intf, drv->id_table);
637 dbg("static descriptor matches");
640 id = match_dynamic_id(intf, drv);
642 dbg("dynamic descriptor matches");
647 static struct usb_serial_driver *search_serial_device(struct usb_interface *iface)
650 const struct usb_device_id *id;
651 struct usb_serial_driver *t;
653 /* Check if the usb id matches a known device */
654 list_for_each(p, &usb_serial_driver_list) {
655 t = list_entry(p, struct usb_serial_driver, driver_list);
656 id = get_iface_id(t, iface);
664 int usb_serial_probe(struct usb_interface *interface,
665 const struct usb_device_id *id)
667 struct usb_device *dev = interface_to_usbdev (interface);
668 struct usb_serial *serial = NULL;
669 struct usb_serial_port *port;
670 struct usb_host_interface *iface_desc;
671 struct usb_endpoint_descriptor *endpoint;
672 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
673 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
674 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
675 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
676 struct usb_serial_driver *type = NULL;
681 int num_interrupt_in = 0;
682 int num_interrupt_out = 0;
684 int num_bulk_out = 0;
688 lock_kernel(); /* guard against unloading a serial driver module */
689 type = search_serial_device(interface);
696 serial = create_serial (dev, interface, type);
699 dev_err(&interface->dev, "%s - out of memory\n", __FUNCTION__);
703 /* if this device type has a probe function, call it */
705 const struct usb_device_id *id;
707 if (!try_module_get(type->driver.owner)) {
709 dev_err(&interface->dev, "module get failed, exiting\n");
714 id = get_iface_id(type, interface);
715 retval = type->probe(serial, id);
716 module_put(type->driver.owner);
720 dbg ("sub driver rejected device");
726 /* descriptor matches, let's find the endpoints needed */
727 /* check out the endpoints */
728 iface_desc = interface->cur_altsetting;
729 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
730 endpoint = &iface_desc->endpoint[i].desc;
732 if (usb_endpoint_is_bulk_in(endpoint)) {
733 /* we found a bulk in endpoint */
734 dbg("found bulk in on endpoint %d", i);
735 bulk_in_endpoint[num_bulk_in] = endpoint;
739 if (usb_endpoint_is_bulk_out(endpoint)) {
740 /* we found a bulk out endpoint */
741 dbg("found bulk out on endpoint %d", i);
742 bulk_out_endpoint[num_bulk_out] = endpoint;
746 if (usb_endpoint_is_int_in(endpoint)) {
747 /* we found a interrupt in endpoint */
748 dbg("found interrupt in on endpoint %d", i);
749 interrupt_in_endpoint[num_interrupt_in] = endpoint;
753 if (usb_endpoint_is_int_out(endpoint)) {
754 /* we found an interrupt out endpoint */
755 dbg("found interrupt out on endpoint %d", i);
756 interrupt_out_endpoint[num_interrupt_out] = endpoint;
761 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
762 /* BEGIN HORRIBLE HACK FOR PL2303 */
763 /* this is needed due to the looney way its endpoints are set up */
764 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
765 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
766 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
767 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
768 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
769 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID))) {
770 if (interface != dev->actconfig->interface[0]) {
771 /* check out the endpoints of the other interface*/
772 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
773 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
774 endpoint = &iface_desc->endpoint[i].desc;
775 if (usb_endpoint_is_int_in(endpoint)) {
776 /* we found a interrupt in endpoint */
777 dbg("found interrupt in for Prolific device on separate interface");
778 interrupt_in_endpoint[num_interrupt_in] = endpoint;
784 /* Now make sure the PL-2303 is configured correctly.
785 * If not, give up now and hope this hack will work
786 * properly during a later invocation of usb_serial_probe
788 if (num_bulk_in == 0 || num_bulk_out == 0) {
790 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
795 /* END HORRIBLE HACK FOR PL2303 */
798 /* found all that we need */
799 dev_info(&interface->dev, "%s converter detected\n", type->description);
801 #ifdef CONFIG_USB_SERIAL_GENERIC
802 if (type == &usb_serial_generic_device) {
803 num_ports = num_bulk_out;
804 if (num_ports == 0) {
806 dev_err(&interface->dev, "Generic device with no bulk out, not allowed.\n");
813 /* if this device type has a calc_num_ports function, call it */
814 if (type->calc_num_ports) {
815 if (!try_module_get(type->driver.owner)) {
817 dev_err(&interface->dev, "module get failed, exiting\n");
821 num_ports = type->calc_num_ports (serial);
822 module_put(type->driver.owner);
825 num_ports = type->num_ports;
828 serial->minor = minor;
829 serial->num_ports = num_ports;
830 serial->num_bulk_in = num_bulk_in;
831 serial->num_bulk_out = num_bulk_out;
832 serial->num_interrupt_in = num_interrupt_in;
833 serial->num_interrupt_out = num_interrupt_out;
835 /* create our ports, we need as many as the max endpoints */
836 /* we don't use num_ports here cauz some devices have more endpoint pairs than ports */
837 max_endpoints = max(num_bulk_in, num_bulk_out);
838 max_endpoints = max(max_endpoints, num_interrupt_in);
839 max_endpoints = max(max_endpoints, num_interrupt_out);
840 max_endpoints = max(max_endpoints, (int)serial->num_ports);
841 serial->num_port_pointers = max_endpoints;
844 dbg("%s - setting up %d port structures for this device", __FUNCTION__, max_endpoints);
845 for (i = 0; i < max_endpoints; ++i) {
846 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
849 port->number = i + serial->minor;
850 port->serial = serial;
851 spin_lock_init(&port->lock);
852 mutex_init(&port->mutex);
853 INIT_WORK(&port->work, usb_serial_port_work);
854 serial->port[i] = port;
857 /* set up the endpoint information */
858 for (i = 0; i < num_bulk_in; ++i) {
859 endpoint = bulk_in_endpoint[i];
860 port = serial->port[i];
861 port->read_urb = usb_alloc_urb (0, GFP_KERNEL);
862 if (!port->read_urb) {
863 dev_err(&interface->dev, "No free urbs available\n");
866 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
867 port->bulk_in_size = buffer_size;
868 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
869 port->bulk_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
870 if (!port->bulk_in_buffer) {
871 dev_err(&interface->dev, "Couldn't allocate bulk_in_buffer\n");
874 usb_fill_bulk_urb (port->read_urb, dev,
875 usb_rcvbulkpipe (dev,
876 endpoint->bEndpointAddress),
877 port->bulk_in_buffer, buffer_size,
878 serial->type->read_bulk_callback,
882 for (i = 0; i < num_bulk_out; ++i) {
883 endpoint = bulk_out_endpoint[i];
884 port = serial->port[i];
885 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
886 if (!port->write_urb) {
887 dev_err(&interface->dev, "No free urbs available\n");
890 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
891 port->bulk_out_size = buffer_size;
892 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
893 port->bulk_out_buffer = kmalloc (buffer_size, GFP_KERNEL);
894 if (!port->bulk_out_buffer) {
895 dev_err(&interface->dev, "Couldn't allocate bulk_out_buffer\n");
898 usb_fill_bulk_urb (port->write_urb, dev,
899 usb_sndbulkpipe (dev,
900 endpoint->bEndpointAddress),
901 port->bulk_out_buffer, buffer_size,
902 serial->type->write_bulk_callback,
906 if (serial->type->read_int_callback) {
907 for (i = 0; i < num_interrupt_in; ++i) {
908 endpoint = interrupt_in_endpoint[i];
909 port = serial->port[i];
910 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
911 if (!port->interrupt_in_urb) {
912 dev_err(&interface->dev, "No free urbs available\n");
915 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
916 port->interrupt_in_endpointAddress = endpoint->bEndpointAddress;
917 port->interrupt_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
918 if (!port->interrupt_in_buffer) {
919 dev_err(&interface->dev, "Couldn't allocate interrupt_in_buffer\n");
922 usb_fill_int_urb (port->interrupt_in_urb, dev,
924 endpoint->bEndpointAddress),
925 port->interrupt_in_buffer, buffer_size,
926 serial->type->read_int_callback, port,
927 endpoint->bInterval);
929 } else if (num_interrupt_in) {
930 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
933 if (serial->type->write_int_callback) {
934 for (i = 0; i < num_interrupt_out; ++i) {
935 endpoint = interrupt_out_endpoint[i];
936 port = serial->port[i];
937 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
938 if (!port->interrupt_out_urb) {
939 dev_err(&interface->dev, "No free urbs available\n");
942 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
943 port->interrupt_out_size = buffer_size;
944 port->interrupt_out_endpointAddress = endpoint->bEndpointAddress;
945 port->interrupt_out_buffer = kmalloc (buffer_size, GFP_KERNEL);
946 if (!port->interrupt_out_buffer) {
947 dev_err(&interface->dev, "Couldn't allocate interrupt_out_buffer\n");
950 usb_fill_int_urb (port->interrupt_out_urb, dev,
952 endpoint->bEndpointAddress),
953 port->interrupt_out_buffer, buffer_size,
954 serial->type->write_int_callback, port,
955 endpoint->bInterval);
957 } else if (num_interrupt_out) {
958 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
961 /* if this device type has an attach function, call it */
963 if (!try_module_get(type->driver.owner)) {
964 dev_err(&interface->dev, "module get failed, exiting\n");
967 retval = type->attach (serial);
968 module_put(type->driver.owner);
972 /* quietly accept this device, but don't bind to a serial port
973 * as it's about to disappear */
978 if (get_free_serial (serial, num_ports, &minor) == NULL) {
979 dev_err(&interface->dev, "No more free serial devices\n");
983 /* register all of the individual ports with the driver core */
984 for (i = 0; i < num_ports; ++i) {
985 port = serial->port[i];
986 port->dev.parent = &interface->dev;
987 port->dev.driver = NULL;
988 port->dev.bus = &usb_serial_bus_type;
989 port->dev.release = &port_release;
991 snprintf (&port->dev.bus_id[0], sizeof(port->dev.bus_id), "ttyUSB%d", port->number);
992 dbg ("%s - registering %s", __FUNCTION__, port->dev.bus_id);
993 retval = device_register(&port->dev);
995 dev_err(&port->dev, "Error registering port device, "
999 usb_serial_console_init (debug, minor);
1003 usb_set_intfdata (interface, serial);
1007 for (i = 0; i < num_bulk_in; ++i) {
1008 port = serial->port[i];
1011 usb_free_urb(port->read_urb);
1012 kfree(port->bulk_in_buffer);
1014 for (i = 0; i < num_bulk_out; ++i) {
1015 port = serial->port[i];
1018 usb_free_urb(port->write_urb);
1019 kfree(port->bulk_out_buffer);
1021 for (i = 0; i < num_interrupt_in; ++i) {
1022 port = serial->port[i];
1025 usb_free_urb(port->interrupt_in_urb);
1026 kfree(port->interrupt_in_buffer);
1028 for (i = 0; i < num_interrupt_out; ++i) {
1029 port = serial->port[i];
1032 usb_free_urb(port->interrupt_out_urb);
1033 kfree(port->interrupt_out_buffer);
1036 /* return the minor range that this device had */
1037 return_serial (serial);
1039 /* free up any memory that we allocated */
1040 for (i = 0; i < serial->num_port_pointers; ++i)
1041 kfree(serial->port[i]);
1046 void usb_serial_disconnect(struct usb_interface *interface)
1049 struct usb_serial *serial = usb_get_intfdata (interface);
1050 struct device *dev = &interface->dev;
1051 struct usb_serial_port *port;
1053 usb_serial_console_disconnect(serial);
1054 dbg ("%s", __FUNCTION__);
1056 usb_set_intfdata (interface, NULL);
1058 for (i = 0; i < serial->num_ports; ++i) {
1059 port = serial->port[i];
1062 tty_hangup(port->tty);
1066 /* let the last holder of this object
1067 * cause it to be cleaned up */
1068 usb_serial_put(serial);
1070 dev_info(dev, "device disconnected\n");
1073 static const struct tty_operations serial_ops = {
1074 .open = serial_open,
1075 .close = serial_close,
1076 .write = serial_write,
1077 .write_room = serial_write_room,
1078 .ioctl = serial_ioctl,
1079 .set_termios = serial_set_termios,
1080 .throttle = serial_throttle,
1081 .unthrottle = serial_unthrottle,
1082 .break_ctl = serial_break,
1083 .chars_in_buffer = serial_chars_in_buffer,
1084 .read_proc = serial_read_proc,
1085 .tiocmget = serial_tiocmget,
1086 .tiocmset = serial_tiocmset,
1089 struct tty_driver *usb_serial_tty_driver;
1091 static int __init usb_serial_init(void)
1096 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1097 if (!usb_serial_tty_driver)
1100 /* Initialize our global data */
1101 spin_lock_init(&table_lock);
1102 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
1103 serial_table[i] = NULL;
1106 result = bus_register(&usb_serial_bus_type);
1108 err("%s - registering bus driver failed", __FUNCTION__);
1112 usb_serial_tty_driver->owner = THIS_MODULE;
1113 usb_serial_tty_driver->driver_name = "usbserial";
1114 usb_serial_tty_driver->name = "ttyUSB";
1115 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1116 usb_serial_tty_driver->minor_start = 0;
1117 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1118 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1119 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1120 usb_serial_tty_driver->init_termios = tty_std_termios;
1121 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1122 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1123 result = tty_register_driver(usb_serial_tty_driver);
1125 err("%s - tty_register_driver failed", __FUNCTION__);
1126 goto exit_reg_driver;
1129 /* register the USB driver */
1130 result = usb_register(&usb_serial_driver);
1132 err("%s - usb_register failed", __FUNCTION__);
1136 /* register the generic driver, if we should */
1137 result = usb_serial_generic_register(debug);
1139 err("%s - registering generic driver failed", __FUNCTION__);
1148 usb_deregister(&usb_serial_driver);
1151 tty_unregister_driver(usb_serial_tty_driver);
1154 bus_unregister(&usb_serial_bus_type);
1157 err ("%s - returning with error %d", __FUNCTION__, result);
1158 put_tty_driver(usb_serial_tty_driver);
1163 static void __exit usb_serial_exit(void)
1165 usb_serial_console_exit();
1167 usb_serial_generic_deregister();
1169 usb_deregister(&usb_serial_driver);
1170 tty_unregister_driver(usb_serial_tty_driver);
1171 put_tty_driver(usb_serial_tty_driver);
1172 bus_unregister(&usb_serial_bus_type);
1176 module_init(usb_serial_init);
1177 module_exit(usb_serial_exit);
1179 #define set_to_generic_if_null(type, function) \
1181 if (!type->function) { \
1182 type->function = usb_serial_generic_##function; \
1183 dbg("Had to override the " #function \
1184 " usb serial operation with the generic one.");\
1188 static void fixup_generic(struct usb_serial_driver *device)
1190 set_to_generic_if_null(device, open);
1191 set_to_generic_if_null(device, write);
1192 set_to_generic_if_null(device, close);
1193 set_to_generic_if_null(device, write_room);
1194 set_to_generic_if_null(device, chars_in_buffer);
1195 set_to_generic_if_null(device, read_bulk_callback);
1196 set_to_generic_if_null(device, write_bulk_callback);
1197 set_to_generic_if_null(device, shutdown);
1200 int usb_serial_register(struct usb_serial_driver *driver) /* must be called with BKL held */
1204 fixup_generic(driver);
1206 if (!driver->description)
1207 driver->description = driver->driver.name;
1209 /* Add this device to our list of devices */
1210 list_add(&driver->driver_list, &usb_serial_driver_list);
1212 retval = usb_serial_bus_register(driver);
1214 err("problem %d when registering driver %s", retval, driver->description);
1215 list_del(&driver->driver_list);
1218 info("USB Serial support registered for %s", driver->description);
1224 void usb_serial_deregister(struct usb_serial_driver *device) /* must be called with BKL held */
1226 info("USB Serial deregistering driver %s", device->description);
1227 list_del(&device->driver_list);
1228 usb_serial_bus_deregister(device);
1233 /* If the usb-serial core is built into the core, the usb-serial drivers
1234 need these symbols to load properly as modules. */
1235 EXPORT_SYMBOL_GPL(usb_serial_register);
1236 EXPORT_SYMBOL_GPL(usb_serial_deregister);
1237 EXPORT_SYMBOL_GPL(usb_serial_probe);
1238 EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1239 EXPORT_SYMBOL_GPL(usb_serial_port_softint);
1242 /* Module information */
1243 MODULE_AUTHOR( DRIVER_AUTHOR );
1244 MODULE_DESCRIPTION( DRIVER_DESC );
1245 MODULE_LICENSE("GPL");
1247 module_param(debug, bool, S_IRUGO | S_IWUSR);
1248 MODULE_PARM_DESC(debug, "Debug enabled or not");