1 /*
2  * cdc-acm.c
3  *
4  * Copyright (c) 1999 Armin Fuerst	<fuerst@in.tum.de>
5  * Copyright (c) 1999 Pavel Machek	<pavel@ucw.cz>
6  * Copyright (c) 1999 Johannes Erdfelt	<johannes@erdfelt.com>
7  * Copyright (c) 2000 Vojtech Pavlik	<vojtech@suse.cz>
8  * Copyright (c) 2004 Oliver Neukum	<oliver@neukum.name>
9  * Copyright (c) 2005 David Kubicek	<dave@awk.cz>
10  * Copyright (c) 2011 Johan Hovold	<jhovold@gmail.com>
11  *
12  * USB Abstract Control Model driver for USB modems and ISDN adapters
13  *
14  * Sponsored by SuSE
15  *
16  * This program is free software; you can redistribute it and/or modify
17  * it under the terms of the GNU General Public License as published by
18  * the Free Software Foundation; either version 2 of the License, or
19  * (at your option) any later version.
20  *
21  * This program is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24  * GNU General Public License for more details.
25  *
26  * You should have received a copy of the GNU General Public License
27  * along with this program; if not, write to the Free Software
28  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29  */
30 
31 #undef DEBUG
32 #undef VERBOSE_DEBUG
33 
34 #include <linux/kernel.h>
35 #include <linux/errno.h>
36 #include <linux/init.h>
37 #include <linux/slab.h>
38 #include <linux/tty.h>
39 #include <linux/serial.h>
40 #include <linux/tty_driver.h>
41 #include <linux/tty_flip.h>
42 #include <linux/module.h>
43 #include <linux/mutex.h>
44 #include <linux/uaccess.h>
45 #include <linux/usb.h>
46 #include <linux/usb/cdc.h>
47 #include <asm/byteorder.h>
48 #include <asm/unaligned.h>
49 #include <linux/list.h>
50 
51 #include "cdc-acm.h"
52 
53 
54 #define DRIVER_AUTHOR "Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik, David Kubicek, Johan Hovold"
55 #define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters"
56 
57 static struct usb_driver acm_driver;
58 static struct tty_driver *acm_tty_driver;
59 static struct acm *acm_table[ACM_TTY_MINORS];
60 
61 static DEFINE_MUTEX(acm_table_lock);
62 
63 /*
64  * acm_table accessors
65  */
66 
67 /*
68  * Look up an ACM structure by index. If found and not disconnected, increment
69  * its refcount and return it with its mutex held.
70  */
acm_get_by_index(unsigned index)71 static struct acm *acm_get_by_index(unsigned index)
72 {
73 	struct acm *acm;
74 
75 	mutex_lock(&acm_table_lock);
76 	acm = acm_table[index];
77 	if (acm) {
78 		mutex_lock(&acm->mutex);
79 		if (acm->disconnected) {
80 			mutex_unlock(&acm->mutex);
81 			acm = NULL;
82 		} else {
83 			tty_port_get(&acm->port);
84 			mutex_unlock(&acm->mutex);
85 		}
86 	}
87 	mutex_unlock(&acm_table_lock);
88 	return acm;
89 }
90 
91 /*
92  * Try to find an available minor number and if found, associate it with 'acm'.
93  */
acm_alloc_minor(struct acm * acm)94 static int acm_alloc_minor(struct acm *acm)
95 {
96 	int minor;
97 
98 	mutex_lock(&acm_table_lock);
99 	for (minor = 0; minor < ACM_TTY_MINORS; minor++) {
100 		if (!acm_table[minor]) {
101 			acm_table[minor] = acm;
102 			break;
103 		}
104 	}
105 	mutex_unlock(&acm_table_lock);
106 
107 	return minor;
108 }
109 
110 /* Release the minor number associated with 'acm'.  */
acm_release_minor(struct acm * acm)111 static void acm_release_minor(struct acm *acm)
112 {
113 	mutex_lock(&acm_table_lock);
114 	acm_table[acm->minor] = NULL;
115 	mutex_unlock(&acm_table_lock);
116 }
117 
118 /*
119  * Functions for ACM control messages.
120  */
121 
acm_ctrl_msg(struct acm * acm,int request,int value,void * buf,int len)122 static int acm_ctrl_msg(struct acm *acm, int request, int value,
123 							void *buf, int len)
124 {
125 	int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
126 		request, USB_RT_ACM, value,
127 		acm->control->altsetting[0].desc.bInterfaceNumber,
128 		buf, len, 5000);
129 	dev_dbg(&acm->control->dev,
130 			"%s - rq 0x%02x, val %#x, len %#x, result %d\n",
131 			__func__, request, value, len, retval);
132 	return retval < 0 ? retval : 0;
133 }
134 
135 /* devices aren't required to support these requests.
136  * the cdc acm descriptor tells whether they do...
137  */
138 #define acm_set_control(acm, control) \
139 	acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
140 #define acm_set_line(acm, line) \
141 	acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
142 #define acm_send_break(acm, ms) \
143 	acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
144 
145 /*
146  * Write buffer management.
147  * All of these assume proper locks taken by the caller.
148  */
149 
acm_wb_alloc(struct acm * acm)150 static int acm_wb_alloc(struct acm *acm)
151 {
152 	int i, wbn;
153 	struct acm_wb *wb;
154 
155 	wbn = 0;
156 	i = 0;
157 	for (;;) {
158 		wb = &acm->wb[wbn];
159 		if (!wb->use) {
160 			wb->use = 1;
161 			return wbn;
162 		}
163 		wbn = (wbn + 1) % ACM_NW;
164 		if (++i >= ACM_NW)
165 			return -1;
166 	}
167 }
168 
acm_wb_is_avail(struct acm * acm)169 static int acm_wb_is_avail(struct acm *acm)
170 {
171 	int i, n;
172 	unsigned long flags;
173 
174 	n = ACM_NW;
175 	spin_lock_irqsave(&acm->write_lock, flags);
176 	for (i = 0; i < ACM_NW; i++)
177 		n -= acm->wb[i].use;
178 	spin_unlock_irqrestore(&acm->write_lock, flags);
179 	return n;
180 }
181 
182 /*
183  * Finish write. Caller must hold acm->write_lock
184  */
acm_write_done(struct acm * acm,struct acm_wb * wb)185 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
186 {
187 	wb->use = 0;
188 	acm->transmitting--;
189 	usb_autopm_put_interface_async(acm->control);
190 }
191 
192 /*
193  * Poke write.
194  *
195  * the caller is responsible for locking
196  */
197 
acm_start_wb(struct acm * acm,struct acm_wb * wb)198 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
199 {
200 	int rc;
201 
202 	acm->transmitting++;
203 
204 	wb->urb->transfer_buffer = wb->buf;
205 	wb->urb->transfer_dma = wb->dmah;
206 	wb->urb->transfer_buffer_length = wb->len;
207 	wb->urb->dev = acm->dev;
208 
209 	rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
210 	if (rc < 0) {
211 		dev_err(&acm->data->dev,
212 			"%s - usb_submit_urb(write bulk) failed: %d\n",
213 			__func__, rc);
214 		acm_write_done(acm, wb);
215 	}
216 	return rc;
217 }
218 
acm_write_start(struct acm * acm,int wbn)219 static int acm_write_start(struct acm *acm, int wbn)
220 {
221 	unsigned long flags;
222 	struct acm_wb *wb = &acm->wb[wbn];
223 	int rc;
224 
225 	spin_lock_irqsave(&acm->write_lock, flags);
226 	if (!acm->dev) {
227 		wb->use = 0;
228 		spin_unlock_irqrestore(&acm->write_lock, flags);
229 		return -ENODEV;
230 	}
231 
232 	dev_vdbg(&acm->data->dev, "%s - susp_count %d\n", __func__,
233 							acm->susp_count);
234 	usb_autopm_get_interface_async(acm->control);
235 	if (acm->susp_count) {
236 		if (!acm->delayed_wb)
237 			acm->delayed_wb = wb;
238 		else
239 			usb_autopm_put_interface_async(acm->control);
240 		spin_unlock_irqrestore(&acm->write_lock, flags);
241 		return 0;	/* A white lie */
242 	}
243 	usb_mark_last_busy(acm->dev);
244 
245 	rc = acm_start_wb(acm, wb);
246 	spin_unlock_irqrestore(&acm->write_lock, flags);
247 
248 	return rc;
249 
250 }
251 /*
252  * attributes exported through sysfs
253  */
show_caps(struct device * dev,struct device_attribute * attr,char * buf)254 static ssize_t show_caps
255 (struct device *dev, struct device_attribute *attr, char *buf)
256 {
257 	struct usb_interface *intf = to_usb_interface(dev);
258 	struct acm *acm = usb_get_intfdata(intf);
259 
260 	return sprintf(buf, "%d", acm->ctrl_caps);
261 }
262 static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
263 
show_country_codes(struct device * dev,struct device_attribute * attr,char * buf)264 static ssize_t show_country_codes
265 (struct device *dev, struct device_attribute *attr, char *buf)
266 {
267 	struct usb_interface *intf = to_usb_interface(dev);
268 	struct acm *acm = usb_get_intfdata(intf);
269 
270 	memcpy(buf, acm->country_codes, acm->country_code_size);
271 	return acm->country_code_size;
272 }
273 
274 static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
275 
show_country_rel_date(struct device * dev,struct device_attribute * attr,char * buf)276 static ssize_t show_country_rel_date
277 (struct device *dev, struct device_attribute *attr, char *buf)
278 {
279 	struct usb_interface *intf = to_usb_interface(dev);
280 	struct acm *acm = usb_get_intfdata(intf);
281 
282 	return sprintf(buf, "%d", acm->country_rel_date);
283 }
284 
285 static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
286 /*
287  * Interrupt handlers for various ACM device responses
288  */
289 
290 /* control interface reports status changes with "interrupt" transfers */
acm_ctrl_irq(struct urb * urb)291 static void acm_ctrl_irq(struct urb *urb)
292 {
293 	struct acm *acm = urb->context;
294 	struct usb_cdc_notification *dr = urb->transfer_buffer;
295 	struct tty_struct *tty;
296 	unsigned char *data;
297 	int newctrl;
298 	int retval;
299 	int status = urb->status;
300 
301 	switch (status) {
302 	case 0:
303 		/* success */
304 		break;
305 	case -ECONNRESET:
306 	case -ENOENT:
307 	case -ESHUTDOWN:
308 		/* this urb is terminated, clean up */
309 		dev_dbg(&acm->control->dev,
310 				"%s - urb shutting down with status: %d\n",
311 				__func__, status);
312 		return;
313 	default:
314 		dev_dbg(&acm->control->dev,
315 				"%s - nonzero urb status received: %d\n",
316 				__func__, status);
317 		goto exit;
318 	}
319 
320 	usb_mark_last_busy(acm->dev);
321 
322 	data = (unsigned char *)(dr + 1);
323 	switch (dr->bNotificationType) {
324 	case USB_CDC_NOTIFY_NETWORK_CONNECTION:
325 		dev_dbg(&acm->control->dev, "%s - network connection: %d\n",
326 							__func__, dr->wValue);
327 		break;
328 
329 	case USB_CDC_NOTIFY_SERIAL_STATE:
330 		tty = tty_port_tty_get(&acm->port);
331 		newctrl = get_unaligned_le16(data);
332 
333 		if (tty) {
334 			if (!acm->clocal &&
335 				(acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
336 				dev_dbg(&acm->control->dev,
337 					"%s - calling hangup\n", __func__);
338 				tty_hangup(tty);
339 			}
340 			tty_kref_put(tty);
341 		}
342 
343 		acm->ctrlin = newctrl;
344 
345 		dev_dbg(&acm->control->dev,
346 			"%s - input control lines: dcd%c dsr%c break%c "
347 			"ring%c framing%c parity%c overrun%c\n",
348 			__func__,
349 			acm->ctrlin & ACM_CTRL_DCD ? '+' : '-',
350 			acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',
351 			acm->ctrlin & ACM_CTRL_BRK ? '+' : '-',
352 			acm->ctrlin & ACM_CTRL_RI  ? '+' : '-',
353 			acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-',
354 			acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',
355 			acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');
356 			break;
357 
358 	default:
359 		dev_dbg(&acm->control->dev,
360 			"%s - unknown notification %d received: index %d "
361 			"len %d data0 %d data1 %d\n",
362 			__func__,
363 			dr->bNotificationType, dr->wIndex,
364 			dr->wLength, data[0], data[1]);
365 		break;
366 	}
367 exit:
368 	retval = usb_submit_urb(urb, GFP_ATOMIC);
369 	if (retval)
370 		dev_err(&acm->control->dev, "%s - usb_submit_urb failed: %d\n",
371 							__func__, retval);
372 }
373 
acm_submit_read_urb(struct acm * acm,int index,gfp_t mem_flags)374 static int acm_submit_read_urb(struct acm *acm, int index, gfp_t mem_flags)
375 {
376 	int res;
377 
378 	if (!test_and_clear_bit(index, &acm->read_urbs_free))
379 		return 0;
380 
381 	dev_vdbg(&acm->data->dev, "%s - urb %d\n", __func__, index);
382 
383 	res = usb_submit_urb(acm->read_urbs[index], mem_flags);
384 	if (res) {
385 		if (res != -EPERM) {
386 			dev_err(&acm->data->dev,
387 					"%s - usb_submit_urb failed: %d\n",
388 					__func__, res);
389 		}
390 		set_bit(index, &acm->read_urbs_free);
391 		return res;
392 	}
393 
394 	return 0;
395 }
396 
acm_submit_read_urbs(struct acm * acm,gfp_t mem_flags)397 static int acm_submit_read_urbs(struct acm *acm, gfp_t mem_flags)
398 {
399 	int res;
400 	int i;
401 
402 	for (i = 0; i < acm->rx_buflimit; ++i) {
403 		res = acm_submit_read_urb(acm, i, mem_flags);
404 		if (res)
405 			return res;
406 	}
407 
408 	return 0;
409 }
410 
acm_process_read_urb(struct acm * acm,struct urb * urb)411 static void acm_process_read_urb(struct acm *acm, struct urb *urb)
412 {
413 	struct tty_struct *tty;
414 
415 	if (!urb->actual_length)
416 		return;
417 
418 	tty = tty_port_tty_get(&acm->port);
419 	if (!tty)
420 		return;
421 
422 	tty_insert_flip_string(tty, urb->transfer_buffer, urb->actual_length);
423 	tty_flip_buffer_push(tty);
424 
425 	tty_kref_put(tty);
426 }
427 
acm_read_bulk_callback(struct urb * urb)428 static void acm_read_bulk_callback(struct urb *urb)
429 {
430 	struct acm_rb *rb = urb->context;
431 	struct acm *acm = rb->instance;
432 	unsigned long flags;
433 
434 	dev_vdbg(&acm->data->dev, "%s - urb %d, len %d\n", __func__,
435 					rb->index, urb->actual_length);
436 	set_bit(rb->index, &acm->read_urbs_free);
437 
438 	if (!acm->dev) {
439 		dev_dbg(&acm->data->dev, "%s - disconnected\n", __func__);
440 		return;
441 	}
442 	usb_mark_last_busy(acm->dev);
443 
444 	if (urb->status) {
445 		dev_dbg(&acm->data->dev, "%s - non-zero urb status: %d\n",
446 							__func__, urb->status);
447 		return;
448 	}
449 	acm_process_read_urb(acm, urb);
450 
451 	/* throttle device if requested by tty */
452 	spin_lock_irqsave(&acm->read_lock, flags);
453 	acm->throttled = acm->throttle_req;
454 	if (!acm->throttled && !acm->susp_count) {
455 		spin_unlock_irqrestore(&acm->read_lock, flags);
456 		acm_submit_read_urb(acm, rb->index, GFP_ATOMIC);
457 	} else {
458 		spin_unlock_irqrestore(&acm->read_lock, flags);
459 	}
460 }
461 
462 /* data interface wrote those outgoing bytes */
acm_write_bulk(struct urb * urb)463 static void acm_write_bulk(struct urb *urb)
464 {
465 	struct acm_wb *wb = urb->context;
466 	struct acm *acm = wb->instance;
467 	unsigned long flags;
468 
469 	if (urb->status	|| (urb->actual_length != urb->transfer_buffer_length))
470 		dev_vdbg(&acm->data->dev, "%s - len %d/%d, status %d\n",
471 			__func__,
472 			urb->actual_length,
473 			urb->transfer_buffer_length,
474 			urb->status);
475 
476 	spin_lock_irqsave(&acm->write_lock, flags);
477 	acm_write_done(acm, wb);
478 	spin_unlock_irqrestore(&acm->write_lock, flags);
479 	schedule_work(&acm->work);
480 }
481 
acm_softint(struct work_struct * work)482 static void acm_softint(struct work_struct *work)
483 {
484 	struct acm *acm = container_of(work, struct acm, work);
485 	struct tty_struct *tty;
486 
487 	dev_vdbg(&acm->data->dev, "%s\n", __func__);
488 
489 	tty = tty_port_tty_get(&acm->port);
490 	if (!tty)
491 		return;
492 	tty_wakeup(tty);
493 	tty_kref_put(tty);
494 }
495 
496 /*
497  * TTY handlers
498  */
499 
acm_tty_install(struct tty_driver * driver,struct tty_struct * tty)500 static int acm_tty_install(struct tty_driver *driver, struct tty_struct *tty)
501 {
502 	struct acm *acm;
503 	int retval;
504 
505 	dev_dbg(tty->dev, "%s\n", __func__);
506 
507 	acm = acm_get_by_index(tty->index);
508 	if (!acm)
509 		return -ENODEV;
510 
511 	retval = tty_init_termios(tty);
512 	if (retval)
513 		goto error_init_termios;
514 
515 	tty->driver_data = acm;
516 
517 	/* Final install (we use the default method) */
518 	tty_driver_kref_get(driver);
519 	tty->count++;
520 	driver->ttys[tty->index] = tty;
521 
522 	return 0;
523 
524 error_init_termios:
525 	tty_port_put(&acm->port);
526 	return retval;
527 }
528 
acm_tty_open(struct tty_struct * tty,struct file * filp)529 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
530 {
531 	struct acm *acm = tty->driver_data;
532 
533 	dev_dbg(tty->dev, "%s\n", __func__);
534 
535 	return tty_port_open(&acm->port, tty, filp);
536 }
537 
acm_port_activate(struct tty_port * port,struct tty_struct * tty)538 static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
539 {
540 	struct acm *acm = container_of(port, struct acm, port);
541 	int retval = -ENODEV;
542 
543 	dev_dbg(&acm->control->dev, "%s\n", __func__);
544 
545 	mutex_lock(&acm->mutex);
546 	if (acm->disconnected)
547 		goto disconnected;
548 
549 	retval = usb_autopm_get_interface(acm->control);
550 	if (retval)
551 		goto error_get_interface;
552 
553 	/*
554 	 * FIXME: Why do we need this? Allocating 64K of physically contiguous
555 	 * memory is really nasty...
556 	 */
557 	set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
558 	acm->control->needs_remote_wakeup = 1;
559 
560 	acm->ctrlurb->dev = acm->dev;
561 	if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
562 		dev_err(&acm->control->dev,
563 			"%s - usb_submit_urb(ctrl irq) failed\n", __func__);
564 		goto error_submit_urb;
565 	}
566 
567 	acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS;
568 	if (acm_set_control(acm, acm->ctrlout) < 0 &&
569 	    (acm->ctrl_caps & USB_CDC_CAP_LINE))
570 		goto error_set_control;
571 
572 	usb_autopm_put_interface(acm->control);
573 
574 	if (acm_submit_read_urbs(acm, GFP_KERNEL))
575 		goto error_submit_read_urbs;
576 
577 	mutex_unlock(&acm->mutex);
578 
579 	return 0;
580 
581 error_submit_read_urbs:
582 	acm->ctrlout = 0;
583 	acm_set_control(acm, acm->ctrlout);
584 error_set_control:
585 	usb_kill_urb(acm->ctrlurb);
586 error_submit_urb:
587 	usb_autopm_put_interface(acm->control);
588 error_get_interface:
589 disconnected:
590 	mutex_unlock(&acm->mutex);
591 	return retval;
592 }
593 
acm_port_destruct(struct tty_port * port)594 static void acm_port_destruct(struct tty_port *port)
595 {
596 	struct acm *acm = container_of(port, struct acm, port);
597 
598 	dev_dbg(&acm->control->dev, "%s\n", __func__);
599 
600 	tty_unregister_device(acm_tty_driver, acm->minor);
601 	acm_release_minor(acm);
602 	usb_put_intf(acm->control);
603 	kfree(acm->country_codes);
604 	kfree(acm);
605 }
606 
acm_port_shutdown(struct tty_port * port)607 static void acm_port_shutdown(struct tty_port *port)
608 {
609 	struct acm *acm = container_of(port, struct acm, port);
610 	int i;
611 
612 	dev_dbg(&acm->control->dev, "%s\n", __func__);
613 
614 	mutex_lock(&acm->mutex);
615 	if (!acm->disconnected) {
616 		usb_autopm_get_interface(acm->control);
617 		acm_set_control(acm, acm->ctrlout = 0);
618 		usb_kill_urb(acm->ctrlurb);
619 		for (i = 0; i < ACM_NW; i++)
620 			usb_kill_urb(acm->wb[i].urb);
621 		for (i = 0; i < acm->rx_buflimit; i++)
622 			usb_kill_urb(acm->read_urbs[i]);
623 		acm->control->needs_remote_wakeup = 0;
624 		usb_autopm_put_interface(acm->control);
625 	}
626 	mutex_unlock(&acm->mutex);
627 }
628 
acm_tty_cleanup(struct tty_struct * tty)629 static void acm_tty_cleanup(struct tty_struct *tty)
630 {
631 	struct acm *acm = tty->driver_data;
632 	dev_dbg(&acm->control->dev, "%s\n", __func__);
633 	tty_port_put(&acm->port);
634 }
635 
acm_tty_hangup(struct tty_struct * tty)636 static void acm_tty_hangup(struct tty_struct *tty)
637 {
638 	struct acm *acm = tty->driver_data;
639 	dev_dbg(&acm->control->dev, "%s\n", __func__);
640 	tty_port_hangup(&acm->port);
641 }
642 
acm_tty_close(struct tty_struct * tty,struct file * filp)643 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
644 {
645 	struct acm *acm = tty->driver_data;
646 	dev_dbg(&acm->control->dev, "%s\n", __func__);
647 	tty_port_close(&acm->port, tty, filp);
648 }
649 
acm_tty_write(struct tty_struct * tty,const unsigned char * buf,int count)650 static int acm_tty_write(struct tty_struct *tty,
651 					const unsigned char *buf, int count)
652 {
653 	struct acm *acm = tty->driver_data;
654 	int stat;
655 	unsigned long flags;
656 	int wbn;
657 	struct acm_wb *wb;
658 
659 	if (!count)
660 		return 0;
661 
662 	dev_vdbg(&acm->data->dev, "%s - count %d\n", __func__, count);
663 
664 	spin_lock_irqsave(&acm->write_lock, flags);
665 	wbn = acm_wb_alloc(acm);
666 	if (wbn < 0) {
667 		spin_unlock_irqrestore(&acm->write_lock, flags);
668 		return 0;
669 	}
670 	wb = &acm->wb[wbn];
671 
672 	count = (count > acm->writesize) ? acm->writesize : count;
673 	dev_vdbg(&acm->data->dev, "%s - write %d\n", __func__, count);
674 	memcpy(wb->buf, buf, count);
675 	wb->len = count;
676 	spin_unlock_irqrestore(&acm->write_lock, flags);
677 
678 	stat = acm_write_start(acm, wbn);
679 	if (stat < 0)
680 		return stat;
681 	return count;
682 }
683 
acm_tty_write_room(struct tty_struct * tty)684 static int acm_tty_write_room(struct tty_struct *tty)
685 {
686 	struct acm *acm = tty->driver_data;
687 	/*
688 	 * Do not let the line discipline to know that we have a reserve,
689 	 * or it might get too enthusiastic.
690 	 */
691 	return acm_wb_is_avail(acm) ? acm->writesize : 0;
692 }
693 
acm_tty_chars_in_buffer(struct tty_struct * tty)694 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
695 {
696 	struct acm *acm = tty->driver_data;
697 	/*
698 	 * if the device was unplugged then any remaining characters fell out
699 	 * of the connector ;)
700 	 */
701 	if (acm->disconnected)
702 		return 0;
703 	/*
704 	 * This is inaccurate (overcounts), but it works.
705 	 */
706 	return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
707 }
708 
acm_tty_throttle(struct tty_struct * tty)709 static void acm_tty_throttle(struct tty_struct *tty)
710 {
711 	struct acm *acm = tty->driver_data;
712 
713 	spin_lock_irq(&acm->read_lock);
714 	acm->throttle_req = 1;
715 	spin_unlock_irq(&acm->read_lock);
716 }
717 
acm_tty_unthrottle(struct tty_struct * tty)718 static void acm_tty_unthrottle(struct tty_struct *tty)
719 {
720 	struct acm *acm = tty->driver_data;
721 	unsigned int was_throttled;
722 
723 	spin_lock_irq(&acm->read_lock);
724 	was_throttled = acm->throttled;
725 	acm->throttled = 0;
726 	acm->throttle_req = 0;
727 	spin_unlock_irq(&acm->read_lock);
728 
729 	if (was_throttled)
730 		acm_submit_read_urbs(acm, GFP_KERNEL);
731 }
732 
acm_tty_break_ctl(struct tty_struct * tty,int state)733 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
734 {
735 	struct acm *acm = tty->driver_data;
736 	int retval;
737 
738 	retval = acm_send_break(acm, state ? 0xffff : 0);
739 	if (retval < 0)
740 		dev_dbg(&acm->control->dev, "%s - send break failed\n",
741 								__func__);
742 	return retval;
743 }
744 
acm_tty_tiocmget(struct tty_struct * tty)745 static int acm_tty_tiocmget(struct tty_struct *tty)
746 {
747 	struct acm *acm = tty->driver_data;
748 
749 	return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
750 	       (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
751 	       (acm->ctrlin  & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
752 	       (acm->ctrlin  & ACM_CTRL_RI  ? TIOCM_RI  : 0) |
753 	       (acm->ctrlin  & ACM_CTRL_DCD ? TIOCM_CD  : 0) |
754 	       TIOCM_CTS;
755 }
756 
acm_tty_tiocmset(struct tty_struct * tty,unsigned int set,unsigned int clear)757 static int acm_tty_tiocmset(struct tty_struct *tty,
758 			    unsigned int set, unsigned int clear)
759 {
760 	struct acm *acm = tty->driver_data;
761 	unsigned int newctrl;
762 
763 	newctrl = acm->ctrlout;
764 	set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
765 					(set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
766 	clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
767 					(clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
768 
769 	newctrl = (newctrl & ~clear) | set;
770 
771 	if (acm->ctrlout == newctrl)
772 		return 0;
773 	return acm_set_control(acm, acm->ctrlout = newctrl);
774 }
775 
acm_tty_ioctl(struct tty_struct * tty,unsigned int cmd,unsigned long arg)776 static int acm_tty_ioctl(struct tty_struct *tty,
777 					unsigned int cmd, unsigned long arg)
778 {
779 	return -ENOIOCTLCMD;
780 }
781 
782 static const __u32 acm_tty_speed[] = {
783 	0, 50, 75, 110, 134, 150, 200, 300, 600,
784 	1200, 1800, 2400, 4800, 9600, 19200, 38400,
785 	57600, 115200, 230400, 460800, 500000, 576000,
786 	921600, 1000000, 1152000, 1500000, 2000000,
787 	2500000, 3000000, 3500000, 4000000
788 };
789 
790 static const __u8 acm_tty_size[] = {
791 	5, 6, 7, 8
792 };
793 
acm_tty_set_termios(struct tty_struct * tty,struct ktermios * termios_old)794 static void acm_tty_set_termios(struct tty_struct *tty,
795 						struct ktermios *termios_old)
796 {
797 	struct acm *acm = tty->driver_data;
798 	struct ktermios *termios = tty->termios;
799 	struct usb_cdc_line_coding newline;
800 	int newctrl = acm->ctrlout;
801 
802 	newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
803 	newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
804 	newline.bParityType = termios->c_cflag & PARENB ?
805 				(termios->c_cflag & PARODD ? 1 : 2) +
806 				(termios->c_cflag & CMSPAR ? 2 : 0) : 0;
807 	newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
808 	/* FIXME: Needs to clear unsupported bits in the termios */
809 	acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
810 
811 	if (!newline.dwDTERate) {
812 		newline.dwDTERate = acm->line.dwDTERate;
813 		newctrl &= ~ACM_CTRL_DTR;
814 	} else
815 		newctrl |=  ACM_CTRL_DTR;
816 
817 	if (newctrl != acm->ctrlout)
818 		acm_set_control(acm, acm->ctrlout = newctrl);
819 
820 	if (memcmp(&acm->line, &newline, sizeof newline)) {
821 		memcpy(&acm->line, &newline, sizeof newline);
822 		dev_dbg(&acm->control->dev, "%s - set line: %d %d %d %d\n",
823 			__func__,
824 			le32_to_cpu(newline.dwDTERate),
825 			newline.bCharFormat, newline.bParityType,
826 			newline.bDataBits);
827 		acm_set_line(acm, &acm->line);
828 	}
829 }
830 
831 static const struct tty_port_operations acm_port_ops = {
832 	.shutdown = acm_port_shutdown,
833 	.activate = acm_port_activate,
834 	.destruct = acm_port_destruct,
835 };
836 
837 /*
838  * USB probe and disconnect routines.
839  */
840 
841 /* Little helpers: write/read buffers free */
acm_write_buffers_free(struct acm * acm)842 static void acm_write_buffers_free(struct acm *acm)
843 {
844 	int i;
845 	struct acm_wb *wb;
846 	struct usb_device *usb_dev = interface_to_usbdev(acm->control);
847 
848 	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
849 		usb_free_coherent(usb_dev, acm->writesize, wb->buf, wb->dmah);
850 }
851 
acm_read_buffers_free(struct acm * acm)852 static void acm_read_buffers_free(struct acm *acm)
853 {
854 	struct usb_device *usb_dev = interface_to_usbdev(acm->control);
855 	int i;
856 
857 	for (i = 0; i < acm->rx_buflimit; i++)
858 		usb_free_coherent(usb_dev, acm->readsize,
859 			  acm->read_buffers[i].base, acm->read_buffers[i].dma);
860 }
861 
862 /* Little helper: write buffers allocate */
acm_write_buffers_alloc(struct acm * acm)863 static int acm_write_buffers_alloc(struct acm *acm)
864 {
865 	int i;
866 	struct acm_wb *wb;
867 
868 	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
869 		wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
870 		    &wb->dmah);
871 		if (!wb->buf) {
872 			while (i != 0) {
873 				--i;
874 				--wb;
875 				usb_free_coherent(acm->dev, acm->writesize,
876 				    wb->buf, wb->dmah);
877 			}
878 			return -ENOMEM;
879 		}
880 	}
881 	return 0;
882 }
883 
acm_probe(struct usb_interface * intf,const struct usb_device_id * id)884 static int acm_probe(struct usb_interface *intf,
885 		     const struct usb_device_id *id)
886 {
887 	struct usb_cdc_union_desc *union_header = NULL;
888 	struct usb_cdc_country_functional_desc *cfd = NULL;
889 	unsigned char *buffer = intf->altsetting->extra;
890 	int buflen = intf->altsetting->extralen;
891 	struct usb_interface *control_interface;
892 	struct usb_interface *data_interface;
893 	struct usb_endpoint_descriptor *epctrl = NULL;
894 	struct usb_endpoint_descriptor *epread = NULL;
895 	struct usb_endpoint_descriptor *epwrite = NULL;
896 	struct usb_device *usb_dev = interface_to_usbdev(intf);
897 	struct acm *acm;
898 	int minor;
899 	int ctrlsize, readsize;
900 	u8 *buf;
901 	u8 ac_management_function = 0;
902 	u8 call_management_function = 0;
903 	int call_interface_num = -1;
904 	int data_interface_num = -1;
905 	unsigned long quirks;
906 	int num_rx_buf;
907 	int i;
908 	int combined_interfaces = 0;
909 
910 	/* normal quirks */
911 	quirks = (unsigned long)id->driver_info;
912 	num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
913 
914 	/* handle quirks deadly to normal probing*/
915 	if (quirks == NO_UNION_NORMAL) {
916 		data_interface = usb_ifnum_to_if(usb_dev, 1);
917 		control_interface = usb_ifnum_to_if(usb_dev, 0);
918 		goto skip_normal_probe;
919 	}
920 
921 	/* normal probing*/
922 	if (!buffer) {
923 		dev_err(&intf->dev, "Weird descriptor references\n");
924 		return -EINVAL;
925 	}
926 
927 	if (!buflen) {
928 		if (intf->cur_altsetting->endpoint &&
929 				intf->cur_altsetting->endpoint->extralen &&
930 				intf->cur_altsetting->endpoint->extra) {
931 			dev_dbg(&intf->dev,
932 				"Seeking extra descriptors on endpoint\n");
933 			buflen = intf->cur_altsetting->endpoint->extralen;
934 			buffer = intf->cur_altsetting->endpoint->extra;
935 		} else {
936 			dev_err(&intf->dev,
937 				"Zero length descriptor references\n");
938 			return -EINVAL;
939 		}
940 	}
941 
942 	while (buflen > 0) {
943 		if (buffer[1] != USB_DT_CS_INTERFACE) {
944 			dev_err(&intf->dev, "skipping garbage\n");
945 			goto next_desc;
946 		}
947 
948 		switch (buffer[2]) {
949 		case USB_CDC_UNION_TYPE: /* we've found it */
950 			if (union_header) {
951 				dev_err(&intf->dev, "More than one "
952 					"union descriptor, skipping ...\n");
953 				goto next_desc;
954 			}
955 			union_header = (struct usb_cdc_union_desc *)buffer;
956 			break;
957 		case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
958 			cfd = (struct usb_cdc_country_functional_desc *)buffer;
959 			break;
960 		case USB_CDC_HEADER_TYPE: /* maybe check version */
961 			break; /* for now we ignore it */
962 		case USB_CDC_ACM_TYPE:
963 			ac_management_function = buffer[3];
964 			break;
965 		case USB_CDC_CALL_MANAGEMENT_TYPE:
966 			call_management_function = buffer[3];
967 			call_interface_num = buffer[4];
968 			if ( (quirks & NOT_A_MODEM) == 0 && (call_management_function & 3) != 3)
969 				dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n");
970 			break;
971 		default:
972 			/* there are LOTS more CDC descriptors that
973 			 * could legitimately be found here.
974 			 */
975 			dev_dbg(&intf->dev, "Ignoring descriptor: "
976 					"type %02x, length %d\n",
977 					buffer[2], buffer[0]);
978 			break;
979 		}
980 next_desc:
981 		buflen -= buffer[0];
982 		buffer += buffer[0];
983 	}
984 
985 	if (!union_header) {
986 		if (call_interface_num > 0) {
987 			dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
988 			/* quirks for Droids MuIn LCD */
989 			if (quirks & NO_DATA_INTERFACE)
990 				data_interface = usb_ifnum_to_if(usb_dev, 0);
991 			else
992 				data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
993 			control_interface = intf;
994 		} else {
995 			if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
996 				dev_dbg(&intf->dev,"No union descriptor, giving up\n");
997 				return -ENODEV;
998 			} else {
999 				dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
1000 				combined_interfaces = 1;
1001 				control_interface = data_interface = intf;
1002 				goto look_for_collapsed_interface;
1003 			}
1004 		}
1005 	} else {
1006 		control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1007 		data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
1008 		if (!control_interface || !data_interface) {
1009 			dev_dbg(&intf->dev, "no interfaces\n");
1010 			return -ENODEV;
1011 		}
1012 	}
1013 
1014 	if (data_interface_num != call_interface_num)
1015 		dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1016 
1017 	if (control_interface == data_interface) {
1018 		/* some broken devices designed for windows work this way */
1019 		dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1020 		combined_interfaces = 1;
1021 		/* a popular other OS doesn't use it */
1022 		quirks |= NO_CAP_LINE;
1023 		if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1024 			dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1025 			return -EINVAL;
1026 		}
1027 look_for_collapsed_interface:
1028 		for (i = 0; i < 3; i++) {
1029 			struct usb_endpoint_descriptor *ep;
1030 			ep = &data_interface->cur_altsetting->endpoint[i].desc;
1031 
1032 			if (usb_endpoint_is_int_in(ep))
1033 				epctrl = ep;
1034 			else if (usb_endpoint_is_bulk_out(ep))
1035 				epwrite = ep;
1036 			else if (usb_endpoint_is_bulk_in(ep))
1037 				epread = ep;
1038 			else
1039 				return -EINVAL;
1040 		}
1041 		if (!epctrl || !epread || !epwrite)
1042 			return -ENODEV;
1043 		else
1044 			goto made_compressed_probe;
1045 	}
1046 
1047 skip_normal_probe:
1048 
1049 	/*workaround for switched interfaces */
1050 	if (data_interface->cur_altsetting->desc.bInterfaceClass
1051 						!= CDC_DATA_INTERFACE_TYPE) {
1052 		if (control_interface->cur_altsetting->desc.bInterfaceClass
1053 						== CDC_DATA_INTERFACE_TYPE) {
1054 			struct usb_interface *t;
1055 			dev_dbg(&intf->dev,
1056 				"Your device has switched interfaces.\n");
1057 			t = control_interface;
1058 			control_interface = data_interface;
1059 			data_interface = t;
1060 		} else {
1061 			return -EINVAL;
1062 		}
1063 	}
1064 
1065 	/* Accept probe requests only for the control interface */
1066 	if (!combined_interfaces && intf != control_interface)
1067 		return -ENODEV;
1068 
1069 	if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1070 		/* valid in this context */
1071 		dev_dbg(&intf->dev, "The data interface isn't available\n");
1072 		return -EBUSY;
1073 	}
1074 
1075 
1076 	if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
1077 		return -EINVAL;
1078 
1079 	epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1080 	epread = &data_interface->cur_altsetting->endpoint[0].desc;
1081 	epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1082 
1083 
1084 	/* workaround for switched endpoints */
1085 	if (!usb_endpoint_dir_in(epread)) {
1086 		/* descriptors are swapped */
1087 		struct usb_endpoint_descriptor *t;
1088 		dev_dbg(&intf->dev,
1089 			"The data interface has switched endpoints\n");
1090 		t = epread;
1091 		epread = epwrite;
1092 		epwrite = t;
1093 	}
1094 made_compressed_probe:
1095 	dev_dbg(&intf->dev, "interfaces are valid\n");
1096 
1097 	acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1098 	if (acm == NULL) {
1099 		dev_err(&intf->dev, "out of memory (acm kzalloc)\n");
1100 		goto alloc_fail;
1101 	}
1102 
1103 	minor = acm_alloc_minor(acm);
1104 	if (minor == ACM_TTY_MINORS) {
1105 		dev_err(&intf->dev, "no more free acm devices\n");
1106 		kfree(acm);
1107 		return -ENODEV;
1108 	}
1109 
1110 	ctrlsize = usb_endpoint_maxp(epctrl);
1111 	readsize = usb_endpoint_maxp(epread) *
1112 				(quirks == SINGLE_RX_URB ? 1 : 2);
1113 	acm->combined_interfaces = combined_interfaces;
1114 	acm->writesize = usb_endpoint_maxp(epwrite) * 20;
1115 	acm->control = control_interface;
1116 	acm->data = data_interface;
1117 	acm->minor = minor;
1118 	acm->dev = usb_dev;
1119 	acm->ctrl_caps = ac_management_function;
1120 	if (quirks & NO_CAP_LINE)
1121 		acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1122 	acm->ctrlsize = ctrlsize;
1123 	acm->readsize = readsize;
1124 	acm->rx_buflimit = num_rx_buf;
1125 	INIT_WORK(&acm->work, acm_softint);
1126 	spin_lock_init(&acm->write_lock);
1127 	spin_lock_init(&acm->read_lock);
1128 	mutex_init(&acm->mutex);
1129 	acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1130 	acm->is_int_ep = usb_endpoint_xfer_int(epread);
1131 	if (acm->is_int_ep)
1132 		acm->bInterval = epread->bInterval;
1133 	tty_port_init(&acm->port);
1134 	acm->port.ops = &acm_port_ops;
1135 
1136 	buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1137 	if (!buf) {
1138 		dev_err(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1139 		goto alloc_fail2;
1140 	}
1141 	acm->ctrl_buffer = buf;
1142 
1143 	if (acm_write_buffers_alloc(acm) < 0) {
1144 		dev_err(&intf->dev, "out of memory (write buffer alloc)\n");
1145 		goto alloc_fail4;
1146 	}
1147 
1148 	acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1149 	if (!acm->ctrlurb) {
1150 		dev_err(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1151 		goto alloc_fail5;
1152 	}
1153 	for (i = 0; i < num_rx_buf; i++) {
1154 		struct acm_rb *rb = &(acm->read_buffers[i]);
1155 		struct urb *urb;
1156 
1157 		rb->base = usb_alloc_coherent(acm->dev, readsize, GFP_KERNEL,
1158 								&rb->dma);
1159 		if (!rb->base) {
1160 			dev_err(&intf->dev, "out of memory "
1161 					"(read bufs usb_alloc_coherent)\n");
1162 			goto alloc_fail6;
1163 		}
1164 		rb->index = i;
1165 		rb->instance = acm;
1166 
1167 		urb = usb_alloc_urb(0, GFP_KERNEL);
1168 		if (!urb) {
1169 			dev_err(&intf->dev,
1170 				"out of memory (read urbs usb_alloc_urb)\n");
1171 			goto alloc_fail6;
1172 		}
1173 		urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1174 		urb->transfer_dma = rb->dma;
1175 		if (acm->is_int_ep) {
1176 			usb_fill_int_urb(urb, acm->dev,
1177 					 acm->rx_endpoint,
1178 					 rb->base,
1179 					 acm->readsize,
1180 					 acm_read_bulk_callback, rb,
1181 					 acm->bInterval);
1182 		} else {
1183 			usb_fill_bulk_urb(urb, acm->dev,
1184 					  acm->rx_endpoint,
1185 					  rb->base,
1186 					  acm->readsize,
1187 					  acm_read_bulk_callback, rb);
1188 		}
1189 
1190 		acm->read_urbs[i] = urb;
1191 		__set_bit(i, &acm->read_urbs_free);
1192 	}
1193 	for (i = 0; i < ACM_NW; i++) {
1194 		struct acm_wb *snd = &(acm->wb[i]);
1195 
1196 		snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1197 		if (snd->urb == NULL) {
1198 			dev_err(&intf->dev,
1199 				"out of memory (write urbs usb_alloc_urb)\n");
1200 			goto alloc_fail7;
1201 		}
1202 
1203 		if (usb_endpoint_xfer_int(epwrite))
1204 			usb_fill_int_urb(snd->urb, usb_dev,
1205 				usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1206 				NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1207 		else
1208 			usb_fill_bulk_urb(snd->urb, usb_dev,
1209 				usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1210 				NULL, acm->writesize, acm_write_bulk, snd);
1211 		snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1212 		snd->instance = acm;
1213 	}
1214 
1215 	usb_set_intfdata(intf, acm);
1216 
1217 	i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1218 	if (i < 0)
1219 		goto alloc_fail7;
1220 
1221 	if (cfd) { /* export the country data */
1222 		acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1223 		if (!acm->country_codes)
1224 			goto skip_countries;
1225 		acm->country_code_size = cfd->bLength - 4;
1226 		memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1227 							cfd->bLength - 4);
1228 		acm->country_rel_date = cfd->iCountryCodeRelDate;
1229 
1230 		i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1231 		if (i < 0) {
1232 			kfree(acm->country_codes);
1233 			acm->country_codes = NULL;
1234 			acm->country_code_size = 0;
1235 			goto skip_countries;
1236 		}
1237 
1238 		i = device_create_file(&intf->dev,
1239 						&dev_attr_iCountryCodeRelDate);
1240 		if (i < 0) {
1241 			device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1242 			kfree(acm->country_codes);
1243 			acm->country_codes = NULL;
1244 			acm->country_code_size = 0;
1245 			goto skip_countries;
1246 		}
1247 	}
1248 
1249 skip_countries:
1250 	usb_fill_int_urb(acm->ctrlurb, usb_dev,
1251 			 usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1252 			 acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1253 			 /* works around buggy devices */
1254 			 epctrl->bInterval ? epctrl->bInterval : 0xff);
1255 	acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1256 	acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1257 
1258 	dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1259 
1260 	acm_set_control(acm, acm->ctrlout);
1261 
1262 	acm->line.dwDTERate = cpu_to_le32(9600);
1263 	acm->line.bDataBits = 8;
1264 	acm_set_line(acm, &acm->line);
1265 
1266 	usb_driver_claim_interface(&acm_driver, data_interface, acm);
1267 	usb_set_intfdata(data_interface, acm);
1268 
1269 	usb_get_intf(control_interface);
1270 	tty_register_device(acm_tty_driver, minor, &control_interface->dev);
1271 
1272 	return 0;
1273 alloc_fail7:
1274 	for (i = 0; i < ACM_NW; i++)
1275 		usb_free_urb(acm->wb[i].urb);
1276 alloc_fail6:
1277 	for (i = 0; i < num_rx_buf; i++)
1278 		usb_free_urb(acm->read_urbs[i]);
1279 	acm_read_buffers_free(acm);
1280 	usb_free_urb(acm->ctrlurb);
1281 alloc_fail5:
1282 	acm_write_buffers_free(acm);
1283 alloc_fail4:
1284 	usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1285 alloc_fail2:
1286 	acm_release_minor(acm);
1287 	kfree(acm);
1288 alloc_fail:
1289 	return -ENOMEM;
1290 }
1291 
stop_data_traffic(struct acm * acm)1292 static void stop_data_traffic(struct acm *acm)
1293 {
1294 	int i;
1295 
1296 	dev_dbg(&acm->control->dev, "%s\n", __func__);
1297 
1298 	usb_kill_urb(acm->ctrlurb);
1299 	for (i = 0; i < ACM_NW; i++)
1300 		usb_kill_urb(acm->wb[i].urb);
1301 	for (i = 0; i < acm->rx_buflimit; i++)
1302 		usb_kill_urb(acm->read_urbs[i]);
1303 
1304 	cancel_work_sync(&acm->work);
1305 }
1306 
acm_disconnect(struct usb_interface * intf)1307 static void acm_disconnect(struct usb_interface *intf)
1308 {
1309 	struct acm *acm = usb_get_intfdata(intf);
1310 	struct usb_device *usb_dev = interface_to_usbdev(intf);
1311 	struct tty_struct *tty;
1312 	int i;
1313 
1314 	dev_dbg(&intf->dev, "%s\n", __func__);
1315 
1316 	/* sibling interface is already cleaning up */
1317 	if (!acm)
1318 		return;
1319 
1320 	mutex_lock(&acm->mutex);
1321 	acm->disconnected = true;
1322 	if (acm->country_codes) {
1323 		device_remove_file(&acm->control->dev,
1324 				&dev_attr_wCountryCodes);
1325 		device_remove_file(&acm->control->dev,
1326 				&dev_attr_iCountryCodeRelDate);
1327 	}
1328 	device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1329 	usb_set_intfdata(acm->control, NULL);
1330 	usb_set_intfdata(acm->data, NULL);
1331 	mutex_unlock(&acm->mutex);
1332 
1333 	tty = tty_port_tty_get(&acm->port);
1334 	if (tty) {
1335 		tty_vhangup(tty);
1336 		tty_kref_put(tty);
1337 	}
1338 
1339 	stop_data_traffic(acm);
1340 
1341 	usb_free_urb(acm->ctrlurb);
1342 	for (i = 0; i < ACM_NW; i++)
1343 		usb_free_urb(acm->wb[i].urb);
1344 	for (i = 0; i < acm->rx_buflimit; i++)
1345 		usb_free_urb(acm->read_urbs[i]);
1346 	acm_write_buffers_free(acm);
1347 	usb_free_coherent(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1348 	acm_read_buffers_free(acm);
1349 
1350 	if (!acm->combined_interfaces)
1351 		usb_driver_release_interface(&acm_driver, intf == acm->control ?
1352 					acm->data : acm->control);
1353 
1354 	tty_port_put(&acm->port);
1355 }
1356 
1357 #ifdef CONFIG_PM
acm_suspend(struct usb_interface * intf,pm_message_t message)1358 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1359 {
1360 	struct acm *acm = usb_get_intfdata(intf);
1361 	int cnt;
1362 
1363 	if (PMSG_IS_AUTO(message)) {
1364 		int b;
1365 
1366 		spin_lock_irq(&acm->write_lock);
1367 		b = acm->transmitting;
1368 		spin_unlock_irq(&acm->write_lock);
1369 		if (b)
1370 			return -EBUSY;
1371 	}
1372 
1373 	spin_lock_irq(&acm->read_lock);
1374 	spin_lock(&acm->write_lock);
1375 	cnt = acm->susp_count++;
1376 	spin_unlock(&acm->write_lock);
1377 	spin_unlock_irq(&acm->read_lock);
1378 
1379 	if (cnt)
1380 		return 0;
1381 
1382 	if (test_bit(ASYNCB_INITIALIZED, &acm->port.flags))
1383 		stop_data_traffic(acm);
1384 
1385 	return 0;
1386 }
1387 
acm_resume(struct usb_interface * intf)1388 static int acm_resume(struct usb_interface *intf)
1389 {
1390 	struct acm *acm = usb_get_intfdata(intf);
1391 	struct acm_wb *wb;
1392 	int rv = 0;
1393 	int cnt;
1394 
1395 	spin_lock_irq(&acm->read_lock);
1396 	acm->susp_count -= 1;
1397 	cnt = acm->susp_count;
1398 	spin_unlock_irq(&acm->read_lock);
1399 
1400 	if (cnt)
1401 		return 0;
1402 
1403 	if (test_bit(ASYNCB_INITIALIZED, &acm->port.flags)) {
1404 		rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
1405 
1406 		spin_lock_irq(&acm->write_lock);
1407 		if (acm->delayed_wb) {
1408 			wb = acm->delayed_wb;
1409 			acm->delayed_wb = NULL;
1410 			spin_unlock_irq(&acm->write_lock);
1411 			acm_start_wb(acm, wb);
1412 		} else {
1413 			spin_unlock_irq(&acm->write_lock);
1414 		}
1415 
1416 		/*
1417 		 * delayed error checking because we must
1418 		 * do the write path at all cost
1419 		 */
1420 		if (rv < 0)
1421 			goto err_out;
1422 
1423 		rv = acm_submit_read_urbs(acm, GFP_NOIO);
1424 	}
1425 
1426 err_out:
1427 	return rv;
1428 }
1429 
acm_reset_resume(struct usb_interface * intf)1430 static int acm_reset_resume(struct usb_interface *intf)
1431 {
1432 	struct acm *acm = usb_get_intfdata(intf);
1433 	struct tty_struct *tty;
1434 
1435 	if (test_bit(ASYNCB_INITIALIZED, &acm->port.flags)) {
1436 		tty = tty_port_tty_get(&acm->port);
1437 		if (tty) {
1438 			tty_hangup(tty);
1439 			tty_kref_put(tty);
1440 		}
1441 	}
1442 
1443 	return acm_resume(intf);
1444 }
1445 
1446 #endif /* CONFIG_PM */
1447 
1448 #define NOKIA_PCSUITE_ACM_INFO(x) \
1449 		USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1450 		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1451 		USB_CDC_ACM_PROTO_VENDOR)
1452 
1453 #define SAMSUNG_PCSUITE_ACM_INFO(x) \
1454 		USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1455 		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1456 		USB_CDC_ACM_PROTO_VENDOR)
1457 
1458 /*
1459  * USB driver structure.
1460  */
1461 
1462 static const struct usb_device_id acm_ids[] = {
1463 	/* quirky and broken devices */
1464 	{ USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1465 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1466 	},
1467 	{ USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1468 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1469 	},
1470 	{ USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1471 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1472 	},
1473 	{ USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1474 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1475 	},
1476 	{ USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1477 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1478 	},
1479 	{ USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1480 	.driver_info = SINGLE_RX_URB,
1481 	},
1482 	{ USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1483 	.driver_info = SINGLE_RX_URB, /* firmware bug */
1484 	},
1485 	{ USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1486 	.driver_info = SINGLE_RX_URB, /* firmware bug */
1487 	},
1488 	{ USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1489 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1490 	},
1491 	{ USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1492 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1493 	},
1494 	{ USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1495 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1496 	},
1497 	{ USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1498 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1499 	},
1500 	{ USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1501 	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1502 	},
1503 	{ USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1504 	},
1505 	/* Motorola H24 HSPA module: */
1506 	{ USB_DEVICE(0x22b8, 0x2d91) }, /* modem                                */
1507 	{ USB_DEVICE(0x22b8, 0x2d92) }, /* modem           + diagnostics        */
1508 	{ USB_DEVICE(0x22b8, 0x2d93) }, /* modem + AT port                      */
1509 	{ USB_DEVICE(0x22b8, 0x2d95) }, /* modem + AT port + diagnostics        */
1510 	{ USB_DEVICE(0x22b8, 0x2d96) }, /* modem                         + NMEA */
1511 	{ USB_DEVICE(0x22b8, 0x2d97) }, /* modem           + diagnostics + NMEA */
1512 	{ USB_DEVICE(0x22b8, 0x2d99) }, /* modem + AT port               + NMEA */
1513 	{ USB_DEVICE(0x22b8, 0x2d9a) }, /* modem + AT port + diagnostics + NMEA */
1514 
1515 	{ USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1516 	.driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1517 					   data interface instead of
1518 					   communications interface.
1519 					   Maybe we should define a new
1520 					   quirk for this. */
1521 	},
1522 	{ USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1523 	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1524 	},
1525 	{ USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1526 	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1527 	},
1528 
1529 	/* Nokia S60 phones expose two ACM channels. The first is
1530 	 * a modem and is picked up by the standard AT-command
1531 	 * information below. The second is 'vendor-specific' but
1532 	 * is treated as a serial device at the S60 end, so we want
1533 	 * to expose it on Linux too. */
1534 	{ NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1535 	{ NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1536 	{ NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1537 	{ NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1538 	{ NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1539 	{ NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1540 	{ NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1541 	{ NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1542 	{ NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1543 	{ NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1544 	{ NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1545 	{ NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1546 	{ NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1547 	{ NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1548 	{ NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1549 	{ NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1550 	{ NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1551 	{ NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i  */
1552 	{ NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1553 	{ NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1554 	{ NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1555 	{ NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic &  */
1556 	{ NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1557 	{ NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1558 	{ NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1559 	{ NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1560 	{ NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1561 	{ NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1562 	{ NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1563 	{ NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1564 	{ NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1565 	{ NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB  */
1566 	{ NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1567 	{ NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1568 	{ NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1569 	{ NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1570 	{ NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1571 	{ NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1572 	{ NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1573 	{ NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3  */
1574 	{ NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1575 	{ NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1576 	{ NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1577 	{ NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1578 	{ NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1579 	{ NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1580 	{ NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1581 	{ NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1582 	{ NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1583 	{ NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1584 	{ NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1585 	{ NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1586 	{ NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1587 	{ NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1588 	{ NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1589 	{ NOKIA_PCSUITE_ACM_INFO(0x0335), }, /* Nokia E7 */
1590 	{ NOKIA_PCSUITE_ACM_INFO(0x03cd), }, /* Nokia C7 */
1591 	{ SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1592 
1593 	/* Support for Owen devices */
1594 	{ USB_DEVICE(0x03eb, 0x0030), }, /* Owen SI30 */
1595 
1596 	/* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1597 
1598 	/* Support Lego NXT using pbLua firmware */
1599 	{ USB_DEVICE(0x0694, 0xff00),
1600 	.driver_info = NOT_A_MODEM,
1601 	},
1602 
1603 	/* Support for Droids MuIn LCD */
1604 	{ USB_DEVICE(0x04d8, 0x000b),
1605 	.driver_info = NO_DATA_INTERFACE,
1606 	},
1607 
1608 	/* control interfaces without any protocol set */
1609 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1610 		USB_CDC_PROTO_NONE) },
1611 
1612 	/* control interfaces with various AT-command sets */
1613 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1614 		USB_CDC_ACM_PROTO_AT_V25TER) },
1615 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1616 		USB_CDC_ACM_PROTO_AT_PCCA101) },
1617 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1618 		USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1619 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1620 		USB_CDC_ACM_PROTO_AT_GSM) },
1621 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1622 		USB_CDC_ACM_PROTO_AT_3G) },
1623 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1624 		USB_CDC_ACM_PROTO_AT_CDMA) },
1625 
1626 	{ }
1627 };
1628 
1629 MODULE_DEVICE_TABLE(usb, acm_ids);
1630 
1631 static struct usb_driver acm_driver = {
1632 	.name =		"cdc_acm",
1633 	.probe =	acm_probe,
1634 	.disconnect =	acm_disconnect,
1635 #ifdef CONFIG_PM
1636 	.suspend =	acm_suspend,
1637 	.resume =	acm_resume,
1638 	.reset_resume =	acm_reset_resume,
1639 #endif
1640 	.id_table =	acm_ids,
1641 #ifdef CONFIG_PM
1642 	.supports_autosuspend = 1,
1643 #endif
1644 };
1645 
1646 /*
1647  * TTY driver structures.
1648  */
1649 
1650 static const struct tty_operations acm_ops = {
1651 	.install =		acm_tty_install,
1652 	.open =			acm_tty_open,
1653 	.close =		acm_tty_close,
1654 	.cleanup =		acm_tty_cleanup,
1655 	.hangup =		acm_tty_hangup,
1656 	.write =		acm_tty_write,
1657 	.write_room =		acm_tty_write_room,
1658 	.ioctl =		acm_tty_ioctl,
1659 	.throttle =		acm_tty_throttle,
1660 	.unthrottle =		acm_tty_unthrottle,
1661 	.chars_in_buffer =	acm_tty_chars_in_buffer,
1662 	.break_ctl =		acm_tty_break_ctl,
1663 	.set_termios =		acm_tty_set_termios,
1664 	.tiocmget =		acm_tty_tiocmget,
1665 	.tiocmset =		acm_tty_tiocmset,
1666 };
1667 
1668 /*
1669  * Init / exit.
1670  */
1671 
acm_init(void)1672 static int __init acm_init(void)
1673 {
1674 	int retval;
1675 	acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1676 	if (!acm_tty_driver)
1677 		return -ENOMEM;
1678 	acm_tty_driver->owner = THIS_MODULE,
1679 	acm_tty_driver->driver_name = "acm",
1680 	acm_tty_driver->name = "ttyACM",
1681 	acm_tty_driver->major = ACM_TTY_MAJOR,
1682 	acm_tty_driver->minor_start = 0,
1683 	acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1684 	acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1685 	acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1686 	acm_tty_driver->init_termios = tty_std_termios;
1687 	acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
1688 								HUPCL | CLOCAL;
1689 	tty_set_operations(acm_tty_driver, &acm_ops);
1690 
1691 	retval = tty_register_driver(acm_tty_driver);
1692 	if (retval) {
1693 		put_tty_driver(acm_tty_driver);
1694 		return retval;
1695 	}
1696 
1697 	retval = usb_register(&acm_driver);
1698 	if (retval) {
1699 		tty_unregister_driver(acm_tty_driver);
1700 		put_tty_driver(acm_tty_driver);
1701 		return retval;
1702 	}
1703 
1704 	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1705 
1706 	return 0;
1707 }
1708 
acm_exit(void)1709 static void __exit acm_exit(void)
1710 {
1711 	usb_deregister(&acm_driver);
1712 	tty_unregister_driver(acm_tty_driver);
1713 	put_tty_driver(acm_tty_driver);
1714 }
1715 
1716 module_init(acm_init);
1717 module_exit(acm_exit);
1718 
1719 MODULE_AUTHOR(DRIVER_AUTHOR);
1720 MODULE_DESCRIPTION(DRIVER_DESC);
1721 MODULE_LICENSE("GPL");
1722 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);
1723