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>
11 * USB Abstract Control Model driver for USB modems and ISDN adapters
16 * v0.9 - thorough cleaning, URBification, almost a rewrite
17 * v0.10 - some more cleanups
18 * v0.11 - fixed flow control, read error doesn't stop reads
19 * v0.12 - added TIOCM ioctls, added break handling, made struct acm kmalloced
20 * v0.13 - added termios, added hangup
21 * v0.14 - sized down struct acm
22 * v0.15 - fixed flow control again - characters could be lost
23 * v0.16 - added code for modems with swapped data and control interfaces
24 * v0.17 - added new style probing
25 * v0.18 - fixed new style probing for devices with more configurations
26 * v0.19 - fixed CLOCAL handling (thanks to Richard Shih-Ping Chan)
27 * v0.20 - switched to probing on interface (rather than device) class
28 * v0.21 - revert to probing on device for devices with multiple configs
29 * v0.22 - probe only the control interface. if usbcore doesn't choose the
30 * config we want, sysadmin changes bConfigurationValue in sysfs.
31 * v0.23 - use softirq for rx processing, as needed by tty layer
32 * v0.24 - change probe method to evaluate CDC union descriptor
33 * v0.25 - downstream tasks paralelized to maximize throughput
34 * v0.26 - multiple write urbs, writesize increased
38 * This program is free software; you can redistribute it and/or modify
39 * it under the terms of the GNU General Public License as published by
40 * the Free Software Foundation; either version 2 of the License, or
41 * (at your option) any later version.
43 * This program is distributed in the hope that it will be useful,
44 * but WITHOUT ANY WARRANTY; without even the implied warranty of
45 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
46 * GNU General Public License for more details.
48 * You should have received a copy of the GNU General Public License
49 * along with this program; if not, write to the Free Software
50 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
55 #include <linux/kernel.h>
56 #include <linux/errno.h>
57 #include <linux/init.h>
58 #include <linux/slab.h>
59 #include <linux/tty.h>
60 #include <linux/tty_driver.h>
61 #include <linux/tty_flip.h>
62 #include <linux/module.h>
63 #include <linux/mutex.h>
64 #include <asm/uaccess.h>
65 #include <linux/usb.h>
66 #include <linux/usb/cdc.h>
67 #include <asm/byteorder.h>
68 #include <asm/unaligned.h>
69 #include <linux/list.h>
76 #define DRIVER_VERSION "v0.26"
77 #define DRIVER_AUTHOR "Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik, David Kubicek"
78 #define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters"
80 static struct usb_driver acm_driver;
81 static struct tty_driver *acm_tty_driver;
82 static struct acm *acm_table[ACM_TTY_MINORS];
84 static DEFINE_MUTEX(open_mutex);
86 #define ACM_READY(acm) (acm && acm->dev && acm->used)
89 * Functions for ACM control messages.
92 static int acm_ctrl_msg(struct acm *acm, int request, int value, void *buf, int len)
94 int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
95 request, USB_RT_ACM, value,
96 acm->control->altsetting[0].desc.bInterfaceNumber,
98 dbg("acm_control_msg: rq: 0x%02x val: %#x len: %#x result: %d", request, value, len, retval);
99 return retval < 0 ? retval : 0;
102 /* devices aren't required to support these requests.
103 * the cdc acm descriptor tells whether they do...
105 #define acm_set_control(acm, control) \
106 acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
107 #define acm_set_line(acm, line) \
108 acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
109 #define acm_send_break(acm, ms) \
110 acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
113 * Write buffer management.
114 * All of these assume proper locks taken by the caller.
117 static int acm_wb_alloc(struct acm *acm)
130 wbn = (wbn + 1) % ACM_NW;
136 static int acm_wb_is_avail(struct acm *acm)
141 for (i = 0; i < ACM_NW; i++) {
147 static inline int acm_wb_is_used(struct acm *acm, int wbn)
149 return acm->wb[wbn].use;
155 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
159 spin_lock_irqsave(&acm->write_lock, flags);
160 acm->write_ready = 1;
163 spin_unlock_irqrestore(&acm->write_lock, flags);
169 * the caller is responsible for locking
172 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
178 wb->urb->transfer_buffer = wb->buf;
179 wb->urb->transfer_dma = wb->dmah;
180 wb->urb->transfer_buffer_length = wb->len;
181 wb->urb->dev = acm->dev;
183 if ((rc = usb_submit_urb(wb->urb, GFP_ATOMIC)) < 0) {
184 dbg("usb_submit_urb(write bulk) failed: %d", rc);
185 acm_write_done(acm, wb);
190 static int acm_write_start(struct acm *acm, int wbn)
196 spin_lock_irqsave(&acm->write_lock, flags);
198 spin_unlock_irqrestore(&acm->write_lock, flags);
202 if (!acm->write_ready) {
203 spin_unlock_irqrestore(&acm->write_lock, flags);
204 return 0; /* A white lie */
208 if(acm_wb_is_avail(acm) <= 1)
209 acm->write_ready = 0;
211 dbg("%s susp_count: %d", __func__, acm->susp_count);
212 if (acm->susp_count) {
213 acm->old_ready = acm->write_ready;
214 acm->delayed_wb = wb;
215 acm->write_ready = 0;
216 schedule_work(&acm->waker);
217 spin_unlock_irqrestore(&acm->write_lock, flags);
218 return 0; /* A white lie */
220 usb_mark_last_busy(acm->dev);
222 if (!acm_wb_is_used(acm, wbn)) {
223 spin_unlock_irqrestore(&acm->write_lock, flags);
227 rc = acm_start_wb(acm, wb);
228 spin_unlock_irqrestore(&acm->write_lock, flags);
234 * attributes exported through sysfs
236 static ssize_t show_caps
237 (struct device *dev, struct device_attribute *attr, char *buf)
239 struct usb_interface *intf = to_usb_interface(dev);
240 struct acm *acm = usb_get_intfdata(intf);
242 return sprintf(buf, "%d", acm->ctrl_caps);
244 static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
246 static ssize_t show_country_codes
247 (struct device *dev, struct device_attribute *attr, char *buf)
249 struct usb_interface *intf = to_usb_interface(dev);
250 struct acm *acm = usb_get_intfdata(intf);
252 memcpy(buf, acm->country_codes, acm->country_code_size);
253 return acm->country_code_size;
256 static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
258 static ssize_t show_country_rel_date
259 (struct device *dev, struct device_attribute *attr, char *buf)
261 struct usb_interface *intf = to_usb_interface(dev);
262 struct acm *acm = usb_get_intfdata(intf);
264 return sprintf(buf, "%d", acm->country_rel_date);
267 static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
269 * Interrupt handlers for various ACM device responses
272 /* control interface reports status changes with "interrupt" transfers */
273 static void acm_ctrl_irq(struct urb *urb)
275 struct acm *acm = urb->context;
276 struct usb_cdc_notification *dr = urb->transfer_buffer;
280 int status = urb->status;
289 /* this urb is terminated, clean up */
290 dbg("%s - urb shutting down with status: %d", __func__, status);
293 dbg("%s - nonzero urb status received: %d", __func__, status);
300 data = (unsigned char *)(dr + 1);
301 switch (dr->bNotificationType) {
303 case USB_CDC_NOTIFY_NETWORK_CONNECTION:
305 dbg("%s network", dr->wValue ? "connected to" : "disconnected from");
308 case USB_CDC_NOTIFY_SERIAL_STATE:
310 newctrl = get_unaligned_le16(data);
312 if (acm->tty && !acm->clocal && (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
313 dbg("calling hangup");
314 tty_hangup(acm->tty);
317 acm->ctrlin = newctrl;
319 dbg("input control lines: dcd%c dsr%c break%c ring%c framing%c parity%c overrun%c",
320 acm->ctrlin & ACM_CTRL_DCD ? '+' : '-', acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',
321 acm->ctrlin & ACM_CTRL_BRK ? '+' : '-', acm->ctrlin & ACM_CTRL_RI ? '+' : '-',
322 acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-', acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',
323 acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');
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]);
334 usb_mark_last_busy(acm->dev);
335 retval = usb_submit_urb (urb, GFP_ATOMIC);
337 err ("%s - usb_submit_urb failed with result %d",
341 /* data interface returns incoming bytes, or we got unthrottled */
342 static void acm_read_bulk(struct urb *urb)
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");
355 usb_mark_last_busy(acm->dev);
358 dev_dbg(&acm->data->dev, "bulk rx status %d\n", status);
361 buf->size = urb->actual_length;
363 if (likely(status == 0)) {
364 spin_lock(&acm->read_lock);
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);
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 */
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;
386 struct tty_struct *tty = acm->tty;
389 unsigned char throttled;
391 dbg("Entering acm_rx_tasklet");
395 dbg("acm_rx_tasklet: ACM not ready");
399 spin_lock_irqsave(&acm->throttle_lock, flags);
400 throttled = acm->throttle;
401 spin_unlock_irqrestore(&acm->throttle_lock, flags);
404 dbg("acm_rx_tasklet: throttled");
409 spin_lock_irqsave(&acm->read_lock, flags);
410 if (list_empty(&acm->filled_read_bufs)) {
411 spin_unlock_irqrestore(&acm->read_lock, flags);
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 tty_buffer_request_room(tty, buf->size);
422 spin_lock_irqsave(&acm->throttle_lock, flags);
423 throttled = acm->throttle;
424 spin_unlock_irqrestore(&acm->throttle_lock, flags);
426 tty_insert_flip_string(tty, buf->base, buf->size);
427 tty_flip_buffer_push(tty);
430 dbg("Throttling noticed");
431 spin_lock_irqsave(&acm->read_lock, flags);
432 list_add(&buf->list, &acm->filled_read_bufs);
433 spin_unlock_irqrestore(&acm->read_lock, flags);
437 spin_lock_irqsave(&acm->read_lock, flags);
438 list_add(&buf->list, &acm->spare_read_bufs);
439 spin_unlock_irqrestore(&acm->read_lock, flags);
443 while (!list_empty(&acm->spare_read_bufs)) {
444 spin_lock_irqsave(&acm->read_lock, flags);
445 if (list_empty(&acm->spare_read_urbs)) {
447 spin_unlock_irqrestore(&acm->read_lock, flags);
450 rcv = list_entry(acm->spare_read_urbs.next,
451 struct acm_ru, list);
452 list_del(&rcv->list);
453 spin_unlock_irqrestore(&acm->read_lock, flags);
455 buf = list_entry(acm->spare_read_bufs.next,
456 struct acm_rb, list);
457 list_del(&buf->list);
461 usb_fill_bulk_urb(rcv->urb, acm->dev,
466 rcv->urb->transfer_dma = buf->dma;
467 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
469 /* This shouldn't kill the driver as unsuccessful URBs are returned to the
470 free-urbs-pool and resubmited ASAP */
471 spin_lock_irqsave(&acm->read_lock, flags);
472 if (acm->susp_count || usb_submit_urb(rcv->urb, GFP_ATOMIC) < 0) {
473 list_add(&buf->list, &acm->spare_read_bufs);
474 list_add(&rcv->list, &acm->spare_read_urbs);
476 spin_unlock_irqrestore(&acm->read_lock, flags);
479 spin_unlock_irqrestore(&acm->read_lock, flags);
480 dbg("acm_rx_tasklet: sending urb 0x%p, rcv 0x%p, buf 0x%p", rcv->urb, rcv, buf);
483 spin_lock_irqsave(&acm->read_lock, flags);
485 spin_unlock_irqrestore(&acm->read_lock, flags);
488 /* data interface wrote those outgoing bytes */
489 static void acm_write_bulk(struct urb *urb)
492 struct acm_wb *wb = urb->context;
494 dbg("Entering acm_write_bulk with status %d", urb->status);
497 acm_write_done(acm, wb);
499 schedule_work(&acm->work);
502 static void acm_softint(struct work_struct *work)
504 struct acm *acm = container_of(work, struct acm, work);
505 dbg("Entering acm_softint.");
509 tty_wakeup(acm->tty);
512 static void acm_waker(struct work_struct *waker)
514 struct acm *acm = container_of(waker, struct acm, waker);
518 rv = usb_autopm_get_interface(acm->control);
520 err("Autopm failure in %s", __func__);
523 if (acm->delayed_wb) {
524 acm_start_wb(acm, acm->delayed_wb);
525 acm->delayed_wb = NULL;
527 spin_lock_irqsave(&acm->write_lock, flags);
528 acm->write_ready = acm->old_ready;
529 spin_unlock_irqrestore(&acm->write_lock, flags);
530 usb_autopm_put_interface(acm->control);
537 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
542 dbg("Entering acm_tty_open.");
544 mutex_lock(&open_mutex);
546 acm = acm_table[tty->index];
547 if (!acm || !acm->dev)
552 set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
553 tty->driver_data = acm;
556 /* force low_latency on so that our tty_push actually forces the data through,
557 otherwise it is scheduled, and with high data rates data can get lost. */
558 tty->low_latency = 1;
560 if (usb_autopm_get_interface(acm->control) < 0)
563 acm->control->needs_remote_wakeup = 1;
565 mutex_lock(&acm->mutex);
567 usb_autopm_put_interface(acm->control);
572 acm->ctrlurb->dev = acm->dev;
573 if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
574 dbg("usb_submit_urb(ctrl irq) failed");
578 if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS) &&
579 (acm->ctrl_caps & USB_CDC_CAP_LINE))
581 usb_autopm_put_interface(acm->control);
583 INIT_LIST_HEAD(&acm->spare_read_urbs);
584 INIT_LIST_HEAD(&acm->spare_read_bufs);
585 INIT_LIST_HEAD(&acm->filled_read_bufs);
586 for (i = 0; i < acm->rx_buflimit; i++) {
587 list_add(&(acm->ru[i].list), &acm->spare_read_urbs);
589 for (i = 0; i < acm->rx_buflimit; i++) {
590 list_add(&(acm->rb[i].list), &acm->spare_read_bufs);
595 tasklet_schedule(&acm->urb_task);
599 mutex_unlock(&acm->mutex);
600 mutex_unlock(&open_mutex);
604 usb_kill_urb(acm->ctrlurb);
606 usb_autopm_put_interface(acm->control);
608 mutex_unlock(&acm->mutex);
610 mutex_unlock(&open_mutex);
614 static void acm_tty_unregister(struct acm *acm)
618 nr = acm->rx_buflimit;
619 tty_unregister_device(acm_tty_driver, acm->minor);
620 usb_put_intf(acm->control);
621 acm_table[acm->minor] = NULL;
622 usb_free_urb(acm->ctrlurb);
623 for (i = 0; i < ACM_NW; i++)
624 usb_free_urb(acm->wb[i].urb);
625 for (i = 0; i < nr; i++)
626 usb_free_urb(acm->ru[i].urb);
627 kfree(acm->country_codes);
631 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
633 struct acm *acm = tty->driver_data;
636 if (!acm || !acm->used)
639 nr = acm->rx_buflimit;
640 mutex_lock(&open_mutex);
643 usb_autopm_get_interface(acm->control);
644 acm_set_control(acm, acm->ctrlout = 0);
645 usb_kill_urb(acm->ctrlurb);
646 for (i = 0; i < ACM_NW; i++)
647 usb_kill_urb(acm->wb[i].urb);
648 for (i = 0; i < nr; i++)
649 usb_kill_urb(acm->ru[i].urb);
650 acm->control->needs_remote_wakeup = 0;
651 usb_autopm_put_interface(acm->control);
653 acm_tty_unregister(acm);
655 mutex_unlock(&open_mutex);
658 static int acm_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
660 struct acm *acm = tty->driver_data;
666 dbg("Entering acm_tty_write to write %d bytes,", count);
673 spin_lock_irqsave(&acm->write_lock, flags);
674 if ((wbn = acm_wb_alloc(acm)) < 0) {
675 spin_unlock_irqrestore(&acm->write_lock, flags);
680 count = (count > acm->writesize) ? acm->writesize : count;
681 dbg("Get %d bytes...", count);
682 memcpy(wb->buf, buf, count);
684 spin_unlock_irqrestore(&acm->write_lock, flags);
686 if ((stat = acm_write_start(acm, wbn)) < 0)
691 static int acm_tty_write_room(struct tty_struct *tty)
693 struct acm *acm = tty->driver_data;
697 * Do not let the line discipline to know that we have a reserve,
698 * or it might get too enthusiastic.
700 return (acm->write_ready && acm_wb_is_avail(acm)) ? acm->writesize : 0;
703 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
705 struct acm *acm = tty->driver_data;
709 * This is inaccurate (overcounts), but it works.
711 return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
714 static void acm_tty_throttle(struct tty_struct *tty)
716 struct acm *acm = tty->driver_data;
719 spin_lock_bh(&acm->throttle_lock);
721 spin_unlock_bh(&acm->throttle_lock);
724 static void acm_tty_unthrottle(struct tty_struct *tty)
726 struct acm *acm = tty->driver_data;
729 spin_lock_bh(&acm->throttle_lock);
731 spin_unlock_bh(&acm->throttle_lock);
732 tasklet_schedule(&acm->urb_task);
735 static void acm_tty_break_ctl(struct tty_struct *tty, int state)
737 struct acm *acm = tty->driver_data;
740 if (acm_send_break(acm, state ? 0xffff : 0))
741 dbg("send break failed");
744 static int acm_tty_tiocmget(struct tty_struct *tty, struct file *file)
746 struct acm *acm = tty->driver_data;
751 return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
752 (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
753 (acm->ctrlin & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
754 (acm->ctrlin & ACM_CTRL_RI ? TIOCM_RI : 0) |
755 (acm->ctrlin & ACM_CTRL_DCD ? TIOCM_CD : 0) |
759 static int acm_tty_tiocmset(struct tty_struct *tty, struct file *file,
760 unsigned int set, unsigned int clear)
762 struct acm *acm = tty->driver_data;
763 unsigned int newctrl;
768 newctrl = acm->ctrlout;
769 set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) | (set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
770 clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) | (clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
772 newctrl = (newctrl & ~clear) | set;
774 if (acm->ctrlout == newctrl)
776 return acm_set_control(acm, acm->ctrlout = newctrl);
779 static int acm_tty_ioctl(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg)
781 struct acm *acm = tty->driver_data;
789 static const __u32 acm_tty_speed[] = {
790 0, 50, 75, 110, 134, 150, 200, 300, 600,
791 1200, 1800, 2400, 4800, 9600, 19200, 38400,
792 57600, 115200, 230400, 460800, 500000, 576000,
793 921600, 1000000, 1152000, 1500000, 2000000,
794 2500000, 3000000, 3500000, 4000000
797 static const __u8 acm_tty_size[] = {
801 static void acm_tty_set_termios(struct tty_struct *tty, struct ktermios *termios_old)
803 struct acm *acm = tty->driver_data;
804 struct ktermios *termios = tty->termios;
805 struct usb_cdc_line_coding newline;
806 int newctrl = acm->ctrlout;
811 newline.dwDTERate = cpu_to_le32p(acm_tty_speed +
812 (termios->c_cflag & CBAUD & ~CBAUDEX) + (termios->c_cflag & CBAUDEX ? 15 : 0));
813 newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
814 newline.bParityType = termios->c_cflag & PARENB ?
815 (termios->c_cflag & PARODD ? 1 : 2) + (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
816 newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
818 acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
820 if (!newline.dwDTERate) {
821 newline.dwDTERate = acm->line.dwDTERate;
822 newctrl &= ~ACM_CTRL_DTR;
823 } else newctrl |= ACM_CTRL_DTR;
825 if (newctrl != acm->ctrlout)
826 acm_set_control(acm, acm->ctrlout = newctrl);
828 if (memcmp(&acm->line, &newline, sizeof newline)) {
829 memcpy(&acm->line, &newline, sizeof newline);
830 dbg("set line: %d %d %d %d", le32_to_cpu(newline.dwDTERate),
831 newline.bCharFormat, newline.bParityType,
833 acm_set_line(acm, &acm->line);
838 * USB probe and disconnect routines.
841 /* Little helper: write buffers free */
842 static void acm_write_buffers_free(struct acm *acm)
847 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
848 usb_buffer_free(acm->dev, acm->writesize, wb->buf, wb->dmah);
852 /* Little helper: write buffers allocate */
853 static int acm_write_buffers_alloc(struct acm *acm)
858 for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
859 wb->buf = usb_buffer_alloc(acm->dev, acm->writesize, GFP_KERNEL,
865 usb_buffer_free(acm->dev, acm->writesize,
874 static int acm_probe (struct usb_interface *intf,
875 const struct usb_device_id *id)
877 struct usb_cdc_union_desc *union_header = NULL;
878 struct usb_cdc_country_functional_desc *cfd = NULL;
879 unsigned char *buffer = intf->altsetting->extra;
880 int buflen = intf->altsetting->extralen;
881 struct usb_interface *control_interface;
882 struct usb_interface *data_interface;
883 struct usb_endpoint_descriptor *epctrl;
884 struct usb_endpoint_descriptor *epread;
885 struct usb_endpoint_descriptor *epwrite;
886 struct usb_device *usb_dev = interface_to_usbdev(intf);
889 int ctrlsize,readsize;
891 u8 ac_management_function = 0;
892 u8 call_management_function = 0;
893 int call_interface_num = -1;
894 int data_interface_num;
895 unsigned long quirks;
900 quirks = (unsigned long)id->driver_info;
901 num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
903 /* handle quirks deadly to normal probing*/
904 if (quirks == NO_UNION_NORMAL) {
905 data_interface = usb_ifnum_to_if(usb_dev, 1);
906 control_interface = usb_ifnum_to_if(usb_dev, 0);
907 goto skip_normal_probe;
912 err("Weird descriptor references\n");
917 if (intf->cur_altsetting->endpoint->extralen && intf->cur_altsetting->endpoint->extra) {
918 dev_dbg(&intf->dev,"Seeking extra descriptors on endpoint\n");
919 buflen = intf->cur_altsetting->endpoint->extralen;
920 buffer = intf->cur_altsetting->endpoint->extra;
922 err("Zero length descriptor references\n");
928 if (buffer [1] != USB_DT_CS_INTERFACE) {
929 err("skipping garbage\n");
933 switch (buffer [2]) {
934 case USB_CDC_UNION_TYPE: /* we've found it */
936 err("More than one union descriptor, skipping ...");
939 union_header = (struct usb_cdc_union_desc *)
942 case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
943 cfd = (struct usb_cdc_country_functional_desc *)buffer;
945 case USB_CDC_HEADER_TYPE: /* maybe check version */
946 break; /* for now we ignore it */
947 case USB_CDC_ACM_TYPE:
948 ac_management_function = buffer[3];
950 case USB_CDC_CALL_MANAGEMENT_TYPE:
951 call_management_function = buffer[3];
952 call_interface_num = buffer[4];
953 if ((call_management_function & 3) != 3)
954 err("This device cannot do calls on its own. It is no modem.");
957 /* there are LOTS more CDC descriptors that
958 * could legitimately be found here.
960 dev_dbg(&intf->dev, "Ignoring descriptor: "
961 "type %02x, length %d\n",
962 buffer[2], buffer[0]);
971 if (call_interface_num > 0) {
972 dev_dbg(&intf->dev,"No union descriptor, using call management descriptor\n");
973 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
974 control_interface = intf;
976 dev_dbg(&intf->dev,"No union descriptor, giving up\n");
980 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
981 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
982 if (!control_interface || !data_interface) {
983 dev_dbg(&intf->dev,"no interfaces\n");
988 if (data_interface_num != call_interface_num)
989 dev_dbg(&intf->dev,"Separate call control interface. That is not fully supported.\n");
993 /*workaround for switched interfaces */
994 if (data_interface->cur_altsetting->desc.bInterfaceClass != CDC_DATA_INTERFACE_TYPE) {
995 if (control_interface->cur_altsetting->desc.bInterfaceClass == CDC_DATA_INTERFACE_TYPE) {
996 struct usb_interface *t;
997 dev_dbg(&intf->dev,"Your device has switched interfaces.\n");
999 t = control_interface;
1000 control_interface = data_interface;
1007 /* Accept probe requests only for the control interface */
1008 if (intf != control_interface)
1011 if (usb_interface_claimed(data_interface)) { /* valid in this context */
1012 dev_dbg(&intf->dev,"The data interface isn't available\n");
1017 if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
1020 epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1021 epread = &data_interface->cur_altsetting->endpoint[0].desc;
1022 epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1025 /* workaround for switched endpoints */
1026 if (!usb_endpoint_dir_in(epread)) {
1027 /* descriptors are swapped */
1028 struct usb_endpoint_descriptor *t;
1029 dev_dbg(&intf->dev,"The data interface has switched endpoints\n");
1035 dbg("interfaces are valid");
1036 for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
1038 if (minor == ACM_TTY_MINORS) {
1039 err("no more free acm devices");
1043 if (!(acm = kzalloc(sizeof(struct acm), GFP_KERNEL))) {
1044 dev_dbg(&intf->dev, "out of memory (acm kzalloc)\n");
1048 ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize);
1049 readsize = le16_to_cpu(epread->wMaxPacketSize)* ( quirks == SINGLE_RX_URB ? 1 : 2);
1050 acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize) * 20;
1051 acm->control = control_interface;
1052 acm->data = data_interface;
1055 acm->ctrl_caps = ac_management_function;
1056 acm->ctrlsize = ctrlsize;
1057 acm->readsize = readsize;
1058 acm->rx_buflimit = num_rx_buf;
1059 acm->urb_task.func = acm_rx_tasklet;
1060 acm->urb_task.data = (unsigned long) acm;
1061 INIT_WORK(&acm->work, acm_softint);
1062 INIT_WORK(&acm->waker, acm_waker);
1063 spin_lock_init(&acm->throttle_lock);
1064 spin_lock_init(&acm->write_lock);
1065 spin_lock_init(&acm->read_lock);
1066 mutex_init(&acm->mutex);
1067 acm->write_ready = 1;
1068 acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1070 buf = usb_buffer_alloc(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1072 dev_dbg(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1075 acm->ctrl_buffer = buf;
1077 if (acm_write_buffers_alloc(acm) < 0) {
1078 dev_dbg(&intf->dev, "out of memory (write buffer alloc)\n");
1082 acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1083 if (!acm->ctrlurb) {
1084 dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1087 for (i = 0; i < num_rx_buf; i++) {
1088 struct acm_ru *rcv = &(acm->ru[i]);
1090 if (!(rcv->urb = usb_alloc_urb(0, GFP_KERNEL))) {
1091 dev_dbg(&intf->dev, "out of memory (read urbs usb_alloc_urb)\n");
1095 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1096 rcv->instance = acm;
1098 for (i = 0; i < num_rx_buf; i++) {
1099 struct acm_rb *buf = &(acm->rb[i]);
1101 if (!(buf->base = usb_buffer_alloc(acm->dev, readsize, GFP_KERNEL, &buf->dma))) {
1102 dev_dbg(&intf->dev, "out of memory (read bufs usb_buffer_alloc)\n");
1106 for(i = 0; i < ACM_NW; i++)
1108 struct acm_wb *snd = &(acm->wb[i]);
1110 if (!(snd->urb = usb_alloc_urb(0, GFP_KERNEL))) {
1111 dev_dbg(&intf->dev, "out of memory (write urbs usb_alloc_urb)");
1115 usb_fill_bulk_urb(snd->urb, usb_dev, usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1116 NULL, acm->writesize, acm_write_bulk, snd);
1117 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1118 snd->instance = acm;
1121 usb_set_intfdata (intf, acm);
1123 i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1127 if (cfd) { /* export the country data */
1128 acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1129 if (!acm->country_codes)
1130 goto skip_countries;
1131 acm->country_code_size = cfd->bLength - 4;
1132 memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0, cfd->bLength - 4);
1133 acm->country_rel_date = cfd->iCountryCodeRelDate;
1135 i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1137 kfree(acm->country_codes);
1138 goto skip_countries;
1141 i = device_create_file(&intf->dev, &dev_attr_iCountryCodeRelDate);
1143 kfree(acm->country_codes);
1144 goto skip_countries;
1149 usb_fill_int_urb(acm->ctrlurb, usb_dev, usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1150 acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm, epctrl->bInterval);
1151 acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1152 acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1154 dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1156 acm_set_control(acm, acm->ctrlout);
1158 acm->line.dwDTERate = cpu_to_le32(9600);
1159 acm->line.bDataBits = 8;
1160 acm_set_line(acm, &acm->line);
1162 usb_driver_claim_interface(&acm_driver, data_interface, acm);
1164 usb_get_intf(control_interface);
1165 tty_register_device(acm_tty_driver, minor, &control_interface->dev);
1167 acm_table[minor] = acm;
1171 for (i = 0; i < ACM_NW; i++)
1172 usb_free_urb(acm->wb[i].urb);
1174 for (i = 0; i < num_rx_buf; i++)
1175 usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma);
1176 for (i = 0; i < num_rx_buf; i++)
1177 usb_free_urb(acm->ru[i].urb);
1178 usb_free_urb(acm->ctrlurb);
1180 acm_write_buffers_free(acm);
1182 usb_buffer_free(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1189 static void stop_data_traffic(struct acm *acm)
1192 dbg("Entering stop_data_traffic");
1194 tasklet_disable(&acm->urb_task);
1196 usb_kill_urb(acm->ctrlurb);
1197 for(i = 0; i < ACM_NW; i++)
1198 usb_kill_urb(acm->wb[i].urb);
1199 for (i = 0; i < acm->rx_buflimit; i++)
1200 usb_kill_urb(acm->ru[i].urb);
1202 tasklet_enable(&acm->urb_task);
1204 cancel_work_sync(&acm->work);
1205 cancel_work_sync(&acm->waker);
1208 static void acm_disconnect(struct usb_interface *intf)
1210 struct acm *acm = usb_get_intfdata(intf);
1211 struct usb_device *usb_dev = interface_to_usbdev(intf);
1214 if (!acm || !acm->dev) {
1215 dbg("disconnect on nonexisting interface");
1219 mutex_lock(&open_mutex);
1220 if (!usb_get_intfdata(intf)) {
1221 mutex_unlock(&open_mutex);
1224 if (acm->country_codes){
1225 device_remove_file(&acm->control->dev,
1226 &dev_attr_wCountryCodes);
1227 device_remove_file(&acm->control->dev,
1228 &dev_attr_iCountryCodeRelDate);
1230 device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1232 usb_set_intfdata(acm->control, NULL);
1233 usb_set_intfdata(acm->data, NULL);
1235 stop_data_traffic(acm);
1237 acm_write_buffers_free(acm);
1238 usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1239 for (i = 0; i < acm->rx_buflimit; i++)
1240 usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma);
1242 usb_driver_release_interface(&acm_driver, intf == acm->control ? acm->data : intf);
1245 acm_tty_unregister(acm);
1246 mutex_unlock(&open_mutex);
1250 mutex_unlock(&open_mutex);
1253 tty_hangup(acm->tty);
1256 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1258 struct acm *acm = usb_get_intfdata(intf);
1261 if (acm->dev->auto_pm) {
1264 spin_lock_irq(&acm->read_lock);
1265 spin_lock(&acm->write_lock);
1266 b = acm->processing + acm->transmitting;
1267 spin_unlock(&acm->write_lock);
1268 spin_unlock_irq(&acm->read_lock);
1273 spin_lock_irq(&acm->read_lock);
1274 spin_lock(&acm->write_lock);
1275 cnt = acm->susp_count++;
1276 spin_unlock(&acm->write_lock);
1277 spin_unlock_irq(&acm->read_lock);
1282 we treat opened interfaces differently,
1283 we must guard against open
1285 mutex_lock(&acm->mutex);
1288 stop_data_traffic(acm);
1290 mutex_unlock(&acm->mutex);
1294 static int acm_resume(struct usb_interface *intf)
1296 struct acm *acm = usb_get_intfdata(intf);
1300 spin_lock_irq(&acm->read_lock);
1301 acm->susp_count -= 1;
1302 cnt = acm->susp_count;
1303 spin_unlock_irq(&acm->read_lock);
1308 mutex_lock(&acm->mutex);
1310 rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
1314 tasklet_schedule(&acm->urb_task);
1318 mutex_unlock(&acm->mutex);
1322 * USB driver structure.
1325 static struct usb_device_id acm_ids[] = {
1326 /* quirky and broken devices */
1327 { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1328 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1330 { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1331 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1333 { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1334 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1336 { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1337 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1339 { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1340 .driver_info = SINGLE_RX_URB, /* firmware bug */
1342 { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1343 .driver_info = SINGLE_RX_URB, /* firmware bug */
1345 { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1346 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1348 { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1349 .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1352 /* control interfaces with various AT-command sets */
1353 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1354 USB_CDC_ACM_PROTO_AT_V25TER) },
1355 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1356 USB_CDC_ACM_PROTO_AT_PCCA101) },
1357 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1358 USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1359 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1360 USB_CDC_ACM_PROTO_AT_GSM) },
1361 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1362 USB_CDC_ACM_PROTO_AT_3G ) },
1363 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1364 USB_CDC_ACM_PROTO_AT_CDMA) },
1366 /* NOTE: COMM/ACM/0xff is likely MSFT RNDIS ... NOT a modem!! */
1370 MODULE_DEVICE_TABLE (usb, acm_ids);
1372 static struct usb_driver acm_driver = {
1375 .disconnect = acm_disconnect,
1376 .suspend = acm_suspend,
1377 .resume = acm_resume,
1378 .id_table = acm_ids,
1379 .supports_autosuspend = 1,
1383 * TTY driver structures.
1386 static const struct tty_operations acm_ops = {
1387 .open = acm_tty_open,
1388 .close = acm_tty_close,
1389 .write = acm_tty_write,
1390 .write_room = acm_tty_write_room,
1391 .ioctl = acm_tty_ioctl,
1392 .throttle = acm_tty_throttle,
1393 .unthrottle = acm_tty_unthrottle,
1394 .chars_in_buffer = acm_tty_chars_in_buffer,
1395 .break_ctl = acm_tty_break_ctl,
1396 .set_termios = acm_tty_set_termios,
1397 .tiocmget = acm_tty_tiocmget,
1398 .tiocmset = acm_tty_tiocmset,
1405 static int __init acm_init(void)
1408 acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1409 if (!acm_tty_driver)
1411 acm_tty_driver->owner = THIS_MODULE,
1412 acm_tty_driver->driver_name = "acm",
1413 acm_tty_driver->name = "ttyACM",
1414 acm_tty_driver->major = ACM_TTY_MAJOR,
1415 acm_tty_driver->minor_start = 0,
1416 acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1417 acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1418 acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1419 acm_tty_driver->init_termios = tty_std_termios;
1420 acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1421 tty_set_operations(acm_tty_driver, &acm_ops);
1423 retval = tty_register_driver(acm_tty_driver);
1425 put_tty_driver(acm_tty_driver);
1429 retval = usb_register(&acm_driver);
1431 tty_unregister_driver(acm_tty_driver);
1432 put_tty_driver(acm_tty_driver);
1436 info(DRIVER_VERSION ":" DRIVER_DESC);
1441 static void __exit acm_exit(void)
1443 usb_deregister(&acm_driver);
1444 tty_unregister_driver(acm_tty_driver);
1445 put_tty_driver(acm_tty_driver);
1448 module_init(acm_init);
1449 module_exit(acm_exit);
1451 MODULE_AUTHOR( DRIVER_AUTHOR );
1452 MODULE_DESCRIPTION( DRIVER_DESC );
1453 MODULE_LICENSE("GPL");