Linux Audio

Check our new training course

Embedded Linux training

Mar 31-Apr 8, 2025
Register
Loading...
v5.9
   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			u8 *new_buffer;
 382			alloc_size = roundup_pow_of_two(expected_size);
 383			/* Final freeing is done on disconnect. */
 384			new_buffer = krealloc(acm->notification_buffer,
 385					      alloc_size, GFP_ATOMIC);
 386			if (!new_buffer) {
 387				acm->nb_index = 0;
 388				goto exit;
 389			}
 390
 391			acm->notification_buffer = new_buffer;
 392			acm->nb_size = alloc_size;
 393			dr = (struct usb_cdc_notification *)acm->notification_buffer;
 394		}
 395
 396		copy_size = min(current_size,
 397				expected_size - acm->nb_index);
 398
 399		memcpy(&acm->notification_buffer[acm->nb_index],
 400		       urb->transfer_buffer, copy_size);
 401		acm->nb_index += copy_size;
 402		current_size = acm->nb_index;
 403	}
 
 
 
 
 
 
 
 404
 405	if (current_size >= expected_size) {
 406		/* notification complete */
 407		acm_process_notification(acm, (unsigned char *)dr);
 408		acm->nb_index = 0;
 
 
 
 
 409	}
 410
 411exit:
 412	retval = usb_submit_urb(urb, GFP_ATOMIC);
 413	if (retval && retval != -EPERM && retval != -ENODEV)
 414		dev_err(&acm->control->dev,
 415			"%s - usb_submit_urb failed: %d\n", __func__, retval);
 416	else
 417		dev_vdbg(&acm->control->dev,
 418			"control resubmission terminated %d\n", retval);
 419}
 420
 421static int acm_submit_read_urb(struct acm *acm, int index, gfp_t mem_flags)
 422{
 423	int res;
 424
 425	if (!test_and_clear_bit(index, &acm->read_urbs_free))
 426		return 0;
 427
 
 
 428	res = usb_submit_urb(acm->read_urbs[index], mem_flags);
 429	if (res) {
 430		if (res != -EPERM && res != -ENODEV) {
 431			dev_err(&acm->data->dev,
 432				"urb %d failed submission with %d\n",
 433				index, res);
 434		} else {
 435			dev_vdbg(&acm->data->dev, "intended failure %d\n", res);
 436		}
 437		set_bit(index, &acm->read_urbs_free);
 438		return res;
 439	} else {
 440		dev_vdbg(&acm->data->dev, "submitted urb %d\n", index);
 441	}
 442
 443	return 0;
 444}
 445
 446static int acm_submit_read_urbs(struct acm *acm, gfp_t mem_flags)
 447{
 448	int res;
 449	int i;
 450
 451	for (i = 0; i < acm->rx_buflimit; ++i) {
 452		res = acm_submit_read_urb(acm, i, mem_flags);
 453		if (res)
 454			return res;
 455	}
 456
 457	return 0;
 458}
 459
 460static void acm_process_read_urb(struct acm *acm, struct urb *urb)
 461{
 
 
 462	if (!urb->actual_length)
 463		return;
 464
 465	tty_insert_flip_string(&acm->port, urb->transfer_buffer,
 466			urb->actual_length);
 467	tty_flip_buffer_push(&acm->port);
 
 
 
 
 
 468}
 469
 470static void acm_read_bulk_callback(struct urb *urb)
 471{
 472	struct acm_rb *rb = urb->context;
 473	struct acm *acm = rb->instance;
 474	int status = urb->status;
 475	bool stopped = false;
 476	bool stalled = false;
 477	bool cooldown = false;
 478
 479	dev_vdbg(&acm->data->dev, "got urb %d, len %d, status %d\n",
 480		rb->index, urb->actual_length, status);
 
 481
 482	if (!acm->dev) {
 483		dev_dbg(&acm->data->dev, "%s - disconnected\n", __func__);
 484		return;
 485	}
 
 486
 487	switch (status) {
 488	case 0:
 489		usb_mark_last_busy(acm->dev);
 490		acm_process_read_urb(acm, urb);
 491		break;
 492	case -EPIPE:
 493		set_bit(EVENT_RX_STALL, &acm->flags);
 494		stalled = true;
 495		break;
 496	case -ENOENT:
 497	case -ECONNRESET:
 498	case -ESHUTDOWN:
 499		dev_dbg(&acm->data->dev,
 500			"%s - urb shutting down with status: %d\n",
 501			__func__, status);
 502		stopped = true;
 503		break;
 504	case -EOVERFLOW:
 505	case -EPROTO:
 506		dev_dbg(&acm->data->dev,
 507			"%s - cooling babbling device\n", __func__);
 508		usb_mark_last_busy(acm->dev);
 509		set_bit(rb->index, &acm->urbs_in_error_delay);
 510		cooldown = true;
 511		break;
 512	default:
 513		dev_dbg(&acm->data->dev,
 514			"%s - nonzero urb status received: %d\n",
 515			__func__, status);
 516		break;
 517	}
 518
 519	/*
 520	 * Make sure URB processing is done before marking as free to avoid
 521	 * racing with unthrottle() on another CPU. Matches the barriers
 522	 * implied by the test_and_clear_bit() in acm_submit_read_urb().
 523	 */
 524	smp_mb__before_atomic();
 525	set_bit(rb->index, &acm->read_urbs_free);
 526	/*
 527	 * Make sure URB is marked as free before checking the throttled flag
 528	 * to avoid racing with unthrottle() on another CPU. Matches the
 529	 * smp_mb() in unthrottle().
 530	 */
 531	smp_mb__after_atomic();
 532
 533	if (stopped || stalled || cooldown) {
 534		if (stalled)
 535			schedule_work(&acm->work);
 536		else if (cooldown)
 537			schedule_delayed_work(&acm->dwork, HZ / 2);
 538		return;
 539	}
 
 540
 541	if (test_bit(ACM_THROTTLED, &acm->flags))
 542		return;
 543
 544	acm_submit_read_urb(acm, rb->index, GFP_ATOMIC);
 
 
 
 
 
 545}
 546
 547/* data interface wrote those outgoing bytes */
 548static void acm_write_bulk(struct urb *urb)
 549{
 550	struct acm_wb *wb = urb->context;
 551	struct acm *acm = wb->instance;
 552	unsigned long flags;
 553	int status = urb->status;
 554
 555	if (status || (urb->actual_length != urb->transfer_buffer_length))
 556		dev_vdbg(&acm->data->dev, "wrote len %d/%d, status %d\n",
 
 557			urb->actual_length,
 558			urb->transfer_buffer_length,
 559			status);
 560
 561	spin_lock_irqsave(&acm->write_lock, flags);
 562	acm_write_done(acm, wb);
 563	spin_unlock_irqrestore(&acm->write_lock, flags);
 564	set_bit(EVENT_TTY_WAKEUP, &acm->flags);
 565	schedule_work(&acm->work);
 566}
 567
 568static void acm_softint(struct work_struct *work)
 569{
 570	int i;
 571	struct acm *acm = container_of(work, struct acm, work);
 
 572
 573	if (test_bit(EVENT_RX_STALL, &acm->flags)) {
 574		smp_mb(); /* against acm_suspend() */
 575		if (!acm->susp_count) {
 576			for (i = 0; i < acm->rx_buflimit; i++)
 577				usb_kill_urb(acm->read_urbs[i]);
 578			usb_clear_halt(acm->dev, acm->in);
 579			acm_submit_read_urbs(acm, GFP_KERNEL);
 580			clear_bit(EVENT_RX_STALL, &acm->flags);
 581		}
 582	}
 583
 584	if (test_and_clear_bit(ACM_ERROR_DELAY, &acm->flags)) {
 585		for (i = 0; i < acm->rx_buflimit; i++)
 586			if (test_and_clear_bit(i, &acm->urbs_in_error_delay))
 587					acm_submit_read_urb(acm, i, GFP_NOIO);
 588	}
 589
 590	if (test_and_clear_bit(EVENT_TTY_WAKEUP, &acm->flags))
 591		tty_port_tty_wakeup(&acm->port);
 
 
 
 592}
 593
 594/*
 595 * TTY handlers
 596 */
 597
 598static int acm_tty_install(struct tty_driver *driver, struct tty_struct *tty)
 599{
 600	struct acm *acm;
 601	int retval;
 602
 603	acm = acm_get_by_minor(tty->index);
 
 
 604	if (!acm)
 605		return -ENODEV;
 606
 607	retval = tty_standard_install(driver, tty);
 608	if (retval)
 609		goto error_init_termios;
 610
 611	/*
 612	 * Suppress initial echoing for some devices which might send data
 613	 * immediately after acm driver has been installed.
 614	 */
 615	if (acm->quirks & DISABLE_ECHO)
 616		tty->termios.c_lflag &= ~ECHO;
 617
 618	tty->driver_data = acm;
 619
 620	return 0;
 621
 622error_init_termios:
 623	tty_port_put(&acm->port);
 624	return retval;
 625}
 626
 627static int acm_tty_open(struct tty_struct *tty, struct file *filp)
 628{
 629	struct acm *acm = tty->driver_data;
 630
 631	return tty_port_open(&acm->port, tty, filp);
 632}
 633
 634static void acm_port_dtr_rts(struct tty_port *port, int raise)
 635{
 636	struct acm *acm = container_of(port, struct acm, port);
 637	int val;
 638	int res;
 639
 640	if (raise)
 641		val = ACM_CTRL_DTR | ACM_CTRL_RTS;
 642	else
 643		val = 0;
 644
 645	/* FIXME: add missing ctrlout locking throughout driver */
 646	acm->ctrlout = val;
 647
 648	res = acm_set_control(acm, val);
 649	if (res && (acm->ctrl_caps & USB_CDC_CAP_LINE))
 650		dev_err(&acm->control->dev, "failed to set dtr/rts\n");
 651}
 652
 653static int acm_port_activate(struct tty_port *port, struct tty_struct *tty)
 654{
 655	struct acm *acm = container_of(port, struct acm, port);
 656	int retval = -ENODEV;
 657	int i;
 
 658
 659	mutex_lock(&acm->mutex);
 660	if (acm->disconnected)
 661		goto disconnected;
 662
 663	retval = usb_autopm_get_interface(acm->control);
 664	if (retval)
 665		goto error_get_interface;
 666
 667	/*
 668	 * FIXME: Why do we need this? Allocating 64K of physically contiguous
 669	 * memory is really nasty...
 670	 */
 671	set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
 672	acm->control->needs_remote_wakeup = 1;
 673
 674	acm->ctrlurb->dev = acm->dev;
 675	retval = usb_submit_urb(acm->ctrlurb, GFP_KERNEL);
 676	if (retval) {
 677		dev_err(&acm->control->dev,
 678			"%s - usb_submit_urb(ctrl irq) failed\n", __func__);
 679		goto error_submit_urb;
 680	}
 681
 682	acm_tty_set_termios(tty, NULL);
 
 
 
 
 
 683
 684	/*
 685	 * Unthrottle device in case the TTY was closed while throttled.
 686	 */
 687	clear_bit(ACM_THROTTLED, &acm->flags);
 
 
 
 688
 689	retval = acm_submit_read_urbs(acm, GFP_KERNEL);
 690	if (retval)
 691		goto error_submit_read_urbs;
 692
 693	usb_autopm_put_interface(acm->control);
 694
 695	mutex_unlock(&acm->mutex);
 696
 697	return 0;
 698
 699error_submit_read_urbs:
 700	for (i = 0; i < acm->rx_buflimit; i++)
 701		usb_kill_urb(acm->read_urbs[i]);
 
 702	usb_kill_urb(acm->ctrlurb);
 703error_submit_urb:
 704	usb_autopm_put_interface(acm->control);
 705error_get_interface:
 706disconnected:
 707	mutex_unlock(&acm->mutex);
 708
 709	return usb_translate_errors(retval);
 710}
 711
 712static void acm_port_destruct(struct tty_port *port)
 713{
 714	struct acm *acm = container_of(port, struct acm, port);
 715
 
 
 
 716	acm_release_minor(acm);
 717	usb_put_intf(acm->control);
 718	kfree(acm->country_codes);
 719	kfree(acm);
 720}
 721
 722static void acm_port_shutdown(struct tty_port *port)
 723{
 724	struct acm *acm = container_of(port, struct acm, port);
 725	struct urb *urb;
 726	struct acm_wb *wb;
 727
 728	/*
 729	 * Need to grab write_lock to prevent race with resume, but no need to
 730	 * hold it due to the tty-port initialised flag.
 731	 */
 732	spin_lock_irq(&acm->write_lock);
 733	spin_unlock_irq(&acm->write_lock);
 734
 735	usb_autopm_get_interface_no_resume(acm->control);
 736	acm->control->needs_remote_wakeup = 0;
 737	usb_autopm_put_interface(acm->control);
 738
 739	for (;;) {
 740		urb = usb_get_from_anchor(&acm->delayed);
 741		if (!urb)
 742			break;
 743		wb = urb->context;
 744		wb->use = 0;
 745		usb_autopm_put_interface_async(acm->control);
 
 
 
 
 746	}
 747
 748	acm_kill_urbs(acm);
 749}
 750
 751static void acm_tty_cleanup(struct tty_struct *tty)
 752{
 753	struct acm *acm = tty->driver_data;
 754
 755	tty_port_put(&acm->port);
 756}
 757
 758static void acm_tty_hangup(struct tty_struct *tty)
 759{
 760	struct acm *acm = tty->driver_data;
 761
 762	tty_port_hangup(&acm->port);
 763}
 764
 765static void acm_tty_close(struct tty_struct *tty, struct file *filp)
 766{
 767	struct acm *acm = tty->driver_data;
 768
 769	tty_port_close(&acm->port, tty, filp);
 770}
 771
 772static int acm_tty_write(struct tty_struct *tty,
 773					const unsigned char *buf, int count)
 774{
 775	struct acm *acm = tty->driver_data;
 776	int stat;
 777	unsigned long flags;
 778	int wbn;
 779	struct acm_wb *wb;
 780
 781	if (!count)
 782		return 0;
 783
 784	dev_vdbg(&acm->data->dev, "%d bytes from tty layer\n", count);
 785
 786	spin_lock_irqsave(&acm->write_lock, flags);
 787	wbn = acm_wb_alloc(acm);
 788	if (wbn < 0) {
 789		spin_unlock_irqrestore(&acm->write_lock, flags);
 790		return 0;
 791	}
 792	wb = &acm->wb[wbn];
 793
 794	if (!acm->dev) {
 795		wb->use = 0;
 796		spin_unlock_irqrestore(&acm->write_lock, flags);
 797		return -ENODEV;
 798	}
 799
 800	count = (count > acm->writesize) ? acm->writesize : count;
 801	dev_vdbg(&acm->data->dev, "writing %d bytes\n", count);
 802	memcpy(wb->buf, buf, count);
 803	wb->len = count;
 804
 805	stat = usb_autopm_get_interface_async(acm->control);
 806	if (stat) {
 807		wb->use = 0;
 808		spin_unlock_irqrestore(&acm->write_lock, flags);
 809		return stat;
 810	}
 811
 812	if (acm->susp_count) {
 813		usb_anchor_urb(wb->urb, &acm->delayed);
 814		spin_unlock_irqrestore(&acm->write_lock, flags);
 815		return count;
 816	}
 817
 818	stat = acm_start_wb(acm, wb);
 819	spin_unlock_irqrestore(&acm->write_lock, flags);
 820
 
 821	if (stat < 0)
 822		return stat;
 823	return count;
 824}
 825
 826static int acm_tty_write_room(struct tty_struct *tty)
 827{
 828	struct acm *acm = tty->driver_data;
 829	/*
 830	 * Do not let the line discipline to know that we have a reserve,
 831	 * or it might get too enthusiastic.
 832	 */
 833	return acm_wb_is_avail(acm) ? acm->writesize : 0;
 834}
 835
 836static int acm_tty_chars_in_buffer(struct tty_struct *tty)
 837{
 838	struct acm *acm = tty->driver_data;
 839	/*
 840	 * if the device was unplugged then any remaining characters fell out
 841	 * of the connector ;)
 842	 */
 843	if (acm->disconnected)
 844		return 0;
 845	/*
 846	 * This is inaccurate (overcounts), but it works.
 847	 */
 848	return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
 849}
 850
 851static void acm_tty_throttle(struct tty_struct *tty)
 852{
 853	struct acm *acm = tty->driver_data;
 854
 855	set_bit(ACM_THROTTLED, &acm->flags);
 
 
 856}
 857
 858static void acm_tty_unthrottle(struct tty_struct *tty)
 859{
 860	struct acm *acm = tty->driver_data;
 
 861
 862	clear_bit(ACM_THROTTLED, &acm->flags);
 863
 864	/* Matches the smp_mb__after_atomic() in acm_read_bulk_callback(). */
 865	smp_mb();
 
 866
 867	acm_submit_read_urbs(acm, GFP_KERNEL);
 
 868}
 869
 870static int acm_tty_break_ctl(struct tty_struct *tty, int state)
 871{
 872	struct acm *acm = tty->driver_data;
 873	int retval;
 874
 875	retval = acm_send_break(acm, state ? 0xffff : 0);
 876	if (retval < 0)
 877		dev_dbg(&acm->control->dev,
 878			"%s - send break failed\n", __func__);
 879	return retval;
 880}
 881
 882static int acm_tty_tiocmget(struct tty_struct *tty)
 883{
 884	struct acm *acm = tty->driver_data;
 885
 886	return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
 887	       (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
 888	       (acm->ctrlin  & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
 889	       (acm->ctrlin  & ACM_CTRL_RI  ? TIOCM_RI  : 0) |
 890	       (acm->ctrlin  & ACM_CTRL_DCD ? TIOCM_CD  : 0) |
 891	       TIOCM_CTS;
 892}
 893
 894static int acm_tty_tiocmset(struct tty_struct *tty,
 895			    unsigned int set, unsigned int clear)
 896{
 897	struct acm *acm = tty->driver_data;
 898	unsigned int newctrl;
 899
 900	newctrl = acm->ctrlout;
 901	set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
 902					(set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
 903	clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) |
 904					(clear & TIOCM_RTS ? ACM_CTRL_RTS : 0);
 905
 906	newctrl = (newctrl & ~clear) | set;
 907
 908	if (acm->ctrlout == newctrl)
 909		return 0;
 910	return acm_set_control(acm, acm->ctrlout = newctrl);
 911}
 912
 913static int get_serial_info(struct tty_struct *tty, struct serial_struct *ss)
 914{
 915	struct acm *acm = tty->driver_data;
 916
 917	ss->xmit_fifo_size = acm->writesize;
 918	ss->baud_base = le32_to_cpu(acm->line.dwDTERate);
 919	ss->close_delay	= jiffies_to_msecs(acm->port.close_delay) / 10;
 920	ss->closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
 921				ASYNC_CLOSING_WAIT_NONE :
 922				jiffies_to_msecs(acm->port.closing_wait) / 10;
 923	return 0;
 924}
 925
 926static int set_serial_info(struct tty_struct *tty, struct serial_struct *ss)
 927{
 928	struct acm *acm = tty->driver_data;
 929	unsigned int closing_wait, close_delay;
 930	unsigned int old_closing_wait, old_close_delay;
 931	int retval = 0;
 932
 933	close_delay = msecs_to_jiffies(ss->close_delay * 10);
 934	closing_wait = ss->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
 935			ASYNC_CLOSING_WAIT_NONE :
 936			msecs_to_jiffies(ss->closing_wait * 10);
 937
 938	/* we must redo the rounding here, so that the values match */
 939	old_close_delay	= jiffies_to_msecs(acm->port.close_delay) / 10;
 940	old_closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
 941				ASYNC_CLOSING_WAIT_NONE :
 942				jiffies_to_msecs(acm->port.closing_wait) / 10;
 943
 944	mutex_lock(&acm->port.mutex);
 945
 946	if (!capable(CAP_SYS_ADMIN)) {
 947		if ((ss->close_delay != old_close_delay) ||
 948		    (ss->closing_wait != old_closing_wait))
 949			retval = -EPERM;
 950		else
 951			retval = -EOPNOTSUPP;
 952	} else {
 953		acm->port.close_delay  = close_delay;
 954		acm->port.closing_wait = closing_wait;
 955	}
 956
 957	mutex_unlock(&acm->port.mutex);
 958	return retval;
 959}
 960
 961static int wait_serial_change(struct acm *acm, unsigned long arg)
 962{
 963	int rv = 0;
 964	DECLARE_WAITQUEUE(wait, current);
 965	struct async_icount old, new;
 966
 967	do {
 968		spin_lock_irq(&acm->read_lock);
 969		old = acm->oldcount;
 970		new = acm->iocount;
 971		acm->oldcount = new;
 972		spin_unlock_irq(&acm->read_lock);
 973
 974		if ((arg & TIOCM_DSR) &&
 975			old.dsr != new.dsr)
 976			break;
 977		if ((arg & TIOCM_CD)  &&
 978			old.dcd != new.dcd)
 979			break;
 980		if ((arg & TIOCM_RI) &&
 981			old.rng != new.rng)
 982			break;
 983
 984		add_wait_queue(&acm->wioctl, &wait);
 985		set_current_state(TASK_INTERRUPTIBLE);
 986		schedule();
 987		remove_wait_queue(&acm->wioctl, &wait);
 988		if (acm->disconnected) {
 989			if (arg & TIOCM_CD)
 990				break;
 991			else
 992				rv = -ENODEV;
 993		} else {
 994			if (signal_pending(current))
 995				rv = -ERESTARTSYS;
 996		}
 997	} while (!rv);
 998
 999	
1000
1001	return rv;
1002}
1003
1004static int acm_tty_get_icount(struct tty_struct *tty,
1005					struct serial_icounter_struct *icount)
1006{
1007	struct acm *acm = tty->driver_data;
1008
1009	icount->dsr = acm->iocount.dsr;
1010	icount->rng = acm->iocount.rng;
1011	icount->dcd = acm->iocount.dcd;
1012	icount->frame = acm->iocount.frame;
1013	icount->overrun = acm->iocount.overrun;
1014	icount->parity = acm->iocount.parity;
1015	icount->brk = acm->iocount.brk;
1016
1017	return 0;
 
 
 
1018}
1019
1020static int acm_tty_ioctl(struct tty_struct *tty,
1021					unsigned int cmd, unsigned long arg)
1022{
1023	struct acm *acm = tty->driver_data;
1024	int rv = -ENOIOCTLCMD;
1025
1026	switch (cmd) {
1027	case TIOCMIWAIT:
1028		rv = usb_autopm_get_interface(acm->control);
1029		if (rv < 0) {
1030			rv = -EIO;
1031			break;
1032		}
1033		rv = wait_serial_change(acm, arg);
1034		usb_autopm_put_interface(acm->control);
1035		break;
1036	}
1037
1038	return rv;
1039}
1040
 
 
 
 
 
 
 
 
 
 
 
 
1041static void acm_tty_set_termios(struct tty_struct *tty,
1042						struct ktermios *termios_old)
1043{
1044	struct acm *acm = tty->driver_data;
1045	struct ktermios *termios = &tty->termios;
1046	struct usb_cdc_line_coding newline;
1047	int newctrl = acm->ctrlout;
1048
1049	newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
1050	newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
1051	newline.bParityType = termios->c_cflag & PARENB ?
1052				(termios->c_cflag & PARODD ? 1 : 2) +
1053				(termios->c_cflag & CMSPAR ? 2 : 0) : 0;
1054	switch (termios->c_cflag & CSIZE) {
1055	case CS5:
1056		newline.bDataBits = 5;
1057		break;
1058	case CS6:
1059		newline.bDataBits = 6;
1060		break;
1061	case CS7:
1062		newline.bDataBits = 7;
1063		break;
1064	case CS8:
1065	default:
1066		newline.bDataBits = 8;
1067		break;
1068	}
1069	/* FIXME: Needs to clear unsupported bits in the termios */
1070	acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
1071
1072	if (C_BAUD(tty) == B0) {
1073		newline.dwDTERate = acm->line.dwDTERate;
1074		newctrl &= ~ACM_CTRL_DTR;
1075	} else if (termios_old && (termios_old->c_cflag & CBAUD) == B0) {
1076		newctrl |=  ACM_CTRL_DTR;
1077	}
1078
1079	if (newctrl != acm->ctrlout)
1080		acm_set_control(acm, acm->ctrlout = newctrl);
1081
1082	if (memcmp(&acm->line, &newline, sizeof newline)) {
1083		memcpy(&acm->line, &newline, sizeof newline);
1084		dev_dbg(&acm->control->dev, "%s - set line: %d %d %d %d\n",
1085			__func__,
1086			le32_to_cpu(newline.dwDTERate),
1087			newline.bCharFormat, newline.bParityType,
1088			newline.bDataBits);
1089		acm_set_line(acm, &acm->line);
1090	}
1091}
1092
1093static const struct tty_port_operations acm_port_ops = {
1094	.dtr_rts = acm_port_dtr_rts,
1095	.shutdown = acm_port_shutdown,
1096	.activate = acm_port_activate,
1097	.destruct = acm_port_destruct,
1098};
1099
1100/*
1101 * USB probe and disconnect routines.
1102 */
1103
1104/* Little helpers: write/read buffers free */
1105static void acm_write_buffers_free(struct acm *acm)
1106{
1107	int i;
1108	struct acm_wb *wb;
 
1109
1110	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
1111		usb_free_coherent(acm->dev, acm->writesize, wb->buf, wb->dmah);
1112}
1113
1114static void acm_read_buffers_free(struct acm *acm)
1115{
 
1116	int i;
1117
1118	for (i = 0; i < acm->rx_buflimit; i++)
1119		usb_free_coherent(acm->dev, acm->readsize,
1120			  acm->read_buffers[i].base, acm->read_buffers[i].dma);
1121}
1122
1123/* Little helper: write buffers allocate */
1124static int acm_write_buffers_alloc(struct acm *acm)
1125{
1126	int i;
1127	struct acm_wb *wb;
1128
1129	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
1130		wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
1131		    &wb->dmah);
1132		if (!wb->buf) {
1133			while (i != 0) {
1134				--i;
1135				--wb;
1136				usb_free_coherent(acm->dev, acm->writesize,
1137				    wb->buf, wb->dmah);
1138			}
1139			return -ENOMEM;
1140		}
1141	}
1142	return 0;
1143}
1144
1145static int acm_probe(struct usb_interface *intf,
1146		     const struct usb_device_id *id)
1147{
1148	struct usb_cdc_union_desc *union_header = NULL;
1149	struct usb_cdc_call_mgmt_descriptor *cmgmd = NULL;
1150	unsigned char *buffer = intf->altsetting->extra;
1151	int buflen = intf->altsetting->extralen;
1152	struct usb_interface *control_interface;
1153	struct usb_interface *data_interface;
1154	struct usb_endpoint_descriptor *epctrl = NULL;
1155	struct usb_endpoint_descriptor *epread = NULL;
1156	struct usb_endpoint_descriptor *epwrite = NULL;
1157	struct usb_device *usb_dev = interface_to_usbdev(intf);
1158	struct usb_cdc_parsed_header h;
1159	struct acm *acm;
1160	int minor;
1161	int ctrlsize, readsize;
1162	u8 *buf;
1163	int call_intf_num = -1;
1164	int data_intf_num = -1;
 
 
1165	unsigned long quirks;
1166	int num_rx_buf;
1167	int i;
1168	int combined_interfaces = 0;
1169	struct device *tty_dev;
1170	int rv = -ENOMEM;
1171	int res;
1172
1173	/* normal quirks */
1174	quirks = (unsigned long)id->driver_info;
1175
1176	if (quirks == IGNORE_DEVICE)
1177		return -ENODEV;
1178
1179	memset(&h, 0x00, sizeof(struct usb_cdc_parsed_header));
1180
1181	num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
1182
1183	/* handle quirks deadly to normal probing*/
1184	if (quirks == NO_UNION_NORMAL) {
1185		data_interface = usb_ifnum_to_if(usb_dev, 1);
1186		control_interface = usb_ifnum_to_if(usb_dev, 0);
1187		/* we would crash */
1188		if (!data_interface || !control_interface)
1189			return -ENODEV;
1190		goto skip_normal_probe;
1191	}
1192
1193	/* normal probing*/
1194	if (!buffer) {
1195		dev_err(&intf->dev, "Weird descriptor references\n");
1196		return -EINVAL;
1197	}
1198
1199	if (!intf->cur_altsetting)
1200		return -EINVAL;
1201
1202	if (!buflen) {
1203		if (intf->cur_altsetting->endpoint &&
1204				intf->cur_altsetting->endpoint->extralen &&
1205				intf->cur_altsetting->endpoint->extra) {
1206			dev_dbg(&intf->dev,
1207				"Seeking extra descriptors on endpoint\n");
1208			buflen = intf->cur_altsetting->endpoint->extralen;
1209			buffer = intf->cur_altsetting->endpoint->extra;
1210		} else {
1211			dev_err(&intf->dev,
1212				"Zero length descriptor references\n");
1213			return -EINVAL;
1214		}
1215	}
1216
1217	cdc_parse_cdc_header(&h, intf, buffer, buflen);
1218	union_header = h.usb_cdc_union_desc;
1219	cmgmd = h.usb_cdc_call_mgmt_descriptor;
1220	if (cmgmd)
1221		call_intf_num = cmgmd->bDataInterface;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1222
1223	if (!union_header) {
1224		if (call_intf_num > 0) {
1225			dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1226			/* quirks for Droids MuIn LCD */
1227			if (quirks & NO_DATA_INTERFACE) {
1228				data_interface = usb_ifnum_to_if(usb_dev, 0);
1229			} else {
1230				data_intf_num = call_intf_num;
1231				data_interface = usb_ifnum_to_if(usb_dev, data_intf_num);
1232			}
1233			control_interface = intf;
1234		} else {
1235			if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
1236				dev_dbg(&intf->dev,"No union descriptor, giving up\n");
1237				return -ENODEV;
1238			} else {
1239				dev_warn(&intf->dev,"No union descriptor, testing for castrated device\n");
1240				combined_interfaces = 1;
1241				control_interface = data_interface = intf;
1242				goto look_for_collapsed_interface;
1243			}
1244		}
1245	} else {
1246		data_intf_num = union_header->bSlaveInterface0;
1247		control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1248		data_interface = usb_ifnum_to_if(usb_dev, data_intf_num);
1249	}
1250
1251	if (!control_interface || !data_interface) {
1252		dev_dbg(&intf->dev, "no interfaces\n");
1253		return -ENODEV;
1254	}
1255	if (!data_interface->cur_altsetting || !control_interface->cur_altsetting)
1256		return -ENODEV;
1257
1258	if (data_intf_num != call_intf_num)
1259		dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1260
1261	if (control_interface == data_interface) {
1262		/* some broken devices designed for windows work this way */
1263		dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1264		combined_interfaces = 1;
1265		/* a popular other OS doesn't use it */
1266		quirks |= NO_CAP_LINE;
1267		if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1268			dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1269			return -EINVAL;
1270		}
1271look_for_collapsed_interface:
1272		res = usb_find_common_endpoints(data_interface->cur_altsetting,
1273				&epread, &epwrite, &epctrl, NULL);
1274		if (res)
1275			return res;
1276
1277		goto made_compressed_probe;
 
 
 
 
 
 
 
 
 
 
 
