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