blob: a08230ebe9c5219c968d920a0c1e21a30f431a30 [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/*
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/serial.h>
35#include <linux/usb.h>
36#include <linux/usb/serial.h>
37#include <linux/kfifo.h>
38#include "pl2303.h"
39
40/*
41 * Version Information
42 */
43#define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/"
44#define DRIVER_DESC "USB Serial Driver core"
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 .supports_autosuspend = 1,
55};
56
57/* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
58 the MODULE_DEVICE_TABLE declarations in each serial driver
59 cause the "hotplug" program to pull in whatever module is necessary
60 via modprobe, and modprobe will load usbserial because the serial
61 drivers depend on it.
62*/
63
64static bool debug;
65/* initially all NULL */
66static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
67static DEFINE_MUTEX(table_lock);
68static LIST_HEAD(usb_serial_driver_list);
69
70/*
71 * Look up the serial structure. If it is found and it hasn't been
72 * disconnected, return with its disc_mutex held and its refcount
73 * incremented. Otherwise return NULL.
74 */
75struct usb_serial *usb_serial_get_by_index(unsigned index)
76{
77 struct usb_serial *serial;
78
79 mutex_lock(&table_lock);
80 serial = serial_table[index];
81
82 if (serial) {
83 mutex_lock(&serial->disc_mutex);
84 if (serial->disconnected) {
85 mutex_unlock(&serial->disc_mutex);
86 serial = NULL;
87 } else {
88 kref_get(&serial->kref);
89 }
90 }
91 mutex_unlock(&table_lock);
92 return serial;
93}
94
95static struct usb_serial *get_free_serial(struct usb_serial *serial,
96 int num_ports, unsigned int *minor)
97{
98 unsigned int i, j;
99 int good_spot;
100
101 dbg("%s %d", __func__, num_ports);
102
103 *minor = 0;
104 mutex_lock(&table_lock);
105 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
106 if (serial_table[i])
107 continue;
108
109 good_spot = 1;
110 for (j = 1; j <= num_ports-1; ++j)
111 if ((i+j >= SERIAL_TTY_MINORS) || (serial_table[i+j])) {
112 good_spot = 0;
113 i += j;
114 break;
115 }
116 if (good_spot == 0)
117 continue;
118
119 *minor = i;
120 j = 0;
121 dbg("%s - minor base = %d", __func__, *minor);
122 for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i) {
123 serial_table[i] = serial;
124 serial->port[j++]->number = i;
125 }
126 mutex_unlock(&table_lock);
127 return serial;
128 }
129 mutex_unlock(&table_lock);
130 return NULL;
131}
132
133static void return_serial(struct usb_serial *serial)
134{
135 int i;
136
137 dbg("%s", __func__);
138
139 mutex_lock(&table_lock);
140 for (i = 0; i < serial->num_ports; ++i)
141 serial_table[serial->minor + i] = NULL;
142 mutex_unlock(&table_lock);
143}
144
145static void destroy_serial(struct kref *kref)
146{
147 struct usb_serial *serial;
148 struct usb_serial_port *port;
149 int i;
150
151 serial = to_usb_serial(kref);
152
153 dbg("%s - %s", __func__, serial->type->description);
154
155 /* return the minor range that this device had */
156 if (serial->minor != SERIAL_TTY_NO_MINOR)
157 return_serial(serial);
158
159 if (serial->attached)
160 serial->type->release(serial);
161
162 /* Now that nothing is using the ports, they can be freed */
163 for (i = 0; i < serial->num_port_pointers; ++i) {
164 port = serial->port[i];
165 if (port) {
166 port->serial = NULL;
167 put_device(&port->dev);
168 }
169 }
170
171 usb_put_intf(serial->interface);
172 usb_put_dev(serial->dev);
173 kfree(serial);
174}
175
176void usb_serial_put(struct usb_serial *serial)
177{
178 kref_put(&serial->kref, destroy_serial);
179}
180
181/*****************************************************************************
182 * Driver tty interface functions
183 *****************************************************************************/
184
185/**
186 * serial_install - install tty
187 * @driver: the driver (USB in our case)
188 * @tty: the tty being created
189 *
190 * Create the termios objects for this tty. We use the default
191 * USB serial settings but permit them to be overridden by
192 * serial->type->init_termios.
193 *
194 * This is the first place a new tty gets used. Hence this is where we
195 * acquire references to the usb_serial structure and the driver module,
196 * where we store a pointer to the port, and where we do an autoresume.
197 * All these actions are reversed in serial_cleanup().
198 */
199static int serial_install(struct tty_driver *driver, struct tty_struct *tty)
200{
201 int idx = tty->index;
202 struct usb_serial *serial;
203 struct usb_serial_port *port;
204 int retval = -ENODEV;
205
206 dbg("%s", __func__);
207
208 serial = usb_serial_get_by_index(idx);
209 if (!serial)
210 return retval;
211
212 port = serial->port[idx - serial->minor];
213 if (!port)
214 goto error_no_port;
215 if (!try_module_get(serial->type->driver.owner))
216 goto error_module_get;
217
218 retval = usb_autopm_get_interface(serial->interface);
219 if (retval)
220 goto error_get_interface;
221
222 retval = tty_standard_install(driver, tty);
223 if (retval)
224 goto error_init_termios;
225
226 mutex_unlock(&serial->disc_mutex);
227
228 /* allow the driver to update the settings */
229 if (serial->type->init_termios)
230 serial->type->init_termios(tty);
231
232 tty->driver_data = port;
233
234 return retval;
235
236 error_init_termios:
237 usb_autopm_put_interface(serial->interface);
238 error_get_interface:
239 module_put(serial->type->driver.owner);
240 error_module_get:
241 error_no_port:
242 usb_serial_put(serial);
243 mutex_unlock(&serial->disc_mutex);
244 return retval;
245}
246
247static int serial_activate(struct tty_port *tport, struct tty_struct *tty)
248{
249 struct usb_serial_port *port =
250 container_of(tport, struct usb_serial_port, port);
251 struct usb_serial *serial = port->serial;
252 int retval;
253
254 mutex_lock(&serial->disc_mutex);
255 if (serial->disconnected)
256 retval = -ENODEV;
257 else
258 retval = port->serial->type->open(tty, port);
259 mutex_unlock(&serial->disc_mutex);
260
261 if (retval < 0)
262 retval = usb_translate_errors(retval);
263
264 return retval;
265}
266
267static int serial_open(struct tty_struct *tty, struct file *filp)
268{
269 struct usb_serial_port *port = tty->driver_data;
270
271 dbg("%s - port %d", __func__, port->number);
272 return tty_port_open(&port->port, tty, filp);
273}
274
275/**
276 * serial_down - shut down hardware
277 * @tport: tty port to shut down
278 *
279 * Shut down a USB serial port unless it is the console. We never
280 * shut down the console hardware as it will always be in use. Serialized
281 * against activate by the tport mutex and kept to matching open/close pairs
282 * of calls by the ASYNCB_INITIALIZED flag.
283 */
284static void serial_down(struct tty_port *tport)
285{
286 struct usb_serial_port *port =
287 container_of(tport, struct usb_serial_port, port);
288 struct usb_serial_driver *drv = port->serial->type;
289 /*
290 * The console is magical. Do not hang up the console hardware
291 * or there will be tears.
292 */
293 if (port->port.console)
294 return;
295 if (drv->close)
296 drv->close(port);
297}
298
299static void serial_hangup(struct tty_struct *tty)
300{
301 struct usb_serial_port *port = tty->driver_data;
302 dbg("%s - port %d", __func__, port->number);
303 tty_port_hangup(&port->port);
304}
305
306static void serial_close(struct tty_struct *tty, struct file *filp)
307{
308 struct usb_serial_port *port = tty->driver_data;
309 dbg("%s - port %d", __func__, port->number);
310 tty_port_close(&port->port, tty, filp);
311}
312
313/**
314 * serial_cleanup - free resources post close/hangup
315 * @port: port to free up
316 *
317 * Do the resource freeing and refcount dropping for the port.
318 * Avoid freeing the console.
319 *
320 * Called asynchronously after the last tty kref is dropped,
321 * and the tty layer has already done the tty_shutdown(tty);
322 */
323static void serial_cleanup(struct tty_struct *tty)
324{
325 struct usb_serial_port *port = tty->driver_data;
326 struct usb_serial *serial;
327 struct module *owner;
328
329 /* The console is magical. Do not hang up the console hardware
330 * or there will be tears.
331 */
332 if (port->port.console)
333 return;
334
335 dbg("%s - port %d", __func__, port->number);
336
337 tty->driver_data = NULL;
338
339 serial = port->serial;
340 owner = serial->type->driver.owner;
341
342 mutex_lock(&serial->disc_mutex);
343 if (!serial->disconnected)
344 usb_autopm_put_interface(serial->interface);
345 mutex_unlock(&serial->disc_mutex);
346
347 usb_serial_put(serial);
348 module_put(owner);
349}
350
351static int serial_write(struct tty_struct *tty, const unsigned char *buf,
352 int count)
353{
354 struct usb_serial_port *port = tty->driver_data;
355 int retval = -ENODEV;
356
357 if (port->serial->dev->state == USB_STATE_NOTATTACHED)
358 goto exit;
359
360 dbg("%s - port %d, %d byte(s)", __func__, port->number, count);
361
362 /* pass on to the driver specific version of this function */
363 retval = port->serial->type->write(tty, port, buf, count);
364 if (retval < 0)
365 retval = usb_translate_errors(retval);
366exit:
367 return retval;
368}
369
370static int serial_write_room(struct tty_struct *tty)
371{
372 struct usb_serial_port *port = tty->driver_data;
373 dbg("%s - port %d", __func__, port->number);
374 /* pass on to the driver specific version of this function */
375 return port->serial->type->write_room(tty);
376}
377
378static int serial_chars_in_buffer(struct tty_struct *tty)
379{
380 struct usb_serial_port *port = tty->driver_data;
381 dbg("%s - port %d", __func__, port->number);
382
383 /* if the device was unplugged then any remaining characters
384 fell out of the connector ;) */
385 if (port->serial->disconnected)
386 return 0;
387 /* pass on to the driver specific version of this function */
388 return port->serial->type->chars_in_buffer(tty);
389}
390
391static void serial_throttle(struct tty_struct *tty)
392{
393 struct usb_serial_port *port = tty->driver_data;
394 dbg("%s - port %d", __func__, port->number);
395
396 /* pass on to the driver specific version of this function */
397 if (port->serial->type->throttle)
398 port->serial->type->throttle(tty);
399}
400
401static void serial_unthrottle(struct tty_struct *tty)
402{
403 struct usb_serial_port *port = tty->driver_data;
404 dbg("%s - port %d", __func__, port->number);
405
406 /* pass on to the driver specific version of this function */
407 if (port->serial->type->unthrottle)
408 port->serial->type->unthrottle(tty);
409}
410
411static int serial_ioctl(struct tty_struct *tty,
412 unsigned int cmd, unsigned long arg)
413{
414 struct usb_serial_port *port = tty->driver_data;
415 int retval = -ENODEV;
416
417 dbg("%s - port %d, cmd 0x%.4x", __func__, port->number, cmd);
418
419 /* pass on to the driver specific version of this function
420 if it is available */
421 if (port->serial->type->ioctl) {
422 retval = port->serial->type->ioctl(tty, cmd, arg);
423 } else
424 retval = -ENOIOCTLCMD;
425 return retval;
426}
427
428static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
429{
430 struct usb_serial_port *port = tty->driver_data;
431 dbg("%s - port %d", __func__, port->number);
432
433 /* pass on to the driver specific version of this function
434 if it is available */
435 if (port->serial->type->set_termios)
436 port->serial->type->set_termios(tty, port, old);
437 else
438 tty_termios_copy_hw(tty->termios, old);
439}
440
441static int serial_break(struct tty_struct *tty, int break_state)
442{
443 struct usb_serial_port *port = tty->driver_data;
444
445 dbg("%s - port %d", __func__, port->number);
446
447 /* pass on to the driver specific version of this function
448 if it is available */
449 if (port->serial->type->break_ctl)
450 port->serial->type->break_ctl(tty, break_state);
451 return 0;
452}
453
454static int serial_proc_show(struct seq_file *m, void *v)
455{
456 struct usb_serial *serial;
457 int i;
458 char tmp[40];
459
460 dbg("%s", __func__);
461 seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
462 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
463 serial = usb_serial_get_by_index(i);
464 if (serial == NULL)
465 continue;
466
467 seq_printf(m, "%d:", i);
468 if (serial->type->driver.owner)
469 seq_printf(m, " module:%s",
470 module_name(serial->type->driver.owner));
471 seq_printf(m, " name:\"%s\"",
472 serial->type->description);
473 seq_printf(m, " vendor:%04x product:%04x",
474 le16_to_cpu(serial->dev->descriptor.idVendor),
475 le16_to_cpu(serial->dev->descriptor.idProduct));
476 seq_printf(m, " num_ports:%d", serial->num_ports);
477 seq_printf(m, " port:%d", i - serial->minor + 1);
478 usb_make_path(serial->dev, tmp, sizeof(tmp));
479 seq_printf(m, " path:%s", tmp);
480
481 seq_putc(m, '\n');
482 usb_serial_put(serial);
483 mutex_unlock(&serial->disc_mutex);
484 }
485 return 0;
486}
487
488static int serial_proc_open(struct inode *inode, struct file *file)
489{
490 return single_open(file, serial_proc_show, NULL);
491}
492
493static const struct file_operations serial_proc_fops = {
494 .owner = THIS_MODULE,
495 .open = serial_proc_open,
496 .read = seq_read,
497 .llseek = seq_lseek,
498 .release = single_release,
499};
500
501static int serial_tiocmget(struct tty_struct *tty)
502{
503 struct usb_serial_port *port = tty->driver_data;
504
505 dbg("%s - port %d", __func__, port->number);
506
507 if (port->serial->type->tiocmget)
508 return port->serial->type->tiocmget(tty);
509 return -EINVAL;
510}
511
512static int serial_tiocmset(struct tty_struct *tty,
513 unsigned int set, unsigned int clear)
514{
515 struct usb_serial_port *port = tty->driver_data;
516
517 dbg("%s - port %d", __func__, port->number);
518
519 if (port->serial->type->tiocmset)
520 return port->serial->type->tiocmset(tty, set, clear);
521 return -EINVAL;
522}
523
524static int serial_get_icount(struct tty_struct *tty,
525 struct serial_icounter_struct *icount)
526{
527 struct usb_serial_port *port = tty->driver_data;
528
529 dbg("%s - port %d", __func__, port->number);
530
531 if (port->serial->type->get_icount)
532 return port->serial->type->get_icount(tty, icount);
533 return -EINVAL;
534}
535
536/*
537 * We would be calling tty_wakeup here, but unfortunately some line
538 * disciplines have an annoying habit of calling tty->write from
539 * the write wakeup callback (e.g. n_hdlc.c).
540 */
541void usb_serial_port_softint(struct usb_serial_port *port)
542{
543 schedule_work(&port->work);
544}
545EXPORT_SYMBOL_GPL(usb_serial_port_softint);
546
547static void usb_serial_port_work(struct work_struct *work)
548{
549 struct usb_serial_port *port =
550 container_of(work, struct usb_serial_port, work);
551 struct tty_struct *tty;
552
553 dbg("%s - port %d", __func__, port->number);
554
555 tty = tty_port_tty_get(&port->port);
556 if (!tty)
557 return;
558
559 tty_wakeup(tty);
560 tty_kref_put(tty);
561}
562
563static void kill_traffic(struct usb_serial_port *port)
564{
565 int i;
566
567 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i)
568 usb_kill_urb(port->read_urbs[i]);
569 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
570 usb_kill_urb(port->write_urbs[i]);
571 /*
572 * This is tricky.
573 * Some drivers submit the read_urb in the
574 * handler for the write_urb or vice versa
575 * this order determines the order in which
576 * usb_kill_urb() must be used to reliably
577 * kill the URBs. As it is unknown here,
578 * both orders must be used in turn.
579 * The call below is not redundant.
580 */
581 usb_kill_urb(port->read_urb);
582 usb_kill_urb(port->interrupt_in_urb);
583 usb_kill_urb(port->interrupt_out_urb);
584}
585
586static void port_release(struct device *dev)
587{
588 struct usb_serial_port *port = to_usb_serial_port(dev);
589 int i;
590
591 dbg ("%s - %s", __func__, dev_name(dev));
592
593 /*
594 * Stop all the traffic before cancelling the work, so that
595 * nobody will restart it by calling usb_serial_port_softint.
596 */
597 kill_traffic(port);
598 cancel_work_sync(&port->work);
599
600 usb_free_urb(port->interrupt_in_urb);
601 usb_free_urb(port->interrupt_out_urb);
602 for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) {
603 usb_free_urb(port->read_urbs[i]);
604 kfree(port->bulk_in_buffers[i]);
605 }
606 for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) {
607 usb_free_urb(port->write_urbs[i]);
608 kfree(port->bulk_out_buffers[i]);
609 }
610 kfifo_free(&port->write_fifo);
611 kfree(port->interrupt_in_buffer);
612 kfree(port->interrupt_out_buffer);
613 kfree(port);
614}
615
616static struct usb_serial *create_serial(struct usb_device *dev,
617 struct usb_interface *interface,
618 struct usb_serial_driver *driver)
619{
620 struct usb_serial *serial;
621
622 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
623 if (!serial) {
624 dev_err(&dev->dev, "%s - out of memory\n", __func__);
625 return NULL;
626 }
627 serial->dev = usb_get_dev(dev);
628 serial->type = driver;
629 serial->interface = usb_get_intf(interface);
630 kref_init(&serial->kref);
631 mutex_init(&serial->disc_mutex);
632 serial->minor = SERIAL_TTY_NO_MINOR;
633
634 return serial;
635}
636
637static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
638 struct usb_serial_driver *drv)
639{
640 struct usb_dynid *dynid;
641
642 spin_lock(&drv->dynids.lock);
643 list_for_each_entry(dynid, &drv->dynids.list, node) {
644 if (usb_match_one_id(intf, &dynid->id)) {
645 spin_unlock(&drv->dynids.lock);
646 return &dynid->id;
647 }
648 }
649 spin_unlock(&drv->dynids.lock);
650 return NULL;
651}
652
653static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
654 struct usb_interface *intf)
655{
656 const struct usb_device_id *id;
657
658 id = usb_match_id(intf, drv->id_table);
659 if (id) {
660 dbg("static descriptor matches");
661 goto exit;
662 }
663 id = match_dynamic_id(intf, drv);
664 if (id)
665 dbg("dynamic descriptor matches");
666exit:
667 return id;
668}
669
670/* Caller must hold table_lock */
671static struct usb_serial_driver *search_serial_device(
672 struct usb_interface *iface)
673{
674 const struct usb_device_id *id = NULL;
675 struct usb_serial_driver *drv;
676 struct usb_driver *driver = to_usb_driver(iface->dev.driver);
677
678 /* Check if the usb id matches a known device */
679 list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
680 if (drv->usb_driver == driver)
681 id = get_iface_id(drv, iface);
682 if (id)
683 return drv;
684 }
685
686 return NULL;
687}
688
689static int serial_carrier_raised(struct tty_port *port)
690{
691 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
692 struct usb_serial_driver *drv = p->serial->type;
693
694 if (drv->carrier_raised)
695 return drv->carrier_raised(p);
696 /* No carrier control - don't block */
697 return 1;
698}
699
700static void serial_dtr_rts(struct tty_port *port, int on)
701{
702 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
703 struct usb_serial *serial = p->serial;
704 struct usb_serial_driver *drv = serial->type;
705
706 if (!drv->dtr_rts)
707 return;
708 /*
709 * Work-around bug in the tty-layer which can result in dtr_rts
710 * being called after a disconnect (and tty_unregister_device
711 * has returned). Remove once bug has been squashed.
712 */
713 mutex_lock(&serial->disc_mutex);
714 if (!serial->disconnected)
715 drv->dtr_rts(p, on);
716 mutex_unlock(&serial->disc_mutex);
717}
718
719static const struct tty_port_operations serial_port_ops = {
720 .carrier_raised = serial_carrier_raised,
721 .dtr_rts = serial_dtr_rts,
722 .activate = serial_activate,
723 .shutdown = serial_down,
724};
725
726int usb_serial_probe(struct usb_interface *interface,
727 const struct usb_device_id *id)
728{
729 struct usb_device *dev = interface_to_usbdev(interface);
730 struct usb_serial *serial = NULL;
731 struct usb_serial_port *port;
732 struct usb_host_interface *iface_desc;
733 struct usb_endpoint_descriptor *endpoint;
734 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
735 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
736 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
737 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
738 struct usb_serial_driver *type = NULL;
739 int retval;
740 unsigned int minor;
741 int buffer_size;
742 int i;
743 int j;
744 int num_interrupt_in = 0;
745 int num_interrupt_out = 0;
746 int num_bulk_in = 0;
747 int num_bulk_out = 0;
748 int num_ports = 0;
749 int max_endpoints;
750
751 mutex_lock(&table_lock);
752 type = search_serial_device(interface);
753 if (!type) {
754 mutex_unlock(&table_lock);
755 dbg("none matched");
756 return -ENODEV;
757 }
758
759 if (!try_module_get(type->driver.owner)) {
760 mutex_unlock(&table_lock);
761 dev_err(&interface->dev, "module get failed, exiting\n");
762 return -EIO;
763 }
764 mutex_unlock(&table_lock);
765
766 serial = create_serial(dev, interface, type);
767 if (!serial) {
768 module_put(type->driver.owner);
769 dev_err(&interface->dev, "%s - out of memory\n", __func__);
770 return -ENOMEM;
771 }
772
773 /* if this device type has a probe function, call it */
774 if (type->probe) {
775 const struct usb_device_id *id;
776
777 id = get_iface_id(type, interface);
778 retval = type->probe(serial, id);
779
780 if (retval) {
781 dbg("sub driver rejected device");
782 usb_serial_put(serial);
783 module_put(type->driver.owner);
784 return retval;
785 }
786 }
787
788 /* descriptor matches, let's find the endpoints needed */
789 /* check out the endpoints */
790 iface_desc = interface->cur_altsetting;
791 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
792 endpoint = &iface_desc->endpoint[i].desc;
793
794 if (usb_endpoint_is_bulk_in(endpoint)) {
795 /* we found a bulk in endpoint */
796 dbg("found bulk in on endpoint %d", i);
797 if (num_bulk_in < MAX_NUM_PORTS) {
798 bulk_in_endpoint[num_bulk_in] = endpoint;
799 ++num_bulk_in;
800 }
801 }
802
803 if (usb_endpoint_is_bulk_out(endpoint)) {
804 /* we found a bulk out endpoint */
805 dbg("found bulk out on endpoint %d", i);
806 if (num_bulk_out < MAX_NUM_PORTS) {
807 bulk_out_endpoint[num_bulk_out] = endpoint;
808 ++num_bulk_out;
809 }
810 }
811
812 if (usb_endpoint_is_int_in(endpoint)) {
813 /* we found a interrupt in endpoint */
814 dbg("found interrupt in on endpoint %d", i);
815 if (num_interrupt_in < MAX_NUM_PORTS) {
816 interrupt_in_endpoint[num_interrupt_in] = endpoint;
817 ++num_interrupt_in;
818 }
819 }
820
821 if (usb_endpoint_is_int_out(endpoint)) {
822 /* we found an interrupt out endpoint */
823 dbg("found interrupt out on endpoint %d", i);
824 if (num_interrupt_out < MAX_NUM_PORTS) {
825 interrupt_out_endpoint[num_interrupt_out] = endpoint;
826 ++num_interrupt_out;
827 }
828 }
829 }
830
831#if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
832 /* BEGIN HORRIBLE HACK FOR PL2303 */
833 /* this is needed due to the looney way its endpoints are set up */
834 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
835 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
836 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
837 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
838 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
839 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
840 ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
841 (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
842 if (interface != dev->actconfig->interface[0]) {
843 /* check out the endpoints of the other interface*/
844 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
845 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
846 endpoint = &iface_desc->endpoint[i].desc;
847 if (usb_endpoint_is_int_in(endpoint)) {
848 /* we found a interrupt in endpoint */
849 dbg("found interrupt in for Prolific device on separate interface");
850 if (num_interrupt_in < MAX_NUM_PORTS) {
851 interrupt_in_endpoint[num_interrupt_in] = endpoint;
852 ++num_interrupt_in;
853 }
854 }
855 }
856 }
857
858 /* Now make sure the PL-2303 is configured correctly.
859 * If not, give up now and hope this hack will work
860 * properly during a later invocation of usb_serial_probe
861 */
862 if (num_bulk_in == 0 || num_bulk_out == 0) {
863 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
864 usb_serial_put(serial);
865 module_put(type->driver.owner);
866 return -ENODEV;
867 }
868 }
869 /* END HORRIBLE HACK FOR PL2303 */
870#endif
871
872#ifdef CONFIG_USB_SERIAL_GENERIC
873 if (type == &usb_serial_generic_device) {
874 num_ports = num_bulk_out;
875 if (num_ports == 0) {
876 dev_err(&interface->dev,
877 "Generic device with no bulk out, not allowed.\n");
878 usb_serial_put(serial);
879 module_put(type->driver.owner);
880 return -EIO;
881 }
882 }
883#endif
884 if (!num_ports) {
885 /* if this device type has a calc_num_ports function, call it */
886 if (type->calc_num_ports)
887 num_ports = type->calc_num_ports(serial);
888 if (!num_ports)
889 num_ports = type->num_ports;
890 }
891
892 if (num_ports > MAX_NUM_PORTS) {
893 dev_warn(&interface->dev, "too many ports requested: %d\n", num_ports);
894 num_ports = MAX_NUM_PORTS;
895 }
896
897 serial->num_ports = num_ports;
898 serial->num_bulk_in = num_bulk_in;
899 serial->num_bulk_out = num_bulk_out;
900 serial->num_interrupt_in = num_interrupt_in;
901 serial->num_interrupt_out = num_interrupt_out;
902
903 /* found all that we need */
904 dev_info(&interface->dev, "%s converter detected\n",
905 type->description);
906
907 /* create our ports, we need as many as the max endpoints */
908 /* we don't use num_ports here because some devices have more
909 endpoint pairs than ports */
910 max_endpoints = max(num_bulk_in, num_bulk_out);
911 max_endpoints = max(max_endpoints, num_interrupt_in);
912 max_endpoints = max(max_endpoints, num_interrupt_out);
913 max_endpoints = max(max_endpoints, (int)serial->num_ports);
914 serial->num_port_pointers = max_endpoints;
915
916 dbg("%s - setting up %d port structures for this device",
917 __func__, max_endpoints);
918 for (i = 0; i < max_endpoints; ++i) {
919 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
920 if (!port)
921 goto probe_error;
922 tty_port_init(&port->port);
923 port->port.ops = &serial_port_ops;
924 port->serial = serial;
925 spin_lock_init(&port->lock);
926 init_waitqueue_head(&port->delta_msr_wait);
927 /* Keep this for private driver use for the moment but
928 should probably go away */
929 INIT_WORK(&port->work, usb_serial_port_work);
930 serial->port[i] = port;
931 port->dev.parent = &interface->dev;
932 port->dev.driver = NULL;
933 port->dev.bus = &usb_serial_bus_type;
934 port->dev.release = &port_release;
935 device_initialize(&port->dev);
936 }
937
938 /* set up the endpoint information */
939 for (i = 0; i < num_bulk_in; ++i) {
940 endpoint = bulk_in_endpoint[i];
941 port = serial->port[i];
942 buffer_size = max_t(int, serial->type->bulk_in_size,
943 usb_endpoint_maxp(endpoint));
944 port->bulk_in_size = buffer_size;
945 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
946
947 for (j = 0; j < ARRAY_SIZE(port->read_urbs); ++j) {
948 set_bit(j, &port->read_urbs_free);
949 port->read_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
950 if (!port->read_urbs[j]) {
951 dev_err(&interface->dev,
952 "No free urbs available\n");
953 goto probe_error;
954 }
955 port->bulk_in_buffers[j] = kmalloc(buffer_size,
956 GFP_KERNEL);
957 if (!port->bulk_in_buffers[j]) {
958 dev_err(&interface->dev,
959 "Couldn't allocate bulk_in_buffer\n");
960 goto probe_error;
961 }
962 usb_fill_bulk_urb(port->read_urbs[j], dev,
963 usb_rcvbulkpipe(dev,
964 endpoint->bEndpointAddress),
965 port->bulk_in_buffers[j], buffer_size,
966 serial->type->read_bulk_callback,
967 port);
968 }
969
970 port->read_urb = port->read_urbs[0];
971 port->bulk_in_buffer = port->bulk_in_buffers[0];
972 }
973
974 for (i = 0; i < num_bulk_out; ++i) {
975 endpoint = bulk_out_endpoint[i];
976 port = serial->port[i];
977 if (kfifo_alloc(&port->write_fifo, PAGE_SIZE, GFP_KERNEL))
978 goto probe_error;
979 buffer_size = serial->type->bulk_out_size;
980 if (!buffer_size)
981 buffer_size = usb_endpoint_maxp(endpoint);
982 port->bulk_out_size = buffer_size;
983 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
984
985 for (j = 0; j < ARRAY_SIZE(port->write_urbs); ++j) {
986 set_bit(j, &port->write_urbs_free);
987 port->write_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
988 if (!port->write_urbs[j]) {
989 dev_err(&interface->dev,
990 "No free urbs available\n");
991 goto probe_error;
992 }
993 port->bulk_out_buffers[j] = kmalloc(buffer_size,
994 GFP_KERNEL);
995 if (!port->bulk_out_buffers[j]) {
996 dev_err(&interface->dev,
997 "Couldn't allocate bulk_out_buffer\n");
998 goto probe_error;
999 }
1000 usb_fill_bulk_urb(port->write_urbs[j], dev,
1001 usb_sndbulkpipe(dev,
1002 endpoint->bEndpointAddress),
1003 port->bulk_out_buffers[j], buffer_size,
1004 serial->type->write_bulk_callback,
1005 port);
1006 }
1007
1008 port->write_urb = port->write_urbs[0];
1009 port->bulk_out_buffer = port->bulk_out_buffers[0];
1010 }
1011
1012 if (serial->type->read_int_callback) {
1013 for (i = 0; i < num_interrupt_in; ++i) {
1014 endpoint = interrupt_in_endpoint[i];
1015 port = serial->port[i];
1016 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
1017 if (!port->interrupt_in_urb) {
1018 dev_err(&interface->dev,
1019 "No free urbs available\n");
1020 goto probe_error;
1021 }
1022 buffer_size = usb_endpoint_maxp(endpoint);
1023 port->interrupt_in_endpointAddress =
1024 endpoint->bEndpointAddress;
1025 port->interrupt_in_buffer = kmalloc(buffer_size,
1026 GFP_KERNEL);
1027 if (!port->interrupt_in_buffer) {
1028 dev_err(&interface->dev,
1029 "Couldn't allocate interrupt_in_buffer\n");
1030 goto probe_error;
1031 }
1032 usb_fill_int_urb(port->interrupt_in_urb, dev,
1033 usb_rcvintpipe(dev,
1034 endpoint->bEndpointAddress),
1035 port->interrupt_in_buffer, buffer_size,
1036 serial->type->read_int_callback, port,
1037 endpoint->bInterval);
1038 }
1039 } else if (num_interrupt_in) {
1040 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
1041 }
1042
1043 if (serial->type->write_int_callback) {
1044 for (i = 0; i < num_interrupt_out; ++i) {
1045 endpoint = interrupt_out_endpoint[i];
1046 port = serial->port[i];
1047 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
1048 if (!port->interrupt_out_urb) {
1049 dev_err(&interface->dev,
1050 "No free urbs available\n");
1051 goto probe_error;
1052 }
1053 buffer_size = usb_endpoint_maxp(endpoint);
1054 port->interrupt_out_size = buffer_size;
1055 port->interrupt_out_endpointAddress =
1056 endpoint->bEndpointAddress;
1057 port->interrupt_out_buffer = kmalloc(buffer_size,
1058 GFP_KERNEL);
1059 if (!port->interrupt_out_buffer) {
1060 dev_err(&interface->dev,
1061 "Couldn't allocate interrupt_out_buffer\n");
1062 goto probe_error;
1063 }
1064 usb_fill_int_urb(port->interrupt_out_urb, dev,
1065 usb_sndintpipe(dev,
1066 endpoint->bEndpointAddress),
1067 port->interrupt_out_buffer, buffer_size,
1068 serial->type->write_int_callback, port,
1069 endpoint->bInterval);
1070 }
1071 } else if (num_interrupt_out) {
1072 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
1073 }
1074
1075 /* if this device type has an attach function, call it */
1076 if (type->attach) {
1077 retval = type->attach(serial);
1078 if (retval < 0)
1079 goto probe_error;
1080 serial->attached = 1;
1081 if (retval > 0) {
1082 /* quietly accept this device, but don't bind to a
1083 serial port as it's about to disappear */
1084 serial->num_ports = 0;
1085 goto exit;
1086 }
1087 } else {
1088 serial->attached = 1;
1089 }
1090
1091 /* Avoid race with tty_open and serial_install by setting the
1092 * disconnected flag and not clearing it until all ports have been
1093 * registered.
1094 */
1095 serial->disconnected = 1;
1096
1097 if (get_free_serial(serial, num_ports, &minor) == NULL) {
1098 dev_err(&interface->dev, "No more free serial devices\n");
1099 goto probe_error;
1100 }
1101 serial->minor = minor;
1102
1103 /* register all of the individual ports with the driver core */
1104 for (i = 0; i < num_ports; ++i) {
1105 port = serial->port[i];
1106 dev_set_name(&port->dev, "ttyUSB%d", port->number);
1107 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
1108 device_enable_async_suspend(&port->dev);
1109
1110 retval = device_add(&port->dev);
1111 if (retval)
1112 dev_err(&port->dev, "Error registering port device, "
1113 "continuing\n");
1114 }
1115
1116 serial->disconnected = 0;
1117
1118 usb_serial_console_init(debug, minor);
1119
1120exit:
1121 /* success */
1122 usb_set_intfdata(interface, serial);
1123 module_put(type->driver.owner);
1124 return 0;
1125
1126probe_error:
1127 usb_serial_put(serial);
1128 module_put(type->driver.owner);
1129 return -EIO;
1130}
1131EXPORT_SYMBOL_GPL(usb_serial_probe);
1132
1133void usb_serial_disconnect(struct usb_interface *interface)
1134{
1135 int i;
1136 struct usb_serial *serial = usb_get_intfdata(interface);
1137 struct device *dev = &interface->dev;
1138 struct usb_serial_port *port;
1139
1140 usb_serial_console_disconnect(serial);
1141 dbg("%s", __func__);
1142
1143 mutex_lock(&serial->disc_mutex);
1144 usb_set_intfdata(interface, NULL);
1145 /* must set a flag, to signal subdrivers */
1146 serial->disconnected = 1;
1147 mutex_unlock(&serial->disc_mutex);
1148
1149 for (i = 0; i < serial->num_ports; ++i) {
1150 port = serial->port[i];
1151 if (port) {
1152 struct tty_struct *tty = tty_port_tty_get(&port->port);
1153 if (tty) {
1154 tty_vhangup(tty);
1155 tty_kref_put(tty);
1156 }
1157 kill_traffic(port);
1158 cancel_work_sync(&port->work);
1159 if (device_is_registered(&port->dev))
1160 device_del(&port->dev);
1161 }
1162 }
1163 serial->type->disconnect(serial);
1164
1165 /* let the last holder of this object cause it to be cleaned up */
1166 usb_serial_put(serial);
1167 dev_info(dev, "device disconnected\n");
1168}
1169EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1170
1171int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1172{
1173 struct usb_serial *serial = usb_get_intfdata(intf);
1174 struct usb_serial_port *port;
1175 int i, r = 0;
1176
1177 serial->suspending = 1;
1178
1179 if (serial->type->suspend) {
1180 r = serial->type->suspend(serial, message);
1181 if (r < 0) {
1182 serial->suspending = 0;
1183 goto err_out;
1184 }
1185 }
1186
1187 for (i = 0; i < serial->num_ports; ++i) {
1188 port = serial->port[i];
1189 if (port)
1190 kill_traffic(port);
1191 }
1192
1193err_out:
1194 return r;
1195}
1196EXPORT_SYMBOL(usb_serial_suspend);
1197
1198int usb_serial_resume(struct usb_interface *intf)
1199{
1200 struct usb_serial *serial = usb_get_intfdata(intf);
1201 int rv;
1202
1203 serial->suspending = 0;
1204 if (serial->type->resume)
1205 rv = serial->type->resume(serial);
1206 else
1207 rv = usb_serial_generic_resume(serial);
1208
1209 return rv;
1210}
1211EXPORT_SYMBOL(usb_serial_resume);
1212
1213static const struct tty_operations serial_ops = {
1214 .open = serial_open,
1215 .close = serial_close,
1216 .write = serial_write,
1217 .hangup = serial_hangup,
1218 .write_room = serial_write_room,
1219 .ioctl = serial_ioctl,
1220 .set_termios = serial_set_termios,
1221 .throttle = serial_throttle,
1222 .unthrottle = serial_unthrottle,
1223 .break_ctl = serial_break,
1224 .chars_in_buffer = serial_chars_in_buffer,
1225 .tiocmget = serial_tiocmget,
1226 .tiocmset = serial_tiocmset,
1227 .get_icount = serial_get_icount,
1228 .cleanup = serial_cleanup,
1229 .install = serial_install,
1230 .proc_fops = &serial_proc_fops,
1231};
1232
1233
1234struct tty_driver *usb_serial_tty_driver;
1235
1236static int __init usb_serial_init(void)
1237{
1238 int i;
1239 int result;
1240
1241 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1242 if (!usb_serial_tty_driver)
1243 return -ENOMEM;
1244
1245 /* Initialize our global data */
1246 for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1247 serial_table[i] = NULL;
1248
1249 result = bus_register(&usb_serial_bus_type);
1250 if (result) {
1251 printk(KERN_ERR "usb-serial: %s - registering bus driver "
1252 "failed\n", __func__);
1253 goto exit_bus;
1254 }
1255
1256 usb_serial_tty_driver->driver_name = "usbserial";
1257 usb_serial_tty_driver->name = "ttyUSB";
1258 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1259 usb_serial_tty_driver->minor_start = 0;
1260 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1261 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1262 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1263 TTY_DRIVER_DYNAMIC_DEV;
1264 usb_serial_tty_driver->init_termios = tty_std_termios;
1265 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1266 | HUPCL | CLOCAL;
1267 usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1268 usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1269 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1270 result = tty_register_driver(usb_serial_tty_driver);
1271 if (result) {
1272 printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n",
1273 __func__);
1274 goto exit_reg_driver;
1275 }
1276
1277 /* register the USB driver */
1278 result = usb_register(&usb_serial_driver);
1279 if (result < 0) {
1280 printk(KERN_ERR "usb-serial: %s - usb_register failed\n",
1281 __func__);
1282 goto exit_tty;
1283 }
1284
1285 /* register the generic driver, if we should */
1286 result = usb_serial_generic_register(debug);
1287 if (result < 0) {
1288 printk(KERN_ERR "usb-serial: %s - registering generic "
1289 "driver failed\n", __func__);
1290 goto exit_generic;
1291 }
1292
1293 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1294
1295 return result;
1296
1297exit_generic:
1298 usb_deregister(&usb_serial_driver);
1299
1300exit_tty:
1301 tty_unregister_driver(usb_serial_tty_driver);
1302
1303exit_reg_driver:
1304 bus_unregister(&usb_serial_bus_type);
1305
1306exit_bus:
1307 printk(KERN_ERR "usb-serial: %s - returning with error %d\n",
1308 __func__, result);
1309 put_tty_driver(usb_serial_tty_driver);
1310 return result;
1311}
1312
1313
1314static void __exit usb_serial_exit(void)
1315{
1316 usb_serial_console_exit();
1317
1318 usb_serial_generic_deregister();
1319
1320 usb_deregister(&usb_serial_driver);
1321 tty_unregister_driver(usb_serial_tty_driver);
1322 put_tty_driver(usb_serial_tty_driver);
1323 bus_unregister(&usb_serial_bus_type);
1324}
1325
1326
1327module_init(usb_serial_init);
1328module_exit(usb_serial_exit);
1329
1330#define set_to_generic_if_null(type, function) \
1331 do { \
1332 if (!type->function) { \
1333 type->function = usb_serial_generic_##function; \
1334 dbg("Had to override the " #function \
1335 " usb serial operation with the generic one.");\
1336 } \
1337 } while (0)
1338
1339static void fixup_generic(struct usb_serial_driver *device)
1340{
1341 set_to_generic_if_null(device, open);
1342 set_to_generic_if_null(device, write);
1343 set_to_generic_if_null(device, close);
1344 set_to_generic_if_null(device, write_room);
1345 set_to_generic_if_null(device, chars_in_buffer);
1346 set_to_generic_if_null(device, read_bulk_callback);
1347 set_to_generic_if_null(device, write_bulk_callback);
1348 set_to_generic_if_null(device, disconnect);
1349 set_to_generic_if_null(device, release);
1350 set_to_generic_if_null(device, process_read_urb);
1351 set_to_generic_if_null(device, prepare_write_buffer);
1352}
1353
1354static int usb_serial_register(struct usb_serial_driver *driver)
1355{
1356 int retval;
1357
1358 if (usb_disabled())
1359 return -ENODEV;
1360
1361 fixup_generic(driver);
1362
1363 if (!driver->description)
1364 driver->description = driver->driver.name;
1365 if (!driver->usb_driver) {
1366 WARN(1, "Serial driver %s has no usb_driver\n",
1367 driver->description);
1368 return -EINVAL;
1369 }
1370
1371 /* Add this device to our list of devices */
1372 mutex_lock(&table_lock);
1373 list_add(&driver->driver_list, &usb_serial_driver_list);
1374
1375 retval = usb_serial_bus_register(driver);
1376 if (retval) {
1377 printk(KERN_ERR "usb-serial: problem %d when registering "
1378 "driver %s\n", retval, driver->description);
1379 list_del(&driver->driver_list);
1380 } else
1381 printk(KERN_INFO "USB Serial support registered for %s\n",
1382 driver->description);
1383
1384 mutex_unlock(&table_lock);
1385 return retval;
1386}
1387
1388static void usb_serial_deregister(struct usb_serial_driver *device)
1389{
1390 printk(KERN_INFO "USB Serial deregistering driver %s\n",
1391 device->description);
1392 mutex_lock(&table_lock);
1393 list_del(&device->driver_list);
1394 usb_serial_bus_deregister(device);
1395 mutex_unlock(&table_lock);
1396}
1397
1398/**
1399 * usb_serial_register_drivers - register drivers for a usb-serial module
1400 * @udriver: usb_driver used for matching devices/interfaces
1401 * @serial_drivers: NULL-terminated array of pointers to drivers to be registered
1402 *
1403 * Registers @udriver and all the drivers in the @serial_drivers array.
1404 * Automatically fills in the .no_dynamic_id and PM fields in @udriver and
1405 * the .usb_driver field in each serial driver.
1406 */
1407int usb_serial_register_drivers(struct usb_driver *udriver,
1408 struct usb_serial_driver * const serial_drivers[])
1409{
1410 int rc;
1411 const struct usb_device_id *saved_id_table;
1412 struct usb_serial_driver * const *sd;
1413
1414 /*
1415 * udriver must be registered before any of the serial drivers,
1416 * because the store_new_id() routine for the serial drivers (in
1417 * bus.c) probes udriver.
1418 *
1419 * Performance hack: We don't want udriver to be probed until
1420 * the serial drivers are registered, because the probe would
1421 * simply fail for lack of a matching serial driver.
1422 * Therefore save off udriver's id_table until we are all set.
1423 *
1424 * Suspend/resume support is implemented in the usb-serial core,
1425 * so fill in the PM-related fields in udriver.
1426 */
1427 saved_id_table = udriver->id_table;
1428 udriver->id_table = NULL;
1429
1430 udriver->no_dynamic_id = 1;
1431 udriver->supports_autosuspend = 1;
1432 udriver->suspend = usb_serial_suspend;
1433 udriver->resume = usb_serial_resume;
1434 rc = usb_register(udriver);
1435 if (rc)
1436 return rc;
1437
1438 for (sd = serial_drivers; *sd; ++sd) {
1439 (*sd)->usb_driver = udriver;
1440 rc = usb_serial_register(*sd);
1441 if (rc)
1442 goto failed;
1443 }
1444
1445 /* Now restore udriver's id_table and look for matches */
1446 udriver->id_table = saved_id_table;
1447 rc = driver_attach(&udriver->drvwrap.driver);
1448 return 0;
1449
1450 failed:
1451 while (sd-- > serial_drivers)
1452 usb_serial_deregister(*sd);
1453 usb_deregister(udriver);
1454 return rc;
1455}
1456EXPORT_SYMBOL_GPL(usb_serial_register_drivers);
1457
1458/**
1459 * usb_serial_deregister_drivers - deregister drivers for a usb-serial module
1460 * @udriver: usb_driver to unregister
1461 * @serial_drivers: NULL-terminated array of pointers to drivers to be deregistered
1462 *
1463 * Deregisters @udriver and all the drivers in the @serial_drivers array.
1464 */
1465void usb_serial_deregister_drivers(struct usb_driver *udriver,
1466 struct usb_serial_driver * const serial_drivers[])
1467{
1468 for (; *serial_drivers; ++serial_drivers)
1469 usb_serial_deregister(*serial_drivers);
1470 usb_deregister(udriver);
1471}
1472EXPORT_SYMBOL_GPL(usb_serial_deregister_drivers);
1473
1474/* Module information */
1475MODULE_AUTHOR(DRIVER_AUTHOR);
1476MODULE_DESCRIPTION(DRIVER_DESC);
1477MODULE_LICENSE("GPL");
1478
1479module_param(debug, bool, S_IRUGO | S_IWUSR);
1480MODULE_PARM_DESC(debug, "Debug enabled or not");