]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - drivers/usb/serial/usb-serial.c
usb-serial: don't release unregistered minors
[linux-2.6-omap-h63xx.git] / drivers / usb / serial / usb-serial.c
1 /*
2  * USB Serial Converter driver
3  *
4  * Copyright (C) 1999 - 2005 Greg Kroah-Hartman (greg@kroah.com)
5  * Copyright (C) 2000 Peter Berger (pberger@brimson.com)
6  * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com)
7  *
8  *      This program is free software; you can redistribute it and/or
9  *      modify it under the terms of the GNU General Public License version
10  *      2 as published by the Free Software Foundation.
11  *
12  * This driver was originally based on the ACM driver by Armin Fuerst (which was
13  * based on a driver by Brad Keryan)
14  *
15  * See Documentation/usb/usb-serial.txt for more information on using this
16  * driver
17  *
18  */
19
20 #include <linux/kernel.h>
21 #include <linux/errno.h>
22 #include <linux/init.h>
23 #include <linux/slab.h>
24 #include <linux/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         port->port.tty = 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         port->port.tty = 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                 if (port->port.tty) {
280                         if (port->port.tty->driver_data)
281                                 port->port.tty->driver_data = NULL;
282                         port->port.tty = NULL;
283                 }
284         }
285
286         if (port->port.count == 0) {
287                 mutex_lock(&port->serial->disc_mutex);
288                 if (!port->serial->disconnected)
289                         usb_autopm_put_interface(port->serial->interface);
290                 mutex_unlock(&port->serial->disc_mutex);
291                 module_put(port->serial->type->driver.owner);
292         }
293
294         mutex_unlock(&port->mutex);
295         usb_serial_put(port->serial);
296 }
297
298 static int serial_write(struct tty_struct *tty, const unsigned char *buf,
299                                                                 int count)
300 {
301         struct usb_serial_port *port = tty->driver_data;
302         int retval = -ENODEV;
303
304         if (port->serial->dev->state == USB_STATE_NOTATTACHED)
305                 goto exit;
306
307         dbg("%s - port %d, %d byte(s)", __func__, port->number, count);
308
309         /* count is managed under the mutex lock for the tty so cannot
310            drop to zero until after the last close completes */
311         WARN_ON(!port->port.count);
312
313         /* pass on to the driver specific version of this function */
314         retval = port->serial->type->write(tty, port, buf, count);
315
316 exit:
317         return retval;
318 }
319
320 static int serial_write_room(struct tty_struct *tty)
321 {
322         struct usb_serial_port *port = tty->driver_data;
323         dbg("%s - port %d", __func__, port->number);
324         WARN_ON(!port->port.count);
325         /* pass on to the driver specific version of this function */
326         return port->serial->type->write_room(tty);
327 }
328
329 static int serial_chars_in_buffer(struct tty_struct *tty)
330 {
331         struct usb_serial_port *port = tty->driver_data;
332         dbg("%s = port %d", __func__, port->number);
333
334         WARN_ON(!port->port.count);
335         /* pass on to the driver specific version of this function */
336         return port->serial->type->chars_in_buffer(tty);
337 }
338
339 static void serial_throttle(struct tty_struct *tty)
340 {
341         struct usb_serial_port *port = tty->driver_data;
342         dbg("%s - port %d", __func__, port->number);
343
344         WARN_ON(!port->port.count);
345         /* pass on to the driver specific version of this function */
346         if (port->serial->type->throttle)
347                 port->serial->type->throttle(tty);
348 }
349
350 static void serial_unthrottle(struct tty_struct *tty)
351 {
352         struct usb_serial_port *port = tty->driver_data;
353         dbg("%s - port %d", __func__, port->number);
354
355         WARN_ON(!port->port.count);
356         /* pass on to the driver specific version of this function */
357         if (port->serial->type->unthrottle)
358                 port->serial->type->unthrottle(tty);
359 }
360
361 static int serial_ioctl(struct tty_struct *tty, struct file *file,
362                                         unsigned int cmd, unsigned long arg)
363 {
364         struct usb_serial_port *port = tty->driver_data;
365         int retval = -ENODEV;
366
367         dbg("%s - port %d, cmd 0x%.4x", __func__, port->number, cmd);
368
369         WARN_ON(!port->port.count);
370
371         /* pass on to the driver specific version of this function
372            if it is available */
373         if (port->serial->type->ioctl) {
374                 lock_kernel();
375                 retval = port->serial->type->ioctl(tty, file, cmd, arg);
376                 unlock_kernel();
377         } else
378                 retval = -ENOIOCTLCMD;
379         return retval;
380 }
381
382 static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
383 {
384         struct usb_serial_port *port = tty->driver_data;
385         dbg("%s - port %d", __func__, port->number);
386
387         WARN_ON(!port->port.count);
388         /* pass on to the driver specific version of this function
389            if it is available */
390         if (port->serial->type->set_termios)
391                 port->serial->type->set_termios(tty, port, old);
392         else
393                 tty_termios_copy_hw(tty->termios, old);
394 }
395
396 static int serial_break(struct tty_struct *tty, int break_state)
397 {
398         struct usb_serial_port *port = tty->driver_data;
399
400         dbg("%s - port %d", __func__, port->number);
401
402         WARN_ON(!port->port.count);
403         /* pass on to the driver specific version of this function
404            if it is available */
405         if (port->serial->type->break_ctl) {
406                 lock_kernel();
407                 port->serial->type->break_ctl(tty, break_state);
408                 unlock_kernel();
409         }
410         return 0;
411 }
412
413 static int serial_read_proc(char *page, char **start, off_t off, int count,
414                                                         int *eof, void *data)
415 {
416         struct usb_serial *serial;
417         int length = 0;
418         int i;
419         off_t begin = 0;
420         char tmp[40];
421
422         dbg("%s", __func__);
423         length += sprintf(page, "usbserinfo:1.0 driver:2.0\n");
424         for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) {
425                 serial = usb_serial_get_by_index(i);
426                 if (serial == NULL)
427                         continue;
428
429                 length += sprintf(page+length, "%d:", i);
430                 if (serial->type->driver.owner)
431                         length += sprintf(page+length, " module:%s",
432                                 module_name(serial->type->driver.owner));
433                 length += sprintf(page+length, " name:\"%s\"",
434                                 serial->type->description);
435                 length += sprintf(page+length, " vendor:%04x product:%04x",
436                         le16_to_cpu(serial->dev->descriptor.idVendor),
437                         le16_to_cpu(serial->dev->descriptor.idProduct));
438                 length += sprintf(page+length, " num_ports:%d",
439                                                         serial->num_ports);
440                 length += sprintf(page+length, " port:%d",
441                                                         i - serial->minor + 1);
442                 usb_make_path(serial->dev, tmp, sizeof(tmp));
443                 length += sprintf(page+length, " path:%s", tmp);
444
445                 length += sprintf(page+length, "\n");
446                 if ((length + begin) > (off + count)) {
447                         usb_serial_put(serial);
448                         goto done;
449                 }
450                 if ((length + begin) < off) {
451                         begin += length;
452                         length = 0;
453                 }
454                 usb_serial_put(serial);
455         }
456         *eof = 1;
457 done:
458         if (off >= (length + begin))
459                 return 0;
460         *start = page + (off-begin);
461         return (count < begin+length-off) ? count : begin+length-off;
462 }
463
464 static int serial_tiocmget(struct tty_struct *tty, struct file *file)
465 {
466         struct usb_serial_port *port = tty->driver_data;
467
468         dbg("%s - port %d", __func__, port->number);
469
470         WARN_ON(!port->port.count);
471         if (port->serial->type->tiocmget)
472                 return port->serial->type->tiocmget(tty, file);
473         return -EINVAL;
474 }
475
476 static int serial_tiocmset(struct tty_struct *tty, struct file *file,
477                             unsigned int set, unsigned int clear)
478 {
479         struct usb_serial_port *port = tty->driver_data;
480
481         dbg("%s - port %d", __func__, port->number);
482
483         WARN_ON(!port->port.count);
484         if (port->serial->type->tiocmset)
485                 return port->serial->type->tiocmset(tty, file, set, clear);
486         return -EINVAL;
487 }
488
489 /*
490  * We would be calling tty_wakeup here, but unfortunately some line
491  * disciplines have an annoying habit of calling tty->write from
492  * the write wakeup callback (e.g. n_hdlc.c).
493  */
494 void usb_serial_port_softint(struct usb_serial_port *port)
495 {
496         schedule_work(&port->work);
497 }
498 EXPORT_SYMBOL_GPL(usb_serial_port_softint);
499
500 static void usb_serial_port_work(struct work_struct *work)
501 {
502         struct usb_serial_port *port =
503                 container_of(work, struct usb_serial_port, work);
504         struct tty_struct *tty;
505
506         dbg("%s - port %d", __func__, port->number);
507
508         if (!port)
509                 return;
510
511         tty = port->port.tty;
512         if (!tty)
513                 return;
514
515         tty_wakeup(tty);
516 }
517
518 static void port_release(struct device *dev)
519 {
520         struct usb_serial_port *port = to_usb_serial_port(dev);
521
522         dbg ("%s - %s", __func__, dev_name(dev));
523         port_free(port);
524 }
525
526 static void kill_traffic(struct usb_serial_port *port)
527 {
528         usb_kill_urb(port->read_urb);
529         usb_kill_urb(port->write_urb);
530         /*
531          * This is tricky.
532          * Some drivers submit the read_urb in the
533          * handler for the write_urb or vice versa
534          * this order determines the order in which
535          * usb_kill_urb() must be used to reliably
536          * kill the URBs. As it is unknown here,
537          * both orders must be used in turn.
538          * The call below is not redundant.
539          */
540         usb_kill_urb(port->read_urb);
541         usb_kill_urb(port->interrupt_in_urb);
542         usb_kill_urb(port->interrupt_out_urb);
543 }
544
545 static void port_free(struct usb_serial_port *port)
546 {
547         kill_traffic(port);
548         usb_free_urb(port->read_urb);
549         usb_free_urb(port->write_urb);
550         usb_free_urb(port->interrupt_in_urb);
551         usb_free_urb(port->interrupt_out_urb);
552         kfree(port->bulk_in_buffer);
553         kfree(port->bulk_out_buffer);
554         kfree(port->interrupt_in_buffer);
555         kfree(port->interrupt_out_buffer);
556         flush_scheduled_work();         /* port->work */
557         kfree(port);
558 }
559
560 static struct usb_serial *create_serial(struct usb_device *dev,
561                                         struct usb_interface *interface,
562                                         struct usb_serial_driver *driver)
563 {
564         struct usb_serial *serial;
565
566         serial = kzalloc(sizeof(*serial), GFP_KERNEL);
567         if (!serial) {
568                 dev_err(&dev->dev, "%s - out of memory\n", __func__);
569                 return NULL;
570         }
571         serial->dev = usb_get_dev(dev);
572         serial->type = driver;
573         serial->interface = interface;
574         kref_init(&serial->kref);
575         mutex_init(&serial->disc_mutex);
576         serial->minor = SERIAL_TTY_NO_MINOR;
577
578         return serial;
579 }
580
581 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
582                                             struct usb_serial_driver *drv)
583 {
584         struct usb_dynid *dynid;
585
586         spin_lock(&drv->dynids.lock);
587         list_for_each_entry(dynid, &drv->dynids.list, node) {
588                 if (usb_match_one_id(intf, &dynid->id)) {
589                         spin_unlock(&drv->dynids.lock);
590                         return &dynid->id;
591                 }
592         }
593         spin_unlock(&drv->dynids.lock);
594         return NULL;
595 }
596
597 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
598                                                 struct usb_interface *intf)
599 {
600         const struct usb_device_id *id;
601
602         id = usb_match_id(intf, drv->id_table);
603         if (id) {
604                 dbg("static descriptor matches");
605                 goto exit;
606         }
607         id = match_dynamic_id(intf, drv);
608         if (id)
609                 dbg("dynamic descriptor matches");
610 exit:
611         return id;
612 }
613
614 static struct usb_serial_driver *search_serial_device(
615                                         struct usb_interface *iface)
616 {
617         const struct usb_device_id *id;
618         struct usb_serial_driver *drv;
619
620         /* Check if the usb id matches a known device */
621         list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
622                 id = get_iface_id(drv, iface);
623                 if (id)
624                         return drv;
625         }
626
627         return NULL;
628 }
629
630 int usb_serial_probe(struct usb_interface *interface,
631                                const struct usb_device_id *id)
632 {
633         struct usb_device *dev = interface_to_usbdev(interface);
634         struct usb_serial *serial = NULL;
635         struct usb_serial_port *port;
636         struct usb_host_interface *iface_desc;
637         struct usb_endpoint_descriptor *endpoint;
638         struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
639         struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
640         struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
641         struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
642         struct usb_serial_driver *type = NULL;
643         int retval;
644         unsigned int minor;
645         int buffer_size;
646         int i;
647         int num_interrupt_in = 0;
648         int num_interrupt_out = 0;
649         int num_bulk_in = 0;
650         int num_bulk_out = 0;
651         int num_ports = 0;
652         int max_endpoints;
653
654         lock_kernel(); /* guard against unloading a serial driver module */
655         type = search_serial_device(interface);
656         if (!type) {
657                 unlock_kernel();
658                 dbg("none matched");
659                 return -ENODEV;
660         }
661
662         serial = create_serial(dev, interface, type);
663         if (!serial) {
664                 unlock_kernel();
665                 dev_err(&interface->dev, "%s - out of memory\n", __func__);
666                 return -ENOMEM;
667         }
668
669         /* if this device type has a probe function, call it */
670         if (type->probe) {
671                 const struct usb_device_id *id;
672
673                 if (!try_module_get(type->driver.owner)) {
674                         unlock_kernel();
675                         dev_err(&interface->dev,
676                                 "module get failed, exiting\n");
677                         kfree(serial);
678                         return -EIO;
679                 }
680
681                 id = get_iface_id(type, interface);
682                 retval = type->probe(serial, id);
683                 module_put(type->driver.owner);
684
685                 if (retval) {
686                         unlock_kernel();
687                         dbg("sub driver rejected device");
688                         kfree(serial);
689                         return retval;
690                 }
691         }
692
693         /* descriptor matches, let's find the endpoints needed */
694         /* check out the endpoints */
695         iface_desc = interface->cur_altsetting;
696         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
697                 endpoint = &iface_desc->endpoint[i].desc;
698
699                 if (usb_endpoint_is_bulk_in(endpoint)) {
700                         /* we found a bulk in endpoint */
701                         dbg("found bulk in on endpoint %d", i);
702                         bulk_in_endpoint[num_bulk_in] = endpoint;
703                         ++num_bulk_in;
704                 }
705
706                 if (usb_endpoint_is_bulk_out(endpoint)) {
707                         /* we found a bulk out endpoint */
708                         dbg("found bulk out on endpoint %d", i);
709                         bulk_out_endpoint[num_bulk_out] = endpoint;
710                         ++num_bulk_out;
711                 }
712
713                 if (usb_endpoint_is_int_in(endpoint)) {
714                         /* we found a interrupt in endpoint */
715                         dbg("found interrupt in on endpoint %d", i);
716                         interrupt_in_endpoint[num_interrupt_in] = endpoint;
717                         ++num_interrupt_in;
718                 }
719
720                 if (usb_endpoint_is_int_out(endpoint)) {
721                         /* we found an interrupt out endpoint */
722                         dbg("found interrupt out on endpoint %d", i);
723                         interrupt_out_endpoint[num_interrupt_out] = endpoint;
724                         ++num_interrupt_out;
725                 }
726         }
727
728 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
729         /* BEGIN HORRIBLE HACK FOR PL2303 */
730         /* this is needed due to the looney way its endpoints are set up */
731         if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
732              (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
733             ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
734              (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
735             ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
736              (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID))) {
737                 if (interface != dev->actconfig->interface[0]) {
738                         /* check out the endpoints of the other interface*/
739                         iface_desc = dev->actconfig->interface[0]->cur_altsetting;
740                         for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
741                                 endpoint = &iface_desc->endpoint[i].desc;
742                                 if (usb_endpoint_is_int_in(endpoint)) {
743                                         /* we found a interrupt in endpoint */
744                                         dbg("found interrupt in for Prolific device on separate interface");
745                                         interrupt_in_endpoint[num_interrupt_in] = endpoint;
746                                         ++num_interrupt_in;
747                                 }
748                         }
749                 }
750
751                 /* Now make sure the PL-2303 is configured correctly.
752                  * If not, give up now and hope this hack will work
753                  * properly during a later invocation of usb_serial_probe
754                  */
755                 if (num_bulk_in == 0 || num_bulk_out == 0) {
756                         unlock_kernel();
757                         dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
758                         kfree(serial);
759                         return -ENODEV;
760                 }
761         }
762         /* END HORRIBLE HACK FOR PL2303 */
763 #endif
764
765 #ifdef CONFIG_USB_SERIAL_GENERIC
766         if (type == &usb_serial_generic_device) {
767                 num_ports = num_bulk_out;
768                 if (num_ports == 0) {
769                         unlock_kernel();
770                         dev_err(&interface->dev,
771                             "Generic device with no bulk out, not allowed.\n");
772                         kfree(serial);
773                         return -EIO;
774                 }
775         }
776 #endif
777         if (!num_ports) {
778                 /* if this device type has a calc_num_ports function, call it */
779                 if (type->calc_num_ports) {
780                         if (!try_module_get(type->driver.owner)) {
781                                 unlock_kernel();
782                                 dev_err(&interface->dev,
783                                         "module get failed, exiting\n");
784                                 kfree(serial);
785                                 return -EIO;
786                         }
787                         num_ports = type->calc_num_ports(serial);
788                         module_put(type->driver.owner);
789                 }
790                 if (!num_ports)
791                         num_ports = type->num_ports;
792         }
793
794         serial->num_ports = num_ports;
795         serial->num_bulk_in = num_bulk_in;
796         serial->num_bulk_out = num_bulk_out;
797         serial->num_interrupt_in = num_interrupt_in;
798         serial->num_interrupt_out = num_interrupt_out;
799
800         /* found all that we need */
801         dev_info(&interface->dev, "%s converter detected\n",
802                         type->description);
803
804         /* create our ports, we need as many as the max endpoints */
805         /* we don't use num_ports here because some devices have more
806            endpoint pairs than ports */
807         max_endpoints = max(num_bulk_in, num_bulk_out);
808         max_endpoints = max(max_endpoints, num_interrupt_in);
809         max_endpoints = max(max_endpoints, num_interrupt_out);
810         max_endpoints = max(max_endpoints, (int)serial->num_ports);
811         serial->num_port_pointers = max_endpoints;
812         unlock_kernel();
813
814         dbg("%s - setting up %d port structures for this device",
815                                                 __func__, max_endpoints);
816         for (i = 0; i < max_endpoints; ++i) {
817                 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
818                 if (!port)
819                         goto probe_error;
820                 port->serial = serial;
821                 spin_lock_init(&port->lock);
822                 mutex_init(&port->mutex);
823                 INIT_WORK(&port->work, usb_serial_port_work);
824                 serial->port[i] = port;
825         }
826
827         /* set up the endpoint information */
828         for (i = 0; i < num_bulk_in; ++i) {
829                 endpoint = bulk_in_endpoint[i];
830                 port = serial->port[i];
831                 port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
832                 if (!port->read_urb) {
833                         dev_err(&interface->dev, "No free urbs available\n");
834                         goto probe_error;
835                 }
836                 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
837                 port->bulk_in_size = buffer_size;
838                 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
839                 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
840                 if (!port->bulk_in_buffer) {
841                         dev_err(&interface->dev,
842                                         "Couldn't allocate bulk_in_buffer\n");
843                         goto probe_error;
844                 }
845                 usb_fill_bulk_urb(port->read_urb, dev,
846                                 usb_rcvbulkpipe(dev,
847                                                 endpoint->bEndpointAddress),
848                                 port->bulk_in_buffer, buffer_size,
849                                 serial->type->read_bulk_callback, port);
850         }
851
852         for (i = 0; i < num_bulk_out; ++i) {
853                 endpoint = bulk_out_endpoint[i];
854                 port = serial->port[i];
855                 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
856                 if (!port->write_urb) {
857                         dev_err(&interface->dev, "No free urbs available\n");
858                         goto probe_error;
859                 }
860                 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
861                 port->bulk_out_size = buffer_size;
862                 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
863                 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
864                 if (!port->bulk_out_buffer) {
865                         dev_err(&interface->dev,
866                                         "Couldn't allocate bulk_out_buffer\n");
867                         goto probe_error;
868                 }
869                 usb_fill_bulk_urb(port->write_urb, dev,
870                                 usb_sndbulkpipe(dev,
871                                         endpoint->bEndpointAddress),
872                                 port->bulk_out_buffer, buffer_size,
873                                 serial->type->write_bulk_callback, port);
874         }
875
876         if (serial->type->read_int_callback) {
877                 for (i = 0; i < num_interrupt_in; ++i) {
878                         endpoint = interrupt_in_endpoint[i];
879                         port = serial->port[i];
880                         port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
881                         if (!port->interrupt_in_urb) {
882                                 dev_err(&interface->dev,
883                                                 "No free urbs available\n");
884                                 goto probe_error;
885                         }
886                         buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
887                         port->interrupt_in_endpointAddress =
888                                                 endpoint->bEndpointAddress;
889                         port->interrupt_in_buffer = kmalloc(buffer_size,
890                                                                 GFP_KERNEL);
891                         if (!port->interrupt_in_buffer) {
892                                 dev_err(&interface->dev,
893                                     "Couldn't allocate interrupt_in_buffer\n");
894                                 goto probe_error;
895                         }
896                         usb_fill_int_urb(port->interrupt_in_urb, dev,
897                                 usb_rcvintpipe(dev,
898                                                 endpoint->bEndpointAddress),
899                                 port->interrupt_in_buffer, buffer_size,
900                                 serial->type->read_int_callback, port,
901                                 endpoint->bInterval);
902                 }
903         } else if (num_interrupt_in) {
904                 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
905         }
906
907         if (serial->type->write_int_callback) {
908                 for (i = 0; i < num_interrupt_out; ++i) {
909                         endpoint = interrupt_out_endpoint[i];
910                         port = serial->port[i];
911                         port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
912                         if (!port->interrupt_out_urb) {
913                                 dev_err(&interface->dev,
914                                                 "No free urbs available\n");
915                                 goto probe_error;
916                         }
917                         buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
918                         port->interrupt_out_size = buffer_size;
919                         port->interrupt_out_endpointAddress =
920                                                 endpoint->bEndpointAddress;
921                         port->interrupt_out_buffer = kmalloc(buffer_size,
922                                                                 GFP_KERNEL);
923                         if (!port->interrupt_out_buffer) {
924                                 dev_err(&interface->dev,
925                                   "Couldn't allocate interrupt_out_buffer\n");
926                                 goto probe_error;
927                         }
928                         usb_fill_int_urb(port->interrupt_out_urb, dev,
929                                 usb_sndintpipe(dev,
930                                                   endpoint->bEndpointAddress),
931                                 port->interrupt_out_buffer, buffer_size,
932                                 serial->type->write_int_callback, port,
933                                 endpoint->bInterval);
934                 }
935         } else if (num_interrupt_out) {
936                 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
937         }
938
939         /* if this device type has an attach function, call it */
940         if (type->attach) {
941                 if (!try_module_get(type->driver.owner)) {
942                         dev_err(&interface->dev,
943                                         "module get failed, exiting\n");
944                         goto probe_error;
945                 }
946                 retval = type->attach(serial);
947                 module_put(type->driver.owner);
948                 if (retval < 0)
949                         goto probe_error;
950                 if (retval > 0) {
951                         /* quietly accept this device, but don't bind to a
952                            serial port as it's about to disappear */
953                         goto exit;
954                 }
955         }
956
957         if (get_free_serial(serial, num_ports, &minor) == NULL) {
958                 dev_err(&interface->dev, "No more free serial devices\n");
959                 goto probe_error;
960         }
961         serial->minor = minor;
962
963         /* register all of the individual ports with the driver core */
964         for (i = 0; i < num_ports; ++i) {
965                 port = serial->port[i];
966                 port->dev.parent = &interface->dev;
967                 port->dev.driver = NULL;
968                 port->dev.bus = &usb_serial_bus_type;
969                 port->dev.release = &port_release;
970
971                 dev_set_name(&port->dev, "ttyUSB%d", port->number);
972                 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
973                 retval = device_register(&port->dev);
974                 if (retval)
975                         dev_err(&port->dev, "Error registering port device, "
976                                 "continuing\n");
977         }
978
979         usb_serial_console_init(debug, minor);
980
981 exit:
982         /* success */
983         usb_set_intfdata(interface, serial);
984         return 0;
985
986 probe_error:
987         for (i = 0; i < num_bulk_in; ++i) {
988                 port = serial->port[i];
989                 if (!port)
990                         continue;
991                 usb_free_urb(port->read_urb);
992                 kfree(port->bulk_in_buffer);
993         }
994         for (i = 0; i < num_bulk_out; ++i) {
995                 port = serial->port[i];
996                 if (!port)
997                         continue;
998                 usb_free_urb(port->write_urb);
999                 kfree(port->bulk_out_buffer);
1000         }
1001         for (i = 0; i < num_interrupt_in; ++i) {
1002                 port = serial->port[i];
1003                 if (!port)
1004                         continue;
1005                 usb_free_urb(port->interrupt_in_urb);
1006                 kfree(port->interrupt_in_buffer);
1007         }
1008         for (i = 0; i < num_interrupt_out; ++i) {
1009                 port = serial->port[i];
1010                 if (!port)
1011                         continue;
1012                 usb_free_urb(port->interrupt_out_urb);
1013                 kfree(port->interrupt_out_buffer);
1014         }
1015
1016         /* free up any memory that we allocated */
1017         for (i = 0; i < serial->num_port_pointers; ++i)
1018                 kfree(serial->port[i]);
1019         kfree(serial);
1020         return -EIO;
1021 }
1022 EXPORT_SYMBOL_GPL(usb_serial_probe);
1023
1024 void usb_serial_disconnect(struct usb_interface *interface)
1025 {
1026         int i;
1027         struct usb_serial *serial = usb_get_intfdata(interface);
1028         struct device *dev = &interface->dev;
1029         struct usb_serial_port *port;
1030
1031         usb_serial_console_disconnect(serial);
1032         dbg("%s", __func__);
1033
1034         mutex_lock(&serial->disc_mutex);
1035         usb_set_intfdata(interface, NULL);
1036         /* must set a flag, to signal subdrivers */
1037         serial->disconnected = 1;
1038         for (i = 0; i < serial->num_ports; ++i) {
1039                 port = serial->port[i];
1040                 if (port) {
1041                         if (port->port.tty)
1042                                 tty_hangup(port->port.tty);
1043                         kill_traffic(port);
1044                 }
1045         }
1046         /* let the last holder of this object
1047          * cause it to be cleaned up */
1048         mutex_unlock(&serial->disc_mutex);
1049         usb_serial_put(serial);
1050         dev_info(dev, "device disconnected\n");
1051 }
1052 EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1053
1054 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1055 {
1056         struct usb_serial *serial = usb_get_intfdata(intf);
1057         struct usb_serial_port *port;
1058         int i, r = 0;
1059
1060         for (i = 0; i < serial->num_ports; ++i) {
1061                 port = serial->port[i];
1062                 if (port)
1063                         kill_traffic(port);
1064         }
1065
1066         if (serial->type->suspend)
1067                 r = serial->type->suspend(serial, message);
1068
1069         return r;
1070 }
1071 EXPORT_SYMBOL(usb_serial_suspend);
1072
1073 int usb_serial_resume(struct usb_interface *intf)
1074 {
1075         struct usb_serial *serial = usb_get_intfdata(intf);
1076
1077         if (serial->type->resume)
1078                 return serial->type->resume(serial);
1079         return 0;
1080 }
1081 EXPORT_SYMBOL(usb_serial_resume);
1082
1083 static const struct tty_operations serial_ops = {
1084         .open =                 serial_open,
1085         .close =                serial_close,
1086         .write =                serial_write,
1087         .write_room =           serial_write_room,
1088         .ioctl =                serial_ioctl,
1089         .set_termios =          serial_set_termios,
1090         .throttle =             serial_throttle,
1091         .unthrottle =           serial_unthrottle,
1092         .break_ctl =            serial_break,
1093         .chars_in_buffer =      serial_chars_in_buffer,
1094         .read_proc =            serial_read_proc,
1095         .tiocmget =             serial_tiocmget,
1096         .tiocmset =             serial_tiocmset,
1097 };
1098
1099 struct tty_driver *usb_serial_tty_driver;
1100
1101 static int __init usb_serial_init(void)
1102 {
1103         int i;
1104         int result;
1105
1106         usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1107         if (!usb_serial_tty_driver)
1108                 return -ENOMEM;
1109
1110         /* Initialize our global data */
1111         for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1112                 serial_table[i] = NULL;
1113
1114         result = bus_register(&usb_serial_bus_type);
1115         if (result) {
1116                 err("%s - registering bus driver failed", __func__);
1117                 goto exit_bus;
1118         }
1119
1120         usb_serial_tty_driver->owner = THIS_MODULE;
1121         usb_serial_tty_driver->driver_name = "usbserial";
1122         usb_serial_tty_driver->name =   "ttyUSB";
1123         usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1124         usb_serial_tty_driver->minor_start = 0;
1125         usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1126         usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1127         usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1128                                                 TTY_DRIVER_DYNAMIC_DEV;
1129         usb_serial_tty_driver->init_termios = tty_std_termios;
1130         usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1131                                                         | HUPCL | CLOCAL;
1132         usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1133         usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1134         tty_set_operations(usb_serial_tty_driver, &serial_ops);
1135         result = tty_register_driver(usb_serial_tty_driver);
1136         if (result) {
1137                 err("%s - tty_register_driver failed", __func__);
1138                 goto exit_reg_driver;
1139         }
1140
1141         /* register the USB driver */
1142         result = usb_register(&usb_serial_driver);
1143         if (result < 0) {
1144                 err("%s - usb_register failed", __func__);
1145                 goto exit_tty;
1146         }
1147
1148         /* register the generic driver, if we should */
1149         result = usb_serial_generic_register(debug);
1150         if (result < 0) {
1151                 err("%s - registering generic driver failed", __func__);
1152                 goto exit_generic;
1153         }
1154
1155         info(DRIVER_DESC);
1156
1157         return result;
1158
1159 exit_generic:
1160         usb_deregister(&usb_serial_driver);
1161
1162 exit_tty:
1163         tty_unregister_driver(usb_serial_tty_driver);
1164
1165 exit_reg_driver:
1166         bus_unregister(&usb_serial_bus_type);
1167
1168 exit_bus:
1169         err("%s - returning with error %d", __func__, result);
1170         put_tty_driver(usb_serial_tty_driver);
1171         return result;
1172 }
1173
1174
1175 static void __exit usb_serial_exit(void)
1176 {
1177         usb_serial_console_exit();
1178
1179         usb_serial_generic_deregister();
1180
1181         usb_deregister(&usb_serial_driver);
1182         tty_unregister_driver(usb_serial_tty_driver);
1183         put_tty_driver(usb_serial_tty_driver);
1184         bus_unregister(&usb_serial_bus_type);
1185 }
1186
1187
1188 module_init(usb_serial_init);
1189 module_exit(usb_serial_exit);
1190
1191 #define set_to_generic_if_null(type, function)                          \
1192         do {                                                            \
1193                 if (!type->function) {                                  \
1194                         type->function = usb_serial_generic_##function; \
1195                         dbg("Had to override the " #function            \
1196                                 " usb serial operation with the generic one.");\
1197                         }                                               \
1198         } while (0)
1199
1200 static void fixup_generic(struct usb_serial_driver *device)
1201 {
1202         set_to_generic_if_null(device, open);
1203         set_to_generic_if_null(device, write);
1204         set_to_generic_if_null(device, close);
1205         set_to_generic_if_null(device, write_room);
1206         set_to_generic_if_null(device, chars_in_buffer);
1207         set_to_generic_if_null(device, read_bulk_callback);
1208         set_to_generic_if_null(device, write_bulk_callback);
1209         set_to_generic_if_null(device, shutdown);
1210         set_to_generic_if_null(device, resume);
1211 }
1212
1213 int usb_serial_register(struct usb_serial_driver *driver)
1214 {
1215         /* must be called with BKL held */
1216         int retval;
1217
1218         fixup_generic(driver);
1219
1220         if (!driver->description)
1221                 driver->description = driver->driver.name;
1222
1223         /* Add this device to our list of devices */
1224         list_add(&driver->driver_list, &usb_serial_driver_list);
1225
1226         retval = usb_serial_bus_register(driver);
1227         if (retval) {
1228                 err("problem %d when registering driver %s",
1229                                                 retval, driver->description);
1230                 list_del(&driver->driver_list);
1231         } else
1232                 info("USB Serial support registered for %s",
1233                                                 driver->description);
1234
1235         return retval;
1236 }
1237 EXPORT_SYMBOL_GPL(usb_serial_register);
1238
1239
1240 void usb_serial_deregister(struct usb_serial_driver *device)
1241 {
1242         /* must be called with BKL held */
1243         info("USB Serial deregistering driver %s", device->description);
1244         list_del(&device->driver_list);
1245         usb_serial_bus_deregister(device);
1246 }
1247 EXPORT_SYMBOL_GPL(usb_serial_deregister);
1248
1249 /* Module information */
1250 MODULE_AUTHOR(DRIVER_AUTHOR);
1251 MODULE_DESCRIPTION(DRIVER_DESC);
1252 MODULE_LICENSE("GPL");
1253
1254 module_param(debug, bool, S_IRUGO | S_IWUSR);
1255 MODULE_PARM_DESC(debug, "Debug enabled or not");