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