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