Linux Audio

Check our new training course

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);
v6.2
   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				const 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, USB_CTRL_SET_TIMEOUT);
 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 & USB_CDC_SERIAL_STATE_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 & USB_CDC_SERIAL_STATE_DSR)
 326			acm->iocount.dsr++;
 327		if (difference & USB_CDC_SERIAL_STATE_DCD)
 328			acm->iocount.dcd++;
 329		if (newctrl & USB_CDC_SERIAL_STATE_BREAK) {
 330			acm->iocount.brk++;
 331			tty_insert_flip_char(&acm->port, 0, TTY_BREAK);
 332		}
 333		if (newctrl & USB_CDC_SERIAL_STATE_RING_SIGNAL)
 334			acm->iocount.rng++;
 335		if (newctrl & USB_CDC_SERIAL_STATE_FRAMING)
 336			acm->iocount.frame++;
 337		if (newctrl & USB_CDC_SERIAL_STATE_PARITY)
 338			acm->iocount.parity++;
 339		if (newctrl & USB_CDC_SERIAL_STATE_OVERRUN)
 340			acm->iocount.overrun++;
 341		spin_unlock_irqrestore(&acm->read_lock, flags);
 342
 343		if (newctrl & USB_CDC_SERIAL_STATE_BREAK)
 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 = USB_CDC_CTRL_DTR | USB_CDC_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	set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
 689	acm->control->needs_remote_wakeup = 1;
 690
 691	acm->ctrlurb->dev = acm->dev;
 692	retval = usb_submit_urb(acm->ctrlurb, GFP_KERNEL);
 693	if (retval) {
 694		dev_err(&acm->control->dev,
 695			"%s - usb_submit_urb(ctrl irq) failed\n", __func__);
 696		goto error_submit_urb;
 697	}
 698
 699	acm_tty_set_termios(tty, NULL);
 
 
 700
 701	/*
 702	 * Unthrottle device in case the TTY was closed while throttled.
 703	 */
 704	clear_bit(ACM_THROTTLED, &acm->flags);
 705
 706	retval = acm_submit_read_urbs(acm, GFP_KERNEL);
 707	if (retval)
 708		goto error_submit_read_urbs;
 709
 710	usb_autopm_put_interface(acm->control);
 
 711
 712	mutex_unlock(&acm->mutex);
 
 
 
 713
 714	return 0;
 715
 716error_submit_read_urbs:
 717	for (i = 0; i < acm->rx_buflimit; i++)
 718		usb_kill_urb(acm->read_urbs[i]);
 719	usb_kill_urb(acm->ctrlurb);
 720error_submit_urb:
 721	usb_autopm_put_interface(acm->control);
 722error_get_interface:
 723disconnected:
 724	mutex_unlock(&acm->mutex);
 725
 726	return usb_translate_errors(retval);
 727}
 728
 729static void acm_port_destruct(struct tty_port *port)
 730{
 731	struct acm *acm = container_of(port, struct acm, port);
 732
 733	if (acm->minor != ACM_MINOR_INVALID)
 734		acm_release_minor(acm);
 735	usb_put_intf(acm->control);
 
 
 
 
 
 
 736	kfree(acm->country_codes);
 737	kfree(acm);
 738}
 739
 740static void acm_port_shutdown(struct tty_port *port)
 741{
 742	struct acm *acm = container_of(port, struct acm, port);
 743	struct urb *urb;
 744	struct acm_wb *wb;
 745
 746	/*
 747	 * Need to grab write_lock to prevent race with resume, but no need to
 748	 * hold it due to the tty-port initialised flag.
 749	 */
 750	acm_poison_urbs(acm);
 751	spin_lock_irq(&acm->write_lock);
 752	spin_unlock_irq(&acm->write_lock);
 753
 754	usb_autopm_get_interface_no_resume(acm->control);
 755	acm->control->needs_remote_wakeup = 0;
 756	usb_autopm_put_interface(acm->control);
 757
 758	for (;;) {
 759		urb = usb_get_from_anchor(&acm->delayed);
 760		if (!urb)
 761			break;
 762		wb = urb->context;
 763		wb->use = false;
 764		usb_autopm_put_interface_async(acm->control);
 765	}
 766
 767	acm_unpoison_urbs(acm);
 768
 769}
 770
 771static void acm_tty_cleanup(struct tty_struct *tty)
 772{
 773	struct acm *acm = tty->driver_data;
 774
 775	tty_port_put(&acm->port);
 776}
 777
 778static void acm_tty_hangup(struct tty_struct *tty)
 779{
 780	struct acm *acm = tty->driver_data;
 781
 782	tty_port_hangup(&acm->port);
 
 783}
 784
 785static void acm_tty_close(struct tty_struct *tty, struct file *filp)
 786{
 787	struct acm *acm = tty->driver_data;
 788
 789	tty_port_close(&acm->port, tty, filp);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 790}
 791
 792static int acm_tty_write(struct tty_struct *tty,
 793					const unsigned char *buf, int count)
 794{
 795	struct acm *acm = tty->driver_data;
 796	int stat;
 797	unsigned long flags;
 798	int wbn;
 799	struct acm_wb *wb;
 800
 
 
 801	if (!count)
 802		return 0;
 803
 804	dev_vdbg(&acm->data->dev, "%d bytes from tty layer\n", count);
 805
 806	spin_lock_irqsave(&acm->write_lock, flags);
 807	wbn = acm_wb_alloc(acm);
 808	if (wbn < 0) {
 809		spin_unlock_irqrestore(&acm->write_lock, flags);
 810		return 0;
 811	}
 812	wb = &acm->wb[wbn];
 813
 814	if (!acm->dev) {
 815		wb->use = false;
 816		spin_unlock_irqrestore(&acm->write_lock, flags);
 817		return -ENODEV;
 818	}
 819
 820	count = (count > acm->writesize) ? acm->writesize : count;
 821	dev_vdbg(&acm->data->dev, "writing %d bytes\n", count);
 822	memcpy(wb->buf, buf, count);
 823	wb->len = count;
 824
 825	stat = usb_autopm_get_interface_async(acm->control);
 826	if (stat) {
 827		wb->use = false;
 828		spin_unlock_irqrestore(&acm->write_lock, flags);
 829		return stat;
 830	}
 831
 832	if (acm->susp_count) {
 833		usb_anchor_urb(wb->urb, &acm->delayed);
 834		spin_unlock_irqrestore(&acm->write_lock, flags);
 835		return count;
 836	}
 837
 838	stat = acm_start_wb(acm, wb);
 839	spin_unlock_irqrestore(&acm->write_lock, flags);
 840
 
 841	if (stat < 0)
 842		return stat;
 843	return count;
 844}
 845
 846static unsigned int acm_tty_write_room(struct tty_struct *tty)
 847{
 848	struct acm *acm = tty->driver_data;
 
 
 849	/*
 850	 * Do not let the line discipline to know that we have a reserve,
 851	 * or it might get too enthusiastic.
 852	 */
 853	return acm_wb_is_avail(acm) ? acm->writesize : 0;
 854}
 855
 856static unsigned int acm_tty_chars_in_buffer(struct tty_struct *tty)
 857{
 858	struct acm *acm = tty->driver_data;
 859	/*
 860	 * if the device was unplugged then any remaining characters fell out
 861	 * of the connector ;)
 862	 */
 863	if (acm->disconnected)
 864		return 0;
 865	/*
 866	 * This is inaccurate (overcounts), but it works.
 867	 */
 868	return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
 869}
 870
 871static void acm_tty_throttle(struct tty_struct *tty)
 872{
 873	struct acm *acm = tty->driver_data;
 874
 875	set_bit(ACM_THROTTLED, &acm->flags);
 
 
 
 
 
 876}
 877
 878static void acm_tty_unthrottle(struct tty_struct *tty)
 879{
 880	struct acm *acm = tty->driver_data;
 
 881
 882	clear_bit(ACM_THROTTLED, &acm->flags);
 
 883
 884	/* Matches the smp_mb__after_atomic() in acm_read_bulk_callback(). */
 885	smp_mb();
 
 
 
 886
 887	acm_submit_read_urbs(acm, GFP_KERNEL);
 
 888}
 889
 890static int acm_tty_break_ctl(struct tty_struct *tty, int state)
 891{
 892	struct acm *acm = tty->driver_data;
 893	int retval;
 894
 
 895	retval = acm_send_break(acm, state ? 0xffff : 0);
 896	if (retval < 0)
 897		dev_dbg(&acm->control->dev,
 898			"%s - send break failed\n", __func__);
 899	return retval;
 900}
 901
 902static int acm_tty_tiocmget(struct tty_struct *tty)
 903{
 904	struct acm *acm = tty->driver_data;
 905
 906	return (acm->ctrlout & USB_CDC_CTRL_DTR ? TIOCM_DTR : 0) |
 907	       (acm->ctrlout & USB_CDC_CTRL_RTS ? TIOCM_RTS : 0) |
 908	       (acm->ctrlin  & USB_CDC_SERIAL_STATE_DSR ? TIOCM_DSR : 0) |
 909	       (acm->ctrlin  & USB_CDC_SERIAL_STATE_RING_SIGNAL ? TIOCM_RI : 0) |
 910	       (acm->ctrlin  & USB_CDC_SERIAL_STATE_DCD ? TIOCM_CD : 0) |
 
 
 
 911	       TIOCM_CTS;
 912}
 913
 914static int acm_tty_tiocmset(struct tty_struct *tty,
 915			    unsigned int set, unsigned int clear)
 916{
 917	struct acm *acm = tty->driver_data;
 918	unsigned int newctrl;
 919
 
 
 
 920	newctrl = acm->ctrlout;
 921	set = (set & TIOCM_DTR ? USB_CDC_CTRL_DTR : 0) |
 922	      (set & TIOCM_RTS ? USB_CDC_CTRL_RTS : 0);
 923	clear = (clear & TIOCM_DTR ? USB_CDC_CTRL_DTR : 0) |
 924		(clear & TIOCM_RTS ? USB_CDC_CTRL_RTS : 0);
 925
 926	newctrl = (newctrl & ~clear) | set;
 927
 928	if (acm->ctrlout == newctrl)
 929		return 0;
 930	return acm_set_control(acm, acm->ctrlout = newctrl);
 931}
 932
 933static int get_serial_info(struct tty_struct *tty, struct serial_struct *ss)
 
 934{
 935	struct acm *acm = tty->driver_data;
 936
 937	ss->line = acm->minor;
 938	ss->close_delay	= jiffies_to_msecs(acm->port.close_delay) / 10;
 939	ss->closing_wait = acm->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
 940				ASYNC_CLOSING_WAIT_NONE :
 941				jiffies_to_msecs(acm->port.closing_wait) / 10;
 942	return 0;
 943}
 944
 945static int set_serial_info(struct tty_struct *tty, struct serial_struct *ss)
 946{
 947	struct acm *acm = tty->driver_data;
 948	unsigned int closing_wait, close_delay;
 949	int retval = 0;
 950
 951	close_delay = msecs_to_jiffies(ss->close_delay * 10);
 952	closing_wait = ss->closing_wait == ASYNC_CLOSING_WAIT_NONE ?
 953			ASYNC_CLOSING_WAIT_NONE :
 954			msecs_to_jiffies(ss->closing_wait * 10);
 955
 956	mutex_lock(&acm->port.mutex);
 957
 958	if (!capable(CAP_SYS_ADMIN)) {
 959		if ((close_delay != acm->port.close_delay) ||
 960		    (closing_wait != acm->port.closing_wait))
 961			retval = -EPERM;
 962	} else {
 963		acm->port.close_delay  = close_delay;
 964		acm->port.closing_wait = closing_wait;
 965	}
 966
 967	mutex_unlock(&acm->port.mutex);
 968	return retval;
 969}
 970
 971static int wait_serial_change(struct acm *acm, unsigned long arg)
 972{
 973	int rv = 0;
 974	DECLARE_WAITQUEUE(wait, current);
 975	struct async_icount old, new;
 
 
 976
 977	do {
 978		spin_lock_irq(&acm->read_lock);
 979		old = acm->oldcount;
 980		new = acm->iocount;
 981		acm->oldcount = new;
 982		spin_unlock_irq(&acm->read_lock);
 983
 984		if ((arg & TIOCM_DSR) &&
 985			old.dsr != new.dsr)
 986			break;
 987		if ((arg & TIOCM_CD)  &&
 988			old.dcd != new.dcd)
 989			break;
 990		if ((arg & TIOCM_RI) &&
 991			old.rng != new.rng)
 992			break;
 993
 994		add_wait_queue(&acm->wioctl, &wait);
 995		set_current_state(TASK_INTERRUPTIBLE);
 996		schedule();
 997		remove_wait_queue(&acm->wioctl, &wait);
 998		if (acm->disconnected) {
 999			if (arg & TIOCM_CD)
1000				break;
1001			else
1002				rv = -ENODEV;
1003		} else {
1004			if (signal_pending(current))
1005				rv = -ERESTARTSYS;
1006		}
1007	} while (!rv);
1008
1009	
1010
1011	return rv;
1012}
1013
1014static int acm_tty_get_icount(struct tty_struct *tty,
1015					struct serial_icounter_struct *icount)
1016{
1017	struct acm *acm = tty->driver_data;
1018
1019	icount->dsr = acm->iocount.dsr;
1020	icount->rng = acm->iocount.rng;
1021	icount->dcd = acm->iocount.dcd;
1022	icount->frame = acm->iocount.frame;
1023	icount->overrun = acm->iocount.overrun;
1024	icount->parity = acm->iocount.parity;
1025	icount->brk = acm->iocount.brk;
1026
1027	return 0;
1028}
1029
1030static int acm_tty_ioctl(struct tty_struct *tty,
1031					unsigned int cmd, unsigned long arg)
1032{
1033	struct acm *acm = tty->driver_data;
1034	int rv = -ENOIOCTLCMD;
1035
1036	switch (cmd) {
1037	case TIOCMIWAIT:
1038		rv = usb_autopm_get_interface(acm->control);
1039		if (rv < 0) {
1040			rv = -EIO;
1041			break;
1042		}
1043		rv = wait_serial_change(acm, arg);
1044		usb_autopm_put_interface(acm->control);
1045		break;
1046	}
1047
1048	return rv;
1049}
1050
1051static void acm_tty_set_termios(struct tty_struct *tty,
1052				const struct ktermios *termios_old)
1053{
1054	struct acm *acm = tty->driver_data;
1055	struct ktermios *termios = &tty->termios;
1056	struct usb_cdc_line_coding newline;
1057	int newctrl = acm->ctrlout;
1058
 
 
 
1059	newline.dwDTERate = cpu_to_le32(tty_get_baud_rate(tty));
1060	newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
1061	newline.bParityType = termios->c_cflag & PARENB ?
1062				(termios->c_cflag & PARODD ? 1 : 2) +
1063				(termios->c_cflag & CMSPAR ? 2 : 0) : 0;
1064	newline.bDataBits = tty_get_char_size(termios->c_cflag);
1065
1066	/* FIXME: Needs to clear unsupported bits in the termios */
1067	acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
1068
1069	if (C_BAUD(tty) == B0) {
1070		newline.dwDTERate = acm->line.dwDTERate;
1071		newctrl &= ~USB_CDC_CTRL_DTR;
1072	} else if (termios_old && (termios_old->c_cflag & CBAUD) == B0) {
1073		newctrl |=  USB_CDC_CTRL_DTR;
1074	}
1075
1076	if (newctrl != acm->ctrlout)
1077		acm_set_control(acm, acm->ctrlout = newctrl);
1078
1079	if (memcmp(&acm->line, &newline, sizeof newline)) {
1080		memcpy(&acm->line, &newline, sizeof newline);
1081		dev_dbg(&acm->control->dev, "%s - set line: %d %d %d %d\n",
1082			__func__,
1083			le32_to_cpu(newline.dwDTERate),
1084			newline.bCharFormat, newline.bParityType,
1085			newline.bDataBits);
1086		acm_set_line(acm, &acm->line);
1087	}
1088}
1089
1090static const struct tty_port_operations acm_port_ops = {
1091	.dtr_rts = acm_port_dtr_rts,
1092	.shutdown = acm_port_shutdown,
1093	.activate = acm_port_activate,
1094	.destruct = acm_port_destruct,
1095};
1096
1097/*
1098 * USB probe and disconnect routines.
1099 */
1100
1101/* Little helpers: write/read buffers free */
1102static void acm_write_buffers_free(struct acm *acm)
1103{
1104	int i;
1105	struct acm_wb *wb;
 
1106
1107	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++)
1108		usb_free_coherent(acm->dev, acm->writesize, wb->buf, wb->dmah);
1109}
1110
1111static void acm_read_buffers_free(struct acm *acm)
1112{
 
1113	int i;
1114
1115	for (i = 0; i < acm->rx_buflimit; i++)
1116		usb_free_coherent(acm->dev, acm->readsize,
1117			  acm->read_buffers[i].base, acm->read_buffers[i].dma);
1118}
1119
1120/* Little helper: write buffers allocate */
1121static int acm_write_buffers_alloc(struct acm *acm)
1122{
1123	int i;
1124	struct acm_wb *wb;
1125
1126	for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
1127		wb->buf = usb_alloc_coherent(acm->dev, acm->writesize, GFP_KERNEL,
1128		    &wb->dmah);
1129		if (!wb->buf) {
1130			while (i != 0) {
1131				--i;
1132				--wb;
1133				usb_free_coherent(acm->dev, acm->writesize,
1134				    wb->buf, wb->dmah);
1135			}
1136			return -ENOMEM;
1137		}
1138	}
1139	return 0;
1140}
1141
1142static int acm_probe(struct usb_interface *intf,
1143		     const struct usb_device_id *id)
1144{
1145	struct usb_cdc_union_desc *union_header = NULL;
1146	struct usb_cdc_call_mgmt_descriptor *cmgmd = NULL;
1147	unsigned char *buffer = intf->altsetting->extra;
1148	int buflen = intf->altsetting->extralen;
1149	struct usb_interface *control_interface;
1150	struct usb_interface *data_interface;
1151	struct usb_endpoint_descriptor *epctrl = NULL;
1152	struct usb_endpoint_descriptor *epread = NULL;
1153	struct usb_endpoint_descriptor *epwrite = NULL;
1154	struct usb_device *usb_dev = interface_to_usbdev(intf);
1155	struct usb_cdc_parsed_header h;
1156	struct acm *acm;
1157	int minor;
1158	int ctrlsize, readsize;
1159	u8 *buf;
1160	int call_intf_num = -1;
1161	int data_intf_num = -1;
 
 
1162	unsigned long quirks;
1163	int num_rx_buf;
1164	int i;
1165	int combined_interfaces = 0;
1166	struct device *tty_dev;
1167	int rv = -ENOMEM;
1168	int res;
1169
1170	/* normal quirks */
1171	quirks = (unsigned long)id->driver_info;
1172
1173	if (quirks == IGNORE_DEVICE)
1174		return -ENODEV;
1175
1176	memset(&h, 0x00, sizeof(struct usb_cdc_parsed_header));
1177
1178	num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
1179
1180	/* handle quirks deadly to normal probing*/
1181	if (quirks == NO_UNION_NORMAL) {
1182		data_interface = usb_ifnum_to_if(usb_dev, 1);
1183		control_interface = usb_ifnum_to_if(usb_dev, 0);
1184		/* we would crash */
1185		if (!data_interface || !control_interface)
1186			return -ENODEV;
1187		goto skip_normal_probe;
1188	}
1189
1190	/* normal probing*/
1191	if (!buffer) {
1192		dev_err(&intf->dev, "Weird descriptor references\n");
1193		return -EINVAL;
1194	}
1195
1196	if (!buflen) {
1197		if (intf->cur_altsetting->endpoint &&
1198				intf->cur_altsetting->endpoint->extralen &&
1199				intf->cur_altsetting->endpoint->extra) {
1200			dev_dbg(&intf->dev,
1201				"Seeking extra descriptors on endpoint\n");
1202			buflen = intf->cur_altsetting->endpoint->extralen;
1203			buffer = intf->cur_altsetting->endpoint->extra;
1204		} else {
1205			dev_err(&intf->dev,
1206				"Zero length descriptor references\n");
1207			return -EINVAL;
1208		}
1209	}
1210
1211	cdc_parse_cdc_header(&h, intf, buffer, buflen);
1212	union_header = h.usb_cdc_union_desc;
1213	cmgmd = h.usb_cdc_call_mgmt_descriptor;
1214	if (cmgmd)
1215		call_intf_num = cmgmd->bDataInterface;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1216
1217	if (!union_header) {
1218		if (intf->cur_altsetting->desc.bNumEndpoints == 3) {
1219			dev_dbg(&intf->dev, "No union descriptor, assuming single interface\n");
1220			combined_interfaces = 1;
1221			control_interface = data_interface = intf;
1222			goto look_for_collapsed_interface;
1223		} else if (call_intf_num > 0) {
1224			dev_dbg(&intf->dev, "No union descriptor, using call management descriptor\n");
1225			data_intf_num = call_intf_num;
1226			data_interface = usb_ifnum_to_if(usb_dev, data_intf_num);
 
 
 
1227			control_interface = intf;
1228		} else {
1229			dev_dbg(&intf->dev, "No union descriptor, giving up\n");
1230			return -ENODEV;
 
 
 
 
 
 
 
1231		}
1232	} else {
1233		int class = -1;
1234
1235		data_intf_num = union_header->bSlaveInterface0;
1236		control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
1237		data_interface = usb_ifnum_to_if(usb_dev, data_intf_num);
1238
1239		if (control_interface)
1240			class = control_interface->cur_altsetting->desc.bInterfaceClass;
1241
1242		if (class != USB_CLASS_COMM && class != USB_CLASS_CDC_DATA) {
1243			dev_dbg(&intf->dev, "Broken union descriptor, assuming single interface\n");
1244			combined_interfaces = 1;
1245			control_interface = data_interface = intf;
1246			goto look_for_collapsed_interface;
1247		}
1248	}
1249
1250	if (!control_interface || !data_interface) {
1251		dev_dbg(&intf->dev, "no interfaces\n");
1252		return -ENODEV;
1253	}
1254
1255	if (data_intf_num != call_intf_num)
1256		dev_dbg(&intf->dev, "Separate call control interface. That is not fully supported.\n");
1257
1258	if (control_interface == data_interface) {
1259		/* some broken devices designed for windows work this way */
1260		dev_warn(&intf->dev,"Control and data interfaces are not separated!\n");
1261		combined_interfaces = 1;
1262		/* a popular other OS doesn't use it */
1263		quirks |= NO_CAP_LINE;
1264		if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1265			dev_err(&intf->dev, "This needs exactly 3 endpoints\n");
1266			return -EINVAL;
1267		}
1268look_for_collapsed_interface:
1269		res = usb_find_common_endpoints(data_interface->cur_altsetting,
1270				&epread, &epwrite, &epctrl, NULL);
1271		if (res)
1272			return res;
1273
1274		goto made_compressed_probe;
 
 
 
 
 
 
 
 
 
 
 
1275	}
1276
1277skip_normal_probe:
1278
1279	/*workaround for switched interfaces */
1280	if (data_interface->cur_altsetting->desc.bInterfaceClass != USB_CLASS_CDC_DATA) {
1281		if (control_interface->cur_altsetting->desc.bInterfaceClass == USB_CLASS_CDC_DATA) {
 
 
 
1282			dev_dbg(&intf->dev,
1283				"Your device has switched interfaces.\n");
1284			swap(control_interface, data_interface);
 
 
1285		} else {
1286			return -EINVAL;
1287		}
1288	}
1289
1290	/* Accept probe requests only for the control interface */
1291	if (!combined_interfaces && intf != control_interface)
1292		return -ENODEV;
1293
1294	if (data_interface->cur_altsetting->desc.bNumEndpoints < 2 ||
1295	    control_interface->cur_altsetting->desc.bNumEndpoints == 0)
 
 
 
 
 
 
1296		return -EINVAL;
1297
1298	epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1299	epread = &data_interface->cur_altsetting->endpoint[0].desc;
1300	epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1301
1302
1303	/* workaround for switched endpoints */
1304	if (!usb_endpoint_dir_in(epread)) {
1305		/* descriptors are swapped */
 
1306		dev_dbg(&intf->dev,
1307			"The data interface has switched endpoints\n");
1308		swap(epread, epwrite);
 
 
1309	}
1310made_compressed_probe:
1311	dev_dbg(&intf->dev, "interfaces are valid\n");
 
 
 
 
 
 
1312
1313	acm = kzalloc(sizeof(struct acm), GFP_KERNEL);
1314	if (!acm)
1315		return -ENOMEM;
1316
1317	tty_port_init(&acm->port);
1318	acm->port.ops = &acm_port_ops;
1319
1320	ctrlsize = usb_endpoint_maxp(epctrl);
1321	readsize = usb_endpoint_maxp(epread) *
1322				(quirks == SINGLE_RX_URB ? 1 : 2);
1323	acm->combined_interfaces = combined_interfaces;
1324	acm->writesize = usb_endpoint_maxp(epwrite) * 20;
1325	acm->control = control_interface;
1326	acm->data = data_interface;
1327
1328	usb_get_intf(acm->control); /* undone in destruct() */
1329
1330	minor = acm_alloc_minor(acm);
1331	if (minor < 0) {
1332		acm->minor = ACM_MINOR_INVALID;
1333		goto err_put_port;
1334	}
1335
1336	acm->minor = minor;
1337	acm->dev = usb_dev;
1338	if (h.usb_cdc_acm_descriptor)
1339		acm->ctrl_caps = h.usb_cdc_acm_descriptor->bmCapabilities;
1340	if (quirks & NO_CAP_LINE)
1341		acm->ctrl_caps &= ~USB_CDC_CAP_LINE;
1342	acm->ctrlsize = ctrlsize;
1343	acm->readsize = readsize;
1344	acm->rx_buflimit = num_rx_buf;
1345	INIT_DELAYED_WORK(&acm->dwork, acm_softint);
1346	init_waitqueue_head(&acm->wioctl);
1347	spin_lock_init(&acm->write_lock);
1348	spin_lock_init(&acm->read_lock);
1349	mutex_init(&acm->mutex);
1350	if (usb_endpoint_xfer_int(epread)) {
 
 
1351		acm->bInterval = epread->bInterval;
1352		acm->in = usb_rcvintpipe(usb_dev, epread->bEndpointAddress);
1353	} else {
1354		acm->in = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1355	}
1356	if (usb_endpoint_xfer_int(epwrite))
1357		acm->out = usb_sndintpipe(usb_dev, epwrite->bEndpointAddress);
1358	else
1359		acm->out = usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress);
1360	init_usb_anchor(&acm->delayed);
1361	acm->quirks = quirks;
1362
1363	buf = usb_alloc_coherent(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1364	if (!buf)
1365		goto err_put_port;
 
 
1366	acm->ctrl_buffer = buf;
1367
1368	if (acm_write_buffers_alloc(acm) < 0)
1369		goto err_free_ctrl_buffer;
 
 
1370
1371	acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1372	if (!acm->ctrlurb)
1373		goto err_free_write_buffers;
1374
 
1375	for (i = 0; i < num_rx_buf; i++) {
1376		struct acm_rb *rb = &(acm->read_buffers[i]);
1377		struct urb *urb;
1378
1379		rb->base = usb_alloc_coherent(acm->dev, readsize, GFP_KERNEL,
1380								&rb->dma);
1381		if (!rb->base)
1382			goto err_free_read_urbs;
 
 
 
1383		rb->index = i;
1384		rb->instance = acm;
1385
1386		urb = usb_alloc_urb(0, GFP_KERNEL);
1387		if (!urb)
1388			goto err_free_read_urbs;
1389
 
 
1390		urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1391		urb->transfer_dma = rb->dma;
1392		if (usb_endpoint_xfer_int(epread))
1393			usb_fill_int_urb(urb, acm->dev, acm->in, rb->base,
 
 
1394					 acm->readsize,
1395					 acm_read_bulk_callback, rb,
1396					 acm->bInterval);
1397		else
1398			usb_fill_bulk_urb(urb, acm->dev, acm->in, rb->base,
 
 
1399					  acm->readsize,
1400					  acm_read_bulk_callback, rb);
 
1401
1402		acm->read_urbs[i] = urb;
1403		__set_bit(i, &acm->read_urbs_free);
1404	}
1405	for (i = 0; i < ACM_NW; i++) {
1406		struct acm_wb *snd = &(acm->wb[i]);
1407
1408		snd->urb = usb_alloc_urb(0, GFP_KERNEL);
1409		if (!snd->urb)
1410			goto err_free_write_urbs;
 
 
 
1411
1412		if (usb_endpoint_xfer_int(epwrite))
1413			usb_fill_int_urb(snd->urb, usb_dev, acm->out,
 
1414				NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1415		else
1416			usb_fill_bulk_urb(snd->urb, usb_dev, acm->out,
 
1417				NULL, acm->writesize, acm_write_bulk, snd);
1418		snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1419		if (quirks & SEND_ZERO_PACKET)
1420			snd->urb->transfer_flags |= URB_ZERO_PACKET;
1421		snd->instance = acm;
1422	}
1423
1424	usb_set_intfdata(intf, acm);
1425
1426	i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1427	if (i < 0)
1428		goto err_free_write_urbs;
1429
1430	if (h.usb_cdc_country_functional_desc) { /* export the country data */
1431		struct usb_cdc_country_functional_desc * cfd =
1432					h.usb_cdc_country_functional_desc;
1433
 
1434		acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1435		if (!acm->country_codes)
1436			goto skip_countries;
1437		acm->country_code_size = cfd->bLength - 4;
1438		memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0,
1439							cfd->bLength - 4);
1440		acm->country_rel_date = cfd->iCountryCodeRelDate;
1441
1442		i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1443		if (i < 0) {
1444			kfree(acm->country_codes);
1445			acm->country_codes = NULL;
1446			acm->country_code_size = 0;
1447			goto skip_countries;
1448		}
1449
1450		i = device_create_file(&intf->dev,
1451						&dev_attr_iCountryCodeRelDate);
1452		if (i < 0) {
1453			device_remove_file(&intf->dev, &dev_attr_wCountryCodes);
1454			kfree(acm->country_codes);
1455			acm->country_codes = NULL;
1456			acm->country_code_size = 0;
1457			goto skip_countries;
1458		}
1459	}
1460
1461skip_countries:
1462	usb_fill_int_urb(acm->ctrlurb, usb_dev,
1463			 usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1464			 acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm,
1465			 /* works around buggy devices */
1466			 epctrl->bInterval ? epctrl->bInterval : 16);
1467	acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1468	acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1469	acm->notification_buffer = NULL;
1470	acm->nb_index = 0;
1471	acm->nb_size = 0;
 
1472
1473	acm->line.dwDTERate = cpu_to_le32(9600);
1474	acm->line.bDataBits = 8;
1475	acm_set_line(acm, &acm->line);
1476
1477	if (!acm->combined_interfaces) {
1478		rv = usb_driver_claim_interface(&acm_driver, data_interface, acm);
1479		if (rv)
1480			goto err_remove_files;
1481	}
1482
1483	tty_dev = tty_port_register_device(&acm->port, acm_tty_driver, minor,
1484			&control_interface->dev);
1485	if (IS_ERR(tty_dev)) {
1486		rv = PTR_ERR(tty_dev);
1487		goto err_release_data_interface;
1488	}
1489
1490	if (quirks & CLEAR_HALT_CONDITIONS) {
1491		usb_clear_halt(usb_dev, acm->in);
1492		usb_clear_halt(usb_dev, acm->out);
1493	}
1494
1495	dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1496
1497	return 0;
1498
1499err_release_data_interface:
1500	if (!acm->combined_interfaces) {
1501		/* Clear driver data so that disconnect() returns early. */
1502		usb_set_intfdata(data_interface, NULL);
1503		usb_driver_release_interface(&acm_driver, data_interface);
1504	}
1505err_remove_files:
1506	if (acm->country_codes) {
1507		device_remove_file(&acm->control->dev,
1508				&dev_attr_wCountryCodes);
1509		device_remove_file(&acm->control->dev,
1510				&dev_attr_iCountryCodeRelDate);
1511	}
1512	device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1513err_free_write_urbs:
1514	for (i = 0; i < ACM_NW; i++)
1515		usb_free_urb(acm->wb[i].urb);
1516err_free_read_urbs:
1517	for (i = 0; i < num_rx_buf; i++)
1518		usb_free_urb(acm->read_urbs[i]);
1519	acm_read_buffers_free(acm);
1520	usb_free_urb(acm->ctrlurb);
1521err_free_write_buffers:
1522	acm_write_buffers_free(acm);
1523err_free_ctrl_buffer:
1524	usb_free_coherent(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1525err_put_port:
1526	tty_port_put(&acm->port);
 
 
 
 
 
 
 
1527
1528	return rv;
 
 
 
 
 
 
 
 
1529}
1530
1531static void acm_disconnect(struct usb_interface *intf)
1532{
1533	struct acm *acm = usb_get_intfdata(intf);
 
1534	struct tty_struct *tty;
1535	int i;
1536
1537	/* sibling interface is already cleaning up */
1538	if (!acm)
1539		return;
1540
1541	acm->disconnected = true;
1542	/*
1543	 * there is a circular dependency. acm_softint() can resubmit
1544	 * the URBs in error handling so we need to block any
1545	 * submission right away
1546	 */
1547	acm_poison_urbs(acm);
1548	mutex_lock(&acm->mutex);
1549	if (acm->country_codes) {
1550		device_remove_file(&acm->control->dev,
1551				&dev_attr_wCountryCodes);
1552		device_remove_file(&acm->control->dev,
1553				&dev_attr_iCountryCodeRelDate);
1554	}
1555	wake_up_all(&acm->wioctl);
1556	device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
 
1557	usb_set_intfdata(acm->control, NULL);
1558	usb_set_intfdata(acm->data, NULL);
1559	mutex_unlock(&acm->mutex);
1560
1561	tty = tty_port_tty_get(&acm->port);
1562	if (tty) {
1563		tty_vhangup(tty);
1564		tty_kref_put(tty);
1565	}
1566
1567	cancel_delayed_work_sync(&acm->dwork);
1568
1569	tty_unregister_device(acm_tty_driver, acm->minor);
1570
1571	usb_free_urb(acm->ctrlurb);
1572	for (i = 0; i < ACM_NW; i++)
1573		usb_free_urb(acm->wb[i].urb);
1574	for (i = 0; i < acm->rx_buflimit; i++)
1575		usb_free_urb(acm->read_urbs[i]);
1576	acm_write_buffers_free(acm);
1577	usb_free_coherent(acm->dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
 
1578	acm_read_buffers_free(acm);
1579
1580	kfree(acm->notification_buffer);
1581
1582	if (!acm->combined_interfaces)
1583		usb_driver_release_interface(&acm_driver, intf == acm->control ?
1584					acm->data : acm->control);
1585
1586	tty_port_put(&acm->port);
 
 
 
 
 
 
 
 
 
 
 
1587}
1588
1589#ifdef CONFIG_PM
1590static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1591{
1592	struct acm *acm = usb_get_intfdata(intf);
1593	int cnt;
1594
1595	spin_lock_irq(&acm->write_lock);
1596	if (PMSG_IS_AUTO(message)) {
1597		if (acm->transmitting) {
1598			spin_unlock_irq(&acm->write_lock);
 
 
 
1599			return -EBUSY;
1600		}
1601	}
 
 
 
1602	cnt = acm->susp_count++;
1603	spin_unlock_irq(&acm->write_lock);
 
1604
1605	if (cnt)
1606		return 0;
 
 
 
 
 
1607
1608	acm_poison_urbs(acm);
1609	cancel_delayed_work_sync(&acm->dwork);
1610	acm->urbs_in_error_delay = 0;
1611
 
1612	return 0;
1613}
1614
1615static int acm_resume(struct usb_interface *intf)
1616{
1617	struct acm *acm = usb_get_intfdata(intf);
1618	struct urb *urb;
1619	int rv = 0;
 
1620
1621	spin_lock_irq(&acm->write_lock);
 
 
 
1622
1623	if (--acm->susp_count)
1624		goto out;
1625
1626	acm_unpoison_urbs(acm);
 
 
1627
1628	if (tty_port_initialized(&acm->port)) {
1629		rv = usb_submit_urb(acm->ctrlurb, GFP_ATOMIC);
1630
1631		for (;;) {
1632			urb = usb_get_from_anchor(&acm->delayed);
1633			if (!urb)
1634				break;
1635
1636			acm_start_wb(acm, urb->context);
1637		}
1638
1639		/*
1640		 * delayed error checking because we must
1641		 * do the write path at all cost
1642		 */
1643		if (rv < 0)
1644			goto out;
1645
1646		rv = acm_submit_read_urbs(acm, GFP_ATOMIC);
1647	}
1648out:
1649	spin_unlock_irq(&acm->write_lock);
1650
 
 
1651	return rv;
1652}
1653
1654static int acm_reset_resume(struct usb_interface *intf)
1655{
1656	struct acm *acm = usb_get_intfdata(intf);
 
1657
1658	if (tty_port_initialized(&acm->port))
1659		tty_port_tty_hangup(&acm->port, false);
1660
 
 
 
 
 
 
1661	return acm_resume(intf);
1662}
1663
1664#endif /* CONFIG_PM */
1665
1666static int acm_pre_reset(struct usb_interface *intf)
1667{
1668	struct acm *acm = usb_get_intfdata(intf);
1669
1670	clear_bit(EVENT_RX_STALL, &acm->flags);
1671	acm->nb_index = 0; /* pending control transfers are lost */
1672
1673	return 0;
1674}
1675
1676#define NOKIA_PCSUITE_ACM_INFO(x) \
1677		USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1678		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1679		USB_CDC_ACM_PROTO_VENDOR)
1680
1681#define SAMSUNG_PCSUITE_ACM_INFO(x) \
1682		USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1683		USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1684		USB_CDC_ACM_PROTO_VENDOR)
1685
1686/*
1687 * USB driver structure.
1688 */
1689
1690static const struct usb_device_id acm_ids[] = {
1691	/* quirky and broken devices */
1692	{ USB_DEVICE(0x0424, 0x274e), /* Microchip Technology, Inc. (formerly SMSC) */
1693	  .driver_info = DISABLE_ECHO, }, /* DISABLE ECHO in termios flag */
1694	{ USB_DEVICE(0x076d, 0x0006), /* Denso Cradle CU-321 */
1695	.driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
1696	{ USB_DEVICE(0x17ef, 0x7000), /* Lenovo USB modem */
1697	.driver_info = NO_UNION_NORMAL, },/* has no union descriptor */
1698	{ USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1699	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1700	},
1701	{ USB_DEVICE(0x045b, 0x023c),	/* Renesas USB Download mode */
1702	.driver_info = DISABLE_ECHO,	/* Don't echo banner */
1703	},
1704	{ USB_DEVICE(0x045b, 0x0248),	/* Renesas USB Download mode */
1705	.driver_info = DISABLE_ECHO,	/* Don't echo banner */
1706	},
1707	{ USB_DEVICE(0x045b, 0x024D),	/* Renesas USB Download mode */
1708	.driver_info = DISABLE_ECHO,	/* Don't echo banner */
1709	},
1710	{ USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1711	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1712	},
1713	{ USB_DEVICE(0x0e8d, 0x2000), /* MediaTek Inc Preloader */
1714	.driver_info = DISABLE_ECHO, /* DISABLE ECHO in termios flag */
1715	},
1716	{ USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1717	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1718	},
1719	{ USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1720	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1721	},
1722	{ USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1723	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1724	},
1725	{ USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1726	.driver_info = SINGLE_RX_URB,
1727	},
1728	{ USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1729	.driver_info = SINGLE_RX_URB, /* firmware bug */
1730	},
1731	{ USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1732	.driver_info = SINGLE_RX_URB, /* firmware bug */
1733	},
1734	{ USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */
1735	.driver_info = SINGLE_RX_URB,
1736	},
1737	{ USB_DEVICE(0x1965, 0x0018), /* Uniden UBC125XLT */
1738	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1739	},
1740	{ USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1741	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1742	},
1743	{ USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1744	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1745	},
1746	{ USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1747	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1748	},
1749	{ USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1750	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1751	},
1752	{ USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1753	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1754	},
1755	{ USB_DEVICE(0x0572, 0x1349), /* Hiro (Conexant) USB MODEM H50228 */
1756	.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1757	},
1758	{ USB_DEVICE(0x20df, 0x0001), /* Simtec Electronics Entropy Key */
1759	.driver_info = QUIRK_CONTROL_LINE_STATE, },
1760	{ USB_DEVICE(0x2184, 0x001c) },	/* GW Instek AFG-2225 */
1761	{ USB_DEVICE(0x2184, 0x0036) },	/* GW Instek AFG-125 */
1762	{ USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1763	},
1764	/* Motorola H24 HSPA module: */
1765	{ USB_DEVICE(0x22b8, 0x2d91) }, /* modem                                */
1766	{ USB_DEVICE(0x22b8, 0x2d92),   /* modem           + diagnostics        */
1767	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1768	},
1769	{ USB_DEVICE(0x22b8, 0x2d93),   /* modem + AT port                      */
1770	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1771	},
1772	{ USB_DEVICE(0x22b8, 0x2d95),   /* modem + AT port + diagnostics        */
1773	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1774	},
1775	{ USB_DEVICE(0x22b8, 0x2d96),   /* modem                         + NMEA */
1776	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1777	},
1778	{ USB_DEVICE(0x22b8, 0x2d97),   /* modem           + diagnostics + NMEA */
1779	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1780	},
1781	{ USB_DEVICE(0x22b8, 0x2d99),   /* modem + AT port               + NMEA */
1782	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1783	},
1784	{ USB_DEVICE(0x22b8, 0x2d9a),   /* modem + AT port + diagnostics + NMEA */
1785	.driver_info = NO_UNION_NORMAL, /* handle only modem interface          */
1786	},
1787
1788	{ USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1789	.driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1790					   data interface instead of
1791					   communications interface.
1792					   Maybe we should define a new
1793					   quirk for this. */
1794	},
1795	{ USB_DEVICE(0x0572, 0x1340), /* Conexant CX93010-2x UCMxx */
1796	.driver_info = NO_UNION_NORMAL,
1797	},
1798	{ USB_DEVICE(0x05f9, 0x4002), /* PSC Scanning, Magellan 800i */
1799	.driver_info = NO_UNION_NORMAL,
1800	},
1801	{ USB_DEVICE(0x1bbb, 0x0003), /* Alcatel OT-I650 */
1802	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1803	},
1804	{ USB_DEVICE(0x1576, 0x03b1), /* Maretron USB100 */
1805	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1806	},
1807	{ USB_DEVICE(0xfff0, 0x0100), /* DATECS FP-2000 */
1808	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1809	},
1810	{ USB_DEVICE(0x09d8, 0x0320), /* Elatec GmbH TWN3 */
1811	.driver_info = NO_UNION_NORMAL, /* has misplaced union descriptor */
1812	},
1813	{ USB_DEVICE(0x0c26, 0x0020), /* Icom ICF3400 Serie */
1814	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1815	},
1816	{ USB_DEVICE(0x0ca6, 0xa050), /* Castles VEGA3000 */
1817	.driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1818	},
1819
1820	{ USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */
1821	.driver_info = CLEAR_HALT_CONDITIONS,
1822	},
1823
1824	/* Nokia S60 phones expose two ACM channels. The first is
1825	 * a modem and is picked up by the standard AT-command
1826	 * information below. The second is 'vendor-specific' but
1827	 * is treated as a serial device at the S60 end, so we want
1828	 * to expose it on Linux too. */
1829	{ NOKIA_PCSUITE_ACM_INFO(0x042D), }, /* Nokia 3250 */
1830	{ NOKIA_PCSUITE_ACM_INFO(0x04D8), }, /* Nokia 5500 Sport */
1831	{ NOKIA_PCSUITE_ACM_INFO(0x04C9), }, /* Nokia E50 */
1832	{ NOKIA_PCSUITE_ACM_INFO(0x0419), }, /* Nokia E60 */
1833	{ NOKIA_PCSUITE_ACM_INFO(0x044D), }, /* Nokia E61 */
1834	{ NOKIA_PCSUITE_ACM_INFO(0x0001), }, /* Nokia E61i */
1835	{ NOKIA_PCSUITE_ACM_INFO(0x0475), }, /* Nokia E62 */
1836	{ NOKIA_PCSUITE_ACM_INFO(0x0508), }, /* Nokia E65 */
1837	{ NOKIA_PCSUITE_ACM_INFO(0x0418), }, /* Nokia E70 */
1838	{ NOKIA_PCSUITE_ACM_INFO(0x0425), }, /* Nokia N71 */
1839	{ NOKIA_PCSUITE_ACM_INFO(0x0486), }, /* Nokia N73 */
1840	{ NOKIA_PCSUITE_ACM_INFO(0x04DF), }, /* Nokia N75 */
1841	{ NOKIA_PCSUITE_ACM_INFO(0x000e), }, /* Nokia N77 */
1842	{ NOKIA_PCSUITE_ACM_INFO(0x0445), }, /* Nokia N80 */
1843	{ NOKIA_PCSUITE_ACM_INFO(0x042F), }, /* Nokia N91 & N91 8GB */
1844	{ NOKIA_PCSUITE_ACM_INFO(0x048E), }, /* Nokia N92 */
1845	{ NOKIA_PCSUITE_ACM_INFO(0x0420), }, /* Nokia N93 */
1846	{ NOKIA_PCSUITE_ACM_INFO(0x04E6), }, /* Nokia N93i  */
1847	{ NOKIA_PCSUITE_ACM_INFO(0x04B2), }, /* Nokia 5700 XpressMusic */
1848	{ NOKIA_PCSUITE_ACM_INFO(0x0134), }, /* Nokia 6110 Navigator (China) */
1849	{ NOKIA_PCSUITE_ACM_INFO(0x046E), }, /* Nokia 6110 Navigator */
1850	{ NOKIA_PCSUITE_ACM_INFO(0x002f), }, /* Nokia 6120 classic &  */
1851	{ NOKIA_PCSUITE_ACM_INFO(0x0088), }, /* Nokia 6121 classic */
1852	{ NOKIA_PCSUITE_ACM_INFO(0x00fc), }, /* Nokia 6124 classic */
1853	{ NOKIA_PCSUITE_ACM_INFO(0x0042), }, /* Nokia E51 */
1854	{ NOKIA_PCSUITE_ACM_INFO(0x00b0), }, /* Nokia E66 */
1855	{ NOKIA_PCSUITE_ACM_INFO(0x00ab), }, /* Nokia E71 */
1856	{ NOKIA_PCSUITE_ACM_INFO(0x0481), }, /* Nokia N76 */
1857	{ NOKIA_PCSUITE_ACM_INFO(0x0007), }, /* Nokia N81 & N81 8GB */
1858	{ NOKIA_PCSUITE_ACM_INFO(0x0071), }, /* Nokia N82 */
1859	{ NOKIA_PCSUITE_ACM_INFO(0x04F0), }, /* Nokia N95 & N95-3 NAM */
1860	{ NOKIA_PCSUITE_ACM_INFO(0x0070), }, /* Nokia N95 8GB  */
 
1861	{ NOKIA_PCSUITE_ACM_INFO(0x0099), }, /* Nokia 6210 Navigator, RM-367 */
1862	{ NOKIA_PCSUITE_ACM_INFO(0x0128), }, /* Nokia 6210 Navigator, RM-419 */
1863	{ NOKIA_PCSUITE_ACM_INFO(0x008f), }, /* Nokia 6220 Classic */
1864	{ NOKIA_PCSUITE_ACM_INFO(0x00a0), }, /* Nokia 6650 */
1865	{ NOKIA_PCSUITE_ACM_INFO(0x007b), }, /* Nokia N78 */
1866	{ NOKIA_PCSUITE_ACM_INFO(0x0094), }, /* Nokia N85 */
1867	{ NOKIA_PCSUITE_ACM_INFO(0x003a), }, /* Nokia N96 & N96-3  */
1868	{ NOKIA_PCSUITE_ACM_INFO(0x00e9), }, /* Nokia 5320 XpressMusic */
1869	{ NOKIA_PCSUITE_ACM_INFO(0x0108), }, /* Nokia 5320 XpressMusic 2G */
1870	{ NOKIA_PCSUITE_ACM_INFO(0x01f5), }, /* Nokia N97, RM-505 */
1871	{ NOKIA_PCSUITE_ACM_INFO(0x02e3), }, /* Nokia 5230, RM-588 */
1872	{ NOKIA_PCSUITE_ACM_INFO(0x0178), }, /* Nokia E63 */
1873	{ NOKIA_PCSUITE_ACM_INFO(0x010e), }, /* Nokia E75 */
1874	{ NOKIA_PCSUITE_ACM_INFO(0x02d9), }, /* Nokia 6760 Slide */
1875	{ NOKIA_PCSUITE_ACM_INFO(0x01d0), }, /* Nokia E52 */
1876	{ NOKIA_PCSUITE_ACM_INFO(0x0223), }, /* Nokia E72 */
1877	{ NOKIA_PCSUITE_ACM_INFO(0x0275), }, /* Nokia X6 */
1878	{ NOKIA_PCSUITE_ACM_INFO(0x026c), }, /* Nokia N97 Mini */
1879	{ NOKIA_PCSUITE_ACM_INFO(0x0154), }, /* Nokia 5800 XpressMusic */
1880	{ NOKIA_PCSUITE_ACM_INFO(0x04ce), }, /* Nokia E90 */
1881	{ NOKIA_PCSUITE_ACM_INFO(0x01d4), }, /* Nokia E55 */
1882	{ NOKIA_PCSUITE_ACM_INFO(0x0302), }, /* Nokia N8 */
1883	{ NOKIA_PCSUITE_ACM_INFO(0x0335), }, /* Nokia E7 */
1884	{ NOKIA_PCSUITE_ACM_INFO(0x03cd), }, /* Nokia C7 */
1885	{ SAMSUNG_PCSUITE_ACM_INFO(0x6651), }, /* Samsung GTi8510 (INNOV8) */
1886
1887	/* Support for Owen devices */
1888	{ USB_DEVICE(0x03eb, 0x0030), }, /* Owen SI30 */
1889
1890	/* NOTE: non-Nokia COMM/ACM/0xff is likely MSFT RNDIS... NOT a modem! */
1891
1892#if IS_ENABLED(CONFIG_INPUT_IMS_PCU)
1893	{ USB_DEVICE(0x04d8, 0x0082),	/* Application mode */
1894	.driver_info = IGNORE_DEVICE,
1895	},
1896	{ USB_DEVICE(0x04d8, 0x0083),	/* Bootloader mode */
1897	.driver_info = IGNORE_DEVICE,
1898	},
1899#endif
1900
1901#if IS_ENABLED(CONFIG_IR_TOY)
1902	{ USB_DEVICE(0x04d8, 0xfd08),
1903	.driver_info = IGNORE_DEVICE,
1904	},
1905
1906	{ USB_DEVICE(0x04d8, 0xf58b),
1907	.driver_info = IGNORE_DEVICE,
1908	},
1909#endif
1910
1911#if IS_ENABLED(CONFIG_USB_SERIAL_XR)
1912	{ USB_DEVICE(0x04e2, 0x1400), .driver_info = IGNORE_DEVICE },
1913	{ USB_DEVICE(0x04e2, 0x1401), .driver_info = IGNORE_DEVICE },
1914	{ USB_DEVICE(0x04e2, 0x1402), .driver_info = IGNORE_DEVICE },
1915	{ USB_DEVICE(0x04e2, 0x1403), .driver_info = IGNORE_DEVICE },
1916	{ USB_DEVICE(0x04e2, 0x1410), .driver_info = IGNORE_DEVICE },
1917	{ USB_DEVICE(0x04e2, 0x1411), .driver_info = IGNORE_DEVICE },
1918	{ USB_DEVICE(0x04e2, 0x1412), .driver_info = IGNORE_DEVICE },
1919	{ USB_DEVICE(0x04e2, 0x1414), .driver_info = IGNORE_DEVICE },
1920	{ USB_DEVICE(0x04e2, 0x1420), .driver_info = IGNORE_DEVICE },
1921	{ USB_DEVICE(0x04e2, 0x1422), .driver_info = IGNORE_DEVICE },
1922	{ USB_DEVICE(0x04e2, 0x1424), .driver_info = IGNORE_DEVICE },
1923#endif
1924
1925	/*Samsung phone in firmware update mode */
1926	{ USB_DEVICE(0x04e8, 0x685d),
1927	.driver_info = IGNORE_DEVICE,
1928	},
1929
1930	/* Exclude Infineon Flash Loader utility */
1931	{ USB_DEVICE(0x058b, 0x0041),
1932	.driver_info = IGNORE_DEVICE,
1933	},
1934
1935	/* Exclude ETAS ES58x */
1936	{ USB_DEVICE(0x108c, 0x0159), /* ES581.4 */
1937	.driver_info = IGNORE_DEVICE,
1938	},
1939	{ USB_DEVICE(0x108c, 0x0168), /* ES582.1 */
1940	.driver_info = IGNORE_DEVICE,
1941	},
1942	{ USB_DEVICE(0x108c, 0x0169), /* ES584.1 */
1943	.driver_info = IGNORE_DEVICE,
1944	},
1945
1946	{ USB_DEVICE(0x1bc7, 0x0021), /* Telit 3G ACM only composition */
1947	.driver_info = SEND_ZERO_PACKET,
1948	},
1949	{ USB_DEVICE(0x1bc7, 0x0023), /* Telit 3G ACM + ECM composition */
1950	.driver_info = SEND_ZERO_PACKET,
1951	},
1952
1953	/* Exclude Goodix Fingerprint Reader */
1954	{ USB_DEVICE(0x27c6, 0x5395),
1955	.driver_info = IGNORE_DEVICE,
1956	},
1957
1958	/* Exclude Heimann Sensor GmbH USB appset demo */
1959	{ USB_DEVICE(0x32a7, 0x0000),
1960	.driver_info = IGNORE_DEVICE,
1961	},
1962
1963	/* control interfaces without any protocol set */
1964	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1965		USB_CDC_PROTO_NONE) },
1966
1967	/* control interfaces with various AT-command sets */
1968	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1969		USB_CDC_ACM_PROTO_AT_V25TER) },
1970	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1971		USB_CDC_ACM_PROTO_AT_PCCA101) },
1972	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1973		USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1974	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1975		USB_CDC_ACM_PROTO_AT_GSM) },
1976	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1977		USB_CDC_ACM_PROTO_AT_3G) },
1978	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1979		USB_CDC_ACM_PROTO_AT_CDMA) },
1980
1981	{ USB_DEVICE(0x1519, 0x0452), /* Intel 7260 modem */
1982	.driver_info = SEND_ZERO_PACKET,
1983	},
1984
1985	{ }
1986};
1987
1988MODULE_DEVICE_TABLE(usb, acm_ids);
1989
1990static struct usb_driver acm_driver = {
1991	.name =		"cdc_acm",
1992	.probe =	acm_probe,
1993	.disconnect =	acm_disconnect,
1994#ifdef CONFIG_PM
1995	.suspend =	acm_suspend,
1996	.resume =	acm_resume,
1997	.reset_resume =	acm_reset_resume,
1998#endif
1999	.pre_reset =	acm_pre_reset,
2000	.id_table =	acm_ids,
2001#ifdef CONFIG_PM
2002	.supports_autosuspend = 1,
2003#endif
2004	.disable_hub_initiated_lpm = 1,
2005};
2006
2007/*
2008 * TTY driver structures.
2009 */
2010
2011static const struct tty_operations acm_ops = {
2012	.install =		acm_tty_install,
2013	.open =			acm_tty_open,
2014	.close =		acm_tty_close,
2015	.cleanup =		acm_tty_cleanup,
2016	.hangup =		acm_tty_hangup,
2017	.write =		acm_tty_write,
2018	.write_room =		acm_tty_write_room,
2019	.ioctl =		acm_tty_ioctl,
2020	.throttle =		acm_tty_throttle,
2021	.unthrottle =		acm_tty_unthrottle,
2022	.chars_in_buffer =	acm_tty_chars_in_buffer,
2023	.break_ctl =		acm_tty_break_ctl,
2024	.set_termios =		acm_tty_set_termios,
2025	.tiocmget =		acm_tty_tiocmget,
2026	.tiocmset =		acm_tty_tiocmset,
2027	.get_serial =		get_serial_info,
2028	.set_serial =		set_serial_info,
2029	.get_icount =		acm_tty_get_icount,
2030};
2031
2032/*
2033 * Init / exit.
2034 */
2035
2036static int __init acm_init(void)
2037{
2038	int retval;
2039	acm_tty_driver = tty_alloc_driver(ACM_TTY_MINORS, TTY_DRIVER_REAL_RAW |
2040			TTY_DRIVER_DYNAMIC_DEV);
2041	if (IS_ERR(acm_tty_driver))
2042		return PTR_ERR(acm_tty_driver);
2043	acm_tty_driver->driver_name = "acm",
2044	acm_tty_driver->name = "ttyACM",
2045	acm_tty_driver->major = ACM_TTY_MAJOR,
2046	acm_tty_driver->minor_start = 0,
2047	acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
2048	acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
 
2049	acm_tty_driver->init_termios = tty_std_termios;
2050	acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD |
2051								HUPCL | CLOCAL;
2052	tty_set_operations(acm_tty_driver, &acm_ops);
2053
2054	retval = tty_register_driver(acm_tty_driver);
2055	if (retval) {
2056		tty_driver_kref_put(acm_tty_driver);
2057		return retval;
2058	}
2059
2060	retval = usb_register(&acm_driver);
2061	if (retval) {
2062		tty_unregister_driver(acm_tty_driver);
2063		tty_driver_kref_put(acm_tty_driver);
2064		return retval;
2065	}
2066
2067	printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_DESC "\n");
2068
2069	return 0;
2070}
2071
2072static void __exit acm_exit(void)
2073{
2074	usb_deregister(&acm_driver);
2075	tty_unregister_driver(acm_tty_driver);
2076	tty_driver_kref_put(acm_tty_driver);
2077	idr_destroy(&acm_minors);
2078}
2079
2080module_init(acm_init);
2081module_exit(acm_exit);
2082
2083MODULE_AUTHOR(DRIVER_AUTHOR);
2084MODULE_DESCRIPTION(DRIVER_DESC);
2085MODULE_LICENSE("GPL");
2086MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);