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