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