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