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
 
  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
 
  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.
 
  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.
 
  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
 
  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>
 
  76 #define ACM_CLOSE_TIMEOUT       15      /* seconds to let writes drain */
 
  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 = {
 
 103  * Functions for ACM control messages.
 
 106 static int acm_ctrl_msg(struct acm *acm, int request, int value,
 
 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,
 
 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...
 
 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.
 
 133 static int acm_wb_alloc(struct acm *acm)
 
 146                 wbn = (wbn + 1) % ACM_NW;
 
 152 static int acm_wb_is_avail(struct acm *acm)
 
 158         spin_lock_irqsave(&acm->write_lock, flags);
 
 159         for (i = 0; i < ACM_NW; i++)
 
 161         spin_unlock_irqrestore(&acm->write_lock, flags);
 
 166  * Finish write. Caller must hold acm->write_lock
 
 168 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
 
 177  * the caller is responsible for locking
 
 180 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
 
 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);
 
 193                 dbg("usb_submit_urb(write bulk) failed: %d", rc);
 
 194                 acm_write_done(acm, wb);
 
 199 static int acm_write_start(struct acm *acm, int wbn)
 
 202         struct acm_wb *wb = &acm->wb[wbn];
 
 205         spin_lock_irqsave(&acm->write_lock, flags);
 
 208                 spin_unlock_irqrestore(&acm->write_lock, flags);
 
 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 */
 
 219         usb_mark_last_busy(acm->dev);
 
 221         rc = acm_start_wb(acm, wb);
 
 222         spin_unlock_irqrestore(&acm->write_lock, flags);
 
 228  * attributes exported through sysfs
 
 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
 
 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;
 
 275         int status = urb->status;
 
 284                 /* this urb is terminated, clean up */
 
 285                 dbg("%s - urb shutting down with status: %d", __func__, status);
 
 288                 dbg("%s - nonzero urb status received: %d", __func__, status);
 
 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");
 
 302         case USB_CDC_NOTIFY_SERIAL_STATE:
 
 303                 tty = tty_port_tty_get(&acm->port);
 
 304                 newctrl = get_unaligned_le16(data);
 
 308                                 (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
 
 309                                 dbg("calling hangup");
 
 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 ? '+' : '-');
 
 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                 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)
 
 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;
 
 389         unsigned char throttled;
 
 391         dbg("Entering acm_rx_tasklet");
 
 393         if (!ACM_READY(acm)) {
 
 394                 dbg("acm_rx_tasklet: ACM not ready");
 
 398         spin_lock_irqsave(&acm->throttle_lock, flags);
 
 399         throttled = acm->throttle;
 
 400         spin_unlock_irqrestore(&acm->throttle_lock, flags);
 
 402                 dbg("acm_rx_tasklet: throttled");
 
 406         tty = tty_port_tty_get(&acm->port);
 
 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);
 
 422                 spin_lock_irqsave(&acm->throttle_lock, flags);
 
 423                 throttled = acm->throttle;
 
 424                 spin_unlock_irqrestore(&acm->throttle_lock, flags);
 
 426                         tty_buffer_request_room(tty, buf->size);
 
 427                         tty_insert_flip_string(tty, buf->base, buf->size);
 
 428                         tty_flip_buffer_push(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);
 
 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);
 
 447         while (!list_empty(&acm->spare_read_bufs)) {
 
 448                 spin_lock_irqsave(&acm->read_lock, flags);
 
 449                 if (list_empty(&acm->spare_read_urbs)) {
 
 451                         spin_unlock_irqrestore(&acm->read_lock, flags);
 
 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);
 
 466                         usb_fill_int_urb(rcv->urb, acm->dev,
 
 470                                          acm_read_bulk, rcv, acm->bInterval);
 
 472                         usb_fill_bulk_urb(rcv->urb, acm->dev,
 
 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);
 
 488                         spin_unlock_irqrestore(&acm->read_lock, flags);
 
 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);
 
 495         spin_lock_irqsave(&acm->read_lock, flags);
 
 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;
 
 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",
 
 511                         urb->transfer_buffer_length,
 
 514         spin_lock_irqsave(&acm->write_lock, flags);
 
 515         acm_write_done(acm, wb);
 
 516         spin_unlock_irqrestore(&acm->write_lock, flags);
 
 518                 schedule_work(&acm->work);
 
 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");
 
 531         tty = tty_port_tty_get(&acm->port);
 
 536 static void acm_waker(struct work_struct *waker)
 
 538         struct acm *acm = container_of(waker, struct acm, waker);
 
 541         rv = usb_autopm_get_interface(acm->control);
 
 543                 dev_err(&acm->dev->dev, "Autopm failure in %s\n", __func__);
 
 546         if (acm->delayed_wb) {
 
 547                 acm_start_wb(acm, acm->delayed_wb);
 
 548                 acm->delayed_wb = NULL;
 
 550         usb_autopm_put_interface(acm->control);
 
 557 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
 
 562         dbg("Entering acm_tty_open.");
 
 564         mutex_lock(&open_mutex);
 
 566         acm = acm_table[tty->index];
 
 567         if (!acm || !acm->dev)
 
 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)
 
 580                 acm->control->needs_remote_wakeup = 1;
 
 582         mutex_lock(&acm->mutex);
 
 583         if (acm->port.count++) {
 
 584                 usb_autopm_put_interface(acm->control);
 
 588         acm->ctrlurb->dev = acm->dev;
 
 589         if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
 
 590                 dbg("usb_submit_urb(ctrl irq) failed");
 
 594         if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS) &&
 
 595             (acm->ctrl_caps & USB_CDC_CAP_LINE))
 
 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);
 
 611         tasklet_schedule(&acm->urb_task);
 
 612         rv = tty_port_block_til_ready(&acm->port, tty, filp);
 
 614         mutex_unlock(&acm->mutex);
 
 616         mutex_unlock(&open_mutex);
 
 620         usb_kill_urb(acm->ctrlurb);
 
 622         usb_autopm_put_interface(acm->control);
 
 624         mutex_unlock(&acm->mutex);
 
 626         mutex_unlock(&open_mutex);
 
 627         tty_port_tty_set(&acm->port, NULL);
 
 631 static void acm_tty_unregister(struct acm *acm)
 
 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);
 
 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);
 
 655                 usb_autopm_get_interface(acm->control);
 
 656                 acm_set_control(acm, acm->ctrlout = 0);
 
 657                 /* try letting the last writes drain naturally */
 
 659                         wait_event_interruptible_timeout(acm->drain_wait,
 
 660                                 (ACM_NW == acm_wb_is_avail(acm)) || !acm->dev,
 
 661                                         ACM_CLOSE_TIMEOUT * HZ);
 
 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);
 
 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
 
 687         if (!acm || tty_port_close_start(&acm->port, tty, filp) == 0)
 
 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);
 
 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;
 
 707         dbg("Entering acm_tty_write to write %d bytes,", count);
 
 714         spin_lock_irqsave(&acm->write_lock, flags);
 
 715         wbn = acm_wb_alloc(acm);
 
 717                 spin_unlock_irqrestore(&acm->write_lock, flags);
 
 722         count = (count > acm->writesize) ? acm->writesize : count;
 
 723         dbg("Get %d bytes...", count);
 
 724         memcpy(wb->buf, buf, count);
 
 726         spin_unlock_irqrestore(&acm->write_lock, flags);
 
 728         stat = acm_write_start(acm, wbn);
 
 734 static int acm_tty_write_room(struct tty_struct *tty)
 
 736         struct acm *acm = tty->driver_data;
 
 740          * Do not let the line discipline to know that we have a reserve,
 
 741          * or it might get too enthusiastic.
 
 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;
 
 752          * This is inaccurate (overcounts), but it works.
 
 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;
 
 762         spin_lock_bh(&acm->throttle_lock);
 
 764         spin_unlock_bh(&acm->throttle_lock);
 
 767 static void acm_tty_unthrottle(struct tty_struct *tty)
 
 769         struct acm *acm = tty->driver_data;
 
 772         spin_lock_bh(&acm->throttle_lock);
 
 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;
 
 784         retval = acm_send_break(acm, state ? 0xffff : 0);
 
 786                 dbg("send break failed");
 
 790 static int acm_tty_tiocmget(struct tty_struct *tty, struct file *file)
 
 792         struct acm *acm = tty->driver_data;
 
 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) |
 
 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;
 
 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)
 
 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;
 
 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[] = {
 
 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;
 
 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;
 
 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,
 
 887                 acm_set_line(acm, &acm->line);
 
 892  * USB probe and disconnect routines.
 
 895 /* Little helpers: write/read buffers free */
 
 896 static void acm_write_buffers_free(struct acm *acm)
 
 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)
 
 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,
 
 929                                 usb_buffer_free(acm->dev, acm->writesize,
 
 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);
 
 953         int ctrlsize, readsize;
 
 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;
 
 962         int combined_interfaces = 0;
 
 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;
 
 977                 dev_err(&intf->dev, "Weird descriptor references\n");
 
 982                 if (intf->cur_altsetting->endpoint->extralen &&
 
 983                                 intf->cur_altsetting->endpoint->extra) {
 
 985                                 "Seeking extra descriptors on endpoint\n");
 
 986                         buflen = intf->cur_altsetting->endpoint->extralen;
 
 987                         buffer = intf->cur_altsetting->endpoint->extra;
 
 990                                 "Zero length descriptor references\n");
 
 996                 if (buffer[1] != USB_DT_CS_INTERFACE) {
 
 997                         dev_err(&intf->dev, "skipping garbage\n");
 
1001                 switch (buffer[2]) {
 
1002                 case USB_CDC_UNION_TYPE: /* we've found it */
 
1004                                 dev_err(&intf->dev, "More than one "
 
1005                                         "union descriptor, skipping ...\n");
 
1008                         union_header = (struct usb_cdc_union_desc *)buffer;
 
1010                 case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
 
1011                         cfd = (struct usb_cdc_country_functional_desc *)buffer;
 
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];
 
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");
 
1025                         /* there are LOTS more CDC descriptors that
 
1026                          * could legitimately be found here.
 
1028                         dev_dbg(&intf->dev, "Ignoring descriptor: "
 
1029                                         "type %02x, length %d\n",
 
1030                                         buffer[2], buffer[0]);
 
1034                 buflen -= buffer[0];
 
1035                 buffer += buffer[0];
 
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;
 
1044                         if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
 
1045                                 dev_dbg(&intf->dev,"No union descriptor, giving up\n");
 
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;
 
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");
 
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");
 
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))
 
1083                         else if (usb_endpoint_is_bulk_out(ep))
 
1085                         else if (usb_endpoint_is_bulk_in(ep))
 
1090                 if (!epctrl || !epread || !epwrite)
 
1093                         goto made_compressed_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;
 
1105                                 "Your device has switched interfaces.\n");
 
1106                         t = control_interface;
 
1107                         control_interface = data_interface;
 
1114         /* Accept probe requests only for the control interface */
 
1115         if (!combined_interfaces && intf != control_interface)
 
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");
 
1125         if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
 
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;
 
1138                         "The data interface has switched endpoints\n");
 
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");
 
