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