xref: /linux/drivers/usb/class/cdc-acm.c (revision dde5e3ffb770ef2854bbc32c51a365e932919e19)
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 
391 	dbg("Entering acm_rx_tasklet");
392 
393 	if (!ACM_READY(acm)) {
394 		dbg("acm_rx_tasklet: ACM not ready");
395 		return;
396 	}
397 
398 	spin_lock_irqsave(&acm->throttle_lock, flags);
399 	throttled = acm->throttle;
400 	spin_unlock_irqrestore(&acm->throttle_lock, flags);
401 	if (throttled) {
402 		dbg("acm_rx_tasklet: throttled");
403 		return;
404 	}
405 
406 	tty = tty_port_tty_get(&acm->port);
407 
408 next_buffer:
409 	spin_lock_irqsave(&acm->read_lock, flags);
410 	if (list_empty(&acm->filled_read_bufs)) {
411 		spin_unlock_irqrestore(&acm->read_lock, flags);
412 		goto urbs;
413 	}
414 	buf = list_entry(acm->filled_read_bufs.next,
415 			 struct acm_rb, list);
416 	list_del(&buf->list);
417 	spin_unlock_irqrestore(&acm->read_lock, flags);
418 
419 	dbg("acm_rx_tasklet: procesing buf 0x%p, size = %d", buf, buf->size);
420 
421 	if (tty) {
422 		spin_lock_irqsave(&acm->throttle_lock, flags);
423 		throttled = acm->throttle;
424 		spin_unlock_irqrestore(&acm->throttle_lock, flags);
425 		if (!throttled) {
426 			tty_buffer_request_room(tty, buf->size);
427 			tty_insert_flip_string(tty, buf->base, buf->size);
428 			tty_flip_buffer_push(tty);
429 		} else {
430 			tty_kref_put(tty);
431 			dbg("Throttling noticed");
432 			spin_lock_irqsave(&acm->read_lock, flags);
433 			list_add(&buf->list, &acm->filled_read_bufs);
434 			spin_unlock_irqrestore(&acm->read_lock, flags);
435 			return;
436 		}
437 	}
438 
439 	spin_lock_irqsave(&acm->read_lock, flags);
440 	list_add(&buf->list, &acm->spare_read_bufs);
441 	spin_unlock_irqrestore(&acm->read_lock, flags);
442 	goto next_buffer;
443 
444 urbs:
445 	tty_kref_put(tty);
446 
447 	while (!list_empty(&acm->spare_read_bufs)) {
448 		spin_lock_irqsave(&acm->read_lock, flags);
449 		if (list_empty(&acm->spare_read_urbs)) {
450 			acm->processing = 0;
451 			spin_unlock_irqrestore(&acm->read_lock, flags);
452 			return;
453 		}
454 		rcv = list_entry(acm->spare_read_urbs.next,
455 				 struct acm_ru, list);
456 		list_del(&rcv->list);
457 		spin_unlock_irqrestore(&acm->read_lock, flags);
458 
459 		buf = list_entry(acm->spare_read_bufs.next,
460 				 struct acm_rb, list);
461 		list_del(&buf->list);
462 
463 		rcv->buffer = buf;
464 
465 		if (acm->is_int_ep)
466 			usb_fill_int_urb(rcv->urb, acm->dev,
467 					 acm->rx_endpoint,
468 					 buf->base,
469 					 acm->readsize,
470 					 acm_read_bulk, rcv, acm->bInterval);
471 		else
472 			usb_fill_bulk_urb(rcv->urb, acm->dev,
473 					  acm->rx_endpoint,
474 					  buf->base,
475 					  acm->readsize,
476 					  acm_read_bulk, rcv);
477 		rcv->urb->transfer_dma = buf->dma;
478 		rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
479 
480 		/* This shouldn't kill the driver as unsuccessful URBs are
481 		   returned to the free-urbs-pool and resubmited ASAP */
482 		spin_lock_irqsave(&acm->read_lock, flags);
483 		if (acm->susp_count ||
484 				usb_submit_urb(rcv->urb, GFP_ATOMIC) < 0) {
485 			list_add(&buf->list, &acm->spare_read_bufs);
486 			list_add(&rcv->list, &acm->spare_read_urbs);
487 			acm->processing = 0;
488 			spin_unlock_irqrestore(&acm->read_lock, flags);
489 			return;
490 		} else {
491 			spin_unlock_irqrestore(&acm->read_lock, flags);
492 			dbg("acm_rx_tasklet: sending urb 0x%p, rcv 0x%p, buf 0x%p", rcv->urb, rcv, buf);
493 		}
494 	}
495 	spin_lock_irqsave(&acm->read_lock, flags);
496 	acm->processing = 0;
497 	spin_unlock_irqrestore(&acm->read_lock, flags);
498 }
499 
500 /* data interface wrote those outgoing bytes */
501 static void acm_write_bulk(struct urb *urb)
502 {
503 	struct acm_wb *wb = urb->context;
504 	struct acm *acm = wb->instance;
505 	unsigned long flags;
506 
507 	if (verbose || urb->status
508 			|| (urb->actual_length != urb->transfer_buffer_length))
509 		dev_dbg(&acm->data->dev, "tx %d/%d bytes -- > %d\n",
510 			urb->actual_length,
511 			urb->transfer_buffer_length,
512 			urb->status);
513 
514 	spin_lock_irqsave(&acm->write_lock, flags);
515 	acm_write_done(acm, wb);
516 	spin_unlock_irqrestore(&acm->write_lock, flags);
517 	if (ACM_READY(acm))
518 		schedule_work(&acm->work);
519 	else
520 		wake_up_interruptible(&acm->drain_wait);
521 }
522 
523 static void acm_softint(struct work_struct *work)
524 {
525 	struct acm *acm = container_of(work, struct acm, work);
526 	struct tty_struct *tty;
527 
528 	dev_vdbg(&acm->data->dev, "tx work\n");
529 	if (!ACM_READY(acm))
530 		return;
531 	tty = tty_port_tty_get(&acm->port);
532 	tty_wakeup(tty);
533 	tty_kref_put(tty);
534 }
535 
536 static void acm_waker(struct work_struct *waker)
537 {
538 	struct acm *acm = container_of(waker, struct acm, waker);
539 	int rv;
540 
541 	rv = usb_autopm_get_interface(acm->control);
542 	if (rv < 0) {
543 		dev_err(&acm->dev->dev, "Autopm failure in %s\n", __func__);
544 		return;
545 	}
546 	if (acm->delayed_wb) {
547 		acm_start_wb(acm, acm->delayed_wb);
548 		acm->delayed_wb = NULL;
549 	}
550 	usb_autopm_put_interface(acm->control);
551 }
552 
553 /*
554  * TTY handlers
555  */
556 
557 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
558 {
559 	struct acm *acm;
560 	int rv = -ENODEV;
561 	int i;
562 	dbg("Entering acm_tty_open.");
563 
564 	mutex_lock(&open_mutex);
565 
566 	acm = acm_table[tty->index];
567 	if (!acm || !acm->dev)
568 		goto err_out;
569 	else
570 		rv = 0;
571 
572 	set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
573 
574 	tty->driver_data = acm;
575 	tty_port_tty_set(&acm->port, tty);
576 
577 	if (usb_autopm_get_interface(acm->control) < 0)
578 		goto early_bail;
579 	else
580 		acm->control->needs_remote_wakeup = 1;
581 
582 	mutex_lock(&acm->mutex);
583 	if (acm->port.count++) {
584 		usb_autopm_put_interface(acm->control);
585 		goto done;
586 	}
587 
588 	acm->ctrlurb->dev = acm->dev;
589 	if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
590 		dbg("usb_submit_urb(ctrl irq) failed");
591 		goto bail_out;
592 	}
593 
594 	if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS) &&
595 	    (acm->ctrl_caps & USB_CDC_CAP_LINE))
596 		goto full_bailout;
597 
598 	usb_autopm_put_interface(acm->control);
599 
600 	INIT_LIST_HEAD(&acm->spare_read_urbs);
601 	INIT_LIST_HEAD(&acm->spare_read_bufs);
602 	INIT_LIST_HEAD(&acm->filled_read_bufs);
603 
604 	for (i = 0; i < acm->rx_buflimit; i++)
605 		list_add(&(acm->ru[i].list), &acm->spare_read_urbs);
606 	for (i = 0; i < acm->rx_buflimit; i++)
607 		list_add(&(acm->rb[i].list), &acm->spare_read_bufs);
608 
609 	acm->throttle = 0;
610 
611 	tasklet_schedule(&acm->urb_task);
612 	rv = tty_port_block_til_ready(&acm->port, tty, filp);
613 done:
614 	mutex_unlock(&acm->mutex);
615 err_out:
616 	mutex_unlock(&open_mutex);
617 	return rv;
618 
619 full_bailout:
620 	usb_kill_urb(acm->ctrlurb);
621 bail_out:
622 	usb_autopm_put_interface(acm->control);
623 	acm->port.count--;
624 	mutex_unlock(&acm->mutex);
625 early_bail:
626 	mutex_unlock(&open_mutex);
627 	tty_port_tty_set(&acm->port, NULL);
628 	return -EIO;
629 }
630 
631 static void acm_tty_unregister(struct acm *acm)
632 {
633 	int i, nr;
634 
635 	nr = acm->rx_buflimit;
636 	tty_unregister_device(acm_tty_driver, acm->minor);
637 	usb_put_intf(acm->control);
638 	acm_table[acm->minor] = NULL;
639 	usb_free_urb(acm->ctrlurb);
640 	for (i = 0; i < ACM_NW; i++)
641 		usb_free_urb(acm->wb[i].urb);
642 	for (i = 0; i < nr; i++)
643 		usb_free_urb(acm->ru[i].urb);
644 	kfree(acm->country_codes);
645 	kfree(acm);
646 }
647 
648 static int acm_tty_chars_in_buffer(struct tty_struct *tty);
649 
650 static void acm_port_down(struct acm *acm, int drain)
651 {
652 	int i, nr = acm->rx_buflimit;
653 	mutex_lock(&open_mutex);
654 	if (acm->dev) {
655 		usb_autopm_get_interface(acm->control);
656 		acm_set_control(acm, acm->ctrlout = 0);
657 		/* try letting the last writes drain naturally */
658 		if (drain) {
659 			wait_event_interruptible_timeout(acm->drain_wait,
660 				(ACM_NW == acm_wb_is_avail(acm)) || !acm->dev,
661 					ACM_CLOSE_TIMEOUT * HZ);
662 		}
663 		usb_kill_urb(acm->ctrlurb);
664 		for (i = 0; i < ACM_NW; i++)
665 			usb_kill_urb(acm->wb[i].urb);
666 		for (i = 0; i < nr; i++)
667 			usb_kill_urb(acm->ru[i].urb);
668 		acm->control->needs_remote_wakeup = 0;
669 		usb_autopm_put_interface(acm->control);
670 	}
671 	mutex_unlock(&open_mutex);
672 }
673 
674 static void acm_tty_hangup(struct tty_struct *tty)
675 {
676 	struct acm *acm = tty->driver_data;
677 	tty_port_hangup(&acm->port);
678 	acm_port_down(acm, 0);
679 }
680 
681 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
682 {
683 	struct acm *acm = tty->driver_data;
684 
685 	/* Perform the closing process and see if we need to do the hardware
686 	   shutdown */
687 	if (!acm || tty_port_close_start(&acm->port, tty, filp) == 0)
688 		return;
689 	acm_port_down(acm, 0);
690 	tty_port_close_end(&acm->port, tty);
691 	mutex_lock(&open_mutex);
692 	tty_port_tty_set(&acm->port, NULL);
693 	if (!acm->dev)
694 		acm_tty_unregister(acm);
695 	mutex_unlock(&open_mutex);
696 }
697 
698 static int acm_tty_write(struct tty_struct *tty,
699 					const unsigned char *buf, int count)
700 {
701 	struct acm *acm = tty->driver_data;
702 	int stat;
703 	unsigned long flags;
704 	int wbn;
705 	struct acm_wb *wb;
706 
707 	dbg("Entering acm_tty_write to write %d bytes,", count);
708 
709 	if (!ACM_READY(acm))
710 		return -EINVAL;
711 	if (!count)
712 		return 0;
713 
714 	spin_lock_irqsave(&acm->write_lock, flags);
715 	wbn = acm_wb_alloc(acm);
716 	if (wbn < 0) {
717 		spin_unlock_irqrestore(&acm->write_lock, flags);
718 		return 0;
719 	}
720 	wb = &acm->wb[wbn];
721 
722 	count = (count > acm->writesize) ? acm->writesize : count;
723 	dbg("Get %d bytes...", count);
724 	memcpy(wb->buf, buf, count);
725 	wb->len = count;
726 	spin_unlock_irqrestore(&acm->write_lock, flags);
727 
728 	stat = acm_write_start(acm, wbn);
729 	if (stat < 0)
730 		return stat;
731 	return count;
732 }
733 
734 static int acm_tty_write_room(struct tty_struct *tty)
735 {
736 	struct acm *acm = tty->driver_data;
737 	if (!ACM_READY(acm))
738 		return -EINVAL;
739 	/*
740 	 * Do not let the line discipline to know that we have a reserve,
741 	 * or it might get too enthusiastic.
742 	 */
743 	return acm_wb_is_avail(acm) ? acm->writesize : 0;
744 }
745 
746 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
747 {
748 	struct acm *acm = tty->driver_data;
749 	if (!ACM_READY(acm))
750 		return 0;
751 	/*
752 	 * This is inaccurate (overcounts), but it works.
753 	 */
754 	return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
755 }
756 
757 static void acm_tty_throttle(struct tty_struct *tty)
758 {
759 	struct acm *acm = tty->driver_data;
760 	if (!ACM_READY(acm))
761 		return;
762 	spin_lock_bh(&acm->throttle_lock);
763 	acm->throttle = 1;
764 	spin_unlock_bh(&acm->throttle_lock);
765 }
766 
767 static void acm_tty_unthrottle(struct tty_struct *tty)
768 {
769 	struct acm *acm = tty->driver_data;
770 	if (!ACM_READY(acm))
771 		return;
772 	spin_lock_bh(&acm->throttle_lock);
773 	acm->throttle = 0;
774 	spin_unlock_bh(&acm->throttle_lock);
775 	tasklet_schedule(&acm->urb_task);
776 }
777 
778 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
779 {
780 	struct acm *acm = tty->driver_data;
781 	int retval;
782 	if (!ACM_READY(acm))
783 		return -EINVAL;
784 	retval = acm_send_break(acm, state ? 0xffff : 0);
785 	if (retval < 0)
786 		dbg("send break failed");
787 	return retval;
788 }
789 
790 static int acm_tty_tiocmget(struct tty_struct *tty, struct file *file)
791 {
792 	struct acm *acm = tty->driver_data;
793 
794 	if (!ACM_READY(acm))
795 		return -EINVAL;
796 
797 	return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
798 	       (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
799 	       (acm->ctrlin  & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
800 	       (acm->ctrlin  & ACM_CTRL_RI  ? TIOCM_RI  : 0) |
801 	       (acm->ctrlin  & ACM_CTRL_DCD ? TIOCM_CD  : 0) |
802 	       TIOCM_CTS;
803 }
804 
805 static int acm_tty_tiocmset(struct tty_struct *tty, struct file *file,
806 			    unsigned int set, unsigned int clear)
807 {
808 	struct acm *acm = tty->driver_data;
809 	unsigned int newctrl;
810 
811 	if (!ACM_READY(acm))
812 		return -EINVAL;
813 
814 	newctrl = acm->ctrlout;
815 	set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
816 					(set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
817 	clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
818 					(clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
819 
820 	newctrl = (newctrl & ~clear) | set;
821 
822 	if (acm->ctrlout == newctrl)
823 		return 0;
824 	return acm_set_control(acm, acm->ctrlout = newctrl);
825 }
826 
827 static int acm_tty_ioctl(struct tty_struct *tty, struct file *file,
828 					unsigned int cmd, unsigned long arg)
829 {
830 	struct acm *acm = tty->driver_data;
831 
832 	if (!ACM_READY(acm))
833 		return -EINVAL;
834 
835 	return -ENOIOCTLCMD;
836 }
837 
838 static const __u32 acm_tty_speed[] = {
839 	0, 50, 75, 110, 134, 150, 200, 300, 600,
840 	1200, 1800, 2400, 4800, 9600, 19200, 38400,
841 	57600, 115200, 230400, 460800, 500000, 576000,
842 	921600, 1000000, 1152000, 1500000, 2000000,
843 	2500000, 3000000, 3500000, 4000000
844 };
845 
846 static const __u8 acm_tty_size[] = {
847 	5, 6, 7, 8
848 };
849 
850 static void acm_tty_set_termios(struct tty_struct *tty,
851 						struct ktermios *termios_old)
852 {
853 	struct acm *acm = tty->driver_data;
854 	struct ktermios *termios = tty->termios;
855 	struct usb_cdc_line_coding newline;
856 	int newctrl = acm->ctrlout;
857 
858 	if (!ACM_READY(acm))
859 		return;
860 
861 	/* FIXME: Needs to support the tty_baud interface */
862 	/* FIXME: Broken on sparc */
863 	newline.dwDTERate = cpu_to_le32p(acm_tty_speed +
864 		(termios->c_cflag & CBAUD & ~CBAUDEX) + (termios->c_cflag & CBAUDEX ? 15 : 0));
865 	newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
866 	newline.bParityType = termios->c_cflag & PARENB ?
867 				(termios->c_cflag & PARODD ? 1 : 2) +
868 				(termios->c_cflag & CMSPAR ? 2 : 0) : 0;
869 	newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
870 	/* FIXME: Needs to clear unsupported bits in the termios */
871 	acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
872 
873 	if (!newline.dwDTERate) {
874 		newline.dwDTERate = acm->line.dwDTERate;
875 		newctrl &= ~ACM_CTRL_DTR;
876 	} else
877 		newctrl |=  ACM_CTRL_DTR;
878 
879 	if (newctrl != acm->ctrlout)
880 		acm_set_control(acm, acm->ctrlout = newctrl);
881 
882 	if (memcmp(&acm->line, &newline, sizeof newline)) {
883 		memcpy(&acm->line, &newline, sizeof newline);
884 		dbg("set line: %d %d %d %d", le32_to_cpu(newline.dwDTERate),
885 			newline.bCharFormat, newline.bParityType,
886 			newline.bDataBits);
887 		acm_set_line(acm, &acm->line);
888 	}
889 }
890 
891 /*
892  * USB probe and disconnect routines.
893  */
894 
895 /* Little helpers: write/read buffers free */
896 static void acm_write_buffers_free(struct acm *acm)
897 {
898 	int i;
899 	struct acm_wb *wb;
900 	struct usb_device *usb_dev = interface_to_usbdev(acm->control);
901 
902 	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
903 		usb_buffer_free(usb_dev, acm->writesize, wb->buf, wb->dmah);
904 }
905 
906 static void acm_read_buffers_free(struct acm *acm)
907 {
908 	struct usb_device *usb_dev = interface_to_usbdev(acm->control);
909 	int i, n = acm->rx_buflimit;
910 
911 	for (i = 0; i < n; i++)
912 		usb_buffer_free(usb_dev, acm->readsize,
913 					acm->rb[i].base, acm->rb[i].dma);
914 }
915 
916 /* Little helper: write buffers allocate */
917 static int acm_write_buffers_alloc(struct acm *acm)
918 {
919 	int i;
920 	struct acm_wb *wb;
921 
922 	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
923 		wb->buf = usb_buffer_alloc(acm->dev, acm->writesize, GFP_KERNEL,
924 		    &wb->dmah);
925 		if (!wb->buf) {
926 			while (i != 0) {
927 				--i;
928 				--wb;
929 				usb_buffer_free(acm->dev, acm->writesize,
930 				    wb->buf, wb->dmah);
931 			}
932 			return -ENOMEM;
933 		}
934 	}
935 	return 0;
936 }
937 
938 static int acm_probe(struct usb_interface *intf,
939 		     const struct usb_device_id *id)
940 {
941 	struct usb_cdc_union_desc *union_header = NULL;
942 	struct usb_cdc_country_functional_desc *cfd = NULL;
943 	unsigned char *buffer = intf->altsetting->extra;
944 	int buflen = intf->altsetting->extralen;
945 	struct usb_interface *control_interface;
946 	struct usb_interface *data_interface;
947 	struct usb_endpoint_descriptor *epctrl = NULL;
948 	struct usb_endpoint_descriptor *epread = NULL;
949 	struct usb_endpoint_descriptor *epwrite = NULL;
950 	struct usb_device *usb_dev = interface_to_usbdev(intf);
951 	struct acm *acm;
952 	int minor;
953 	int ctrlsize, readsize;
954 	u8 *buf;
955 	u8 ac_management_function = 0;
956 	u8 call_management_function = 0;
957 	int call_interface_num = -1;
958 	int data_interface_num;
959 	unsigned long quirks;
960 	int num_rx_buf;
961 	int i;
962 	int combined_interfaces = 0;
963 
964 	/* normal quirks */
965 	quirks = (unsigned long)id->driver_info;
966 	num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
967 
968 	/* handle quirks deadly to normal probing*/
969 	if (quirks == NO_UNION_NORMAL) {
970 		data_interface = usb_ifnum_to_if(usb_dev, 1);
971 		control_interface = usb_ifnum_to_if(usb_dev, 0);
972 		goto skip_normal_probe;
973 	}
974 
975 	/* normal probing*/
976 	if (!buffer) {
977 		dev_err(&intf->dev, "Weird descriptor references\n");
978 		return -EINVAL;
979 	}
980 
981 	if (!buflen) {
982 		if (intf->cur_altsetting->endpoint->extralen &&
983 				intf->cur_altsetting->endpoint->extra) {
984 			dev_dbg(&intf->dev,
985 				"Seeking extra descriptors on endpoint\n");
986 			buflen = intf->cur_altsetting->endpoint->extralen;
987 			buffer = intf->cur_altsetting->endpoint->extra;
988 		} else {
989 			dev_err(&intf->dev,
990 				"Zero length descriptor references\n");
991 			return -EINVAL;
992 		}
993 	}
994 
995 	while (buflen > 0) {
996 		if (buffer[1] != USB_DT_CS_INTERFACE) {
997 			dev_err(&intf->dev, "skipping garbage\n");
998 			goto next_desc;
999 		}
1000 
1001 		switch (buffer[2]) {
1002 		case USB_CDC_UNION_TYPE: /* we've found it */
1003 			if (union_header) {
1004 				dev_err(&intf->dev, "More than one "
1005 					"union descriptor, skipping ...\n");
1006 				goto next_desc;
1007 			}
1008 			union_header = (struct usb_cdc_union_desc *)buffer;
1009 			break;
1010 		case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
1011 			cfd = (struct usb_cdc_country_functional_desc *)buffer;
1012 			break;
1013 		case USB_CDC_HEADER_TYPE: /* maybe check version */
1014 			break; /* for now we ignore it */
1015 		case USB_CDC_ACM_TYPE:
1016 			ac_management_function = buffer[3];
1017 			break;
1018 		case USB_CDC_CALL_MANAGEMENT_TYPE:
1019 			call_management_function = buffer[3];
1020 			call_interface_num = buffer[4];
1021 			if ((call_management_function & 3) != 3)
1022 				dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n");
1023 			break;
1024 		default:
1025 			/* there are LOTS more CDC descriptors that
1026 			 * could legitimately be found here.
1027 			 */
1028 			dev_dbg(&intf->dev, "Ignoring descriptor: "
1029 					"type %02x, length %d\n",
1030 					buffer[2], buffer[0]);
1031 			break;
1032 		}
1033 next_desc:
1034 		buflen -= buffer[0];
1035 		buffer += buffer[0];
1036 	}
1037 
1038 	if (!union_header) {
1039 		if (call_interface_num > 0) {
1040 			dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1041 			data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
1042 			control_interface = intf;
1043 		} else {
1044 			if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
1045 				dev_dbg(&intf->dev,"No union descriptor, giving up\n");
1046 				return -ENODEV;
1047 			} else {
1048 				dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
1049 				combined_interfaces = 1;
1050 				control_interface = data_interface = intf;
1051 				goto look_for_collapsed_interface;
1052 			}
1053 		}
1054 	} else {
1055 		control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1056 		data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
1057 		if (!control_interface || !data_interface) {
1058 			dev_dbg(&intf->dev, "no interfaces\n");
1059 			return -ENODEV;
1060 		}
1061 	}
1062 
1063 	if (data_interface_num != call_interface_num)
1064 		dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1065 
1066 	if (control_interface == data_interface) {
1067 		/* some broken devices designed for windows work this way */
1068 		dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1069 		combined_interfaces = 1;
1070 		/* a popular other OS doesn't use it */
1071 		quirks |= NO_CAP_LINE;
1072 		if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1073 			dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1074 			return -EINVAL;
1075 		}
1076 look_for_collapsed_interface:
1077 		for (i = 0; i < 3; i++) {
1078 			struct usb_endpoint_descriptor *ep;
1079 			ep = &data_interface->cur_altsetting->endpoint[i].desc;
1080 
1081 			if (usb_endpoint_is_int_in(ep))
1082 				epctrl = ep;
1083 			else if (usb_endpoint_is_bulk_out(ep))
1084 				epwrite = ep;
1085 			else if (usb_endpoint_is_bulk_in(ep))
1086 				epread = ep;
1087 			else
1088 				return -EINVAL;
1089 		}
1090 		if (!epctrl || !epread || !epwrite)
1091 			return -ENODEV;
1092 		else
1093 			goto made_compressed_probe;
1094 	}
1095 
1096 skip_normal_probe:
1097 
1098 	/*workaround for switched interfaces */
1099 	if (data_interface->cur_altsetting->desc.bInterfaceClass
1100 						!= CDC_DATA_INTERFACE_TYPE) {
1101 		if (control_interface->cur_altsetting->desc.bInterfaceClass
1102 						== CDC_DATA_INTERFACE_TYPE) {
1103 			struct usb_interface *t;
1104 			dev_dbg(&intf->dev,
1105 				"Your device has switched interfaces.\n");
1106 			t = control_interface;
1107 			control_interface = data_interface;
1108 			data_interface = t;
1109 		} else {
1110 			return -EINVAL;
1111 		}
1112 	}
1113 
1114 	/* Accept probe requests only for the control interface */
1115 	if (!combined_interfaces && intf != control_interface)
1116 		return -ENODEV;
1117 
1118 	if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1119 		/* valid in this context */
1120 		dev_dbg(&intf->dev, "The data interface isn't available\n");
1121 		return -EBUSY;
1122 	}
1123 
1124 
1125 	if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
1126 		return -EINVAL;
1127 
1128 	epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1129 	epread = &data_interface->cur_altsetting->endpoint[0].desc;
1130 	epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1131 
1132 
1133 	/* workaround for switched endpoints */
1134 	if (!usb_endpoint_dir_in(epread)) {
1135 		/* descriptors are swapped */
1136 		struct usb_endpoint_descriptor *t;
1137 		dev_dbg(&intf->dev,
1138 			"The data interface has switched endpoints\n");
1139 		t = epread;
1140 		epread = epwrite;
1141 		epwrite = t;
1142 	}
1143 made_compressed_probe:
1144 	dbg("interfaces are valid");
1145 	for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
1146 
1147 	if (minor == ACM_TTY_MINORS) {
1148 		dev_err(&intf->dev, "no more free acm devices\n");
1149 		return -ENODEV;
1150 	}
1151 
1152 	acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1153 	if (acm == NULL) {
1154 		dev_dbg(&intf->dev, "out of memory (acm kzalloc)\n");
1155 		goto alloc_fail;
1156 	}
1157 
1158 	ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize);
1159 	readsize = le16_to_cpu(epread->wMaxPacketSize) *
1160 				(quirks == SINGLE_RX_URB ? 1 : 2);
1161 	acm->combined_interfaces = combined_interfaces;
1162 	acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize) * 20;
1163 	acm->control = control_interface;
1164 	acm->data = data_interface;
1165 	acm->minor = minor;
1166 	acm->dev = usb_dev;
1167 	acm->ctrl_caps = ac_management_function;
1168 	if (quirks & NO_CAP_LINE)
1169 		acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1170 	acm->ctrlsize = ctrlsize;
1171 	acm->readsize = readsize;
1172 	acm->rx_buflimit = num_rx_buf;
1173 	acm->urb_task.func = acm_rx_tasklet;
1174 	acm->urb_task.data = (unsigned long) acm;
1175 	INIT_WORK(&acm->work, acm_softint);
1176 	INIT_WORK(&acm->waker, acm_waker);
1177 	init_waitqueue_head(&acm->drain_wait);
1178 	spin_lock_init(&acm->throttle_lock);
1179 	spin_lock_init(&acm->write_lock);
1180 	spin_lock_init(&acm->read_lock);
1181 	mutex_init(&acm->mutex);
1182 	acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1183 	acm->is_int_ep = usb_endpoint_xfer_int(epread);
1184 	if (acm->is_int_ep)
1185 		acm->bInterval = epread->bInterval;
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