GNU Linux-libre 4.14.265-gnu1
[releases.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  * Copyright (c) 2011 Johan Hovold      <jhovold@gmail.com>
11  *
12  * USB Abstract Control Model driver for USB modems and ISDN adapters
13  *
14  * Sponsored by SuSE
15  *
16  * This program is free software; you can redistribute it and/or modify
17  * it under the terms of the GNU General Public License as published by
18  * the Free Software Foundation; either version 2 of the License, or
19  * (at your option) any later version.
20  *
21  * This program is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
24  * GNU General Public License for more details.
25  *
26  * You should have received a copy of the GNU General Public License
27  * along with this program; if not, write to the Free Software
28  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29  */
30
31 #undef DEBUG
32 #undef VERBOSE_DEBUG
33
34 #include <linux/kernel.h>
35 #include <linux/sched/signal.h>
36 #include <linux/errno.h>
37 #include <linux/init.h>
38 #include <linux/slab.h>
39 #include <linux/log2.h>
40 #include <linux/tty.h>
41 #include <linux/serial.h>
42 #include <linux/tty_driver.h>
43 #include <linux/tty_flip.h>
44 #include <linux/module.h>
45 #include <linux/mutex.h>
46 #include <linux/uaccess.h>
47 #include <linux/usb.h>
48 #include <linux/usb/cdc.h>
49 #include <asm/byteorder.h>
50 #include <asm/unaligned.h>
51 #include <linux/idr.h>
52 #include <linux/list.h>
53
54 #include "cdc-acm.h"
55
56
57 #define DRIVER_AUTHOR "Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik, David Kubicek, Johan Hovold"
58 #define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters"
59
60 static struct usb_driver acm_driver;
61 static struct tty_driver *acm_tty_driver;
62
63 static DEFINE_IDR(acm_minors);
64 static DEFINE_MUTEX(acm_minors_lock);
65
66 static void acm_tty_set_termios(struct tty_struct *tty,
67                                 struct ktermios *termios_old);
68
69 /*
70  * acm_minors accessors
71  */
72
73 /*
74  * Look up an ACM structure by minor. If found and not disconnected, increment
75  * its refcount and return it with its mutex held.
76  */
77 static struct acm *acm_get_by_minor(unsigned int minor)
78 {
79         struct acm *acm;
80
81         mutex_lock(&acm_minors_lock);
82         acm = idr_find(&acm_minors, minor);
83         if (acm) {
84                 mutex_lock(&acm->mutex);
85                 if (acm->disconnected) {
86                         mutex_unlock(&acm->mutex);
87                         acm = NULL;
88                 } else {
89                         tty_port_get(&acm->port);
90                         mutex_unlock(&acm->mutex);
91                 }
92         }
93         mutex_unlock(&acm_minors_lock);
94         return acm;
95 }
96
97 /*
98  * Try to find an available minor number and if found, associate it with 'acm'.
99  */
100 static int acm_alloc_minor(struct acm *acm)
101 {
102         int minor;
103
104         mutex_lock(&acm_minors_lock);
105         minor = idr_alloc(&acm_minors, acm, 0, ACM_TTY_MINORS, GFP_KERNEL);
106         mutex_unlock(&acm_minors_lock);
107
108         return minor;
109 }
110
111 /* Release the minor number associated with 'acm'.  */
112 static void acm_release_minor(struct acm *acm)
113 {
114         mutex_lock(&acm_minors_lock);
115         idr_remove(&acm_minors, acm->minor);
116         mutex_unlock(&acm_minors_lock);
117 }
118
119 /*
120  * Functions for ACM control messages.
121  */
122
123 static int acm_ctrl_msg(struct acm *acm, int request, int value,
124                                                         void *buf, int len)
125 {
126         int retval;
127
128         retval = usb_autopm_get_interface(acm->control);
129         if (retval)
130                 return retval;
131
132         retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
133                 request, USB_RT_ACM, value,
134                 acm->control->altsetting[0].desc.bInterfaceNumber,
135                 buf, len, 5000);
136
137         dev_dbg(&acm->control->dev,
138                 "%s - rq 0x%02x, val %#x, len %#x, result %d\n",
139                 __func__, request, value, len, retval);
140
141         usb_autopm_put_interface(acm->control);
142
143         return retval < 0 ? retval : 0;
144 }
145
146 /* devices aren't required to support these requests.
147  * the cdc acm descriptor tells whether they do...
148  */
149 static inline int acm_set_control(struct acm *acm, int control)
150 {
151         if (acm->quirks & QUIRK_CONTROL_LINE_STATE)
152                 return -EOPNOTSUPP;
153
154         return acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE,
155                         control, NULL, 0);
156 }
157
158 #define acm_set_line(acm, line) \
159         acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
160 #define acm_send_break(acm, ms) \
161         acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
162
163 static void acm_poison_urbs(struct acm *acm)
164 {
165         int i;
166
167         usb_poison_urb(acm->ctrlurb);
168         for (i = 0; i < ACM_NW; i++)
169                 usb_poison_urb(acm->wb[i].urb);
170         for (i = 0; i < acm->rx_buflimit; i++)
171                 usb_poison_urb(acm->read_urbs[i]);
172 }
173
174 static void acm_unpoison_urbs(struct acm *acm)
175 {
176         int i;
177
178         for (i = 0; i < acm->rx_buflimit; i++)
179                 usb_unpoison_urb(acm->read_urbs[i]);
180         for (i = 0; i < ACM_NW; i++)
181                 usb_unpoison_urb(acm->wb[i].urb);
182         usb_unpoison_urb(acm->ctrlurb);
183 }
184
185
186 /*
187  * Write buffer management.
188  * All of these assume proper locks taken by the caller.
189  */
190
191 static int acm_wb_alloc(struct acm *acm)
192 {
193         int i, wbn;
194         struct acm_wb *wb;
195
196         wbn = 0;
197         i = 0;
198         for (;;) {
199                 wb = &acm->wb[wbn];
200                 if (!wb->use) {
201                         wb->use = 1;
202                         wb->len = 0;
203                         return wbn;
204                 }
205                 wbn = (wbn + 1) % ACM_NW;
206                 if (++i >= ACM_NW)
207                         return -1;
208         }
209 }
210
211 static int acm_wb_is_avail(struct acm *acm)
212 {
213         int i, n;
214         unsigned long flags;
215
216         n = ACM_NW;
217         spin_lock_irqsave(&acm->write_lock, flags);
218         for (i = 0; i < ACM_NW; i++)
219                 n -= acm->wb[i].use;
220         spin_unlock_irqrestore(&acm->write_lock, flags);
221         return n;
222 }
223
224 /*
225  * Finish write. Caller must hold acm->write_lock
226  */
227 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
228 {
229         wb->use = 0;
230         acm->transmitting--;
231         usb_autopm_put_interface_async(acm->control);
232 }
233
234 /*
235  * Poke write.
236  *
237  * the caller is responsible for locking
238  */
239
240 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
241 {
242         int rc;
243
244         acm->transmitting++;
245
246         wb->urb->transfer_buffer = wb->buf;
247         wb->urb->transfer_dma = wb->dmah;
248         wb->urb->transfer_buffer_length = wb->len;
249         wb->urb->dev = acm->dev;
250
251         rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
252         if (rc < 0) {
253                 if (rc != -EPERM)
254                         dev_err(&acm->data->dev,
255                                 "%s - usb_submit_urb(write bulk) failed: %d\n",
256                                 __func__, rc);
257                 acm_write_done(acm, wb);
258         }
259         return rc;
260 }
261
262 /*
263  * attributes exported through sysfs
264  */
265 static ssize_t show_caps
266 (struct device *dev, struct device_attribute *attr, char *buf)
267 {
268         struct usb_interface *intf = to_usb_interface(dev);
269         struct acm *acm = usb_get_intfdata(intf);
270
271         return sprintf(buf, "%d", acm->ctrl_caps);
272 }
273 static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
274
275 static ssize_t show_country_codes
276 (struct device *dev, struct device_attribute *attr, char *buf)
277 {
278         struct usb_interface *intf = to_usb_interface(dev);
279         struct acm *acm = usb_get_intfdata(intf);
280
281         memcpy(buf, acm->country_codes, acm->country_code_size);
282         return acm->country_code_size;
283 }
284
285 static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
286
287 static ssize_t show_country_rel_date
288 (struct device *dev, struct device_attribute *attr, char *buf)
289 {
290         struct usb_interface *intf = to_usb_interface(dev);
291         struct acm *acm = usb_get_intfdata(intf);
292
293         return sprintf(buf, "%d", acm->country_rel_date);
294 }
295
296 static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
297 /*
298  * Interrupt handlers for various ACM device responses
299  */
300
301 static void acm_process_notification(struct acm *acm, unsigned char *buf)
302 {
303         int newctrl;
304         int difference;
305         struct usb_cdc_notification *dr = (struct usb_cdc_notification *)buf;
306         unsigned char *data = buf + sizeof(struct usb_cdc_notification);
307
308         switch (dr->bNotificationType) {
309         case USB_CDC_NOTIFY_NETWORK_CONNECTION:
310                 dev_dbg(&acm->control->dev,
311                         "%s - network connection: %d\n", __func__, dr->wValue);
312                 break;
313
314         case USB_CDC_NOTIFY_SERIAL_STATE:
315                 if (le16_to_cpu(dr->wLength) != 2) {
316                         dev_dbg(&acm->control->dev,
317                                 "%s - malformed serial state\n", __func__);
318                         break;
319                 }
320
321                 newctrl = get_unaligned_le16(data);
322                 dev_dbg(&acm->control->dev,
323                         "%s - serial state: 0x%x\n", __func__, newctrl);
324
325                 if (!acm->clocal && (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
326                         dev_dbg(&acm->control->dev,
327                                 "%s - calling hangup\n", __func__);
328                         tty_port_tty_hangup(&acm->port, false);
329                 }
330
331                 difference = acm->ctrlin ^ newctrl;
332                 spin_lock(&acm->read_lock);
333                 acm->ctrlin = newctrl;
334                 acm->oldcount = acm->iocount;
335
336                 if (difference & ACM_CTRL_DSR)
337                         acm->iocount.dsr++;
338                 if (difference & ACM_CTRL_DCD)
339                         acm->iocount.dcd++;
340                 if (newctrl & ACM_CTRL_BRK) {
341                         acm->iocount.brk++;
342                         tty_insert_flip_char(&acm->port, 0, TTY_BREAK);
343                 }
344                 if (newctrl & ACM_CTRL_RI)
345                         acm->iocount.rng++;
346                 if (newctrl & ACM_CTRL_FRAMING)
347                         acm->iocount.frame++;
348                 if (newctrl & ACM_CTRL_PARITY)
349                         acm->iocount.parity++;
350                 if (newctrl & ACM_CTRL_OVERRUN)
351                         acm->iocount.overrun++;
352                 spin_unlock(&acm->read_lock);
353
354                 if (newctrl & ACM_CTRL_BRK)
355                         tty_flip_buffer_push(&acm->port);
356
357                 if (difference)
358                         wake_up_all(&acm->wioctl);
359
360                 break;
361
362         default:
363                 dev_dbg(&acm->control->dev,
364                         "%s - unknown notification %d received: index %d len %d\n",
365                         __func__,
366                         dr->bNotificationType, dr->wIndex, dr->wLength);
367         }
368 }
369
370 /* control interface reports status changes with "interrupt" transfers */
371 static void acm_ctrl_irq(struct urb *urb)
372 {
373         struct acm *acm = urb->context;
374         struct usb_cdc_notification *dr = urb->transfer_buffer;
375         unsigned int current_size = urb->actual_length;
376         unsigned int expected_size, copy_size, alloc_size;
377         int retval;
378         int status = urb->status;
379
380         switch (status) {
381         case 0:
382                 /* success */
383                 break;
384         case -ECONNRESET:
385         case -ENOENT:
386         case -ESHUTDOWN:
387                 /* this urb is terminated, clean up */
388                 dev_dbg(&acm->control->dev,
389                         "%s - urb shutting down with status: %d\n",
390                         __func__, status);
391                 return;
392         default:
393                 dev_dbg(&acm->control->dev,
394                         "%s - nonzero urb status received: %d\n",
395                         __func__, status);
396                 goto exit;
397         }
398
399         usb_mark_last_busy(acm->dev);
400
401         if (acm->nb_index)
402                 dr = (struct usb_cdc_notification *)acm->notification_buffer;
403
404         /* size = notification-header + (optional) data */
405         expected_size = sizeof(struct usb_cdc_notification) +
406                                         le16_to_cpu(dr->wLength);
407
408         if (current_size < expected_size) {
409                 /* notification is transmitted fragmented, reassemble */
410                 if (acm->nb_size < expected_size) {
411                         u8 *new_buffer;
412                         alloc_size = roundup_pow_of_two(expected_size);
413                         /* Final freeing is done on disconnect. */
414                         new_buffer = krealloc(acm->notification_buffer,
415                                               alloc_size, GFP_ATOMIC);
416                         if (!new_buffer) {
417                                 acm->nb_index = 0;
418                                 goto exit;
419                         }
420
421                         acm->notification_buffer = new_buffer;
422                         acm->nb_size = alloc_size;
423                         dr = (struct usb_cdc_notification *)acm->notification_buffer;
424                 }
425
426                 copy_size = min(current_size,
427                                 expected_size - acm->nb_index);
428
429                 memcpy(&acm->notification_buffer[acm->nb_index],
430                        urb->transfer_buffer, copy_size);
431                 acm->nb_index += copy_size;
432                 current_size = acm->nb_index;
433         }
434
435         if (current_size >= expected_size) {
436                 /* notification complete */
437                 acm_process_notification(acm, (unsigned char *)dr);
438                 acm->nb_index = 0;
439         }
440
441 exit:
442         retval = usb_submit_urb(urb, GFP_ATOMIC);
443         if (retval && retval != -EPERM && retval != -ENODEV)
444                 dev_err(&acm->control->dev,
445                         "%s - usb_submit_urb failed: %d\n", __func__, retval);
446         else
447                 dev_vdbg(&acm->control->dev,
448                         "control resubmission terminated %d\n", retval);
449 }
450
451 static int acm_submit_read_urb(struct acm *acm, int index, gfp_t mem_flags)
452 {
453         int res;
454
455         if (!test_and_clear_bit(index, &acm->read_urbs_free))
456                 return 0;
457
458         res = usb_submit_urb(acm->read_urbs[index], mem_flags);
459         if (res) {
460                 if (res != -EPERM && res != -ENODEV) {
461                         dev_err(&acm->data->dev,
462                                 "urb %d failed submission with %d\n",
463                                 index, res);
464                 } else {
465                         dev_vdbg(&acm->data->dev, "intended failure %d\n", res);
466                 }
467                 set_bit(index, &acm->read_urbs_free);
468                 return res;
469         } else {
470                 dev_vdbg(&acm->data->dev, "submitted urb %d\n", index);
471         }
472
473         return 0;
474 }
475
476 static int acm_submit_read_urbs(struct acm *acm, gfp_t mem_flags)
477 {
478         int res;
479         int i;
480
481         for (i = 0; i < acm->rx_buflimit; ++i) {
482                 res = acm_submit_read_urb(acm, i, mem_flags);
483                 if (res)
484                         return res;
485         }
486
487         return 0;
488 }
489
490 static void acm_process_read_urb(struct acm *acm, struct urb *urb)
491 {
492         unsigned long flags;
493
494         if (!urb->actual_length)
495                 return;
496
497         spin_lock_irqsave(&acm->read_lock, flags);
498         tty_insert_flip_string(&acm->port, urb->transfer_buffer,
499                         urb->actual_length);
500         spin_unlock_irqrestore(&acm->read_lock, flags);
501
502         tty_flip_buffer_push(&acm->port);
503 }
504
505 static void acm_read_bulk_callback(struct urb *urb)
506 {
507         struct acm_rb *rb = urb->context;
508         struct acm *acm = rb->instance;
509         unsigned long flags;
510         int status = urb->status;
511         bool stopped = false;
512         bool stalled = false;
513         bool cooldown = false;
514
515         dev_vdbg(&acm->data->dev, "got urb %d, len %d, status %d\n",
516                 rb->index, urb->actual_length, status);
517
518         switch (status) {
519         case 0:
520                 usb_mark_last_busy(acm->dev);
521                 acm_process_read_urb(acm, urb);
522                 break;
523         case -EPIPE:
524                 set_bit(EVENT_RX_STALL, &acm->flags);
525                 stalled = true;
526                 break;
527         case -ENOENT:
528         case -ECONNRESET:
529         case -ESHUTDOWN:
530                 dev_dbg(&acm->data->dev,
531                         "%s - urb shutting down with status: %d\n",
532                         __func__, status);
533                 stopped = true;
534                 break;
535         case -EOVERFLOW:
536         case -EPROTO:
537                 dev_dbg(&acm->data->dev,
538                         "%s - cooling babbling device\n", __func__);
539                 usb_mark_last_busy(acm->dev);
540                 set_bit(rb->index, &acm->urbs_in_error_delay);
541                 set_bit(ACM_ERROR_DELAY, &acm->flags);
542                 cooldown = true;
543                 break;
544         default:
545                 dev_dbg(&acm->data->dev,
546                         "%s - nonzero urb status received: %d\n",
547                         __func__, status);
548                 break;
549         }
550
551         /*
552          * Make sure URB processing is done before marking as free to avoid
553          * racing with unthrottle() on another CPU. Matches the barriers
554          * implied by the test_and_clear_bit() in acm_submit_read_urb().
555          */
556         smp_mb__before_atomic();
557         set_bit(rb->index, &acm->read_urbs_free);
558         /*
559          * Make sure URB is marked as free before checking the throttled flag
560          * to avoid racing with unthrottle() on another CPU. Matches the
561          * smp_mb() in unthrottle().
562          */
563         smp_mb__after_atomic();
564
565         if (stopped || stalled || cooldown) {
566                 if (stalled)
567                         schedule_delayed_work(&acm->dwork, 0);
568                 else if (cooldown)
569                         schedule_delayed_work(&acm->dwork, HZ / 2);
570                 return;
571         }
572
573         /* throttle device if requested by tty */
574         spin_lock_irqsave(&acm->read_lock, flags);
575         acm->throttled = acm->throttle_req;
576         if (!acm->throttled) {
577                 spin_unlock_irqrestore(&acm->read_lock, flags);
578                 acm_submit_read_urb(acm, rb->index, GFP_ATOMIC);
579         } else {
580                 spin_unlock_irqrestore(&acm->read_lock, flags);
581         }
582 }
583
584 /* data interface wrote those outgoing bytes */
585 static void acm_write_bulk(struct urb *urb)
586 {
587         struct acm_wb *wb = urb->context;
588         struct acm *acm = wb->instance;
589         unsigned long flags;
590         int status = urb->status;
591
592         if (status || (urb->actual_length != urb->transfer_buffer_length))
593                 dev_vdbg(&acm->data->dev, "wrote len %d/%d, status %d\n",
594                         urb->actual_length,
595                         urb->transfer_buffer_length,
596                         status);
597
598         spin_lock_irqsave(&acm->write_lock, flags);
599         acm_write_done(acm, wb);
600         spin_unlock_irqrestore(&acm->write_lock, flags);
601         set_bit(EVENT_TTY_WAKEUP, &acm->flags);
602         schedule_delayed_work(&acm->dwork, 0);
603 }
604
605 static void acm_softint(struct work_struct *work)
606 {
607         int i;
608         struct acm *acm = container_of(work, struct acm, dwork.work);
609
610         if (test_bit(EVENT_RX_STALL, &acm->flags)) {
611                 smp_mb(); /* against acm_suspend() */
612                 if (!acm->susp_count) {
613                         for (i = 0; i < acm->rx_buflimit; i++)
614                                 usb_kill_urb(acm->read_urbs[i]);
615                         usb_clear_halt(acm->dev, acm->in);
616                         acm_submit_read_urbs(acm, GFP_KERNEL);
617                         clear_bit(EVENT_RX_STALL, &acm->flags);
618                 }
619         }
620
621         if (test_and_clear_bit(ACM_ERROR_DELAY, &acm->flags)) {
622                 for (i = 0; i < acm->rx_buflimit; i++)
623                         if (test_and_clear_bit(i, &acm->urbs_in_error_delay))
624                                 acm_submit_read_urb(acm, i, GFP_KERNEL);
625         }
626
627         if (test_and_clear_bit(EVENT_TTY_WAKEUP, &acm->flags))
628                 tty_port_tty_wakeup(&acm->port);
629 }
630
631 /*
632  * TTY handlers
633  */
634
635 static int acm_tty_install(struct tty_driver *driver, struct tty_struct *tty)
636 {
637         struct acm *acm;
638         int retval;
639
640         acm = acm_get_by_minor(tty->index);
641         if (!acm)
642                 return -ENODEV;
643
644         retval = tty_standard_install(driver, tty);
645         if (retval)
646                 goto error_init_termios;
647
648         /*
649          * Suppress initial echoing for some devices which might send data
650          * immediately after acm driver has been installed.
651          */
652         if (acm->quirks & DISABLE_ECHO)
653                 tty->termios.c_lflag &= ~ECHO;
654
655         tty->driver_data = acm;
656
657         return 0;
658
659 error_init_termios:
660         tty_port_put(&acm->port);
661         return retval;
662 }
663
664 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
665 {
666         struct acm *acm = tty->driver_data;
667
668         return tty_port_open(&acm->port, tty, filp);
669 }
670
671 static void acm_port_dtr_rts(struct tty_port *port, int raise)
672 {
673         struct acm *acm = container_of(port, struct acm, port);
674         int val;
675         int res;
676
677         if (raise)
678                 val = ACM_CTRL_DTR | ACM_CTRL_RTS;
679         else
680                 val = 0;
681
682         /* FIXME: add missing ctrlout locking throughout driver */
683         acm->ctrlout = val;
684
685         res = acm_set_control(acm, val);
686         if (res && (acm->ctrl_caps & USB_CDC_CAP_LINE))
687                 /* This is broken in too many devices to spam the logs */
688                 dev_dbg(&acm->control->dev, "failed to set dtr/rts\n");
689 }
690
691 static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
692 {
693         struct acm *acm = container_of(port, struct acm, port);
694         int retval = -ENODEV;
695         int i;
696
697         mutex_lock(&acm->mutex);
698         if (acm->disconnected)
699                 goto disconnected;
700
701         retval = usb_autopm_get_interface(acm->control);
702         if (retval)
703                 goto error_get_interface;
704
705         /*
706          * FIXME: Why do we need this? Allocating 64K of physically contiguous
707          * memory is really nasty...
708          */
709         set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
710         acm->control->needs_remote_wakeup = 1;
711
712         acm->ctrlurb->dev = acm->dev;
713         retval = usb_submit_urb(acm->ctrlurb, GFP_KERNEL);
714         if (retval) {
715                 dev_err(&acm->control->dev,
716                         "%s - usb_submit_urb(ctrl irq) failed\n", __func__);
717                 goto error_submit_urb;
718         }
719
720         acm_tty_set_termios(tty, NULL);
721
722         /*
723          * Unthrottle device in case the TTY was closed while throttled.
724          */
725         spin_lock_irq(&acm->read_lock);
726         acm->throttled = 0;
727         acm->throttle_req = 0;
728         spin_unlock_irq(&acm->read_lock);
729
730         retval = acm_submit_read_urbs(acm, GFP_KERNEL);
731         if (retval)
732                 goto error_submit_read_urbs;
733
734         usb_autopm_put_interface(acm->control);
735
736         mutex_unlock(&acm->mutex);
737
738         return 0;
739
740 error_submit_read_urbs:
741         for (i = 0; i < acm->rx_buflimit; i++)
742                 usb_kill_urb(acm->read_urbs[i]);
743         usb_kill_urb(acm->ctrlurb);
744 error_submit_urb:
745         usb_autopm_put_interface(acm->control);
746 error_get_interface:
747 disconnected:
748         mutex_unlock(&acm->mutex);
749
750         return usb_translate_errors(retval);
751 }
752
753 static void acm_port_destruct(struct tty_port *port)
754 {
755         struct acm *acm = container_of(port, struct acm, port);
756
757         acm_release_minor(acm);
758         usb_put_intf(acm->control);
759         kfree(acm->country_codes);
760         kfree(acm);
761 }
762
763 static void acm_port_shutdown(struct tty_port *port)
764 {
765         struct acm *acm = container_of(port, struct acm, port);
766         struct urb *urb;
767         struct acm_wb *wb;
768
769         /*
770          * Need to grab write_lock to prevent race with resume, but no need to
771          * hold it due to the tty-port initialised flag.
772          */
773         acm_poison_urbs(acm);
774         spin_lock_irq(&acm->write_lock);
775         spin_unlock_irq(&acm->write_lock);
776
777         usb_autopm_get_interface_no_resume(acm->control);
778         acm->control->needs_remote_wakeup = 0;
779         usb_autopm_put_interface(acm->control);
780
781         for (;;) {
782                 urb = usb_get_from_anchor(&acm->delayed);
783                 if (!urb)
784                         break;
785                 wb = urb->context;
786                 wb->use = 0;
787                 usb_autopm_put_interface_async(acm->control);
788         }
789
790         acm_unpoison_urbs(acm);
791
792 }
793
794 static void acm_tty_cleanup(struct tty_struct *tty)
795 {
796         struct acm *acm = tty->driver_data;
797
798         tty_port_put(&acm->port);
799 }
800
801 static void acm_tty_hangup(struct tty_struct *tty)
802 {
803         struct acm *acm = tty->driver_data;
804
805         tty_port_hangup(&acm->port);
806 }
807
808 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
809 {
810         struct acm *acm = tty->driver_data;
811
812         tty_port_close(&acm->port, tty, filp);
813 }
814
815 static int acm_tty_write(struct tty_struct *tty,
816                                         const unsigned char *buf, int count)
817 {
818         struct acm *acm = tty->driver_data;
819         int stat;
820         unsigned long flags;
821         int wbn;
822         struct acm_wb *wb;
823
824         if (!count)
825                 return 0;
826
827         dev_vdbg(&acm->data->dev, "%d bytes from tty layer\n", count);
828
829         spin_lock_irqsave(&acm->write_lock, flags);
830         wbn = acm_wb_alloc(acm);
831         if (wbn < 0) {
832                 spin_unlock_irqrestore(&acm->write_lock, flags);
833                 return 0;
834         }
835         wb = &acm->wb[wbn];
836
837         if (!acm->dev) {
838                 wb->use = 0;
839                 spin_unlock_irqrestore(&acm->write_lock, flags);
840                 return -ENODEV;
841         }
842
843         count = (count > acm->writesize) ? acm->writesize : count;
844         dev_vdbg(&acm->data->dev, "writing %d bytes\n", count);
845         memcpy(wb->buf, buf, count);
846         wb->len = count;
847
848         stat = usb_autopm_get_interface_async(acm->control);
849         if (stat) {
850                 wb->use = 0;
851                 spin_unlock_irqrestore(&acm->write_lock, flags);
852                 return stat;
853         }
854
855         if (acm->susp_count) {
856                 usb_anchor_urb(wb->urb, &acm->delayed);
857                 spin_unlock_irqrestore(&acm->write_lock, flags);
858                 return count;
859         }
860
861         stat = acm_start_wb(acm, wb);
862         spin_unlock_irqrestore(&acm->write_lock, flags);
863
864         if (stat < 0)
865                 return stat;
866         return count;
867 }
868
869 static int acm_tty_write_room(struct tty_struct *tty)
870 {
871         struct acm *acm = tty->driver_data;
872         /*
873          * Do not let the line discipline to know that we have a reserve,
874          * or it might get too enthusiastic.
875          */
876         return acm_wb_is_avail(acm) ? acm->writesize : 0;
877 }
878
879 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
880 {
881         struct acm *acm = tty->driver_data;
882         /*
883          * if the device was unplugged then any remaining characters fell out
884          * of the connector ;)
885          */
886         if (acm->disconnected)
887                 return 0;
888         /*
889          * This is inaccurate (overcounts), but it works.
890          */
891         return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
892 }
893
894 static void acm_tty_throttle(struct tty_struct *tty)
895 {
896         struct acm *acm = tty->driver_data;
897
898         spin_lock_irq(&acm->read_lock);
899         acm->throttle_req = 1;
900         spin_unlock_irq(&acm->read_lock);
901 }
902
903 static void acm_tty_unthrottle(struct tty_struct *tty)
904 {
905         struct acm *acm = tty->driver_data;
906         unsigned int was_throttled;
907
908         spin_lock_irq(&acm->read_lock);
909         was_throttled = acm->throttled;
910         acm->throttled = 0;
911         acm->throttle_req = 0;
912         spin_unlock_irq(&acm->read_lock);
913
914         /* Matches the smp_mb__after_atomic() in acm_read_bulk_callback(). */
915         smp_mb();
916
917         if (was_throttled)
918                 acm_submit_read_urbs(acm, GFP_KERNEL);
919 }
920
921 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
922 {
923         struct acm *acm = tty->driver_data;
924         int retval;
925
926         retval = acm_send_break(acm, state ? 0xffff : 0);
927         if (retval < 0)
928                 dev_dbg(&acm->control->dev,
929                         "%s - send break failed\n", __func__);
930         return retval;
931 }
932
933 static int acm_tty_tiocmget(struct tty_struct *tty)
934 {
935         struct acm *acm = tty->driver_data;
936
937         return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
938                (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
939                (acm->ctrlin  & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
940                (acm->ctrlin  & ACM_CTRL_RI  ? TIOCM_RI  : 0) |
941                (acm->ctrlin  & ACM_CTRL_DCD ? TIOCM_CD  : 0) |
942                TIOCM_CTS;
943 }
944
945 static int acm_tty_tiocmset(struct tty_struct *tty,
946                             unsigned int set, unsigned int clear)
947 {
948         struct acm *acm = tty->driver_data;
949         unsigned int newctrl;
950
951         newctrl = acm->ctrlout;
952         set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
953                                         (set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
954         clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
955                                         (clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
956
957         newctrl = (newctrl & ~clear) | set;
958
959         if (acm->ctrlout == newctrl)
960                 return 0;
961         return acm_set_control(acm, acm->ctrlout = newctrl);
962 }
963
964 static int get_serial_info(struct acm *acm, struct serial_struct __user *info)
965 {
966         struct serial_struct tmp;
967
968         memset(&tmp, 0, sizeof(tmp));
969         tmp.xmit_fifo_size = acm->writesize;
970         tmp.baud_base = le32_to_cpu(acm->line.dwDTERate);
971         tmp.close_delay = jiffies_to_msecs(acm->port.close_delay) / 10;
972         tmp.closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
973                                 ASYNC_CLOSING_WAIT_NONE :
974                                 jiffies_to_msecs(acm->port.closing_wait) / 10;
975
976         if (copy_to_user(info, &tmp, sizeof(tmp)))
977                 return -EFAULT;
978         else
979                 return 0;
980 }
981
982 static int set_serial_info(struct acm *acm,
983                                 struct serial_struct __user *newinfo)
984 {
985         struct serial_struct new_serial;
986         unsigned int closing_wait, close_delay;
987         unsigned int old_closing_wait, old_close_delay;
988         int retval = 0;
989
990         if (copy_from_user(&new_serial, newinfo, sizeof(new_serial)))
991                 return -EFAULT;
992
993         close_delay = msecs_to_jiffies(new_serial.close_delay * 10);
994         closing_wait = new_serial.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
995                         ASYNC_CLOSING_WAIT_NONE :
996                         msecs_to_jiffies(new_serial.closing_wait * 10);
997
998         /* we must redo the rounding here, so that the values match */
999         old_close_delay = jiffies_to_msecs(acm->port.close_delay) / 10;
1000         old_closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
1001                                 ASYNC_CLOSING_WAIT_NONE :
1002                                 jiffies_to_msecs(acm->port.closing_wait) / 10;
1003
1004         mutex_lock(&acm->port.mutex);
1005
1006         if (!capable(CAP_SYS_ADMIN)) {
1007                 if ((new_serial.close_delay != old_close_delay) ||
1008                     (new_serial.closing_wait != old_closing_wait))
1009                         retval = -EPERM;
1010         } else {
1011                 acm->port.close_delay  = close_delay;
1012                 acm->port.closing_wait = closing_wait;
1013         }
1014
1015         mutex_unlock(&acm->port.mutex);
1016         return retval;
1017 }
1018
1019 static int wait_serial_change(struct acm *acm, unsigned long arg)
1020 {
1021         int rv = 0;
1022         DECLARE_WAITQUEUE(wait, current);
1023         struct async_icount old, new;
1024
1025         do {
1026                 spin_lock_irq(&acm->read_lock);
1027                 old = acm->oldcount;
1028                 new = acm->iocount;
1029                 acm->oldcount = new;
1030                 spin_unlock_irq(&acm->read_lock);
1031
1032                 if ((arg & TIOCM_DSR) &&
1033                         old.dsr != new.dsr)
1034                         break;
1035                 if ((arg & TIOCM_CD)  &&
1036                         old.dcd != new.dcd)
1037                         break;
1038                 if ((arg & TIOCM_RI) &&
1039                         old.rng != new.rng)
1040                         break;
1041
1042                 add_wait_queue(&acm->wioctl, &wait);
1043                 set_current_state(TASK_INTERRUPTIBLE);
1044                 schedule();
1045                 remove_wait_queue(&acm->wioctl, &wait);
1046                 if (acm->disconnected) {
1047                         if (arg & TIOCM_CD)
1048                                 break;
1049                         else
1050                                 rv = -ENODEV;
1051                 } else {
1052                         if (signal_pending(current))
1053                                 rv = -ERESTARTSYS;
1054                 }
1055         } while (!rv);
1056
1057         
1058
1059         return rv;
1060 }
1061
1062 static int acm_tty_get_icount(struct tty_struct *tty,
1063                                         struct serial_icounter_struct *icount)
1064 {
1065         struct acm *acm = tty->driver_data;
1066
1067         icount->dsr = acm->iocount.dsr;
1068         icount->rng = acm->iocount.rng;
1069         icount->dcd = acm->iocount.dcd;
1070         icount->frame = acm->iocount.frame;
1071         icount->overrun = acm->iocount.overrun;
1072         icount->parity = acm->iocount.parity;
1073         icount->brk = acm->iocount.brk;
1074
1075         return 0;
1076 }
1077
1078 static int acm_tty_ioctl(struct tty_struct *tty,
1079                                         unsigned int cmd, unsigned long arg)
1080 {
1081         struct acm *acm = tty->driver_data;
1082         int rv = -ENOIOCTLCMD;
1083
1084         switch (cmd) {
1085         case TIOCGSERIAL: /* gets serial port data */
1086                 rv = get_serial_info(acm, (struct serial_struct __user *) arg);
1087                 break;
1088         case TIOCSSERIAL:
1089                 rv = set_serial_info(acm, (struct serial_struct __user *) arg);
1090                 break;
1091         case TIOCMIWAIT:
1092                 rv = usb_autopm_get_interface(acm->control);
1093                 if (rv < 0) {
1094                         rv = -EIO;
1095                         break;
1096                 }
1097                 rv = wait_serial_change(acm, arg);
1098                 usb_autopm_put_interface(acm->control);
1099                 break;
1100         }
1101
1102         return rv;
1103 }
1104
1105 static void acm_tty_set_termios(struct tty_struct *tty,
1106                                                 struct ktermios *termios_old)
1107 {
1108         struct acm *acm = tty->driver_data;
1109         struct ktermios *termios = &tty->termios;
1110         struct usb_cdc_line_coding newline;
1111         int newctrl = acm->ctrlout;
1112
1113         newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
1114         newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
1115         newline.bParityType = termios->c_cflag & PARENB ?
1116                                 (termios->c_cflag & PARODD ? 1 : 2) +
1117                                 (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
1118         switch (termios->c_cflag & CSIZE) {
1119         case CS5:
1120                 newline.bDataBits = 5;
1121                 break;
1122         case CS6:
1123                 newline.bDataBits = 6;
1124                 break;
1125         case CS7:
1126                 newline.bDataBits = 7;
1127                 break;
1128         case CS8:
1129         default:
1130                 newline.bDataBits = 8;
1131                 break;
1132         }
1133         /* FIXME: Needs to clear unsupported bits in the termios */
1134         acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
1135
1136         if (C_BAUD(tty) == B0) {
1137                 newline.dwDTERate = acm->line.dwDTERate;
1138                 newctrl &= ~ACM_CTRL_DTR;
1139         } else if (termios_old && (termios_old->c_cflag & CBAUD) == B0) {
1140                 newctrl |=  ACM_CTRL_DTR;
1141         }
1142
1143         if (newctrl != acm->ctrlout)
1144                 acm_set_control(acm, acm->ctrlout = newctrl);
1145
1146         if (memcmp(&acm->line, &newline, sizeof newline)) {
1147                 memcpy(&acm->line, &newline, sizeof newline);
1148                 dev_dbg(&acm->control->dev, "%s - set line: %d %d %d %d\n",
1149                         __func__,
1150                         le32_to_cpu(newline.dwDTERate),
1151                         newline.bCharFormat, newline.bParityType,
1152                         newline.bDataBits);
1153                 acm_set_line(acm, &acm->line);
1154         }
1155 }
1156
1157 static const struct tty_port_operations acm_port_ops = {
1158         .dtr_rts = acm_port_dtr_rts,
1159         .shutdown = acm_port_shutdown,
1160         .activate = acm_port_activate,
1161         .destruct = acm_port_destruct,
1162 };
1163
1164 /*
1165  * USB probe and disconnect routines.
1166  */
1167
1168 /* Little helpers: write/read buffers free */
1169 static void acm_write_buffers_free(struct acm *acm)
1170 {
1171         int i;
1172         struct acm_wb *wb;
1173
1174         for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
1175                 usb_free_coherent(acm->dev, acm->writesize, wb->buf, wb->dmah);
1176 }
1177
1178 static void acm_read_buffers_free(struct acm *acm)
1179 {
1180         int i;
1181
1182         for (i = 0; i < acm->rx_buflimit; i++)
1183                 usb_free_coherent(acm->dev, acm->readsize,
1184                           acm->read_buffers[i].base, acm->read_buffers[i].dma);
1185 }
1186
1187 /* Little helper: write buffers allocate */
1188 static int acm_write_buffers_alloc(struct acm *acm)
1189 {
1190         int i;
1191         struct acm_wb *wb;
1192
1193         for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
1194                 wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
1195                     &wb->dmah);
1196                 if (!wb->buf) {
1197                         while (i != 0) {
1198                                 --i;
1199                                 --wb;
1200                                 usb_free_coherent(acm->dev, acm->writesize,
1201                                     wb->buf, wb->dmah);
1202                         }
1203                         return -ENOMEM;
1204                 }
1205         }
1206         return 0;
1207 }
1208
1209 static int acm_probe(struct usb_interface *intf,
1210                      const struct usb_device_id *id)
1211 {
1212         struct usb_cdc_union_desc *union_header = NULL;
1213         struct usb_cdc_call_mgmt_descriptor *cmgmd = NULL;
1214         unsigned char *buffer = intf->altsetting->extra;
1215         int buflen = intf->altsetting->extralen;
1216         struct usb_interface *control_interface;
1217         struct usb_interface *data_interface;
1218         struct usb_endpoint_descriptor *epctrl = NULL;
1219         struct usb_endpoint_descriptor *epread = NULL;
1220         struct usb_endpoint_descriptor *epwrite = NULL;
1221         struct usb_device *usb_dev = interface_to_usbdev(intf);
1222         struct usb_cdc_parsed_header h;
1223         struct acm *acm;
1224         int minor;
1225         int ctrlsize, readsize;
1226         u8 *buf;
1227         int call_intf_num = -1;
1228         int data_intf_num = -1;
1229         unsigned long quirks;
1230         int num_rx_buf;
1231         int i;
1232         int combined_interfaces = 0;
1233         struct device *tty_dev;
1234         int rv = -ENOMEM;
1235         int res;
1236
1237         /* normal quirks */
1238         quirks = (unsigned long)id->driver_info;
1239
1240         if (quirks == IGNORE_DEVICE)
1241                 return -ENODEV;
1242
1243         memset(&h, 0x00, sizeof(struct usb_cdc_parsed_header));
1244
1245         num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
1246
1247         /* handle quirks deadly to normal probing*/
1248         if (quirks == NO_UNION_NORMAL) {
1249                 data_interface = usb_ifnum_to_if(usb_dev, 1);
1250                 control_interface = usb_ifnum_to_if(usb_dev, 0);
1251                 /* we would crash */
1252                 if (!data_interface || !control_interface)
1253                         return -ENODEV;
1254                 goto skip_normal_probe;
1255         }
1256
1257         /* normal probing*/
1258         if (!buffer) {
1259                 dev_err(&intf->dev, "Weird descriptor references\n");
1260                 return -EINVAL;
1261         }
1262
1263         if (!intf->cur_altsetting)
1264                 return -EINVAL;
1265
1266         if (!buflen) {
1267                 if (intf->cur_altsetting->endpoint &&
1268                                 intf->cur_altsetting->endpoint->extralen &&
1269                                 intf->cur_altsetting->endpoint->extra) {
1270                         dev_dbg(&intf->dev,
1271                                 "Seeking extra descriptors on endpoint\n");
1272                         buflen = intf->cur_altsetting->endpoint->extralen;
1273                         buffer = intf->cur_altsetting->endpoint->extra;
1274                 } else {
1275                         dev_err(&intf->dev,
1276                                 "Zero length descriptor references\n");
1277                         return -EINVAL;
1278                 }
1279         }
1280
1281         cdc_parse_cdc_header(&h, intf, buffer, buflen);
1282         union_header = h.usb_cdc_union_desc;
1283         cmgmd = h.usb_cdc_call_mgmt_descriptor;
1284         if (cmgmd)
1285                 call_intf_num = cmgmd->bDataInterface;
1286
1287         if (!union_header) {
1288                 if (call_intf_num > 0) {
1289                         dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1290                         /* quirks for Droids MuIn LCD */
1291                         if (quirks & NO_DATA_INTERFACE) {
1292                                 data_interface = usb_ifnum_to_if(usb_dev, 0);
1293                         } else {
1294                                 data_intf_num = call_intf_num;
1295                                 data_interface = usb_ifnum_to_if(usb_dev, data_intf_num);
1296                         }
1297                         control_interface = intf;
1298                 } else {
1299                         if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
1300                                 dev_dbg(&intf->dev,"No union descriptor, giving up\n");
1301                                 return -ENODEV;
1302                         } else {
1303                                 dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
1304                                 combined_interfaces = 1;
1305                                 control_interface = data_interface = intf;
1306                                 goto look_for_collapsed_interface;
1307                         }
1308                 }
1309         } else {
1310                 int class = -1;
1311
1312                 data_intf_num = union_header->bSlaveInterface0;
1313                 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1314                 data_interface = usb_ifnum_to_if(usb_dev, data_intf_num);
1315
1316                 if (control_interface)
1317                         class = control_interface->cur_altsetting->desc.bInterfaceClass;
1318
1319                 if (class != USB_CLASS_COMM && class != USB_CLASS_CDC_DATA) {
1320                         dev_dbg(&intf->dev, "Broken union descriptor, assuming single interface\n");
1321                         combined_interfaces = 1;
1322                         control_interface = data_interface = intf;
1323                         goto look_for_collapsed_interface;
1324                 }
1325         }
1326
1327         if (!control_interface || !data_interface) {
1328                 dev_dbg(&intf->dev, "no interfaces\n");
1329                 return -ENODEV;
1330         }
1331         if (!data_interface->cur_altsetting || !control_interface->cur_altsetting)
1332                 return -ENODEV;
1333
1334         if (data_intf_num != call_intf_num)
1335                 dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1336
1337         if (control_interface == data_interface) {
1338                 /* some broken devices designed for windows work this way */
1339                 dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1340                 combined_interfaces = 1;
1341                 /* a popular other OS doesn't use it */
1342                 quirks |= NO_CAP_LINE;
1343                 if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1344                         dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1345                         return -EINVAL;
1346                 }
1347 look_for_collapsed_interface:
1348                 res = usb_find_common_endpoints(data_interface->cur_altsetting,
1349                                 &epread, &epwrite, &epctrl, NULL);
1350                 if (res)
1351                         return res;
1352
1353                 goto made_compressed_probe;
1354         }
1355
1356 skip_normal_probe:
1357
1358         /*workaround for switched interfaces */
1359         if (data_interface->cur_altsetting->desc.bInterfaceClass
1360                                                 != CDC_DATA_INTERFACE_TYPE) {
1361                 if (control_interface->cur_altsetting->desc.bInterfaceClass
1362                                                 == CDC_DATA_INTERFACE_TYPE) {
1363                         dev_dbg(&intf->dev,
1364                                 "Your device has switched interfaces.\n");
1365                         swap(control_interface, data_interface);
1366                 } else {
1367                         return -EINVAL;
1368                 }
1369         }
1370
1371         /* Accept probe requests only for the control interface */
1372         if (!combined_interfaces && intf != control_interface)
1373                 return -ENODEV;
1374
1375         if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1376                 /* valid in this context */
1377                 dev_dbg(&intf->dev, "The data interface isn't available\n");
1378                 return -EBUSY;
1379         }
1380
1381
1382         if (data_interface->cur_altsetting->desc.bNumEndpoints < 2 ||
1383             control_interface->cur_altsetting->desc.bNumEndpoints == 0)
1384                 return -EINVAL;
1385
1386         epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1387         epread = &data_interface->cur_altsetting->endpoint[0].desc;
1388         epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1389
1390
1391         /* workaround for switched endpoints */
1392         if (!usb_endpoint_dir_in(epread)) {
1393                 /* descriptors are swapped */
1394                 dev_dbg(&intf->dev,
1395                         "The data interface has switched endpoints\n");
1396                 swap(epread, epwrite);
1397         }
1398 made_compressed_probe:
1399         dev_dbg(&intf->dev, "interfaces are valid\n");
1400
1401         acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1402         if (acm == NULL)
1403                 goto alloc_fail;
1404
1405         ctrlsize = usb_endpoint_maxp(epctrl);
1406         readsize = usb_endpoint_maxp(epread) *
1407                                 (quirks == SINGLE_RX_URB ? 1 : 2);
1408         acm->combined_interfaces = combined_interfaces;
1409         acm->writesize = usb_endpoint_maxp(epwrite) * 20;
1410         acm->control = control_interface;
1411         acm->data = data_interface;
1412
1413         usb_get_intf(acm->control); /* undone in destruct() */
1414
1415         minor = acm_alloc_minor(acm);
1416         if (minor < 0)
1417                 goto alloc_fail1;
1418
1419         acm->minor = minor;
1420         acm->dev = usb_dev;
1421         if (h.usb_cdc_acm_descriptor)
1422                 acm->ctrl_caps = h.usb_cdc_acm_descriptor->bmCapabilities;
1423         if (quirks & NO_CAP_LINE)
1424                 acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1425         acm->ctrlsize = ctrlsize;
1426         acm->readsize = readsize;
1427         acm->rx_buflimit = num_rx_buf;
1428         INIT_DELAYED_WORK(&acm->dwork, acm_softint);
1429         init_waitqueue_head(&acm->wioctl);
1430         spin_lock_init(&acm->write_lock);
1431         spin_lock_init(&acm->read_lock);
1432         mutex_init(&acm->mutex);
1433         if (usb_endpoint_xfer_int(epread)) {
1434                 acm->bInterval = epread->bInterval;
1435                 acm->in = usb_rcvintpipe(usb_dev, epread->bEndpointAddress);
1436         } else {
1437                 acm->in = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1438         }
1439         if (usb_endpoint_xfer_int(epwrite))
1440                 acm->out = usb_sndintpipe(usb_dev, epwrite->bEndpointAddress);
1441         else
1442                 acm->out = usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress);
1443         tty_port_init(&acm->port);
1444         acm->port.ops = &acm_port_ops;
1445         init_usb_anchor(&acm->delayed);
1446         acm->quirks = quirks;
1447
1448         buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1449         if (!buf)
1450                 goto alloc_fail2;
1451         acm->ctrl_buffer = buf;
1452
1453         if (acm_write_buffers_alloc(acm) < 0)
1454                 goto alloc_fail4;
1455
1456         acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1457         if (!acm->ctrlurb)
1458                 goto alloc_fail5;
1459
1460         for (i = 0; i < num_rx_buf; i++) {
1461                 struct acm_rb *rb = &(acm->read_buffers[i]);
1462                 struct urb *urb;
1463
1464                 rb->base = usb_alloc_coherent(acm->dev, readsize, GFP_KERNEL,
1465                                                                 &rb->dma);
1466                 if (!rb->base)
1467                         goto alloc_fail6;
1468                 rb->index = i;
1469                 rb->instance = acm;
1470
1471                 urb = usb_alloc_urb(0, GFP_KERNEL);
1472                 if (!urb)
1473                         goto alloc_fail6;
1474
1475                 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1476                 urb->transfer_dma = rb->dma;
1477                 if (usb_endpoint_xfer_int(epread))
1478                         usb_fill_int_urb(urb, acm->dev, acm->in, rb->base,
1479                                          acm->readsize,
1480                                          acm_read_bulk_callback, rb,
1481                                          acm->bInterval);
1482                 else
1483                         usb_fill_bulk_urb(urb, acm->dev, acm->in, rb->base,
1484                                           acm->readsize,
1485                                           acm_read_bulk_callback, rb);
1486
1487                 acm->read_urbs[i] = urb;
1488                 __set_bit(i, &acm->read_urbs_free);
1489         }
1490         for (i = 0; i < ACM_NW; i++) {
1491                 struct acm_wb *snd = &(acm->wb[i]);
1492
1493                 snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1494                 if (snd->urb == NULL)
1495                         goto alloc_fail7;
1496
1497                 if (usb_endpoint_xfer_int(epwrite))
1498                         usb_fill_int_urb(snd->urb, usb_dev, acm->out,
1499                                 NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1500                 else
1501                         usb_fill_bulk_urb(snd->urb, usb_dev, acm->out,
1502                                 NULL, acm->writesize, acm_write_bulk, snd);
1503                 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1504                 if (quirks & SEND_ZERO_PACKET)
1505                         snd->urb->transfer_flags |= URB_ZERO_PACKET;
1506                 snd->instance = acm;
1507         }
1508
1509         usb_set_intfdata(intf, acm);
1510
1511         i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1512         if (i < 0)
1513                 goto alloc_fail7;
1514
1515         if (h.usb_cdc_country_functional_desc) { /* export the country data */
1516                 struct usb_cdc_country_functional_desc * cfd =
1517                                         h.usb_cdc_country_functional_desc;
1518
1519                 acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1520                 if (!acm->country_codes)
1521                         goto skip_countries;
1522                 acm->country_code_size = cfd->bLength - 4;
1523                 memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1524                                                         cfd->bLength - 4);
1525                 acm->country_rel_date = cfd->iCountryCodeRelDate;
1526
1527                 i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1528                 if (i < 0) {
1529                         kfree(acm->country_codes);
1530                         acm->country_codes = NULL;
1531                         acm->country_code_size = 0;
1532                         goto skip_countries;
1533                 }
1534
1535                 i = device_create_file(&intf->dev,
1536                                                 &dev_attr_iCountryCodeRelDate);
1537                 if (i < 0) {
1538                         device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1539                         kfree(acm->country_codes);
1540                         acm->country_codes = NULL;
1541                         acm->country_code_size = 0;
1542                         goto skip_countries;
1543                 }
1544         }
1545
1546 skip_countries:
1547         usb_fill_int_urb(acm->ctrlurb, usb_dev,
1548                          usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1549                          acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1550                          /* works around buggy devices */
1551                          epctrl->bInterval ? epctrl->bInterval : 16);
1552         acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1553         acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1554         acm->notification_buffer = NULL;
1555         acm->nb_index = 0;
1556         acm->nb_size = 0;
1557
1558         dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1559
1560         acm->line.dwDTERate = cpu_to_le32(9600);
1561         acm->line.bDataBits = 8;
1562         acm_set_line(acm, &acm->line);
1563
1564         usb_driver_claim_interface(&acm_driver, data_interface, acm);
1565         usb_set_intfdata(data_interface, acm);
1566
1567         tty_dev = tty_port_register_device(&acm->port, acm_tty_driver, minor,
1568                         &control_interface->dev);
1569         if (IS_ERR(tty_dev)) {
1570                 rv = PTR_ERR(tty_dev);
1571                 goto alloc_fail8;
1572         }
1573
1574         if (quirks & CLEAR_HALT_CONDITIONS) {
1575                 usb_clear_halt(usb_dev, acm->in);
1576                 usb_clear_halt(usb_dev, acm->out);
1577         }
1578
1579         return 0;
1580 alloc_fail8:
1581         if (!acm->combined_interfaces) {
1582                 /* Clear driver data so that disconnect() returns early. */
1583                 usb_set_intfdata(data_interface, NULL);
1584                 usb_driver_release_interface(&acm_driver, data_interface);
1585         }
1586         if (acm->country_codes) {
1587                 device_remove_file(&acm->control->dev,
1588                                 &dev_attr_wCountryCodes);
1589                 device_remove_file(&acm->control->dev,
1590                                 &dev_attr_iCountryCodeRelDate);
1591                 kfree(acm->country_codes);
1592         }
1593         device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1594 alloc_fail7:
1595         usb_set_intfdata(intf, NULL);
1596         for (i = 0; i < ACM_NW; i++)
1597                 usb_free_urb(acm->wb[i].urb);
1598 alloc_fail6:
1599         for (i = 0; i < num_rx_buf; i++)
1600                 usb_free_urb(acm->read_urbs[i]);
1601         acm_read_buffers_free(acm);
1602         usb_free_urb(acm->ctrlurb);
1603 alloc_fail5:
1604         acm_write_buffers_free(acm);
1605 alloc_fail4:
1606         usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1607 alloc_fail2:
1608         acm_release_minor(acm);
1609 alloc_fail1:
1610         kfree(acm);
1611 alloc_fail:
1612         return rv;
1613 }
1614
1615 static void acm_disconnect(struct usb_interface *intf)
1616 {
1617         struct acm *acm = usb_get_intfdata(intf);
1618         struct tty_struct *tty;
1619         int i;
1620
1621         /* sibling interface is already cleaning up */
1622         if (!acm)
1623                 return;
1624
1625         acm->disconnected = true;
1626         /*
1627          * there is a circular dependency. acm_softint() can resubmit
1628          * the URBs in error handling so we need to block any
1629          * submission right away
1630          */
1631         acm_poison_urbs(acm);
1632         mutex_lock(&acm->mutex);
1633         if (acm->country_codes) {
1634                 device_remove_file(&acm->control->dev,
1635                                 &dev_attr_wCountryCodes);
1636                 device_remove_file(&acm->control->dev,
1637                                 &dev_attr_iCountryCodeRelDate);
1638         }
1639         wake_up_all(&acm->wioctl);
1640         device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1641         usb_set_intfdata(acm->control, NULL);
1642         usb_set_intfdata(acm->data, NULL);
1643         mutex_unlock(&acm->mutex);
1644
1645         tty = tty_port_tty_get(&acm->port);
1646         if (tty) {
1647                 tty_vhangup(tty);
1648                 tty_kref_put(tty);
1649         }
1650
1651         cancel_delayed_work_sync(&acm->dwork);
1652
1653         tty_unregister_device(acm_tty_driver, acm->minor);
1654
1655         usb_free_urb(acm->ctrlurb);
1656         for (i = 0; i < ACM_NW; i++)
1657                 usb_free_urb(acm->wb[i].urb);
1658         for (i = 0; i < acm->rx_buflimit; i++)
1659                 usb_free_urb(acm->read_urbs[i]);
1660         acm_write_buffers_free(acm);
1661         usb_free_coherent(acm->dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1662         acm_read_buffers_free(acm);
1663
1664         kfree(acm->notification_buffer);
1665
1666         if (!acm->combined_interfaces)
1667                 usb_driver_release_interface(&acm_driver, intf == acm->control ?
1668                                         acm->data : acm->control);
1669
1670         tty_port_put(&acm->port);
1671 }
1672
1673 #ifdef CONFIG_PM
1674 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1675 {
1676         struct acm *acm = usb_get_intfdata(intf);
1677         int cnt;
1678
1679         spin_lock_irq(&acm->write_lock);
1680         if (PMSG_IS_AUTO(message)) {
1681                 if (acm->transmitting) {
1682                         spin_unlock_irq(&acm->write_lock);
1683                         return -EBUSY;
1684                 }
1685         }
1686         cnt = acm->susp_count++;
1687         spin_unlock_irq(&acm->write_lock);
1688
1689         if (cnt)
1690                 return 0;
1691
1692         acm_poison_urbs(acm);
1693         cancel_delayed_work_sync(&acm->dwork);
1694         acm->urbs_in_error_delay = 0;
1695
1696         return 0;
1697 }
1698
1699 static int acm_resume(struct usb_interface *intf)
1700 {
1701         struct acm *acm = usb_get_intfdata(intf);
1702         struct urb *urb;
1703         int rv = 0;
1704
1705         spin_lock_irq(&acm->write_lock);
1706
1707         if (--acm->susp_count)
1708                 goto out;
1709
1710         acm_unpoison_urbs(acm);
1711
1712         if (tty_port_initialized(&acm->port)) {
1713                 rv = usb_submit_urb(acm->ctrlurb, GFP_ATOMIC);
1714
1715                 for (;;) {
1716                         urb = usb_get_from_anchor(&acm->delayed);
1717                         if (!urb)
1718                                 break;
1719
1720                         acm_start_wb(acm, urb->context);
1721                 }
1722
1723                 /*
1724                  * delayed error checking because we must
1725                  * do the write path at all cost
1726                  */
1727                 if (rv < 0)
1728                         goto out;
1729
1730                 rv = acm_submit_read_urbs(acm, GFP_ATOMIC);
1731         }
1732 out:
1733         spin_unlock_irq(&acm->write_lock);
1734
1735         return rv;
1736 }
1737
1738 static int acm_reset_resume(struct usb_interface *intf)
1739 {
1740         struct acm *acm = usb_get_intfdata(intf);
1741
1742         if (tty_port_initialized(&acm->port))
1743                 tty_port_tty_hangup(&acm->port, false);
1744
1745         return acm_resume(intf);
1746 }
1747
1748 #endif /* CONFIG_PM */
1749
1750 static int acm_pre_reset(struct usb_interface *intf)
1751 {
1752         struct acm *acm = usb_get_intfdata(intf);
1753
1754         clear_bit(EVENT_RX_STALL, &acm->flags);
1755         acm->nb_index = 0; /* pending control transfers are lost */
1756
1757         return 0;
1758 }
1759
1760 #define NOKIA_PCSUITE_ACM_INFO(x) \
1761                 USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1762                 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1763                 USB_CDC_ACM_PROTO_VENDOR)
1764
1765 #define SAMSUNG_PCSUITE_ACM_INFO(x) \
1766                 USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1767                 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1768                 USB_CDC_ACM_PROTO_VENDOR)
1769
1770 /*
1771  * USB driver structure.
1772  */
1773
1774 static const struct usb_device_id acm_ids[] = {
1775         /* quirky and broken devices */
1776         { USB_DEVICE(0x0424, 0x274e), /* Microchip Technology, Inc. (formerly SMSC) */
1777           .driver_info = DISABLE_ECHO, }, /* DISABLE ECHO in termios flag */
1778         { USB_DEVICE(0x076d, 0x0006), /* Denso Cradle CU-321 */
1779         .driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
1780         { USB_DEVICE(0x17ef, 0x7000), /* Lenovo USB modem */
1781         .driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
1782         { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1783         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1784         },
1785         { USB_DEVICE(0x045b, 0x023c),   /* Renesas USB Download mode */
1786         .driver_info = DISABLE_ECHO,    /* Don't echo banner */
1787         },
1788         { USB_DEVICE(0x045b, 0x0248),   /* Renesas USB Download mode */
1789         .driver_info = DISABLE_ECHO,    /* Don't echo banner */
1790         },
1791         { USB_DEVICE(0x045b, 0x024D),   /* Renesas USB Download mode */
1792         .driver_info = DISABLE_ECHO,    /* Don't echo banner */
1793         },
1794         { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1795         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1796         },
1797         { USB_DEVICE(0x0e8d, 0x2000), /* MediaTek Inc Preloader */
1798         .driver_info = DISABLE_ECHO, /* DISABLE ECHO in termios flag */
1799         },
1800         { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1801         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1802         },
1803         { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1804         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1805         },
1806         { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1807         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1808         },
1809         { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1810         .driver_info = SINGLE_RX_URB,
1811         },
1812         { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1813         .driver_info = SINGLE_RX_URB, /* firmware bug */
1814         },
1815         { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1816         .driver_info = SINGLE_RX_URB, /* firmware bug */
1817         },
1818         { USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */
1819         .driver_info = SINGLE_RX_URB,
1820         },
1821         { USB_DEVICE(0x1965, 0x0018), /* Uniden UBC125XLT */
1822         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1823         },
1824         { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1825         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1826         },
1827         { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1828         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1829         },
1830         { USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1831         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1832         },
1833         { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1834         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1835         },
1836         { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1837         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1838         },
1839         { USB_DEVICE(0x0572, 0x1349), /* Hiro (Conexant) USB MODEM H50228 */
1840         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1841         },
1842         { USB_DEVICE(0x20df, 0x0001), /* Simtec Electronics Entropy Key */
1843         .driver_info = QUIRK_CONTROL_LINE_STATE, },
1844         { USB_DEVICE(0x2184, 0x001c) }, /* GW Instek AFG-2225 */
1845         { USB_DEVICE(0x2184, 0x0036) }, /* GW Instek AFG-125 */
1846         { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1847         },
1848         /* Motorola H24 HSPA module: */
1849         { USB_DEVICE(0x22b8, 0x2d91) }, /* modem                                */
1850         { USB_DEVICE(0x22b8, 0x2d92),   /* modem           + diagnostics        */
1851         .driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1852         },
1853         { USB_DEVICE(0x22b8, 0x2d93),   /* modem + AT port                      */
1854         .driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1855         },
1856         { USB_DEVICE(0x22b8, 0x2d95),   /* modem + AT port + diagnostics        */
1857         .driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1858         },
1859         { USB_DEVICE(0x22b8, 0x2d96),   /* modem                         + NMEA */
1860         .driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1861         },
1862         { USB_DEVICE(0x22b8, 0x2d97),   /* modem           + diagnostics + NMEA */
1863         .driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1864         },
1865         { USB_DEVICE(0x22b8, 0x2d99),   /* modem + AT port               + NMEA */
1866         .driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1867         },
1868         { USB_DEVICE(0x22b8, 0x2d9a),   /* modem + AT port + diagnostics + NMEA */
1869         .driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1870         },
1871
1872         { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1873         .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1874                                            data interface instead of
1875                                            communications interface.
1876                                            Maybe we should define a new
1877                                            quirk for this. */
1878         },
1879         { USB_DEVICE(0x0572, 0x1340), /* Conexant CX93010-2x UCMxx */
1880         .driver_info = NO_UNION_NORMAL,
1881         },
1882         { USB_DEVICE(0x05f9, 0x4002), /* PSC Scanning, Magellan 800i */
1883         .driver_info = NO_UNION_NORMAL,
1884         },
1885         { USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1886         .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1887         },
1888         { USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1889         .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1890         },
1891         { USB_DEVICE(0xfff0, 0x0100), /* DATECS FP-2000 */
1892         .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1893         },
1894         { USB_DEVICE(0x09d8, 0x0320), /* Elatec GmbH TWN3 */
1895         .driver_info = NO_UNION_NORMAL, /* has misplaced union descriptor */
1896         },
1897         { USB_DEVICE(0x0ca6, 0xa050), /* Castles VEGA3000 */
1898         .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1899         },
1900
1901         { USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */
1902         .driver_info = CLEAR_HALT_CONDITIONS,
1903         },
1904
1905         /* Nokia S60 phones expose two ACM channels. The first is
1906          * a modem and is picked up by the standard AT-command
1907          * information below. The second is 'vendor-specific' but
1908          * is treated as a serial device at the S60 end, so we want
1909          * to expose it on Linux too. */
1910         { NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1911         { NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1912         { NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1913         { NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1914         { NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1915         { NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1916         { NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1917         { NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1918         { NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1919         { NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1920         { NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1921         { NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1922         { NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1923         { NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1924         { NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1925         { NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1926         { NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1927         { NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i  */
1928         { NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1929         { NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1930         { NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1931         { NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic &  */
1932         { NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1933         { NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1934         { NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1935         { NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1936         { NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1937         { NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1938         { NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1939         { NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1940         { NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1941         { NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB  */
1942         { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1943         { NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1944         { NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1945         { NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1946         { NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1947         { NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1948         { NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1949         { NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3  */
1950         { NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1951         { NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1952         { NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1953         { NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1954         { NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1955         { NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1956         { NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1957         { NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1958         { NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1959         { NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1960         { NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1961         { NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1962         { NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1963         { NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1964         { NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1965         { NOKIA_PCSUITE_ACM_INFO(0x0335), }, /* Nokia E7 */
1966         { NOKIA_PCSUITE_ACM_INFO(0x03cd), }, /* Nokia C7 */
1967         { SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1968
1969         /* Support for Owen devices */
1970         { USB_DEVICE(0x03eb, 0x0030), }, /* Owen SI30 */
1971
1972         /* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1973
1974         /* Support for Droids MuIn LCD */
1975         { USB_DEVICE(0x04d8, 0x000b),
1976         .driver_info = NO_DATA_INTERFACE,
1977         },
1978
1979 #if IS_ENABLED(CONFIG_INPUT_IMS_PCU)
1980         { USB_DEVICE(0x04d8, 0x0082),   /* Application mode */
1981         .driver_info = IGNORE_DEVICE,
1982         },
1983         { USB_DEVICE(0x04d8, 0x0083),   /* Bootloader mode */
1984         .driver_info = IGNORE_DEVICE,
1985         },
1986
1987         { USB_DEVICE(0x04d8, 0xf58b),
1988         .driver_info = IGNORE_DEVICE,
1989         },
1990 #endif
1991
1992         /*Samsung phone in firmware update mode */
1993         { USB_DEVICE(0x04e8, 0x685d),
1994         .driver_info = IGNORE_DEVICE,
1995         },
1996
1997         /* Exclude Infineon Flash Loader utility */
1998         { USB_DEVICE(0x058b, 0x0041),
1999         .driver_info = IGNORE_DEVICE,
2000         },
2001
2002         /* Exclude ETAS ES58x */
2003         { USB_DEVICE(0x108c, 0x0159), /* ES581.4 */
2004         .driver_info = IGNORE_DEVICE,
2005         },
2006         { USB_DEVICE(0x108c, 0x0168), /* ES582.1 */
2007         .driver_info = IGNORE_DEVICE,
2008         },
2009         { USB_DEVICE(0x108c, 0x0169), /* ES584.1 */
2010         .driver_info = IGNORE_DEVICE,
2011         },
2012
2013         { USB_DEVICE(0x1bc7, 0x0021), /* Telit 3G ACM only composition */
2014         .driver_info = SEND_ZERO_PACKET,
2015         },
2016         { USB_DEVICE(0x1bc7, 0x0023), /* Telit 3G ACM + ECM composition */
2017         .driver_info = SEND_ZERO_PACKET,
2018         },
2019
2020         /* Exclude Goodix Fingerprint Reader */
2021         { USB_DEVICE(0x27c6, 0x5395),
2022         .driver_info = IGNORE_DEVICE,
2023         },
2024
2025         /* Exclude Heimann Sensor GmbH USB appset demo */
2026         { USB_DEVICE(0x32a7, 0x0000),
2027         .driver_info = IGNORE_DEVICE,
2028         },
2029
2030         /* control interfaces without any protocol set */
2031         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
2032                 USB_CDC_PROTO_NONE) },
2033
2034         /* control interfaces with various AT-command sets */
2035         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
2036                 USB_CDC_ACM_PROTO_AT_V25TER) },
2037         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
2038                 USB_CDC_ACM_PROTO_AT_PCCA101) },
2039         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
2040                 USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
2041         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
2042                 USB_CDC_ACM_PROTO_AT_GSM) },
2043         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
2044                 USB_CDC_ACM_PROTO_AT_3G) },
2045         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
2046                 USB_CDC_ACM_PROTO_AT_CDMA) },
2047
2048         { USB_DEVICE(0x1519, 0x0452), /* Intel 7260 modem */
2049         .driver_info = SEND_ZERO_PACKET,
2050         },
2051
2052         { }
2053 };
2054
2055 MODULE_DEVICE_TABLE(usb, acm_ids);
2056
2057 static struct usb_driver acm_driver = {
2058         .name =         "cdc_acm",
2059         .probe =        acm_probe,
2060         .disconnect =   acm_disconnect,
2061 #ifdef CONFIG_PM
2062         .suspend =      acm_suspend,
2063         .resume =       acm_resume,
2064         .reset_resume = acm_reset_resume,
2065 #endif
2066         .pre_reset =    acm_pre_reset,
2067         .id_table =     acm_ids,
2068 #ifdef CONFIG_PM
2069         .supports_autosuspend = 1,
2070 #endif
2071         .disable_hub_initiated_lpm = 1,
2072 };
2073
2074 /*
2075  * TTY driver structures.
2076  */
2077
2078 static const struct tty_operations acm_ops = {
2079         .install =              acm_tty_install,
2080         .open =                 acm_tty_open,
2081         .close =                acm_tty_close,
2082         .cleanup =              acm_tty_cleanup,
2083         .hangup =               acm_tty_hangup,
2084         .write =                acm_tty_write,
2085         .write_room =           acm_tty_write_room,
2086         .ioctl =                acm_tty_ioctl,
2087         .throttle =             acm_tty_throttle,
2088         .unthrottle =           acm_tty_unthrottle,
2089         .chars_in_buffer =      acm_tty_chars_in_buffer,
2090         .break_ctl =            acm_tty_break_ctl,
2091         .set_termios =          acm_tty_set_termios,
2092         .tiocmget =             acm_tty_tiocmget,
2093         .tiocmset =             acm_tty_tiocmset,
2094         .get_icount =           acm_tty_get_icount,
2095 };
2096
2097 /*
2098  * Init / exit.
2099  */
2100
2101 static int __init acm_init(void)
2102 {
2103         int retval;
2104         acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
2105         if (!acm_tty_driver)
2106                 return -ENOMEM;
2107         acm_tty_driver->driver_name = "acm",
2108         acm_tty_driver->name = "ttyACM",
2109         acm_tty_driver->major = ACM_TTY_MAJOR,
2110         acm_tty_driver->minor_start = 0,
2111         acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
2112         acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
2113         acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
2114         acm_tty_driver->init_termios = tty_std_termios;
2115         acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
2116                                                                 HUPCL | CLOCAL;
2117         tty_set_operations(acm_tty_driver, &acm_ops);
2118
2119         retval = tty_register_driver(acm_tty_driver);
2120         if (retval) {
2121                 put_tty_driver(acm_tty_driver);
2122                 return retval;
2123         }
2124
2125         retval = usb_register(&acm_driver);
2126         if (retval) {
2127                 tty_unregister_driver(acm_tty_driver);
2128                 put_tty_driver(acm_tty_driver);
2129                 return retval;
2130         }
2131
2132         printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
2133
2134         return 0;
2135 }
2136
2137 static void __exit acm_exit(void)
2138 {
2139         usb_deregister(&acm_driver);
2140         tty_unregister_driver(acm_tty_driver);
2141         put_tty_driver(acm_tty_driver);
2142         idr_destroy(&acm_minors);
2143 }
2144
2145 module_init(acm_init);
2146 module_exit(acm_exit);
2147
2148 MODULE_AUTHOR(DRIVER_AUTHOR);
2149 MODULE_DESCRIPTION(DRIVER_DESC);
2150 MODULE_LICENSE("GPL");
2151 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);