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