2bfc41e
[linux-2.6/mini2440.git] / 
blob2bfc41ece0e1d2df04ab058f742e76fd7b7749e9
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  */
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  */
54 #undef DEBUG
55 #undef VERBOSE_DEBUG
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>
73 #include "cdc-acm.h"
76 #define ACM_CLOSE_TIMEOUT       15      /* seconds to let writes drain */
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"
85 static struct usb_driver acm_driver;
86 static struct tty_driver *acm_tty_driver;
87 static struct acm *acm_table[ACM_TTY_MINORS];
89 static DEFINE_MUTEX(open_mutex);
91 #define ACM_READY(acm)  (acm && acm->dev && acm->port.count)
93 static const struct tty_port_operations acm_port_ops = {
96 #ifdef VERBOSE_DEBUG
97 #define verbose 1
98 #else
99 #define verbose 0
100 #endif
103  * Functions for ACM control messages.
104  */
106 static int acm_ctrl_msg(struct acm *acm, int request, int value,
107                                                         void *buf, int len)
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;
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)
129  * Write buffer management.
130  * All of these assume proper locks taken by the caller.
131  */
133 static int acm_wb_alloc(struct acm *acm)
135         int i, wbn;
136         struct acm_wb *wb;
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         }
152 static int acm_wb_is_avail(struct acm *acm)
154         int i, n;
155         unsigned long flags;
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;
166  * Finish write. Caller must hold acm->write_lock
167  */
168 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
170         wb->use = 0;
171         acm->transmitting--;
175  * Poke write.
177  * the caller is responsible for locking
178  */
180 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
182         int rc;
184         acm->transmitting++;
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;
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;
199 static int acm_write_start(struct acm *acm, int wbn)
201         unsigned long flags;
202         struct acm_wb *wb = &acm->wb[wbn];
203         int rc;
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         }
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);
221         rc = acm_start_wb(acm, wb);
222         spin_unlock_irqrestore(&acm->write_lock, flags);
224         return rc;
228  * attributes exported through sysfs
229  */
230 static ssize_t show_caps
231 (struct device *dev, struct device_attribute *attr, char *buf)
233         struct usb_interface *intf = to_usb_interface(dev);
234         struct acm *acm = usb_get_intfdata(intf);
236         return sprintf(buf, "%d", acm->ctrl_caps);
238 static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
240 static ssize_t show_country_codes
241 (struct device *dev, struct device_attribute *attr, char *buf)
243         struct usb_interface *intf = to_usb_interface(dev);
244         struct acm *acm = usb_get_intfdata(intf);
246         memcpy(buf, acm->country_codes, acm->country_code_size);
247         return acm->country_code_size;
250 static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
252 static ssize_t show_country_rel_date
253 (struct device *dev, struct device_attribute *attr, char *buf)
255         struct usb_interface *intf = to_usb_interface(dev);
256         struct acm *acm = usb_get_intfdata(intf);
258         return sprintf(buf, "%d", acm->country_rel_date);
261 static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
263  * Interrupt handlers for various ACM device responses
264  */
266 /* control interface reports status changes with "interrupt" transfers */
267 static void acm_ctrl_irq(struct urb *urb)
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;
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         }
292         if (!ACM_READY(acm))
293                 goto exit;
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;
302         case USB_CDC_NOTIFY_SERIAL_STATE:
303                 tty = tty_port_tty_get(&acm->port);
304                 newctrl = get_unaligned_le16(data);
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                 }
315                 acm->ctrlin = newctrl;
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;
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);
341 /* data interface returns incoming bytes, or we got unthrottled */
342 static void acm_read_bulk(struct urb *urb)
344         struct acm_rb *buf;
345         struct acm_ru *rcv = urb->context;
346         struct acm *acm = rcv->instance;
347         int status = urb->status;
349         dbg("Entering acm_read_bulk with status %d", status);
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);
357         if (status)
358                 dev_dbg(&acm->data->dev, "bulk rx status %d\n", status);
360         buf = rcv->buffer;
361         buf->size = urb->actual_length;
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);
382 static void acm_rx_tasklet(unsigned long _acm)
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;
391         dbg("Entering acm_rx_tasklet");
393         if (!ACM_READY(acm)) {
394                 dbg("acm_rx_tasklet: ACM not ready");
395                 return;
396         }
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         }
406         tty = tty_port_tty_get(&acm->port);
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);
419         dbg("acm_rx_tasklet: procesing buf 0x%p, size = %d", buf, buf->size);
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         }
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;
444 urbs:
445         tty_kref_put(tty);
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);
459                 buf = list_entry(acm->spare_read_bufs.next,
460                                  struct acm_rb, list);
461                 list_del(&buf->list);
463                 rcv->buffer = buf;
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;
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);
500 /* data interface wrote those outgoing bytes */
501 static void acm_write_bulk(struct urb *urb)
503         struct acm_wb *wb = urb->context;
504         struct acm *acm = wb->instance;
505         unsigned long flags;
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);
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);
523 static void acm_softint(struct work_struct *work)
525         struct acm *acm = container_of(work, struct acm, work);
526         struct tty_struct *tty;
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);
536 static void acm_waker(struct work_struct *waker)
538         struct acm *acm = container_of(waker, struct acm, waker);
539         int rv;
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);
554  * TTY handlers
555  */
557 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
559         struct acm *acm;
560         int rv = -ENODEV;
561         int i;
562         dbg("Entering acm_tty_open.");
564         mutex_lock(&open_mutex);
566         acm = acm_table[tty->index];
567         if (!acm || !acm->dev)
568                 goto err_out;
569         else
570                 rv = 0;
572         set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
574         tty->driver_data = acm;
575         tty_port_tty_set(&acm->port, tty);
577         if (usb_autopm_get_interface(acm->control) < 0)
578                 goto early_bail;
579         else
580                 acm->control->needs_remote_wakeup = 1;
582         mutex_lock(&acm->mutex);
583         if (acm->port.count++) {
584                 usb_autopm_put_interface(acm->control);
585                 goto done;
586         }
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         }
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;
598         usb_autopm_put_interface(acm->control);
600         INIT_LIST_HEAD(&acm->spare_read_urbs);
601         INIT_LIST_HEAD(&acm->spare_read_bufs);
602         INIT_LIST_HEAD(&acm->filled_read_bufs);
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);
609         acm->throttle = 0;
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;
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;
631 static void acm_tty_unregister(struct acm *acm)
633         int i, nr;
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);
648 static int acm_tty_chars_in_buffer(struct tty_struct *tty);
650 static void acm_port_down(struct acm *acm, int drain)
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);
674 static void acm_tty_hangup(struct tty_struct *tty)
676         struct acm *acm = tty->driver_data;
677         tty_port_hangup(&acm->port);
678         acm_port_down(acm, 0);
681 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
683         struct acm *acm = tty->driver_data;
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);
698 static int acm_tty_write(struct tty_struct *tty,
699                                         const unsigned char *buf, int count)
701         struct acm *acm = tty->driver_data;
702         int stat;
703         unsigned long flags;
704         int wbn;
705         struct acm_wb *wb;
707         dbg("Entering acm_tty_write to write %d bytes,", count);
709         if (!ACM_READY(acm))
710                 return -EINVAL;
711         if (!count)
712                 return 0;
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];
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);
728         stat = acm_write_start(acm, wbn);
729         if (stat < 0)
730                 return stat;
731         return count;
734 static int acm_tty_write_room(struct tty_struct *tty)
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;
746 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
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;
757 static void acm_tty_throttle(struct tty_struct *tty)
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);
767 static void acm_tty_unthrottle(struct tty_struct *tty)
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);
778 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
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;
790 static int acm_tty_tiocmget(struct tty_struct *tty, struct file *file)
792         struct acm *acm = tty->driver_data;
794         if (!ACM_READY(acm))
795                 return -EINVAL;
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;
805 static int acm_tty_tiocmset(struct tty_struct *tty, struct file *file,
806                             unsigned int set, unsigned int clear)
808         struct acm *acm = tty->driver_data;
809         unsigned int newctrl;
811         if (!ACM_READY(acm))
812                 return -EINVAL;
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);
820         newctrl = (newctrl & ~clear) | set;
822         if (acm->ctrlout == newctrl)
823                 return 0;
824         return acm_set_control(acm, acm->ctrlout = newctrl);
827 static int acm_tty_ioctl(struct tty_struct *tty, struct file *file,
828                                         unsigned int cmd, unsigned long arg)
830         struct acm *acm = tty->driver_data;
832         if (!ACM_READY(acm))
833                 return -EINVAL;
835         return -ENOIOCTLCMD;
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
846 static const __u8 acm_tty_size[] = {
847         5, 6, 7, 8
850 static void acm_tty_set_termios(struct tty_struct *tty,
851                                                 struct ktermios *termios_old)
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;
858         if (!ACM_READY(acm))
859                 return;
861         /* FIXME: Needs to support the tty_baud interface */
862         /* FIXME: Broken on sparc */
863         newline.dwDTERate = cpu_to_le32p(acm_tty_speed +
864                 (termios->c_cflag & CBAUD & ~CBAUDEX) + (termios->c_cflag & CBAUDEX ? 15 : 0));
865         newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
866         newline.bParityType = termios->c_cflag & PARENB ?
867                                 (termios->c_cflag & PARODD ? 1 : 2) +
868                                 (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
869         newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
870         /* FIXME: Needs to clear unsupported bits in the termios */
871         acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
873         if (!newline.dwDTERate) {
874                 newline.dwDTERate = acm->line.dwDTERate;
875                 newctrl &= ~ACM_CTRL_DTR;
876         } else
877                 newctrl |=  ACM_CTRL_DTR;
879         if (newctrl != acm->ctrlout)
880                 acm_set_control(acm, acm->ctrlout = newctrl);
882         if (memcmp(&acm->line, &newline, sizeof newline)) {
883                 memcpy(&acm->line, &newline, sizeof newline);
884                 dbg("set line: %d %d %d %d", le32_to_cpu(newline.dwDTERate),
885                         newline.bCharFormat, newline.bParityType,
886                         newline.bDataBits);
887                 acm_set_line(acm, &acm->line);
888         }
892  * USB probe and disconnect routines.
893  */
895 /* Little helpers: write/read buffers free */
896 static void acm_write_buffers_free(struct acm *acm)
898         int i;
899         struct acm_wb *wb;
900         struct usb_device *usb_dev = interface_to_usbdev(acm->control);
902         for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
903                 usb_buffer_free(usb_dev, acm->writesize, wb->buf, wb->dmah);
906 static void acm_read_buffers_free(struct acm *acm)
908         struct usb_device *usb_dev = interface_to_usbdev(acm->control);
909         int i, n = acm->rx_buflimit;
911         for (i = 0; i < n; i++)
912                 usb_buffer_free(usb_dev, acm->readsize,
913                                         acm->rb[i].base, acm->rb[i].dma);
916 /* Little helper: write buffers allocate */
917 static int acm_write_buffers_alloc(struct acm *acm)
919         int i;
920         struct acm_wb *wb;
922         for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
923                 wb->buf = usb_buffer_alloc(acm->dev, acm->writesize, GFP_KERNEL,
924                     &wb->dmah);
925                 if (!wb->buf) {
926                         while (i != 0) {
927                                 --i;
928                                 --wb;
929                                 usb_buffer_free(acm->dev, acm->writesize,
930                                     wb->buf, wb->dmah);
931                         }
932                         return -ENOMEM;
933                 }
934         }
935         return 0;
938 static int acm_probe(struct usb_interface *intf,
939                      const struct usb_device_id *id)
941         struct usb_cdc_union_desc *union_header = NULL;
942         struct usb_cdc_country_functional_desc *cfd = NULL;
943         unsigned char *buffer = intf->altsetting->extra;
944         int buflen = intf->altsetting->extralen;
945         struct usb_interface *control_interface;
946         struct usb_interface *data_interface;
947         struct usb_endpoint_descriptor *epctrl = NULL;
948         struct usb_endpoint_descriptor *epread = NULL;
949         struct usb_endpoint_descriptor *epwrite = NULL;
950         struct usb_device *usb_dev = interface_to_usbdev(intf);
951         struct acm *acm;
952         int minor;
953         int ctrlsize, readsize;
954         u8 *buf;
955         u8 ac_management_function = 0;
956         u8 call_management_function = 0;
957         int call_interface_num = -1;
958         int data_interface_num;
959         unsigned long quirks;
960         int num_rx_buf;
961         int i;
962         int combined_interfaces = 0;
964         /* normal quirks */
965         quirks = (unsigned long)id->driver_info;
966         num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
968         /* handle quirks deadly to normal probing*/
969         if (quirks == NO_UNION_NORMAL) {
970                 data_interface = usb_ifnum_to_if(usb_dev, 1);
971                 control_interface = usb_ifnum_to_if(usb_dev, 0);
972                 goto skip_normal_probe;
973         }
975         /* normal probing*/
976         if (!buffer) {
977                 dev_err(&intf->dev, "Weird descriptor references\n");
978                 return -EINVAL;
979         }
981         if (!buflen) {
982                 if (intf->cur_altsetting->endpoint->extralen &&
983                                 intf->cur_altsetting->endpoint->extra) {
984                         dev_dbg(&intf->dev,
985                                 "Seeking extra descriptors on endpoint\n");
986                         buflen = intf->cur_altsetting->endpoint->extralen;
987                         buffer = intf->cur_altsetting->endpoint->extra;
988                 } else {
989                         dev_err(&intf->dev,
990                                 "Zero length descriptor references\n");
991                         return -EINVAL;
992                 }
993         }
995         while (buflen > 0) {
996                 if (buffer[1] != USB_DT_CS_INTERFACE) {
997                         dev_err(&intf->dev, "skipping garbage\n");
998                         goto next_desc;
999                 }
1001                 switch (buffer[2]) {
1002                 case USB_CDC_UNION_TYPE: /* we've found it */
1003                         if (union_header) {
1004                                 dev_err(&intf->dev, "More than one "
1005                                         "union descriptor, skipping ...\n");
1006                                 goto next_desc;
1007                         }
1008                         union_header = (struct usb_cdc_union_desc *)buffer;
1009                         break;
1010                 case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
1011                         cfd = (struct usb_cdc_country_functional_desc *)buffer;
1012                         break;
1013                 case USB_CDC_HEADER_TYPE: /* maybe check version */
1014                         break; /* for now we ignore it */
1015                 case USB_CDC_ACM_TYPE:
1016                         ac_management_function = buffer[3];
1017                         break;
1018                 case USB_CDC_CALL_MANAGEMENT_TYPE:
1019                         call_management_function = buffer[3];
1020                         call_interface_num = buffer[4];
1021                         if ((call_management_function & 3) != 3)
1022                                 dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n");
1023                         break;
1024                 default:
1025                         /* there are LOTS more CDC descriptors that
1026                          * could legitimately be found here.
1027                          */
1028                         dev_dbg(&intf->dev, "Ignoring descriptor: "
1029                                         "type %02x, length %d\n",
1030                                         buffer[2], buffer[0]);
1031                         break;
1032                 }
1033 next_desc:
1034                 buflen -= buffer[0];
1035                 buffer += buffer[0];
1036         }
1038         if (!union_header) {
1039                 if (call_interface_num > 0) {
1040                         dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1041                         data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
1042                         control_interface = intf;
1043                 } else {
1044                         if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
1045                                 dev_dbg(&intf->dev,"No union descriptor, giving up\n");
1046                                 return -ENODEV;
1047                         } else {
1048                                 dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
1049                                 combined_interfaces = 1;
1050                                 control_interface = data_interface = intf;
1051                                 goto look_for_collapsed_interface;
1052                         }
1053                 }
1054         } else {
1055                 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1056                 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
1057                 if (!control_interface || !data_interface) {
1058                         dev_dbg(&intf->dev, "no interfaces\n");
1059                         return -ENODEV;
1060                 }
1061         }
1063         if (data_interface_num != call_interface_num)
1064                 dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1066         if (control_interface == data_interface) {
1067                 /* some broken devices designed for windows work this way */
1068                 dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1069                 combined_interfaces = 1;
1070                 /* a popular other OS doesn't use it */
1071                 quirks |= NO_CAP_LINE;
1072                 if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1073                         dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1074                         return -EINVAL;
1075                 }
1076 look_for_collapsed_interface:
1077                 for (i = 0; i < 3; i++) {
1078                         struct usb_endpoint_descriptor *ep;
1079                         ep = &data_interface->cur_altsetting->endpoint[i].desc;
1081                         if (usb_endpoint_is_int_in(ep))
1082                                 epctrl = ep;
1083                         else if (usb_endpoint_is_bulk_out(ep))
1084                                 epwrite = ep;
1085                         else if (usb_endpoint_is_bulk_in(ep))
1086                                 epread = ep;
1087                         else
1088                                 return -EINVAL;
1089                 }
1090                 if (!epctrl || !epread || !epwrite)
1091                         return -ENODEV;
1092                 else
1093                         goto made_compressed_probe;
1094         }
1096 skip_normal_probe:
1098         /*workaround for switched interfaces */
1099         if (data_interface->cur_altsetting->desc.bInterfaceClass
1100                                                 != CDC_DATA_INTERFACE_TYPE) {
1101                 if (control_interface->cur_altsetting->desc.bInterfaceClass
1102                                                 == CDC_DATA_INTERFACE_TYPE) {
1103                         struct usb_interface *t;
1104                         dev_dbg(&intf->dev,
1105                                 "Your device has switched interfaces.\n");
1106                         t = control_interface;
1107                         control_interface = data_interface;
1108                         data_interface = t;
1109                 } else {
1110                         return -EINVAL;
1111                 }
1112         }
1114         /* Accept probe requests only for the control interface */
1115         if (!combined_interfaces && intf != control_interface)
1116                 return -ENODEV;
1118         if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1119                 /* valid in this context */
1120                 dev_dbg(&intf->dev, "The data interface isn't available\n");
1121                 return -EBUSY;
1122         }
1125         if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
1126                 return -EINVAL;
1128         epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1129         epread = &data_interface->cur_altsetting->endpoint[0].desc;
1130         epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1133         /* workaround for switched endpoints */
1134         if (!usb_endpoint_dir_in(epread)) {
1135                 /* descriptors are swapped */
1136                 struct usb_endpoint_descriptor *t;
1137                 dev_dbg(&intf->dev,
1138                         "The data interface has switched endpoints\n");
1139                 t = epread;
1140                 epread = epwrite;
1141                 epwrite = t;
1142         }
1143 made_compressed_probe:
1144         dbg("interfaces are valid");
1145         for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
1147         if (minor == ACM_TTY_MINORS) {
1148                 dev_err(&intf->dev, "no more free acm devices\n");
1149                 return -ENODEV;
1150         }
1152         acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1153         if (acm == NULL) {
1154                 dev_dbg(&intf->dev, "out of memory (acm kzalloc)\n");
1155                 goto alloc_fail;
1156         }
1158         ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize);
1159         readsize = le16_to_cpu(epread->wMaxPacketSize) *
1160                                 (quirks == SINGLE_RX_URB ? 1 : 2);
1161         acm->combined_interfaces = combined_interfaces;
1162         acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize) * 20;
1163         acm->control = control_interface;
1164         acm->data = data_interface;
1165         acm->minor = minor;
1166         acm->dev = usb_dev;
1167         acm->ctrl_caps = ac_management_function;
1168         if (quirks & NO_CAP_LINE)
1169                 acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1170         acm->ctrlsize = ctrlsize;
1171         acm->readsize = readsize;
1172         acm->rx_buflimit = num_rx_buf;
1173         acm->urb_task.func = acm_rx_tasklet;
1174         acm->urb_task.data = (unsigned long) acm;
1175         INIT_WORK(&acm->work, acm_softint);
1176         INIT_WORK(&acm->waker, acm_waker);
1177         init_waitqueue_head(&acm->drain_wait);
1178         spin_lock_init(&acm->throttle_lock);
1179         spin_lock_init(&acm->write_lock);
1180         spin_lock_init(&acm->read_lock);
1181         mutex_init(&acm->mutex);
1182         acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1183         acm->is_int_ep = usb_endpoint_xfer_int(epread);
1184         if (acm->is_int_ep)
1185                 acm->bInterval = epread->bInterval;
1186         tty_port_init(&acm->port);
1187         acm->port.ops = &acm_port_ops;
1189         buf = usb_buffer_alloc(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1190         if (!buf) {
1191                 dev_dbg(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1192                 goto alloc_fail2;
1193         }
1194         acm->ctrl_buffer = buf;
1196         if (acm_write_buffers_alloc(acm) < 0) {
1197                 dev_dbg(&intf->dev, "out of memory (write buffer alloc)\n");
1198                 goto alloc_fail4;
1199         }
1201         acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1202         if (!acm->ctrlurb) {
1203                 dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1204                 goto alloc_fail5;
1205         }
1206         for (i = 0; i < num_rx_buf; i++) {
1207                 struct acm_ru *rcv = &(acm->ru[i]);
1209                 rcv->urb = usb_alloc_urb(0, GFP_KERNEL);
1210                 if (rcv->urb == NULL) {
1211                         dev_dbg(&intf->dev,
1212                                 "out of memory (read urbs usb_alloc_urb)\n");
1213                         goto alloc_fail7;
1214                 }
1216                 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1217                 rcv->instance = acm;
1218         }
1219         for (i = 0; i < num_rx_buf; i++) {
1220                 struct acm_rb *rb = &(acm->rb[i]);
1222                 rb->base = usb_buffer_alloc(acm->dev, readsize,
1223                                 GFP_KERNEL, &rb->dma);
1224                 if (!rb->base) {
1225                         dev_dbg(&intf->dev,
1226                                 "out of memory (read bufs usb_buffer_alloc)\n");
1227                         goto alloc_fail7;
1228                 }
1229         }
1230         for (i = 0; i < ACM_NW; i++) {
1231                 struct acm_wb *snd = &(acm->wb[i]);
1233                 snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1234                 if (snd->urb == NULL) {
1235                         dev_dbg(&intf->dev,
1236                                 "out of memory (write urbs usb_alloc_urb)");
1237                         goto alloc_fail7;
1238                 }
1240                 if (usb_endpoint_xfer_int(epwrite))
1241                         usb_fill_int_urb(snd->urb, usb_dev,
1242                                 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1243                                 NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1244                 else
1245                         usb_fill_bulk_urb(snd->urb, usb_dev,
1246                                 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1247                                 NULL, acm->writesize, acm_write_bulk, snd);
1248                 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1249                 snd->instance = acm;
1250         }
1252         usb_set_intfdata(intf, acm);
1254         i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1255         if (i < 0)
1256                 goto alloc_fail8;
1258         if (cfd) { /* export the country data */
1259                 acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1260                 if (!acm->country_codes)
1261                         goto skip_countries;
1262                 acm->country_code_size = cfd->bLength - 4;
1263                 memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1264                                                         cfd->bLength - 4);
1265                 acm->country_rel_date = cfd->iCountryCodeRelDate;
1267                 i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1268                 if (i < 0) {
1269                         kfree(acm->country_codes);
1270                         goto skip_countries;
1271                 }
1273                 i = device_create_file(&intf->dev,
1274                                                 &dev_attr_iCountryCodeRelDate);
1275                 if (i < 0) {
1276                         kfree(acm->country_codes);
1277                         goto skip_countries;
1278                 }
1279         }
1281 skip_countries:
1282         usb_fill_int_urb(acm->ctrlurb, usb_dev,
1283                          usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1284                          acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1285                          /* works around buggy devices */
1286                          epctrl->bInterval ? epctrl->bInterval : 0xff);
1287         acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1288         acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1290         dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1292         acm_set_control(acm, acm->ctrlout);
1294         acm->line.dwDTERate = cpu_to_le32(9600);
1295         acm->line.bDataBits = 8;
1296         acm_set_line(acm, &acm->line);
1298         usb_driver_claim_interface(&acm_driver, data_interface, acm);
1299         usb_set_intfdata(data_interface, acm);
1301         usb_get_intf(control_interface);
1302         tty_register_device(acm_tty_driver, minor, &control_interface->dev);
1304         acm_table[minor] = acm;
1306         return 0;
1307 alloc_fail8:
1308         for (i = 0; i < ACM_NW; i++)
1309                 usb_free_urb(acm->wb[i].urb);
1310 alloc_fail7:
1311         acm_read_buffers_free(acm);
1312         for (i = 0; i < num_rx_buf; i++)
1313                 usb_free_urb(acm->ru[i].urb);
1314         usb_free_urb(acm->ctrlurb);
1315 alloc_fail5:
1316         acm_write_buffers_free(acm);
1317 alloc_fail4:
1318         usb_buffer_free(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1319 alloc_fail2:
1320         kfree(acm);
1321 alloc_fail:
1322         return -ENOMEM;
1325 static void stop_data_traffic(struct acm *acm)
1327         int i;
1328         dbg("Entering stop_data_traffic");
1330         tasklet_disable(&acm->urb_task);
1332         usb_kill_urb(acm->ctrlurb);
1333         for (i = 0; i < ACM_NW; i++)
1334                 usb_kill_urb(acm->wb[i].urb);
1335         for (i = 0; i < acm->rx_buflimit; i++)
1336                 usb_kill_urb(acm->ru[i].urb);
1338         tasklet_enable(&acm->urb_task);
1340         cancel_work_sync(&acm->work);
1341         cancel_work_sync(&acm->waker);
1344 static void acm_disconnect(struct usb_interface *intf)
1346         struct acm *acm = usb_get_intfdata(intf);
1347         struct usb_device *usb_dev = interface_to_usbdev(intf);
1348         struct tty_struct *tty;
1350         /* sibling interface is already cleaning up */
1351         if (!acm)
1352                 return;
1354         mutex_lock(&open_mutex);
1355         if (acm->country_codes) {
1356                 device_remove_file(&acm->control->dev,
1357                                 &dev_attr_wCountryCodes);
1358                 device_remove_file(&acm->control->dev,
1359                                 &dev_attr_iCountryCodeRelDate);
1360         }
1361         device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1362         acm->dev = NULL;
1363         usb_set_intfdata(acm->control, NULL);
1364         usb_set_intfdata(acm->data, NULL);
1366         stop_data_traffic(acm);
1368         acm_write_buffers_free(acm);
1369         usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer,
1370                                                                 acm->ctrl_dma);
1371         acm_read_buffers_free(acm);
1373         if (!acm->combined_interfaces)
1374                 usb_driver_release_interface(&acm_driver, intf == acm->control ?
1375                                         acm->data : acm->control);
1377         if (acm->port.count == 0) {
1378                 acm_tty_unregister(acm);
1379                 mutex_unlock(&open_mutex);
1380                 return;
1381         }
1383         mutex_unlock(&open_mutex);
1384         tty = tty_port_tty_get(&acm->port);
1385         if (tty) {
1386                 tty_hangup(tty);
1387                 tty_kref_put(tty);
1388         }
1391 #ifdef CONFIG_PM
1392 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1394         struct acm *acm = usb_get_intfdata(intf);
1395         int cnt;
1397         if (message.event & PM_EVENT_AUTO) {
1398                 int b;
1400                 spin_lock_irq(&acm->read_lock);
1401                 spin_lock(&acm->write_lock);
1402                 b = acm->processing + acm->transmitting;
1403                 spin_unlock(&acm->write_lock);
1404                 spin_unlock_irq(&acm->read_lock);
1405                 if (b)
1406                         return -EBUSY;
1407         }
1409         spin_lock_irq(&acm->read_lock);
1410         spin_lock(&acm->write_lock);
1411         cnt = acm->susp_count++;
1412         spin_unlock(&acm->write_lock);
1413         spin_unlock_irq(&acm->read_lock);
1415         if (cnt)
1416                 return 0;
1417         /*
1418         we treat opened interfaces differently,
1419         we must guard against open
1420         */
1421         mutex_lock(&acm->mutex);
1423         if (acm->port.count)
1424                 stop_data_traffic(acm);
1426         mutex_unlock(&acm->mutex);
1427         return 0;
1430 static int acm_resume(struct usb_interface *intf)
1432         struct acm *acm = usb_get_intfdata(intf);
1433         int rv = 0;
1434         int cnt;
1436         spin_lock_irq(&acm->read_lock);
1437         acm->susp_count -= 1;
1438         cnt = acm->susp_count;
1439         spin_unlock_irq(&acm->read_lock);
1441         if (cnt)
1442                 return 0;
1444         mutex_lock(&acm->mutex);
1445         if (acm->port.count) {
1446                 rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
1447                 if (rv < 0)
1448                         goto err_out;
1450                 tasklet_schedule(&acm->urb_task);
1451         }
1453 err_out:
1454         mutex_unlock(&acm->mutex);
1455         return rv;
1458 #endif /* CONFIG_PM */
1460  * USB driver structure.
1461  */
1463 static struct usb_device_id acm_ids[] = {
1464         /* quirky and broken devices */
1465         { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1466         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1467         },
1468         { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1469         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1470         },
1471         { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1472         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1473         },
1474         { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1475         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1476         },
1477         { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1478         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1479         },
1480         { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1481         .driver_info = SINGLE_RX_URB,
1482         },
1483         { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1484         .driver_info = SINGLE_RX_URB, /* firmware bug */
1485         },
1486         { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1487         .driver_info = SINGLE_RX_URB, /* firmware bug */
1488         },
1489         { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1490         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1491         },
1492         { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1493         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1494         },
1495         { USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1496         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1497         },
1498         { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1499         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1500         },
1501         { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1502         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1503         },
1504         { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1505         },
1506         { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1507         .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1508                                            data interface instead of
1509                                            communications interface.
1510                                            Maybe we should define a new
1511                                            quirk for this. */
1512         },
1513         { USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1514         .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1515         },
1517         /* control interfaces with various AT-command sets */
1518         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1519                 USB_CDC_ACM_PROTO_AT_V25TER) },
1520         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1521                 USB_CDC_ACM_PROTO_AT_PCCA101) },
1522         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1523                 USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1524         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1525                 USB_CDC_ACM_PROTO_AT_GSM) },
1526         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1527                 USB_CDC_ACM_PROTO_AT_3G) },
1528         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1529                 USB_CDC_ACM_PROTO_AT_CDMA) },
1531         /* NOTE:  COMM/ACM/0xff is likely MSFT RNDIS ... NOT a modem!! */
1532         { }
1535 MODULE_DEVICE_TABLE(usb, acm_ids);
1537 static struct usb_driver acm_driver = {
1538         .name =         "cdc_acm",
1539         .probe =        acm_probe,
1540         .disconnect =   acm_disconnect,
1541 #ifdef CONFIG_PM
1542         .suspend =      acm_suspend,
1543         .resume =       acm_resume,
1544 #endif
1545         .id_table =     acm_ids,
1546 #ifdef CONFIG_PM
1547         .supports_autosuspend = 1,
1548 #endif
1552  * TTY driver structures.
1553  */
1555 static const struct tty_operations acm_ops = {
1556         .open =                 acm_tty_open,
1557         .close =                acm_tty_close,
1558         .hangup =               acm_tty_hangup,
1559         .write =                acm_tty_write,
1560         .write_room =           acm_tty_write_room,
1561         .ioctl =                acm_tty_ioctl,
1562         .throttle =             acm_tty_throttle,
1563         .unthrottle =           acm_tty_unthrottle,
1564         .chars_in_buffer =      acm_tty_chars_in_buffer,
1565         .break_ctl =            acm_tty_break_ctl,
1566         .set_termios =          acm_tty_set_termios,
1567         .tiocmget =             acm_tty_tiocmget,
1568         .tiocmset =             acm_tty_tiocmset,
1572  * Init / exit.
1573  */
1575 static int __init acm_init(void)
1577         int retval;
1578         acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1579         if (!acm_tty_driver)
1580                 return -ENOMEM;
1581         acm_tty_driver->owner = THIS_MODULE,
1582         acm_tty_driver->driver_name = "acm",
1583         acm_tty_driver->name = "ttyACM",
1584         acm_tty_driver->major = ACM_TTY_MAJOR,
1585         acm_tty_driver->minor_start = 0,
1586         acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1587         acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1588         acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1589         acm_tty_driver->init_termios = tty_std_termios;
1590         acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
1591                                                                 HUPCL | CLOCAL;
1592         tty_set_operations(acm_tty_driver, &acm_ops);
1594         retval = tty_register_driver(acm_tty_driver);
1595         if (retval) {
1596                 put_tty_driver(acm_tty_driver);
1597                 return retval;
1598         }
1600         retval = usb_register(&acm_driver);
1601         if (retval) {
1602                 tty_unregister_driver(acm_tty_driver);
1603                 put_tty_driver(acm_tty_driver);
1604                 return retval;
1605         }
1607         printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
1608                DRIVER_DESC "\n");
1610         return 0;
1613 static void __exit acm_exit(void)
1615         usb_deregister(&acm_driver);
1616         tty_unregister_driver(acm_tty_driver);
1617         put_tty_driver(acm_tty_driver);
1620 module_init(acm_init);
1621 module_exit(acm_exit);
1623 MODULE_AUTHOR(DRIVER_AUTHOR);
1624 MODULE_DESCRIPTION(DRIVER_DESC);
1625 MODULE_LICENSE("GPL");
1626 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);