xref: /linux/drivers/usb/serial/usb-serial.c (revision d0b73b488c55df905ea8faaad079f8535629ed26)
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 
365 	dev_dbg(tty->dev, "%s - port %d\n", __func__, port->number);
366 
367 	/* if the device was unplugged then any remaining characters
368 	   fell out of the connector ;) */
369 	if (port->serial->disconnected)
370 		return 0;
371 	/* pass on to the driver specific version of this function */
372 	return port->serial->type->chars_in_buffer(tty);
373 }
374 
375 static void serial_throttle(struct tty_struct *tty)
376 {
377 	struct usb_serial_port *port = tty->driver_data;
378 
379 	dev_dbg(tty->dev, "%s - port %d\n", __func__, port->number);
380 
381 	/* pass on to the driver specific version of this function */
382 	if (port->serial->type->throttle)
383 		port->serial->type->throttle(tty);
384 }
385 
386 static void serial_unthrottle(struct tty_struct *tty)
387 {
388 	struct usb_serial_port *port = tty->driver_data;
389 
390 	dev_dbg(tty->dev, "%s - port %d\n", __func__, port->number);
391 
392 	/* pass on to the driver specific version of this function */
393 	if (port->serial->type->unthrottle)
394 		port->serial->type->unthrottle(tty);
395 }
396 
397 static int serial_ioctl(struct tty_struct *tty,
398 					unsigned int cmd, unsigned long arg)
399 {
400 	struct usb_serial_port *port = tty->driver_data;
401 	int retval = -ENODEV;
402 
403 	dev_dbg(tty->dev, "%s - port %d, cmd 0x%.4x\n", __func__,
404 		port->number, cmd);
405 
406 	/* pass on to the driver specific version of this function
407 	   if it is available */
408 	if (port->serial->type->ioctl) {
409 		retval = port->serial->type->ioctl(tty, cmd, arg);
410 	} else
411 		retval = -ENOIOCTLCMD;
412 	return retval;
413 }
414 
415 static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
416 {
417 	struct usb_serial_port *port = tty->driver_data;
418 
419 	dev_dbg(tty->dev, "%s - port %d\n", __func__, port->number);
420 
421 	/* pass on to the driver specific version of this function
422 	   if it is available */
423 	if (port->serial->type->set_termios)
424 		port->serial->type->set_termios(tty, port, old);
425 	else
426 		tty_termios_copy_hw(&tty->termios, old);
427 }
428 
429 static int serial_break(struct tty_struct *tty, int break_state)
430 {
431 	struct usb_serial_port *port = tty->driver_data;
432 
433 	dev_dbg(tty->dev, "%s - port %d\n", __func__, port->number);
434 
435 	/* pass on to the driver specific version of this function
436 	   if it is available */
437 	if (port->serial->type->break_ctl)
438 		port->serial->type->break_ctl(tty, break_state);
439 	return 0;
440 }
441 
442 static int serial_proc_show(struct seq_file *m, void *v)
443 {
444 	struct usb_serial *serial;
445 	int i;
446 	char tmp[40];
447 
448 	seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
449 	for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
450 		serial = usb_serial_get_by_index(i);
451 		if (serial == NULL)
452 			continue;
453 
454 		seq_printf(m, "%d:", i);
455 		if (serial->type->driver.owner)
456 			seq_printf(m, " module:%s",
457 				module_name(serial->type->driver.owner));
458 		seq_printf(m, " name:\"%s\"",
459 				serial->type->description);
460 		seq_printf(m, " vendor:%04x product:%04x",
461 			le16_to_cpu(serial->dev->descriptor.idVendor),
462 			le16_to_cpu(serial->dev->descriptor.idProduct));
463 		seq_printf(m, " num_ports:%d", serial->num_ports);
464 		seq_printf(m, " port:%d", i - serial->minor + 1);
465 		usb_make_path(serial->dev, tmp, sizeof(tmp));
466 		seq_printf(m, " path:%s", tmp);
467 
468 		seq_putc(m, '\n');
469 		usb_serial_put(serial);
470 		mutex_unlock(&serial->disc_mutex);
471 	}
472 	return 0;
473 }
474 
475 static int serial_proc_open(struct inode *inode, struct file *file)
476 {
477 	return single_open(file, serial_proc_show, NULL);
478 }
479 
480 static const struct file_operations serial_proc_fops = {
481 	.owner		= THIS_MODULE,
482 	.open		= serial_proc_open,
483 	.read		= seq_read,
484 	.llseek		= seq_lseek,
485 	.release	= single_release,
486 };
487 
488 static int serial_tiocmget(struct tty_struct *tty)
489 {
490 	struct usb_serial_port *port = tty->driver_data;
491 
492 	dev_dbg(tty->dev, "%s - port %d\n", __func__, port->number);
493 
494 	if (port->serial->type->tiocmget)
495 		return port->serial->type->tiocmget(tty);
496 	return -EINVAL;
497 }
498 
499 static int serial_tiocmset(struct tty_struct *tty,
500 			    unsigned int set, unsigned int clear)
501 {
502 	struct usb_serial_port *port = tty->driver_data;
503 
504 	dev_dbg(tty->dev, "%s - port %d\n", __func__, port->number);
505 
506 	if (port->serial->type->tiocmset)
507 		return port->serial->type->tiocmset(tty, set, clear);
508 	return -EINVAL;
509 }
510 
511 static int serial_get_icount(struct tty_struct *tty,
512 				struct serial_icounter_struct *icount)
513 {
514 	struct usb_serial_port *port = tty->driver_data;
515 
516 	dev_dbg(tty->dev, "%s - port %d\n", __func__, port->number);
517 
518 	if (port->serial->type->get_icount)
519 		return port->serial->type->get_icount(tty, icount);
520 	return -EINVAL;
521 }
522 
523 /*
524  * We would be calling tty_wakeup here, but unfortunately some line
525  * disciplines have an annoying habit of calling tty->write from
526  * the write wakeup callback (e.g. n_hdlc.c).
527  */
528 void usb_serial_port_softint(struct usb_serial_port *port)
529 {
530 	schedule_work(&port->work);
531 }
532 EXPORT_SYMBOL_GPL(usb_serial_port_softint);
533 
534 static void usb_serial_port_work(struct work_struct *work)
535 {
536 	struct usb_serial_port *port =
537 		container_of(work, struct usb_serial_port, work);
538 	struct tty_struct *tty;
539 
540 	tty = tty_port_tty_get(&port->port);
541 	if (!tty)
542 		return;
543 
544 	dev_dbg(tty->dev, "%s - port %d\n", __func__, port->number);
545 
546 	tty_wakeup(tty);
547 	tty_kref_put(tty);
548 }
549 
550 static void kill_traffic(struct usb_serial_port *port)
551 {
552 	int i;
553 
554 	for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i)
555 		usb_kill_urb(port->read_urbs[i]);
556 	for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i)
557 		usb_kill_urb(port->write_urbs[i]);
558 	/*
559 	 * This is tricky.
560 	 * Some drivers submit the read_urb in the
561 	 * handler for the write_urb or vice versa
562 	 * this order determines the order in which
563 	 * usb_kill_urb() must be used to reliably
564 	 * kill the URBs. As it is unknown here,
565 	 * both orders must be used in turn.
566 	 * The call below is not redundant.
567 	 */
568 	usb_kill_urb(port->read_urb);
569 	usb_kill_urb(port->interrupt_in_urb);
570 	usb_kill_urb(port->interrupt_out_urb);
571 }
572 
573 static void port_release(struct device *dev)
574 {
575 	struct usb_serial_port *port = to_usb_serial_port(dev);
576 	int i;
577 
578 	dev_dbg(dev, "%s\n", __func__);
579 
580 	/*
581 	 * Stop all the traffic before cancelling the work, so that
582 	 * nobody will restart it by calling usb_serial_port_softint.
583 	 */
584 	kill_traffic(port);
585 	cancel_work_sync(&port->work);
586 
587 	usb_free_urb(port->interrupt_in_urb);
588 	usb_free_urb(port->interrupt_out_urb);
589 	for (i = 0; i < ARRAY_SIZE(port->read_urbs); ++i) {
590 		usb_free_urb(port->read_urbs[i]);
591 		kfree(port->bulk_in_buffers[i]);
592 	}
593 	for (i = 0; i < ARRAY_SIZE(port->write_urbs); ++i) {
594 		usb_free_urb(port->write_urbs[i]);
595 		kfree(port->bulk_out_buffers[i]);
596 	}
597 	kfifo_free(&port->write_fifo);
598 	kfree(port->interrupt_in_buffer);
599 	kfree(port->interrupt_out_buffer);
600 	tty_port_destroy(&port->port);
601 	kfree(port);
602 }
603 
604 static struct usb_serial *create_serial(struct usb_device *dev,
605 					struct usb_interface *interface,
606 					struct usb_serial_driver *driver)
607 {
608 	struct usb_serial *serial;
609 
610 	serial = kzalloc(sizeof(*serial), GFP_KERNEL);
611 	if (!serial) {
612 		dev_err(&dev->dev, "%s - out of memory\n", __func__);
613 		return NULL;
614 	}
615 	serial->dev = usb_get_dev(dev);
616 	serial->type = driver;
617 	serial->interface = interface;
618 	kref_init(&serial->kref);
619 	mutex_init(&serial->disc_mutex);
620 	serial->minor = SERIAL_TTY_NO_MINOR;
621 
622 	return serial;
623 }
624 
625 static const struct usb_device_id *match_dynamic_id(struct usb_interface *intf,
626 					    struct usb_serial_driver *drv)
627 {
628 	struct usb_dynid *dynid;
629 
630 	spin_lock(&drv->dynids.lock);
631 	list_for_each_entry(dynid, &drv->dynids.list, node) {
632 		if (usb_match_one_id(intf, &dynid->id)) {
633 			spin_unlock(&drv->dynids.lock);
634 			return &dynid->id;
635 		}
636 	}
637 	spin_unlock(&drv->dynids.lock);
638 	return NULL;
639 }
640 
641 static const struct usb_device_id *get_iface_id(struct usb_serial_driver *drv,
642 						struct usb_interface *intf)
643 {
644 	const struct usb_device_id *id;
645 
646 	id = usb_match_id(intf, drv->id_table);
647 	if (id) {
648 		dev_dbg(&intf->dev, "static descriptor matches\n");
649 		goto exit;
650 	}
651 	id = match_dynamic_id(intf, drv);
652 	if (id)
653 		dev_dbg(&intf->dev, "dynamic descriptor matches\n");
654 exit:
655 	return id;
656 }
657 
658 /* Caller must hold table_lock */
659 static struct usb_serial_driver *search_serial_device(
660 					struct usb_interface *iface)
661 {
662 	const struct usb_device_id *id = NULL;
663 	struct usb_serial_driver *drv;
664 	struct usb_driver *driver = to_usb_driver(iface->dev.driver);
665 
666 	/* Check if the usb id matches a known device */
667 	list_for_each_entry(drv, &usb_serial_driver_list, driver_list) {
668 		if (drv->usb_driver == driver)
669 			id = get_iface_id(drv, iface);
670 		if (id)
671 			return drv;
672 	}
673 
674 	return NULL;
675 }
676 
677 static int serial_carrier_raised(struct tty_port *port)
678 {
679 	struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
680 	struct usb_serial_driver *drv = p->serial->type;
681 
682 	if (drv->carrier_raised)
683 		return drv->carrier_raised(p);
684 	/* No carrier control - don't block */
685 	return 1;
686 }
687 
688 static void serial_dtr_rts(struct tty_port *port, int on)
689 {
690 	struct usb_serial_port *p = container_of(port, struct usb_serial_port, port);
691 	struct usb_serial_driver *drv = p->serial->type;
692 
693 	if (drv->dtr_rts)
694 		drv->dtr_rts(p, on);
695 }
696 
697 static const struct tty_port_operations serial_port_ops = {
698 	.carrier_raised = serial_carrier_raised,
699 	.dtr_rts = serial_dtr_rts,
700 	.activate = serial_activate,
701 	.shutdown = serial_down,
702 };
703 
704 static int usb_serial_probe(struct usb_interface *interface,
705 			       const struct usb_device_id *id)
706 {
707 	struct device *ddev = &interface->dev;
708 	struct usb_device *dev = interface_to_usbdev(interface);
709 	struct usb_serial *serial = NULL;
710 	struct usb_serial_port *port;
711 	struct usb_host_interface *iface_desc;
712 	struct usb_endpoint_descriptor *endpoint;
713 	struct usb_endpoint_descriptor *interrupt_in_endpoint[MAX_NUM_PORTS];
714 	struct usb_endpoint_descriptor *interrupt_out_endpoint[MAX_NUM_PORTS];
715 	struct usb_endpoint_descriptor *bulk_in_endpoint[MAX_NUM_PORTS];
716 	struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
717 	struct usb_serial_driver *type = NULL;
718 	int retval;
719 	unsigned int minor;
720 	int buffer_size;
721 	int i;
722 	int j;
723 	int num_interrupt_in = 0;
724 	int num_interrupt_out = 0;
725 	int num_bulk_in = 0;
726 	int num_bulk_out = 0;
727 	int num_ports = 0;
728 	int max_endpoints;
729 
730 	mutex_lock(&table_lock);
731 	type = search_serial_device(interface);
732 	if (!type) {
733 		mutex_unlock(&table_lock);
734 		dev_dbg(ddev, "none matched\n");
735 		return -ENODEV;
736 	}
737 
738 	if (!try_module_get(type->driver.owner)) {
739 		mutex_unlock(&table_lock);
740 		dev_err(ddev, "module get failed, exiting\n");
741 		return -EIO;
742 	}
743 	mutex_unlock(&table_lock);
744 
745 	serial = create_serial(dev, interface, type);
746 	if (!serial) {
747 		module_put(type->driver.owner);
748 		dev_err(ddev, "%s - out of memory\n", __func__);
749 		return -ENOMEM;
750 	}
751 
752 	/* if this device type has a probe function, call it */
753 	if (type->probe) {
754 		const struct usb_device_id *id;
755 
756 		id = get_iface_id(type, interface);
757 		retval = type->probe(serial, id);
758 
759 		if (retval) {
760 			dev_dbg(ddev, "sub driver rejected device\n");
761 			usb_serial_put(serial);
762 			module_put(type->driver.owner);
763 			return retval;
764 		}
765 	}
766 
767 	/* descriptor matches, let's find the endpoints needed */
768 	/* check out the endpoints */
769 	iface_desc = interface->cur_altsetting;
770 	for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
771 		endpoint = &iface_desc->endpoint[i].desc;
772 
773 		if (usb_endpoint_is_bulk_in(endpoint)) {
774 			/* we found a bulk in endpoint */
775 			dev_dbg(ddev, "found bulk in on endpoint %d\n", i);
776 			bulk_in_endpoint[num_bulk_in] = endpoint;
777 			++num_bulk_in;
778 		}
779 
780 		if (usb_endpoint_is_bulk_out(endpoint)) {
781 			/* we found a bulk out endpoint */
782 			dev_dbg(ddev, "found bulk out on endpoint %d\n", i);
783 			bulk_out_endpoint[num_bulk_out] = endpoint;
784 			++num_bulk_out;
785 		}
786 
787 		if (usb_endpoint_is_int_in(endpoint)) {
788 			/* we found a interrupt in endpoint */
789 			dev_dbg(ddev, "found interrupt in on endpoint %d\n", i);
790 			interrupt_in_endpoint[num_interrupt_in] = endpoint;
791 			++num_interrupt_in;
792 		}
793 
794 		if (usb_endpoint_is_int_out(endpoint)) {
795 			/* we found an interrupt out endpoint */
796 			dev_dbg(ddev, "found interrupt out on endpoint %d\n", i);
797 			interrupt_out_endpoint[num_interrupt_out] = endpoint;
798 			++num_interrupt_out;
799 		}
800 	}
801 
802 #if defined(CONFIG_USB_SERIAL_PL2303) || defined(CONFIG_USB_SERIAL_PL2303_MODULE)
803 	/* BEGIN HORRIBLE HACK FOR PL2303 */
804 	/* this is needed due to the looney way its endpoints are set up */
805 	if (((le16_to_cpu(dev->descriptor.idVendor) == PL2303_VENDOR_ID) &&
806 	     (le16_to_cpu(dev->descriptor.idProduct) == PL2303_PRODUCT_ID)) ||
807 	    ((le16_to_cpu(dev->descriptor.idVendor) == ATEN_VENDOR_ID) &&
808 	     (le16_to_cpu(dev->descriptor.idProduct) == ATEN_PRODUCT_ID)) ||
809 	    ((le16_to_cpu(dev->descriptor.idVendor) == ALCOR_VENDOR_ID) &&
810 	     (le16_to_cpu(dev->descriptor.idProduct) == ALCOR_PRODUCT_ID)) ||
811 	    ((le16_to_cpu(dev->descriptor.idVendor) == SIEMENS_VENDOR_ID) &&
812 	     (le16_to_cpu(dev->descriptor.idProduct) == SIEMENS_PRODUCT_ID_EF81))) {
813 		if (interface != dev->actconfig->interface[0]) {
814 			/* check out the endpoints of the other interface*/
815 			iface_desc = dev->actconfig->interface[0]->cur_altsetting;
816 			for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
817 				endpoint = &iface_desc->endpoint[i].desc;
818 				if (usb_endpoint_is_int_in(endpoint)) {
819 					/* we found a interrupt in endpoint */
820 					dev_dbg(ddev, "found interrupt in for Prolific device on separate interface\n");
821 					interrupt_in_endpoint[num_interrupt_in] = endpoint;
822 					++num_interrupt_in;
823 				}
824 			}
825 		}
826 
827 		/* Now make sure the PL-2303 is configured correctly.
828 		 * If not, give up now and hope this hack will work
829 		 * properly during a later invocation of usb_serial_probe
830 		 */
831 		if (num_bulk_in == 0 || num_bulk_out == 0) {
832 			dev_info(ddev, "PL-2303 hack: descriptors matched but endpoints did not\n");
833 			usb_serial_put(serial);
834 			module_put(type->driver.owner);
835 			return -ENODEV;
836 		}
837 	}
838 	/* END HORRIBLE HACK FOR PL2303 */
839 #endif
840 
841 #ifdef CONFIG_USB_SERIAL_GENERIC
842 	if (type == &usb_serial_generic_device) {
843 		num_ports = num_bulk_out;
844 		if (num_ports == 0) {
845 			dev_err(ddev, "Generic device with no bulk out, not allowed.\n");
846 			usb_serial_put(serial);
847 			module_put(type->driver.owner);
848 			return -EIO;
849 		}
850 		dev_info(ddev, "The \"generic\" usb-serial driver is only for testing and one-off prototypes.\n");
851 		dev_info(ddev, "Tell linux-usb@vger.kernel.org to add your device to a proper driver.\n");
852 	}
853 #endif
854 	if (!num_ports) {
855 		/* if this device type has a calc_num_ports function, call it */
856 		if (type->calc_num_ports)
857 			num_ports = type->calc_num_ports(serial);
858 		if (!num_ports)
859 			num_ports = type->num_ports;
860 	}
861 
862 	serial->num_ports = num_ports;
863 	serial->num_bulk_in = num_bulk_in;
864 	serial->num_bulk_out = num_bulk_out;
865 	serial->num_interrupt_in = num_interrupt_in;
866 	serial->num_interrupt_out = num_interrupt_out;
867 
868 	/* found all that we need */
869 	dev_info(ddev, "%s converter detected\n", type->description);
870 
871 	/* create our ports, we need as many as the max endpoints */
872 	/* we don't use num_ports here because some devices have more
873 	   endpoint pairs than ports */
874 	max_endpoints = max(num_bulk_in, num_bulk_out);
875 	max_endpoints = max(max_endpoints, num_interrupt_in);
876 	max_endpoints = max(max_endpoints, num_interrupt_out);
877 	max_endpoints = max(max_endpoints, (int)serial->num_ports);
878 	serial->num_port_pointers = max_endpoints;
879 
880 	dev_dbg(ddev, "setting up %d port structures for this device", max_endpoints);
881 	for (i = 0; i < max_endpoints; ++i) {
882 		port = kzalloc(sizeof(struct usb_serial_port), GFP_KERNEL);
883 		if (!port)
884 			goto probe_error;
885 		tty_port_init(&port->port);
886 		port->port.ops = &serial_port_ops;
887 		port->serial = serial;
888 		spin_lock_init(&port->lock);
889 		/* Keep this for private driver use for the moment but
890 		   should probably go away */
891 		INIT_WORK(&port->work, usb_serial_port_work);
892 		serial->port[i] = port;
893 		port->dev.parent = &interface->dev;
894 		port->dev.driver = NULL;
895 		port->dev.bus = &usb_serial_bus_type;
896 		port->dev.release = &port_release;
897 		device_initialize(&port->dev);
898 	}
899 
900 	/* set up the endpoint information */
901 	for (i = 0; i < num_bulk_in; ++i) {
902 		endpoint = bulk_in_endpoint[i];
903 		port = serial->port[i];
904 		buffer_size = max_t(int, serial->type->bulk_in_size,
905 				usb_endpoint_maxp(endpoint));
906 		port->bulk_in_size = buffer_size;
907 		port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
908 
909 		for (j = 0; j < ARRAY_SIZE(port->read_urbs); ++j) {
910 			set_bit(j, &port->read_urbs_free);
911 			port->read_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
912 			if (!port->read_urbs[j]) {
913 				dev_err(ddev, "No free urbs available\n");
914 				goto probe_error;
915 			}
916 			port->bulk_in_buffers[j] = kmalloc(buffer_size,
917 								GFP_KERNEL);
918 			if (!port->bulk_in_buffers[j]) {
919 				dev_err(ddev, "Couldn't allocate bulk_in_buffer\n");
920 				goto probe_error;
921 			}
922 			usb_fill_bulk_urb(port->read_urbs[j], dev,
923 					usb_rcvbulkpipe(dev,
924 						endpoint->bEndpointAddress),
925 					port->bulk_in_buffers[j], buffer_size,
926 					serial->type->read_bulk_callback,
927 					port);
928 		}
929 
930 		port->read_urb = port->read_urbs[0];
931 		port->bulk_in_buffer = port->bulk_in_buffers[0];
932 	}
933 
934 	for (i = 0; i < num_bulk_out; ++i) {
935 		endpoint = bulk_out_endpoint[i];
936 		port = serial->port[i];
937 		if (kfifo_alloc(&port->write_fifo, PAGE_SIZE, GFP_KERNEL))
938 			goto probe_error;
939 		buffer_size = serial->type->bulk_out_size;
940 		if (!buffer_size)
941 			buffer_size = usb_endpoint_maxp(endpoint);
942 		port->bulk_out_size = buffer_size;
943 		port->bulk_out_endpointAddress = endpoint->bEndpointAddress;
944 
945 		for (j = 0; j < ARRAY_SIZE(port->write_urbs); ++j) {
946 			set_bit(j, &port->write_urbs_free);
947 			port->write_urbs[j] = usb_alloc_urb(0, GFP_KERNEL);
948 			if (!port->write_urbs[j]) {
949 				dev_err(ddev, "No free urbs available\n");
950 				goto probe_error;
951 			}
952 			port->bulk_out_buffers[j] = kmalloc(buffer_size,
953 								GFP_KERNEL);
954 			if (!port->bulk_out_buffers[j]) {
955 				dev_err(ddev, "Couldn't allocate bulk_out_buffer\n");
956 				goto probe_error;
957 			}
958 			usb_fill_bulk_urb(port->write_urbs[j], dev,
959 					usb_sndbulkpipe(dev,
960 						endpoint->bEndpointAddress),
961 					port->bulk_out_buffers[j], buffer_size,
962 					serial->type->write_bulk_callback,
963 					port);
964 		}
965 
966 		port->write_urb = port->write_urbs[0];
967 		port->bulk_out_buffer = port->bulk_out_buffers[0];
968 	}
969 
970 	if (serial->type->read_int_callback) {
971 		for (i = 0; i < num_interrupt_in; ++i) {
972 			endpoint = interrupt_in_endpoint[i];
973 			port = serial->port[i];
974 			port->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
975 			if (!port->interrupt_in_urb) {
976 				dev_err(ddev, "No free urbs available\n");
977 				goto probe_error;
978 			}
979 			buffer_size = usb_endpoint_maxp(endpoint);
980 			port->interrupt_in_endpointAddress =
981 						endpoint->bEndpointAddress;
982 			port->interrupt_in_buffer = kmalloc(buffer_size,
983 								GFP_KERNEL);
984 			if (!port->interrupt_in_buffer) {
985 				dev_err(ddev, "Couldn't allocate interrupt_in_buffer\n");
986 				goto probe_error;
987 			}
988 			usb_fill_int_urb(port->interrupt_in_urb, dev,
989 				usb_rcvintpipe(dev,
990 						endpoint->bEndpointAddress),
991 				port->interrupt_in_buffer, buffer_size,
992 				serial->type->read_int_callback, port,
993 				endpoint->bInterval);
994 		}
995 	} else if (num_interrupt_in) {
996 		dev_dbg(ddev, "The device claims to support interrupt in transfers, but read_int_callback is not defined\n");
997 	}
998 
999 	if (serial->type->write_int_callback) {
1000 		for (i = 0; i < num_interrupt_out; ++i) {
1001 			endpoint = interrupt_out_endpoint[i];
1002 			port = serial->port[i];
1003 			port->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
1004 			if (!port->interrupt_out_urb) {
1005 				dev_err(ddev, "No free urbs available\n");
1006 				goto probe_error;
1007 			}
1008 			buffer_size = usb_endpoint_maxp(endpoint);
1009 			port->interrupt_out_size = buffer_size;
1010 			port->interrupt_out_endpointAddress =
1011 						endpoint->bEndpointAddress;
1012 			port->interrupt_out_buffer = kmalloc(buffer_size,
1013 								GFP_KERNEL);
1014 			if (!port->interrupt_out_buffer) {
1015 				dev_err(ddev, "Couldn't allocate interrupt_out_buffer\n");
1016 				goto probe_error;
1017 			}
1018 			usb_fill_int_urb(port->interrupt_out_urb, dev,
1019 				usb_sndintpipe(dev,
1020 						  endpoint->bEndpointAddress),
1021 				port->interrupt_out_buffer, buffer_size,
1022 				serial->type->write_int_callback, port,
1023 				endpoint->bInterval);
1024 		}
1025 	} else if (num_interrupt_out) {
1026 		dev_dbg(ddev, "The device claims to support interrupt out transfers, but write_int_callback is not defined\n");
1027 	}
1028 
1029 	usb_set_intfdata(interface, serial);
1030 
1031 	/* if this device type has an attach function, call it */
1032 	if (type->attach) {
1033 		retval = type->attach(serial);
1034 		if (retval < 0)
1035 			goto probe_error;
1036 		serial->attached = 1;
1037 		if (retval > 0) {
1038 			/* quietly accept this device, but don't bind to a
1039 			   serial port as it's about to disappear */
1040 			serial->num_ports = 0;
1041 			goto exit;
1042 		}
1043 	} else {
1044 		serial->attached = 1;
1045 	}
1046 
1047 	/* Avoid race with tty_open and serial_install by setting the
1048 	 * disconnected flag and not clearing it until all ports have been
1049 	 * registered.
1050 	 */
1051 	serial->disconnected = 1;
1052 
1053 	if (get_free_serial(serial, num_ports, &minor) == NULL) {
1054 		dev_err(ddev, "No more free serial devices\n");
1055 		goto probe_error;
1056 	}
1057 	serial->minor = minor;
1058 
1059 	/* register all of the individual ports with the driver core */
1060 	for (i = 0; i < num_ports; ++i) {
1061 		port = serial->port[i];
1062 		dev_set_name(&port->dev, "ttyUSB%d", port->number);
1063 		dev_dbg(ddev, "registering %s", dev_name(&port->dev));
1064 		device_enable_async_suspend(&port->dev);
1065 
1066 		retval = device_add(&port->dev);
1067 		if (retval)
1068 			dev_err(ddev, "Error registering port device, continuing\n");
1069 	}
1070 
1071 	serial->disconnected = 0;
1072 
1073 	usb_serial_console_init(minor);
1074 exit:
1075 	module_put(type->driver.owner);
1076 	return 0;
1077 
1078 probe_error:
1079 	usb_serial_put(serial);
1080 	module_put(type->driver.owner);
1081 	return -EIO;
1082 }
1083 
1084 static void usb_serial_disconnect(struct usb_interface *interface)
1085 {
1086 	int i;
1087 	struct usb_serial *serial = usb_get_intfdata(interface);
1088 	struct device *dev = &interface->dev;
1089 	struct usb_serial_port *port;
1090 
1091 	usb_serial_console_disconnect(serial);
1092 
1093 	mutex_lock(&serial->disc_mutex);
1094 	/* must set a flag, to signal subdrivers */
1095 	serial->disconnected = 1;
1096 	mutex_unlock(&serial->disc_mutex);
1097 
1098 	for (i = 0; i < serial->num_ports; ++i) {
1099 		port = serial->port[i];
1100 		if (port) {
1101 			struct tty_struct *tty = tty_port_tty_get(&port->port);
1102 			if (tty) {
1103 				tty_vhangup(tty);
1104 				tty_kref_put(tty);
1105 			}
1106 			kill_traffic(port);
1107 			cancel_work_sync(&port->work);
1108 			if (device_is_registered(&port->dev))
1109 				device_del(&port->dev);
1110 		}
1111 	}
1112 	serial->type->disconnect(serial);
1113 
1114 	/* let the last holder of this object cause it to be cleaned up */
1115 	usb_serial_put(serial);
1116 	dev_info(dev, "device disconnected\n");
1117 }
1118 
1119 int usb_serial_suspend(struct usb_interface *intf, pm_message_t message)
1120 {
1121 	struct usb_serial *serial = usb_get_intfdata(intf);
1122 	struct usb_serial_port *port;
1123 	int i, r = 0;
1124 
1125 	serial->suspending = 1;
1126 
1127 	if (serial->type->suspend) {
1128 		r = serial->type->suspend(serial, message);
1129 		if (r < 0) {
1130 			serial->suspending = 0;
1131 			goto err_out;
1132 		}
1133 	}
1134 
1135 	for (i = 0; i < serial->num_ports; ++i) {
1136 		port = serial->port[i];
1137 		if (port)
1138 			kill_traffic(port);
1139 	}
1140 
1141 err_out:
1142 	return r;
1143 }
1144 EXPORT_SYMBOL(usb_serial_suspend);
1145 
1146 int usb_serial_resume(struct usb_interface *intf)
1147 {
1148 	struct usb_serial *serial = usb_get_intfdata(intf);
1149 	int rv;
1150 
1151 	serial->suspending = 0;
1152 	if (serial->type->resume)
1153 		rv = serial->type->resume(serial);
1154 	else
1155 		rv = usb_serial_generic_resume(serial);
1156 
1157 	return rv;
1158 }
1159 EXPORT_SYMBOL(usb_serial_resume);
1160 
1161 static int usb_serial_reset_resume(struct usb_interface *intf)
1162 {
1163 	struct usb_serial *serial = usb_get_intfdata(intf);
1164 	int rv;
1165 
1166 	serial->suspending = 0;
1167 	if (serial->type->reset_resume)
1168 		rv = serial->type->reset_resume(serial);
1169 	else {
1170 		rv = -EOPNOTSUPP;
1171 		intf->needs_binding = 1;
1172 	}
1173 
1174 	return rv;
1175 }
1176 
1177 static const struct tty_operations serial_ops = {
1178 	.open =			serial_open,
1179 	.close =		serial_close,
1180 	.write =		serial_write,
1181 	.hangup =		serial_hangup,
1182 	.write_room =		serial_write_room,
1183 	.ioctl =		serial_ioctl,
1184 	.set_termios =		serial_set_termios,
1185 	.throttle =		serial_throttle,
1186 	.unthrottle =		serial_unthrottle,
1187 	.break_ctl =		serial_break,
1188 	.chars_in_buffer =	serial_chars_in_buffer,
1189 	.tiocmget =		serial_tiocmget,
1190 	.tiocmset =		serial_tiocmset,
1191 	.get_icount =		serial_get_icount,
1192 	.cleanup =		serial_cleanup,
1193 	.install =		serial_install,
1194 	.proc_fops =		&serial_proc_fops,
1195 };
1196 
1197 
1198 struct tty_driver *usb_serial_tty_driver;
1199 
1200 /* Driver structure we register with the USB core */
1201 static struct usb_driver usb_serial_driver = {
1202 	.name =		"usbserial",
1203 	.probe =	usb_serial_probe,
1204 	.disconnect =	usb_serial_disconnect,
1205 	.suspend =	usb_serial_suspend,
1206 	.resume =	usb_serial_resume,
1207 	.no_dynamic_id =	1,
1208 	.supports_autosuspend =	1,
1209 };
1210 
1211 static int __init usb_serial_init(void)
1212 {
1213 	int i;
1214 	int result;
1215 
1216 	usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
1217 	if (!usb_serial_tty_driver)
1218 		return -ENOMEM;
1219 
1220 	/* Initialize our global data */
1221 	for (i = 0; i < SERIAL_TTY_MINORS; ++i)
1222 		serial_table[i] = NULL;
1223 
1224 	result = bus_register(&usb_serial_bus_type);
1225 	if (result) {
1226 		pr_err("%s - registering bus driver failed\n", __func__);
1227 		goto exit_bus;
1228 	}
1229 
1230 	usb_serial_tty_driver->driver_name = "usbserial";
1231 	usb_serial_tty_driver->name = "ttyUSB";
1232 	usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
1233 	usb_serial_tty_driver->minor_start = 0;
1234 	usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
1235 	usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
1236 	usb_serial_tty_driver->flags = TTY_DRIVER_REAL_RAW |
1237 						TTY_DRIVER_DYNAMIC_DEV;
1238 	usb_serial_tty_driver->init_termios = tty_std_termios;
1239 	usb_serial_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD
1240 							| HUPCL | CLOCAL;
1241 	usb_serial_tty_driver->init_termios.c_ispeed = 9600;
1242 	usb_serial_tty_driver->init_termios.c_ospeed = 9600;
1243 	tty_set_operations(usb_serial_tty_driver, &serial_ops);
1244 	result = tty_register_driver(usb_serial_tty_driver);
1245 	if (result) {
1246 		pr_err("%s - tty_register_driver failed\n", __func__);
1247 		goto exit_reg_driver;
1248 	}
1249 
1250 	/* register the USB driver */
1251 	result = usb_register(&usb_serial_driver);
1252 	if (result < 0) {
1253 		pr_err("%s - usb_register failed\n", __func__);
1254 		goto exit_tty;
1255 	}
1256 
1257 	/* register the generic driver, if we should */
1258 	result = usb_serial_generic_register();
1259 	if (result < 0) {
1260 		pr_err("%s - registering generic driver failed\n", __func__);
1261 		goto exit_generic;
1262 	}
1263 
1264 	return result;
1265 
1266 exit_generic:
1267 	usb_deregister(&usb_serial_driver);
1268 
1269 exit_tty:
1270 	tty_unregister_driver(usb_serial_tty_driver);
1271 
1272 exit_reg_driver:
1273 	bus_unregister(&usb_serial_bus_type);
1274 
1275 exit_bus:
1276 	pr_err("%s - returning with error %d\n", __func__, result);
1277 	put_tty_driver(usb_serial_tty_driver);
1278 	return result;
1279 }
1280 
1281 
1282 static void __exit usb_serial_exit(void)
1283 {
1284 	usb_serial_console_exit();
1285 
1286 	usb_serial_generic_deregister();
1287 
1288 	usb_deregister(&usb_serial_driver);
1289 	tty_unregister_driver(usb_serial_tty_driver);
1290 	put_tty_driver(usb_serial_tty_driver);
1291 	bus_unregister(&usb_serial_bus_type);
1292 }
1293 
1294 
1295 module_init(usb_serial_init);
1296 module_exit(usb_serial_exit);
1297 
1298 #define set_to_generic_if_null(type, function)				\
1299 	do {								\
1300 		if (!type->function) {					\
1301 			type->function = usb_serial_generic_##function;	\
1302 			pr_debug("Had to override the " #function	\
1303 				" usb serial operation with the generic one.");\
1304 			}						\
1305 	} while (0)
1306 
1307 static void fixup_generic(struct usb_serial_driver *device)
1308 {
1309 	set_to_generic_if_null(device, open);
1310 	set_to_generic_if_null(device, write);
1311 	set_to_generic_if_null(device, close);
1312 	set_to_generic_if_null(device, write_room);
1313 	set_to_generic_if_null(device, chars_in_buffer);
1314 	set_to_generic_if_null(device, read_bulk_callback);
1315 	set_to_generic_if_null(device, write_bulk_callback);
1316 	set_to_generic_if_null(device, disconnect);
1317 	set_to_generic_if_null(device, release);
1318 	set_to_generic_if_null(device, process_read_urb);
1319 	set_to_generic_if_null(device, prepare_write_buffer);
1320 }
1321 
1322 static int usb_serial_register(struct usb_serial_driver *driver)
1323 {
1324 	int retval;
1325 
1326 	if (usb_disabled())
1327 		return -ENODEV;
1328 
1329 	fixup_generic(driver);
1330 
1331 	if (!driver->description)
1332 		driver->description = driver->driver.name;
1333 	if (!driver->usb_driver) {
1334 		WARN(1, "Serial driver %s has no usb_driver\n",
1335 				driver->description);
1336 		return -EINVAL;
1337 	}
1338 
1339 	/* Add this device to our list of devices */
1340 	mutex_lock(&table_lock);
1341 	list_add(&driver->driver_list, &usb_serial_driver_list);
1342 
1343 	retval = usb_serial_bus_register(driver);
1344 	if (retval) {
1345 		pr_err("problem %d when registering driver %s\n", retval, driver->description);
1346 		list_del(&driver->driver_list);
1347 	} else
1348 		pr_info("USB Serial support registered for %s\n", driver->description);
1349 
1350 	mutex_unlock(&table_lock);
1351 	return retval;
1352 }
1353 
1354 static void usb_serial_deregister(struct usb_serial_driver *device)
1355 {
1356 	pr_info("USB Serial deregistering driver %s\n", device->description);
1357 	mutex_lock(&table_lock);
1358 	list_del(&device->driver_list);
1359 	usb_serial_bus_deregister(device);
1360 	mutex_unlock(&table_lock);
1361 }
1362 
1363 /**
1364  * usb_serial_register_drivers - register drivers for a usb-serial module
1365  * @serial_drivers: NULL-terminated array of pointers to drivers to be registered
1366  * @name: name of the usb_driver for this set of @serial_drivers
1367  * @id_table: list of all devices this @serial_drivers set binds to
1368  *
1369  * Registers all the drivers in the @serial_drivers array, and dynamically
1370  * creates a struct usb_driver with the name @name and id_table of @id_table.
1371  */
1372 int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[],
1373 				const char *name,
1374 				const struct usb_device_id *id_table)
1375 {
1376 	int rc;
1377 	struct usb_driver *udriver;
1378 	struct usb_serial_driver * const *sd;
1379 
1380 	/*
1381 	 * udriver must be registered before any of the serial drivers,
1382 	 * because the store_new_id() routine for the serial drivers (in
1383 	 * bus.c) probes udriver.
1384 	 *
1385 	 * Performance hack: We don't want udriver to be probed until
1386 	 * the serial drivers are registered, because the probe would
1387 	 * simply fail for lack of a matching serial driver.
1388 	 * So we leave udriver's id_table set to NULL until we are all set.
1389 	 *
1390 	 * Suspend/resume support is implemented in the usb-serial core,
1391 	 * so fill in the PM-related fields in udriver.
1392 	 */
1393 	udriver = kzalloc(sizeof(*udriver), GFP_KERNEL);
1394 	if (!udriver)
1395 		return -ENOMEM;
1396 
1397 	udriver->name = name;
1398 	udriver->no_dynamic_id = 1;
1399 	udriver->supports_autosuspend = 1;
1400 	udriver->suspend = usb_serial_suspend;
1401 	udriver->resume = usb_serial_resume;
1402 	udriver->probe = usb_serial_probe;
1403 	udriver->disconnect = usb_serial_disconnect;
1404 
1405 	/* we only set the reset_resume field if the serial_driver has one */
1406 	for (sd = serial_drivers; *sd; ++sd) {
1407 		if ((*sd)->reset_resume) {
1408 			udriver->reset_resume = usb_serial_reset_resume;
1409 			break;
1410 		}
1411 	}
1412 
1413 	rc = usb_register(udriver);
1414 	if (rc)
1415 		return rc;
1416 
1417 	for (sd = serial_drivers; *sd; ++sd) {
1418 		(*sd)->usb_driver = udriver;
1419 		rc = usb_serial_register(*sd);
1420 		if (rc)
1421 			goto failed;
1422 	}
1423 
1424 	/* Now set udriver's id_table and look for matches */
1425 	udriver->id_table = id_table;
1426 	rc = driver_attach(&udriver->drvwrap.driver);
1427 	return 0;
1428 
1429  failed:
1430 	while (sd-- > serial_drivers)
1431 		usb_serial_deregister(*sd);
1432 	usb_deregister(udriver);
1433 	return rc;
1434 }
1435 EXPORT_SYMBOL_GPL(usb_serial_register_drivers);
1436 
1437 /**
1438  * usb_serial_deregister_drivers - deregister drivers for a usb-serial module
1439  * @serial_drivers: NULL-terminated array of pointers to drivers to be deregistered
1440  *
1441  * Deregisters all the drivers in the @serial_drivers array and deregisters and
1442  * frees the struct usb_driver that was created by the call to
1443  * usb_serial_register_drivers().
1444  */
1445 void usb_serial_deregister_drivers(struct usb_serial_driver *const serial_drivers[])
1446 {
1447 	struct usb_driver *udriver = (*serial_drivers)->usb_driver;
1448 
1449 	for (; *serial_drivers; ++serial_drivers)
1450 		usb_serial_deregister(*serial_drivers);
1451 	usb_deregister(udriver);
1452 	kfree(udriver);
1453 }
1454 EXPORT_SYMBOL_GPL(usb_serial_deregister_drivers);
1455 
1456 /* Module information */
1457 MODULE_AUTHOR(DRIVER_AUTHOR);
1458 MODULE_DESCRIPTION(DRIVER_DESC);
1459 MODULE_LICENSE("GPL");
1460