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