Merge git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6
[pandora-kernel.git] / drivers / usb / class / cdc-acm.c
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                 usb_fill_bulk_urb(rcv->urb, acm->dev,
466                                   acm->rx_endpoint,
467                                   buf->base,
468                                   acm->readsize,
469                                   acm_read_bulk, rcv);
470                 rcv->urb->transfer_dma = buf->dma;
471                 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
472
473                 /* This shouldn't kill the driver as unsuccessful URBs are
474                    returned to the free-urbs-pool and resubmited ASAP */
475                 spin_lock_irqsave(&acm->read_lock, flags);
476                 if (acm->susp_count ||
477                                 usb_submit_urb(rcv->urb, GFP_ATOMIC) < 0) {
478                         list_add(&buf->list, &acm->spare_read_bufs);
479                         list_add(&rcv->list, &acm->spare_read_urbs);
480                         acm->processing = 0;
481                         spin_unlock_irqrestore(&acm->read_lock, flags);
482                         return;
483                 } else {
484                         spin_unlock_irqrestore(&acm->read_lock, flags);
485                         dbg("acm_rx_tasklet: sending urb 0x%p, rcv 0x%p, buf 0x%p", rcv->urb, rcv, buf);
486                 }
487         }
488         spin_lock_irqsave(&acm->read_lock, flags);
489         acm->processing = 0;
490         spin_unlock_irqrestore(&acm->read_lock, flags);
491 }
492
493 /* data interface wrote those outgoing bytes */
494 static void acm_write_bulk(struct urb *urb)
495 {
496         struct acm_wb *wb = urb->context;
497         struct acm *acm = wb->instance;
498         unsigned long flags;
499
500         if (verbose || urb->status
501                         || (urb->actual_length != urb->transfer_buffer_length))
502                 dev_dbg(&acm->data->dev, "tx %d/%d bytes -- > %d\n",
503                         urb->actual_length,
504                         urb->transfer_buffer_length,
505                         urb->status);
506
507         spin_lock_irqsave(&acm->write_lock, flags);
508         acm_write_done(acm, wb);
509         spin_unlock_irqrestore(&acm->write_lock, flags);
510         if (ACM_READY(acm))
511                 schedule_work(&acm->work);
512         else
513                 wake_up_interruptible(&acm->drain_wait);
514 }
515
516 static void acm_softint(struct work_struct *work)
517 {
518         struct acm *acm = container_of(work, struct acm, work);
519         struct tty_struct *tty;
520
521         dev_vdbg(&acm->data->dev, "tx work\n");
522         if (!ACM_READY(acm))
523                 return;
524         tty = tty_port_tty_get(&acm->port);
525         tty_wakeup(tty);
526         tty_kref_put(tty);
527 }
528
529 static void acm_waker(struct work_struct *waker)
530 {
531         struct acm *acm = container_of(waker, struct acm, waker);
532         int rv;
533
534         rv = usb_autopm_get_interface(acm->control);
535         if (rv < 0) {
536                 dev_err(&acm->dev->dev, "Autopm failure in %s\n", __func__);
537                 return;
538         }
539         if (acm->delayed_wb) {
540                 acm_start_wb(acm, acm->delayed_wb);
541                 acm->delayed_wb = NULL;
542         }
543         usb_autopm_put_interface(acm->control);
544 }
545
546 /*
547  * TTY handlers
548  */
549
550 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
551 {
552         struct acm *acm;
553         int rv = -EINVAL;
554         int i;
555         dbg("Entering acm_tty_open.");
556
557         mutex_lock(&open_mutex);
558
559         acm = acm_table[tty->index];
560         if (!acm || !acm->dev)
561                 goto err_out;
562         else
563                 rv = 0;
564
565         set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
566
567         tty->driver_data = acm;
568         tty_port_tty_set(&acm->port, tty);
569
570         if (usb_autopm_get_interface(acm->control) < 0)
571                 goto early_bail;
572         else
573                 acm->control->needs_remote_wakeup = 1;
574
575         mutex_lock(&acm->mutex);
576         if (acm->port.count++) {
577                 usb_autopm_put_interface(acm->control);
578                 goto done;
579         }
580
581         acm->ctrlurb->dev = acm->dev;
582         if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
583                 dbg("usb_submit_urb(ctrl irq) failed");
584                 goto bail_out;
585         }
586
587         if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS) &&
588             (acm->ctrl_caps & USB_CDC_CAP_LINE))
589                 goto full_bailout;
590
591         usb_autopm_put_interface(acm->control);
592
593         INIT_LIST_HEAD(&acm->spare_read_urbs);
594         INIT_LIST_HEAD(&acm->spare_read_bufs);
595         INIT_LIST_HEAD(&acm->filled_read_bufs);
596
597         for (i = 0; i < acm->rx_buflimit; i++)
598                 list_add(&(acm->ru[i].list), &acm->spare_read_urbs);
599         for (i = 0; i < acm->rx_buflimit; i++)
600                 list_add(&(acm->rb[i].list), &acm->spare_read_bufs);
601
602         acm->throttle = 0;
603
604         tasklet_schedule(&acm->urb_task);
605         rv = tty_port_block_til_ready(&acm->port, tty, filp);
606 done:
607         mutex_unlock(&acm->mutex);
608 err_out:
609         mutex_unlock(&open_mutex);
610         return rv;
611
612 full_bailout:
613         usb_kill_urb(acm->ctrlurb);
614 bail_out:
615         usb_autopm_put_interface(acm->control);
616         acm->port.count--;
617         mutex_unlock(&acm->mutex);
618 early_bail:
619         mutex_unlock(&open_mutex);
620         tty_port_tty_set(&acm->port, NULL);
621         return -EIO;
622 }
623
624 static void acm_tty_unregister(struct acm *acm)
625 {
626         int i, nr;
627
628         nr = acm->rx_buflimit;
629         tty_unregister_device(acm_tty_driver, acm->minor);
630         usb_put_intf(acm->control);
631         acm_table[acm->minor] = NULL;
632         usb_free_urb(acm->ctrlurb);
633         for (i = 0; i < ACM_NW; i++)
634                 usb_free_urb(acm->wb[i].urb);
635         for (i = 0; i < nr; i++)
636                 usb_free_urb(acm->ru[i].urb);
637         kfree(acm->country_codes);
638         kfree(acm);
639 }
640
641 static int acm_tty_chars_in_buffer(struct tty_struct *tty);
642
643 static void acm_port_down(struct acm *acm, int drain)
644 {
645         int i, nr = acm->rx_buflimit;
646         mutex_lock(&open_mutex);
647         if (acm->dev) {
648                 usb_autopm_get_interface(acm->control);
649                 acm_set_control(acm, acm->ctrlout = 0);
650                 /* try letting the last writes drain naturally */
651                 if (drain) {
652                         wait_event_interruptible_timeout(acm->drain_wait,
653                                 (ACM_NW == acm_wb_is_avail(acm)) || !acm->dev,
654                                         ACM_CLOSE_TIMEOUT * HZ);
655                 }
656                 usb_kill_urb(acm->ctrlurb);
657                 for (i = 0; i < ACM_NW; i++)
658                         usb_kill_urb(acm->wb[i].urb);
659                 for (i = 0; i < nr; i++)
660                         usb_kill_urb(acm->ru[i].urb);
661                 acm->control->needs_remote_wakeup = 0;
662                 usb_autopm_put_interface(acm->control);
663         }
664         mutex_unlock(&open_mutex);
665 }
666
667 static void acm_tty_hangup(struct tty_struct *tty)
668 {
669         struct acm *acm = tty->driver_data;
670         tty_port_hangup(&acm->port);
671         acm_port_down(acm, 0);
672 }
673
674 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
675 {
676         struct acm *acm = tty->driver_data;
677
678         /* Perform the closing process and see if we need to do the hardware
679            shutdown */
680         if (tty_port_close_start(&acm->port, tty, filp) == 0)
681                 return;
682         acm_port_down(acm, 0);
683         tty_port_close_end(&acm->port, tty);
684         mutex_lock(&open_mutex);
685         tty_port_tty_set(&acm->port, NULL);
686         if (!acm->dev)
687                 acm_tty_unregister(acm);
688         mutex_unlock(&open_mutex);
689 }
690
691 static int acm_tty_write(struct tty_struct *tty,
692                                         const unsigned char *buf, int count)
693 {
694         struct acm *acm = tty->driver_data;
695         int stat;
696         unsigned long flags;
697         int wbn;
698         struct acm_wb *wb;
699
700         dbg("Entering acm_tty_write to write %d bytes,", count);
701
702         if (!ACM_READY(acm))
703                 return -EINVAL;
704         if (!count)
705                 return 0;
706
707         spin_lock_irqsave(&acm->write_lock, flags);
708         wbn = acm_wb_alloc(acm);
709         if (wbn < 0) {
710                 spin_unlock_irqrestore(&acm->write_lock, flags);
711                 return 0;
712         }
713         wb = &acm->wb[wbn];
714
715         count = (count > acm->writesize) ? acm->writesize : count;
716         dbg("Get %d bytes...", count);
717         memcpy(wb->buf, buf, count);
718         wb->len = count;
719         spin_unlock_irqrestore(&acm->write_lock, flags);
720
721         stat = acm_write_start(acm, wbn);
722         if (stat < 0)
723                 return stat;
724         return count;
725 }
726
727 static int acm_tty_write_room(struct tty_struct *tty)
728 {
729         struct acm *acm = tty->driver_data;
730         if (!ACM_READY(acm))
731                 return -EINVAL;
732         /*
733          * Do not let the line discipline to know that we have a reserve,
734          * or it might get too enthusiastic.
735          */
736         return acm_wb_is_avail(acm) ? acm->writesize : 0;
737 }
738
739 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
740 {
741         struct acm *acm = tty->driver_data;
742         if (!ACM_READY(acm))
743                 return -EINVAL;
744         /*
745          * This is inaccurate (overcounts), but it works.
746          */
747         return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
748 }
749
750 static void acm_tty_throttle(struct tty_struct *tty)
751 {
752         struct acm *acm = tty->driver_data;
753         if (!ACM_READY(acm))
754                 return;
755         spin_lock_bh(&acm->throttle_lock);
756         acm->throttle = 1;
757         spin_unlock_bh(&acm->throttle_lock);
758 }
759
760 static void acm_tty_unthrottle(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 = 0;
767         spin_unlock_bh(&acm->throttle_lock);
768         tasklet_schedule(&acm->urb_task);
769 }
770
771 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
772 {
773         struct acm *acm = tty->driver_data;
774         int retval;
775         if (!ACM_READY(acm))
776                 return -EINVAL;
777         retval = acm_send_break(acm, state ? 0xffff : 0);
778         if (retval < 0)
779                 dbg("send break failed");
780         return retval;
781 }
782
783 static int acm_tty_tiocmget(struct tty_struct *tty, struct file *file)
784 {
785         struct acm *acm = tty->driver_data;
786
787         if (!ACM_READY(acm))
788                 return -EINVAL;
789
790         return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
791                (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
792                (acm->ctrlin  & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
793                (acm->ctrlin  & ACM_CTRL_RI  ? TIOCM_RI  : 0) |
794                (acm->ctrlin  & ACM_CTRL_DCD ? TIOCM_CD  : 0) |
795                TIOCM_CTS;
796 }
797
798 static int acm_tty_tiocmset(struct tty_struct *tty, struct file *file,
799                             unsigned int set, unsigned int clear)
800 {
801         struct acm *acm = tty->driver_data;
802         unsigned int newctrl;
803
804         if (!ACM_READY(acm))
805                 return -EINVAL;
806
807         newctrl = acm->ctrlout;
808         set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
809                                         (set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
810         clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
811                                         (clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
812
813         newctrl = (newctrl & ~clear) | set;
814
815         if (acm->ctrlout == newctrl)
816                 return 0;
817         return acm_set_control(acm, acm->ctrlout = newctrl);
818 }
819
820 static int acm_tty_ioctl(struct tty_struct *tty, struct file *file,
821                                         unsigned int cmd, unsigned long arg)
822 {
823         struct acm *acm = tty->driver_data;
824
825         if (!ACM_READY(acm))
826                 return -EINVAL;
827
828         return -ENOIOCTLCMD;
829 }
830
831 static const __u32 acm_tty_speed[] = {
832         0, 50, 75, 110, 134, 150, 200, 300, 600,
833         1200, 1800, 2400, 4800, 9600, 19200, 38400,
834         57600, 115200, 230400, 460800, 500000, 576000,
835         921600, 1000000, 1152000, 1500000, 2000000,
836         2500000, 3000000, 3500000, 4000000
837 };
838
839 static const __u8 acm_tty_size[] = {
840         5, 6, 7, 8
841 };
842
843 static void acm_tty_set_termios(struct tty_struct *tty,
844                                                 struct ktermios *termios_old)
845 {
846         struct acm *acm = tty->driver_data;
847         struct ktermios *termios = tty->termios;
848         struct usb_cdc_line_coding newline;
849         int newctrl = acm->ctrlout;
850
851         if (!ACM_READY(acm))
852                 return;
853
854         /* FIXME: Needs to support the tty_baud interface */
855         /* FIXME: Broken on sparc */
856         newline.dwDTERate = cpu_to_le32p(acm_tty_speed +
857                 (termios->c_cflag & CBAUD & ~CBAUDEX) + (termios->c_cflag & CBAUDEX ? 15 : 0));
858         newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
859         newline.bParityType = termios->c_cflag & PARENB ?
860                                 (termios->c_cflag & PARODD ? 1 : 2) +
861                                 (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
862         newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
863         /* FIXME: Needs to clear unsupported bits in the termios */
864         acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
865
866         if (!newline.dwDTERate) {
867                 newline.dwDTERate = acm->line.dwDTERate;
868                 newctrl &= ~ACM_CTRL_DTR;
869         } else
870                 newctrl |=  ACM_CTRL_DTR;
871
872         if (newctrl != acm->ctrlout)
873                 acm_set_control(acm, acm->ctrlout = newctrl);
874
875         if (memcmp(&acm->line, &newline, sizeof newline)) {
876                 memcpy(&acm->line, &newline, sizeof newline);
877                 dbg("set line: %d %d %d %d", le32_to_cpu(newline.dwDTERate),
878                         newline.bCharFormat, newline.bParityType,
879                         newline.bDataBits);
880                 acm_set_line(acm, &acm->line);
881         }
882 }
883
884 /*
885  * USB probe and disconnect routines.
886  */
887
888 /* Little helpers: write/read buffers free */
889 static void acm_write_buffers_free(struct acm *acm)
890 {
891         int i;
892         struct acm_wb *wb;
893         struct usb_device *usb_dev = interface_to_usbdev(acm->control);
894
895         for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
896                 usb_buffer_free(usb_dev, acm->writesize, wb->buf, wb->dmah);
897 }
898
899 static void acm_read_buffers_free(struct acm *acm)
900 {
901         struct usb_device *usb_dev = interface_to_usbdev(acm->control);
902         int i, n = acm->rx_buflimit;
903
904         for (i = 0; i < n; i++)
905                 usb_buffer_free(usb_dev, acm->readsize,
906                                         acm->rb[i].base, acm->rb[i].dma);
907 }
908
909 /* Little helper: write buffers allocate */
910 static int acm_write_buffers_alloc(struct acm *acm)
911 {
912         int i;
913         struct acm_wb *wb;
914
915         for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
916                 wb->buf = usb_buffer_alloc(acm->dev, acm->writesize, GFP_KERNEL,
917                     &wb->dmah);
918                 if (!wb->buf) {
919                         while (i != 0) {
920                                 --i;
921                                 --wb;
922                                 usb_buffer_free(acm->dev, acm->writesize,
923                                     wb->buf, wb->dmah);
924                         }
925                         return -ENOMEM;
926                 }
927         }
928         return 0;
929 }
930
931 static int acm_probe(struct usb_interface *intf,
932                      const struct usb_device_id *id)
933 {
934         struct usb_cdc_union_desc *union_header = NULL;
935         struct usb_cdc_country_functional_desc *cfd = NULL;
936         unsigned char *buffer = intf->altsetting->extra;
937         int buflen = intf->altsetting->extralen;
938         struct usb_interface *control_interface;
939         struct usb_interface *data_interface;
940         struct usb_endpoint_descriptor *epctrl;
941         struct usb_endpoint_descriptor *epread;
942         struct usb_endpoint_descriptor *epwrite;
943         struct usb_device *usb_dev = interface_to_usbdev(intf);
944         struct acm *acm;
945         int minor;
946         int ctrlsize, readsize;
947         u8 *buf;
948         u8 ac_management_function = 0;
949         u8 call_management_function = 0;
950         int call_interface_num = -1;
951         int data_interface_num;
952         unsigned long quirks;
953         int num_rx_buf;
954         int i;
955
956         /* normal quirks */
957         quirks = (unsigned long)id->driver_info;
958         num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
959
960         /* handle quirks deadly to normal probing*/
961         if (quirks == NO_UNION_NORMAL) {
962                 data_interface = usb_ifnum_to_if(usb_dev, 1);
963                 control_interface = usb_ifnum_to_if(usb_dev, 0);
964                 goto skip_normal_probe;
965         }
966
967         /* normal probing*/
968         if (!buffer) {
969                 dev_err(&intf->dev, "Weird descriptor references\n");
970                 return -EINVAL;
971         }
972
973         if (!buflen) {
974                 if (intf->cur_altsetting->endpoint->extralen &&
975                                 intf->cur_altsetting->endpoint->extra) {
976                         dev_dbg(&intf->dev,
977                                 "Seeking extra descriptors on endpoint\n");
978                         buflen = intf->cur_altsetting->endpoint->extralen;
979                         buffer = intf->cur_altsetting->endpoint->extra;
980                 } else {
981                         dev_err(&intf->dev,
982                                 "Zero length descriptor references\n");
983                         return -EINVAL;
984                 }
985         }
986
987         while (buflen > 0) {
988                 if (buffer[1] != USB_DT_CS_INTERFACE) {
989                         dev_err(&intf->dev, "skipping garbage\n");
990                         goto next_desc;
991                 }
992
993                 switch (buffer[2]) {
994                 case USB_CDC_UNION_TYPE: /* we've found it */
995                         if (union_header) {
996                                 dev_err(&intf->dev, "More than one "
997                                         "union descriptor, skipping ...\n");
998                                 goto next_desc;
999                         }
1000                         union_header = (struct usb_cdc_union_desc *)buffer;
1001                         break;
1002                 case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
1003                         cfd = (struct usb_cdc_country_functional_desc *)buffer;
1004                         break;
1005                 case USB_CDC_HEADER_TYPE: /* maybe check version */
1006                         break; /* for now we ignore it */
1007                 case USB_CDC_ACM_TYPE:
1008                         ac_management_function = buffer[3];
1009                         break;
1010                 case USB_CDC_CALL_MANAGEMENT_TYPE:
1011                         call_management_function = buffer[3];
1012                         call_interface_num = buffer[4];
1013                         if ((call_management_function & 3) != 3)
1014                                 dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n");
1015                         break;
1016                 default:
1017                         /* there are LOTS more CDC descriptors that
1018                          * could legitimately be found here.
1019                          */
1020                         dev_dbg(&intf->dev, "Ignoring descriptor: "
1021                                         "type %02x, length %d\n",
1022                                         buffer[2], buffer[0]);
1023                         break;
1024                 }
1025 next_desc:
1026                 buflen -= buffer[0];
1027                 buffer += buffer[0];
1028         }
1029
1030         if (!union_header) {
1031                 if (call_interface_num > 0) {
1032                         dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1033                         data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
1034                         control_interface = intf;
1035                 } else {
1036                         dev_dbg(&intf->dev,
1037                                         "No union descriptor, giving up\n");
1038                         return -ENODEV;
1039                 }
1040         } else {
1041                 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1042                 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
1043                 if (!control_interface || !data_interface) {
1044                         dev_dbg(&intf->dev, "no interfaces\n");
1045                         return -ENODEV;
1046                 }
1047         }
1048
1049         if (data_interface_num != call_interface_num)
1050                 dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1051
1052 skip_normal_probe:
1053
1054         /*workaround for switched interfaces */
1055         if (data_interface->cur_altsetting->desc.bInterfaceClass
1056                                                 != CDC_DATA_INTERFACE_TYPE) {
1057                 if (control_interface->cur_altsetting->desc.bInterfaceClass
1058                                                 == CDC_DATA_INTERFACE_TYPE) {
1059                         struct usb_interface *t;
1060                         dev_dbg(&intf->dev,
1061                                 "Your device has switched interfaces.\n");
1062                         t = control_interface;
1063                         control_interface = data_interface;
1064                         data_interface = t;
1065                 } else {
1066                         return -EINVAL;
1067                 }
1068         }
1069
1070         /* Accept probe requests only for the control interface */
1071         if (intf != control_interface)
1072                 return -ENODEV;
1073
1074         if (usb_interface_claimed(data_interface)) { /* valid in this context */
1075                 dev_dbg(&intf->dev, "The data interface isn't available\n");
1076                 return -EBUSY;
1077         }
1078
1079
1080         if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
1081                 return -EINVAL;
1082
1083         epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1084         epread = &data_interface->cur_altsetting->endpoint[0].desc;
1085         epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1086
1087
1088         /* workaround for switched endpoints */
1089         if (!usb_endpoint_dir_in(epread)) {
1090                 /* descriptors are swapped */
1091                 struct usb_endpoint_descriptor *t;
1092                 dev_dbg(&intf->dev,
1093                         "The data interface has switched endpoints\n");
1094                 t = epread;
1095                 epread = epwrite;
1096                 epwrite = t;
1097         }
1098         dbg("interfaces are valid");
1099         for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
1100
1101         if (minor == ACM_TTY_MINORS) {
1102                 dev_err(&intf->dev, "no more free acm devices\n");
1103                 return -ENODEV;
1104         }
1105
1106         acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1107         if (acm == NULL) {
1108                 dev_dbg(&intf->dev, "out of memory (acm kzalloc)\n");
1109                 goto alloc_fail;
1110         }
1111
1112         ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize);
1113         readsize = le16_to_cpu(epread->wMaxPacketSize) *
1114                                 (quirks == SINGLE_RX_URB ? 1 : 2);
1115         acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize) * 20;
1116         acm->control = control_interface;
1117         acm->data = data_interface;
1118         acm->minor = minor;
1119         acm->dev = usb_dev;
1120         acm->ctrl_caps = ac_management_function;
1121         acm->ctrlsize = ctrlsize;
1122         acm->readsize = readsize;
1123         acm->rx_buflimit = num_rx_buf;
1124         acm->urb_task.func = acm_rx_tasklet;
1125         acm->urb_task.data = (unsigned long) acm;
1126         INIT_WORK(&acm->work, acm_softint);
1127         INIT_WORK(&acm->waker, acm_waker);
1128         init_waitqueue_head(&acm->drain_wait);
1129         spin_lock_init(&acm->throttle_lock);
1130         spin_lock_init(&acm->write_lock);
1131         spin_lock_init(&acm->read_lock);
1132         mutex_init(&acm->mutex);
1133         acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1134         tty_port_init(&acm->port);
1135         acm->port.ops = &acm_port_ops;
1136
1137         buf = usb_buffer_alloc(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1138         if (!buf) {
1139                 dev_dbg(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1140                 goto alloc_fail2;
1141         }
1142         acm->ctrl_buffer = buf;
1143
1144         if (acm_write_buffers_alloc(acm) < 0) {
1145                 dev_dbg(&intf->dev, "out of memory (write buffer alloc)\n");
1146                 goto alloc_fail4;
1147         }
1148
1149         acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1150         if (!acm->ctrlurb) {
1151                 dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1152                 goto alloc_fail5;
1153         }
1154         for (i = 0; i < num_rx_buf; i++) {
1155                 struct acm_ru *rcv = &(acm->ru[i]);
1156
1157                 rcv->urb = usb_alloc_urb(0, GFP_KERNEL);
1158                 if (rcv->urb == NULL) {
1159                         dev_dbg(&intf->dev,
1160                                 "out of memory (read urbs usb_alloc_urb)\n");
1161                         goto alloc_fail7;
1162                 }
1163
1164                 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1165                 rcv->instance = acm;
1166         }
1167         for (i = 0; i < num_rx_buf; i++) {
1168                 struct acm_rb *rb = &(acm->rb[i]);
1169
1170                 rb->base = usb_buffer_alloc(acm->dev, readsize,
1171                                 GFP_KERNEL, &rb->dma);
1172                 if (!rb->base) {
1173                         dev_dbg(&intf->dev,
1174                                 "out of memory (read bufs usb_buffer_alloc)\n");
1175                         goto alloc_fail7;
1176                 }
1177         }
1178         for (i = 0; i < ACM_NW; i++) {
1179                 struct acm_wb *snd = &(acm->wb[i]);
1180
1181                 snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1182                 if (snd->urb == NULL) {
1183                         dev_dbg(&intf->dev,
1184                                 "out of memory (write urbs usb_alloc_urb)");
1185                         goto alloc_fail7;
1186                 }
1187
1188                 usb_fill_bulk_urb(snd->urb, usb_dev,
1189                         usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1190                         NULL, acm->writesize, acm_write_bulk, snd);
1191                 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1192                 snd->instance = acm;
1193         }
1194
1195         usb_set_intfdata(intf, acm);
1196
1197         i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1198         if (i < 0)
1199                 goto alloc_fail8;
1200
1201         if (cfd) { /* export the country data */
1202                 acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1203                 if (!acm->country_codes)
1204                         goto skip_countries;
1205                 acm->country_code_size = cfd->bLength - 4;
1206                 memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1207                                                         cfd->bLength - 4);
1208                 acm->country_rel_date = cfd->iCountryCodeRelDate;
1209
1210                 i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1211                 if (i < 0) {
1212                         kfree(acm->country_codes);
1213                         goto skip_countries;
1214                 }
1215
1216                 i = device_create_file(&intf->dev,
1217                                                 &dev_attr_iCountryCodeRelDate);
1218                 if (i < 0) {
1219                         kfree(acm->country_codes);
1220                         goto skip_countries;
1221                 }
1222         }
1223
1224 skip_countries:
1225         usb_fill_int_urb(acm->ctrlurb, usb_dev,
1226                         usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1227                         acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1228                         epctrl->bInterval);
1229         acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1230         acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1231
1232         dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1233
1234         acm_set_control(acm, acm->ctrlout);
1235
1236         acm->line.dwDTERate = cpu_to_le32(9600);
1237         acm->line.bDataBits = 8;
1238         acm_set_line(acm, &acm->line);
1239
1240         usb_driver_claim_interface(&acm_driver, data_interface, acm);
1241         usb_set_intfdata(data_interface, acm);
1242
1243         usb_get_intf(control_interface);
1244         tty_register_device(acm_tty_driver, minor, &control_interface->dev);
1245
1246         acm_table[minor] = acm;
1247
1248         return 0;
1249 alloc_fail8:
1250         for (i = 0; i < ACM_NW; i++)
1251                 usb_free_urb(acm->wb[i].urb);
1252 alloc_fail7:
1253         acm_read_buffers_free(acm);
1254         for (i = 0; i < num_rx_buf; i++)
1255                 usb_free_urb(acm->ru[i].urb);
1256         usb_free_urb(acm->ctrlurb);
1257 alloc_fail5:
1258         acm_write_buffers_free(acm);
1259 alloc_fail4:
1260         usb_buffer_free(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1261 alloc_fail2:
1262         kfree(acm);
1263 alloc_fail:
1264         return -ENOMEM;
1265 }
1266
1267 static void stop_data_traffic(struct acm *acm)
1268 {
1269         int i;
1270         dbg("Entering stop_data_traffic");
1271
1272         tasklet_disable(&acm->urb_task);
1273
1274         usb_kill_urb(acm->ctrlurb);
1275         for (i = 0; i < ACM_NW; i++)
1276                 usb_kill_urb(acm->wb[i].urb);
1277         for (i = 0; i < acm->rx_buflimit; i++)
1278                 usb_kill_urb(acm->ru[i].urb);
1279
1280         tasklet_enable(&acm->urb_task);
1281
1282         cancel_work_sync(&acm->work);
1283         cancel_work_sync(&acm->waker);
1284 }
1285
1286 static void acm_disconnect(struct usb_interface *intf)
1287 {
1288         struct acm *acm = usb_get_intfdata(intf);
1289         struct usb_device *usb_dev = interface_to_usbdev(intf);
1290         struct tty_struct *tty;
1291
1292         /* sibling interface is already cleaning up */
1293         if (!acm)
1294                 return;
1295
1296         mutex_lock(&open_mutex);
1297         if (acm->country_codes) {
1298                 device_remove_file(&acm->control->dev,
1299                                 &dev_attr_wCountryCodes);
1300                 device_remove_file(&acm->control->dev,
1301                                 &dev_attr_iCountryCodeRelDate);
1302         }
1303         device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1304         acm->dev = NULL;
1305         usb_set_intfdata(acm->control, NULL);
1306         usb_set_intfdata(acm->data, NULL);
1307
1308         stop_data_traffic(acm);
1309
1310         acm_write_buffers_free(acm);
1311         usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer,
1312                                                                 acm->ctrl_dma);
1313         acm_read_buffers_free(acm);
1314
1315         usb_driver_release_interface(&acm_driver, intf == acm->control ?
1316                                         acm->data : acm->control);
1317
1318         if (acm->port.count == 0) {
1319                 acm_tty_unregister(acm);
1320                 mutex_unlock(&open_mutex);
1321                 return;
1322         }
1323
1324         mutex_unlock(&open_mutex);
1325         tty = tty_port_tty_get(&acm->port);
1326         if (tty) {
1327                 tty_hangup(tty);
1328                 tty_kref_put(tty);
1329         }
1330 }
1331
1332 #ifdef CONFIG_PM
1333 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1334 {
1335         struct acm *acm = usb_get_intfdata(intf);
1336         int cnt;
1337
1338         if (message.event & PM_EVENT_AUTO) {
1339                 int b;
1340
1341                 spin_lock_irq(&acm->read_lock);
1342                 spin_lock(&acm->write_lock);
1343                 b = acm->processing + acm->transmitting;
1344                 spin_unlock(&acm->write_lock);
1345                 spin_unlock_irq(&acm->read_lock);
1346                 if (b)
1347                         return -EBUSY;
1348         }
1349
1350         spin_lock_irq(&acm->read_lock);
1351         spin_lock(&acm->write_lock);
1352         cnt = acm->susp_count++;
1353         spin_unlock(&acm->write_lock);
1354         spin_unlock_irq(&acm->read_lock);
1355
1356         if (cnt)
1357                 return 0;
1358         /*
1359         we treat opened interfaces differently,
1360         we must guard against open
1361         */
1362         mutex_lock(&acm->mutex);
1363
1364         if (acm->port.count)
1365                 stop_data_traffic(acm);
1366
1367         mutex_unlock(&acm->mutex);
1368         return 0;
1369 }
1370
1371 static int acm_resume(struct usb_interface *intf)
1372 {
1373         struct acm *acm = usb_get_intfdata(intf);
1374         int rv = 0;
1375         int cnt;
1376
1377         spin_lock_irq(&acm->read_lock);
1378         acm->susp_count -= 1;
1379         cnt = acm->susp_count;
1380         spin_unlock_irq(&acm->read_lock);
1381
1382         if (cnt)
1383                 return 0;
1384
1385         mutex_lock(&acm->mutex);
1386         if (acm->port.count) {
1387                 rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
1388                 if (rv < 0)
1389                         goto err_out;
1390
1391                 tasklet_schedule(&acm->urb_task);
1392         }
1393
1394 err_out:
1395         mutex_unlock(&acm->mutex);
1396         return rv;
1397 }
1398
1399 #endif /* CONFIG_PM */
1400 /*
1401  * USB driver structure.
1402  */
1403
1404 static struct usb_device_id acm_ids[] = {
1405         /* quirky and broken devices */
1406         { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1407         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1408         },
1409         { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1410         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1411         },
1412         { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1413         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1414         },
1415         { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1416         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1417         },
1418         { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1419         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1420         },
1421         { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1422         .driver_info = SINGLE_RX_URB,
1423         },
1424         { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1425         .driver_info = SINGLE_RX_URB, /* firmware bug */
1426         },
1427         { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1428         .driver_info = SINGLE_RX_URB, /* firmware bug */
1429         },
1430         { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1431         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1432         },
1433         { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1434         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1435         },
1436         { USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1437         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1438         },
1439         { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1440         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1441         },
1442         { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1443         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1444         },
1445         { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1446         },
1447         { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1448         .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1449                                            data interface instead of
1450                                            communications interface.
1451                                            Maybe we should define a new
1452                                            quirk for this. */
1453         },
1454
1455         /* control interfaces with various AT-command sets */
1456         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1457                 USB_CDC_ACM_PROTO_AT_V25TER) },
1458         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1459                 USB_CDC_ACM_PROTO_AT_PCCA101) },
1460         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1461                 USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1462         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1463                 USB_CDC_ACM_PROTO_AT_GSM) },
1464         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1465                 USB_CDC_ACM_PROTO_AT_3G) },
1466         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1467                 USB_CDC_ACM_PROTO_AT_CDMA) },
1468
1469         /* NOTE:  COMM/ACM/0xff is likely MSFT RNDIS ... NOT a modem!! */
1470         { }
1471 };
1472
1473 MODULE_DEVICE_TABLE(usb, acm_ids);
1474
1475 static struct usb_driver acm_driver = {
1476         .name =         "cdc_acm",
1477         .probe =        acm_probe,
1478         .disconnect =   acm_disconnect,
1479 #ifdef CONFIG_PM
1480         .suspend =      acm_suspend,
1481         .resume =       acm_resume,
1482 #endif
1483         .id_table =     acm_ids,
1484 #ifdef CONFIG_PM
1485         .supports_autosuspend = 1,
1486 #endif
1487 };
1488
1489 /*
1490  * TTY driver structures.
1491  */
1492
1493 static const struct tty_operations acm_ops = {
1494         .open =                 acm_tty_open,
1495         .close =                acm_tty_close,
1496         .hangup =               acm_tty_hangup,
1497         .write =                acm_tty_write,
1498         .write_room =           acm_tty_write_room,
1499         .ioctl =                acm_tty_ioctl,
1500         .throttle =             acm_tty_throttle,
1501         .unthrottle =           acm_tty_unthrottle,
1502         .chars_in_buffer =      acm_tty_chars_in_buffer,
1503         .break_ctl =            acm_tty_break_ctl,
1504         .set_termios =          acm_tty_set_termios,
1505         .tiocmget =             acm_tty_tiocmget,
1506         .tiocmset =             acm_tty_tiocmset,
1507 };
1508
1509 /*
1510  * Init / exit.
1511  */
1512
1513 static int __init acm_init(void)
1514 {
1515         int retval;
1516         acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1517         if (!acm_tty_driver)
1518                 return -ENOMEM;
1519         acm_tty_driver->owner = THIS_MODULE,
1520         acm_tty_driver->driver_name = "acm",
1521         acm_tty_driver->name = "ttyACM",
1522         acm_tty_driver->major = ACM_TTY_MAJOR,
1523         acm_tty_driver->minor_start = 0,
1524         acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1525         acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1526         acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1527         acm_tty_driver->init_termios = tty_std_termios;
1528         acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
1529                                                                 HUPCL | CLOCAL;
1530         tty_set_operations(acm_tty_driver, &acm_ops);
1531
1532         retval = tty_register_driver(acm_tty_driver);
1533         if (retval) {
1534                 put_tty_driver(acm_tty_driver);
1535                 return retval;
1536         }
1537
1538         retval = usb_register(&acm_driver);
1539         if (retval) {
1540                 tty_unregister_driver(acm_tty_driver);
1541                 put_tty_driver(acm_tty_driver);
1542                 return retval;
1543         }
1544
1545         printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
1546                DRIVER_DESC "\n");
1547
1548         return 0;
1549 }
1550
1551 static void __exit acm_exit(void)
1552 {
1553         usb_deregister(&acm_driver);
1554         tty_unregister_driver(acm_tty_driver);
1555         put_tty_driver(acm_tty_driver);
1556 }
1557
1558 module_init(acm_init);
1559 module_exit(acm_exit);
1560
1561 MODULE_AUTHOR(DRIVER_AUTHOR);
1562 MODULE_DESCRIPTION(DRIVER_DESC);
1563 MODULE_LICENSE("GPL");
1564 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);