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