usb: renesas_usbhs: shrink spin lock area
[pandora-kernel.git] / drivers / usb / class / usbtmc.c
1 /**
2  * drivers/usb/class/usbtmc.c - USB Test & Measurement class driver
3  *
4  * Copyright (C) 2007 Stefan Kopp, Gechingen, Germany
5  * Copyright (C) 2008 Novell, Inc.
6  * Copyright (C) 2008 Greg Kroah-Hartman <gregkh@suse.de>
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * The GNU General Public License is available at
19  * http://www.gnu.org/copyleft/gpl.html.
20  */
21
22 #include <linux/init.h>
23 #include <linux/module.h>
24 #include <linux/kernel.h>
25 #include <linux/fs.h>
26 #include <linux/uaccess.h>
27 #include <linux/kref.h>
28 #include <linux/slab.h>
29 #include <linux/mutex.h>
30 #include <linux/usb.h>
31 #include <linux/usb/tmc.h>
32
33
34 #define USBTMC_MINOR_BASE       176
35
36 /*
37  * Size of driver internal IO buffer. Must be multiple of 4 and at least as
38  * large as wMaxPacketSize (which is usually 512 bytes).
39  */
40 #define USBTMC_SIZE_IOBUFFER    2048
41
42 /* Default USB timeout (in milliseconds) */
43 #define USBTMC_TIMEOUT          5000
44
45 /*
46  * Maximum number of read cycles to empty bulk in endpoint during CLEAR and
47  * ABORT_BULK_IN requests. Ends the loop if (for whatever reason) a short
48  * packet is never read.
49  */
50 #define USBTMC_MAX_READS_TO_CLEAR_BULK_IN       100
51
52 static const struct usb_device_id usbtmc_devices[] = {
53         { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), },
54         { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 1), },
55         { 0, } /* terminating entry */
56 };
57 MODULE_DEVICE_TABLE(usb, usbtmc_devices);
58
59 /*
60  * This structure is the capabilities for the device
61  * See section 4.2.1.8 of the USBTMC specification,
62  * and section 4.2.2 of the USBTMC usb488 subclass
63  * specification for details.
64  */
65 struct usbtmc_dev_capabilities {
66         __u8 interface_capabilities;
67         __u8 device_capabilities;
68         __u8 usb488_interface_capabilities;
69         __u8 usb488_device_capabilities;
70 };
71
72 /* This structure holds private data for each USBTMC device. One copy is
73  * allocated for each USBTMC device in the driver's probe function.
74  */
75 struct usbtmc_device_data {
76         const struct usb_device_id *id;
77         struct usb_device *usb_dev;
78         struct usb_interface *intf;
79
80         unsigned int bulk_in;
81         unsigned int bulk_out;
82
83         u8 bTag;
84         u8 bTag_last_write;     /* needed for abort */
85         u8 bTag_last_read;      /* needed for abort */
86
87         /* attributes from the USB TMC spec for this device */
88         u8 TermChar;
89         bool TermCharEnabled;
90         bool auto_abort;
91
92         bool zombie; /* fd of disconnected device */
93
94         struct usbtmc_dev_capabilities  capabilities;
95         struct kref kref;
96         struct mutex io_mutex;  /* only one i/o function running at a time */
97 };
98 #define to_usbtmc_data(d) container_of(d, struct usbtmc_device_data, kref)
99
100 /* Forward declarations */
101 static struct usb_driver usbtmc_driver;
102
103 static void usbtmc_delete(struct kref *kref)
104 {
105         struct usbtmc_device_data *data = to_usbtmc_data(kref);
106
107         usb_put_dev(data->usb_dev);
108         kfree(data);
109 }
110
111 static int usbtmc_open(struct inode *inode, struct file *filp)
112 {
113         struct usb_interface *intf;
114         struct usbtmc_device_data *data;
115         int retval = 0;
116
117         intf = usb_find_interface(&usbtmc_driver, iminor(inode));
118         if (!intf) {
119                 printk(KERN_ERR KBUILD_MODNAME
120                        ": can not find device for minor %d", iminor(inode));
121                 retval = -ENODEV;
122                 goto exit;
123         }
124
125         data = usb_get_intfdata(intf);
126         kref_get(&data->kref);
127
128         /* Store pointer in file structure's private data field */
129         filp->private_data = data;
130
131 exit:
132         return retval;
133 }
134
135 static int usbtmc_release(struct inode *inode, struct file *file)
136 {
137         struct usbtmc_device_data *data = file->private_data;
138
139         kref_put(&data->kref, usbtmc_delete);
140         return 0;
141 }
142
143 static int usbtmc_ioctl_abort_bulk_in(struct usbtmc_device_data *data)
144 {
145         u8 *buffer;
146         struct device *dev;
147         int rv;
148         int n;
149         int actual;
150         struct usb_host_interface *current_setting;
151         int max_size;
152
153         dev = &data->intf->dev;
154         buffer = kmalloc(USBTMC_SIZE_IOBUFFER, GFP_KERNEL);
155         if (!buffer)
156                 return -ENOMEM;
157
158         rv = usb_control_msg(data->usb_dev,
159                              usb_rcvctrlpipe(data->usb_dev, 0),
160                              USBTMC_REQUEST_INITIATE_ABORT_BULK_IN,
161                              USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
162                              data->bTag_last_read, data->bulk_in,
163                              buffer, 2, USBTMC_TIMEOUT);
164
165         if (rv < 0) {
166                 dev_err(dev, "usb_control_msg returned %d\n", rv);
167                 goto exit;
168         }
169
170         dev_dbg(dev, "INITIATE_ABORT_BULK_IN returned %x\n", buffer[0]);
171
172         if (buffer[0] == USBTMC_STATUS_FAILED) {
173                 rv = 0;
174                 goto exit;
175         }
176
177         if (buffer[0] != USBTMC_STATUS_SUCCESS) {
178                 dev_err(dev, "INITIATE_ABORT_BULK_IN returned %x\n",
179                         buffer[0]);
180                 rv = -EPERM;
181                 goto exit;
182         }
183
184         max_size = 0;
185         current_setting = data->intf->cur_altsetting;
186         for (n = 0; n < current_setting->desc.bNumEndpoints; n++)
187                 if (current_setting->endpoint[n].desc.bEndpointAddress ==
188                         data->bulk_in)
189                         max_size = le16_to_cpu(current_setting->endpoint[n].
190                                                 desc.wMaxPacketSize);
191
192         if (max_size == 0) {
193                 dev_err(dev, "Couldn't get wMaxPacketSize\n");
194                 rv = -EPERM;
195                 goto exit;
196         }
197
198         dev_dbg(&data->intf->dev, "wMaxPacketSize is %d\n", max_size);
199
200         n = 0;
201
202         do {
203                 dev_dbg(dev, "Reading from bulk in EP\n");
204
205                 rv = usb_bulk_msg(data->usb_dev,
206                                   usb_rcvbulkpipe(data->usb_dev,
207                                                   data->bulk_in),
208                                   buffer, USBTMC_SIZE_IOBUFFER,
209                                   &actual, USBTMC_TIMEOUT);
210
211                 n++;
212
213                 if (rv < 0) {
214                         dev_err(dev, "usb_bulk_msg returned %d\n", rv);
215                         goto exit;
216                 }
217         } while ((actual == max_size) &&
218                  (n < USBTMC_MAX_READS_TO_CLEAR_BULK_IN));
219
220         if (actual == max_size) {
221                 dev_err(dev, "Couldn't clear device buffer within %d cycles\n",
222                         USBTMC_MAX_READS_TO_CLEAR_BULK_IN);
223                 rv = -EPERM;
224                 goto exit;
225         }
226
227         n = 0;
228
229 usbtmc_abort_bulk_in_status:
230         rv = usb_control_msg(data->usb_dev,
231                              usb_rcvctrlpipe(data->usb_dev, 0),
232                              USBTMC_REQUEST_CHECK_ABORT_BULK_IN_STATUS,
233                              USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
234                              0, data->bulk_in, buffer, 0x08,
235                              USBTMC_TIMEOUT);
236
237         if (rv < 0) {
238                 dev_err(dev, "usb_control_msg returned %d\n", rv);
239                 goto exit;
240         }
241
242         dev_dbg(dev, "INITIATE_ABORT_BULK_IN returned %x\n", buffer[0]);
243
244         if (buffer[0] == USBTMC_STATUS_SUCCESS) {
245                 rv = 0;
246                 goto exit;
247         }
248
249         if (buffer[0] != USBTMC_STATUS_PENDING) {
250                 dev_err(dev, "INITIATE_ABORT_BULK_IN returned %x\n", buffer[0]);
251                 rv = -EPERM;
252                 goto exit;
253         }
254
255         if (buffer[1] == 1)
256                 do {
257                         dev_dbg(dev, "Reading from bulk in EP\n");
258
259                         rv = usb_bulk_msg(data->usb_dev,
260                                           usb_rcvbulkpipe(data->usb_dev,
261                                                           data->bulk_in),
262                                           buffer, USBTMC_SIZE_IOBUFFER,
263                                           &actual, USBTMC_TIMEOUT);
264
265                         n++;
266
267                         if (rv < 0) {
268                                 dev_err(dev, "usb_bulk_msg returned %d\n", rv);
269                                 goto exit;
270                         }
271                 } while ((actual = max_size) &&
272                          (n < USBTMC_MAX_READS_TO_CLEAR_BULK_IN));
273
274         if (actual == max_size) {
275                 dev_err(dev, "Couldn't clear device buffer within %d cycles\n",
276                         USBTMC_MAX_READS_TO_CLEAR_BULK_IN);
277                 rv = -EPERM;
278                 goto exit;
279         }
280
281         goto usbtmc_abort_bulk_in_status;
282
283 exit:
284         kfree(buffer);
285         return rv;
286
287 }
288
289 static int usbtmc_ioctl_abort_bulk_out(struct usbtmc_device_data *data)
290 {
291         struct device *dev;
292         u8 *buffer;
293         int rv;
294         int n;
295
296         dev = &data->intf->dev;
297
298         buffer = kmalloc(8, GFP_KERNEL);
299         if (!buffer)
300                 return -ENOMEM;
301
302         rv = usb_control_msg(data->usb_dev,
303                              usb_rcvctrlpipe(data->usb_dev, 0),
304                              USBTMC_REQUEST_INITIATE_ABORT_BULK_OUT,
305                              USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
306                              data->bTag_last_write, data->bulk_out,
307                              buffer, 2, USBTMC_TIMEOUT);
308
309         if (rv < 0) {
310                 dev_err(dev, "usb_control_msg returned %d\n", rv);
311                 goto exit;
312         }
313
314         dev_dbg(dev, "INITIATE_ABORT_BULK_OUT returned %x\n", buffer[0]);
315
316         if (buffer[0] != USBTMC_STATUS_SUCCESS) {
317                 dev_err(dev, "INITIATE_ABORT_BULK_OUT returned %x\n",
318                         buffer[0]);
319                 rv = -EPERM;
320                 goto exit;
321         }
322
323         n = 0;
324
325 usbtmc_abort_bulk_out_check_status:
326         rv = usb_control_msg(data->usb_dev,
327                              usb_rcvctrlpipe(data->usb_dev, 0),
328                              USBTMC_REQUEST_CHECK_ABORT_BULK_OUT_STATUS,
329                              USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
330                              0, data->bulk_out, buffer, 0x08,
331                              USBTMC_TIMEOUT);
332         n++;
333         if (rv < 0) {
334                 dev_err(dev, "usb_control_msg returned %d\n", rv);
335                 goto exit;
336         }
337
338         dev_dbg(dev, "CHECK_ABORT_BULK_OUT returned %x\n", buffer[0]);
339
340         if (buffer[0] == USBTMC_STATUS_SUCCESS)
341                 goto usbtmc_abort_bulk_out_clear_halt;
342
343         if ((buffer[0] == USBTMC_STATUS_PENDING) &&
344             (n < USBTMC_MAX_READS_TO_CLEAR_BULK_IN))
345                 goto usbtmc_abort_bulk_out_check_status;
346
347         rv = -EPERM;
348         goto exit;
349
350 usbtmc_abort_bulk_out_clear_halt:
351         rv = usb_clear_halt(data->usb_dev,
352                             usb_sndbulkpipe(data->usb_dev, data->bulk_out));
353
354         if (rv < 0) {
355                 dev_err(dev, "usb_control_msg returned %d\n", rv);
356                 goto exit;
357         }
358         rv = 0;
359
360 exit:
361         kfree(buffer);
362         return rv;
363 }
364
365 static ssize_t usbtmc_read(struct file *filp, char __user *buf,
366                            size_t count, loff_t *f_pos)
367 {
368         struct usbtmc_device_data *data;
369         struct device *dev;
370         u32 n_characters;
371         u8 *buffer;
372         int actual;
373         size_t done;
374         size_t remaining;
375         int retval;
376         size_t this_part;
377
378         /* Get pointer to private data structure */
379         data = filp->private_data;
380         dev = &data->intf->dev;
381
382         buffer = kmalloc(USBTMC_SIZE_IOBUFFER, GFP_KERNEL);
383         if (!buffer)
384                 return -ENOMEM;
385
386         mutex_lock(&data->io_mutex);
387         if (data->zombie) {
388                 retval = -ENODEV;
389                 goto exit;
390         }
391
392         remaining = count;
393         done = 0;
394
395         while (remaining > 0) {
396                 if (remaining > USBTMC_SIZE_IOBUFFER - 12 - 3)
397                         this_part = USBTMC_SIZE_IOBUFFER - 12 - 3;
398                 else
399                         this_part = remaining;
400
401                 /* Setup IO buffer for DEV_DEP_MSG_IN message
402                  * Refer to class specs for details
403                  */
404                 buffer[0] = 2;
405                 buffer[1] = data->bTag;
406                 buffer[2] = ~(data->bTag);
407                 buffer[3] = 0; /* Reserved */
408                 buffer[4] = (this_part) & 255;
409                 buffer[5] = ((this_part) >> 8) & 255;
410                 buffer[6] = ((this_part) >> 16) & 255;
411                 buffer[7] = ((this_part) >> 24) & 255;
412                 buffer[8] = data->TermCharEnabled * 2;
413                 /* Use term character? */
414                 buffer[9] = data->TermChar;
415                 buffer[10] = 0; /* Reserved */
416                 buffer[11] = 0; /* Reserved */
417
418                 /* Send bulk URB */
419                 retval = usb_bulk_msg(data->usb_dev,
420                                       usb_sndbulkpipe(data->usb_dev,
421                                                       data->bulk_out),
422                                       buffer, 12, &actual, USBTMC_TIMEOUT);
423
424                 /* Store bTag (in case we need to abort) */
425                 data->bTag_last_write = data->bTag;
426
427                 /* Increment bTag -- and increment again if zero */
428                 data->bTag++;
429                 if (!data->bTag)
430                         (data->bTag)++;
431
432                 if (retval < 0) {
433                         dev_err(dev, "usb_bulk_msg returned %d\n", retval);
434                         if (data->auto_abort)
435                                 usbtmc_ioctl_abort_bulk_out(data);
436                         goto exit;
437                 }
438
439                 /* Send bulk URB */
440                 retval = usb_bulk_msg(data->usb_dev,
441                                       usb_rcvbulkpipe(data->usb_dev,
442                                                       data->bulk_in),
443                                       buffer, USBTMC_SIZE_IOBUFFER, &actual,
444                                       USBTMC_TIMEOUT);
445
446                 /* Store bTag (in case we need to abort) */
447                 data->bTag_last_read = data->bTag;
448
449                 if (retval < 0) {
450                         dev_err(dev, "Unable to read data, error %d\n", retval);
451                         if (data->auto_abort)
452                                 usbtmc_ioctl_abort_bulk_in(data);
453                         goto exit;
454                 }
455
456                 /* How many characters did the instrument send? */
457                 n_characters = buffer[4] +
458                                (buffer[5] << 8) +
459                                (buffer[6] << 16) +
460                                (buffer[7] << 24);
461
462                 /* Ensure the instrument doesn't lie about it */
463                 if(n_characters > actual - 12) {
464                         dev_err(dev, "Device lies about message size: %u > %d\n", n_characters, actual - 12);
465                         n_characters = actual - 12;
466                 }
467
468                 /* Ensure the instrument doesn't send more back than requested */
469                 if(n_characters > this_part) {
470                         dev_err(dev, "Device returns more than requested: %zu > %zu\n", done + n_characters, done + this_part);
471                         n_characters = this_part;
472                 }
473
474                 /* Bound amount of data received by amount of data requested */
475                 if (n_characters > this_part)
476                         n_characters = this_part;
477
478                 /* Copy buffer to user space */
479                 if (copy_to_user(buf + done, &buffer[12], n_characters)) {
480                         /* There must have been an addressing problem */
481                         retval = -EFAULT;
482                         goto exit;
483                 }
484
485                 done += n_characters;
486                 /* Terminate if end-of-message bit received from device */
487                 if ((buffer[8] &  0x01) && (actual >= n_characters + 12))
488                         remaining = 0;
489                 else
490                         remaining -= n_characters;
491         }
492
493         /* Update file position value */
494         *f_pos = *f_pos + done;
495         retval = done;
496
497 exit:
498         mutex_unlock(&data->io_mutex);
499         kfree(buffer);
500         return retval;
501 }
502
503 static ssize_t usbtmc_write(struct file *filp, const char __user *buf,
504                             size_t count, loff_t *f_pos)
505 {
506         struct usbtmc_device_data *data;
507         u8 *buffer;
508         int retval;
509         int actual;
510         unsigned long int n_bytes;
511         int remaining;
512         int done;
513         int this_part;
514
515         data = filp->private_data;
516
517         buffer = kmalloc(USBTMC_SIZE_IOBUFFER, GFP_KERNEL);
518         if (!buffer)
519                 return -ENOMEM;
520
521         mutex_lock(&data->io_mutex);
522         if (data->zombie) {
523                 retval = -ENODEV;
524                 goto exit;
525         }
526
527         remaining = count;
528         done = 0;
529
530         while (remaining > 0) {
531                 if (remaining > USBTMC_SIZE_IOBUFFER - 12) {
532                         this_part = USBTMC_SIZE_IOBUFFER - 12;
533                         buffer[8] = 0;
534                 } else {
535                         this_part = remaining;
536                         buffer[8] = 1;
537                 }
538
539                 /* Setup IO buffer for DEV_DEP_MSG_OUT message */
540                 buffer[0] = 1;
541                 buffer[1] = data->bTag;
542                 buffer[2] = ~(data->bTag);
543                 buffer[3] = 0; /* Reserved */
544                 buffer[4] = this_part & 255;
545                 buffer[5] = (this_part >> 8) & 255;
546                 buffer[6] = (this_part >> 16) & 255;
547                 buffer[7] = (this_part >> 24) & 255;
548                 /* buffer[8] is set above... */
549                 buffer[9] = 0; /* Reserved */
550                 buffer[10] = 0; /* Reserved */
551                 buffer[11] = 0; /* Reserved */
552
553                 if (copy_from_user(&buffer[12], buf + done, this_part)) {
554                         retval = -EFAULT;
555                         goto exit;
556                 }
557
558                 n_bytes = roundup(12 + this_part, 4);
559                 memset(buffer + 12 + this_part, 0, n_bytes - (12 + this_part));
560
561                 do {
562                         retval = usb_bulk_msg(data->usb_dev,
563                                               usb_sndbulkpipe(data->usb_dev,
564                                                               data->bulk_out),
565                                               buffer, n_bytes,
566                                               &actual, USBTMC_TIMEOUT);
567                         if (retval != 0)
568                                 break;
569                         n_bytes -= actual;
570                 } while (n_bytes);
571
572                 data->bTag_last_write = data->bTag;
573                 data->bTag++;
574
575                 if (!data->bTag)
576                         data->bTag++;
577
578                 if (retval < 0) {
579                         dev_err(&data->intf->dev,
580                                 "Unable to send data, error %d\n", retval);
581                         if (data->auto_abort)
582                                 usbtmc_ioctl_abort_bulk_out(data);
583                         goto exit;
584                 }
585
586                 remaining -= this_part;
587                 done += this_part;
588         }
589
590         retval = count;
591 exit:
592         mutex_unlock(&data->io_mutex);
593         kfree(buffer);
594         return retval;
595 }
596
597 static int usbtmc_ioctl_clear(struct usbtmc_device_data *data)
598 {
599         struct usb_host_interface *current_setting;
600         struct usb_endpoint_descriptor *desc;
601         struct device *dev;
602         u8 *buffer;
603         int rv;
604         int n;
605         int actual;
606         int max_size;
607
608         dev = &data->intf->dev;
609
610         dev_dbg(dev, "Sending INITIATE_CLEAR request\n");
611
612         buffer = kmalloc(USBTMC_SIZE_IOBUFFER, GFP_KERNEL);
613         if (!buffer)
614                 return -ENOMEM;
615
616         rv = usb_control_msg(data->usb_dev,
617                              usb_rcvctrlpipe(data->usb_dev, 0),
618                              USBTMC_REQUEST_INITIATE_CLEAR,
619                              USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
620                              0, 0, buffer, 1, USBTMC_TIMEOUT);
621         if (rv < 0) {
622                 dev_err(dev, "usb_control_msg returned %d\n", rv);
623                 goto exit;
624         }
625
626         dev_dbg(dev, "INITIATE_CLEAR returned %x\n", buffer[0]);
627
628         if (buffer[0] != USBTMC_STATUS_SUCCESS) {
629                 dev_err(dev, "INITIATE_CLEAR returned %x\n", buffer[0]);
630                 rv = -EPERM;
631                 goto exit;
632         }
633
634         max_size = 0;
635         current_setting = data->intf->cur_altsetting;
636         for (n = 0; n < current_setting->desc.bNumEndpoints; n++) {
637                 desc = &current_setting->endpoint[n].desc;
638                 if (desc->bEndpointAddress == data->bulk_in)
639                         max_size = le16_to_cpu(desc->wMaxPacketSize);
640         }
641
642         if (max_size == 0) {
643                 dev_err(dev, "Couldn't get wMaxPacketSize\n");
644                 rv = -EPERM;
645                 goto exit;
646         }
647
648         dev_dbg(dev, "wMaxPacketSize is %d\n", max_size);
649
650         n = 0;
651
652 usbtmc_clear_check_status:
653
654         dev_dbg(dev, "Sending CHECK_CLEAR_STATUS request\n");
655
656         rv = usb_control_msg(data->usb_dev,
657                              usb_rcvctrlpipe(data->usb_dev, 0),
658                              USBTMC_REQUEST_CHECK_CLEAR_STATUS,
659                              USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
660                              0, 0, buffer, 2, USBTMC_TIMEOUT);
661         if (rv < 0) {
662                 dev_err(dev, "usb_control_msg returned %d\n", rv);
663                 goto exit;
664         }
665
666         dev_dbg(dev, "CHECK_CLEAR_STATUS returned %x\n", buffer[0]);
667
668         if (buffer[0] == USBTMC_STATUS_SUCCESS)
669                 goto usbtmc_clear_bulk_out_halt;
670
671         if (buffer[0] != USBTMC_STATUS_PENDING) {
672                 dev_err(dev, "CHECK_CLEAR_STATUS returned %x\n", buffer[0]);
673                 rv = -EPERM;
674                 goto exit;
675         }
676
677         if (buffer[1] == 1)
678                 do {
679                         dev_dbg(dev, "Reading from bulk in EP\n");
680
681                         rv = usb_bulk_msg(data->usb_dev,
682                                           usb_rcvbulkpipe(data->usb_dev,
683                                                           data->bulk_in),
684                                           buffer, USBTMC_SIZE_IOBUFFER,
685                                           &actual, USBTMC_TIMEOUT);
686                         n++;
687
688                         if (rv < 0) {
689                                 dev_err(dev, "usb_control_msg returned %d\n",
690                                         rv);
691                                 goto exit;
692                         }
693                 } while ((actual == max_size) &&
694                           (n < USBTMC_MAX_READS_TO_CLEAR_BULK_IN));
695
696         if (actual == max_size) {
697                 dev_err(dev, "Couldn't clear device buffer within %d cycles\n",
698                         USBTMC_MAX_READS_TO_CLEAR_BULK_IN);
699                 rv = -EPERM;
700                 goto exit;
701         }
702
703         goto usbtmc_clear_check_status;
704
705 usbtmc_clear_bulk_out_halt:
706
707         rv = usb_clear_halt(data->usb_dev,
708                             usb_sndbulkpipe(data->usb_dev, data->bulk_out));
709         if (rv < 0) {
710                 dev_err(dev, "usb_control_msg returned %d\n", rv);
711                 goto exit;
712         }
713         rv = 0;
714
715 exit:
716         kfree(buffer);
717         return rv;
718 }
719
720 static int usbtmc_ioctl_clear_out_halt(struct usbtmc_device_data *data)
721 {
722         u8 *buffer;
723         int rv;
724
725         buffer = kmalloc(2, GFP_KERNEL);
726         if (!buffer)
727                 return -ENOMEM;
728
729         rv = usb_clear_halt(data->usb_dev,
730                             usb_sndbulkpipe(data->usb_dev, data->bulk_out));
731
732         if (rv < 0) {
733                 dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n",
734                         rv);
735                 goto exit;
736         }
737         rv = 0;
738
739 exit:
740         kfree(buffer);
741         return rv;
742 }
743
744 static int usbtmc_ioctl_clear_in_halt(struct usbtmc_device_data *data)
745 {
746         u8 *buffer;
747         int rv;
748
749         buffer = kmalloc(2, GFP_KERNEL);
750         if (!buffer)
751                 return -ENOMEM;
752
753         rv = usb_clear_halt(data->usb_dev,
754                             usb_rcvbulkpipe(data->usb_dev, data->bulk_in));
755
756         if (rv < 0) {
757                 dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n",
758                         rv);
759                 goto exit;
760         }
761         rv = 0;
762
763 exit:
764         kfree(buffer);
765         return rv;
766 }
767
768 static int get_capabilities(struct usbtmc_device_data *data)
769 {
770         struct device *dev = &data->usb_dev->dev;
771         char *buffer;
772         int rv = 0;
773
774         buffer = kmalloc(0x18, GFP_KERNEL);
775         if (!buffer)
776                 return -ENOMEM;
777
778         rv = usb_control_msg(data->usb_dev, usb_rcvctrlpipe(data->usb_dev, 0),
779                              USBTMC_REQUEST_GET_CAPABILITIES,
780                              USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
781                              0, 0, buffer, 0x18, USBTMC_TIMEOUT);
782         if (rv < 0) {
783                 dev_err(dev, "usb_control_msg returned %d\n", rv);
784                 goto err_out;
785         }
786
787         dev_dbg(dev, "GET_CAPABILITIES returned %x\n", buffer[0]);
788         if (buffer[0] != USBTMC_STATUS_SUCCESS) {
789                 dev_err(dev, "GET_CAPABILITIES returned %x\n", buffer[0]);
790                 rv = -EPERM;
791                 goto err_out;
792         }
793         dev_dbg(dev, "Interface capabilities are %x\n", buffer[4]);
794         dev_dbg(dev, "Device capabilities are %x\n", buffer[5]);
795         dev_dbg(dev, "USB488 interface capabilities are %x\n", buffer[14]);
796         dev_dbg(dev, "USB488 device capabilities are %x\n", buffer[15]);
797
798         data->capabilities.interface_capabilities = buffer[4];
799         data->capabilities.device_capabilities = buffer[5];
800         data->capabilities.usb488_interface_capabilities = buffer[14];
801         data->capabilities.usb488_device_capabilities = buffer[15];
802         rv = 0;
803
804 err_out:
805         kfree(buffer);
806         return rv;
807 }
808
809 #define capability_attribute(name)                                      \
810 static ssize_t show_##name(struct device *dev,                          \
811                            struct device_attribute *attr, char *buf)    \
812 {                                                                       \
813         struct usb_interface *intf = to_usb_interface(dev);             \
814         struct usbtmc_device_data *data = usb_get_intfdata(intf);       \
815                                                                         \
816         return sprintf(buf, "%d\n", data->capabilities.name);           \
817 }                                                                       \
818 static DEVICE_ATTR(name, S_IRUGO, show_##name, NULL)
819
820 capability_attribute(interface_capabilities);
821 capability_attribute(device_capabilities);
822 capability_attribute(usb488_interface_capabilities);
823 capability_attribute(usb488_device_capabilities);
824
825 static struct attribute *capability_attrs[] = {
826         &dev_attr_interface_capabilities.attr,
827         &dev_attr_device_capabilities.attr,
828         &dev_attr_usb488_interface_capabilities.attr,
829         &dev_attr_usb488_device_capabilities.attr,
830         NULL,
831 };
832
833 static struct attribute_group capability_attr_grp = {
834         .attrs = capability_attrs,
835 };
836
837 static ssize_t show_TermChar(struct device *dev,
838                              struct device_attribute *attr, char *buf)
839 {
840         struct usb_interface *intf = to_usb_interface(dev);
841         struct usbtmc_device_data *data = usb_get_intfdata(intf);
842
843         return sprintf(buf, "%c\n", data->TermChar);
844 }
845
846 static ssize_t store_TermChar(struct device *dev,
847                               struct device_attribute *attr,
848                               const char *buf, size_t count)
849 {
850         struct usb_interface *intf = to_usb_interface(dev);
851         struct usbtmc_device_data *data = usb_get_intfdata(intf);
852
853         if (count < 1)
854                 return -EINVAL;
855         data->TermChar = buf[0];
856         return count;
857 }
858 static DEVICE_ATTR(TermChar, S_IRUGO, show_TermChar, store_TermChar);
859
860 #define data_attribute(name)                                            \
861 static ssize_t show_##name(struct device *dev,                          \
862                            struct device_attribute *attr, char *buf)    \
863 {                                                                       \
864         struct usb_interface *intf = to_usb_interface(dev);             \
865         struct usbtmc_device_data *data = usb_get_intfdata(intf);       \
866                                                                         \
867         return sprintf(buf, "%d\n", data->name);                        \
868 }                                                                       \
869 static ssize_t store_##name(struct device *dev,                         \
870                             struct device_attribute *attr,              \
871                             const char *buf, size_t count)              \
872 {                                                                       \
873         struct usb_interface *intf = to_usb_interface(dev);             \
874         struct usbtmc_device_data *data = usb_get_intfdata(intf);       \
875         ssize_t result;                                                 \
876         unsigned val;                                                   \
877                                                                         \
878         result = sscanf(buf, "%u\n", &val);                             \
879         if (result != 1)                                                \
880                 result = -EINVAL;                                       \
881         data->name = val;                                               \
882         if (result < 0)                                                 \
883                 return result;                                          \
884         else                                                            \
885                 return count;                                           \
886 }                                                                       \
887 static DEVICE_ATTR(name, S_IRUGO, show_##name, store_##name)
888
889 data_attribute(TermCharEnabled);
890 data_attribute(auto_abort);
891
892 static struct attribute *data_attrs[] = {
893         &dev_attr_TermChar.attr,
894         &dev_attr_TermCharEnabled.attr,
895         &dev_attr_auto_abort.attr,
896         NULL,
897 };
898
899 static struct attribute_group data_attr_grp = {
900         .attrs = data_attrs,
901 };
902
903 static int usbtmc_ioctl_indicator_pulse(struct usbtmc_device_data *data)
904 {
905         struct device *dev;
906         u8 *buffer;
907         int rv;
908
909         dev = &data->intf->dev;
910
911         buffer = kmalloc(2, GFP_KERNEL);
912         if (!buffer)
913                 return -ENOMEM;
914
915         rv = usb_control_msg(data->usb_dev,
916                              usb_rcvctrlpipe(data->usb_dev, 0),
917                              USBTMC_REQUEST_INDICATOR_PULSE,
918                              USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
919                              0, 0, buffer, 0x01, USBTMC_TIMEOUT);
920
921         if (rv < 0) {
922                 dev_err(dev, "usb_control_msg returned %d\n", rv);
923                 goto exit;
924         }
925
926         dev_dbg(dev, "INDICATOR_PULSE returned %x\n", buffer[0]);
927
928         if (buffer[0] != USBTMC_STATUS_SUCCESS) {
929                 dev_err(dev, "INDICATOR_PULSE returned %x\n", buffer[0]);
930                 rv = -EPERM;
931                 goto exit;
932         }
933         rv = 0;
934
935 exit:
936         kfree(buffer);
937         return rv;
938 }
939
940 static long usbtmc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
941 {
942         struct usbtmc_device_data *data;
943         int retval = -EBADRQC;
944
945         data = file->private_data;
946         mutex_lock(&data->io_mutex);
947         if (data->zombie) {
948                 retval = -ENODEV;
949                 goto skip_io_on_zombie;
950         }
951
952         switch (cmd) {
953         case USBTMC_IOCTL_CLEAR_OUT_HALT:
954                 retval = usbtmc_ioctl_clear_out_halt(data);
955                 break;
956
957         case USBTMC_IOCTL_CLEAR_IN_HALT:
958                 retval = usbtmc_ioctl_clear_in_halt(data);
959                 break;
960
961         case USBTMC_IOCTL_INDICATOR_PULSE:
962                 retval = usbtmc_ioctl_indicator_pulse(data);
963                 break;
964
965         case USBTMC_IOCTL_CLEAR:
966                 retval = usbtmc_ioctl_clear(data);
967                 break;
968
969         case USBTMC_IOCTL_ABORT_BULK_OUT:
970                 retval = usbtmc_ioctl_abort_bulk_out(data);
971                 break;
972
973         case USBTMC_IOCTL_ABORT_BULK_IN:
974                 retval = usbtmc_ioctl_abort_bulk_in(data);
975                 break;
976         }
977
978 skip_io_on_zombie:
979         mutex_unlock(&data->io_mutex);
980         return retval;
981 }
982
983 static const struct file_operations fops = {
984         .owner          = THIS_MODULE,
985         .read           = usbtmc_read,
986         .write          = usbtmc_write,
987         .open           = usbtmc_open,
988         .release        = usbtmc_release,
989         .unlocked_ioctl = usbtmc_ioctl,
990         .llseek         = default_llseek,
991 };
992
993 static struct usb_class_driver usbtmc_class = {
994         .name =         "usbtmc%d",
995         .fops =         &fops,
996         .minor_base =   USBTMC_MINOR_BASE,
997 };
998
999
1000 static int usbtmc_probe(struct usb_interface *intf,
1001                         const struct usb_device_id *id)
1002 {
1003         struct usbtmc_device_data *data;
1004         struct usb_host_interface *iface_desc;
1005         struct usb_endpoint_descriptor *endpoint;
1006         int n;
1007         int retcode;
1008
1009         dev_dbg(&intf->dev, "%s called\n", __func__);
1010
1011         data = kmalloc(sizeof(struct usbtmc_device_data), GFP_KERNEL);
1012         if (!data) {
1013                 dev_err(&intf->dev, "Unable to allocate kernel memory\n");
1014                 return -ENOMEM;
1015         }
1016
1017         data->intf = intf;
1018         data->id = id;
1019         data->usb_dev = usb_get_dev(interface_to_usbdev(intf));
1020         usb_set_intfdata(intf, data);
1021         kref_init(&data->kref);
1022         mutex_init(&data->io_mutex);
1023         data->zombie = 0;
1024
1025         /* Initialize USBTMC bTag and other fields */
1026         data->bTag      = 1;
1027         data->TermCharEnabled = 0;
1028         data->TermChar = '\n';
1029
1030         /* USBTMC devices have only one setting, so use that */
1031         iface_desc = data->intf->cur_altsetting;
1032
1033         /* Find bulk in endpoint */
1034         for (n = 0; n < iface_desc->desc.bNumEndpoints; n++) {
1035                 endpoint = &iface_desc->endpoint[n].desc;
1036
1037                 if (usb_endpoint_is_bulk_in(endpoint)) {
1038                         data->bulk_in = endpoint->bEndpointAddress;
1039                         dev_dbg(&intf->dev, "Found bulk in endpoint at %u\n",
1040                                 data->bulk_in);
1041                         break;
1042                 }
1043         }
1044
1045         /* Find bulk out endpoint */
1046         for (n = 0; n < iface_desc->desc.bNumEndpoints; n++) {
1047                 endpoint = &iface_desc->endpoint[n].desc;
1048
1049                 if (usb_endpoint_is_bulk_out(endpoint)) {
1050                         data->bulk_out = endpoint->bEndpointAddress;
1051                         dev_dbg(&intf->dev, "Found Bulk out endpoint at %u\n",
1052                                 data->bulk_out);
1053                         break;
1054                 }
1055         }
1056
1057         retcode = get_capabilities(data);
1058         if (retcode)
1059                 dev_err(&intf->dev, "can't read capabilities\n");
1060         else
1061                 retcode = sysfs_create_group(&intf->dev.kobj,
1062                                              &capability_attr_grp);
1063
1064         retcode = sysfs_create_group(&intf->dev.kobj, &data_attr_grp);
1065
1066         retcode = usb_register_dev(intf, &usbtmc_class);
1067         if (retcode) {
1068                 dev_err(&intf->dev, "Not able to get a minor"
1069                         " (base %u, slice default): %d\n", USBTMC_MINOR_BASE,
1070                         retcode);
1071                 goto error_register;
1072         }
1073         dev_dbg(&intf->dev, "Using minor number %d\n", intf->minor);
1074
1075         return 0;
1076
1077 error_register:
1078         sysfs_remove_group(&intf->dev.kobj, &capability_attr_grp);
1079         sysfs_remove_group(&intf->dev.kobj, &data_attr_grp);
1080         kref_put(&data->kref, usbtmc_delete);
1081         return retcode;
1082 }
1083
1084 static void usbtmc_disconnect(struct usb_interface *intf)
1085 {
1086         struct usbtmc_device_data *data;
1087
1088         dev_dbg(&intf->dev, "usbtmc_disconnect called\n");
1089
1090         data = usb_get_intfdata(intf);
1091         usb_deregister_dev(intf, &usbtmc_class);
1092         sysfs_remove_group(&intf->dev.kobj, &capability_attr_grp);
1093         sysfs_remove_group(&intf->dev.kobj, &data_attr_grp);
1094         mutex_lock(&data->io_mutex);
1095         data->zombie = 1;
1096         mutex_unlock(&data->io_mutex);
1097         kref_put(&data->kref, usbtmc_delete);
1098 }
1099
1100 static int usbtmc_suspend(struct usb_interface *intf, pm_message_t message)
1101 {
1102         /* this driver does not have pending URBs */
1103         return 0;
1104 }
1105
1106 static int usbtmc_resume(struct usb_interface *intf)
1107 {
1108         return 0;
1109 }
1110
1111 static struct usb_driver usbtmc_driver = {
1112         .name           = "usbtmc",
1113         .id_table       = usbtmc_devices,
1114         .probe          = usbtmc_probe,
1115         .disconnect     = usbtmc_disconnect,
1116         .suspend        = usbtmc_suspend,
1117         .resume         = usbtmc_resume,
1118 };
1119
1120 static int __init usbtmc_init(void)
1121 {
1122         int retcode;
1123
1124         retcode = usb_register(&usbtmc_driver);
1125         if (retcode)
1126                 printk(KERN_ERR KBUILD_MODNAME": Unable to register driver\n");
1127         return retcode;
1128 }
1129 module_init(usbtmc_init);
1130
1131 static void __exit usbtmc_exit(void)
1132 {
1133         usb_deregister(&usbtmc_driver);
1134 }
1135 module_exit(usbtmc_exit);
1136
1137 MODULE_LICENSE("GPL");