USB: use kfifo to buffer usb-generic serial writes
[linux-2.6-block.git] / drivers / usb / serial / usb-serial.c
CommitLineData
1da177e4
LT
1/*
2 * USB Serial Converter driver
3 *
502b95c1 4 * Copyright (C) 1999 - 2005 Greg Kroah-Hartman (greg@kroah.com)
1da177e4
LT
5 * Copyright (C) 2000 Peter Berger (pberger@brimson.com)
6 * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com)
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License version
10 * 2 as published by the Free Software Foundation.
11 *
502b95c1 12 * This driver was originally based on the ACM driver by Armin Fuerst (which was
1da177e4
LT
13 * based on a driver by Brad Keryan)
14 *
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.
74556123 195 * All these actions are reversed in serial_release().
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/**
74556123 342 * serial_release - 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 *
f5b0953a 348 * Called when the last tty kref is dropped.
335f8514 349 */
74556123 350static void serial_release(struct tty_struct *tty)
335f8514 351{
4455e344 352 struct usb_serial_port *port = tty->driver_data;
335f8514
AC
353 struct usb_serial *serial;
354 struct module *owner;
355
f5b0953a
AS
356 /* The console is magical. Do not hang up the console hardware
357 * or there will be tears.
358 */
cc56cd01 359 if (port->console)
335f8514
AC
360 return;
361
ff8324df
AS
362 dbg("%s - port %d", __func__, port->number);
363
74556123
AS
364 /* Standard shutdown processing */
365 tty_shutdown(tty);
366
cc56cd01
AS
367 tty->driver_data = NULL;
368
335f8514
AC
369 serial = port->serial;
370 owner = serial->type->driver.owner;
41bd34dd 371
335f8514
AC
372 mutex_lock(&serial->disc_mutex);
373 if (!serial->disconnected)
374 usb_autopm_put_interface(serial->interface);
375 mutex_unlock(&serial->disc_mutex);
41bd34dd 376
2d93148a 377 usb_serial_put(serial);
335f8514
AC
378 module_put(owner);
379}
380
a8d6f0a9
AC
381static int serial_write(struct tty_struct *tty, const unsigned char *buf,
382 int count)
1da177e4 383{
81671ddb 384 struct usb_serial_port *port = tty->driver_data;
3ff4fd94 385 int retval = -ENODEV;
1da177e4 386
f34d7a5b 387 if (port->serial->dev->state == USB_STATE_NOTATTACHED)
487f9c67
LFC
388 goto exit;
389
441b62c1 390 dbg("%s - port %d, %d byte(s)", __func__, port->number, count);
1da177e4 391
95da310e 392 /* count is managed under the mutex lock for the tty so cannot
a8d6f0a9 393 drop to zero until after the last close completes */
95da310e 394 WARN_ON(!port->port.count);
1da177e4
LT
395
396 /* pass on to the driver specific version of this function */
95da310e 397 retval = port->serial->type->write(tty, port, buf, count);
1da177e4
LT
398
399exit:
400 return retval;
401}
402
a8d6f0a9 403static int serial_write_room(struct tty_struct *tty)
1da177e4 404{
81671ddb 405 struct usb_serial_port *port = tty->driver_data;
441b62c1 406 dbg("%s - port %d", __func__, port->number);
95da310e 407 WARN_ON(!port->port.count);
1da177e4 408 /* pass on to the driver specific version of this function */
95da310e 409 return port->serial->type->write_room(tty);
1da177e4
LT
410}
411
a8d6f0a9 412static int serial_chars_in_buffer(struct tty_struct *tty)
1da177e4 413{
81671ddb 414 struct usb_serial_port *port = tty->driver_data;
441b62c1 415 dbg("%s = port %d", __func__, port->number);
1da177e4 416
eff6937a
AC
417 /* if the device was unplugged then any remaining characters
418 fell out of the connector ;) */
419 if (port->serial->disconnected)
420 return 0;
1da177e4 421 /* pass on to the driver specific version of this function */
95da310e 422 return port->serial->type->chars_in_buffer(tty);
1da177e4
LT
423}
424
a8d6f0a9 425static void serial_throttle(struct tty_struct *tty)
1da177e4 426{
81671ddb 427 struct usb_serial_port *port = tty->driver_data;
441b62c1 428 dbg("%s - port %d", __func__, port->number);
1da177e4 429
95da310e 430 WARN_ON(!port->port.count);
1da177e4
LT
431 /* pass on to the driver specific version of this function */
432 if (port->serial->type->throttle)
95da310e 433 port->serial->type->throttle(tty);
1da177e4
LT
434}
435
a8d6f0a9 436static void serial_unthrottle(struct tty_struct *tty)
1da177e4 437{
81671ddb 438 struct usb_serial_port *port = tty->driver_data;
441b62c1 439 dbg("%s - port %d", __func__, port->number);
1da177e4 440
95da310e 441 WARN_ON(!port->port.count);
1da177e4
LT
442 /* pass on to the driver specific version of this function */
443 if (port->serial->type->unthrottle)
95da310e 444 port->serial->type->unthrottle(tty);
1da177e4
LT
445}
446
a8d6f0a9
AC
447static int serial_ioctl(struct tty_struct *tty, struct file *file,
448 unsigned int cmd, unsigned long arg)
1da177e4 449{
81671ddb 450 struct usb_serial_port *port = tty->driver_data;
1da177e4
LT
451 int retval = -ENODEV;
452
441b62c1 453 dbg("%s - port %d, cmd 0x%.4x", __func__, port->number, cmd);
1da177e4 454
95da310e 455 WARN_ON(!port->port.count);
1da177e4 456
a8d6f0a9
AC
457 /* pass on to the driver specific version of this function
458 if it is available */
f34d7a5b 459 if (port->serial->type->ioctl) {
95da310e 460 retval = port->serial->type->ioctl(tty, file, cmd, arg);
a8d6f0a9 461 } else
1da177e4 462 retval = -ENOIOCTLCMD;
1da177e4
LT
463 return retval;
464}
465
a8d6f0a9 466static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
1da177e4 467{
81671ddb 468 struct usb_serial_port *port = tty->driver_data;
441b62c1 469 dbg("%s - port %d", __func__, port->number);
1da177e4 470
95da310e 471 WARN_ON(!port->port.count);
a8d6f0a9
AC
472 /* pass on to the driver specific version of this function
473 if it is available */
1da177e4 474 if (port->serial->type->set_termios)
95da310e 475 port->serial->type->set_termios(tty, port, old);
33785091
AC
476 else
477 tty_termios_copy_hw(tty->termios, old);
1da177e4
LT
478}
479
9e98966c 480static int serial_break(struct tty_struct *tty, int break_state)
1da177e4 481{
81671ddb 482 struct usb_serial_port *port = tty->driver_data;
1da177e4 483
441b62c1 484 dbg("%s - port %d", __func__, port->number);
1da177e4 485
95da310e 486 WARN_ON(!port->port.count);
a8d6f0a9
AC
487 /* pass on to the driver specific version of this function
488 if it is available */
6b447f04 489 if (port->serial->type->break_ctl)
95da310e 490 port->serial->type->break_ctl(tty, break_state);
9e98966c 491 return 0;
1da177e4
LT
492}
493
6fd69d3c 494static int serial_proc_show(struct seq_file *m, void *v)
1da177e4
LT
495{
496 struct usb_serial *serial;
1da177e4 497 int i;
1da177e4
LT
498 char tmp[40];
499
441b62c1 500 dbg("%s", __func__);
6fd69d3c
AD
501 seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
502 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
1da177e4
LT
503 serial = usb_serial_get_by_index(i);
504 if (serial == NULL)
505 continue;
506
6fd69d3c 507 seq_printf(m, "%d:", i);
18fcac35 508 if (serial->type->driver.owner)
6fd69d3c 509 seq_printf(m, " module:%s",
a8d6f0a9 510 module_name(serial->type->driver.owner));
6fd69d3c 511 seq_printf(m, " name:\"%s\"",
a8d6f0a9 512 serial->type->description);
6fd69d3c 513 seq_printf(m, " vendor:%04x product:%04x",
a8d6f0a9
AC
514 le16_to_cpu(serial->dev->descriptor.idVendor),
515 le16_to_cpu(serial->dev->descriptor.idProduct));
6fd69d3c
AD
516 seq_printf(m, " num_ports:%d", serial->num_ports);
517 seq_printf(m, " port:%d", i - serial->minor + 1);
1da177e4 518 usb_make_path(serial->dev, tmp, sizeof(tmp));
6fd69d3c 519 seq_printf(m, " path:%s", tmp);
a8d6f0a9 520
6fd69d3c 521 seq_putc(m, '\n');
73e487fd 522 usb_serial_put(serial);
8bc2c1b2 523 mutex_unlock(&serial->disc_mutex);
1da177e4 524 }
6fd69d3c 525 return 0;
1da177e4
LT
526}
527
6fd69d3c
AD
528static int serial_proc_open(struct inode *inode, struct file *file)
529{
530 return single_open(file, serial_proc_show, NULL);
531}
532
533static const struct file_operations serial_proc_fops = {
534 .owner = THIS_MODULE,
535 .open = serial_proc_open,
536 .read = seq_read,
537 .llseek = seq_lseek,
538 .release = single_release,
539};
540
a8d6f0a9 541static int serial_tiocmget(struct tty_struct *tty, struct file *file)
1da177e4 542{
81671ddb 543 struct usb_serial_port *port = tty->driver_data;
1da177e4 544
441b62c1 545 dbg("%s - port %d", __func__, port->number);
1da177e4 546
95da310e 547 WARN_ON(!port->port.count);
1da177e4 548 if (port->serial->type->tiocmget)
95da310e 549 return port->serial->type->tiocmget(tty, file);
1da177e4
LT
550 return -EINVAL;
551}
552
a8d6f0a9 553static int serial_tiocmset(struct tty_struct *tty, struct file *file,
1da177e4
LT
554 unsigned int set, unsigned int clear)
555{
81671ddb 556 struct usb_serial_port *port = tty->driver_data;
1da177e4 557
441b62c1 558 dbg("%s - port %d", __func__, port->number);
1da177e4 559
95da310e 560 WARN_ON(!port->port.count);
1da177e4 561 if (port->serial->type->tiocmset)
95da310e 562 return port->serial->type->tiocmset(tty, file, set, clear);
1da177e4
LT
563 return -EINVAL;
564}
565
cf2c7481
PZ
566/*
567 * We would be calling tty_wakeup here, but unfortunately some line
568 * disciplines have an annoying habit of calling tty->write from
569 * the write wakeup callback (e.g. n_hdlc.c).
570 */
571void usb_serial_port_softint(struct usb_serial_port *port)
572{
573 schedule_work(&port->work);
574}
a8d6f0a9 575EXPORT_SYMBOL_GPL(usb_serial_port_softint);
cf2c7481 576
c4028958 577static void usb_serial_port_work(struct work_struct *work)
1da177e4 578{
c4028958
DH
579 struct usb_serial_port *port =
580 container_of(work, struct usb_serial_port, work);
1da177e4
LT
581 struct tty_struct *tty;
582
441b62c1 583 dbg("%s - port %d", __func__, port->number);
a8d6f0a9 584
4a90f09b 585 tty = tty_port_tty_get(&port->port);
1da177e4
LT
586 if (!tty)
587 return;
588
589 tty_wakeup(tty);
4a90f09b 590 tty_kref_put(tty);
1da177e4
LT
591}
592
34ef50e5 593static void kill_traffic(struct usb_serial_port *port)
34f8e761 594{
1da177e4 595 usb_kill_urb(port->read_urb);
1da177e4 596 usb_kill_urb(port->write_urb);
5adceac5
ON
597 /*
598 * This is tricky.
599 * Some drivers submit the read_urb in the
600 * handler for the write_urb or vice versa
601 * this order determines the order in which
602 * usb_kill_urb() must be used to reliably
603 * kill the URBs. As it is unknown here,
604 * both orders must be used in turn.
605 * The call below is not redundant.
606 */
607 usb_kill_urb(port->read_urb);
1da177e4 608 usb_kill_urb(port->interrupt_in_urb);
1da177e4 609 usb_kill_urb(port->interrupt_out_urb);
34ef50e5
ON
610}
611
41bd34dd 612static void port_release(struct device *dev)
34ef50e5 613{
41bd34dd
AS
614 struct usb_serial_port *port = to_usb_serial_port(dev);
615
616 dbg ("%s - %s", __func__, dev_name(dev));
617
2d93148a
AS
618 /*
619 * Stop all the traffic before cancelling the work, so that
620 * nobody will restart it by calling usb_serial_port_softint.
621 */
34ef50e5 622 kill_traffic(port);
2d93148a
AS
623 cancel_work_sync(&port->work);
624
34ef50e5
ON
625 usb_free_urb(port->read_urb);
626 usb_free_urb(port->write_urb);
627 usb_free_urb(port->interrupt_in_urb);
1da177e4 628 usb_free_urb(port->interrupt_out_urb);
8e8dce06
DV
629 if (!IS_ERR(port->write_fifo) && port->write_fifo)
630 kfifo_free(port->write_fifo);
1da177e4
LT
631 kfree(port->bulk_in_buffer);
632 kfree(port->bulk_out_buffer);
633 kfree(port->interrupt_in_buffer);
634 kfree(port->interrupt_out_buffer);
635 kfree(port);
636}
637
a8d6f0a9
AC
638static struct usb_serial *create_serial(struct usb_device *dev,
639 struct usb_interface *interface,
640 struct usb_serial_driver *driver)
1da177e4
LT
641{
642 struct usb_serial *serial;
643
80b6ca48 644 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
1da177e4 645 if (!serial) {
441b62c1 646 dev_err(&dev->dev, "%s - out of memory\n", __func__);
1da177e4
LT
647 return NULL;
648 }
1da177e4 649 serial->dev = usb_get_dev(dev);
ea65370d 650 serial->type = driver;
1da177e4
LT
651 serial->interface = interface;
652 kref_init(&serial->kref);
a1cd7e99 653 mutex_init(&serial->disc_mutex);
0282b7f2 654 serial->minor = SERIAL_TTY_NO_MINOR;
1da177e4
LT
655
656 return serial;
657}
658
93bacefc 659static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
a8d6f0a9 660 struct usb_serial_driver *drv)
93bacefc
GKH
661{
662 struct usb_dynid *dynid;
663
664 spin_lock(&drv->dynids.lock);
665 list_for_each_entry(dynid, &drv->dynids.list, node) {
666 if (usb_match_one_id(intf, &dynid->id)) {
667 spin_unlock(&drv->dynids.lock);
668 return &dynid->id;
669 }
670 }
671 spin_unlock(&drv->dynids.lock);
672 return NULL;
673}
674
675static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
676 struct usb_interface *intf)
677{
678 const struct usb_device_id *id;
679
680 id = usb_match_id(intf, drv->id_table);
681 if (id) {
682 dbg("static descriptor matches");
683 goto exit;
684 }
685 id = match_dynamic_id(intf, drv);
686 if (id)
687 dbg("dynamic descriptor matches");
688exit:
689 return id;
690}
691
a8d6f0a9
AC
692static struct usb_serial_driver *search_serial_device(
693 struct usb_interface *iface)
1da177e4 694{
1da177e4 695 const struct usb_device_id *id;
063a2da8 696 struct usb_serial_driver *drv;
1da177e4 697
93b1fae4 698 /* Check if the usb id matches a known device */
063a2da8
AS
699 list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
700 id = get_iface_id(drv, iface);
93bacefc 701 if (id)
063a2da8 702 return drv;
1da177e4
LT
703 }
704
705 return NULL;
706}
707
335f8514
AC
708static int serial_carrier_raised(struct tty_port *port)
709{
710 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
711 struct usb_serial_driver *drv = p->serial->type;
712 if (drv->carrier_raised)
713 return drv->carrier_raised(p);
714 /* No carrier control - don't block */
715 return 1;
716}
717
718static void serial_dtr_rts(struct tty_port *port, int on)
719{
720 struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
721 struct usb_serial_driver *drv = p->serial->type;
722 if (drv->dtr_rts)
723 drv->dtr_rts(p, on);
724}
725
726static const struct tty_port_operations serial_port_ops = {
727 .carrier_raised = serial_carrier_raised,
728 .dtr_rts = serial_dtr_rts,
729};
730
1da177e4
LT
731int usb_serial_probe(struct usb_interface *interface,
732 const struct usb_device_id *id)
733{
a8d6f0a9 734 struct usb_device *dev = interface_to_usbdev(interface);
1da177e4
LT
735 struct usb_serial *serial = NULL;
736 struct usb_serial_port *port;
737 struct usb_host_interface *iface_desc;
738 struct usb_endpoint_descriptor *endpoint;
739 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
740 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
741 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
742 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
ea65370d 743 struct usb_serial_driver *type = NULL;
1da177e4 744 int retval;
dd9ca5d9 745 unsigned int minor;
1da177e4
LT
746 int buffer_size;
747 int i;
748 int num_interrupt_in = 0;
749 int num_interrupt_out = 0;
750 int num_bulk_in = 0;
751 int num_bulk_out = 0;
752 int num_ports = 0;
753 int max_endpoints;
754
4b10f0f3 755 lock_kernel(); /* guard against unloading a serial driver module */
1da177e4
LT
756 type = search_serial_device(interface);
757 if (!type) {
4b10f0f3 758 unlock_kernel();
1da177e4
LT
759 dbg("none matched");
760 return -ENODEV;
761 }
762
a8d6f0a9 763 serial = create_serial(dev, interface, type);
1da177e4 764 if (!serial) {
4b10f0f3 765 unlock_kernel();
441b62c1 766 dev_err(&interface->dev, "%s - out of memory\n", __func__);
1da177e4
LT
767 return -ENOMEM;
768 }
769
770 /* if this device type has a probe function, call it */
771 if (type->probe) {
772 const struct usb_device_id *id;
773
18fcac35 774 if (!try_module_get(type->driver.owner)) {
4b10f0f3 775 unlock_kernel();
a8d6f0a9
AC
776 dev_err(&interface->dev,
777 "module get failed, exiting\n");
778 kfree(serial);
1da177e4
LT
779 return -EIO;
780 }
781
93bacefc 782 id = get_iface_id(type, interface);
1da177e4 783 retval = type->probe(serial, id);
18fcac35 784 module_put(type->driver.owner);
1da177e4
LT
785
786 if (retval) {
4b10f0f3 787 unlock_kernel();
a8d6f0a9
AC
788 dbg("sub driver rejected device");
789 kfree(serial);
1da177e4
LT
790 return retval;
791 }
792 }
793
794 /* descriptor matches, let's find the endpoints needed */
795 /* check out the endpoints */
796 iface_desc = interface->cur_altsetting;
797 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
798 endpoint = &iface_desc->endpoint[i].desc;
4fa1bbf5
LFC
799
800 if (usb_endpoint_is_bulk_in(endpoint)) {
1da177e4
LT
801 /* we found a bulk in endpoint */
802 dbg("found bulk in on endpoint %d", i);
803 bulk_in_endpoint[num_bulk_in] = endpoint;
804 ++num_bulk_in;
805 }
806
4fa1bbf5 807 if (usb_endpoint_is_bulk_out(endpoint)) {
1da177e4
LT
808 /* we found a bulk out endpoint */
809 dbg("found bulk out on endpoint %d", i);
810 bulk_out_endpoint[num_bulk_out] = endpoint;
811 ++num_bulk_out;
812 }
4fa1bbf5
LFC
813
814 if (usb_endpoint_is_int_in(endpoint)) {
1da177e4
LT
815 /* we found a interrupt in endpoint */
816 dbg("found interrupt in on endpoint %d", i);
817 interrupt_in_endpoint[num_interrupt_in] = endpoint;
818 ++num_interrupt_in;
819 }
820
4fa1bbf5 821 if (usb_endpoint_is_int_out(endpoint)) {
1da177e4
LT
822 /* we found an interrupt out endpoint */
823 dbg("found interrupt out on endpoint %d", i);
824 interrupt_out_endpoint[num_interrupt_out] = endpoint;
825 ++num_interrupt_out;
826 }
827 }
828
829#if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
a8d6f0a9 830 /* BEGIN HORRIBLE HACK FOR PL2303 */
1da177e4
LT
831 /* this is needed due to the looney way its endpoints are set up */
832 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
833 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
834 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
8fd80133
JS
835 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
836 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
ce816cf9
AB
837 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
838 ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
839 (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
1da177e4
LT
840 if (interface != dev->actconfig->interface[0]) {
841 /* check out the endpoints of the other interface*/
842 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
843 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
844 endpoint = &iface_desc->endpoint[i].desc;
4fa1bbf5 845 if (usb_endpoint_is_int_in(endpoint)) {
1da177e4
LT
846 /* we found a interrupt in endpoint */
847 dbg("found interrupt in for Prolific device on separate interface");
848 interrupt_in_endpoint[num_interrupt_in] = endpoint;
849 ++num_interrupt_in;
850 }
851 }
852 }
853
854 /* Now make sure the PL-2303 is configured correctly.
855 * If not, give up now and hope this hack will work
856 * properly during a later invocation of usb_serial_probe
857 */
858 if (num_bulk_in == 0 || num_bulk_out == 0) {
4b10f0f3 859 unlock_kernel();
1da177e4 860 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
a8d6f0a9 861 kfree(serial);
1da177e4
LT
862 return -ENODEV;
863 }
864 }
865 /* END HORRIBLE HACK FOR PL2303 */
866#endif
867
1da177e4
LT
868#ifdef CONFIG_USB_SERIAL_GENERIC
869 if (type == &usb_serial_generic_device) {
870 num_ports = num_bulk_out;
871 if (num_ports == 0) {
4b10f0f3 872 unlock_kernel();
a8d6f0a9
AC
873 dev_err(&interface->dev,
874 "Generic device with no bulk out, not allowed.\n");
875 kfree(serial);
1da177e4
LT
876 return -EIO;
877 }
878 }
879#endif
880 if (!num_ports) {
881 /* if this device type has a calc_num_ports function, call it */
882 if (type->calc_num_ports) {
18fcac35 883 if (!try_module_get(type->driver.owner)) {
4b10f0f3 884 unlock_kernel();
a8d6f0a9
AC
885 dev_err(&interface->dev,
886 "module get failed, exiting\n");
887 kfree(serial);
1da177e4
LT
888 return -EIO;
889 }
a8d6f0a9 890 num_ports = type->calc_num_ports(serial);
18fcac35 891 module_put(type->driver.owner);
1da177e4
LT
892 }
893 if (!num_ports)
894 num_ports = type->num_ports;
895 }
896
1da177e4
LT
897 serial->num_ports = num_ports;
898 serial->num_bulk_in = num_bulk_in;
899 serial->num_bulk_out = num_bulk_out;
900 serial->num_interrupt_in = num_interrupt_in;
901 serial->num_interrupt_out = num_interrupt_out;
902
063a2da8
AS
903 /* found all that we need */
904 dev_info(&interface->dev, "%s converter detected\n",
905 type->description);
906
1da177e4 907 /* create our ports, we need as many as the max endpoints */
a8d6f0a9
AC
908 /* we don't use num_ports here because some devices have more
909 endpoint pairs than ports */
1da177e4
LT
910 max_endpoints = max(num_bulk_in, num_bulk_out);
911 max_endpoints = max(max_endpoints, num_interrupt_in);
912 max_endpoints = max(max_endpoints, num_interrupt_out);
913 max_endpoints = max(max_endpoints, (int)serial->num_ports);
914 serial->num_port_pointers = max_endpoints;
4b10f0f3
ON
915 unlock_kernel();
916
a8d6f0a9
AC
917 dbg("%s - setting up %d port structures for this device",
918 __func__, max_endpoints);
1da177e4 919 for (i = 0; i < max_endpoints; ++i) {
80b6ca48 920 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
1da177e4
LT
921 if (!port)
922 goto probe_error;
4a90f09b 923 tty_port_init(&port->port);
335f8514 924 port->port.ops = &serial_port_ops;
1da177e4 925 port->serial = serial;
507ca9bc 926 spin_lock_init(&port->lock);
1ce7dd26 927 mutex_init(&port->mutex);
c4028958 928 INIT_WORK(&port->work, usb_serial_port_work);
1da177e4 929 serial->port[i] = port;
41bd34dd
AS
930 port->dev.parent = &interface->dev;
931 port->dev.driver = NULL;
932 port->dev.bus = &usb_serial_bus_type;
933 port->dev.release = &port_release;
934 device_initialize(&port->dev);
1da177e4
LT
935 }
936
937 /* set up the endpoint information */
938 for (i = 0; i < num_bulk_in; ++i) {
939 endpoint = bulk_in_endpoint[i];
940 port = serial->port[i];
a8d6f0a9 941 port->read_urb = usb_alloc_urb(0, GFP_KERNEL);
1da177e4
LT
942 if (!port->read_urb) {
943 dev_err(&interface->dev, "No free urbs available\n");
944 goto probe_error;
945 }
946 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
947 port->bulk_in_size = buffer_size;
948 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
a8d6f0a9 949 port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
1da177e4 950 if (!port->bulk_in_buffer) {
a8d6f0a9
AC
951 dev_err(&interface->dev,
952 "Couldn't allocate bulk_in_buffer\n");
1da177e4
LT
953 goto probe_error;
954 }
a8d6f0a9
AC
955 usb_fill_bulk_urb(port->read_urb, dev,
956 usb_rcvbulkpipe(dev,
957 endpoint->bEndpointAddress),
958 port->bulk_in_buffer, buffer_size,
959 serial->type->read_bulk_callback, port);
1da177e4
LT
960 }
961
962 for (i = 0; i < num_bulk_out; ++i) {
963 endpoint = bulk_out_endpoint[i];
964 port = serial->port[i];
965 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
966 if (!port->write_urb) {
967 dev_err(&interface->dev, "No free urbs available\n");
968 goto probe_error;
969 }
8e8dce06
DV
970 port->write_fifo = kfifo_alloc(PAGE_SIZE, GFP_KERNEL,
971 &port->lock);
972 if (IS_ERR(port->write_fifo))
973 goto probe_error;
1da177e4
LT
974 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
975 port->bulk_out_size = buffer_size;
976 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
a8d6f0a9 977 port->bulk_out_buffer = kmalloc(buffer_size, GFP_KERNEL);
1da177e4 978 if (!port->bulk_out_buffer) {
a8d6f0a9
AC
979 dev_err(&interface->dev,
980 "Couldn't allocate bulk_out_buffer\n");
1da177e4
LT
981 goto probe_error;
982 }
a8d6f0a9
AC
983 usb_fill_bulk_urb(port->write_urb, dev,
984 usb_sndbulkpipe(dev,
985 endpoint->bEndpointAddress),
986 port->bulk_out_buffer, buffer_size,
987 serial->type->write_bulk_callback, port);
1da177e4
LT
988 }
989
990 if (serial->type->read_int_callback) {
991 for (i = 0; i < num_interrupt_in; ++i) {
992 endpoint = interrupt_in_endpoint[i];
993 port = serial->port[i];
994 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
995 if (!port->interrupt_in_urb) {
a8d6f0a9
AC
996 dev_err(&interface->dev,
997 "No free urbs available\n");
1da177e4
LT
998 goto probe_error;
999 }
1000 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
a8d6f0a9
AC
1001 port->interrupt_in_endpointAddress =
1002 endpoint->bEndpointAddress;
1003 port->interrupt_in_buffer = kmalloc(buffer_size,
1004 GFP_KERNEL);
1da177e4 1005 if (!port->interrupt_in_buffer) {
a8d6f0a9
AC
1006 dev_err(&interface->dev,
1007 "Couldn't allocate interrupt_in_buffer\n");
1da177e4
LT
1008 goto probe_error;
1009 }
a8d6f0a9
AC
1010 usb_fill_int_urb(port->interrupt_in_urb, dev,
1011 usb_rcvintpipe(dev,
1012 endpoint->bEndpointAddress),
1013 port->interrupt_in_buffer, buffer_size,
1014 serial->type->read_int_callback, port,
1015 endpoint->bInterval);
1da177e4
LT
1016 }
1017 } else if (num_interrupt_in) {
1018 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
1019 }
a8d6f0a9 1020
1da177e4
LT
1021 if (serial->type->write_int_callback) {
1022 for (i = 0; i < num_interrupt_out; ++i) {
1023 endpoint = interrupt_out_endpoint[i];
1024 port = serial->port[i];
1025 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
1026 if (!port->interrupt_out_urb) {
a8d6f0a9
AC
1027 dev_err(&interface->dev,
1028 "No free urbs available\n");
1da177e4
LT
1029 goto probe_error;
1030 }
1031 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
1032 port->interrupt_out_size = buffer_size;
a8d6f0a9
AC
1033 port->interrupt_out_endpointAddress =
1034 endpoint->bEndpointAddress;
1035 port->interrupt_out_buffer = kmalloc(buffer_size,
1036 GFP_KERNEL);
1da177e4 1037 if (!port->interrupt_out_buffer) {
a8d6f0a9
AC
1038 dev_err(&interface->dev,
1039 "Couldn't allocate interrupt_out_buffer\n");
1da177e4
LT
1040 goto probe_error;
1041 }
a8d6f0a9
AC
1042 usb_fill_int_urb(port->interrupt_out_urb, dev,
1043 usb_sndintpipe(dev,
1044 endpoint->bEndpointAddress),
1045 port->interrupt_out_buffer, buffer_size,
1046 serial->type->write_int_callback, port,
1047 endpoint->bInterval);
1da177e4
LT
1048 }
1049 } else if (num_interrupt_out) {
1050 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
1051 }
a8d6f0a9 1052
1da177e4
LT
1053 /* if this device type has an attach function, call it */
1054 if (type->attach) {
18fcac35 1055 if (!try_module_get(type->driver.owner)) {
a8d6f0a9
AC
1056 dev_err(&interface->dev,
1057 "module get failed, exiting\n");
1da177e4
LT
1058 goto probe_error;
1059 }
a8d6f0a9 1060 retval = type->attach(serial);
18fcac35 1061 module_put(type->driver.owner);
1da177e4
LT
1062 if (retval < 0)
1063 goto probe_error;
1064 if (retval > 0) {
a8d6f0a9
AC
1065 /* quietly accept this device, but don't bind to a
1066 serial port as it's about to disappear */
0a3c8549 1067 serial->num_ports = 0;
1da177e4
LT
1068 goto exit;
1069 }
1070 }
1071
a8d6f0a9 1072 if (get_free_serial(serial, num_ports, &minor) == NULL) {
34ef50e5
ON
1073 dev_err(&interface->dev, "No more free serial devices\n");
1074 goto probe_error;
1075 }
c744f99e 1076 serial->minor = minor;
34ef50e5 1077
1da177e4
LT
1078 /* register all of the individual ports with the driver core */
1079 for (i = 0; i < num_ports; ++i) {
1080 port = serial->port[i];
0031a06e 1081 dev_set_name(&port->dev, "ttyUSB%d", port->number);
7071a3ce 1082 dbg ("%s - registering %s", __func__, dev_name(&port->dev));
c706ebdf 1083 port->dev_state = PORT_REGISTERING;
41bd34dd 1084 retval = device_add(&port->dev);
c706ebdf 1085 if (retval) {
13f4db9e
GKH
1086 dev_err(&port->dev, "Error registering port device, "
1087 "continuing\n");
c706ebdf
AS
1088 port->dev_state = PORT_UNREGISTERED;
1089 } else {
1090 port->dev_state = PORT_REGISTERED;
1091 }
1da177e4
LT
1092 }
1093
a8d6f0a9 1094 usb_serial_console_init(debug, minor);
1da177e4
LT
1095
1096exit:
1097 /* success */
a8d6f0a9 1098 usb_set_intfdata(interface, serial);
1da177e4
LT
1099 return 0;
1100
1101probe_error:
41bd34dd 1102 usb_serial_put(serial);
1da177e4
LT
1103 return -EIO;
1104}
a8d6f0a9 1105EXPORT_SYMBOL_GPL(usb_serial_probe);
1da177e4
LT
1106
1107void usb_serial_disconnect(struct usb_interface *interface)
1108{
1109 int i;
a8d6f0a9 1110 struct usb_serial *serial = usb_get_intfdata(interface);
1da177e4
LT
1111 struct device *dev = &interface->dev;
1112 struct usb_serial_port *port;
1113
73e487fd 1114 usb_serial_console_disconnect(serial);
a8d6f0a9 1115 dbg("%s", __func__);
1da177e4 1116
a1cd7e99 1117 mutex_lock(&serial->disc_mutex);
a8d6f0a9 1118 usb_set_intfdata(interface, NULL);
a1cd7e99
ON
1119 /* must set a flag, to signal subdrivers */
1120 serial->disconnected = 1;
2d93148a
AS
1121 mutex_unlock(&serial->disc_mutex);
1122
a1cd7e99
ON
1123 for (i = 0; i < serial->num_ports; ++i) {
1124 port = serial->port[i];
1125 if (port) {
4a90f09b
AC
1126 struct tty_struct *tty = tty_port_tty_get(&port->port);
1127 if (tty) {
d2b39182 1128 tty_vhangup(tty);
4a90f09b
AC
1129 tty_kref_put(tty);
1130 }
a1cd7e99 1131 kill_traffic(port);
2d93148a 1132 cancel_work_sync(&port->work);
c706ebdf
AS
1133 if (port->dev_state == PORT_REGISTERED) {
1134
1135 /* Make sure the port is bound so that the
1136 * driver's port_remove method is called.
1137 */
1138 if (!port->dev.driver) {
1139 int rc;
1140
1141 port->dev.driver =
1142 &serial->type->driver;
1143 rc = device_bind_driver(&port->dev);
1144 }
1145 port->dev_state = PORT_UNREGISTERING;
1146 device_del(&port->dev);
1147 port->dev_state = PORT_UNREGISTERED;
1148 }
2d93148a
AS
1149 }
1150 }
f9c99bb8 1151 serial->type->disconnect(serial);
2d93148a 1152
41bd34dd 1153 /* let the last holder of this object cause it to be cleaned up */
a1cd7e99 1154 usb_serial_put(serial);
1da177e4
LT
1155 dev_info(dev, "device disconnected\n");
1156}
a8d6f0a9 1157EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1da177e4 1158
ec22559e
ON
1159int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1160{
1161 struct usb_serial *serial = usb_get_intfdata(intf);
1162 struct usb_serial_port *port;
1163 int i, r = 0;
1164
f8bece8d
ON
1165 serial->suspending = 1;
1166
81e5b23c
ON
1167 if (serial->type->suspend) {
1168 r = serial->type->suspend(serial, message);
1169 if (r < 0)
1170 goto err_out;
1171 }
1172
e31c1880
ON
1173 for (i = 0; i < serial->num_ports; ++i) {
1174 port = serial->port[i];
1175 if (port)
1176 kill_traffic(port);
ec22559e
ON
1177 }
1178
81e5b23c 1179err_out:
ec22559e
ON
1180 return r;
1181}
1182EXPORT_SYMBOL(usb_serial_suspend);
1183
1184int usb_serial_resume(struct usb_interface *intf)
1185{
1186 struct usb_serial *serial = usb_get_intfdata(intf);
c49cfa91 1187 int rv;
ec22559e 1188
f8bece8d 1189 serial->suspending = 0;
8abaee23 1190 if (serial->type->resume)
c49cfa91
ON
1191 rv = serial->type->resume(serial);
1192 else
1193 rv = usb_serial_generic_resume(serial);
f8bece8d 1194
c49cfa91 1195 return rv;
ec22559e
ON
1196}
1197EXPORT_SYMBOL(usb_serial_resume);
1198
b68e31d0 1199static const struct tty_operations serial_ops = {
1da177e4
LT
1200 .open = serial_open,
1201 .close = serial_close,
1202 .write = serial_write,
335f8514 1203 .hangup = serial_hangup,
1da177e4
LT
1204 .write_room = serial_write_room,
1205 .ioctl = serial_ioctl,
1206 .set_termios = serial_set_termios,
1207 .throttle = serial_throttle,
1208 .unthrottle = serial_unthrottle,
1209 .break_ctl = serial_break,
1210 .chars_in_buffer = serial_chars_in_buffer,
1da177e4
LT
1211 .tiocmget = serial_tiocmget,
1212 .tiocmset = serial_tiocmset,
74556123 1213 .shutdown = serial_release,
fe1ae7fd 1214 .install = serial_install,
6fd69d3c 1215 .proc_fops = &serial_proc_fops,
1da177e4
LT
1216};
1217
335f8514 1218
1da177e4
LT
1219struct tty_driver *usb_serial_tty_driver;
1220
1221static int __init usb_serial_init(void)
1222{
1223 int i;
1224 int result;
1225
1226 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1227 if (!usb_serial_tty_driver)
1228 return -ENOMEM;
1229
1230 /* Initialize our global data */
a8d6f0a9 1231 for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1da177e4 1232 serial_table[i] = NULL;
1da177e4
LT
1233
1234 result = bus_register(&usb_serial_bus_type);
1235 if (result) {
194343d9
GKH
1236 printk(KERN_ERR "usb-serial: %s - registering bus driver "
1237 "failed\n", __func__);
1da177e4
LT
1238 goto exit_bus;
1239 }
1240
1da177e4
LT
1241 usb_serial_tty_driver->owner = THIS_MODULE;
1242 usb_serial_tty_driver->driver_name = "usbserial";
1da177e4
LT
1243 usb_serial_tty_driver->name = "ttyUSB";
1244 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1245 usb_serial_tty_driver->minor_start = 0;
1246 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1247 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
a8d6f0a9
AC
1248 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1249 TTY_DRIVER_DYNAMIC_DEV;
1da177e4 1250 usb_serial_tty_driver->init_termios = tty_std_termios;
a8d6f0a9
AC
1251 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1252 | HUPCL | CLOCAL;
a5b6f60c
AC
1253 usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1254 usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1da177e4
LT
1255 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1256 result = tty_register_driver(usb_serial_tty_driver);
1257 if (result) {
194343d9
GKH
1258 printk(KERN_ERR "usb-serial: %s - tty_register_driver failed\n",
1259 __func__);
1da177e4
LT
1260 goto exit_reg_driver;
1261 }
1262
1263 /* register the USB driver */
1264 result = usb_register(&usb_serial_driver);
1265 if (result < 0) {
194343d9
GKH
1266 printk(KERN_ERR "usb-serial: %s - usb_register failed\n",
1267 __func__);
1da177e4
LT
1268 goto exit_tty;
1269 }
1270
06299db3
GKH
1271 /* register the generic driver, if we should */
1272 result = usb_serial_generic_register(debug);
1273 if (result < 0) {
194343d9
GKH
1274 printk(KERN_ERR "usb-serial: %s - registering generic "
1275 "driver failed\n", __func__);
06299db3
GKH
1276 goto exit_generic;
1277 }
1278
c197a8db 1279 printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1da177e4
LT
1280
1281 return result;
1282
06299db3
GKH
1283exit_generic:
1284 usb_deregister(&usb_serial_driver);
1285
1da177e4
LT
1286exit_tty:
1287 tty_unregister_driver(usb_serial_tty_driver);
1288
1289exit_reg_driver:
1da177e4
LT
1290 bus_unregister(&usb_serial_bus_type);
1291
1292exit_bus:
194343d9
GKH
1293 printk(KERN_ERR "usb-serial: %s - returning with error %d\n",
1294 __func__, result);
1da177e4
LT
1295 put_tty_driver(usb_serial_tty_driver);
1296 return result;
1297}
1298
1299
1300static void __exit usb_serial_exit(void)
1301{
1302 usb_serial_console_exit();
1303
1304 usb_serial_generic_deregister();
1305
1306 usb_deregister(&usb_serial_driver);
1307 tty_unregister_driver(usb_serial_tty_driver);
1308 put_tty_driver(usb_serial_tty_driver);
1309 bus_unregister(&usb_serial_bus_type);
1310}
1311
1312
1313module_init(usb_serial_init);
1314module_exit(usb_serial_exit);
1315
1316#define set_to_generic_if_null(type, function) \
1317 do { \
1318 if (!type->function) { \
1319 type->function = usb_serial_generic_##function; \
1320 dbg("Had to override the " #function \
a8d6f0a9 1321 " usb serial operation with the generic one.");\
1da177e4
LT
1322 } \
1323 } while (0)
1324
ea65370d 1325static void fixup_generic(struct usb_serial_driver *device)
1da177e4
LT
1326{
1327 set_to_generic_if_null(device, open);
1328 set_to_generic_if_null(device, write);
1329 set_to_generic_if_null(device, close);
1330 set_to_generic_if_null(device, write_room);
1331 set_to_generic_if_null(device, chars_in_buffer);
1332 set_to_generic_if_null(device, read_bulk_callback);
1333 set_to_generic_if_null(device, write_bulk_callback);
f9c99bb8
AS
1334 set_to_generic_if_null(device, disconnect);
1335 set_to_generic_if_null(device, release);
1da177e4
LT
1336}
1337
a8d6f0a9 1338int usb_serial_register(struct usb_serial_driver *driver)
1da177e4 1339{
a8d6f0a9 1340 /* must be called with BKL held */
1da177e4
LT
1341 int retval;
1342
e4abe665
DY
1343 if (usb_disabled())
1344 return -ENODEV;
1345
ea65370d 1346 fixup_generic(driver);
1da177e4 1347
269bda1c
GKH
1348 if (!driver->description)
1349 driver->description = driver->driver.name;
1350
1da177e4 1351 /* Add this device to our list of devices */
ea65370d 1352 list_add(&driver->driver_list, &usb_serial_driver_list);
1da177e4 1353
ea65370d 1354 retval = usb_serial_bus_register(driver);
1da177e4 1355 if (retval) {
194343d9
GKH
1356 printk(KERN_ERR "usb-serial: problem %d when registering "
1357 "driver %s\n", retval, driver->description);
ea65370d 1358 list_del(&driver->driver_list);
a8d6f0a9 1359 } else
c197a8db 1360 printk(KERN_INFO "USB Serial support registered for %s\n",
a8d6f0a9 1361 driver->description);
1da177e4
LT
1362
1363 return retval;
1364}
a8d6f0a9 1365EXPORT_SYMBOL_GPL(usb_serial_register);
1da177e4
LT
1366
1367
a8d6f0a9 1368void usb_serial_deregister(struct usb_serial_driver *device)
1da177e4 1369{
a8d6f0a9 1370 /* must be called with BKL held */
c197a8db
GKH
1371 printk(KERN_INFO "USB Serial deregistering driver %s\n",
1372 device->description);
1da177e4
LT
1373 list_del(&device->driver_list);
1374 usb_serial_bus_deregister(device);
1375}
1da177e4 1376EXPORT_SYMBOL_GPL(usb_serial_deregister);
1da177e4
LT
1377
1378/* Module information */
a8d6f0a9
AC
1379MODULE_AUTHOR(DRIVER_AUTHOR);
1380MODULE_DESCRIPTION(DRIVER_DESC);
1da177e4
LT
1381MODULE_LICENSE("GPL");
1382
1383module_param(debug, bool, S_IRUGO | S_IWUSR);
1384MODULE_PARM_DESC(debug, "Debug enabled or not");