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