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