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