Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/gpib/lpvo_usb_gpib/lpvo_usb_gpib.c
122915 views
1
// SPDX-License-Identifier: GPL-2.0
2
3
/***************************************************************************
4
* This code has been developed at the Department of Physics (University *
5
* of Florence, Italy) to support in linux-gpib the open usb-gpib adapter *
6
* implemented at the University of Ljubljana (lpvo.fe.uni-lj.si/gpib) *
7
* *
8
* copyright : (C) 2011 Marcello Carla' *
9
***************************************************************************/
10
11
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
12
#define dev_fmt pr_fmt
13
#define NAME KBUILD_MODNAME
14
15
/* base module includes */
16
17
#include <linux/module.h>
18
#include <linux/sched.h>
19
#include <linux/init.h>
20
#include <linux/kernel.h>
21
#include <linux/tty.h>
22
#include <linux/types.h>
23
#include <linux/slab.h>
24
#include <linux/mm.h>
25
#include <linux/vmalloc.h>
26
#include <linux/spinlock.h>
27
#include <linux/file.h>
28
#include <linux/timer.h>
29
#include <linux/delay.h>
30
#include <linux/sched/signal.h>
31
#include <linux/usb.h>
32
33
#include "gpibP.h"
34
35
MODULE_LICENSE("GPL");
36
MODULE_DESCRIPTION("GPIB driver for LPVO usb devices");
37
38
/*
39
* Table of devices that work with this driver.
40
*
41
* Currently, only one device is known to be used in the lpvo_usb_gpib
42
* adapter (FTDI 0403:6001) but as this device id is already handled by the
43
* ftdi_sio USB serial driver the LPVO driver must not bind to it by default.
44
*
45
* If your adapter uses a different chip, insert a line
46
* in the following table with proper <Vendor-id>, <Product-id>.
47
*
48
* To have your chip automatically handled by the driver,
49
* update files "/usr/local/etc/modprobe.d/lpvo_usb_gpib.conf"
50
* and /usr/local/etc/udev/rules.d/99-lpvo_usb_gpib.rules.
51
*
52
*/
53
54
static const struct usb_device_id skel_table[] = {
55
{ } /* Terminating entry */
56
};
57
MODULE_DEVICE_TABLE(usb, skel_table);
58
59
/*
60
* *** Diagnostics and Debug ***
61
* To enable the diagnostic and debug messages either compile with DEBUG set
62
* or control via the dynamic debug mechanisms.
63
* The module parameter "debug" controls the sending of debug messages to
64
* syslog. By default it is set to 0
65
* debug = 0: only attach/detach messages are sent
66
* 1: every action is logged
67
* 2: extended logging; each single exchanged byte is documented
68
* (about twice the log volume of [1])
69
* To switch debug level:
70
* At module loading: modprobe lpvo_usb_gpib debug={0,1,2}
71
* On the fly: echo {0,1,2} > /sys/modules/lpvo_usb_gpib/parameters/debug
72
*/
73
74
static int debug;
75
module_param(debug, int, 0644);
76
77
#define DIA_LOG(level, format, ...) \
78
do { if (debug >= (level)) \
79
dev_dbg(board->gpib_dev, format, ## __VA_ARGS__); } \
80
while (0)
81
82
#define WQT wait_queue_entry_t
83
#define WQH head
84
#define WQE entry
85
86
/* standard and extended command sets of the usb-gpib adapter */
87
88
#define USB_GPIB_ON "\nIB\n"
89
#define USB_GPIB_OFF "\nIBO\n"
90
#define USB_GPIB_IBm0 "\nIBm0\n" /* do not assert REN with IFC */
91
#define USB_GPIB_IBm1 "\nIBm1\n" /* assert REN with IFC */
92
#define USB_GPIB_IBCL "\nIBZ\n"
93
#define USB_GPIB_STATUS "\nIBS\n"
94
#define USB_GPIB_READ "\nIB?\n"
95
#define USB_GPIB_READ_1 "\nIBB\n"
96
#define USB_GPIB_EOI "\nIBe0\n"
97
#define USB_GPIB_FTMO "\nIBf0\n" /* disable first byte timeout */
98
#define USB_GPIB_TTMOZ "\nIBt0\n" /* disable byte timeout */
99
100
/* incomplete commands */
101
102
#define USB_GPIB_BTMO "\nIBt" /* set byte timeout */
103
#define USB_GPIB_TTMO "\nIBT" /* set total timeout */
104
105
#define USB_GPIB_DEBUG_ON "\nIBDE\xAA\n"
106
#define USB_GPIB_SET_LISTEN "\nIBDT0\n"
107
#define USB_GPIB_SET_TALK "\nIBDT1\n"
108
#define USB_GPIB_SET_LINES "\nIBDC.\n"
109
#define USB_GPIB_SET_DATA "\nIBDM.\n"
110
#define USB_GPIB_READ_LINES "\nIBD?C\n"
111
#define USB_GPIB_READ_DATA "\nIBD?M\n"
112
#define USB_GPIB_READ_BUS "\nIBD??\n"
113
114
/* command sequences */
115
116
#define USB_GPIB_UNTALK "\nIBC_\n"
117
#define USB_GPIB_UNLISTEN "\nIBC?\n"
118
119
/* special characters used by the adapter */
120
121
#define DLE ('\020')
122
#define STX ('\02')
123
#define ETX ('\03')
124
#define ACK ('\06')
125
#define NODATA ('\03')
126
#define NODAV ('\011')
127
128
#define IB_BUS_REN 0x01
129
#define IB_BUS_IFC 0x02
130
#define IB_BUS_NDAC 0x04
131
#define IB_BUS_NRFD 0x08
132
#define IB_BUS_DAV 0x10
133
#define IB_BUS_EOI 0x20
134
#define IB_BUS_ATN 0x40
135
#define IB_BUS_SRQ 0x80
136
137
#define INBUF_SIZE 128
138
139
struct char_buf { /* used by one_char() routine */
140
char *inbuf;
141
int last;
142
int nchar;
143
};
144
145
struct usb_gpib_priv { /* private data to the device */
146
u8 eos; /* eos character */
147
short eos_flags; /* eos mode */
148
int timeout; /* current value for timeout */
149
void *dev; /* the usb device private data structure */
150
};
151
152
#define GPIB_DEV (((struct usb_gpib_priv *)board->private_data)->dev)
153
154
static void show_status(struct gpib_board *board)
155
{
156
DIA_LOG(2, "# - buffer_length %d\n", board->buffer_length);
157
DIA_LOG(2, "# - status %lx\n", board->status);
158
DIA_LOG(2, "# - use_count %d\n", board->use_count);
159
DIA_LOG(2, "# - pad %x\n", board->pad);
160
DIA_LOG(2, "# - sad %x\n", board->sad);
161
DIA_LOG(2, "# - timeout %d\n", board->usec_timeout);
162
DIA_LOG(2, "# - ppc %d\n", board->parallel_poll_configuration);
163
DIA_LOG(2, "# - t1delay %d\n", board->t1_nano_sec);
164
DIA_LOG(2, "# - online %d\n", board->online);
165
DIA_LOG(2, "# - autopoll %d\n", board->autospollers);
166
DIA_LOG(2, "# - autopoll task %p\n", board->autospoll_task);
167
DIA_LOG(2, "# - minor %d\n", board->minor);
168
DIA_LOG(2, "# - master %d\n", board->master);
169
DIA_LOG(2, "# - list %d\n", board->ist);
170
}
171
172
/*
173
* GLOBAL VARIABLES: required for
174
* pairing among gpib minor and usb minor.
175
* MAX_DEV is the max number of usb-gpib adapters; free
176
* to change as you like, but no more than 32
177
*/
178
179
#define MAX_DEV 8
180
static struct usb_interface *lpvo_usb_interfaces[MAX_DEV]; /* registered interfaces */
181
static int usb_minors[MAX_DEV]; /* usb minors */
182
static int assigned_usb_minors; /* mask of filled slots */
183
static struct mutex minors_lock; /* operations on usb_minors are to be protected */
184
185
/*
186
* usb-skeleton prototypes
187
*/
188
189
struct usb_skel;
190
static ssize_t skel_do_write(struct usb_skel *, const char *, size_t);
191
static ssize_t skel_do_read(struct usb_skel *, char *, size_t);
192
static int skel_do_open(struct gpib_board *, int);
193
static int skel_do_release(struct gpib_board *);
194
195
/*
196
* usec_diff : take difference in MICROsec between two 'timespec'
197
* (unix time in sec and NANOsec)
198
*/
199
200
static inline int usec_diff(struct timespec64 *a, struct timespec64 *b)
201
{
202
return ((a->tv_sec - b->tv_sec) * 1000000 +
203
(a->tv_nsec - b->tv_nsec) / 1000);
204
}
205
206
/*
207
* *** these routines are specific to the usb-gpib adapter ***
208
*/
209
210
/**
211
* write_loop() - Send a byte sequence to the adapter
212
*
213
* @dev: the private device structure
214
* @msg: the byte sequence.
215
* @leng: the byte sequence length.
216
*
217
*/
218
219
static int write_loop(void *dev, char *msg, int leng)
220
{
221
return skel_do_write(dev, msg, leng);
222
}
223
224
/**
225
* send_command() - Send a byte sequence and return a single byte reply.
226
*
227
* @board: the gpib_board_struct data area for this gpib interface
228
* @msg: the byte sequence.
229
* @leng: the byte sequence length; can be given as zero and is
230
* computed automatically, but if 'msg' contains a zero byte,
231
* it has to be given explicitly.
232
*/
233
234
static int send_command(struct gpib_board *board, char *msg, int leng)
235
{
236
char buffer[64];
237
int nchar;
238
int retval;
239
struct timespec64 before, after;
240
241
ktime_get_real_ts64 (&before);
242
243
if (!leng)
244
leng = strlen(msg);
245
retval = write_loop(GPIB_DEV, msg, leng);
246
if (retval < 0)
247
return retval;
248
249
nchar = skel_do_read(GPIB_DEV, buffer, 64);
250
251
if (nchar < 0) {
252
dev_err(board->gpib_dev, " return from read: %d\n", nchar);
253
return nchar;
254
} else if (nchar != 1) {
255
dev_err(board->gpib_dev, " Irregular reply to command: %s\n", msg);
256
return -EIO;
257
}
258
ktime_get_real_ts64 (&after);
259
260
DIA_LOG(1, "Sent %d - done %d us.\n", leng, usec_diff(&after, &before));
261
262
return buffer[0] & 0xff;
263
}
264
265
/*
266
* set_control_line() - Set the value of a single gpib control line
267
*
268
* @board: the gpib_board_struct data area for this gpib interface
269
* @line: line mask
270
* @value: line new value (0/1)
271
*/
272
273
static int set_control_line(struct gpib_board *board, int line, int value)
274
{
275
char msg[] = USB_GPIB_SET_LINES;
276
int retval;
277
int leng = strlen(msg);
278
279
DIA_LOG(1, "setting line %x to %x\n", line, value);
280
281
retval = send_command(board, USB_GPIB_READ_LINES, 0);
282
283
DIA_LOG(1, "old line values: %x\n", retval);
284
285
if (retval == -EIO)
286
return retval;
287
288
msg[leng - 2] = value ? (retval & ~line) : retval | line;
289
290
retval = send_command(board, msg, 0);
291
292
DIA_LOG(1, "operation result: %x\n", retval);
293
294
return retval;
295
}
296
297
/*
298
* one_char() - read one single byte from input buffer
299
*
300
* @board: the gpib_board_struct data area for this gpib interface
301
* @char_buf: the routine private data structure
302
*/
303
304
static int one_char(struct gpib_board *board, struct char_buf *b)
305
{
306
struct timespec64 before, after;
307
308
if (b->nchar) {
309
DIA_LOG(2, "-> %x\n", b->inbuf[b->last - b->nchar]);
310
return b->inbuf[b->last - b->nchar--];
311
}
312
ktime_get_real_ts64 (&before);
313
b->nchar = skel_do_read(GPIB_DEV, b->inbuf, INBUF_SIZE);
314
b->last = b->nchar;
315
ktime_get_real_ts64 (&after);
316
317
DIA_LOG(2, "read %d bytes in %d usec\n",
318
b->nchar, usec_diff(&after, &before));
319
320
if (b->nchar > 0) {
321
DIA_LOG(2, "--> %x\n", b->inbuf[b->last - b->nchar]);
322
return b->inbuf[b->last - b->nchar--];
323
}
324
return -EIO;
325
}
326
327
/**
328
* set_timeout() - set single byte / total timeouts on the adapter
329
*
330
* @board: the gpib_board_struct data area for this gpib interface
331
*
332
* For sake of speed, the operation is performed only if it
333
* modifies the current (saved) value. Minimum allowed timeout
334
* is 30 ms (T30ms -> 8); timeout disable (TNONE -> 0) currently
335
* not supported.
336
*/
337
338
static void set_timeout(struct gpib_board *board)
339
{
340
int n, val;
341
char command[sizeof(USB_GPIB_TTMO) + 6];
342
struct usb_gpib_priv *data = board->private_data;
343
344
if (data->timeout == board->usec_timeout)
345
return;
346
347
n = (board->usec_timeout + 32767) / 32768;
348
if (n < 2)
349
n = 2;
350
351
DIA_LOG(1, "Set timeout to %d us -> %d\n", board->usec_timeout, n);
352
353
sprintf(command, "%s%d\n", USB_GPIB_BTMO, n > 255 ? 255 : n);
354
val = send_command(board, command, 0);
355
356
if (val == ACK) {
357
if (n > 65535)
358
n = 65535;
359
sprintf(command, "%s%d\n", USB_GPIB_TTMO, n);
360
val = send_command(board, command, 0);
361
}
362
363
if (val != ACK)
364
dev_err(board->gpib_dev, "error in timeout set: <%s>\n", command);
365
else
366
data->timeout = board->usec_timeout;
367
}
368
369
/*
370
* now the standard interface functions - attach and detach
371
*/
372
373
/**
374
* usb_gpib_attach() - activate the usb-gpib converter board
375
*
376
* @board: the gpib_board_struct data area for this gpib interface
377
* @config: firmware data, if any (from gpib_config -I <file>)
378
*
379
* The channel name is ttyUSBn, with n=0 by default. Other values for n
380
* passed with gpib_config -b <n>.
381
*
382
* In this routine I trust that when an error code is returned
383
* detach() will be called. Always.
384
*/
385
386
static int usb_gpib_attach(struct gpib_board *board, const struct gpib_board_config *config)
387
{
388
int retval, j;
389
u32 base = config->ibbase;
390
char *device_path;
391
int match;
392
struct usb_device *udev;
393
394
DIA_LOG(0, "Board %p -t %s -m %d -a %p -u %d -l %d -b %d\n",
395
board, board->interface->name, board->minor, config->device_path,
396
config->pci_bus, config->pci_slot, base);
397
398
board->private_data = NULL; /* to be sure - we can detach before setting */
399
400
/* identify device to be attached */
401
402
mutex_lock(&minors_lock);
403
404
if (config->device_path) {
405
/* if config->device_path given, try that first */
406
for (j = 0 ; j < MAX_DEV ; j++) {
407
if ((assigned_usb_minors & 1 << j) == 0)
408
continue;
409
udev = usb_get_dev(interface_to_usbdev(lpvo_usb_interfaces[j]));
410
device_path = kobject_get_path(&udev->dev.kobj, GFP_KERNEL);
411
match = gpib_match_device_path(&lpvo_usb_interfaces[j]->dev,
412
config->device_path);
413
DIA_LOG(1, "dev. %d: minor %d path: %s --> %d\n", j,
414
lpvo_usb_interfaces[j]->minor, device_path, match);
415
kfree(device_path);
416
if (match)
417
break;
418
}
419
} else if (config->pci_bus != -1 && config->pci_slot != -1) {
420
/* second: look for bus and slot */
421
for (j = 0 ; j < MAX_DEV ; j++) {
422
if ((assigned_usb_minors & 1 << j) == 0)
423
continue;
424
udev = usb_get_dev(interface_to_usbdev(lpvo_usb_interfaces[j]));
425
DIA_LOG(1, "dev. %d: bus %d -> %d dev: %d -> %d\n", j,
426
udev->bus->busnum, config->pci_bus, udev->devnum, config->pci_slot);
427
if (config->pci_bus == udev->bus->busnum &&
428
config->pci_slot == udev->devnum)
429
break;
430
}
431
} else { /* last chance: usb_minor, given as ibbase */
432
for (j = 0 ; j < MAX_DEV ; j++) {
433
if (usb_minors[j] == base && assigned_usb_minors & 1 << j)
434
break;
435
}
436
}
437
mutex_unlock(&minors_lock);
438
439
if (j == MAX_DEV) {
440
dev_err(board->gpib_dev, "Requested device is not registered.\n");
441
return -EIO;
442
}
443
444
board->private_data = kzalloc_obj(struct usb_gpib_priv);
445
if (!board->private_data)
446
return -ENOMEM;
447
448
retval = skel_do_open(board, usb_minors[j]);
449
450
DIA_LOG(1, "Skel open: %d\n", retval);
451
452
if (retval) {
453
dev_err(board->gpib_dev, "skel open failed.\n");
454
kfree(board->private_data);
455
board->private_data = NULL;
456
return -ENODEV;
457
}
458
459
show_status(board);
460
461
retval = send_command(board, USB_GPIB_ON, 0);
462
DIA_LOG(1, "USB_GPIB_ON returns %x\n", retval);
463
if (retval != ACK)
464
return -EIO;
465
466
/*
467
* We must setup debug mode because we need the extended instruction
468
* set to cope with the Core (gpib_common) point of view
469
*/
470
471
retval = send_command(board, USB_GPIB_DEBUG_ON, 0);
472
DIA_LOG(1, "USB_GPIB_DEBUG_ON returns %x\n", retval);
473
if (retval != ACK)
474
return -EIO;
475
476
/*
477
* We must keep REN off after an IFC because so it is
478
* assumed by the Core
479
*/
480
481
retval = send_command(board, USB_GPIB_IBm0, 0);
482
DIA_LOG(1, "USB_GPIB_IBm0 returns %x\n", retval);
483
if (retval != ACK)
484
return -EIO;
485
486
retval = set_control_line(board, IB_BUS_REN, 0);
487
if (retval != ACK)
488
return -EIO;
489
490
retval = send_command(board, USB_GPIB_FTMO, 0);
491
DIA_LOG(1, "USB_GPIB_FTMO returns %x\n", retval);
492
if (retval != ACK)
493
return -EIO;
494
495
show_status(board);
496
DIA_LOG(0, "attached\n");
497
return 0;
498
}
499
500
/**
501
* usb_gpib_detach() - deactivate the usb-gpib converter board
502
*
503
* @board: the gpib_board data area for this gpib interface
504
*
505
*/
506
507
static void usb_gpib_detach(struct gpib_board *board)
508
{
509
int retval;
510
511
show_status(board);
512
513
DIA_LOG(0, "detaching\n");
514
515
if (board->private_data) {
516
if (GPIB_DEV) {
517
write_loop(GPIB_DEV, USB_GPIB_OFF, strlen(USB_GPIB_OFF));
518
msleep(100);
519
DIA_LOG(1, "%s", "GPIB off\n");
520
retval = skel_do_release(board);
521
DIA_LOG(1, "skel release -> %d\n", retval);
522
}
523
kfree(board->private_data);
524
board->private_data = NULL;
525
}
526
527
DIA_LOG(0, "detached\n");
528
}
529
530
/*
531
* Other functions follow in alphabetical order
532
*/
533
/* command */
534
static int usb_gpib_command(struct gpib_board *board,
535
u8 *buffer,
536
size_t length,
537
size_t *bytes_written)
538
{
539
int i, retval;
540
char command[6] = "IBc.\n";
541
542
DIA_LOG(1, "enter %p\n", board);
543
544
set_timeout(board);
545
546
*bytes_written = 0;
547
for (i = 0 ; i < length ; i++) {
548
command[3] = buffer[i];
549
retval = send_command(board, command, 5);
550
DIA_LOG(2, "%d ==> %x %x\n", i, buffer[i], retval);
551
if (retval != 0x06)
552
return retval;
553
++(*bytes_written);
554
}
555
return 0;
556
}
557
558
/**
559
* usb_gpib_disable_eos() - Disable END on eos byte (END on EOI only)
560
*
561
* @board: the gpib_board data area for this gpib interface
562
*
563
* With the lpvo adapter eos can only be handled via software.
564
* Cannot do nothing here, but remember for future use.
565
*/
566
567
static void usb_gpib_disable_eos(struct gpib_board *board)
568
{
569
((struct usb_gpib_priv *)board->private_data)->eos_flags &= ~REOS;
570
DIA_LOG(1, "done: %x\n",
571
((struct usb_gpib_priv *)board->private_data)->eos_flags);
572
}
573
574
/**
575
* usb_gpib_enable_eos() - Enable END for reads when eos byte is received.
576
*
577
* @board: the gpib_board data area for this gpib interface
578
* @eos_byte: the 'eos' byte
579
* @compare_8_bits: if zero ignore eigthth bit when comparing
580
*
581
*/
582
583
static int usb_gpib_enable_eos(struct gpib_board *board,
584
u8 eos_byte,
585
int compare_8_bits)
586
{
587
struct usb_gpib_priv *pd = (struct usb_gpib_priv *)board->private_data;
588
589
DIA_LOG(1, "enter with %x\n", eos_byte);
590
pd->eos = eos_byte;
591
pd->eos_flags = REOS;
592
if (compare_8_bits)
593
pd->eos_flags |= BIN;
594
return 0;
595
}
596
597
/**
598
* usb_gpib_go_to_standby() - De-assert ATN
599
*
600
* @board: the gpib_board data area for this gpib interface
601
*/
602
603
static int usb_gpib_go_to_standby(struct gpib_board *board)
604
{
605
int retval = set_control_line(board, IB_BUS_ATN, 0);
606
607
DIA_LOG(1, "done with %x\n", retval);
608
609
if (retval == ACK)
610
return 0;
611
return -EIO;
612
}
613
614
/**
615
* usb_gpib_interface_clear() - Assert or de-assert IFC
616
*
617
* @board: the gpib_board data area for this gpib interface
618
* @assert: 1: assert IFC; 0: de-assert IFC
619
*
620
* Currently on the assert request we issue the lpvo IBZ
621
* command that cycles IFC low for 100 usec, then we ignore
622
* the de-assert request.
623
*/
624
625
static void usb_gpib_interface_clear(struct gpib_board *board, int assert)
626
{
627
int retval = 0;
628
629
DIA_LOG(1, "enter with %d\n", assert);
630
631
if (assert) {
632
retval = send_command(board, USB_GPIB_IBCL, 0);
633
634
set_bit(CIC_NUM, &board->status);
635
}
636
637
DIA_LOG(1, "done with %d %d\n", assert, retval);
638
}
639
640
/**
641
* usb_gpib_line_status() - Read the status of the bus lines.
642
*
643
* @board: the gpib_board data area for this gpib interface
644
*
645
* We can read all lines.
646
*/
647
static int usb_gpib_line_status(const struct gpib_board *board)
648
{
649
int buffer;
650
int line_status = VALID_ALL; /* all lines will be read */
651
struct list_head *p, *q;
652
WQT *item;
653
unsigned long flags;
654
int sleep = 0;
655
656
DIA_LOG(1, "%s\n", "request");
657
658
/*
659
* if we are on the wait queue (board->wait), do not hurry
660
* reading status line; instead, pause a little
661
*/
662
663
spin_lock_irqsave((spinlock_t *)&board->wait.lock, flags);
664
q = (struct list_head *)&board->wait.WQH;
665
list_for_each(p, q) {
666
item = container_of(p, WQT, WQE);
667
if (item->private == current) {
668
sleep = 20;
669
break;
670
}
671
/* pid is: ((struct task_struct *) item->private)->pid); */
672
}
673
spin_unlock_irqrestore((spinlock_t *)&board->wait.lock, flags);
674
if (sleep) {
675
DIA_LOG(1, "we are on the wait queue - sleep %d ms\n", sleep);
676
msleep(sleep);
677
}
678
679
buffer = send_command((struct gpib_board *)board, USB_GPIB_STATUS, 0);
680
681
if (buffer < 0) {
682
dev_err(board->gpib_dev, "line status read failed with %d\n", buffer);
683
return -1;
684
}
685
686
if ((buffer & 0x01) == 0)
687
line_status |= BUS_REN;
688
if ((buffer & 0x02) == 0)
689
line_status |= BUS_IFC;
690
if ((buffer & 0x04) == 0)
691
line_status |= BUS_NDAC;
692
if ((buffer & 0x08) == 0)
693
line_status |= BUS_NRFD;
694
if ((buffer & 0x10) == 0)
695
line_status |= BUS_DAV;
696
if ((buffer & 0x20) == 0)
697
line_status |= BUS_EOI;
698
if ((buffer & 0x40) == 0)
699
line_status |= BUS_ATN;
700
if ((buffer & 0x80) == 0)
701
line_status |= BUS_SRQ;
702
703
DIA_LOG(1, "done with %x %x\n", buffer, line_status);
704
705
return line_status;
706
}
707
708
/* parallel_poll */
709
710
static int usb_gpib_parallel_poll(struct gpib_board *board, u8 *result)
711
{
712
/*
713
* request parallel poll asserting ATN | EOI;
714
* we suppose ATN already asserted
715
*/
716
717
int retval;
718
719
DIA_LOG(1, "enter %p\n", board);
720
721
retval = set_control_line(board, IB_BUS_EOI, 1);
722
if (retval != ACK)
723
return -EIO;
724
725
*result = send_command(board, USB_GPIB_READ_DATA, 0);
726
727
DIA_LOG(1, "done with %x\n", *result);
728
729
retval = set_control_line(board, IB_BUS_EOI, 0);
730
if (retval != 0x06)
731
return -EIO;
732
733
return 0;
734
}
735
736
/* read */
737
738
static int usb_gpib_read(struct gpib_board *board,
739
u8 *buffer,
740
size_t length,
741
int *end,
742
size_t *bytes_read)
743
{
744
#define MAX_READ_EXCESS 16384
745
746
struct char_buf b = {NULL, 0};
747
748
int retval;
749
char c, nc;
750
int ic;
751
struct timespec64 before, after;
752
int read_count = MAX_READ_EXCESS;
753
struct usb_gpib_priv *pd = (struct usb_gpib_priv *)board->private_data;
754
755
DIA_LOG(1, "enter %p -> %zu\n", board, length);
756
757
*bytes_read = 0; /* by default, things go wrong */
758
*end = 0;
759
760
set_timeout(board);
761
762
/* single byte read has a special handling */
763
764
if (length == 1) {
765
char inbuf[2] = {0, 0};
766
767
/* read a single character */
768
769
ktime_get_real_ts64 (&before);
770
771
retval = write_loop(GPIB_DEV, USB_GPIB_READ_1, strlen(USB_GPIB_READ_1));
772
if (retval < 0)
773
return retval;
774
775
retval = skel_do_read(GPIB_DEV, inbuf, 1);
776
retval += skel_do_read(GPIB_DEV, inbuf + 1, 1);
777
778
ktime_get_real_ts64 (&after);
779
780
DIA_LOG(1, "single read: %x %x %x in %d\n", retval,
781
inbuf[0], inbuf[1],
782
usec_diff(&after, &before));
783
784
/* good char / last char? */
785
786
if (retval == 2 && inbuf[1] == ACK) {
787
buffer[0] = inbuf[0];
788
*bytes_read = 1;
789
return 0;
790
}
791
if (retval < 2)
792
return -EIO;
793
else
794
return -ETIME;
795
}
796
797
/* allocate buffer for multibyte read */
798
799
b.inbuf = kmalloc(INBUF_SIZE, GFP_KERNEL);
800
if (!b.inbuf)
801
return -ENOMEM;
802
803
/* send read command and check <DLE><STX> sequence */
804
805
retval = write_loop(GPIB_DEV, USB_GPIB_READ, strlen(USB_GPIB_READ));
806
if (retval < 0)
807
goto read_return;
808
809
if (one_char(board, &b) != DLE || one_char(board, &b) != STX) {
810
dev_err(board->gpib_dev, "wrong <DLE><STX> sequence\n");
811
retval = -EIO;
812
goto read_return;
813
}
814
815
/* get data flow */
816
817
while (1) {
818
ic = one_char(board, &b);
819
if (ic == -EIO) {
820
retval = -EIO;
821
goto read_return;
822
}
823
c = ic;
824
825
if (c == DLE)
826
nc = one_char(board, &b);
827
if (c != DLE || nc == DLE) {
828
/* data byte - store into buffer */
829
830
if (*bytes_read == length)
831
break; /* data overflow */
832
if (c == DLE)
833
c = nc;
834
buffer[(*bytes_read)++] = c;
835
if (c == pd->eos) {
836
*end = 1;
837
break;
838
}
839
840
} else {
841
/* we are in the closing <DLE><ETX> sequence */
842
c = nc;
843
if (c == ETX) {
844
c = one_char(board, &b);
845
if (c == ACK) {
846
*end = 1;
847
retval = 0;
848
goto read_return;
849
} else {
850
dev_err(board->gpib_dev, "wrong end of message %x", c);
851
retval = -ETIME;
852
goto read_return;
853
}
854
} else {
855
dev_err(board->gpib_dev, "lone <DLE> in stream");
856
retval = -EIO;
857
goto read_return;
858
}
859
}
860
}
861
862
/* we had a data overflow - flush excess data */
863
864
while (read_count--) {
865
if (one_char(board, &b) != DLE)
866
continue;
867
c = one_char(board, &b);
868
if (c == DLE)
869
continue;
870
if (c == ETX) {
871
c = one_char(board, &b);
872
if (c == ACK) {
873
if (MAX_READ_EXCESS - read_count > 1)
874
dev_dbg(board->gpib_dev, "small buffer - maybe some data lost");
875
retval = 0;
876
goto read_return;
877
}
878
break;
879
}
880
}
881
882
dev_err(board->gpib_dev, "no input end - board in odd state\n");
883
retval = -EIO;
884
885
read_return:
886
kfree(b.inbuf);
887
888
DIA_LOG(1, "done with byte/status: %d %x %d\n", (int)*bytes_read, retval, *end);
889
890
if (retval == 0 || retval == -ETIME) {
891
if (send_command(board, USB_GPIB_UNTALK, sizeof(USB_GPIB_UNTALK)) == 0x06)
892
return retval;
893
return -EIO;
894
}
895
896
return retval;
897
}
898
899
/* remote_enable */
900
901
static void usb_gpib_remote_enable(struct gpib_board *board, int enable)
902
{
903
int retval;
904
905
retval = set_control_line(board, IB_BUS_REN, enable ? 1 : 0);
906
if (retval != ACK)
907
dev_err(board->gpib_dev, "could not set REN line: %x\n", retval);
908
909
DIA_LOG(1, "done with %x\n", retval);
910
}
911
912
/* request_system_control */
913
914
static int usb_gpib_request_system_control(struct gpib_board *board, int request_control)
915
{
916
if (!request_control)
917
return -EINVAL;
918
919
DIA_LOG(1, "done with %d -> %lx\n", request_control, board->status);
920
return 0;
921
}
922
923
/* take_control */
924
/* beware: the sync flag is ignored; what is its real meaning? */
925
926
static int usb_gpib_take_control(struct gpib_board *board, int sync)
927
{
928
int retval;
929
930
retval = set_control_line(board, IB_BUS_ATN, 1);
931
932
DIA_LOG(1, "done with %d %x\n", sync, retval);
933
934
if (retval == ACK)
935
return 0;
936
return -EIO;
937
}
938
939
/* update_status */
940
941
static unsigned int usb_gpib_update_status(struct gpib_board *board,
942
unsigned int clear_mask)
943
{
944
/* There is nothing we can do here, I guess */
945
946
board->status &= ~clear_mask;
947
948
DIA_LOG(1, "done with %x %lx\n", clear_mask, board->status);
949
950
return board->status;
951
}
952
953
/* write */
954
/* beware: DLE characters are not escaped - can only send ASCII data */
955
956
static int usb_gpib_write(struct gpib_board *board,
957
u8 *buffer,
958
size_t length,
959
int send_eoi,
960
size_t *bytes_written)
961
{
962
int retval;
963
char *msg;
964
965
DIA_LOG(1, "enter %p -> %zu\n", board, length);
966
967
set_timeout(board);
968
969
msg = kmalloc(length + 8, GFP_KERNEL);
970
if (!msg)
971
return -ENOMEM;
972
973
memcpy(msg, "\nIB\020\002", 5);
974
memcpy(msg + 5, buffer, length);
975
memcpy(msg + 5 + length, "\020\003\n", 3);
976
977
retval = send_command(board, msg, length + 8);
978
kfree(msg);
979
980
DIA_LOG(1, "<%.*s> -> %x\n", (int)length, buffer, retval);
981
982
if (retval != ACK)
983
return -EPIPE;
984
985
*bytes_written = length;
986
987
if (send_command(board, USB_GPIB_UNLISTEN, sizeof(USB_GPIB_UNLISTEN)) != 0x06)
988
return -EPIPE;
989
990
return length;
991
}
992
993
/*
994
* *** following functions not implemented yet ***
995
*/
996
997
/* parallel_poll configure */
998
999
static void usb_gpib_parallel_poll_configure(struct gpib_board *board,
1000
u8 configuration)
1001
{
1002
}
1003
1004
/* parallel_poll_response */
1005
1006
static void usb_gpib_parallel_poll_response(struct gpib_board *board, int ist)
1007
{
1008
}
1009
1010
/* primary_address */
1011
1012
static int usb_gpib_primary_address(struct gpib_board *board, unsigned int address)
1013
{
1014
return 0;
1015
}
1016
1017
/* return_to_local */
1018
1019
static void usb_gpib_return_to_local(struct gpib_board *board)
1020
{
1021
}
1022
1023
/* secondary_address */
1024
1025
static int usb_gpib_secondary_address(struct gpib_board *board,
1026
unsigned int address,
1027
int enable)
1028
{
1029
return 0;
1030
}
1031
1032
/* serial_poll_response */
1033
1034
static void usb_gpib_serial_poll_response(struct gpib_board *board, u8 status)
1035
{
1036
}
1037
1038
/* serial_poll_status */
1039
1040
static u8 usb_gpib_serial_poll_status(struct gpib_board *board)
1041
{
1042
return 0;
1043
}
1044
1045
/* t1_delay */
1046
1047
static int usb_gpib_t1_delay(struct gpib_board *board, unsigned int nano_sec)
1048
{
1049
return 0;
1050
}
1051
1052
/*
1053
* *** module dispatch table and init/exit functions ***
1054
*/
1055
1056
static struct gpib_interface usb_gpib_interface = {
1057
.name = NAME,
1058
.attach = usb_gpib_attach,
1059
.detach = usb_gpib_detach,
1060
.read = usb_gpib_read,
1061
.write = usb_gpib_write,
1062
.command = usb_gpib_command,
1063
.take_control = usb_gpib_take_control,
1064
.go_to_standby = usb_gpib_go_to_standby,
1065
.request_system_control = usb_gpib_request_system_control,
1066
.interface_clear = usb_gpib_interface_clear,
1067
.remote_enable = usb_gpib_remote_enable,
1068
.enable_eos = usb_gpib_enable_eos,
1069
.disable_eos = usb_gpib_disable_eos,
1070
.parallel_poll = usb_gpib_parallel_poll,
1071
.parallel_poll_configure = usb_gpib_parallel_poll_configure,
1072
.parallel_poll_response = usb_gpib_parallel_poll_response,
1073
.local_parallel_poll_mode = NULL, // XXX
1074
.line_status = usb_gpib_line_status,
1075
.update_status = usb_gpib_update_status,
1076
.primary_address = usb_gpib_primary_address,
1077
.secondary_address = usb_gpib_secondary_address,
1078
.serial_poll_response = usb_gpib_serial_poll_response,
1079
.serial_poll_status = usb_gpib_serial_poll_status,
1080
.t1_delay = usb_gpib_t1_delay,
1081
.return_to_local = usb_gpib_return_to_local,
1082
.skip_check_for_command_acceptors = 1
1083
};
1084
1085
/*
1086
* usb_gpib_init_module(), usb_gpib_exit_module()
1087
*
1088
* This functions are called every time a new device is detected
1089
* and registered or is removed and unregistered.
1090
* We must take note of created and destroyed usb minors to be used
1091
* when usb_gpib_attach() and usb_gpib_detach() will be called on
1092
* request by gpib_config.
1093
*/
1094
1095
static int usb_gpib_init_module(struct usb_interface *interface)
1096
{
1097
int j, mask, rv;
1098
1099
rv = mutex_lock_interruptible(&minors_lock);
1100
if (rv < 0)
1101
return rv;
1102
1103
if (!assigned_usb_minors) {
1104
rv = gpib_register_driver(&usb_gpib_interface, THIS_MODULE);
1105
if (rv) {
1106
pr_err("gpib_register_driver failed: error = %d\n", rv);
1107
goto exit;
1108
}
1109
} else {
1110
/*
1111
* check if minor is already registered - maybe useless, but if
1112
* it happens the code is inconsistent somewhere
1113
*/
1114
1115
for (j = 0 ; j < MAX_DEV ; j++) {
1116
if (usb_minors[j] == interface->minor && assigned_usb_minors & 1 << j) {
1117
pr_err("CODE BUG: USB minor %d registered at %d.\n",
1118
interface->minor, j);
1119
rv = -1;
1120
goto exit;
1121
}
1122
}
1123
}
1124
1125
/* find a free slot */
1126
1127
for (j = 0 ; j < MAX_DEV ; j++) {
1128
mask = 1 << j;
1129
if ((assigned_usb_minors & mask) == 0) {
1130
usb_minors[j] = interface->minor;
1131
lpvo_usb_interfaces[j] = interface;
1132
assigned_usb_minors |= mask;
1133
rv = 0;
1134
goto exit;
1135
}
1136
}
1137
pr_err("No slot available for interface %p minor %d\n", interface, interface->minor);
1138
rv = -1;
1139
1140
exit:
1141
mutex_unlock(&minors_lock);
1142
return rv;
1143
}
1144
1145
static void usb_gpib_exit_module(int minor)
1146
{
1147
int j;
1148
1149
mutex_lock(&minors_lock);
1150
for (j = 0 ; j < MAX_DEV ; j++) {
1151
if (usb_minors[j] == minor && assigned_usb_minors & 1 << j) {
1152
assigned_usb_minors &= ~(1 << j);
1153
usb_minors[j] = -1;
1154
if (assigned_usb_minors == 0)
1155
gpib_unregister_driver(&usb_gpib_interface);
1156
goto exit;
1157
}
1158
}
1159
pr_err("CODE BUG: USB minor %d not found.\n", minor);
1160
1161
exit:
1162
mutex_unlock(&minors_lock);
1163
}
1164
1165
/*
1166
* Default latency time (16 msec) is too long.
1167
* We must use 1 msec (best); anyhow, no more than 5 msec.
1168
*
1169
* Defines and function taken and modified from the kernel tree
1170
* (see ftdi_sio.h and ftdi_sio.c).
1171
*/
1172
1173
#define FTDI_SIO_SET_LATENCY_TIMER 9 /* Set the latency timer */
1174
#define FTDI_SIO_SET_LATENCY_TIMER_REQUEST FTDI_SIO_SET_LATENCY_TIMER
1175
#define FTDI_SIO_SET_LATENCY_TIMER_REQUEST_TYPE 0x40
1176
#define WDR_TIMEOUT 5000 /* default urb timeout */
1177
#define WDR_SHORT_TIMEOUT 1000 /* shorter urb timeout */
1178
1179
#define LATENCY_TIMER 1 /* use a small latency timer: 1 ... 5 msec */
1180
#define LATENCY_CHANNEL 0 /* channel selection in multichannel devices */
1181
static int write_latency_timer(struct usb_device *udev)
1182
{
1183
int rv = usb_control_msg(udev,
1184
usb_sndctrlpipe(udev, 0),
1185
FTDI_SIO_SET_LATENCY_TIMER_REQUEST,
1186
FTDI_SIO_SET_LATENCY_TIMER_REQUEST_TYPE,
1187
LATENCY_TIMER, LATENCY_CHANNEL,
1188
NULL, 0, WDR_TIMEOUT);
1189
if (rv < 0)
1190
dev_err(&udev->dev, "Unable to write latency timer: %i\n", rv);
1191
return rv;
1192
}
1193
1194
/*****************************************************************************
1195
* *
1196
* The following code is a modified version of the USB Skeleton driver *
1197
* written by Greg Kroah-Hartman and available in the kernel tree. *
1198
* *
1199
* Functions skel_open() and skel_release() have been rewritten and named *
1200
* skel_do_open() and skel_do_release() to process the attach and detach *
1201
* requests coming from gpib_config. *
1202
* *
1203
* Functions skel_read() and skel_write() have been split into a *
1204
* skel_do_read() and skel_do_write(), that cover the kernel stuff of read *
1205
* and write operations, and the original skel_read() and skel_write(), *
1206
* that handle communication with user space and call their _do_ companion. *
1207
* *
1208
* Only the _do_ versions are used by the lpvo_usb_gpib driver; other ones *
1209
* can be (optionally) maintained in the compilation to have direct access *
1210
* to a gpib controller for debug and diagnostics. *
1211
* *
1212
* To avoid collisions in names, devices in user space have been renamed *
1213
* lpvo_raw1, lpvo_raw2 .... and the usb driver has been renamed with the *
1214
* gpib module name. *
1215
* *
1216
*****************************************************************************/
1217
1218
/*
1219
* USB Skeleton driver - 2.2
1220
*
1221
* Copyright (C) 2001-2004 Greg Kroah-Hartman ([email protected])
1222
*
1223
* This driver is based on the 2.6.3 version of drivers/usb/usb-skeleton.c
1224
* but has been rewritten to be easier to read and use.
1225
*/
1226
1227
#include <linux/errno.h>
1228
#include <linux/kref.h>
1229
#include <linux/uaccess.h>
1230
#include <linux/mutex.h>
1231
1232
/* Get a minor range for your devices from the usb maintainer */
1233
#define USB_SKEL_MINOR_BASE 192
1234
1235
/* private defines */
1236
1237
#define MAX_TRANSFER (PAGE_SIZE - 512)
1238
/*
1239
* MAX_TRANSFER is chosen so that the VM is not stressed by
1240
* allocations > PAGE_SIZE and the number of packets in a page
1241
* is an integer 512 is the largest possible packet on EHCI
1242
*/
1243
1244
#define WRITES_IN_FLIGHT 1 /* we do not want more than one pending write */
1245
#define USER_DEVICE 1 /* compile for device(s) in user space */
1246
1247
/* Structure to hold all of our device specific stuff */
1248
struct usb_skel {
1249
struct usb_device *udev; /* the usb device for this device */
1250
struct usb_interface *interface; /* the interface for this device */
1251
struct semaphore limit_sem; /* limiting the number of writes in progress */
1252
struct usb_anchor submitted; /* in case need to retract our submissions */
1253
struct urb *bulk_in_urb; /* the urb to read data with */
1254
unsigned char *bulk_in_buffer; /* the buffer to receive data */
1255
size_t bulk_in_size; /* the size of the receive buffer */
1256
size_t bulk_in_filled; /* number of bytes in the buffer */
1257
size_t bulk_in_copied; /* already copied to user space */
1258
__u8 bulk_in_endpoint_addr; /* the address of the bulk in endpoint */
1259
__u8 bulk_out_endpoint_addr; /* the address of the bulk out endpoint */
1260
int errors; /* the last request tanked */
1261
bool ongoing_read; /* a read is going on */
1262
spinlock_t err_lock; /* lock for errors */
1263
struct kref kref;
1264
struct mutex io_mutex; /* synchronize I/O with disconnect */
1265
wait_queue_head_t bulk_in_wait; /* to wait for an ongoing read */
1266
};
1267
1268
#define to_skel_dev(d) container_of(d, struct usb_skel, kref)
1269
1270
static struct usb_driver skel_driver;
1271
static void skel_draw_down(struct usb_skel *dev);
1272
1273
static void skel_delete(struct kref *kref)
1274
{
1275
struct usb_skel *dev = to_skel_dev(kref);
1276
1277
usb_free_urb(dev->bulk_in_urb);
1278
usb_put_dev(dev->udev);
1279
kfree(dev->bulk_in_buffer);
1280
kfree(dev);
1281
}
1282
1283
/*
1284
* skel_do_open() - to be called by usb_gpib_attach
1285
*/
1286
1287
static int skel_do_open(struct gpib_board *board, int subminor)
1288
{
1289
struct usb_skel *dev;
1290
struct usb_interface *interface;
1291
int retval = 0;
1292
1293
interface = usb_find_interface(&skel_driver, subminor);
1294
if (!interface) {
1295
dev_err(board->gpib_dev, "can't find device for minor %d\n", subminor);
1296
retval = -ENODEV;
1297
goto exit;
1298
}
1299
1300
dev = usb_get_intfdata(interface);
1301
if (!dev) {
1302
retval = -ENODEV;
1303
goto exit;
1304
}
1305
1306
retval = usb_autopm_get_interface(interface);
1307
if (retval)
1308
goto exit;
1309
1310
/* increment our usage count for the device */
1311
kref_get(&dev->kref);
1312
1313
/* save our object in the file's private structure */
1314
GPIB_DEV = dev;
1315
1316
exit:
1317
return retval;
1318
}
1319
1320
/*
1321
* skel_do_release() - to be called by usb_gpib_detach
1322
*/
1323
1324
static int skel_do_release(struct gpib_board *board)
1325
{
1326
struct usb_skel *dev;
1327
1328
dev = GPIB_DEV;
1329
if (!dev)
1330
return -ENODEV;
1331
1332
/* allow the device to be autosuspended */
1333
mutex_lock(&dev->io_mutex);
1334
if (dev->interface)
1335
usb_autopm_put_interface(dev->interface);
1336
mutex_unlock(&dev->io_mutex);
1337
1338
/* decrement the count on our device */
1339
kref_put(&dev->kref, skel_delete);
1340
return 0;
1341
}
1342
1343
/*
1344
* read functions
1345
*/
1346
1347
static void skel_read_bulk_callback(struct urb *urb)
1348
{
1349
struct usb_skel *dev;
1350
unsigned long flags;
1351
1352
dev = urb->context;
1353
1354
spin_lock_irqsave(&dev->err_lock, flags);
1355
/* sync/async unlink faults aren't errors */
1356
if (urb->status) {
1357
if (!(urb->status == -ENOENT ||
1358
urb->status == -ECONNRESET ||
1359
urb->status == -ESHUTDOWN))
1360
dev_err(&dev->interface->dev, "nonzero read bulk status received: %d\n",
1361
urb->status);
1362
1363
dev->errors = urb->status;
1364
} else {
1365
dev->bulk_in_filled = urb->actual_length;
1366
}
1367
dev->ongoing_read = 0;
1368
spin_unlock_irqrestore(&dev->err_lock, flags);
1369
1370
wake_up_interruptible(&dev->bulk_in_wait);
1371
}
1372
1373
static int skel_do_read_io(struct usb_skel *dev, size_t count)
1374
{
1375
int rv;
1376
1377
/* prepare a read */
1378
usb_fill_bulk_urb(dev->bulk_in_urb,
1379
dev->udev,
1380
usb_rcvbulkpipe(dev->udev,
1381
dev->bulk_in_endpoint_addr),
1382
dev->bulk_in_buffer,
1383
min(dev->bulk_in_size, count),
1384
skel_read_bulk_callback,
1385
dev);
1386
/* tell everybody to leave the URB alone */
1387
spin_lock_irq(&dev->err_lock);
1388
dev->ongoing_read = 1;
1389
spin_unlock_irq(&dev->err_lock);
1390
1391
/* submit bulk in urb, which means no data to deliver */
1392
dev->bulk_in_filled = 0;
1393
dev->bulk_in_copied = 0;
1394
1395
/* do it */
1396
rv = usb_submit_urb(dev->bulk_in_urb, GFP_KERNEL);
1397
if (rv < 0) {
1398
dev_err(&dev->interface->dev, "failed submitting read urb, error %d\n", rv);
1399
rv = (rv == -ENOMEM) ? rv : -EIO;
1400
spin_lock_irq(&dev->err_lock);
1401
dev->ongoing_read = 0;
1402
spin_unlock_irq(&dev->err_lock);
1403
}
1404
1405
return rv;
1406
}
1407
1408
/*
1409
* skel_do_read() - read operations from lpvo_usb_gpib
1410
*/
1411
1412
static ssize_t skel_do_read(struct usb_skel *dev, char *buffer, size_t count)
1413
{
1414
int rv;
1415
bool ongoing_io;
1416
1417
/* if we cannot read at all, return EOF */
1418
1419
if (!dev->bulk_in_urb || !count)
1420
return 0;
1421
1422
restart: /* added to comply with ftdi timeout technique */
1423
1424
/* no concurrent readers */
1425
1426
rv = mutex_lock_interruptible(&dev->io_mutex);
1427
if (rv < 0)
1428
return rv;
1429
1430
if (!dev->interface) { /* disconnect() was called */
1431
rv = -ENODEV;
1432
goto exit;
1433
}
1434
1435
retry:
1436
/* if IO is under way, we must not touch things */
1437
spin_lock_irq(&dev->err_lock);
1438
ongoing_io = dev->ongoing_read;
1439
spin_unlock_irq(&dev->err_lock);
1440
1441
if (ongoing_io) {
1442
// /* nonblocking IO shall not wait */
1443
// /* no file, no O_NONBLOCK; maybe provide when from user space */
1444
// if (file->f_flags & O_NONBLOCK) {
1445
// rv = -EAGAIN;
1446
// goto exit;
1447
// }
1448
1449
/*
1450
* IO may take forever
1451
* hence wait in an interruptible state
1452
*/
1453
rv = wait_event_interruptible(dev->bulk_in_wait, (!dev->ongoing_read));
1454
if (rv < 0)
1455
goto exit;
1456
}
1457
1458
/* errors must be reported */
1459
rv = dev->errors;
1460
if (rv < 0) {
1461
/* any error is reported once */
1462
dev->errors = 0;
1463
/* to preserve notifications about reset */
1464
rv = (rv == -EPIPE) ? rv : -EIO;
1465
/* report it */
1466
goto exit;
1467
}
1468
1469
/*
1470
* if the buffer is filled we may satisfy the read
1471
* else we need to start IO
1472
*/
1473
1474
if (dev->bulk_in_filled) {
1475
/* we had read data */
1476
1477
size_t available = dev->bulk_in_filled - dev->bulk_in_copied;
1478
// size_t chunk = min(available, count); /* compute chunk later */
1479
size_t chunk;
1480
1481
if (!available) {
1482
/*
1483
* all data has been used
1484
* actual IO needs to be done
1485
*/
1486
/*
1487
* it seems that requests for less than dev->bulk_in_size
1488
* are not accepted
1489
*/
1490
rv = skel_do_read_io(dev, dev->bulk_in_size);
1491
if (rv < 0)
1492
goto exit;
1493
else
1494
goto retry;
1495
}
1496
1497
/*
1498
* data is available - chunk tells us how much shall be copied
1499
*/
1500
1501
/*
1502
* Condition dev->bulk_in_copied > 0 maybe will never happen. In case,
1503
* signal the event and copy using the original procedure, i.e., copy
1504
* first two bytes also
1505
*/
1506
1507
if (dev->bulk_in_copied) {
1508
chunk = min(available, count);
1509
memcpy(buffer, dev->bulk_in_buffer + dev->bulk_in_copied, chunk);
1510
rv = chunk;
1511
dev->bulk_in_copied += chunk;
1512
1513
/* copy discarding first two bytes that contain ftdi chip status */
1514
1515
} else {
1516
/* account for two bytes to be discarded */
1517
chunk = min(available, count + 2);
1518
if (chunk < 2) {
1519
dev_err(&dev->udev->dev, "BAD READ - chunk: %zu\n", chunk);
1520
rv = -EIO;
1521
goto exit;
1522
}
1523
1524
memcpy(buffer, dev->bulk_in_buffer + 2, chunk - 2);
1525
rv = chunk;
1526
dev->bulk_in_copied += chunk;
1527
}
1528
1529
/*
1530
* if we are asked for more than we have,
1531
* we start IO but don't wait
1532
*
1533
* No, no read ahead allowed; if the case, more data will be
1534
* asked for by the lpvo_usb_gpib layer.
1535
*/
1536
// if (available < count)
1537
// skel_do_read_io(dev, dev->bulk_in_size);
1538
} else {
1539
/* no data in the buffer */
1540
rv = skel_do_read_io(dev, dev->bulk_in_size);
1541
if (rv < 0)
1542
goto exit;
1543
else
1544
goto retry;
1545
}
1546
exit:
1547
mutex_unlock(&dev->io_mutex);
1548
if (rv == 2)
1549
goto restart; /* ftdi chip returns two status bytes after a latency anyhow */
1550
1551
if (rv > 0)
1552
return rv - 2; /* account for 2 discarded bytes in a valid buffer */
1553
return rv;
1554
}
1555
1556
/*
1557
* write functions
1558
*/
1559
1560
static void skel_write_bulk_callback(struct urb *urb)
1561
{
1562
struct usb_skel *dev;
1563
unsigned long flags;
1564
1565
dev = urb->context;
1566
1567
/* sync/async unlink faults aren't errors */
1568
if (urb->status) {
1569
if (!(urb->status == -ENOENT ||
1570
urb->status == -ECONNRESET ||
1571
urb->status == -ESHUTDOWN))
1572
dev_err(&dev->interface->dev,
1573
"nonzero write bulk status received: %d\n", urb->status);
1574
1575
spin_lock_irqsave(&dev->err_lock, flags);
1576
dev->errors = urb->status;
1577
spin_unlock_irqrestore(&dev->err_lock, flags);
1578
}
1579
1580
/* free up our allocated buffer */
1581
usb_free_coherent(urb->dev, urb->transfer_buffer_length,
1582
urb->transfer_buffer, urb->transfer_dma);
1583
up(&dev->limit_sem);
1584
}
1585
1586
/*
1587
* skel_do_write() - write operations from lpvo_usb_gpib
1588
*/
1589
1590
static ssize_t skel_do_write(struct usb_skel *dev, const char *buffer, size_t count)
1591
{
1592
int retval = 0;
1593
struct urb *urb = NULL;
1594
char *buf = NULL;
1595
size_t writesize = min_t(size_t, count, (size_t)MAX_TRANSFER);
1596
1597
/* verify that we actually have some data to write */
1598
if (count == 0)
1599
goto exit;
1600
1601
/*
1602
* limit the number of URBs in flight to stop a user from using up all
1603
* RAM
1604
*/
1605
/* Only one URB is used, because we can't have a pending write() and go on */
1606
1607
// if (!(file->f_flags & O_NONBLOCK)) { /* no NONBLOCK provided */
1608
if (down_interruptible(&dev->limit_sem)) {
1609
retval = -ERESTARTSYS;
1610
goto exit;
1611
}
1612
// } else {
1613
// if (down_trylock(&dev->limit_sem)) {
1614
// retval = -EAGAIN;
1615
// goto exit;
1616
// }
1617
// }
1618
1619
spin_lock_irq(&dev->err_lock);
1620
retval = dev->errors;
1621
if (retval < 0) {
1622
/* any error is reported once */
1623
dev->errors = 0;
1624
/* to preserve notifications about reset */
1625
retval = (retval == -EPIPE) ? retval : -EIO;
1626
}
1627
spin_unlock_irq(&dev->err_lock);
1628
if (retval < 0)
1629
goto error;
1630
1631
/* create a urb, and a buffer for it, and copy the data to the urb */
1632
urb = usb_alloc_urb(0, GFP_KERNEL);
1633
if (!urb) {
1634
retval = -ENOMEM;
1635
goto error;
1636
}
1637
1638
buf = usb_alloc_coherent(dev->udev, writesize, GFP_KERNEL,
1639
&urb->transfer_dma);
1640
if (!buf) {
1641
retval = -ENOMEM;
1642
goto error;
1643
}
1644
1645
memcpy(buf, buffer, count);
1646
1647
/* this lock makes sure we don't submit URBs to gone devices */
1648
mutex_lock(&dev->io_mutex);
1649
if (!dev->interface) { /* disconnect() was called */
1650
mutex_unlock(&dev->io_mutex);
1651
retval = -ENODEV;
1652
goto error;
1653
}
1654
1655
/* initialize the urb properly */
1656
usb_fill_bulk_urb(urb, dev->udev,
1657
usb_sndbulkpipe(dev->udev, dev->bulk_out_endpoint_addr),
1658
buf, writesize, skel_write_bulk_callback, dev);
1659
urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1660
usb_anchor_urb(urb, &dev->submitted);
1661
1662
/* send the data out the bulk port */
1663
retval = usb_submit_urb(urb, GFP_KERNEL);
1664
mutex_unlock(&dev->io_mutex);
1665
if (retval) {
1666
dev_err(&dev->interface->dev, "failed submitting write urb, error %d\n", retval);
1667
goto error_unanchor;
1668
}
1669
1670
/*
1671
* release our reference to this urb, the USB core will eventually free
1672
* it entirely
1673
*/
1674
usb_free_urb(urb);
1675
1676
return writesize;
1677
1678
error_unanchor:
1679
usb_unanchor_urb(urb);
1680
error:
1681
if (urb) {
1682
usb_free_coherent(dev->udev, writesize, buf, urb->transfer_dma);
1683
usb_free_urb(urb);
1684
}
1685
up(&dev->limit_sem);
1686
1687
exit:
1688
return retval;
1689
}
1690
1691
/*
1692
* services for the user space devices
1693
*/
1694
1695
#if USER_DEVICE /* conditional compilation of user space device */
1696
1697
static int skel_flush(struct file *file, fl_owner_t id)
1698
{
1699
struct usb_skel *dev;
1700
int res;
1701
1702
dev = file->private_data;
1703
if (!dev)
1704
return -ENODEV;
1705
1706
/* wait for io to stop */
1707
mutex_lock(&dev->io_mutex);
1708
skel_draw_down(dev);
1709
1710
/* read out errors, leave subsequent opens a clean slate */
1711
spin_lock_irq(&dev->err_lock);
1712
res = dev->errors ? (dev->errors == -EPIPE ? -EPIPE : -EIO) : 0;
1713
dev->errors = 0;
1714
spin_unlock_irq(&dev->err_lock);
1715
1716
mutex_unlock(&dev->io_mutex);
1717
1718
return res;
1719
}
1720
1721
static int skel_open(struct inode *inode, struct file *file)
1722
{
1723
struct usb_skel *dev;
1724
struct usb_interface *interface;
1725
int subminor;
1726
int retval = 0;
1727
1728
subminor = iminor(inode);
1729
1730
interface = usb_find_interface(&skel_driver, subminor);
1731
if (!interface) {
1732
pr_err("can't find device for minor %d\n", subminor);
1733
retval = -ENODEV;
1734
goto exit;
1735
}
1736
1737
dev = usb_get_intfdata(interface);
1738
if (!dev) {
1739
retval = -ENODEV;
1740
goto exit;
1741
}
1742
1743
retval = usb_autopm_get_interface(interface);
1744
if (retval)
1745
goto exit;
1746
1747
/* increment our usage count for the device */
1748
kref_get(&dev->kref);
1749
1750
/* save our object in the file's private structure */
1751
file->private_data = dev;
1752
1753
exit:
1754
return retval;
1755
}
1756
1757
static int skel_release(struct inode *inode, struct file *file)
1758
{
1759
struct usb_skel *dev;
1760
1761
dev = file->private_data;
1762
if (!dev)
1763
return -ENODEV;
1764
1765
/* allow the device to be autosuspended */
1766
mutex_lock(&dev->io_mutex);
1767
if (dev->interface)
1768
usb_autopm_put_interface(dev->interface);
1769
mutex_unlock(&dev->io_mutex);
1770
1771
/* decrement the count on our device */
1772
kref_put(&dev->kref, skel_delete);
1773
return 0;
1774
}
1775
1776
/*
1777
* user space access to read function
1778
*/
1779
1780
static ssize_t skel_read(struct file *file, char __user *buffer, size_t count,
1781
loff_t *ppos)
1782
{
1783
struct usb_skel *dev;
1784
char *buf;
1785
ssize_t rv;
1786
1787
dev = file->private_data;
1788
1789
buf = kmalloc(count, GFP_KERNEL);
1790
if (!buf)
1791
return -ENOMEM;
1792
1793
rv = skel_do_read(dev, buf, count);
1794
1795
if (rv > 0) {
1796
if (copy_to_user(buffer, buf, rv)) {
1797
kfree(buf);
1798
return -EFAULT;
1799
}
1800
}
1801
kfree(buf);
1802
return rv;
1803
}
1804
1805
/*
1806
* user space access to write function
1807
*/
1808
1809
static ssize_t skel_write(struct file *file, const char __user *user_buffer,
1810
size_t count, loff_t *ppos)
1811
{
1812
struct usb_skel *dev;
1813
char *buf;
1814
ssize_t rv;
1815
1816
dev = file->private_data;
1817
1818
buf = kmalloc(count, GFP_KERNEL);
1819
if (!buf)
1820
return -ENOMEM;
1821
1822
if (copy_from_user(buf, user_buffer, count)) {
1823
kfree(buf);
1824
return -EFAULT;
1825
}
1826
1827
rv = skel_do_write(dev, buf, count);
1828
kfree(buf);
1829
return rv;
1830
}
1831
#endif
1832
1833
static const struct file_operations skel_fops = {
1834
.owner = THIS_MODULE,
1835
#if USER_DEVICE
1836
.read = skel_read,
1837
.write = skel_write,
1838
.open = skel_open,
1839
.release = skel_release,
1840
.flush = skel_flush,
1841
.llseek = noop_llseek,
1842
#endif
1843
};
1844
1845
/*
1846
* usb class driver info in order to get a minor number from the usb core,
1847
* and to have the device registered with the driver core
1848
*/
1849
#if USER_DEVICE
1850
static struct usb_class_driver skel_class = {
1851
.name = "lpvo_raw%d",
1852
.fops = &skel_fops,
1853
.minor_base = USB_SKEL_MINOR_BASE,
1854
};
1855
#endif
1856
1857
static int skel_probe(struct usb_interface *interface,
1858
const struct usb_device_id *id)
1859
{
1860
struct usb_skel *dev;
1861
struct usb_endpoint_descriptor *bulk_in, *bulk_out;
1862
int retval;
1863
char *device_path;
1864
1865
mutex_init(&minors_lock); /* required for handling minor numbers table */
1866
1867
/* allocate memory for our device state and initialize it */
1868
dev = kzalloc_obj(*dev);
1869
if (!dev)
1870
return -ENOMEM;
1871
1872
kref_init(&dev->kref);
1873
sema_init(&dev->limit_sem, WRITES_IN_FLIGHT);
1874
mutex_init(&dev->io_mutex);
1875
spin_lock_init(&dev->err_lock);
1876
init_usb_anchor(&dev->submitted);
1877
init_waitqueue_head(&dev->bulk_in_wait);
1878
1879
dev->udev = usb_get_dev(interface_to_usbdev(interface));
1880
dev->interface = interface;
1881
1882
/* set up the endpoint information */
1883
/* use only the first bulk-in and bulk-out endpoints */
1884
retval = usb_find_common_endpoints(interface->cur_altsetting,
1885
&bulk_in, &bulk_out, NULL, NULL);
1886
if (retval) {
1887
dev_err(&interface->dev,
1888
"Could not find both bulk-in and bulk-out endpoints\n");
1889
goto error;
1890
}
1891
1892
dev->bulk_in_size = usb_endpoint_maxp(bulk_in);
1893
dev->bulk_in_endpoint_addr = bulk_in->bEndpointAddress;
1894
dev->bulk_in_buffer = kmalloc(dev->bulk_in_size, GFP_KERNEL);
1895
if (!dev->bulk_in_buffer) {
1896
retval = -ENOMEM;
1897
goto error;
1898
}
1899
dev->bulk_in_urb = usb_alloc_urb(0, GFP_KERNEL);
1900
if (!dev->bulk_in_urb) {
1901
retval = -ENOMEM;
1902
goto error;
1903
}
1904
1905
dev->bulk_out_endpoint_addr = bulk_out->bEndpointAddress;
1906
1907
/* save our data pointer in this interface device */
1908
usb_set_intfdata(interface, dev);
1909
1910
/* let the world know */
1911
1912
device_path = kobject_get_path(&dev->udev->dev.kobj, GFP_KERNEL);
1913
dev_dbg(&interface->dev, "New lpvo_usb_device -> bus: %d dev: %d path: %s\n",
1914
dev->udev->bus->busnum, dev->udev->devnum, device_path);
1915
kfree(device_path);
1916
1917
#if USER_DEVICE
1918
/* we can register the device now, as it is ready */
1919
retval = usb_register_dev(interface, &skel_class);
1920
if (retval) {
1921
/* something prevented us from registering this driver */
1922
dev_err(&interface->dev,
1923
"Not able to get a minor for this device.\n");
1924
usb_set_intfdata(interface, NULL);
1925
goto error;
1926
}
1927
#endif
1928
1929
write_latency_timer(dev->udev); /* adjust the latency timer */
1930
1931
usb_gpib_init_module(interface); /* last, init the lpvo for this minor */
1932
1933
return 0;
1934
1935
error:
1936
/* this frees allocated memory */
1937
kref_put(&dev->kref, skel_delete);
1938
1939
return retval;
1940
}
1941
1942
static void skel_disconnect(struct usb_interface *interface)
1943
{
1944
struct usb_skel *dev;
1945
int minor = interface->minor;
1946
1947
usb_gpib_exit_module(minor); /* first, disactivate the lpvo */
1948
1949
dev = usb_get_intfdata(interface);
1950
usb_set_intfdata(interface, NULL);
1951
1952
#if USER_DEVICE
1953
/* give back our minor */
1954
usb_deregister_dev(interface, &skel_class);
1955
#endif
1956
1957
/* prevent more I/O from starting */
1958
mutex_lock(&dev->io_mutex);
1959
dev->interface = NULL;
1960
mutex_unlock(&dev->io_mutex);
1961
1962
usb_kill_anchored_urbs(&dev->submitted);
1963
1964
/* decrement our usage count */
1965
kref_put(&dev->kref, skel_delete);
1966
}
1967
1968
static void skel_draw_down(struct usb_skel *dev)
1969
{
1970
int time;
1971
1972
time = usb_wait_anchor_empty_timeout(&dev->submitted, 1000);
1973
if (!time)
1974
usb_kill_anchored_urbs(&dev->submitted);
1975
usb_kill_urb(dev->bulk_in_urb);
1976
}
1977
1978
static int skel_suspend(struct usb_interface *intf, pm_message_t message)
1979
{
1980
struct usb_skel *dev = usb_get_intfdata(intf);
1981
1982
if (!dev)
1983
return 0;
1984
skel_draw_down(dev);
1985
return 0;
1986
}
1987
1988
static int skel_resume(struct usb_interface *intf)
1989
{
1990
return 0;
1991
}
1992
1993
static int skel_pre_reset(struct usb_interface *intf)
1994
{
1995
struct usb_skel *dev = usb_get_intfdata(intf);
1996
1997
mutex_lock(&dev->io_mutex);
1998
skel_draw_down(dev);
1999
2000
return 0;
2001
}
2002
2003
static int skel_post_reset(struct usb_interface *intf)
2004
{
2005
struct usb_skel *dev = usb_get_intfdata(intf);
2006
2007
/* we are sure no URBs are active - no locking needed */
2008
dev->errors = -EPIPE;
2009
mutex_unlock(&dev->io_mutex);
2010
2011
return 0;
2012
}
2013
2014
static struct usb_driver skel_driver = {
2015
.name = NAME,
2016
.probe = skel_probe,
2017
.disconnect = skel_disconnect,
2018
.suspend = skel_suspend,
2019
.resume = skel_resume,
2020
.pre_reset = skel_pre_reset,
2021
.post_reset = skel_post_reset,
2022
.id_table = skel_table,
2023
.supports_autosuspend = 1,
2024
};
2025
2026
module_usb_driver(skel_driver);
2027
2028