1278	}
1279
1280skip_normal_probe:
1281
1282	/*workaround for switched interfaces */
1283	if (data_interface->cur_altsetting->desc.bInterfaceClass
1284						!= CDC_DATA_INTERFACE_TYPE) {
1285		if (control_interface->cur_altsetting->desc.bInterfaceClass
1286						== CDC_DATA_INTERFACE_TYPE) {
 
1287			dev_dbg(&intf->dev,
1288				"Your device has switched interfaces.\n");
1289			swap(control_interface, data_interface);
 
 
1290		} else {
1291			return -EINVAL;
1292		}
1293	}
1294
1295	/* Accept probe requests only for the control interface */
1296	if (!combined_interfaces && intf != control_interface)
1297		return -ENODEV;
1298
1299	if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1300		/* valid in this context */
1301		dev_dbg(&intf->dev, "The data interface isn't available\n");
1302		return -EBUSY;
1303	}
1304
1305
1306	if (data_interface->cur_altsetting->desc.bNumEndpoints < 2 ||
1307	    control_interface->cur_altsetting->desc.bNumEndpoints == 0)
1308		return -EINVAL;
1309
1310	epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1311	epread = &data_interface->cur_altsetting->endpoint[0].desc;
1312	epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1313
1314
1315	/* workaround for switched endpoints */
1316	if (!usb_endpoint_dir_in(epread)) {
1317		/* descriptors are swapped */
 
1318		dev_dbg(&intf->dev,
1319			"The data interface has switched endpoints\n");
1320		swap(epread, epwrite);
 
 
1321	}
1322made_compressed_probe:
1323	dev_dbg(&intf->dev, "interfaces are valid\n");
1324
1325	acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1326	if (acm == NULL)
 
