Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/*
2 * USB Serial Converter driver
3 *
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)
7 *
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.
11 *
12 * This driver was originally based on the ACM driver by Armin Fuerst (which was
13 * based on a driver by Brad Keryan)
14 *
15 * See Documentation/usb/usb-serial.txt for more information on using this
16 * driver
17 *
18 */
19
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/seq_file.h>
30#include <linux/spinlock.h>
31#include <linux/mutex.h>
32#include <linux/list.h>
33#include <linux/uaccess.h>
34#include <linux/usb.h>
35#include <linux/usb/serial.h>
36#include "pl2303.h"
37
38/*
39 * Version Information
40 */
41#define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/"
42#define DRIVER_DESC "USB Serial Driver core"
43
44static void port_free(struct usb_serial_port *port);
45
46/* Driver structure we register with the USB core */
47static struct usb_driver usb_serial_driver = {
48 .name = "usbserial",
49 .probe = usb_serial_probe,
50 .disconnect = usb_serial_disconnect,
51 .suspend = usb_serial_suspend,
52 .resume = usb_serial_resume,
53 .no_dynamic_id = 1,
54};
55
56/* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
57 the MODULE_DEVICE_TABLE declarations in each serial driver
58 cause the "hotplug" program to pull in whatever module is necessary
59 via modprobe, and modprobe will load usbserial because the serial
60 drivers depend on it.
61*/
62
63static int debug;
64/* initially all NULL */
65static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
66static DEFINE_MUTEX(table_lock);
67static LIST_HEAD(usb_serial_driver_list);
68
69struct usb_serial *usb_serial_get_by_index(unsigned index)
70{
71 struct usb_serial *serial;
72
73 mutex_lock(&table_lock);
74 serial = serial_table[index];
75
76 if (serial)
77 kref_get(&serial->kref);
78 mutex_unlock(&table_lock);
79 return serial;
80}
81
82static struct usb_serial *get_free_serial(struct usb_serial *serial,
83 int num_ports, unsigned int *minor)
84{
85 unsigned int i, j;
86 int good_spot;
87
88 dbg("%s %d", __func__, num_ports);
89
90 *minor = 0;
91 mutex_lock(&table_lock);
92 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
93 if (serial_table[i])
94 continue;
95
96 good_spot = 1;
97 for (j = 1; j <= num_ports-1; ++j)
98 if ((i+j >= SERIAL_TTY_MINORS) || (serial_table[i+j])) {
99 good_spot = 0;
100 i += j;
101 break;
102 }
103 if (good_spot == 0)
104 continue;
105
106 *minor = i;
107 j = 0;
108 dbg("%s - minor base = %d", __func__, *minor);
109 for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i) {
110 serial_table[i] = serial;
111 serial->port[j++]->number = i;
112 }
113 mutex_unlock(&table_lock);
114 return serial;
115 }
116 mutex_unlock(&table_lock);
117 return NULL;
118}
119
120static void return_serial(struct usb_serial *serial)
121{
122 int i;
123
124 dbg("%s", __func__);
125
126 for (i = 0; i < serial->num_ports; ++i)
127 serial_table[serial->minor + i] = NULL;
128}
129
130static void destroy_serial(struct kref *kref)
131{
132 struct usb_serial *serial;
133 struct usb_serial_port *port;
134 int i;
135
136 serial = to_usb_serial(kref);
137
138 dbg("%s - %s", __func__, serial->type->description);
139
140 serial->type->shutdown(serial);
141
142 /* return the minor range that this device had */
143 if (serial->minor != SERIAL_TTY_NO_MINOR)
144 return_serial(serial);
145
146 for (i = 0; i < serial->num_ports; ++i)
147 serial->port[i]->port.count = 0;
148
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;
154 }
155
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
158 * the driver core */
159 if (serial->num_ports < serial->num_port_pointers) {
160 for (i = serial->num_ports;
161 i < serial->num_port_pointers; ++i) {
162 port = serial->port[i];
163 if (!port)
164 continue;
165 port_free(port);
166 }
167 }
168
169 usb_put_dev(serial->dev);
170
171 /* free up any memory that we allocated */
172 kfree(serial);
173}
174
175void usb_serial_put(struct usb_serial *serial)
176{
177 mutex_lock(&table_lock);
178 kref_put(&serial->kref, destroy_serial);
179 mutex_unlock(&table_lock);
180}
181
182/*****************************************************************************
183 * Driver tty interface functions
184 *****************************************************************************/
185static int serial_open (struct tty_struct *tty, struct file *filp)
186{
187 struct usb_serial *serial;
188 struct usb_serial_port *port;
189 unsigned int portNumber;
190 int retval;
191
192 dbg("%s", __func__);
193
194 /* get the serial object associated with this tty pointer */
195 serial = usb_serial_get_by_index(tty->index);
196 if (!serial) {
197 tty->driver_data = NULL;
198 return -ENODEV;
199 }
200
201 portNumber = tty->index - serial->minor;
202 port = serial->port[portNumber];
203 if (!port) {
204 retval = -ENODEV;
205 goto bailout_kref_put;
206 }
207
208 if (port->serial->disconnected) {
209 retval = -ENODEV;
210 goto bailout_kref_put;
211 }
212
213 if (mutex_lock_interruptible(&port->mutex)) {
214 retval = -ERESTARTSYS;
215 goto bailout_kref_put;
216 }
217
218 ++port->port.count;
219
220 /* set up our port structure making the tty driver
221 * remember our port object, and us it */
222 tty->driver_data = port;
223 tty_port_tty_set(&port->port, tty);
224
225 if (port->port.count == 1) {
226
227 /* lock this module before we call it
228 * this may fail, which means we must bail out,
229 * safe because we are called with BKL held */
230 if (!try_module_get(serial->type->driver.owner)) {
231 retval = -ENODEV;
232 goto bailout_mutex_unlock;
233 }
234
235 retval = usb_autopm_get_interface(serial->interface);
236 if (retval)
237 goto bailout_module_put;
238 /* only call the device specific open if this
239 * is the first time the port is opened */
240 retval = serial->type->open(tty, port, filp);
241 if (retval)
242 goto bailout_interface_put;
243 }
244
245 mutex_unlock(&port->mutex);
246 return 0;
247
248bailout_interface_put:
249 usb_autopm_put_interface(serial->interface);
250bailout_module_put:
251 module_put(serial->type->driver.owner);
252bailout_mutex_unlock:
253 port->port.count = 0;
254 tty->driver_data = NULL;
255 tty_port_tty_set(&port->port, NULL);
256 mutex_unlock(&port->mutex);
257bailout_kref_put:
258 usb_serial_put(serial);
259 return retval;
260}
261
262static void serial_close(struct tty_struct *tty, struct file *filp)
263{
264 struct usb_serial_port *port = tty->driver_data;
265
266 if (!port)
267 return;
268
269 dbg("%s - port %d", __func__, port->number);
270
271 mutex_lock(&port->mutex);
272
273 if (port->port.count == 0) {
274 mutex_unlock(&port->mutex);
275 return;
276 }
277
278 if (port->port.count == 1)
279 /* only call the device specific close if this
280 * port is being closed by the last owner. Ensure we do
281 * this before we drop the port count. The call is protected
282 * by the port mutex
283 */
284 port->serial->type->close(tty, port, filp);
285
286 if (port->port.count == (port->console ? 2 : 1)) {
287 struct tty_struct *tty = tty_port_tty_get(&port->port);
288 if (tty) {
289 /* We must do this before we drop the port count to
290 zero. */
291 if (tty->driver_data)
292 tty->driver_data = NULL;
293 tty_port_tty_set(&port->port, NULL);
294 tty_kref_put(tty);
295 }
296 }
297
298 if (port->port.count == 1) {
299 mutex_lock(&port->serial->disc_mutex);
300 if (!port->serial->disconnected)
301 usb_autopm_put_interface(port->serial->interface);
302 mutex_unlock(&port->serial->disc_mutex);
303 module_put(port->serial->type->driver.owner);
304 }
305 --port->port.count;
306
307 mutex_unlock(&port->mutex);
308 usb_serial_put(port->serial);
309}
310
311static int serial_write(struct tty_struct *tty, const unsigned char *buf,
312 int count)
313{
314 struct usb_serial_port *port = tty->driver_data;
315 int retval = -ENODEV;
316
317 if (port->serial->dev->state == USB_STATE_NOTATTACHED)
318 goto exit;
319
320 dbg("%s - port %d, %d byte(s)", __func__, port->number, count);
321
322 /* count is managed under the mutex lock for the tty so cannot
323 drop to zero until after the last close completes */
324 WARN_ON(!port->port.count);
325
326 /* pass on to the driver specific version of this function */
327 retval = port->serial->type->write(tty, port, buf, count);
328
329exit:
330 return retval;
331}
332
333static int serial_write_room(struct tty_struct *tty)
334{
335 struct usb_serial_port *port = tty->driver_data;
336 dbg("%s - port %d", __func__, port->number);
337 WARN_ON(!port->port.count);
338 /* pass on to the driver specific version of this function */
339 return port->serial->type->write_room(tty);
340}
341
342static int serial_chars_in_buffer(struct tty_struct *tty)
343{
344 struct usb_serial_port *port = tty->driver_data;
345 dbg("%s = port %d", __func__, port->number);
346
347 WARN_ON(!port->port.count);
348 /* if the device was unplugged then any remaining characters
349 fell out of the connector ;) */
350 if (port->serial->disconnected)
351 return 0;
352 /* pass on to the driver specific version of this function */
353 return port->serial->type->chars_in_buffer(tty);
354}
355
356static void serial_throttle(struct tty_struct *tty)
357{
358 struct usb_serial_port *port = tty->driver_data;
359 dbg("%s - port %d", __func__, port->number);
360
361 WARN_ON(!port->port.count);
362 /* pass on to the driver specific version of this function */
363 if (port->serial->type->throttle)
364 port->serial->type->throttle(tty);
365}
366
367static void serial_unthrottle(struct tty_struct *tty)
368{
369 struct usb_serial_port *port = tty->driver_data;
370 dbg("%s - port %d", __func__, port->number);
371
372 WARN_ON(!port->port.count);
373 /* pass on to the driver specific version of this function */
374 if (port->serial->type->unthrottle)
375 port->serial->type->unthrottle(tty);
376}
377
378static int serial_ioctl(struct tty_struct *tty, struct file *file,
379 unsigned int cmd, unsigned long arg)
380{
381 struct usb_serial_port *port = tty->driver_data;
382 int retval = -ENODEV;
383
384 dbg("%s - port %d, cmd 0x%.4x", __func__, port->number, cmd);
385
386 WARN_ON(!port->port.count);
387
388 /* pass on to the driver specific version of this function
389 if it is available */
390 if (port->serial->type->ioctl) {
391 retval = port->serial->type->ioctl(tty, file, cmd, arg);
392 } else
393 retval = -ENOIOCTLCMD;
394 return retval;
395}
396
397static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
398{
399 struct usb_serial_port *port = tty->driver_data;
400 dbg("%s - port %d", __func__, port->number);
401
402 WARN_ON(!port->port.count);
403 /* pass on to the driver specific version of this function
404 if it is available */
405 if (port->serial->type->set_termios)
406 port->serial->type->set_termios(tty, port, old);
407 else
408 tty_termios_copy_hw(tty->termios, old);
409}
410
411static int serial_break(struct tty_struct *tty, int break_state)
412{
413 struct usb_serial_port *port = tty->driver_data;
414
415 dbg("%s - port %d", __func__, port->number);
416
417 WARN_ON(!port->port.count);
418 /* pass on to the driver specific version of this function
419 if it is available */
420 if (port->serial->type->break_ctl)
421 port->serial->type->break_ctl(tty, break_state);
422 return 0;
423}
424
425static int serial_proc_show(struct seq_file *m, void *v)
426{
427 struct usb_serial *serial;
428 int i;
429 char tmp[40];
430
431 dbg("%s", __func__);
432 seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
433 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
434 serial = usb_serial_get_by_index(i);
435 if (serial == NULL)
436 continue;
437
438 seq_printf(m, "%d:", i);
439 if (serial->type->driver.owner)
440 seq_printf(m, " module:%s",
441 module_name(serial->type->driver.owner));
442 seq_printf(m, " name:\"%s\"",
443 serial->type->description);
444 seq_printf(m, " vendor:%04x product:%04x",
445 le16_to_cpu(serial->dev->descriptor.idVendor),
446 le16_to_cpu(serial->dev->descriptor.idProduct));
447 seq_printf(m, " num_ports:%d", serial->num_ports);
448 seq_printf(m, " port:%d", i - serial->minor + 1);
449 usb_make_path(serial->dev, tmp, sizeof(tmp));
450 seq_printf(m, " path:%s", tmp);
451
452 seq_putc(m, '\n');
453 usb_serial_put(serial);
454 }
455 return 0;
456}
457
458static int serial_proc_open(struct inode *inode, struct file *file)
459{
460 return single_open(file, serial_proc_show, NULL);
461}
462
463static const struct file_operations serial_proc_fops = {
464 .owner = THIS_MODULE,
465 .open = serial_proc_open,
466 .read = seq_read,
467 .llseek = seq_lseek,
468 .release = single_release,
469};
470
471static int serial_tiocmget(struct tty_struct *tty, struct file *file)
472{
473 struct usb_serial_port *port = tty->driver_data;
474
475 dbg("%s - port %d", __func__, port->number);
476
477 WARN_ON(!port->port.count);
478 if (port->serial->type->tiocmget)
479 return port->serial->type->tiocmget(tty, file);
480 return -EINVAL;
481}
482
483static int serial_tiocmset(struct tty_struct *tty, struct file *file,
484 unsigned int set, unsigned int clear)
485{
486 struct usb_serial_port *port = tty->driver_data;
487
488 dbg("%s - port %d", __func__, port->number);
489
490 WARN_ON(!port->port.count);
491 if (port->serial->type->tiocmset)
492 return port->serial->type->tiocmset(tty, file, set, clear);
493 return -EINVAL;
494}
495
496/*
497 * We would be calling tty_wakeup here, but unfortunately some line
498 * disciplines have an annoying habit of calling tty->write from
499 * the write wakeup callback (e.g. n_hdlc.c).
500 */
501void usb_serial_port_softint(struct usb_serial_port *port)
502{
503 schedule_work(&port->work);
504}
505EXPORT_SYMBOL_GPL(usb_serial_port_softint);
506
507static void usb_serial_port_work(struct work_struct *work)
508{
509 struct usb_serial_port *port =
510 container_of(work, struct usb_serial_port, work);
511 struct tty_struct *tty;
512
513 dbg("%s - port %d", __func__, port->number);
514
515 tty = tty_port_tty_get(&port->port);
516 if (!tty)
517 return;
518
519 tty_wakeup(tty);
520 tty_kref_put(tty);
521}
522
523static void port_release(struct device *dev)
524{
525 struct usb_serial_port *port = to_usb_serial_port(dev);
526
527 dbg ("%s - %s", __func__, dev_name(dev));
528 port_free(port);
529}
530
531static void kill_traffic(struct usb_serial_port *port)
532{
533 usb_kill_urb(port->read_urb);
534 usb_kill_urb(port->write_urb);
535 /*
536 * This is tricky.
537 * Some drivers submit the read_urb in the
538 * handler for the write_urb or vice versa
539 * this order determines the order in which
540 * usb_kill_urb() must be used to reliably
541 * kill the URBs. As it is unknown here,
542 * both orders must be used in turn.
543 * The call below is not redundant.
544 */
545 usb_kill_urb(port->read_urb);
546 usb_kill_urb(port->interrupt_in_urb);
547 usb_kill_urb(port->interrupt_out_urb);
548}
549
550static void port_free(struct usb_serial_port *port)
551{
552 kill_traffic(port);
553 usb_free_urb(port->read_urb);
554 usb_free_urb(port->write_urb);
555 usb_free_urb(port->interrupt_in_urb);
556 usb_free_urb(port->interrupt_out_urb);
557 kfree(port->bulk_in_buffer);
558 kfree(port->bulk_out_buffer);
559 kfree(port->interrupt_in_buffer);
560 kfree(port->interrupt_out_buffer);
561 flush_scheduled_work(); /* port->work */
562 kfree(port);
563}
564
565static struct usb_serial *create_serial(struct usb_device *dev,
566 struct usb_interface *interface,
567 struct usb_serial_driver *driver)
568{
569 struct usb_serial *serial;
570
571 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
572 if (!serial) {
573 dev_err(&dev->dev, "%s - out of memory\n", __func__);
574 return NULL;
575 }
576 serial->dev = usb_get_dev(dev);
577 serial->type = driver;
578 serial->interface = interface;
579 kref_init(&serial->kref);
580 mutex_init(&serial->disc_mutex);
581 serial->minor = SERIAL_TTY_NO_MINOR;
582
583 return serial;
584}
585
586static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
587 struct usb_serial_driver *drv)
588{
589 struct usb_dynid *dynid;
590
591 spin_lock(&drv->dynids.lock);
592 list_for_each_entry(dynid, &drv->dynids.list, node) {
593 if (usb_match_one_id(intf, &dynid->id)) {
594 spin_unlock(&drv->dynids.lock);
595 return &dynid->id;
596 }
597 }
598 spin_unlock(&drv->dynids.lock);
599 return NULL;
600}
601
602static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
603 struct usb_interface *intf)
604{
605 const struct usb_device_id *id;
606
607 id = usb_match_id(intf, drv->id_table);
608 if (id) {
609 dbg("static descriptor matches");
610 goto exit;
611 }
612 id = match_dynamic_id(intf, drv);
613 if (id)
614 dbg("dynamic descriptor matches");
615exit:
616 return id;
617}
618
619static struct usb_serial_driver *search_serial_device(
620 struct usb_interface *iface)
621{
622 const struct usb_device_id *id;
623 struct usb_serial_driver *drv;
624
625 /* Check if the usb id matches a known device */
626 list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
627 id = get_iface_id(drv, iface);
628 if (id)
629 return drv;
630 }
631
632 return NULL;
633}
634
635int usb_serial_probe(struct usb_interface *interface,
636 const struct usb_device_id *id)
637{
638 struct usb_device *dev = interface_to_usbdev(interface);
639 struct usb_serial *serial = NULL;
640 struct usb_serial_port *port;
641 struct usb_host_interface *iface_desc;
642 struct usb_endpoint_descriptor *endpoint;
643 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
644 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
645 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
646 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
647 struct usb_serial_driver *type = NULL;
648 int retval;
649 unsigned int minor;
650 int buffer_size;
651 int i;
652 int num_interrupt_in = 0;
653 int num_interrupt_out = 0;
654 int num_bulk_in = 0;
655 int num_bulk_out = 0;
656 int num_ports = 0;
657 int max_endpoints;
658
659 lock_kernel(); /* guard against unloading a serial driver module */
660 type = search_serial_device(interface);
661 if (!type) {
662 unlock_kernel();
663 dbg("none matched");
664 return -ENODEV;
665 }
666
667 serial = create_serial(dev, interface, type);
668 if (!serial) {
669 unlock_kernel();
670 dev_err(&interface->dev, "%s - out of memory\n", __func__);
671 return -ENOMEM;
672 }
673
674 /* if this device type has a probe function, call it */
675 if (type->probe) {
676 const struct usb_device_id *id;
677
678 if (!try_module_get(type->driver.owner)) {
679 unlock_kernel();
680 dev_err(&interface->dev,
681 "module get failed, exiting\n");
682 kfree(serial);
683 return -EIO;
684 }
685
686 id = get_iface_id(type, interface);
687 retval = type->probe(serial, id);
688 module_put(type->driver.owner);
689
690 if (retval) {
691 unlock_kernel();
692 dbg("sub driver rejected device");
693 kfree(serial);
694 return retval;
695 }
696 }
697
698 /* descriptor matches, let's find the endpoints needed */
699 /* check out the endpoints */
700 iface_desc = interface->cur_altsetting;
701 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
702 endpoint = &iface_desc->endpoint[i].desc;
703
704 if (usb_endpoint_is_bulk_in(endpoint)) {
705 /* we found a bulk in endpoint */
706 dbg("found bulk in on endpoint %d", i);
707 bulk_in_endpoint[num_bulk_in] = endpoint;
708 ++num_bulk_in;
709 }
710
711 if (usb_endpoint_is_bulk_out(endpoint)) {
712 /* we found a bulk out endpoint */
713 dbg("found bulk out on endpoint %d", i);
714 bulk_out_endpoint[num_bulk_out] = endpoint;
715 ++num_bulk_out;
716 }
717
718 if (usb_endpoint_is_int_in(endpoint)) {
719 /* we found a interrupt in endpoint */
720 dbg("found interrupt in on endpoint %d", i);
721 interrupt_in_endpoint[num_interrupt_in] = endpoint;
722 ++num_interrupt_in;
723 }
724
725 if (usb_endpoint_is_int_out(endpoint)) {
726 /* we found an interrupt out endpoint */
727 dbg("found interrupt out on endpoint %d", i);
728 interrupt_out_endpoint[num_interrupt_out] = endpoint;
729 ++num_interrupt_out;
730 }
731 }
732
733#if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
734 /* BEGIN HORRIBLE HACK FOR PL2303 */
735 /* this is needed due to the looney way its endpoints are set up */
736 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
737 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
738 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
739 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
740 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
741 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
742 ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
743 (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
744 if (interface != dev->actconfig->interface[0]) {
745 /* check out the endpoints of the other interface*/
746 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
747 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
748 endpoint = &iface_desc->endpoint[i].desc;
749 if (usb_endpoint_is_int_in(endpoint)) {
750 /* we found a interrupt in endpoint */
751 dbg("found interrupt in for Prolific device on separate interface");
752 interrupt_in_endpoint[num_interrupt_in] = endpoint;
753 ++num_interrupt_in;
754 }
755 }
756 }
757
758 /* Now make sure the PL-2303 is configured correctly.
759 * If not, give up now and hope this hack will work
760 * properly during a later invocation of usb_serial_probe
761 */
762 if (num_bulk_in == 0 || num_bulk_out == 0) {
763 unlock_kernel();
764 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
765 kfree(serial);
766 return -ENODEV;
767 }
768 }
769 /* END HORRIBLE HACK FOR PL2303 */
770#endif
771
772#ifdef CONFIG_USB_SERIAL_GENERIC
773 if (type == &usb_serial_generic_device) {
774 num_ports = num_bulk_out;
775 if (num_ports == 0) {
776 unlock_kernel();
777 dev_err(&interface->dev,
778 "Generic device with no bulk out, not allowed.\n");
779 kfree(serial);
780 return -EIO;
781 }
782 }
783#endif
784 if (!num_ports) {
785 /* if this device type has a calc_num_ports function, call it */
786 if (type->calc_num_ports) {
787 if (!try_module_get(type->driver.owner)) {
788 unlock_kernel();
789 dev_err(&interface->dev,
790 "module get failed, exiting\n");
791 kfree(serial);
792 return -EIO;
793 }
794 num_ports = type->calc_num_ports(serial);
795 module_put(type->driver.owner);
796 }
797 if (!num_ports)
798 num_ports = type->num_ports;
799 }
800
801 serial->num_ports = num_ports;
802 serial->num_bulk_in = num_bulk_in;
803 serial->num_bulk_out = num_bulk_out;
804 serial->num_interrupt_in = num_interrupt_in;
805 serial->num_interrupt_out = num_interrupt_out;
806
807 /* found all that we need */
808 dev_info(&interface->dev, "%s converter detected\n",
809 type->description);
810
811 /* create our ports, we need as many as the max endpoints */
812 /* we don't use num_ports here because some devices have more
813 endpoint pairs than ports */
814 max_endpoints = max(num_bulk_in, num_bulk_out);
815 max_endpoints = max(max_endpoints, num_interrupt_in);
816 max_endpoints = max(max_endpoints, num_interrupt_out);
817 max_endpoints = max(max_endpoints, (int)serial->num_ports);
818 serial->num_port_pointers = max_endpoints;
819 unlock_kernel();
820
821 dbg("%s - setting up %d port structures for this device",
822 __func__, max_endpoints);
823 for (i = 0; i < max_endpoints; ++i) {
824 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
825 if (!port)
826 goto probe_error;
827 tty_port_init(&port->port);
828 port->serial = serial;
829 spin_lock_init(&port->lock);
830 mutex_init(&port->mutex);
831 INIT_WORK(&port->work, usb_serial_port_work);
832 serial->port[i] = port;
833 }
834
835 /* set up the endpoint information */
836 for (i = 0; i < num_bulk_in; ++i) {
837 endpoint = bulk_in_endpoint[i];
838 port = serial->port[i];
839 port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
840 if (!port->read_urb) {
841 dev_err(&interface->dev, "No free urbs available\n");
842 goto probe_error;
843 }
844 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
845 port->bulk_in_size = buffer_size;
846 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
847 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
848 if (!port->bulk_in_buffer) {
849 dev_err(&interface->dev,
850 "Couldn't allocate bulk_in_buffer\n");
851 goto probe_error;
852 }
853 usb_fill_bulk_urb(port->read_urb, dev,
854 usb_rcvbulkpipe(dev,
855 endpoint->bEndpointAddress),
856 port->bulk_in_buffer, buffer_size,
857 serial->type->read_bulk_callback, port);
858 }
859
860 for (i = 0; i < num_bulk_out; ++i) {
861 endpoint = bulk_out_endpoint[i];
862 port = serial->port[i];
863 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
864 if (!port->write_urb) {
865 dev_err(&interface->dev, "No free urbs available\n");
866 goto probe_error;
867 }
868 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
869 port->bulk_out_size = buffer_size;
870 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
871 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
872 if (!port->bulk_out_buffer) {
873 dev_err(&interface->dev,
874 "Couldn't allocate bulk_out_buffer\n");
875 goto probe_error;
876 }
877 usb_fill_bulk_urb(port->write_urb, dev,
878 usb_sndbulkpipe(dev,
879 endpoint->bEndpointAddress),
880 port->bulk_out_buffer, buffer_size,
881 serial->type->write_bulk_callback, port);
882 }
883
884 if (serial->type->read_int_callback) {
885 for (i = 0; i < num_interrupt_in; ++i) {
886 endpoint = interrupt_in_endpoint[i];
887 port = serial->port[i];
888 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
889 if (!port->interrupt_in_urb) {
890 dev_err(&interface->dev,
891 "No free urbs available\n");
892 goto probe_error;
893 }
894 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
895 port->interrupt_in_endpointAddress =
896 endpoint->bEndpointAddress;
897 port->interrupt_in_buffer = kmalloc(buffer_size,
898 GFP_KERNEL);
899 if (!port->interrupt_in_buffer) {
900 dev_err(&interface->dev,
901 "Couldn't allocate interrupt_in_buffer\n");
902 goto probe_error;
903 }
904 usb_fill_int_urb(port->interrupt_in_urb, dev,
905 usb_rcvintpipe(dev,
906 endpoint->bEndpointAddress),
907 port->interrupt_in_buffer, buffer_size,
908 serial->type->read_int_callback, port,
909 endpoint->bInterval);
910 }
911 } else if (num_interrupt_in) {
912 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
913 }
914
915 if (serial->type->write_int_callback) {
916 for (i = 0; i < num_interrupt_out; ++i) {
917 endpoint = interrupt_out_endpoint[i];
918 port = serial->port[i];
919 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
920 if (!port->interrupt_out_urb) {
921 dev_err(&interface->dev,
922 "No free urbs available\n");
923 goto probe_error;
924 }
925 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
926 port->interrupt_out_size = buffer_size;
927 port->interrupt_out_endpointAddress =
928 endpoint->bEndpointAddress;
929 port->interrupt_out_buffer = kmalloc(buffer_size,
930 GFP_KERNEL);
931 if (!port->interrupt_out_buffer) {
932 dev_err(&interface->dev,
933 "Couldn't allocate interrupt_out_buffer\n");
934 goto probe_error;
935 }
936 usb_fill_int_urb(port->interrupt_out_urb, dev,
937 usb_sndintpipe(dev,
938 endpoint->bEndpointAddress),
939 port->interrupt_out_buffer, buffer_size,
940 serial->type->write_int_callback, port,
941 endpoint->bInterval);
942 }
943 } else if (num_interrupt_out) {
944 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
945 }
946
947 /* if this device type has an attach function, call it */
948 if (type->attach) {
949 if (!try_module_get(type->driver.owner)) {
950 dev_err(&interface->dev,
951 "module get failed, exiting\n");
952 goto probe_error;
953 }
954 retval = type->attach(serial);
955 module_put(type->driver.owner);
956 if (retval < 0)
957 goto probe_error;
958 if (retval > 0) {
959 /* quietly accept this device, but don't bind to a
960 serial port as it's about to disappear */
961 goto exit;
962 }
963 }
964
965 if (get_free_serial(serial, num_ports, &minor) == NULL) {
966 dev_err(&interface->dev, "No more free serial devices\n");
967 goto probe_error;
968 }
969 serial->minor = minor;
970
971 /* register all of the individual ports with the driver core */
972 for (i = 0; i < num_ports; ++i) {
973 port = serial->port[i];
974 port->dev.parent = &interface->dev;
975 port->dev.driver = NULL;
976 port->dev.bus = &usb_serial_bus_type;
977 port->dev.release = &port_release;
978
979 dev_set_name(&port->dev, "ttyUSB%d", port->number);
980 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
981 retval = device_register(&port->dev);
982 if (retval)
983 dev_err(&port->dev, "Error registering port device, "
984 "continuing\n");
985 }
986
987 usb_serial_console_init(debug, minor);
988
989exit:
990 /* success */
991 usb_set_intfdata(interface, serial);
992 return 0;
993
994probe_error:
995 for (i = 0; i < num_bulk_in; ++i) {
996 port = serial->port[i];
997 if (!port)
998 continue;
999 usb_free_urb(port->read_urb);
1000 kfree(port->bulk_in_buffer);
1001 }
1002 for (i = 0; i < num_bulk_out; ++i) {
1003 port = serial->port[i];
1004 if (!port)
1005 continue;
1006 usb_free_urb(port->write_urb);
1007 kfree(port->bulk_out_buffer);
1008 }
1009 for (i = 0; i < num_interrupt_in; ++i) {
1010 port = serial->port[i];
1011 if (!port)
1012 continue;
1013 usb_free_urb(port->interrupt_in_urb);
1014 kfree(port->interrupt_in_buffer);
1015 }
1016 for (i = 0; i < num_interrupt_out; ++i) {
1017 port = serial->port[i];
1018 if (!port)
1019 continue;
1020 usb_free_urb(port->interrupt_out_urb);
1021 kfree(port->interrupt_out_buffer);
1022 }
1023
1024 /* free up any memory that we allocated */
1025 for (i = 0; i < serial->num_port_pointers; ++i)
1026 kfree(serial->port[i]);
1027 kfree(serial);
1028 return -EIO;
1029}
1030EXPORT_SYMBOL_GPL(usb_serial_probe);
1031
1032void usb_serial_disconnect(struct usb_interface *interface)
1033{
1034 int i;
1035 struct usb_serial *serial = usb_get_intfdata(interface);
1036 struct device *dev = &interface->dev;
1037 struct usb_serial_port *port;
1038
1039 usb_serial_console_disconnect(serial);
1040 dbg("%s", __func__);
1041
1042 mutex_lock(&serial->disc_mutex);
1043 usb_set_intfdata(interface, NULL);
1044 /* must set a flag, to signal subdrivers */
1045 serial->disconnected = 1;
1046 for (i = 0; i < serial->num_ports; ++i) {
1047 port = serial->port[i];
1048 if (port) {
1049 struct tty_struct *tty = tty_port_tty_get(&port->port);
1050 if (tty) {
1051 tty_hangup(tty);
1052 tty_kref_put(tty);
1053 }
1054 kill_traffic(port);
1055 }
1056 }
1057 /* let the last holder of this object
1058 * cause it to be cleaned up */
1059 mutex_unlock(&serial->disc_mutex);
1060 usb_serial_put(serial);
1061 dev_info(dev, "device disconnected\n");
1062}
1063EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1064
1065int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1066{
1067 struct usb_serial *serial = usb_get_intfdata(intf);
1068 struct usb_serial_port *port;
1069 int i, r = 0;
1070
1071 serial->suspending = 1;
1072
1073 for (i = 0; i < serial->num_ports; ++i) {
1074 port = serial->port[i];
1075 if (port)
1076 kill_traffic(port);
1077 }
1078
1079 if (serial->type->suspend)
1080 r = serial->type->suspend(serial, message);
1081
1082 return r;
1083}
1084EXPORT_SYMBOL(usb_serial_suspend);
1085
1086int usb_serial_resume(struct usb_interface *intf)
1087{
1088 struct usb_serial *serial = usb_get_intfdata(intf);
1089 int rv;
1090
1091 serial->suspending = 0;
1092 if (serial->type->resume)
1093 rv = serial->type->resume(serial);
1094 else
1095 rv = usb_serial_generic_resume(serial);
1096
1097 return rv;
1098}
1099EXPORT_SYMBOL(usb_serial_resume);
1100
1101static const struct tty_operations serial_ops = {
1102 .open = serial_open,
1103 .close = serial_close,
1104 .write = serial_write,
1105 .write_room = serial_write_room,
1106 .ioctl = serial_ioctl,
1107 .set_termios = serial_set_termios,
1108 .throttle = serial_throttle,
1109 .unthrottle = serial_unthrottle,
1110 .break_ctl = serial_break,
1111 .chars_in_buffer = serial_chars_in_buffer,
1112 .tiocmget = serial_tiocmget,
1113 .tiocmset = serial_tiocmset,
1114 .proc_fops = &serial_proc_fops,
1115};
1116
1117struct tty_driver *usb_serial_tty_driver;
1118
1119static int __init usb_serial_init(void)
1120{
1121 int i;
1122 int result;
1123
1124 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1125 if (!usb_serial_tty_driver)
1126 return -ENOMEM;
1127
1128 /* Initialize our global data */
1129 for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1130 serial_table[i] = NULL;
1131
1132 result = bus_register(&usb_serial_bus_type);
1133 if (result) {
1134 printk(KERN_ERR "usb-serial: %s - registering bus driver "
1135 "failed\n", __func__);
1136 goto exit_bus;
1137 }
1138
1139 usb_serial_tty_driver->owner = THIS_MODULE;
1140 usb_serial_tty_driver->driver_name = "usbserial";
1141 usb_serial_tty_driver->name = "ttyUSB";
1142 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1143 usb_serial_tty_driver->minor_start = 0;
1144 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1145 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1146 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1147 TTY_DRIVER_DYNAMIC_DEV;
1148 usb_serial_tty_driver->init_termios = tty_std_termios;
1149 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1150 | HUPCL | CLOCAL;
1151 usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1152 usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1153 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1154 result = tty_register_driver(usb_serial_tty_driver);
1155 if (result) {
1156 printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n",
1157 __func__);
1158 goto exit_reg_driver;
1159 }
1160
1161 /* register the USB driver */
1162 result = usb_register(&usb_serial_driver);
1163 if (result < 0) {
1164 printk(KERN_ERR "usb-serial: %s - usb_register failed\n",
1165 __func__);
1166 goto exit_tty;
1167 }
1168
1169 /* register the generic driver, if we should */
1170 result = usb_serial_generic_register(debug);
1171 if (result < 0) {
1172 printk(KERN_ERR "usb-serial: %s - registering generic "
1173 "driver failed\n", __func__);
1174 goto exit_generic;
1175 }
1176
1177 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1178
1179 return result;
1180
1181exit_generic:
1182 usb_deregister(&usb_serial_driver);
1183
1184exit_tty:
1185 tty_unregister_driver(usb_serial_tty_driver);
1186
1187exit_reg_driver:
1188 bus_unregister(&usb_serial_bus_type);
1189
1190exit_bus:
1191 printk(KERN_ERR "usb-serial: %s - returning with error %d\n",
1192 __func__, result);
1193 put_tty_driver(usb_serial_tty_driver);
1194 return result;
1195}
1196
1197
1198static void __exit usb_serial_exit(void)
1199{
1200 usb_serial_console_exit();
1201
1202 usb_serial_generic_deregister();
1203
1204 usb_deregister(&usb_serial_driver);
1205 tty_unregister_driver(usb_serial_tty_driver);
1206 put_tty_driver(usb_serial_tty_driver);
1207 bus_unregister(&usb_serial_bus_type);
1208}
1209
1210
1211module_init(usb_serial_init);
1212module_exit(usb_serial_exit);
1213
1214#define set_to_generic_if_null(type, function) \
1215 do { \
1216 if (!type->function) { \
1217 type->function = usb_serial_generic_##function; \
1218 dbg("Had to override the " #function \
1219 " usb serial operation with the generic one.");\
1220 } \
1221 } while (0)
1222
1223static void fixup_generic(struct usb_serial_driver *device)
1224{
1225 set_to_generic_if_null(device, open);
1226 set_to_generic_if_null(device, write);
1227 set_to_generic_if_null(device, close);
1228 set_to_generic_if_null(device, write_room);
1229 set_to_generic_if_null(device, chars_in_buffer);
1230 set_to_generic_if_null(device, read_bulk_callback);
1231 set_to_generic_if_null(device, write_bulk_callback);
1232 set_to_generic_if_null(device, shutdown);
1233}
1234
1235int usb_serial_register(struct usb_serial_driver *driver)
1236{
1237 /* must be called with BKL held */
1238 int retval;
1239
1240 if (usb_disabled())
1241 return -ENODEV;
1242
1243 fixup_generic(driver);
1244
1245 if (!driver->description)
1246 driver->description = driver->driver.name;
1247
1248 /* Add this device to our list of devices */
1249 list_add(&driver->driver_list, &usb_serial_driver_list);
1250
1251 retval = usb_serial_bus_register(driver);
1252 if (retval) {
1253 printk(KERN_ERR "usb-serial: problem %d when registering "
1254 "driver %s\n", retval, driver->description);
1255 list_del(&driver->driver_list);
1256 } else
1257 printk(KERN_INFO "USB Serial support registered for %s\n",
1258 driver->description);
1259
1260 return retval;
1261}
1262EXPORT_SYMBOL_GPL(usb_serial_register);
1263
1264
1265void usb_serial_deregister(struct usb_serial_driver *device)
1266{
1267 /* must be called with BKL held */
1268 printk(KERN_INFO "USB Serial deregistering driver %s\n",
1269 device->description);
1270 list_del(&device->driver_list);
1271 usb_serial_bus_deregister(device);
1272}
1273EXPORT_SYMBOL_GPL(usb_serial_deregister);
1274
1275/* Module information */
1276MODULE_AUTHOR(DRIVER_AUTHOR);
1277MODULE_DESCRIPTION(DRIVER_DESC);
1278MODULE_LICENSE("GPL");
1279
1280module_param(debug, bool, S_IRUGO | S_IWUSR);
1281MODULE_PARM_DESC(debug, "Debug enabled or not");