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