Linux Audio

Check our new training course

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