1327		goto alloc_fail;
 
1328
1329	tty_port_init(&acm->port);
1330	acm->port.ops = &acm_port_ops;
 
 
 
 
1331
1332	ctrlsize = usb_endpoint_maxp(epctrl);
1333	readsize = usb_endpoint_maxp(epread) *
1334				(quirks == SINGLE_RX_URB ? 1 : 2);
1335	acm->combined_interfaces = combined_interfaces;
1336	acm->writesize = usb_endpoint_maxp(epwrite) * 20;
1337	acm->control = control_interface;
1338	acm->data = data_interface;
1339
1340	usb_get_intf(acm->control); /* undone in destruct() */
1341
1342	minor = acm_alloc_minor(acm);
1343	if (minor < 0)
1344		goto alloc_fail1;
1345
1346	acm->minor = minor;
1347	acm->dev = usb_dev;
1348	if (h.usb_cdc_acm_descriptor)
1349		acm->ctrl_caps = h.usb_cdc_acm_descriptor->bmCapabilities;
1350	if (quirks & NO_CAP_LINE)
1351		acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1352	acm->ctrlsize = ctrlsize;
1353	acm->readsize = readsize;
1354	acm->rx_buflimit = num_rx_buf;
1355	INIT_WORK(&acm->work, acm_softint);
1356	INIT_DELAYED_WORK(&acm->dwork, acm_softint);
1357	init_waitqueue_head(&acm->wioctl);
1358	spin_lock_init(&acm->write_lock);
1359	spin_lock_init(&acm->read_lock);
1360	mutex_init(&acm->mutex);
1361	if (usb_endpoint_xfer_int(epread)) {
 
 
1362		acm->bInterval = epread->bInterval;
1363		acm->in = usb_rcvintpipe(usb_dev, epread->bEndpointAddress);
1364	} else {
1365		acm->in = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1366	}
1367	if (usb_endpoint_xfer_int(epwrite))
1368		acm->out = usb_sndintpipe(usb_dev, epwrite->bEndpointAddress);
1369	else
1370		acm->out = usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress);
1371	init_usb_anchor(&acm->delayed);
1372	acm->quirks = quirks;
1373
1374	buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1375	if (!buf)
1376		goto alloc_fail1;
 
 
1377	acm->ctrl_buffer = buf;
1378
1379	if (acm_write_buffers_alloc(acm) < 0)
1380		goto alloc_fail2;
 
 
1381
1382	acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1383	if (!acm->ctrlurb)
1384		goto alloc_fail3;
1385
 
