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