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