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