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