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