USB: mct_u232: Convert to proper speed handling API
[deliverable/linux.git] / drivers / usb / serial / usb-serial.c
CommitLineData
1da177e4
LT
1/*
2 * USB Serial Converter driver
3 *
502b95c1 4 * Copyright (C) 1999 - 2005 Greg Kroah-Hartman (greg@kroah.com)
1da177e4
LT
5 * Copyright (C) 2000 Peter Berger (pberger@brimson.com)
6 * Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com)
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License version
10 * 2 as published by the Free Software Foundation.
11 *
502b95c1 12 * This driver was originally based on the ACM driver by Armin Fuerst (which was
1da177e4
LT
13 * based on a driver by Brad Keryan)
14 *
15 * See Documentation/usb/usb-serial.txt for more information on using this driver
16 *
1da177e4
LT
17 */
18
1da177e4
LT
19#include <linux/kernel.h>
20#include <linux/errno.h>
21#include <linux/init.h>
22#include <linux/slab.h>
23#include <linux/tty.h>
24#include <linux/tty_driver.h>
25#include <linux/tty_flip.h>
26#include <linux/module.h>
27#include <linux/moduleparam.h>
28#include <linux/spinlock.h>
1ce7dd26 29#include <linux/mutex.h>
1da177e4 30#include <linux/list.h>
1da177e4
LT
31#include <asm/uaccess.h>
32#include <linux/usb.h>
a969888c 33#include <linux/usb/serial.h>
1da177e4
LT
34#include "pl2303.h"
35
36/*
37 * Version Information
38 */
1da177e4
LT
39#define DRIVER_AUTHOR "Greg Kroah-Hartman, greg@kroah.com, http://www.kroah.com/linux/"
40#define DRIVER_DESC "USB Serial Driver core"
41
34f8e761
PZ
42static void port_free(struct usb_serial_port *port);
43
1da177e4
LT
44/* Driver structure we register with the USB core */
45static struct usb_driver usb_serial_driver = {
1da177e4
LT
46 .name = "usbserial",
47 .probe = usb_serial_probe,
48 .disconnect = usb_serial_disconnect,
ec22559e
ON
49 .suspend = usb_serial_suspend,
50 .resume = usb_serial_resume,
ba9dc657 51 .no_dynamic_id = 1,
1da177e4
LT
52};
53
54/* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
55 the MODULE_DEVICE_TABLE declarations in each serial driver
56 cause the "hotplug" program to pull in whatever module is necessary
57 via modprobe, and modprobe will load usbserial because the serial
58 drivers depend on it.
59*/
60
61static int debug;
62static struct usb_serial *serial_table[SERIAL_TTY_MINORS]; /* initially all NULL */
34ef50e5 63static spinlock_t table_lock;
1da177e4
LT
64static LIST_HEAD(usb_serial_driver_list);
65
66struct usb_serial *usb_serial_get_by_index(unsigned index)
67{
34ef50e5
ON
68 struct usb_serial *serial;
69
70 spin_lock(&table_lock);
71 serial = serial_table[index];
1da177e4
LT
72
73 if (serial)
74 kref_get(&serial->kref);
34ef50e5 75 spin_unlock(&table_lock);
1da177e4
LT
76 return serial;
77}
78
79static struct usb_serial *get_free_serial (struct usb_serial *serial, int num_ports, unsigned int *minor)
80{
81 unsigned int i, j;
82 int good_spot;
83
84 dbg("%s %d", __FUNCTION__, num_ports);
85
86 *minor = 0;
34ef50e5 87 spin_lock(&table_lock);
1da177e4
LT
88 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
89 if (serial_table[i])
90 continue;
91
92 good_spot = 1;
93 for (j = 1; j <= num_ports-1; ++j)
94 if ((i+j >= SERIAL_TTY_MINORS) || (serial_table[i+j])) {
95 good_spot = 0;
96 i += j;
97 break;
98 }
99 if (good_spot == 0)
100 continue;
101
102 *minor = i;
a1f721c8 103 j = 0;
1da177e4 104 dbg("%s - minor base = %d", __FUNCTION__, *minor);
a1f721c8 105 for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i) {
1da177e4 106 serial_table[i] = serial;
a1f721c8
ON
107 serial->port[j++]->number = i;
108 }
34ef50e5 109 spin_unlock(&table_lock);
1da177e4
LT
110 return serial;
111 }
34ef50e5 112 spin_unlock(&table_lock);
1da177e4
LT
113 return NULL;
114}
115
116static void return_serial(struct usb_serial *serial)
117{
118 int i;
119
120 dbg("%s", __FUNCTION__);
121
122 if (serial == NULL)
123 return;
124
125 for (i = 0; i < serial->num_ports; ++i) {
126 serial_table[serial->minor + i] = NULL;
127 }
128}
129
130static void destroy_serial(struct kref *kref)
131{
132 struct usb_serial *serial;
133 struct usb_serial_port *port;
134 int i;
135
136 serial = to_usb_serial(kref);
137
269bda1c 138 dbg("%s - %s", __FUNCTION__, serial->type->description);
1da177e4 139
521b85ae
JR
140 serial->type->shutdown(serial);
141
142 /* return the minor range that this device had */
143 return_serial(serial);
144
1da177e4
LT
145 for (i = 0; i < serial->num_ports; ++i)
146 serial->port[i]->open_count = 0;
147
148 /* the ports are cleaned up and released in port_release() */
149 for (i = 0; i < serial->num_ports; ++i)
150 if (serial->port[i]->dev.parent != NULL) {
151 device_unregister(&serial->port[i]->dev);
152 serial->port[i] = NULL;
153 }
154
155 /* If this is a "fake" port, we have to clean it up here, as it will
156 * not get cleaned up in port_release() as it was never registered with
157 * the driver core */
158 if (serial->num_ports < serial->num_port_pointers) {
159 for (i = serial->num_ports; i < serial->num_port_pointers; ++i) {
160 port = serial->port[i];
161 if (!port)
162 continue;
34f8e761 163 port_free(port);
1da177e4
LT
164 }
165 }
166
167 usb_put_dev(serial->dev);
168
169 /* free up any memory that we allocated */
170 kfree (serial);
171}
172
73e487fd
GL
173void usb_serial_put(struct usb_serial *serial)
174{
52f6b5e1 175 spin_lock(&table_lock);
73e487fd 176 kref_put(&serial->kref, destroy_serial);
52f6b5e1 177 spin_unlock(&table_lock);
73e487fd
GL
178}
179
1da177e4
LT
180/*****************************************************************************
181 * Driver tty interface functions
182 *****************************************************************************/
183static int serial_open (struct tty_struct *tty, struct file * filp)
184{
185 struct usb_serial *serial;
186 struct usb_serial_port *port;
187 unsigned int portNumber;
188 int retval;
189
190 dbg("%s", __FUNCTION__);
191
192 /* get the serial object associated with this tty pointer */
193 serial = usb_serial_get_by_index(tty->index);
194 if (!serial) {
195 tty->driver_data = NULL;
196 return -ENODEV;
197 }
198
199 portNumber = tty->index - serial->minor;
200 port = serial->port[portNumber];
71a84163
LFC
201 if (!port) {
202 retval = -ENODEV;
203 goto bailout_kref_put;
204 }
8a4613f0 205
71a84163
LFC
206 if (mutex_lock_interruptible(&port->mutex)) {
207 retval = -ERESTARTSYS;
208 goto bailout_kref_put;
209 }
1da177e4
LT
210
211 ++port->open_count;
212
ca85485c
PF
213 /* set up our port structure making the tty driver
214 * remember our port object, and us it */
215 tty->driver_data = port;
216 port->tty = tty;
1da177e4 217
ca85485c 218 if (port->open_count == 1) {
1da177e4
LT
219
220 /* lock this module before we call it
221 * this may fail, which means we must bail out,
222 * safe because we are called with BKL held */
18fcac35 223 if (!try_module_get(serial->type->driver.owner)) {
1da177e4 224 retval = -ENODEV;
71a84163 225 goto bailout_mutex_unlock;
1da177e4
LT
226 }
227
228 /* only call the device specific open if this
229 * is the first time the port is opened */
230 retval = serial->type->open(port, filp);
231 if (retval)
232 goto bailout_module_put;
233 }
234
1ce7dd26 235 mutex_unlock(&port->mutex);
1da177e4
LT
236 return 0;
237
238bailout_module_put:
18fcac35 239 module_put(serial->type->driver.owner);
71a84163 240bailout_mutex_unlock:
1da177e4 241 port->open_count = 0;
b059c81a
FG
242 tty->driver_data = NULL;
243 port->tty = NULL;
1ce7dd26 244 mutex_unlock(&port->mutex);
71a84163 245bailout_kref_put:
73e487fd 246 usb_serial_put(serial);
1da177e4
LT
247 return retval;
248}
249
250static void serial_close(struct tty_struct *tty, struct file * filp)
251{
81671ddb 252 struct usb_serial_port *port = tty->driver_data;
1da177e4
LT
253
254 if (!port)
255 return;
256
257 dbg("%s - port %d", __FUNCTION__, port->number);
258
1ce7dd26 259 mutex_lock(&port->mutex);
8a4613f0 260
91c0bce2 261 if (port->open_count == 0) {
1ce7dd26 262 mutex_unlock(&port->mutex);
91c0bce2
GKH
263 return;
264 }
1da177e4
LT
265
266 --port->open_count;
267 if (port->open_count == 0) {
268 /* only call the device specific close if this
269 * port is being closed by the last owner */
270 port->serial->type->close(port, filp);
271
272 if (port->tty) {
273 if (port->tty->driver_data)
274 port->tty->driver_data = NULL;
275 port->tty = NULL;
276 }
277
18fcac35 278 module_put(port->serial->type->driver.owner);
1da177e4
LT
279 }
280
1ce7dd26 281 mutex_unlock(&port->mutex);
73e487fd 282 usb_serial_put(port->serial);
1da177e4
LT
283}
284
285static int serial_write (struct tty_struct * tty, const unsigned char *buf, int count)
286{
81671ddb 287 struct usb_serial_port *port = tty->driver_data;
3ff4fd94 288 int retval = -ENODEV;
1da177e4 289
73e487fd 290 if (!port || port->serial->dev->state == USB_STATE_NOTATTACHED)
487f9c67
LFC
291 goto exit;
292
1da177e4
LT
293 dbg("%s - port %d, %d byte(s)", __FUNCTION__, port->number, count);
294
295 if (!port->open_count) {
3ff4fd94 296 retval = -EINVAL;
1da177e4
LT
297 dbg("%s - port not opened", __FUNCTION__);
298 goto exit;
299 }
300
301 /* pass on to the driver specific version of this function */
302 retval = port->serial->type->write(port, buf, count);
303
304exit:
305 return retval;
306}
307
308static int serial_write_room (struct tty_struct *tty)
309{
81671ddb 310 struct usb_serial_port *port = tty->driver_data;
db54a53d 311 int retval = -ENODEV;
1da177e4 312
487f9c67
LFC
313 if (!port)
314 goto exit;
315
1da177e4
LT
316 dbg("%s - port %d", __FUNCTION__, port->number);
317
318 if (!port->open_count) {
319 dbg("%s - port not open", __FUNCTION__);
320 goto exit;
321 }
322
323 /* pass on to the driver specific version of this function */
324 retval = port->serial->type->write_room(port);
325
326exit:
327 return retval;
328}
329
330static int serial_chars_in_buffer (struct tty_struct *tty)
331{
81671ddb 332 struct usb_serial_port *port = tty->driver_data;
db54a53d 333 int retval = -ENODEV;
1da177e4 334
487f9c67
LFC
335 if (!port)
336 goto exit;
337
1da177e4
LT
338 dbg("%s = port %d", __FUNCTION__, port->number);
339
340 if (!port->open_count) {
341 dbg("%s - port not open", __FUNCTION__);
342 goto exit;
343 }
344
345 /* pass on to the driver specific version of this function */
346 retval = port->serial->type->chars_in_buffer(port);
347
348exit:
349 return retval;
350}
351
352static void serial_throttle (struct tty_struct * tty)
353{
81671ddb 354 struct usb_serial_port *port = tty->driver_data;
1da177e4 355
487f9c67
LFC
356 if (!port)
357 return;
358
1da177e4
LT
359 dbg("%s - port %d", __FUNCTION__, port->number);
360
361 if (!port->open_count) {
362 dbg ("%s - port not open", __FUNCTION__);
363 return;
364 }
365
366 /* pass on to the driver specific version of this function */
367 if (port->serial->type->throttle)
368 port->serial->type->throttle(port);
369}
370
371static void serial_unthrottle (struct tty_struct * tty)
372{
81671ddb 373 struct usb_serial_port *port = tty->driver_data;
1da177e4 374
487f9c67
LFC
375 if (!port)
376 return;
377
1da177e4
LT
378 dbg("%s - port %d", __FUNCTION__, port->number);
379
380 if (!port->open_count) {
381 dbg("%s - port not open", __FUNCTION__);
382 return;
383 }
384
385 /* pass on to the driver specific version of this function */
386 if (port->serial->type->unthrottle)
387 port->serial->type->unthrottle(port);
388}
389
390static int serial_ioctl (struct tty_struct *tty, struct file * file, unsigned int cmd, unsigned long arg)
391{
81671ddb 392 struct usb_serial_port *port = tty->driver_data;
1da177e4
LT
393 int retval = -ENODEV;
394
487f9c67
LFC
395 if (!port)
396 goto exit;
397
1da177e4
LT
398 dbg("%s - port %d, cmd 0x%.4x", __FUNCTION__, port->number, cmd);
399
400 if (!port->open_count) {
401 dbg ("%s - port not open", __FUNCTION__);
402 goto exit;
403 }
404
405 /* pass on to the driver specific version of this function if it is available */
406 if (port->serial->type->ioctl)
407 retval = port->serial->type->ioctl(port, file, cmd, arg);
408 else
409 retval = -ENOIOCTLCMD;
410
411exit:
412 return retval;
413}
414
606d099c 415static void serial_set_termios (struct tty_struct *tty, struct ktermios * old)
1da177e4 416{
81671ddb 417 struct usb_serial_port *port = tty->driver_data;
1da177e4 418
487f9c67
LFC
419 if (!port)
420 return;
421
1da177e4
LT
422 dbg("%s - port %d", __FUNCTION__, port->number);
423
424 if (!port->open_count) {
425 dbg("%s - port not open", __FUNCTION__);
426 return;
427 }
428
429 /* pass on to the driver specific version of this function if it is available */
430 if (port->serial->type->set_termios)
431 port->serial->type->set_termios(port, old);
432}
433
434static void serial_break (struct tty_struct *tty, int break_state)
435{
81671ddb 436 struct usb_serial_port *port = tty->driver_data;
1da177e4 437
487f9c67
LFC
438 if (!port)
439 return;
440
1da177e4
LT
441 dbg("%s - port %d", __FUNCTION__, port->number);
442
443 if (!port->open_count) {
444 dbg("%s - port not open", __FUNCTION__);
445 return;
446 }
447
448 /* pass on to the driver specific version of this function if it is available */
449 if (port->serial->type->break_ctl)
450 port->serial->type->break_ctl(port, break_state);
451}
452
453static int serial_read_proc (char *page, char **start, off_t off, int count, int *eof, void *data)
454{
455 struct usb_serial *serial;
456 int length = 0;
457 int i;
458 off_t begin = 0;
459 char tmp[40];
460
461 dbg("%s", __FUNCTION__);
17a882fc 462 length += sprintf (page, "usbserinfo:1.0 driver:2.0\n");
1da177e4
LT
463 for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) {
464 serial = usb_serial_get_by_index(i);
465 if (serial == NULL)
466 continue;
467
468 length += sprintf (page+length, "%d:", i);
18fcac35
GKH
469 if (serial->type->driver.owner)
470 length += sprintf (page+length, " module:%s", module_name(serial->type->driver.owner));
269bda1c 471 length += sprintf (page+length, " name:\"%s\"", serial->type->description);
1da177e4
LT
472 length += sprintf (page+length, " vendor:%04x product:%04x",
473 le16_to_cpu(serial->dev->descriptor.idVendor),
474 le16_to_cpu(serial->dev->descriptor.idProduct));
475 length += sprintf (page+length, " num_ports:%d", serial->num_ports);
476 length += sprintf (page+length, " port:%d", i - serial->minor + 1);
477
478 usb_make_path(serial->dev, tmp, sizeof(tmp));
479 length += sprintf (page+length, " path:%s", tmp);
480
481 length += sprintf (page+length, "\n");
59925838
MU
482 if ((length + begin) > (off + count)) {
483 usb_serial_put(serial);
1da177e4 484 goto done;
59925838 485 }
1da177e4
LT
486 if ((length + begin) < off) {
487 begin += length;
488 length = 0;
489 }
73e487fd 490 usb_serial_put(serial);
1da177e4
LT
491 }
492 *eof = 1;
493done:
494 if (off >= (length + begin))
495 return 0;
496 *start = page + (off-begin);
497 return ((count < begin+length-off) ? count : begin+length-off);
498}
499
500static int serial_tiocmget (struct tty_struct *tty, struct file *file)
501{
81671ddb 502 struct usb_serial_port *port = tty->driver_data;
1da177e4 503
487f9c67 504 if (!port)
db54a53d 505 return -ENODEV;
487f9c67 506
1da177e4
LT
507 dbg("%s - port %d", __FUNCTION__, port->number);
508
509 if (!port->open_count) {
510 dbg("%s - port not open", __FUNCTION__);
db54a53d 511 return -ENODEV;
1da177e4
LT
512 }
513
514 if (port->serial->type->tiocmget)
515 return port->serial->type->tiocmget(port, file);
516
1da177e4
LT
517 return -EINVAL;
518}
519
520static int serial_tiocmset (struct tty_struct *tty, struct file *file,
521 unsigned int set, unsigned int clear)
522{
81671ddb 523 struct usb_serial_port *port = tty->driver_data;
1da177e4 524
487f9c67 525 if (!port)
db54a53d 526 return -ENODEV;
487f9c67 527
1da177e4
LT
528 dbg("%s - port %d", __FUNCTION__, port->number);
529
530 if (!port->open_count) {
531 dbg("%s - port not open", __FUNCTION__);
db54a53d 532 return -ENODEV;
1da177e4
LT
533 }
534
535 if (port->serial->type->tiocmset)
536 return port->serial->type->tiocmset(port, file, set, clear);
537
1da177e4
LT
538 return -EINVAL;
539}
540
cf2c7481
PZ
541/*
542 * We would be calling tty_wakeup here, but unfortunately some line
543 * disciplines have an annoying habit of calling tty->write from
544 * the write wakeup callback (e.g. n_hdlc.c).
545 */
546void usb_serial_port_softint(struct usb_serial_port *port)
547{
548 schedule_work(&port->work);
549}
550
c4028958 551static void usb_serial_port_work(struct work_struct *work)
1da177e4 552{
c4028958
DH
553 struct usb_serial_port *port =
554 container_of(work, struct usb_serial_port, work);
1da177e4
LT
555 struct tty_struct *tty;
556
557 dbg("%s - port %d", __FUNCTION__, port->number);
558
559 if (!port)
560 return;
561
562 tty = port->tty;
563 if (!tty)
564 return;
565
566 tty_wakeup(tty);
567}
568
569static void port_release(struct device *dev)
570{
571 struct usb_serial_port *port = to_usb_serial_port(dev);
572
573 dbg ("%s - %s", __FUNCTION__, dev->bus_id);
34f8e761
PZ
574 port_free(port);
575}
576
34ef50e5 577static void kill_traffic(struct usb_serial_port *port)
34f8e761 578{
1da177e4 579 usb_kill_urb(port->read_urb);
1da177e4 580 usb_kill_urb(port->write_urb);
1da177e4 581 usb_kill_urb(port->interrupt_in_urb);
1da177e4 582 usb_kill_urb(port->interrupt_out_urb);
34ef50e5
ON
583}
584
585static void port_free(struct usb_serial_port *port)
586{
587 kill_traffic(port);
588 usb_free_urb(port->read_urb);
589 usb_free_urb(port->write_urb);
590 usb_free_urb(port->interrupt_in_urb);
1da177e4
LT
591 usb_free_urb(port->interrupt_out_urb);
592 kfree(port->bulk_in_buffer);
593 kfree(port->bulk_out_buffer);
594 kfree(port->interrupt_in_buffer);
595 kfree(port->interrupt_out_buffer);
34f8e761 596 flush_scheduled_work(); /* port->work */
1da177e4
LT
597 kfree(port);
598}
599
600static struct usb_serial * create_serial (struct usb_device *dev,
601 struct usb_interface *interface,
ea65370d 602 struct usb_serial_driver *driver)
1da177e4
LT
603{
604 struct usb_serial *serial;
605
80b6ca48 606 serial = kzalloc(sizeof(*serial), GFP_KERNEL);
1da177e4
LT
607 if (!serial) {
608 dev_err(&dev->dev, "%s - out of memory\n", __FUNCTION__);
609 return NULL;
610 }
1da177e4 611 serial->dev = usb_get_dev(dev);
ea65370d 612 serial->type = driver;
1da177e4
LT
613 serial->interface = interface;
614 kref_init(&serial->kref);
615
616 return serial;
617}
618
93bacefc
GKH
619static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
620 struct usb_serial_driver *drv)
621{
622 struct usb_dynid *dynid;
623
624 spin_lock(&drv->dynids.lock);
625 list_for_each_entry(dynid, &drv->dynids.list, node) {
626 if (usb_match_one_id(intf, &dynid->id)) {
627 spin_unlock(&drv->dynids.lock);
628 return &dynid->id;
629 }
630 }
631 spin_unlock(&drv->dynids.lock);
632 return NULL;
633}
634
635static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
636 struct usb_interface *intf)
637{
638 const struct usb_device_id *id;
639
640 id = usb_match_id(intf, drv->id_table);
641 if (id) {
642 dbg("static descriptor matches");
643 goto exit;
644 }
645 id = match_dynamic_id(intf, drv);
646 if (id)
647 dbg("dynamic descriptor matches");
648exit:
649 return id;
650}
651
ea65370d 652static struct usb_serial_driver *search_serial_device(struct usb_interface *iface)
1da177e4
LT
653{
654 struct list_head *p;
655 const struct usb_device_id *id;
ea65370d 656 struct usb_serial_driver *t;
1da177e4 657
93b1fae4 658 /* Check if the usb id matches a known device */
1da177e4 659 list_for_each(p, &usb_serial_driver_list) {
ea65370d 660 t = list_entry(p, struct usb_serial_driver, driver_list);
93bacefc
GKH
661 id = get_iface_id(t, iface);
662 if (id)
1da177e4 663 return t;
1da177e4
LT
664 }
665
666 return NULL;
667}
668
669int usb_serial_probe(struct usb_interface *interface,
670 const struct usb_device_id *id)
671{
672 struct usb_device *dev = interface_to_usbdev (interface);
673 struct usb_serial *serial = NULL;
674 struct usb_serial_port *port;
675 struct usb_host_interface *iface_desc;
676 struct usb_endpoint_descriptor *endpoint;
677 struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
678 struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
679 struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
680 struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
ea65370d 681 struct usb_serial_driver *type = NULL;
1da177e4
LT
682 int retval;
683 int minor;
684 int buffer_size;
685 int i;
686 int num_interrupt_in = 0;
687 int num_interrupt_out = 0;
688 int num_bulk_in = 0;
689 int num_bulk_out = 0;
690 int num_ports = 0;
691 int max_endpoints;
692
4b10f0f3 693 lock_kernel(); /* guard against unloading a serial driver module */
1da177e4
LT
694 type = search_serial_device(interface);
695 if (!type) {
4b10f0f3 696 unlock_kernel();
1da177e4
LT
697 dbg("none matched");
698 return -ENODEV;
699 }
700
701 serial = create_serial (dev, interface, type);
702 if (!serial) {
4b10f0f3 703 unlock_kernel();
1da177e4
LT
704 dev_err(&interface->dev, "%s - out of memory\n", __FUNCTION__);
705 return -ENOMEM;
706 }
707
708 /* if this device type has a probe function, call it */
709 if (type->probe) {
710 const struct usb_device_id *id;
711
18fcac35 712 if (!try_module_get(type->driver.owner)) {
4b10f0f3 713 unlock_kernel();
1da177e4
LT
714 dev_err(&interface->dev, "module get failed, exiting\n");
715 kfree (serial);
716 return -EIO;
717 }
718
93bacefc 719 id = get_iface_id(type, interface);
1da177e4 720 retval = type->probe(serial, id);
18fcac35 721 module_put(type->driver.owner);
1da177e4
LT
722
723 if (retval) {
4b10f0f3 724 unlock_kernel();
1da177e4
LT
725 dbg ("sub driver rejected device");
726 kfree (serial);
727 return retval;
728 }
729 }
730
731 /* descriptor matches, let's find the endpoints needed */
732 /* check out the endpoints */
733 iface_desc = interface->cur_altsetting;
734 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
735 endpoint = &iface_desc->endpoint[i].desc;
4fa1bbf5
LFC
736
737 if (usb_endpoint_is_bulk_in(endpoint)) {
1da177e4
LT
738 /* we found a bulk in endpoint */
739 dbg("found bulk in on endpoint %d", i);
740 bulk_in_endpoint[num_bulk_in] = endpoint;
741 ++num_bulk_in;
742 }
743
4fa1bbf5 744 if (usb_endpoint_is_bulk_out(endpoint)) {
1da177e4
LT
745 /* we found a bulk out endpoint */
746 dbg("found bulk out on endpoint %d", i);
747 bulk_out_endpoint[num_bulk_out] = endpoint;
748 ++num_bulk_out;
749 }
4fa1bbf5
LFC
750
751 if (usb_endpoint_is_int_in(endpoint)) {
1da177e4
LT
752 /* we found a interrupt in endpoint */
753 dbg("found interrupt in on endpoint %d", i);
754 interrupt_in_endpoint[num_interrupt_in] = endpoint;
755 ++num_interrupt_in;
756 }
757
4fa1bbf5 758 if (usb_endpoint_is_int_out(endpoint)) {
1da177e4
LT
759 /* we found an interrupt out endpoint */
760 dbg("found interrupt out on endpoint %d", i);
761 interrupt_out_endpoint[num_interrupt_out] = endpoint;
762 ++num_interrupt_out;
763 }
764 }
765
766#if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
767 /* BEGIN HORRIBLE HACK FOR PL2303 */
768 /* this is needed due to the looney way its endpoints are set up */
769 if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
770 (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
771 ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
8fd80133
JS
772 (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
773 ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
774 (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID))) {
1da177e4
LT
775 if (interface != dev->actconfig->interface[0]) {
776 /* check out the endpoints of the other interface*/
777 iface_desc = dev->actconfig->interface[0]->cur_altsetting;
778 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
779 endpoint = &iface_desc->endpoint[i].desc;
4fa1bbf5 780 if (usb_endpoint_is_int_in(endpoint)) {
1da177e4
LT
781 /* we found a interrupt in endpoint */
782 dbg("found interrupt in for Prolific device on separate interface");
783 interrupt_in_endpoint[num_interrupt_in] = endpoint;
784 ++num_interrupt_in;
785 }
786 }
787 }
788
789 /* Now make sure the PL-2303 is configured correctly.
790 * If not, give up now and hope this hack will work
791 * properly during a later invocation of usb_serial_probe
792 */
793 if (num_bulk_in == 0 || num_bulk_out == 0) {
4b10f0f3 794 unlock_kernel();
1da177e4
LT
795 dev_info(&interface->dev, "PL-2303 hack: descriptors matched but endpoints did not\n");
796 kfree (serial);
797 return -ENODEV;
798 }
799 }
800 /* END HORRIBLE HACK FOR PL2303 */
801#endif
802
803 /* found all that we need */
269bda1c 804 dev_info(&interface->dev, "%s converter detected\n", type->description);
1da177e4
LT
805
806#ifdef CONFIG_USB_SERIAL_GENERIC
807 if (type == &usb_serial_generic_device) {
808 num_ports = num_bulk_out;
809 if (num_ports == 0) {
4b10f0f3 810 unlock_kernel();
1da177e4
LT
811 dev_err(&interface->dev, "Generic device with no bulk out, not allowed.\n");
812 kfree (serial);
813 return -EIO;
814 }
815 }
816#endif
817 if (!num_ports) {
818 /* if this device type has a calc_num_ports function, call it */
819 if (type->calc_num_ports) {
18fcac35 820 if (!try_module_get(type->driver.owner)) {
4b10f0f3 821 unlock_kernel();
1da177e4
LT
822 dev_err(&interface->dev, "module get failed, exiting\n");
823 kfree (serial);
824 return -EIO;
825 }
826 num_ports = type->calc_num_ports (serial);
18fcac35 827 module_put(type->driver.owner);
1da177e4
LT
828 }
829 if (!num_ports)
830 num_ports = type->num_ports;
831 }
832
1da177e4
LT
833 serial->num_ports = num_ports;
834 serial->num_bulk_in = num_bulk_in;
835 serial->num_bulk_out = num_bulk_out;
836 serial->num_interrupt_in = num_interrupt_in;
837 serial->num_interrupt_out = num_interrupt_out;
838
839 /* create our ports, we need as many as the max endpoints */
840 /* we don't use num_ports here cauz some devices have more endpoint pairs than ports */
841 max_endpoints = max(num_bulk_in, num_bulk_out);
842 max_endpoints = max(max_endpoints, num_interrupt_in);
843 max_endpoints = max(max_endpoints, num_interrupt_out);
844 max_endpoints = max(max_endpoints, (int)serial->num_ports);
845 serial->num_port_pointers = max_endpoints;
4b10f0f3
ON
846 unlock_kernel();
847
1da177e4
LT
848 dbg("%s - setting up %d port structures for this device", __FUNCTION__, max_endpoints);
849 for (i = 0; i < max_endpoints; ++i) {
80b6ca48 850 port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
1da177e4
LT
851 if (!port)
852 goto probe_error;
1da177e4 853 port->serial = serial;
507ca9bc 854 spin_lock_init(&port->lock);
1ce7dd26 855 mutex_init(&port->mutex);
c4028958 856 INIT_WORK(&port->work, usb_serial_port_work);
1da177e4
LT
857 serial->port[i] = port;
858 }
859
860 /* set up the endpoint information */
861 for (i = 0; i < num_bulk_in; ++i) {
862 endpoint = bulk_in_endpoint[i];
863 port = serial->port[i];
864 port->read_urb = usb_alloc_urb (0, GFP_KERNEL);
865 if (!port->read_urb) {
866 dev_err(&interface->dev, "No free urbs available\n");
867 goto probe_error;
868 }
869 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
870 port->bulk_in_size = buffer_size;
871 port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
872 port->bulk_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
873 if (!port->bulk_in_buffer) {
874 dev_err(&interface->dev, "Couldn't allocate bulk_in_buffer\n");
875 goto probe_error;
876 }
877 usb_fill_bulk_urb (port->read_urb, dev,
878 usb_rcvbulkpipe (dev,
879 endpoint->bEndpointAddress),
880 port->bulk_in_buffer, buffer_size,
881 serial->type->read_bulk_callback,
882 port);
883 }
884
885 for (i = 0; i < num_bulk_out; ++i) {
886 endpoint = bulk_out_endpoint[i];
887 port = serial->port[i];
888 port->write_urb = usb_alloc_urb(0, GFP_KERNEL);
889 if (!port->write_urb) {
890 dev_err(&interface->dev, "No free urbs available\n");
891 goto probe_error;
892 }
893 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
894 port->bulk_out_size = buffer_size;
895 port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
896 port->bulk_out_buffer = kmalloc (buffer_size, GFP_KERNEL);
897 if (!port->bulk_out_buffer) {
898 dev_err(&interface->dev, "Couldn't allocate bulk_out_buffer\n");
899 goto probe_error;
900 }
901 usb_fill_bulk_urb (port->write_urb, dev,
902 usb_sndbulkpipe (dev,
903 endpoint->bEndpointAddress),
904 port->bulk_out_buffer, buffer_size,
905 serial->type->write_bulk_callback,
906 port);
907 }
908
909 if (serial->type->read_int_callback) {
910 for (i = 0; i < num_interrupt_in; ++i) {
911 endpoint = interrupt_in_endpoint[i];
912 port = serial->port[i];
913 port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
914 if (!port->interrupt_in_urb) {
915 dev_err(&interface->dev, "No free urbs available\n");
916 goto probe_error;
917 }
918 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
919 port->interrupt_in_endpointAddress = endpoint->bEndpointAddress;
920 port->interrupt_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
921 if (!port->interrupt_in_buffer) {
922 dev_err(&interface->dev, "Couldn't allocate interrupt_in_buffer\n");
923 goto probe_error;
924 }
925 usb_fill_int_urb (port->interrupt_in_urb, dev,
926 usb_rcvintpipe (dev,
927 endpoint->bEndpointAddress),
928 port->interrupt_in_buffer, buffer_size,
929 serial->type->read_int_callback, port,
930 endpoint->bInterval);
931 }
932 } else if (num_interrupt_in) {
933 dbg("the device claims to support interrupt in transfers, but read_int_callback is not defined");
934 }
935
936 if (serial->type->write_int_callback) {
937 for (i = 0; i < num_interrupt_out; ++i) {
938 endpoint = interrupt_out_endpoint[i];
939 port = serial->port[i];
940 port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
941 if (!port->interrupt_out_urb) {
942 dev_err(&interface->dev, "No free urbs available\n");
943 goto probe_error;
944 }
945 buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
946 port->interrupt_out_size = buffer_size;
947 port->interrupt_out_endpointAddress = endpoint->bEndpointAddress;
948 port->interrupt_out_buffer = kmalloc (buffer_size, GFP_KERNEL);
949 if (!port->interrupt_out_buffer) {
950 dev_err(&interface->dev, "Couldn't allocate interrupt_out_buffer\n");
951 goto probe_error;
952 }
953 usb_fill_int_urb (port->interrupt_out_urb, dev,
954 usb_sndintpipe (dev,
955 endpoint->bEndpointAddress),
956 port->interrupt_out_buffer, buffer_size,
957 serial->type->write_int_callback, port,
958 endpoint->bInterval);
959 }
960 } else if (num_interrupt_out) {
961 dbg("the device claims to support interrupt out transfers, but write_int_callback is not defined");
962 }
963
964 /* if this device type has an attach function, call it */
965 if (type->attach) {
18fcac35 966 if (!try_module_get(type->driver.owner)) {
1da177e4
LT
967 dev_err(&interface->dev, "module get failed, exiting\n");
968 goto probe_error;
969 }
970 retval = type->attach (serial);
18fcac35 971 module_put(type->driver.owner);
1da177e4
LT
972 if (retval < 0)
973 goto probe_error;
974 if (retval > 0) {
975 /* quietly accept this device, but don't bind to a serial port
976 * as it's about to disappear */
977 goto exit;
978 }
979 }
980
34ef50e5
ON
981 if (get_free_serial (serial, num_ports, &minor) == NULL) {
982 dev_err(&interface->dev, "No more free serial devices\n");
983 goto probe_error;
984 }
c744f99e 985 serial->minor = minor;
34ef50e5 986
1da177e4
LT
987 /* register all of the individual ports with the driver core */
988 for (i = 0; i < num_ports; ++i) {
989 port = serial->port[i];
990 port->dev.parent = &interface->dev;
991 port->dev.driver = NULL;
992 port->dev.bus = &usb_serial_bus_type;
993 port->dev.release = &port_release;
994
995 snprintf (&port->dev.bus_id[0], sizeof(port->dev.bus_id), "ttyUSB%d", port->number);
996 dbg ("%s - registering %s", __FUNCTION__, port->dev.bus_id);
13f4db9e
GKH
997 retval = device_register(&port->dev);
998 if (retval)
999 dev_err(&port->dev, "Error registering port device, "
1000 "continuing\n");
1da177e4
LT
1001 }
1002
1003 usb_serial_console_init (debug, minor);
1004
1005exit:
1006 /* success */
1007 usb_set_intfdata (interface, serial);
1008 return 0;
1009
1010probe_error:
1011 for (i = 0; i < num_bulk_in; ++i) {
1012 port = serial->port[i];
1013 if (!port)
1014 continue;
95d43166 1015 usb_free_urb(port->read_urb);
1da177e4
LT
1016 kfree(port->bulk_in_buffer);
1017 }
1018 for (i = 0; i < num_bulk_out; ++i) {
1019 port = serial->port[i];
1020 if (!port)
1021 continue;
95d43166 1022 usb_free_urb(port->write_urb);
1da177e4
LT
1023 kfree(port->bulk_out_buffer);
1024 }
1025 for (i = 0; i < num_interrupt_in; ++i) {
1026 port = serial->port[i];
1027 if (!port)
1028 continue;
95d43166 1029 usb_free_urb(port->interrupt_in_urb);
1da177e4
LT
1030 kfree(port->interrupt_in_buffer);
1031 }
1032 for (i = 0; i < num_interrupt_out; ++i) {
1033 port = serial->port[i];
1034 if (!port)
1035 continue;
95d43166 1036 usb_free_urb(port->interrupt_out_urb);
1da177e4
LT
1037 kfree(port->interrupt_out_buffer);
1038 }
1039
1da177e4
LT
1040 /* free up any memory that we allocated */
1041 for (i = 0; i < serial->num_port_pointers; ++i)
1042 kfree(serial->port[i]);
1043 kfree (serial);
1044 return -EIO;
1045}
1046
1047void usb_serial_disconnect(struct usb_interface *interface)
1048{
1049 int i;
1050 struct usb_serial *serial = usb_get_intfdata (interface);
1051 struct device *dev = &interface->dev;
1052 struct usb_serial_port *port;
1053
73e487fd 1054 usb_serial_console_disconnect(serial);
1da177e4
LT
1055 dbg ("%s", __FUNCTION__);
1056
1057 usb_set_intfdata (interface, NULL);
1058 if (serial) {
1059 for (i = 0; i < serial->num_ports; ++i) {
1060 port = serial->port[i];
34ef50e5
ON
1061 if (port) {
1062 if (port->tty)
1063 tty_hangup(port->tty);
1064 kill_traffic(port);
1065 }
1da177e4
LT
1066 }
1067 /* let the last holder of this object
1068 * cause it to be cleaned up */
73e487fd 1069 usb_serial_put(serial);
1da177e4
LT
1070 }
1071 dev_info(dev, "device disconnected\n");
1072}
1073
ec22559e
ON
1074int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1075{
1076 struct usb_serial *serial = usb_get_intfdata(intf);
1077 struct usb_serial_port *port;
1078 int i, r = 0;
1079
e31c1880
ON
1080 if (!serial) /* device has been disconnected */
1081 return 0;
1082
1083 for (i = 0; i < serial->num_ports; ++i) {
1084 port = serial->port[i];
1085 if (port)
1086 kill_traffic(port);
ec22559e
ON
1087 }
1088
1089 if (serial->type->suspend)
e31c1880 1090 r = serial->type->suspend(serial, message);
ec22559e
ON
1091
1092 return r;
1093}
1094EXPORT_SYMBOL(usb_serial_suspend);
1095
1096int usb_serial_resume(struct usb_interface *intf)
1097{
1098 struct usb_serial *serial = usb_get_intfdata(intf);
1099
1100 return serial->type->resume(serial);
1101}
1102EXPORT_SYMBOL(usb_serial_resume);
1103
b68e31d0 1104static const struct tty_operations serial_ops = {
1da177e4
LT
1105 .open = serial_open,
1106 .close = serial_close,
1107 .write = serial_write,
1108 .write_room = serial_write_room,
1109 .ioctl = serial_ioctl,
1110 .set_termios = serial_set_termios,
1111 .throttle = serial_throttle,
1112 .unthrottle = serial_unthrottle,
1113 .break_ctl = serial_break,
1114 .chars_in_buffer = serial_chars_in_buffer,
1115 .read_proc = serial_read_proc,
1116 .tiocmget = serial_tiocmget,
1117 .tiocmset = serial_tiocmset,
1118};
1119
1120struct tty_driver *usb_serial_tty_driver;
1121
1122static int __init usb_serial_init(void)
1123{
1124 int i;
1125 int result;
1126
1127 usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1128 if (!usb_serial_tty_driver)
1129 return -ENOMEM;
1130
1131 /* Initialize our global data */
34ef50e5 1132 spin_lock_init(&table_lock);
1da177e4
LT
1133 for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
1134 serial_table[i] = NULL;
1135 }
1136
1137 result = bus_register(&usb_serial_bus_type);
1138 if (result) {
1139 err("%s - registering bus driver failed", __FUNCTION__);
1140 goto exit_bus;
1141 }
1142
1da177e4
LT
1143 usb_serial_tty_driver->owner = THIS_MODULE;
1144 usb_serial_tty_driver->driver_name = "usbserial";
1da177e4
LT
1145 usb_serial_tty_driver->name = "ttyUSB";
1146 usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1147 usb_serial_tty_driver->minor_start = 0;
1148 usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1149 usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
331b8319 1150 usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1da177e4
LT
1151 usb_serial_tty_driver->init_termios = tty_std_termios;
1152 usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1153 tty_set_operations(usb_serial_tty_driver, &serial_ops);
1154 result = tty_register_driver(usb_serial_tty_driver);
1155 if (result) {
1156 err("%s - tty_register_driver failed", __FUNCTION__);
1157 goto exit_reg_driver;
1158 }
1159
1160 /* register the USB driver */
1161 result = usb_register(&usb_serial_driver);
1162 if (result < 0) {
1163 err("%s - usb_register failed", __FUNCTION__);
1164 goto exit_tty;
1165 }
1166
06299db3
GKH
1167 /* register the generic driver, if we should */
1168 result = usb_serial_generic_register(debug);
1169 if (result < 0) {
1170 err("%s - registering generic driver failed", __FUNCTION__);
1171 goto exit_generic;
1172 }
1173
17a882fc 1174 info(DRIVER_DESC);
1da177e4
LT
1175
1176 return result;
1177
06299db3
GKH
1178exit_generic:
1179 usb_deregister(&usb_serial_driver);
1180
1da177e4
LT
1181exit_tty:
1182 tty_unregister_driver(usb_serial_tty_driver);
1183
1184exit_reg_driver:
1da177e4
LT
1185 bus_unregister(&usb_serial_bus_type);
1186
1187exit_bus:
1188 err ("%s - returning with error %d", __FUNCTION__, result);
1189 put_tty_driver(usb_serial_tty_driver);
1190 return result;
1191}
1192
1193
1194static void __exit usb_serial_exit(void)
1195{
1196 usb_serial_console_exit();
1197
1198 usb_serial_generic_deregister();
1199
1200 usb_deregister(&usb_serial_driver);
1201 tty_unregister_driver(usb_serial_tty_driver);
1202 put_tty_driver(usb_serial_tty_driver);
1203 bus_unregister(&usb_serial_bus_type);
1204}
1205
1206
1207module_init(usb_serial_init);
1208module_exit(usb_serial_exit);
1209
1210#define set_to_generic_if_null(type, function) \
1211 do { \
1212 if (!type->function) { \
1213 type->function = usb_serial_generic_##function; \
1214 dbg("Had to override the " #function \
1215 " usb serial operation with the generic one.");\
1216 } \
1217 } while (0)
1218
ea65370d 1219static void fixup_generic(struct usb_serial_driver *device)
1da177e4
LT
1220{
1221 set_to_generic_if_null(device, open);
1222 set_to_generic_if_null(device, write);
1223 set_to_generic_if_null(device, close);
1224 set_to_generic_if_null(device, write_room);
1225 set_to_generic_if_null(device, chars_in_buffer);
1226 set_to_generic_if_null(device, read_bulk_callback);
1227 set_to_generic_if_null(device, write_bulk_callback);
1228 set_to_generic_if_null(device, shutdown);
1229}
1230
4b10f0f3 1231int usb_serial_register(struct usb_serial_driver *driver) /* must be called with BKL held */
1da177e4
LT
1232{
1233 int retval;
1234
ea65370d 1235 fixup_generic(driver);
1da177e4 1236
269bda1c
GKH
1237 if (!driver->description)
1238 driver->description = driver->driver.name;
1239
1da177e4 1240 /* Add this device to our list of devices */
ea65370d 1241 list_add(&driver->driver_list, &usb_serial_driver_list);
1da177e4 1242
ea65370d 1243 retval = usb_serial_bus_register(driver);
1da177e4 1244 if (retval) {
269bda1c 1245 err("problem %d when registering driver %s", retval, driver->description);
ea65370d 1246 list_del(&driver->driver_list);
1da177e4
LT
1247 }
1248 else
269bda1c 1249 info("USB Serial support registered for %s", driver->description);
1da177e4
LT
1250
1251 return retval;
1252}
1253
1254
4b10f0f3 1255void usb_serial_deregister(struct usb_serial_driver *device) /* must be called with BKL held */
1da177e4 1256{
269bda1c 1257 info("USB Serial deregistering driver %s", device->description);
1da177e4
LT
1258 list_del(&device->driver_list);
1259 usb_serial_bus_deregister(device);
1260}
1261
1262
1263
1264/* If the usb-serial core is built into the core, the usb-serial drivers
1265 need these symbols to load properly as modules. */
1266EXPORT_SYMBOL_GPL(usb_serial_register);
1267EXPORT_SYMBOL_GPL(usb_serial_deregister);
1268EXPORT_SYMBOL_GPL(usb_serial_probe);
1269EXPORT_SYMBOL_GPL(usb_serial_disconnect);
1270EXPORT_SYMBOL_GPL(usb_serial_port_softint);
1271
1272
1273/* Module information */
1274MODULE_AUTHOR( DRIVER_AUTHOR );
1275MODULE_DESCRIPTION( DRIVER_DESC );
1da177e4
LT
1276MODULE_LICENSE("GPL");
1277
1278module_param(debug, bool, S_IRUGO | S_IWUSR);
1279MODULE_PARM_DESC(debug, "Debug enabled or not");
This page took 0.391636 seconds and 5 git commands to generate.