Linux Audio

Check our new training course

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