Linux Audio

Check our new training course

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