Merge branch for-rmk-devel of git://aeryn.fluff.org.uk/bjdooks/linux into devel
[linux-2.6] / drivers / usb / class / cdc-acm.c
1 /*
2  * cdc-acm.c
3  *
4  * Copyright (c) 1999 Armin Fuerst      <fuerst@in.tum.de>
5  * Copyright (c) 1999 Pavel Machek      <pavel@suse.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  *
11  * USB Abstract Control Model driver for USB modems and ISDN adapters
12  *
13  * Sponsored by SuSE
14  *
15  * ChangeLog:
16  *      v0.9  - thorough cleaning, URBification, almost a rewrite
17  *      v0.10 - some more cleanups
18  *      v0.11 - fixed flow control, read error doesn't stop reads
19  *      v0.12 - added TIOCM ioctls, added break handling, made struct acm kmalloced
20  *      v0.13 - added termios, added hangup
21  *      v0.14 - sized down struct acm
22  *      v0.15 - fixed flow control again - characters could be lost
23  *      v0.16 - added code for modems with swapped data and control interfaces
24  *      v0.17 - added new style probing
25  *      v0.18 - fixed new style probing for devices with more configurations
26  *      v0.19 - fixed CLOCAL handling (thanks to Richard Shih-Ping Chan)
27  *      v0.20 - switched to probing on interface (rather than device) class
28  *      v0.21 - revert to probing on device for devices with multiple configs
29  *      v0.22 - probe only the control interface. if usbcore doesn't choose the
30  *              config we want, sysadmin changes bConfigurationValue in sysfs.
31  *      v0.23 - use softirq for rx processing, as needed by tty layer
32  *      v0.24 - change probe method to evaluate CDC union descriptor
33  *      v0.25 - downstream tasks paralelized to maximize throughput
34  *      v0.26 - multiple write urbs, writesize increased
35  */
36
37 /*
38  * This program is free software; you can redistribute it and/or modify
39  * it under the terms of the GNU General Public License as published by
40  * the Free Software Foundation; either version 2 of the License, or
41  * (at your option) any later version.
42  *
43  * This program is distributed in the hope that it will be useful,
44  * but WITHOUT ANY WARRANTY; without even the implied warranty of
45  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
46  * GNU General Public License for more details.
47  *
48  * You should have received a copy of the GNU General Public License
49  * along with this program; if not, write to the Free Software
50  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
51  */
52
53 #undef DEBUG
54 #undef VERBOSE_DEBUG
55
56 #include <linux/kernel.h>
57 #include <linux/errno.h>
58 #include <linux/init.h>
59 #include <linux/slab.h>
60 #include <linux/tty.h>
61 #include <linux/tty_driver.h>
62 #include <linux/tty_flip.h>
63 #include <linux/module.h>
64 #include <linux/mutex.h>
65 #include <asm/uaccess.h>
66 #include <linux/usb.h>
67 #include <linux/usb/cdc.h>
68 #include <asm/byteorder.h>
69 #include <asm/unaligned.h>
70 #include <linux/list.h>
71
72 #include "cdc-acm.h"
73
74
75 #define ACM_CLOSE_TIMEOUT       15      /* seconds to let writes drain */
76
77 /*
78  * Version Information
79  */
80 #define DRIVER_VERSION "v0.26"
81 #define DRIVER_AUTHOR "Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik, David Kubicek"
82 #define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters"
83
84 static struct usb_driver acm_driver;
85 static struct tty_driver *acm_tty_driver;
86 static struct acm *acm_table[ACM_TTY_MINORS];
87
88 static DEFINE_MUTEX(open_mutex);
89
90 #define ACM_READY(acm)  (acm && acm->dev && acm->used)
91
92 #ifdef VERBOSE_DEBUG
93 #define verbose 1
94 #else
95 #define verbose 0
96 #endif
97
98 /*
99  * Functions for ACM control messages.
100  */
101
102 static int acm_ctrl_msg(struct acm *acm, int request, int value, void *buf, int len)
103 {
104         int retval = usb_control_msg(acm->dev, usb_sndctrlpipe(acm->dev, 0),
105                 request, USB_RT_ACM, value,
106                 acm->control->altsetting[0].desc.bInterfaceNumber,
107                 buf, len, 5000);
108         dbg("acm_control_msg: rq: 0x%02x val: %#x len: %#x result: %d", request, value, len, retval);
109         return retval < 0 ? retval : 0;
110 }
111
112 /* devices aren't required to support these requests.
113  * the cdc acm descriptor tells whether they do...
114  */
115 #define acm_set_control(acm, control) \
116         acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
117 #define acm_set_line(acm, line) \
118         acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
119 #define acm_send_break(acm, ms) \
120         acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
121
122 /*
123  * Write buffer management.
124  * All of these assume proper locks taken by the caller.
125  */
126
127 static int acm_wb_alloc(struct acm *acm)
128 {
129         int i, wbn;
130         struct acm_wb *wb;
131
132         wbn = 0;
133         i = 0;
134         for (;;) {
135                 wb = &acm->wb[wbn];
136                 if (!wb->use) {
137                         wb->use = 1;
138                         return wbn;
139                 }
140                 wbn = (wbn + 1) % ACM_NW;
141                 if (++i >= ACM_NW)
142                         return -1;
143         }
144 }
145
146 static int acm_wb_is_avail(struct acm *acm)
147 {
148         int i, n;
149         unsigned long flags;
150
151         n = ACM_NW;
152         spin_lock_irqsave(&acm->write_lock, flags);
153         for (i = 0; i < ACM_NW; i++) {
154                 n -= acm->wb[i].use;
155         }
156         spin_unlock_irqrestore(&acm->write_lock, flags);
157         return n;
158 }
159
160 /*
161  * Finish write. Caller must hold acm->write_lock
162  */
163 static void acm_write_done(struct acm *acm, struct acm_wb *wb)
164 {
165         wb->use = 0;
166         acm->transmitting--;
167 }
168
169 /*
170  * Poke write.
171  *
172  * the caller is responsible for locking
173  */
174
175 static int acm_start_wb(struct acm *acm, struct acm_wb *wb)
176 {
177         int rc;
178
179         acm->transmitting++;
180
181         wb->urb->transfer_buffer = wb->buf;
182         wb->urb->transfer_dma = wb->dmah;
183         wb->urb->transfer_buffer_length = wb->len;
184         wb->urb->dev = acm->dev;
185
186         if ((rc = usb_submit_urb(wb->urb, GFP_ATOMIC)) < 0) {
187                 dbg("usb_submit_urb(write bulk) failed: %d", rc);
188                 acm_write_done(acm, wb);
189         }
190         return rc;
191 }
192
193 static int acm_write_start(struct acm *acm, int wbn)
194 {
195         unsigned long flags;
196         struct acm_wb *wb = &acm->wb[wbn];
197         int rc;
198
199         spin_lock_irqsave(&acm->write_lock, flags);
200         if (!acm->dev) {
201                 wb->use = 0;
202                 spin_unlock_irqrestore(&acm->write_lock, flags);
203                 return -ENODEV;
204         }
205
206         dbg("%s susp_count: %d", __func__, acm->susp_count);
207         if (acm->susp_count) {
208                 acm->delayed_wb = wb;
209                 schedule_work(&acm->waker);
210                 spin_unlock_irqrestore(&acm->write_lock, flags);
211                 return 0;       /* A white lie */
212         }
213         usb_mark_last_busy(acm->dev);
214
215         rc = acm_start_wb(acm, wb);
216         spin_unlock_irqrestore(&acm->write_lock, flags);
217
218         return rc;
219
220 }
221 /*
222  * attributes exported through sysfs
223  */
224 static ssize_t show_caps
225 (struct device *dev, struct device_attribute *attr, char *buf)
226 {
227         struct usb_interface *intf = to_usb_interface(dev);
228         struct acm *acm = usb_get_intfdata(intf);
229
230         return sprintf(buf, "%d", acm->ctrl_caps);
231 }
232 static DEVICE_ATTR(bmCapabilities, S_IRUGO, show_caps, NULL);
233
234 static ssize_t show_country_codes
235 (struct device *dev, struct device_attribute *attr, char *buf)
236 {
237         struct usb_interface *intf = to_usb_interface(dev);
238         struct acm *acm = usb_get_intfdata(intf);
239
240         memcpy(buf, acm->country_codes, acm->country_code_size);
241         return acm->country_code_size;
242 }
243
244 static DEVICE_ATTR(wCountryCodes, S_IRUGO, show_country_codes, NULL);
245
246 static ssize_t show_country_rel_date
247 (struct device *dev, struct device_attribute *attr, char *buf)
248 {
249         struct usb_interface *intf = to_usb_interface(dev);
250         struct acm *acm = usb_get_intfdata(intf);
251
252         return sprintf(buf, "%d", acm->country_rel_date);
253 }
254
255 static DEVICE_ATTR(iCountryCodeRelDate, S_IRUGO, show_country_rel_date, NULL);
256 /*
257  * Interrupt handlers for various ACM device responses
258  */
259
260 /* control interface reports status changes with "interrupt" transfers */
261 static void acm_ctrl_irq(struct urb *urb)
262 {
263         struct acm *acm = urb->context;
264         struct usb_cdc_notification *dr = urb->transfer_buffer;
265         unsigned char *data;
266         int newctrl;
267         int retval;
268         int status = urb->status;
269
270         switch (status) {
271         case 0:
272                 /* success */
273                 break;
274         case -ECONNRESET:
275         case -ENOENT:
276         case -ESHUTDOWN:
277                 /* this urb is terminated, clean up */
278                 dbg("%s - urb shutting down with status: %d", __func__, status);
279                 return;
280         default:
281                 dbg("%s - nonzero urb status received: %d", __func__, status);
282                 goto exit;
283         }
284
285         if (!ACM_READY(acm))
286                 goto exit;
287
288         data = (unsigned char *)(dr + 1);
289         switch (dr->bNotificationType) {
290
291                 case USB_CDC_NOTIFY_NETWORK_CONNECTION:
292
293                         dbg("%s network", dr->wValue ? "connected to" : "disconnected from");
294                         break;
295
296                 case USB_CDC_NOTIFY_SERIAL_STATE:
297
298                         newctrl = get_unaligned_le16(data);
299
300                         if (acm->tty && !acm->clocal && (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {
301                                 dbg("calling hangup");
302                                 tty_hangup(acm->tty);
303                         }
304
305                         acm->ctrlin = newctrl;
306
307                         dbg("input control lines: dcd%c dsr%c break%c ring%c framing%c parity%c overrun%c",
308                                 acm->ctrlin & ACM_CTRL_DCD ? '+' : '-', acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',
309                                 acm->ctrlin & ACM_CTRL_BRK ? '+' : '-', acm->ctrlin & ACM_CTRL_RI  ? '+' : '-',
310                                 acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-',     acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',
311                                 acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');
312
313                         break;
314
315                 default:
316                         dbg("unknown notification %d received: index %d len %d data0 %d data1 %d",
317                                 dr->bNotificationType, dr->wIndex,
318                                 dr->wLength, data[0], data[1]);
319                         break;
320         }
321 exit:
322         usb_mark_last_busy(acm->dev);
323         retval = usb_submit_urb (urb, GFP_ATOMIC);
324         if (retval)
325                 dev_err(&urb->dev->dev, "%s - usb_submit_urb failed with "
326                         "result %d", __func__, retval);
327 }
328
329 /* data interface returns incoming bytes, or we got unthrottled */
330 static void acm_read_bulk(struct urb *urb)
331 {
332         struct acm_rb *buf;
333         struct acm_ru *rcv = urb->context;
334         struct acm *acm = rcv->instance;
335         int status = urb->status;
336
337         dbg("Entering acm_read_bulk with status %d", status);
338
339         if (!ACM_READY(acm)) {
340                 dev_dbg(&acm->data->dev, "Aborting, acm not ready");
341                 return;
342         }
343         usb_mark_last_busy(acm->dev);
344
345         if (status)
346                 dev_dbg(&acm->data->dev, "bulk rx status %d\n", status);
347
348         buf = rcv->buffer;
349         buf->size = urb->actual_length;
350
351         if (likely(status == 0)) {
352                 spin_lock(&acm->read_lock);
353                 acm->processing++;
354                 list_add_tail(&rcv->list, &acm->spare_read_urbs);
355                 list_add_tail(&buf->list, &acm->filled_read_bufs);
356                 spin_unlock(&acm->read_lock);
357         } else {
358                 /* we drop the buffer due to an error */
359                 spin_lock(&acm->read_lock);
360                 list_add_tail(&rcv->list, &acm->spare_read_urbs);
361                 list_add(&buf->list, &acm->spare_read_bufs);
362                 spin_unlock(&acm->read_lock);
363                 /* nevertheless the tasklet must be kicked unconditionally
364                 so the queue cannot dry up */
365         }
366         if (likely(!acm->susp_count))
367                 tasklet_schedule(&acm->urb_task);
368 }
369
370 static void acm_rx_tasklet(unsigned long _acm)
371 {
372         struct acm *acm = (void *)_acm;
373         struct acm_rb *buf;
374         struct tty_struct *tty = acm->tty;
375         struct acm_ru *rcv;
376         unsigned long flags;
377         unsigned char throttled;
378
379         dbg("Entering acm_rx_tasklet");
380
381         if (!ACM_READY(acm))
382         {
383                 dbg("acm_rx_tasklet: ACM not ready");
384                 return;
385         }
386
387         spin_lock_irqsave(&acm->throttle_lock, flags);
388         throttled = acm->throttle;
389         spin_unlock_irqrestore(&acm->throttle_lock, flags);
390         if (throttled)
391         {
392                 dbg("acm_rx_tasklet: throttled");
393                 return;
394         }
395
396 next_buffer:
397         spin_lock_irqsave(&acm->read_lock, flags);
398         if (list_empty(&acm->filled_read_bufs)) {
399                 spin_unlock_irqrestore(&acm->read_lock, flags);
400                 goto urbs;
401         }
402         buf = list_entry(acm->filled_read_bufs.next,
403                          struct acm_rb, list);
404         list_del(&buf->list);
405         spin_unlock_irqrestore(&acm->read_lock, flags);
406
407         dbg("acm_rx_tasklet: procesing buf 0x%p, size = %d", buf, buf->size);
408
409         tty_buffer_request_room(tty, buf->size);
410         spin_lock_irqsave(&acm->throttle_lock, flags);
411         throttled = acm->throttle;
412         spin_unlock_irqrestore(&acm->throttle_lock, flags);
413         if (!throttled)
414                 tty_insert_flip_string(tty, buf->base, buf->size);
415         tty_flip_buffer_push(tty);
416
417         if (throttled) {
418                 dbg("Throttling noticed");
419                 spin_lock_irqsave(&acm->read_lock, flags);
420                 list_add(&buf->list, &acm->filled_read_bufs);
421                 spin_unlock_irqrestore(&acm->read_lock, flags);
422                 return;
423         }
424
425         spin_lock_irqsave(&acm->read_lock, flags);
426         list_add(&buf->list, &acm->spare_read_bufs);
427         spin_unlock_irqrestore(&acm->read_lock, flags);
428         goto next_buffer;
429
430 urbs:
431         while (!list_empty(&acm->spare_read_bufs)) {
432                 spin_lock_irqsave(&acm->read_lock, flags);
433                 if (list_empty(&acm->spare_read_urbs)) {
434                         acm->processing = 0;
435                         spin_unlock_irqrestore(&acm->read_lock, flags);
436                         return;
437                 }
438                 rcv = list_entry(acm->spare_read_urbs.next,
439                                  struct acm_ru, list);
440                 list_del(&rcv->list);
441                 spin_unlock_irqrestore(&acm->read_lock, flags);
442
443                 buf = list_entry(acm->spare_read_bufs.next,
444                                  struct acm_rb, list);
445                 list_del(&buf->list);
446
447                 rcv->buffer = buf;
448
449                 usb_fill_bulk_urb(rcv->urb, acm->dev,
450                                   acm->rx_endpoint,
451                                   buf->base,
452                                   acm->readsize,
453                                   acm_read_bulk, rcv);
454                 rcv->urb->transfer_dma = buf->dma;
455                 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
456
457                 /* This shouldn't kill the driver as unsuccessful URBs are returned to the
458                    free-urbs-pool and resubmited ASAP */
459                 spin_lock_irqsave(&acm->read_lock, flags);
460                 if (acm->susp_count || usb_submit_urb(rcv->urb, GFP_ATOMIC) < 0) {
461                         list_add(&buf->list, &acm->spare_read_bufs);
462                         list_add(&rcv->list, &acm->spare_read_urbs);
463                         acm->processing = 0;
464                         spin_unlock_irqrestore(&acm->read_lock, flags);
465                         return;
466                 } else {
467                         spin_unlock_irqrestore(&acm->read_lock, flags);
468                         dbg("acm_rx_tasklet: sending urb 0x%p, rcv 0x%p, buf 0x%p", rcv->urb, rcv, buf);
469                 }
470         }
471         spin_lock_irqsave(&acm->read_lock, flags);
472         acm->processing = 0;
473         spin_unlock_irqrestore(&acm->read_lock, flags);
474 }
475
476 /* data interface wrote those outgoing bytes */
477 static void acm_write_bulk(struct urb *urb)
478 {
479         struct acm_wb *wb = urb->context;
480         struct acm *acm = wb->instance;
481         unsigned long flags;
482
483         if (verbose || urb->status
484                         || (urb->actual_length != urb->transfer_buffer_length))
485                 dev_dbg(&acm->data->dev, "tx %d/%d bytes -- > %d\n",
486                         urb->actual_length,
487                         urb->transfer_buffer_length,
488                         urb->status);
489
490         spin_lock_irqsave(&acm->write_lock, flags);
491         acm_write_done(acm, wb);
492         spin_unlock_irqrestore(&acm->write_lock, flags);
493         if (ACM_READY(acm))
494                 schedule_work(&acm->work);
495         else
496                 wake_up_interruptible(&acm->drain_wait);
497 }
498
499 static void acm_softint(struct work_struct *work)
500 {
501         struct acm *acm = container_of(work, struct acm, work);
502
503         dev_vdbg(&acm->data->dev, "tx work\n");
504         if (!ACM_READY(acm))
505                 return;
506         tty_wakeup(acm->tty);
507 }
508
509 static void acm_waker(struct work_struct *waker)
510 {
511         struct acm *acm = container_of(waker, struct acm, waker);
512         int rv;
513
514         rv = usb_autopm_get_interface(acm->control);
515         if (rv < 0) {
516                 dev_err(&acm->dev->dev, "Autopm failure in %s\n", __func__);
517                 return;
518         }
519         if (acm->delayed_wb) {
520                 acm_start_wb(acm, acm->delayed_wb);
521                 acm->delayed_wb = NULL;
522         }
523         usb_autopm_put_interface(acm->control);
524 }
525
526 /*
527  * TTY handlers
528  */
529
530 static int acm_tty_open(struct tty_struct *tty, struct file *filp)
531 {
532         struct acm *acm;
533         int rv = -EINVAL;
534         int i;
535         dbg("Entering acm_tty_open.");
536
537         mutex_lock(&open_mutex);
538
539         acm = acm_table[tty->index];
540         if (!acm || !acm->dev)
541                 goto err_out;
542         else
543                 rv = 0;
544
545         set_bit(TTY_NO_WRITE_SPLIT, &tty->flags);
546         tty->driver_data = acm;
547         acm->tty = tty;
548
549         if (usb_autopm_get_interface(acm->control) < 0)
550                 goto early_bail;
551         else
552                 acm->control->needs_remote_wakeup = 1;
553
554         mutex_lock(&acm->mutex);
555         if (acm->used++) {
556                 usb_autopm_put_interface(acm->control);
557                 goto done;
558         }
559
560
561         acm->ctrlurb->dev = acm->dev;
562         if (usb_submit_urb(acm->ctrlurb, GFP_KERNEL)) {
563                 dbg("usb_submit_urb(ctrl irq) failed");
564                 goto bail_out;
565         }
566
567         if (0 > acm_set_control(acm, acm->ctrlout = ACM_CTRL_DTR | ACM_CTRL_RTS) &&
568             (acm->ctrl_caps & USB_CDC_CAP_LINE))
569                 goto full_bailout;
570         usb_autopm_put_interface(acm->control);
571
572         INIT_LIST_HEAD(&acm->spare_read_urbs);
573         INIT_LIST_HEAD(&acm->spare_read_bufs);
574         INIT_LIST_HEAD(&acm->filled_read_bufs);
575         for (i = 0; i < acm->rx_buflimit; i++) {
576                 list_add(&(acm->ru[i].list), &acm->spare_read_urbs);
577         }
578         for (i = 0; i < acm->rx_buflimit; i++) {
579                 list_add(&(acm->rb[i].list), &acm->spare_read_bufs);
580         }
581
582         acm->throttle = 0;
583
584         tasklet_schedule(&acm->urb_task);
585
586 done:
587         mutex_unlock(&acm->mutex);
588 err_out:
589         mutex_unlock(&open_mutex);
590         return rv;
591
592 full_bailout:
593         usb_kill_urb(acm->ctrlurb);
594 bail_out:
595         usb_autopm_put_interface(acm->control);
596         acm->used--;
597         mutex_unlock(&acm->mutex);
598 early_bail:
599         mutex_unlock(&open_mutex);
600         return -EIO;
601 }
602
603 static void acm_tty_unregister(struct acm *acm)
604 {
605         int i,nr;
606
607         nr = acm->rx_buflimit;
608         tty_unregister_device(acm_tty_driver, acm->minor);
609         usb_put_intf(acm->control);
610         acm_table[acm->minor] = NULL;
611         usb_free_urb(acm->ctrlurb);
612         for (i = 0; i < ACM_NW; i++)
613                 usb_free_urb(acm->wb[i].urb);
614         for (i = 0; i < nr; i++)
615                 usb_free_urb(acm->ru[i].urb);
616         kfree(acm->country_codes);
617         kfree(acm);
618 }
619
620 static int acm_tty_chars_in_buffer(struct tty_struct *tty);
621
622 static void acm_tty_close(struct tty_struct *tty, struct file *filp)
623 {
624         struct acm *acm = tty->driver_data;
625         int i,nr;
626
627         if (!acm || !acm->used)
628                 return;
629
630         nr = acm->rx_buflimit;
631         mutex_lock(&open_mutex);
632         if (!--acm->used) {
633                 if (acm->dev) {
634                         usb_autopm_get_interface(acm->control);
635                         acm_set_control(acm, acm->ctrlout = 0);
636
637                         /* try letting the last writes drain naturally */
638                         wait_event_interruptible_timeout(acm->drain_wait,
639                                         (ACM_NW == acm_wb_is_avail(acm))
640                                                 || !acm->dev,
641                                         ACM_CLOSE_TIMEOUT * HZ);
642
643                         usb_kill_urb(acm->ctrlurb);
644                         for (i = 0; i < ACM_NW; i++)
645                                 usb_kill_urb(acm->wb[i].urb);
646                         for (i = 0; i < nr; i++)
647                                 usb_kill_urb(acm->ru[i].urb);
648                         acm->control->needs_remote_wakeup = 0;
649                         usb_autopm_put_interface(acm->control);
650                 } else
651                         acm_tty_unregister(acm);
652         }
653         mutex_unlock(&open_mutex);
654 }
655
656 static int acm_tty_write(struct tty_struct *tty, const unsigned char *buf, int count)
657 {
658         struct acm *acm = tty->driver_data;
659         int stat;
660         unsigned long flags;
661         int wbn;
662         struct acm_wb *wb;
663
664         dbg("Entering acm_tty_write to write %d bytes,", count);
665
666         if (!ACM_READY(acm))
667                 return -EINVAL;
668         if (!count)
669                 return 0;
670
671         spin_lock_irqsave(&acm->write_lock, flags);
672         if ((wbn = acm_wb_alloc(acm)) < 0) {
673                 spin_unlock_irqrestore(&acm->write_lock, flags);
674                 return 0;
675         }
676         wb = &acm->wb[wbn];
677
678         count = (count > acm->writesize) ? acm->writesize : count;
679         dbg("Get %d bytes...", count);
680         memcpy(wb->buf, buf, count);
681         wb->len = count;
682         spin_unlock_irqrestore(&acm->write_lock, flags);
683
684         if ((stat = acm_write_start(acm, wbn)) < 0)
685                 return stat;
686         return count;
687 }
688
689 static int acm_tty_write_room(struct tty_struct *tty)
690 {
691         struct acm *acm = tty->driver_data;
692         if (!ACM_READY(acm))
693                 return -EINVAL;
694         /*
695          * Do not let the line discipline to know that we have a reserve,
696          * or it might get too enthusiastic.
697          */
698         return acm_wb_is_avail(acm) ? acm->writesize : 0;
699 }
700
701 static int acm_tty_chars_in_buffer(struct tty_struct *tty)
702 {
703         struct acm *acm = tty->driver_data;
704         if (!ACM_READY(acm))
705                 return -EINVAL;
706         /*
707          * This is inaccurate (overcounts), but it works.
708          */
709         return (ACM_NW - acm_wb_is_avail(acm)) * acm->writesize;
710 }
711
712 static void acm_tty_throttle(struct tty_struct *tty)
713 {
714         struct acm *acm = tty->driver_data;
715         if (!ACM_READY(acm))
716                 return;
717         spin_lock_bh(&acm->throttle_lock);
718         acm->throttle = 1;
719         spin_unlock_bh(&acm->throttle_lock);
720 }
721
722 static void acm_tty_unthrottle(struct tty_struct *tty)
723 {
724         struct acm *acm = tty->driver_data;
725         if (!ACM_READY(acm))
726                 return;
727         spin_lock_bh(&acm->throttle_lock);
728         acm->throttle = 0;
729         spin_unlock_bh(&acm->throttle_lock);
730         tasklet_schedule(&acm->urb_task);
731 }
732
733 static int acm_tty_break_ctl(struct tty_struct *tty, int state)
734 {
735         struct acm *acm = tty->driver_data;
736         int retval;
737         if (!ACM_READY(acm))
738                 return -EINVAL;
739         retval = acm_send_break(acm, state ? 0xffff : 0);
740         if (retval < 0)
741                 dbg("send break failed");
742         return retval;
743 }
744
745 static int acm_tty_tiocmget(struct tty_struct *tty, struct file *file)
746 {
747         struct acm *acm = tty->driver_data;
748
749         if (!ACM_READY(acm))
750                 return -EINVAL;
751
752         return (acm->ctrlout & ACM_CTRL_DTR ? TIOCM_DTR : 0) |
753                (acm->ctrlout & ACM_CTRL_RTS ? TIOCM_RTS : 0) |
754                (acm->ctrlin  & ACM_CTRL_DSR ? TIOCM_DSR : 0) |
755                (acm->ctrlin  & ACM_CTRL_RI  ? TIOCM_RI  : 0) |
756                (acm->ctrlin  & ACM_CTRL_DCD ? TIOCM_CD  : 0) |
757                TIOCM_CTS;
758 }
759
760 static int acm_tty_tiocmset(struct tty_struct *tty, struct file *file,
761                             unsigned int set, unsigned int clear)
762 {
763         struct acm *acm = tty->driver_data;
764         unsigned int newctrl;
765
766         if (!ACM_READY(acm))
767                 return -EINVAL;
768
769         newctrl = acm->ctrlout;
770         set = (set & TIOCM_DTR ? ACM_CTRL_DTR : 0) | (set & TIOCM_RTS ? ACM_CTRL_RTS : 0);
771         clear = (clear & TIOCM_DTR ? ACM_CTRL_DTR : 0) | (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
780 static int acm_tty_ioctl(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg)
781 {
782         struct acm *acm = tty->driver_data;
783
784         if (!ACM_READY(acm))
785                 return -EINVAL;
786
787         return -ENOIOCTLCMD;
788 }
789
790 static const __u32 acm_tty_speed[] = {
791         0, 50, 75, 110, 134, 150, 200, 300, 600,
792         1200, 1800, 2400, 4800, 9600, 19200, 38400,
793         57600, 115200, 230400, 460800, 500000, 576000,
794         921600, 1000000, 1152000, 1500000, 2000000,
795         2500000, 3000000, 3500000, 4000000
796 };
797
798 static const __u8 acm_tty_size[] = {
799         5, 6, 7, 8
800 };
801
802 static void acm_tty_set_termios(struct tty_struct *tty, struct ktermios *termios_old)
803 {
804         struct acm *acm = tty->driver_data;
805         struct ktermios *termios = tty->termios;
806         struct usb_cdc_line_coding newline;
807         int newctrl = acm->ctrlout;
808
809         if (!ACM_READY(acm))
810                 return;
811
812         newline.dwDTERate = cpu_to_le32p(acm_tty_speed +
813                 (termios->c_cflag & CBAUD & ~CBAUDEX) + (termios->c_cflag & CBAUDEX ? 15 : 0));
814         newline.bCharFormat = termios->c_cflag & CSTOPB ? 2 : 0;
815         newline.bParityType = termios->c_cflag & PARENB ?
816                 (termios->c_cflag & PARODD ? 1 : 2) + (termios->c_cflag & CMSPAR ? 2 : 0) : 0;
817         newline.bDataBits = acm_tty_size[(termios->c_cflag & CSIZE) >> 4];
818
819         acm->clocal = ((termios->c_cflag & CLOCAL) != 0);
820
821         if (!newline.dwDTERate) {
822                 newline.dwDTERate = acm->line.dwDTERate;
823                 newctrl &= ~ACM_CTRL_DTR;
824         } else  newctrl |=  ACM_CTRL_DTR;
825
826         if (newctrl != acm->ctrlout)
827                 acm_set_control(acm, acm->ctrlout = newctrl);
828
829         if (memcmp(&acm->line, &newline, sizeof newline)) {
830                 memcpy(&acm->line, &newline, sizeof newline);
831                 dbg("set line: %d %d %d %d", le32_to_cpu(newline.dwDTERate),
832                         newline.bCharFormat, newline.bParityType,
833                         newline.bDataBits);
834                 acm_set_line(acm, &acm->line);
835         }
836 }
837
838 /*
839  * USB probe and disconnect routines.
840  */
841
842 /* Little helpers: write/read buffers free */
843 static void acm_write_buffers_free(struct acm *acm)
844 {
845         int i;
846         struct acm_wb *wb;
847         struct usb_device *usb_dev = interface_to_usbdev(acm->control);
848
849         for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
850                 usb_buffer_free(usb_dev, acm->writesize, wb->buf, wb->dmah);
851         }
852 }
853
854 static void acm_read_buffers_free(struct acm *acm)
855 {
856         struct usb_device *usb_dev = interface_to_usbdev(acm->control);
857         int i, n = acm->rx_buflimit;
858
859         for (i = 0; i < n; i++)
860                 usb_buffer_free(usb_dev, acm->readsize, acm->rb[i].base, acm->rb[i].dma);
861 }
862
863 /* Little helper: write buffers allocate */
864 static int acm_write_buffers_alloc(struct acm *acm)
865 {
866         int i;
867         struct acm_wb *wb;
868
869         for (wb = &acm->wb[0], i = 0; i < ACM_NW; i++, wb++) {
870                 wb->buf = usb_buffer_alloc(acm->dev, acm->writesize, GFP_KERNEL,
871                     &wb->dmah);
872                 if (!wb->buf) {
873                         while (i != 0) {
874                                 --i;
875                                 --wb;
876                                 usb_buffer_free(acm->dev, acm->writesize,
877                                     wb->buf, wb->dmah);
878                         }
879                         return -ENOMEM;
880                 }
881         }
882         return 0;
883 }
884
885 static int acm_probe (struct usb_interface *intf,
886                       const struct usb_device_id *id)
887 {
888         struct usb_cdc_union_desc *union_header = NULL;
889         struct usb_cdc_country_functional_desc *cfd = NULL;
890         unsigned char *buffer = intf->altsetting->extra;
891         int buflen = intf->altsetting->extralen;
892         struct usb_interface *control_interface;
893         struct usb_interface *data_interface;
894         struct usb_endpoint_descriptor *epctrl;
895         struct usb_endpoint_descriptor *epread;
896         struct usb_endpoint_descriptor *epwrite;
897         struct usb_device *usb_dev = interface_to_usbdev(intf);
898         struct acm *acm;
899         int minor;
900         int ctrlsize,readsize;
901         u8 *buf;
902         u8 ac_management_function = 0;
903         u8 call_management_function = 0;
904         int call_interface_num = -1;
905         int data_interface_num;
906         unsigned long quirks;
907         int num_rx_buf;
908         int i;
909
910         /* normal quirks */
911         quirks = (unsigned long)id->driver_info;
912         num_rx_buf = (quirks == SINGLE_RX_URB) ? 1 : ACM_NR;
913
914         /* handle quirks deadly to normal probing*/
915         if (quirks == NO_UNION_NORMAL) {
916                 data_interface = usb_ifnum_to_if(usb_dev, 1);
917                 control_interface = usb_ifnum_to_if(usb_dev, 0);
918                 goto skip_normal_probe;
919         }
920         
921         /* normal probing*/
922         if (!buffer) {
923                 dev_err(&intf->dev, "Weird descriptor references\n");
924                 return -EINVAL;
925         }
926
927         if (!buflen) {
928                 if (intf->cur_altsetting->endpoint->extralen && intf->cur_altsetting->endpoint->extra) {
929                         dev_dbg(&intf->dev,"Seeking extra descriptors on endpoint\n");
930                         buflen = intf->cur_altsetting->endpoint->extralen;
931                         buffer = intf->cur_altsetting->endpoint->extra;
932                 } else {
933                         dev_err(&intf->dev,
934                                 "Zero length descriptor references\n");
935                         return -EINVAL;
936                 }
937         }
938
939         while (buflen > 0) {
940                 if (buffer [1] != USB_DT_CS_INTERFACE) {
941                         dev_err(&intf->dev, "skipping garbage\n");
942                         goto next_desc;
943                 }
944
945                 switch (buffer [2]) {
946                         case USB_CDC_UNION_TYPE: /* we've found it */
947                                 if (union_header) {
948                                         dev_err(&intf->dev, "More than one "
949                                                 "union descriptor, "
950                                                 "skipping ...\n");
951                                         goto next_desc;
952                                 }
953                                 union_header = (struct usb_cdc_union_desc *)
954                                                         buffer;
955                                 break;
956                         case USB_CDC_COUNTRY_TYPE: /* export through sysfs*/
957                                 cfd = (struct usb_cdc_country_functional_desc *)buffer;
958                                 break;
959                         case USB_CDC_HEADER_TYPE: /* maybe check version */ 
960                                 break; /* for now we ignore it */ 
961                         case USB_CDC_ACM_TYPE:
962                                 ac_management_function = buffer[3];
963                                 break;
964                         case USB_CDC_CALL_MANAGEMENT_TYPE:
965                                 call_management_function = buffer[3];
966                                 call_interface_num = buffer[4];
967                                 if ((call_management_function & 3) != 3)
968                                         dev_err(&intf->dev, "This device "
969                                                 "cannot do calls on its own. "
970                                                 "It is no modem.\n");
971                                 break;
972                         default:
973                                 /* there are LOTS more CDC descriptors that
974                                  * could legitimately be found here.
975                                  */
976                                 dev_dbg(&intf->dev, "Ignoring descriptor: "
977                                                 "type %02x, length %d\n",
978                                                 buffer[2], buffer[0]);
979                                 break;
980                         }
981 next_desc:
982                 buflen -= buffer[0];
983                 buffer += buffer[0];
984         }
985
986         if (!union_header) {
987                 if (call_interface_num > 0) {
988                         dev_dbg(&intf->dev,"No union descriptor, using call management descriptor\n");
989                         data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
990                         control_interface = intf;
991                 } else {
992                         dev_dbg(&intf->dev,"No union descriptor, giving up\n");
993                         return -ENODEV;
994                 }
995         } else {
996                 control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0);
997                 data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0));
998                 if (!control_interface || !data_interface) {
999                         dev_dbg(&intf->dev,"no interfaces\n");
1000                         return -ENODEV;
1001                 }
1002         }
1003         
1004         if (data_interface_num != call_interface_num)
1005                 dev_dbg(&intf->dev,"Separate call control interface. That is not fully supported.\n");
1006
1007 skip_normal_probe:
1008
1009         /*workaround for switched interfaces */
1010         if (data_interface->cur_altsetting->desc.bInterfaceClass != CDC_DATA_INTERFACE_TYPE) {
1011                 if (control_interface->cur_altsetting->desc.bInterfaceClass == CDC_DATA_INTERFACE_TYPE) {
1012                         struct usb_interface *t;
1013                         dev_dbg(&intf->dev,"Your device has switched interfaces.\n");
1014
1015                         t = control_interface;
1016                         control_interface = data_interface;
1017                         data_interface = t;
1018                 } else {
1019                         return -EINVAL;
1020                 }
1021         }
1022
1023         /* Accept probe requests only for the control interface */
1024         if (intf != control_interface)
1025                 return -ENODEV;
1026         
1027         if (usb_interface_claimed(data_interface)) { /* valid in this context */
1028                 dev_dbg(&intf->dev,"The data interface isn't available\n");
1029                 return -EBUSY;
1030         }
1031
1032
1033         if (data_interface->cur_altsetting->desc.bNumEndpoints < 2)
1034                 return -EINVAL;
1035
1036         epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1037         epread = &data_interface->cur_altsetting->endpoint[0].desc;
1038         epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1039
1040
1041         /* workaround for switched endpoints */
1042         if (!usb_endpoint_dir_in(epread)) {
1043                 /* descriptors are swapped */
1044                 struct usb_endpoint_descriptor *t;
1045                 dev_dbg(&intf->dev,"The data interface has switched endpoints\n");
1046                 
1047                 t = epread;
1048                 epread = epwrite;
1049                 epwrite = t;
1050         }
1051         dbg("interfaces are valid");
1052         for (minor = 0; minor < ACM_TTY_MINORS && acm_table[minor]; minor++);
1053
1054         if (minor == ACM_TTY_MINORS) {
1055                 dev_err(&intf->dev, "no more free acm devices\n");
1056                 return -ENODEV;
1057         }
1058
1059         if (!(acm = kzalloc(sizeof(struct acm), GFP_KERNEL))) {
1060                 dev_dbg(&intf->dev, "out of memory (acm kzalloc)\n");
1061                 goto alloc_fail;
1062         }
1063
1064         ctrlsize = le16_to_cpu(epctrl->wMaxPacketSize);
1065         readsize = le16_to_cpu(epread->wMaxPacketSize)* ( quirks == SINGLE_RX_URB ? 1 : 2);
1066         acm->writesize = le16_to_cpu(epwrite->wMaxPacketSize) * 20;
1067         acm->control = control_interface;
1068         acm->data = data_interface;
1069         acm->minor = minor;
1070         acm->dev = usb_dev;
1071         acm->ctrl_caps = ac_management_function;
1072         acm->ctrlsize = ctrlsize;
1073         acm->readsize = readsize;
1074         acm->rx_buflimit = num_rx_buf;
1075         acm->urb_task.func = acm_rx_tasklet;
1076         acm->urb_task.data = (unsigned long) acm;
1077         INIT_WORK(&acm->work, acm_softint);
1078         INIT_WORK(&acm->waker, acm_waker);
1079         init_waitqueue_head(&acm->drain_wait);
1080         spin_lock_init(&acm->throttle_lock);
1081         spin_lock_init(&acm->write_lock);
1082         spin_lock_init(&acm->read_lock);
1083         mutex_init(&acm->mutex);
1084         acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1085
1086         buf = usb_buffer_alloc(usb_dev, ctrlsize, GFP_KERNEL, &acm->ctrl_dma);
1087         if (!buf) {
1088                 dev_dbg(&intf->dev, "out of memory (ctrl buffer alloc)\n");
1089                 goto alloc_fail2;
1090         }
1091         acm->ctrl_buffer = buf;
1092
1093         if (acm_write_buffers_alloc(acm) < 0) {
1094                 dev_dbg(&intf->dev, "out of memory (write buffer alloc)\n");
1095                 goto alloc_fail4;
1096         }
1097
1098         acm->ctrlurb = usb_alloc_urb(0, GFP_KERNEL);
1099         if (!acm->ctrlurb) {
1100                 dev_dbg(&intf->dev, "out of memory (ctrlurb kmalloc)\n");
1101                 goto alloc_fail5;
1102         }
1103         for (i = 0; i < num_rx_buf; i++) {
1104                 struct acm_ru *rcv = &(acm->ru[i]);
1105
1106                 if (!(rcv->urb = usb_alloc_urb(0, GFP_KERNEL))) {
1107                         dev_dbg(&intf->dev, "out of memory (read urbs usb_alloc_urb)\n");
1108                         goto alloc_fail7;
1109                 }
1110
1111                 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1112                 rcv->instance = acm;
1113         }
1114         for (i = 0; i < num_rx_buf; i++) {
1115                 struct acm_rb *rb = &(acm->rb[i]);
1116
1117                 rb->base = usb_buffer_alloc(acm->dev, readsize,
1118                                 GFP_KERNEL, &rb->dma);
1119                 if (!rb->base) {
1120                         dev_dbg(&intf->dev, "out of memory (read bufs usb_buffer_alloc)\n");
1121                         goto alloc_fail7;
1122                 }
1123         }
1124         for(i = 0; i < ACM_NW; i++)
1125         {
1126                 struct acm_wb *snd = &(acm->wb[i]);
1127
1128                 if (!(snd->urb = usb_alloc_urb(0, GFP_KERNEL))) {
1129                         dev_dbg(&intf->dev, "out of memory (write urbs usb_alloc_urb)");
1130                         goto alloc_fail7;
1131                 }
1132
1133                 usb_fill_bulk_urb(snd->urb, usb_dev, usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1134                                 NULL, acm->writesize, acm_write_bulk, snd);
1135                 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1136                 snd->instance = acm;
1137         }
1138
1139         usb_set_intfdata (intf, acm);
1140
1141         i = device_create_file(&intf->dev, &dev_attr_bmCapabilities);
1142         if (i < 0)
1143                 goto alloc_fail8;
1144
1145         if (cfd) { /* export the country data */
1146                 acm->country_codes = kmalloc(cfd->bLength - 4, GFP_KERNEL);
1147                 if (!acm->country_codes)
1148                         goto skip_countries;
1149                 acm->country_code_size = cfd->bLength - 4;
1150                 memcpy(acm->country_codes, (u8 *)&cfd->wCountyCode0, cfd->bLength - 4);
1151                 acm->country_rel_date = cfd->iCountryCodeRelDate;
1152
1153                 i = device_create_file(&intf->dev, &dev_attr_wCountryCodes);
1154                 if (i < 0) {
1155                         kfree(acm->country_codes);
1156                         goto skip_countries;
1157                 }
1158
1159                 i = device_create_file(&intf->dev, &dev_attr_iCountryCodeRelDate);
1160                 if (i < 0) {
1161                         kfree(acm->country_codes);
1162                         goto skip_countries;
1163                 }
1164         }
1165
1166 skip_countries:
1167         usb_fill_int_urb(acm->ctrlurb, usb_dev, usb_rcvintpipe(usb_dev, epctrl->bEndpointAddress),
1168                          acm->ctrl_buffer, ctrlsize, acm_ctrl_irq, acm, epctrl->bInterval);
1169         acm->ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1170         acm->ctrlurb->transfer_dma = acm->ctrl_dma;
1171
1172         dev_info(&intf->dev, "ttyACM%d: USB ACM device\n", minor);
1173
1174         acm_set_control(acm, acm->ctrlout);
1175
1176         acm->line.dwDTERate = cpu_to_le32(9600);
1177         acm->line.bDataBits = 8;
1178         acm_set_line(acm, &acm->line);
1179
1180         usb_driver_claim_interface(&acm_driver, data_interface, acm);
1181         usb_set_intfdata(data_interface, acm);
1182
1183         usb_get_intf(control_interface);
1184         tty_register_device(acm_tty_driver, minor, &control_interface->dev);
1185
1186         acm_table[minor] = acm;
1187
1188         return 0;
1189 alloc_fail8:
1190         for (i = 0; i < ACM_NW; i++)
1191                 usb_free_urb(acm->wb[i].urb);
1192 alloc_fail7:
1193         acm_read_buffers_free(acm);
1194         for (i = 0; i < num_rx_buf; i++)
1195                 usb_free_urb(acm->ru[i].urb);
1196         usb_free_urb(acm->ctrlurb);
1197 alloc_fail5:
1198         acm_write_buffers_free(acm);
1199 alloc_fail4:
1200         usb_buffer_free(usb_dev, ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1201 alloc_fail2:
1202         kfree(acm);
1203 alloc_fail:
1204         return -ENOMEM;
1205 }
1206
1207 static void stop_data_traffic(struct acm *acm)
1208 {
1209         int i;
1210         dbg("Entering stop_data_traffic");
1211
1212         tasklet_disable(&acm->urb_task);
1213
1214         usb_kill_urb(acm->ctrlurb);
1215         for(i = 0; i < ACM_NW; i++)
1216                 usb_kill_urb(acm->wb[i].urb);
1217         for (i = 0; i < acm->rx_buflimit; i++)
1218                 usb_kill_urb(acm->ru[i].urb);
1219
1220         tasklet_enable(&acm->urb_task);
1221
1222         cancel_work_sync(&acm->work);
1223         cancel_work_sync(&acm->waker);
1224 }
1225
1226 static void acm_disconnect(struct usb_interface *intf)
1227 {
1228         struct acm *acm = usb_get_intfdata(intf);
1229         struct usb_device *usb_dev = interface_to_usbdev(intf);
1230
1231         /* sibling interface is already cleaning up */
1232         if (!acm)
1233                 return;
1234
1235         mutex_lock(&open_mutex);
1236         if (acm->country_codes){
1237                 device_remove_file(&acm->control->dev,
1238                                 &dev_attr_wCountryCodes);
1239                 device_remove_file(&acm->control->dev,
1240                                 &dev_attr_iCountryCodeRelDate);
1241         }
1242         device_remove_file(&acm->control->dev, &dev_attr_bmCapabilities);
1243         acm->dev = NULL;
1244         usb_set_intfdata(acm->control, NULL);
1245         usb_set_intfdata(acm->data, NULL);
1246
1247         stop_data_traffic(acm);
1248
1249         acm_write_buffers_free(acm);
1250         usb_buffer_free(usb_dev, acm->ctrlsize, acm->ctrl_buffer, acm->ctrl_dma);
1251         acm_read_buffers_free(acm);
1252
1253         usb_driver_release_interface(&acm_driver, intf == acm->control ?
1254                                         acm->data : acm->control);
1255
1256         if (!acm->used) {
1257                 acm_tty_unregister(acm);
1258                 mutex_unlock(&open_mutex);
1259                 return;
1260         }
1261
1262         mutex_unlock(&open_mutex);
1263
1264         if (acm->tty)
1265                 tty_hangup(acm->tty);
1266 }
1267
1268 #ifdef CONFIG_PM
1269 static int acm_suspend(struct usb_interface *intf, pm_message_t message)
1270 {
1271         struct acm *acm = usb_get_intfdata(intf);
1272         int cnt;
1273
1274         if (message.event & PM_EVENT_AUTO) {
1275                 int b;
1276
1277                 spin_lock_irq(&acm->read_lock);
1278                 spin_lock(&acm->write_lock);
1279                 b = acm->processing + acm->transmitting;
1280                 spin_unlock(&acm->write_lock);
1281                 spin_unlock_irq(&acm->read_lock);
1282                 if (b)
1283                         return -EBUSY;
1284         }
1285
1286         spin_lock_irq(&acm->read_lock);
1287         spin_lock(&acm->write_lock);
1288         cnt = acm->susp_count++;
1289         spin_unlock(&acm->write_lock);
1290         spin_unlock_irq(&acm->read_lock);
1291
1292         if (cnt)
1293                 return 0;
1294         /*
1295         we treat opened interfaces differently,
1296         we must guard against open
1297         */
1298         mutex_lock(&acm->mutex);
1299
1300         if (acm->used)
1301                 stop_data_traffic(acm);
1302
1303         mutex_unlock(&acm->mutex);
1304         return 0;
1305 }
1306
1307 static int acm_resume(struct usb_interface *intf)
1308 {
1309         struct acm *acm = usb_get_intfdata(intf);
1310         int rv = 0;
1311         int cnt;
1312
1313         spin_lock_irq(&acm->read_lock);
1314         acm->susp_count -= 1;
1315         cnt = acm->susp_count;
1316         spin_unlock_irq(&acm->read_lock);
1317
1318         if (cnt)
1319                 return 0;
1320
1321         mutex_lock(&acm->mutex);
1322         if (acm->used) {
1323                 rv = usb_submit_urb(acm->ctrlurb, GFP_NOIO);
1324                 if (rv < 0)
1325                         goto err_out;
1326
1327                 tasklet_schedule(&acm->urb_task);
1328         }
1329
1330 err_out:
1331         mutex_unlock(&acm->mutex);
1332         return rv;
1333 }
1334
1335 #endif /* CONFIG_PM */
1336 /*
1337  * USB driver structure.
1338  */
1339
1340 static struct usb_device_id acm_ids[] = {
1341         /* quirky and broken devices */
1342         { USB_DEVICE(0x0870, 0x0001), /* Metricom GS Modem */
1343         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1344         },
1345         { USB_DEVICE(0x0e8d, 0x0003), /* FIREFLY, MediaTek Inc; andrey.arapov@gmail.com */
1346         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1347         },
1348         { USB_DEVICE(0x0e8d, 0x3329), /* MediaTek Inc GPS */
1349         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1350         },
1351         { USB_DEVICE(0x0482, 0x0203), /* KYOCERA AH-K3001V */
1352         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1353         },
1354         { USB_DEVICE(0x079b, 0x000f), /* BT On-Air USB MODEM */
1355         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1356         },
1357         { USB_DEVICE(0x0ace, 0x1602), /* ZyDAS 56K USB MODEM */
1358         .driver_info = SINGLE_RX_URB,
1359         },
1360         { USB_DEVICE(0x0ace, 0x1608), /* ZyDAS 56K USB MODEM */
1361         .driver_info = SINGLE_RX_URB, /* firmware bug */
1362         },
1363         { USB_DEVICE(0x0ace, 0x1611), /* ZyDAS 56K USB MODEM - new version */
1364         .driver_info = SINGLE_RX_URB, /* firmware bug */
1365         },
1366         { USB_DEVICE(0x22b8, 0x7000), /* Motorola Q Phone */
1367         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1368         },
1369         { USB_DEVICE(0x0803, 0x3095), /* Zoom Telephonics Model 3095F USB MODEM */
1370         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1371         },
1372         { USB_DEVICE(0x0572, 0x1321), /* Conexant USB MODEM CX93010 */
1373         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1374         },
1375         { USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
1376         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1377         },
1378         { USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
1379         .driver_info = NO_UNION_NORMAL, /* has no union descriptor */
1380         },
1381         { USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
1382         },
1383         { USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
1384         .driver_info = NO_UNION_NORMAL, /* union descriptor misplaced on
1385                                            data interface instead of
1386                                            communications interface.
1387                                            Maybe we should define a new
1388                                            quirk for this. */
1389         },
1390
1391         /* control interfaces with various AT-command sets */
1392         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1393                 USB_CDC_ACM_PROTO_AT_V25TER) },
1394         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1395                 USB_CDC_ACM_PROTO_AT_PCCA101) },
1396         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1397                 USB_CDC_ACM_PROTO_AT_PCCA101_WAKE) },
1398         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1399                 USB_CDC_ACM_PROTO_AT_GSM) },
1400         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1401                 USB_CDC_ACM_PROTO_AT_3G ) },
1402         { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
1403                 USB_CDC_ACM_PROTO_AT_CDMA) },
1404
1405         /* NOTE:  COMM/ACM/0xff is likely MSFT RNDIS ... NOT a modem!! */
1406         { }
1407 };
1408
1409 MODULE_DEVICE_TABLE (usb, acm_ids);
1410
1411 static struct usb_driver acm_driver = {
1412         .name =         "cdc_acm",
1413         .probe =        acm_probe,
1414         .disconnect =   acm_disconnect,
1415 #ifdef CONFIG_PM
1416         .suspend =      acm_suspend,
1417         .resume =       acm_resume,
1418 #endif
1419         .id_table =     acm_ids,
1420 #ifdef CONFIG_PM
1421         .supports_autosuspend = 1,
1422 #endif
1423 };
1424
1425 /*
1426  * TTY driver structures.
1427  */
1428
1429 static const struct tty_operations acm_ops = {
1430         .open =                 acm_tty_open,
1431         .close =                acm_tty_close,
1432         .write =                acm_tty_write,
1433         .write_room =           acm_tty_write_room,
1434         .ioctl =                acm_tty_ioctl,
1435         .throttle =             acm_tty_throttle,
1436         .unthrottle =           acm_tty_unthrottle,
1437         .chars_in_buffer =      acm_tty_chars_in_buffer,
1438         .break_ctl =            acm_tty_break_ctl,
1439         .set_termios =          acm_tty_set_termios,
1440         .tiocmget =             acm_tty_tiocmget,
1441         .tiocmset =             acm_tty_tiocmset,
1442 };
1443
1444 /*
1445  * Init / exit.
1446  */
1447
1448 static int __init acm_init(void)
1449 {
1450         int retval;
1451         acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1452         if (!acm_tty_driver)
1453                 return -ENOMEM;
1454         acm_tty_driver->owner = THIS_MODULE,
1455         acm_tty_driver->driver_name = "acm",
1456         acm_tty_driver->name = "ttyACM",
1457         acm_tty_driver->major = ACM_TTY_MAJOR,
1458         acm_tty_driver->minor_start = 0,
1459         acm_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,
1460         acm_tty_driver->subtype = SERIAL_TYPE_NORMAL,
1461         acm_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1462         acm_tty_driver->init_termios = tty_std_termios;
1463         acm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1464         tty_set_operations(acm_tty_driver, &acm_ops);
1465
1466         retval = tty_register_driver(acm_tty_driver);
1467         if (retval) {
1468                 put_tty_driver(acm_tty_driver);
1469                 return retval;
1470         }
1471
1472         retval = usb_register(&acm_driver);
1473         if (retval) {
1474                 tty_unregister_driver(acm_tty_driver);
1475                 put_tty_driver(acm_tty_driver);
1476                 return retval;
1477         }
1478
1479         printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
1480                DRIVER_DESC "\n");
1481
1482         return 0;
1483 }
1484
1485 static void __exit acm_exit(void)
1486 {
1487         usb_deregister(&acm_driver);
1488         tty_unregister_driver(acm_tty_driver);
1489         put_tty_driver(acm_tty_driver);
1490 }
1491
1492 module_init(acm_init);
1493 module_exit(acm_exit);
1494
1495 MODULE_AUTHOR( DRIVER_AUTHOR );
1496 MODULE_DESCRIPTION( DRIVER_DESC );
1497 MODULE_LICENSE("GPL");
1498 MODULE_ALIAS_CHARDEV_MAJOR(ACM_TTY_MAJOR);