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