Linux Audio

Check our new training course

Loading...
v5.4
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * cdc-acm.c
   4 *
   5 * Copyright (c) 1999 Armin Fuerst	<fuerst@in.tum.de>
   6 * Copyright (c) 1999 Pavel Machek	<pavel@ucw.cz>
   7 * Copyright (c) 1999 Johannes Erdfelt	<johannes@erdfelt.com>
   8 * Copyright (c) 2000 Vojtech Pavlik	<vojtech@suse.cz>
   9 * Copyright (c) 2004 Oliver Neukum	<oliver@neukum.name>
  10 * Copyright (c) 2005 David Kubicek	<dave@awk.cz>
  11 * Copyright (c) 2011 Johan Hovold	<jhovold@gmail.com>
  12 *
  13 * USB Abstract Control Model driver for USB modems and ISDN adapters
  14 *
  15 * Sponsored by SuSE
 
 
 
 
 
 
 
 
 
 
 
 
 
 
  16 */
  17
  18#undef DEBUG
  19#undef VERBOSE_DEBUG
  20
  21#include <linux/kernel.h>
  22#include <linux/sched/signal.h>
  23#include <linux/errno.h>
  24#include <linux/init.h>
  25#include <linux/slab.h>
  26#include <linux/log2.h>
  27#include <linux/tty.h>
  28#include <linux/serial.h>
  29#include <linux/tty_driver.h>
  30#include <linux/tty_flip.h>
 
  31#include <linux/module.h>
  32#include <linux/mutex.h>
  33#include <linux/uaccess.h>
  34#include <linux/usb.h>
  35#include <linux/usb/cdc.h>
  36#include <asm/byteorder.h>
  37#include <asm/unaligned.h>
  38#include <linux/idr.h>
  39#include <linux/list.h>
  40
  41#include "cdc-acm.h"
  42
  43
  44#define DRIVER_AUTHOR "Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik, David Kubicek, Johan Hovold"
  45#define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters"
  46
  47static struct usb_driver acm_driver;
  48static struct tty_driver *acm_tty_driver;
 
  49
  50static DEFINE_IDR(acm_minors);
  51static DEFINE_MUTEX(acm_minors_lock);
  52
  53static void acm_tty_set_termios(struct tty_struct *tty,
  54				struct ktermios *termios_old);
  55
  56/*
  57 * acm_minors accessors
  58 */
  59
  60/*
  61 * Look up an ACM structure by minor. If found and not disconnected, increment
  62 * its refcount and return it with its mutex held.
  63 */
  64static struct acm *acm_get_by_minor(unsigned int minor)
  65{
  66	struct acm *acm;
  67
  68	mutex_lock(&acm_minors_lock);
  69	acm = idr_find(&acm_minors, minor);
  70	if (acm) {
  71		mutex_lock(&acm->mutex);
  72		if (acm->disconnected) {
  73			mutex_unlock(&acm->mutex);
  74			acm = NULL;
  75		} else {
  76			tty_port_get(&acm->port);
  77			mutex_unlock(&acm->mutex);
  78		}
  79	}
  80	mutex_unlock(&acm_minors_lock);
  81	return acm;
  82}
  83
  84/*
  85 * Try to find an available minor number and if found, associate it with 'acm'.
  86 */
  87static int acm_alloc_minor(struct acm *acm)
  88{
  89	int minor;
  90
  91	mutex_lock(&acm_minors_lock);
  92	minor = idr_alloc(&acm_minors, acm, 0, ACM_TTY_MINORS, GFP_KERNEL);
  93	mutex_unlock(&acm_minors_lock);
 
 
 
 
 
  94
  95	return minor;
  96}
  97
  98/* Release the minor number associated with 'acm'.  */
  99static void acm_release_minor(struct acm *acm)
 100{
 101	mutex_lock(&acm_minors_lock);
 102	idr_remove(&acm_minors, acm->minor);
 103	mutex_unlock(&acm_minors_lock);
 104}
 105
 106/*
 107 * Functions for ACM control messages.
 108 */
 109
 110static int acm_ctrl_msg(struct acm *acm, int request, int value,
 111							void *buf, int len)
 112{
 113	int retval;
 114
 115	retval = usb_autopm_get_interface(acm->control);
 116	if (retval)
 117		return retval;
 118
 119	retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
 120		request, USB_RT_ACM, value,
 121		acm->control->altsetting[0].desc.bInterfaceNumber,
 122		buf, len, 5000);
 123
 124	dev_dbg(&acm->control->dev,
 125		"%s - rq 0x%02x, val %#x, len %#x, result %d\n",
 126		__func__, request, value, len, retval);
 127
 128	usb_autopm_put_interface(acm->control);
 129
 130	return retval < 0 ? retval : 0;
 131}
 132
 133/* devices aren't required to support these requests.
 134 * the cdc acm descriptor tells whether they do...
 135 */
 136static inline int acm_set_control(struct acm *acm, int control)
 137{
 138	if (acm->quirks & QUIRK_CONTROL_LINE_STATE)
 139		return -EOPNOTSUPP;
 140
 141	return acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE,
 142			control, NULL, 0);
 143}
 144
 145#define acm_set_line(acm, line) \
 146	acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
 147#define acm_send_break(acm, ms) \
 148	acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
 149
 150static void acm_kill_urbs(struct acm *acm)
 151{
 152	int i;
 153
 154	usb_kill_urb(acm->ctrlurb);
 155	for (i = 0; i < ACM_NW; i++)
 156		usb_kill_urb(acm->wb[i].urb);
 157	for (i = 0; i < acm->rx_buflimit; i++)
 158		usb_kill_urb(acm->read_urbs[i]);
 159}
 160
 161/*
 162 * Write buffer management.
 163 * All of these assume proper locks taken by the caller.
 164 */
 165
 166static int acm_wb_alloc(struct acm *acm)
 167{
 168	int i, wbn;
 169	struct acm_wb *wb;
 170
 171	wbn = 0;
 172	i = 0;
 173	for (;;) {
 174		wb = &acm->wb[wbn];
 175		if (!wb->use) {
 176			wb->use = 1;
 177			wb->len = 0;
 178			return wbn;
 179		}
 180		wbn = (wbn + 1) % ACM_NW;
 181		if (++i >= ACM_NW)
 182			return -1;
 183	}
 184}
 185
 186static int acm_wb_is_avail(struct acm *acm)
 187{
 188	int i, n;
 189	unsigned long flags;
 190
 191	n = ACM_NW;
 192	spin_lock_irqsave(&acm->write_lock, flags);
 193	for (i = 0; i < ACM_NW; i++)
 194		n -= acm->wb[i].use;
 195	spin_unlock_irqrestore(&acm->write_lock, flags);
 196	return n;
 197}
 198
 199/*
 200 * Finish write. Caller must hold acm->write_lock
 201 */
 202static void acm_write_done(struct acm *acm, struct acm_wb *wb)
 203{
 204	wb->use = 0;
 205	acm->transmitting--;
 206	usb_autopm_put_interface_async(acm->control);
 207}
 208
 209/*
 210 * Poke write.
 211 *
 212 * the caller is responsible for locking
 213 */
 214
 215static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
 216{
 217	int rc;
 218
 219	acm->transmitting++;
 220
 221	wb->urb->transfer_buffer = wb->buf;
 222	wb->urb->transfer_dma = wb->dmah;
 223	wb->urb->transfer_buffer_length = wb->len;
 224	wb->urb->dev = acm->dev;
 225
 226	rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
 227	if (rc < 0) {
 228		dev_err(&acm->data->dev,
 229			"%s - usb_submit_urb(write bulk) failed: %d\n",
 230			__func__, rc);
 231		acm_write_done(acm, wb);
 232	}
 233	return rc;
 234}
 235
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 236/*
 237 * attributes exported through sysfs
 238 */
 239static ssize_t bmCapabilities_show
 240(struct device *dev, struct device_attribute *attr, char *buf)
 241{
 242	struct usb_interface *intf = to_usb_interface(dev);
 243	struct acm *acm = usb_get_intfdata(intf);
 244
 245	return sprintf(buf, "%d", acm->ctrl_caps);
 246}
 247static DEVICE_ATTR_RO(bmCapabilities);
 248
 249static ssize_t wCountryCodes_show
 250(struct device *dev, struct device_attribute *attr, char *buf)
 251{
 252	struct usb_interface *intf = to_usb_interface(dev);
 253	struct acm *acm = usb_get_intfdata(intf);
 254
 255	memcpy(buf, acm->country_codes, acm->country_code_size);
 256	return acm->country_code_size;
 257}
 258
 259static DEVICE_ATTR_RO(wCountryCodes);
 260
 261static ssize_t iCountryCodeRelDate_show
 262(struct device *dev, struct device_attribute *attr, char *buf)
 263{
 264	struct usb_interface *intf = to_usb_interface(dev);
 265	struct acm *acm = usb_get_intfdata(intf);
 266
 267	return sprintf(buf, "%d", acm->country_rel_date);
 268}
 269
 270static DEVICE_ATTR_RO(iCountryCodeRelDate);
 271/*
 272 * Interrupt handlers for various ACM device responses
 273 */
 274
 275static void acm_process_notification(struct acm *acm, unsigned char *buf)
 276{
 277	int newctrl;
 278	int difference;
 279	unsigned long flags;
 280	struct usb_cdc_notification *dr = (struct usb_cdc_notification *)buf;
 281	unsigned char *data = buf + sizeof(struct usb_cdc_notification);
 282
 283	switch (dr->bNotificationType) {
 284	case USB_CDC_NOTIFY_NETWORK_CONNECTION:
 285		dev_dbg(&acm->control->dev,
 286			"%s - network connection: %d\n", __func__, dr->wValue);
 287		break;
 288
 289	case USB_CDC_NOTIFY_SERIAL_STATE:
 290		if (le16_to_cpu(dr->wLength) != 2) {
 291			dev_dbg(&acm->control->dev,
 292				"%s - malformed serial state\n", __func__);
 293			break;
 294		}
 295
 296		newctrl = get_unaligned_le16(data);
 297		dev_dbg(&acm->control->dev,
 298			"%s - serial state: 0x%x\n", __func__, newctrl);
 299
 300		if (!acm->clocal && (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
 301			dev_dbg(&acm->control->dev,
 302				"%s - calling hangup\n", __func__);
 303			tty_port_tty_hangup(&acm->port, false);
 304		}
 305
 306		difference = acm->ctrlin ^ newctrl;
 307		spin_lock_irqsave(&acm->read_lock, flags);
 308		acm->ctrlin = newctrl;
 309		acm->oldcount = acm->iocount;
 310
 311		if (difference & ACM_CTRL_DSR)
 312			acm->iocount.dsr++;
 313		if (difference & ACM_CTRL_DCD)
 314			acm->iocount.dcd++;
 315		if (newctrl & ACM_CTRL_BRK)
 316			acm->iocount.brk++;
 317		if (newctrl & ACM_CTRL_RI)
 318			acm->iocount.rng++;
 319		if (newctrl & ACM_CTRL_FRAMING)
 320			acm->iocount.frame++;
 321		if (newctrl & ACM_CTRL_PARITY)
 322			acm->iocount.parity++;
 323		if (newctrl & ACM_CTRL_OVERRUN)
 324			acm->iocount.overrun++;
 325		spin_unlock_irqrestore(&acm->read_lock, flags);
 326
 327		if (difference)
 328			wake_up_all(&acm->wioctl);
 329
 330		break;
 331
 332	default:
 333		dev_dbg(&acm->control->dev,
 334			"%s - unknown notification %d received: index %d len %d\n",
 335			__func__,
 336			dr->bNotificationType, dr->wIndex, dr->wLength);
 337	}
 338}
 339
 340/* control interface reports status changes with "interrupt" transfers */
 341static void acm_ctrl_irq(struct urb *urb)
 342{
 343	struct acm *acm = urb->context;
 344	struct usb_cdc_notification *dr = urb->transfer_buffer;
 345	unsigned int current_size = urb->actual_length;
 346	unsigned int expected_size, copy_size, alloc_size;
 
 347	int retval;
 348	int status = urb->status;
 349
 350	switch (status) {
 351	case 0:
 352		/* success */
 353		break;
 354	case -ECONNRESET:
 355	case -ENOENT:
 356	case -ESHUTDOWN:
 357		/* this urb is terminated, clean up */
 358		dev_dbg(&acm->control->dev,
 359			"%s - urb shutting down with status: %d\n",
 360			__func__, status);
 361		return;
 362	default:
 363		dev_dbg(&acm->control->dev,
 364			"%s - nonzero urb status received: %d\n",
 365			__func__, status);
 366		goto exit;
 367	}
 368
 369	usb_mark_last_busy(acm->dev);
 370
 371	if (acm->nb_index)
 372		dr = (struct usb_cdc_notification *)acm->notification_buffer;
 
 
 
 
 
 
 
 
 373
 374	/* size = notification-header + (optional) data */
 375	expected_size = sizeof(struct usb_cdc_notification) +
 376					le16_to_cpu(dr->wLength);
 377
 378	if (current_size < expected_size) {
 379		/* notification is transmitted fragmented, reassemble */
 380		if (acm->nb_size < expected_size) {
 381			if (acm->nb_size) {
 382				kfree(acm->notification_buffer);
 383				acm->nb_size = 0;
 384			}
 385			alloc_size = roundup_pow_of_two(expected_size);
 386			/*
 387			 * kmalloc ensures a valid notification_buffer after a
 388			 * use of kfree in case the previous allocation was too
 389			 * small. Final freeing is done on disconnect.
 390			 */
 391			acm->notification_buffer =
 392				kmalloc(alloc_size, GFP_ATOMIC);
 393			if (!acm->notification_buffer)
 394				goto exit;
 395			acm->nb_size = alloc_size;
 396		}
 397
 398		copy_size = min(current_size,
 399				expected_size - acm->nb_index);
 400
 401		memcpy(&acm->notification_buffer[acm->nb_index],
 402		       urb->transfer_buffer, copy_size);
 403		acm->nb_index += copy_size;
 404		current_size = acm->nb_index;
 405	}
 406
 407	if (current_size >= expected_size) {
 408		/* notification complete */
 409		acm_process_notification(acm, (unsigned char *)dr);
 410		acm->nb_index = 0;
 411	}
 412
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 413exit:
 414	retval = usb_submit_urb(urb, GFP_ATOMIC);
 415	if (retval && retval != -EPERM)
 416		dev_err(&acm->control->dev,
 417			"%s - usb_submit_urb failed: %d\n", __func__, retval);
 418}
 419
 420static int acm_submit_read_urb(struct acm *acm, int index, gfp_t mem_flags)
 421{
 422	int res;
 423
 424	if (!test_and_clear_bit(index, &acm->read_urbs_free))
 425		return 0;
 426
 
 
 427	res = usb_submit_urb(acm->read_urbs[index], mem_flags);
 428	if (res) {
 429		if (res != -EPERM && res != -ENODEV) {
 430			dev_err(&acm->data->dev,
 431				"urb %d failed submission with %d\n",
 432				index, res);
 433		}
 434		set_bit(index, &acm->read_urbs_free);
 435		return res;
 436	} else {
 437		dev_vdbg(&acm->data->dev, "submitted urb %d\n", index);
 438	}
 439
 440	return 0;
 441}
 442
 443static int acm_submit_read_urbs(struct acm *acm, gfp_t mem_flags)
 444{
 445	int res;
 446	int i;
 447
 448	for (i = 0; i < acm->rx_buflimit; ++i) {
 449		res = acm_submit_read_urb(acm, i, mem_flags);
 450		if (res)
 451			return res;
 452	}
 453
 454	return 0;
 455}
 456
 457static void acm_process_read_urb(struct acm *acm, struct urb *urb)
 458{
 
 
 459	if (!urb->actual_length)
 460		return;
 461
 462	tty_insert_flip_string(&acm->port, urb->transfer_buffer,
 463			urb->actual_length);
 464	tty_flip_buffer_push(&acm->port);
 
 
 
 
 
 465}
 466
 467static void acm_read_bulk_callback(struct urb *urb)
 468{
 469	struct acm_rb *rb = urb->context;
 470	struct acm *acm = rb->instance;
 471	int status = urb->status;
 472	bool stopped = false;
 473	bool stalled = false;
 474
 475	dev_vdbg(&acm->data->dev, "got urb %d, len %d, status %d\n",
 476		rb->index, urb->actual_length, status);
 
 477
 478	if (!acm->dev) {
 479		dev_dbg(&acm->data->dev, "%s - disconnected\n", __func__);
 480		return;
 481	}
 
 482
 483	switch (status) {
 484	case 0:
 485		usb_mark_last_busy(acm->dev);
 486		acm_process_read_urb(acm, urb);
 487		break;
 488	case -EPIPE:
 489		set_bit(EVENT_RX_STALL, &acm->flags);
 490		stalled = true;
 491		break;
 492	case -ENOENT:
 493	case -ECONNRESET:
 494	case -ESHUTDOWN:
 495		dev_dbg(&acm->data->dev,
 496			"%s - urb shutting down with status: %d\n",
 497			__func__, status);
 498		stopped = true;
 499		break;
 500	default:
 501		dev_dbg(&acm->data->dev,
 502			"%s - nonzero urb status received: %d\n",
 503			__func__, status);
 504		break;
 505	}
 506
 507	/*
 508	 * Make sure URB processing is done before marking as free to avoid
 509	 * racing with unthrottle() on another CPU. Matches the barriers
 510	 * implied by the test_and_clear_bit() in acm_submit_read_urb().
 511	 */
 512	smp_mb__before_atomic();
 513	set_bit(rb->index, &acm->read_urbs_free);
 514	/*
 515	 * Make sure URB is marked as free before checking the throttled flag
 516	 * to avoid racing with unthrottle() on another CPU. Matches the
 517	 * smp_mb() in unthrottle().
 518	 */
 519	smp_mb__after_atomic();
 520
 521	if (stopped || stalled) {
 522		if (stalled)
 523			schedule_work(&acm->work);
 524		return;
 525	}
 
 526
 527	if (test_bit(ACM_THROTTLED, &acm->flags))
 528		return;
 529
 530	acm_submit_read_urb(acm, rb->index, GFP_ATOMIC);
 
 
 
 
 
 531}
 532
 533/* data interface wrote those outgoing bytes */
 534static void acm_write_bulk(struct urb *urb)
 535{
 536	struct acm_wb *wb = urb->context;
 537	struct acm *acm = wb->instance;
 538	unsigned long flags;
 539	int status = urb->status;
 540
 541	if (status || (urb->actual_length != urb->transfer_buffer_length))
 542		dev_vdbg(&acm->data->dev, "wrote len %d/%d, status %d\n",
 
 543			urb->actual_length,
 544			urb->transfer_buffer_length,
 545			status);
 546
 547	spin_lock_irqsave(&acm->write_lock, flags);
 548	acm_write_done(acm, wb);
 549	spin_unlock_irqrestore(&acm->write_lock, flags);
 550	set_bit(EVENT_TTY_WAKEUP, &acm->flags);
 551	schedule_work(&acm->work);
 552}
 553
 554static void acm_softint(struct work_struct *work)
 555{
 556	int i;
 557	struct acm *acm = container_of(work, struct acm, work);
 
 558
 559	if (test_bit(EVENT_RX_STALL, &acm->flags)) {
 560		if (!(usb_autopm_get_interface(acm->data))) {
 561			for (i = 0; i < acm->rx_buflimit; i++)
 562				usb_kill_urb(acm->read_urbs[i]);
 563			usb_clear_halt(acm->dev, acm->in);
 564			acm_submit_read_urbs(acm, GFP_KERNEL);
 565			usb_autopm_put_interface(acm->data);
 566		}
 567		clear_bit(EVENT_RX_STALL, &acm->flags);
 568	}
 569
 570	if (test_and_clear_bit(EVENT_TTY_WAKEUP, &acm->flags))
 571		tty_port_tty_wakeup(&acm->port);
 
 
 
 572}
 573
 574/*
 575 * TTY handlers
 576 */
 577
 578static int acm_tty_install(struct tty_driver *driver, struct tty_struct *tty)
 579{
 580	struct acm *acm;
 581	int retval;
 582
 583	acm = acm_get_by_minor(tty->index);
 
 
 584	if (!acm)
 585		return -ENODEV;
 586
 587	retval = tty_standard_install(driver, tty);
 588	if (retval)
 589		goto error_init_termios;
 590
 591	/*
 592	 * Suppress initial echoing for some devices which might send data
 593	 * immediately after acm driver has been installed.
 594	 */
 595	if (acm->quirks & DISABLE_ECHO)
 596		tty->termios.c_lflag &= ~ECHO;
 597
 598	tty->driver_data = acm;
 599
 600	return 0;
 601
 602error_init_termios:
 603	tty_port_put(&acm->port);
 604	return retval;
 605}
 606
 607static int acm_tty_open(struct tty_struct *tty, struct file *filp)
 608{
 609	struct acm *acm = tty->driver_data;
 610
 611	return tty_port_open(&acm->port, tty, filp);
 612}
 613
 614static void acm_port_dtr_rts(struct tty_port *port, int raise)
 615{
 616	struct acm *acm = container_of(port, struct acm, port);
 617	int val;
 618	int res;
 619
 620	if (raise)
 621		val = ACM_CTRL_DTR | ACM_CTRL_RTS;
 622	else
 623		val = 0;
 624
 625	/* FIXME: add missing ctrlout locking throughout driver */
 626	acm->ctrlout = val;
 627
 628	res = acm_set_control(acm, val);
 629	if (res && (acm->ctrl_caps & USB_CDC_CAP_LINE))
 630		dev_err(&acm->control->dev, "failed to set dtr/rts\n");
 631}
 632
 633static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
 634{
 635	struct acm *acm = container_of(port, struct acm, port);
 636	int retval = -ENODEV;
 637	int i;
 
 638
 639	mutex_lock(&acm->mutex);
 640	if (acm->disconnected)
 641		goto disconnected;
 642
 643	retval = usb_autopm_get_interface(acm->control);
 644	if (retval)
 645		goto error_get_interface;
 646
 647	/*
 648	 * FIXME: Why do we need this? Allocating 64K of physically contiguous
 649	 * memory is really nasty...
 650	 */
 651	set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
 652	acm->control->needs_remote_wakeup = 1;
 653
 654	acm->ctrlurb->dev = acm->dev;
 655	retval = usb_submit_urb(acm->ctrlurb, GFP_KERNEL);
 656	if (retval) {
 657		dev_err(&acm->control->dev,
 658			"%s - usb_submit_urb(ctrl irq) failed\n", __func__);
 659		goto error_submit_urb;
 660	}
 661
 662	acm_tty_set_termios(tty, NULL);
 
 
 
 
 
 663
 664	/*
 665	 * Unthrottle device in case the TTY was closed while throttled.
 666	 */
 667	clear_bit(ACM_THROTTLED, &acm->flags);
 
 
 
 668
 669	retval = acm_submit_read_urbs(acm, GFP_KERNEL);
 670	if (retval)
 671		goto error_submit_read_urbs;
 672
 673	usb_autopm_put_interface(acm->control);
 674
 675	mutex_unlock(&acm->mutex);
 676
 677	return 0;
 678
 679error_submit_read_urbs:
 680	for (i = 0; i < acm->rx_buflimit; i++)
 681		usb_kill_urb(acm->read_urbs[i]);
 
 682	usb_kill_urb(acm->ctrlurb);
 683error_submit_urb:
 684	usb_autopm_put_interface(acm->control);
 685error_get_interface:
 686disconnected:
 687	mutex_unlock(&acm->mutex);
 688
 689	return usb_translate_errors(retval);
 690}
 691
 692static void acm_port_destruct(struct tty_port *port)
 693{
 694	struct acm *acm = container_of(port, struct acm, port);
 695
 
 
 
 696	acm_release_minor(acm);
 697	usb_put_intf(acm->control);
 698	kfree(acm->country_codes);
 699	kfree(acm);
 700}
 701
 702static void acm_port_shutdown(struct tty_port *port)
 703{
 704	struct acm *acm = container_of(port, struct acm, port);
 705	struct urb *urb;
 706	struct acm_wb *wb;
 707
 708	/*
 709	 * Need to grab write_lock to prevent race with resume, but no need to
 710	 * hold it due to the tty-port initialised flag.
 711	 */
 712	spin_lock_irq(&acm->write_lock);
 713	spin_unlock_irq(&acm->write_lock);
 714
 715	usb_autopm_get_interface_no_resume(acm->control);
 716	acm->control->needs_remote_wakeup = 0;
 717	usb_autopm_put_interface(acm->control);
 718
 719	for (;;) {
 720		urb = usb_get_from_anchor(&acm->delayed);
 721		if (!urb)
 722			break;
 723		wb = urb->context;
 724		wb->use = 0;
 725		usb_autopm_put_interface_async(acm->control);
 
 
 
 
 726	}
 727
 728	acm_kill_urbs(acm);
 729}
 730
 731static void acm_tty_cleanup(struct tty_struct *tty)
 732{
 733	struct acm *acm = tty->driver_data;
 734
 735	tty_port_put(&acm->port);
 736}
 737
 738static void acm_tty_hangup(struct tty_struct *tty)
 739{
 740	struct acm *acm = tty->driver_data;
 741
 742	tty_port_hangup(&acm->port);
 743}
 744
 745static void acm_tty_close(struct tty_struct *tty, struct file *filp)
 746{
 747	struct acm *acm = tty->driver_data;
 748
 749	tty_port_close(&acm->port, tty, filp);
 750}
 751
 752static int acm_tty_write(struct tty_struct *tty,
 753					const unsigned char *buf, int count)
 754{
 755	struct acm *acm = tty->driver_data;
 756	int stat;
 757	unsigned long flags;
 758	int wbn;
 759	struct acm_wb *wb;
 760
 761	if (!count)
 762		return 0;
 763
 764	dev_vdbg(&acm->data->dev, "%d bytes from tty layer\n", count);
 765
 766	spin_lock_irqsave(&acm->write_lock, flags);
 767	wbn = acm_wb_alloc(acm);
 768	if (wbn < 0) {
 769		spin_unlock_irqrestore(&acm->write_lock, flags);
 770		return 0;
 771	}
 772	wb = &acm->wb[wbn];
 773
 774	if (!acm->dev) {
 775		wb->use = 0;
 776		spin_unlock_irqrestore(&acm->write_lock, flags);
 777		return -ENODEV;
 778	}
 779
 780	count = (count > acm->writesize) ? acm->writesize : count;
 781	dev_vdbg(&acm->data->dev, "writing %d bytes\n", count);
 782	memcpy(wb->buf, buf, count);
 783	wb->len = count;
 784
 785	stat = usb_autopm_get_interface_async(acm->control);
 786	if (stat) {
 787		wb->use = 0;
 788		spin_unlock_irqrestore(&acm->write_lock, flags);
 789		return stat;
 790	}
 791
 792	if (acm->susp_count) {
 793		usb_anchor_urb(wb->urb, &acm->delayed);
 794		spin_unlock_irqrestore(&acm->write_lock, flags);
 795		return count;
 796	}
 797
 798	stat = acm_start_wb(acm, wb);
 799	spin_unlock_irqrestore(&acm->write_lock, flags);
 800
 
 801	if (stat < 0)
 802		return stat;
 803	return count;
 804}
 805
 806static int acm_tty_write_room(struct tty_struct *tty)
 807{
 808	struct acm *acm = tty->driver_data;
 809	/*
 810	 * Do not let the line discipline to know that we have a reserve,
 811	 * or it might get too enthusiastic.
 812	 */
 813	return acm_wb_is_avail(acm) ? acm->writesize : 0;
 814}
 815
 816static int acm_tty_chars_in_buffer(struct tty_struct *tty)
 817{
 818	struct acm *acm = tty->driver_data;
 819	/*
 820	 * if the device was unplugged then any remaining characters fell out
 821	 * of the connector ;)
 822	 */
 823	if (acm->disconnected)
 824		return 0;
 825	/*
 826	 * This is inaccurate (overcounts), but it works.
 827	 */
 828	return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
 829}
 830
 831static void acm_tty_throttle(struct tty_struct *tty)
 832{
 833	struct acm *acm = tty->driver_data;
 834
 835	set_bit(ACM_THROTTLED, &acm->flags);
 
 
 836}
 837
 838static void acm_tty_unthrottle(struct tty_struct *tty)
 839{
 840	struct acm *acm = tty->driver_data;
 
 841
 842	clear_bit(ACM_THROTTLED, &acm->flags);
 843
 844	/* Matches the smp_mb__after_atomic() in acm_read_bulk_callback(). */
 845	smp_mb();
 
 846
 847	acm_submit_read_urbs(acm, GFP_KERNEL);
 
 848}
 849
 850static int acm_tty_break_ctl(struct tty_struct *tty, int state)
 851{
 852	struct acm *acm = tty->driver_data;
 853	int retval;
 854
 855	retval = acm_send_break(acm, state ? 0xffff : 0);
 856	if (retval < 0)
 857		dev_dbg(&acm->control->dev,
 858			"%s - send break failed\n", __func__);
 859	return retval;
 860}
 861
 862static int acm_tty_tiocmget(struct tty_struct *tty)
 863{
 864	struct acm *acm = tty->driver_data;
 865
 866	return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
 867	       (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
 868	       (acm->ctrlin  & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
 869	       (acm->ctrlin  & ACM_CTRL_RI  ? TIOCM_RI  : 0) |
 870	       (acm->ctrlin  & ACM_CTRL_DCD ? TIOCM_CD  : 0) |
 871	       TIOCM_CTS;
 872}
 873
 874static int acm_tty_tiocmset(struct tty_struct *tty,
 875			    unsigned int set, unsigned int clear)
 876{
 877	struct acm *acm = tty->driver_data;
 878	unsigned int newctrl;
 879
 880	newctrl = acm->ctrlout;
 881	set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
 882					(set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
 883	clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
 884					(clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
 885
 886	newctrl = (newctrl & ~clear) | set;
 887
 888	if (acm->ctrlout == newctrl)
 889		return 0;
 890	return acm_set_control(acm, acm->ctrlout = newctrl);
 891}
 892
 893static int get_serial_info(struct tty_struct *tty, struct serial_struct *ss)
 894{
 895	struct acm *acm = tty->driver_data;
 896
 897	ss->xmit_fifo_size = acm->writesize;
 898	ss->baud_base = le32_to_cpu(acm->line.dwDTERate);
 899	ss->close_delay	= acm->port.close_delay / 10;
 900	ss->closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
 901				ASYNC_CLOSING_WAIT_NONE :
 902				acm->port.closing_wait / 10;
 903	return 0;
 904}
 905
 906static int set_serial_info(struct tty_struct *tty, struct serial_struct *ss)
 907{
 908	struct acm *acm = tty->driver_data;
 909	unsigned int closing_wait, close_delay;
 910	int retval = 0;
 911
 912	close_delay = ss->close_delay * 10;
 913	closing_wait = ss->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
 914			ASYNC_CLOSING_WAIT_NONE : ss->closing_wait * 10;
 915
 916	mutex_lock(&acm->port.mutex);
 917
 918	if (!capable(CAP_SYS_ADMIN)) {
 919		if ((close_delay != acm->port.close_delay) ||
 920		    (closing_wait != acm->port.closing_wait))
 921			retval = -EPERM;
 922		else
 923			retval = -EOPNOTSUPP;
 924	} else {
 925		acm->port.close_delay  = close_delay;
 926		acm->port.closing_wait = closing_wait;
 927	}
 928
 929	mutex_unlock(&acm->port.mutex);
 930	return retval;
 931}
 932
 933static int wait_serial_change(struct acm *acm, unsigned long arg)
 934{
 935	int rv = 0;
 936	DECLARE_WAITQUEUE(wait, current);
 937	struct async_icount old, new;
 938
 939	do {
 940		spin_lock_irq(&acm->read_lock);
 941		old = acm->oldcount;
 942		new = acm->iocount;
 943		acm->oldcount = new;
 944		spin_unlock_irq(&acm->read_lock);
 945
 946		if ((arg & TIOCM_DSR) &&
 947			old.dsr != new.dsr)
 948			break;
 949		if ((arg & TIOCM_CD)  &&
 950			old.dcd != new.dcd)
 951			break;
 952		if ((arg & TIOCM_RI) &&
 953			old.rng != new.rng)
 954			break;
 955
 956		add_wait_queue(&acm->wioctl, &wait);
 957		set_current_state(TASK_INTERRUPTIBLE);
 958		schedule();
 959		remove_wait_queue(&acm->wioctl, &wait);
 960		if (acm->disconnected) {
 961			if (arg & TIOCM_CD)
 962				break;
 963			else
 964				rv = -ENODEV;
 965		} else {
 966			if (signal_pending(current))
 967				rv = -ERESTARTSYS;
 968		}
 969	} while (!rv);
 970
 971	
 972
 973	return rv;
 974}
 975
 976static int acm_tty_get_icount(struct tty_struct *tty,
 977					struct serial_icounter_struct *icount)
 978{
 979	struct acm *acm = tty->driver_data;
 980
 981	icount->dsr = acm->iocount.dsr;
 982	icount->rng = acm->iocount.rng;
 983	icount->dcd = acm->iocount.dcd;
 984	icount->frame = acm->iocount.frame;
 985	icount->overrun = acm->iocount.overrun;
 986	icount->parity = acm->iocount.parity;
 987	icount->brk = acm->iocount.brk;
 988
 989	return 0;
 
 
 
 990}
 991
 992static int acm_tty_ioctl(struct tty_struct *tty,
 993					unsigned int cmd, unsigned long arg)
 994{
 995	struct acm *acm = tty->driver_data;
 996	int rv = -ENOIOCTLCMD;
 997
 998	switch (cmd) {
 999	case TIOCMIWAIT:
1000		rv = usb_autopm_get_interface(acm->control);
1001		if (rv < 0) {
1002			rv = -EIO;
1003			break;
1004		}
1005		rv = wait_serial_change(acm, arg);
1006		usb_autopm_put_interface(acm->control);
1007		break;
1008	}
1009
1010	return rv;
1011}
1012
 
 
 
 
 
 
 
 
 
 
 
 
1013static void acm_tty_set_termios(struct tty_struct *tty,
1014						struct ktermios *termios_old)
1015{
1016	struct acm *acm = tty->driver_data;
1017	struct ktermios *termios = &tty->termios;
1018	struct usb_cdc_line_coding newline;
1019	int newctrl = acm->ctrlout;
1020
1021	newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
1022	newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
1023	newline.bParityType = termios->c_cflag & PARENB ?
1024				(termios->c_cflag & PARODD ? 1 : 2) +
1025				(termios->c_cflag & CMSPAR ? 2 : 0) : 0;
1026	switch (termios->c_cflag & CSIZE) {
1027	case CS5:
1028		newline.bDataBits = 5;
1029		break;
1030	case CS6:
1031		newline.bDataBits = 6;
1032		break;
1033	case CS7:
1034		newline.bDataBits = 7;
1035		break;
1036	case CS8:
1037	default:
1038		newline.bDataBits = 8;
1039		break;
1040	}
1041	/* FIXME: Needs to clear unsupported bits in the termios */
1042	acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
1043
1044	if (C_BAUD(tty) == B0) {
1045		newline.dwDTERate = acm->line.dwDTERate;
1046		newctrl &= ~ACM_CTRL_DTR;
1047	} else if (termios_old && (termios_old->c_cflag & CBAUD) == B0) {
1048		newctrl |=  ACM_CTRL_DTR;
1049	}
1050
1051	if (newctrl != acm->ctrlout)
1052		acm_set_control(acm, acm->ctrlout = newctrl);
1053
1054	if (memcmp(&acm->line, &newline, sizeof newline)) {
1055		memcpy(&acm->line, &newline, sizeof newline);
1056		dev_dbg(&acm->control->dev, "%s - set line: %d %d %d %d\n",
1057			__func__,
1058			le32_to_cpu(newline.dwDTERate),
1059			newline.bCharFormat, newline.bParityType,
1060			newline.bDataBits);
1061		acm_set_line(acm, &acm->line);
1062	}
1063}
1064
1065static const struct tty_port_operations acm_port_ops = {
1066	.dtr_rts = acm_port_dtr_rts,
1067	.shutdown = acm_port_shutdown,
1068	.activate = acm_port_activate,
1069	.destruct = acm_port_destruct,
1070};
1071
1072/*
1073 * USB probe and disconnect routines.
1074 */
1075
1076/* Little helpers: write/read buffers free */
1077static void acm_write_buffers_free(struct acm *acm)
1078{
1079	int i;
1080	struct acm_wb *wb;
 
1081
1082	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
1083		usb_free_coherent(acm->dev, acm->writesize, wb->buf, wb->dmah);
1084}
1085
1086static void acm_read_buffers_free(struct acm *acm)
1087{
 
1088	int i;
1089
1090	for (i = 0; i < acm->rx_buflimit; i++)
1091		usb_free_coherent(acm->dev, acm->readsize,
1092			  acm->read_buffers[i].base, acm->read_buffers[i].dma);
1093}
1094
1095/* Little helper: write buffers allocate */
1096static int acm_write_buffers_alloc(struct acm *acm)
1097{
1098	int i;
1099	struct acm_wb *wb;
1100
1101	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
1102		wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
1103		    &wb->dmah);
1104		if (!wb->buf) {
1105			while (i != 0) {
1106				--i;
1107				--wb;
1108				usb_free_coherent(acm->dev, acm->writesize,
1109				    wb->buf, wb->dmah);
1110			}
1111			return -ENOMEM;
1112		}
1113	}
1114	return 0;
1115}
1116
1117static int acm_probe(struct usb_interface *intf,
1118		     const struct usb_device_id *id)
1119{
1120	struct usb_cdc_union_desc *union_header = NULL;
1121	struct usb_cdc_call_mgmt_descriptor *cmgmd = NULL;
1122	unsigned char *buffer = intf->altsetting->extra;
1123	int buflen = intf->altsetting->extralen;
1124	struct usb_interface *control_interface;
1125	struct usb_interface *data_interface;
1126	struct usb_endpoint_descriptor *epctrl = NULL;
1127	struct usb_endpoint_descriptor *epread = NULL;
1128	struct usb_endpoint_descriptor *epwrite = NULL;
1129	struct usb_device *usb_dev = interface_to_usbdev(intf);
1130	struct usb_cdc_parsed_header h;
1131	struct acm *acm;
1132	int minor;
1133	int ctrlsize, readsize;
1134	u8 *buf;
1135	int call_intf_num = -1;
1136	int data_intf_num = -1;
 
 
1137	unsigned long quirks;
1138	int num_rx_buf;
1139	int i;
1140	int combined_interfaces = 0;
1141	struct device *tty_dev;
1142	int rv = -ENOMEM;
1143	int res;
1144
1145	/* normal quirks */
1146	quirks = (unsigned long)id->driver_info;
1147
1148	if (quirks == IGNORE_DEVICE)
1149		return -ENODEV;
1150
1151	memset(&h, 0x00, sizeof(struct usb_cdc_parsed_header));
1152
1153	num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
1154
1155	/* handle quirks deadly to normal probing*/
1156	if (quirks == NO_UNION_NORMAL) {
1157		data_interface = usb_ifnum_to_if(usb_dev, 1);
1158		control_interface = usb_ifnum_to_if(usb_dev, 0);
1159		/* we would crash */
1160		if (!data_interface || !control_interface)
1161			return -ENODEV;
1162		goto skip_normal_probe;
1163	}
1164
1165	/* normal probing*/
1166	if (!buffer) {
1167		dev_err(&intf->dev, "Weird descriptor references\n");
1168		return -EINVAL;
1169	}
1170
1171	if (!intf->cur_altsetting)
1172		return -EINVAL;
1173
1174	if (!buflen) {
1175		if (intf->cur_altsetting->endpoint &&
1176				intf->cur_altsetting->endpoint->extralen &&
1177				intf->cur_altsetting->endpoint->extra) {
1178			dev_dbg(&intf->dev,
1179				"Seeking extra descriptors on endpoint\n");
1180			buflen = intf->cur_altsetting->endpoint->extralen;
1181			buffer = intf->cur_altsetting->endpoint->extra;
1182		} else {
1183			dev_err(&intf->dev,
1184				"Zero length descriptor references\n");
1185			return -EINVAL;
1186		}
1187	}
1188
1189	cdc_parse_cdc_header(&h, intf, buffer, buflen);
1190	union_header = h.usb_cdc_union_desc;
1191	cmgmd = h.usb_cdc_call_mgmt_descriptor;
1192	if (cmgmd)
1193		call_intf_num = cmgmd->bDataInterface;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1194
1195	if (!union_header) {
1196		if (call_intf_num > 0) {
1197			dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1198			/* quirks for Droids MuIn LCD */
1199			if (quirks & NO_DATA_INTERFACE) {
1200				data_interface = usb_ifnum_to_if(usb_dev, 0);
1201			} else {
1202				data_intf_num = call_intf_num;
1203				data_interface = usb_ifnum_to_if(usb_dev, data_intf_num);
1204			}
1205			control_interface = intf;
1206		} else {
1207			if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
1208				dev_dbg(&intf->dev,"No union descriptor, giving up\n");
1209				return -ENODEV;
1210			} else {
1211				dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
1212				combined_interfaces = 1;
1213				control_interface = data_interface = intf;
1214				goto look_for_collapsed_interface;
1215			}
1216		}
1217	} else {
1218		data_intf_num = union_header->bSlaveInterface0;
1219		control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1220		data_interface = usb_ifnum_to_if(usb_dev, data_intf_num);
1221	}
1222
1223	if (!control_interface || !data_interface) {
1224		dev_dbg(&intf->dev, "no interfaces\n");
1225		return -ENODEV;
1226	}
1227	if (!data_interface->cur_altsetting || !control_interface->cur_altsetting)
1228		return -ENODEV;
1229
1230	if (data_intf_num != call_intf_num)
1231		dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1232
1233	if (control_interface == data_interface) {
1234		/* some broken devices designed for windows work this way */
1235		dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1236		combined_interfaces = 1;
1237		/* a popular other OS doesn't use it */
1238		quirks |= NO_CAP_LINE;
1239		if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1240			dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1241			return -EINVAL;
1242		}
1243look_for_collapsed_interface:
1244		res = usb_find_common_endpoints(data_interface->cur_altsetting,
1245				&epread, &epwrite, &epctrl, NULL);
1246		if (res)
1247			return res;
1248
1249		goto made_compressed_probe;
 
 
 
 
 
 
 
 
 
 
 
1250	}
1251
1252skip_normal_probe:
1253
1254	/*workaround for switched interfaces */
1255	if (data_interface->cur_altsetting->desc.bInterfaceClass
1256						!= CDC_DATA_INTERFACE_TYPE) {
1257		if (control_interface->cur_altsetting->desc.bInterfaceClass
1258						== CDC_DATA_INTERFACE_TYPE) {
 
1259			dev_dbg(&intf->dev,
1260				"Your device has switched interfaces.\n");
1261			swap(control_interface, data_interface);
 
 
1262		} else {
1263			return -EINVAL;
1264		}
1265	}
1266
1267	/* Accept probe requests only for the control interface */
1268	if (!combined_interfaces && intf != control_interface)
1269		return -ENODEV;
1270
1271	if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1272		/* valid in this context */
1273		dev_dbg(&intf->dev, "The data interface isn't available\n");
1274		return -EBUSY;
1275	}
1276
1277
1278	if (data_interface->cur_altsetting->desc.bNumEndpoints < 2 ||
1279	    control_interface->cur_altsetting->desc.bNumEndpoints == 0)
1280		return -EINVAL;
1281
1282	epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1283	epread = &data_interface->cur_altsetting->endpoint[0].desc;
1284	epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1285
1286
1287	/* workaround for switched endpoints */
1288	if (!usb_endpoint_dir_in(epread)) {
1289		/* descriptors are swapped */
 
1290		dev_dbg(&intf->dev,
1291			"The data interface has switched endpoints\n");
1292		swap(epread, epwrite);
 
 
1293	}
1294made_compressed_probe:
1295	dev_dbg(&intf->dev, "interfaces are valid\n");
1296
1297	acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1298	if (acm == NULL)
 
1299		goto alloc_fail;
 
1300
1301	tty_port_init(&acm->port);
1302	acm->port.ops = &acm_port_ops;
 
 
 
 
1303
1304	ctrlsize = usb_endpoint_maxp(epctrl);
1305	readsize = usb_endpoint_maxp(epread) *
1306				(quirks == SINGLE_RX_URB ? 1 : 2);
1307	acm->combined_interfaces = combined_interfaces;
1308	acm->writesize = usb_endpoint_maxp(epwrite) * 20;
1309	acm->control = control_interface;
1310	acm->data = data_interface;
1311
1312	usb_get_intf(acm->control); /* undone in destruct() */
1313
1314	minor = acm_alloc_minor(acm);
1315	if (minor < 0)
1316		goto alloc_fail1;
1317
1318	acm->minor = minor;
1319	acm->dev = usb_dev;
1320	if (h.usb_cdc_acm_descriptor)
1321		acm->ctrl_caps = h.usb_cdc_acm_descriptor->bmCapabilities;
1322	if (quirks & NO_CAP_LINE)
1323		acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1324	acm->ctrlsize = ctrlsize;
1325	acm->readsize = readsize;
1326	acm->rx_buflimit = num_rx_buf;
1327	INIT_WORK(&acm->work, acm_softint);
1328	init_waitqueue_head(&acm->wioctl);
1329	spin_lock_init(&acm->write_lock);
1330	spin_lock_init(&acm->read_lock);
1331	mutex_init(&acm->mutex);
1332	if (usb_endpoint_xfer_int(epread)) {
 
 
1333		acm->bInterval = epread->bInterval;
1334		acm->in = usb_rcvintpipe(usb_dev, epread->bEndpointAddress);
1335	} else {
1336		acm->in = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1337	}
1338	if (usb_endpoint_xfer_int(epwrite))
1339		acm->out = usb_sndintpipe(usb_dev, epwrite->bEndpointAddress);
1340	else
1341		acm->out = usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress);
1342	init_usb_anchor(&acm->delayed);
1343	acm->quirks = quirks;
1344
1345	buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1346	if (!buf)
1347		goto alloc_fail1;
 
 
1348	acm->ctrl_buffer = buf;
1349
1350	if (acm_write_buffers_alloc(acm) < 0)
1351		goto alloc_fail2;
 
 
1352
1353	acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1354	if (!acm->ctrlurb)
1355		goto alloc_fail3;
1356
 