1386	for (i = 0; i < num_rx_buf; i++) {
1387		struct acm_rb *rb = &(acm->read_buffers[i]);
1388		struct urb *urb;
1389
1390		rb->base = usb_alloc_coherent(acm->dev, readsize, GFP_KERNEL,
1391								&rb->dma);
1392		if (!rb->base)
1393			goto alloc_fail4;
 
 
 
1394		rb->index = i;
1395		rb->instance = acm;
1396
1397		urb = usb_alloc_urb(0, GFP_KERNEL);
1398		if (!urb)
1399			goto alloc_fail4;
1400
 
 
1401		urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1402		urb->transfer_dma = rb->dma;
1403		if (usb_endpoint_xfer_int(epread))
1404			usb_fill_int_urb(urb, acm->dev, acm->in, rb->base,
 
 
1405					 acm->readsize,
1406					 acm_read_bulk_callback, rb,
1407					 acm->bInterval);
1408		else
1409			usb_fill_bulk_urb(urb, acm->dev, acm->in, rb->base,
 
 
1410					  acm->readsize,
1411					  acm_read_bulk_callback, rb);
 
1412
1413		acm->read_urbs[i] = urb;
1414		__set_bit(i, &acm->read_urbs_free);
1415	}
1416	for (i = 0; i < ACM_NW; i++) {
1417		struct acm_wb *snd = &(acm->wb[i]);
1418
1419		snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1420		if (snd->urb == NULL)
1421			goto alloc_fail5;
 
 
 
1422
1423		if (usb_endpoint_xfer_int(epwrite))
1424			usb_fill_int_urb(snd->urb, usb_dev, acm->out,
 
1425				NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1426		else
1427			usb_fill_bulk_urb(snd->urb, usb_dev, acm->out,
 
1428				NULL, acm->writesize, acm_write_bulk, snd);
1429		snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1430		if (quirks & SEND_ZERO_PACKET)
1431			snd->urb->transfer_flags |= URB_ZERO_PACKET;
1432		snd->instance = acm;
1433	}
1434
1435	usb_set_intfdata(intf, acm);
1436
1437	i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1438	if (i < 0)
1439		goto alloc_fail5;
1440
1441	if (h.usb_cdc_country_functional_desc) { /* export the country data */
1442		struct usb_cdc_country_functional_desc * cfd =
1443					h.usb_cdc_country_functional_desc;
1444
 
1445		acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1446		if (!acm->country_codes)
1447			goto skip_countries;
1448		acm->country_code_size = cfd->bLength - 4;
1449		memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1450							cfd->bLength - 4);
1451		acm->country_rel_date = cfd->iCountryCodeRelDate;
1452
1453		i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1454		if (i < 0) {
1455			kfree(acm->country_codes);
1456			acm->country_codes = NULL;
1457			acm->country_code_size = 0;
1458			goto skip_countries;
1459		}
1460
1461		i = device_create_file(&intf->dev,
1462						&dev_attr_iCountryCodeRelDate);
1463		if (i < 0) {
1464			device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1465			kfree(acm->country_codes);
1466			acm->country_codes = NULL;
1467			acm->country_code_size = 0;
1468			goto skip_countries;
1469		}
1470	}
1471
1472skip_countries:
1473	usb_fill_int_urb(acm->ctrlurb, usb_dev,
1474			 usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1475			 acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1476			 /* works around buggy devices */
1477			 epctrl->bInterval ? epctrl->bInterval : 16);
1478	acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1479	acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1480	acm->notification_buffer = NULL;
1481	acm->nb_index = 0;
1482	acm->nb_size = 0;
1483
1484	dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1485
 
 
1486	acm->line.dwDTERate = cpu_to_le32(9600);
1487	acm->line.bDataBits = 8;
1488	acm_set_line(acm, &acm->line);
1489
1490	usb_driver_claim_interface(&acm_driver, data_interface, acm);
1491	usb_set_intfdata(data_interface, acm);
1492
1493	tty_dev = tty_port_register_device(&acm->port, acm_tty_driver, minor,
1494			&control_interface->dev);
1495	if (IS_ERR(tty_dev)) {
1496		rv = PTR_ERR(tty_dev);
1497		goto alloc_fail6;
1498	}
1499
1500	if (quirks & CLEAR_HALT_CONDITIONS) {
1501		usb_clear_halt(usb_dev, acm->in);
1502		usb_clear_halt(usb_dev, acm->out);
1503	}
1504
1505	return 0;
1506alloc_fail6:
1507	if (acm->country_codes) {
1508		device_remove_file(&acm->control->dev,
1509				&dev_attr_wCountryCodes);
1510		device_remove_file(&acm->control->dev,
1511				&dev_attr_iCountryCodeRelDate);
1512		kfree(acm->country_codes);
1513	}
1514	device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1515alloc_fail5:
1516	usb_set_intfdata(intf, NULL);
1517	for (i = 0; i < ACM_NW; i++)
1518		usb_free_urb(acm->wb[i].urb);
1519alloc_fail4:
1520	for (i = 0; i < num_rx_buf; i++)
1521		usb_free_urb(acm->read_urbs[i]);
1522	acm_read_buffers_free(acm);
1523	usb_free_urb(acm->ctrlurb);
1524alloc_fail3:
1525	acm_write_buffers_free(acm);
1526alloc_fail2:
1527	usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1528alloc_fail1:
1529	tty_port_put(&acm->port);
 
