Linux Audio

Check our new training course

In-person Linux kernel drivers training

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