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