1530alloc_fail:
1531	return rv;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1532}
1533
1534static void acm_disconnect(struct usb_interface *intf)
1535{
1536	struct acm *acm = usb_get_intfdata(intf);
 
1537	struct tty_struct *tty;
1538	int i;
1539
 
 
1540	/* sibling interface is already cleaning up */
1541	if (!acm)
1542		return;
1543
1544	mutex_lock(&acm->mutex);
1545	acm->disconnected = true;
1546	if (acm->country_codes) {
1547		device_remove_file(&acm->control->dev,
1548				&dev_attr_wCountryCodes);
1549		device_remove_file(&acm->control->dev,
1550				&dev_attr_iCountryCodeRelDate);
1551	}
1552	wake_up_all(&acm->wioctl);
1553	device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1554	usb_set_intfdata(acm->control, NULL);
1555	usb_set_intfdata(acm->data, NULL);
1556	mutex_unlock(&acm->mutex);
1557
1558	tty = tty_port_tty_get(&acm->port);
1559	if (tty) {
1560		tty_vhangup(tty);
1561		tty_kref_put(tty);
1562	}
1563
1564	acm_kill_urbs(acm);
1565	cancel_work_sync(&acm->work);
1566	cancel_delayed_work_sync(&acm->dwork);
1567
1568	tty_unregister_device(acm_tty_driver, acm->minor);
1569
1570	usb_free_urb(acm->ctrlurb);
1571	for (i = 0; i < ACM_NW; i++)
1572		usb_free_urb(acm->wb[i].urb);
1573	for (i = 0; i < acm->rx_buflimit; i++)
1574		usb_free_urb(acm->read_urbs[i]);
1575	acm_write_buffers_free(acm);
1576	usb_free_coherent(acm->dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1577	acm_read_buffers_free(acm);
1578
1579	kfree(acm->notification_buffer);
1580
1581	if (!acm->combined_interfaces)
1582		usb_driver_release_interface(&acm_driver, intf == acm->control ?
1583					acm->data : acm->control);
1584
1585	tty_port_put(&acm->port);
1586}
1587
1588#ifdef CONFIG_PM
1589static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1590{
1591	struct acm *acm = usb_get_intfdata(intf);
1592	int cnt;
1593
1594	spin_lock_irq(&acm->write_lock);
1595	if (PMSG_IS_AUTO(message)) {
1596		if (acm->transmitting) {
1597			spin_unlock_irq(&acm->write_lock);
 
 
 
 
1598			return -EBUSY;
1599		}
1600	}
 
 
 
1601	cnt = acm->susp_count++;
1602	spin_unlock_irq(&acm->write_lock);
 
1603
1604	if (cnt)
1605		return 0;
1606
1607	acm_kill_urbs(acm);
1608	cancel_work_sync(&acm->work);
1609	cancel_delayed_work_sync(&acm->dwork);
1610	acm->urbs_in_error_delay = 0;
1611
1612	return 0;
1613}
1614
1615static int acm_resume(struct usb_interface *intf)
1616{
1617	struct acm *acm = usb_get_intfdata(intf);
1618	struct urb *urb;
1619	int rv = 0;
 
1620
1621	spin_lock_irq(&acm->write_lock);
1622
1623	if (--acm->susp_count)
1624		goto out;
1625
1626	if (tty_port_initialized(&acm->port)) {
1627		rv = usb_submit_urb(acm->ctrlurb, GFP_ATOMIC);
1628
1629		for (;;) {
1630			urb = usb_get_from_anchor(&acm->delayed);
1631			if (!urb)
1632				break;
1633
1634			acm_start_wb(acm, urb->context);
 
 
 
 
 
 
 
1635		}
1636
1637		/*
1638		 * delayed error checking because we must
1639		 * do the write path at all cost
1640		 */
1641		if (rv < 0)
1642			goto out;
1643
1644		rv = acm_submit_read_urbs(acm, GFP_ATOMIC);
1645	}
1646out:
1647	spin_unlock_irq(&acm->write_lock);
1648
 
1649	return rv;
1650}
1651
1652static int acm_reset_resume(struct usb_interface *intf)
1653{
1654	struct acm *acm = usb_get_intfdata(intf);
 
1655
1656	if (tty_port_initialized(&acm->port))
1657		tty_port_tty_hangup(&acm->port, false);
 
 
 
 
 
1658
1659	return acm_resume(intf);
1660}
1661
1662#endif /* CONFIG_PM */
1663
1664static int acm_pre_reset(struct usb_interface *intf)
1665{
1666	struct acm *acm = usb_get_intfdata(intf);
1667
1668	clear_bit(EVENT_RX_STALL, &acm->flags);
1669	acm->nb_index = 0; /* pending control transfers are lost */
1670
1671	return 0;
1672}
1673
1674#define NOKIA_PCSUITE_ACM_INFO(x) \
1675		USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1676		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1677		USB_CDC_ACM_PROTO_VENDOR)
1678
1679#define SAMSUNG_PCSUITE_ACM_INFO(x) \
1680		USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1681		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1682		USB_CDC_ACM_PROTO_VENDOR)
1683
1684/*
1685 * USB driver structure.
1686 */
1687
1688static const struct usb_device_id acm_ids[] = {
1689	/* quirky and broken devices */
1690	{ USB_DEVICE(0x0424, 0x274e), /* Microchip Technology, Inc. (formerly SMSC) */
1691	  .driver_info = DISABLE_ECHO, }, /* DISABLE ECHO in termios flag */
1692	{ USB_DEVICE(0x076d, 0x0006), /* Denso Cradle CU-321 */
1693	.driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
1694	{ USB_DEVICE(0x17ef, 0x7000), /* Lenovo USB modem */
1695	.driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
1696	{ USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1697	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1698	},
1699	{ USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1700	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1701	},
1702	{ USB_DEVICE(0x0e8d, 0x2000), /* MediaTek Inc Preloader */
1703	.driver_info = DISABLE_ECHO, /* DISABLE ECHO in termios flag */
1704	},
1705	{ USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1706	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1707	},
1708	{ USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1709	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1710	},
1711	{ USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1712	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1713	},
1714	{ USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1715	.driver_info = SINGLE_RX_URB,
1716	},
1717	{ USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1718	.driver_info = SINGLE_RX_URB, /* firmware bug */
1719	},
1720	{ USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1721	.driver_info = SINGLE_RX_URB, /* firmware bug */
1722	},
1723	{ USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */
1724	.driver_info = SINGLE_RX_URB,
1725	},
1726	{ USB_DEVICE(0x1965, 0x0018), /* Uniden UBC125XLT */
1727	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1728	},
1729	{ USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1730	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1731	},
1732	{ USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1733	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1734	},
1735	{ USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1736	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1737	},
1738	{ USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1739	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1740	},
1741	{ USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1742	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1743	},
1744	{ USB_DEVICE(0x0572, 0x1349), /* Hiro (Conexant) USB MODEM H50228 */
1745	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1746	},
1747	{ USB_DEVICE(0x20df, 0x0001), /* Simtec Electronics Entropy Key */
1748	.driver_info = QUIRK_CONTROL_LINE_STATE, },
1749	{ USB_DEVICE(0x2184, 0x001c) },	/* GW Instek AFG-2225 */
1750	{ USB_DEVICE(0x2184, 0x0036) },	/* GW Instek AFG-125 */
1751	{ USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1752	},
1753	/* Motorola H24 HSPA module: */
1754	{ USB_DEVICE(0x22b8, 0x2d91) }, /* modem                                */
1755	{ USB_DEVICE(0x22b8, 0x2d92),   /* modem           + diagnostics        */
1756	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1757	},
1758	{ USB_DEVICE(0x22b8, 0x2d93),   /* modem + AT port                      */
1759	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1760	},
1761	{ USB_DEVICE(0x22b8, 0x2d95),   /* modem + AT port + diagnostics        */
1762	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1763	},
1764	{ USB_DEVICE(0x22b8, 0x2d96),   /* modem                         + NMEA */
1765	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1766	},
1767	{ USB_DEVICE(0x22b8, 0x2d97),   /* modem           + diagnostics + NMEA */
1768	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1769	},
1770	{ USB_DEVICE(0x22b8, 0x2d99),   /* modem + AT port               + NMEA */
1771	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1772	},
1773	{ USB_DEVICE(0x22b8, 0x2d9a),   /* modem + AT port + diagnostics + NMEA */
1774	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1775	},
1776
1777	{ USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1778	.driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1779					   data interface instead of
1780					   communications interface.
1781					   Maybe we should define a new
1782					   quirk for this. */
1783	},
1784	{ USB_DEVICE(0x0572, 0x1340), /* Conexant CX93010-2x UCMxx */
1785	.driver_info = NO_UNION_NORMAL,
1786	},
1787	{ USB_DEVICE(0x05f9, 0x4002), /* PSC Scanning, Magellan 800i */
1788	.driver_info = NO_UNION_NORMAL,
1789	},
1790	{ USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1791	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1792	},
1793	{ USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1794	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1795	},
1796	{ USB_DEVICE(0xfff0, 0x0100), /* DATECS FP-2000 */
1797	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1798	},
1799	{ USB_DEVICE(0x09d8, 0x0320), /* Elatec GmbH TWN3 */
1800	.driver_info = NO_UNION_NORMAL, /* has misplaced union descriptor */
1801	},
1802	{ USB_DEVICE(0x0ca6, 0xa050), /* Castles VEGA3000 */
1803	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1804	},
1805
1806	{ USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */
1807	.driver_info = CLEAR_HALT_CONDITIONS,
1808	},
1809
1810	/* Nokia S60 phones expose two ACM channels. The first is
1811	 * a modem and is picked up by the standard AT-command
1812	 * information below. The second is 'vendor-specific' but
1813	 * is treated as a serial device at the S60 end, so we want
1814	 * to expose it on Linux too. */
1815	{ NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1816	{ NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1817	{ NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1818	{ NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1819	{ NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1820	{ NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1821	{ NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1822	{ NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1823	{ NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1824	{ NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1825	{ NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1826	{ NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1827	{ NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1828	{ NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1829	{ NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1830	{ NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1831	{ NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1832	{ NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i  */
1833	{ NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1834	{ NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1835	{ NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1836	{ NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic &  */
1837	{ NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1838	{ NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1839	{ NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1840	{ NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1841	{ NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1842	{ NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1843	{ NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1844	{ NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1845	{ NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1846	{ NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB  */
1847	{ NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1848	{ NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1849	{ NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1850	{ NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1851	{ NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1852	{ NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1853	{ NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1854	{ NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3  */
1855	{ NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1856	{ NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1857	{ NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1858	{ NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1859	{ NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1860	{ NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1861	{ NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1862	{ NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1863	{ NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1864	{ NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1865	{ NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1866	{ NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1867	{ NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1868	{ NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1869	{ NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1870	{ NOKIA_PCSUITE_ACM_INFO(0x0335), }, /* Nokia E7 */
1871	{ NOKIA_PCSUITE_ACM_INFO(0x03cd), }, /* Nokia C7 */
1872	{ SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1873
1874	/* Support for Owen devices */
1875	{ USB_DEVICE(0x03eb, 0x0030), }, /* Owen SI30 */
1876
1877	/* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1878
 
 
 
 
 
1879	/* Support for Droids MuIn LCD */
1880	{ USB_DEVICE(0x04d8, 0x000b),
1881	.driver_info = NO_DATA_INTERFACE,
1882	},
1883
1884#if IS_ENABLED(CONFIG_INPUT_IMS_PCU)
1885	{ USB_DEVICE(0x04d8, 0x0082),	/* Application mode */
1886	.driver_info = IGNORE_DEVICE,
1887	},
1888	{ USB_DEVICE(0x04d8, 0x0083),	/* Bootloader mode */
1889	.driver_info = IGNORE_DEVICE,
1890	},
1891#endif
1892
1893#if IS_ENABLED(CONFIG_IR_TOY)
1894	{ USB_DEVICE(0x04d8, 0xfd08),
1895	.driver_info = IGNORE_DEVICE,
1896	},
1897#endif
1898
1899	/*Samsung phone in firmware update mode */
1900	{ USB_DEVICE(0x04e8, 0x685d),
1901	.driver_info = IGNORE_DEVICE,
1902	},
1903
1904	/* Exclude Infineon Flash Loader utility */
1905	{ USB_DEVICE(0x058b, 0x0041),
1906	.driver_info = IGNORE_DEVICE,
1907	},
1908
1909	{ USB_DEVICE(0x1bc7, 0x0021), /* Telit 3G ACM only composition */
1910	.driver_info = SEND_ZERO_PACKET,
1911	},
1912	{ USB_DEVICE(0x1bc7, 0x0023), /* Telit 3G ACM + ECM composition */
1913	.driver_info = SEND_ZERO_PACKET,
1914	},
1915
1916	/* control interfaces without any protocol set */
1917	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1918		USB_CDC_PROTO_NONE) },
1919
1920	/* control interfaces with various AT-command sets */
1921	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1922		USB_CDC_ACM_PROTO_AT_V25TER) },
1923	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1924		USB_CDC_ACM_PROTO_AT_PCCA101) },
1925	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1926		USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1927	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1928		USB_CDC_ACM_PROTO_AT_GSM) },
1929	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1930		USB_CDC_ACM_PROTO_AT_3G) },
1931	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1932		USB_CDC_ACM_PROTO_AT_CDMA) },
1933
1934	{ USB_DEVICE(0x1519, 0x0452), /* Intel 7260 modem */
1935	.driver_info = SEND_ZERO_PACKET,
1936	},
1937
1938	{ }
1939};
1940
1941MODULE_DEVICE_TABLE(usb, acm_ids);
1942
1943static struct usb_driver acm_driver = {
1944	.name =		"cdc_acm",
1945	.probe =	acm_probe,
1946	.disconnect =	acm_disconnect,
1947#ifdef CONFIG_PM
1948	.suspend =	acm_suspend,
1949	.resume =	acm_resume,
1950	.reset_resume =	acm_reset_resume,
1951#endif
1952	.pre_reset =	acm_pre_reset,
1953	.id_table =	acm_ids,
1954#ifdef CONFIG_PM
1955	.supports_autosuspend = 1,
1956#endif
1957	.disable_hub_initiated_lpm = 1,
1958};
1959
1960/*
1961 * TTY driver structures.
1962 */
1963
1964static const struct tty_operations acm_ops = {
1965	.install =		acm_tty_install,
1966	.open =			acm_tty_open,
1967	.close =		acm_tty_close,
1968	.cleanup =		acm_tty_cleanup,
1969	.hangup =		acm_tty_hangup,
1970	.write =		acm_tty_write,
1971	.write_room =		acm_tty_write_room,
1972	.ioctl =		acm_tty_ioctl,
1973	.throttle =		acm_tty_throttle,
1974	.unthrottle =		acm_tty_unthrottle,
1975	.chars_in_buffer =	acm_tty_chars_in_buffer,
1976	.break_ctl =		acm_tty_break_ctl,
1977	.set_termios =		acm_tty_set_termios,
1978	.tiocmget =		acm_tty_tiocmget,
1979	.tiocmset =		acm_tty_tiocmset,
1980	.get_serial =		get_serial_info,
1981	.set_serial =		set_serial_info,
1982	.get_icount =		acm_tty_get_icount,
1983};
1984
1985/*
1986 * Init / exit.
1987 */
1988
1989static int __init acm_init(void)
1990{
1991	int retval;
1992	acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1993	if (!acm_tty_driver)
1994		return -ENOMEM;
1995	acm_tty_driver->driver_name = "acm",
1996	acm_tty_driver->name = "ttyACM",
1997	acm_tty_driver->major = ACM_TTY_MAJOR,
1998	acm_tty_driver->minor_start = 0,
1999	acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
2000	acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
2001	acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
2002	acm_tty_driver->init_termios = tty_std_termios;
2003	acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
2004								HUPCL | CLOCAL;
2005	tty_set_operations(acm_tty_driver, &acm_ops);
2006
2007	retval = tty_register_driver(acm_tty_driver);
2008	if (retval) {
2009		put_tty_driver(acm_tty_driver);
2010		return retval;
2011	}
2012
2013	retval = usb_register(&acm_driver);
2014	if (retval) {
2015		tty_unregister_driver(acm_tty_driver);
2016		put_tty_driver(acm_tty_driver);
2017		return retval;
2018	}
2019
2020	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
2021
2022	return 0;
2023}
2024
2025static void __exit acm_exit(void)
2026{
2027	usb_deregister(&acm_driver);
2028	tty_unregister_driver(acm_tty_driver);
2029	put_tty_driver(acm_tty_driver);
2030	idr_destroy(&acm_minors);
2031}
2032
2033module_init(acm_init);
2034module_exit(acm_exit);
2035
2036MODULE_AUTHOR(DRIVER_AUTHOR);
2037MODULE_DESCRIPTION(DRIVER_DESC);
2038MODULE_LICENSE("GPL");
2039MODULE_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);