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