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