1357	for (i = 0; i < num_rx_buf; i++) {
1358		struct acm_rb *rb = &(acm->read_buffers[i]);
1359		struct urb *urb;
1360
1361		rb->base = usb_alloc_coherent(acm->dev, readsize, GFP_KERNEL,
1362								&rb->dma);
1363		if (!rb->base)
1364			goto alloc_fail4;
 
 
 
1365		rb->index = i;
1366		rb->instance = acm;
1367
1368		urb = usb_alloc_urb(0, GFP_KERNEL);
1369		if (!urb)
1370			goto alloc_fail4;
1371
 
 
1372		urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1373		urb->transfer_dma = rb->dma;
1374		if (usb_endpoint_xfer_int(epread))
1375			usb_fill_int_urb(urb, acm->dev, acm->in, rb->base,
 
 
1376					 acm->readsize,
1377					 acm_read_bulk_callback, rb,
1378					 acm->bInterval);
1379		else
1380			usb_fill_bulk_urb(urb, acm->dev, acm->in, rb->base,
 
 
1381					  acm->readsize,
1382					  acm_read_bulk_callback, rb);
 
1383
1384		acm->read_urbs[i] = urb;
1385		__set_bit(i, &acm->read_urbs_free);
1386	}
1387	for (i = 0; i < ACM_NW; i++) {
1388		struct acm_wb *snd = &(acm->wb[i]);
1389
1390		snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1391		if (snd->urb == NULL)
1392			goto alloc_fail5;
 
 
 
1393
1394		if (usb_endpoint_xfer_int(epwrite))
1395			usb_fill_int_urb(snd->urb, usb_dev, acm->out,
 
1396				NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1397		else
1398			usb_fill_bulk_urb(snd->urb, usb_dev, acm->out,
 
1399				NULL, acm->writesize, acm_write_bulk, snd);
1400		snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1401		if (quirks & SEND_ZERO_PACKET)
1402			snd->urb->transfer_flags |= URB_ZERO_PACKET;
1403		snd->instance = acm;
1404	}
1405
1406	usb_set_intfdata(intf, acm);
1407
1408	i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1409	if (i < 0)
1410		goto alloc_fail5;
1411
1412	if (h.usb_cdc_country_functional_desc) { /* export the country data */
1413		struct usb_cdc_country_functional_desc * cfd =
1414					h.usb_cdc_country_functional_desc;
1415
 
1416		acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1417		if (!acm->country_codes)
1418			goto skip_countries;
1419		acm->country_code_size = cfd->bLength - 4;
1420		memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1421							cfd->bLength - 4);
1422		acm->country_rel_date = cfd->iCountryCodeRelDate;
1423
1424		i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1425		if (i < 0) {
1426			kfree(acm->country_codes);
1427			acm->country_codes = NULL;
1428			acm->country_code_size = 0;
1429			goto skip_countries;
1430		}
1431
1432		i = device_create_file(&intf->dev,
1433						&dev_attr_iCountryCodeRelDate);
1434		if (i < 0) {
1435			device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1436			kfree(acm->country_codes);
1437			acm->country_codes = NULL;
1438			acm->country_code_size = 0;
1439			goto skip_countries;
1440		}
1441	}
1442
1443skip_countries:
1444	usb_fill_int_urb(acm->ctrlurb, usb_dev,
1445			 usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1446			 acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1447			 /* works around buggy devices */
1448			 epctrl->bInterval ? epctrl->bInterval : 16);
1449	acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1450	acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1451	acm->notification_buffer = NULL;
1452	acm->nb_index = 0;
1453	acm->nb_size = 0;
1454
1455	dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1456
 
 
1457	acm->line.dwDTERate = cpu_to_le32(9600);
1458	acm->line.bDataBits = 8;
1459	acm_set_line(acm, &acm->line);
1460
1461	usb_driver_claim_interface(&acm_driver, data_interface, acm);
1462	usb_set_intfdata(data_interface, acm);
1463
1464	tty_dev = tty_port_register_device(&acm->port, acm_tty_driver, minor,
1465			&control_interface->dev);
1466	if (IS_ERR(tty_dev)) {
1467		rv = PTR_ERR(tty_dev);
1468		goto alloc_fail6;
1469	}
1470
1471	if (quirks & CLEAR_HALT_CONDITIONS) {
1472		usb_clear_halt(usb_dev, acm->in);
1473		usb_clear_halt(usb_dev, acm->out);
1474	}
1475
1476	return 0;
1477alloc_fail6:
1478	if (acm->country_codes) {
1479		device_remove_file(&acm->control->dev,
1480				&dev_attr_wCountryCodes);
1481		device_remove_file(&acm->control->dev,
1482				&dev_attr_iCountryCodeRelDate);
1483		kfree(acm->country_codes);
1484	}
1485	device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1486alloc_fail5:
1487	usb_set_intfdata(intf, NULL);
1488	for (i = 0; i < ACM_NW; i++)
1489		usb_free_urb(acm->wb[i].urb);
1490alloc_fail4:
1491	for (i = 0; i < num_rx_buf; i++)
1492		usb_free_urb(acm->read_urbs[i]);
1493	acm_read_buffers_free(acm);
1494	usb_free_urb(acm->ctrlurb);
1495alloc_fail3:
1496	acm_write_buffers_free(acm);
1497alloc_fail2:
1498	usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1499alloc_fail1:
1500	tty_port_put(&acm->port);
 
