]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - drivers/usb/serial/usb-serial.c
Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart
[mirror_ubuntu-bionic-kernel.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;
3ff4fd94 284 int retval = -ENODEV;
1da177e4 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) {
3ff4fd94 292 retval = -EINVAL;
1da177e4
LT
293 dbg("%s - port not opened", __FUNCTION__);
294 goto exit;
295 }
296
297 /* pass on to the driver specific version of this function */
298 retval = port->serial->type->write(port, buf, count);
299
300exit:
301 return retval;
302}
303
304static int serial_write_room (struct tty_struct *tty)
305{
81671ddb 306 struct usb_serial_port *port = tty->driver_data;
db54a53d 307 int retval = -ENODEV;
1da177e4 308
487f9c67
LFC
309 if (!port)
310 goto exit;
311
1da177e4
LT
312 dbg("%s - port %d", __FUNCTION__, port->number);
313
314 if (!port->open_count) {
315 dbg("%s - port not open", __FUNCTION__);
316 goto exit;
317 }
318
319 /* pass on to the driver specific version of this function */
320 retval = port->serial->type->write_room(port);
321
322exit:
323 return retval;
324}
325
326static int serial_chars_in_buffer (struct tty_struct *tty)
327{
81671ddb 328 struct usb_serial_port *port = tty->driver_data;
db54a53d 329 int retval = -ENODEV;
1da177e4 330
487f9c67
LFC
331 if (!port)
332 goto exit;
333
1da177e4
LT
334 dbg("%s = port %d", __FUNCTION__, port->number);
335
336 if (!port->open_count) {
337 dbg("%s - port not open", __FUNCTION__);
338 goto exit;
339 }
340
341 /* pass on to the driver specific version of this function */
342 retval = port->serial->type->chars_in_buffer(port);
343
344exit:
345 return retval;
346}
347
348static void serial_throttle (struct tty_struct * tty)
349{
81671ddb 350 struct usb_serial_port *port = tty->driver_data;
1da177e4 351
487f9c67
LFC
352 if (!port)
353 return;
354
1da177e4
LT
355 dbg("%s - port %d", __FUNCTION__, port->number);
356
357 if (!port->open_count) {
358 dbg ("%s - port not open", __FUNCTION__);
359 return;
360 }
361
362 /* pass on to the driver specific version of this function */
363 if (port->serial->type->throttle)
364 port->serial->type->throttle(port);
365}
366
367static void serial_unthrottle (struct tty_struct * tty)
368{
81671ddb 369 struct usb_serial_port *port = tty->driver_data;
1da177e4 370
487f9c67
LFC
371 if (!port)
372 return;
373
1da177e4
LT
374 dbg("%s - port %d", __FUNCTION__, port->number);
375
376 if (!port->open_count) {
377 dbg("%s - port not open", __FUNCTION__);
378 return;
379 }
380
381 /* pass on to the driver specific version of this function */
382 if (port->serial->type->unthrottle)
383 port->serial->type->unthrottle(port);
384}
385
386static int serial_ioctl (struct tty_struct *tty, struct file * file, unsigned int cmd, unsigned long arg)
387{
81671ddb 388 struct usb_serial_port *port = tty->driver_data;
1da177e4
LT
389 int retval = -ENODEV;
390
487f9c67
LFC
391 if (!port)
392 goto exit;
393
1da177e4
LT
394 dbg("%s - port %d, cmd 0x%.4x", __FUNCTION__, port->number, cmd);
395
396 if (!port->open_count) {
397 dbg ("%s - port not open", __FUNCTION__);
398 goto exit;
399 }
400
401 /* pass on to the driver specific version of this function if it is available */
402 if (port->serial->type->ioctl)
403 retval = port->serial->type->ioctl(port, file, cmd, arg);
404 else
405 retval = -ENOIOCTLCMD;
406
407exit:
408 return retval;
409}
410
606d099c 411static void serial_set_termios (struct tty_struct *tty, struct ktermios * old)
1da177e4 412{
81671ddb 413 struct usb_serial_port *port = tty->driver_data;
1da177e4 414
487f9c67
LFC
415 if (!port)
416 return;
417
1da177e4
LT
418 dbg("%s - port %d", __FUNCTION__, port->number);
419
420 if (!port->open_count) {
421 dbg("%s - port not open", __FUNCTION__);
422 return;
423 }
424
425 /* pass on to the driver specific version of this function if it is available */
426 if (port->serial->type->set_termios)
427 port->serial->type->set_termios(port, old);
428}
429
430static void serial_break (struct tty_struct *tty, int break_state)
431{
81671ddb 432 struct usb_serial_port *port = tty->driver_data;
1da177e4 433
487f9c67
LFC
434 if (!port)
435 return;
436
1da177e4
LT
437 dbg("%s - port %d", __FUNCTION__, port->number);
438
439 if (!port->open_count) {
440 dbg("%s - port not open", __FUNCTION__);
441 return;
442 }
443
444 /* pass on to the driver specific version of this function if it is available */
445 if (port->serial->type->break_ctl)
446 port->serial->type->break_ctl(port, break_state);
447}
448
449static int serial_read_proc (char *page, char **start, off_t off, int count, int *eof, void *data)
450{
451 struct usb_serial *serial;
452 int length = 0;
453 int i;
454 off_t begin = 0;
455 char tmp[40];
456
457 dbg("%s", __FUNCTION__);
17a882fc 458 length += sprintf (page, "usbserinfo:1.0 driver:2.0\n");
1da177e4
LT
459 for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) {
460 serial = usb_serial_get_by_index(i);
461 if (serial == NULL)
462 continue;
463
464 length += sprintf (page+length, "%d:", i);
18fcac35
GKH
465 if (serial->type->driver.owner)
466 length += sprintf (page+length, " module:%s", module_name(serial->type->driver.owner));
269bda1c 467 length += sprintf (page+length, " name:\"%s\"", serial->type->description);
1da177e4
LT
468 length += sprintf (page+length, " vendor:%04x product:%04x",
469 le16_to_cpu(serial->dev->descriptor.idVendor),
470 le16_to_cpu(serial->dev->descriptor.idProduct));
471 length += sprintf (page+length, " num_ports:%d", serial->num_ports);
472 length += sprintf (page+length, " port:%d", i - serial->minor + 1);
473
474 usb_make_path(serial->dev, tmp, sizeof(tmp));
475 length += sprintf (page+length, " path:%s", tmp);
476
477 length += sprintf (page+length, "\n");
59925838
MU
478 if ((length + begin) > (off + count)) {
479 usb_serial_put(serial);
1da177e4 480 goto done;
59925838 481 }
1da177e4
LT
482 if ((length + begin) < off) {
483 begin += length;
484 length = 0;
485 }
73e487fd 486 usb_serial_put(serial);
1da177e4
LT
487 }
488 *eof = 1;
489done:
490 if (off >= (length + begin))
491 return 0;
492 *start = page + (off-begin);
493 return ((count < begin+length-off) ? count : begin+length-off);
494}
495
496static int serial_tiocmget (struct tty_struct *tty, struct file *file)
497{
81671ddb 498 struct usb_serial_port *port = tty->driver_data;
1da177e4 499
487f9c67 500 if (!port)
db54a53d 501 return -ENODEV;
487f9c67 502
1da177e4
LT
503 dbg("%s - port %d", __FUNCTION__, port->number);
504
505 if (!port->open_count) {
506 dbg("%s - port not open", __FUNCTION__);
db54a53d 507 return -ENODEV;
1da177e4
LT
508 }
509
510 if (port->serial->type->tiocmget)
511 return port->serial->type->tiocmget(port, file);
512
1da177e4
LT
513 return -EINVAL;
514}
515
516static int serial_tiocmset (struct tty_struct *tty, struct file *file,
517 unsigned int set, unsigned int clear)
518{
81671ddb 519 struct usb_serial_port *port = tty->driver_data;
1da177e4 520
487f9c67 521 if (!port)
db54a53d 522 return -ENODEV;
487f9c67 523
1da177e4
LT
524 dbg("%s - port %d", __FUNCTION__, port->number);
525
526 if (!port->open_count) {
527 dbg("%s - port not open", __FUNCTION__);
db54a53d 528 return -ENODEV;
1da177e4
LT
529 }
530
531 if (port->serial->type->tiocmset)
532 return port->serial->type->tiocmset(port, file, set, clear);
533
1da177e4
LT
534 return -EINVAL;
535}
536
cf2c7481
PZ
537/*
538 * We would be calling tty_wakeup here, but unfortunately some line
539 * disciplines have an annoying habit of calling tty->write from
540 * the write wakeup callback (e.g. n_hdlc.c).
541 */
542void usb_serial_port_softint(struct usb_serial_port *port)
543{
544 schedule_work(&port->work);
545}
546
c4028958 547static void usb_serial_port_work(struct work_struct *work)
1da177e4 548{
c4028958
DH
549 struct usb_serial_port *port =
550 container_of(work, struct usb_serial_port, work);
1da177e4
LT
551 struct tty_struct *tty;
552
553 dbg("%s - port %d", __FUNCTION__, port->number);
554
555 if (!port)
556 return;
557
558 tty = port->tty;
559 if (!tty)
560 return;
561
562 tty_wakeup(tty);
563}
564
565static void port_release(struct device *dev)
566{
567 struct usb_serial_port *port = to_usb_serial_port(dev);
568
569 dbg ("%s - %s", __FUNCTION__, dev->bus_id);
34f8e761
PZ
570 port_free(port);
571}
572
34ef50e5 573static void kill_traffic(struct usb_serial_port *port)
34f8e761 574{
1da177e4 575 usb_kill_urb(port->read_urb);
1da177e4 576 usb_kill_urb(port->write_urb);
1da177e4 577 usb_kill_urb(port->interrupt_in_urb);
1da177e4 578 usb_kill_urb(port->interrupt_out_urb);
34ef50e5
ON
579}
580
581static void port_free(struct usb_serial_port *port)
582{
583 kill_traffic(port);
584 usb_free_urb(port->read_urb);
585 usb_free_urb(port->write_urb);
586 usb_free_urb(port->interrupt_in_urb);
1da177e4
LT
587 usb_free_urb(port->interrupt_out_urb);
588 kfree(port->bulk_in_buffer);
589 kfree(port->bulk_out_buffer);
590 kfree(port->interrupt_in_buffer);
591 kfree(port->interrupt_out_buffer);
34f8e761 592 flush_scheduled_work(); /* port->work */
1da177e4
LT
593 kfree(port);
594}
595
596static struct usb_serial * create_serial (struct usb_device *dev,
597 struct usb_interface *interface,
ea65370d 598 struct usb_serial_driver *driver)
1da177e4
LT
599{
600 struct usb_serial *serial;
601
80b6ca48 602 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
1da177e4
LT
603 if (!serial) {
604 dev_err(&dev->dev, "%s - out of memory\n", __FUNCTION__);
605 return NULL;
606 }
1da177e4 607 serial->dev = usb_get_dev(dev);
ea65370d 608 serial->type = driver;
1da177e4
LT
609 serial->interface = interface;
610 kref_init(&serial->kref);
611
612 return serial;
613}
614
93bacefc
GKH
615static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
616 struct usb_serial_driver *drv)
617{
618 struct usb_dynid *dynid;
619
620 spin_lock(&drv->dynids.lock);
621 list_for_each_entry(dynid, &drv->dynids.list, node) {
622 if (usb_match_one_id(intf, &dynid->id)) {
623 spin_unlock(&drv->dynids.lock);
624 return &dynid->id;
625 }
626 }
627 spin_unlock(&drv->dynids.lock);
628 return NULL;
629}
630
631static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
632 struct usb_interface *intf)
633{
634 const struct usb_device_id *id;
635
636 id = usb_match_id(intf, drv->id_table);
637 if (id) {
638 dbg("static descriptor matches");
639 goto exit;
640 }
641 id = match_dynamic_id(intf, drv);
642 if (id)
643 dbg("dynamic descriptor matches");
644exit:
645 return id;
646}
647
ea65370d 648static struct usb_serial_driver *search_serial_device(struct usb_interface *iface)
1da177e4
LT
649{
650 struct list_head *p;
651 const struct usb_device_id *id;
ea65370d 652 struct usb_serial_driver *t;
1da177e4 653
93b1fae4 654 /* Check if the usb id matches a known device */
1da177e4 655 list_for_each(p, &usb_serial_driver_list) {
ea65370d 656 t = list_entry(p, struct usb_serial_driver, driver_list);
93bacefc
GKH
657 id = get_iface_id(t, iface);
658 if (id)
1da177e4 659 return t;
1da177e4
LT
660 }
661
662 return NULL;
663}
664
665int usb_serial_probe(struct usb_interface *interface,
666 const struct usb_device_id *id)
667{
668 struct usb_device *dev = interface_to_usbdev (interface);
669 struct usb_serial *serial = NULL;
670 struct usb_serial_port *port;
671 struct usb_host_interface *iface_desc;
672 struct usb_endpoint_descriptor *endpoint;
673 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
674 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
675 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
676 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
ea65370d 677 struct usb_serial_driver *type = NULL;
1da177e4
LT
678 int retval;
679 int minor;
680 int buffer_size;
681 int i;
682 int num_interrupt_in = 0;
683 int num_interrupt_out = 0;
684 int num_bulk_in = 0;
685 int num_bulk_out = 0;
686 int num_ports = 0;
687 int max_endpoints;
688
4b10f0f3 689 lock_kernel(); /* guard against unloading a serial driver module */
1da177e4
LT
690 type = search_serial_device(interface);
691 if (!type) {
4b10f0f3 692 unlock_kernel();
1da177e4
LT
693 dbg("none matched");
694 return -ENODEV;
695 }
696
697 serial = create_serial (dev, interface, type);
698 if (!serial) {
4b10f0f3 699 unlock_kernel();
1da177e4
LT
700 dev_err(&interface->dev, "%s - out of memory\n", __FUNCTION__);
701 return -ENOMEM;
702 }
703
704 /* if this device type has a probe function, call it */
705 if (type->probe) {
706 const struct usb_device_id *id;
707
18fcac35 708 if (!try_module_get(type->driver.owner)) {
4b10f0f3 709 unlock_kernel();
1da177e4
LT
710 dev_err(&interface->dev, "module get failed, exiting\n");
711 kfree (serial);
712 return -EIO;
713 }
714
93bacefc 715 id = get_iface_id(type, interface);
1da177e4 716 retval = type->probe(serial, id);
18fcac35 717 module_put(type->driver.owner);
1da177e4
LT
718
719 if (retval) {
4b10f0f3 720 unlock_kernel();
1da177e4
LT
721 dbg ("sub driver rejected device");
722 kfree (serial);
723 return retval;
724 }
725 }
726
727 /* descriptor matches, let's find the endpoints needed */
728 /* check out the endpoints */
729 iface_desc = interface->cur_altsetting;
730 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
731 endpoint = &iface_desc->endpoint[i].desc;
4fa1bbf5
LFC
732
733 if (usb_endpoint_is_bulk_in(endpoint)) {
1da177e4
LT
734 /* we found a bulk in endpoint */
735 dbg("found bulk in on endpoint %d", i);
736 bulk_in_endpoint[num_bulk_in] = endpoint;
737 ++num_bulk_in;
738 }
739
4fa1bbf5 740 if (usb_endpoint_is_bulk_out(endpoint)) {
1da177e4
LT
741 /* we found a bulk out endpoint */
742 dbg("found bulk out on endpoint %d", i);
743 bulk_out_endpoint[num_bulk_out] = endpoint;
744 ++num_bulk_out;
745 }
4fa1bbf5
LFC
746
747 if (usb_endpoint_is_int_in(endpoint)) {
1da177e4
LT
748 /* we found a interrupt in endpoint */
749 dbg("found interrupt in on endpoint %d", i);
750 interrupt_in_endpoint[num_interrupt_in] = endpoint;
751 ++num_interrupt_in;
752 }
753
4fa1bbf5 754 if (usb_endpoint_is_int_out(endpoint)) {
1da177e4
LT
755 /* we found an interrupt out endpoint */
756 dbg("found interrupt out on endpoint %d", i);
757 interrupt_out_endpoint[num_interrupt_out] = endpoint;
758 ++num_interrupt_out;
759 }
760 }
761
762#if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
763 /* BEGIN HORRIBLE HACK FOR PL2303 */
764 /* this is needed due to the looney way its endpoints are set up */
765 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
766 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
767 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
8fd80133
JS
768 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
769 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
770 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID))) {
1da177e4
LT
771 if (interface != dev->actconfig->interface[0]) {
772 /* check out the endpoints of the other interface*/
773 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
774 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
775 endpoint = &iface_desc->endpoint[i].desc;
4fa1bbf5 776 if (usb_endpoint_is_int_in(endpoint)) {
1da177e4
LT
777 /* we found a interrupt in endpoint */
778 dbg("found interrupt in for Prolific device on separate interface");
779 interrupt_in_endpoint[num_interrupt_in] = endpoint;
780 ++num_interrupt_in;
781 }
782 }
783 }
784
785 /* Now make sure the PL-2303 is configured correctly.
786 * If not, give up now and hope this hack will work
787 * properly during a later invocation of usb_serial_probe
788 */
789 if (num_bulk_in == 0 || num_bulk_out == 0) {
4b10f0f3 790 unlock_kernel();
1da177e4
LT
791 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
792 kfree (serial);
793 return -ENODEV;
794 }
795 }
796 /* END HORRIBLE HACK FOR PL2303 */
797#endif
798
799 /* found all that we need */
269bda1c 800 dev_info(&interface->dev, "%s converter detected\n", type->description);
1da177e4
LT
801
802#ifdef CONFIG_USB_SERIAL_GENERIC
803 if (type == &usb_serial_generic_device) {
804 num_ports = num_bulk_out;
805 if (num_ports == 0) {
4b10f0f3 806 unlock_kernel();
1da177e4
LT
807 dev_err(&interface->dev, "Generic device with no bulk out, not allowed.\n");
808 kfree (serial);
809 return -EIO;
810 }
811 }
812#endif
813 if (!num_ports) {
814 /* if this device type has a calc_num_ports function, call it */
815 if (type->calc_num_ports) {
18fcac35 816 if (!try_module_get(type->driver.owner)) {
4b10f0f3 817 unlock_kernel();
1da177e4
LT
818 dev_err(&interface->dev, "module get failed, exiting\n");
819 kfree (serial);
820 return -EIO;
821 }
822 num_ports = type->calc_num_ports (serial);
18fcac35 823 module_put(type->driver.owner);
1da177e4
LT
824 }
825 if (!num_ports)
826 num_ports = type->num_ports;
827 }
828
1da177e4
LT
829 serial->minor = minor;
830 serial->num_ports = num_ports;
831 serial->num_bulk_in = num_bulk_in;
832 serial->num_bulk_out = num_bulk_out;
833 serial->num_interrupt_in = num_interrupt_in;
834 serial->num_interrupt_out = num_interrupt_out;
835
836 /* create our ports, we need as many as the max endpoints */
837 /* we don't use num_ports here cauz some devices have more endpoint pairs than ports */
838 max_endpoints = max(num_bulk_in, num_bulk_out);
839 max_endpoints = max(max_endpoints, num_interrupt_in);
840 max_endpoints = max(max_endpoints, num_interrupt_out);
841 max_endpoints = max(max_endpoints, (int)serial->num_ports);
842 serial->num_port_pointers = max_endpoints;
4b10f0f3
ON
843 unlock_kernel();
844
1da177e4
LT
845 dbg("%s - setting up %d port structures for this device", __FUNCTION__, max_endpoints);
846 for (i = 0; i < max_endpoints; ++i) {
80b6ca48 847 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
1da177e4
LT
848 if (!port)
849 goto probe_error;
1da177e4
LT
850 port->number = i + serial->minor;
851 port->serial = serial;
507ca9bc 852 spin_lock_init(&port->lock);
1ce7dd26 853 mutex_init(&port->mutex);
c4028958 854 INIT_WORK(&port->work, usb_serial_port_work);
1da177e4
LT
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) {
18fcac35 964 if (!try_module_get(type->driver.owner)) {
1da177e4
LT
965 dev_err(&interface->dev, "module get failed, exiting\n");
966 goto probe_error;
967 }
968 retval = type->attach (serial);
18fcac35 969 module_put(type->driver.owner);
1da177e4
LT
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
34ef50e5
ON
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
1da177e4
LT
984 /* register all of the individual ports with the driver core */
985 for (i = 0; i < num_ports; ++i) {
986 port = serial->port[i];
987 port->dev.parent = &interface->dev;
988 port->dev.driver = NULL;
989 port->dev.bus = &usb_serial_bus_type;
990 port->dev.release = &port_release;
991
992 snprintf (&port->dev.bus_id[0], sizeof(port->dev.bus_id), "ttyUSB%d", port->number);
993 dbg ("%s - registering %s", __FUNCTION__, port->dev.bus_id);
13f4db9e
GKH
994 retval = device_register(&port->dev);
995 if (retval)
996 dev_err(&port->dev, "Error registering port device, "
997 "continuing\n");
1da177e4
LT
998 }
999
1000 usb_serial_console_init (debug, minor);
1001
1002exit:
1003 /* success */
1004 usb_set_intfdata (interface, serial);
1005 return 0;
1006
1007probe_error:
1008 for (i = 0; i < num_bulk_in; ++i) {
1009 port = serial->port[i];
1010 if (!port)
1011 continue;
95d43166 1012 usb_free_urb(port->read_urb);
1da177e4
LT
1013 kfree(port->bulk_in_buffer);
1014 }
1015 for (i = 0; i < num_bulk_out; ++i) {
1016 port = serial->port[i];
1017 if (!port)
1018 continue;
95d43166 1019 usb_free_urb(port->write_urb);
1da177e4
LT
1020 kfree(port->bulk_out_buffer);
1021 }
1022 for (i = 0; i < num_interrupt_in; ++i) {
1023 port = serial->port[i];
1024 if (!port)
1025 continue;
95d43166 1026 usb_free_urb(port->interrupt_in_urb);
1da177e4
LT
1027 kfree(port->interrupt_in_buffer);
1028 }
1029 for (i = 0; i < num_interrupt_out; ++i) {
1030 port = serial->port[i];
1031 if (!port)
1032 continue;
95d43166 1033 usb_free_urb(port->interrupt_out_urb);
1da177e4
LT
1034 kfree(port->interrupt_out_buffer);
1035 }
1036
1037 /* return the minor range that this device had */
1038 return_serial (serial);
1039
1040 /* free up any memory that we allocated */
1041 for (i = 0; i < serial->num_port_pointers; ++i)
1042 kfree(serial->port[i]);
1043 kfree (serial);
1044 return -EIO;
1045}
1046
1047void usb_serial_disconnect(struct usb_interface *interface)
1048{
1049 int i;
1050 struct usb_serial *serial = usb_get_intfdata (interface);
1051 struct device *dev = &interface->dev;
1052 struct usb_serial_port *port;
1053
73e487fd 1054 usb_serial_console_disconnect(serial);
1da177e4
LT
1055 dbg ("%s", __FUNCTION__);
1056
1057 usb_set_intfdata (interface, NULL);
1058 if (serial) {
1059 for (i = 0; i < serial->num_ports; ++i) {
1060 port = serial->port[i];
34ef50e5
ON
1061 if (port) {
1062 if (port->tty)
1063 tty_hangup(port->tty);
1064 kill_traffic(port);
1065 }
1da177e4
LT
1066 }
1067 /* let the last holder of this object
1068 * cause it to be cleaned up */
73e487fd 1069 usb_serial_put(serial);
1da177e4
LT
1070 }
1071 dev_info(dev, "device disconnected\n");
1072}
1073
b68e31d0 1074static const struct tty_operations serial_ops = {
1da177e4
LT
1075 .open = serial_open,
1076 .close = serial_close,
1077 .write = serial_write,
1078 .write_room = serial_write_room,
1079 .ioctl = serial_ioctl,
1080 .set_termios = serial_set_termios,
1081 .throttle = serial_throttle,
1082 .unthrottle = serial_unthrottle,
1083 .break_ctl = serial_break,
1084 .chars_in_buffer = serial_chars_in_buffer,
1085 .read_proc = serial_read_proc,
1086 .tiocmget = serial_tiocmget,
1087 .tiocmset = serial_tiocmset,
1088};
1089
1090struct tty_driver *usb_serial_tty_driver;
1091
1092static int __init usb_serial_init(void)
1093{
1094 int i;
1095 int result;
1096
1097 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1098 if (!usb_serial_tty_driver)
1099 return -ENOMEM;
1100
1101 /* Initialize our global data */
34ef50e5 1102 spin_lock_init(&table_lock);
1da177e4
LT
1103 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
1104 serial_table[i] = NULL;
1105 }
1106
1107 result = bus_register(&usb_serial_bus_type);
1108 if (result) {
1109 err("%s - registering bus driver failed", __FUNCTION__);
1110 goto exit_bus;
1111 }
1112
1da177e4
LT
1113 usb_serial_tty_driver->owner = THIS_MODULE;
1114 usb_serial_tty_driver->driver_name = "usbserial";
1da177e4
LT
1115 usb_serial_tty_driver->name = "ttyUSB";
1116 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1117 usb_serial_tty_driver->minor_start = 0;
1118 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1119 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
331b8319 1120 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1da177e4
LT
1121 usb_serial_tty_driver->init_termios = tty_std_termios;
1122 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1123 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1124 result = tty_register_driver(usb_serial_tty_driver);
1125 if (result) {
1126 err("%s - tty_register_driver failed", __FUNCTION__);
1127 goto exit_reg_driver;
1128 }
1129
1130 /* register the USB driver */
1131 result = usb_register(&usb_serial_driver);
1132 if (result < 0) {
1133 err("%s - usb_register failed", __FUNCTION__);
1134 goto exit_tty;
1135 }
1136
06299db3
GKH
1137 /* register the generic driver, if we should */
1138 result = usb_serial_generic_register(debug);
1139 if (result < 0) {
1140 err("%s - registering generic driver failed", __FUNCTION__);
1141 goto exit_generic;
1142 }
1143
17a882fc 1144 info(DRIVER_DESC);
1da177e4
LT
1145
1146 return result;
1147
06299db3
GKH
1148exit_generic:
1149 usb_deregister(&usb_serial_driver);
1150
1da177e4
LT
1151exit_tty:
1152 tty_unregister_driver(usb_serial_tty_driver);
1153
1154exit_reg_driver:
1da177e4
LT
1155 bus_unregister(&usb_serial_bus_type);
1156
1157exit_bus:
1158 err ("%s - returning with error %d", __FUNCTION__, result);
1159 put_tty_driver(usb_serial_tty_driver);
1160 return result;
1161}
1162
1163
1164static void __exit usb_serial_exit(void)
1165{
1166 usb_serial_console_exit();
1167
1168 usb_serial_generic_deregister();
1169
1170 usb_deregister(&usb_serial_driver);
1171 tty_unregister_driver(usb_serial_tty_driver);
1172 put_tty_driver(usb_serial_tty_driver);
1173 bus_unregister(&usb_serial_bus_type);
1174}
1175
1176
1177module_init(usb_serial_init);
1178module_exit(usb_serial_exit);
1179
1180#define set_to_generic_if_null(type, function) \
1181 do { \
1182 if (!type->function) { \
1183 type->function = usb_serial_generic_##function; \
1184 dbg("Had to override the " #function \
1185 " usb serial operation with the generic one.");\
1186 } \
1187 } while (0)
1188
ea65370d 1189static void fixup_generic(struct usb_serial_driver *device)
1da177e4
LT
1190{
1191 set_to_generic_if_null(device, open);
1192 set_to_generic_if_null(device, write);
1193 set_to_generic_if_null(device, close);
1194 set_to_generic_if_null(device, write_room);
1195 set_to_generic_if_null(device, chars_in_buffer);
1196 set_to_generic_if_null(device, read_bulk_callback);
1197 set_to_generic_if_null(device, write_bulk_callback);
1198 set_to_generic_if_null(device, shutdown);
1199}
1200
4b10f0f3 1201int usb_serial_register(struct usb_serial_driver *driver) /* must be called with BKL held */
1da177e4
LT
1202{
1203 int retval;
1204
ea65370d 1205 fixup_generic(driver);
1da177e4 1206
269bda1c
GKH
1207 if (!driver->description)
1208 driver->description = driver->driver.name;
1209
1da177e4 1210 /* Add this device to our list of devices */
ea65370d 1211 list_add(&driver->driver_list, &usb_serial_driver_list);
1da177e4 1212
ea65370d 1213 retval = usb_serial_bus_register(driver);
1da177e4 1214 if (retval) {
269bda1c 1215 err("problem %d when registering driver %s", retval, driver->description);
ea65370d 1216 list_del(&driver->driver_list);
1da177e4
LT
1217 }
1218 else
269bda1c 1219 info("USB Serial support registered for %s", driver->description);
1da177e4
LT
1220
1221 return retval;
1222}
1223
1224
4b10f0f3 1225void usb_serial_deregister(struct usb_serial_driver *device) /* must be called with BKL held */
1da177e4 1226{
269bda1c 1227 info("USB Serial deregistering driver %s", device->description);
1da177e4
LT
1228 list_del(&device->driver_list);
1229 usb_serial_bus_deregister(device);
1230}
1231
1232
1233
1234/* If the usb-serial core is built into the core, the usb-serial drivers
1235 need these symbols to load properly as modules. */
1236EXPORT_SYMBOL_GPL(usb_serial_register);
1237EXPORT_SYMBOL_GPL(usb_serial_deregister);
1238EXPORT_SYMBOL_GPL(usb_serial_probe);
1239EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1240EXPORT_SYMBOL_GPL(usb_serial_port_softint);
1241
1242
1243/* Module information */
1244MODULE_AUTHOR( DRIVER_AUTHOR );
1245MODULE_DESCRIPTION( DRIVER_DESC );
1da177e4
LT
1246MODULE_LICENSE("GPL");
1247
1248module_param(debug, bool, S_IRUGO | S_IWUSR);
1249MODULE_PARM_DESC(debug, "Debug enabled or not");