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
 
  37  * This program is free software; you can redistribute it and/or modify
 
  38  * it under the terms of the GNU General Public License as published by
 
  39  * the Free Software Foundation; either version 2 of the License, or
 
  40  * (at your option) any later version.
 
  42  * This program is distributed in the hope that it will be useful,
 
  43  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  44  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  45  * GNU General Public License for more details.
 
  47  * You should have received a copy of the GNU General Public License
 
  48  * along with this program; if not, write to the Free Software
 
  49  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 
  54 #include <linux/kernel.h>
 
  55 #include <linux/errno.h>
 
  56 #include <linux/init.h>
 
  57 #include <linux/slab.h>
 
  58 #include <linux/tty.h>
 
  59 #include <linux/tty_driver.h>
 
  60 #include <linux/tty_flip.h>
 
  61 #include <linux/module.h>
 
  62 #include <linux/smp_lock.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.25"
 
  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)
 
 122         wbn = acm->write_current;
 
 130                 wbn = (wbn + 1) % ACM_NW;
 
 136 static void acm_wb_free(struct acm *acm, int wbn)
 
 138         acm->wb[wbn].use = 0;
 
 141 static int acm_wb_is_avail(struct acm *acm)
 
 146         for (i = 0; i < ACM_NW; i++) {
 
 152 static inline int acm_wb_is_used(struct acm *acm, int wbn)
 
 154         return acm->wb[wbn].use;
 
 160 static void acm_write_done(struct acm *acm)
 
 165         spin_lock_irqsave(&acm->write_lock, flags);
 
 166         acm->write_ready = 1;
 
 167         wbn = acm->write_current;
 
 168         acm_wb_free(acm, wbn);
 
 169         acm->write_current = (wbn + 1) % ACM_NW;
 
 170         spin_unlock_irqrestore(&acm->write_lock, flags);
 
 176 static int acm_write_start(struct acm *acm)
 
 183         spin_lock_irqsave(&acm->write_lock, flags);
 
 185                 spin_unlock_irqrestore(&acm->write_lock, flags);
 
 189         if (!acm->write_ready) {
 
 190                 spin_unlock_irqrestore(&acm->write_lock, flags);
 
 191                 return 0;       /* A white lie */
 
 194         wbn = acm->write_current;
 
 195         if (!acm_wb_is_used(acm, wbn)) {
 
 196                 spin_unlock_irqrestore(&acm->write_lock, flags);
 
 201         acm->write_ready = 0;
 
 202         spin_unlock_irqrestore(&acm->write_lock, flags);
 
 204         acm->writeurb->transfer_buffer = wb->buf;
 
 205         acm->writeurb->transfer_dma = wb->dmah;
 
 206         acm->writeurb->transfer_buffer_length = wb->len;
 
 207         acm->writeurb->dev = acm->dev;
 
 209         if ((rc = usb_submit_urb(acm->writeurb, GFP_ATOMIC)) < 0) {
 
 210                 dbg("usb_submit_urb(write bulk) failed: %d", rc);
 
 217  * Interrupt handlers for various ACM device responses
 
 220 /* control interface reports status changes with "interrupt" transfers */
 
 221 static void acm_ctrl_irq(struct urb *urb)
 
 223         struct acm *acm = urb->context;
 
 224         struct usb_cdc_notification *dr = urb->transfer_buffer;
 
 229         switch (urb->status) {
 
 236                 /* this urb is terminated, clean up */
 
 237                 dbg("%s - urb shutting down with status: %d", __FUNCTION__, urb->status);
 
 240                 dbg("%s - nonzero urb status received: %d", __FUNCTION__, urb->status);
 
 247         data = (unsigned char *)(dr + 1);
 
 248         switch (dr->bNotificationType) {
 
 250                 case USB_CDC_NOTIFY_NETWORK_CONNECTION:
 
 252                         dbg("%s network", dr->wValue ? "connected to" : "disconnected from");
 
 255                 case USB_CDC_NOTIFY_SERIAL_STATE:
 
 257                         newctrl = le16_to_cpu(get_unaligned((__le16 *) data));
 
 259                         if (acm->tty && !acm->clocal && (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
 
 260                                 dbg("calling hangup");
 
 261                                 tty_hangup(acm->tty);
 
 264                         acm->ctrlin = newctrl;
 
 266                         dbg("input control lines: dcd%c dsr%c break%c ring%c framing%c parity%c overrun%c",
 
 267                                 acm->ctrlin & ACM_CTRL_DCD ? '+' : '-', acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',
 
 268                                 acm->ctrlin & ACM_CTRL_BRK ? '+' : '-', acm->ctrlin & ACM_CTRL_RI  ? '+' : '-',
 
 269                                 acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-',     acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',
 
 270                                 acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');
 
 275                         dbg("unknown notification %d received: index %d len %d data0 %d data1 %d",
 
 276                                 dr->bNotificationType, dr->wIndex,
 
 277                                 dr->wLength, data[0], data[1]);
 
 281         status = usb_submit_urb (urb, GFP_ATOMIC);
 
 283                 err ("%s - usb_submit_urb failed with result %d",
 
 284                      __FUNCTION__, status);
 
 287 /* data interface returns incoming bytes, or we got unthrottled */
 
 288 static void acm_read_bulk(struct urb *urb)
 
 291         struct acm_ru *rcv = urb->context;
 
 292         struct acm *acm = rcv->instance;
 
 293         int status = urb->status;
 
 294         dbg("Entering acm_read_bulk with status %d", urb->status);
 
 300                 dev_dbg(&acm->data->dev, "bulk rx status %d", status);
 
 303         buf->size = urb->actual_length;
 
 305         if (likely(status == 0)) {
 
 306                 spin_lock(&acm->read_lock);
 
 307                 list_add_tail(&rcv->list, &acm->spare_read_urbs);
 
 308                 list_add_tail(&buf->list, &acm->filled_read_bufs);
 
 309                 spin_unlock(&acm->read_lock);
 
 311                 /* we drop the buffer due to an error */
 
 312                 spin_lock(&acm->read_lock);
 
 313                 list_add_tail(&rcv->list, &acm->spare_read_urbs);
 
 314                 list_add(&buf->list, &acm->spare_read_bufs);
 
 315                 spin_unlock(&acm->read_lock);
 
 316                 /* nevertheless the tasklet must be kicked unconditionally
 
 317                 so the queue cannot dry up */
 
 319         tasklet_schedule(&acm->urb_task);
 
 322 static void acm_rx_tasklet(unsigned long _acm)
 
 324         struct acm *acm = (void *)_acm;
 
 326         struct tty_struct *tty = acm->tty;
 
 330         dbg("Entering acm_rx_tasklet");
 
 332         if (!ACM_READY(acm) || acm->throttle)
 
 336         spin_lock_irqsave(&acm->read_lock, flags);
 
 337         if (list_empty(&acm->filled_read_bufs)) {
 
 338                 spin_unlock_irqrestore(&acm->read_lock, flags);
 
 341         buf = list_entry(acm->filled_read_bufs.next,
 
 342                          struct acm_rb, list);
 
 343         list_del(&buf->list);
 
 344         spin_unlock_irqrestore(&acm->read_lock, flags);
 
 346         dbg("acm_rx_tasklet: procesing buf 0x%p, size = %d", buf, buf->size);
 
 348         tty_buffer_request_room(tty, buf->size);
 
 350                 tty_insert_flip_string(tty, buf->base, buf->size);
 
 351         tty_flip_buffer_push(tty);
 
 353         spin_lock(&acm->throttle_lock);
 
 355                 dbg("Throtteling noticed");
 
 356                 memmove(buf->base, buf->base + i, buf->size - i);
 
 358                 spin_unlock(&acm->throttle_lock);
 
 359                 spin_lock_irqsave(&acm->read_lock, flags);
 
 360                 list_add(&buf->list, &acm->filled_read_bufs);
 
 361                 spin_unlock_irqrestore(&acm->read_lock, flags);
 
 364         spin_unlock(&acm->throttle_lock);
 
 366         spin_lock_irqsave(&acm->read_lock, flags);
 
 367         list_add(&buf->list, &acm->spare_read_bufs);
 
 368         spin_unlock_irqrestore(&acm->read_lock, flags);
 
 372         while (!list_empty(&acm->spare_read_bufs)) {
 
 373                 spin_lock_irqsave(&acm->read_lock, flags);
 
 374                 if (list_empty(&acm->spare_read_urbs)) {
 
 375                         spin_unlock_irqrestore(&acm->read_lock, flags);
 
 378                 rcv = list_entry(acm->spare_read_urbs.next,
 
 379                                  struct acm_ru, list);
 
 380                 list_del(&rcv->list);
 
 381                 spin_unlock_irqrestore(&acm->read_lock, flags);
 
 383                 buf = list_entry(acm->spare_read_bufs.next,
 
 384                                  struct acm_rb, list);
 
 385                 list_del(&buf->list);
 
 389                 usb_fill_bulk_urb(rcv->urb, acm->dev,
 
 394                 rcv->urb->transfer_dma = buf->dma;
 
 395                 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 
 397                 dbg("acm_rx_tasklet: sending urb 0x%p, rcv 0x%p, buf 0x%p", rcv->urb, rcv, buf);
 
 399                 /* This shouldn't kill the driver as unsuccessful URBs are returned to the
 
 400                    free-urbs-pool and resubmited ASAP */
 
 401                 if (usb_submit_urb(rcv->urb, GFP_ATOMIC) < 0) {
 
 402                         list_add(&buf->list, &acm->spare_read_bufs);
 
 403                         spin_lock_irqsave(&acm->read_lock, flags);
 
 404                         list_add(&rcv->list, &acm->spare_read_urbs);
 
 405                         spin_unlock_irqrestore(&acm->read_lock, flags);
 
 411 /* data interface wrote those outgoing bytes */
 
 412 static void acm_write_bulk(struct urb *urb)
 
 414         struct acm *acm = (struct acm *)urb->context;
 
 416         dbg("Entering acm_write_bulk with status %d", urb->status);
 
 419         acm_write_start(acm);
 
 421                 schedule_work(&acm->work);
 
 424 static void acm_softint(struct work_struct *work)
 
 426         struct acm *acm = container_of(work, struct acm, work);
 
 427         dbg("Entering acm_softint.");
 
 431         tty_wakeup(acm->tty);
 
 438 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
 
 443         dbg("Entering acm_tty_open.");
 
 445         mutex_lock(&open_mutex);
 
 447         acm = acm_table[tty->index];
 
 448         if (!acm || !acm->dev)
 
 453         tty->driver_data = acm;
 
 456         /* force low_latency on so that our tty_push actually forces the data through,
 
 457            otherwise it is scheduled, and with high data rates data can get lost. */
 
 458         tty->low_latency = 1;
 
 464         acm->ctrlurb->dev = acm->dev;
 
 465         if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
 
 466                 dbg("usb_submit_urb(ctrl irq) failed");
 
 470         if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS))
 
 473         INIT_LIST_HEAD(&acm->spare_read_urbs);
 
 474         INIT_LIST_HEAD(&acm->spare_read_bufs);
 
 475         INIT_LIST_HEAD(&acm->filled_read_bufs);
 
 476         for (i = 0; i < acm->rx_buflimit; i++) {
 
 477                 list_add(&(acm->ru[i].list), &acm->spare_read_urbs);
 
 479         for (i = 0; i < acm->rx_buflimit; i++) {
 
 480                 list_add(&(acm->rb[i].list), &acm->spare_read_bufs);
 
 483         tasklet_schedule(&acm->urb_task);
 
 487         mutex_unlock(&open_mutex);
 
 491         usb_kill_urb(acm->ctrlurb);
 
 494         mutex_unlock(&open_mutex);
 
 498 static void acm_tty_unregister(struct acm *acm)
 
 502         nr = acm->rx_buflimit;
 
 503         tty_unregister_device(acm_tty_driver, acm->minor);
 
 504         usb_put_intf(acm->control);
 
 505         acm_table[acm->minor] = NULL;
 
 506         usb_free_urb(acm->ctrlurb);
 
 507         usb_free_urb(acm->writeurb);
 
 508         for (i = 0; i < nr; i++)
 
 509                 usb_free_urb(acm->ru[i].urb);
 
 513 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
 
 515         struct acm *acm = tty->driver_data;
 
 518         if (!acm || !acm->used)
 
 521         nr = acm->rx_buflimit;
 
 522         mutex_lock(&open_mutex);
 
 525                         acm_set_control(acm, acm->ctrlout = 0);
 
 526                         usb_kill_urb(acm->ctrlurb);
 
 527                         usb_kill_urb(acm->writeurb);
 
 528                         for (i = 0; i < nr; i++)
 
 529                                 usb_kill_urb(acm->ru[i].urb);
 
 531                         acm_tty_unregister(acm);
 
 533         mutex_unlock(&open_mutex);
 
 536 static int acm_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
 
 538         struct acm *acm = tty->driver_data;
 
 544         dbg("Entering acm_tty_write to write %d bytes,", count);
 
 551         spin_lock_irqsave(&acm->write_lock, flags);
 
 552         if ((wbn = acm_wb_alloc(acm)) < 0) {
 
 553                 spin_unlock_irqrestore(&acm->write_lock, flags);
 
 554                 acm_write_start(acm);
 
 559         count = (count > acm->writesize) ? acm->writesize : count;
 
 560         dbg("Get %d bytes...", count);
 
 561         memcpy(wb->buf, buf, count);
 
 563         spin_unlock_irqrestore(&acm->write_lock, flags);
 
 565         if ((stat = acm_write_start(acm)) < 0)
 
 570 static int acm_tty_write_room(struct tty_struct *tty)
 
 572         struct acm *acm = tty->driver_data;
 
 576          * Do not let the line discipline to know that we have a reserve,
 
 577          * or it might get too enthusiastic.
 
 579         return (acm->write_ready && acm_wb_is_avail(acm)) ? acm->writesize : 0;
 
 582 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
 
 584         struct acm *acm = tty->driver_data;
 
 588          * This is inaccurate (overcounts), but it works.
 
 590         return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
 
 593 static void acm_tty_throttle(struct tty_struct *tty)
 
 595         struct acm *acm = tty->driver_data;
 
 598         spin_lock_bh(&acm->throttle_lock);
 
 600         spin_unlock_bh(&acm->throttle_lock);
 
 603 static void acm_tty_unthrottle(struct tty_struct *tty)
 
 605         struct acm *acm = tty->driver_data;
 
 608         spin_lock_bh(&acm->throttle_lock);
 
 610         spin_unlock_bh(&acm->throttle_lock);
 
 611         tasklet_schedule(&acm->urb_task);
 
 614 static void acm_tty_break_ctl(struct tty_struct *tty, int state)
 
 616         struct acm *acm = tty->driver_data;
 
 619         if (acm_send_break(acm, state ? 0xffff : 0))
 
 620                 dbg("send break failed");
 
 623 static int acm_tty_tiocmget(struct tty_struct *tty, struct file *file)
 
 625         struct acm *acm = tty->driver_data;
 
 630         return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
 
 631                (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
 
 632                (acm->ctrlin  & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
 
 633                (acm->ctrlin  & ACM_CTRL_RI  ? TIOCM_RI  : 0) |
 
 634                (acm->ctrlin  & ACM_CTRL_DCD ? TIOCM_CD  : 0) |
 
 638 static int acm_tty_tiocmset(struct tty_struct *tty, struct file *file,
 
 639                             unsigned int set, unsigned int clear)
 
 641         struct acm *acm = tty->driver_data;
 
 642         unsigned int newctrl;
 
 647         newctrl = acm->ctrlout;
 
 648         set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) | (set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
 
 649         clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) | (clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
 
 651         newctrl = (newctrl & ~clear) | set;
 
 653         if (acm->ctrlout == newctrl)
 
 655         return acm_set_control(acm, acm->ctrlout = newctrl);
 
 658 static int acm_tty_ioctl(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg)
 
 660         struct acm *acm = tty->driver_data;
 
 668 static const __u32 acm_tty_speed[] = {
 
 669         0, 50, 75, 110, 134, 150, 200, 300, 600,
 
 670         1200, 1800, 2400, 4800, 9600, 19200, 38400,
 
 671         57600, 115200, 230400, 460800, 500000, 576000,
 
 672         921600, 1000000, 1152000, 1500000, 2000000,
 
 673         2500000, 3000000, 3500000, 4000000
 
 676 static const __u8 acm_tty_size[] = {
 
 680 static void acm_tty_set_termios(struct tty_struct *tty, struct ktermios *termios_old)
 
 682         struct acm *acm = tty->driver_data;
 
 683         struct ktermios *termios = tty->termios;
 
 684         struct usb_cdc_line_coding newline;
 
 685         int newctrl = acm->ctrlout;
 
 690         newline.dwDTERate = cpu_to_le32p(acm_tty_speed +
 
 691                 (termios->c_cflag & CBAUD & ~CBAUDEX) + (termios->c_cflag & CBAUDEX ? 15 : 0));
 
 692         newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
 
 693         newline.bParityType = termios->c_cflag & PARENB ?
 
 694                 (termios->c_cflag & PARODD ? 1 : 2) + (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
 
 695         newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
 
 697         acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
 
 699         if (!newline.dwDTERate) {
 
 700                 newline.dwDTERate = acm->line.dwDTERate;
 
 701                 newctrl &= ~ACM_CTRL_DTR;
 
 702         } else  newctrl |=  ACM_CTRL_DTR;
 
 704         if (newctrl != acm->ctrlout)
 
 705                 acm_set_control(acm, acm->ctrlout = newctrl);
 
 707         if (memcmp(&acm->line, &newline, sizeof newline)) {
 
 708                 memcpy(&acm->line, &newline, sizeof newline);
 
 709                 dbg("set line: %d %d %d %d", le32_to_cpu(newline.dwDTERate),
 
 710                         newline.bCharFormat, newline.bParityType,
 
 712                 acm_set_line(acm, &acm->line);
 
 717  * USB probe and disconnect routines.
 
 720 /* Little helper: write buffers free */
 
 721 static void acm_write_buffers_free(struct acm *acm)
 
 726         for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
 
 727                 usb_buffer_free(acm->dev, acm->writesize, wb->buf, wb->dmah);
 
 731 /* Little helper: write buffers allocate */
 
 732 static int acm_write_buffers_alloc(struct acm *acm)
 
 737         for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
 
 738                 wb->buf = usb_buffer_alloc(acm->dev, acm->writesize, GFP_KERNEL,
 
 744                                 usb_buffer_free(acm->dev, acm->writesize,
 
 753 static int acm_probe (struct usb_interface *intf,
 
 754                       const struct usb_device_id *id)
 
 756         struct usb_cdc_union_desc *union_header = NULL;
 
 757         char *buffer = intf->altsetting->extra;
 
 758         int buflen = intf->altsetting->extralen;
 
 759         struct usb_interface *control_interface;
 
 760         struct usb_interface *data_interface;
 
 761         struct usb_endpoint_descriptor *epctrl;
 
 762         struct usb_endpoint_descriptor *epread;
 
 763         struct usb_endpoint_descriptor *epwrite;
 
 764         struct usb_device *usb_dev = interface_to_usbdev(intf);
 
 767         int ctrlsize,readsize;
 
 769         u8 ac_management_function = 0;
 
 770         u8 call_management_function = 0;
 
 771         int call_interface_num = -1;
 
 772         int data_interface_num;
 
 773         unsigned long quirks;
 
 778         quirks = (unsigned long)id->driver_info;
 
 779         num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
 
 781         /* handle quirks deadly to normal probing*/
 
 782         if (quirks == NO_UNION_NORMAL) {
 
 783                 data_interface = usb_ifnum_to_if(usb_dev, 1);
 
 784                 control_interface = usb_ifnum_to_if(usb_dev, 0);
 
 785                 goto skip_normal_probe;
 
 790                 err("Wierd descriptor references\n");
 
 795                 if (intf->cur_altsetting->endpoint->extralen && intf->cur_altsetting->endpoint->extra) {
 
 796                         dev_dbg(&intf->dev,"Seeking extra descriptors on endpoint");
 
 797                         buflen = intf->cur_altsetting->endpoint->extralen;
 
 798                         buffer = intf->cur_altsetting->endpoint->extra;
 
 800                         err("Zero length descriptor references\n");
 
 806                 if (buffer [1] != USB_DT_CS_INTERFACE) {
 
 807                         err("skipping garbage\n");
 
 811                 switch (buffer [2]) {
 
 812                         case USB_CDC_UNION_TYPE: /* we've found it */
 
 814                                         err("More than one union descriptor, skipping ...");
 
 817                                 union_header = (struct usb_cdc_union_desc *)
 
 820                         case USB_CDC_COUNTRY_TYPE: /* maybe somehow export */
 
 821                                 break; /* for now we ignore it */
 
 822                         case USB_CDC_HEADER_TYPE: /* maybe check version */ 
 
 823                                 break; /* for now we ignore it */ 
 
 824                         case USB_CDC_ACM_TYPE:
 
 825                                 ac_management_function = buffer[3];
 
 827                         case USB_CDC_CALL_MANAGEMENT_TYPE:
 
 828                                 call_management_function = buffer[3];
 
 829                                 call_interface_num = buffer[4];
 
 830                                 if ((call_management_function & 3) != 3)
 
 831                                         err("This device cannot do calls on its own. It is no modem.");
 
 835                                 err("Ignoring extra header, type %d, length %d", buffer[2], buffer[0]);
 
 844                 if (call_interface_num > 0) {
 
 845                         dev_dbg(&intf->dev,"No union descriptor, using call management descriptor");
 
 846                         data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
 
 847                         control_interface = intf;
 
 849                         dev_dbg(&intf->dev,"No union descriptor, giving up");
 
 853                 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
 
 854                 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
 
 855                 if (!control_interface || !data_interface) {
 
 856                         dev_dbg(&intf->dev,"no interfaces");
 
 861         if (data_interface_num != call_interface_num)
 
 862                 dev_dbg(&intf->dev,"Seperate call control interface. That is not fully supported.");
 
 866         /*workaround for switched interfaces */
 
 867         if (data_interface->cur_altsetting->desc.bInterfaceClass != CDC_DATA_INTERFACE_TYPE) {
 
 868                 if (control_interface->cur_altsetting->desc.bInterfaceClass == CDC_DATA_INTERFACE_TYPE) {
 
 869                         struct usb_interface *t;
 
 870                         dev_dbg(&intf->dev,"Your device has switched interfaces.");
 
 872                         t = control_interface;
 
 873                         control_interface = data_interface;
 
 880         if (usb_interface_claimed(data_interface)) { /* valid in this context */
 
 881                 dev_dbg(&intf->dev,"The data interface isn't available");
 
 886         if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
 
 889         epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
 
 890         epread = &data_interface->cur_altsetting->endpoint[0].desc;
 
 891         epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
 
 894         /* workaround for switched endpoints */
 
 895         if (!usb_endpoint_dir_in(epread)) {
 
 896                 /* descriptors are swapped */
 
 897                 struct usb_endpoint_descriptor *t;
 
 898                 dev_dbg(&intf->dev,"The data interface has switched endpoints");
 
 904         dbg("interfaces are valid");
 
 905         for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
 
 907         if (minor == ACM_TTY_MINORS) {
 
 908                 err("no more free acm devices");
 
 912         if (!(acm = kzalloc(sizeof(struct acm), GFP_KERNEL))) {
 
 913                 dev_dbg(&intf->dev, "out of memory (acm kzalloc)");
 
 917         ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize);
 
 918         readsize = le16_to_cpu(epread->wMaxPacketSize)* ( quirks == SINGLE_RX_URB ? 1 : 2);
 
 919         acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize);
 
 920         acm->control = control_interface;
 
 921         acm->data = data_interface;
 
 924         acm->ctrl_caps = ac_management_function;
 
 925         acm->ctrlsize = ctrlsize;
 
 926         acm->readsize = readsize;
 
 927         acm->rx_buflimit = num_rx_buf;
 
 928         acm->urb_task.func = acm_rx_tasklet;
 
 929         acm->urb_task.data = (unsigned long) acm;
 
 930         INIT_WORK(&acm->work, acm_softint);
 
 931         spin_lock_init(&acm->throttle_lock);
 
 932         spin_lock_init(&acm->write_lock);
 
 933         spin_lock_init(&acm->read_lock);
 
 934         acm->write_ready = 1;
 
 935         acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
 
 937         buf = usb_buffer_alloc(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
 
 939                 dev_dbg(&intf->dev, "out of memory (ctrl buffer alloc)");
 
 942         acm->ctrl_buffer = buf;
 
 944         if (acm_write_buffers_alloc(acm) < 0) {
 
 945                 dev_dbg(&intf->dev, "out of memory (write buffer alloc)");
 
 949         acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
 
 951                 dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)");
 
 954         for (i = 0; i < num_rx_buf; i++) {
 
 955                 struct acm_ru *rcv = &(acm->ru[i]);
 
 957                 if (!(rcv->urb = usb_alloc_urb(0, GFP_KERNEL))) {
 
 958                         dev_dbg(&intf->dev, "out of memory (read urbs usb_alloc_urb)");
 
 962                 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 
 965         for (i = 0; i < num_rx_buf; i++) {
 
 966                 struct acm_rb *buf = &(acm->rb[i]);
 
 968                 if (!(buf->base = usb_buffer_alloc(acm->dev, readsize, GFP_KERNEL, &buf->dma))) {
 
 969                         dev_dbg(&intf->dev, "out of memory (read bufs usb_buffer_alloc)");
 
 973         acm->writeurb = usb_alloc_urb(0, GFP_KERNEL);
 
 974         if (!acm->writeurb) {
 
 975                 dev_dbg(&intf->dev, "out of memory (writeurb kmalloc)");
 
 979         usb_fill_int_urb(acm->ctrlurb, usb_dev, usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
 
 980                          acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm, epctrl->bInterval);
 
 981         acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 
 982         acm->ctrlurb->transfer_dma = acm->ctrl_dma;
 
 984         usb_fill_bulk_urb(acm->writeurb, usb_dev, usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
 
 985                           NULL, acm->writesize, acm_write_bulk, acm);
 
 986         acm->writeurb->transfer_flags |= URB_NO_FSBR | URB_NO_TRANSFER_DMA_MAP;
 
 988         dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
 
 990         acm_set_control(acm, acm->ctrlout);
 
 992         acm->line.dwDTERate = cpu_to_le32(9600);
 
 993         acm->line.bDataBits = 8;
 
 994         acm_set_line(acm, &acm->line);
 
 996         usb_driver_claim_interface(&acm_driver, data_interface, acm);
 
 998         usb_get_intf(control_interface);
 
 999         tty_register_device(acm_tty_driver, minor, &control_interface->dev);
 
1001         acm_table[minor] = acm;
 
1002         usb_set_intfdata (intf, acm);
 
1006         for (i = 0; i < num_rx_buf; i++)
 
1007                 usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma);
 
1008         for (i = 0; i < num_rx_buf; i++)
 
1009                 usb_free_urb(acm->ru[i].urb);
 
1010         usb_free_urb(acm->ctrlurb);
 
1012         acm_write_buffers_free(acm);
 
1014         usb_buffer_free(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
 
1021 static void acm_disconnect(struct usb_interface *intf)
 
1023         struct acm *acm = usb_get_intfdata (intf);
 
1024         struct usb_device *usb_dev = interface_to_usbdev(intf);
 
1027         if (!acm || !acm->dev) {
 
1028                 dbg("disconnect on nonexisting interface");
 
1032         mutex_lock(&open_mutex);
 
1033         if (!usb_get_intfdata(intf)) {
 
1034                 mutex_unlock(&open_mutex);
 
1038         usb_set_intfdata(acm->control, NULL);
 
1039         usb_set_intfdata(acm->data, NULL);
 
1041         tasklet_disable(&acm->urb_task);
 
1043         usb_kill_urb(acm->ctrlurb);
 
1044         usb_kill_urb(acm->writeurb);
 
1045         for (i = 0; i < acm->rx_buflimit; i++)
 
1046                 usb_kill_urb(acm->ru[i].urb);
 
1048         INIT_LIST_HEAD(&acm->filled_read_bufs);
 
1049         INIT_LIST_HEAD(&acm->spare_read_bufs);
 
1051         tasklet_enable(&acm->urb_task);
 
1053         flush_scheduled_work(); /* wait for acm_softint */
 
1055         acm_write_buffers_free(acm);
 
1056         usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
 
1057         for (i = 0; i < acm->rx_buflimit; i++)
 
1058                 usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma);
 
1060         usb_driver_release_interface(&acm_driver, intf == acm->control ? acm->data : intf);
 
1063                 acm_tty_unregister(acm);
 
1064                 mutex_unlock(&open_mutex);
 
1068         mutex_unlock(&open_mutex);
 
1071                 tty_hangup(acm->tty);
 
1075  * USB driver structure.
 
1078 static struct usb_device_id acm_ids[] = {
 
1079         /* quirky and broken devices */
 
1080         { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
 
1081         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1083         { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
 
1084         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1086         { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
 
1087         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1089         { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
 
1090         .driver_info = SINGLE_RX_URB, /* firmware bug */
 
1092         { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
 
1093         .driver_info = SINGLE_RX_URB, /* firmware bug */
 
1095         /* control interfaces with various AT-command sets */
 
1096         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
 
1097                 USB_CDC_ACM_PROTO_AT_V25TER) },
 
1098         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
 
1099                 USB_CDC_ACM_PROTO_AT_PCCA101) },
 
1100         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
 
1101                 USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
 
1102         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
 
1103                 USB_CDC_ACM_PROTO_AT_GSM) },
 
1104         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
 
1105                 USB_CDC_ACM_PROTO_AT_3G ) },
 
1106         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
 
1107                 USB_CDC_ACM_PROTO_AT_CDMA) },
 
1109         /* NOTE:  COMM/ACM/0xff is likely MSFT RNDIS ... NOT a modem!! */
 
1113 MODULE_DEVICE_TABLE (usb, acm_ids);
 
1115 static struct usb_driver acm_driver = {
 
1118         .disconnect =   acm_disconnect,
 
1119         .id_table =     acm_ids,
 
1123  * TTY driver structures.
 
1126 static const struct tty_operations acm_ops = {
 
1127         .open =                 acm_tty_open,
 
1128         .close =                acm_tty_close,
 
1129         .write =                acm_tty_write,
 
1130         .write_room =           acm_tty_write_room,
 
1131         .ioctl =                acm_tty_ioctl,
 
1132         .throttle =             acm_tty_throttle,
 
1133         .unthrottle =           acm_tty_unthrottle,
 
1134         .chars_in_buffer =      acm_tty_chars_in_buffer,
 
1135         .break_ctl =            acm_tty_break_ctl,
 
1136         .set_termios =          acm_tty_set_termios,
 
1137         .tiocmget =             acm_tty_tiocmget,
 
1138         .tiocmset =             acm_tty_tiocmset,
 
1145 static int __init acm_init(void)
 
1148         acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
 
1149         if (!acm_tty_driver)
 
1151         acm_tty_driver->owner = THIS_MODULE,
 
1152         acm_tty_driver->driver_name = "acm",
 
1153         acm_tty_driver->name = "ttyACM",
 
1154         acm_tty_driver->major = ACM_TTY_MAJOR,
 
1155         acm_tty_driver->minor_start = 0,
 
1156         acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
 
1157         acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
 
1158         acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
 
1159         acm_tty_driver->init_termios = tty_std_termios;
 
1160         acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
 
1161         tty_set_operations(acm_tty_driver, &acm_ops);
 
1163         retval = tty_register_driver(acm_tty_driver);
 
1165                 put_tty_driver(acm_tty_driver);
 
1169         retval = usb_register(&acm_driver);
 
1171                 tty_unregister_driver(acm_tty_driver);
 
1172                 put_tty_driver(acm_tty_driver);
 
1176         info(DRIVER_VERSION ":" DRIVER_DESC);
 
1181 static void __exit acm_exit(void)
 
1183         usb_deregister(&acm_driver);
 
1184         tty_unregister_driver(acm_tty_driver);
 
1185         put_tty_driver(acm_tty_driver);
 
1188 module_init(acm_init);
 
1189 module_exit(acm_exit);
 
1191 MODULE_AUTHOR( DRIVER_AUTHOR );
 
1192 MODULE_DESCRIPTION( DRIVER_DESC );
 
1193 MODULE_LICENSE("GPL");