]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blame - drivers/usb/serial/usb-serial.c
USB: count reaches -1, tested 0
[mirror_ubuntu-hirsute-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 *
a8d6f0a9
AC
15 * See Documentation/usb/usb-serial.txt for more information on using this
16 * driver
1da177e4 17 *
1da177e4
LT
18 */
19
1da177e4
LT
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>
1ce7dd26 30#include <linux/mutex.h>
1da177e4 31#include <linux/list.h>
a8d6f0a9 32#include <linux/uaccess.h>
1da177e4 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,
ec22559e
ON
50 .suspend = usb_serial_suspend,
51 .resume = usb_serial_resume,
ba9dc657 52 .no_dynamic_id = 1,
1da177e4
LT
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
62static int debug;
a8d6f0a9
AC
63/* initially all NULL */
64static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
3ddad823 65static DEFINE_MUTEX(table_lock);
1da177e4
LT
66static LIST_HEAD(usb_serial_driver_list);
67
68struct usb_serial *usb_serial_get_by_index(unsigned index)
69{
34ef50e5
ON
70 struct usb_serial *serial;
71
3ddad823 72 mutex_lock(&table_lock);
34ef50e5 73 serial = serial_table[index];
1da177e4
LT
74
75 if (serial)
76 kref_get(&serial->kref);
3ddad823 77 mutex_unlock(&table_lock);
1da177e4
LT
78 return serial;
79}
80
a8d6f0a9
AC
81static struct usb_serial *get_free_serial(struct usb_serial *serial,
82 int num_ports, unsigned int *minor)
1da177e4
LT
83{
84 unsigned int i, j;
85 int good_spot;
86
441b62c1 87 dbg("%s %d", __func__, num_ports);
1da177e4
LT
88
89 *minor = 0;
3ddad823 90 mutex_lock(&table_lock);
1da177e4
LT
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;
a1f721c8 106 j = 0;
441b62c1 107 dbg("%s - minor base = %d", __func__, *minor);
a1f721c8 108 for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i) {
1da177e4 109 serial_table[i] = serial;
a1f721c8
ON
110 serial->port[j++]->number = i;
111 }
3ddad823 112 mutex_unlock(&table_lock);
1da177e4
LT
113 return serial;
114 }
3ddad823 115 mutex_unlock(&table_lock);
1da177e4
LT
116 return NULL;
117}
118
119static void return_serial(struct usb_serial *serial)
120{
121 int i;
122
441b62c1 123 dbg("%s", __func__);
1da177e4 124
a8d6f0a9 125 for (i = 0; i < serial->num_ports; ++i)
1da177e4 126 serial_table[serial->minor + i] = NULL;
1da177e4
LT
127}
128
129static 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
441b62c1 137 dbg("%s - %s", __func__, serial->type->description);
1da177e4 138
521b85ae
JR
139 serial->type->shutdown(serial);
140
141 /* return the minor range that this device had */
0282b7f2
AS
142 if (serial->minor != SERIAL_TTY_NO_MINOR)
143 return_serial(serial);
521b85ae 144
1da177e4 145 for (i = 0; i < serial->num_ports; ++i)
95da310e 146 serial->port[i]->port.count = 0;
1da177e4
LT
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) {
a8d6f0a9
AC
159 for (i = serial->num_ports;
160 i < serial->num_port_pointers; ++i) {
1da177e4
LT
161 port = serial->port[i];
162 if (!port)
163 continue;
34f8e761 164 port_free(port);
1da177e4
LT
165 }
166 }
167
168 usb_put_dev(serial->dev);
169
170 /* free up any memory that we allocated */
a8d6f0a9 171 kfree(serial);
1da177e4
LT
172}
173
73e487fd
GL
174void usb_serial_put(struct usb_serial *serial)
175{
3ddad823 176 mutex_lock(&table_lock);
73e487fd 177 kref_put(&serial->kref, destroy_serial);
3ddad823 178 mutex_unlock(&table_lock);
73e487fd
GL
179}
180
1da177e4
LT
181/*****************************************************************************
182 * Driver tty interface functions
183 *****************************************************************************/
a8d6f0a9 184static int serial_open (struct tty_struct *tty, struct file *filp)
1da177e4
LT
185{
186 struct usb_serial *serial;
187 struct usb_serial_port *port;
188 unsigned int portNumber;
189 int retval;
a8d6f0a9 190
441b62c1 191 dbg("%s", __func__);
1da177e4
LT
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];
71a84163
LFC
202 if (!port) {
203 retval = -ENODEV;
204 goto bailout_kref_put;
205 }
8a4613f0 206
71a84163
LFC
207 if (mutex_lock_interruptible(&port->mutex)) {
208 retval = -ERESTARTSYS;
209 goto bailout_kref_put;
210 }
a8d6f0a9 211
95da310e 212 ++port->port.count;
1da177e4 213
ca85485c
PF
214 /* set up our port structure making the tty driver
215 * remember our port object, and us it */
216 tty->driver_data = port;
4a90f09b 217 tty_port_tty_set(&port->port, tty);
1da177e4 218
95da310e 219 if (port->port.count == 1) {
1da177e4
LT
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 */
18fcac35 224 if (!try_module_get(serial->type->driver.owner)) {
1da177e4 225 retval = -ENODEV;
71a84163 226 goto bailout_mutex_unlock;
1da177e4
LT
227 }
228
f0fbd5b9
SS
229 retval = usb_autopm_get_interface(serial->interface);
230 if (retval)
231 goto bailout_module_put;
a8d6f0a9 232 /* only call the device specific open if this
1da177e4 233 * is the first time the port is opened */
95da310e 234 retval = serial->type->open(tty, port, filp);
1da177e4 235 if (retval)
f0fbd5b9 236 goto bailout_interface_put;
1da177e4
LT
237 }
238
1ce7dd26 239 mutex_unlock(&port->mutex);
1da177e4
LT
240 return 0;
241
f0fbd5b9
SS
242bailout_interface_put:
243 usb_autopm_put_interface(serial->interface);
1da177e4 244bailout_module_put:
18fcac35 245 module_put(serial->type->driver.owner);
71a84163 246bailout_mutex_unlock:
95da310e 247 port->port.count = 0;
b059c81a 248 tty->driver_data = NULL;
4a90f09b 249 tty_port_tty_set(&port->port, NULL);
1ce7dd26 250 mutex_unlock(&port->mutex);
71a84163 251bailout_kref_put:
73e487fd 252 usb_serial_put(serial);
1da177e4
LT
253 return retval;
254}
255
a8d6f0a9 256static void serial_close(struct tty_struct *tty, struct file *filp)
1da177e4 257{
81671ddb 258 struct usb_serial_port *port = tty->driver_data;
1da177e4
LT
259
260 if (!port)
261 return;
262
441b62c1 263 dbg("%s - port %d", __func__, port->number);
1da177e4 264
1ce7dd26 265 mutex_lock(&port->mutex);
8a4613f0 266
95da310e 267 if (port->port.count == 0) {
1ce7dd26 268 mutex_unlock(&port->mutex);
91c0bce2
GKH
269 return;
270 }
1da177e4 271
4bd43f2c 272 if (port->port.count == 1)
a8d6f0a9 273 /* only call the device specific close if this
4bd43f2c
AC
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 */
95da310e 278 port->serial->type->close(tty, port, filp);
1da177e4 279
4bd43f2c 280 if (port->port.count == (port->console ? 2 : 1)) {
4a90f09b
AC
281 struct tty_struct *tty = tty_port_tty_get(&port->port);
282 if (tty) {
4bd43f2c
AC
283 /* We must do this before we drop the port count to
284 zero. */
4a90f09b
AC
285 if (tty->driver_data)
286 tty->driver_data = NULL;
287 tty_port_tty_set(&port->port, NULL);
fce4877a 288 tty_kref_put(tty);
1da177e4 289 }
9a6b1efa 290 }
1da177e4 291
4bd43f2c 292 if (port->port.count == 1) {
62ad296b
ON
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);
18fcac35 297 module_put(port->serial->type->driver.owner);
f0fbd5b9 298 }
4bd43f2c 299 --port->port.count;
1da177e4 300
1ce7dd26 301 mutex_unlock(&port->mutex);
73e487fd 302 usb_serial_put(port->serial);
1da177e4
LT
303}
304
a8d6f0a9
AC
305static int serial_write(struct tty_struct *tty, const unsigned char *buf,
306 int count)
1da177e4 307{
81671ddb 308 struct usb_serial_port *port = tty->driver_data;
3ff4fd94 309 int retval = -ENODEV;
1da177e4 310
f34d7a5b 311 if (port->serial->dev->state == USB_STATE_NOTATTACHED)
487f9c67
LFC
312 goto exit;
313
441b62c1 314 dbg("%s - port %d, %d byte(s)", __func__, port->number, count);
1da177e4 315
95da310e 316 /* count is managed under the mutex lock for the tty so cannot
a8d6f0a9 317 drop to zero until after the last close completes */
95da310e 318 WARN_ON(!port->port.count);
1da177e4
LT
319
320 /* pass on to the driver specific version of this function */
95da310e 321 retval = port->serial->type->write(tty, port, buf, count);
1da177e4
LT
322
323exit:
324 return retval;
325}
326
a8d6f0a9 327static int serial_write_room(struct tty_struct *tty)
1da177e4 328{
81671ddb 329 struct usb_serial_port *port = tty->driver_data;
441b62c1 330 dbg("%s - port %d", __func__, port->number);
95da310e 331 WARN_ON(!port->port.count);
1da177e4 332 /* pass on to the driver specific version of this function */
95da310e 333 return port->serial->type->write_room(tty);
1da177e4
LT
334}
335
a8d6f0a9 336static int serial_chars_in_buffer(struct tty_struct *tty)
1da177e4 337{
81671ddb 338 struct usb_serial_port *port = tty->driver_data;
441b62c1 339 dbg("%s = port %d", __func__, port->number);
1da177e4 340
95da310e 341 WARN_ON(!port->port.count);
eff6937a
AC
342 /* if the device was unplugged then any remaining characters
343 fell out of the connector ;) */
344 if (port->serial->disconnected)
345 return 0;
1da177e4 346 /* pass on to the driver specific version of this function */
95da310e 347 return port->serial->type->chars_in_buffer(tty);
1da177e4
LT
348}
349
a8d6f0a9 350static void serial_throttle(struct tty_struct *tty)
1da177e4 351{
81671ddb 352 struct usb_serial_port *port = tty->driver_data;
441b62c1 353 dbg("%s - port %d", __func__, port->number);
1da177e4 354
95da310e 355 WARN_ON(!port->port.count);
1da177e4
LT
356 /* pass on to the driver specific version of this function */
357 if (port->serial->type->throttle)
95da310e 358 port->serial->type->throttle(tty);
1da177e4
LT
359}
360
a8d6f0a9 361static void serial_unthrottle(struct tty_struct *tty)
1da177e4 362{
81671ddb 363 struct usb_serial_port *port = tty->driver_data;
441b62c1 364 dbg("%s - port %d", __func__, port->number);
1da177e4 365
95da310e 366 WARN_ON(!port->port.count);
1da177e4
LT
367 /* pass on to the driver specific version of this function */
368 if (port->serial->type->unthrottle)
95da310e 369 port->serial->type->unthrottle(tty);
1da177e4
LT
370}
371
a8d6f0a9
AC
372static int serial_ioctl(struct tty_struct *tty, struct file *file,
373 unsigned int cmd, unsigned long arg)
1da177e4 374{
81671ddb 375 struct usb_serial_port *port = tty->driver_data;
1da177e4
LT
376 int retval = -ENODEV;
377
441b62c1 378 dbg("%s - port %d, cmd 0x%.4x", __func__, port->number, cmd);
1da177e4 379
95da310e 380 WARN_ON(!port->port.count);
1da177e4 381
a8d6f0a9
AC
382 /* pass on to the driver specific version of this function
383 if it is available */
f34d7a5b 384 if (port->serial->type->ioctl) {
95da310e 385 retval = port->serial->type->ioctl(tty, file, cmd, arg);
a8d6f0a9 386 } else
1da177e4 387 retval = -ENOIOCTLCMD;
1da177e4
LT
388 return retval;
389}
390
a8d6f0a9 391static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
1da177e4 392{
81671ddb 393 struct usb_serial_port *port = tty->driver_data;
441b62c1 394 dbg("%s - port %d", __func__, port->number);
1da177e4 395
95da310e 396 WARN_ON(!port->port.count);
a8d6f0a9
AC
397 /* pass on to the driver specific version of this function
398 if it is available */
1da177e4 399 if (port->serial->type->set_termios)
95da310e 400 port->serial->type->set_termios(tty, port, old);
33785091
AC
401 else
402 tty_termios_copy_hw(tty->termios, old);
1da177e4
LT
403}
404
9e98966c 405static int serial_break(struct tty_struct *tty, int break_state)
1da177e4 406{
81671ddb 407 struct usb_serial_port *port = tty->driver_data;
1da177e4 408
441b62c1 409 dbg("%s - port %d", __func__, port->number);
1da177e4 410
95da310e 411 WARN_ON(!port->port.count);
a8d6f0a9
AC
412 /* pass on to the driver specific version of this function
413 if it is available */
6b447f04 414 if (port->serial->type->break_ctl)
95da310e 415 port->serial->type->break_ctl(tty, break_state);
9e98966c 416 return 0;
1da177e4
LT
417}
418
a8d6f0a9
AC
419static int serial_read_proc(char *page, char **start, off_t off, int count,
420 int *eof, void *data)
1da177e4
LT
421{
422 struct usb_serial *serial;
423 int length = 0;
424 int i;
425 off_t begin = 0;
426 char tmp[40];
427
441b62c1 428 dbg("%s", __func__);
a8d6f0a9 429 length += sprintf(page, "usbserinfo:1.0 driver:2.0\n");
1da177e4
LT
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
a8d6f0a9 435 length += sprintf(page+length, "%d:", i);
18fcac35 436 if (serial->type->driver.owner)
a8d6f0a9
AC
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);
1da177e4 448 usb_make_path(serial->dev, tmp, sizeof(tmp));
a8d6f0a9
AC
449 length += sprintf(page+length, " path:%s", tmp);
450
451 length += sprintf(page+length, "\n");
59925838
MU
452 if ((length + begin) > (off + count)) {
453 usb_serial_put(serial);
1da177e4 454 goto done;
59925838 455 }
1da177e4
LT
456 if ((length + begin) < off) {
457 begin += length;
458 length = 0;
459 }
73e487fd 460 usb_serial_put(serial);
1da177e4
LT
461 }
462 *eof = 1;
463done:
464 if (off >= (length + begin))
465 return 0;
466 *start = page + (off-begin);
a8d6f0a9 467 return (count < begin+length-off) ? count : begin+length-off;
1da177e4
LT
468}
469
a8d6f0a9 470static int serial_tiocmget(struct tty_struct *tty, struct file *file)
1da177e4 471{
81671ddb 472 struct usb_serial_port *port = tty->driver_data;
1da177e4 473
441b62c1 474 dbg("%s - port %d", __func__, port->number);
1da177e4 475
95da310e 476 WARN_ON(!port->port.count);
1da177e4 477 if (port->serial->type->tiocmget)
95da310e 478 return port->serial->type->tiocmget(tty, file);
1da177e4
LT
479 return -EINVAL;
480}
481
a8d6f0a9 482static int serial_tiocmset(struct tty_struct *tty, struct file *file,
1da177e4
LT
483 unsigned int set, unsigned int clear)
484{
81671ddb 485 struct usb_serial_port *port = tty->driver_data;
1da177e4 486
441b62c1 487 dbg("%s - port %d", __func__, port->number);
1da177e4 488
95da310e 489 WARN_ON(!port->port.count);
1da177e4 490 if (port->serial->type->tiocmset)
95da310e 491 return port->serial->type->tiocmset(tty, file, set, clear);
1da177e4
LT
492 return -EINVAL;
493}
494
cf2c7481
PZ
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 */
500void usb_serial_port_softint(struct usb_serial_port *port)
501{
502 schedule_work(&port->work);
503}
a8d6f0a9 504EXPORT_SYMBOL_GPL(usb_serial_port_softint);
cf2c7481 505
c4028958 506static void usb_serial_port_work(struct work_struct *work)
1da177e4 507{
c4028958
DH
508 struct usb_serial_port *port =
509 container_of(work, struct usb_serial_port, work);
1da177e4
LT
510 struct tty_struct *tty;
511
441b62c1 512 dbg("%s - port %d", __func__, port->number);
a8d6f0a9 513
4a90f09b 514 tty = tty_port_tty_get(&port->port);
1da177e4
LT
515 if (!tty)
516 return;
517
518 tty_wakeup(tty);
4a90f09b 519 tty_kref_put(tty);
1da177e4
LT
520}
521
522static void port_release(struct device *dev)
523{
524 struct usb_serial_port *port = to_usb_serial_port(dev);
525
7071a3ce 526 dbg ("%s - %s", __func__, dev_name(dev));
34f8e761
PZ
527 port_free(port);
528}
529
34ef50e5 530static void kill_traffic(struct usb_serial_port *port)
34f8e761 531{
1da177e4 532 usb_kill_urb(port->read_urb);
1da177e4 533 usb_kill_urb(port->write_urb);
5adceac5
ON
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);
1da177e4 545 usb_kill_urb(port->interrupt_in_urb);
1da177e4 546 usb_kill_urb(port->interrupt_out_urb);
34ef50e5
ON
547}
548
549static 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);
1da177e4
LT
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);
34f8e761 560 flush_scheduled_work(); /* port->work */
1da177e4
LT
561 kfree(port);
562}
563
a8d6f0a9
AC
564static struct usb_serial *create_serial(struct usb_device *dev,
565 struct usb_interface *interface,
566 struct usb_serial_driver *driver)
1da177e4
LT
567{
568 struct usb_serial *serial;
569
80b6ca48 570 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
1da177e4 571 if (!serial) {
441b62c1 572 dev_err(&dev->dev, "%s - out of memory\n", __func__);
1da177e4
LT
573 return NULL;
574 }
1da177e4 575 serial->dev = usb_get_dev(dev);
ea65370d 576 serial->type = driver;
1da177e4
LT
577 serial->interface = interface;
578 kref_init(&serial->kref);
a1cd7e99 579 mutex_init(&serial->disc_mutex);
0282b7f2 580 serial->minor = SERIAL_TTY_NO_MINOR;
1da177e4
LT
581
582 return serial;
583}
584
93bacefc 585static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
a8d6f0a9 586 struct usb_serial_driver *drv)
93bacefc
GKH
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
601static 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");
614exit:
615 return id;
616}
617
a8d6f0a9
AC
618static struct usb_serial_driver *search_serial_device(
619 struct usb_interface *iface)
1da177e4 620{
1da177e4 621 const struct usb_device_id *id;
063a2da8 622 struct usb_serial_driver *drv;
1da177e4 623
93b1fae4 624 /* Check if the usb id matches a known device */
063a2da8
AS
625 list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
626 id = get_iface_id(drv, iface);
93bacefc 627 if (id)
063a2da8 628 return drv;
1da177e4
LT
629 }
630
631 return NULL;
632}
633
634int usb_serial_probe(struct usb_interface *interface,
635 const struct usb_device_id *id)
636{
a8d6f0a9 637 struct usb_device *dev = interface_to_usbdev(interface);
1da177e4
LT
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];
ea65370d 646 struct usb_serial_driver *type = NULL;
1da177e4 647 int retval;
dd9ca5d9 648 unsigned int minor;
1da177e4
LT
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
4b10f0f3 658 lock_kernel(); /* guard against unloading a serial driver module */
1da177e4
LT
659 type = search_serial_device(interface);
660 if (!type) {
4b10f0f3 661 unlock_kernel();
1da177e4
LT
662 dbg("none matched");
663 return -ENODEV;
664 }
665
a8d6f0a9 666 serial = create_serial(dev, interface, type);
1da177e4 667 if (!serial) {
4b10f0f3 668 unlock_kernel();
441b62c1 669 dev_err(&interface->dev, "%s - out of memory\n", __func__);
1da177e4
LT
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
18fcac35 677 if (!try_module_get(type->driver.owner)) {
4b10f0f3 678 unlock_kernel();
a8d6f0a9
AC
679 dev_err(&interface->dev,
680 "module get failed, exiting\n");
681 kfree(serial);
1da177e4
LT
682 return -EIO;
683 }
684
93bacefc 685 id = get_iface_id(type, interface);
1da177e4 686 retval = type->probe(serial, id);
18fcac35 687 module_put(type->driver.owner);
1da177e4
LT
688
689 if (retval) {
4b10f0f3 690 unlock_kernel();
a8d6f0a9
AC
691 dbg("sub driver rejected device");
692 kfree(serial);
1da177e4
LT
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;
4fa1bbf5
LFC
702
703 if (usb_endpoint_is_bulk_in(endpoint)) {
1da177e4
LT
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
4fa1bbf5 710 if (usb_endpoint_is_bulk_out(endpoint)) {
1da177e4
LT
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 }
4fa1bbf5
LFC
716
717 if (usb_endpoint_is_int_in(endpoint)) {
1da177e4
LT
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
4fa1bbf5 724 if (usb_endpoint_is_int_out(endpoint)) {
1da177e4
LT
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)
a8d6f0a9 733 /* BEGIN HORRIBLE HACK FOR PL2303 */
1da177e4
LT
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) &&
8fd80133
JS
738 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
739 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
ce816cf9
AB
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))) {
1da177e4
LT
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;
4fa1bbf5 748 if (usb_endpoint_is_int_in(endpoint)) {
1da177e4
LT
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) {
4b10f0f3 762 unlock_kernel();
1da177e4 763 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
a8d6f0a9 764 kfree(serial);
1da177e4
LT
765 return -ENODEV;
766 }
767 }
768 /* END HORRIBLE HACK FOR PL2303 */
769#endif
770
1da177e4
LT
771#ifdef CONFIG_USB_SERIAL_GENERIC
772 if (type == &usb_serial_generic_device) {
773 num_ports = num_bulk_out;
774 if (num_ports == 0) {
4b10f0f3 775 unlock_kernel();
a8d6f0a9
AC
776 dev_err(&interface->dev,
777 "Generic device with no bulk out, not allowed.\n");
778 kfree(serial);
1da177e4
LT
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) {
18fcac35 786 if (!try_module_get(type->driver.owner)) {
4b10f0f3 787 unlock_kernel();
a8d6f0a9
AC
788 dev_err(&interface->dev,
789 "module get failed, exiting\n");
790 kfree(serial);
1da177e4
LT
791 return -EIO;
792 }
a8d6f0a9 793 num_ports = type->calc_num_ports(serial);
18fcac35 794 module_put(type->driver.owner);
1da177e4
LT
795 }
796 if (!num_ports)
797 num_ports = type->num_ports;
798 }
799
1da177e4
LT
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
063a2da8
AS
806 /* found all that we need */
807 dev_info(&interface->dev, "%s converter detected\n",
808 type->description);
809
1da177e4 810 /* create our ports, we need as many as the max endpoints */
a8d6f0a9
AC
811 /* we don't use num_ports here because some devices have more
812 endpoint pairs than ports */
1da177e4
LT
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;
4b10f0f3
ON
818 unlock_kernel();
819
a8d6f0a9
AC
820 dbg("%s - setting up %d port structures for this device",
821 __func__, max_endpoints);
1da177e4 822 for (i = 0; i < max_endpoints; ++i) {
80b6ca48 823 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
1da177e4
LT
824 if (!port)
825 goto probe_error;
4a90f09b 826 tty_port_init(&port->port);
1da177e4 827 port->serial = serial;
507ca9bc 828 spin_lock_init(&port->lock);
1ce7dd26 829 mutex_init(&port->mutex);
c4028958 830 INIT_WORK(&port->work, usb_serial_port_work);
1da177e4
LT
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];
a8d6f0a9 838 port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
1da177e4
LT
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;
a8d6f0a9 846 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
1da177e4 847 if (!port->bulk_in_buffer) {
a8d6f0a9
AC
848 dev_err(&interface->dev,
849 "Couldn't allocate bulk_in_buffer\n");
1da177e4
LT
850 goto probe_error;
851 }
a8d6f0a9
AC
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);
1da177e4
LT
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;
a8d6f0a9 870 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
1da177e4 871 if (!port->bulk_out_buffer) {
a8d6f0a9
AC
872 dev_err(&interface->dev,
873 "Couldn't allocate bulk_out_buffer\n");
1da177e4
LT
874 goto probe_error;
875 }
a8d6f0a9
AC
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);
1da177e4
LT
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) {
a8d6f0a9
AC
889 dev_err(&interface->dev,
890 "No free urbs available\n");
1da177e4
LT
891 goto probe_error;
892 }
893 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
a8d6f0a9
AC
894 port->interrupt_in_endpointAddress =
895 endpoint->bEndpointAddress;
896 port->interrupt_in_buffer = kmalloc(buffer_size,
897 GFP_KERNEL);
1da177e4 898 if (!port->interrupt_in_buffer) {
a8d6f0a9
AC
899 dev_err(&interface->dev,
900 "Couldn't allocate interrupt_in_buffer\n");
1da177e4
LT
901 goto probe_error;
902 }
a8d6f0a9
AC
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);
1da177e4
LT
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 }
a8d6f0a9 913
1da177e4
LT
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) {
a8d6f0a9
AC
920 dev_err(&interface->dev,
921 "No free urbs available\n");
1da177e4
LT
922 goto probe_error;
923 }
924 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
925 port->interrupt_out_size = buffer_size;
a8d6f0a9
AC
926 port->interrupt_out_endpointAddress =
927 endpoint->bEndpointAddress;
928 port->interrupt_out_buffer = kmalloc(buffer_size,
929 GFP_KERNEL);
1da177e4 930 if (!port->interrupt_out_buffer) {
a8d6f0a9
AC
931 dev_err(&interface->dev,
932 "Couldn't allocate interrupt_out_buffer\n");
1da177e4
LT
933 goto probe_error;
934 }
a8d6f0a9
AC
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);
1da177e4
LT
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 }
a8d6f0a9 945
1da177e4
LT
946 /* if this device type has an attach function, call it */
947 if (type->attach) {
18fcac35 948 if (!try_module_get(type->driver.owner)) {
a8d6f0a9
AC
949 dev_err(&interface->dev,
950 "module get failed, exiting\n");
1da177e4
LT
951 goto probe_error;
952 }
a8d6f0a9 953 retval = type->attach(serial);
18fcac35 954 module_put(type->driver.owner);
1da177e4
LT
955 if (retval < 0)
956 goto probe_error;
957 if (retval > 0) {
a8d6f0a9
AC
958 /* quietly accept this device, but don't bind to a
959 serial port as it's about to disappear */
1da177e4
LT
960 goto exit;
961 }
962 }
963
a8d6f0a9 964 if (get_free_serial(serial, num_ports, &minor) == NULL) {
34ef50e5
ON
965 dev_err(&interface->dev, "No more free serial devices\n");
966 goto probe_error;
967 }
c744f99e 968 serial->minor = minor;
34ef50e5 969
1da177e4
LT
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
0031a06e 978 dev_set_name(&port->dev, "ttyUSB%d", port->number);
7071a3ce 979 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
13f4db9e
GKH
980 retval = device_register(&port->dev);
981 if (retval)
982 dev_err(&port->dev, "Error registering port device, "
983 "continuing\n");
1da177e4
LT
984 }
985
a8d6f0a9 986 usb_serial_console_init(debug, minor);
1da177e4
LT
987
988exit:
989 /* success */
a8d6f0a9 990 usb_set_intfdata(interface, serial);
1da177e4
LT
991 return 0;
992
993probe_error:
994 for (i = 0; i < num_bulk_in; ++i) {
995 port = serial->port[i];
996 if (!port)
997 continue;
95d43166 998 usb_free_urb(port->read_urb);
1da177e4
LT
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;
95d43166 1005 usb_free_urb(port->write_urb);
1da177e4
LT
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;
95d43166 1012 usb_free_urb(port->interrupt_in_urb);
1da177e4
LT
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;
95d43166 1019 usb_free_urb(port->interrupt_out_urb);
1da177e4
LT
1020 kfree(port->interrupt_out_buffer);
1021 }
1022
1da177e4
LT
1023 /* free up any memory that we allocated */
1024 for (i = 0; i < serial->num_port_pointers; ++i)
1025 kfree(serial->port[i]);
a8d6f0a9 1026 kfree(serial);
1da177e4
LT
1027 return -EIO;
1028}
a8d6f0a9 1029EXPORT_SYMBOL_GPL(usb_serial_probe);
1da177e4
LT
1030
1031void usb_serial_disconnect(struct usb_interface *interface)
1032{
1033 int i;
a8d6f0a9 1034 struct usb_serial *serial = usb_get_intfdata(interface);
1da177e4
LT
1035 struct device *dev = &interface->dev;
1036 struct usb_serial_port *port;
1037
73e487fd 1038 usb_serial_console_disconnect(serial);
a8d6f0a9 1039 dbg("%s", __func__);
1da177e4 1040
a1cd7e99 1041 mutex_lock(&serial->disc_mutex);
a8d6f0a9 1042 usb_set_intfdata(interface, NULL);
a1cd7e99
ON
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) {
4a90f09b
AC
1048 struct tty_struct *tty = tty_port_tty_get(&port->port);
1049 if (tty) {
1050 tty_hangup(tty);
1051 tty_kref_put(tty);
1052 }
a1cd7e99 1053 kill_traffic(port);
1da177e4 1054 }
1da177e4 1055 }
a1cd7e99
ON
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);
1da177e4
LT
1060 dev_info(dev, "device disconnected\n");
1061}
a8d6f0a9 1062EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1da177e4 1063
ec22559e
ON
1064int 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
e31c1880
ON
1070 for (i = 0; i < serial->num_ports; ++i) {
1071 port = serial->port[i];
1072 if (port)
1073 kill_traffic(port);
ec22559e
ON
1074 }
1075
1076 if (serial->type->suspend)
e31c1880 1077 r = serial->type->suspend(serial, message);
ec22559e
ON
1078
1079 return r;
1080}
1081EXPORT_SYMBOL(usb_serial_suspend);
1082
1083int usb_serial_resume(struct usb_interface *intf)
1084{
1085 struct usb_serial *serial = usb_get_intfdata(intf);
1086
8abaee23
SS
1087 if (serial->type->resume)
1088 return serial->type->resume(serial);
1089 return 0;
ec22559e
ON
1090}
1091EXPORT_SYMBOL(usb_serial_resume);
1092
b68e31d0 1093static const struct tty_operations serial_ops = {
1da177e4
LT
1094 .open = serial_open,
1095 .close = serial_close,
1096 .write = serial_write,
1097 .write_room = serial_write_room,
1098 .ioctl = serial_ioctl,
1099 .set_termios = serial_set_termios,
1100 .throttle = serial_throttle,
1101 .unthrottle = serial_unthrottle,
1102 .break_ctl = serial_break,
1103 .chars_in_buffer = serial_chars_in_buffer,
1104 .read_proc = serial_read_proc,
1105 .tiocmget = serial_tiocmget,
1106 .tiocmset = serial_tiocmset,
1107};
1108
1109struct tty_driver *usb_serial_tty_driver;
1110
1111static int __init usb_serial_init(void)
1112{
1113 int i;
1114 int result;
1115
1116 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1117 if (!usb_serial_tty_driver)
1118 return -ENOMEM;
1119
1120 /* Initialize our global data */
a8d6f0a9 1121 for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1da177e4 1122 serial_table[i] = NULL;
1da177e4
LT
1123
1124 result = bus_register(&usb_serial_bus_type);
1125 if (result) {
194343d9
GKH
1126 printk(KERN_ERR "usb-serial: %s - registering bus driver "
1127 "failed\n", __func__);
1da177e4
LT
1128 goto exit_bus;
1129 }
1130
1da177e4
LT
1131 usb_serial_tty_driver->owner = THIS_MODULE;
1132 usb_serial_tty_driver->driver_name = "usbserial";
1da177e4
LT
1133 usb_serial_tty_driver->name = "ttyUSB";
1134 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1135 usb_serial_tty_driver->minor_start = 0;
1136 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1137 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
a8d6f0a9
AC
1138 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1139 TTY_DRIVER_DYNAMIC_DEV;
1da177e4 1140 usb_serial_tty_driver->init_termios = tty_std_termios;
a8d6f0a9
AC
1141 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1142 | HUPCL | CLOCAL;
a5b6f60c
AC
1143 usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1144 usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1da177e4
LT
1145 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1146 result = tty_register_driver(usb_serial_tty_driver);
1147 if (result) {
194343d9
GKH
1148 printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n",
1149 __func__);
1da177e4
LT
1150 goto exit_reg_driver;
1151 }
1152
1153 /* register the USB driver */
1154 result = usb_register(&usb_serial_driver);
1155 if (result < 0) {
194343d9
GKH
1156 printk(KERN_ERR "usb-serial: %s - usb_register failed\n",
1157 __func__);
1da177e4
LT
1158 goto exit_tty;
1159 }
1160
06299db3
GKH
1161 /* register the generic driver, if we should */
1162 result = usb_serial_generic_register(debug);
1163 if (result < 0) {
194343d9
GKH
1164 printk(KERN_ERR "usb-serial: %s - registering generic "
1165 "driver failed\n", __func__);
06299db3
GKH
1166 goto exit_generic;
1167 }
1168
c197a8db 1169 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1da177e4
LT
1170
1171 return result;
1172
06299db3
GKH
1173exit_generic:
1174 usb_deregister(&usb_serial_driver);
1175
1da177e4
LT
1176exit_tty:
1177 tty_unregister_driver(usb_serial_tty_driver);
1178
1179exit_reg_driver:
1da177e4
LT
1180 bus_unregister(&usb_serial_bus_type);
1181
1182exit_bus:
194343d9
GKH
1183 printk(KERN_ERR "usb-serial: %s - returning with error %d\n",
1184 __func__, result);
1da177e4
LT
1185 put_tty_driver(usb_serial_tty_driver);
1186 return result;
1187}
1188
1189
1190static void __exit usb_serial_exit(void)
1191{
1192 usb_serial_console_exit();
1193
1194 usb_serial_generic_deregister();
1195
1196 usb_deregister(&usb_serial_driver);
1197 tty_unregister_driver(usb_serial_tty_driver);
1198 put_tty_driver(usb_serial_tty_driver);
1199 bus_unregister(&usb_serial_bus_type);
1200}
1201
1202
1203module_init(usb_serial_init);
1204module_exit(usb_serial_exit);
1205
1206#define set_to_generic_if_null(type, function) \
1207 do { \
1208 if (!type->function) { \
1209 type->function = usb_serial_generic_##function; \
1210 dbg("Had to override the " #function \
a8d6f0a9 1211 " usb serial operation with the generic one.");\
1da177e4
LT
1212 } \
1213 } while (0)
1214
ea65370d 1215static void fixup_generic(struct usb_serial_driver *device)
1da177e4
LT
1216{
1217 set_to_generic_if_null(device, open);
1218 set_to_generic_if_null(device, write);
1219 set_to_generic_if_null(device, close);
1220 set_to_generic_if_null(device, write_room);
1221 set_to_generic_if_null(device, chars_in_buffer);
1222 set_to_generic_if_null(device, read_bulk_callback);
1223 set_to_generic_if_null(device, write_bulk_callback);
1224 set_to_generic_if_null(device, shutdown);
f0fbd5b9 1225 set_to_generic_if_null(device, resume);
1da177e4
LT
1226}
1227
a8d6f0a9 1228int usb_serial_register(struct usb_serial_driver *driver)
1da177e4 1229{
a8d6f0a9 1230 /* must be called with BKL held */
1da177e4
LT
1231 int retval;
1232
ea65370d 1233 fixup_generic(driver);
1da177e4 1234
269bda1c
GKH
1235 if (!driver->description)
1236 driver->description = driver->driver.name;
1237
1da177e4 1238 /* Add this device to our list of devices */
ea65370d 1239 list_add(&driver->driver_list, &usb_serial_driver_list);
1da177e4 1240
ea65370d 1241 retval = usb_serial_bus_register(driver);
1da177e4 1242 if (retval) {
194343d9
GKH
1243 printk(KERN_ERR "usb-serial: problem %d when registering "
1244 "driver %s\n", retval, driver->description);
ea65370d 1245 list_del(&driver->driver_list);
a8d6f0a9 1246 } else
c197a8db 1247 printk(KERN_INFO "USB Serial support registered for %s\n",
a8d6f0a9 1248 driver->description);
1da177e4
LT
1249
1250 return retval;
1251}
a8d6f0a9 1252EXPORT_SYMBOL_GPL(usb_serial_register);
1da177e4
LT
1253
1254
a8d6f0a9 1255void usb_serial_deregister(struct usb_serial_driver *device)
1da177e4 1256{
a8d6f0a9 1257 /* must be called with BKL held */
c197a8db
GKH
1258 printk(KERN_INFO "USB Serial deregistering driver %s\n",
1259 device->description);
1da177e4
LT
1260 list_del(&device->driver_list);
1261 usb_serial_bus_deregister(device);
1262}
1da177e4 1263EXPORT_SYMBOL_GPL(usb_serial_deregister);
1da177e4
LT
1264
1265/* Module information */
a8d6f0a9
AC
1266MODULE_AUTHOR(DRIVER_AUTHOR);
1267MODULE_DESCRIPTION(DRIVER_DESC);
1da177e4
LT
1268MODULE_LICENSE("GPL");
1269
1270module_param(debug, bool, S_IRUGO | S_IWUSR);
1271MODULE_PARM_DESC(debug, "Debug enabled or not");