tty: usb-serial krefs
[linux-2.6/mini2440.git] / drivers / usb / serial / usb-serial.c
blobe7d4246027b23763e2b5ad86215a20029a10d8ed
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/tty.h>
25 #include <linux/tty_driver.h>
26 #include <linux/tty_flip.h>
27 #include <linux/module.h>
28 #include <linux/moduleparam.h>
29 #include <linux/spinlock.h>
30 #include <linux/mutex.h>
31 #include <linux/list.h>
32 #include <linux/uaccess.h>
33 #include <linux/usb.h>
34 #include <linux/usb/serial.h>
35 #include "pl2303.h"
38 * Version Information
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 = {
47 .name = "usbserial",
48 .probe = usb_serial_probe,
49 .disconnect = usb_serial_disconnect,
50 .suspend = usb_serial_suspend,
51 .resume = usb_serial_resume,
52 .no_dynamic_id = 1,
55 /* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
56 the MODULE_DEVICE_TABLE declarations in each serial driver
57 cause the "hotplug" program to pull in whatever module is necessary
58 via modprobe, and modprobe will load usbserial because the serial
59 drivers depend on it.
62 static int debug;
63 /* initially all NULL */
64 static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
65 static DEFINE_MUTEX(table_lock);
66 static LIST_HEAD(usb_serial_driver_list);
68 struct usb_serial *usb_serial_get_by_index(unsigned index)
70 struct usb_serial *serial;
72 mutex_lock(&table_lock);
73 serial = serial_table[index];
75 if (serial)
76 kref_get(&serial->kref);
77 mutex_unlock(&table_lock);
78 return serial;
81 static struct usb_serial *get_free_serial(struct usb_serial *serial,
82 int num_ports, unsigned int *minor)
84 unsigned int i, j;
85 int good_spot;
87 dbg("%s %d", __func__, num_ports);
89 *minor = 0;
90 mutex_lock(&table_lock);
91 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
92 if (serial_table[i])
93 continue;
95 good_spot = 1;
96 for (j = 1; j <= num_ports-1; ++j)
97 if ((i+j >= SERIAL_TTY_MINORS) || (serial_table[i+j])) {
98 good_spot = 0;
99 i += j;
100 break;
102 if (good_spot == 0)
103 continue;
105 *minor = i;
106 j = 0;
107 dbg("%s - minor base = %d", __func__, *minor);
108 for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i) {
109 serial_table[i] = serial;
110 serial->port[j++]->number = i;
112 mutex_unlock(&table_lock);
113 return serial;
115 mutex_unlock(&table_lock);
116 return NULL;
119 static void return_serial(struct usb_serial *serial)
121 int i;
123 dbg("%s", __func__);
125 for (i = 0; i < serial->num_ports; ++i)
126 serial_table[serial->minor + i] = NULL;
129 static void destroy_serial(struct kref *kref)
131 struct usb_serial *serial;
132 struct usb_serial_port *port;
133 int i;
135 serial = to_usb_serial(kref);
137 dbg("%s - %s", __func__, serial->type->description);
139 serial->type->shutdown(serial);
141 /* return the minor range that this device had */
142 if (serial->minor != SERIAL_TTY_NO_MINOR)
143 return_serial(serial);
145 for (i = 0; i < serial->num_ports; ++i)
146 serial->port[i]->port.count = 0;
148 /* the ports are cleaned up and released in port_release() */
149 for (i = 0; i < serial->num_ports; ++i)
150 if (serial->port[i]->dev.parent != NULL) {
151 device_unregister(&serial->port[i]->dev);
152 serial->port[i] = NULL;
155 /* If this is a "fake" port, we have to clean it up here, as it will
156 * not get cleaned up in port_release() as it was never registered with
157 * the driver core */
158 if (serial->num_ports < serial->num_port_pointers) {
159 for (i = serial->num_ports;
160 i < serial->num_port_pointers; ++i) {
161 port = serial->port[i];
162 if (!port)
163 continue;
164 port_free(port);
168 usb_put_dev(serial->dev);
170 /* free up any memory that we allocated */
171 kfree(serial);
174 void usb_serial_put(struct usb_serial *serial)
176 mutex_lock(&table_lock);
177 kref_put(&serial->kref, destroy_serial);
178 mutex_unlock(&table_lock);
181 /*****************************************************************************
182 * Driver tty interface functions
183 *****************************************************************************/
184 static int serial_open (struct tty_struct *tty, struct file *filp)
186 struct usb_serial *serial;
187 struct usb_serial_port *port;
188 unsigned int portNumber;
189 int retval;
191 dbg("%s", __func__);
193 /* get the serial object associated with this tty pointer */
194 serial = usb_serial_get_by_index(tty->index);
195 if (!serial) {
196 tty->driver_data = NULL;
197 return -ENODEV;
200 portNumber = tty->index - serial->minor;
201 port = serial->port[portNumber];
202 if (!port) {
203 retval = -ENODEV;
204 goto bailout_kref_put;
207 if (mutex_lock_interruptible(&port->mutex)) {
208 retval = -ERESTARTSYS;
209 goto bailout_kref_put;
212 ++port->port.count;
214 /* set up our port structure making the tty driver
215 * remember our port object, and us it */
216 tty->driver_data = port;
217 tty_port_tty_set(&port->port, tty);
219 if (port->port.count == 1) {
221 /* lock this module before we call it
222 * this may fail, which means we must bail out,
223 * safe because we are called with BKL held */
224 if (!try_module_get(serial->type->driver.owner)) {
225 retval = -ENODEV;
226 goto bailout_mutex_unlock;
229 retval = usb_autopm_get_interface(serial->interface);
230 if (retval)
231 goto bailout_module_put;
232 /* only call the device specific open if this
233 * is the first time the port is opened */
234 retval = serial->type->open(tty, port, filp);
235 if (retval)
236 goto bailout_interface_put;
239 mutex_unlock(&port->mutex);
240 return 0;
242 bailout_interface_put:
243 usb_autopm_put_interface(serial->interface);
244 bailout_module_put:
245 module_put(serial->type->driver.owner);
246 bailout_mutex_unlock:
247 port->port.count = 0;
248 tty->driver_data = NULL;
249 tty_port_tty_set(&port->port, NULL);
250 mutex_unlock(&port->mutex);
251 bailout_kref_put:
252 usb_serial_put(serial);
253 return retval;
256 static void serial_close(struct tty_struct *tty, struct file *filp)
258 struct usb_serial_port *port = tty->driver_data;
260 if (!port)
261 return;
263 dbg("%s - port %d", __func__, port->number);
265 mutex_lock(&port->mutex);
267 if (port->port.count == 0) {
268 mutex_unlock(&port->mutex);
269 return;
272 --port->port.count;
273 if (port->port.count == 0)
274 /* only call the device specific close if this
275 * port is being closed by the last owner */
276 port->serial->type->close(tty, port, filp);
278 if (port->port.count == (port->console? 1 : 0)) {
279 struct tty_struct *tty = tty_port_tty_get(&port->port);
280 if (tty) {
281 if (tty->driver_data)
282 tty->driver_data = NULL;
283 tty_port_tty_set(&port->port, NULL);
287 if (port->port.count == 0) {
288 mutex_lock(&port->serial->disc_mutex);
289 if (!port->serial->disconnected)
290 usb_autopm_put_interface(port->serial->interface);
291 mutex_unlock(&port->serial->disc_mutex);
292 module_put(port->serial->type->driver.owner);
295 mutex_unlock(&port->mutex);
296 usb_serial_put(port->serial);
299 static int serial_write(struct tty_struct *tty, const unsigned char *buf,
300 int count)
302 struct usb_serial_port *port = tty->driver_data;
303 int retval = -ENODEV;
305 if (port->serial->dev->state == USB_STATE_NOTATTACHED)
306 goto exit;
308 dbg("%s - port %d, %d byte(s)", __func__, port->number, count);
310 /* count is managed under the mutex lock for the tty so cannot
311 drop to zero until after the last close completes */
312 WARN_ON(!port->port.count);
314 /* pass on to the driver specific version of this function */
315 retval = port->serial->type->write(tty, port, buf, count);
317 exit:
318 return retval;
321 static int serial_write_room(struct tty_struct *tty)
323 struct usb_serial_port *port = tty->driver_data;
324 dbg("%s - port %d", __func__, port->number);
325 WARN_ON(!port->port.count);
326 /* pass on to the driver specific version of this function */
327 return port->serial->type->write_room(tty);
330 static int serial_chars_in_buffer(struct tty_struct *tty)
332 struct usb_serial_port *port = tty->driver_data;
333 dbg("%s = port %d", __func__, port->number);
335 WARN_ON(!port->port.count);
336 /* pass on to the driver specific version of this function */
337 return port->serial->type->chars_in_buffer(tty);
340 static void serial_throttle(struct tty_struct *tty)
342 struct usb_serial_port *port = tty->driver_data;
343 dbg("%s - port %d", __func__, port->number);
345 WARN_ON(!port->port.count);
346 /* pass on to the driver specific version of this function */
347 if (port->serial->type->throttle)
348 port->serial->type->throttle(tty);
351 static void serial_unthrottle(struct tty_struct *tty)
353 struct usb_serial_port *port = tty->driver_data;
354 dbg("%s - port %d", __func__, port->number);
356 WARN_ON(!port->port.count);
357 /* pass on to the driver specific version of this function */
358 if (port->serial->type->unthrottle)
359 port->serial->type->unthrottle(tty);
362 static int serial_ioctl(struct tty_struct *tty, struct file *file,
363 unsigned int cmd, unsigned long arg)
365 struct usb_serial_port *port = tty->driver_data;
366 int retval = -ENODEV;
368 dbg("%s - port %d, cmd 0x%.4x", __func__, port->number, cmd);
370 WARN_ON(!port->port.count);
372 /* pass on to the driver specific version of this function
373 if it is available */
374 if (port->serial->type->ioctl) {
375 lock_kernel();
376 retval = port->serial->type->ioctl(tty, file, cmd, arg);
377 unlock_kernel();
378 } else
379 retval = -ENOIOCTLCMD;
380 return retval;
383 static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
385 struct usb_serial_port *port = tty->driver_data;
386 dbg("%s - port %d", __func__, port->number);
388 WARN_ON(!port->port.count);
389 /* pass on to the driver specific version of this function
390 if it is available */
391 if (port->serial->type->set_termios)
392 port->serial->type->set_termios(tty, port, old);
393 else
394 tty_termios_copy_hw(tty->termios, old);
397 static int serial_break(struct tty_struct *tty, int break_state)
399 struct usb_serial_port *port = tty->driver_data;
401 dbg("%s - port %d", __func__, port->number);
403 WARN_ON(!port->port.count);
404 /* pass on to the driver specific version of this function
405 if it is available */
406 if (port->serial->type->break_ctl) {
407 lock_kernel();
408 port->serial->type->break_ctl(tty, break_state);
409 unlock_kernel();
411 return 0;
414 static int serial_read_proc(char *page, char **start, off_t off, int count,
415 int *eof, void *data)
417 struct usb_serial *serial;
418 int length = 0;
419 int i;
420 off_t begin = 0;
421 char tmp[40];
423 dbg("%s", __func__);
424 length += sprintf(page, "usbserinfo:1.0 driver:2.0\n");
425 for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) {
426 serial = usb_serial_get_by_index(i);
427 if (serial == NULL)
428 continue;
430 length += sprintf(page+length, "%d:", i);
431 if (serial->type->driver.owner)
432 length += sprintf(page+length, " module:%s",
433 module_name(serial->type->driver.owner));
434 length += sprintf(page+length, " name:\"%s\"",
435 serial->type->description);
436 length += sprintf(page+length, " vendor:%04x product:%04x",
437 le16_to_cpu(serial->dev->descriptor.idVendor),
438 le16_to_cpu(serial->dev->descriptor.idProduct));
439 length += sprintf(page+length, " num_ports:%d",
440 serial->num_ports);
441 length += sprintf(page+length, " port:%d",
442 i - serial->minor + 1);
443 usb_make_path(serial->dev, tmp, sizeof(tmp));
444 length += sprintf(page+length, " path:%s", tmp);
446 length += sprintf(page+length, "\n");
447 if ((length + begin) > (off + count)) {
448 usb_serial_put(serial);
449 goto done;
451 if ((length + begin) < off) {
452 begin += length;
453 length = 0;
455 usb_serial_put(serial);
457 *eof = 1;
458 done:
459 if (off >= (length + begin))
460 return 0;
461 *start = page + (off-begin);
462 return (count < begin+length-off) ? count : begin+length-off;
465 static int serial_tiocmget(struct tty_struct *tty, struct file *file)
467 struct usb_serial_port *port = tty->driver_data;
469 dbg("%s - port %d", __func__, port->number);
471 WARN_ON(!port->port.count);
472 if (port->serial->type->tiocmget)
473 return port->serial->type->tiocmget(tty, file);
474 return -EINVAL;
477 static int serial_tiocmset(struct tty_struct *tty, struct file *file,
478 unsigned int set, unsigned int clear)
480 struct usb_serial_port *port = tty->driver_data;
482 dbg("%s - port %d", __func__, port->number);
484 WARN_ON(!port->port.count);
485 if (port->serial->type->tiocmset)
486 return port->serial->type->tiocmset(tty, file, set, clear);
487 return -EINVAL;
491 * We would be calling tty_wakeup here, but unfortunately some line
492 * disciplines have an annoying habit of calling tty->write from
493 * the write wakeup callback (e.g. n_hdlc.c).
495 void usb_serial_port_softint(struct usb_serial_port *port)
497 schedule_work(&port->work);
499 EXPORT_SYMBOL_GPL(usb_serial_port_softint);
501 static void usb_serial_port_work(struct work_struct *work)
503 struct usb_serial_port *port =
504 container_of(work, struct usb_serial_port, work);
505 struct tty_struct *tty;
507 dbg("%s - port %d", __func__, port->number);
509 if (!port)
510 return;
512 tty = tty_port_tty_get(&port->port);
513 if (!tty)
514 return;
516 tty_wakeup(tty);
517 tty_kref_put(tty);
520 static void port_release(struct device *dev)
522 struct usb_serial_port *port = to_usb_serial_port(dev);
524 dbg ("%s - %s", __func__, dev_name(dev));
525 port_free(port);
528 static void kill_traffic(struct usb_serial_port *port)
530 usb_kill_urb(port->read_urb);
531 usb_kill_urb(port->write_urb);
533 * This is tricky.
534 * Some drivers submit the read_urb in the
535 * handler for the write_urb or vice versa
536 * this order determines the order in which
537 * usb_kill_urb() must be used to reliably
538 * kill the URBs. As it is unknown here,
539 * both orders must be used in turn.
540 * The call below is not redundant.
542 usb_kill_urb(port->read_urb);
543 usb_kill_urb(port->interrupt_in_urb);
544 usb_kill_urb(port->interrupt_out_urb);
547 static void port_free(struct usb_serial_port *port)
549 kill_traffic(port);
550 usb_free_urb(port->read_urb);
551 usb_free_urb(port->write_urb);
552 usb_free_urb(port->interrupt_in_urb);
553 usb_free_urb(port->interrupt_out_urb);
554 kfree(port->bulk_in_buffer);
555 kfree(port->bulk_out_buffer);
556 kfree(port->interrupt_in_buffer);
557 kfree(port->interrupt_out_buffer);
558 flush_scheduled_work(); /* port->work */
559 kfree(port);
562 static struct usb_serial *create_serial(struct usb_device *dev,
563 struct usb_interface *interface,
564 struct usb_serial_driver *driver)
566 struct usb_serial *serial;
568 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
569 if (!serial) {
570 dev_err(&dev->dev, "%s - out of memory\n", __func__);
571 return NULL;
573 serial->dev = usb_get_dev(dev);
574 serial->type = driver;
575 serial->interface = interface;
576 kref_init(&serial->kref);
577 mutex_init(&serial->disc_mutex);
578 serial->minor = SERIAL_TTY_NO_MINOR;
580 return serial;
583 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
584 struct usb_serial_driver *drv)
586 struct usb_dynid *dynid;
588 spin_lock(&drv->dynids.lock);
589 list_for_each_entry(dynid, &drv->dynids.list, node) {
590 if (usb_match_one_id(intf, &dynid->id)) {
591 spin_unlock(&drv->dynids.lock);
592 return &dynid->id;
595 spin_unlock(&drv->dynids.lock);
596 return NULL;
599 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
600 struct usb_interface *intf)
602 const struct usb_device_id *id;
604 id = usb_match_id(intf, drv->id_table);
605 if (id) {
606 dbg("static descriptor matches");
607 goto exit;
609 id = match_dynamic_id(intf, drv);
610 if (id)
611 dbg("dynamic descriptor matches");
612 exit:
613 return id;
616 static struct usb_serial_driver *search_serial_device(
617 struct usb_interface *iface)
619 const struct usb_device_id *id;
620 struct usb_serial_driver *drv;
622 /* Check if the usb id matches a known device */
623 list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
624 id = get_iface_id(drv, iface);
625 if (id)
626 return drv;
629 return NULL;
632 int usb_serial_probe(struct usb_interface *interface,
633 const struct usb_device_id *id)
635 struct usb_device *dev = interface_to_usbdev(interface);
636 struct usb_serial *serial = NULL;
637 struct usb_serial_port *port;
638 struct usb_host_interface *iface_desc;
639 struct usb_endpoint_descriptor *endpoint;
640 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
641 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
642 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
643 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
644 struct usb_serial_driver *type = NULL;
645 int retval;
646 unsigned int minor;
647 int buffer_size;
648 int i;
649 int num_interrupt_in = 0;
650 int num_interrupt_out = 0;
651 int num_bulk_in = 0;
652 int num_bulk_out = 0;
653 int num_ports = 0;
654 int max_endpoints;
656 lock_kernel(); /* guard against unloading a serial driver module */
657 type = search_serial_device(interface);
658 if (!type) {
659 unlock_kernel();
660 dbg("none matched");
661 return -ENODEV;
664 serial = create_serial(dev, interface, type);
665 if (!serial) {
666 unlock_kernel();
667 dev_err(&interface->dev, "%s - out of memory\n", __func__);
668 return -ENOMEM;
671 /* if this device type has a probe function, call it */
672 if (type->probe) {
673 const struct usb_device_id *id;
675 if (!try_module_get(type->driver.owner)) {
676 unlock_kernel();
677 dev_err(&interface->dev,
678 "module get failed, exiting\n");
679 kfree(serial);
680 return -EIO;
683 id = get_iface_id(type, interface);
684 retval = type->probe(serial, id);
685 module_put(type->driver.owner);
687 if (retval) {
688 unlock_kernel();
689 dbg("sub driver rejected device");
690 kfree(serial);
691 return retval;
695 /* descriptor matches, let's find the endpoints needed */
696 /* check out the endpoints */
697 iface_desc = interface->cur_altsetting;
698 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
699 endpoint = &iface_desc->endpoint[i].desc;
701 if (usb_endpoint_is_bulk_in(endpoint)) {
702 /* we found a bulk in endpoint */
703 dbg("found bulk in on endpoint %d", i);
704 bulk_in_endpoint[num_bulk_in] = endpoint;
705 ++num_bulk_in;
708 if (usb_endpoint_is_bulk_out(endpoint)) {
709 /* we found a bulk out endpoint */
710 dbg("found bulk out on endpoint %d", i);
711 bulk_out_endpoint[num_bulk_out] = endpoint;
712 ++num_bulk_out;
715 if (usb_endpoint_is_int_in(endpoint)) {
716 /* we found a interrupt in endpoint */
717 dbg("found interrupt in on endpoint %d", i);
718 interrupt_in_endpoint[num_interrupt_in] = endpoint;
719 ++num_interrupt_in;
722 if (usb_endpoint_is_int_out(endpoint)) {
723 /* we found an interrupt out endpoint */
724 dbg("found interrupt out on endpoint %d", i);
725 interrupt_out_endpoint[num_interrupt_out] = endpoint;
726 ++num_interrupt_out;
730 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
731 /* BEGIN HORRIBLE HACK FOR PL2303 */
732 /* this is needed due to the looney way its endpoints are set up */
733 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
734 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
735 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
736 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
737 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
738 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
739 ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
740 (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
741 if (interface != dev->actconfig->interface[0]) {
742 /* check out the endpoints of the other interface*/
743 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
744 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
745 endpoint = &iface_desc->endpoint[i].desc;
746 if (usb_endpoint_is_int_in(endpoint)) {
747 /* we found a interrupt in endpoint */
748 dbg("found interrupt in for Prolific device on separate interface");
749 interrupt_in_endpoint[num_interrupt_in] = endpoint;
750 ++num_interrupt_in;
755 /* Now make sure the PL-2303 is configured correctly.
756 * If not, give up now and hope this hack will work
757 * properly during a later invocation of usb_serial_probe
759 if (num_bulk_in == 0 || num_bulk_out == 0) {
760 unlock_kernel();
761 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
762 kfree(serial);
763 return -ENODEV;
766 /* END HORRIBLE HACK FOR PL2303 */
767 #endif
769 #ifdef CONFIG_USB_SERIAL_GENERIC
770 if (type == &usb_serial_generic_device) {
771 num_ports = num_bulk_out;
772 if (num_ports == 0) {
773 unlock_kernel();
774 dev_err(&interface->dev,
775 "Generic device with no bulk out, not allowed.\n");
776 kfree(serial);
777 return -EIO;
780 #endif
781 if (!num_ports) {
782 /* if this device type has a calc_num_ports function, call it */
783 if (type->calc_num_ports) {
784 if (!try_module_get(type->driver.owner)) {
785 unlock_kernel();
786 dev_err(&interface->dev,
787 "module get failed, exiting\n");
788 kfree(serial);
789 return -EIO;
791 num_ports = type->calc_num_ports(serial);
792 module_put(type->driver.owner);
794 if (!num_ports)
795 num_ports = type->num_ports;
798 serial->num_ports = num_ports;
799 serial->num_bulk_in = num_bulk_in;
800 serial->num_bulk_out = num_bulk_out;
801 serial->num_interrupt_in = num_interrupt_in;
802 serial->num_interrupt_out = num_interrupt_out;
804 /* found all that we need */
805 dev_info(&interface->dev, "%s converter detected\n",
806 type->description);
808 /* create our ports, we need as many as the max endpoints */
809 /* we don't use num_ports here because some devices have more
810 endpoint pairs than ports */
811 max_endpoints = max(num_bulk_in, num_bulk_out);
812 max_endpoints = max(max_endpoints, num_interrupt_in);
813 max_endpoints = max(max_endpoints, num_interrupt_out);
814 max_endpoints = max(max_endpoints, (int)serial->num_ports);
815 serial->num_port_pointers = max_endpoints;
816 unlock_kernel();
818 dbg("%s - setting up %d port structures for this device",
819 __func__, max_endpoints);
820 for (i = 0; i < max_endpoints; ++i) {
821 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
822 if (!port)
823 goto probe_error;
824 tty_port_init(&port->port);
825 port->serial = serial;
826 spin_lock_init(&port->lock);
827 mutex_init(&port->mutex);
828 INIT_WORK(&port->work, usb_serial_port_work);
829 serial->port[i] = port;
832 /* set up the endpoint information */
833 for (i = 0; i < num_bulk_in; ++i) {
834 endpoint = bulk_in_endpoint[i];
835 port = serial->port[i];
836 port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
837 if (!port->read_urb) {
838 dev_err(&interface->dev, "No free urbs available\n");
839 goto probe_error;
841 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
842 port->bulk_in_size = buffer_size;
843 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
844 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
845 if (!port->bulk_in_buffer) {
846 dev_err(&interface->dev,
847 "Couldn't allocate bulk_in_buffer\n");
848 goto probe_error;
850 usb_fill_bulk_urb(port->read_urb, dev,
851 usb_rcvbulkpipe(dev,
852 endpoint->bEndpointAddress),
853 port->bulk_in_buffer, buffer_size,
854 serial->type->read_bulk_callback, port);
857 for (i = 0; i < num_bulk_out; ++i) {
858 endpoint = bulk_out_endpoint[i];
859 port = serial->port[i];
860 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
861 if (!port->write_urb) {
862 dev_err(&interface->dev, "No free urbs available\n");
863 goto probe_error;
865 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
866 port->bulk_out_size = buffer_size;
867 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
868 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
869 if (!port->bulk_out_buffer) {
870 dev_err(&interface->dev,
871 "Couldn't allocate bulk_out_buffer\n");
872 goto probe_error;
874 usb_fill_bulk_urb(port->write_urb, dev,
875 usb_sndbulkpipe(dev,
876 endpoint->bEndpointAddress),
877 port->bulk_out_buffer, buffer_size,
878 serial->type->write_bulk_callback, port);
881 if (serial->type->read_int_callback) {
882 for (i = 0; i < num_interrupt_in; ++i) {
883 endpoint = interrupt_in_endpoint[i];
884 port = serial->port[i];
885 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
886 if (!port->interrupt_in_urb) {
887 dev_err(&interface->dev,
888 "No free urbs available\n");
889 goto probe_error;
891 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
892 port->interrupt_in_endpointAddress =
893 endpoint->bEndpointAddress;
894 port->interrupt_in_buffer = kmalloc(buffer_size,
895 GFP_KERNEL);
896 if (!port->interrupt_in_buffer) {
897 dev_err(&interface->dev,
898 "Couldn't allocate interrupt_in_buffer\n");
899 goto probe_error;
901 usb_fill_int_urb(port->interrupt_in_urb, dev,
902 usb_rcvintpipe(dev,
903 endpoint->bEndpointAddress),
904 port->interrupt_in_buffer, buffer_size,
905 serial->type->read_int_callback, port,
906 endpoint->bInterval);
908 } else if (num_interrupt_in) {
909 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
912 if (serial->type->write_int_callback) {
913 for (i = 0; i < num_interrupt_out; ++i) {
914 endpoint = interrupt_out_endpoint[i];
915 port = serial->port[i];
916 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
917 if (!port->interrupt_out_urb) {
918 dev_err(&interface->dev,
919 "No free urbs available\n");
920 goto probe_error;
922 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
923 port->interrupt_out_size = buffer_size;
924 port->interrupt_out_endpointAddress =
925 endpoint->bEndpointAddress;
926 port->interrupt_out_buffer = kmalloc(buffer_size,
927 GFP_KERNEL);
928 if (!port->interrupt_out_buffer) {
929 dev_err(&interface->dev,
930 "Couldn't allocate interrupt_out_buffer\n");
931 goto probe_error;
933 usb_fill_int_urb(port->interrupt_out_urb, dev,
934 usb_sndintpipe(dev,
935 endpoint->bEndpointAddress),
936 port->interrupt_out_buffer, buffer_size,
937 serial->type->write_int_callback, port,
938 endpoint->bInterval);
940 } else if (num_interrupt_out) {
941 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
944 /* if this device type has an attach function, call it */
945 if (type->attach) {
946 if (!try_module_get(type->driver.owner)) {
947 dev_err(&interface->dev,
948 "module get failed, exiting\n");
949 goto probe_error;
951 retval = type->attach(serial);
952 module_put(type->driver.owner);
953 if (retval < 0)
954 goto probe_error;
955 if (retval > 0) {
956 /* quietly accept this device, but don't bind to a
957 serial port as it's about to disappear */
958 goto exit;
962 if (get_free_serial(serial, num_ports, &minor) == NULL) {
963 dev_err(&interface->dev, "No more free serial devices\n");
964 goto probe_error;
966 serial->minor = minor;
968 /* register all of the individual ports with the driver core */
969 for (i = 0; i < num_ports; ++i) {
970 port = serial->port[i];
971 port->dev.parent = &interface->dev;
972 port->dev.driver = NULL;
973 port->dev.bus = &usb_serial_bus_type;
974 port->dev.release = &port_release;
976 dev_set_name(&port->dev, "ttyUSB%d", port->number);
977 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
978 retval = device_register(&port->dev);
979 if (retval)
980 dev_err(&port->dev, "Error registering port device, "
981 "continuing\n");
984 usb_serial_console_init(debug, minor);
986 exit:
987 /* success */
988 usb_set_intfdata(interface, serial);
989 return 0;
991 probe_error:
992 for (i = 0; i < num_bulk_in; ++i) {
993 port = serial->port[i];
994 if (!port)
995 continue;
996 usb_free_urb(port->read_urb);
997 kfree(port->bulk_in_buffer);
999 for (i = 0; i < num_bulk_out; ++i) {
1000 port = serial->port[i];
1001 if (!port)
1002 continue;
1003 usb_free_urb(port->write_urb);
1004 kfree(port->bulk_out_buffer);
1006 for (i = 0; i < num_interrupt_in; ++i) {
1007 port = serial->port[i];
1008 if (!port)
1009 continue;
1010 usb_free_urb(port->interrupt_in_urb);
1011 kfree(port->interrupt_in_buffer);
1013 for (i = 0; i < num_interrupt_out; ++i) {
1014 port = serial->port[i];
1015 if (!port)
1016 continue;
1017 usb_free_urb(port->interrupt_out_urb);
1018 kfree(port->interrupt_out_buffer);
1021 /* free up any memory that we allocated */
1022 for (i = 0; i < serial->num_port_pointers; ++i)
1023 kfree(serial->port[i]);
1024 kfree(serial);
1025 return -EIO;
1027 EXPORT_SYMBOL_GPL(usb_serial_probe);
1029 void usb_serial_disconnect(struct usb_interface *interface)
1031 int i;
1032 struct usb_serial *serial = usb_get_intfdata(interface);
1033 struct device *dev = &interface->dev;
1034 struct usb_serial_port *port;
1036 usb_serial_console_disconnect(serial);
1037 dbg("%s", __func__);
1039 mutex_lock(&serial->disc_mutex);
1040 usb_set_intfdata(interface, NULL);
1041 /* must set a flag, to signal subdrivers */
1042 serial->disconnected = 1;
1043 for (i = 0; i < serial->num_ports; ++i) {
1044 port = serial->port[i];
1045 if (port) {
1046 struct tty_struct *tty = tty_port_tty_get(&port->port);
1047 if (tty) {
1048 tty_hangup(tty);
1049 tty_kref_put(tty);
1051 kill_traffic(port);
1054 /* let the last holder of this object
1055 * cause it to be cleaned up */
1056 mutex_unlock(&serial->disc_mutex);
1057 usb_serial_put(serial);
1058 dev_info(dev, "device disconnected\n");
1060 EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1062 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1064 struct usb_serial *serial = usb_get_intfdata(intf);
1065 struct usb_serial_port *port;
1066 int i, r = 0;
1068 for (i = 0; i < serial->num_ports; ++i) {
1069 port = serial->port[i];
1070 if (port)
1071 kill_traffic(port);
1074 if (serial->type->suspend)
1075 r = serial->type->suspend(serial, message);
1077 return r;
1079 EXPORT_SYMBOL(usb_serial_suspend);
1081 int usb_serial_resume(struct usb_interface *intf)
1083 struct usb_serial *serial = usb_get_intfdata(intf);
1085 if (serial->type->resume)
1086 return serial->type->resume(serial);
1087 return 0;
1089 EXPORT_SYMBOL(usb_serial_resume);
1091 static const struct tty_operations serial_ops = {
1092 .open = serial_open,
1093 .close = serial_close,
1094 .write = serial_write,
1095 .write_room = serial_write_room,
1096 .ioctl = serial_ioctl,
1097 .set_termios = serial_set_termios,
1098 .throttle = serial_throttle,
1099 .unthrottle = serial_unthrottle,
1100 .break_ctl = serial_break,
1101 .chars_in_buffer = serial_chars_in_buffer,
1102 .read_proc = serial_read_proc,
1103 .tiocmget = serial_tiocmget,
1104 .tiocmset = serial_tiocmset,
1107 struct tty_driver *usb_serial_tty_driver;
1109 static int __init usb_serial_init(void)
1111 int i;
1112 int result;
1114 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1115 if (!usb_serial_tty_driver)
1116 return -ENOMEM;
1118 /* Initialize our global data */
1119 for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1120 serial_table[i] = NULL;
1122 result = bus_register(&usb_serial_bus_type);
1123 if (result) {
1124 err("%s - registering bus driver failed", __func__);
1125 goto exit_bus;
1128 usb_serial_tty_driver->owner = THIS_MODULE;
1129 usb_serial_tty_driver->driver_name = "usbserial";
1130 usb_serial_tty_driver->name = "ttyUSB";
1131 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1132 usb_serial_tty_driver->minor_start = 0;
1133 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1134 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1135 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1136 TTY_DRIVER_DYNAMIC_DEV;
1137 usb_serial_tty_driver->init_termios = tty_std_termios;
1138 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1139 | HUPCL | CLOCAL;
1140 usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1141 usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1142 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1143 result = tty_register_driver(usb_serial_tty_driver);
1144 if (result) {
1145 err("%s - tty_register_driver failed", __func__);
1146 goto exit_reg_driver;
1149 /* register the USB driver */
1150 result = usb_register(&usb_serial_driver);
1151 if (result < 0) {
1152 err("%s - usb_register failed", __func__);
1153 goto exit_tty;
1156 /* register the generic driver, if we should */
1157 result = usb_serial_generic_register(debug);
1158 if (result < 0) {
1159 err("%s - registering generic driver failed", __func__);
1160 goto exit_generic;
1163 info(DRIVER_DESC);
1165 return result;
1167 exit_generic:
1168 usb_deregister(&usb_serial_driver);
1170 exit_tty:
1171 tty_unregister_driver(usb_serial_tty_driver);
1173 exit_reg_driver:
1174 bus_unregister(&usb_serial_bus_type);
1176 exit_bus:
1177 err("%s - returning with error %d", __func__, result);
1178 put_tty_driver(usb_serial_tty_driver);
1179 return result;
1183 static void __exit usb_serial_exit(void)
1185 usb_serial_console_exit();
1187 usb_serial_generic_deregister();
1189 usb_deregister(&usb_serial_driver);
1190 tty_unregister_driver(usb_serial_tty_driver);
1191 put_tty_driver(usb_serial_tty_driver);
1192 bus_unregister(&usb_serial_bus_type);
1196 module_init(usb_serial_init);
1197 module_exit(usb_serial_exit);
1199 #define set_to_generic_if_null(type, function) \
1200 do { \
1201 if (!type->function) { \
1202 type->function = usb_serial_generic_##function; \
1203 dbg("Had to override the " #function \
1204 " usb serial operation with the generic one.");\
1206 } while (0)
1208 static void fixup_generic(struct usb_serial_driver *device)
1210 set_to_generic_if_null(device, open);
1211 set_to_generic_if_null(device, write);
1212 set_to_generic_if_null(device, close);
1213 set_to_generic_if_null(device, write_room);
1214 set_to_generic_if_null(device, chars_in_buffer);
1215 set_to_generic_if_null(device, read_bulk_callback);
1216 set_to_generic_if_null(device, write_bulk_callback);
1217 set_to_generic_if_null(device, shutdown);
1218 set_to_generic_if_null(device, resume);
1221 int usb_serial_register(struct usb_serial_driver *driver)
1223 /* must be called with BKL held */
1224 int retval;
1226 fixup_generic(driver);
1228 if (!driver->description)
1229 driver->description = driver->driver.name;
1231 /* Add this device to our list of devices */
1232 list_add(&driver->driver_list, &usb_serial_driver_list);
1234 retval = usb_serial_bus_register(driver);
1235 if (retval) {
1236 err("problem %d when registering driver %s",
1237 retval, driver->description);
1238 list_del(&driver->driver_list);
1239 } else
1240 info("USB Serial support registered for %s",
1241 driver->description);
1243 return retval;
1245 EXPORT_SYMBOL_GPL(usb_serial_register);
1248 void usb_serial_deregister(struct usb_serial_driver *device)
1250 /* must be called with BKL held */
1251 info("USB Serial deregistering driver %s", device->description);
1252 list_del(&device->driver_list);
1253 usb_serial_bus_deregister(device);
1255 EXPORT_SYMBOL_GPL(usb_serial_deregister);
1257 /* Module information */
1258 MODULE_AUTHOR(DRIVER_AUTHOR);
1259 MODULE_DESCRIPTION(DRIVER_DESC);
1260 MODULE_LICENSE("GPL");
1262 module_param(debug, bool, S_IRUGO | S_IWUSR);
1263 MODULE_PARM_DESC(debug, "Debug enabled or not");