regmap: rbtree: Fixed node range check on sync
[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_throttle(struct tty_struct *tty)
379 {
380         struct usb_serial_port *port = tty->driver_data;
381
382         dev_dbg(tty->dev, "%s\n", __func__);
383
384         if (port->serial->type->throttle)
385                 port->serial->type->throttle(tty);
386 }
387
388 static void serial_unthrottle(struct tty_struct *tty)
389 {
390         struct usb_serial_port *port = tty->driver_data;
391
392         dev_dbg(tty->dev, "%s\n", __func__);
393
394         if (port->serial->type->unthrottle)
395                 port->serial->type->unthrottle(tty);
396 }
397
398 static int serial_ioctl(struct tty_struct *tty,
399                                         unsigned int cmd, unsigned long arg)
400 {
401         struct usb_serial_port *port = tty->driver_data;
402         int retval = -ENODEV;
403
404         dev_dbg(tty->dev, "%s - cmd 0x%.4x\n", __func__, cmd);
405
406         switch (cmd) {
407         case TIOCMIWAIT:
408                 if (port->serial->type->tiocmiwait)
409                         retval = port->serial->type->tiocmiwait(tty, arg);
410                 break;
411         default:
412                 if (port->serial->type->ioctl)
413                         retval = port->serial->type->ioctl(tty, cmd, arg);
414                 else
415                         retval = -ENOIOCTLCMD;
416         }
417
418         return retval;
419 }
420
421 static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
422 {
423         struct usb_serial_port *port = tty->driver_data;
424
425         dev_dbg(tty->dev, "%s\n", __func__);
426
427         if (port->serial->type->set_termios)
428                 port->serial->type->set_termios(tty, port, old);
429         else
430                 tty_termios_copy_hw(&tty->termios, old);
431 }
432
433 static int serial_break(struct tty_struct *tty, int break_state)
434 {
435         struct usb_serial_port *port = tty->driver_data;
436
437         dev_dbg(tty->dev, "%s\n", __func__);
438
439         if (port->serial->type->break_ctl)
440                 port->serial->type->break_ctl(tty, break_state);
441
442         return 0;
443 }
444
445 static int serial_proc_show(struct seq_file *m, void *v)
446 {
447         struct usb_serial *serial;
448         int i;
449         char tmp[40];
450
451         seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
452         for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
453                 serial = usb_serial_get_by_index(i);
454                 if (serial == NULL)
455                         continue;
456
457                 seq_printf(m, "%d:", i);
458                 if (serial->type->driver.owner)
459                         seq_printf(m, " module:%s",
460                                 module_name(serial->type->driver.owner));
461                 seq_printf(m, " name:\"%s\"",
462                                 serial->type->description);
463                 seq_printf(m, " vendor:%04x product:%04x",
464                         le16_to_cpu(serial->dev->descriptor.idVendor),
465                         le16_to_cpu(serial->dev->descriptor.idProduct));
466                 seq_printf(m, " num_ports:%d", serial->num_ports);
467                 seq_printf(m, " port:%d", i - serial->minor + 1);
468                 usb_make_path(serial->dev, tmp, sizeof(tmp));
469                 seq_printf(m, " path:%s", tmp);
470
471                 seq_putc(m, '\n');
472                 usb_serial_put(serial);
473                 mutex_unlock(&serial->disc_mutex);
474         }
475         return 0;
476 }
477
478 static int serial_proc_open(struct inode *inode, struct file *file)
479 {
480         return single_open(file, serial_proc_show, NULL);
481 }
482
483 static const struct file_operations serial_proc_fops = {
484         .owner          = THIS_MODULE,
485         .open           = serial_proc_open,
486         .read           = seq_read,
487         .llseek         = seq_lseek,
488         .release        = single_release,
489 };
490
491 static int serial_tiocmget(struct tty_struct *tty)
492 {
493         struct usb_serial_port *port = tty->driver_data;
494
495         dev_dbg(tty->dev, "%s\n", __func__);
496
497         if (port->serial->type->tiocmget)
498                 return port->serial->type->tiocmget(tty);
499         return -EINVAL;
500 }
501
502 static int serial_tiocmset(struct tty_struct *tty,
503                             unsigned int set, unsigned int clear)
504 {
505         struct usb_serial_port *port = tty->driver_data;
506
507         dev_dbg(tty->dev, "%s\n", __func__);
508
509         if (port->serial->type->tiocmset)
510                 return port->serial->type->tiocmset(tty, set, clear);
511         return -EINVAL;
512 }
513
514 static int serial_get_icount(struct tty_struct *tty,
515                                 struct serial_icounter_struct *icount)
516 {
517         struct usb_serial_port *port = tty->driver_data;
518
519         dev_dbg(tty->dev, "%s\n", __func__);
520
521         if (port->serial->type->get_icount)
522                 return port->serial->type->get_icount(tty, icount);
523         return -EINVAL;
524 }
525
526 /*
527  * We would be calling tty_wakeup here, but unfortunately some line
528  * disciplines have an annoying habit of calling tty->write from
529  * the write wakeup callback (e.g. n_hdlc.c).
530  */
531 void usb_serial_port_softint(struct usb_serial_port *port)
532 {
533         schedule_work(&port->work);
534 }
535 EXPORT_SYMBOL_GPL(usb_serial_port_softint);
536
537 static void usb_serial_port_work(struct work_struct *work)
538 {
539         struct usb_serial_port *port =
540                 container_of(work, struct usb_serial_port, work);
541
542         tty_port_tty_wakeup(&port->port);
543 }
544
545 static void usb_serial_port_poison_urbs(struct usb_serial_port *port)
546 {
547         int i;
548
549         for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i)
550                 usb_poison_urb(port->read_urbs[i]);
551         for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
552                 usb_poison_urb(port->write_urbs[i]);
553
554         usb_poison_urb(port->interrupt_in_urb);
555         usb_poison_urb(port->interrupt_out_urb);
556 }
557
558 static void usb_serial_port_unpoison_urbs(struct usb_serial_port *port)
559 {
560         int i;
561
562         for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i)
563                 usb_unpoison_urb(port->read_urbs[i]);
564         for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
565                 usb_unpoison_urb(port->write_urbs[i]);
566
567         usb_unpoison_urb(port->interrupt_in_urb);
568         usb_unpoison_urb(port->interrupt_out_urb);
569 }
570
571 static void usb_serial_port_release(struct device *dev)
572 {
573         struct usb_serial_port *port = to_usb_serial_port(dev);
574         int i;
575
576         dev_dbg(dev, "%s\n", __func__);
577
578         usb_free_urb(port->interrupt_in_urb);
579         usb_free_urb(port->interrupt_out_urb);
580         for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) {
581                 usb_free_urb(port->read_urbs[i]);
582                 kfree(port->bulk_in_buffers[i]);
583         }
584         for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) {
585                 usb_free_urb(port->write_urbs[i]);
586                 kfree(port->bulk_out_buffers[i]);
587         }
588         kfifo_free(&port->write_fifo);
589         kfree(port->interrupt_in_buffer);
590         kfree(port->interrupt_out_buffer);
591         tty_port_destroy(&port->port);
592         kfree(port);
593 }
594
595 static struct usb_serial *create_serial(struct usb_device *dev,
596                                         struct usb_interface *interface,
597                                         struct usb_serial_driver *driver)
598 {
599         struct usb_serial *serial;
600
601         serial = kzalloc(sizeof(*serial), GFP_KERNEL);
602         if (!serial)
603                 return NULL;
604         serial->dev = usb_get_dev(dev);
605         serial->type = driver;
606         serial->interface = usb_get_intf(interface);
607         kref_init(&serial->kref);
608         mutex_init(&serial->disc_mutex);
609         serial->minor = SERIAL_TTY_NO_MINOR;
610
611         return serial;
612 }
613
614 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
615                                             struct usb_serial_driver *drv)
616 {
617         struct usb_dynid *dynid;
618
619         spin_lock(&drv->dynids.lock);
620         list_for_each_entry(dynid, &drv->dynids.list, node) {
621                 if (usb_match_one_id(intf, &dynid->id)) {
622                         spin_unlock(&drv->dynids.lock);
623                         return &dynid->id;
624                 }
625         }
626         spin_unlock(&drv->dynids.lock);
627         return NULL;
628 }
629
630 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
631                                                 struct usb_interface *intf)
632 {
633         const struct usb_device_id *id;
634
635         id = usb_match_id(intf, drv->id_table);
636         if (id) {
637                 dev_dbg(&intf->dev, "static descriptor matches\n");
638                 goto exit;
639         }
640         id = match_dynamic_id(intf, drv);
641         if (id)
642                 dev_dbg(&intf->dev, "dynamic descriptor matches\n");
643 exit:
644         return id;
645 }
646
647 /* Caller must hold table_lock */
648 static struct usb_serial_driver *search_serial_device(
649                                         struct usb_interface *iface)
650 {
651         const struct usb_device_id *id = NULL;
652         struct usb_serial_driver *drv;
653         struct usb_driver *driver = to_usb_driver(iface->dev.driver);
654
655         /* Check if the usb id matches a known device */
656         list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
657                 if (drv->usb_driver == driver)
658                         id = get_iface_id(drv, iface);
659                 if (id)
660                         return drv;
661         }
662
663         return NULL;
664 }
665
666 static int serial_port_carrier_raised(struct tty_port *port)
667 {
668         struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
669         struct usb_serial_driver *drv = p->serial->type;
670
671         if (drv->carrier_raised)
672                 return drv->carrier_raised(p);
673         /* No carrier control - don't block */
674         return 1;
675 }
676
677 static void serial_port_dtr_rts(struct tty_port *port, int on)
678 {
679         struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
680         struct usb_serial *serial = p->serial;
681         struct usb_serial_driver *drv = serial->type;
682
683         if (!drv->dtr_rts)
684                 return;
685         /*
686          * Work-around bug in the tty-layer which can result in dtr_rts
687          * being called after a disconnect (and tty_unregister_device
688          * has returned). Remove once bug has been squashed.
689          */
690         mutex_lock(&serial->disc_mutex);
691         if (!serial->disconnected)
692                 drv->dtr_rts(p, on);
693         mutex_unlock(&serial->disc_mutex);
694 }
695
696 static const struct tty_port_operations serial_port_ops = {
697         .carrier_raised         = serial_port_carrier_raised,
698         .dtr_rts                = serial_port_dtr_rts,
699         .activate               = serial_port_activate,
700         .shutdown               = serial_port_shutdown,
701 };
702
703 static int usb_serial_probe(struct usb_interface *interface,
704                                const struct usb_device_id *id)
705 {
706         struct device *ddev = &interface->dev;
707         struct usb_device *dev = interface_to_usbdev(interface);
708         struct usb_serial *serial = NULL;
709         struct usb_serial_port *port;
710         struct usb_host_interface *iface_desc;
711         struct usb_endpoint_descriptor *endpoint;
712         struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
713         struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
714         struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
715         struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
716         struct usb_serial_driver *type = NULL;
717         int retval;
718         unsigned int minor;
719         int buffer_size;
720         int i;
721         int j;
722         int num_interrupt_in = 0;
723         int num_interrupt_out = 0;
724         int num_bulk_in = 0;
725         int num_bulk_out = 0;
726         int num_ports = 0;
727         int max_endpoints;
728
729         mutex_lock(&table_lock);
730         type = search_serial_device(interface);
731         if (!type) {
732                 mutex_unlock(&table_lock);
733                 dev_dbg(ddev, "none matched\n");
734                 return -ENODEV;
735         }
736
737         if (!try_module_get(type->driver.owner)) {
738                 mutex_unlock(&table_lock);
739                 dev_err(ddev, "module get failed, exiting\n");
740                 return -EIO;
741         }
742         mutex_unlock(&table_lock);
743
744         serial = create_serial(dev, interface, type);
745         if (!serial) {
746                 module_put(type->driver.owner);
747                 return -ENOMEM;
748         }
749
750         /* if this device type has a probe function, call it */
751         if (type->probe) {
752                 const struct usb_device_id *id;
753
754                 id = get_iface_id(type, interface);
755                 retval = type->probe(serial, id);
756
757                 if (retval) {
758                         dev_dbg(ddev, "sub driver rejected device\n");
759                         usb_serial_put(serial);
760                         module_put(type->driver.owner);
761                         return retval;
762                 }
763         }
764
765         /* descriptor matches, let's find the endpoints needed */
766         /* check out the endpoints */
767         iface_desc = interface->cur_altsetting;
768         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
769                 endpoint = &iface_desc->endpoint[i].desc;
770
771                 if (usb_endpoint_is_bulk_in(endpoint)) {
772                         /* we found a bulk in endpoint */
773                         dev_dbg(ddev, "found bulk in on endpoint %d\n", i);
774                         bulk_in_endpoint[num_bulk_in] = endpoint;
775                         ++num_bulk_in;
776                 }
777
778                 if (usb_endpoint_is_bulk_out(endpoint)) {
779                         /* we found a bulk out endpoint */
780                         dev_dbg(ddev, "found bulk out on endpoint %d\n", i);
781                         bulk_out_endpoint[num_bulk_out] = endpoint;
782                         ++num_bulk_out;
783                 }
784
785                 if (usb_endpoint_is_int_in(endpoint)) {
786                         /* we found a interrupt in endpoint */
787                         dev_dbg(ddev, "found interrupt in on endpoint %d\n", i);
788                         interrupt_in_endpoint[num_interrupt_in] = endpoint;
789                         ++num_interrupt_in;
790                 }
791
792                 if (usb_endpoint_is_int_out(endpoint)) {
793                         /* we found an interrupt out endpoint */
794                         dev_dbg(ddev, "found interrupt out on endpoint %d\n", i);
795                         interrupt_out_endpoint[num_interrupt_out] = endpoint;
796                         ++num_interrupt_out;
797                 }
798         }
799
800 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
801         /* BEGIN HORRIBLE HACK FOR PL2303 */
802         /* this is needed due to the looney way its endpoints are set up */
803         if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
804              (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
805             ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
806              (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
807             ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
808              (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
809             ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
810              (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
811                 if (interface != dev->actconfig->interface[0]) {
812                         /* check out the endpoints of the other interface*/
813                         iface_desc = dev->actconfig->interface[0]->cur_altsetting;
814                         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
815                                 endpoint = &iface_desc->endpoint[i].desc;
816                                 if (usb_endpoint_is_int_in(endpoint)) {
817                                         /* we found a interrupt in endpoint */
818                                         dev_dbg(ddev, "found interrupt in for Prolific device on separate interface\n");
819                                         interrupt_in_endpoint[num_interrupt_in] = endpoint;
820                                         ++num_interrupt_in;
821                                 }
822                         }
823                 }
824
825                 /* Now make sure the PL-2303 is configured correctly.
826                  * If not, give up now and hope this hack will work
827                  * properly during a later invocation of usb_serial_probe
828                  */
829                 if (num_bulk_in == 0 || num_bulk_out == 0) {
830                         dev_info(ddev, "PL-2303 hack: descriptors matched but endpoints did not\n");
831                         usb_serial_put(serial);
832                         module_put(type->driver.owner);
833                         return -ENODEV;
834                 }
835         }
836         /* END HORRIBLE HACK FOR PL2303 */
837 #endif
838
839 #ifdef CONFIG_USB_SERIAL_GENERIC
840         if (type == &usb_serial_generic_device) {
841                 num_ports = num_bulk_out;
842                 if (num_ports == 0) {
843                         dev_err(ddev, "Generic device with no bulk out, not allowed.\n");
844                         usb_serial_put(serial);
845                         module_put(type->driver.owner);
846                         return -EIO;
847                 }
848                 dev_info(ddev, "The \"generic\" usb-serial driver is only for testing and one-off prototypes.\n");
849                 dev_info(ddev, "Tell linux-usb@vger.kernel.org to add your device to a proper driver.\n");
850         }
851 #endif
852         if (!num_ports) {
853                 /* if this device type has a calc_num_ports function, call it */
854                 if (type->calc_num_ports)
855                         num_ports = type->calc_num_ports(serial);
856                 if (!num_ports)
857                         num_ports = type->num_ports;
858         }
859
860         serial->num_ports = num_ports;
861         serial->num_bulk_in = num_bulk_in;
862         serial->num_bulk_out = num_bulk_out;
863         serial->num_interrupt_in = num_interrupt_in;
864         serial->num_interrupt_out = num_interrupt_out;
865
866         /* found all that we need */
867         dev_info(ddev, "%s converter detected\n", type->description);
868
869         /* create our ports, we need as many as the max endpoints */
870         /* we don't use num_ports here because some devices have more
871            endpoint pairs than ports */
872         max_endpoints = max(num_bulk_in, num_bulk_out);
873         max_endpoints = max(max_endpoints, num_interrupt_in);
874         max_endpoints = max(max_endpoints, num_interrupt_out);
875         max_endpoints = max(max_endpoints, (int)serial->num_ports);
876         serial->num_port_pointers = max_endpoints;
877
878         dev_dbg(ddev, "setting up %d port structures for this device", max_endpoints);
879         for (i = 0; i < max_endpoints; ++i) {
880                 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
881                 if (!port)
882                         goto probe_error;
883                 tty_port_init(&port->port);
884                 port->port.ops = &serial_port_ops;
885                 port->serial = serial;
886                 spin_lock_init(&port->lock);
887                 /* Keep this for private driver use for the moment but
888                    should probably go away */
889                 INIT_WORK(&port->work, usb_serial_port_work);
890                 serial->port[i] = port;
891                 port->dev.parent = &interface->dev;
892                 port->dev.driver = NULL;
893                 port->dev.bus = &usb_serial_bus_type;
894                 port->dev.release = &usb_serial_port_release;
895                 device_initialize(&port->dev);
896         }
897
898         /* set up the endpoint information */
899         for (i = 0; i < num_bulk_in; ++i) {
900                 endpoint = bulk_in_endpoint[i];
901                 port = serial->port[i];
902                 buffer_size = max_t(int, serial->type->bulk_in_size,
903                                 usb_endpoint_maxp(endpoint));
904                 port->bulk_in_size = buffer_size;
905                 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
906
907                 for (j = 0; j < ARRAY_SIZE(port->read_urbs); ++j) {
908                         set_bit(j, &port->read_urbs_free);
909                         port->read_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
910                         if (!port->read_urbs[j])
911                                 goto probe_error;
912                         port->bulk_in_buffers[j] = kmalloc(buffer_size,
913                                                                 GFP_KERNEL);
914                         if (!port->bulk_in_buffers[j])
915                                 goto probe_error;
916                         usb_fill_bulk_urb(port->read_urbs[j], dev,
917                                         usb_rcvbulkpipe(dev,
918                                                 endpoint->bEndpointAddress),
919                                         port->bulk_in_buffers[j], buffer_size,
920                                         serial->type->read_bulk_callback,
921                                         port);
922                 }
923
924                 port->read_urb = port->read_urbs[0];
925                 port->bulk_in_buffer = port->bulk_in_buffers[0];
926         }
927
928         for (i = 0; i < num_bulk_out; ++i) {
929                 endpoint = bulk_out_endpoint[i];
930                 port = serial->port[i];
931                 if (kfifo_alloc(&port->write_fifo, PAGE_SIZE, GFP_KERNEL))
932                         goto probe_error;
933                 buffer_size = serial->type->bulk_out_size;
934                 if (!buffer_size)
935                         buffer_size = usb_endpoint_maxp(endpoint);
936                 port->bulk_out_size = buffer_size;
937                 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
938
939                 for (j = 0; j < ARRAY_SIZE(port->write_urbs); ++j) {
940                         set_bit(j, &port->write_urbs_free);
941                         port->write_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
942                         if (!port->write_urbs[j])
943                                 goto probe_error;
944                         port->bulk_out_buffers[j] = kmalloc(buffer_size,
945                                                                 GFP_KERNEL);
946                         if (!port->bulk_out_buffers[j])
947                                 goto probe_error;
948                         usb_fill_bulk_urb(port->write_urbs[j], dev,
949                                         usb_sndbulkpipe(dev,
950                                                 endpoint->bEndpointAddress),
951                                         port->bulk_out_buffers[j], buffer_size,
952                                         serial->type->write_bulk_callback,
953                                         port);
954                 }
955
956                 port->write_urb = port->write_urbs[0];
957                 port->bulk_out_buffer = port->bulk_out_buffers[0];
958         }
959
960         if (serial->type->read_int_callback) {
961                 for (i = 0; i < num_interrupt_in; ++i) {
962                         endpoint = interrupt_in_endpoint[i];
963                         port = serial->port[i];
964                         port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
965                         if (!port->interrupt_in_urb)
966                                 goto probe_error;
967                         buffer_size = usb_endpoint_maxp(endpoint);
968                         port->interrupt_in_endpointAddress =
969                                                 endpoint->bEndpointAddress;
970                         port->interrupt_in_buffer = kmalloc(buffer_size,
971                                                                 GFP_KERNEL);
972                         if (!port->interrupt_in_buffer)
973                                 goto probe_error;
974                         usb_fill_int_urb(port->interrupt_in_urb, dev,
975                                 usb_rcvintpipe(dev,
976                                                 endpoint->bEndpointAddress),
977                                 port->interrupt_in_buffer, buffer_size,
978                                 serial->type->read_int_callback, port,
979                                 endpoint->bInterval);
980                 }
981         } else if (num_interrupt_in) {
982                 dev_dbg(ddev, "The device claims to support interrupt in transfers, but read_int_callback is not defined\n");
983         }
984
985         if (serial->type->write_int_callback) {
986                 for (i = 0; i < num_interrupt_out; ++i) {
987                         endpoint = interrupt_out_endpoint[i];
988                         port = serial->port[i];
989                         port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
990                         if (!port->interrupt_out_urb)
991                                 goto probe_error;
992                         buffer_size = usb_endpoint_maxp(endpoint);
993                         port->interrupt_out_size = buffer_size;
994                         port->interrupt_out_endpointAddress =
995                                                 endpoint->bEndpointAddress;
996                         port->interrupt_out_buffer = kmalloc(buffer_size,
997                                                                 GFP_KERNEL);
998                         if (!port->interrupt_out_buffer)
999                                 goto probe_error;
1000                         usb_fill_int_urb(port->interrupt_out_urb, dev,
1001                                 usb_sndintpipe(dev,
1002                                                   endpoint->bEndpointAddress),
1003                                 port->interrupt_out_buffer, buffer_size,
1004                                 serial->type->write_int_callback, port,
1005                                 endpoint->bInterval);
1006                 }
1007         } else if (num_interrupt_out) {
1008                 dev_dbg(ddev, "The device claims to support interrupt out transfers, but write_int_callback is not defined\n");
1009         }
1010
1011         usb_set_intfdata(interface, serial);
1012
1013         /* if this device type has an attach function, call it */
1014         if (type->attach) {
1015                 retval = type->attach(serial);
1016                 if (retval < 0)
1017                         goto probe_error;
1018                 serial->attached = 1;
1019                 if (retval > 0) {
1020                         /* quietly accept this device, but don't bind to a
1021                            serial port as it's about to disappear */
1022                         serial->num_ports = 0;
1023                         goto exit;
1024                 }
1025         } else {
1026                 serial->attached = 1;
1027         }
1028
1029         /* Avoid race with tty_open and serial_install by setting the
1030          * disconnected flag and not clearing it until all ports have been
1031          * registered.
1032          */
1033         serial->disconnected = 1;
1034
1035         if (get_free_serial(serial, num_ports, &minor) == NULL) {
1036                 dev_err(ddev, "No more free serial devices\n");
1037                 goto probe_error;
1038         }
1039         serial->minor = minor;
1040
1041         /* register all of the individual ports with the driver core */
1042         for (i = 0; i < num_ports; ++i) {
1043                 port = serial->port[i];
1044                 dev_set_name(&port->dev, "ttyUSB%d", port->number);
1045                 dev_dbg(ddev, "registering %s", dev_name(&port->dev));
1046                 device_enable_async_suspend(&port->dev);
1047
1048                 retval = device_add(&port->dev);
1049                 if (retval)
1050                         dev_err(ddev, "Error registering port device, continuing\n");
1051         }
1052
1053         serial->disconnected = 0;
1054
1055         usb_serial_console_init(minor);
1056 exit:
1057         module_put(type->driver.owner);
1058         return 0;
1059
1060 probe_error:
1061         usb_serial_put(serial);
1062         module_put(type->driver.owner);
1063         return -EIO;
1064 }
1065
1066 static void usb_serial_disconnect(struct usb_interface *interface)
1067 {
1068         int i;
1069         struct usb_serial *serial = usb_get_intfdata(interface);
1070         struct device *dev = &interface->dev;
1071         struct usb_serial_port *port;
1072
1073         usb_serial_console_disconnect(serial);
1074
1075         mutex_lock(&serial->disc_mutex);
1076         /* must set a flag, to signal subdrivers */
1077         serial->disconnected = 1;
1078         mutex_unlock(&serial->disc_mutex);
1079
1080         for (i = 0; i < serial->num_ports; ++i) {
1081                 port = serial->port[i];
1082                 if (port) {
1083                         struct tty_struct *tty = tty_port_tty_get(&port->port);
1084                         if (tty) {
1085                                 tty_vhangup(tty);
1086                                 tty_kref_put(tty);
1087                         }
1088                         usb_serial_port_poison_urbs(port);
1089                         wake_up_interruptible(&port->port.delta_msr_wait);
1090                         cancel_work_sync(&port->work);
1091                         if (device_is_registered(&port->dev))
1092                                 device_del(&port->dev);
1093                 }
1094         }
1095         if (serial->type->disconnect)
1096                 serial->type->disconnect(serial);
1097
1098         /* let the last holder of this object cause it to be cleaned up */
1099         usb_serial_put(serial);
1100         dev_info(dev, "device disconnected\n");
1101 }
1102
1103 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1104 {
1105         struct usb_serial *serial = usb_get_intfdata(intf);
1106         struct usb_serial_port *port;
1107         int i, r = 0;
1108
1109         serial->suspending = 1;
1110
1111         /*
1112          * serial->type->suspend() MUST return 0 in system sleep context,
1113          * otherwise, the resume callback has to recover device from
1114          * previous suspend failure.
1115          */
1116         if (serial->type->suspend) {
1117                 r = serial->type->suspend(serial, message);
1118                 if (r < 0) {
1119                         serial->suspending = 0;
1120                         goto err_out;
1121                 }
1122         }
1123
1124         for (i = 0; i < serial->num_ports; ++i) {
1125                 port = serial->port[i];
1126                 if (port)
1127                         usb_serial_port_poison_urbs(port);
1128         }
1129
1130 err_out:
1131         return r;
1132 }
1133 EXPORT_SYMBOL(usb_serial_suspend);
1134
1135 static void usb_serial_unpoison_port_urbs(struct usb_serial *serial)
1136 {
1137         struct usb_serial_port *port;
1138         int i;
1139
1140         for (i = 0; i < serial->num_ports; ++i) {
1141                 port = serial->port[i];
1142                 if (port)
1143                         usb_serial_port_unpoison_urbs(port);
1144         }
1145 }
1146
1147 int usb_serial_resume(struct usb_interface *intf)
1148 {
1149         struct usb_serial *serial = usb_get_intfdata(intf);
1150         int rv;
1151
1152         usb_serial_unpoison_port_urbs(serial);
1153
1154         serial->suspending = 0;
1155         if (serial->type->resume)
1156                 rv = serial->type->resume(serial);
1157         else
1158                 rv = usb_serial_generic_resume(serial);
1159
1160         return rv;
1161 }
1162 EXPORT_SYMBOL(usb_serial_resume);
1163
1164 static int usb_serial_reset_resume(struct usb_interface *intf)
1165 {
1166         struct usb_serial *serial = usb_get_intfdata(intf);
1167         int rv;
1168
1169         usb_serial_unpoison_port_urbs(serial);
1170
1171         serial->suspending = 0;
1172         if (serial->type->reset_resume)
1173                 rv = serial->type->reset_resume(serial);
1174         else {
1175                 rv = -EOPNOTSUPP;
1176                 intf->needs_binding = 1;
1177         }
1178
1179         return rv;
1180 }
1181
1182 static const struct tty_operations serial_ops = {
1183         .open =                 serial_open,
1184         .close =                serial_close,
1185         .write =                serial_write,
1186         .hangup =               serial_hangup,
1187         .write_room =           serial_write_room,
1188         .ioctl =                serial_ioctl,
1189         .set_termios =          serial_set_termios,
1190         .throttle =             serial_throttle,
1191         .unthrottle =           serial_unthrottle,
1192         .break_ctl =            serial_break,
1193         .chars_in_buffer =      serial_chars_in_buffer,
1194         .tiocmget =             serial_tiocmget,
1195         .tiocmset =             serial_tiocmset,
1196         .get_icount =           serial_get_icount,
1197         .cleanup =              serial_cleanup,
1198         .install =              serial_install,
1199         .proc_fops =            &serial_proc_fops,
1200 };
1201
1202
1203 struct tty_driver *usb_serial_tty_driver;
1204
1205 /* Driver structure we register with the USB core */
1206 static struct usb_driver usb_serial_driver = {
1207         .name =         "usbserial",
1208         .probe =        usb_serial_probe,
1209         .disconnect =   usb_serial_disconnect,
1210         .suspend =      usb_serial_suspend,
1211         .resume =       usb_serial_resume,
1212         .no_dynamic_id =        1,
1213         .supports_autosuspend = 1,
1214 };
1215
1216 static int __init usb_serial_init(void)
1217 {
1218         int i;
1219         int result;
1220
1221         usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1222         if (!usb_serial_tty_driver)
1223                 return -ENOMEM;
1224
1225         /* Initialize our global data */
1226         for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1227                 serial_table[i] = NULL;
1228
1229         result = bus_register(&usb_serial_bus_type);
1230         if (result) {
1231                 pr_err("%s - registering bus driver failed\n", __func__);
1232                 goto exit_bus;
1233         }
1234
1235         usb_serial_tty_driver->driver_name = "usbserial";
1236         usb_serial_tty_driver->name = "ttyUSB";
1237         usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1238         usb_serial_tty_driver->minor_start = 0;
1239         usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1240         usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1241         usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1242                                                 TTY_DRIVER_DYNAMIC_DEV;
1243         usb_serial_tty_driver->init_termios = tty_std_termios;
1244         usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1245                                                         | HUPCL | CLOCAL;
1246         usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1247         usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1248         tty_set_operations(usb_serial_tty_driver, &serial_ops);
1249         result = tty_register_driver(usb_serial_tty_driver);
1250         if (result) {
1251                 pr_err("%s - tty_register_driver failed\n", __func__);
1252                 goto exit_reg_driver;
1253         }
1254
1255         /* register the USB driver */
1256         result = usb_register(&usb_serial_driver);
1257         if (result < 0) {
1258                 pr_err("%s - usb_register failed\n", __func__);
1259                 goto exit_tty;
1260         }
1261
1262         /* register the generic driver, if we should */
1263         result = usb_serial_generic_register();
1264         if (result < 0) {
1265                 pr_err("%s - registering generic driver failed\n", __func__);
1266                 goto exit_generic;
1267         }
1268
1269         return result;
1270
1271 exit_generic:
1272         usb_deregister(&usb_serial_driver);
1273
1274 exit_tty:
1275         tty_unregister_driver(usb_serial_tty_driver);
1276
1277 exit_reg_driver:
1278         bus_unregister(&usb_serial_bus_type);
1279
1280 exit_bus:
1281         pr_err("%s - returning with error %d\n", __func__, result);
1282         put_tty_driver(usb_serial_tty_driver);
1283         return result;
1284 }
1285
1286
1287 static void __exit usb_serial_exit(void)
1288 {
1289         usb_serial_console_exit();
1290
1291         usb_serial_generic_deregister();
1292
1293         usb_deregister(&usb_serial_driver);
1294         tty_unregister_driver(usb_serial_tty_driver);
1295         put_tty_driver(usb_serial_tty_driver);
1296         bus_unregister(&usb_serial_bus_type);
1297 }
1298
1299
1300 module_init(usb_serial_init);
1301 module_exit(usb_serial_exit);
1302
1303 #define set_to_generic_if_null(type, function)                          \
1304         do {                                                            \
1305                 if (!type->function) {                                  \
1306                         type->function = usb_serial_generic_##function; \
1307                         pr_debug("%s: using generic " #function "\n",   \
1308                                                 type->driver.name);     \
1309                 }                                                       \
1310         } while (0)
1311
1312 static void usb_serial_operations_init(struct usb_serial_driver *device)
1313 {
1314         set_to_generic_if_null(device, open);
1315         set_to_generic_if_null(device, write);
1316         set_to_generic_if_null(device, close);
1317         set_to_generic_if_null(device, write_room);
1318         set_to_generic_if_null(device, chars_in_buffer);
1319         set_to_generic_if_null(device, read_bulk_callback);
1320         set_to_generic_if_null(device, write_bulk_callback);
1321         set_to_generic_if_null(device, process_read_urb);
1322         set_to_generic_if_null(device, prepare_write_buffer);
1323 }
1324
1325 static int usb_serial_register(struct usb_serial_driver *driver)
1326 {
1327         int retval;
1328
1329         if (usb_disabled())
1330                 return -ENODEV;
1331
1332         if (!driver->description)
1333                 driver->description = driver->driver.name;
1334         if (!driver->usb_driver) {
1335                 WARN(1, "Serial driver %s has no usb_driver\n",
1336                                 driver->description);
1337                 return -EINVAL;
1338         }
1339
1340         usb_serial_operations_init(driver);
1341
1342         /* Add this device to our list of devices */
1343         mutex_lock(&table_lock);
1344         list_add(&driver->driver_list, &usb_serial_driver_list);
1345
1346         retval = usb_serial_bus_register(driver);
1347         if (retval) {
1348                 pr_err("problem %d when registering driver %s\n", retval, driver->description);
1349                 list_del(&driver->driver_list);
1350         } else
1351                 pr_info("USB Serial support registered for %s\n", driver->description);
1352
1353         mutex_unlock(&table_lock);
1354         return retval;
1355 }
1356
1357 static void usb_serial_deregister(struct usb_serial_driver *device)
1358 {
1359         pr_info("USB Serial deregistering driver %s\n", device->description);
1360         mutex_lock(&table_lock);
1361         list_del(&device->driver_list);
1362         usb_serial_bus_deregister(device);
1363         mutex_unlock(&table_lock);
1364 }
1365
1366 /**
1367  * usb_serial_register_drivers - register drivers for a usb-serial module
1368  * @serial_drivers: NULL-terminated array of pointers to drivers to be registered
1369  * @name: name of the usb_driver for this set of @serial_drivers
1370  * @id_table: list of all devices this @serial_drivers set binds to
1371  *
1372  * Registers all the drivers in the @serial_drivers array, and dynamically
1373  * creates a struct usb_driver with the name @name and id_table of @id_table.
1374  */
1375 int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[],
1376                                 const char *name,
1377                                 const struct usb_device_id *id_table)
1378 {
1379         int rc;
1380         struct usb_driver *udriver;
1381         struct usb_serial_driver * const *sd;
1382
1383         /*
1384          * udriver must be registered before any of the serial drivers,
1385          * because the store_new_id() routine for the serial drivers (in
1386          * bus.c) probes udriver.
1387          *
1388          * Performance hack: We don't want udriver to be probed until
1389          * the serial drivers are registered, because the probe would
1390          * simply fail for lack of a matching serial driver.
1391          * So we leave udriver's id_table set to NULL until we are all set.
1392          *
1393          * Suspend/resume support is implemented in the usb-serial core,
1394          * so fill in the PM-related fields in udriver.
1395          */
1396         udriver = kzalloc(sizeof(*udriver), GFP_KERNEL);
1397         if (!udriver)
1398                 return -ENOMEM;
1399
1400         udriver->name = name;
1401         udriver->no_dynamic_id = 1;
1402         udriver->supports_autosuspend = 1;
1403         udriver->suspend = usb_serial_suspend;
1404         udriver->resume = usb_serial_resume;
1405         udriver->probe = usb_serial_probe;
1406         udriver->disconnect = usb_serial_disconnect;
1407
1408         /* we only set the reset_resume field if the serial_driver has one */
1409         for (sd = serial_drivers; *sd; ++sd) {
1410                 if ((*sd)->reset_resume) {
1411                         udriver->reset_resume = usb_serial_reset_resume;
1412                         break;
1413                 }
1414         }
1415
1416         rc = usb_register(udriver);
1417         if (rc)
1418                 return rc;
1419
1420         for (sd = serial_drivers; *sd; ++sd) {
1421                 (*sd)->usb_driver = udriver;
1422                 rc = usb_serial_register(*sd);
1423                 if (rc)
1424                         goto failed;
1425         }
1426
1427         /* Now set udriver's id_table and look for matches */
1428         udriver->id_table = id_table;
1429         rc = driver_attach(&udriver->drvwrap.driver);
1430         return 0;
1431
1432  failed:
1433         while (sd-- > serial_drivers)
1434                 usb_serial_deregister(*sd);
1435         usb_deregister(udriver);
1436         return rc;
1437 }
1438 EXPORT_SYMBOL_GPL(usb_serial_register_drivers);
1439
1440 /**
1441  * usb_serial_deregister_drivers - deregister drivers for a usb-serial module
1442  * @serial_drivers: NULL-terminated array of pointers to drivers to be deregistered
1443  *
1444  * Deregisters all the drivers in the @serial_drivers array and deregisters and
1445  * frees the struct usb_driver that was created by the call to
1446  * usb_serial_register_drivers().
1447  */
1448 void usb_serial_deregister_drivers(struct usb_serial_driver *const serial_drivers[])
1449 {
1450         struct usb_driver *udriver = (*serial_drivers)->usb_driver;
1451
1452         for (; *serial_drivers; ++serial_drivers)
1453                 usb_serial_deregister(*serial_drivers);
1454         usb_deregister(udriver);
1455         kfree(udriver);
1456 }
1457 EXPORT_SYMBOL_GPL(usb_serial_deregister_drivers);
1458
1459 MODULE_AUTHOR(DRIVER_AUTHOR);
1460 MODULE_DESCRIPTION(DRIVER_DESC);
1461 MODULE_LICENSE("GPL");