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