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