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