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])) {
103 dbg("%s - minor base = %d", __FUNCTION__, *minor);
104 for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i) {
105 serial_table[i] = serial;
106 serial->port[j++]->number = i;
108 spin_unlock(&table_lock);
111 spin_unlock(&table_lock);
115 static void return_serial(struct usb_serial *serial)
119 dbg("%s", __FUNCTION__);
124 spin_lock(&table_lock);
125 for (i = 0; i < serial->num_ports; ++i) {
126 serial_table[serial->minor + i] = NULL;
128 spin_unlock(&table_lock);
131 static void destroy_serial(struct kref *kref)
133 struct usb_serial *serial;
134 struct usb_serial_port *port;
137 serial = to_usb_serial(kref);
139 dbg("%s - %s", __FUNCTION__, serial->type->description);
141 serial->type->shutdown(serial);
143 /* return the minor range that this device had */
144 return_serial(serial);
146 for (i = 0; i < serial->num_ports; ++i)
147 serial->port[i]->open_count = 0;
149 /* the ports are cleaned up and released in port_release() */
150 for (i = 0; i < serial->num_ports; ++i)
151 if (serial->port[i]->dev.parent != NULL) {
152 device_unregister(&serial->port[i]->dev);
153 serial->port[i] = NULL;
156 /* If this is a "fake" port, we have to clean it up here, as it will
157 * not get cleaned up in port_release() as it was never registered with
159 if (serial->num_ports < serial->num_port_pointers) {
160 for (i = serial->num_ports; i < serial->num_port_pointers; ++i) {
161 port = serial->port[i];
168 usb_put_dev(serial->dev);
170 /* free up any memory that we allocated */
174 void usb_serial_put(struct usb_serial *serial)
176 kref_put(&serial->kref, destroy_serial);
179 /*****************************************************************************
180 * Driver tty interface functions
181 *****************************************************************************/
182 static int serial_open (struct tty_struct *tty, struct file * filp)
184 struct usb_serial *serial;
185 struct usb_serial_port *port;
186 unsigned int portNumber;
189 dbg("%s", __FUNCTION__);
191 /* get the serial object associated with this tty pointer */
192 serial = usb_serial_get_by_index(tty->index);
194 tty->driver_data = NULL;
198 portNumber = tty->index - serial->minor;
199 port = serial->port[portNumber];
202 goto bailout_kref_put;
205 if (mutex_lock_interruptible(&port->mutex)) {
206 retval = -ERESTARTSYS;
207 goto bailout_kref_put;
212 /* set up our port structure making the tty driver
213 * remember our port object, and us it */
214 tty->driver_data = port;
217 if (port->open_count == 1) {
219 /* lock this module before we call it
220 * this may fail, which means we must bail out,
221 * safe because we are called with BKL held */
222 if (!try_module_get(serial->type->driver.owner)) {
224 goto bailout_mutex_unlock;
227 /* only call the device specific open if this
228 * is the first time the port is opened */
229 retval = serial->type->open(port, filp);
231 goto bailout_module_put;
234 mutex_unlock(&port->mutex);
238 module_put(serial->type->driver.owner);
239 bailout_mutex_unlock:
240 port->open_count = 0;
241 tty->driver_data = NULL;
243 mutex_unlock(&port->mutex);
245 usb_serial_put(serial);
249 static void serial_close(struct tty_struct *tty, struct file * filp)
251 struct usb_serial_port *port = tty->driver_data;
256 dbg("%s - port %d", __FUNCTION__, port->number);
258 mutex_lock(&port->mutex);
260 if (port->open_count == 0) {
261 mutex_unlock(&port->mutex);
266 if (port->open_count == 0) {
267 /* only call the device specific close if this
268 * port is being closed by the last owner */
269 port->serial->type->close(port, filp);
272 if (port->tty->driver_data)
273 port->tty->driver_data = NULL;
277 module_put(port->serial->type->driver.owner);
280 mutex_unlock(&port->mutex);
281 usb_serial_put(port->serial);
284 static int serial_write (struct tty_struct * tty, const unsigned char *buf, int count)
286 struct usb_serial_port *port = tty->driver_data;
287 int retval = -ENODEV;
289 if (!port || port->serial->dev->state == USB_STATE_NOTATTACHED)
292 dbg("%s - port %d, %d byte(s)", __FUNCTION__, port->number, count);
294 if (!port->open_count) {
296 dbg("%s - port not opened", __FUNCTION__);
300 /* pass on to the driver specific version of this function */
301 retval = port->serial->type->write(port, buf, count);
307 static int serial_write_room (struct tty_struct *tty)
309 struct usb_serial_port *port = tty->driver_data;
310 int retval = -ENODEV;
315 dbg("%s - port %d", __FUNCTION__, port->number);
317 if (!port->open_count) {
318 dbg("%s - port not open", __FUNCTION__);
322 /* pass on to the driver specific version of this function */
323 retval = port->serial->type->write_room(port);
329 static int serial_chars_in_buffer (struct tty_struct *tty)
331 struct usb_serial_port *port = tty->driver_data;
332 int retval = -ENODEV;
337 dbg("%s = port %d", __FUNCTION__, port->number);
339 if (!port->open_count) {
340 dbg("%s - port not open", __FUNCTION__);
344 /* pass on to the driver specific version of this function */
345 retval = port->serial->type->chars_in_buffer(port);
351 static void serial_throttle (struct tty_struct * tty)
353 struct usb_serial_port *port = tty->driver_data;
358 dbg("%s - port %d", __FUNCTION__, port->number);
360 if (!port->open_count) {
361 dbg ("%s - port not open", __FUNCTION__);
365 /* pass on to the driver specific version of this function */
366 if (port->serial->type->throttle)
367 port->serial->type->throttle(port);
370 static void serial_unthrottle (struct tty_struct * tty)
372 struct usb_serial_port *port = tty->driver_data;
377 dbg("%s - port %d", __FUNCTION__, port->number);
379 if (!port->open_count) {
380 dbg("%s - port not open", __FUNCTION__);
384 /* pass on to the driver specific version of this function */
385 if (port->serial->type->unthrottle)
386 port->serial->type->unthrottle(port);
389 static int serial_ioctl (struct tty_struct *tty, struct file * file, unsigned int cmd, unsigned long arg)
391 struct usb_serial_port *port = tty->driver_data;
392 int retval = -ENODEV;
397 dbg("%s - port %d, cmd 0x%.4x", __FUNCTION__, port->number, cmd);
399 if (!port->open_count) {
400 dbg ("%s - port not open", __FUNCTION__);
404 /* pass on to the driver specific version of this function if it is available */
405 if (port->serial->type->ioctl)
406 retval = port->serial->type->ioctl(port, file, cmd, arg);
408 retval = -ENOIOCTLCMD;
414 static void serial_set_termios (struct tty_struct *tty, struct ktermios * old)
416 struct usb_serial_port *port = tty->driver_data;
421 dbg("%s - port %d", __FUNCTION__, port->number);
423 if (!port->open_count) {
424 dbg("%s - port not open", __FUNCTION__);
428 /* pass on to the driver specific version of this function if it is available */
429 if (port->serial->type->set_termios)
430 port->serial->type->set_termios(port, old);
433 static void serial_break (struct tty_struct *tty, int break_state)
435 struct usb_serial_port *port = tty->driver_data;
440 dbg("%s - port %d", __FUNCTION__, port->number);
442 if (!port->open_count) {
443 dbg("%s - port not open", __FUNCTION__);
447 /* pass on to the driver specific version of this function if it is available */
448 if (port->serial->type->break_ctl)
449 port->serial->type->break_ctl(port, break_state);
452 static int serial_read_proc (char *page, char **start, off_t off, int count, int *eof, void *data)
454 struct usb_serial *serial;
460 dbg("%s", __FUNCTION__);
461 length += sprintf (page, "usbserinfo:1.0 driver:2.0\n");
462 for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) {
463 serial = usb_serial_get_by_index(i);
467 length += sprintf (page+length, "%d:", i);
468 if (serial->type->driver.owner)
469 length += sprintf (page+length, " module:%s", module_name(serial->type->driver.owner));
470 length += sprintf (page+length, " name:\"%s\"", serial->type->description);
471 length += sprintf (page+length, " vendor:%04x product:%04x",
472 le16_to_cpu(serial->dev->descriptor.idVendor),
473 le16_to_cpu(serial->dev->descriptor.idProduct));
474 length += sprintf (page+length, " num_ports:%d", serial->num_ports);
475 length += sprintf (page+length, " port:%d", i - serial->minor + 1);
477 usb_make_path(serial->dev, tmp, sizeof(tmp));
478 length += sprintf (page+length, " path:%s", tmp);
480 length += sprintf (page+length, "\n");
481 if ((length + begin) > (off + count)) {
482 usb_serial_put(serial);
485 if ((length + begin) < off) {
489 usb_serial_put(serial);
493 if (off >= (length + begin))
495 *start = page + (off-begin);
496 return ((count < begin+length-off) ? count : begin+length-off);
499 static int serial_tiocmget (struct tty_struct *tty, struct file *file)
501 struct usb_serial_port *port = tty->driver_data;
506 dbg("%s - port %d", __FUNCTION__, port->number);
508 if (!port->open_count) {
509 dbg("%s - port not open", __FUNCTION__);
513 if (port->serial->type->tiocmget)
514 return port->serial->type->tiocmget(port, file);
519 static int serial_tiocmset (struct tty_struct *tty, struct file *file,
520 unsigned int set, unsigned int clear)
522 struct usb_serial_port *port = tty->driver_data;
527 dbg("%s - port %d", __FUNCTION__, port->number);
529 if (!port->open_count) {
530 dbg("%s - port not open", __FUNCTION__);
534 if (port->serial->type->tiocmset)
535 return port->serial->type->tiocmset(port, file, set, clear);
541 * We would be calling tty_wakeup here, but unfortunately some line
542 * disciplines have an annoying habit of calling tty->write from
543 * the write wakeup callback (e.g. n_hdlc.c).
545 void usb_serial_port_softint(struct usb_serial_port *port)
547 schedule_work(&port->work);
550 static void usb_serial_port_work(struct work_struct *work)
552 struct usb_serial_port *port =
553 container_of(work, struct usb_serial_port, work);
554 struct tty_struct *tty;
556 dbg("%s - port %d", __FUNCTION__, port->number);
568 static void port_release(struct device *dev)
570 struct usb_serial_port *port = to_usb_serial_port(dev);
572 dbg ("%s - %s", __FUNCTION__, dev->bus_id);
576 static void kill_traffic(struct usb_serial_port *port)
578 usb_kill_urb(port->read_urb);
579 usb_kill_urb(port->write_urb);
580 usb_kill_urb(port->interrupt_in_urb);
581 usb_kill_urb(port->interrupt_out_urb);
584 static void port_free(struct usb_serial_port *port)
587 usb_free_urb(port->read_urb);
588 usb_free_urb(port->write_urb);
589 usb_free_urb(port->interrupt_in_urb);
590 usb_free_urb(port->interrupt_out_urb);
591 kfree(port->bulk_in_buffer);
592 kfree(port->bulk_out_buffer);
593 kfree(port->interrupt_in_buffer);
594 kfree(port->interrupt_out_buffer);
595 flush_scheduled_work(); /* port->work */
599 static struct usb_serial * create_serial (struct usb_device *dev,
600 struct usb_interface *interface,
601 struct usb_serial_driver *driver)
603 struct usb_serial *serial;
605 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
607 dev_err(&dev->dev, "%s - out of memory\n", __FUNCTION__);
610 serial->dev = usb_get_dev(dev);
611 serial->type = driver;
612 serial->interface = interface;
613 kref_init(&serial->kref);
618 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
619 struct usb_serial_driver *drv)
621 struct usb_dynid *dynid;
623 spin_lock(&drv->dynids.lock);
624 list_for_each_entry(dynid, &drv->dynids.list, node) {
625 if (usb_match_one_id(intf, &dynid->id)) {
626 spin_unlock(&drv->dynids.lock);
630 spin_unlock(&drv->dynids.lock);
634 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
635 struct usb_interface *intf)
637 const struct usb_device_id *id;
639 id = usb_match_id(intf, drv->id_table);
641 dbg("static descriptor matches");
644 id = match_dynamic_id(intf, drv);
646 dbg("dynamic descriptor matches");
651 static struct usb_serial_driver *search_serial_device(struct usb_interface *iface)
654 const struct usb_device_id *id;
655 struct usb_serial_driver *t;
657 /* Check if the usb id matches a known device */
658 list_for_each(p, &usb_serial_driver_list) {
659 t = list_entry(p, struct usb_serial_driver, driver_list);
660 id = get_iface_id(t, iface);
668 int usb_serial_probe(struct usb_interface *interface,
669 const struct usb_device_id *id)
671 struct usb_device *dev = interface_to_usbdev (interface);
672 struct usb_serial *serial = NULL;
673 struct usb_serial_port *port;
674 struct usb_host_interface *iface_desc;
675 struct usb_endpoint_descriptor *endpoint;
676 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
677 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
678 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
679 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
680 struct usb_serial_driver *type = NULL;
685 int num_interrupt_in = 0;
686 int num_interrupt_out = 0;
688 int num_bulk_out = 0;
692 lock_kernel(); /* guard against unloading a serial driver module */
693 type = search_serial_device(interface);
700 serial = create_serial (dev, interface, type);
703 dev_err(&interface->dev, "%s - out of memory\n", __FUNCTION__);
707 /* if this device type has a probe function, call it */
709 const struct usb_device_id *id;
711 if (!try_module_get(type->driver.owner)) {
713 dev_err(&interface->dev, "module get failed, exiting\n");
718 id = get_iface_id(type, interface);
719 retval = type->probe(serial, id);
720 module_put(type->driver.owner);
724 dbg ("sub driver rejected device");
730 /* descriptor matches, let's find the endpoints needed */
731 /* check out the endpoints */
732 iface_desc = interface->cur_altsetting;
733 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
734 endpoint = &iface_desc->endpoint[i].desc;
736 if (usb_endpoint_is_bulk_in(endpoint)) {
737 /* we found a bulk in endpoint */
738 dbg("found bulk in on endpoint %d", i);
739 bulk_in_endpoint[num_bulk_in] = endpoint;
743 if (usb_endpoint_is_bulk_out(endpoint)) {
744 /* we found a bulk out endpoint */
745 dbg("found bulk out on endpoint %d", i);
746 bulk_out_endpoint[num_bulk_out] = endpoint;
750 if (usb_endpoint_is_int_in(endpoint)) {
751 /* we found a interrupt in endpoint */
752 dbg("found interrupt in on endpoint %d", i);
753 interrupt_in_endpoint[num_interrupt_in] = endpoint;
757 if (usb_endpoint_is_int_out(endpoint)) {
758 /* we found an interrupt out endpoint */
759 dbg("found interrupt out on endpoint %d", i);
760 interrupt_out_endpoint[num_interrupt_out] = endpoint;
765 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
766 /* BEGIN HORRIBLE HACK FOR PL2303 */
767 /* this is needed due to the looney way its endpoints are set up */
768 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
769 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
770 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
771 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
772 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
773 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID))) {
774 if (interface != dev->actconfig->interface[0]) {
775 /* check out the endpoints of the other interface*/
776 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
777 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
778 endpoint = &iface_desc->endpoint[i].desc;
779 if (usb_endpoint_is_int_in(endpoint)) {
780 /* we found a interrupt in endpoint */
781 dbg("found interrupt in for Prolific device on separate interface");
782 interrupt_in_endpoint[num_interrupt_in] = endpoint;
788 /* Now make sure the PL-2303 is configured correctly.
789 * If not, give up now and hope this hack will work
790 * properly during a later invocation of usb_serial_probe
792 if (num_bulk_in == 0 || num_bulk_out == 0) {
794 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
799 /* END HORRIBLE HACK FOR PL2303 */
802 /* found all that we need */
803 dev_info(&interface->dev, "%s converter detected\n", type->description);
805 #ifdef CONFIG_USB_SERIAL_GENERIC
806 if (type == &usb_serial_generic_device) {
807 num_ports = num_bulk_out;
808 if (num_ports == 0) {
810 dev_err(&interface->dev, "Generic device with no bulk out, not allowed.\n");
817 /* if this device type has a calc_num_ports function, call it */
818 if (type->calc_num_ports) {
819 if (!try_module_get(type->driver.owner)) {
821 dev_err(&interface->dev, "module get failed, exiting\n");
825 num_ports = type->calc_num_ports (serial);
826 module_put(type->driver.owner);
829 num_ports = type->num_ports;
832 serial->num_ports = num_ports;
833 serial->num_bulk_in = num_bulk_in;
834 serial->num_bulk_out = num_bulk_out;
835 serial->num_interrupt_in = num_interrupt_in;
836 serial->num_interrupt_out = num_interrupt_out;
838 /* create our ports, we need as many as the max endpoints */
839 /* we don't use num_ports here cauz some devices have more endpoint pairs than ports */
840 max_endpoints = max(num_bulk_in, num_bulk_out);
841 max_endpoints = max(max_endpoints, num_interrupt_in);
842 max_endpoints = max(max_endpoints, num_interrupt_out);
843 max_endpoints = max(max_endpoints, (int)serial->num_ports);
844 serial->num_port_pointers = max_endpoints;
847 dbg("%s - setting up %d port structures for this device", __FUNCTION__, max_endpoints);
848 for (i = 0; i < max_endpoints; ++i) {
849 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
852 port->serial = serial;
853 spin_lock_init(&port->lock);
854 mutex_init(&port->mutex);
855 INIT_WORK(&port->work, usb_serial_port_work);
856 serial->port[i] = port;
859 /* set up the endpoint information */
860 for (i = 0; i < num_bulk_in; ++i) {
861 endpoint = bulk_in_endpoint[i];
862 port = serial->port[i];
863 port->read_urb = usb_alloc_urb (0, GFP_KERNEL);
864 if (!port->read_urb) {
865 dev_err(&interface->dev, "No free urbs available\n");
868 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
869 port->bulk_in_size = buffer_size;
870 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
871 port->bulk_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
872 if (!port->bulk_in_buffer) {
873 dev_err(&interface->dev, "Couldn't allocate bulk_in_buffer\n");
876 usb_fill_bulk_urb (port->read_urb, dev,
877 usb_rcvbulkpipe (dev,
878 endpoint->bEndpointAddress),
879 port->bulk_in_buffer, buffer_size,
880 serial->type->read_bulk_callback,
884 for (i = 0; i < num_bulk_out; ++i) {
885 endpoint = bulk_out_endpoint[i];
886 port = serial->port[i];
887 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
888 if (!port->write_urb) {
889 dev_err(&interface->dev, "No free urbs available\n");
892 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
893 port->bulk_out_size = buffer_size;
894 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
895 port->bulk_out_buffer = kmalloc (buffer_size, GFP_KERNEL);
896 if (!port->bulk_out_buffer) {
897 dev_err(&interface->dev, "Couldn't allocate bulk_out_buffer\n");
900 usb_fill_bulk_urb (port->write_urb, dev,
901 usb_sndbulkpipe (dev,
902 endpoint->bEndpointAddress),
903 port->bulk_out_buffer, buffer_size,
904 serial->type->write_bulk_callback,
908 if (serial->type->read_int_callback) {
909 for (i = 0; i < num_interrupt_in; ++i) {
910 endpoint = interrupt_in_endpoint[i];
911 port = serial->port[i];
912 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
913 if (!port->interrupt_in_urb) {
914 dev_err(&interface->dev, "No free urbs available\n");
917 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
918 port->interrupt_in_endpointAddress = endpoint->bEndpointAddress;
919 port->interrupt_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
920 if (!port->interrupt_in_buffer) {
921 dev_err(&interface->dev, "Couldn't allocate interrupt_in_buffer\n");
924 usb_fill_int_urb (port->interrupt_in_urb, dev,
926 endpoint->bEndpointAddress),
927 port->interrupt_in_buffer, buffer_size,
928 serial->type->read_int_callback, port,
929 endpoint->bInterval);
931 } else if (num_interrupt_in) {
932 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
935 if (serial->type->write_int_callback) {
936 for (i = 0; i < num_interrupt_out; ++i) {
937 endpoint = interrupt_out_endpoint[i];
938 port = serial->port[i];
939 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
940 if (!port->interrupt_out_urb) {
941 dev_err(&interface->dev, "No free urbs available\n");
944 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
945 port->interrupt_out_size = buffer_size;
946 port->interrupt_out_endpointAddress = endpoint->bEndpointAddress;
947 port->interrupt_out_buffer = kmalloc (buffer_size, GFP_KERNEL);
948 if (!port->interrupt_out_buffer) {
949 dev_err(&interface->dev, "Couldn't allocate interrupt_out_buffer\n");
952 usb_fill_int_urb (port->interrupt_out_urb, dev,
954 endpoint->bEndpointAddress),
955 port->interrupt_out_buffer, buffer_size,
956 serial->type->write_int_callback, port,
957 endpoint->bInterval);
959 } else if (num_interrupt_out) {
960 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
963 /* if this device type has an attach function, call it */
965 if (!try_module_get(type->driver.owner)) {
966 dev_err(&interface->dev, "module get failed, exiting\n");
969 retval = type->attach (serial);
970 module_put(type->driver.owner);
974 /* quietly accept this device, but don't bind to a serial port
975 * as it's about to disappear */
980 if (get_free_serial (serial, num_ports, &minor) == NULL) {
981 dev_err(&interface->dev, "No more free serial devices\n");
984 serial->minor = minor;
986 /* register all of the individual ports with the driver core */
987 for (i = 0; i < num_ports; ++i) {
988 port = serial->port[i];
989 port->dev.parent = &interface->dev;
990 port->dev.driver = NULL;
991 port->dev.bus = &usb_serial_bus_type;
992 port->dev.release = &port_release;
994 snprintf (&port->dev.bus_id[0], sizeof(port->dev.bus_id), "ttyUSB%d", port->number);
995 dbg ("%s - registering %s", __FUNCTION__, port->dev.bus_id);
996 retval = device_register(&port->dev);
998 dev_err(&port->dev, "Error registering port device, "
1002 usb_serial_console_init (debug, minor);
1006 usb_set_intfdata (interface, serial);
1010 for (i = 0; i < num_bulk_in; ++i) {
1011 port = serial->port[i];
1014 usb_free_urb(port->read_urb);
1015 kfree(port->bulk_in_buffer);
1017 for (i = 0; i < num_bulk_out; ++i) {
1018 port = serial->port[i];
1021 usb_free_urb(port->write_urb);
1022 kfree(port->bulk_out_buffer);
1024 for (i = 0; i < num_interrupt_in; ++i) {
1025 port = serial->port[i];
1028 usb_free_urb(port->interrupt_in_urb);
1029 kfree(port->interrupt_in_buffer);
1031 for (i = 0; i < num_interrupt_out; ++i) {
1032 port = serial->port[i];
1035 usb_free_urb(port->interrupt_out_urb);
1036 kfree(port->interrupt_out_buffer);
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");