USB: serial: generalise write buffer preparation
[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         usb_kill_urb(port->read_urb);
552         usb_kill_urb(port->write_urb);
553         /*
554          * This is tricky.
555          * Some drivers submit the read_urb in the
556          * handler for the write_urb or vice versa
557          * this order determines the order in which
558          * usb_kill_urb() must be used to reliably
559          * kill the URBs. As it is unknown here,
560          * both orders must be used in turn.
561          * The call below is not redundant.
562          */
563         usb_kill_urb(port->read_urb);
564         usb_kill_urb(port->interrupt_in_urb);
565         usb_kill_urb(port->interrupt_out_urb);
566 }
567
568 static void port_release(struct device *dev)
569 {
570         struct usb_serial_port *port = to_usb_serial_port(dev);
571
572         dbg ("%s - %s", __func__, dev_name(dev));
573
574         /*
575          * Stop all the traffic before cancelling the work, so that
576          * nobody will restart it by calling usb_serial_port_softint.
577          */
578         kill_traffic(port);
579         cancel_work_sync(&port->work);
580
581         usb_free_urb(port->read_urb);
582         usb_free_urb(port->write_urb);
583         usb_free_urb(port->interrupt_in_urb);
584         usb_free_urb(port->interrupt_out_urb);
585         kfifo_free(&port->write_fifo);
586         kfree(port->bulk_in_buffer);
587         kfree(port->bulk_out_buffer);
588         kfree(port->interrupt_in_buffer);
589         kfree(port->interrupt_out_buffer);
590         kfree(port);
591 }
592
593 static struct usb_serial *create_serial(struct usb_device *dev,
594                                         struct usb_interface *interface,
595                                         struct usb_serial_driver *driver)
596 {
597         struct usb_serial *serial;
598
599         serial = kzalloc(sizeof(*serial), GFP_KERNEL);
600         if (!serial) {
601                 dev_err(&dev->dev, "%s - out of memory\n", __func__);
602                 return NULL;
603         }
604         serial->dev = usb_get_dev(dev);
605         serial->type = driver;
606         serial->interface = interface;
607         kref_init(&serial->kref);
608         mutex_init(&serial->disc_mutex);
609         serial->minor = SERIAL_TTY_NO_MINOR;
610
611         return serial;
612 }
613
614 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
615                                             struct usb_serial_driver *drv)
616 {
617         struct usb_dynid *dynid;
618
619         spin_lock(&drv->dynids.lock);
620         list_for_each_entry(dynid, &drv->dynids.list, node) {
621                 if (usb_match_one_id(intf, &dynid->id)) {
622                         spin_unlock(&drv->dynids.lock);
623                         return &dynid->id;
624                 }
625         }
626         spin_unlock(&drv->dynids.lock);
627         return NULL;
628 }
629
630 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
631                                                 struct usb_interface *intf)
632 {
633         const struct usb_device_id *id;
634
635         id = usb_match_id(intf, drv->id_table);
636         if (id) {
637                 dbg("static descriptor matches");
638                 goto exit;
639         }
640         id = match_dynamic_id(intf, drv);
641         if (id)
642                 dbg("dynamic descriptor matches");
643 exit:
644         return id;
645 }
646
647 static struct usb_serial_driver *search_serial_device(
648                                         struct usb_interface *iface)
649 {
650         const struct usb_device_id *id;
651         struct usb_serial_driver *drv;
652
653         /* Check if the usb id matches a known device */
654         list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
655                 id = get_iface_id(drv, iface);
656                 if (id)
657                         return drv;
658         }
659
660         return NULL;
661 }
662
663 static int serial_carrier_raised(struct tty_port *port)
664 {
665         struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
666         struct usb_serial_driver *drv = p->serial->type;
667         if (drv->carrier_raised)
668                 return drv->carrier_raised(p);
669         /* No carrier control - don't block */
670         return 1;       
671 }
672
673 static void serial_dtr_rts(struct tty_port *port, int on)
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->dtr_rts)
678                 drv->dtr_rts(p, on);
679 }
680
681 static const struct tty_port_operations serial_port_ops = {
682         .carrier_raised = serial_carrier_raised,
683         .dtr_rts = serial_dtr_rts,
684         .activate = serial_activate,
685         .shutdown = serial_down,
686 };
687
688 int usb_serial_probe(struct usb_interface *interface,
689                                const struct usb_device_id *id)
690 {
691         struct usb_device *dev = interface_to_usbdev(interface);
692         struct usb_serial *serial = NULL;
693         struct usb_serial_port *port;
694         struct usb_host_interface *iface_desc;
695         struct usb_endpoint_descriptor *endpoint;
696         struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
697         struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
698         struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
699         struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
700         struct usb_serial_driver *type = NULL;
701         int retval;
702         unsigned int minor;
703         int buffer_size;
704         int i;
705         int num_interrupt_in = 0;
706         int num_interrupt_out = 0;
707         int num_bulk_in = 0;
708         int num_bulk_out = 0;
709         int num_ports = 0;
710         int max_endpoints;
711
712         lock_kernel(); /* guard against unloading a serial driver module */
713         type = search_serial_device(interface);
714         if (!type) {
715                 unlock_kernel();
716                 dbg("none matched");
717                 return -ENODEV;
718         }
719
720         serial = create_serial(dev, interface, type);
721         if (!serial) {
722                 unlock_kernel();
723                 dev_err(&interface->dev, "%s - out of memory\n", __func__);
724                 return -ENOMEM;
725         }
726
727         /* if this device type has a probe function, call it */
728         if (type->probe) {
729                 const struct usb_device_id *id;
730
731                 if (!try_module_get(type->driver.owner)) {
732                         unlock_kernel();
733                         dev_err(&interface->dev,
734                                 "module get failed, exiting\n");
735                         kfree(serial);
736                         return -EIO;
737                 }
738
739                 id = get_iface_id(type, interface);
740                 retval = type->probe(serial, id);
741                 module_put(type->driver.owner);
742
743                 if (retval) {
744                         unlock_kernel();
745                         dbg("sub driver rejected device");
746                         kfree(serial);
747                         return retval;
748                 }
749         }
750
751         /* descriptor matches, let's find the endpoints needed */
752         /* check out the endpoints */
753         iface_desc = interface->cur_altsetting;
754         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
755                 endpoint = &iface_desc->endpoint[i].desc;
756
757                 if (usb_endpoint_is_bulk_in(endpoint)) {
758                         /* we found a bulk in endpoint */
759                         dbg("found bulk in on endpoint %d", i);
760                         bulk_in_endpoint[num_bulk_in] = endpoint;
761                         ++num_bulk_in;
762                 }
763
764                 if (usb_endpoint_is_bulk_out(endpoint)) {
765                         /* we found a bulk out endpoint */
766                         dbg("found bulk out on endpoint %d", i);
767                         bulk_out_endpoint[num_bulk_out] = endpoint;
768                         ++num_bulk_out;
769                 }
770
771                 if (usb_endpoint_is_int_in(endpoint)) {
772                         /* we found a interrupt in endpoint */
773                         dbg("found interrupt in on endpoint %d", i);
774                         interrupt_in_endpoint[num_interrupt_in] = endpoint;
775                         ++num_interrupt_in;
776                 }
777
778                 if (usb_endpoint_is_int_out(endpoint)) {
779                         /* we found an interrupt out endpoint */
780                         dbg("found interrupt out on endpoint %d", i);
781                         interrupt_out_endpoint[num_interrupt_out] = endpoint;
782                         ++num_interrupt_out;
783                 }
784         }
785
786 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
787         /* BEGIN HORRIBLE HACK FOR PL2303 */
788         /* this is needed due to the looney way its endpoints are set up */
789         if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
790              (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
791             ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
792              (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
793             ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
794              (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
795             ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
796              (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
797                 if (interface != dev->actconfig->interface[0]) {
798                         /* check out the endpoints of the other interface*/
799                         iface_desc = dev->actconfig->interface[0]->cur_altsetting;
800                         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
801                                 endpoint = &iface_desc->endpoint[i].desc;
802                                 if (usb_endpoint_is_int_in(endpoint)) {
803                                         /* we found a interrupt in endpoint */
804                                         dbg("found interrupt in for Prolific device on separate interface");
805                                         interrupt_in_endpoint[num_interrupt_in] = endpoint;
806                                         ++num_interrupt_in;
807                                 }
808                         }
809                 }
810
811                 /* Now make sure the PL-2303 is configured correctly.
812                  * If not, give up now and hope this hack will work
813                  * properly during a later invocation of usb_serial_probe
814                  */
815                 if (num_bulk_in == 0 || num_bulk_out == 0) {
816                         unlock_kernel();
817                         dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
818                         kfree(serial);
819                         return -ENODEV;
820                 }
821         }
822         /* END HORRIBLE HACK FOR PL2303 */
823 #endif
824
825 #ifdef CONFIG_USB_SERIAL_GENERIC
826         if (type == &usb_serial_generic_device) {
827                 num_ports = num_bulk_out;
828                 if (num_ports == 0) {
829                         unlock_kernel();
830                         dev_err(&interface->dev,
831                             "Generic device with no bulk out, not allowed.\n");
832                         kfree(serial);
833                         return -EIO;
834                 }
835         }
836 #endif
837         if (!num_ports) {
838                 /* if this device type has a calc_num_ports function, call it */
839                 if (type->calc_num_ports) {
840                         if (!try_module_get(type->driver.owner)) {
841                                 unlock_kernel();
842                                 dev_err(&interface->dev,
843                                         "module get failed, exiting\n");
844                                 kfree(serial);
845                                 return -EIO;
846                         }
847                         num_ports = type->calc_num_ports(serial);
848                         module_put(type->driver.owner);
849                 }
850                 if (!num_ports)
851                         num_ports = type->num_ports;
852         }
853
854         serial->num_ports = num_ports;
855         serial->num_bulk_in = num_bulk_in;
856         serial->num_bulk_out = num_bulk_out;
857         serial->num_interrupt_in = num_interrupt_in;
858         serial->num_interrupt_out = num_interrupt_out;
859
860         /* found all that we need */
861         dev_info(&interface->dev, "%s converter detected\n",
862                         type->description);
863
864         /* create our ports, we need as many as the max endpoints */
865         /* we don't use num_ports here because some devices have more
866            endpoint pairs than ports */
867         max_endpoints = max(num_bulk_in, num_bulk_out);
868         max_endpoints = max(max_endpoints, num_interrupt_in);
869         max_endpoints = max(max_endpoints, num_interrupt_out);
870         max_endpoints = max(max_endpoints, (int)serial->num_ports);
871         serial->num_port_pointers = max_endpoints;
872         unlock_kernel();
873
874         dbg("%s - setting up %d port structures for this device",
875                                                 __func__, max_endpoints);
876         for (i = 0; i < max_endpoints; ++i) {
877                 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
878                 if (!port)
879                         goto probe_error;
880                 tty_port_init(&port->port);
881                 port->port.ops = &serial_port_ops;
882                 port->serial = serial;
883                 spin_lock_init(&port->lock);
884                 /* Keep this for private driver use for the moment but
885                    should probably go away */
886                 INIT_WORK(&port->work, usb_serial_port_work);
887                 serial->port[i] = port;
888                 port->dev.parent = &interface->dev;
889                 port->dev.driver = NULL;
890                 port->dev.bus = &usb_serial_bus_type;
891                 port->dev.release = &port_release;
892                 device_initialize(&port->dev);
893         }
894
895         /* set up the endpoint information */
896         for (i = 0; i < num_bulk_in; ++i) {
897                 endpoint = bulk_in_endpoint[i];
898                 port = serial->port[i];
899                 port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
900                 if (!port->read_urb) {
901                         dev_err(&interface->dev, "No free urbs available\n");
902                         goto probe_error;
903                 }
904                 buffer_size = serial->type->bulk_in_size;
905                 if (!buffer_size)
906                         buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
907                 port->bulk_in_size = buffer_size;
908                 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
909                 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
910                 if (!port->bulk_in_buffer) {
911                         dev_err(&interface->dev,
912                                         "Couldn't allocate bulk_in_buffer\n");
913                         goto probe_error;
914                 }
915                 usb_fill_bulk_urb(port->read_urb, dev,
916                                 usb_rcvbulkpipe(dev,
917                                                 endpoint->bEndpointAddress),
918                                 port->bulk_in_buffer, buffer_size,
919                                 serial->type->read_bulk_callback, port);
920         }
921
922         for (i = 0; i < num_bulk_out; ++i) {
923                 endpoint = bulk_out_endpoint[i];
924                 port = serial->port[i];
925                 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
926                 if (!port->write_urb) {
927                         dev_err(&interface->dev, "No free urbs available\n");
928                         goto probe_error;
929                 }
930                 if (kfifo_alloc(&port->write_fifo, PAGE_SIZE, GFP_KERNEL))
931                         goto probe_error;
932                 buffer_size = serial->type->bulk_out_size;
933                 if (!buffer_size)
934                         buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
935                 port->bulk_out_size = buffer_size;
936                 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
937                 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
938                 if (!port->bulk_out_buffer) {
939                         dev_err(&interface->dev,
940                                         "Couldn't allocate bulk_out_buffer\n");
941                         goto probe_error;
942                 }
943                 usb_fill_bulk_urb(port->write_urb, dev,
944                                 usb_sndbulkpipe(dev,
945                                         endpoint->bEndpointAddress),
946                                 port->bulk_out_buffer, buffer_size,
947                                 serial->type->write_bulk_callback, port);
948         }
949
950         if (serial->type->read_int_callback) {
951                 for (i = 0; i < num_interrupt_in; ++i) {
952                         endpoint = interrupt_in_endpoint[i];
953                         port = serial->port[i];
954                         port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
955                         if (!port->interrupt_in_urb) {
956                                 dev_err(&interface->dev,
957                                                 "No free urbs available\n");
958                                 goto probe_error;
959                         }
960                         buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
961                         port->interrupt_in_endpointAddress =
962                                                 endpoint->bEndpointAddress;
963                         port->interrupt_in_buffer = kmalloc(buffer_size,
964                                                                 GFP_KERNEL);
965                         if (!port->interrupt_in_buffer) {
966                                 dev_err(&interface->dev,
967                                     "Couldn't allocate interrupt_in_buffer\n");
968                                 goto probe_error;
969                         }
970                         usb_fill_int_urb(port->interrupt_in_urb, dev,
971                                 usb_rcvintpipe(dev,
972                                                 endpoint->bEndpointAddress),
973                                 port->interrupt_in_buffer, buffer_size,
974                                 serial->type->read_int_callback, port,
975                                 endpoint->bInterval);
976                 }
977         } else if (num_interrupt_in) {
978                 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
979         }
980
981         if (serial->type->write_int_callback) {
982                 for (i = 0; i < num_interrupt_out; ++i) {
983                         endpoint = interrupt_out_endpoint[i];
984                         port = serial->port[i];
985                         port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
986                         if (!port->interrupt_out_urb) {
987                                 dev_err(&interface->dev,
988                                                 "No free urbs available\n");
989                                 goto probe_error;
990                         }
991                         buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
992                         port->interrupt_out_size = buffer_size;
993                         port->interrupt_out_endpointAddress =
994                                                 endpoint->bEndpointAddress;
995                         port->interrupt_out_buffer = kmalloc(buffer_size,
996                                                                 GFP_KERNEL);
997                         if (!port->interrupt_out_buffer) {
998                                 dev_err(&interface->dev,
999                                   "Couldn't allocate interrupt_out_buffer\n");
1000                                 goto probe_error;
1001                         }
1002                         usb_fill_int_urb(port->interrupt_out_urb, dev,
1003                                 usb_sndintpipe(dev,
1004                                                   endpoint->bEndpointAddress),
1005                                 port->interrupt_out_buffer, buffer_size,
1006                                 serial->type->write_int_callback, port,
1007                                 endpoint->bInterval);
1008                 }
1009         } else if (num_interrupt_out) {
1010                 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
1011         }
1012
1013         /* if this device type has an attach function, call it */
1014         if (type->attach) {
1015                 if (!try_module_get(type->driver.owner)) {
1016                         dev_err(&interface->dev,
1017                                         "module get failed, exiting\n");
1018                         goto probe_error;
1019                 }
1020                 retval = type->attach(serial);
1021                 module_put(type->driver.owner);
1022                 if (retval < 0)
1023                         goto probe_error;
1024                 serial->attached = 1;
1025                 if (retval > 0) {
1026                         /* quietly accept this device, but don't bind to a
1027                            serial port as it's about to disappear */
1028                         serial->num_ports = 0;
1029                         goto exit;
1030                 }
1031         } else {
1032                 serial->attached = 1;
1033         }
1034
1035         if (get_free_serial(serial, num_ports, &minor) == NULL) {
1036                 dev_err(&interface->dev, "No more free serial devices\n");
1037                 goto probe_error;
1038         }
1039         serial->minor = minor;
1040
1041         /* register all of the individual ports with the driver core */
1042         for (i = 0; i < num_ports; ++i) {
1043                 port = serial->port[i];
1044                 dev_set_name(&port->dev, "ttyUSB%d", port->number);
1045                 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
1046                 port->dev_state = PORT_REGISTERING;
1047                 retval = device_add(&port->dev);
1048                 if (retval) {
1049                         dev_err(&port->dev, "Error registering port device, "
1050                                 "continuing\n");
1051                         port->dev_state = PORT_UNREGISTERED;
1052                 } else {
1053                         port->dev_state = PORT_REGISTERED;
1054                 }
1055         }
1056
1057         usb_serial_console_init(debug, minor);
1058
1059 exit:
1060         /* success */
1061         usb_set_intfdata(interface, serial);
1062         return 0;
1063
1064 probe_error:
1065         usb_serial_put(serial);
1066         return -EIO;
1067 }
1068 EXPORT_SYMBOL_GPL(usb_serial_probe);
1069
1070 void usb_serial_disconnect(struct usb_interface *interface)
1071 {
1072         int i;
1073         struct usb_serial *serial = usb_get_intfdata(interface);
1074         struct device *dev = &interface->dev;
1075         struct usb_serial_port *port;
1076
1077         usb_serial_console_disconnect(serial);
1078         dbg("%s", __func__);
1079
1080         mutex_lock(&serial->disc_mutex);
1081         usb_set_intfdata(interface, NULL);
1082         /* must set a flag, to signal subdrivers */
1083         serial->disconnected = 1;
1084         mutex_unlock(&serial->disc_mutex);
1085
1086         for (i = 0; i < serial->num_ports; ++i) {
1087                 port = serial->port[i];
1088                 if (port) {
1089                         struct tty_struct *tty = tty_port_tty_get(&port->port);
1090                         if (tty) {
1091                                 tty_vhangup(tty);
1092                                 tty_kref_put(tty);
1093                         }
1094                         kill_traffic(port);
1095                         cancel_work_sync(&port->work);
1096                         if (port->dev_state == PORT_REGISTERED) {
1097
1098                                 /* Make sure the port is bound so that the
1099                                  * driver's port_remove method is called.
1100                                  */
1101                                 if (!port->dev.driver) {
1102                                         int rc;
1103
1104                                         port->dev.driver =
1105                                                         &serial->type->driver;
1106                                         rc = device_bind_driver(&port->dev);
1107                                 }
1108                                 port->dev_state = PORT_UNREGISTERING;
1109                                 device_del(&port->dev);
1110                                 port->dev_state = PORT_UNREGISTERED;
1111                         }
1112                 }
1113         }
1114         serial->type->disconnect(serial);
1115
1116         /* let the last holder of this object cause it to be cleaned up */
1117         usb_serial_put(serial);
1118         dev_info(dev, "device disconnected\n");
1119 }
1120 EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1121
1122 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1123 {
1124         struct usb_serial *serial = usb_get_intfdata(intf);
1125         struct usb_serial_port *port;
1126         int i, r = 0;
1127
1128         serial->suspending = 1;
1129
1130         if (serial->type->suspend) {
1131                 r = serial->type->suspend(serial, message);
1132                 if (r < 0) {
1133                         serial->suspending = 0;
1134                         goto err_out;
1135                 }
1136         }
1137
1138         for (i = 0; i < serial->num_ports; ++i) {
1139                 port = serial->port[i];
1140                 if (port)
1141                         kill_traffic(port);
1142         }
1143
1144 err_out:
1145         return r;
1146 }
1147 EXPORT_SYMBOL(usb_serial_suspend);
1148
1149 int usb_serial_resume(struct usb_interface *intf)
1150 {
1151         struct usb_serial *serial = usb_get_intfdata(intf);
1152         int rv;
1153
1154         serial->suspending = 0;
1155         if (serial->type->resume)
1156                 rv = serial->type->resume(serial);
1157         else
1158                 rv = usb_serial_generic_resume(serial);
1159
1160         return rv;
1161 }
1162 EXPORT_SYMBOL(usb_serial_resume);
1163
1164 static const struct tty_operations serial_ops = {
1165         .open =                 serial_open,
1166         .close =                serial_close,
1167         .write =                serial_write,
1168         .hangup =               serial_hangup,
1169         .write_room =           serial_write_room,
1170         .ioctl =                serial_ioctl,
1171         .set_termios =          serial_set_termios,
1172         .throttle =             serial_throttle,
1173         .unthrottle =           serial_unthrottle,
1174         .break_ctl =            serial_break,
1175         .chars_in_buffer =      serial_chars_in_buffer,
1176         .tiocmget =             serial_tiocmget,
1177         .tiocmset =             serial_tiocmset,
1178         .cleanup =              serial_cleanup,
1179         .install =              serial_install,
1180         .proc_fops =            &serial_proc_fops,
1181 };
1182
1183
1184 struct tty_driver *usb_serial_tty_driver;
1185
1186 static int __init usb_serial_init(void)
1187 {
1188         int i;
1189         int result;
1190
1191         usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1192         if (!usb_serial_tty_driver)
1193                 return -ENOMEM;
1194
1195         /* Initialize our global data */
1196         for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1197                 serial_table[i] = NULL;
1198
1199         result = bus_register(&usb_serial_bus_type);
1200         if (result) {
1201                 printk(KERN_ERR "usb-serial: %s - registering bus driver "
1202                        "failed\n", __func__);
1203                 goto exit_bus;
1204         }
1205
1206         usb_serial_tty_driver->owner = THIS_MODULE;
1207         usb_serial_tty_driver->driver_name = "usbserial";
1208         usb_serial_tty_driver->name =   "ttyUSB";
1209         usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1210         usb_serial_tty_driver->minor_start = 0;
1211         usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1212         usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1213         usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1214                                                 TTY_DRIVER_DYNAMIC_DEV;
1215         usb_serial_tty_driver->init_termios = tty_std_termios;
1216         usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1217                                                         | HUPCL | CLOCAL;
1218         usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1219         usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1220         tty_set_operations(usb_serial_tty_driver, &serial_ops);
1221         result = tty_register_driver(usb_serial_tty_driver);
1222         if (result) {
1223                 printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n",
1224                        __func__);
1225                 goto exit_reg_driver;
1226         }
1227
1228         /* register the USB driver */
1229         result = usb_register(&usb_serial_driver);
1230         if (result < 0) {
1231                 printk(KERN_ERR "usb-serial: %s - usb_register failed\n",
1232                        __func__);
1233                 goto exit_tty;
1234         }
1235
1236         /* register the generic driver, if we should */
1237         result = usb_serial_generic_register(debug);
1238         if (result < 0) {
1239                 printk(KERN_ERR "usb-serial: %s - registering generic "
1240                        "driver failed\n", __func__);
1241                 goto exit_generic;
1242         }
1243
1244         printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1245
1246         return result;
1247
1248 exit_generic:
1249         usb_deregister(&usb_serial_driver);
1250
1251 exit_tty:
1252         tty_unregister_driver(usb_serial_tty_driver);
1253
1254 exit_reg_driver:
1255         bus_unregister(&usb_serial_bus_type);
1256
1257 exit_bus:
1258         printk(KERN_ERR "usb-serial: %s - returning with error %d\n",
1259                __func__, result);
1260         put_tty_driver(usb_serial_tty_driver);
1261         return result;
1262 }
1263
1264
1265 static void __exit usb_serial_exit(void)
1266 {
1267         usb_serial_console_exit();
1268
1269         usb_serial_generic_deregister();
1270
1271         usb_deregister(&usb_serial_driver);
1272         tty_unregister_driver(usb_serial_tty_driver);
1273         put_tty_driver(usb_serial_tty_driver);
1274         bus_unregister(&usb_serial_bus_type);
1275 }
1276
1277
1278 module_init(usb_serial_init);
1279 module_exit(usb_serial_exit);
1280
1281 #define set_to_generic_if_null(type, function)                          \
1282         do {                                                            \
1283                 if (!type->function) {                                  \
1284                         type->function = usb_serial_generic_##function; \
1285                         dbg("Had to override the " #function            \
1286                                 " usb serial operation with the generic one.");\
1287                         }                                               \
1288         } while (0)
1289
1290 static void fixup_generic(struct usb_serial_driver *device)
1291 {
1292         set_to_generic_if_null(device, open);
1293         set_to_generic_if_null(device, write);
1294         set_to_generic_if_null(device, close);
1295         set_to_generic_if_null(device, write_room);
1296         set_to_generic_if_null(device, chars_in_buffer);
1297         set_to_generic_if_null(device, read_bulk_callback);
1298         set_to_generic_if_null(device, write_bulk_callback);
1299         set_to_generic_if_null(device, disconnect);
1300         set_to_generic_if_null(device, release);
1301         set_to_generic_if_null(device, process_read_urb);
1302         set_to_generic_if_null(device, prepare_write_buffer);
1303 }
1304
1305 int usb_serial_register(struct usb_serial_driver *driver)
1306 {
1307         /* must be called with BKL held */
1308         int retval;
1309
1310         if (usb_disabled())
1311                 return -ENODEV;
1312
1313         fixup_generic(driver);
1314
1315         if (!driver->description)
1316                 driver->description = driver->driver.name;
1317
1318         /* Add this device to our list of devices */
1319         list_add(&driver->driver_list, &usb_serial_driver_list);
1320
1321         retval = usb_serial_bus_register(driver);
1322         if (retval) {
1323                 printk(KERN_ERR "usb-serial: problem %d when registering "
1324                        "driver %s\n", retval, driver->description);
1325                 list_del(&driver->driver_list);
1326         } else
1327                 printk(KERN_INFO "USB Serial support registered for %s\n",
1328                                                 driver->description);
1329
1330         return retval;
1331 }
1332 EXPORT_SYMBOL_GPL(usb_serial_register);
1333
1334
1335 void usb_serial_deregister(struct usb_serial_driver *device)
1336 {
1337         /* must be called with BKL held */
1338         printk(KERN_INFO "USB Serial deregistering driver %s\n",
1339                device->description);
1340         list_del(&device->driver_list);
1341         usb_serial_bus_deregister(device);
1342 }
1343 EXPORT_SYMBOL_GPL(usb_serial_deregister);
1344
1345 /* Module information */
1346 MODULE_AUTHOR(DRIVER_AUTHOR);
1347 MODULE_DESCRIPTION(DRIVER_DESC);
1348 MODULE_LICENSE("GPL");
1349
1350 module_param(debug, bool, S_IRUGO | S_IWUSR);
1351 MODULE_PARM_DESC(debug, "Debug enabled or not");