1152         acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
 
1154                 dev_dbg(&intf->dev, "out of memory (acm kzalloc)\n");
 
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;
 
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);
 
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);
 
1191                 dev_dbg(&intf->dev, "out of memory (ctrl buffer alloc)\n");
 
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");
 
1201         acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
 
1202         if (!acm->ctrlurb) {
 
1203                 dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
 
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) {
 
1212                                 "out of memory (read urbs usb_alloc_urb)\n");
 
1216                 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 
1217                 rcv->instance = acm;
 
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);
 
1226                                 "out of memory (read bufs usb_buffer_alloc)\n");
 
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) {
 
1236                                 "out of memory (write urbs usb_alloc_urb)");
 
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);
 
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;
 
1252         usb_set_intfdata(intf, acm);
 
1254         i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
 
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,
 
1265                 acm->country_rel_date = cfd->iCountryCodeRelDate;
 
1267                 i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
 
1269                         kfree(acm->country_codes);
 
1270                         goto skip_countries;
 
1273                 i = device_create_file(&intf->dev,
 
1274                                                 &dev_attr_iCountryCodeRelDate);
 
1276                         kfree(acm->country_codes);
 
1277                         goto 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;
 
1308         for (i = 0; i < ACM_NW; i++)
 
1309                 usb_free_urb(acm->wb[i].urb);
 
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);
 