1501alloc_fail:
1502	return rv;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1503}
1504
1505static void acm_disconnect(struct usb_interface *intf)
1506{
1507	struct acm *acm = usb_get_intfdata(intf);
 
1508	struct tty_struct *tty;
1509	int i;
1510
 
 
1511	/* sibling interface is already cleaning up */
1512	if (!acm)
1513		return;
1514
1515	mutex_lock(&acm->mutex);
1516	acm->disconnected = true;
1517	if (acm->country_codes) {
1518		device_remove_file(&acm->control->dev,
1519				&dev_attr_wCountryCodes);
1520		device_remove_file(&acm->control->dev,
1521				&dev_attr_iCountryCodeRelDate);
1522	}
1523	wake_up_all(&acm->wioctl);
1524	device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1525	usb_set_intfdata(acm->control, NULL);
1526	usb_set_intfdata(acm->data, NULL);
1527	mutex_unlock(&acm->mutex);
1528
1529	tty = tty_port_tty_get(&acm->port);
1530	if (tty) {
1531		tty_vhangup(tty);
1532		tty_kref_put(tty);
1533	}
1534
1535	acm_kill_urbs(acm);
1536	cancel_work_sync(&acm->work);
1537
1538	tty_unregister_device(acm_tty_driver, acm->minor);
1539
1540	usb_free_urb(acm->ctrlurb);
1541	for (i = 0; i < ACM_NW; i++)
1542		usb_free_urb(acm->wb[i].urb);
1543	for (i = 0; i < acm->rx_buflimit; i++)
1544		usb_free_urb(acm->read_urbs[i]);
1545	acm_write_buffers_free(acm);
1546	usb_free_coherent(acm->dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1547	acm_read_buffers_free(acm);
1548
1549	kfree(acm->notification_buffer);
1550
1551	if (!acm->combined_interfaces)
1552		usb_driver_release_interface(&acm_driver, intf == acm->control ?
1553					acm->data : acm->control);
1554
1555	tty_port_put(&acm->port);
1556}
1557
1558#ifdef CONFIG_PM
1559static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1560{
1561	struct acm *acm = usb_get_intfdata(intf);
1562	int cnt;
1563
1564	spin_lock_irq(&acm->write_lock);
1565	if (PMSG_IS_AUTO(message)) {
1566		if (acm->transmitting) {
1567			spin_unlock_irq(&acm->write_lock);
 
 
 
 
1568			return -EBUSY;
1569		}
1570	}
 
 
 
1571	cnt = acm->susp_count++;
1572	spin_unlock_irq(&acm->write_lock);
 
1573
1574	if (cnt)
1575		return 0;
1576
1577	acm_kill_urbs(acm);
1578	cancel_work_sync(&acm->work);
1579
1580	return 0;
1581}
1582
1583static int acm_resume(struct usb_interface *intf)
1584{
1585	struct acm *acm = usb_get_intfdata(intf);
1586	struct urb *urb;
1587	int rv = 0;
 
1588
1589	spin_lock_irq(&acm->write_lock);
1590
1591	if (--acm->susp_count)
1592		goto out;
1593
1594	if (tty_port_initialized(&acm->port)) {
1595		rv = usb_submit_urb(acm->ctrlurb, GFP_ATOMIC);
1596
1597		for (;;) {
1598			urb = usb_get_from_anchor(&acm->delayed);
1599			if (!urb)
1600				break;
1601
1602			acm_start_wb(acm, urb->context);
 
 
 
 
 
 
 
1603		}
1604
1605		/*
1606		 * delayed error checking because we must
1607		 * do the write path at all cost
1608		 */
1609		if (rv < 0)
1610			goto out;
1611
1612		rv = acm_submit_read_urbs(acm, GFP_ATOMIC);
1613	}
1614out:
1615	spin_unlock_irq(&acm->write_lock);
1616
 
1617	return rv;
1618}
1619
1620static int acm_reset_resume(struct usb_interface *intf)
1621{
1622	struct acm *acm = usb_get_intfdata(intf);
 
1623
1624	if (tty_port_initialized(&acm->port))
1625		tty_port_tty_hangup(&acm->port, false);
 
 
 
 
 
1626
1627	return acm_resume(intf);
1628}
1629
1630#endif /* CONFIG_PM */
1631
1632static int acm_pre_reset(struct usb_interface *intf)
1633{
1634	struct acm *acm = usb_get_intfdata(intf);
1635
1636	clear_bit(EVENT_RX_STALL, &acm->flags);
1637	acm->nb_index = 0; /* pending control transfers are lost */
1638
1639	return 0;
1640}
1641
1642#define NOKIA_PCSUITE_ACM_INFO(x) \
1643		USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1644		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1645		USB_CDC_ACM_PROTO_VENDOR)
1646
1647#define SAMSUNG_PCSUITE_ACM_INFO(x) \
1648		USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1649		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1650		USB_CDC_ACM_PROTO_VENDOR)
1651
1652/*
1653 * USB driver structure.
1654 */
1655
1656static const struct usb_device_id acm_ids[] = {
1657	/* quirky and broken devices */
1658	{ USB_DEVICE(0x076d, 0x0006), /* Denso Cradle CU-321 */
1659	.driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
1660	{ USB_DEVICE(0x17ef, 0x7000), /* Lenovo USB modem */
1661	.driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
1662	{ USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1663	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1664	},
1665	{ USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1666	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1667	},
1668	{ USB_DEVICE(0x0e8d, 0x2000), /* MediaTek Inc Preloader */
1669	.driver_info = DISABLE_ECHO, /* DISABLE ECHO in termios flag */
1670	},
1671	{ USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1672	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1673	},
1674	{ USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1675	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1676	},
1677	{ USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1678	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1679	},
1680	{ USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1681	.driver_info = SINGLE_RX_URB,
1682	},
1683	{ USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1684	.driver_info = SINGLE_RX_URB, /* firmware bug */
1685	},
1686	{ USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1687	.driver_info = SINGLE_RX_URB, /* firmware bug */
1688	},
1689	{ USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */
1690	.driver_info = SINGLE_RX_URB,
1691	},
1692	{ USB_DEVICE(0x1965, 0x0018), /* Uniden UBC125XLT */
1693	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1694	},
1695	{ USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1696	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1697	},
1698	{ USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1699	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1700	},
1701	{ USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1702	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1703	},
1704	{ USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1705	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1706	},
1707	{ USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1708	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1709	},
1710	{ USB_DEVICE(0x0572, 0x1349), /* Hiro (Conexant) USB MODEM H50228 */
1711	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1712	},
1713	{ USB_DEVICE(0x20df, 0x0001), /* Simtec Electronics Entropy Key */
1714	.driver_info = QUIRK_CONTROL_LINE_STATE, },
1715	{ USB_DEVICE(0x2184, 0x001c) },	/* GW Instek AFG-2225 */
1716	{ USB_DEVICE(0x2184, 0x0036) },	/* GW Instek AFG-125 */
1717	{ USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1718	},
1719	/* Motorola H24 HSPA module: */
1720	{ USB_DEVICE(0x22b8, 0x2d91) }, /* modem                                */
1721	{ USB_DEVICE(0x22b8, 0x2d92),   /* modem           + diagnostics        */
1722	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1723	},
1724	{ USB_DEVICE(0x22b8, 0x2d93),   /* modem + AT port                      */
1725	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1726	},
1727	{ USB_DEVICE(0x22b8, 0x2d95),   /* modem + AT port + diagnostics        */
1728	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1729	},
1730	{ USB_DEVICE(0x22b8, 0x2d96),   /* modem                         + NMEA */
1731	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1732	},
1733	{ USB_DEVICE(0x22b8, 0x2d97),   /* modem           + diagnostics + NMEA */
1734	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1735	},
1736	{ USB_DEVICE(0x22b8, 0x2d99),   /* modem + AT port               + NMEA */
1737	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1738	},
1739	{ USB_DEVICE(0x22b8, 0x2d9a),   /* modem + AT port + diagnostics + NMEA */
1740	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1741	},
1742
1743	{ USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1744	.driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1745					   data interface instead of
1746					   communications interface.
1747					   Maybe we should define a new
1748					   quirk for this. */
1749	},
1750	{ USB_DEVICE(0x0572, 0x1340), /* Conexant CX93010-2x UCMxx */
1751	.driver_info = NO_UNION_NORMAL,
1752	},
1753	{ USB_DEVICE(0x05f9, 0x4002), /* PSC Scanning, Magellan 800i */
1754	.driver_info = NO_UNION_NORMAL,
1755	},
1756	{ USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1757	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1758	},
1759	{ USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1760	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1761	},
1762	{ USB_DEVICE(0xfff0, 0x0100), /* DATECS FP-2000 */
1763	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1764	},
1765	{ USB_DEVICE(0x09d8, 0x0320), /* Elatec GmbH TWN3 */
1766	.driver_info = NO_UNION_NORMAL, /* has misplaced union descriptor */
1767	},
1768	{ USB_DEVICE(0x0ca6, 0xa050), /* Castles VEGA3000 */
1769	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1770	},
1771
1772	{ USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */
1773	.driver_info = CLEAR_HALT_CONDITIONS,
1774	},
1775
1776	/* Nokia S60 phones expose two ACM channels. The first is
1777	 * a modem and is picked up by the standard AT-command
1778	 * information below. The second is 'vendor-specific' but
1779	 * is treated as a serial device at the S60 end, so we want
1780	 * to expose it on Linux too. */
1781	{ NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1782	{ NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1783	{ NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1784	{ NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1785	{ NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1786	{ NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1787	{ NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1788	{ NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1789	{ NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1790	{ NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1791	{ NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1792	{ NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1793	{ NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1794	{ NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1795	{ NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1796	{ NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1797	{ NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1798	{ NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i  */
1799	{ NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1800	{ NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1801	{ NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1802	{ NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic &  */
1803	{ NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1804	{ NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1805	{ NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1806	{ NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1807	{ NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1808	{ NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1809	{ NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1810	{ NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1811	{ NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1812	{ NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB  */
1813	{ NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1814	{ NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1815	{ NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1816	{ NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1817	{ NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1818	{ NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1819	{ NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1820	{ NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3  */
1821	{ NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1822	{ NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1823	{ NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1824	{ NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1825	{ NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1826	{ NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1827	{ NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1828	{ NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1829	{ NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1830	{ NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1831	{ NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1832	{ NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1833	{ NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1834	{ NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1835	{ NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1836	{ NOKIA_PCSUITE_ACM_INFO(0x0335), }, /* Nokia E7 */
1837	{ NOKIA_PCSUITE_ACM_INFO(0x03cd), }, /* Nokia C7 */
1838	{ SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1839
1840	/* Support for Owen devices */
1841	{ USB_DEVICE(0x03eb, 0x0030), }, /* Owen SI30 */
1842
1843	/* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1844
 
 
 
 
 
1845	/* Support for Droids MuIn LCD */
1846	{ USB_DEVICE(0x04d8, 0x000b),
1847	.driver_info = NO_DATA_INTERFACE,
1848	},
1849
1850#if IS_ENABLED(CONFIG_INPUT_IMS_PCU)
1851	{ USB_DEVICE(0x04d8, 0x0082),	/* Application mode */
1852	.driver_info = IGNORE_DEVICE,
1853	},
1854	{ USB_DEVICE(0x04d8, 0x0083),	/* Bootloader mode */
1855	.driver_info = IGNORE_DEVICE,
1856	},
1857#endif
1858
1859	/*Samsung phone in firmware update mode */
1860	{ USB_DEVICE(0x04e8, 0x685d),
1861	.driver_info = IGNORE_DEVICE,
1862	},
1863
1864	/* Exclude Infineon Flash Loader utility */
1865	{ USB_DEVICE(0x058b, 0x0041),
1866	.driver_info = IGNORE_DEVICE,
1867	},
1868
1869	{ USB_DEVICE(0x1bc7, 0x0021), /* Telit 3G ACM only composition */
1870	.driver_info = SEND_ZERO_PACKET,
1871	},
1872	{ USB_DEVICE(0x1bc7, 0x0023), /* Telit 3G ACM + ECM composition */
1873	.driver_info = SEND_ZERO_PACKET,
1874	},
1875
1876	/* control interfaces without any protocol set */
1877	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1878		USB_CDC_PROTO_NONE) },
1879
1880	/* control interfaces with various AT-command sets */
1881	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1882		USB_CDC_ACM_PROTO_AT_V25TER) },
1883	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1884		USB_CDC_ACM_PROTO_AT_PCCA101) },
1885	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1886		USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1887	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1888		USB_CDC_ACM_PROTO_AT_GSM) },
1889	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1890		USB_CDC_ACM_PROTO_AT_3G) },
1891	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1892		USB_CDC_ACM_PROTO_AT_CDMA) },
1893
1894	{ USB_DEVICE(0x1519, 0x0452), /* Intel 7260 modem */
1895	.driver_info = SEND_ZERO_PACKET,
1896	},
1897
1898	{ }
1899};
1900
1901MODULE_DEVICE_TABLE(usb, acm_ids);
1902
1903static struct usb_driver acm_driver = {
1904	.name =		"cdc_acm",
1905	.probe =	acm_probe,
1906	.disconnect =	acm_disconnect,
1907#ifdef CONFIG_PM
1908	.suspend =	acm_suspend,
1909	.resume =	acm_resume,
1910	.reset_resume =	acm_reset_resume,
1911#endif
1912	.pre_reset =	acm_pre_reset,
1913	.id_table =	acm_ids,
1914#ifdef CONFIG_PM
1915	.supports_autosuspend = 1,
1916#endif
1917	.disable_hub_initiated_lpm = 1,
1918};
1919
1920/*
1921 * TTY driver structures.
1922 */
1923
1924static const struct tty_operations acm_ops = {
1925	.install =		acm_tty_install,
1926	.open =			acm_tty_open,
1927	.close =		acm_tty_close,
1928	.cleanup =		acm_tty_cleanup,
1929	.hangup =		acm_tty_hangup,
1930	.write =		acm_tty_write,
1931	.write_room =		acm_tty_write_room,
1932	.ioctl =		acm_tty_ioctl,
1933	.throttle =		acm_tty_throttle,
1934	.unthrottle =		acm_tty_unthrottle,
1935	.chars_in_buffer =	acm_tty_chars_in_buffer,
1936	.break_ctl =		acm_tty_break_ctl,
1937	.set_termios =		acm_tty_set_termios,
1938	.tiocmget =		acm_tty_tiocmget,
1939	.tiocmset =		acm_tty_tiocmset,
1940	.get_serial =		get_serial_info,
1941	.set_serial =		set_serial_info,
1942	.get_icount =		acm_tty_get_icount,
1943};
1944
1945/*
1946 * Init / exit.
1947 */
1948
1949static int __init acm_init(void)
1950{
1951	int retval;
1952	acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1953	if (!acm_tty_driver)
1954		return -ENOMEM;
1955	acm_tty_driver->driver_name = "acm",
1956	acm_tty_driver->name = "ttyACM",
1957	acm_tty_driver->major = ACM_TTY_MAJOR,
1958	acm_tty_driver->minor_start = 0,
1959	acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1960	acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1961	acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1962	acm_tty_driver->init_termios = tty_std_termios;
1963	acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
1964								HUPCL | CLOCAL;
1965	tty_set_operations(acm_tty_driver, &acm_ops);
1966
1967	retval = tty_register_driver(acm_tty_driver);
1968	if (retval) {
1969		put_tty_driver(acm_tty_driver);
1970		return retval;
1971	}
1972
1973	retval = usb_register(&acm_driver);
1974	if (retval) {
1975		tty_unregister_driver(acm_tty_driver);
1976		put_tty_driver(acm_tty_driver);
1977		return retval;
1978	}
1979
1980	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1981
1982	return 0;
1983}
1984
1985static void __exit acm_exit(void)
1986{
1987	usb_deregister(&acm_driver);
1988	tty_unregister_driver(acm_tty_driver);
1989	put_tty_driver(acm_tty_driver);
1990	idr_destroy(&acm_minors);
1991}
1992
1993module_init(acm_init);
1994module_exit(acm_exit);
1995
1996MODULE_AUTHOR(DRIVER_AUTHOR);
1997MODULE_DESCRIPTION(DRIVER_DESC);
1998MODULE_LICENSE("GPL");
1999MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);
v3.5.6
 
   1/*
   2 * cdc-acm.c
   3 *
   4 * Copyright (c) 1999 Armin Fuerst	<fuerst@in.tum.de>
   5 * Copyright (c) 1999 Pavel Machek	<pavel@ucw.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 * Copyright (c) 2011 Johan Hovold	<jhovold@gmail.com>
  11 *
  12 * USB Abstract Control Model driver for USB modems and ISDN adapters
  13 *
  14 * Sponsored by SuSE
  15 *
  16 * This program is free software; you can redistribute it and/or modify
  17 * it under the terms of the GNU General Public License as published by
  18 * the Free Software Foundation; either version 2 of the License, or
  19 * (at your option) any later version.
  20 *
  21 * This program is distributed in the hope that it will be useful,
  22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  24 * GNU General Public License for more details.
  25 *
  26 * You should have received a copy of the GNU General Public License
  27 * along with this program; if not, write to the Free Software
  28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  29 */
  30
  31#undef DEBUG
  32#undef VERBOSE_DEBUG
  33
  34#include <linux/kernel.h>
 
  35#include <linux/errno.h>
  36#include <linux/init.h>
  37#include <linux/slab.h>
 
  38#include <linux/tty.h>
  39#include <linux/serial.h>
  40#include <linux/tty_driver.h>
  41#include <linux/tty_flip.h>
  42#include <linux/serial.h>
  43#include <linux/module.h>
  44#include <linux/mutex.h>
  45#include <linux/uaccess.h>
  46#include <linux/usb.h>
  47#include <linux/usb/cdc.h>
  48#include <asm/byteorder.h>
  49#include <asm/unaligned.h>
 
  50#include <linux/list.h>
  51
  52#include "cdc-acm.h"
  53
  54
  55#define DRIVER_AUTHOR "Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik, David Kubicek, Johan Hovold"
  56#define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters"
  57
  58static struct usb_driver acm_driver;
  59static struct tty_driver *acm_tty_driver;
  60static struct acm *acm_table[ACM_TTY_MINORS];
  61
  62static DEFINE_MUTEX(acm_table_lock);
 
 
 
 
  63
  64/*
  65 * acm_table accessors
  66 */
  67
  68/*
  69 * Look up an ACM structure by index. If found and not disconnected, increment
  70 * its refcount and return it with its mutex held.
  71 */
  72static struct acm *acm_get_by_index(unsigned index)
  73{
  74	struct acm *acm;
  75
  76	mutex_lock(&acm_table_lock);
  77	acm = acm_table[index];
  78	if (acm) {
  79		mutex_lock(&acm->mutex);
  80		if (acm->disconnected) {
  81			mutex_unlock(&acm->mutex);
  82			acm = NULL;
  83		} else {
  84			tty_port_get(&acm->port);
  85			mutex_unlock(&acm->mutex);
  86		}
  87	}
  88	mutex_unlock(&acm_table_lock);
  89	return acm;
  90}
  91
  92/*
  93 * Try to find an available minor number and if found, associate it with 'acm'.
  94 */
  95static int acm_alloc_minor(struct acm *acm)
  96{
  97	int minor;
  98
  99	mutex_lock(&acm_table_lock);
 100	for (minor = 0; minor < ACM_TTY_MINORS; minor++) {
 101		if (!acm_table[minor]) {
 102			acm_table[minor] = acm;
 103			break;
 104		}
 105	}
 106	mutex_unlock(&acm_table_lock);
 107
 108	return minor;
 109}
 110
 111/* Release the minor number associated with 'acm'.  */
 112static void acm_release_minor(struct acm *acm)
 113{
 114	mutex_lock(&acm_table_lock);
 115	acm_table[acm->minor] = NULL;
 116	mutex_unlock(&acm_table_lock);
 117}
 118
 119/*
 120 * Functions for ACM control messages.
 121 */
 122
 123static int acm_ctrl_msg(struct acm *acm, int request, int value,
 124							void *buf, int len)
 125{
 126	int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
 
 
 
 
 
 
 127		request, USB_RT_ACM, value,
 128		acm->control->altsetting[0].desc.bInterfaceNumber,
 129		buf, len, 5000);
 
 130	dev_dbg(&acm->control->dev,
 131			"%s - rq 0x%02x, val %#x, len %#x, result %d\n",
 132			__func__, request, value, len, retval);
 
 
 
 133	return retval < 0 ? retval : 0;
 134}
 135
 136/* devices aren't required to support these requests.
 137 * the cdc acm descriptor tells whether they do...
 138 */
 139#define acm_set_control(acm, control) \
 140	acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
 
 
 
 
 
 
 
 141#define acm_set_line(acm, line) \
 142	acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
 143#define acm_send_break(acm, ms) \
 144	acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
 145
 
 
 
 
 
 
 
 
 
 
 
 146/*
 147 * Write buffer management.
 148 * All of these assume proper locks taken by the caller.
 149 */
 150
 151static int acm_wb_alloc(struct acm *acm)
 152{
 153	int i, wbn;
 154	struct acm_wb *wb;
 155
 156	wbn = 0;
 157	i = 0;
 158	for (;;) {
 159		wb = &acm->wb[wbn];
 160		if (!wb->use) {
 161			wb->use = 1;
 
 162			return wbn;
 163		}
 164		wbn = (wbn + 1) % ACM_NW;
 165		if (++i >= ACM_NW)
 166			return -1;
 167	}
 168}
 169
 170static int acm_wb_is_avail(struct acm *acm)
 171{
 172	int i, n;
 173	unsigned long flags;
 174
 175	n = ACM_NW;
 176	spin_lock_irqsave(&acm->write_lock, flags);
 177	for (i = 0; i < ACM_NW; i++)
 178		n -= acm->wb[i].use;
 179	spin_unlock_irqrestore(&acm->write_lock, flags);
 180	return n;
 181}
 182
 183/*
 184 * Finish write. Caller must hold acm->write_lock
 185 */
 186static void acm_write_done(struct acm *acm, struct acm_wb *wb)
 187{
 188	wb->use = 0;
 189	acm->transmitting--;
 190	usb_autopm_put_interface_async(acm->control);
 191}
 192
 193/*
 194 * Poke write.
 195 *
 196 * the caller is responsible for locking
 197 */
 198
 199static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
 200{
 201	int rc;
 202
 203	acm->transmitting++;
 204
 205	wb->urb->transfer_buffer = wb->buf;
 206	wb->urb->transfer_dma = wb->dmah;
 207	wb->urb->transfer_buffer_length = wb->len;
 208	wb->urb->dev = acm->dev;
 209
 210	rc = usb_submit_urb(wb->urb, GFP_ATOMIC);
 211	if (rc < 0) {
 212		dev_err(&acm->data->dev,
 213			"%s - usb_submit_urb(write bulk) failed: %d\n",
 214			__func__, rc);
 215		acm_write_done(acm, wb);
 216	}
 217	return rc;
 218}
 219
 220static int acm_write_start(struct acm *acm, int wbn)
 221{
 222	unsigned long flags;
 223	struct acm_wb *wb = &acm->wb[wbn];
 224	int rc;
 225
 226	spin_lock_irqsave(&acm->write_lock, flags);
 227	if (!acm->dev) {
 228		wb->use = 0;
 229		spin_unlock_irqrestore(&acm->write_lock, flags);
 230		return -ENODEV;
 231	}
 232
 233	dev_vdbg(&acm->data->dev, "%s - susp_count %d\n", __func__,
 234							acm->susp_count);
 235	usb_autopm_get_interface_async(acm->control);
 236	if (acm->susp_count) {
 237		if (!acm->delayed_wb)
 238			acm->delayed_wb = wb;
 239		else
 240			usb_autopm_put_interface_async(acm->control);
 241		spin_unlock_irqrestore(&acm->write_lock, flags);
 242		return 0;	/* A white lie */
 243	}
 244	usb_mark_last_busy(acm->dev);
 245
 246	rc = acm_start_wb(acm, wb);
 247	spin_unlock_irqrestore(&acm->write_lock, flags);
 248
 249	return rc;
 250
 251}
 252/*
 253 * attributes exported through sysfs
 254 */
 255static ssize_t show_caps
 256(struct device *dev, struct device_attribute *attr, char *buf)
 257{
 258	struct usb_interface *intf = to_usb_interface(dev);
 259	struct acm *acm = usb_get_intfdata(intf);
 260
 261	return sprintf(buf, "%d", acm->ctrl_caps);
 262}
 263static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
 264
 265static ssize_t show_country_codes
 266(struct device *dev, struct device_attribute *attr, char *buf)
 267{
 268	struct usb_interface *intf = to_usb_interface(dev);
 269	struct acm *acm = usb_get_intfdata(intf);
 270
 271	memcpy(buf, acm->country_codes, acm->country_code_size);
 272	return acm->country_code_size;
 273}
 274
 275static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
 276
 277static ssize_t show_country_rel_date
 278(struct device *dev, struct device_attribute *attr, char *buf)
 279{
 280	struct usb_interface *intf = to_usb_interface(dev);
 281	struct acm *acm = usb_get_intfdata(intf);
 282
 283	return sprintf(buf, "%d", acm->country_rel_date);
 284}
 285
 286static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
 287/*
 288 * Interrupt handlers for various ACM device responses
 289 */
 290
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 291/* control interface reports status changes with "interrupt" transfers */
 292static void acm_ctrl_irq(struct urb *urb)
 293{
 294	struct acm *acm = urb->context;
 295	struct usb_cdc_notification *dr = urb->transfer_buffer;
 296	struct tty_struct *tty;
 297	unsigned char *data;
 298	int newctrl;
 299	int retval;
 300	int status = urb->status;
 301
 302	switch (status) {
 303	case 0:
 304		/* success */
 305		break;
 306	case -ECONNRESET:
 307	case -ENOENT:
 308	case -ESHUTDOWN:
 309		/* this urb is terminated, clean up */
 310		dev_dbg(&acm->control->dev,
 311				"%s - urb shutting down with status: %d\n",
 312				__func__, status);
 313		return;
 314	default:
 315		dev_dbg(&acm->control->dev,
 316				"%s - nonzero urb status received: %d\n",
 317				__func__, status);
 318		goto exit;
 319	}
 320
 321	usb_mark_last_busy(acm->dev);
 322
 323	data = (unsigned char *)(dr + 1);
 324	switch (dr->bNotificationType) {
 325	case USB_CDC_NOTIFY_NETWORK_CONNECTION:
 326		dev_dbg(&acm->control->dev, "%s - network connection: %d\n",
 327							__func__, dr->wValue);
 328		break;
 329
 330	case USB_CDC_NOTIFY_SERIAL_STATE:
 331		tty = tty_port_tty_get(&acm->port);
 332		newctrl = get_unaligned_le16(data);
 333
 334		if (tty) {
 335			if (!acm->clocal &&
 336				(acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
 337				dev_dbg(&acm->control->dev,
 338					"%s - calling hangup\n", __func__);
 339				tty_hangup(tty);
 
 
 
 
 340			}
 341			tty_kref_put(tty);
 342		}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 343
 344		acm->ctrlin = newctrl;
 345
 346		dev_dbg(&acm->control->dev,
 347			"%s - input control lines: dcd%c dsr%c break%c "
 348			"ring%c framing%c parity%c overrun%c\n",
 349			__func__,
 350			acm->ctrlin & ACM_CTRL_DCD ? '+' : '-',
 351			acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',
 352			acm->ctrlin & ACM_CTRL_BRK ? '+' : '-',
 353			acm->ctrlin & ACM_CTRL_RI  ? '+' : '-',
 354			acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-',
 355			acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',
 356			acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');
 357			break;
 358
 359	default:
 360		dev_dbg(&acm->control->dev,
 361			"%s - unknown notification %d received: index %d "
 362			"len %d data0 %d data1 %d\n",
 363			__func__,
 364			dr->bNotificationType, dr->wIndex,
 365			dr->wLength, data[0], data[1]);
 366		break;
 367	}
 368exit:
 369	retval = usb_submit_urb(urb, GFP_ATOMIC);
 370	if (retval)
 371		dev_err(&acm->control->dev, "%s - usb_submit_urb failed: %d\n",
 372							__func__, retval);
 373}
 374
 375static int acm_submit_read_urb(struct acm *acm, int index, gfp_t mem_flags)
 376{
 377	int res;
 378
 379	if (!test_and_clear_bit(index, &acm->read_urbs_free))
 380		return 0;
 381
 382	dev_vdbg(&acm->data->dev, "%s - urb %d\n", __func__, index);
 383
 384	res = usb_submit_urb(acm->read_urbs[index], mem_flags);
 385	if (res) {
 386		if (res != -EPERM) {
 387			dev_err(&acm->data->dev,
 388					"%s - usb_submit_urb failed: %d\n",
 389					__func__, res);
 390		}
 391		set_bit(index, &acm->read_urbs_free);
 392		return res;
 
 
 393	}
 394
 395	return 0;
 396}
 397
 398static int acm_submit_read_urbs(struct acm *acm, gfp_t mem_flags)
 399{
 400	int res;
 401	int i;
 402
 403	for (i = 0; i < acm->rx_buflimit; ++i) {
 404		res = acm_submit_read_urb(acm, i, mem_flags);
 405		if (res)
 406			return res;
 407	}
 408
 409	return 0;
 410}
 411
 412static void acm_process_read_urb(struct acm *acm, struct urb *urb)
 413{
 414	struct tty_struct *tty;
 415
 416	if (!urb->actual_length)
 417		return;
 418
 419	tty = tty_port_tty_get(&acm->port);
 420	if (!tty)
 421		return;
 422
 423	tty_insert_flip_string(tty, urb->transfer_buffer, urb->actual_length);
 424	tty_flip_buffer_push(tty);
 425
 426	tty_kref_put(tty);
 427}
 428
 429static void acm_read_bulk_callback(struct urb *urb)
 430{
 431	struct acm_rb *rb = urb->context;
 432	struct acm *acm = rb->instance;
 433	unsigned long flags;
 
 
 434
 435	dev_vdbg(&acm->data->dev, "%s - urb %d, len %d\n", __func__,
 436					rb->index, urb->actual_length);
 437	set_bit(rb->index, &acm->read_urbs_free);
 438
 439	if (!acm->dev) {
 440		dev_dbg(&acm->data->dev, "%s - disconnected\n", __func__);
 441		return;
 442	}
 443	usb_mark_last_busy(acm->dev);
 444
 445	if (urb->status) {
 446		dev_dbg(&acm->data->dev, "%s - non-zero urb status: %d\n",
 447							__func__, urb->status);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 448		return;
 449	}
 450	acm_process_read_urb(acm, urb);
 451
 452	/* throttle device if requested by tty */
 453	spin_lock_irqsave(&acm->read_lock, flags);
 454	acm->throttled = acm->throttle_req;
 455	if (!acm->throttled && !acm->susp_count) {
 456		spin_unlock_irqrestore(&acm->read_lock, flags);
 457		acm_submit_read_urb(acm, rb->index, GFP_ATOMIC);
 458	} else {
 459		spin_unlock_irqrestore(&acm->read_lock, flags);
 460	}
 461}
 462
 463/* data interface wrote those outgoing bytes */
 464static void acm_write_bulk(struct urb *urb)
 465{
 466	struct acm_wb *wb = urb->context;
 467	struct acm *acm = wb->instance;
 468	unsigned long flags;
 
 469
 470	if (urb->status	|| (urb->actual_length != urb->transfer_buffer_length))
 471		dev_vdbg(&acm->data->dev, "%s - len %d/%d, status %d\n",
 472			__func__,
 473			urb->actual_length,
 474			urb->transfer_buffer_length,
 475			urb->status);
 476
 477	spin_lock_irqsave(&acm->write_lock, flags);
 478	acm_write_done(acm, wb);
 479	spin_unlock_irqrestore(&acm->write_lock, flags);
 
 480	schedule_work(&acm->work);
 481}
 482
 483static void acm_softint(struct work_struct *work)
 484{
 
 485	struct acm *acm = container_of(work, struct acm, work);
 486	struct tty_struct *tty;
 487
 488	dev_vdbg(&acm->data->dev, "%s\n", __func__);
 
 
 
 
 
 
 
 
 
 489
 490	tty = tty_port_tty_get(&acm->port);
 491	if (!tty)
 492		return;
 493	tty_wakeup(tty);
 494	tty_kref_put(tty);
 495}
 496
 497/*
 498 * TTY handlers
 499 */
 500
 501static int acm_tty_install(struct tty_driver *driver, struct tty_struct *tty)
 502{
 503	struct acm *acm;
 504	int retval;
 505
 506	dev_dbg(tty->dev, "%s\n", __func__);
 507
 508	acm = acm_get_by_index(tty->index);
 509	if (!acm)
 510		return -ENODEV;
 511
 512	retval = tty_standard_install(driver, tty);
 513	if (retval)
 514		goto error_init_termios;
 515
 
 
 
 
 
 
 
 516	tty->driver_data = acm;
 517
 518	return 0;
 519
 520error_init_termios:
 521	tty_port_put(&acm->port);
 522	return retval;
 523}
 524
 525static int acm_tty_open(struct tty_struct *tty, struct file *filp)
 526{
 527	struct acm *acm = tty->driver_data;
 528
 529	dev_dbg(tty->dev, "%s\n", __func__);
 
 
 
 
 
 
 
 530
 531	return tty_port_open(&acm->port, tty, filp);
 
 
 
 
 
 
 
 
 
 
 532}
 533
 534static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
 535{
 536	struct acm *acm = container_of(port, struct acm, port);
 537	int retval = -ENODEV;
 538
 539	dev_dbg(&acm->control->dev, "%s\n", __func__);
 540
 541	mutex_lock(&acm->mutex);
 542	if (acm->disconnected)
 543		goto disconnected;
 544
 545	retval = usb_autopm_get_interface(acm->control);
 546	if (retval)
 547		goto error_get_interface;
 548
 549	/*
 550	 * FIXME: Why do we need this? Allocating 64K of physically contiguous
 551	 * memory is really nasty...
 552	 */
 553	set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
 554	acm->control->needs_remote_wakeup = 1;
 555
 556	acm->ctrlurb->dev = acm->dev;
 557	if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
 
 558		dev_err(&acm->control->dev,
 559			"%s - usb_submit_urb(ctrl irq) failed\n", __func__);
 560		goto error_submit_urb;
 561	}
 562
 563	acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS;
 564	if (acm_set_control(acm, acm->ctrlout) < 0 &&
 565	    (acm->ctrl_caps & USB_CDC_CAP_LINE))
 566		goto error_set_control;
 567
 568	usb_autopm_put_interface(acm->control);
 569
 570	/*
 571	 * Unthrottle device in case the TTY was closed while throttled.
 572	 */
 573	spin_lock_irq(&acm->read_lock);
 574	acm->throttled = 0;
 575	acm->throttle_req = 0;
 576	spin_unlock_irq(&acm->read_lock);
 577
 578	if (acm_submit_read_urbs(acm, GFP_KERNEL))
 
 579		goto error_submit_read_urbs;
 580
 
 
 581	mutex_unlock(&acm->mutex);
 582
 583	return 0;
 584
 585error_submit_read_urbs:
 586	acm->ctrlout = 0;
 587	acm_set_control(acm, acm->ctrlout);
 588error_set_control:
 589	usb_kill_urb(acm->ctrlurb);
 590error_submit_urb:
 591	usb_autopm_put_interface(acm->control);
 592error_get_interface:
 593disconnected:
 594	mutex_unlock(&acm->mutex);
 595	return retval;
 
 596}
 597
 598static void acm_port_destruct(struct tty_port *port)
 599{
 600	struct acm *acm = container_of(port, struct acm, port);
 601
 602	dev_dbg(&acm->control->dev, "%s\n", __func__);
 603
 604	tty_unregister_device(acm_tty_driver, acm->minor);
 605	acm_release_minor(acm);
 606	usb_put_intf(acm->control);
 607	kfree(acm->country_codes);
 608	kfree(acm);
 609}
 610
 611static void acm_port_shutdown(struct tty_port *port)
 612{
 613	struct acm *acm = container_of(port, struct acm, port);
 614	int i;
 
 
 
 
 
 
 
 
 615
 616	dev_dbg(&acm->control->dev, "%s\n", __func__);
 
 
 617
 618	mutex_lock(&acm->mutex);
 619	if (!acm->disconnected) {
 620		usb_autopm_get_interface(acm->control);
 621		acm_set_control(acm, acm->ctrlout = 0);
 622		usb_kill_urb(acm->ctrlurb);
 623		for (i = 0; i < ACM_NW; i++)
 624			usb_kill_urb(acm->wb[i].urb);
 625		for (i = 0; i < acm->rx_buflimit; i++)
 626			usb_kill_urb(acm->read_urbs[i]);
 627		acm->control->needs_remote_wakeup = 0;
 628		usb_autopm_put_interface(acm->control);
 629	}
 630	mutex_unlock(&acm->mutex);
 
 631}
 632
 633static void acm_tty_cleanup(struct tty_struct *tty)
 634{
 635	struct acm *acm = tty->driver_data;
 636	dev_dbg(&acm->control->dev, "%s\n", __func__);
 637	tty_port_put(&acm->port);
 638}
 639
 640static void acm_tty_hangup(struct tty_struct *tty)
 641{
 642	struct acm *acm = tty->driver_data;
 643	dev_dbg(&acm->control->dev, "%s\n", __func__);
 644	tty_port_hangup(&acm->port);
 645}
 646
 647static void acm_tty_close(struct tty_struct *tty, struct file *filp)
 648{
 649	struct acm *acm = tty->driver_data;
 650	dev_dbg(&acm->control->dev, "%s\n", __func__);
 651	tty_port_close(&acm->port, tty, filp);
 652}
 653
 654static int acm_tty_write(struct tty_struct *tty,
 655					const unsigned char *buf, int count)
 656{
 657	struct acm *acm = tty->driver_data;
 658	int stat;
 659	unsigned long flags;
 660	int wbn;
 661	struct acm_wb *wb;
 662
 663	if (!count)
 664		return 0;
 665
 666	dev_vdbg(&acm->data->dev, "%s - count %d\n", __func__, count);
 667
 668	spin_lock_irqsave(&acm->write_lock, flags);
 669	wbn = acm_wb_alloc(acm);
 670	if (wbn < 0) {
 671		spin_unlock_irqrestore(&acm->write_lock, flags);
 672		return 0;
 673	}
 674	wb = &acm->wb[wbn];
 675
 
 
 
 
 
 
 676	count = (count > acm->writesize) ? acm->writesize : count;
 677	dev_vdbg(&acm->data->dev, "%s - write %d\n", __func__, count);
 678	memcpy(wb->buf, buf, count);
 679	wb->len = count;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 680	spin_unlock_irqrestore(&acm->write_lock, flags);
 681
 682	stat = acm_write_start(acm, wbn);
 683	if (stat < 0)
 684		return stat;
 685	return count;
 686}
 687
 688static int acm_tty_write_room(struct tty_struct *tty)
 689{
 690	struct acm *acm = tty->driver_data;
 691	/*
 692	 * Do not let the line discipline to know that we have a reserve,
 693	 * or it might get too enthusiastic.
 694	 */
 695	return acm_wb_is_avail(acm) ? acm->writesize : 0;
 696}
 697
 698static int acm_tty_chars_in_buffer(struct tty_struct *tty)
 699{
 700	struct acm *acm = tty->driver_data;
 701	/*
 702	 * if the device was unplugged then any remaining characters fell out
 703	 * of the connector ;)
 704	 */
 705	if (acm->disconnected)
 706		return 0;
 707	/*
 708	 * This is inaccurate (overcounts), but it works.
 709	 */
 710	return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
 711}
 712
 713static void acm_tty_throttle(struct tty_struct *tty)
 714{
 715	struct acm *acm = tty->driver_data;
 716
 717	spin_lock_irq(&acm->read_lock);
 718	acm->throttle_req = 1;
 719	spin_unlock_irq(&acm->read_lock);
 720}
 721
 722static void acm_tty_unthrottle(struct tty_struct *tty)
 723{
 724	struct acm *acm = tty->driver_data;
 725	unsigned int was_throttled;
 726
 727	spin_lock_irq(&acm->read_lock);
 728	was_throttled = acm->throttled;
 729	acm->throttled = 0;
 730	acm->throttle_req = 0;
 731	spin_unlock_irq(&acm->read_lock);
 732
 733	if (was_throttled)
 734		acm_submit_read_urbs(acm, GFP_KERNEL);
 735}
 736
 737static int acm_tty_break_ctl(struct tty_struct *tty, int state)
 738{
 739	struct acm *acm = tty->driver_data;
 740	int retval;
 741
 742	retval = acm_send_break(acm, state ? 0xffff : 0);
 743	if (retval < 0)
 744		dev_dbg(&acm->control->dev, "%s - send break failed\n",
 745								__func__);
 746	return retval;
 747}
 748
 749static int acm_tty_tiocmget(struct tty_struct *tty)
 750{
 751	struct acm *acm = tty->driver_data;
 752
 753	return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
 754	       (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
 755	       (acm->ctrlin  & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
 756	       (acm->ctrlin  & ACM_CTRL_RI  ? TIOCM_RI  : 0) |
 757	       (acm->ctrlin  & ACM_CTRL_DCD ? TIOCM_CD  : 0) |
 758	       TIOCM_CTS;
 759}
 760
 761static int acm_tty_tiocmset(struct tty_struct *tty,
 762			    unsigned int set, unsigned int clear)
 763{
 764	struct acm *acm = tty->driver_data;
 765	unsigned int newctrl;
 766
 767	newctrl = acm->ctrlout;
 768	set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
 769					(set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
 770	clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
 771					(clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
 772
 773	newctrl = (newctrl & ~clear) | set;
 774
 775	if (acm->ctrlout == newctrl)
 776		return 0;
 777	return acm_set_control(acm, acm->ctrlout = newctrl);
 778}
 779
 780static int get_serial_info(struct acm *acm, struct serial_struct __user *info)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 781{
 782	struct serial_struct tmp;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 783
 784	if (!info)
 785		return -EINVAL;
 
 
 786
 787	memset(&tmp, 0, sizeof(tmp));
 788	tmp.flags = ASYNC_LOW_LATENCY;
 789	tmp.xmit_fifo_size = acm->writesize;
 790	tmp.baud_base = le32_to_cpu(acm->line.dwDTERate);
 
 
 
 791
 792	if (copy_to_user(info, &tmp, sizeof(tmp)))
 793		return -EFAULT;
 794	else
 795		return 0;
 796}
 797
 798static int acm_tty_ioctl(struct tty_struct *tty,
 799					unsigned int cmd, unsigned long arg)
 800{
 801	struct acm *acm = tty->driver_data;
 802	int rv = -ENOIOCTLCMD;
 803
 804	switch (cmd) {
 805	case TIOCGSERIAL: /* gets serial port data */
 806		rv = get_serial_info(acm, (struct serial_struct __user *) arg);
 
 
 
 
 
 
 807		break;
 808	}
 809
 810	return rv;
 811}
 812
 813static const __u32 acm_tty_speed[] = {
 814	0, 50, 75, 110, 134, 150, 200, 300, 600,
 815	1200, 1800, 2400, 4800, 9600, 19200, 38400,
 816	57600, 115200, 230400, 460800, 500000, 576000,
 817	921600, 1000000, 1152000, 1500000, 2000000,
 818	2500000, 3000000, 3500000, 4000000
 819};
 820
 821static const __u8 acm_tty_size[] = {
 822	5, 6, 7, 8
 823};
 824
 825static void acm_tty_set_termios(struct tty_struct *tty,
 826						struct ktermios *termios_old)
 827{
 828	struct acm *acm = tty->driver_data;
 829	struct ktermios *termios = tty->termios;
 830	struct usb_cdc_line_coding newline;
 831	int newctrl = acm->ctrlout;
 832
 833	newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
 834	newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
 835	newline.bParityType = termios->c_cflag & PARENB ?
 836				(termios->c_cflag & PARODD ? 1 : 2) +
 837				(termios->c_cflag & CMSPAR ? 2 : 0) : 0;
 838	newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 839	/* FIXME: Needs to clear unsupported bits in the termios */
 840	acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
 841
 842	if (!newline.dwDTERate) {
 843		newline.dwDTERate = acm->line.dwDTERate;
 844		newctrl &= ~ACM_CTRL_DTR;
 845	} else
 846		newctrl |=  ACM_CTRL_DTR;
 
 847
 848	if (newctrl != acm->ctrlout)
 849		acm_set_control(acm, acm->ctrlout = newctrl);
 850
 851	if (memcmp(&acm->line, &newline, sizeof newline)) {
 852		memcpy(&acm->line, &newline, sizeof newline);
 853		dev_dbg(&acm->control->dev, "%s - set line: %d %d %d %d\n",
 854			__func__,
 855			le32_to_cpu(newline.dwDTERate),
 856			newline.bCharFormat, newline.bParityType,
 857			newline.bDataBits);
 858		acm_set_line(acm, &acm->line);
 859	}
 860}
 861
 862static const struct tty_port_operations acm_port_ops = {
 
 863	.shutdown = acm_port_shutdown,
 864	.activate = acm_port_activate,
 865	.destruct = acm_port_destruct,
 866};
 867
 868/*
 869 * USB probe and disconnect routines.
 870 */
 871
 872/* Little helpers: write/read buffers free */
 873static void acm_write_buffers_free(struct acm *acm)
 874{
 875	int i;
 876	struct acm_wb *wb;
 877	struct usb_device *usb_dev = interface_to_usbdev(acm->control);
 878
 879	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
 880		usb_free_coherent(usb_dev, acm->writesize, wb->buf, wb->dmah);
 881}
 882
 883static void acm_read_buffers_free(struct acm *acm)
 884{
 885	struct usb_device *usb_dev = interface_to_usbdev(acm->control);
 886	int i;
 887
 888	for (i = 0; i < acm->rx_buflimit; i++)
 889		usb_free_coherent(usb_dev, acm->readsize,
 890			  acm->read_buffers[i].base, acm->read_buffers[i].dma);
 891}
 892
 893/* Little helper: write buffers allocate */
 894static int acm_write_buffers_alloc(struct acm *acm)
 895{
 896	int i;
 897	struct acm_wb *wb;
 898
 899	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
 900		wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
 901		    &wb->dmah);
 902		if (!wb->buf) {
 903			while (i != 0) {
 904				--i;
 905				--wb;
 906				usb_free_coherent(acm->dev, acm->writesize,
 907				    wb->buf, wb->dmah);
 908			}
 909			return -ENOMEM;
 910		}
 911	}
 912	return 0;
 913}
 914
 915static int acm_probe(struct usb_interface *intf,
 916		     const struct usb_device_id *id)
 917{
 918	struct usb_cdc_union_desc *union_header = NULL;
 919	struct usb_cdc_country_functional_desc *cfd = NULL;
 920	unsigned char *buffer = intf->altsetting->extra;
 921	int buflen = intf->altsetting->extralen;
 922	struct usb_interface *control_interface;
 923	struct usb_interface *data_interface;
 924	struct usb_endpoint_descriptor *epctrl = NULL;
 925	struct usb_endpoint_descriptor *epread = NULL;
 926	struct usb_endpoint_descriptor *epwrite = NULL;
 927	struct usb_device *usb_dev = interface_to_usbdev(intf);
 
 928	struct acm *acm;
 929	int minor;
 930	int ctrlsize, readsize;
 931	u8 *buf;
 932	u8 ac_management_function = 0;
 933	u8 call_management_function = 0;
 934	int call_interface_num = -1;
 935	int data_interface_num = -1;
 936	unsigned long quirks;
 937	int num_rx_buf;
 938	int i;
 939	int combined_interfaces = 0;
 
 
 
 940
 941	/* normal quirks */
 942	quirks = (unsigned long)id->driver_info;
 
 
 
 
 
 
 943	num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
 944
 945	/* handle quirks deadly to normal probing*/
 946	if (quirks == NO_UNION_NORMAL) {
 947		data_interface = usb_ifnum_to_if(usb_dev, 1);
 948		control_interface = usb_ifnum_to_if(usb_dev, 0);
 
 
 
 949		goto skip_normal_probe;
 950	}
 951
 952	/* normal probing*/
 953	if (!buffer) {
 954		dev_err(&intf->dev, "Weird descriptor references\n");
 955		return -EINVAL;
 956	}
 957
 
 
 
 958	if (!buflen) {
 959		if (intf->cur_altsetting->endpoint &&
 960				intf->cur_altsetting->endpoint->extralen &&
 961				intf->cur_altsetting->endpoint->extra) {
 962			dev_dbg(&intf->dev,
 963				"Seeking extra descriptors on endpoint\n");
 964			buflen = intf->cur_altsetting->endpoint->extralen;
 965			buffer = intf->cur_altsetting->endpoint->extra;
 966		} else {
 967			dev_err(&intf->dev,
 968				"Zero length descriptor references\n");
 969			return -EINVAL;
 970		}
 971	}
 972
 973	while (buflen > 0) {
 974		if (buffer[1] != USB_DT_CS_INTERFACE) {
 975			dev_err(&intf->dev, "skipping garbage\n");
 976			goto next_desc;
 977		}
 978
 979		switch (buffer[2]) {
 980		case USB_CDC_UNION_TYPE: /* we've found it */
 981			if (union_header) {
 982				dev_err(&intf->dev, "More than one "
 983					"union descriptor, skipping ...\n");
 984				goto next_desc;
 985			}
 986			union_header = (struct usb_cdc_union_desc *)buffer;
 987			break;
 988		case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
 989			cfd = (struct usb_cdc_country_functional_desc *)buffer;
 990			break;
 991		case USB_CDC_HEADER_TYPE: /* maybe check version */
 992			break; /* for now we ignore it */
 993		case USB_CDC_ACM_TYPE:
 994			ac_management_function = buffer[3];
 995			break;
 996		case USB_CDC_CALL_MANAGEMENT_TYPE:
 997			call_management_function = buffer[3];
 998			call_interface_num = buffer[4];
 999			if ( (quirks & NOT_A_MODEM) == 0 && (call_management_function & 3) != 3)
1000				dev_err(&intf->dev, "This device cannot do calls on its own. It is not a modem.\n");
1001			break;
1002		default:
1003			/* there are LOTS more CDC descriptors that
1004			 * could legitimately be found here.
1005			 */
1006			dev_dbg(&intf->dev, "Ignoring descriptor: "
1007					"type %02x, length %d\n",
1008					buffer[2], buffer[0]);
1009			break;
1010		}
1011next_desc:
1012		buflen -= buffer[0];
1013		buffer += buffer[0];
1014	}
1015
1016	if (!union_header) {
1017		if (call_interface_num > 0) {
1018			dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1019			/* quirks for Droids MuIn LCD */
1020			if (quirks & NO_DATA_INTERFACE)
1021				data_interface = usb_ifnum_to_if(usb_dev, 0);
1022			else
1023				data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
 
 
1024			control_interface = intf;
1025		} else {
1026			if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
1027				dev_dbg(&intf->dev,"No union descriptor, giving up\n");
1028				return -ENODEV;
1029			} else {
1030				dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
1031				combined_interfaces = 1;
1032				control_interface = data_interface = intf;
1033				goto look_for_collapsed_interface;
1034			}
1035		}
1036	} else {
 
1037		control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1038		data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
1039		if (!control_interface || !data_interface) {
1040			dev_dbg(&intf->dev, "no interfaces\n");
1041			return -ENODEV;
1042		}
 
1043	}
 
 
1044
1045	if (data_interface_num != call_interface_num)
1046		dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1047
1048	if (control_interface == data_interface) {
1049		/* some broken devices designed for windows work this way */
1050		dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1051		combined_interfaces = 1;
1052		/* a popular other OS doesn't use it */
1053		quirks |= NO_CAP_LINE;
1054		if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1055			dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1056			return -EINVAL;
1057		}
1058look_for_collapsed_interface:
1059		for (i = 0; i < 3; i++) {
1060			struct usb_endpoint_descriptor *ep;
1061			ep = &data_interface->cur_altsetting->endpoint[i].desc;
1062
1063			if (usb_endpoint_is_int_in(ep))
1064				epctrl = ep;
1065			else if (usb_endpoint_is_bulk_out(ep))
1066				epwrite = ep;
1067			else if (usb_endpoint_is_bulk_in(ep))
1068				epread = ep;
1069			else
1070				return -EINVAL;
1071		}
1072		if (!epctrl || !epread || !epwrite)
1073			return -ENODEV;
1074		else
1075			goto made_compressed_probe;
1076	}
1077
1078skip_normal_probe:
1079
1080	/*workaround for switched interfaces */
1081	if (data_interface->cur_altsetting->desc.bInterfaceClass
1082						!= CDC_DATA_INTERFACE_TYPE) {
1083		if (control_interface->cur_altsetting->desc.bInterfaceClass
1084						== CDC_DATA_INTERFACE_TYPE) {
1085			struct usb_interface *t;
1086			dev_dbg(&intf->dev,
1087				"Your device has switched interfaces.\n");
1088			t = control_interface;
1089			control_interface = data_interface;
1090			data_interface = t;
1091		} else {
1092			return -EINVAL;
1093		}
1094	}
1095
1096	/* Accept probe requests only for the control interface */
1097	if (!combined_interfaces && intf != control_interface)
1098		return -ENODEV;
1099
1100	if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1101		/* valid in this context */
1102		dev_dbg(&intf->dev, "The data interface isn't available\n");
1103		return -EBUSY;
1104	}
1105
1106
1107	if (data_interface->cur_altsetting->desc.bNumEndpoints < 2 ||
1108	    control_interface->cur_altsetting->desc.bNumEndpoints == 0)
1109		return -EINVAL;
1110
1111	epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1112	epread = &data_interface->cur_altsetting->endpoint[0].desc;
1113	epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1114
1115
1116	/* workaround for switched endpoints */
1117	if (!usb_endpoint_dir_in(epread)) {
1118		/* descriptors are swapped */
1119		struct usb_endpoint_descriptor *t;
1120		dev_dbg(&intf->dev,
1121			"The data interface has switched endpoints\n");
1122		t = epread;
1123		epread = epwrite;
1124		epwrite = t;
1125	}
1126made_compressed_probe:
1127	dev_dbg(&intf->dev, "interfaces are valid\n");
1128
1129	acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1130	if (acm == NULL) {
1131		dev_err(&intf->dev, "out of memory (acm kzalloc)\n");
1132		goto alloc_fail;
1133	}
1134
1135	minor = acm_alloc_minor(acm);
1136	if (minor == ACM_TTY_MINORS) {
1137		dev_err(&intf->dev, "no more free acm devices\n");
1138		kfree(acm);
1139		return -ENODEV;
1140	}
1141
1142	ctrlsize = usb_endpoint_maxp(epctrl);
1143	readsize = usb_endpoint_maxp(epread) *
1144				(quirks == SINGLE_RX_URB ? 1 : 2);
1145	acm->combined_interfaces = combined_interfaces;
1146	acm->writesize = usb_endpoint_maxp(epwrite) * 20;
1147	acm->control = control_interface;
1148	acm->data = data_interface;
 
 
 
 
 
 
 
1149	acm->minor = minor;
1150	acm->dev = usb_dev;
1151	acm->ctrl_caps = ac_management_function;
 
1152	if (quirks & NO_CAP_LINE)
1153		acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1154	acm->ctrlsize = ctrlsize;
1155	acm->readsize = readsize;
1156	acm->rx_buflimit = num_rx_buf;
1157	INIT_WORK(&acm->work, acm_softint);
 
1158	spin_lock_init(&acm->write_lock);
1159	spin_lock_init(&acm->read_lock);
1160	mutex_init(&acm->mutex);
1161	acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1162	acm->is_int_ep = usb_endpoint_xfer_int(epread);
1163	if (acm->is_int_ep)
1164		acm->bInterval = epread->bInterval;
1165	tty_port_init(&acm->port);
1166	acm->port.ops = &acm_port_ops;
 
 
 
 
 
 
 
 
1167
1168	buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1169	if (!buf) {
1170		dev_err(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1171		goto alloc_fail2;
1172	}
1173	acm->ctrl_buffer = buf;
1174
1175	if (acm_write_buffers_alloc(acm) < 0) {
1176		dev_err(&intf->dev, "out of memory (write buffer alloc)\n");
1177		goto alloc_fail4;
1178	}
1179
1180	acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1181	if (!acm->ctrlurb) {
1182		dev_err(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1183		goto alloc_fail5;
1184	}
1185	for (i = 0; i < num_rx_buf; i++) {
1186		struct acm_rb *rb = &(acm->read_buffers[i]);
1187		struct urb *urb;
1188
1189		rb->base = usb_alloc_coherent(acm->dev, readsize, GFP_KERNEL,
1190								&rb->dma);
1191		if (!rb->base) {
1192			dev_err(&intf->dev, "out of memory "
1193					"(read bufs usb_alloc_coherent)\n");
1194			goto alloc_fail6;
1195		}
1196		rb->index = i;
1197		rb->instance = acm;
1198
1199		urb = usb_alloc_urb(0, GFP_KERNEL);
1200		if (!urb) {
1201			dev_err(&intf->dev,
1202				"out of memory (read urbs usb_alloc_urb)\n");
1203			goto alloc_fail6;
1204		}
1205		urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1206		urb->transfer_dma = rb->dma;
1207		if (acm->is_int_ep) {
1208			usb_fill_int_urb(urb, acm->dev,
1209					 acm->rx_endpoint,
1210					 rb->base,
1211					 acm->readsize,
1212					 acm_read_bulk_callback, rb,
1213					 acm->bInterval);
1214		} else {
1215			usb_fill_bulk_urb(urb, acm->dev,
1216					  acm->rx_endpoint,
1217					  rb->base,
1218					  acm->readsize,
1219					  acm_read_bulk_callback, rb);
1220		}
1221
1222		acm->read_urbs[i] = urb;
1223		__set_bit(i, &acm->read_urbs_free);
1224	}
1225	for (i = 0; i < ACM_NW; i++) {
1226		struct acm_wb *snd = &(acm->wb[i]);
1227
1228		snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1229		if (snd->urb == NULL) {
1230			dev_err(&intf->dev,
1231				"out of memory (write urbs usb_alloc_urb)\n");
1232			goto alloc_fail7;
1233		}
1234
1235		if (usb_endpoint_xfer_int(epwrite))
1236			usb_fill_int_urb(snd->urb, usb_dev,
1237				usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1238				NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1239		else
1240			usb_fill_bulk_urb(snd->urb, usb_dev,
1241				usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1242				NULL, acm->writesize, acm_write_bulk, snd);
1243		snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 
 
1244		snd->instance = acm;
1245	}
1246
1247	usb_set_intfdata(intf, acm);
1248
1249	i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1250	if (i < 0)
1251		goto alloc_fail7;
 
 
 
 
1252
1253	if (cfd) { /* export the country data */
1254		acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1255		if (!acm->country_codes)
1256			goto skip_countries;
1257		acm->country_code_size = cfd->bLength - 4;
1258		memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1259							cfd->bLength - 4);
1260		acm->country_rel_date = cfd->iCountryCodeRelDate;
1261
1262		i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1263		if (i < 0) {
1264			kfree(acm->country_codes);
1265			acm->country_codes = NULL;
1266			acm->country_code_size = 0;
1267			goto skip_countries;
1268		}
1269
1270		i = device_create_file(&intf->dev,
1271						&dev_attr_iCountryCodeRelDate);
1272		if (i < 0) {
1273			device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1274			kfree(acm->country_codes);
1275			acm->country_codes = NULL;
1276			acm->country_code_size = 0;
1277			goto skip_countries;
1278		}
1279	}
1280
1281skip_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;
 
 
 
1289
1290	dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1291
1292	acm_set_control(acm, acm->ctrlout);
1293
1294	acm->line.dwDTERate = cpu_to_le32(9600);
1295	acm->line.bDataBits = 8;
1296	acm_set_line(acm, &acm->line);
1297
1298	usb_driver_claim_interface(&acm_driver, data_interface, acm);
1299	usb_set_intfdata(data_interface, acm);
1300
1301	usb_get_intf(control_interface);
1302	tty_register_device(acm_tty_driver, minor, &control_interface->dev);
 
 
 
 
 
 
 
 
 
1303
1304	return 0;
1305alloc_fail7:
 
 
 
 
 
 
 
 
 
 
1306	for (i = 0; i < ACM_NW; i++)
1307		usb_free_urb(acm->wb[i].urb);
1308alloc_fail6:
1309	for (i = 0; i < num_rx_buf; i++)
1310		usb_free_urb(acm->read_urbs[i]);
1311	acm_read_buffers_free(acm);
1312	usb_free_urb(acm->ctrlurb);
1313alloc_fail5:
1314	acm_write_buffers_free(acm);
1315alloc_fail4:
1316	usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1317alloc_fail2:
1318	acm_release_minor(acm);
1319	kfree(acm);
1320alloc_fail:
1321	return -ENOMEM;
1322}
1323
1324static void stop_data_traffic(struct acm *acm)
1325{
1326	int i;
1327
1328	dev_dbg(&acm->control->dev, "%s\n", __func__);
1329
1330	usb_kill_urb(acm->ctrlurb);
1331	for (i = 0; i < ACM_NW; i++)
1332		usb_kill_urb(acm->wb[i].urb);
1333	for (i = 0; i < acm->rx_buflimit; i++)
1334		usb_kill_urb(acm->read_urbs[i]);
1335
1336	cancel_work_sync(&acm->work);
1337}
1338
1339static void acm_disconnect(struct usb_interface *intf)
1340{
1341	struct acm *acm = usb_get_intfdata(intf);
1342	struct usb_device *usb_dev = interface_to_usbdev(intf);
1343	struct tty_struct *tty;
1344	int i;
1345
1346	dev_dbg(&intf->dev, "%s\n", __func__);
1347
1348	/* sibling interface is already cleaning up */
1349	if (!acm)
1350		return;
1351
1352	mutex_lock(&acm->mutex);
1353	acm->disconnected = true;
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	usb_set_intfdata(acm->control, NULL);
1362	usb_set_intfdata(acm->data, NULL);
1363	mutex_unlock(&acm->mutex);
1364
1365	tty = tty_port_tty_get(&acm->port);
1366	if (tty) {
1367		tty_vhangup(tty);
1368		tty_kref_put(tty);
1369	}
1370
1371	stop_data_traffic(acm);
 
 
 
1372
1373	usb_free_urb(acm->ctrlurb);
1374	for (i = 0; i < ACM_NW; i++)
1375		usb_free_urb(acm->wb[i].urb);
1376	for (i = 0; i < acm->rx_buflimit; i++)
1377		usb_free_urb(acm->read_urbs[i]);
1378	acm_write_buffers_free(acm);
1379	usb_free_coherent(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1380	acm_read_buffers_free(acm);
1381
 
 
1382	if (!acm->combined_interfaces)
1383		usb_driver_release_interface(&acm_driver, intf == acm->control ?
1384					acm->data : acm->control);
1385
1386	tty_port_put(&acm->port);
1387}
1388
1389#ifdef CONFIG_PM
1390static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1391{
1392	struct acm *acm = usb_get_intfdata(intf);
1393	int cnt;
1394
 
1395	if (PMSG_IS_AUTO(message)) {
1396		int b;
1397
1398		spin_lock_irq(&acm->write_lock);
1399		b = acm->transmitting;
1400		spin_unlock_irq(&acm->write_lock);
1401		if (b)
1402			return -EBUSY;
 
1403	}
1404
1405	spin_lock_irq(&acm->read_lock);
1406	spin_lock(&acm->write_lock);
1407	cnt = acm->susp_count++;
1408	spin_unlock(&acm->write_lock);
1409	spin_unlock_irq(&acm->read_lock);
1410
1411	if (cnt)
1412		return 0;
1413
1414	if (test_bit(ASYNCB_INITIALIZED, &acm->port.flags))
1415		stop_data_traffic(acm);
1416
1417	return 0;
1418}
1419
1420static int acm_resume(struct usb_interface *intf)
1421{
1422	struct acm *acm = usb_get_intfdata(intf);
1423	struct acm_wb *wb;
1424	int rv = 0;
1425	int cnt;
1426
1427	spin_lock_irq(&acm->read_lock);
1428	acm->susp_count -= 1;
1429	cnt = acm->susp_count;
1430	spin_unlock_irq(&acm->read_lock);
1431
1432	if (cnt)
1433		return 0;
1434
1435	if (test_bit(ASYNCB_INITIALIZED, &acm->port.flags)) {
1436		rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
 
 
1437
1438		spin_lock_irq(&acm->write_lock);
1439		if (acm->delayed_wb) {
1440			wb = acm->delayed_wb;
1441			acm->delayed_wb = NULL;
1442			spin_unlock_irq(&acm->write_lock);
1443			acm_start_wb(acm, wb);
1444		} else {
1445			spin_unlock_irq(&acm->write_lock);
1446		}
1447
1448		/*
1449		 * delayed error checking because we must
1450		 * do the write path at all cost
1451		 */
1452		if (rv < 0)
1453			goto err_out;
1454
1455		rv = acm_submit_read_urbs(acm, GFP_NOIO);
1456	}
 
 
1457
1458err_out:
1459	return rv;
1460}
1461
1462static int acm_reset_resume(struct usb_interface *intf)
1463{
1464	struct acm *acm = usb_get_intfdata(intf);
1465	struct tty_struct *tty;
1466
1467	if (test_bit(ASYNCB_INITIALIZED, &acm->port.flags)) {
1468		tty = tty_port_tty_get(&acm->port);
1469		if (tty) {
1470			tty_hangup(tty);
1471			tty_kref_put(tty);
1472		}
1473	}
1474
1475	return acm_resume(intf);
1476}
1477
1478#endif /* CONFIG_PM */
1479
 
 
 
 
 
 
 
 
 
 
1480#define NOKIA_PCSUITE_ACM_INFO(x) \
1481		USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1482		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1483		USB_CDC_ACM_PROTO_VENDOR)
1484
1485#define SAMSUNG_PCSUITE_ACM_INFO(x) \
1486		USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1487		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1488		USB_CDC_ACM_PROTO_VENDOR)
1489
1490/*
1491 * USB driver structure.
1492 */
1493
1494static const struct usb_device_id acm_ids[] = {
1495	/* quirky and broken devices */
 
 
 
 
1496	{ USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1497	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1498	},
1499	{ USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1500	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1501	},
 
 
 
1502	{ USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1503	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1504	},
1505	{ USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1506	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1507	},
1508	{ USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1509	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1510	},
1511	{ USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1512	.driver_info = SINGLE_RX_URB,
1513	},
1514	{ USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1515	.driver_info = SINGLE_RX_URB, /* firmware bug */
1516	},
1517	{ USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1518	.driver_info = SINGLE_RX_URB, /* firmware bug */
1519	},
 
 
 
 
 
 
1520	{ USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1521	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1522	},
1523	{ USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1524	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1525	},
1526	{ USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1527	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1528	},
1529	{ USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1530	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1531	},
1532	{ USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1533	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1534	},
 
 
 
 
 
 
 
1535	{ USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1536	},
1537	/* Motorola H24 HSPA module: */
1538	{ USB_DEVICE(0x22b8, 0x2d91) }, /* modem                                */
1539	{ USB_DEVICE(0x22b8, 0x2d92) }, /* modem           + diagnostics        */
1540	{ USB_DEVICE(0x22b8, 0x2d93) }, /* modem + AT port                      */
1541	{ USB_DEVICE(0x22b8, 0x2d95) }, /* modem + AT port + diagnostics        */
1542	{ USB_DEVICE(0x22b8, 0x2d96) }, /* modem                         + NMEA */
1543	{ USB_DEVICE(0x22b8, 0x2d97) }, /* modem           + diagnostics + NMEA */
1544	{ USB_DEVICE(0x22b8, 0x2d99) }, /* modem + AT port               + NMEA */
1545	{ USB_DEVICE(0x22b8, 0x2d9a) }, /* modem + AT port + diagnostics + NMEA */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1546
1547	{ USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1548	.driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1549					   data interface instead of
1550					   communications interface.
1551					   Maybe we should define a new
1552					   quirk for this. */
1553	},
 
 
 
 
 
 
1554	{ USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1555	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1556	},
1557	{ USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1558	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1559	},
 
 
 
 
 
 
 
 
 
 
 
 
 
1560
1561	/* Nokia S60 phones expose two ACM channels. The first is
1562	 * a modem and is picked up by the standard AT-command
1563	 * information below. The second is 'vendor-specific' but
1564	 * is treated as a serial device at the S60 end, so we want
1565	 * to expose it on Linux too. */
1566	{ NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1567	{ NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1568	{ NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1569	{ NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1570	{ NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1571	{ NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1572	{ NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1573	{ NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1574	{ NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1575	{ NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1576	{ NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1577	{ NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1578	{ NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1579	{ NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1580	{ NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1581	{ NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1582	{ NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1583	{ NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i  */
1584	{ NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1585	{ NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1586	{ NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1587	{ NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic &  */
1588	{ NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1589	{ NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1590	{ NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1591	{ NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1592	{ NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1593	{ NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1594	{ NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1595	{ NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1596	{ NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1597	{ NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB  */
1598	{ NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1599	{ NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1600	{ NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1601	{ NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1602	{ NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1603	{ NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1604	{ NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1605	{ NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3  */
1606	{ NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1607	{ NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1608	{ NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1609	{ NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1610	{ NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1611	{ NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1612	{ NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1613	{ NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1614	{ NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1615	{ NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1616	{ NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1617	{ NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1618	{ NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1619	{ NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1620	{ NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1621	{ NOKIA_PCSUITE_ACM_INFO(0x0335), }, /* Nokia E7 */
1622	{ NOKIA_PCSUITE_ACM_INFO(0x03cd), }, /* Nokia C7 */
1623	{ SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1624
1625	/* Support for Owen devices */
1626	{ USB_DEVICE(0x03eb, 0x0030), }, /* Owen SI30 */
1627
1628	/* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1629
1630	/* Support Lego NXT using pbLua firmware */
1631	{ USB_DEVICE(0x0694, 0xff00),
1632	.driver_info = NOT_A_MODEM,
1633	},
1634
1635	/* Support for Droids MuIn LCD */
1636	{ USB_DEVICE(0x04d8, 0x000b),
1637	.driver_info = NO_DATA_INTERFACE,
1638	},
1639
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1640	/* control interfaces without any protocol set */
1641	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1642		USB_CDC_PROTO_NONE) },
1643
1644	/* control interfaces with various AT-command sets */
1645	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1646		USB_CDC_ACM_PROTO_AT_V25TER) },
1647	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1648		USB_CDC_ACM_PROTO_AT_PCCA101) },
1649	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1650		USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1651	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1652		USB_CDC_ACM_PROTO_AT_GSM) },
1653	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1654		USB_CDC_ACM_PROTO_AT_3G) },
1655	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1656		USB_CDC_ACM_PROTO_AT_CDMA) },
1657
 
 
 
 
1658	{ }
1659};
1660
1661MODULE_DEVICE_TABLE(usb, acm_ids);
1662
1663static struct usb_driver acm_driver = {
1664	.name =		"cdc_acm",
1665	.probe =	acm_probe,
1666	.disconnect =	acm_disconnect,
1667#ifdef CONFIG_PM
1668	.suspend =	acm_suspend,
1669	.resume =	acm_resume,
1670	.reset_resume =	acm_reset_resume,
1671#endif
 
1672	.id_table =	acm_ids,
1673#ifdef CONFIG_PM
1674	.supports_autosuspend = 1,
1675#endif
1676	.disable_hub_initiated_lpm = 1,
1677};
1678
1679/*
1680 * TTY driver structures.
1681 */
1682
1683static const struct tty_operations acm_ops = {
1684	.install =		acm_tty_install,
1685	.open =			acm_tty_open,
1686	.close =		acm_tty_close,
1687	.cleanup =		acm_tty_cleanup,
1688	.hangup =		acm_tty_hangup,
1689	.write =		acm_tty_write,
1690	.write_room =		acm_tty_write_room,
1691	.ioctl =		acm_tty_ioctl,
1692	.throttle =		acm_tty_throttle,
1693	.unthrottle =		acm_tty_unthrottle,
1694	.chars_in_buffer =	acm_tty_chars_in_buffer,
1695	.break_ctl =		acm_tty_break_ctl,
1696	.set_termios =		acm_tty_set_termios,
1697	.tiocmget =		acm_tty_tiocmget,
1698	.tiocmset =		acm_tty_tiocmset,
 
 
 
1699};
1700
1701/*
1702 * Init / exit.
1703 */
1704
1705static int __init acm_init(void)
1706{
1707	int retval;
1708	acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1709	if (!acm_tty_driver)
1710		return -ENOMEM;
1711	acm_tty_driver->driver_name = "acm",
1712	acm_tty_driver->name = "ttyACM",
1713	acm_tty_driver->major = ACM_TTY_MAJOR,
1714	acm_tty_driver->minor_start = 0,
1715	acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1716	acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1717	acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1718	acm_tty_driver->init_termios = tty_std_termios;
1719	acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
1720								HUPCL | CLOCAL;
1721	tty_set_operations(acm_tty_driver, &acm_ops);
1722
1723	retval = tty_register_driver(acm_tty_driver);
1724	if (retval) {
1725		put_tty_driver(acm_tty_driver);
1726		return retval;
1727	}
1728
1729	retval = usb_register(&acm_driver);
1730	if (retval) {
1731		tty_unregister_driver(acm_tty_driver);
1732		put_tty_driver(acm_tty_driver);
1733		return retval;
1734	}
1735
1736	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
1737
1738	return 0;
1739}
1740
1741static void __exit acm_exit(void)
1742{
1743	usb_deregister(&acm_driver);
1744	tty_unregister_driver(acm_tty_driver);
1745	put_tty_driver(acm_tty_driver);
 
1746}
1747
1748module_init(acm_init);
1749module_exit(acm_exit);
1750
1751MODULE_AUTHOR(DRIVER_AUTHOR);
1752MODULE_DESCRIPTION(DRIVER_DESC);
1753MODULE_LICENSE("GPL");
1754MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);