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