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