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