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