1316         acm_write_buffers_free(acm);
 
1318         usb_buffer_free(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
 
1325 static void stop_data_traffic(struct acm *acm)
 
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 */
 
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);
 
1361         device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
 
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,
 
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);
 
1383         mutex_unlock(&open_mutex);
 
1384         tty = tty_port_tty_get(&acm->port);
 
1392 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
 
1394         struct acm *acm = usb_get_intfdata(intf);
 
1397         if (message.event & PM_EVENT_AUTO) {
 
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);
 
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);
 
1418         we treat opened interfaces differently,
 
1419         we must guard against open
 
1421         mutex_lock(&acm->mutex);
 
1423         if (acm->port.count)
 
1424                 stop_data_traffic(acm);
 
1426         mutex_unlock(&acm->mutex);
 
1430 static int acm_resume(struct usb_interface *intf)
 
1432         struct acm *acm = usb_get_intfdata(intf);
 
1436         spin_lock_irq(&acm->read_lock);
 
1437         acm->susp_count -= 1;
 
1438         cnt = acm->susp_count;
 
1439         spin_unlock_irq(&acm->read_lock);
 
1444         mutex_lock(&acm->mutex);
 
1445         if (acm->port.count) {
 
1446                 rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
 
1450                 tasklet_schedule(&acm->urb_task);
 
1454         mutex_unlock(&acm->mutex);
 
1458 #endif /* CONFIG_PM */
 
1460  * USB driver structure.
 
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 */
 
1468         { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
 
1469         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1471         { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
 
1472         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1474         { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
 
1475         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1477         { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
 
1478         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1480         { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
 
1481         .driver_info = SINGLE_RX_URB,
 
1483         { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
 
1484         .driver_info = SINGLE_RX_URB, /* firmware bug */
 
1486         { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
 
1487         .driver_info = SINGLE_RX_URB, /* firmware bug */
 
1489         { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
 
1490         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1492         { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
 
1493         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1495         { USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
 
1496         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1498         { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
 
1499         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1501         { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
 
1502         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
 
1504         { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
 
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
 
1513         { USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
 
1514         .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
 
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!! */
 
1535 MODULE_DEVICE_TABLE(usb, acm_ids);
 
1537 static struct usb_driver acm_driver = {
 
1540         .disconnect =   acm_disconnect,
 
1542         .suspend =      acm_suspend,
 
1543         .resume =       acm_resume,
 
1545         .id_table =     acm_ids,
 
1547         .supports_autosuspend = 1,
 
1552  * TTY driver structures.
 
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,
 
1575 static int __init acm_init(void)
 
1578         acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
 
1579         if (!acm_tty_driver)
 
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 |
 
1592         tty_set_operations(acm_tty_driver, &acm_ops);
 
1594         retval = tty_register_driver(acm_tty_driver);
 
1596                 put_tty_driver(acm_tty_driver);
 
1600         retval = usb_register(&acm_driver);
 
1602                 tty_unregister_driver(acm_tty_driver);
 
1603                 put_tty_driver(acm_tty_driver);
 
1607         printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
 
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);