1 // SPDX-License-Identifier: GPL-2.0
2
3 /***************************************************************************
4 * copyright : (C) 2001, 2004 by Frank Mori Hess
5 ***************************************************************************
6 */
7
8 #include "ibsys.h"
9 #include <linux/module.h>
10 #include <linux/wait.h>
11 #include <linux/list.h>
12 #include <linux/fs.h>
13 #include <linux/pci.h>
14 #include <linux/device.h>
15 #include <linux/init.h>
16 #include <linux/string.h>
17 #include <linux/vmalloc.h>
18 #include <linux/fcntl.h>
19 #include <linux/kmod.h>
20 #include <linux/uaccess.h>
21
22 MODULE_LICENSE("GPL");
23 MODULE_DESCRIPTION("GPIB base support");
24 MODULE_ALIAS_CHARDEV_MAJOR(GPIB_CODE);
25
26 static int board_type_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, unsigned long arg);
27 static int read_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board,
28 unsigned long arg);
29 static int write_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board,
30 unsigned long arg);
31 static int command_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board,
32 unsigned long arg);
33 static int open_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned long arg);
34 static int close_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned long arg);
35 static int serial_poll_ioctl(gpib_board_t *board, unsigned long arg);
36 static int wait_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, unsigned long arg);
37 static int parallel_poll_ioctl(gpib_board_t *board, unsigned long arg);
38 static int online_ioctl(gpib_board_t *board, unsigned long arg);
39 static int remote_enable_ioctl(gpib_board_t *board, unsigned long arg);
40 static int take_control_ioctl(gpib_board_t *board, unsigned long arg);
41 static int line_status_ioctl(gpib_board_t *board, unsigned long arg);
42 static int pad_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv,
43 unsigned long arg);
44 static int sad_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv,
45 unsigned long arg);
46 static int eos_ioctl(gpib_board_t *board, unsigned long arg);
47 static int request_service_ioctl(gpib_board_t *board, unsigned long arg);
48 static int request_service2_ioctl(gpib_board_t *board, unsigned long arg);
49 static int iobase_ioctl(gpib_board_config_t *config, unsigned long arg);
50 static int irq_ioctl(gpib_board_config_t *config, unsigned long arg);
51 static int dma_ioctl(gpib_board_config_t *config, unsigned long arg);
52 static int autospoll_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv,
53 unsigned long arg);
54 static int mutex_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv,
55 unsigned long arg);
56 static int timeout_ioctl(gpib_board_t *board, unsigned long arg);
57 static int status_bytes_ioctl(gpib_board_t *board, unsigned long arg);
58 static int board_info_ioctl(const gpib_board_t *board, unsigned long arg);
59 static int ppc_ioctl(gpib_board_t *board, unsigned long arg);
60 static int set_local_ppoll_mode_ioctl(gpib_board_t *board, unsigned long arg);
61 static int get_local_ppoll_mode_ioctl(gpib_board_t *board, unsigned long arg);
62 static int query_board_rsv_ioctl(gpib_board_t *board, unsigned long arg);
63 static int interface_clear_ioctl(gpib_board_t *board, unsigned long arg);
64 static int select_pci_ioctl(gpib_board_config_t *config, unsigned long arg);
65 static int select_device_path_ioctl(gpib_board_config_t *config, unsigned long arg);
66 static int event_ioctl(gpib_board_t *board, unsigned long arg);
67 static int request_system_control_ioctl(gpib_board_t *board, unsigned long arg);
68 static int t1_delay_ioctl(gpib_board_t *board, unsigned long arg);
69
70 static int cleanup_open_devices(gpib_file_private_t *file_priv, gpib_board_t *board);
71
72 static int pop_gpib_event_nolock(gpib_board_t *board, gpib_event_queue_t *queue, short *event_type);
73
74 /*
75 * Timer functions
76 */
77
78 /* Watchdog timeout routine */
79
watchdog_timeout(struct timer_list * t)80 static void watchdog_timeout(struct timer_list *t)
81 {
82 gpib_board_t *board = from_timer(board, t, timer);
83
84 set_bit(TIMO_NUM, &board->status);
85 wake_up_interruptible(&board->wait);
86 }
87
88 /* install timer interrupt handler */
os_start_timer(gpib_board_t * board,unsigned int usec_timeout)89 void os_start_timer(gpib_board_t *board, unsigned int usec_timeout)
90 /* Starts the timeout task */
91 {
92 if (timer_pending(&board->timer)) {
93 pr_err("gpib: bug! timer already running?\n");
94 return;
95 }
96 clear_bit(TIMO_NUM, &board->status);
97
98 if (usec_timeout > 0) {
99 board->timer.function = watchdog_timeout;
100 /* set number of ticks */
101 mod_timer(&board->timer, jiffies + usec_to_jiffies(usec_timeout));
102 }
103 }
104
os_remove_timer(gpib_board_t * board)105 void os_remove_timer(gpib_board_t *board)
106 /* Removes the timeout task */
107 {
108 if (timer_pending(&board->timer))
109 del_timer_sync(&board->timer);
110 }
111
io_timed_out(gpib_board_t * board)112 int io_timed_out(gpib_board_t *board)
113 {
114 if (test_bit(TIMO_NUM, &board->status))
115 return 1;
116 return 0;
117 }
118
119 /* this is a function instead of a constant because of Suse
120 * defining HZ to be a function call to get_hz()
121 */
pseudo_irq_period(void)122 static inline int pseudo_irq_period(void)
123 {
124 return (HZ + 99) / 100;
125 }
126
pseudo_irq_handler(struct timer_list * t)127 static void pseudo_irq_handler(struct timer_list *t)
128 {
129 struct gpib_pseudo_irq *pseudo_irq = from_timer(pseudo_irq, t, timer);
130
131 if (pseudo_irq->handler)
132 pseudo_irq->handler(0, pseudo_irq->board);
133 else
134 pr_err("gpib: bug! pseudo_irq.handler is NULL\n");
135
136 if (atomic_read(&pseudo_irq->active))
137 mod_timer(&pseudo_irq->timer, jiffies + pseudo_irq_period());
138 }
139
gpib_request_pseudo_irq(gpib_board_t * board,irqreturn_t (* handler)(int,void *))140 int gpib_request_pseudo_irq(gpib_board_t *board, irqreturn_t (*handler)(int, void *))
141 {
142 if (timer_pending(&board->pseudo_irq.timer) || board->pseudo_irq.handler) {
143 pr_err("gpib: only one pseudo interrupt per board allowed\n");
144 return -1;
145 }
146
147 board->pseudo_irq.handler = handler;
148 board->pseudo_irq.timer.function = pseudo_irq_handler;
149 board->pseudo_irq.board = board;
150
151 atomic_set(&board->pseudo_irq.active, 1);
152
153 mod_timer(&board->pseudo_irq.timer, jiffies + pseudo_irq_period());
154
155 return 0;
156 }
157 EXPORT_SYMBOL(gpib_request_pseudo_irq);
158
gpib_free_pseudo_irq(gpib_board_t * board)159 void gpib_free_pseudo_irq(gpib_board_t *board)
160 {
161 atomic_set(&board->pseudo_irq.active, 0);
162
163 del_timer_sync(&board->pseudo_irq.timer);
164 board->pseudo_irq.handler = NULL;
165 }
166 EXPORT_SYMBOL(gpib_free_pseudo_irq);
167
168 static const unsigned int serial_timeout = 1000000;
169
num_status_bytes(const gpib_status_queue_t * dev)170 unsigned int num_status_bytes(const gpib_status_queue_t *dev)
171 {
172 if (!dev)
173 return 0;
174 return dev->num_status_bytes;
175 }
176
177 // push status byte onto back of status byte fifo
push_status_byte(gpib_board_t * board,gpib_status_queue_t * device,u8 poll_byte)178 int push_status_byte(gpib_board_t *board, gpib_status_queue_t *device, u8 poll_byte)
179 {
180 struct list_head *head = &device->status_bytes;
181 status_byte_t *status;
182 static const unsigned int max_num_status_bytes = 1024;
183 int retval;
184
185 if (num_status_bytes(device) >= max_num_status_bytes) {
186 u8 lost_byte;
187
188 device->dropped_byte = 1;
189 retval = pop_status_byte(board, device, &lost_byte);
190 if (retval < 0)
191 return retval;
192 }
193
194 status = kmalloc(sizeof(status_byte_t), GFP_KERNEL);
195 if (!status)
196 return -ENOMEM;
197
198 INIT_LIST_HEAD(&status->list);
199 status->poll_byte = poll_byte;
200
201 list_add_tail(&status->list, head);
202
203 device->num_status_bytes++;
204
205 dev_dbg(board->gpib_dev, "pushed status byte 0x%x, %i in queue\n",
206 (int)poll_byte, num_status_bytes(device));
207
208 return 0;
209 }
210
211 // pop status byte from front of status byte fifo
pop_status_byte(gpib_board_t * board,gpib_status_queue_t * device,u8 * poll_byte)212 int pop_status_byte(gpib_board_t *board, gpib_status_queue_t *device, u8 *poll_byte)
213 {
214 struct list_head *head = &device->status_bytes;
215 struct list_head *front = head->next;
216 status_byte_t *status;
217
218 if (num_status_bytes(device) == 0)
219 return -EIO;
220
221 if (front == head)
222 return -EIO;
223
224 if (device->dropped_byte) {
225 device->dropped_byte = 0;
226 return -EPIPE;
227 }
228
229 status = list_entry(front, status_byte_t, list);
230 *poll_byte = status->poll_byte;
231
232 list_del(front);
233 kfree(status);
234
235 device->num_status_bytes--;
236
237 dev_dbg(board->gpib_dev, "popped status byte 0x%x, %i in queue\n",
238 (int)*poll_byte, num_status_bytes(device));
239
240 return 0;
241 }
242
get_gpib_status_queue(gpib_board_t * board,unsigned int pad,int sad)243 gpib_status_queue_t *get_gpib_status_queue(gpib_board_t *board, unsigned int pad, int sad)
244 {
245 gpib_status_queue_t *device;
246 struct list_head *list_ptr;
247 const struct list_head *head = &board->device_list;
248
249 for (list_ptr = head->next; list_ptr != head; list_ptr = list_ptr->next) {
250 device = list_entry(list_ptr, gpib_status_queue_t, list);
251 if (gpib_address_equal(device->pad, device->sad, pad, sad))
252 return device;
253 }
254
255 return NULL;
256 }
257
get_serial_poll_byte(gpib_board_t * board,unsigned int pad,int sad,unsigned int usec_timeout,uint8_t * poll_byte)258 int get_serial_poll_byte(gpib_board_t *board, unsigned int pad, int sad, unsigned int usec_timeout,
259 uint8_t *poll_byte)
260 {
261 gpib_status_queue_t *device;
262
263 dev_dbg(board->gpib_dev, "%s:()\n", __func__);
264
265 device = get_gpib_status_queue(board, pad, sad);
266 if (num_status_bytes(device))
267 return pop_status_byte(board, device, poll_byte);
268 else
269 return dvrsp(board, pad, sad, usec_timeout, poll_byte);
270 }
271
autopoll_all_devices(gpib_board_t * board)272 int autopoll_all_devices(gpib_board_t *board)
273 {
274 int retval;
275
276 dev_dbg(board->gpib_dev, "entering %s()\n", __func__);
277 if (mutex_lock_interruptible(&board->user_mutex))
278 return -ERESTARTSYS;
279 if (mutex_lock_interruptible(&board->big_gpib_mutex)) {
280 mutex_unlock(&board->user_mutex);
281 return -ERESTARTSYS;
282 }
283
284 dev_dbg(board->gpib_dev, "autopoll has board lock\n");
285
286 retval = serial_poll_all(board, serial_timeout);
287 if (retval < 0) {
288 mutex_unlock(&board->big_gpib_mutex);
289 mutex_unlock(&board->user_mutex);
290 return retval;
291 }
292
293 dev_dbg(board->gpib_dev, "%s complete\n", __func__);
294 /* need to wake wait queue in case someone is
295 * waiting on RQS
296 */
297 wake_up_interruptible(&board->wait);
298 mutex_unlock(&board->big_gpib_mutex);
299 mutex_unlock(&board->user_mutex);
300
301 return retval;
302 }
303
setup_serial_poll(gpib_board_t * board,unsigned int usec_timeout)304 static int setup_serial_poll(gpib_board_t *board, unsigned int usec_timeout)
305 {
306 u8 cmd_string[8];
307 int i;
308 size_t bytes_written;
309 int ret;
310
311 dev_dbg(board->gpib_dev, "entering %s()\n", __func__);
312
313 os_start_timer(board, usec_timeout);
314 ret = ibcac(board, 1, 1);
315 if (ret < 0) {
316 os_remove_timer(board);
317 return ret;
318 }
319
320 i = 0;
321 cmd_string[i++] = UNL;
322 cmd_string[i++] = MLA(board->pad); /* controller's listen address */
323 if (board->sad >= 0)
324 cmd_string[i++] = MSA(board->sad);
325 cmd_string[i++] = SPE; //serial poll enable
326
327 ret = board->interface->command(board, cmd_string, i, &bytes_written);
328 if (ret < 0 || bytes_written < i) {
329 pr_err("gpib: failed to setup serial poll\n");
330 os_remove_timer(board);
331 return -EIO;
332 }
333 os_remove_timer(board);
334
335 return 0;
336 }
337
read_serial_poll_byte(gpib_board_t * board,unsigned int pad,int sad,unsigned int usec_timeout,uint8_t * result)338 static int read_serial_poll_byte(gpib_board_t *board, unsigned int pad,
339 int sad, unsigned int usec_timeout, uint8_t *result)
340 {
341 u8 cmd_string[8];
342 int end_flag;
343 int ret;
344 int i;
345 size_t nbytes;
346
347 dev_dbg(board->gpib_dev, "entering %s(), pad=%i sad=%i\n", __func__, pad, sad);
348
349 os_start_timer(board, usec_timeout);
350 ret = ibcac(board, 1, 1);
351 if (ret < 0) {
352 os_remove_timer(board);
353 return ret;
354 }
355
356 i = 0;
357 // send talk address
358 cmd_string[i++] = MTA(pad);
359 if (sad >= 0)
360 cmd_string[i++] = MSA(sad);
361
362 ret = board->interface->command(board, cmd_string, i, &nbytes);
363 if (ret < 0 || nbytes < i) {
364 pr_err("gpib: failed to setup serial poll\n");
365 os_remove_timer(board);
366 return -EIO;
367 }
368
369 ibgts(board);
370
371 // read poll result
372 ret = board->interface->read(board, result, 1, &end_flag, &nbytes);
373 if (ret < 0 || nbytes < 1) {
374 pr_err("gpib: serial poll failed\n");
375 os_remove_timer(board);
376 return -EIO;
377 }
378 os_remove_timer(board);
379
380 return 0;
381 }
382
cleanup_serial_poll(gpib_board_t * board,unsigned int usec_timeout)383 static int cleanup_serial_poll(gpib_board_t *board, unsigned int usec_timeout)
384 {
385 u8 cmd_string[8];
386 int ret;
387 size_t bytes_written;
388
389 dev_dbg(board->gpib_dev, "entering %s()\n", __func__);
390
391 os_start_timer(board, usec_timeout);
392 ret = ibcac(board, 1, 1);
393 if (ret < 0) {
394 os_remove_timer(board);
395 return ret;
396 }
397
398 cmd_string[0] = SPD; /* disable serial poll bytes */
399 cmd_string[1] = UNT;
400 ret = board->interface->command(board, cmd_string, 2, &bytes_written);
401 if (ret < 0 || bytes_written < 2) {
402 pr_err("gpib: failed to disable serial poll\n");
403 os_remove_timer(board);
404 return -EIO;
405 }
406 os_remove_timer(board);
407
408 return 0;
409 }
410
serial_poll_single(gpib_board_t * board,unsigned int pad,int sad,unsigned int usec_timeout,uint8_t * result)411 static int serial_poll_single(gpib_board_t *board, unsigned int pad, int sad,
412 unsigned int usec_timeout, uint8_t *result)
413 {
414 int retval, cleanup_retval;
415
416 retval = setup_serial_poll(board, usec_timeout);
417 if (retval < 0)
418 return retval;
419 retval = read_serial_poll_byte(board, pad, sad, usec_timeout, result);
420 cleanup_retval = cleanup_serial_poll(board, usec_timeout);
421 if (retval < 0)
422 return retval;
423 if (cleanup_retval < 0)
424 return retval;
425
426 return 0;
427 }
428
serial_poll_all(gpib_board_t * board,unsigned int usec_timeout)429 int serial_poll_all(gpib_board_t *board, unsigned int usec_timeout)
430 {
431 int retval = 0;
432 struct list_head *cur;
433 const struct list_head *head = NULL;
434 gpib_status_queue_t *device;
435 u8 result;
436 unsigned int num_bytes = 0;
437
438 dev_dbg(board->gpib_dev, "entering %s()\n", __func__);
439
440 head = &board->device_list;
441 if (head->next == head)
442 return 0;
443
444 retval = setup_serial_poll(board, usec_timeout);
445 if (retval < 0)
446 return retval;
447
448 for (cur = head->next; cur != head; cur = cur->next) {
449 device = list_entry(cur, gpib_status_queue_t, list);
450 retval = read_serial_poll_byte(board,
451 device->pad, device->sad, usec_timeout, &result);
452 if (retval < 0)
453 continue;
454 if (result & request_service_bit) {
455 retval = push_status_byte(board, device, result);
456 if (retval < 0)
457 continue;
458 num_bytes++;
459 }
460 }
461
462 retval = cleanup_serial_poll(board, usec_timeout);
463 if (retval < 0)
464 return retval;
465
466 return num_bytes;
467 }
468
469 /*
470 * DVRSP
471 * This function performs a serial poll of the device with primary
472 * address pad and secondary address sad. If the device has no
473 * secondary address, pass a negative number in for this argument. At the
474 * end of a successful serial poll the response is returned in result.
475 * SPD and UNT are sent at the completion of the poll.
476 */
477
dvrsp(gpib_board_t * board,unsigned int pad,int sad,unsigned int usec_timeout,uint8_t * result)478 int dvrsp(gpib_board_t *board, unsigned int pad, int sad,
479 unsigned int usec_timeout, uint8_t *result)
480 {
481 int status = ibstatus(board);
482 int retval;
483
484 if ((status & CIC) == 0) {
485 pr_err("gpib: not CIC during serial poll\n");
486 return -1;
487 }
488
489 if (pad > MAX_GPIB_PRIMARY_ADDRESS || sad > MAX_GPIB_SECONDARY_ADDRESS || sad < -1) {
490 pr_err("gpib: bad address for serial poll");
491 return -1;
492 }
493
494 retval = serial_poll_single(board, pad, sad, usec_timeout, result);
495 if (io_timed_out(board))
496 retval = -ETIMEDOUT;
497
498 return retval;
499 }
500
handle_to_descriptor(const gpib_file_private_t * file_priv,int handle)501 static gpib_descriptor_t *handle_to_descriptor(const gpib_file_private_t *file_priv,
502 int handle)
503 {
504 if (handle < 0 || handle >= GPIB_MAX_NUM_DESCRIPTORS) {
505 pr_err("gpib: invalid handle %i\n", handle);
506 return NULL;
507 }
508
509 return file_priv->descriptors[handle];
510 }
511
init_gpib_file_private(gpib_file_private_t * priv)512 static int init_gpib_file_private(gpib_file_private_t *priv)
513 {
514 memset(priv, 0, sizeof(*priv));
515 atomic_set(&priv->holding_mutex, 0);
516 priv->descriptors[0] = kmalloc(sizeof(gpib_descriptor_t), GFP_KERNEL);
517 if (!priv->descriptors[0]) {
518 pr_err("gpib: failed to allocate default board descriptor\n");
519 return -ENOMEM;
520 }
521 init_gpib_descriptor(priv->descriptors[0]);
522 priv->descriptors[0]->is_board = 1;
523 mutex_init(&priv->descriptors_mutex);
524 return 0;
525 }
526
ibopen(struct inode * inode,struct file * filep)527 int ibopen(struct inode *inode, struct file *filep)
528 {
529 unsigned int minor = iminor(inode);
530 gpib_board_t *board;
531 gpib_file_private_t *priv;
532
533 if (minor >= GPIB_MAX_NUM_BOARDS) {
534 pr_err("gpib: invalid minor number of device file\n");
535 return -ENXIO;
536 }
537
538 board = &board_array[minor];
539
540 filep->private_data = kmalloc(sizeof(gpib_file_private_t), GFP_KERNEL);
541 if (!filep->private_data)
542 return -ENOMEM;
543
544 priv = filep->private_data;
545 init_gpib_file_private((gpib_file_private_t *)filep->private_data);
546
547 dev_dbg(board->gpib_dev, "pid %i, gpib: opening minor %d\n", current->pid, minor);
548
549 if (board->use_count == 0) {
550 int retval;
551
552 retval = request_module("gpib%i", minor);
553 if (retval) {
554 dev_dbg(board->gpib_dev, "pid %i, gpib: request module returned %i\n",
555 current->pid, retval);
556 }
557 }
558 if (board->interface) {
559 if (!try_module_get(board->provider_module)) {
560 pr_err("gpib: try_module_get() failed\n");
561 return -EIO;
562 }
563 board->use_count++;
564 priv->got_module = 1;
565 }
566 return 0;
567 }
568
ibclose(struct inode * inode,struct file * filep)569 int ibclose(struct inode *inode, struct file *filep)
570 {
571 unsigned int minor = iminor(inode);
572 gpib_board_t *board;
573 gpib_file_private_t *priv = filep->private_data;
574 gpib_descriptor_t *desc;
575
576 if (minor >= GPIB_MAX_NUM_BOARDS) {
577 pr_err("gpib: invalid minor number of device file\n");
578 return -ENODEV;
579 }
580
581 board = &board_array[minor];
582
583 dev_dbg(board->gpib_dev, "pid %i, closing minor %d\n", current->pid, minor);
584
585 if (priv) {
586 desc = handle_to_descriptor(priv, 0);
587 if (desc) {
588 if (desc->autopoll_enabled) {
589 dev_dbg(board->gpib_dev, "pid %i, decrementing autospollers\n",
590 current->pid);
591 if (board->autospollers > 0)
592 board->autospollers--;
593 else
594 pr_err("gpib: Attempt to decrement zero autospollers\n");
595 }
596 } else {
597 pr_err("gpib: Unexpected null gpib_descriptor\n");
598 }
599
600 cleanup_open_devices(priv, board);
601
602 if (atomic_read(&priv->holding_mutex))
603 mutex_unlock(&board->user_mutex);
604
605 if (priv->got_module && board->use_count) {
606 module_put(board->provider_module);
607 --board->use_count;
608 }
609
610 kfree(filep->private_data);
611 filep->private_data = NULL;
612 }
613
614 return 0;
615 }
616
ibioctl(struct file * filep,unsigned int cmd,unsigned long arg)617 long ibioctl(struct file *filep, unsigned int cmd, unsigned long arg)
618 {
619 unsigned int minor = iminor(filep->f_path.dentry->d_inode);
620 gpib_board_t *board;
621 gpib_file_private_t *file_priv = filep->private_data;
622 long retval = -ENOTTY;
623
624 if (minor >= GPIB_MAX_NUM_BOARDS) {
625 pr_err("gpib: invalid minor number of device file\n");
626 return -ENODEV;
627 }
628 board = &board_array[minor];
629
630 if (mutex_lock_interruptible(&board->big_gpib_mutex))
631 return -ERESTARTSYS;
632
633 dev_dbg(board->gpib_dev, "pid %i, ioctl %d, interface=%s, use=%d, onl=%d\n",
634 current->pid, cmd & 0xff,
635 board->interface ? board->interface->name : "",
636 board->use_count,
637 board->online);
638
639 switch (cmd) {
640 case CFCBOARDTYPE:
641 retval = board_type_ioctl(file_priv, board, arg);
642 goto done;
643 case IBONL:
644 retval = online_ioctl(board, arg);
645 goto done;
646 default:
647 break;
648 }
649 if (!board->interface) {
650 pr_err("gpib: no gpib board configured on /dev/gpib%i\n", minor);
651 retval = -ENODEV;
652 goto done;
653 }
654 if (file_priv->got_module == 0) {
655 if (!try_module_get(board->provider_module)) {
656 pr_err("gpib: try_module_get() failed\n");
657 retval = -EIO;
658 goto done;
659 }
660 file_priv->got_module = 1;
661 board->use_count++;
662 }
663 switch (cmd) {
664 case CFCBASE:
665 retval = iobase_ioctl(&board->config, arg);
666 goto done;
667 case CFCIRQ:
668 retval = irq_ioctl(&board->config, arg);
669 goto done;
670 case CFCDMA:
671 retval = dma_ioctl(&board->config, arg);
672 goto done;
673 case IBAUTOSPOLL:
674 retval = autospoll_ioctl(board, file_priv, arg);
675 goto done;
676 case IBBOARD_INFO:
677 retval = board_info_ioctl(board, arg);
678 goto done;
679 case IBMUTEX:
680 /* Need to unlock board->big_gpib_mutex before potentially locking board->user_mutex
681 * to maintain consistent locking order
682 */
683 mutex_unlock(&board->big_gpib_mutex);
684 return mutex_ioctl(board, file_priv, arg);
685 case IBPAD:
686 retval = pad_ioctl(board, file_priv, arg);
687 goto done;
688 case IBSAD:
689 retval = sad_ioctl(board, file_priv, arg);
690 goto done;
691 case IBSELECT_PCI:
692 retval = select_pci_ioctl(&board->config, arg);
693 goto done;
694 case IBSELECT_DEVICE_PATH:
695 retval = select_device_path_ioctl(&board->config, arg);
696 goto done;
697 default:
698 break;
699 }
700
701 if (!board->online) {
702 pr_err("gpib: ioctl %i invalid for offline board\n",
703 cmd & 0xff);
704 retval = -EINVAL;
705 goto done;
706 }
707
708 switch (cmd) {
709 case IBEVENT:
710 retval = event_ioctl(board, arg);
711 goto done;
712 case IBCLOSEDEV:
713 retval = close_dev_ioctl(filep, board, arg);
714 goto done;
715 case IBOPENDEV:
716 retval = open_dev_ioctl(filep, board, arg);
717 goto done;
718 case IBSPOLL_BYTES:
719 retval = status_bytes_ioctl(board, arg);
720 goto done;
721 case IBWAIT:
722 retval = wait_ioctl(file_priv, board, arg);
723 if (retval == -ERESTARTSYS)
724 return retval;
725 goto done;
726 case IBLINES:
727 retval = line_status_ioctl(board, arg);
728 goto done;
729 case IBLOC:
730 board->interface->return_to_local(board);
731 retval = 0;
732 goto done;
733 default:
734 break;
735 }
736
737 spin_lock(&board->locking_pid_spinlock);
738 if (current->pid != board->locking_pid) {
739 spin_unlock(&board->locking_pid_spinlock);
740 pr_err("gpib: need to hold board lock to perform ioctl %i\n",
741 cmd & 0xff);
742 retval = -EPERM;
743 goto done;
744 }
745 spin_unlock(&board->locking_pid_spinlock);
746
747 switch (cmd) {
748 case IB_T1_DELAY:
749 retval = t1_delay_ioctl(board, arg);
750 goto done;
751 case IBCAC:
752 retval = take_control_ioctl(board, arg);
753 goto done;
754 case IBCMD:
755 /* IO ioctls can take a long time, we need to unlock board->big_gpib_mutex
756 * before we call them.
757 */
758 mutex_unlock(&board->big_gpib_mutex);
759 return command_ioctl(file_priv, board, arg);
760 case IBEOS:
761 retval = eos_ioctl(board, arg);
762 goto done;
763 case IBGTS:
764 retval = ibgts(board);
765 goto done;
766 case IBPPC:
767 retval = ppc_ioctl(board, arg);
768 goto done;
769 case IBPP2_SET:
770 retval = set_local_ppoll_mode_ioctl(board, arg);
771 goto done;
772 case IBPP2_GET:
773 retval = get_local_ppoll_mode_ioctl(board, arg);
774 goto done;
775 case IBQUERY_BOARD_RSV:
776 retval = query_board_rsv_ioctl(board, arg);
777 goto done;
778 case IBRD:
779 /* IO ioctls can take a long time, we need to unlock board->big_gpib_mutex
780 * before we call them.
781 */
782 mutex_unlock(&board->big_gpib_mutex);
783 return read_ioctl(file_priv, board, arg);
784 case IBRPP:
785 retval = parallel_poll_ioctl(board, arg);
786 goto done;
787 case IBRSC:
788 retval = request_system_control_ioctl(board, arg);
789 goto done;
790 case IBRSP:
791 retval = serial_poll_ioctl(board, arg);
792 goto done;
793 case IBRSV:
794 retval = request_service_ioctl(board, arg);
795 goto done;
796 case IBRSV2:
797 retval = request_service2_ioctl(board, arg);
798 goto done;
799 case IBSIC:
800 retval = interface_clear_ioctl(board, arg);
801 goto done;
802 case IBSRE:
803 retval = remote_enable_ioctl(board, arg);
804 goto done;
805 case IBTMO:
806 retval = timeout_ioctl(board, arg);
807 goto done;
808 case IBWRT:
809 /* IO ioctls can take a long time, we need to unlock board->big_gpib_mutex
810 * before we call them.
811 */
812 mutex_unlock(&board->big_gpib_mutex);
813 return write_ioctl(file_priv, board, arg);
814 default:
815 retval = -ENOTTY;
816 goto done;
817 }
818
819 done:
820 mutex_unlock(&board->big_gpib_mutex);
821 dev_dbg(board->gpib_dev, "ioctl done status = 0x%lx\n", board->status);
822 return retval;
823 }
824
board_type_ioctl(gpib_file_private_t * file_priv,gpib_board_t * board,unsigned long arg)825 static int board_type_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board, unsigned long arg)
826 {
827 struct list_head *list_ptr;
828 board_type_ioctl_t cmd;
829 int retval;
830
831 if (!capable(CAP_SYS_ADMIN))
832 return -EPERM;
833 if (board->online) {
834 pr_err("gpib: can't change board type while board is online.\n");
835 return -EBUSY;
836 }
837
838 retval = copy_from_user(&cmd, (void __user *)arg, sizeof(board_type_ioctl_t));
839 if (retval)
840 return retval;
841
842 for (list_ptr = registered_drivers.next; list_ptr != ®istered_drivers;
843 list_ptr = list_ptr->next) {
844 gpib_interface_list_t *entry;
845
846 entry = list_entry(list_ptr, gpib_interface_list_t, list);
847 if (strcmp(entry->interface->name, cmd.name) == 0) {
848 int i;
849 int had_module = file_priv->got_module;
850
851 if (board->use_count) {
852 for (i = 0; i < board->use_count; ++i)
853 module_put(board->provider_module);
854 board->interface = NULL;
855 file_priv->got_module = 0;
856 }
857 board->interface = entry->interface;
858 board->provider_module = entry->module;
859 for (i = 0; i < board->use_count; ++i) {
860 if (!try_module_get(entry->module)) {
861 board->use_count = i;
862 return -EIO;
863 }
864 }
865 if (had_module == 0) {
866 if (!try_module_get(entry->module))
867 return -EIO;
868 ++board->use_count;
869 }
870 file_priv->got_module = 1;
871 return 0;
872 }
873 }
874
875 return -EINVAL;
876 }
877
read_ioctl(gpib_file_private_t * file_priv,gpib_board_t * board,unsigned long arg)878 static int read_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board,
879 unsigned long arg)
880 {
881 read_write_ioctl_t read_cmd;
882 u8 __user *userbuf;
883 unsigned long remain;
884 int end_flag = 0;
885 int retval;
886 ssize_t read_ret = 0;
887 gpib_descriptor_t *desc;
888 size_t nbytes;
889
890 retval = copy_from_user(&read_cmd, (void __user *)arg, sizeof(read_cmd));
891 if (retval)
892 return -EFAULT;
893
894 if (read_cmd.completed_transfer_count > read_cmd.requested_transfer_count)
895 return -EINVAL;
896
897 desc = handle_to_descriptor(file_priv, read_cmd.handle);
898 if (!desc)
899 return -EINVAL;
900
901 if (WARN_ON_ONCE(sizeof(userbuf) > sizeof(read_cmd.buffer_ptr)))
902 return -EFAULT;
903
904 userbuf = (u8 __user *)(unsigned long)read_cmd.buffer_ptr;
905 userbuf += read_cmd.completed_transfer_count;
906
907 remain = read_cmd.requested_transfer_count - read_cmd.completed_transfer_count;
908
909 /* Check write access to buffer */
910 if (!access_ok(userbuf, remain))
911 return -EFAULT;
912
913 atomic_set(&desc->io_in_progress, 1);
914
915 /* Read buffer loads till we fill the user supplied buffer */
916 while (remain > 0 && end_flag == 0) {
917 nbytes = 0;
918 read_ret = ibrd(board, board->buffer, (board->buffer_length < remain) ?
919 board->buffer_length : remain, &end_flag, &nbytes);
920 if (nbytes == 0)
921 break;
922 retval = copy_to_user(userbuf, board->buffer, nbytes);
923 if (retval) {
924 retval = -EFAULT;
925 break;
926 }
927 remain -= nbytes;
928 userbuf += nbytes;
929 if (read_ret < 0)
930 break;
931 }
932 read_cmd.completed_transfer_count = read_cmd.requested_transfer_count - remain;
933 read_cmd.end = end_flag;
934 /* suppress errors (for example due to timeout or interruption by device clear)
935 * if all bytes got sent. This prevents races that can occur in the various drivers
936 * if a device receives a device clear immediately after a transfer completes and
937 * the driver code wasn't careful enough to handle that case.
938 */
939 if (remain == 0 || end_flag)
940 read_ret = 0;
941 if (retval == 0)
942 retval = copy_to_user((void __user *)arg, &read_cmd, sizeof(read_cmd));
943
944 atomic_set(&desc->io_in_progress, 0);
945
946 wake_up_interruptible(&board->wait);
947 if (retval)
948 return -EFAULT;
949
950 return read_ret;
951 }
952
command_ioctl(gpib_file_private_t * file_priv,gpib_board_t * board,unsigned long arg)953 static int command_ioctl(gpib_file_private_t *file_priv,
954 gpib_board_t *board, unsigned long arg)
955 {
956 read_write_ioctl_t cmd;
957 u8 __user *userbuf;
958 unsigned long remain;
959 int retval;
960 int fault = 0;
961 gpib_descriptor_t *desc;
962 size_t bytes_written;
963 int no_clear_io_in_prog;
964
965 retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd));
966 if (retval)
967 return -EFAULT;
968
969 if (cmd.completed_transfer_count > cmd.requested_transfer_count)
970 return -EINVAL;
971
972 desc = handle_to_descriptor(file_priv, cmd.handle);
973 if (!desc)
974 return -EINVAL;
975
976 userbuf = (u8 __user *)(unsigned long)cmd.buffer_ptr;
977 userbuf += cmd.completed_transfer_count;
978
979 no_clear_io_in_prog = cmd.end;
980 cmd.end = 0;
981
982 remain = cmd.requested_transfer_count - cmd.completed_transfer_count;
983
984 /* Check read access to buffer */
985 if (!access_ok(userbuf, remain))
986 return -EFAULT;
987
988 /* Write buffer loads till we empty the user supplied buffer.
989 * Call drivers at least once, even if remain is zero, in
990 * order to allow them to insure previous commands were
991 * completely finished, in the case of a restarted ioctl.
992 */
993
994 atomic_set(&desc->io_in_progress, 1);
995
996 do {
997 fault = copy_from_user(board->buffer, userbuf, (board->buffer_length < remain) ?
998 board->buffer_length : remain);
999 if (fault) {
1000 retval = -EFAULT;
1001 bytes_written = 0;
1002 } else {
1003 retval = ibcmd(board, board->buffer, (board->buffer_length < remain) ?
1004 board->buffer_length : remain, &bytes_written);
1005 }
1006 remain -= bytes_written;
1007 userbuf += bytes_written;
1008 if (retval < 0) {
1009 atomic_set(&desc->io_in_progress, 0);
1010
1011 wake_up_interruptible(&board->wait);
1012 break;
1013 }
1014 } while (remain > 0);
1015
1016 cmd.completed_transfer_count = cmd.requested_transfer_count - remain;
1017
1018 if (fault == 0)
1019 fault = copy_to_user((void __user *)arg, &cmd, sizeof(cmd));
1020
1021 /*
1022 * no_clear_io_in_prog (cmd.end) is true when io_in_progress should
1023 * not be set to zero because the cmd in progress is the address setup
1024 * operation for an async read or write. This causes CMPL not to be set
1025 * in general_ibstatus until the async read or write completes.
1026 */
1027 if (!no_clear_io_in_prog || fault)
1028 atomic_set(&desc->io_in_progress, 0);
1029
1030 wake_up_interruptible(&board->wait);
1031 if (fault)
1032 return -EFAULT;
1033
1034 return retval;
1035 }
1036
write_ioctl(gpib_file_private_t * file_priv,gpib_board_t * board,unsigned long arg)1037 static int write_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board,
1038 unsigned long arg)
1039 {
1040 read_write_ioctl_t write_cmd;
1041 u8 __user *userbuf;
1042 unsigned long remain;
1043 int retval = 0;
1044 int fault;
1045 gpib_descriptor_t *desc;
1046
1047 fault = copy_from_user(&write_cmd, (void __user *)arg, sizeof(write_cmd));
1048 if (fault)
1049 return -EFAULT;
1050
1051 if (write_cmd.completed_transfer_count > write_cmd.requested_transfer_count)
1052 return -EINVAL;
1053
1054 desc = handle_to_descriptor(file_priv, write_cmd.handle);
1055 if (!desc)
1056 return -EINVAL;
1057
1058 userbuf = (u8 __user *)(unsigned long)write_cmd.buffer_ptr;
1059 userbuf += write_cmd.completed_transfer_count;
1060
1061 remain = write_cmd.requested_transfer_count - write_cmd.completed_transfer_count;
1062
1063 /* Check read access to buffer */
1064 if (!access_ok(userbuf, remain))
1065 return -EFAULT;
1066
1067 atomic_set(&desc->io_in_progress, 1);
1068
1069 /* Write buffer loads till we empty the user supplied buffer */
1070 while (remain > 0) {
1071 int send_eoi;
1072 size_t bytes_written = 0;
1073
1074 send_eoi = remain <= board->buffer_length && write_cmd.end;
1075 fault = copy_from_user(board->buffer, userbuf, (board->buffer_length < remain) ?
1076 board->buffer_length : remain);
1077 if (fault) {
1078 retval = -EFAULT;
1079 break;
1080 }
1081 retval = ibwrt(board, board->buffer, (board->buffer_length < remain) ?
1082 board->buffer_length : remain, send_eoi, &bytes_written);
1083 remain -= bytes_written;
1084 userbuf += bytes_written;
1085 if (retval < 0)
1086 break;
1087 }
1088 write_cmd.completed_transfer_count = write_cmd.requested_transfer_count - remain;
1089 /* suppress errors (for example due to timeout or interruption by device clear)
1090 * if all bytes got sent. This prevents races that can occur in the various drivers
1091 * if a device receives a device clear immediately after a transfer completes and
1092 * the driver code wasn't careful enough to handle that case.
1093 */
1094 if (remain == 0)
1095 retval = 0;
1096 if (fault == 0)
1097 fault = copy_to_user((void __user *)arg, &write_cmd, sizeof(write_cmd));
1098
1099 atomic_set(&desc->io_in_progress, 0);
1100
1101 wake_up_interruptible(&board->wait);
1102 if (fault)
1103 return -EFAULT;
1104
1105 return retval;
1106 }
1107
status_bytes_ioctl(gpib_board_t * board,unsigned long arg)1108 static int status_bytes_ioctl(gpib_board_t *board, unsigned long arg)
1109 {
1110 gpib_status_queue_t *device;
1111 spoll_bytes_ioctl_t cmd;
1112 int retval;
1113
1114 retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd));
1115 if (retval)
1116 return -EFAULT;
1117
1118 device = get_gpib_status_queue(board, cmd.pad, cmd.sad);
1119 if (!device)
1120 cmd.num_bytes = 0;
1121 else
1122 cmd.num_bytes = num_status_bytes(device);
1123
1124 retval = copy_to_user((void __user *)arg, &cmd, sizeof(cmd));
1125 if (retval)
1126 return -EFAULT;
1127
1128 return 0;
1129 }
1130
increment_open_device_count(gpib_board_t * board,struct list_head * head,unsigned int pad,int sad)1131 static int increment_open_device_count(gpib_board_t *board, struct list_head *head,
1132 unsigned int pad, int sad)
1133 {
1134 struct list_head *list_ptr;
1135 gpib_status_queue_t *device;
1136
1137 /* first see if address has already been opened, then increment
1138 * open count
1139 */
1140 for (list_ptr = head->next; list_ptr != head; list_ptr = list_ptr->next) {
1141 device = list_entry(list_ptr, gpib_status_queue_t, list);
1142 if (gpib_address_equal(device->pad, device->sad, pad, sad)) {
1143 dev_dbg(board->gpib_dev, "pid %i, incrementing open count for pad %i, sad %i\n",
1144 current->pid, device->pad, device->sad);
1145 device->reference_count++;
1146 return 0;
1147 }
1148 }
1149
1150 /* otherwise we need to allocate a new gpib_status_queue_t */
1151 device = kmalloc(sizeof(gpib_status_queue_t), GFP_ATOMIC);
1152 if (!device)
1153 return -ENOMEM;
1154 init_gpib_status_queue(device);
1155 device->pad = pad;
1156 device->sad = sad;
1157 device->reference_count = 1;
1158
1159 list_add(&device->list, head);
1160
1161 dev_dbg(board->gpib_dev, "pid %i, opened pad %i, sad %i\n",
1162 current->pid, device->pad, device->sad);
1163
1164 return 0;
1165 }
1166
subtract_open_device_count(gpib_board_t * board,struct list_head * head,unsigned int pad,int sad,unsigned int count)1167 static int subtract_open_device_count(gpib_board_t *board, struct list_head *head,
1168 unsigned int pad, int sad, unsigned int count)
1169 {
1170 gpib_status_queue_t *device;
1171 struct list_head *list_ptr;
1172
1173 for (list_ptr = head->next; list_ptr != head; list_ptr = list_ptr->next) {
1174 device = list_entry(list_ptr, gpib_status_queue_t, list);
1175 if (gpib_address_equal(device->pad, device->sad, pad, sad)) {
1176 dev_dbg(board->gpib_dev, "pid %i, decrementing open count for pad %i, sad %i\n",
1177 current->pid, device->pad, device->sad);
1178 if (count > device->reference_count) {
1179 pr_err("gpib: bug! in %s()\n", __func__);
1180 return -EINVAL;
1181 }
1182 device->reference_count -= count;
1183 if (device->reference_count == 0) {
1184 dev_dbg(board->gpib_dev, "pid %i, closing pad %i, sad %i\n",
1185 current->pid, device->pad, device->sad);
1186 list_del(list_ptr);
1187 kfree(device);
1188 }
1189 return 0;
1190 }
1191 }
1192 pr_err("gpib: bug! tried to close address that was never opened!\n");
1193 return -EINVAL;
1194 }
1195
decrement_open_device_count(gpib_board_t * board,struct list_head * head,unsigned int pad,int sad)1196 static inline int decrement_open_device_count(gpib_board_t *board, struct list_head *head,
1197 unsigned int pad, int sad)
1198 {
1199 return subtract_open_device_count(board, head, pad, sad, 1);
1200 }
1201
cleanup_open_devices(gpib_file_private_t * file_priv,gpib_board_t * board)1202 static int cleanup_open_devices(gpib_file_private_t *file_priv, gpib_board_t *board)
1203 {
1204 int retval = 0;
1205 int i;
1206
1207 for (i = 0; i < GPIB_MAX_NUM_DESCRIPTORS; i++) {
1208 gpib_descriptor_t *desc;
1209
1210 desc = file_priv->descriptors[i];
1211 if (!desc)
1212 continue;
1213
1214 if (desc->is_board == 0) {
1215 retval = decrement_open_device_count(board, &board->device_list, desc->pad,
1216 desc->sad);
1217 if (retval < 0)
1218 return retval;
1219 }
1220 kfree(desc);
1221 file_priv->descriptors[i] = NULL;
1222 }
1223
1224 return 0;
1225 }
1226
open_dev_ioctl(struct file * filep,gpib_board_t * board,unsigned long arg)1227 static int open_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned long arg)
1228 {
1229 open_dev_ioctl_t open_dev_cmd;
1230 int retval;
1231 gpib_file_private_t *file_priv = filep->private_data;
1232 int i;
1233
1234 retval = copy_from_user(&open_dev_cmd, (void __user *)arg, sizeof(open_dev_cmd));
1235 if (retval)
1236 return -EFAULT;
1237
1238 if (mutex_lock_interruptible(&file_priv->descriptors_mutex))
1239 return -ERESTARTSYS;
1240 for (i = 0; i < GPIB_MAX_NUM_DESCRIPTORS; i++)
1241 if (!file_priv->descriptors[i])
1242 break;
1243 if (i == GPIB_MAX_NUM_DESCRIPTORS) {
1244 mutex_unlock(&file_priv->descriptors_mutex);
1245 return -ERANGE;
1246 }
1247 file_priv->descriptors[i] = kmalloc(sizeof(gpib_descriptor_t), GFP_KERNEL);
1248 if (!file_priv->descriptors[i]) {
1249 mutex_unlock(&file_priv->descriptors_mutex);
1250 return -ENOMEM;
1251 }
1252 init_gpib_descriptor(file_priv->descriptors[i]);
1253
1254 file_priv->descriptors[i]->pad = open_dev_cmd.pad;
1255 file_priv->descriptors[i]->sad = open_dev_cmd.sad;
1256 file_priv->descriptors[i]->is_board = open_dev_cmd.is_board;
1257 mutex_unlock(&file_priv->descriptors_mutex);
1258
1259 retval = increment_open_device_count(board, &board->device_list, open_dev_cmd.pad,
1260 open_dev_cmd.sad);
1261 if (retval < 0)
1262 return retval;
1263
1264 /* clear stuck srq state, since we may be able to find service request on
1265 * the new device
1266 */
1267 atomic_set(&board->stuck_srq, 0);
1268
1269 open_dev_cmd.handle = i;
1270 retval = copy_to_user((void __user *)arg, &open_dev_cmd, sizeof(open_dev_cmd));
1271 if (retval)
1272 return -EFAULT;
1273
1274 return 0;
1275 }
1276
close_dev_ioctl(struct file * filep,gpib_board_t * board,unsigned long arg)1277 static int close_dev_ioctl(struct file *filep, gpib_board_t *board, unsigned long arg)
1278 {
1279 close_dev_ioctl_t cmd;
1280 gpib_file_private_t *file_priv = filep->private_data;
1281 int retval;
1282
1283 retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd));
1284 if (retval)
1285 return -EFAULT;
1286
1287 if (cmd.handle >= GPIB_MAX_NUM_DESCRIPTORS)
1288 return -EINVAL;
1289 if (!file_priv->descriptors[cmd.handle])
1290 return -EINVAL;
1291
1292 retval = decrement_open_device_count(board, &board->device_list,
1293 file_priv->descriptors[cmd.handle]->pad,
1294 file_priv->descriptors[cmd.handle]->sad);
1295 if (retval < 0)
1296 return retval;
1297
1298 kfree(file_priv->descriptors[cmd.handle]);
1299 file_priv->descriptors[cmd.handle] = NULL;
1300
1301 return 0;
1302 }
1303
serial_poll_ioctl(gpib_board_t * board,unsigned long arg)1304 static int serial_poll_ioctl(gpib_board_t *board, unsigned long arg)
1305 {
1306 serial_poll_ioctl_t serial_cmd;
1307 int retval;
1308
1309 dev_dbg(board->gpib_dev, "pid %i, entering %s()\n", current->pid, __func__);
1310
1311 retval = copy_from_user(&serial_cmd, (void __user *)arg, sizeof(serial_cmd));
1312 if (retval)
1313 return -EFAULT;
1314
1315 retval = get_serial_poll_byte(board, serial_cmd.pad, serial_cmd.sad, board->usec_timeout,
1316 &serial_cmd.status_byte);
1317 if (retval < 0)
1318 return retval;
1319
1320 retval = copy_to_user((void __user *)arg, &serial_cmd, sizeof(serial_cmd));
1321 if (retval)
1322 return -EFAULT;
1323
1324 return 0;
1325 }
1326
wait_ioctl(gpib_file_private_t * file_priv,gpib_board_t * board,unsigned long arg)1327 static int wait_ioctl(gpib_file_private_t *file_priv, gpib_board_t *board,
1328 unsigned long arg)
1329 {
1330 wait_ioctl_t wait_cmd;
1331 int retval;
1332 gpib_descriptor_t *desc;
1333
1334 retval = copy_from_user(&wait_cmd, (void __user *)arg, sizeof(wait_cmd));
1335 if (retval)
1336 return -EFAULT;
1337
1338 desc = handle_to_descriptor(file_priv, wait_cmd.handle);
1339 if (!desc)
1340 return -EINVAL;
1341
1342 retval = ibwait(board, wait_cmd.wait_mask, wait_cmd.clear_mask,
1343 wait_cmd.set_mask, &wait_cmd.ibsta, wait_cmd.usec_timeout, desc);
1344 if (retval < 0)
1345 return retval;
1346
1347 retval = copy_to_user((void __user *)arg, &wait_cmd, sizeof(wait_cmd));
1348 if (retval)
1349 return -EFAULT;
1350
1351 return 0;
1352 }
1353
parallel_poll_ioctl(gpib_board_t * board,unsigned long arg)1354 static int parallel_poll_ioctl(gpib_board_t *board, unsigned long arg)
1355 {
1356 u8 poll_byte;
1357 int retval;
1358
1359 retval = ibrpp(board, &poll_byte);
1360 if (retval < 0)
1361 return retval;
1362
1363 retval = copy_to_user((void __user *)arg, &poll_byte, sizeof(poll_byte));
1364 if (retval)
1365 return -EFAULT;
1366
1367 return 0;
1368 }
1369
online_ioctl(gpib_board_t * board,unsigned long arg)1370 static int online_ioctl(gpib_board_t *board, unsigned long arg)
1371 {
1372 online_ioctl_t online_cmd;
1373 int retval;
1374 void __user *init_data = NULL;
1375
1376 board->config.init_data = NULL;
1377
1378 if (!capable(CAP_SYS_ADMIN))
1379 return -EPERM;
1380
1381 retval = copy_from_user(&online_cmd, (void __user *)arg, sizeof(online_cmd));
1382 if (retval)
1383 return -EFAULT;
1384 if (online_cmd.init_data_length > 0) {
1385 board->config.init_data = vmalloc(online_cmd.init_data_length);
1386 if (!board->config.init_data)
1387 return -ENOMEM;
1388 if (WARN_ON_ONCE(sizeof(init_data) > sizeof(online_cmd.init_data_ptr)))
1389 return -EFAULT;
1390 init_data = (void __user *)(unsigned long)(online_cmd.init_data_ptr);
1391 retval = copy_from_user(board->config.init_data, init_data,
1392 online_cmd.init_data_length);
1393 if (retval) {
1394 vfree(board->config.init_data);
1395 return -EFAULT;
1396 }
1397 board->config.init_data_length = online_cmd.init_data_length;
1398 } else {
1399 board->config.init_data = NULL;
1400 board->config.init_data_length = 0;
1401 }
1402 if (online_cmd.online)
1403 retval = ibonline(board);
1404 else
1405 retval = iboffline(board);
1406 if (board->config.init_data) {
1407 vfree(board->config.init_data);
1408 board->config.init_data = NULL;
1409 board->config.init_data_length = 0;
1410 }
1411 return retval;
1412 }
1413
remote_enable_ioctl(gpib_board_t * board,unsigned long arg)1414 static int remote_enable_ioctl(gpib_board_t *board, unsigned long arg)
1415 {
1416 int enable;
1417 int retval;
1418
1419 retval = copy_from_user(&enable, (void __user *)arg, sizeof(enable));
1420 if (retval)
1421 return -EFAULT;
1422
1423 return ibsre(board, enable);
1424 }
1425
take_control_ioctl(gpib_board_t * board,unsigned long arg)1426 static int take_control_ioctl(gpib_board_t *board, unsigned long arg)
1427 {
1428 int synchronous;
1429 int retval;
1430
1431 retval = copy_from_user(&synchronous, (void __user *)arg, sizeof(synchronous));
1432 if (retval)
1433 return -EFAULT;
1434
1435 return ibcac(board, synchronous, 1);
1436 }
1437
line_status_ioctl(gpib_board_t * board,unsigned long arg)1438 static int line_status_ioctl(gpib_board_t *board, unsigned long arg)
1439 {
1440 short lines;
1441 int retval;
1442
1443 retval = iblines(board, &lines);
1444 if (retval < 0)
1445 return retval;
1446
1447 retval = copy_to_user((void __user *)arg, &lines, sizeof(lines));
1448 if (retval)
1449 return -EFAULT;
1450
1451 return 0;
1452 }
1453
pad_ioctl(gpib_board_t * board,gpib_file_private_t * file_priv,unsigned long arg)1454 static int pad_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv,
1455 unsigned long arg)
1456 {
1457 pad_ioctl_t cmd;
1458 int retval;
1459 gpib_descriptor_t *desc;
1460
1461 retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd));
1462 if (retval)
1463 return -EFAULT;
1464
1465 desc = handle_to_descriptor(file_priv, cmd.handle);
1466 if (!desc)
1467 return -EINVAL;
1468
1469 if (desc->is_board) {
1470 retval = ibpad(board, cmd.pad);
1471 if (retval < 0)
1472 return retval;
1473 } else {
1474 retval = decrement_open_device_count(board, &board->device_list, desc->pad,
1475 desc->sad);
1476 if (retval < 0)
1477 return retval;
1478
1479 desc->pad = cmd.pad;
1480
1481 retval = increment_open_device_count(board, &board->device_list, desc->pad,
1482 desc->sad);
1483 if (retval < 0)
1484 return retval;
1485 }
1486
1487 return 0;
1488 }
1489
sad_ioctl(gpib_board_t * board,gpib_file_private_t * file_priv,unsigned long arg)1490 static int sad_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv,
1491 unsigned long arg)
1492 {
1493 sad_ioctl_t cmd;
1494 int retval;
1495 gpib_descriptor_t *desc;
1496
1497 retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd));
1498 if (retval)
1499 return -EFAULT;
1500
1501 desc = handle_to_descriptor(file_priv, cmd.handle);
1502 if (!desc)
1503 return -EINVAL;
1504
1505 if (desc->is_board) {
1506 retval = ibsad(board, cmd.sad);
1507 if (retval < 0)
1508 return retval;
1509 } else {
1510 retval = decrement_open_device_count(board, &board->device_list, desc->pad,
1511 desc->sad);
1512 if (retval < 0)
1513 return retval;
1514
1515 desc->sad = cmd.sad;
1516
1517 retval = increment_open_device_count(board, &board->device_list, desc->pad,
1518 desc->sad);
1519 if (retval < 0)
1520 return retval;
1521 }
1522 return 0;
1523 }
1524
eos_ioctl(gpib_board_t * board,unsigned long arg)1525 static int eos_ioctl(gpib_board_t *board, unsigned long arg)
1526 {
1527 eos_ioctl_t eos_cmd;
1528 int retval;
1529
1530 retval = copy_from_user(&eos_cmd, (void __user *)arg, sizeof(eos_cmd));
1531 if (retval)
1532 return -EFAULT;
1533
1534 return ibeos(board, eos_cmd.eos, eos_cmd.eos_flags);
1535 }
1536
request_service_ioctl(gpib_board_t * board,unsigned long arg)1537 static int request_service_ioctl(gpib_board_t *board, unsigned long arg)
1538 {
1539 u8 status_byte;
1540 int retval;
1541
1542 retval = copy_from_user(&status_byte, (void __user *)arg, sizeof(status_byte));
1543 if (retval)
1544 return -EFAULT;
1545
1546 return ibrsv2(board, status_byte, status_byte & request_service_bit);
1547 }
1548
request_service2_ioctl(gpib_board_t * board,unsigned long arg)1549 static int request_service2_ioctl(gpib_board_t *board, unsigned long arg)
1550 {
1551 request_service2_t request_service2_cmd;
1552 int retval;
1553
1554 retval = copy_from_user(&request_service2_cmd, (void __user *)arg,
1555 sizeof(request_service2_t));
1556 if (retval)
1557 return -EFAULT;
1558
1559 return ibrsv2(board, request_service2_cmd.status_byte,
1560 request_service2_cmd.new_reason_for_service);
1561 }
1562
iobase_ioctl(gpib_board_config_t * config,unsigned long arg)1563 static int iobase_ioctl(gpib_board_config_t *config, unsigned long arg)
1564 {
1565 u64 base_addr;
1566 int retval;
1567
1568 if (!capable(CAP_SYS_ADMIN))
1569 return -EPERM;
1570
1571 retval = copy_from_user(&base_addr, (void __user *)arg, sizeof(base_addr));
1572 if (retval)
1573 return -EFAULT;
1574
1575 if (WARN_ON_ONCE(sizeof(void *) > sizeof(base_addr)))
1576 return -EFAULT;
1577 config->ibbase = base_addr;
1578
1579 return 0;
1580 }
1581
irq_ioctl(gpib_board_config_t * config,unsigned long arg)1582 static int irq_ioctl(gpib_board_config_t *config, unsigned long arg)
1583 {
1584 unsigned int irq;
1585 int retval;
1586
1587 if (!capable(CAP_SYS_ADMIN))
1588 return -EPERM;
1589
1590 retval = copy_from_user(&irq, (void __user *)arg, sizeof(irq));
1591 if (retval)
1592 return -EFAULT;
1593
1594 config->ibirq = irq;
1595
1596 return 0;
1597 }
1598
dma_ioctl(gpib_board_config_t * config,unsigned long arg)1599 static int dma_ioctl(gpib_board_config_t *config, unsigned long arg)
1600 {
1601 unsigned int dma_channel;
1602 int retval;
1603
1604 if (!capable(CAP_SYS_ADMIN))
1605 return -EPERM;
1606
1607 retval = copy_from_user(&dma_channel, (void __user *)arg, sizeof(dma_channel));
1608 if (retval)
1609 return -EFAULT;
1610
1611 config->ibdma = dma_channel;
1612
1613 return 0;
1614 }
1615
autospoll_ioctl(gpib_board_t * board,gpib_file_private_t * file_priv,unsigned long arg)1616 static int autospoll_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv,
1617 unsigned long arg)
1618 {
1619 autospoll_ioctl_t enable;
1620 int retval;
1621 gpib_descriptor_t *desc;
1622
1623 retval = copy_from_user(&enable, (void __user *)arg, sizeof(enable));
1624 if (retval)
1625 return -EFAULT;
1626
1627 desc = handle_to_descriptor(file_priv, 0); /* board handle is 0 */
1628
1629 if (enable) {
1630 if (!desc->autopoll_enabled) {
1631 board->autospollers++;
1632 desc->autopoll_enabled = 1;
1633 }
1634 retval = 0;
1635 } else {
1636 if (desc->autopoll_enabled) {
1637 desc->autopoll_enabled = 0;
1638 if (board->autospollers > 0) {
1639 board->autospollers--;
1640 retval = 0;
1641 } else {
1642 pr_err("gpib: tried to set number of autospollers negative\n");
1643 retval = -EINVAL;
1644 }
1645 } else {
1646 pr_err("gpib: autopoll disable requested before enable\n");
1647 retval = -EINVAL;
1648 }
1649 }
1650 return retval;
1651 }
1652
mutex_ioctl(gpib_board_t * board,gpib_file_private_t * file_priv,unsigned long arg)1653 static int mutex_ioctl(gpib_board_t *board, gpib_file_private_t *file_priv,
1654 unsigned long arg)
1655 {
1656 int retval, lock_mutex;
1657
1658 retval = copy_from_user(&lock_mutex, (void __user *)arg, sizeof(lock_mutex));
1659 if (retval)
1660 return -EFAULT;
1661
1662 if (lock_mutex) {
1663 retval = mutex_lock_interruptible(&board->user_mutex);
1664 if (retval) {
1665 pr_warn("gpib: ioctl interrupted while waiting on lock\n");
1666 return -ERESTARTSYS;
1667 }
1668
1669 spin_lock(&board->locking_pid_spinlock);
1670 board->locking_pid = current->pid;
1671 spin_unlock(&board->locking_pid_spinlock);
1672
1673 atomic_set(&file_priv->holding_mutex, 1);
1674
1675 dev_dbg(board->gpib_dev, "pid %i, locked board %d mutex\n",
1676 current->pid, board->minor);
1677 } else {
1678 spin_lock(&board->locking_pid_spinlock);
1679 if (current->pid != board->locking_pid) {
1680 pr_err("gpib: bug! pid %i tried to release mutex held by pid %i\n",
1681 current->pid, board->locking_pid);
1682 spin_unlock(&board->locking_pid_spinlock);
1683 return -EPERM;
1684 }
1685 board->locking_pid = 0;
1686 spin_unlock(&board->locking_pid_spinlock);
1687
1688 atomic_set(&file_priv->holding_mutex, 0);
1689
1690 mutex_unlock(&board->user_mutex);
1691 dev_dbg(board->gpib_dev, "pid %i, unlocked board %i mutex\n",
1692 current->pid, board->minor);
1693 }
1694 return 0;
1695 }
1696
timeout_ioctl(gpib_board_t * board,unsigned long arg)1697 static int timeout_ioctl(gpib_board_t *board, unsigned long arg)
1698 {
1699 unsigned int timeout;
1700 int retval;
1701
1702 retval = copy_from_user(&timeout, (void __user *)arg, sizeof(timeout));
1703 if (retval)
1704 return -EFAULT;
1705
1706 board->usec_timeout = timeout;
1707 dev_dbg(board->gpib_dev, "pid %i, timeout set to %i usec\n", current->pid, timeout);
1708
1709 return 0;
1710 }
1711
ppc_ioctl(gpib_board_t * board,unsigned long arg)1712 static int ppc_ioctl(gpib_board_t *board, unsigned long arg)
1713 {
1714 ppoll_config_ioctl_t cmd;
1715 int retval;
1716
1717 retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd));
1718 if (retval)
1719 return -EFAULT;
1720
1721 if (cmd.set_ist) {
1722 board->ist = 1;
1723 board->interface->parallel_poll_response(board, board->ist);
1724 } else if (cmd.clear_ist) {
1725 board->ist = 0;
1726 board->interface->parallel_poll_response(board, board->ist);
1727 }
1728
1729 if (cmd.config) {
1730 retval = ibppc(board, cmd.config);
1731 if (retval < 0)
1732 return retval;
1733 }
1734
1735 return 0;
1736 }
1737
set_local_ppoll_mode_ioctl(gpib_board_t * board,unsigned long arg)1738 static int set_local_ppoll_mode_ioctl(gpib_board_t *board, unsigned long arg)
1739 {
1740 local_ppoll_mode_ioctl_t cmd;
1741 int retval;
1742
1743 retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd));
1744 if (retval)
1745 return -EFAULT;
1746
1747 if (!board->interface->local_parallel_poll_mode) {
1748 pr_warn("gpib: local/remote parallel poll mode not supported by driver.");
1749 return -EIO;
1750 }
1751 board->local_ppoll_mode = cmd != 0;
1752 board->interface->local_parallel_poll_mode(board, board->local_ppoll_mode);
1753
1754 return 0;
1755 }
1756
get_local_ppoll_mode_ioctl(gpib_board_t * board,unsigned long arg)1757 static int get_local_ppoll_mode_ioctl(gpib_board_t *board, unsigned long arg)
1758 {
1759 local_ppoll_mode_ioctl_t cmd;
1760 int retval;
1761
1762 cmd = board->local_ppoll_mode;
1763 retval = copy_to_user((void __user *)arg, &cmd, sizeof(cmd));
1764 if (retval)
1765 return -EFAULT;
1766
1767 return 0;
1768 }
1769
query_board_rsv_ioctl(gpib_board_t * board,unsigned long arg)1770 static int query_board_rsv_ioctl(gpib_board_t *board, unsigned long arg)
1771 {
1772 int status;
1773 int retval;
1774
1775 status = board->interface->serial_poll_status(board);
1776
1777 retval = copy_to_user((void __user *)arg, &status, sizeof(status));
1778 if (retval)
1779 return -EFAULT;
1780
1781 return 0;
1782 }
1783
board_info_ioctl(const gpib_board_t * board,unsigned long arg)1784 static int board_info_ioctl(const gpib_board_t *board, unsigned long arg)
1785 {
1786 board_info_ioctl_t info;
1787 int retval;
1788
1789 info.pad = board->pad;
1790 info.sad = board->sad;
1791 info.parallel_poll_configuration = board->parallel_poll_configuration;
1792 info.is_system_controller = board->master;
1793 if (board->autospollers)
1794 info.autopolling = 1;
1795 else
1796 info.autopolling = 0;
1797 info.t1_delay = board->t1_nano_sec;
1798 info.ist = board->ist;
1799 info.no_7_bit_eos = board->interface->no_7_bit_eos;
1800 retval = copy_to_user((void __user *)arg, &info, sizeof(info));
1801 if (retval)
1802 return -EFAULT;
1803
1804 return 0;
1805 }
1806
interface_clear_ioctl(gpib_board_t * board,unsigned long arg)1807 static int interface_clear_ioctl(gpib_board_t *board, unsigned long arg)
1808 {
1809 unsigned int usec_duration;
1810 int retval;
1811
1812 retval = copy_from_user(&usec_duration, (void __user *)arg, sizeof(usec_duration));
1813 if (retval)
1814 return -EFAULT;
1815
1816 return ibsic(board, usec_duration);
1817 }
1818
select_pci_ioctl(gpib_board_config_t * config,unsigned long arg)1819 static int select_pci_ioctl(gpib_board_config_t *config, unsigned long arg)
1820 {
1821 select_pci_ioctl_t selection;
1822 int retval;
1823
1824 if (!capable(CAP_SYS_ADMIN))
1825 return -EPERM;
1826
1827 retval = copy_from_user(&selection, (void __user *)arg, sizeof(selection));
1828 if (retval)
1829 return -EFAULT;
1830
1831 config->pci_bus = selection.pci_bus;
1832 config->pci_slot = selection.pci_slot;
1833
1834 return 0;
1835 }
1836
select_device_path_ioctl(gpib_board_config_t * config,unsigned long arg)1837 static int select_device_path_ioctl(gpib_board_config_t *config, unsigned long arg)
1838 {
1839 select_device_path_ioctl_t *selection;
1840 int retval;
1841
1842 if (!capable(CAP_SYS_ADMIN))
1843 return -EPERM;
1844
1845 selection = vmalloc(sizeof(select_device_path_ioctl_t));
1846 if (!selection)
1847 return -ENOMEM;
1848
1849 retval = copy_from_user(selection, (void __user *)arg, sizeof(select_device_path_ioctl_t));
1850 if (retval) {
1851 vfree(selection);
1852 return -EFAULT;
1853 }
1854
1855 selection->device_path[sizeof(selection->device_path) - 1] = '\0';
1856 kfree(config->device_path);
1857 config->device_path = NULL;
1858 if (strlen(selection->device_path) > 0)
1859 config->device_path = kstrdup(selection->device_path, GFP_KERNEL);
1860
1861 vfree(selection);
1862 return 0;
1863 }
1864
num_gpib_events(const gpib_event_queue_t * queue)1865 unsigned int num_gpib_events(const gpib_event_queue_t *queue)
1866 {
1867 return queue->num_events;
1868 }
1869
push_gpib_event_nolock(gpib_board_t * board,short event_type)1870 static int push_gpib_event_nolock(gpib_board_t *board, short event_type)
1871 {
1872 gpib_event_queue_t *queue = &board->event_queue;
1873 struct list_head *head = &queue->event_head;
1874 gpib_event_t *event;
1875 static const unsigned int max_num_events = 1024;
1876 int retval;
1877
1878 if (num_gpib_events(queue) >= max_num_events) {
1879 short lost_event;
1880
1881 queue->dropped_event = 1;
1882 retval = pop_gpib_event_nolock(board, queue, &lost_event);
1883 if (retval < 0)
1884 return retval;
1885 }
1886
1887 event = kmalloc(sizeof(gpib_event_t), GFP_ATOMIC);
1888 if (!event) {
1889 queue->dropped_event = 1;
1890 pr_err("gpib: failed to allocate memory for event\n");
1891 return -ENOMEM;
1892 }
1893
1894 INIT_LIST_HEAD(&event->list);
1895 event->event_type = event_type;
1896
1897 list_add_tail(&event->list, head);
1898
1899 queue->num_events++;
1900
1901 dev_dbg(board->gpib_dev, "pushed event %i, %i in queue\n",
1902 (int)event_type, num_gpib_events(queue));
1903
1904 return 0;
1905 }
1906
1907 // push event onto back of event queue
push_gpib_event(gpib_board_t * board,short event_type)1908 int push_gpib_event(gpib_board_t *board, short event_type)
1909 {
1910 unsigned long flags;
1911 int retval;
1912
1913 spin_lock_irqsave(&board->event_queue.lock, flags);
1914 retval = push_gpib_event_nolock(board, event_type);
1915 spin_unlock_irqrestore(&board->event_queue.lock, flags);
1916
1917 if (event_type == EventDevTrg)
1918 board->status |= DTAS;
1919 if (event_type == EventDevClr)
1920 board->status |= DCAS;
1921
1922 return retval;
1923 }
1924 EXPORT_SYMBOL(push_gpib_event);
1925
pop_gpib_event_nolock(gpib_board_t * board,gpib_event_queue_t * queue,short * event_type)1926 static int pop_gpib_event_nolock(gpib_board_t *board, gpib_event_queue_t *queue, short *event_type)
1927 {
1928 struct list_head *head = &queue->event_head;
1929 struct list_head *front = head->next;
1930 gpib_event_t *event;
1931
1932 if (num_gpib_events(queue) == 0) {
1933 *event_type = EventNone;
1934 return 0;
1935 }
1936
1937 if (front == head)
1938 return -EIO;
1939
1940 if (queue->dropped_event) {
1941 queue->dropped_event = 0;
1942 return -EPIPE;
1943 }
1944
1945 event = list_entry(front, gpib_event_t, list);
1946 *event_type = event->event_type;
1947
1948 list_del(front);
1949 kfree(event);
1950
1951 queue->num_events--;
1952
1953 dev_dbg(board->gpib_dev, "popped event %i, %i in queue\n",
1954 (int)*event_type, num_gpib_events(queue));
1955
1956 return 0;
1957 }
1958
1959 // pop event from front of event queue
pop_gpib_event(gpib_board_t * board,gpib_event_queue_t * queue,short * event_type)1960 int pop_gpib_event(gpib_board_t *board, gpib_event_queue_t *queue, short *event_type)
1961 {
1962 unsigned long flags;
1963 int retval;
1964
1965 spin_lock_irqsave(&queue->lock, flags);
1966 retval = pop_gpib_event_nolock(board, queue, event_type);
1967 spin_unlock_irqrestore(&queue->lock, flags);
1968 return retval;
1969 }
1970
event_ioctl(gpib_board_t * board,unsigned long arg)1971 static int event_ioctl(gpib_board_t *board, unsigned long arg)
1972 {
1973 event_ioctl_t user_event;
1974 int retval;
1975 short event;
1976
1977 retval = pop_gpib_event(board, &board->event_queue, &event);
1978 if (retval < 0)
1979 return retval;
1980
1981 user_event = event;
1982
1983 retval = copy_to_user((void __user *)arg, &user_event, sizeof(user_event));
1984 if (retval)
1985 return -EFAULT;
1986
1987 return 0;
1988 }
1989
request_system_control_ioctl(gpib_board_t * board,unsigned long arg)1990 static int request_system_control_ioctl(gpib_board_t *board, unsigned long arg)
1991 {
1992 rsc_ioctl_t request_control;
1993 int retval;
1994
1995 retval = copy_from_user(&request_control, (void __user *)arg, sizeof(request_control));
1996 if (retval)
1997 return -EFAULT;
1998
1999 ibrsc(board, request_control);
2000
2001 return 0;
2002 }
2003
t1_delay_ioctl(gpib_board_t * board,unsigned long arg)2004 static int t1_delay_ioctl(gpib_board_t *board, unsigned long arg)
2005 {
2006 t1_delay_ioctl_t cmd;
2007 unsigned int delay;
2008 int retval;
2009
2010 if (!board->interface->t1_delay) {
2011 pr_warn("gpib: t1 delay not implemented in driver!\n");
2012 return -EIO;
2013 }
2014
2015 retval = copy_from_user(&cmd, (void __user *)arg, sizeof(cmd));
2016 if (retval)
2017 return -EFAULT;
2018
2019 delay = cmd;
2020
2021 board->t1_nano_sec = board->interface->t1_delay(board, delay);
2022
2023 return 0;
2024 }
2025
2026 static const struct file_operations ib_fops = {
2027 .owner = THIS_MODULE,
2028 .llseek = NULL,
2029 .unlocked_ioctl = &ibioctl,
2030 .compat_ioctl = &ibioctl,
2031 .open = &ibopen,
2032 .release = &ibclose,
2033 };
2034
2035 gpib_board_t board_array[GPIB_MAX_NUM_BOARDS];
2036
2037 LIST_HEAD(registered_drivers);
2038
init_gpib_descriptor(gpib_descriptor_t * desc)2039 void init_gpib_descriptor(gpib_descriptor_t *desc)
2040 {
2041 desc->pad = 0;
2042 desc->sad = -1;
2043 desc->is_board = 0;
2044 desc->autopoll_enabled = 0;
2045 atomic_set(&desc->io_in_progress, 0);
2046 }
2047
gpib_register_driver(gpib_interface_t * interface,struct module * provider_module)2048 int gpib_register_driver(gpib_interface_t *interface, struct module *provider_module)
2049 {
2050 struct gpib_interface_list_struct *entry;
2051
2052 entry = kmalloc(sizeof(*entry), GFP_KERNEL);
2053 if (!entry)
2054 return -ENOMEM;
2055
2056 entry->interface = interface;
2057 entry->module = provider_module;
2058 list_add(&entry->list, ®istered_drivers);
2059
2060 return 0;
2061 }
2062 EXPORT_SYMBOL(gpib_register_driver);
2063
gpib_unregister_driver(gpib_interface_t * interface)2064 void gpib_unregister_driver(gpib_interface_t *interface)
2065 {
2066 int i;
2067 struct list_head *list_ptr;
2068
2069 for (i = 0; i < GPIB_MAX_NUM_BOARDS; i++) {
2070 gpib_board_t *board = &board_array[i];
2071
2072 if (board->interface == interface) {
2073 if (board->use_count > 0)
2074 pr_warn("gpib: Warning: deregistered interface %s in use\n",
2075 interface->name);
2076 iboffline(board);
2077 board->interface = NULL;
2078 }
2079 }
2080 for (list_ptr = registered_drivers.next; list_ptr != ®istered_drivers;) {
2081 gpib_interface_list_t *entry;
2082
2083 entry = list_entry(list_ptr, gpib_interface_list_t, list);
2084 list_ptr = list_ptr->next;
2085 if (entry->interface == interface) {
2086 list_del(&entry->list);
2087 kfree(entry);
2088 }
2089 }
2090 pr_info("gpib: unregistered %s interface\n", interface->name);
2091 }
2092 EXPORT_SYMBOL(gpib_unregister_driver);
2093
init_gpib_board_config(gpib_board_config_t * config)2094 static void init_gpib_board_config(gpib_board_config_t *config)
2095 {
2096 memset(config, 0, sizeof(gpib_board_config_t));
2097 config->pci_bus = -1;
2098 config->pci_slot = -1;
2099 }
2100
init_gpib_board(gpib_board_t * board)2101 void init_gpib_board(gpib_board_t *board)
2102 {
2103 board->interface = NULL;
2104 board->provider_module = NULL;
2105 board->buffer = NULL;
2106 board->buffer_length = 0;
2107 board->status = 0;
2108 init_waitqueue_head(&board->wait);
2109 mutex_init(&board->user_mutex);
2110 mutex_init(&board->big_gpib_mutex);
2111 board->locking_pid = 0;
2112 spin_lock_init(&board->locking_pid_spinlock);
2113 spin_lock_init(&board->spinlock);
2114 timer_setup(&board->timer, NULL, 0);
2115 board->dev = NULL;
2116 board->gpib_dev = NULL;
2117 init_gpib_board_config(&board->config);
2118 board->private_data = NULL;
2119 board->use_count = 0;
2120 INIT_LIST_HEAD(&board->device_list);
2121 board->pad = 0;
2122 board->sad = -1;
2123 board->usec_timeout = 3000000;
2124 board->parallel_poll_configuration = 0;
2125 board->online = 0;
2126 board->autospollers = 0;
2127 board->autospoll_task = NULL;
2128 init_event_queue(&board->event_queue);
2129 board->minor = -1;
2130 init_gpib_pseudo_irq(&board->pseudo_irq);
2131 board->master = 1;
2132 atomic_set(&board->stuck_srq, 0);
2133 board->local_ppoll_mode = 0;
2134 }
2135
gpib_allocate_board(gpib_board_t * board)2136 int gpib_allocate_board(gpib_board_t *board)
2137 {
2138 if (!board->buffer) {
2139 board->buffer_length = 0x4000;
2140 board->buffer = vmalloc(board->buffer_length);
2141 if (!board->buffer) {
2142 board->buffer_length = 0;
2143 return -ENOMEM;
2144 }
2145 }
2146 return 0;
2147 }
2148
gpib_deallocate_board(gpib_board_t * board)2149 void gpib_deallocate_board(gpib_board_t *board)
2150 {
2151 short dummy;
2152
2153 if (board->buffer) {
2154 vfree(board->buffer);
2155 board->buffer = NULL;
2156 board->buffer_length = 0;
2157 }
2158 while (num_gpib_events(&board->event_queue))
2159 pop_gpib_event(board, &board->event_queue, &dummy);
2160 }
2161
init_board_array(gpib_board_t * board_array,unsigned int length)2162 static void init_board_array(gpib_board_t *board_array, unsigned int length)
2163 {
2164 int i;
2165
2166 for (i = 0; i < length; i++) {
2167 init_gpib_board(&board_array[i]);
2168 board_array[i].minor = i;
2169 }
2170 }
2171
init_gpib_status_queue(gpib_status_queue_t * device)2172 void init_gpib_status_queue(gpib_status_queue_t *device)
2173 {
2174 INIT_LIST_HEAD(&device->list);
2175 INIT_LIST_HEAD(&device->status_bytes);
2176 device->num_status_bytes = 0;
2177 device->reference_count = 0;
2178 device->dropped_byte = 0;
2179 }
2180
2181 static struct class *gpib_class;
2182
gpib_common_init_module(void)2183 static int __init gpib_common_init_module(void)
2184 {
2185 int i;
2186
2187 pr_info("Linux-GPIB core driver\n");
2188 init_board_array(board_array, GPIB_MAX_NUM_BOARDS);
2189 if (register_chrdev(GPIB_CODE, "gpib", &ib_fops)) {
2190 pr_err("gpib: can't get major %d\n", GPIB_CODE);
2191 return -EIO;
2192 }
2193 gpib_class = class_create("gpib_common");
2194 if (IS_ERR(gpib_class)) {
2195 pr_err("gpib: failed to create gpib class\n");
2196 unregister_chrdev(GPIB_CODE, "gpib");
2197 return PTR_ERR(gpib_class);
2198 }
2199 for (i = 0; i < GPIB_MAX_NUM_BOARDS; ++i)
2200 board_array[i].gpib_dev = device_create(gpib_class, NULL,
2201 MKDEV(GPIB_CODE, i), NULL, "gpib%i", i);
2202
2203 return 0;
2204 }
2205
gpib_common_exit_module(void)2206 static void __exit gpib_common_exit_module(void)
2207 {
2208 int i;
2209
2210 for (i = 0; i < GPIB_MAX_NUM_BOARDS; ++i)
2211 device_destroy(gpib_class, MKDEV(GPIB_CODE, i));
2212
2213 class_destroy(gpib_class);
2214 unregister_chrdev(GPIB_CODE, "gpib");
2215 }
2216
gpib_match_device_path(struct device * dev,const char * device_path_in)2217 int gpib_match_device_path(struct device *dev, const char *device_path_in)
2218 {
2219 if (device_path_in) {
2220 char *device_path;
2221
2222 device_path = kobject_get_path(&dev->kobj, GFP_KERNEL);
2223 if (!device_path) {
2224 dev_err(dev, "kobject_get_path returned NULL.");
2225 return 0;
2226 }
2227 if (strcmp(device_path_in, device_path) != 0) {
2228 kfree(device_path);
2229 return 0;
2230 }
2231 kfree(device_path);
2232 }
2233 return 1;
2234 }
2235 EXPORT_SYMBOL(gpib_match_device_path);
2236
gpib_pci_get_device(const gpib_board_config_t * config,unsigned int vendor_id,unsigned int device_id,struct pci_dev * from)2237 struct pci_dev *gpib_pci_get_device(const gpib_board_config_t *config, unsigned int vendor_id,
2238 unsigned int device_id, struct pci_dev *from)
2239 {
2240 struct pci_dev *pci_device = from;
2241
2242 while ((pci_device = pci_get_device(vendor_id, device_id, pci_device))) {
2243 if (config->pci_bus >= 0 && config->pci_bus != pci_device->bus->number)
2244 continue;
2245 if (config->pci_slot >= 0 && config->pci_slot !=
2246 PCI_SLOT(pci_device->devfn))
2247 continue;
2248 if (gpib_match_device_path(&pci_device->dev, config->device_path) == 0)
2249 continue;
2250 return pci_device;
2251 }
2252 return NULL;
2253 }
2254 EXPORT_SYMBOL(gpib_pci_get_device);
2255
gpib_pci_get_subsys(const gpib_board_config_t * config,unsigned int vendor_id,unsigned int device_id,unsigned int ss_vendor,unsigned int ss_device,struct pci_dev * from)2256 struct pci_dev *gpib_pci_get_subsys(const gpib_board_config_t *config, unsigned int vendor_id,
2257 unsigned int device_id, unsigned int ss_vendor,
2258 unsigned int ss_device,
2259 struct pci_dev *from)
2260 {
2261 struct pci_dev *pci_device = from;
2262
2263 while ((pci_device = pci_get_subsys(vendor_id, device_id,
2264 ss_vendor, ss_device, pci_device))) {
2265 if (config->pci_bus >= 0 && config->pci_bus != pci_device->bus->number)
2266 continue;
2267 if (config->pci_slot >= 0 && config->pci_slot !=
2268 PCI_SLOT(pci_device->devfn))
2269 continue;
2270 if (gpib_match_device_path(&pci_device->dev, config->device_path) == 0)
2271 continue;
2272 return pci_device;
2273 }
2274 return NULL;
2275 }
2276 EXPORT_SYMBOL(gpib_pci_get_subsys);
2277
2278 module_init(gpib_common_init_module);
2279 module_exit(gpib_common_exit_module);
2280
2281