usb_serial: Use the shutdown() operation
[linux-3.10.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->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->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         /* count is managed under the mutex lock for the tty so cannot
362            drop to zero until after the last close completes */
363         WARN_ON(!port->port.count);
364
365         /* pass on to the driver specific version of this function */
366         retval = port->serial->type->write(tty, port, buf, count);
367
368 exit:
369         return retval;
370 }
371
372 static int serial_write_room(struct tty_struct *tty)
373 {
374         struct usb_serial_port *port = tty->driver_data;
375         dbg("%s - port %d", __func__, port->number);
376         WARN_ON(!port->port.count);
377         /* pass on to the driver specific version of this function */
378         return port->serial->type->write_room(tty);
379 }
380
381 static int serial_chars_in_buffer(struct tty_struct *tty)
382 {
383         struct usb_serial_port *port = tty->driver_data;
384         dbg("%s = port %d", __func__, port->number);
385
386         /* if the device was unplugged then any remaining characters
387            fell out of the connector ;) */
388         if (port->serial->disconnected)
389                 return 0;
390         /* pass on to the driver specific version of this function */
391         return port->serial->type->chars_in_buffer(tty);
392 }
393
394 static void serial_throttle(struct tty_struct *tty)
395 {
396         struct usb_serial_port *port = tty->driver_data;
397         dbg("%s - port %d", __func__, port->number);
398
399         WARN_ON(!port->port.count);
400         /* pass on to the driver specific version of this function */
401         if (port->serial->type->throttle)
402                 port->serial->type->throttle(tty);
403 }
404
405 static void serial_unthrottle(struct tty_struct *tty)
406 {
407         struct usb_serial_port *port = tty->driver_data;
408         dbg("%s - port %d", __func__, port->number);
409
410         WARN_ON(!port->port.count);
411         /* pass on to the driver specific version of this function */
412         if (port->serial->type->unthrottle)
413                 port->serial->type->unthrottle(tty);
414 }
415
416 static int serial_ioctl(struct tty_struct *tty, struct file *file,
417                                         unsigned int cmd, unsigned long arg)
418 {
419         struct usb_serial_port *port = tty->driver_data;
420         int retval = -ENODEV;
421
422         dbg("%s - port %d, cmd 0x%.4x", __func__, port->number, cmd);
423
424         WARN_ON(!port->port.count);
425
426         /* pass on to the driver specific version of this function
427            if it is available */
428         if (port->serial->type->ioctl) {
429                 retval = port->serial->type->ioctl(tty, file, cmd, arg);
430         } else
431                 retval = -ENOIOCTLCMD;
432         return retval;
433 }
434
435 static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
436 {
437         struct usb_serial_port *port = tty->driver_data;
438         dbg("%s - port %d", __func__, port->number);
439
440         WARN_ON(!port->port.count);
441         /* pass on to the driver specific version of this function
442            if it is available */
443         if (port->serial->type->set_termios)
444                 port->serial->type->set_termios(tty, port, old);
445         else
446                 tty_termios_copy_hw(tty->termios, old);
447 }
448
449 static int serial_break(struct tty_struct *tty, int break_state)
450 {
451         struct usb_serial_port *port = tty->driver_data;
452
453         dbg("%s - port %d", __func__, port->number);
454
455         WARN_ON(!port->port.count);
456         /* pass on to the driver specific version of this function
457            if it is available */
458         if (port->serial->type->break_ctl)
459                 port->serial->type->break_ctl(tty, break_state);
460         return 0;
461 }
462
463 static int serial_proc_show(struct seq_file *m, void *v)
464 {
465         struct usb_serial *serial;
466         int i;
467         char tmp[40];
468
469         dbg("%s", __func__);
470         seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
471         for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
472                 serial = usb_serial_get_by_index(i);
473                 if (serial == NULL)
474                         continue;
475
476                 seq_printf(m, "%d:", i);
477                 if (serial->type->driver.owner)
478                         seq_printf(m, " module:%s",
479                                 module_name(serial->type->driver.owner));
480                 seq_printf(m, " name:\"%s\"",
481                                 serial->type->description);
482                 seq_printf(m, " vendor:%04x product:%04x",
483                         le16_to_cpu(serial->dev->descriptor.idVendor),
484                         le16_to_cpu(serial->dev->descriptor.idProduct));
485                 seq_printf(m, " num_ports:%d", serial->num_ports);
486                 seq_printf(m, " port:%d", i - serial->minor + 1);
487                 usb_make_path(serial->dev, tmp, sizeof(tmp));
488                 seq_printf(m, " path:%s", tmp);
489
490                 seq_putc(m, '\n');
491                 usb_serial_put(serial);
492                 mutex_unlock(&serial->disc_mutex);
493         }
494         return 0;
495 }
496
497 static int serial_proc_open(struct inode *inode, struct file *file)
498 {
499         return single_open(file, serial_proc_show, NULL);
500 }
501
502 static const struct file_operations serial_proc_fops = {
503         .owner          = THIS_MODULE,
504         .open           = serial_proc_open,
505         .read           = seq_read,
506         .llseek         = seq_lseek,
507         .release        = single_release,
508 };
509
510 static int serial_tiocmget(struct tty_struct *tty, struct file *file)
511 {
512         struct usb_serial_port *port = tty->driver_data;
513
514         dbg("%s - port %d", __func__, port->number);
515
516         WARN_ON(!port->port.count);
517         if (port->serial->type->tiocmget)
518                 return port->serial->type->tiocmget(tty, file);
519         return -EINVAL;
520 }
521
522 static int serial_tiocmset(struct tty_struct *tty, struct file *file,
523                             unsigned int set, unsigned int clear)
524 {
525         struct usb_serial_port *port = tty->driver_data;
526
527         dbg("%s - port %d", __func__, port->number);
528
529         WARN_ON(!port->port.count);
530         if (port->serial->type->tiocmset)
531                 return port->serial->type->tiocmset(tty, file, set, clear);
532         return -EINVAL;
533 }
534
535 /*
536  * We would be calling tty_wakeup here, but unfortunately some line
537  * disciplines have an annoying habit of calling tty->write from
538  * the write wakeup callback (e.g. n_hdlc.c).
539  */
540 void usb_serial_port_softint(struct usb_serial_port *port)
541 {
542         schedule_work(&port->work);
543 }
544 EXPORT_SYMBOL_GPL(usb_serial_port_softint);
545
546 static void usb_serial_port_work(struct work_struct *work)
547 {
548         struct usb_serial_port *port =
549                 container_of(work, struct usb_serial_port, work);
550         struct tty_struct *tty;
551
552         dbg("%s - port %d", __func__, port->number);
553
554         tty = tty_port_tty_get(&port->port);
555         if (!tty)
556                 return;
557
558         tty_wakeup(tty);
559         tty_kref_put(tty);
560 }
561
562 static void kill_traffic(struct usb_serial_port *port)
563 {
564         usb_kill_urb(port->read_urb);
565         usb_kill_urb(port->write_urb);
566         /*
567          * This is tricky.
568          * Some drivers submit the read_urb in the
569          * handler for the write_urb or vice versa
570          * this order determines the order in which
571          * usb_kill_urb() must be used to reliably
572          * kill the URBs. As it is unknown here,
573          * both orders must be used in turn.
574          * The call below is not redundant.
575          */
576         usb_kill_urb(port->read_urb);
577         usb_kill_urb(port->interrupt_in_urb);
578         usb_kill_urb(port->interrupt_out_urb);
579 }
580
581 static void port_release(struct device *dev)
582 {
583         struct usb_serial_port *port = to_usb_serial_port(dev);
584
585         dbg ("%s - %s", __func__, dev_name(dev));
586
587         /*
588          * Stop all the traffic before cancelling the work, so that
589          * nobody will restart it by calling usb_serial_port_softint.
590          */
591         kill_traffic(port);
592         cancel_work_sync(&port->work);
593
594         usb_free_urb(port->read_urb);
595         usb_free_urb(port->write_urb);
596         usb_free_urb(port->interrupt_in_urb);
597         usb_free_urb(port->interrupt_out_urb);
598         if (!IS_ERR(port->write_fifo) && port->write_fifo)
599                 kfifo_free(port->write_fifo);
600         kfree(port->bulk_in_buffer);
601         kfree(port->bulk_out_buffer);
602         kfree(port->interrupt_in_buffer);
603         kfree(port->interrupt_out_buffer);
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 = 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                 dbg("static descriptor matches");
652                 goto exit;
653         }
654         id = match_dynamic_id(intf, drv);
655         if (id)
656                 dbg("dynamic descriptor matches");
657 exit:
658         return id;
659 }
660
661 static struct usb_serial_driver *search_serial_device(
662                                         struct usb_interface *iface)
663 {
664         const struct usb_device_id *id;
665         struct usb_serial_driver *drv;
666
667         /* Check if the usb id matches a known device */
668         list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
669                 id = get_iface_id(drv, iface);
670                 if (id)
671                         return drv;
672         }
673
674         return NULL;
675 }
676
677 static int serial_carrier_raised(struct tty_port *port)
678 {
679         struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
680         struct usb_serial_driver *drv = p->serial->type;
681         if (drv->carrier_raised)
682                 return drv->carrier_raised(p);
683         /* No carrier control - don't block */
684         return 1;       
685 }
686
687 static void serial_dtr_rts(struct tty_port *port, int on)
688 {
689         struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
690         struct usb_serial_driver *drv = p->serial->type;
691         if (drv->dtr_rts)
692                 drv->dtr_rts(p, on);
693 }
694
695 static const struct tty_port_operations serial_port_ops = {
696         .carrier_raised = serial_carrier_raised,
697         .dtr_rts = serial_dtr_rts,
698         .activate = serial_activate,
699         .shutdown = serial_down,
700 };
701
702 int usb_serial_probe(struct usb_interface *interface,
703                                const struct usb_device_id *id)
704 {
705         struct usb_device *dev = interface_to_usbdev(interface);
706         struct usb_serial *serial = NULL;
707         struct usb_serial_port *port;
708         struct usb_host_interface *iface_desc;
709         struct usb_endpoint_descriptor *endpoint;
710         struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
711         struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
712         struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
713         struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
714         struct usb_serial_driver *type = NULL;
715         int retval;
716         unsigned int minor;
717         int buffer_size;
718         int i;
719         int num_interrupt_in = 0;
720         int num_interrupt_out = 0;
721         int num_bulk_in = 0;
722         int num_bulk_out = 0;
723         int num_ports = 0;
724         int max_endpoints;
725
726         lock_kernel(); /* guard against unloading a serial driver module */
727         type = search_serial_device(interface);
728         if (!type) {
729                 unlock_kernel();
730                 dbg("none matched");
731                 return -ENODEV;
732         }
733
734         serial = create_serial(dev, interface, type);
735         if (!serial) {
736                 unlock_kernel();
737                 dev_err(&interface->dev, "%s - out of memory\n", __func__);
738                 return -ENOMEM;
739         }
740
741         /* if this device type has a probe function, call it */
742         if (type->probe) {
743                 const struct usb_device_id *id;
744
745                 if (!try_module_get(type->driver.owner)) {
746                         unlock_kernel();
747                         dev_err(&interface->dev,
748                                 "module get failed, exiting\n");
749                         kfree(serial);
750                         return -EIO;
751                 }
752
753                 id = get_iface_id(type, interface);
754                 retval = type->probe(serial, id);
755                 module_put(type->driver.owner);
756
757                 if (retval) {
758                         unlock_kernel();
759                         dbg("sub driver rejected device");
760                         kfree(serial);
761                         return retval;
762                 }
763         }
764
765         /* descriptor matches, let's find the endpoints needed */
766         /* check out the endpoints */
767         iface_desc = interface->cur_altsetting;
768         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
769                 endpoint = &iface_desc->endpoint[i].desc;
770
771                 if (usb_endpoint_is_bulk_in(endpoint)) {
772                         /* we found a bulk in endpoint */
773                         dbg("found bulk in on endpoint %d", i);
774                         bulk_in_endpoint[num_bulk_in] = endpoint;
775                         ++num_bulk_in;
776                 }
777
778                 if (usb_endpoint_is_bulk_out(endpoint)) {
779                         /* we found a bulk out endpoint */
780                         dbg("found bulk out on endpoint %d", i);
781                         bulk_out_endpoint[num_bulk_out] = endpoint;
782                         ++num_bulk_out;
783                 }
784
785                 if (usb_endpoint_is_int_in(endpoint)) {
786                         /* we found a interrupt in endpoint */
787                         dbg("found interrupt in on endpoint %d", i);
788                         interrupt_in_endpoint[num_interrupt_in] = endpoint;
789                         ++num_interrupt_in;
790                 }
791
792                 if (usb_endpoint_is_int_out(endpoint)) {
793                         /* we found an interrupt out endpoint */
794                         dbg("found interrupt out on endpoint %d", i);
795                         interrupt_out_endpoint[num_interrupt_out] = endpoint;
796                         ++num_interrupt_out;
797                 }
798         }
799
800 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
801         /* BEGIN HORRIBLE HACK FOR PL2303 */
802         /* this is needed due to the looney way its endpoints are set up */
803         if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
804              (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
805             ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
806              (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
807             ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
808              (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
809             ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
810              (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
811                 if (interface != dev->actconfig->interface[0]) {
812                         /* check out the endpoints of the other interface*/
813                         iface_desc = dev->actconfig->interface[0]->cur_altsetting;
814                         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
815                                 endpoint = &iface_desc->endpoint[i].desc;
816                                 if (usb_endpoint_is_int_in(endpoint)) {
817                                         /* we found a interrupt in endpoint */
818                                         dbg("found interrupt in for Prolific device on separate interface");
819                                         interrupt_in_endpoint[num_interrupt_in] = endpoint;
820                                         ++num_interrupt_in;
821                                 }
822                         }
823                 }
824
825                 /* Now make sure the PL-2303 is configured correctly.
826                  * If not, give up now and hope this hack will work
827                  * properly during a later invocation of usb_serial_probe
828                  */
829                 if (num_bulk_in == 0 || num_bulk_out == 0) {
830                         unlock_kernel();
831                         dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
832                         kfree(serial);
833                         return -ENODEV;
834                 }
835         }
836         /* END HORRIBLE HACK FOR PL2303 */
837 #endif
838
839 #ifdef CONFIG_USB_SERIAL_GENERIC
840         if (type == &usb_serial_generic_device) {
841                 num_ports = num_bulk_out;
842                 if (num_ports == 0) {
843                         unlock_kernel();
844                         dev_err(&interface->dev,
845                             "Generic device with no bulk out, not allowed.\n");
846                         kfree(serial);
847                         return -EIO;
848                 }
849         }
850 #endif
851         if (!num_ports) {
852                 /* if this device type has a calc_num_ports function, call it */
853                 if (type->calc_num_ports) {
854                         if (!try_module_get(type->driver.owner)) {
855                                 unlock_kernel();
856                                 dev_err(&interface->dev,
857                                         "module get failed, exiting\n");
858                                 kfree(serial);
859                                 return -EIO;
860                         }
861                         num_ports = type->calc_num_ports(serial);
862                         module_put(type->driver.owner);
863                 }
864                 if (!num_ports)
865                         num_ports = type->num_ports;
866         }
867
868         serial->num_ports = num_ports;
869         serial->num_bulk_in = num_bulk_in;
870         serial->num_bulk_out = num_bulk_out;
871         serial->num_interrupt_in = num_interrupt_in;
872         serial->num_interrupt_out = num_interrupt_out;
873
874         /* found all that we need */
875         dev_info(&interface->dev, "%s converter detected\n",
876                         type->description);
877
878         /* create our ports, we need as many as the max endpoints */
879         /* we don't use num_ports here because some devices have more
880            endpoint pairs than ports */
881         max_endpoints = max(num_bulk_in, num_bulk_out);
882         max_endpoints = max(max_endpoints, num_interrupt_in);
883         max_endpoints = max(max_endpoints, num_interrupt_out);
884         max_endpoints = max(max_endpoints, (int)serial->num_ports);
885         serial->num_port_pointers = max_endpoints;
886         unlock_kernel();
887
888         dbg("%s - setting up %d port structures for this device",
889                                                 __func__, max_endpoints);
890         for (i = 0; i < max_endpoints; ++i) {
891                 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
892                 if (!port)
893                         goto probe_error;
894                 tty_port_init(&port->port);
895                 port->port.ops = &serial_port_ops;
896                 port->serial = serial;
897                 spin_lock_init(&port->lock);
898                 /* Keep this for private driver use for the moment but
899                    should probably go away */
900                 mutex_init(&port->mutex);
901                 INIT_WORK(&port->work, usb_serial_port_work);
902                 serial->port[i] = port;
903                 port->dev.parent = &interface->dev;
904                 port->dev.driver = NULL;
905                 port->dev.bus = &usb_serial_bus_type;
906                 port->dev.release = &port_release;
907                 device_initialize(&port->dev);
908         }
909
910         /* set up the endpoint information */
911         for (i = 0; i < num_bulk_in; ++i) {
912                 endpoint = bulk_in_endpoint[i];
913                 port = serial->port[i];
914                 port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
915                 if (!port->read_urb) {
916                         dev_err(&interface->dev, "No free urbs available\n");
917                         goto probe_error;
918                 }
919                 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
920                 port->bulk_in_size = buffer_size;
921                 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
922                 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
923                 if (!port->bulk_in_buffer) {
924                         dev_err(&interface->dev,
925                                         "Couldn't allocate bulk_in_buffer\n");
926                         goto probe_error;
927                 }
928                 usb_fill_bulk_urb(port->read_urb, dev,
929                                 usb_rcvbulkpipe(dev,
930                                                 endpoint->bEndpointAddress),
931                                 port->bulk_in_buffer, buffer_size,
932                                 serial->type->read_bulk_callback, port);
933         }
934
935         for (i = 0; i < num_bulk_out; ++i) {
936                 endpoint = bulk_out_endpoint[i];
937                 port = serial->port[i];
938                 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
939                 if (!port->write_urb) {
940                         dev_err(&interface->dev, "No free urbs available\n");
941                         goto probe_error;
942                 }
943                 port->write_fifo = kfifo_alloc(PAGE_SIZE, GFP_KERNEL,
944                         &port->lock);
945                 if (IS_ERR(port->write_fifo))
946                         goto probe_error;
947                 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
948                 port->bulk_out_size = buffer_size;
949                 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
950                 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
951                 if (!port->bulk_out_buffer) {
952                         dev_err(&interface->dev,
953                                         "Couldn't allocate bulk_out_buffer\n");
954                         goto probe_error;
955                 }
956                 usb_fill_bulk_urb(port->write_urb, dev,
957                                 usb_sndbulkpipe(dev,
958                                         endpoint->bEndpointAddress),
959                                 port->bulk_out_buffer, buffer_size,
960                                 serial->type->write_bulk_callback, port);
961         }
962
963         if (serial->type->read_int_callback) {
964                 for (i = 0; i < num_interrupt_in; ++i) {
965                         endpoint = interrupt_in_endpoint[i];
966                         port = serial->port[i];
967                         port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
968                         if (!port->interrupt_in_urb) {
969                                 dev_err(&interface->dev,
970                                                 "No free urbs available\n");
971                                 goto probe_error;
972                         }
973                         buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
974                         port->interrupt_in_endpointAddress =
975                                                 endpoint->bEndpointAddress;
976                         port->interrupt_in_buffer = kmalloc(buffer_size,
977                                                                 GFP_KERNEL);
978                         if (!port->interrupt_in_buffer) {
979                                 dev_err(&interface->dev,
980                                     "Couldn't allocate interrupt_in_buffer\n");
981                                 goto probe_error;
982                         }
983                         usb_fill_int_urb(port->interrupt_in_urb, dev,
984                                 usb_rcvintpipe(dev,
985                                                 endpoint->bEndpointAddress),
986                                 port->interrupt_in_buffer, buffer_size,
987                                 serial->type->read_int_callback, port,
988                                 endpoint->bInterval);
989                 }
990         } else if (num_interrupt_in) {
991                 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
992         }
993
994         if (serial->type->write_int_callback) {
995                 for (i = 0; i < num_interrupt_out; ++i) {
996                         endpoint = interrupt_out_endpoint[i];
997                         port = serial->port[i];
998                         port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
999                         if (!port->interrupt_out_urb) {
1000                                 dev_err(&interface->dev,
1001                                                 "No free urbs available\n");
1002                                 goto probe_error;
1003                         }
1004                         buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
1005                         port->interrupt_out_size = buffer_size;
1006                         port->interrupt_out_endpointAddress =
1007                                                 endpoint->bEndpointAddress;
1008                         port->interrupt_out_buffer = kmalloc(buffer_size,
1009                                                                 GFP_KERNEL);
1010                         if (!port->interrupt_out_buffer) {
1011                                 dev_err(&interface->dev,
1012                                   "Couldn't allocate interrupt_out_buffer\n");
1013                                 goto probe_error;
1014                         }
1015                         usb_fill_int_urb(port->interrupt_out_urb, dev,
1016                                 usb_sndintpipe(dev,
1017                                                   endpoint->bEndpointAddress),
1018                                 port->interrupt_out_buffer, buffer_size,
1019                                 serial->type->write_int_callback, port,
1020                                 endpoint->bInterval);
1021                 }
1022         } else if (num_interrupt_out) {
1023                 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
1024         }
1025
1026         /* if this device type has an attach function, call it */
1027         if (type->attach) {
1028                 if (!try_module_get(type->driver.owner)) {
1029                         dev_err(&interface->dev,
1030                                         "module get failed, exiting\n");
1031                         goto probe_error;
1032                 }
1033                 retval = type->attach(serial);
1034                 module_put(type->driver.owner);
1035                 if (retval < 0)
1036                         goto probe_error;
1037                 serial->attached = 1;
1038                 if (retval > 0) {
1039                         /* quietly accept this device, but don't bind to a
1040                            serial port as it's about to disappear */
1041                         serial->num_ports = 0;
1042                         goto exit;
1043                 }
1044         } else {
1045                 serial->attached = 1;
1046         }
1047
1048         if (get_free_serial(serial, num_ports, &minor) == NULL) {
1049                 dev_err(&interface->dev, "No more free serial devices\n");
1050                 goto probe_error;
1051         }
1052         serial->minor = minor;
1053
1054         /* register all of the individual ports with the driver core */
1055         for (i = 0; i < num_ports; ++i) {
1056                 port = serial->port[i];
1057                 dev_set_name(&port->dev, "ttyUSB%d", port->number);
1058                 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
1059                 port->dev_state = PORT_REGISTERING;
1060                 retval = device_add(&port->dev);
1061                 if (retval) {
1062                         dev_err(&port->dev, "Error registering port device, "
1063                                 "continuing\n");
1064                         port->dev_state = PORT_UNREGISTERED;
1065                 } else {
1066                         port->dev_state = PORT_REGISTERED;
1067                 }
1068         }
1069
1070         usb_serial_console_init(debug, minor);
1071
1072 exit:
1073         /* success */
1074         usb_set_intfdata(interface, serial);
1075         return 0;
1076
1077 probe_error:
1078         usb_serial_put(serial);
1079         return -EIO;
1080 }
1081 EXPORT_SYMBOL_GPL(usb_serial_probe);
1082
1083 void usb_serial_disconnect(struct usb_interface *interface)
1084 {
1085         int i;
1086         struct usb_serial *serial = usb_get_intfdata(interface);
1087         struct device *dev = &interface->dev;
1088         struct usb_serial_port *port;
1089
1090         usb_serial_console_disconnect(serial);
1091         dbg("%s", __func__);
1092
1093         mutex_lock(&serial->disc_mutex);
1094         usb_set_intfdata(interface, NULL);
1095         /* must set a flag, to signal subdrivers */
1096         serial->disconnected = 1;
1097         mutex_unlock(&serial->disc_mutex);
1098
1099         for (i = 0; i < serial->num_ports; ++i) {
1100                 port = serial->port[i];
1101                 if (port) {
1102                         struct tty_struct *tty = tty_port_tty_get(&port->port);
1103                         if (tty) {
1104                                 tty_vhangup(tty);
1105                                 tty_kref_put(tty);
1106                         }
1107                         kill_traffic(port);
1108                         cancel_work_sync(&port->work);
1109                         if (port->dev_state == PORT_REGISTERED) {
1110
1111                                 /* Make sure the port is bound so that the
1112                                  * driver's port_remove method is called.
1113                                  */
1114                                 if (!port->dev.driver) {
1115                                         int rc;
1116
1117                                         port->dev.driver =
1118                                                         &serial->type->driver;
1119                                         rc = device_bind_driver(&port->dev);
1120                                 }
1121                                 port->dev_state = PORT_UNREGISTERING;
1122                                 device_del(&port->dev);
1123                                 port->dev_state = PORT_UNREGISTERED;
1124                         }
1125                 }
1126         }
1127         serial->type->disconnect(serial);
1128
1129         /* let the last holder of this object cause it to be cleaned up */
1130         usb_serial_put(serial);
1131         dev_info(dev, "device disconnected\n");
1132 }
1133 EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1134
1135 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1136 {
1137         struct usb_serial *serial = usb_get_intfdata(intf);
1138         struct usb_serial_port *port;
1139         int i, r = 0;
1140
1141         serial->suspending = 1;
1142
1143         if (serial->type->suspend) {
1144                 r = serial->type->suspend(serial, message);
1145                 if (r < 0) {
1146                         serial->suspending = 0;
1147                         goto err_out;
1148                 }
1149         }
1150
1151         for (i = 0; i < serial->num_ports; ++i) {
1152                 port = serial->port[i];
1153                 if (port)
1154                         kill_traffic(port);
1155         }
1156
1157 err_out:
1158         return r;
1159 }
1160 EXPORT_SYMBOL(usb_serial_suspend);
1161
1162 int usb_serial_resume(struct usb_interface *intf)
1163 {
1164         struct usb_serial *serial = usb_get_intfdata(intf);
1165         int rv;
1166
1167         serial->suspending = 0;
1168         if (serial->type->resume)
1169                 rv = serial->type->resume(serial);
1170         else
1171                 rv = usb_serial_generic_resume(serial);
1172
1173         return rv;
1174 }
1175 EXPORT_SYMBOL(usb_serial_resume);
1176
1177 static const struct tty_operations serial_ops = {
1178         .open =                 serial_open,
1179         .close =                serial_close,
1180         .write =                serial_write,
1181         .hangup =               serial_hangup,
1182         .write_room =           serial_write_room,
1183         .ioctl =                serial_ioctl,
1184         .set_termios =          serial_set_termios,
1185         .throttle =             serial_throttle,
1186         .unthrottle =           serial_unthrottle,
1187         .break_ctl =            serial_break,
1188         .chars_in_buffer =      serial_chars_in_buffer,
1189         .tiocmget =             serial_tiocmget,
1190         .tiocmset =             serial_tiocmset,
1191         .cleanup =              serial_cleanup,
1192         .install =              serial_install,
1193         .proc_fops =            &serial_proc_fops,
1194 };
1195
1196
1197 struct tty_driver *usb_serial_tty_driver;
1198
1199 static int __init usb_serial_init(void)
1200 {
1201         int i;
1202         int result;
1203
1204         usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1205         if (!usb_serial_tty_driver)
1206                 return -ENOMEM;
1207
1208         /* Initialize our global data */
1209         for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1210                 serial_table[i] = NULL;
1211
1212         result = bus_register(&usb_serial_bus_type);
1213         if (result) {
1214                 printk(KERN_ERR "usb-serial: %s - registering bus driver "
1215                        "failed\n", __func__);
1216                 goto exit_bus;
1217         }
1218
1219         usb_serial_tty_driver->owner = THIS_MODULE;
1220         usb_serial_tty_driver->driver_name = "usbserial";
1221         usb_serial_tty_driver->name =   "ttyUSB";
1222         usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1223         usb_serial_tty_driver->minor_start = 0;
1224         usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1225         usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1226         usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1227                                                 TTY_DRIVER_DYNAMIC_DEV;
1228         usb_serial_tty_driver->init_termios = tty_std_termios;
1229         usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1230                                                         | HUPCL | CLOCAL;
1231         usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1232         usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1233         tty_set_operations(usb_serial_tty_driver, &serial_ops);
1234         result = tty_register_driver(usb_serial_tty_driver);
1235         if (result) {
1236                 printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n",
1237                        __func__);
1238                 goto exit_reg_driver;
1239         }
1240
1241         /* register the USB driver */
1242         result = usb_register(&usb_serial_driver);
1243         if (result < 0) {
1244                 printk(KERN_ERR "usb-serial: %s - usb_register failed\n",
1245                        __func__);
1246                 goto exit_tty;
1247         }
1248
1249         /* register the generic driver, if we should */
1250         result = usb_serial_generic_register(debug);
1251         if (result < 0) {
1252                 printk(KERN_ERR "usb-serial: %s - registering generic "
1253                        "driver failed\n", __func__);
1254                 goto exit_generic;
1255         }
1256
1257         printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1258
1259         return result;
1260
1261 exit_generic:
1262         usb_deregister(&usb_serial_driver);
1263
1264 exit_tty:
1265         tty_unregister_driver(usb_serial_tty_driver);
1266
1267 exit_reg_driver:
1268         bus_unregister(&usb_serial_bus_type);
1269
1270 exit_bus:
1271         printk(KERN_ERR "usb-serial: %s - returning with error %d\n",
1272                __func__, result);
1273         put_tty_driver(usb_serial_tty_driver);
1274         return result;
1275 }
1276
1277
1278 static void __exit usb_serial_exit(void)
1279 {
1280         usb_serial_console_exit();
1281
1282         usb_serial_generic_deregister();
1283
1284         usb_deregister(&usb_serial_driver);
1285         tty_unregister_driver(usb_serial_tty_driver);
1286         put_tty_driver(usb_serial_tty_driver);
1287         bus_unregister(&usb_serial_bus_type);
1288 }
1289
1290
1291 module_init(usb_serial_init);
1292 module_exit(usb_serial_exit);
1293
1294 #define set_to_generic_if_null(type, function)                          \
1295         do {                                                            \
1296                 if (!type->function) {                                  \
1297                         type->function = usb_serial_generic_##function; \
1298                         dbg("Had to override the " #function            \
1299                                 " usb serial operation with the generic one.");\
1300                         }                                               \
1301         } while (0)
1302
1303 static void fixup_generic(struct usb_serial_driver *device)
1304 {
1305         set_to_generic_if_null(device, open);
1306         set_to_generic_if_null(device, write);
1307         set_to_generic_if_null(device, close);
1308         set_to_generic_if_null(device, write_room);
1309         set_to_generic_if_null(device, chars_in_buffer);
1310         set_to_generic_if_null(device, read_bulk_callback);
1311         set_to_generic_if_null(device, write_bulk_callback);
1312         set_to_generic_if_null(device, disconnect);
1313         set_to_generic_if_null(device, release);
1314 }
1315
1316 int usb_serial_register(struct usb_serial_driver *driver)
1317 {
1318         /* must be called with BKL held */
1319         int retval;
1320
1321         if (usb_disabled())
1322                 return -ENODEV;
1323
1324         fixup_generic(driver);
1325
1326         if (!driver->description)
1327                 driver->description = driver->driver.name;
1328
1329         /* Add this device to our list of devices */
1330         list_add(&driver->driver_list, &usb_serial_driver_list);
1331
1332         retval = usb_serial_bus_register(driver);
1333         if (retval) {
1334                 printk(KERN_ERR "usb-serial: problem %d when registering "
1335                        "driver %s\n", retval, driver->description);
1336                 list_del(&driver->driver_list);
1337         } else
1338                 printk(KERN_INFO "USB Serial support registered for %s\n",
1339                                                 driver->description);
1340
1341         return retval;
1342 }
1343 EXPORT_SYMBOL_GPL(usb_serial_register);
1344
1345
1346 void usb_serial_deregister(struct usb_serial_driver *device)
1347 {
1348         /* must be called with BKL held */
1349         printk(KERN_INFO "USB Serial deregistering driver %s\n",
1350                device->description);
1351         list_del(&device->driver_list);
1352         usb_serial_bus_deregister(device);
1353 }
1354 EXPORT_SYMBOL_GPL(usb_serial_deregister);
1355
1356 /* Module information */
1357 MODULE_AUTHOR(DRIVER_AUTHOR);
1358 MODULE_DESCRIPTION(DRIVER_DESC);
1359 MODULE_LICENSE("GPL");
1360
1361 module_param(debug, bool, S_IRUGO | S_IWUSR);
1362 MODULE_PARM_DESC(debug, "Debug enabled or not");