]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - drivers/staging/me4000/me4000.c
Merge commit 'v2.6.28-rc8' into x86/cpufeature
[mirror_ubuntu-bionic-kernel.git] / drivers / staging / me4000 / me4000.c
1 /* Device driver for Meilhaus ME-4000 board family.
2 * ================================================
3 *
4 * Copyright (C) 2003 Meilhaus Electronic GmbH (support@meilhaus.de)
5 *
6 * This file is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19 *
20 * Author: Guenter Gebhardt <g.gebhardt@meilhaus.de>
21 */
22
23 #include <linux/module.h>
24 #include <linux/fs.h>
25 #include <linux/sched.h>
26 #include <linux/interrupt.h>
27 #include <linux/pci.h>
28 #include <linux/errno.h>
29 #include <linux/delay.h>
30 #include <linux/mm.h>
31 #include <linux/unistd.h>
32 #include <linux/list.h>
33 #include <linux/proc_fs.h>
34 #include <linux/types.h>
35 #include <linux/poll.h>
36 #include <linux/vmalloc.h>
37 #include <linux/slab.h>
38 #include <asm/pgtable.h>
39 #include <asm/uaccess.h>
40 #include <asm/io.h>
41 #include <asm/system.h>
42
43 /* Include-File for the Meilhaus ME-4000 I/O board */
44 #include "me4000.h"
45 #include "me4000_firmware.h"
46 #include "me4610_firmware.h"
47
48 /* Administrative stuff for modinfo */
49 MODULE_AUTHOR("Guenter Gebhardt <g.gebhardt@meilhaus.de>");
50 MODULE_DESCRIPTION
51 ("Device Driver Module for Meilhaus ME-4000 boards version 1.0.5");
52 MODULE_SUPPORTED_DEVICE("Meilhaus ME-4000 Multi I/O boards");
53 MODULE_LICENSE("GPL");
54
55 /* Board specific data are kept in a global list */
56 static LIST_HEAD(me4000_board_info_list);
57
58 /* Major Device Numbers. 0 means to get it automatically from the System */
59 static int me4000_ao_major_driver_no;
60 static int me4000_ai_major_driver_no;
61 static int me4000_dio_major_driver_no;
62 static int me4000_cnt_major_driver_no;
63 static int me4000_ext_int_major_driver_no;
64
65 /* Let the user specify a custom major driver number */
66 module_param(me4000_ao_major_driver_no, int, 0);
67 MODULE_PARM_DESC(me4000_ao_major_driver_no,
68 "Major driver number for analog output (default 0)");
69
70 module_param(me4000_ai_major_driver_no, int, 0);
71 MODULE_PARM_DESC(me4000_ai_major_driver_no,
72 "Major driver number for analog input (default 0)");
73
74 module_param(me4000_dio_major_driver_no, int, 0);
75 MODULE_PARM_DESC(me4000_dio_major_driver_no,
76 "Major driver number digital I/O (default 0)");
77
78 module_param(me4000_cnt_major_driver_no, int, 0);
79 MODULE_PARM_DESC(me4000_cnt_major_driver_no,
80 "Major driver number for counter (default 0)");
81
82 module_param(me4000_ext_int_major_driver_no, int, 0);
83 MODULE_PARM_DESC(me4000_ext_int_major_driver_no,
84 "Major driver number for external interrupt (default 0)");
85
86 /*-----------------------------------------------------------------------------
87 Board detection and initialization
88 ---------------------------------------------------------------------------*/
89 static int me4000_probe(struct pci_dev *dev, const struct pci_device_id *id);
90 static int me4000_xilinx_download(struct me4000_info *);
91 static int me4000_reset_board(struct me4000_info *);
92
93 static void clear_board_info_list(void);
94 static void release_ao_contexts(struct me4000_info *board_info);
95 /*-----------------------------------------------------------------------------
96 Stuff used by all device parts
97 ---------------------------------------------------------------------------*/
98 static int me4000_open(struct inode *, struct file *);
99 static int me4000_release(struct inode *, struct file *);
100
101 static int me4000_get_user_info(struct me4000_user_info *,
102 struct me4000_info *board_info);
103 static int me4000_read_procmem(char *, char **, off_t, int, int *, void *);
104
105 /*-----------------------------------------------------------------------------
106 Analog output stuff
107 ---------------------------------------------------------------------------*/
108 static ssize_t me4000_ao_write_sing(struct file *, const char *, size_t,
109 loff_t *);
110 static ssize_t me4000_ao_write_wrap(struct file *, const char *, size_t,
111 loff_t *);
112 static ssize_t me4000_ao_write_cont(struct file *, const char *, size_t,
113 loff_t *);
114
115 static int me4000_ao_ioctl_sing(struct inode *, struct file *, unsigned int,
116 unsigned long);
117 static int me4000_ao_ioctl_wrap(struct inode *, struct file *, unsigned int,
118 unsigned long);
119 static int me4000_ao_ioctl_cont(struct inode *, struct file *, unsigned int,
120 unsigned long);
121
122 static unsigned int me4000_ao_poll_cont(struct file *, poll_table *);
123 static int me4000_ao_fsync_cont(struct file *, struct dentry *, int);
124
125 static int me4000_ao_start(unsigned long *, struct me4000_ao_context *);
126 static int me4000_ao_stop(struct me4000_ao_context *);
127 static int me4000_ao_immediate_stop(struct me4000_ao_context *);
128 static int me4000_ao_timer_set_divisor(u32 *, struct me4000_ao_context *);
129 static int me4000_ao_preload(struct me4000_ao_context *);
130 static int me4000_ao_preload_update(struct me4000_ao_context *);
131 static int me4000_ao_ex_trig_set_edge(int *, struct me4000_ao_context *);
132 static int me4000_ao_ex_trig_enable(struct me4000_ao_context *);
133 static int me4000_ao_ex_trig_disable(struct me4000_ao_context *);
134 static int me4000_ao_prepare(struct me4000_ao_context *ao_info);
135 static int me4000_ao_reset(struct me4000_ao_context *ao_info);
136 static int me4000_ao_enable_do(struct me4000_ao_context *);
137 static int me4000_ao_disable_do(struct me4000_ao_context *);
138 static int me4000_ao_fsm_state(int *, struct me4000_ao_context *);
139
140 static int me4000_ao_simultaneous_ex_trig(struct me4000_ao_context *ao_context);
141 static int me4000_ao_simultaneous_sw(struct me4000_ao_context *ao_context);
142 static int me4000_ao_simultaneous_disable(struct me4000_ao_context *ao_context);
143 static int me4000_ao_simultaneous_update(
144 struct me4000_ao_channel_list *channels,
145 struct me4000_ao_context *ao_context);
146
147 static int me4000_ao_synchronous_ex_trig(struct me4000_ao_context *ao_context);
148 static int me4000_ao_synchronous_sw(struct me4000_ao_context *ao_context);
149 static int me4000_ao_synchronous_disable(struct me4000_ao_context *ao_context);
150
151 static int me4000_ao_ex_trig_timeout(unsigned long *arg,
152 struct me4000_ao_context *ao_context);
153 static int me4000_ao_get_free_buffer(unsigned long *arg,
154 struct me4000_ao_context *ao_context);
155
156 /*-----------------------------------------------------------------------------
157 Analog input stuff
158 ---------------------------------------------------------------------------*/
159 static int me4000_ai_single(struct me4000_ai_single *,
160 struct me4000_ai_context *);
161 static int me4000_ai_ioctl_sing(struct inode *, struct file *, unsigned int,
162 unsigned long);
163
164 static ssize_t me4000_ai_read(struct file *, char *, size_t, loff_t *);
165 static int me4000_ai_ioctl_sw(struct inode *, struct file *, unsigned int,
166 unsigned long);
167 static unsigned int me4000_ai_poll(struct file *, poll_table *);
168 static int me4000_ai_fasync(int fd, struct file *file_p, int mode);
169
170 static int me4000_ai_ioctl_ext(struct inode *, struct file *, unsigned int,
171 unsigned long);
172
173 static int me4000_ai_prepare(struct me4000_ai_context *ai_context);
174 static int me4000_ai_reset(struct me4000_ai_context *ai_context);
175 static int me4000_ai_config(struct me4000_ai_config *,
176 struct me4000_ai_context *);
177 static int me4000_ai_start(struct me4000_ai_context *);
178 static int me4000_ai_start_ex(unsigned long *, struct me4000_ai_context *);
179 static int me4000_ai_stop(struct me4000_ai_context *);
180 static int me4000_ai_immediate_stop(struct me4000_ai_context *);
181 static int me4000_ai_ex_trig_enable(struct me4000_ai_context *);
182 static int me4000_ai_ex_trig_disable(struct me4000_ai_context *);
183 static int me4000_ai_ex_trig_setup(struct me4000_ai_trigger *,
184 struct me4000_ai_context *);
185 static int me4000_ai_sc_setup(struct me4000_ai_sc *arg,
186 struct me4000_ai_context *ai_context);
187 static int me4000_ai_offset_enable(struct me4000_ai_context *ai_context);
188 static int me4000_ai_offset_disable(struct me4000_ai_context *ai_context);
189 static int me4000_ai_fullscale_enable(struct me4000_ai_context *ai_context);
190 static int me4000_ai_fullscale_disable(struct me4000_ai_context *ai_context);
191 static int me4000_ai_fsm_state(int *arg, struct me4000_ai_context *ai_context);
192 static int me4000_ai_get_count_buffer(unsigned long *arg,
193 struct me4000_ai_context *ai_context);
194
195 /*-----------------------------------------------------------------------------
196 EEPROM stuff
197 ---------------------------------------------------------------------------*/
198 static int me4000_eeprom_read(struct me4000_eeprom *arg,
199 struct me4000_ai_context *ai_context);
200 static int me4000_eeprom_write(struct me4000_eeprom *arg,
201 struct me4000_ai_context *ai_context);
202
203 /*-----------------------------------------------------------------------------
204 Digital I/O stuff
205 ---------------------------------------------------------------------------*/
206 static int me4000_dio_ioctl(struct inode *, struct file *, unsigned int,
207 unsigned long);
208 static int me4000_dio_config(struct me4000_dio_config *,
209 struct me4000_dio_context *);
210 static int me4000_dio_get_byte(struct me4000_dio_byte *,
211 struct me4000_dio_context *);
212 static int me4000_dio_set_byte(struct me4000_dio_byte *,
213 struct me4000_dio_context *);
214 static int me4000_dio_reset(struct me4000_dio_context *);
215
216 /*-----------------------------------------------------------------------------
217 Counter stuff
218 ---------------------------------------------------------------------------*/
219 static int me4000_cnt_ioctl(struct inode *, struct file *, unsigned int,
220 unsigned long);
221 static int me4000_cnt_config(struct me4000_cnt_config *,
222 struct me4000_cnt_context *);
223 static int me4000_cnt_read(struct me4000_cnt *, struct me4000_cnt_context *);
224 static int me4000_cnt_write(struct me4000_cnt *, struct me4000_cnt_context *);
225 static int me4000_cnt_reset(struct me4000_cnt_context *);
226
227 /*-----------------------------------------------------------------------------
228 External interrupt routines
229 ---------------------------------------------------------------------------*/
230 static int me4000_ext_int_ioctl(struct inode *, struct file *, unsigned int,
231 unsigned long);
232 static int me4000_ext_int_enable(struct me4000_ext_int_context *);
233 static int me4000_ext_int_disable(struct me4000_ext_int_context *);
234 static int me4000_ext_int_count(unsigned long *arg,
235 struct me4000_ext_int_context *ext_int_context);
236 static int me4000_ext_int_fasync(int fd, struct file *file_ptr, int mode);
237
238 /*-----------------------------------------------------------------------------
239 The interrupt service routines
240 ---------------------------------------------------------------------------*/
241 static irqreturn_t me4000_ao_isr(int, void *);
242 static irqreturn_t me4000_ai_isr(int, void *);
243 static irqreturn_t me4000_ext_int_isr(int, void *);
244
245 /*-----------------------------------------------------------------------------
246 Inline functions
247 ---------------------------------------------------------------------------*/
248
249 static int inline me4000_buf_count(struct me4000_circ_buf buf, int size)
250 {
251 return ((buf.head - buf.tail) & (size - 1));
252 }
253
254 static int inline me4000_buf_space(struct me4000_circ_buf buf, int size)
255 {
256 return ((buf.tail - (buf.head + 1)) & (size - 1));
257 }
258
259 static int inline me4000_values_to_end(struct me4000_circ_buf buf, int size)
260 {
261 int end;
262 int n;
263 end = size - buf.tail;
264 n = (buf.head + end) & (size - 1);
265 return (n < end) ? n : end;
266 }
267
268 static int inline me4000_space_to_end(struct me4000_circ_buf buf, int size)
269 {
270 int end;
271 int n;
272
273 end = size - 1 - buf.head;
274 n = (end + buf.tail) & (size - 1);
275 return (n <= end) ? n : (end + 1);
276 }
277
278 static void inline me4000_outb(unsigned char value, unsigned long port)
279 {
280 PORT_PDEBUG("--> 0x%02X port 0x%04lX\n", value, port);
281 outb(value, port);
282 }
283
284 static void inline me4000_outl(unsigned long value, unsigned long port)
285 {
286 PORT_PDEBUG("--> 0x%08lX port 0x%04lX\n", value, port);
287 outl(value, port);
288 }
289
290 static unsigned long inline me4000_inl(unsigned long port)
291 {
292 unsigned long value;
293 value = inl(port);
294 PORT_PDEBUG("<-- 0x%08lX port 0x%04lX\n", value, port);
295 return value;
296 }
297
298 static unsigned char inline me4000_inb(unsigned long port)
299 {
300 unsigned char value;
301 value = inb(port);
302 PORT_PDEBUG("<-- 0x%08X port 0x%04lX\n", value, port);
303 return value;
304 }
305
306 static struct pci_driver me4000_driver = {
307 .name = ME4000_NAME,
308 .id_table = me4000_pci_table,
309 .probe = me4000_probe
310 };
311
312 static struct file_operations me4000_ao_fops_sing = {
313 .owner = THIS_MODULE,
314 .write = me4000_ao_write_sing,
315 .ioctl = me4000_ao_ioctl_sing,
316 .open = me4000_open,
317 .release = me4000_release,
318 };
319
320 static struct file_operations me4000_ao_fops_wrap = {
321 .owner = THIS_MODULE,
322 .write = me4000_ao_write_wrap,
323 .ioctl = me4000_ao_ioctl_wrap,
324 .open = me4000_open,
325 .release = me4000_release,
326 };
327
328 static struct file_operations me4000_ao_fops_cont = {
329 .owner = THIS_MODULE,
330 .write = me4000_ao_write_cont,
331 .poll = me4000_ao_poll_cont,
332 .ioctl = me4000_ao_ioctl_cont,
333 .open = me4000_open,
334 .release = me4000_release,
335 .fsync = me4000_ao_fsync_cont,
336 };
337
338 static struct file_operations me4000_ai_fops_sing = {
339 .owner = THIS_MODULE,
340 .ioctl = me4000_ai_ioctl_sing,
341 .open = me4000_open,
342 .release = me4000_release,
343 };
344
345 static struct file_operations me4000_ai_fops_cont_sw = {
346 .owner = THIS_MODULE,
347 .read = me4000_ai_read,
348 .poll = me4000_ai_poll,
349 .ioctl = me4000_ai_ioctl_sw,
350 .open = me4000_open,
351 .release = me4000_release,
352 .fasync = me4000_ai_fasync,
353 };
354
355 static struct file_operations me4000_ai_fops_cont_et = {
356 .owner = THIS_MODULE,
357 .read = me4000_ai_read,
358 .poll = me4000_ai_poll,
359 .ioctl = me4000_ai_ioctl_ext,
360 .open = me4000_open,
361 .release = me4000_release,
362 };
363
364 static struct file_operations me4000_ai_fops_cont_et_value = {
365 .owner = THIS_MODULE,
366 .read = me4000_ai_read,
367 .poll = me4000_ai_poll,
368 .ioctl = me4000_ai_ioctl_ext,
369 .open = me4000_open,
370 .release = me4000_release,
371 };
372
373 static struct file_operations me4000_ai_fops_cont_et_chanlist = {
374 .owner = THIS_MODULE,
375 .read = me4000_ai_read,
376 .poll = me4000_ai_poll,
377 .ioctl = me4000_ai_ioctl_ext,
378 .open = me4000_open,
379 .release = me4000_release,
380 };
381
382 static struct file_operations me4000_dio_fops = {
383 .owner = THIS_MODULE,
384 .ioctl = me4000_dio_ioctl,
385 .open = me4000_open,
386 .release = me4000_release,
387 };
388
389 static struct file_operations me4000_cnt_fops = {
390 .owner = THIS_MODULE,
391 .ioctl = me4000_cnt_ioctl,
392 .open = me4000_open,
393 .release = me4000_release,
394 };
395
396 static struct file_operations me4000_ext_int_fops = {
397 .owner = THIS_MODULE,
398 .ioctl = me4000_ext_int_ioctl,
399 .open = me4000_open,
400 .release = me4000_release,
401 .fasync = me4000_ext_int_fasync,
402 };
403
404 static struct file_operations *me4000_ao_fops_array[] = {
405 &me4000_ao_fops_sing, // single operations
406 &me4000_ao_fops_wrap, // wraparound operations
407 &me4000_ao_fops_cont, // continous operations
408 };
409
410 static struct file_operations *me4000_ai_fops_array[] = {
411 &me4000_ai_fops_sing, // single operations
412 &me4000_ai_fops_cont_sw, // continuous operations with software start
413 &me4000_ai_fops_cont_et, // continous operations with external trigger
414 &me4000_ai_fops_cont_et_value, // sample values by external trigger
415 &me4000_ai_fops_cont_et_chanlist, // work through one channel list by external trigger
416 };
417
418 static int __init me4000_init_module(void)
419 {
420 int result;
421
422 CALL_PDEBUG("init_module() is executed\n");
423
424 /* Register driver capabilities */
425 result = pci_register_driver(&me4000_driver);
426 PDEBUG("init_module():%d devices detected\n", result);
427 if (result < 0) {
428 printk(KERN_ERR "ME4000:init_module():Can't register driver\n");
429 goto INIT_ERROR_1;
430 }
431
432 /* Allocate major number for analog output */
433 result =
434 register_chrdev(me4000_ao_major_driver_no, ME4000_AO_NAME,
435 &me4000_ao_fops_sing);
436 if (result < 0) {
437 printk(KERN_ERR "ME4000:init_module():Can't get AO major no\n");
438 goto INIT_ERROR_2;
439 } else {
440 me4000_ao_major_driver_no = result;
441 }
442 PDEBUG("init_module():Major driver number for AO = %ld\n",
443 me4000_ao_major_driver_no);
444
445 /* Allocate major number for analog input */
446 result =
447 register_chrdev(me4000_ai_major_driver_no, ME4000_AI_NAME,
448 &me4000_ai_fops_sing);
449 if (result < 0) {
450 printk(KERN_ERR "ME4000:init_module():Can't get AI major no\n");
451 goto INIT_ERROR_3;
452 } else {
453 me4000_ai_major_driver_no = result;
454 }
455 PDEBUG("init_module():Major driver number for AI = %ld\n",
456 me4000_ai_major_driver_no);
457
458 /* Allocate major number for digital I/O */
459 result =
460 register_chrdev(me4000_dio_major_driver_no, ME4000_DIO_NAME,
461 &me4000_dio_fops);
462 if (result < 0) {
463 printk(KERN_ERR
464 "ME4000:init_module():Can't get DIO major no\n");
465 goto INIT_ERROR_4;
466 } else {
467 me4000_dio_major_driver_no = result;
468 }
469 PDEBUG("init_module():Major driver number for DIO = %ld\n",
470 me4000_dio_major_driver_no);
471
472 /* Allocate major number for counter */
473 result =
474 register_chrdev(me4000_cnt_major_driver_no, ME4000_CNT_NAME,
475 &me4000_cnt_fops);
476 if (result < 0) {
477 printk(KERN_ERR
478 "ME4000:init_module():Can't get CNT major no\n");
479 goto INIT_ERROR_5;
480 } else {
481 me4000_cnt_major_driver_no = result;
482 }
483 PDEBUG("init_module():Major driver number for CNT = %ld\n",
484 me4000_cnt_major_driver_no);
485
486 /* Allocate major number for external interrupt */
487 result =
488 register_chrdev(me4000_ext_int_major_driver_no, ME4000_EXT_INT_NAME,
489 &me4000_ext_int_fops);
490 if (result < 0) {
491 printk(KERN_ERR
492 "ME4000:init_module():Can't get major no for external interrupt\n");
493 goto INIT_ERROR_6;
494 } else {
495 me4000_ext_int_major_driver_no = result;
496 }
497 PDEBUG
498 ("init_module():Major driver number for external interrupt = %ld\n",
499 me4000_ext_int_major_driver_no);
500
501 /* Create the /proc/me4000 entry */
502 if (!create_proc_read_entry
503 ("me4000", 0, NULL, me4000_read_procmem, NULL)) {
504 result = -ENODEV;
505 printk(KERN_ERR
506 "ME4000:init_module():Can't create proc entry\n");
507 goto INIT_ERROR_7;
508 }
509
510 return 0;
511
512 INIT_ERROR_7:
513 unregister_chrdev(me4000_ext_int_major_driver_no, ME4000_EXT_INT_NAME);
514
515 INIT_ERROR_6:
516 unregister_chrdev(me4000_cnt_major_driver_no, ME4000_CNT_NAME);
517
518 INIT_ERROR_5:
519 unregister_chrdev(me4000_dio_major_driver_no, ME4000_DIO_NAME);
520
521 INIT_ERROR_4:
522 unregister_chrdev(me4000_ai_major_driver_no, ME4000_AI_NAME);
523
524 INIT_ERROR_3:
525 unregister_chrdev(me4000_ao_major_driver_no, ME4000_AO_NAME);
526
527 INIT_ERROR_2:
528 pci_unregister_driver(&me4000_driver);
529 clear_board_info_list();
530
531 INIT_ERROR_1:
532 return result;
533 }
534
535 module_init(me4000_init_module);
536
537 static void clear_board_info_list(void)
538 {
539 struct list_head *board_p;
540 struct list_head *dac_p;
541 struct me4000_info *board_info;
542 struct me4000_ao_context *ao_context;
543
544 /* Clear context lists */
545 for (board_p = me4000_board_info_list.next;
546 board_p != &me4000_board_info_list; board_p = board_p->next) {
547 board_info = list_entry(board_p, struct me4000_info, list);
548 /* Clear analog output context list */
549 while (!list_empty(&board_info->ao_context_list)) {
550 dac_p = board_info->ao_context_list.next;
551 ao_context =
552 list_entry(dac_p, struct me4000_ao_context, list);
553 me4000_ao_reset(ao_context);
554 free_irq(ao_context->irq, ao_context);
555 if (ao_context->circ_buf.buf)
556 kfree(ao_context->circ_buf.buf);
557 list_del(dac_p);
558 kfree(ao_context);
559 }
560
561 /* Clear analog input context */
562 if (board_info->ai_context->circ_buf.buf)
563 kfree(board_info->ai_context->circ_buf.buf);
564 kfree(board_info->ai_context);
565
566 /* Clear digital I/O context */
567 kfree(board_info->dio_context);
568
569 /* Clear counter context */
570 kfree(board_info->cnt_context);
571
572 /* Clear external interrupt context */
573 kfree(board_info->ext_int_context);
574 }
575
576 /* Clear the board info list */
577 while (!list_empty(&me4000_board_info_list)) {
578 board_p = me4000_board_info_list.next;
579 board_info = list_entry(board_p, struct me4000_info, list);
580 pci_release_regions(board_info->pci_dev_p);
581 list_del(board_p);
582 kfree(board_info);
583 }
584 }
585
586 static int get_registers(struct pci_dev *dev, struct me4000_info *board_info)
587 {
588
589 /*--------------------------- plx regbase ---------------------------------*/
590
591 board_info->plx_regbase = pci_resource_start(dev, 1);
592 if (board_info->plx_regbase == 0) {
593 printk(KERN_ERR
594 "ME4000:get_registers():PCI base address 1 is not available\n");
595 return -ENODEV;
596 }
597 board_info->plx_regbase_size = pci_resource_len(dev, 1);
598
599 PDEBUG
600 ("get_registers():PLX configuration registers at address 0x%4lX [0x%4lX]\n",
601 board_info->plx_regbase, board_info->plx_regbase_size);
602
603 /*--------------------------- me4000 regbase ------------------------------*/
604
605 board_info->me4000_regbase = pci_resource_start(dev, 2);
606 if (board_info->me4000_regbase == 0) {
607 printk(KERN_ERR
608 "ME4000:get_registers():PCI base address 2 is not available\n");
609 return -ENODEV;
610 }
611 board_info->me4000_regbase_size = pci_resource_len(dev, 2);
612
613 PDEBUG("get_registers():ME4000 registers at address 0x%4lX [0x%4lX]\n",
614 board_info->me4000_regbase, board_info->me4000_regbase_size);
615
616 /*--------------------------- timer regbase ------------------------------*/
617
618 board_info->timer_regbase = pci_resource_start(dev, 3);
619 if (board_info->timer_regbase == 0) {
620 printk(KERN_ERR
621 "ME4000:get_registers():PCI base address 3 is not available\n");
622 return -ENODEV;
623 }
624 board_info->timer_regbase_size = pci_resource_len(dev, 3);
625
626 PDEBUG("get_registers():Timer registers at address 0x%4lX [0x%4lX]\n",
627 board_info->timer_regbase, board_info->timer_regbase_size);
628
629 /*--------------------------- program regbase ------------------------------*/
630
631 board_info->program_regbase = pci_resource_start(dev, 5);
632 if (board_info->program_regbase == 0) {
633 printk(KERN_ERR
634 "get_registers():ME4000:PCI base address 5 is not available\n");
635 return -ENODEV;
636 }
637 board_info->program_regbase_size = pci_resource_len(dev, 5);
638
639 PDEBUG("get_registers():Program registers at address 0x%4lX [0x%4lX]\n",
640 board_info->program_regbase, board_info->program_regbase_size);
641
642 return 0;
643 }
644
645 static int init_board_info(struct pci_dev *pci_dev_p,
646 struct me4000_info *board_info)
647 {
648 int i;
649 int result;
650 struct list_head *board_p;
651 board_info->pci_dev_p = pci_dev_p;
652
653 for (i = 0; i < ARRAY_SIZE(me4000_boards); i++) {
654 if (me4000_boards[i].device_id == pci_dev_p->device) {
655 board_info->board_p = &me4000_boards[i];
656 break;
657 }
658 }
659 if (i == ARRAY_SIZE(me4000_boards)) {
660 printk(KERN_ERR
661 "ME4000:init_board_info():Device ID not valid\n");
662 return -ENODEV;
663 }
664
665 /* Get the index of the board in the global list */
666 for (board_p = me4000_board_info_list.next, i = 0;
667 board_p != &me4000_board_info_list; board_p = board_p->next, i++) {
668 if (board_p == &board_info->list) {
669 board_info->board_count = i;
670 break;
671 }
672 }
673 if (board_p == &me4000_board_info_list) {
674 printk(KERN_ERR
675 "ME4000:init_board_info():Cannot get index of baord\n");
676 return -ENODEV;
677 }
678
679 /* Init list head for analog output contexts */
680 INIT_LIST_HEAD(&board_info->ao_context_list);
681
682 /* Init spin locks */
683 spin_lock_init(&board_info->preload_lock);
684 spin_lock_init(&board_info->ai_ctrl_lock);
685
686 /* Get the serial number */
687 result = pci_read_config_dword(pci_dev_p, 0x2C, &board_info->serial_no);
688 if (result != PCIBIOS_SUCCESSFUL) {
689 printk(KERN_WARNING
690 "ME4000:init_board_info: Can't get serial_no\n");
691 return result;
692 }
693 PDEBUG("init_board_info():serial_no = 0x%x\n", board_info->serial_no);
694
695 /* Get the hardware revision */
696 result =
697 pci_read_config_byte(pci_dev_p, 0x08, &board_info->hw_revision);
698 if (result != PCIBIOS_SUCCESSFUL) {
699 printk(KERN_WARNING
700 "ME4000:init_board_info():Can't get hw_revision\n");
701 return result;
702 }
703 PDEBUG("init_board_info():hw_revision = 0x%x\n",
704 board_info->hw_revision);
705
706 /* Get the vendor id */
707 board_info->vendor_id = pci_dev_p->vendor;
708 PDEBUG("init_board_info():vendor_id = 0x%x\n", board_info->vendor_id);
709
710 /* Get the device id */
711 board_info->device_id = pci_dev_p->device;
712 PDEBUG("init_board_info():device_id = 0x%x\n", board_info->device_id);
713
714 /* Get the pci device number */
715 board_info->pci_dev_no = PCI_FUNC(pci_dev_p->devfn);
716 PDEBUG("init_board_info():pci_func_no = 0x%x\n",
717 board_info->pci_func_no);
718
719 /* Get the pci slot number */
720 board_info->pci_dev_no = PCI_SLOT(pci_dev_p->devfn);
721 PDEBUG("init_board_info():pci_dev_no = 0x%x\n", board_info->pci_dev_no);
722
723 /* Get the pci bus number */
724 board_info->pci_bus_no = pci_dev_p->bus->number;
725 PDEBUG("init_board_info():pci_bus_no = 0x%x\n", board_info->pci_bus_no);
726
727 /* Get the irq assigned to the board */
728 board_info->irq = pci_dev_p->irq;
729 PDEBUG("init_board_info():irq = %d\n", board_info->irq);
730
731 return 0;
732 }
733
734 static int alloc_ao_contexts(struct me4000_info *info)
735 {
736 int i;
737 int err;
738 struct me4000_ao_context *ao_context;
739
740 for (i = 0; i < info->board_p->ao.count; i++) {
741 ao_context = kzalloc(sizeof(struct me4000_ao_context),
742 GFP_KERNEL);
743 if (!ao_context) {
744 printk(KERN_ERR
745 "alloc_ao_contexts():Can't get memory for ao context\n");
746 release_ao_contexts(info);
747 return -ENOMEM;
748 }
749
750 spin_lock_init(&ao_context->use_lock);
751 spin_lock_init(&ao_context->int_lock);
752 ao_context->irq = info->irq;
753 init_waitqueue_head(&ao_context->wait_queue);
754 ao_context->board_info = info;
755
756 if (info->board_p->ao.fifo_count) {
757 /* Allocate circular buffer */
758 ao_context->circ_buf.buf =
759 kzalloc(ME4000_AO_BUFFER_SIZE, GFP_KERNEL);
760 if (!ao_context->circ_buf.buf) {
761 printk(KERN_ERR
762 "alloc_ao_contexts():Can't get circular buffer\n");
763 release_ao_contexts(info);
764 return -ENOMEM;
765 }
766
767 /* Clear the circular buffer */
768 ao_context->circ_buf.head = 0;
769 ao_context->circ_buf.tail = 0;
770 }
771
772 switch (i) {
773 case 0:
774 ao_context->ctrl_reg =
775 info->me4000_regbase + ME4000_AO_00_CTRL_REG;
776 ao_context->status_reg =
777 info->me4000_regbase + ME4000_AO_00_STATUS_REG;
778 ao_context->fifo_reg =
779 info->me4000_regbase + ME4000_AO_00_FIFO_REG;
780 ao_context->single_reg =
781 info->me4000_regbase + ME4000_AO_00_SINGLE_REG;
782 ao_context->timer_reg =
783 info->me4000_regbase + ME4000_AO_00_TIMER_REG;
784 ao_context->irq_status_reg =
785 info->me4000_regbase + ME4000_IRQ_STATUS_REG;
786 ao_context->preload_reg =
787 info->me4000_regbase + ME4000_AO_LOADSETREG_XX;
788 break;
789 case 1:
790 ao_context->ctrl_reg =
791 info->me4000_regbase + ME4000_AO_01_CTRL_REG;
792 ao_context->status_reg =
793 info->me4000_regbase + ME4000_AO_01_STATUS_REG;
794 ao_context->fifo_reg =
795 info->me4000_regbase + ME4000_AO_01_FIFO_REG;
796 ao_context->single_reg =
797 info->me4000_regbase + ME4000_AO_01_SINGLE_REG;
798 ao_context->timer_reg =
799 info->me4000_regbase + ME4000_AO_01_TIMER_REG;
800 ao_context->irq_status_reg =
801 info->me4000_regbase + ME4000_IRQ_STATUS_REG;
802 ao_context->preload_reg =
803 info->me4000_regbase + ME4000_AO_LOADSETREG_XX;
804 break;
805 case 2:
806 ao_context->ctrl_reg =
807 info->me4000_regbase + ME4000_AO_02_CTRL_REG;
808 ao_context->status_reg =
809 info->me4000_regbase + ME4000_AO_02_STATUS_REG;
810 ao_context->fifo_reg =
811 info->me4000_regbase + ME4000_AO_02_FIFO_REG;
812 ao_context->single_reg =
813 info->me4000_regbase + ME4000_AO_02_SINGLE_REG;
814 ao_context->timer_reg =
815 info->me4000_regbase + ME4000_AO_02_TIMER_REG;
816 ao_context->irq_status_reg =
817 info->me4000_regbase + ME4000_IRQ_STATUS_REG;
818 ao_context->preload_reg =
819 info->me4000_regbase + ME4000_AO_LOADSETREG_XX;
820 break;
821 case 3:
822 ao_context->ctrl_reg =
823 info->me4000_regbase + ME4000_AO_03_CTRL_REG;
824 ao_context->status_reg =
825 info->me4000_regbase + ME4000_AO_03_STATUS_REG;
826 ao_context->fifo_reg =
827 info->me4000_regbase + ME4000_AO_03_FIFO_REG;
828 ao_context->single_reg =
829 info->me4000_regbase + ME4000_AO_03_SINGLE_REG;
830 ao_context->timer_reg =
831 info->me4000_regbase + ME4000_AO_03_TIMER_REG;
832 ao_context->irq_status_reg =
833 info->me4000_regbase + ME4000_IRQ_STATUS_REG;
834 ao_context->preload_reg =
835 info->me4000_regbase + ME4000_AO_LOADSETREG_XX;
836 break;
837 default:
838 break;
839 }
840
841 if (info->board_p->ao.fifo_count) {
842 /* Request the interrupt line */
843 err =
844 request_irq(ao_context->irq, me4000_ao_isr,
845 IRQF_DISABLED | IRQF_SHARED,
846 ME4000_NAME, ao_context);
847 if (err) {
848 printk(KERN_ERR
849 "%s:Can't get interrupt line", __func__);
850 kfree(ao_context->circ_buf.buf);
851 kfree(ao_context);
852 release_ao_contexts(info);
853 return -ENODEV;
854 }
855 }
856
857 list_add_tail(&ao_context->list, &info->ao_context_list);
858 ao_context->index = i;
859 }
860
861 return 0;
862 }
863
864 static void release_ao_contexts(struct me4000_info *board_info)
865 {
866 struct list_head *dac_p;
867 struct me4000_ao_context *ao_context;
868
869 /* Clear analog output context list */
870 while (!list_empty(&board_info->ao_context_list)) {
871 dac_p = board_info->ao_context_list.next;
872 ao_context = list_entry(dac_p, struct me4000_ao_context, list);
873 free_irq(ao_context->irq, ao_context);
874 kfree(ao_context->circ_buf.buf);
875 list_del(dac_p);
876 kfree(ao_context);
877 }
878 }
879
880 static int alloc_ai_context(struct me4000_info *info)
881 {
882 struct me4000_ai_context *ai_context;
883
884 if (info->board_p->ai.count) {
885 ai_context = kzalloc(sizeof(struct me4000_ai_context),
886 GFP_KERNEL);
887 if (!ai_context) {
888 printk(KERN_ERR
889 "ME4000:alloc_ai_context():Can't get memory for ai context\n");
890 return -ENOMEM;
891 }
892
893 info->ai_context = ai_context;
894
895 spin_lock_init(&ai_context->use_lock);
896 spin_lock_init(&ai_context->int_lock);
897 ai_context->number = 0;
898 ai_context->irq = info->irq;
899 init_waitqueue_head(&ai_context->wait_queue);
900 ai_context->board_info = info;
901
902 ai_context->ctrl_reg =
903 info->me4000_regbase + ME4000_AI_CTRL_REG;
904 ai_context->status_reg =
905 info->me4000_regbase + ME4000_AI_STATUS_REG;
906 ai_context->channel_list_reg =
907 info->me4000_regbase + ME4000_AI_CHANNEL_LIST_REG;
908 ai_context->data_reg =
909 info->me4000_regbase + ME4000_AI_DATA_REG;
910 ai_context->chan_timer_reg =
911 info->me4000_regbase + ME4000_AI_CHAN_TIMER_REG;
912 ai_context->chan_pre_timer_reg =
913 info->me4000_regbase + ME4000_AI_CHAN_PRE_TIMER_REG;
914 ai_context->scan_timer_low_reg =
915 info->me4000_regbase + ME4000_AI_SCAN_TIMER_LOW_REG;
916 ai_context->scan_timer_high_reg =
917 info->me4000_regbase + ME4000_AI_SCAN_TIMER_HIGH_REG;
918 ai_context->scan_pre_timer_low_reg =
919 info->me4000_regbase + ME4000_AI_SCAN_PRE_TIMER_LOW_REG;
920 ai_context->scan_pre_timer_high_reg =
921 info->me4000_regbase + ME4000_AI_SCAN_PRE_TIMER_HIGH_REG;
922 ai_context->start_reg =
923 info->me4000_regbase + ME4000_AI_START_REG;
924 ai_context->irq_status_reg =
925 info->me4000_regbase + ME4000_IRQ_STATUS_REG;
926 ai_context->sample_counter_reg =
927 info->me4000_regbase + ME4000_AI_SAMPLE_COUNTER_REG;
928 }
929
930 return 0;
931 }
932
933 static int alloc_dio_context(struct me4000_info *info)
934 {
935 struct me4000_dio_context *dio_context;
936
937 if (info->board_p->dio.count) {
938 dio_context = kzalloc(sizeof(struct me4000_dio_context),
939 GFP_KERNEL);
940 if (!dio_context) {
941 printk(KERN_ERR
942 "ME4000:alloc_dio_context():Can't get memory for dio context\n");
943 return -ENOMEM;
944 }
945
946 info->dio_context = dio_context;
947
948 spin_lock_init(&dio_context->use_lock);
949 dio_context->board_info = info;
950
951 dio_context->dio_count = info->board_p->dio.count;
952
953 dio_context->dir_reg =
954 info->me4000_regbase + ME4000_DIO_DIR_REG;
955 dio_context->ctrl_reg =
956 info->me4000_regbase + ME4000_DIO_CTRL_REG;
957 dio_context->port_0_reg =
958 info->me4000_regbase + ME4000_DIO_PORT_0_REG;
959 dio_context->port_1_reg =
960 info->me4000_regbase + ME4000_DIO_PORT_1_REG;
961 dio_context->port_2_reg =
962 info->me4000_regbase + ME4000_DIO_PORT_2_REG;
963 dio_context->port_3_reg =
964 info->me4000_regbase + ME4000_DIO_PORT_3_REG;
965 }
966
967 return 0;
968 }
969
970 static int alloc_cnt_context(struct me4000_info *info)
971 {
972 struct me4000_cnt_context *cnt_context;
973
974 if (info->board_p->cnt.count) {
975 cnt_context = kzalloc(sizeof(struct me4000_cnt_context),
976 GFP_KERNEL);
977 if (!cnt_context) {
978 printk(KERN_ERR
979 "ME4000:alloc_cnt_context():Can't get memory for cnt context\n");
980 return -ENOMEM;
981 }
982
983 info->cnt_context = cnt_context;
984
985 spin_lock_init(&cnt_context->use_lock);
986 cnt_context->board_info = info;
987
988 cnt_context->ctrl_reg =
989 info->timer_regbase + ME4000_CNT_CTRL_REG;
990 cnt_context->counter_0_reg =
991 info->timer_regbase + ME4000_CNT_COUNTER_0_REG;
992 cnt_context->counter_1_reg =
993 info->timer_regbase + ME4000_CNT_COUNTER_1_REG;
994 cnt_context->counter_2_reg =
995 info->timer_regbase + ME4000_CNT_COUNTER_2_REG;
996 }
997
998 return 0;
999 }
1000
1001 static int alloc_ext_int_context(struct me4000_info *info)
1002 {
1003 struct me4000_ext_int_context *ext_int_context;
1004
1005 if (info->board_p->cnt.count) {
1006 ext_int_context =
1007 kzalloc(sizeof(struct me4000_ext_int_context), GFP_KERNEL);
1008 if (!ext_int_context) {
1009 printk(KERN_ERR
1010 "ME4000:alloc_ext_int_context():Can't get memory for cnt context\n");
1011 return -ENOMEM;
1012 }
1013
1014 info->ext_int_context = ext_int_context;
1015
1016 spin_lock_init(&ext_int_context->use_lock);
1017 ext_int_context->board_info = info;
1018
1019 ext_int_context->fasync_ptr = NULL;
1020 ext_int_context->irq = info->irq;
1021
1022 ext_int_context->ctrl_reg =
1023 info->me4000_regbase + ME4000_AI_CTRL_REG;
1024 ext_int_context->irq_status_reg =
1025 info->me4000_regbase + ME4000_IRQ_STATUS_REG;
1026 }
1027
1028 return 0;
1029 }
1030
1031 static int me4000_probe(struct pci_dev *dev, const struct pci_device_id *id)
1032 {
1033 int result = 0;
1034 struct me4000_info *board_info;
1035
1036 CALL_PDEBUG("me4000_probe() is executed\n");
1037
1038 /* Allocate structure for board context */
1039 board_info = kzalloc(sizeof(struct me4000_info), GFP_KERNEL);
1040 if (!board_info) {
1041 printk(KERN_ERR
1042 "ME4000:Can't get memory for board info structure\n");
1043 result = -ENOMEM;
1044 goto PROBE_ERROR_1;
1045 }
1046
1047 /* Add to global linked list */
1048 list_add_tail(&board_info->list, &me4000_board_info_list);
1049
1050 /* Get the PCI base registers */
1051 result = get_registers(dev, board_info);
1052 if (result) {
1053 printk(KERN_ERR "%s:Cannot get registers\n", __func__);
1054 goto PROBE_ERROR_2;
1055 }
1056
1057 /* Enable the device */
1058 result = pci_enable_device(dev);
1059 if (result < 0) {
1060 printk(KERN_ERR "%s:Cannot enable PCI device\n", __func__);
1061 goto PROBE_ERROR_2;
1062 }
1063
1064 /* Request the PCI register regions */
1065 result = pci_request_regions(dev, ME4000_NAME);
1066 if (result < 0) {
1067 printk(KERN_ERR "%s:Cannot request I/O regions\n", __func__);
1068 goto PROBE_ERROR_2;
1069 }
1070
1071 /* Initialize board info */
1072 result = init_board_info(dev, board_info);
1073 if (result) {
1074 printk(KERN_ERR "%s:Cannot init baord info\n", __func__);
1075 goto PROBE_ERROR_3;
1076 }
1077
1078 /* Download the xilinx firmware */
1079 result = me4000_xilinx_download(board_info);
1080 if (result) {
1081 printk(KERN_ERR "%s:Can't download firmware\n", __func__);
1082 goto PROBE_ERROR_3;
1083 }
1084
1085 /* Make a hardware reset */
1086 result = me4000_reset_board(board_info);
1087 if (result) {
1088 printk(KERN_ERR "%s :Can't reset board\n", __func__);
1089 goto PROBE_ERROR_3;
1090 }
1091
1092 /* Allocate analog output context structures */
1093 result = alloc_ao_contexts(board_info);
1094 if (result) {
1095 printk(KERN_ERR "%s:Cannot allocate ao contexts\n", __func__);
1096 goto PROBE_ERROR_3;
1097 }
1098
1099 /* Allocate analog input context */
1100 result = alloc_ai_context(board_info);
1101 if (result) {
1102 printk(KERN_ERR "%s:Cannot allocate ai context\n", __func__);
1103 goto PROBE_ERROR_4;
1104 }
1105
1106 /* Allocate digital I/O context */
1107 result = alloc_dio_context(board_info);
1108 if (result) {
1109 printk(KERN_ERR "%s:Cannot allocate dio context\n", __func__);
1110 goto PROBE_ERROR_5;
1111 }
1112
1113 /* Allocate counter context */
1114 result = alloc_cnt_context(board_info);
1115 if (result) {
1116 printk(KERN_ERR "%s:Cannot allocate cnt context\n", __func__);
1117 goto PROBE_ERROR_6;
1118 }
1119
1120 /* Allocate external interrupt context */
1121 result = alloc_ext_int_context(board_info);
1122 if (result) {
1123 printk(KERN_ERR
1124 "%s:Cannot allocate ext_int context\n", __func__);
1125 goto PROBE_ERROR_7;
1126 }
1127
1128 return 0;
1129
1130 PROBE_ERROR_7:
1131 kfree(board_info->cnt_context);
1132
1133 PROBE_ERROR_6:
1134 kfree(board_info->dio_context);
1135
1136 PROBE_ERROR_5:
1137 kfree(board_info->ai_context);
1138
1139 PROBE_ERROR_4:
1140 release_ao_contexts(board_info);
1141
1142 PROBE_ERROR_3:
1143 pci_release_regions(dev);
1144
1145 PROBE_ERROR_2:
1146 list_del(&board_info->list);
1147 kfree(board_info);
1148
1149 PROBE_ERROR_1:
1150 return result;
1151 }
1152
1153 static int me4000_xilinx_download(struct me4000_info *info)
1154 {
1155 int size = 0;
1156 u32 value = 0;
1157 int idx = 0;
1158 unsigned char *firm;
1159 wait_queue_head_t queue;
1160
1161 CALL_PDEBUG("me4000_xilinx_download() is executed\n");
1162
1163 init_waitqueue_head(&queue);
1164
1165 firm = (info->device_id == 0x4610) ? xilinx_firm_4610 : xilinx_firm;
1166
1167 /*
1168 * Set PLX local interrupt 2 polarity to high.
1169 * Interrupt is thrown by init pin of xilinx.
1170 */
1171 outl(0x10, info->plx_regbase + PLX_INTCSR);
1172
1173 /* Set /CS and /WRITE of the Xilinx */
1174 value = inl(info->plx_regbase + PLX_ICR);
1175 value |= 0x100;
1176 outl(value, info->plx_regbase + PLX_ICR);
1177
1178 /* Init Xilinx with CS1 */
1179 inb(info->program_regbase + 0xC8);
1180
1181 /* Wait until /INIT pin is set */
1182 udelay(20);
1183 if (!inl(info->plx_regbase + PLX_INTCSR) & 0x20) {
1184 printk(KERN_ERR "%s:Can't init Xilinx\n", __func__);
1185 return -EIO;
1186 }
1187
1188 /* Reset /CS and /WRITE of the Xilinx */
1189 value = inl(info->plx_regbase + PLX_ICR);
1190 value &= ~0x100;
1191 outl(value, info->plx_regbase + PLX_ICR);
1192
1193 /* Download Xilinx firmware */
1194 size = (firm[0] << 24) + (firm[1] << 16) + (firm[2] << 8) + firm[3];
1195 udelay(10);
1196
1197 for (idx = 0; idx < size; idx++) {
1198 outb(firm[16 + idx], info->program_regbase);
1199
1200 udelay(10);
1201
1202 /* Check if BUSY flag is low */
1203 if (inl(info->plx_regbase + PLX_ICR) & 0x20) {
1204 printk(KERN_ERR
1205 "%s:Xilinx is still busy (idx = %d)\n", __func__,
1206 idx);
1207 return -EIO;
1208 }
1209 }
1210
1211 PDEBUG("me4000_xilinx_download():%d bytes written\n", idx);
1212
1213 /* If done flag is high download was successful */
1214 if (inl(info->plx_regbase + PLX_ICR) & 0x4) {
1215 PDEBUG("me4000_xilinx_download():Done flag is set\n");
1216 PDEBUG("me4000_xilinx_download():Download was successful\n");
1217 } else {
1218 printk(KERN_ERR
1219 "ME4000:%s:DONE flag is not set\n", __func__);
1220 printk(KERN_ERR
1221 "ME4000:%s:Download not succesful\n", __func__);
1222 return -EIO;
1223 }
1224
1225 /* Set /CS and /WRITE */
1226 value = inl(info->plx_regbase + PLX_ICR);
1227 value |= 0x100;
1228 outl(value, info->plx_regbase + PLX_ICR);
1229
1230 return 0;
1231 }
1232
1233 static int me4000_reset_board(struct me4000_info *info)
1234 {
1235 unsigned long icr;
1236
1237 CALL_PDEBUG("me4000_reset_board() is executed\n");
1238
1239 /* Make a hardware reset */
1240 icr = me4000_inl(info->plx_regbase + PLX_ICR);
1241 icr |= 0x40000000;
1242 me4000_outl(icr, info->plx_regbase + PLX_ICR);
1243 icr &= ~0x40000000;
1244 me4000_outl(icr, info->plx_regbase + PLX_ICR);
1245
1246 /* Set both stop bits in the analog input control register */
1247 me4000_outl(ME4000_AI_CTRL_BIT_IMMEDIATE_STOP | ME4000_AI_CTRL_BIT_STOP,
1248 info->me4000_regbase + ME4000_AI_CTRL_REG);
1249
1250 /* Set both stop bits in the analog output control register */
1251 me4000_outl(ME4000_AO_CTRL_BIT_IMMEDIATE_STOP | ME4000_AO_CTRL_BIT_STOP,
1252 info->me4000_regbase + ME4000_AO_00_CTRL_REG);
1253 me4000_outl(ME4000_AO_CTRL_BIT_IMMEDIATE_STOP | ME4000_AO_CTRL_BIT_STOP,
1254 info->me4000_regbase + ME4000_AO_01_CTRL_REG);
1255 me4000_outl(ME4000_AO_CTRL_BIT_IMMEDIATE_STOP | ME4000_AO_CTRL_BIT_STOP,
1256 info->me4000_regbase + ME4000_AO_02_CTRL_REG);
1257 me4000_outl(ME4000_AO_CTRL_BIT_IMMEDIATE_STOP | ME4000_AO_CTRL_BIT_STOP,
1258 info->me4000_regbase + ME4000_AO_03_CTRL_REG);
1259
1260 /* 0x8000 to the DACs means an output voltage of 0V */
1261 me4000_outl(0x8000, info->me4000_regbase + ME4000_AO_00_SINGLE_REG);
1262 me4000_outl(0x8000, info->me4000_regbase + ME4000_AO_01_SINGLE_REG);
1263 me4000_outl(0x8000, info->me4000_regbase + ME4000_AO_02_SINGLE_REG);
1264 me4000_outl(0x8000, info->me4000_regbase + ME4000_AO_03_SINGLE_REG);
1265
1266 /* Enable interrupts on the PLX */
1267 me4000_outl(0x43, info->plx_regbase + PLX_INTCSR);
1268
1269 /* Set the adustment register for AO demux */
1270 me4000_outl(ME4000_AO_DEMUX_ADJUST_VALUE,
1271 info->me4000_regbase + ME4000_AO_DEMUX_ADJUST_REG);
1272
1273 /* Set digital I/O direction for port 0 to output on isolated versions */
1274 if (!(me4000_inl(info->me4000_regbase + ME4000_DIO_DIR_REG) & 0x1)) {
1275 me4000_outl(0x1, info->me4000_regbase + ME4000_DIO_CTRL_REG);
1276 }
1277
1278 return 0;
1279 }
1280
1281 static int me4000_open(struct inode *inode_p, struct file *file_p)
1282 {
1283 int board, dev, mode;
1284 int err = 0;
1285 int i;
1286 struct list_head *ptr;
1287 struct me4000_info *board_info = NULL;
1288 struct me4000_ao_context *ao_context = NULL;
1289 struct me4000_ai_context *ai_context = NULL;
1290 struct me4000_dio_context *dio_context = NULL;
1291 struct me4000_cnt_context *cnt_context = NULL;
1292 struct me4000_ext_int_context *ext_int_context = NULL;
1293
1294 CALL_PDEBUG("me4000_open() is executed\n");
1295
1296 /* Analog output */
1297 if (MAJOR(inode_p->i_rdev) == me4000_ao_major_driver_no) {
1298 board = AO_BOARD(inode_p->i_rdev);
1299 dev = AO_PORT(inode_p->i_rdev);
1300 mode = AO_MODE(inode_p->i_rdev);
1301
1302 PDEBUG("me4000_open():board = %d ao = %d mode = %d\n", board,
1303 dev, mode);
1304
1305 /* Search for the board context */
1306 for (ptr = me4000_board_info_list.next, i = 0;
1307 ptr != &me4000_board_info_list; ptr = ptr->next, i++) {
1308 board_info = list_entry(ptr, struct me4000_info, list);
1309 if (i == board)
1310 break;
1311 }
1312
1313 if (ptr == &me4000_board_info_list) {
1314 printk(KERN_ERR
1315 "ME4000:me4000_open():Board %d not in device list\n",
1316 board);
1317 return -ENODEV;
1318 }
1319
1320 /* Search for the dac context */
1321 for (ptr = board_info->ao_context_list.next, i = 0;
1322 ptr != &board_info->ao_context_list;
1323 ptr = ptr->next, i++) {
1324 ao_context = list_entry(ptr, struct me4000_ao_context,
1325 list);
1326 if (i == dev)
1327 break;
1328 }
1329
1330 if (ptr == &board_info->ao_context_list) {
1331 printk(KERN_ERR
1332 "ME4000:me4000_open():Device %d not in device list\n",
1333 dev);
1334 return -ENODEV;
1335 }
1336
1337 /* Check if mode is valid */
1338 if (mode > 2) {
1339 printk(KERN_ERR
1340 "ME4000:me4000_open():Mode is not valid\n");
1341 return -ENODEV;
1342 }
1343
1344 /* Check if mode is valid for this AO */
1345 if ((mode != ME4000_AO_CONV_MODE_SINGLE)
1346 && (dev >= board_info->board_p->ao.fifo_count)) {
1347 printk(KERN_ERR
1348 "ME4000:me4000_open():AO %d only in single mode available\n",
1349 dev);
1350 return -ENODEV;
1351 }
1352
1353 /* Check if already opened */
1354 spin_lock(&ao_context->use_lock);
1355 if (ao_context->dac_in_use) {
1356 printk(KERN_ERR
1357 "ME4000:me4000_open():AO %d already in use\n",
1358 dev);
1359 spin_unlock(&ao_context->use_lock);
1360 return -EBUSY;
1361 }
1362 ao_context->dac_in_use = 1;
1363 spin_unlock(&ao_context->use_lock);
1364
1365 ao_context->mode = mode;
1366
1367 /* Hold the context in private data */
1368 file_p->private_data = ao_context;
1369
1370 /* Set file operations pointer */
1371 file_p->f_op = me4000_ao_fops_array[mode];
1372
1373 err = me4000_ao_prepare(ao_context);
1374 if (err) {
1375 ao_context->dac_in_use = 0;
1376 return 1;
1377 }
1378 }
1379 /* Analog input */
1380 else if (MAJOR(inode_p->i_rdev) == me4000_ai_major_driver_no) {
1381 board = AI_BOARD(inode_p->i_rdev);
1382 mode = AI_MODE(inode_p->i_rdev);
1383
1384 PDEBUG("me4000_open():ai board = %d mode = %d\n", board, mode);
1385
1386 /* Search for the board context */
1387 for (ptr = me4000_board_info_list.next, i = 0;
1388 ptr != &me4000_board_info_list; ptr = ptr->next, i++) {
1389 board_info = list_entry(ptr, struct me4000_info, list);
1390 if (i == board)
1391 break;
1392 }
1393
1394 if (ptr == &me4000_board_info_list) {
1395 printk(KERN_ERR
1396 "ME4000:me4000_open():Board %d not in device list\n",
1397 board);
1398 return -ENODEV;
1399 }
1400
1401 ai_context = board_info->ai_context;
1402
1403 /* Check if mode is valid */
1404 if (mode > 5) {
1405 printk(KERN_ERR
1406 "ME4000:me4000_open():Mode is not valid\n");
1407 return -EINVAL;
1408 }
1409
1410 /* Check if already opened */
1411 spin_lock(&ai_context->use_lock);
1412 if (ai_context->in_use) {
1413 printk(KERN_ERR
1414 "ME4000:me4000_open():AI already in use\n");
1415 spin_unlock(&ai_context->use_lock);
1416 return -EBUSY;
1417 }
1418 ai_context->in_use = 1;
1419 spin_unlock(&ai_context->use_lock);
1420
1421 ai_context->mode = mode;
1422
1423 /* Hold the context in private data */
1424 file_p->private_data = ai_context;
1425
1426 /* Set file operations pointer */
1427 file_p->f_op = me4000_ai_fops_array[mode];
1428
1429 /* Prepare analog input */
1430 me4000_ai_prepare(ai_context);
1431 }
1432 /* Digital I/O */
1433 else if (MAJOR(inode_p->i_rdev) == me4000_dio_major_driver_no) {
1434 board = DIO_BOARD(inode_p->i_rdev);
1435 dev = 0;
1436 mode = 0;
1437
1438 PDEBUG("me4000_open():board = %d\n", board);
1439
1440 /* Search for the board context */
1441 for (ptr = me4000_board_info_list.next;
1442 ptr != &me4000_board_info_list; ptr = ptr->next) {
1443 board_info = list_entry(ptr, struct me4000_info, list);
1444 if (board_info->board_count == board)
1445 break;
1446 }
1447
1448 if (ptr == &me4000_board_info_list) {
1449 printk(KERN_ERR
1450 "ME4000:me4000_open():Board %d not in device list\n",
1451 board);
1452 return -ENODEV;
1453 }
1454
1455 /* Search for the dio context */
1456 dio_context = board_info->dio_context;
1457
1458 /* Check if already opened */
1459 spin_lock(&dio_context->use_lock);
1460 if (dio_context->in_use) {
1461 printk(KERN_ERR
1462 "ME4000:me4000_open():DIO already in use\n");
1463 spin_unlock(&dio_context->use_lock);
1464 return -EBUSY;
1465 }
1466 dio_context->in_use = 1;
1467 spin_unlock(&dio_context->use_lock);
1468
1469 /* Hold the context in private data */
1470 file_p->private_data = dio_context;
1471
1472 /* Set file operations pointer to single functions */
1473 file_p->f_op = &me4000_dio_fops;
1474
1475 //me4000_dio_reset(dio_context);
1476 }
1477 /* Counters */
1478 else if (MAJOR(inode_p->i_rdev) == me4000_cnt_major_driver_no) {
1479 board = CNT_BOARD(inode_p->i_rdev);
1480 dev = 0;
1481 mode = 0;
1482
1483 PDEBUG("me4000_open():board = %d\n", board);
1484
1485 /* Search for the board context */
1486 for (ptr = me4000_board_info_list.next;
1487 ptr != &me4000_board_info_list; ptr = ptr->next) {
1488 board_info = list_entry(ptr, struct me4000_info, list);
1489 if (board_info->board_count == board)
1490 break;
1491 }
1492
1493 if (ptr == &me4000_board_info_list) {
1494 printk(KERN_ERR
1495 "ME4000:me4000_open():Board %d not in device list\n",
1496 board);
1497 return -ENODEV;
1498 }
1499
1500 /* Get the cnt context */
1501 cnt_context = board_info->cnt_context;
1502
1503 /* Check if already opened */
1504 spin_lock(&cnt_context->use_lock);
1505 if (cnt_context->in_use) {
1506 printk(KERN_ERR
1507 "ME4000:me4000_open():CNT already in use\n");
1508 spin_unlock(&cnt_context->use_lock);
1509 return -EBUSY;
1510 }
1511 cnt_context->in_use = 1;
1512 spin_unlock(&cnt_context->use_lock);
1513
1514 /* Hold the context in private data */
1515 file_p->private_data = cnt_context;
1516
1517 /* Set file operations pointer to single functions */
1518 file_p->f_op = &me4000_cnt_fops;
1519 }
1520 /* External Interrupt */
1521 else if (MAJOR(inode_p->i_rdev) == me4000_ext_int_major_driver_no) {
1522 board = EXT_INT_BOARD(inode_p->i_rdev);
1523 dev = 0;
1524 mode = 0;
1525
1526 PDEBUG("me4000_open():board = %d\n", board);
1527
1528 /* Search for the board context */
1529 for (ptr = me4000_board_info_list.next;
1530 ptr != &me4000_board_info_list; ptr = ptr->next) {
1531 board_info = list_entry(ptr, struct me4000_info, list);
1532 if (board_info->board_count == board)
1533 break;
1534 }
1535
1536 if (ptr == &me4000_board_info_list) {
1537 printk(KERN_ERR
1538 "ME4000:me4000_open():Board %d not in device list\n",
1539 board);
1540 return -ENODEV;
1541 }
1542
1543 /* Get the external interrupt context */
1544 ext_int_context = board_info->ext_int_context;
1545
1546 /* Check if already opened */
1547 spin_lock(&cnt_context->use_lock);
1548 if (ext_int_context->in_use) {
1549 printk(KERN_ERR
1550 "ME4000:me4000_open():External interrupt already in use\n");
1551 spin_unlock(&ext_int_context->use_lock);
1552 return -EBUSY;
1553 }
1554 ext_int_context->in_use = 1;
1555 spin_unlock(&ext_int_context->use_lock);
1556
1557 /* Hold the context in private data */
1558 file_p->private_data = ext_int_context;
1559
1560 /* Set file operations pointer to single functions */
1561 file_p->f_op = &me4000_ext_int_fops;
1562
1563 /* Request the interrupt line */
1564 err =
1565 request_irq(ext_int_context->irq, me4000_ext_int_isr,
1566 IRQF_DISABLED | IRQF_SHARED, ME4000_NAME,
1567 ext_int_context);
1568 if (err) {
1569 printk(KERN_ERR
1570 "ME4000:me4000_open():Can't get interrupt line");
1571 ext_int_context->in_use = 0;
1572 return -ENODEV;
1573 }
1574
1575 /* Reset the counter */
1576 me4000_ext_int_disable(ext_int_context);
1577 } else {
1578 printk(KERN_ERR "ME4000:me4000_open():Major number unknown\n");
1579 return -EINVAL;
1580 }
1581
1582 return 0;
1583 }
1584
1585 static int me4000_release(struct inode *inode_p, struct file *file_p)
1586 {
1587 struct me4000_ao_context *ao_context;
1588 struct me4000_ai_context *ai_context;
1589 struct me4000_dio_context *dio_context;
1590 struct me4000_cnt_context *cnt_context;
1591 struct me4000_ext_int_context *ext_int_context;
1592
1593 CALL_PDEBUG("me4000_release() is executed\n");
1594
1595 if (MAJOR(inode_p->i_rdev) == me4000_ao_major_driver_no) {
1596 ao_context = file_p->private_data;
1597
1598 /* Mark DAC as unused */
1599 ao_context->dac_in_use = 0;
1600 } else if (MAJOR(inode_p->i_rdev) == me4000_ai_major_driver_no) {
1601 ai_context = file_p->private_data;
1602
1603 /* Reset the analog input */
1604 me4000_ai_reset(ai_context);
1605
1606 /* Free the interrupt and the circular buffer */
1607 if (ai_context->mode) {
1608 free_irq(ai_context->irq, ai_context);
1609 kfree(ai_context->circ_buf.buf);
1610 ai_context->circ_buf.buf = NULL;
1611 ai_context->circ_buf.head = 0;
1612 ai_context->circ_buf.tail = 0;
1613 }
1614
1615 /* Mark AI as unused */
1616 ai_context->in_use = 0;
1617 } else if (MAJOR(inode_p->i_rdev) == me4000_dio_major_driver_no) {
1618 dio_context = file_p->private_data;
1619
1620 /* Mark digital I/O as unused */
1621 dio_context->in_use = 0;
1622 } else if (MAJOR(inode_p->i_rdev) == me4000_cnt_major_driver_no) {
1623 cnt_context = file_p->private_data;
1624
1625 /* Mark counters as unused */
1626 cnt_context->in_use = 0;
1627 } else if (MAJOR(inode_p->i_rdev) == me4000_ext_int_major_driver_no) {
1628 ext_int_context = file_p->private_data;
1629
1630 /* Disable the externel interrupt */
1631 me4000_ext_int_disable(ext_int_context);
1632
1633 free_irq(ext_int_context->irq, ext_int_context);
1634
1635 /* Mark as unused */
1636 ext_int_context->in_use = 0;
1637 } else {
1638 printk(KERN_ERR
1639 "ME4000:me4000_release():Major number unknown\n");
1640 return -EINVAL;
1641 }
1642
1643 return 0;
1644 }
1645
1646 /*------------------------------- Analog output stuff --------------------------------------*/
1647
1648 static int me4000_ao_prepare(struct me4000_ao_context *ao_context)
1649 {
1650 unsigned long flags;
1651
1652 CALL_PDEBUG("me4000_ao_prepare() is executed\n");
1653
1654 if (ao_context->mode == ME4000_AO_CONV_MODE_CONTINUOUS) {
1655 /* Only do anything if not already in the correct mode */
1656 unsigned long mode = me4000_inl(ao_context->ctrl_reg);
1657 if ((mode & ME4000_AO_CONV_MODE_CONTINUOUS)
1658 && (mode & ME4000_AO_CTRL_BIT_ENABLE_FIFO)) {
1659 return 0;
1660 }
1661
1662 /* Stop any conversion */
1663 me4000_ao_immediate_stop(ao_context);
1664
1665 /* Set the control register to default state */
1666 spin_lock_irqsave(&ao_context->int_lock, flags);
1667 me4000_outl(ME4000_AO_CONV_MODE_CONTINUOUS |
1668 ME4000_AO_CTRL_BIT_ENABLE_FIFO |
1669 ME4000_AO_CTRL_BIT_STOP |
1670 ME4000_AO_CTRL_BIT_IMMEDIATE_STOP,
1671 ao_context->ctrl_reg);
1672 spin_unlock_irqrestore(&ao_context->int_lock, flags);
1673
1674 /* Set to fastest sample rate */
1675 me4000_outl(65, ao_context->timer_reg);
1676 } else if (ao_context->mode == ME4000_AO_CONV_MODE_WRAPAROUND) {
1677 /* Only do anything if not already in the correct mode */
1678 unsigned long mode = me4000_inl(ao_context->ctrl_reg);
1679 if ((mode & ME4000_AO_CONV_MODE_WRAPAROUND)
1680 && (mode & ME4000_AO_CTRL_BIT_ENABLE_FIFO)) {
1681 return 0;
1682 }
1683
1684 /* Stop any conversion */
1685 me4000_ao_immediate_stop(ao_context);
1686
1687 /* Set the control register to default state */
1688 spin_lock_irqsave(&ao_context->int_lock, flags);
1689 me4000_outl(ME4000_AO_CONV_MODE_WRAPAROUND |
1690 ME4000_AO_CTRL_BIT_ENABLE_FIFO |
1691 ME4000_AO_CTRL_BIT_STOP |
1692 ME4000_AO_CTRL_BIT_IMMEDIATE_STOP,
1693 ao_context->ctrl_reg);
1694 spin_unlock_irqrestore(&ao_context->int_lock, flags);
1695
1696 /* Set to fastest sample rate */
1697 me4000_outl(65, ao_context->timer_reg);
1698 } else if (ao_context->mode == ME4000_AO_CONV_MODE_SINGLE) {
1699 /* Only do anything if not already in the correct mode */
1700 unsigned long mode = me4000_inl(ao_context->ctrl_reg);
1701 if (!
1702 (mode &
1703 (ME4000_AO_CONV_MODE_WRAPAROUND |
1704 ME4000_AO_CONV_MODE_CONTINUOUS))) {
1705 return 0;
1706 }
1707
1708 /* Stop any conversion */
1709 me4000_ao_immediate_stop(ao_context);
1710
1711 /* Clear the control register */
1712 spin_lock_irqsave(&ao_context->int_lock, flags);
1713 me4000_outl(0x0, ao_context->ctrl_reg);
1714 spin_unlock_irqrestore(&ao_context->int_lock, flags);
1715
1716 /* Set voltage to 0V */
1717 me4000_outl(0x8000, ao_context->single_reg);
1718 } else {
1719 printk(KERN_ERR
1720 "ME4000:me4000_ao_prepare():Invalid mode specified\n");
1721 return -EINVAL;
1722 }
1723
1724 return 0;
1725 }
1726
1727 static int me4000_ao_reset(struct me4000_ao_context *ao_context)
1728 {
1729 u32 tmp;
1730 wait_queue_head_t queue;
1731 unsigned long flags;
1732
1733 CALL_PDEBUG("me4000_ao_reset() is executed\n");
1734
1735 init_waitqueue_head(&queue);
1736
1737 if (ao_context->mode == ME4000_AO_CONV_MODE_WRAPAROUND) {
1738 /*
1739 * First stop conversion of the DAC before reconfigure.
1740 * This is essantial, cause of the state machine.
1741 * If not stopped before configuring mode, it could
1742 * walk in a undefined state.
1743 */
1744 tmp = me4000_inl(ao_context->ctrl_reg);
1745 tmp |= ME4000_AO_CTRL_BIT_IMMEDIATE_STOP;
1746 me4000_outl(tmp, ao_context->ctrl_reg);
1747
1748 wait_event_timeout(queue,
1749 (inl(ao_context->status_reg) &
1750 ME4000_AO_STATUS_BIT_FSM) == 0,
1751 1);
1752
1753 /* Set to transparent mode */
1754 me4000_ao_simultaneous_disable(ao_context);
1755
1756 /* Set to single mode in order to set default voltage */
1757 me4000_outl(0x0, ao_context->ctrl_reg);
1758
1759 /* Set voltage to 0V */
1760 me4000_outl(0x8000, ao_context->single_reg);
1761
1762 /* Set to fastest sample rate */
1763 me4000_outl(65, ao_context->timer_reg);
1764
1765 /* Set the original mode and enable FIFO */
1766 me4000_outl(ME4000_AO_CONV_MODE_WRAPAROUND |
1767 ME4000_AO_CTRL_BIT_ENABLE_FIFO |
1768 ME4000_AO_CTRL_BIT_STOP |
1769 ME4000_AO_CTRL_BIT_IMMEDIATE_STOP,
1770 ao_context->ctrl_reg);
1771 } else if (ao_context->mode == ME4000_AO_CONV_MODE_CONTINUOUS) {
1772 /*
1773 * First stop conversion of the DAC before reconfigure.
1774 * This is essantial, cause of the state machine.
1775 * If not stopped before configuring mode, it could
1776 * walk in a undefined state.
1777 */
1778 spin_lock_irqsave(&ao_context->int_lock, flags);
1779 tmp = me4000_inl(ao_context->ctrl_reg);
1780 tmp |= ME4000_AO_CTRL_BIT_STOP;
1781 me4000_outl(tmp, ao_context->ctrl_reg);
1782 spin_unlock_irqrestore(&ao_context->int_lock, flags);
1783
1784 wait_event_timeout(queue,
1785 (inl(ao_context->status_reg) &
1786 ME4000_AO_STATUS_BIT_FSM) == 0,
1787 1);
1788
1789 /* Clear the circular buffer */
1790 ao_context->circ_buf.head = 0;
1791 ao_context->circ_buf.tail = 0;
1792
1793 /* Set to transparent mode */
1794 me4000_ao_simultaneous_disable(ao_context);
1795
1796 /* Set to single mode in order to set default voltage */
1797 spin_lock_irqsave(&ao_context->int_lock, flags);
1798 tmp = me4000_inl(ao_context->ctrl_reg);
1799 me4000_outl(0x0, ao_context->ctrl_reg);
1800
1801 /* Set voltage to 0V */
1802 me4000_outl(0x8000, ao_context->single_reg);
1803
1804 /* Set to fastest sample rate */
1805 me4000_outl(65, ao_context->timer_reg);
1806
1807 /* Set the original mode and enable FIFO */
1808 me4000_outl(ME4000_AO_CONV_MODE_CONTINUOUS |
1809 ME4000_AO_CTRL_BIT_ENABLE_FIFO |
1810 ME4000_AO_CTRL_BIT_STOP |
1811 ME4000_AO_CTRL_BIT_IMMEDIATE_STOP,
1812 ao_context->ctrl_reg);
1813 spin_unlock_irqrestore(&ao_context->int_lock, flags);
1814 } else {
1815 /* Set to transparent mode */
1816 me4000_ao_simultaneous_disable(ao_context);
1817
1818 /* Set voltage to 0V */
1819 me4000_outl(0x8000, ao_context->single_reg);
1820 }
1821
1822 return 0;
1823 }
1824
1825 static ssize_t me4000_ao_write_sing(struct file *filep, const char *buff,
1826 size_t cnt, loff_t *offp)
1827 {
1828 struct me4000_ao_context *ao_context = filep->private_data;
1829 u32 value;
1830 const u16 *buffer = (const u16 *)buff;
1831
1832 CALL_PDEBUG("me4000_ao_write_sing() is executed\n");
1833
1834 if (cnt != 2) {
1835 printk(KERN_ERR
1836 "%s:Write count is not 2\n", __func__);
1837 return -EINVAL;
1838 }
1839
1840 if (get_user(value, buffer)) {
1841 printk(KERN_ERR
1842 "%s:Cannot copy data from user\n", __func__);
1843 return -EFAULT;
1844 }
1845
1846 me4000_outl(value, ao_context->single_reg);
1847
1848 return 2;
1849 }
1850
1851 static ssize_t me4000_ao_write_wrap(struct file *filep, const char *buff,
1852 size_t cnt, loff_t *offp)
1853 {
1854 struct me4000_ao_context *ao_context = filep->private_data;
1855 size_t i;
1856 u32 value;
1857 u32 tmp;
1858 const u16 *buffer = (const u16 *)buff;
1859 size_t count = cnt / 2;
1860
1861 CALL_PDEBUG("me4000_ao_write_wrap() is executed\n");
1862
1863 /* Check if a conversion is already running */
1864 if (inl(ao_context->status_reg) & ME4000_AO_STATUS_BIT_FSM) {
1865 printk(KERN_ERR
1866 "%s:There is already a conversion running\n", __func__);
1867 return -EBUSY;
1868 }
1869
1870 if (count > ME4000_AO_FIFO_COUNT) {
1871 printk(KERN_ERR
1872 "%s:Can't load more than %d values\n", __func__,
1873 ME4000_AO_FIFO_COUNT);
1874 return -ENOSPC;
1875 }
1876
1877 /* Reset the FIFO */
1878 tmp = inl(ao_context->ctrl_reg);
1879 tmp &= ~ME4000_AO_CTRL_BIT_ENABLE_FIFO;
1880 outl(tmp, ao_context->ctrl_reg);
1881 tmp |= ME4000_AO_CTRL_BIT_ENABLE_FIFO;
1882 outl(tmp, ao_context->ctrl_reg);
1883
1884 for (i = 0; i < count; i++) {
1885 if (get_user(value, buffer + i)) {
1886 printk(KERN_ERR
1887 "%s:Cannot copy data from user\n", __func__);
1888 return -EFAULT;
1889 }
1890 if (((ao_context->fifo_reg & 0xFF) == ME4000_AO_01_FIFO_REG)
1891 || ((ao_context->fifo_reg & 0xFF) == ME4000_AO_03_FIFO_REG))
1892 value = value << 16;
1893 outl(value, ao_context->fifo_reg);
1894 }
1895 CALL_PDEBUG("me4000_ao_write_wrap() is leaved with %d\n", i * 2);
1896
1897 return i * 2;
1898 }
1899
1900 static ssize_t me4000_ao_write_cont(struct file *filep, const char *buff,
1901 size_t cnt, loff_t *offp)
1902 {
1903 struct me4000_ao_context *ao_context = filep->private_data;
1904 const u16 *buffer = (const u16 *)buff;
1905 size_t count = cnt / 2;
1906 unsigned long flags;
1907 u32 tmp;
1908 int c = 0;
1909 int k = 0;
1910 int ret = 0;
1911 u16 svalue;
1912 u32 lvalue;
1913 int i;
1914 wait_queue_head_t queue;
1915
1916 CALL_PDEBUG("me4000_ao_write_cont() is executed\n");
1917
1918 init_waitqueue_head(&queue);
1919
1920 /* Check count */
1921 if (count <= 0) {
1922 PDEBUG("me4000_ao_write_cont():Count is 0\n");
1923 return 0;
1924 }
1925
1926 if (filep->f_flags & O_APPEND) {
1927 PDEBUG("me4000_ao_write_cont():Append data to data stream\n");
1928 while (count > 0) {
1929 if (filep->f_flags & O_NONBLOCK) {
1930 if (ao_context->pipe_flag) {
1931 printk(KERN_ERR
1932 "ME4000:me4000_ao_write_cont():Broken pipe in nonblocking write\n");
1933 return -EPIPE;
1934 }
1935 c = me4000_space_to_end(ao_context->circ_buf,
1936 ME4000_AO_BUFFER_COUNT);
1937 if (!c) {
1938 PDEBUG
1939 ("me4000_ao_write_cont():Returning from nonblocking write\n");
1940 break;
1941 }
1942 } else {
1943 wait_event_interruptible(ao_context->wait_queue,
1944 (c =
1945 me4000_space_to_end
1946 (ao_context->circ_buf,
1947 ME4000_AO_BUFFER_COUNT)));
1948 if (ao_context->pipe_flag) {
1949 printk(KERN_ERR
1950 "me4000_ao_write_cont():Broken pipe in blocking write\n");
1951 return -EPIPE;
1952 }
1953 if (signal_pending(current)) {
1954 printk(KERN_ERR
1955 "me4000_ao_write_cont():Wait for free buffer interrupted from signal\n");
1956 return -EINTR;
1957 }
1958 }
1959
1960 PDEBUG("me4000_ao_write_cont():Space to end = %d\n", c);
1961
1962 /* Only able to write size of free buffer or size of count */
1963 if (count < c)
1964 c = count;
1965
1966 k = 2 * c;
1967 k -= copy_from_user(ao_context->circ_buf.buf +
1968 ao_context->circ_buf.head, buffer,
1969 k);
1970 c = k / 2;
1971 PDEBUG
1972 ("me4000_ao_write_cont():Copy %d values from user space\n",
1973 c);
1974
1975 if (!c)
1976 return -EFAULT;
1977
1978 ao_context->circ_buf.head =
1979 (ao_context->circ_buf.head +
1980 c) & (ME4000_AO_BUFFER_COUNT - 1);
1981 buffer += c;
1982 count -= c;
1983 ret += c;
1984
1985 /* Values are now available so enable interrupts */
1986 spin_lock_irqsave(&ao_context->int_lock, flags);
1987 if (me4000_buf_count
1988 (ao_context->circ_buf, ME4000_AO_BUFFER_COUNT)) {
1989 tmp = me4000_inl(ao_context->ctrl_reg);
1990 tmp |= ME4000_AO_CTRL_BIT_ENABLE_IRQ;
1991 me4000_outl(tmp, ao_context->ctrl_reg);
1992 }
1993 spin_unlock_irqrestore(&ao_context->int_lock, flags);
1994 }
1995
1996 /* Wait until the state machine is stopped if O_SYNC is set */
1997 if (filep->f_flags & O_SYNC) {
1998 while (inl(ao_context->status_reg) &
1999 ME4000_AO_STATUS_BIT_FSM) {
2000 interruptible_sleep_on_timeout(&queue, 1);
2001 if (ao_context->pipe_flag) {
2002 PDEBUG
2003 ("me4000_ao_write_cont():Broken pipe detected after sync\n");
2004 return -EPIPE;
2005 }
2006 if (signal_pending(current)) {
2007 printk(KERN_ERR
2008 "me4000_ao_write_cont():Wait on state machine after sync interrupted\n");
2009 return -EINTR;
2010 }
2011 }
2012 }
2013 } else {
2014 PDEBUG("me4000_ao_write_cont():Preload DAC FIFO\n");
2015 if ((me4000_inl(ao_context->status_reg) &
2016 ME4000_AO_STATUS_BIT_FSM)) {
2017 printk(KERN_ERR
2018 "me4000_ao_write_cont():Can't Preload DAC FIFO while conversion is running\n");
2019 return -EBUSY;
2020 }
2021
2022 /* Clear the FIFO */
2023 spin_lock_irqsave(&ao_context->int_lock, flags);
2024 tmp = me4000_inl(ao_context->ctrl_reg);
2025 tmp &=
2026 ~(ME4000_AO_CTRL_BIT_ENABLE_FIFO |
2027 ME4000_AO_CTRL_BIT_ENABLE_IRQ);
2028 me4000_outl(tmp, ao_context->ctrl_reg);
2029 tmp |= ME4000_AO_CTRL_BIT_ENABLE_FIFO;
2030 me4000_outl(tmp, ao_context->ctrl_reg);
2031 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2032
2033 /* Clear the circular buffer */
2034 ao_context->circ_buf.head = 0;
2035 ao_context->circ_buf.tail = 0;
2036
2037 /* Reset the broken pipe flag */
2038 ao_context->pipe_flag = 0;
2039
2040 /* Only able to write size of fifo or count */
2041 c = ME4000_AO_FIFO_COUNT;
2042 if (count < c)
2043 c = count;
2044
2045 PDEBUG
2046 ("me4000_ao_write_cont():Write %d values to DAC on 0x%lX\n",
2047 c, ao_context->fifo_reg);
2048
2049 /* Write values to the fifo */
2050 for (i = 0; i < c; i++) {
2051 if (get_user(svalue, buffer))
2052 return -EFAULT;
2053
2054 if (((ao_context->fifo_reg & 0xFF) ==
2055 ME4000_AO_01_FIFO_REG)
2056 || ((ao_context->fifo_reg & 0xFF) ==
2057 ME4000_AO_03_FIFO_REG)) {
2058 lvalue = ((u32) svalue) << 16;
2059 } else
2060 lvalue = (u32) svalue;
2061
2062 outl(lvalue, ao_context->fifo_reg);
2063 buffer++;
2064 }
2065 count -= c;
2066 ret += c;
2067
2068 while (1) {
2069 /* Get free buffer */
2070 c = me4000_space_to_end(ao_context->circ_buf,
2071 ME4000_AO_BUFFER_COUNT);
2072
2073 if (c == 0)
2074 return (2 * ret);
2075
2076 /* Only able to write size of free buffer or size of count */
2077 if (count < c)
2078 c = count;
2079
2080 /* If count = 0 return to user */
2081 if (c <= 0) {
2082 PDEBUG
2083 ("me4000_ao_write_cont():Count reached 0\n");
2084 break;
2085 }
2086
2087 k = 2 * c;
2088 k -= copy_from_user(ao_context->circ_buf.buf +
2089 ao_context->circ_buf.head, buffer,
2090 k);
2091 c = k / 2;
2092 PDEBUG
2093 ("me4000_ao_write_cont():Wrote %d values to buffer\n",
2094 c);
2095
2096 if (!c)
2097 return -EFAULT;
2098
2099 ao_context->circ_buf.head =
2100 (ao_context->circ_buf.head +
2101 c) & (ME4000_AO_BUFFER_COUNT - 1);
2102 buffer += c;
2103 count -= c;
2104 ret += c;
2105
2106 /* If values in the buffer are available so enable interrupts */
2107 spin_lock_irqsave(&ao_context->int_lock, flags);
2108 if (me4000_buf_count
2109 (ao_context->circ_buf, ME4000_AO_BUFFER_COUNT)) {
2110 PDEBUG
2111 ("me4000_ao_write_cont():Enable Interrupts\n");
2112 tmp = me4000_inl(ao_context->ctrl_reg);
2113 tmp |= ME4000_AO_CTRL_BIT_ENABLE_IRQ;
2114 me4000_outl(tmp, ao_context->ctrl_reg);
2115 }
2116 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2117 }
2118 }
2119
2120 if (filep->f_flags & O_NONBLOCK) {
2121 return (ret == 0) ? -EAGAIN : 2 * ret;
2122 }
2123
2124 return 2 * ret;
2125 }
2126
2127 static unsigned int me4000_ao_poll_cont(struct file *file_p, poll_table *wait)
2128 {
2129 struct me4000_ao_context *ao_context;
2130 unsigned long mask = 0;
2131
2132 CALL_PDEBUG("me4000_ao_poll_cont() is executed\n");
2133
2134 ao_context = file_p->private_data;
2135
2136 poll_wait(file_p, &ao_context->wait_queue, wait);
2137
2138 /* Get free buffer */
2139 if (me4000_space_to_end(ao_context->circ_buf, ME4000_AO_BUFFER_COUNT))
2140 mask |= POLLOUT | POLLWRNORM;
2141
2142 CALL_PDEBUG("me4000_ao_poll_cont():Return mask %lX\n", mask);
2143
2144 return mask;
2145 }
2146
2147 static int me4000_ao_fsync_cont(struct file *file_p, struct dentry *dentry_p,
2148 int datasync)
2149 {
2150 struct me4000_ao_context *ao_context;
2151 wait_queue_head_t queue;
2152
2153 CALL_PDEBUG("me4000_ao_fsync_cont() is executed\n");
2154
2155 ao_context = file_p->private_data;
2156 init_waitqueue_head(&queue);
2157
2158 while (inl(ao_context->status_reg) & ME4000_AO_STATUS_BIT_FSM) {
2159 interruptible_sleep_on_timeout(&queue, 1);
2160 wait_event_interruptible_timeout(queue,
2161 !(inl(ao_context->status_reg) & ME4000_AO_STATUS_BIT_FSM),
2162 1);
2163 if (ao_context->pipe_flag) {
2164 printk(KERN_ERR
2165 "%s:Broken pipe detected\n", __func__);
2166 return -EPIPE;
2167 }
2168
2169 if (signal_pending(current)) {
2170 printk(KERN_ERR
2171 "%s:Wait on state machine interrupted\n",
2172 __func__);
2173 return -EINTR;
2174 }
2175 }
2176
2177 return 0;
2178 }
2179
2180 static int me4000_ao_ioctl_sing(struct inode *inode_p, struct file *file_p,
2181 unsigned int service, unsigned long arg)
2182 {
2183 struct me4000_ao_context *ao_context;
2184
2185 CALL_PDEBUG("me4000_ao_ioctl_sing() is executed\n");
2186
2187 ao_context = file_p->private_data;
2188
2189 if (_IOC_TYPE(service) != ME4000_MAGIC) {
2190 return -ENOTTY;
2191 PDEBUG("me4000_ao_ioctl_sing():Wrong magic number\n");
2192 }
2193
2194 switch (service) {
2195 case ME4000_AO_EX_TRIG_SETUP:
2196 return me4000_ao_ex_trig_set_edge((int *)arg, ao_context);
2197 case ME4000_AO_EX_TRIG_ENABLE:
2198 return me4000_ao_ex_trig_enable(ao_context);
2199 case ME4000_AO_EX_TRIG_DISABLE:
2200 return me4000_ao_ex_trig_disable(ao_context);
2201 case ME4000_AO_PRELOAD:
2202 return me4000_ao_preload(ao_context);
2203 case ME4000_AO_PRELOAD_UPDATE:
2204 return me4000_ao_preload_update(ao_context);
2205 case ME4000_GET_USER_INFO:
2206 return me4000_get_user_info((struct me4000_user_info *)arg,
2207 ao_context->board_info);
2208 case ME4000_AO_SIMULTANEOUS_EX_TRIG:
2209 return me4000_ao_simultaneous_ex_trig(ao_context);
2210 case ME4000_AO_SIMULTANEOUS_SW:
2211 return me4000_ao_simultaneous_sw(ao_context);
2212 case ME4000_AO_SIMULTANEOUS_DISABLE:
2213 return me4000_ao_simultaneous_disable(ao_context);
2214 case ME4000_AO_SIMULTANEOUS_UPDATE:
2215 return
2216 me4000_ao_simultaneous_update(
2217 (struct me4000_ao_channel_list *)arg,
2218 ao_context);
2219 case ME4000_AO_EX_TRIG_TIMEOUT:
2220 return me4000_ao_ex_trig_timeout((unsigned long *)arg,
2221 ao_context);
2222 case ME4000_AO_DISABLE_DO:
2223 return me4000_ao_disable_do(ao_context);
2224 default:
2225 printk(KERN_ERR
2226 "me4000_ao_ioctl_sing():Service number invalid\n");
2227 return -ENOTTY;
2228 }
2229
2230 return 0;
2231 }
2232
2233 static int me4000_ao_ioctl_wrap(struct inode *inode_p, struct file *file_p,
2234 unsigned int service, unsigned long arg)
2235 {
2236 struct me4000_ao_context *ao_context;
2237
2238 CALL_PDEBUG("me4000_ao_ioctl_wrap() is executed\n");
2239
2240 ao_context = file_p->private_data;
2241
2242 if (_IOC_TYPE(service) != ME4000_MAGIC) {
2243 return -ENOTTY;
2244 PDEBUG("me4000_ao_ioctl_wrap():Wrong magic number\n");
2245 }
2246
2247 switch (service) {
2248 case ME4000_AO_START:
2249 return me4000_ao_start((unsigned long *)arg, ao_context);
2250 case ME4000_AO_STOP:
2251 return me4000_ao_stop(ao_context);
2252 case ME4000_AO_IMMEDIATE_STOP:
2253 return me4000_ao_immediate_stop(ao_context);
2254 case ME4000_AO_RESET:
2255 return me4000_ao_reset(ao_context);
2256 case ME4000_AO_TIMER_SET_DIVISOR:
2257 return me4000_ao_timer_set_divisor((u32 *) arg, ao_context);
2258 case ME4000_AO_EX_TRIG_SETUP:
2259 return me4000_ao_ex_trig_set_edge((int *)arg, ao_context);
2260 case ME4000_AO_EX_TRIG_ENABLE:
2261 return me4000_ao_ex_trig_enable(ao_context);
2262 case ME4000_AO_EX_TRIG_DISABLE:
2263 return me4000_ao_ex_trig_disable(ao_context);
2264 case ME4000_GET_USER_INFO:
2265 return me4000_get_user_info((struct me4000_user_info *)arg,
2266 ao_context->board_info);
2267 case ME4000_AO_FSM_STATE:
2268 return me4000_ao_fsm_state((int *)arg, ao_context);
2269 case ME4000_AO_ENABLE_DO:
2270 return me4000_ao_enable_do(ao_context);
2271 case ME4000_AO_DISABLE_DO:
2272 return me4000_ao_disable_do(ao_context);
2273 case ME4000_AO_SYNCHRONOUS_EX_TRIG:
2274 return me4000_ao_synchronous_ex_trig(ao_context);
2275 case ME4000_AO_SYNCHRONOUS_SW:
2276 return me4000_ao_synchronous_sw(ao_context);
2277 case ME4000_AO_SYNCHRONOUS_DISABLE:
2278 return me4000_ao_synchronous_disable(ao_context);
2279 default:
2280 return -ENOTTY;
2281 }
2282 return 0;
2283 }
2284
2285 static int me4000_ao_ioctl_cont(struct inode *inode_p, struct file *file_p,
2286 unsigned int service, unsigned long arg)
2287 {
2288 struct me4000_ao_context *ao_context;
2289
2290 CALL_PDEBUG("me4000_ao_ioctl_cont() is executed\n");
2291
2292 ao_context = file_p->private_data;
2293
2294 if (_IOC_TYPE(service) != ME4000_MAGIC) {
2295 return -ENOTTY;
2296 PDEBUG("me4000_ao_ioctl_cont():Wrong magic number\n");
2297 }
2298
2299 switch (service) {
2300 case ME4000_AO_START:
2301 return me4000_ao_start((unsigned long *)arg, ao_context);
2302 case ME4000_AO_STOP:
2303 return me4000_ao_stop(ao_context);
2304 case ME4000_AO_IMMEDIATE_STOP:
2305 return me4000_ao_immediate_stop(ao_context);
2306 case ME4000_AO_RESET:
2307 return me4000_ao_reset(ao_context);
2308 case ME4000_AO_TIMER_SET_DIVISOR:
2309 return me4000_ao_timer_set_divisor((u32 *) arg, ao_context);
2310 case ME4000_AO_EX_TRIG_SETUP:
2311 return me4000_ao_ex_trig_set_edge((int *)arg, ao_context);
2312 case ME4000_AO_EX_TRIG_ENABLE:
2313 return me4000_ao_ex_trig_enable(ao_context);
2314 case ME4000_AO_EX_TRIG_DISABLE:
2315 return me4000_ao_ex_trig_disable(ao_context);
2316 case ME4000_AO_ENABLE_DO:
2317 return me4000_ao_enable_do(ao_context);
2318 case ME4000_AO_DISABLE_DO:
2319 return me4000_ao_disable_do(ao_context);
2320 case ME4000_AO_FSM_STATE:
2321 return me4000_ao_fsm_state((int *)arg, ao_context);
2322 case ME4000_GET_USER_INFO:
2323 return me4000_get_user_info((struct me4000_user_info *)arg,
2324 ao_context->board_info);
2325 case ME4000_AO_SYNCHRONOUS_EX_TRIG:
2326 return me4000_ao_synchronous_ex_trig(ao_context);
2327 case ME4000_AO_SYNCHRONOUS_SW:
2328 return me4000_ao_synchronous_sw(ao_context);
2329 case ME4000_AO_SYNCHRONOUS_DISABLE:
2330 return me4000_ao_synchronous_disable(ao_context);
2331 case ME4000_AO_GET_FREE_BUFFER:
2332 return me4000_ao_get_free_buffer((unsigned long *)arg,
2333 ao_context);
2334 default:
2335 return -ENOTTY;
2336 }
2337 return 0;
2338 }
2339
2340 static int me4000_ao_start(unsigned long *arg,
2341 struct me4000_ao_context *ao_context)
2342 {
2343 u32 tmp;
2344 wait_queue_head_t queue;
2345 unsigned long ref;
2346 unsigned long timeout;
2347 unsigned long flags;
2348
2349 CALL_PDEBUG("me4000_ao_start() is executed\n");
2350
2351 if (get_user(timeout, arg)) {
2352 printk(KERN_ERR
2353 "me4000_ao_start():Cannot copy data from user\n");
2354 return -EFAULT;
2355 }
2356
2357 init_waitqueue_head(&queue);
2358
2359 spin_lock_irqsave(&ao_context->int_lock, flags);
2360 tmp = inl(ao_context->ctrl_reg);
2361 tmp &= ~(ME4000_AO_CTRL_BIT_STOP | ME4000_AO_CTRL_BIT_IMMEDIATE_STOP);
2362 me4000_outl(tmp, ao_context->ctrl_reg);
2363 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2364
2365 if ((tmp & ME4000_AO_CTRL_BIT_ENABLE_EX_TRIG)) {
2366 if (timeout) {
2367 ref = jiffies;
2368 while (!
2369 (inl(ao_context->status_reg) &
2370 ME4000_AO_STATUS_BIT_FSM)) {
2371 interruptible_sleep_on_timeout(&queue, 1);
2372 if (signal_pending(current)) {
2373 printk(KERN_ERR
2374 "ME4000:me4000_ao_start():Wait on start of state machine interrupted\n");
2375 return -EINTR;
2376 }
2377 if (((jiffies - ref) > (timeout * HZ / USER_HZ))) { // 2.6 has diffrent definitions for HZ in user and kernel space
2378 printk(KERN_ERR
2379 "ME4000:me4000_ao_start():Timeout reached\n");
2380 return -EIO;
2381 }
2382 }
2383 }
2384 } else {
2385 me4000_outl(0x8000, ao_context->single_reg);
2386 }
2387
2388 return 0;
2389 }
2390
2391 static int me4000_ao_stop(struct me4000_ao_context *ao_context)
2392 {
2393 u32 tmp;
2394 wait_queue_head_t queue;
2395 unsigned long flags;
2396
2397 init_waitqueue_head(&queue);
2398
2399 CALL_PDEBUG("me4000_ao_stop() is executed\n");
2400
2401 /* Set the stop bit */
2402 spin_lock_irqsave(&ao_context->int_lock, flags);
2403 tmp = inl(ao_context->ctrl_reg);
2404 tmp |= ME4000_AO_CTRL_BIT_STOP;
2405 me4000_outl(tmp, ao_context->ctrl_reg);
2406 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2407
2408 while (inl(ao_context->status_reg) & ME4000_AO_STATUS_BIT_FSM) {
2409 interruptible_sleep_on_timeout(&queue, 1);
2410 if (signal_pending(current)) {
2411 printk(KERN_ERR
2412 "me4000_ao_stop():Wait on state machine after stop interrupted\n");
2413 return -EINTR;
2414 }
2415 }
2416
2417 /* Clear the stop bit */
2418 //tmp &= ~ME4000_AO_CTRL_BIT_STOP;
2419 //me4000_outl(tmp, ao_context->ctrl_reg);
2420
2421 return 0;
2422 }
2423
2424 static int me4000_ao_immediate_stop(struct me4000_ao_context *ao_context)
2425 {
2426 u32 tmp;
2427 wait_queue_head_t queue;
2428 unsigned long flags;
2429
2430 init_waitqueue_head(&queue);
2431
2432 CALL_PDEBUG("me4000_ao_immediate_stop() is executed\n");
2433
2434 spin_lock_irqsave(&ao_context->int_lock, flags);
2435 tmp = inl(ao_context->ctrl_reg);
2436 tmp |= ME4000_AO_CTRL_BIT_STOP | ME4000_AO_CTRL_BIT_IMMEDIATE_STOP;
2437 me4000_outl(tmp, ao_context->ctrl_reg);
2438 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2439
2440 while (inl(ao_context->status_reg) & ME4000_AO_STATUS_BIT_FSM) {
2441 interruptible_sleep_on_timeout(&queue, 1);
2442 if (signal_pending(current)) {
2443 printk(KERN_ERR
2444 "me4000_ao_immediate_stop():Wait on state machine after stop interrupted\n");
2445 return -EINTR;
2446 }
2447 }
2448
2449 /* Clear the stop bits */
2450 //tmp &= ~(ME4000_AO_CTRL_BIT_STOP | ME4000_AO_CTRL_BIT_IMMEDIATE_STOP);
2451 //me4000_outl(tmp, ao_context->ctrl_reg);
2452
2453 return 0;
2454 }
2455
2456 static int me4000_ao_timer_set_divisor(u32 *arg,
2457 struct me4000_ao_context *ao_context)
2458 {
2459 u32 divisor;
2460 u32 tmp;
2461
2462 CALL_PDEBUG("me4000_ao_timer set_divisor() is executed\n");
2463
2464 if (get_user(divisor, arg))
2465 return -EFAULT;
2466
2467 /* Check if the state machine is stopped */
2468 tmp = me4000_inl(ao_context->status_reg);
2469 if (tmp & ME4000_AO_STATUS_BIT_FSM) {
2470 printk(KERN_ERR
2471 "me4000_ao_timer_set_divisor():Can't set timer while DAC is running\n");
2472 return -EBUSY;
2473 }
2474
2475 PDEBUG("me4000_ao_timer set_divisor():Divisor from user = %d\n",
2476 divisor);
2477
2478 /* Check if the divisor is right. ME4000_AO_MIN_TICKS is the lowest */
2479 if (divisor < ME4000_AO_MIN_TICKS) {
2480 printk(KERN_ERR
2481 "ME4000:me4000_ao_timer set_divisor():Divisor to low\n");
2482 return -EINVAL;
2483 }
2484
2485 /* Fix bug in Firmware */
2486 divisor -= 2;
2487
2488 PDEBUG("me4000_ao_timer set_divisor():Divisor to HW = %d\n", divisor);
2489
2490 /* Write the divisor */
2491 me4000_outl(divisor, ao_context->timer_reg);
2492
2493 return 0;
2494 }
2495
2496 static int me4000_ao_ex_trig_set_edge(int *arg,
2497 struct me4000_ao_context *ao_context)
2498 {
2499 int mode;
2500 u32 tmp;
2501 unsigned long flags;
2502
2503 CALL_PDEBUG("me4000_ao_ex_trig_set_edge() is executed\n");
2504
2505 if (get_user(mode, arg))
2506 return -EFAULT;
2507
2508 /* Check if the state machine is stopped */
2509 tmp = me4000_inl(ao_context->status_reg);
2510 if (tmp & ME4000_AO_STATUS_BIT_FSM) {
2511 printk(KERN_ERR
2512 "me4000_ao_ex_trig_set_edge():Can't set trigger while DAC is running\n");
2513 return -EBUSY;
2514 }
2515
2516 if (mode == ME4000_AO_TRIGGER_EXT_EDGE_RISING) {
2517 spin_lock_irqsave(&ao_context->int_lock, flags);
2518 tmp = me4000_inl(ao_context->ctrl_reg);
2519 tmp &=
2520 ~(ME4000_AO_CTRL_BIT_EX_TRIG_EDGE |
2521 ME4000_AO_CTRL_BIT_EX_TRIG_BOTH);
2522 me4000_outl(tmp, ao_context->ctrl_reg);
2523 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2524 } else if (mode == ME4000_AO_TRIGGER_EXT_EDGE_FALLING) {
2525 spin_lock_irqsave(&ao_context->int_lock, flags);
2526 tmp = me4000_inl(ao_context->ctrl_reg);
2527 tmp &= ~ME4000_AO_CTRL_BIT_EX_TRIG_BOTH;
2528 tmp |= ME4000_AO_CTRL_BIT_EX_TRIG_EDGE;
2529 me4000_outl(tmp, ao_context->ctrl_reg);
2530 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2531 } else if (mode == ME4000_AO_TRIGGER_EXT_EDGE_BOTH) {
2532 spin_lock_irqsave(&ao_context->int_lock, flags);
2533 tmp = me4000_inl(ao_context->ctrl_reg);
2534 tmp |=
2535 ME4000_AO_CTRL_BIT_EX_TRIG_EDGE |
2536 ME4000_AO_CTRL_BIT_EX_TRIG_BOTH;
2537 me4000_outl(tmp, ao_context->ctrl_reg);
2538 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2539 } else {
2540 printk(KERN_ERR
2541 "me4000_ao_ex_trig_set_edge():Invalid trigger mode\n");
2542 return -EINVAL;
2543 }
2544
2545 return 0;
2546 }
2547
2548 static int me4000_ao_ex_trig_enable(struct me4000_ao_context *ao_context)
2549 {
2550 u32 tmp;
2551 unsigned long flags;
2552
2553 CALL_PDEBUG("me4000_ao_ex_trig_enable() is executed\n");
2554
2555 /* Check if the state machine is stopped */
2556 tmp = me4000_inl(ao_context->status_reg);
2557 if (tmp & ME4000_AO_STATUS_BIT_FSM) {
2558 printk(KERN_ERR
2559 "me4000_ao_ex_trig_enable():Can't enable trigger while DAC is running\n");
2560 return -EBUSY;
2561 }
2562
2563 spin_lock_irqsave(&ao_context->int_lock, flags);
2564 tmp = me4000_inl(ao_context->ctrl_reg);
2565 tmp |= ME4000_AO_CTRL_BIT_ENABLE_EX_TRIG;
2566 me4000_outl(tmp, ao_context->ctrl_reg);
2567 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2568
2569 return 0;
2570 }
2571
2572 static int me4000_ao_ex_trig_disable(struct me4000_ao_context *ao_context)
2573 {
2574 u32 tmp;
2575 unsigned long flags;
2576
2577 CALL_PDEBUG("me4000_ao_ex_trig_disable() is executed\n");
2578
2579 /* Check if the state machine is stopped */
2580 tmp = me4000_inl(ao_context->status_reg);
2581 if (tmp & ME4000_AO_STATUS_BIT_FSM) {
2582 printk(KERN_ERR
2583 "me4000_ao_ex_trig_disable():Can't disable trigger while DAC is running\n");
2584 return -EBUSY;
2585 }
2586
2587 spin_lock_irqsave(&ao_context->int_lock, flags);
2588 tmp = me4000_inl(ao_context->ctrl_reg);
2589 tmp &= ~ME4000_AO_CTRL_BIT_ENABLE_EX_TRIG;
2590 me4000_outl(tmp, ao_context->ctrl_reg);
2591 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2592
2593 return 0;
2594 }
2595
2596 static int me4000_ao_simultaneous_disable(struct me4000_ao_context *ao_context)
2597 {
2598 u32 tmp;
2599
2600 CALL_PDEBUG("me4000_ao_simultaneous_disable() is executed\n");
2601
2602 /* Check if the state machine is stopped */
2603 /* Be careful here because this function is called from
2604 me4000_ao_synchronous disable */
2605 tmp = me4000_inl(ao_context->status_reg);
2606 if (tmp & ME4000_AO_STATUS_BIT_FSM) {
2607 printk(KERN_ERR
2608 "me4000_ao_simultaneous_disable():Can't disable while DAC is running\n");
2609 return -EBUSY;
2610 }
2611
2612 spin_lock(&ao_context->board_info->preload_lock);
2613 tmp = me4000_inl(ao_context->preload_reg);
2614 tmp &= ~(0x1 << ao_context->index); // Disable preload bit
2615 tmp &= ~(0x1 << (ao_context->index + 16)); // Disable hw simultaneous bit
2616 me4000_outl(tmp, ao_context->preload_reg);
2617 spin_unlock(&ao_context->board_info->preload_lock);
2618
2619 return 0;
2620 }
2621
2622 static int me4000_ao_simultaneous_ex_trig(struct me4000_ao_context *ao_context)
2623 {
2624 u32 tmp;
2625
2626 CALL_PDEBUG("me4000_ao_simultaneous_ex_trig() is executed\n");
2627
2628 spin_lock(&ao_context->board_info->preload_lock);
2629 tmp = me4000_inl(ao_context->preload_reg);
2630 tmp |= (0x1 << ao_context->index); // Enable preload bit
2631 tmp |= (0x1 << (ao_context->index + 16)); // Enable hw simultaneous bit
2632 me4000_outl(tmp, ao_context->preload_reg);
2633 spin_unlock(&ao_context->board_info->preload_lock);
2634
2635 return 0;
2636 }
2637
2638 static int me4000_ao_simultaneous_sw(struct me4000_ao_context *ao_context)
2639 {
2640 u32 tmp;
2641
2642 CALL_PDEBUG("me4000_ao_simultaneous_sw() is executed\n");
2643
2644 spin_lock(&ao_context->board_info->preload_lock);
2645 tmp = me4000_inl(ao_context->preload_reg);
2646 tmp |= (0x1 << ao_context->index); // Enable preload bit
2647 tmp &= ~(0x1 << (ao_context->index + 16)); // Disable hw simultaneous bit
2648 me4000_outl(tmp, ao_context->preload_reg);
2649 spin_unlock(&ao_context->board_info->preload_lock);
2650
2651 return 0;
2652 }
2653
2654 static int me4000_ao_preload(struct me4000_ao_context *ao_context)
2655 {
2656 CALL_PDEBUG("me4000_ao_preload() is executed\n");
2657 return me4000_ao_simultaneous_sw(ao_context);
2658 }
2659
2660 static int me4000_ao_preload_update(struct me4000_ao_context *ao_context)
2661 {
2662 u32 tmp;
2663 u32 ctrl;
2664 struct list_head *entry;
2665
2666 CALL_PDEBUG("me4000_ao_preload_update() is executed\n");
2667
2668 spin_lock(&ao_context->board_info->preload_lock);
2669 tmp = me4000_inl(ao_context->preload_reg);
2670 list_for_each(entry, &ao_context->board_info->ao_context_list) {
2671 /* The channels we update must be in the following state :
2672 - Mode A
2673 - Hardware trigger is disabled
2674 - Corresponding simultaneous bit is reset
2675 */
2676 ctrl = me4000_inl(ao_context->ctrl_reg);
2677 if (!
2678 (ctrl &
2679 (ME4000_AO_CTRL_BIT_MODE_0 | ME4000_AO_CTRL_BIT_MODE_1 |
2680 ME4000_AO_CTRL_BIT_ENABLE_EX_TRIG))) {
2681 if (!
2682 (tmp &
2683 (0x1 <<
2684 (((struct me4000_ao_context *)entry)->index
2685 + 16)))) {
2686 tmp &=
2687 ~(0x1 <<
2688 (((struct me4000_ao_context *)entry)->
2689 index));
2690 }
2691 }
2692 }
2693 me4000_outl(tmp, ao_context->preload_reg);
2694 spin_unlock(&ao_context->board_info->preload_lock);
2695
2696 return 0;
2697 }
2698
2699 static int me4000_ao_simultaneous_update(struct me4000_ao_channel_list *arg,
2700 struct me4000_ao_context *ao_context)
2701 {
2702 int err;
2703 int i;
2704 u32 tmp;
2705 struct me4000_ao_channel_list channels;
2706
2707 CALL_PDEBUG("me4000_ao_simultaneous_update() is executed\n");
2708
2709 /* Copy data from user */
2710 err = copy_from_user(&channels, arg,
2711 sizeof(struct me4000_ao_channel_list));
2712 if (err) {
2713 printk(KERN_ERR
2714 "ME4000:me4000_ao_simultaneous_update():Can't copy command\n");
2715 return -EFAULT;
2716 }
2717
2718 channels.list =
2719 kzalloc(sizeof(unsigned long) * channels.count, GFP_KERNEL);
2720 if (!channels.list) {
2721 printk(KERN_ERR
2722 "ME4000:me4000_ao_simultaneous_update():Can't get buffer\n");
2723 return -ENOMEM;
2724 }
2725
2726 /* Copy channel list from user */
2727 err =
2728 copy_from_user(channels.list, arg->list,
2729 sizeof(unsigned long) * channels.count);
2730 if (err) {
2731 printk(KERN_ERR
2732 "ME4000:me4000_ao_simultaneous_update():Can't copy list\n");
2733 kfree(channels.list);
2734 return -EFAULT;
2735 }
2736
2737 spin_lock(&ao_context->board_info->preload_lock);
2738 tmp = me4000_inl(ao_context->preload_reg);
2739 for (i = 0; i < channels.count; i++) {
2740 if (channels.list[i] >
2741 ao_context->board_info->board_p->ao.count) {
2742 spin_unlock(&ao_context->board_info->preload_lock);
2743 kfree(channels.list);
2744 printk(KERN_ERR
2745 "ME4000:me4000_ao_simultaneous_update():Invalid board number specified\n");
2746 return -EFAULT;
2747 }
2748 tmp &= ~(0x1 << channels.list[i]); // Clear the preload bit
2749 tmp &= ~(0x1 << (channels.list[i] + 16)); // Clear the hw simultaneous bit
2750 }
2751 me4000_outl(tmp, ao_context->preload_reg);
2752 spin_unlock(&ao_context->board_info->preload_lock);
2753 kfree(channels.list);
2754
2755 return 0;
2756 }
2757
2758 static int me4000_ao_synchronous_ex_trig(struct me4000_ao_context *ao_context)
2759 {
2760 u32 tmp;
2761 unsigned long flags;
2762
2763 CALL_PDEBUG("me4000_ao_synchronous_ex_trig() is executed\n");
2764
2765 /* Check if the state machine is stopped */
2766 tmp = me4000_inl(ao_context->status_reg);
2767 if (tmp & ME4000_AO_STATUS_BIT_FSM) {
2768 printk(KERN_ERR
2769 "me4000_ao_synchronous_ex_trig(): DAC is running\n");
2770 return -EBUSY;
2771 }
2772
2773 spin_lock(&ao_context->board_info->preload_lock);
2774 tmp = me4000_inl(ao_context->preload_reg);
2775 tmp &= ~(0x1 << ao_context->index); // Disable synchronous sw bit
2776 tmp |= 0x1 << (ao_context->index + 16); // Enable synchronous hw bit
2777 me4000_outl(tmp, ao_context->preload_reg);
2778 spin_unlock(&ao_context->board_info->preload_lock);
2779
2780 /* Make runnable */
2781 spin_lock_irqsave(&ao_context->int_lock, flags);
2782 tmp = me4000_inl(ao_context->ctrl_reg);
2783 if (tmp & (ME4000_AO_CTRL_BIT_MODE_0 | ME4000_AO_CTRL_BIT_MODE_1)) {
2784 tmp &=
2785 ~(ME4000_AO_CTRL_BIT_STOP |
2786 ME4000_AO_CTRL_BIT_IMMEDIATE_STOP);
2787 me4000_outl(tmp, ao_context->ctrl_reg);
2788 }
2789 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2790
2791 return 0;
2792 }
2793
2794 static int me4000_ao_synchronous_sw(struct me4000_ao_context *ao_context)
2795 {
2796 u32 tmp;
2797 unsigned long flags;
2798
2799 CALL_PDEBUG("me4000_ao_synchronous_sw() is executed\n");
2800
2801 /* Check if the state machine is stopped */
2802 tmp = me4000_inl(ao_context->status_reg);
2803 if (tmp & ME4000_AO_STATUS_BIT_FSM) {
2804 printk(KERN_ERR "me4000_ao_synchronous_sw(): DAC is running\n");
2805 return -EBUSY;
2806 }
2807
2808 spin_lock(&ao_context->board_info->preload_lock);
2809 tmp = me4000_inl(ao_context->preload_reg);
2810 tmp |= 0x1 << ao_context->index; // Enable synchronous sw bit
2811 tmp &= ~(0x1 << (ao_context->index + 16)); // Disable synchronous hw bit
2812 me4000_outl(tmp, ao_context->preload_reg);
2813 spin_unlock(&ao_context->board_info->preload_lock);
2814
2815 /* Make runnable */
2816 spin_lock_irqsave(&ao_context->int_lock, flags);
2817 tmp = me4000_inl(ao_context->ctrl_reg);
2818 if (tmp & (ME4000_AO_CTRL_BIT_MODE_0 | ME4000_AO_CTRL_BIT_MODE_1)) {
2819 tmp &=
2820 ~(ME4000_AO_CTRL_BIT_STOP |
2821 ME4000_AO_CTRL_BIT_IMMEDIATE_STOP);
2822 me4000_outl(tmp, ao_context->ctrl_reg);
2823 }
2824 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2825
2826 return 0;
2827 }
2828
2829 static int me4000_ao_synchronous_disable(struct me4000_ao_context *ao_context)
2830 {
2831 return me4000_ao_simultaneous_disable(ao_context);
2832 }
2833
2834 static int me4000_ao_get_free_buffer(unsigned long *arg,
2835 struct me4000_ao_context *ao_context)
2836 {
2837 unsigned long c;
2838 int err;
2839
2840 c = me4000_buf_space(ao_context->circ_buf, ME4000_AO_BUFFER_COUNT);
2841
2842 err = copy_to_user(arg, &c, sizeof(unsigned long));
2843 if (err) {
2844 printk(KERN_ERR
2845 "%s:Can't copy to user space\n", __func__);
2846 return -EFAULT;
2847 }
2848
2849 return 0;
2850 }
2851
2852 static int me4000_ao_ex_trig_timeout(unsigned long *arg,
2853 struct me4000_ao_context *ao_context)
2854 {
2855 u32 tmp;
2856 wait_queue_head_t queue;
2857 unsigned long ref;
2858 unsigned long timeout;
2859
2860 CALL_PDEBUG("me4000_ao_ex_trig_timeout() is executed\n");
2861
2862 if (get_user(timeout, arg)) {
2863 printk(KERN_ERR
2864 "me4000_ao_ex_trig_timeout():Cannot copy data from user\n");
2865 return -EFAULT;
2866 }
2867
2868 init_waitqueue_head(&queue);
2869
2870 tmp = inl(ao_context->ctrl_reg);
2871
2872 if ((tmp & ME4000_AO_CTRL_BIT_ENABLE_EX_TRIG)) {
2873 if (timeout) {
2874 ref = jiffies;
2875 while ((inl(ao_context->status_reg) &
2876 ME4000_AO_STATUS_BIT_FSM)) {
2877 interruptible_sleep_on_timeout(&queue, 1);
2878 if (signal_pending(current)) {
2879 printk(KERN_ERR
2880 "ME4000:me4000_ao_ex_trig_timeout():Wait on start of state machine interrupted\n");
2881 return -EINTR;
2882 }
2883 if (((jiffies - ref) > (timeout * HZ / USER_HZ))) { // 2.6 has diffrent definitions for HZ in user and kernel space
2884 printk(KERN_ERR
2885 "ME4000:me4000_ao_ex_trig_timeout():Timeout reached\n");
2886 return -EIO;
2887 }
2888 }
2889 } else {
2890 while ((inl(ao_context->status_reg) &
2891 ME4000_AO_STATUS_BIT_FSM)) {
2892 interruptible_sleep_on_timeout(&queue, 1);
2893 if (signal_pending(current)) {
2894 printk(KERN_ERR
2895 "ME4000:me4000_ao_ex_trig_timeout():Wait on start of state machine interrupted\n");
2896 return -EINTR;
2897 }
2898 }
2899 }
2900 } else {
2901 printk(KERN_ERR
2902 "ME4000:me4000_ao_ex_trig_timeout():External Trigger is not enabled\n");
2903 return -EINVAL;
2904 }
2905
2906 return 0;
2907 }
2908
2909 static int me4000_ao_enable_do(struct me4000_ao_context *ao_context)
2910 {
2911 u32 tmp;
2912 unsigned long flags;
2913
2914 CALL_PDEBUG("me4000_ao_enable_do() is executed\n");
2915
2916 /* Only available for analog output 3 */
2917 if (ao_context->index != 3) {
2918 printk(KERN_ERR
2919 "me4000_ao_enable_do():Only available for analog output 3\n");
2920 return -ENOTTY;
2921 }
2922
2923 /* Check if the state machine is stopped */
2924 tmp = me4000_inl(ao_context->status_reg);
2925 if (tmp & ME4000_AO_STATUS_BIT_FSM) {
2926 printk(KERN_ERR "me4000_ao_enable_do(): DAC is running\n");
2927 return -EBUSY;
2928 }
2929
2930 /* Set the stop bit */
2931 spin_lock_irqsave(&ao_context->int_lock, flags);
2932 tmp = inl(ao_context->ctrl_reg);
2933 tmp |= ME4000_AO_CTRL_BIT_ENABLE_DO;
2934 me4000_outl(tmp, ao_context->ctrl_reg);
2935 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2936
2937 return 0;
2938 }
2939
2940 static int me4000_ao_disable_do(struct me4000_ao_context *ao_context)
2941 {
2942 u32 tmp;
2943 unsigned long flags;
2944
2945 CALL_PDEBUG("me4000_ao_disable_do() is executed\n");
2946
2947 /* Only available for analog output 3 */
2948 if (ao_context->index != 3) {
2949 printk(KERN_ERR
2950 "me4000_ao_disable():Only available for analog output 3\n");
2951 return -ENOTTY;
2952 }
2953
2954 /* Check if the state machine is stopped */
2955 tmp = me4000_inl(ao_context->status_reg);
2956 if (tmp & ME4000_AO_STATUS_BIT_FSM) {
2957 printk(KERN_ERR "me4000_ao_disable_do(): DAC is running\n");
2958 return -EBUSY;
2959 }
2960
2961 spin_lock_irqsave(&ao_context->int_lock, flags);
2962 tmp = inl(ao_context->ctrl_reg);
2963 tmp &= ~(ME4000_AO_CTRL_BIT_ENABLE_DO);
2964 me4000_outl(tmp, ao_context->ctrl_reg);
2965 spin_unlock_irqrestore(&ao_context->int_lock, flags);
2966
2967 return 0;
2968 }
2969
2970 static int me4000_ao_fsm_state(int *arg, struct me4000_ao_context *ao_context)
2971 {
2972 unsigned long tmp;
2973
2974 CALL_PDEBUG("me4000_ao_fsm_state() is executed\n");
2975
2976 tmp =
2977 (me4000_inl(ao_context->status_reg) & ME4000_AO_STATUS_BIT_FSM) ? 1
2978 : 0;
2979
2980 if (ao_context->pipe_flag) {
2981 printk(KERN_ERR "me4000_ao_fsm_state():Broken pipe detected\n");
2982 return -EPIPE;
2983 }
2984
2985 if (put_user(tmp, arg)) {
2986 printk(KERN_ERR "me4000_ao_fsm_state():Cannot copy to user\n");
2987 return -EFAULT;
2988 }
2989
2990 return 0;
2991 }
2992
2993 /*------------------------- Analog input stuff -------------------------------*/
2994
2995 static int me4000_ai_prepare(struct me4000_ai_context *ai_context)
2996 {
2997 wait_queue_head_t queue;
2998 int err;
2999
3000 CALL_PDEBUG("me4000_ai_prepare() is executed\n");
3001
3002 init_waitqueue_head(&queue);
3003
3004 /* Set the new mode and stop bits */
3005 me4000_outl(ai_context->
3006 mode | ME4000_AI_CTRL_BIT_STOP |
3007 ME4000_AI_CTRL_BIT_IMMEDIATE_STOP, ai_context->ctrl_reg);
3008
3009 /* Set the timer registers */
3010 ai_context->chan_timer = 66;
3011 ai_context->chan_pre_timer = 66;
3012 ai_context->scan_timer_low = 0;
3013 ai_context->scan_timer_high = 0;
3014
3015 me4000_outl(65, ai_context->chan_timer_reg);
3016 me4000_outl(65, ai_context->chan_pre_timer_reg);
3017 me4000_outl(0, ai_context->scan_timer_low_reg);
3018 me4000_outl(0, ai_context->scan_timer_high_reg);
3019 me4000_outl(0, ai_context->scan_pre_timer_low_reg);
3020 me4000_outl(0, ai_context->scan_pre_timer_high_reg);
3021
3022 ai_context->channel_list_count = 0;
3023
3024 if (ai_context->mode) {
3025 /* Request the interrupt line */
3026 err =
3027 request_irq(ai_context->irq, me4000_ai_isr,
3028 IRQF_DISABLED | IRQF_SHARED, ME4000_NAME,
3029 ai_context);
3030 if (err) {
3031 printk(KERN_ERR
3032 "ME4000:me4000_ai_prepare():Can't get interrupt line");
3033 return -ENODEV;
3034 }
3035
3036 /* Allocate circular buffer */
3037 ai_context->circ_buf.buf =
3038 kzalloc(ME4000_AI_BUFFER_SIZE, GFP_KERNEL);
3039 if (!ai_context->circ_buf.buf) {
3040 printk(KERN_ERR
3041 "ME4000:me4000_ai_prepare():Can't get circular buffer\n");
3042 free_irq(ai_context->irq, ai_context);
3043 return -ENOMEM;
3044 }
3045
3046 /* Clear the circular buffer */
3047 ai_context->circ_buf.head = 0;
3048 ai_context->circ_buf.tail = 0;
3049 }
3050
3051 return 0;
3052 }
3053
3054 static int me4000_ai_reset(struct me4000_ai_context *ai_context)
3055 {
3056 wait_queue_head_t queue;
3057 u32 tmp;
3058 unsigned long flags;
3059
3060 CALL_PDEBUG("me4000_ai_reset() is executed\n");
3061
3062 init_waitqueue_head(&queue);
3063
3064 /*
3065 * First stop conversion of the state machine before reconfigure.
3066 * If not stopped before configuring mode, it could
3067 * walk in a undefined state.
3068 */
3069 spin_lock_irqsave(&ai_context->int_lock, flags);
3070 tmp = me4000_inl(ai_context->ctrl_reg);
3071 tmp |= ME4000_AI_CTRL_BIT_IMMEDIATE_STOP;
3072 me4000_outl(tmp, ai_context->ctrl_reg);
3073 spin_unlock_irqrestore(&ai_context->int_lock, flags);
3074
3075 while (inl(ai_context->status_reg) & ME4000_AI_STATUS_BIT_FSM) {
3076 interruptible_sleep_on_timeout(&queue, 1);
3077 if (signal_pending(current)) {
3078 printk(KERN_ERR
3079 "me4000_ai_reset():Wait on state machine after stop interrupted\n");
3080 return -EINTR;
3081 }
3082 }
3083
3084 /* Clear the control register and set the stop bits */
3085 spin_lock_irqsave(&ai_context->int_lock, flags);
3086 tmp = me4000_inl(ai_context->ctrl_reg);
3087 me4000_outl(ME4000_AI_CTRL_BIT_IMMEDIATE_STOP | ME4000_AI_CTRL_BIT_STOP,
3088 ai_context->ctrl_reg);
3089 spin_unlock_irqrestore(&ai_context->int_lock, flags);
3090
3091 /* Reset timer registers */
3092 ai_context->chan_timer = 66;
3093 ai_context->chan_pre_timer = 66;
3094 ai_context->scan_timer_low = 0;
3095 ai_context->scan_timer_high = 0;
3096 ai_context->sample_counter = 0;
3097 ai_context->sample_counter_reload = 0;
3098
3099 me4000_outl(65, ai_context->chan_timer_reg);
3100 me4000_outl(65, ai_context->chan_pre_timer_reg);
3101 me4000_outl(0, ai_context->scan_timer_low_reg);
3102 me4000_outl(0, ai_context->scan_timer_high_reg);
3103 me4000_outl(0, ai_context->scan_pre_timer_low_reg);
3104 me4000_outl(0, ai_context->scan_pre_timer_high_reg);
3105 me4000_outl(0, ai_context->sample_counter_reg);
3106
3107 ai_context->channel_list_count = 0;
3108
3109 /* Clear the circular buffer */
3110 ai_context->circ_buf.head = 0;
3111 ai_context->circ_buf.tail = 0;
3112
3113 return 0;
3114 }
3115
3116 static int me4000_ai_ioctl_sing(struct inode *inode_p, struct file *file_p,
3117 unsigned int service, unsigned long arg)
3118 {
3119 struct me4000_ai_context *ai_context;
3120
3121 CALL_PDEBUG("me4000_ai_ioctl_sing() is executed\n");
3122
3123 ai_context = file_p->private_data;
3124
3125 if (_IOC_TYPE(service) != ME4000_MAGIC) {
3126 printk(KERN_ERR "me4000_ai_ioctl_sing():Wrong magic number\n");
3127 return -ENOTTY;
3128 }
3129 if (_IOC_NR(service) > ME4000_IOCTL_MAXNR) {
3130 printk(KERN_ERR
3131 "me4000_ai_ioctl_sing():Service number to high\n");
3132 return -ENOTTY;
3133 }
3134
3135 switch (service) {
3136 case ME4000_AI_SINGLE:
3137 return me4000_ai_single((struct me4000_ai_single *)arg,
3138 ai_context);
3139 case ME4000_AI_EX_TRIG_ENABLE:
3140 return me4000_ai_ex_trig_enable(ai_context);
3141 case ME4000_AI_EX_TRIG_DISABLE:
3142 return me4000_ai_ex_trig_disable(ai_context);
3143 case ME4000_AI_EX_TRIG_SETUP:
3144 return me4000_ai_ex_trig_setup((struct me4000_ai_trigger *)arg,
3145 ai_context);
3146 case ME4000_GET_USER_INFO:
3147 return me4000_get_user_info((struct me4000_user_info *)arg,
3148 ai_context->board_info);
3149 case ME4000_AI_OFFSET_ENABLE:
3150 return me4000_ai_offset_enable(ai_context);
3151 case ME4000_AI_OFFSET_DISABLE:
3152 return me4000_ai_offset_disable(ai_context);
3153 case ME4000_AI_FULLSCALE_ENABLE:
3154 return me4000_ai_fullscale_enable(ai_context);
3155 case ME4000_AI_FULLSCALE_DISABLE:
3156 return me4000_ai_fullscale_disable(ai_context);
3157 case ME4000_AI_EEPROM_READ:
3158 return me4000_eeprom_read((struct me4000_eeprom *)arg,
3159 ai_context);
3160 case ME4000_AI_EEPROM_WRITE:
3161 return me4000_eeprom_write((struct me4000_eeprom *)arg,
3162 ai_context);
3163 default:
3164 printk(KERN_ERR
3165 "me4000_ai_ioctl_sing():Invalid service number\n");
3166 return -ENOTTY;
3167 }
3168 return 0;
3169 }
3170
3171 static int me4000_ai_single(struct me4000_ai_single *arg,
3172 struct me4000_ai_context *ai_context)
3173 {
3174 struct me4000_ai_single cmd;
3175 int err;
3176 u32 tmp;
3177 wait_queue_head_t queue;
3178 unsigned long jiffy;
3179
3180 CALL_PDEBUG("me4000_ai_single() is executed\n");
3181
3182 init_waitqueue_head(&queue);
3183
3184 /* Copy data from user */
3185 err = copy_from_user(&cmd, arg, sizeof(struct me4000_ai_single));
3186 if (err) {
3187 printk(KERN_ERR
3188 "ME4000:me4000_ai_single():Can't copy from user space\n");
3189 return -EFAULT;
3190 }
3191
3192 /* Check range parameter */
3193 switch (cmd.range) {
3194 case ME4000_AI_LIST_RANGE_BIPOLAR_10:
3195 case ME4000_AI_LIST_RANGE_BIPOLAR_2_5:
3196 case ME4000_AI_LIST_RANGE_UNIPOLAR_10:
3197 case ME4000_AI_LIST_RANGE_UNIPOLAR_2_5:
3198 break;
3199 default:
3200 printk(KERN_ERR
3201 "ME4000:me4000_ai_single():Invalid range specified\n");
3202 return -EINVAL;
3203 }
3204
3205 /* Check mode and channel number */
3206 switch (cmd.mode) {
3207 case ME4000_AI_LIST_INPUT_SINGLE_ENDED:
3208 if (cmd.channel >= ai_context->board_info->board_p->ai.count) {
3209 printk(KERN_ERR
3210 "ME4000:me4000_ai_single():Analog input is not available\n");
3211 return -EINVAL;
3212 }
3213 break;
3214 case ME4000_AI_LIST_INPUT_DIFFERENTIAL:
3215 if (cmd.channel >=
3216 ai_context->board_info->board_p->ai.diff_count) {
3217 printk(KERN_ERR
3218 "ME4000:me4000_ai_single():Analog input is not available in differential mode\n");
3219 return -EINVAL;
3220 }
3221 break;
3222 default:
3223 printk(KERN_ERR
3224 "ME4000:me4000_ai_single():Invalid mode specified\n");
3225 return -EINVAL;
3226 }
3227
3228 /* Clear channel list, data fifo and both stop bits */
3229 tmp = me4000_inl(ai_context->ctrl_reg);
3230 tmp &=
3231 ~(ME4000_AI_CTRL_BIT_CHANNEL_FIFO | ME4000_AI_CTRL_BIT_DATA_FIFO |
3232 ME4000_AI_CTRL_BIT_STOP | ME4000_AI_CTRL_BIT_IMMEDIATE_STOP);
3233 me4000_outl(tmp, ai_context->ctrl_reg);
3234
3235 /* Enable channel list and data fifo */
3236 tmp |= ME4000_AI_CTRL_BIT_CHANNEL_FIFO | ME4000_AI_CTRL_BIT_DATA_FIFO;
3237 me4000_outl(tmp, ai_context->ctrl_reg);
3238
3239 /* Generate channel list entry */
3240 me4000_outl(cmd.channel | cmd.range | cmd.
3241 mode | ME4000_AI_LIST_LAST_ENTRY,
3242 ai_context->channel_list_reg);
3243
3244 /* Set the timer to maximum */
3245 me4000_outl(66, ai_context->chan_timer_reg);
3246 me4000_outl(66, ai_context->chan_pre_timer_reg);
3247
3248 if (tmp & ME4000_AI_CTRL_BIT_EX_TRIG) {
3249 jiffy = jiffies;
3250 while (!
3251 (me4000_inl(ai_context->status_reg) &
3252 ME4000_AI_STATUS_BIT_EF_DATA)) {
3253 interruptible_sleep_on_timeout(&queue, 1);
3254 if (signal_pending(current)) {
3255 printk(KERN_ERR
3256 "ME4000:me4000_ai_single():Wait on start of state machine interrupted\n");
3257 return -EINTR;
3258 }
3259 if (((jiffies - jiffy) > (cmd.timeout * HZ / USER_HZ)) && cmd.timeout) { // 2.6 has diffrent definitions for HZ in user and kernel space
3260 printk(KERN_ERR
3261 "ME4000:me4000_ai_single():Timeout reached\n");
3262 return -EIO;
3263 }
3264 }
3265 } else {
3266 /* Start conversion */
3267 me4000_inl(ai_context->start_reg);
3268
3269 /* Wait until ready */
3270 udelay(10);
3271 if (!
3272 (me4000_inl(ai_context->status_reg) &
3273 ME4000_AI_STATUS_BIT_EF_DATA)) {
3274 printk(KERN_ERR
3275 "ME4000:me4000_ai_single():Value not available after wait\n");
3276 return -EIO;
3277 }
3278 }
3279
3280 /* Read value from data fifo */
3281 cmd.value = me4000_inl(ai_context->data_reg) & 0xFFFF;
3282
3283 /* Copy result back to user */
3284 err = copy_to_user(arg, &cmd, sizeof(struct me4000_ai_single));
3285 if (err) {
3286 printk(KERN_ERR
3287 "ME4000:me4000_ai_single():Can't copy to user space\n");
3288 return -EFAULT;
3289 }
3290
3291 return 0;
3292 }
3293
3294 static int me4000_ai_ioctl_sw(struct inode *inode_p, struct file *file_p,
3295 unsigned int service, unsigned long arg)
3296 {
3297 struct me4000_ai_context *ai_context;
3298
3299 CALL_PDEBUG("me4000_ai_ioctl_sw() is executed\n");
3300
3301 ai_context = file_p->private_data;
3302
3303 if (_IOC_TYPE(service) != ME4000_MAGIC) {
3304 printk(KERN_ERR "me4000_ai_ioctl_sw():Wrong magic number\n");
3305 return -ENOTTY;
3306 }
3307 if (_IOC_NR(service) > ME4000_IOCTL_MAXNR) {
3308 printk(KERN_ERR
3309 "me4000_ai_ioctl_sw():Service number to high\n");
3310 return -ENOTTY;
3311 }
3312
3313 switch (service) {
3314 case ME4000_AI_SC_SETUP:
3315 return me4000_ai_sc_setup((struct me4000_ai_sc *)arg,
3316 ai_context);
3317 case ME4000_AI_CONFIG:
3318 return me4000_ai_config((struct me4000_ai_config *)arg,
3319 ai_context);
3320 case ME4000_AI_START:
3321 return me4000_ai_start(ai_context);
3322 case ME4000_AI_STOP:
3323 return me4000_ai_stop(ai_context);
3324 case ME4000_AI_IMMEDIATE_STOP:
3325 return me4000_ai_immediate_stop(ai_context);
3326 case ME4000_AI_FSM_STATE:
3327 return me4000_ai_fsm_state((int *)arg, ai_context);
3328 case ME4000_GET_USER_INFO:
3329 return me4000_get_user_info((struct me4000_user_info *)arg,
3330 ai_context->board_info);
3331 case ME4000_AI_EEPROM_READ:
3332 return me4000_eeprom_read((struct me4000_eeprom *)arg,
3333 ai_context);
3334 case ME4000_AI_EEPROM_WRITE:
3335 return me4000_eeprom_write((struct me4000_eeprom *)arg,
3336 ai_context);
3337 case ME4000_AI_GET_COUNT_BUFFER:
3338 return me4000_ai_get_count_buffer((unsigned long *)arg,
3339 ai_context);
3340 default:
3341 printk(KERN_ERR
3342 "%s:Invalid service number %d\n", __func__, service);
3343 return -ENOTTY;
3344 }
3345 return 0;
3346 }
3347
3348 static int me4000_ai_ioctl_ext(struct inode *inode_p, struct file *file_p,
3349 unsigned int service, unsigned long arg)
3350 {
3351 struct me4000_ai_context *ai_context;
3352
3353 CALL_PDEBUG("me4000_ai_ioctl_ext() is executed\n");
3354
3355 ai_context = file_p->private_data;
3356
3357 if (_IOC_TYPE(service) != ME4000_MAGIC) {
3358 printk(KERN_ERR "me4000_ai_ioctl_ext():Wrong magic number\n");
3359 return -ENOTTY;
3360 }
3361 if (_IOC_NR(service) > ME4000_IOCTL_MAXNR) {
3362 printk(KERN_ERR
3363 "me4000_ai_ioctl_ext():Service number to high\n");
3364 return -ENOTTY;
3365 }
3366
3367 switch (service) {
3368 case ME4000_AI_SC_SETUP:
3369 return me4000_ai_sc_setup((struct me4000_ai_sc *)arg,
3370 ai_context);
3371 case ME4000_AI_CONFIG:
3372 return me4000_ai_config((struct me4000_ai_config *)arg,
3373 ai_context);
3374 case ME4000_AI_START:
3375 return me4000_ai_start_ex((unsigned long *)arg, ai_context);
3376 case ME4000_AI_STOP:
3377 return me4000_ai_stop(ai_context);
3378 case ME4000_AI_IMMEDIATE_STOP:
3379 return me4000_ai_immediate_stop(ai_context);
3380 case ME4000_AI_EX_TRIG_ENABLE:
3381 return me4000_ai_ex_trig_enable(ai_context);
3382 case ME4000_AI_EX_TRIG_DISABLE:
3383 return me4000_ai_ex_trig_disable(ai_context);
3384 case ME4000_AI_EX_TRIG_SETUP:
3385 return me4000_ai_ex_trig_setup((struct me4000_ai_trigger *)arg,
3386 ai_context);
3387 case ME4000_AI_FSM_STATE:
3388 return me4000_ai_fsm_state((int *)arg, ai_context);
3389 case ME4000_GET_USER_INFO:
3390 return me4000_get_user_info((struct me4000_user_info *)arg,
3391 ai_context->board_info);
3392 case ME4000_AI_GET_COUNT_BUFFER:
3393 return me4000_ai_get_count_buffer((unsigned long *)arg,
3394 ai_context);
3395 default:
3396 printk(KERN_ERR
3397 "%s:Invalid service number %d\n", __func__ , service);
3398 return -ENOTTY;
3399 }
3400 return 0;
3401 }
3402
3403 static int me4000_ai_fasync(int fd, struct file *file_p, int mode)
3404 {
3405 struct me4000_ai_context *ai_context;
3406
3407 CALL_PDEBUG("me4000_ao_fasync_cont() is executed\n");
3408
3409 ai_context = file_p->private_data;
3410 return fasync_helper(fd, file_p, mode, &ai_context->fasync_p);
3411 }
3412
3413 static int me4000_ai_config(struct me4000_ai_config *arg,
3414 struct me4000_ai_context *ai_context)
3415 {
3416 struct me4000_ai_config cmd;
3417 u32 *list = NULL;
3418 u32 mode;
3419 int i;
3420 int err;
3421 wait_queue_head_t queue;
3422 u64 scan;
3423 u32 tmp;
3424
3425 CALL_PDEBUG("me4000_ai_config() is executed\n");
3426
3427 init_waitqueue_head(&queue);
3428
3429 /* Check if conversion is stopped */
3430 if (inl(ai_context->ctrl_reg) & ME4000_AI_STATUS_BIT_FSM) {
3431 printk(KERN_ERR
3432 "ME4000:me4000_ai_config():Conversion is not stopped\n");
3433 err = -EBUSY;
3434 goto AI_CONFIG_ERR;
3435 }
3436
3437 /* Copy data from user */
3438 err = copy_from_user(&cmd, arg, sizeof(struct me4000_ai_config));
3439 if (err) {
3440 printk(KERN_ERR
3441 "ME4000:me4000_ai_config():Can't copy from user space\n");
3442 err = -EFAULT;
3443 goto AI_CONFIG_ERR;
3444 }
3445
3446 PDEBUG
3447 ("me4000_ai_config():chan = %ld, pre_chan = %ld, scan_low = %ld, scan_high = %ld, count = %ld\n",
3448 cmd.timer.chan, cmd.timer.pre_chan, cmd.timer.scan_low,
3449 cmd.timer.scan_high, cmd.channel_list.count);
3450
3451 /* Check whether sample and hold is available for this board */
3452 if (cmd.sh) {
3453 if (!ai_context->board_info->board_p->ai.sh_count) {
3454 printk(KERN_ERR
3455 "ME4000:me4000_ai_config():Sample and Hold is not available for this board\n");
3456 err = -ENODEV;
3457 goto AI_CONFIG_ERR;
3458 }
3459 }
3460
3461 /* Check the channel list size */
3462 if (cmd.channel_list.count > ME4000_AI_CHANNEL_LIST_COUNT) {
3463 printk(KERN_ERR
3464 "me4000_ai_config():Channel list is to large\n");
3465 err = -EINVAL;
3466 goto AI_CONFIG_ERR;
3467 }
3468
3469 /* Copy channel list from user */
3470 list = kmalloc(sizeof(u32) * cmd.channel_list.count, GFP_KERNEL);
3471 if (!list) {
3472 printk(KERN_ERR
3473 "ME4000:me4000_ai_config():Can't get memory for channel list\n");
3474 err = -ENOMEM;
3475 goto AI_CONFIG_ERR;
3476 }
3477 err =
3478 copy_from_user(list, cmd.channel_list.list,
3479 sizeof(u32) * cmd.channel_list.count);
3480 if (err) {
3481 printk(KERN_ERR
3482 "ME4000:me4000_ai_config():Can't copy from user space\n");
3483 err = -EFAULT;
3484 goto AI_CONFIG_ERR;
3485 }
3486
3487 /* Check if last entry bit is set */
3488 if (!(list[cmd.channel_list.count - 1] & ME4000_AI_LIST_LAST_ENTRY)) {
3489 printk(KERN_WARNING
3490 "me4000_ai_config():Last entry bit is not set\n");
3491 list[cmd.channel_list.count - 1] |= ME4000_AI_LIST_LAST_ENTRY;
3492 }
3493
3494 /* Check whether mode is equal for all entries */
3495 mode = list[0] & 0x20;
3496 for (i = 0; i < cmd.channel_list.count; i++) {
3497 if ((list[i] & 0x20) != mode) {
3498 printk(KERN_ERR
3499 "ME4000:me4000_ai_config():Mode is not equal for all entries\n");
3500 err = -EINVAL;
3501 goto AI_CONFIG_ERR;
3502 }
3503 }
3504
3505 /* Check whether channels are available for this mode */
3506 if (mode == ME4000_AI_LIST_INPUT_SINGLE_ENDED) {
3507 for (i = 0; i < cmd.channel_list.count; i++) {
3508 if ((list[i] & 0x1F) >=
3509 ai_context->board_info->board_p->ai.count) {
3510 printk(KERN_ERR
3511 "ME4000:me4000_ai_config():Channel is not available for single ended\n");
3512 err = -EINVAL;
3513 goto AI_CONFIG_ERR;
3514 }
3515 }
3516 } else if (mode == ME4000_AI_LIST_INPUT_DIFFERENTIAL) {
3517 for (i = 0; i < cmd.channel_list.count; i++) {
3518 if ((list[i] & 0x1F) >=
3519 ai_context->board_info->board_p->ai.diff_count) {
3520 printk(KERN_ERR
3521 "ME4000:me4000_ai_config():Channel is not available for differential\n");
3522 err = -EINVAL;
3523 goto AI_CONFIG_ERR;
3524 }
3525 }
3526 }
3527
3528 /* Check if bipolar is set for all entries when in differential mode */
3529 if (mode == ME4000_AI_LIST_INPUT_DIFFERENTIAL) {
3530 for (i = 0; i < cmd.channel_list.count; i++) {
3531 if ((list[i] & 0xC0) != ME4000_AI_LIST_RANGE_BIPOLAR_10
3532 && (list[i] & 0xC0) !=
3533 ME4000_AI_LIST_RANGE_BIPOLAR_2_5) {
3534 printk(KERN_ERR
3535 "ME4000:me4000_ai_config():Bipolar is not selected in differential mode\n");
3536 err = -EINVAL;
3537 goto AI_CONFIG_ERR;
3538 }
3539 }
3540 }
3541
3542 if (ai_context->mode != ME4000_AI_ACQ_MODE_EXT_SINGLE_VALUE) {
3543 /* Check for minimum channel divisor */
3544 if (cmd.timer.chan < ME4000_AI_MIN_TICKS) {
3545 printk(KERN_ERR
3546 "ME4000:me4000_ai_config():Channel timer divisor is to low\n");
3547 err = -EINVAL;
3548 goto AI_CONFIG_ERR;
3549 }
3550
3551 /* Check if minimum channel divisor is adjusted when sample and hold is activated */
3552 if ((cmd.sh) && (cmd.timer.chan != ME4000_AI_MIN_TICKS)) {
3553 printk(KERN_ERR
3554 "ME4000:me4000_ai_config():Channel timer divisor must be at minimum when sample and hold is activated\n");
3555 err = -EINVAL;
3556 goto AI_CONFIG_ERR;
3557 }
3558
3559 /* Check for minimum channel pre divisor */
3560 if (cmd.timer.pre_chan < ME4000_AI_MIN_TICKS) {
3561 printk(KERN_ERR
3562 "ME4000:me4000_ai_config():Channel pre timer divisor is to low\n");
3563 err = -EINVAL;
3564 goto AI_CONFIG_ERR;
3565 }
3566
3567 /* Write the channel timers */
3568 me4000_outl(cmd.timer.chan - 1, ai_context->chan_timer_reg);
3569 me4000_outl(cmd.timer.pre_chan - 1,
3570 ai_context->chan_pre_timer_reg);
3571
3572 /* Save the timer values in the board context */
3573 ai_context->chan_timer = cmd.timer.chan;
3574 ai_context->chan_pre_timer = cmd.timer.pre_chan;
3575
3576 if (ai_context->mode != ME4000_AI_ACQ_MODE_EXT_SINGLE_CHANLIST) {
3577 /* Check for scan timer divisor */
3578 scan =
3579 (u64) cmd.timer.scan_low | ((u64) cmd.timer.
3580 scan_high << 32);
3581 if (scan != 0) {
3582 if (scan <
3583 cmd.channel_list.count * cmd.timer.chan +
3584 1) {
3585 printk(KERN_ERR
3586 "ME4000:me4000_ai_config():Scan timer divisor is to low\n");
3587 err = -EINVAL;
3588 goto AI_CONFIG_ERR;
3589 }
3590 }
3591
3592 /* Write the scan timers */
3593 if (scan != 0) {
3594 scan--;
3595 tmp = (u32) (scan & 0xFFFFFFFF);
3596 me4000_outl(tmp,
3597 ai_context->scan_timer_low_reg);
3598 tmp = (u32) ((scan >> 32) & 0xFFFFFFFF);
3599 me4000_outl(tmp,
3600 ai_context->scan_timer_high_reg);
3601
3602 scan =
3603 scan - (cmd.timer.chan - 1) +
3604 (cmd.timer.pre_chan - 1);
3605 tmp = (u32) (scan & 0xFFFFFFFF);
3606 me4000_outl(tmp,
3607 ai_context->scan_pre_timer_low_reg);
3608 tmp = (u32) ((scan >> 32) & 0xFFFFFFFF);
3609 me4000_outl(tmp,
3610 ai_context->
3611 scan_pre_timer_high_reg);
3612 } else {
3613 me4000_outl(0x0,
3614 ai_context->scan_timer_low_reg);
3615 me4000_outl(0x0,
3616 ai_context->scan_timer_high_reg);
3617
3618 me4000_outl(0x0,
3619 ai_context->scan_pre_timer_low_reg);
3620 me4000_outl(0x0,
3621 ai_context->
3622 scan_pre_timer_high_reg);
3623 }
3624
3625 ai_context->scan_timer_low = cmd.timer.scan_low;
3626 ai_context->scan_timer_high = cmd.timer.scan_high;
3627 }
3628 }
3629
3630 /* Clear the channel list */
3631 tmp = me4000_inl(ai_context->ctrl_reg);
3632 tmp &= ~ME4000_AI_CTRL_BIT_CHANNEL_FIFO;
3633 me4000_outl(tmp, ai_context->ctrl_reg);
3634 tmp |= ME4000_AI_CTRL_BIT_CHANNEL_FIFO;
3635 me4000_outl(tmp, ai_context->ctrl_reg);
3636
3637 /* Write the channel list */
3638 for (i = 0; i < cmd.channel_list.count; i++) {
3639 me4000_outl(list[i], ai_context->channel_list_reg);
3640 }
3641
3642 /* Setup sample and hold */
3643 if (cmd.sh) {
3644 tmp |= ME4000_AI_CTRL_BIT_SAMPLE_HOLD;
3645 me4000_outl(tmp, ai_context->ctrl_reg);
3646 } else {
3647 tmp &= ~ME4000_AI_CTRL_BIT_SAMPLE_HOLD;
3648 me4000_outl(tmp, ai_context->ctrl_reg);
3649 }
3650
3651 /* Save the channel list size in the board context */
3652 ai_context->channel_list_count = cmd.channel_list.count;
3653
3654 kfree(list);
3655
3656 return 0;
3657
3658 AI_CONFIG_ERR:
3659
3660 /* Reset the timers */
3661 ai_context->chan_timer = 66;
3662 ai_context->chan_pre_timer = 66;
3663 ai_context->scan_timer_low = 0;
3664 ai_context->scan_timer_high = 0;
3665
3666 me4000_outl(65, ai_context->chan_timer_reg);
3667 me4000_outl(65, ai_context->chan_pre_timer_reg);
3668 me4000_outl(0, ai_context->scan_timer_high_reg);
3669 me4000_outl(0, ai_context->scan_timer_low_reg);
3670 me4000_outl(0, ai_context->scan_pre_timer_high_reg);
3671 me4000_outl(0, ai_context->scan_pre_timer_low_reg);
3672
3673 ai_context->channel_list_count = 0;
3674
3675 tmp = me4000_inl(ai_context->ctrl_reg);
3676 tmp &=
3677 ~(ME4000_AI_CTRL_BIT_CHANNEL_FIFO | ME4000_AI_CTRL_BIT_SAMPLE_HOLD);
3678
3679 if (list)
3680 kfree(list);
3681
3682 return err;
3683
3684 }
3685
3686 static int ai_common_start(struct me4000_ai_context *ai_context)
3687 {
3688 u32 tmp;
3689 CALL_PDEBUG("ai_common_start() is executed\n");
3690
3691 tmp = me4000_inl(ai_context->ctrl_reg);
3692
3693 /* Check if conversion is stopped */
3694 if (tmp & ME4000_AI_STATUS_BIT_FSM) {
3695 printk(KERN_ERR
3696 "ME4000:ai_common_start():Conversion is not stopped\n");
3697 return -EBUSY;
3698 }
3699
3700 /* Clear data fifo, disable all interrupts, clear sample counter reload */
3701 tmp &= ~(ME4000_AI_CTRL_BIT_DATA_FIFO | ME4000_AI_CTRL_BIT_LE_IRQ |
3702 ME4000_AI_CTRL_BIT_HF_IRQ | ME4000_AI_CTRL_BIT_SC_IRQ |
3703 ME4000_AI_CTRL_BIT_SC_RELOAD);
3704
3705 me4000_outl(tmp, ai_context->ctrl_reg);
3706
3707 /* Clear circular buffer */
3708 ai_context->circ_buf.head = 0;
3709 ai_context->circ_buf.tail = 0;
3710
3711 /* Enable data fifo */
3712 tmp |= ME4000_AI_CTRL_BIT_DATA_FIFO;
3713
3714 /* Determine interrupt setup */
3715 if (ai_context->sample_counter && !ai_context->sample_counter_reload) {
3716 /* Enable Half Full Interrupt and Sample Counter Interrupt */
3717 tmp |= ME4000_AI_CTRL_BIT_SC_IRQ | ME4000_AI_CTRL_BIT_HF_IRQ;
3718 } else if (ai_context->sample_counter
3719 && ai_context->sample_counter_reload) {
3720 if (ai_context->sample_counter <= ME4000_AI_FIFO_COUNT / 2) {
3721 /* Enable only Sample Counter Interrupt */
3722 tmp |=
3723 ME4000_AI_CTRL_BIT_SC_IRQ |
3724 ME4000_AI_CTRL_BIT_SC_RELOAD;
3725 } else {
3726 /* Enable Half Full Interrupt and Sample Counter Interrupt */
3727 tmp |=
3728 ME4000_AI_CTRL_BIT_SC_IRQ |
3729 ME4000_AI_CTRL_BIT_HF_IRQ |
3730 ME4000_AI_CTRL_BIT_SC_RELOAD;
3731 }
3732 } else {
3733 /* Enable only Half Full Interrupt */
3734 tmp |= ME4000_AI_CTRL_BIT_HF_IRQ;
3735 }
3736
3737 /* Clear the stop bits */
3738 tmp &= ~(ME4000_AI_CTRL_BIT_STOP | ME4000_AI_CTRL_BIT_IMMEDIATE_STOP);
3739
3740 /* Write setup to hardware */
3741 me4000_outl(tmp, ai_context->ctrl_reg);
3742
3743 /* Write sample counter */
3744 me4000_outl(ai_context->sample_counter, ai_context->sample_counter_reg);
3745
3746 return 0;
3747 }
3748
3749 static int me4000_ai_start(struct me4000_ai_context *ai_context)
3750 {
3751 int err;
3752 CALL_PDEBUG("me4000_ai_start() is executed\n");
3753
3754 /* Prepare Hardware */
3755 err = ai_common_start(ai_context);
3756 if (err)
3757 return err;
3758
3759 /* Start conversion by dummy read */
3760 me4000_inl(ai_context->start_reg);
3761
3762 return 0;
3763 }
3764
3765 static int me4000_ai_start_ex(unsigned long *arg,
3766 struct me4000_ai_context *ai_context)
3767 {
3768 int err;
3769 wait_queue_head_t queue;
3770 unsigned long ref;
3771 unsigned long timeout;
3772
3773 CALL_PDEBUG("me4000_ai_start_ex() is executed\n");
3774
3775 if (get_user(timeout, arg)) {
3776 printk(KERN_ERR
3777 "me4000_ai_start_ex():Cannot copy data from user\n");
3778 return -EFAULT;
3779 }
3780
3781 init_waitqueue_head(&queue);
3782
3783 /* Prepare Hardware */
3784 err = ai_common_start(ai_context);
3785 if (err)
3786 return err;
3787
3788 if (timeout) {
3789 ref = jiffies;
3790 while (!
3791 (inl(ai_context->status_reg) & ME4000_AI_STATUS_BIT_FSM))
3792 {
3793 interruptible_sleep_on_timeout(&queue, 1);
3794 if (signal_pending(current)) {
3795 printk(KERN_ERR
3796 "ME4000:me4000_ai_start_ex():Wait on start of state machine interrupted\n");
3797 return -EINTR;
3798 }
3799 if (((jiffies - ref) > (timeout * HZ / USER_HZ))) { // 2.6 has diffrent definitions for HZ in user and kernel space
3800 printk(KERN_ERR
3801 "ME4000:me4000_ai_start_ex():Timeout reached\n");
3802 return -EIO;
3803 }
3804 }
3805 } else {
3806 while (!
3807 (inl(ai_context->status_reg) & ME4000_AI_STATUS_BIT_FSM))
3808 {
3809 interruptible_sleep_on_timeout(&queue, 1);
3810 if (signal_pending(current)) {
3811 printk(KERN_ERR
3812 "ME4000:me4000_ai_start_ex():Wait on start of state machine interrupted\n");
3813 return -EINTR;
3814 }
3815 }
3816 }
3817
3818 return 0;
3819 }
3820
3821 static int me4000_ai_stop(struct me4000_ai_context *ai_context)
3822 {
3823 wait_queue_head_t queue;
3824 u32 tmp;
3825 unsigned long flags;
3826
3827 CALL_PDEBUG("me4000_ai_stop() is executed\n");
3828
3829 init_waitqueue_head(&queue);
3830
3831 /* Disable irqs and clear data fifo */
3832 spin_lock_irqsave(&ai_context->int_lock, flags);
3833 tmp = me4000_inl(ai_context->ctrl_reg);
3834 tmp &=
3835 ~(ME4000_AI_CTRL_BIT_HF_IRQ | ME4000_AI_CTRL_BIT_SC_IRQ |
3836 ME4000_AI_CTRL_BIT_DATA_FIFO);
3837 /* Stop conversion of the state machine */
3838 tmp |= ME4000_AI_CTRL_BIT_STOP;
3839 me4000_outl(tmp, ai_context->ctrl_reg);
3840 spin_unlock_irqrestore(&ai_context->int_lock, flags);
3841
3842 /* Clear circular buffer */
3843 ai_context->circ_buf.head = 0;
3844 ai_context->circ_buf.tail = 0;
3845
3846 while (inl(ai_context->status_reg) & ME4000_AI_STATUS_BIT_FSM) {
3847 interruptible_sleep_on_timeout(&queue, 1);
3848 if (signal_pending(current)) {
3849 printk(KERN_ERR
3850 "ME4000:me4000_ai_stop():Wait on state machine after stop interrupted\n");
3851 return -EINTR;
3852 }
3853 }
3854
3855 return 0;
3856 }
3857
3858 static int me4000_ai_immediate_stop(struct me4000_ai_context *ai_context)
3859 {
3860 wait_queue_head_t queue;
3861 u32 tmp;
3862 unsigned long flags;
3863
3864 CALL_PDEBUG("me4000_ai_stop() is executed\n");
3865
3866 init_waitqueue_head(&queue);
3867
3868 /* Disable irqs and clear data fifo */
3869 spin_lock_irqsave(&ai_context->int_lock, flags);
3870 tmp = me4000_inl(ai_context->ctrl_reg);
3871 tmp &=
3872 ~(ME4000_AI_CTRL_BIT_HF_IRQ | ME4000_AI_CTRL_BIT_SC_IRQ |
3873 ME4000_AI_CTRL_BIT_DATA_FIFO);
3874 /* Stop conversion of the state machine */
3875 tmp |= ME4000_AI_CTRL_BIT_IMMEDIATE_STOP;
3876 me4000_outl(tmp, ai_context->ctrl_reg);
3877 spin_unlock_irqrestore(&ai_context->int_lock, flags);
3878
3879 /* Clear circular buffer */
3880 ai_context->circ_buf.head = 0;
3881 ai_context->circ_buf.tail = 0;
3882
3883 while (inl(ai_context->status_reg) & ME4000_AI_STATUS_BIT_FSM) {
3884 interruptible_sleep_on_timeout(&queue, 1);
3885 if (signal_pending(current)) {
3886 printk(KERN_ERR
3887 "ME4000:me4000_ai_stop():Wait on state machine after stop interrupted\n");
3888 return -EINTR;
3889 }
3890 }
3891
3892 return 0;
3893 }
3894
3895 static int me4000_ai_ex_trig_enable(struct me4000_ai_context *ai_context)
3896 {
3897 u32 tmp;
3898 unsigned long flags;
3899
3900 CALL_PDEBUG("me4000_ai_ex_trig_enable() is executed\n");
3901
3902 spin_lock_irqsave(&ai_context->int_lock, flags);
3903 tmp = me4000_inl(ai_context->ctrl_reg);
3904 tmp |= ME4000_AI_CTRL_BIT_EX_TRIG;
3905 me4000_outl(tmp, ai_context->ctrl_reg);
3906 spin_unlock_irqrestore(&ai_context->int_lock, flags);
3907
3908 return 0;
3909 }
3910
3911 static int me4000_ai_ex_trig_disable(struct me4000_ai_context *ai_context)
3912 {
3913 u32 tmp;
3914 unsigned long flags;
3915
3916 CALL_PDEBUG("me4000_ai_ex_trig_disable() is executed\n");
3917
3918 spin_lock_irqsave(&ai_context->int_lock, flags);
3919 tmp = me4000_inl(ai_context->ctrl_reg);
3920 tmp &= ~ME4000_AI_CTRL_BIT_EX_TRIG;
3921 me4000_outl(tmp, ai_context->ctrl_reg);
3922 spin_unlock_irqrestore(&ai_context->int_lock, flags);
3923
3924 return 0;
3925 }
3926
3927 static int me4000_ai_ex_trig_setup(struct me4000_ai_trigger *arg,
3928 struct me4000_ai_context *ai_context)
3929 {
3930 struct me4000_ai_trigger cmd;
3931 int err;
3932 u32 tmp;
3933 unsigned long flags;
3934
3935 CALL_PDEBUG("me4000_ai_ex_trig_setup() is executed\n");
3936
3937 /* Copy data from user */
3938 err = copy_from_user(&cmd, arg, sizeof(struct me4000_ai_trigger));
3939 if (err) {
3940 printk(KERN_ERR
3941 "ME4000:me4000_ai_ex_trig_setup():Can't copy from user space\n");
3942 return -EFAULT;
3943 }
3944
3945 spin_lock_irqsave(&ai_context->int_lock, flags);
3946 tmp = me4000_inl(ai_context->ctrl_reg);
3947
3948 if (cmd.mode == ME4000_AI_TRIGGER_EXT_DIGITAL) {
3949 tmp &= ~ME4000_AI_CTRL_BIT_EX_TRIG_ANALOG;
3950 } else if (cmd.mode == ME4000_AI_TRIGGER_EXT_ANALOG) {
3951 if (!ai_context->board_info->board_p->ai.ex_trig_analog) {
3952 printk(KERN_ERR
3953 "ME4000:me4000_ai_ex_trig_setup():No analog trigger available\n");
3954 return -EINVAL;
3955 }
3956 tmp |= ME4000_AI_CTRL_BIT_EX_TRIG_ANALOG;
3957 } else {
3958 spin_unlock_irqrestore(&ai_context->int_lock, flags);
3959 printk(KERN_ERR
3960 "ME4000:me4000_ai_ex_trig_setup():Invalid trigger mode specified\n");
3961 return -EINVAL;
3962 }
3963
3964 if (cmd.edge == ME4000_AI_TRIGGER_EXT_EDGE_RISING) {
3965 tmp &=
3966 ~(ME4000_AI_CTRL_BIT_EX_TRIG_BOTH |
3967 ME4000_AI_CTRL_BIT_EX_TRIG_FALLING);
3968 } else if (cmd.edge == ME4000_AI_TRIGGER_EXT_EDGE_FALLING) {
3969 tmp |= ME4000_AI_CTRL_BIT_EX_TRIG_FALLING;
3970 tmp &= ~ME4000_AI_CTRL_BIT_EX_TRIG_BOTH;
3971 } else if (cmd.edge == ME4000_AI_TRIGGER_EXT_EDGE_BOTH) {
3972 tmp |=
3973 ME4000_AI_CTRL_BIT_EX_TRIG_BOTH |
3974 ME4000_AI_CTRL_BIT_EX_TRIG_FALLING;
3975 } else {
3976 spin_unlock_irqrestore(&ai_context->int_lock, flags);
3977 printk(KERN_ERR
3978 "ME4000:me4000_ai_ex_trig_setup():Invalid trigger edge specified\n");
3979 return -EINVAL;
3980 }
3981
3982 me4000_outl(tmp, ai_context->ctrl_reg);
3983 spin_unlock_irqrestore(&ai_context->int_lock, flags);
3984 return 0;
3985 }
3986
3987 static int me4000_ai_sc_setup(struct me4000_ai_sc *arg,
3988 struct me4000_ai_context *ai_context)
3989 {
3990 struct me4000_ai_sc cmd;
3991 int err;
3992
3993 CALL_PDEBUG("me4000_ai_sc_setup() is executed\n");
3994
3995 /* Copy data from user */
3996 err = copy_from_user(&cmd, arg, sizeof(struct me4000_ai_sc));
3997 if (err) {
3998 printk(KERN_ERR
3999 "ME4000:me4000_ai_sc_setup():Can't copy from user space\n");
4000 return -EFAULT;
4001 }
4002
4003 ai_context->sample_counter = cmd.value;
4004 ai_context->sample_counter_reload = cmd.reload;
4005
4006 return 0;
4007 }
4008
4009 static ssize_t me4000_ai_read(struct file *filep, char *buff, size_t cnt,
4010 loff_t *offp)
4011 {
4012 struct me4000_ai_context *ai_context = filep->private_data;
4013 s16 *buffer = (s16 *) buff;
4014 size_t count = cnt / 2;
4015 unsigned long flags;
4016 int tmp;
4017 int c = 0;
4018 int k = 0;
4019 int ret = 0;
4020 wait_queue_t wait;
4021
4022 CALL_PDEBUG("me4000_ai_read() is executed\n");
4023
4024 init_waitqueue_entry(&wait, current);
4025
4026 /* Check count */
4027 if (count <= 0) {
4028 PDEBUG("me4000_ai_read():Count is 0\n");
4029 return 0;
4030 }
4031
4032 while (count > 0) {
4033 if (filep->f_flags & O_NONBLOCK) {
4034 c = me4000_values_to_end(ai_context->circ_buf,
4035 ME4000_AI_BUFFER_COUNT);
4036 if (!c) {
4037 PDEBUG
4038 ("me4000_ai_read():Returning from nonblocking read\n");
4039 break;
4040 }
4041 } else {
4042 /* Check if conversion is still running */
4043 if (!
4044 (me4000_inl(ai_context->status_reg) &
4045 ME4000_AI_STATUS_BIT_FSM)) {
4046 printk(KERN_ERR
4047 "ME4000:me4000_ai_read():Conversion interrupted\n");
4048 return -EPIPE;
4049 }
4050
4051 wait_event_interruptible(ai_context->wait_queue,
4052 (me4000_values_to_end
4053 (ai_context->circ_buf,
4054 ME4000_AI_BUFFER_COUNT)));
4055 if (signal_pending(current)) {
4056 printk(KERN_ERR
4057 "ME4000:me4000_ai_read():Wait on values interrupted from signal\n");
4058 return -EINTR;
4059 }
4060 }
4061
4062 /* Only read count values or as much as available */
4063 c = me4000_values_to_end(ai_context->circ_buf,
4064 ME4000_AI_BUFFER_COUNT);
4065 PDEBUG("me4000_ai_read():%d values to end\n", c);
4066 if (count < c)
4067 c = count;
4068
4069 PDEBUG("me4000_ai_read():Copy %d values to user space\n", c);
4070 k = 2 * c;
4071 k -= copy_to_user(buffer,
4072 ai_context->circ_buf.buf +
4073 ai_context->circ_buf.tail, k);
4074 c = k / 2;
4075 if (!c) {
4076 printk(KERN_ERR
4077 "ME4000:me4000_ai_read():Cannot copy new values to user\n");
4078 return -EFAULT;
4079 }
4080
4081 ai_context->circ_buf.tail =
4082 (ai_context->circ_buf.tail + c) & (ME4000_AI_BUFFER_COUNT -
4083 1);
4084 buffer += c;
4085 count -= c;
4086 ret += c;
4087
4088 spin_lock_irqsave(&ai_context->int_lock, flags);
4089 if (me4000_buf_space
4090 (ai_context->circ_buf, ME4000_AI_BUFFER_COUNT)) {
4091 tmp = me4000_inl(ai_context->ctrl_reg);
4092
4093 /* Determine interrupt setup */
4094 if (ai_context->sample_counter
4095 && !ai_context->sample_counter_reload) {
4096 /* Enable Half Full Interrupt and Sample Counter Interrupt */
4097 tmp |=
4098 ME4000_AI_CTRL_BIT_SC_IRQ |
4099 ME4000_AI_CTRL_BIT_HF_IRQ;
4100 } else if (ai_context->sample_counter
4101 && ai_context->sample_counter_reload) {
4102 if (ai_context->sample_counter <
4103 ME4000_AI_FIFO_COUNT / 2) {
4104 /* Enable only Sample Counter Interrupt */
4105 tmp |= ME4000_AI_CTRL_BIT_SC_IRQ;
4106 } else {
4107 /* Enable Half Full Interrupt and Sample Counter Interrupt */
4108 tmp |=
4109 ME4000_AI_CTRL_BIT_SC_IRQ |
4110 ME4000_AI_CTRL_BIT_HF_IRQ;
4111 }
4112 } else {
4113 /* Enable only Half Full Interrupt */
4114 tmp |= ME4000_AI_CTRL_BIT_HF_IRQ;
4115 }
4116
4117 me4000_outl(tmp, ai_context->ctrl_reg);
4118 }
4119 spin_unlock_irqrestore(&ai_context->int_lock, flags);
4120 }
4121
4122 /* Check if conversion is still running */
4123 if (!(me4000_inl(ai_context->status_reg) & ME4000_AI_STATUS_BIT_FSM)) {
4124 printk(KERN_ERR
4125 "ME4000:me4000_ai_read():Conversion not running after complete read\n");
4126 return -EPIPE;
4127 }
4128
4129 if (filep->f_flags & O_NONBLOCK) {
4130 return (k == 0) ? -EAGAIN : 2 * ret;
4131 }
4132
4133 CALL_PDEBUG("me4000_ai_read() is leaved\n");
4134 return ret * 2;
4135 }
4136
4137 static unsigned int me4000_ai_poll(struct file *file_p, poll_table *wait)
4138 {
4139 struct me4000_ai_context *ai_context;
4140 unsigned long mask = 0;
4141
4142 CALL_PDEBUG("me4000_ai_poll() is executed\n");
4143
4144 ai_context = file_p->private_data;
4145
4146 /* Register wait queue */
4147 poll_wait(file_p, &ai_context->wait_queue, wait);
4148
4149 /* Get available values */
4150 if (me4000_values_to_end(ai_context->circ_buf, ME4000_AI_BUFFER_COUNT))
4151 mask |= POLLIN | POLLRDNORM;
4152
4153 PDEBUG("me4000_ai_poll():Return mask %lX\n", mask);
4154
4155 return mask;
4156 }
4157
4158 static int me4000_ai_offset_enable(struct me4000_ai_context *ai_context)
4159 {
4160 unsigned long tmp;
4161
4162 CALL_PDEBUG("me4000_ai_offset_enable() is executed\n");
4163
4164 tmp = me4000_inl(ai_context->ctrl_reg);
4165 tmp |= ME4000_AI_CTRL_BIT_OFFSET;
4166 me4000_outl(tmp, ai_context->ctrl_reg);
4167
4168 return 0;
4169 }
4170
4171 static int me4000_ai_offset_disable(struct me4000_ai_context *ai_context)
4172 {
4173 unsigned long tmp;
4174
4175 CALL_PDEBUG("me4000_ai_offset_disable() is executed\n");
4176
4177 tmp = me4000_inl(ai_context->ctrl_reg);
4178 tmp &= ~ME4000_AI_CTRL_BIT_OFFSET;
4179 me4000_outl(tmp, ai_context->ctrl_reg);
4180
4181 return 0;
4182 }
4183
4184 static int me4000_ai_fullscale_enable(struct me4000_ai_context *ai_context)
4185 {
4186 unsigned long tmp;
4187
4188 CALL_PDEBUG("me4000_ai_fullscale_enable() is executed\n");
4189
4190 tmp = me4000_inl(ai_context->ctrl_reg);
4191 tmp |= ME4000_AI_CTRL_BIT_FULLSCALE;
4192 me4000_outl(tmp, ai_context->ctrl_reg);
4193
4194 return 0;
4195 }
4196
4197 static int me4000_ai_fullscale_disable(struct me4000_ai_context *ai_context)
4198 {
4199 unsigned long tmp;
4200
4201 CALL_PDEBUG("me4000_ai_fullscale_disable() is executed\n");
4202
4203 tmp = me4000_inl(ai_context->ctrl_reg);
4204 tmp &= ~ME4000_AI_CTRL_BIT_FULLSCALE;
4205 me4000_outl(tmp, ai_context->ctrl_reg);
4206
4207 return 0;
4208 }
4209
4210 static int me4000_ai_fsm_state(int *arg, struct me4000_ai_context *ai_context)
4211 {
4212 unsigned long tmp;
4213
4214 CALL_PDEBUG("me4000_ai_fsm_state() is executed\n");
4215
4216 tmp =
4217 (me4000_inl(ai_context->status_reg) & ME4000_AI_STATUS_BIT_FSM) ? 1
4218 : 0;
4219
4220 if (put_user(tmp, arg)) {
4221 printk(KERN_ERR "me4000_ai_fsm_state():Cannot copy to user\n");
4222 return -EFAULT;
4223 }
4224
4225 return 0;
4226 }
4227
4228 static int me4000_ai_get_count_buffer(unsigned long *arg,
4229 struct me4000_ai_context *ai_context)
4230 {
4231 unsigned long c;
4232 int err;
4233
4234 c = me4000_buf_count(ai_context->circ_buf, ME4000_AI_BUFFER_COUNT);
4235
4236 err = copy_to_user(arg, &c, sizeof(unsigned long));
4237 if (err) {
4238 printk(KERN_ERR
4239 "%s:Can't copy to user space\n", __func__);
4240 return -EFAULT;
4241 }
4242
4243 return 0;
4244 }
4245
4246 /*---------------------------------- EEPROM stuff ---------------------------*/
4247
4248 static int eeprom_write_cmd(struct me4000_ai_context *ai_context, unsigned long cmd,
4249 int length)
4250 {
4251 int i;
4252 unsigned long value;
4253
4254 CALL_PDEBUG("eeprom_write_cmd() is executed\n");
4255
4256 PDEBUG("eeprom_write_cmd():Write command 0x%08lX with length = %d\n",
4257 cmd, length);
4258
4259 /* Get the ICR register and clear the related bits */
4260 value = me4000_inl(ai_context->board_info->plx_regbase + PLX_ICR);
4261 value &= ~(PLX_ICR_MASK_EEPROM);
4262 me4000_outl(value, ai_context->board_info->plx_regbase + PLX_ICR);
4263
4264 /* Raise the chip select */
4265 value |= PLX_ICR_BIT_EEPROM_CHIP_SELECT;
4266 me4000_outl(value, ai_context->board_info->plx_regbase + PLX_ICR);
4267 udelay(EEPROM_DELAY);
4268
4269 for (i = 0; i < length; i++) {
4270 if (cmd & ((0x1 << (length - 1)) >> i)) {
4271 value |= PLX_ICR_BIT_EEPROM_WRITE;
4272 } else {
4273 value &= ~PLX_ICR_BIT_EEPROM_WRITE;
4274 }
4275
4276 /* Write to EEPROM */
4277 me4000_outl(value,
4278 ai_context->board_info->plx_regbase + PLX_ICR);
4279 udelay(EEPROM_DELAY);
4280
4281 /* Raising edge of the clock */
4282 value |= PLX_ICR_BIT_EEPROM_CLOCK_SET;
4283 me4000_outl(value,
4284 ai_context->board_info->plx_regbase + PLX_ICR);
4285 udelay(EEPROM_DELAY);
4286
4287 /* Falling edge of the clock */
4288 value &= ~PLX_ICR_BIT_EEPROM_CLOCK_SET;
4289 me4000_outl(value,
4290 ai_context->board_info->plx_regbase + PLX_ICR);
4291 udelay(EEPROM_DELAY);
4292 }
4293
4294 /* Clear the chip select */
4295 value &= ~PLX_ICR_BIT_EEPROM_CHIP_SELECT;
4296 me4000_outl(value, ai_context->board_info->plx_regbase + PLX_ICR);
4297 udelay(EEPROM_DELAY);
4298
4299 /* Wait until hardware is ready for sure */
4300 mdelay(10);
4301
4302 return 0;
4303 }
4304
4305 static unsigned short eeprom_read_cmd(struct me4000_ai_context *ai_context,
4306 unsigned long cmd, int length)
4307 {
4308 int i;
4309 unsigned long value;
4310 unsigned short id = 0;
4311
4312 CALL_PDEBUG("eeprom_read_cmd() is executed\n");
4313
4314 PDEBUG("eeprom_read_cmd():Read command 0x%08lX with length = %d\n", cmd,
4315 length);
4316
4317 /* Get the ICR register and clear the related bits */
4318 value = me4000_inl(ai_context->board_info->plx_regbase + PLX_ICR);
4319 value &= ~(PLX_ICR_MASK_EEPROM);
4320
4321 me4000_outl(value, ai_context->board_info->plx_regbase + PLX_ICR);
4322
4323 /* Raise the chip select */
4324 value |= PLX_ICR_BIT_EEPROM_CHIP_SELECT;
4325 me4000_outl(value, ai_context->board_info->plx_regbase + PLX_ICR);
4326 udelay(EEPROM_DELAY);
4327
4328 /* Write the read command to the eeprom */
4329 for (i = 0; i < length; i++) {
4330 if (cmd & ((0x1 << (length - 1)) >> i)) {
4331 value |= PLX_ICR_BIT_EEPROM_WRITE;
4332 } else {
4333 value &= ~PLX_ICR_BIT_EEPROM_WRITE;
4334 }
4335 me4000_outl(value,
4336 ai_context->board_info->plx_regbase + PLX_ICR);
4337 udelay(EEPROM_DELAY);
4338
4339 /* Raising edge of the clock */
4340 value |= PLX_ICR_BIT_EEPROM_CLOCK_SET;
4341 me4000_outl(value,
4342 ai_context->board_info->plx_regbase + PLX_ICR);
4343 udelay(EEPROM_DELAY);
4344
4345 /* Falling edge of the clock */
4346 value &= ~PLX_ICR_BIT_EEPROM_CLOCK_SET;
4347 me4000_outl(value,
4348 ai_context->board_info->plx_regbase + PLX_ICR);
4349 udelay(EEPROM_DELAY);
4350 }
4351
4352 /* Read the value from the eeprom */
4353 for (i = 0; i < 16; i++) {
4354 /* Raising edge of the clock */
4355 value |= PLX_ICR_BIT_EEPROM_CLOCK_SET;
4356 me4000_outl(value,
4357 ai_context->board_info->plx_regbase + PLX_ICR);
4358 udelay(EEPROM_DELAY);
4359
4360 if (me4000_inl(ai_context->board_info->plx_regbase + PLX_ICR) &
4361 PLX_ICR_BIT_EEPROM_READ) {
4362 id |= (0x8000 >> i);
4363 PDEBUG("eeprom_read_cmd():OR with 0x%04X\n",
4364 (0x8000 >> i));
4365 } else {
4366 PDEBUG("eeprom_read_cmd():Dont't OR\n");
4367 }
4368
4369 /* Falling edge of the clock */
4370 value &= ~PLX_ICR_BIT_EEPROM_CLOCK_SET;
4371 me4000_outl(value,
4372 ai_context->board_info->plx_regbase + PLX_ICR);
4373 udelay(EEPROM_DELAY);
4374 }
4375
4376 /* Clear the chip select */
4377 value &= ~PLX_ICR_BIT_EEPROM_CHIP_SELECT;
4378 me4000_outl(value, ai_context->board_info->plx_regbase + PLX_ICR);
4379 udelay(EEPROM_DELAY);
4380
4381 return id;
4382 }
4383
4384 static int me4000_eeprom_write(struct me4000_eeprom *arg,
4385 struct me4000_ai_context *ai_context)
4386 {
4387 int err;
4388 struct me4000_eeprom setup;
4389 unsigned long cmd;
4390 unsigned long date_high;
4391 unsigned long date_low;
4392
4393 CALL_PDEBUG("me4000_eeprom_write() is executed\n");
4394
4395 err = copy_from_user(&setup, arg, sizeof(setup));
4396 if (err) {
4397 printk(KERN_ERR
4398 "ME4000:me4000_eeprom_write():Cannot copy from user\n");
4399 return err;
4400 }
4401
4402 /* Enable writing */
4403 eeprom_write_cmd(ai_context, ME4000_EEPROM_CMD_WRITE_ENABLE,
4404 ME4000_EEPROM_CMD_LENGTH_WRITE_ENABLE);
4405
4406 /* Command for date */
4407 date_high = (setup.date & 0xFFFF0000) >> 16;
4408 date_low = (setup.date & 0x0000FFFF);
4409
4410 cmd =
4411 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_DATE_HIGH <<
4412 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4413 (unsigned
4414 long)
4415 date_high);
4416 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4417 if (err)
4418 return err;
4419
4420 cmd =
4421 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_DATE_LOW <<
4422 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4423 (unsigned
4424 long)
4425 date_low);
4426 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4427 if (err)
4428 return err;
4429
4430 /* Command for unipolar 10V offset */
4431 cmd =
4432 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_1_UNI_OFFSET <<
4433 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4434 (unsigned
4435 long)
4436 setup.
4437 uni_10_offset);
4438 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4439 if (err)
4440 return err;
4441
4442 /* Command for unipolar 10V fullscale */
4443 cmd =
4444 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_1_UNI_FULLSCALE <<
4445 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4446 (unsigned
4447 long)
4448 setup.
4449 uni_10_fullscale);
4450 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4451 if (err)
4452 return err;
4453
4454 /* Command for unipolar 2,5V offset */
4455 cmd =
4456 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_4_UNI_OFFSET <<
4457 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4458 (unsigned
4459 long)
4460 setup.
4461 uni_2_5_offset);
4462 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4463 if (err)
4464 return err;
4465
4466 /* Command for unipolar 2,5V fullscale */
4467 cmd =
4468 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_4_UNI_FULLSCALE <<
4469 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4470 (unsigned
4471 long)
4472 setup.
4473 uni_2_5_fullscale);
4474 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4475 if (err)
4476 return err;
4477
4478 /* Command for bipolar 10V offset */
4479 cmd =
4480 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_1_BI_OFFSET <<
4481 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4482 (unsigned
4483 long)
4484 setup.
4485 bi_10_offset);
4486 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4487 if (err)
4488 return err;
4489
4490 /* Command for bipolar 10V fullscale */
4491 cmd =
4492 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_1_BI_FULLSCALE <<
4493 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4494 (unsigned
4495 long)
4496 setup.
4497 bi_10_fullscale);
4498 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4499 if (err)
4500 return err;
4501
4502 /* Command for bipolar 2,5V offset */
4503 cmd =
4504 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_4_BI_OFFSET <<
4505 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4506 (unsigned
4507 long)
4508 setup.
4509 bi_2_5_offset);
4510 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4511 if (err)
4512 return err;
4513
4514 /* Command for bipolar 2,5V fullscale */
4515 cmd =
4516 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_4_BI_FULLSCALE <<
4517 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4518 (unsigned
4519 long)
4520 setup.
4521 bi_2_5_fullscale);
4522 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4523 if (err)
4524 return err;
4525
4526 /* Command for differential 10V offset */
4527 cmd =
4528 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_1_DIFF_OFFSET <<
4529 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4530 (unsigned
4531 long)
4532 setup.
4533 diff_10_offset);
4534 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4535 if (err)
4536 return err;
4537
4538 /* Command for differential 10V fullscale */
4539 cmd =
4540 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_1_DIFF_FULLSCALE
4541 << ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4542 (unsigned
4543 long)
4544 setup.
4545 diff_10_fullscale);
4546 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4547 if (err)
4548 return err;
4549
4550 /* Command for differential 2,5V offset */
4551 cmd =
4552 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_4_DIFF_OFFSET <<
4553 ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4554 (unsigned
4555 long)
4556 setup.
4557 diff_2_5_offset);
4558 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4559 if (err)
4560 return err;
4561
4562 /* Command for differential 2,5V fullscale */
4563 cmd =
4564 ME4000_EEPROM_CMD_WRITE | (ME4000_EEPROM_ADR_GAIN_4_DIFF_FULLSCALE
4565 << ME4000_EEPROM_DATA_LENGTH) | (0xFFFF &
4566 (unsigned
4567 long)
4568 setup.
4569 diff_2_5_fullscale);
4570 err = eeprom_write_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_WRITE);
4571 if (err)
4572 return err;
4573
4574 /* Disable writing */
4575 eeprom_write_cmd(ai_context, ME4000_EEPROM_CMD_WRITE_DISABLE,
4576 ME4000_EEPROM_CMD_LENGTH_WRITE_DISABLE);
4577
4578 return 0;
4579 }
4580
4581 static int me4000_eeprom_read(struct me4000_eeprom *arg,
4582 struct me4000_ai_context *ai_context)
4583 {
4584 int err;
4585 unsigned long cmd;
4586 struct me4000_eeprom setup;
4587
4588 CALL_PDEBUG("me4000_eeprom_read() is executed\n");
4589
4590 /* Command for date */
4591 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_DATE_HIGH;
4592 setup.date =
4593 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4594 setup.date <<= 16;
4595 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_DATE_LOW;
4596 setup.date |=
4597 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4598
4599 /* Command for unipolar 10V offset */
4600 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_1_UNI_OFFSET;
4601 setup.uni_10_offset =
4602 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4603
4604 /* Command for unipolar 10V fullscale */
4605 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_1_UNI_FULLSCALE;
4606 setup.uni_10_fullscale =
4607 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4608
4609 /* Command for unipolar 2,5V offset */
4610 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_4_UNI_OFFSET;
4611 setup.uni_2_5_offset =
4612 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4613
4614 /* Command for unipolar 2,5V fullscale */
4615 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_4_UNI_FULLSCALE;
4616 setup.uni_2_5_fullscale =
4617 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4618
4619 /* Command for bipolar 10V offset */
4620 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_1_BI_OFFSET;
4621 setup.bi_10_offset =
4622 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4623
4624 /* Command for bipolar 10V fullscale */
4625 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_1_BI_FULLSCALE;
4626 setup.bi_10_fullscale =
4627 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4628
4629 /* Command for bipolar 2,5V offset */
4630 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_4_BI_OFFSET;
4631 setup.bi_2_5_offset =
4632 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4633
4634 /* Command for bipolar 2,5V fullscale */
4635 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_4_BI_FULLSCALE;
4636 setup.bi_2_5_fullscale =
4637 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4638
4639 /* Command for differntial 10V offset */
4640 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_1_DIFF_OFFSET;
4641 setup.diff_10_offset =
4642 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4643
4644 /* Command for differential 10V fullscale */
4645 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_1_DIFF_FULLSCALE;
4646 setup.diff_10_fullscale =
4647 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4648
4649 /* Command for differntial 2,5V offset */
4650 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_4_DIFF_OFFSET;
4651 setup.diff_2_5_offset =
4652 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4653
4654 /* Command for differential 2,5V fullscale */
4655 cmd = ME4000_EEPROM_CMD_READ | ME4000_EEPROM_ADR_GAIN_4_DIFF_FULLSCALE;
4656 setup.diff_2_5_fullscale =
4657 eeprom_read_cmd(ai_context, cmd, ME4000_EEPROM_CMD_LENGTH_READ);
4658
4659 err = copy_to_user(arg, &setup, sizeof(setup));
4660 if (err) {
4661 printk(KERN_ERR
4662 "ME4000:me4000_eeprom_read():Cannot copy to user\n");
4663 return err;
4664 }
4665
4666 return 0;
4667 }
4668
4669 /*------------------------------------ DIO stuff ----------------------------------------------*/
4670
4671 static int me4000_dio_ioctl(struct inode *inode_p, struct file *file_p,
4672 unsigned int service, unsigned long arg)
4673 {
4674 struct me4000_dio_context *dio_context;
4675
4676 CALL_PDEBUG("me4000_dio_ioctl() is executed\n");
4677
4678 dio_context = file_p->private_data;
4679
4680 if (_IOC_TYPE(service) != ME4000_MAGIC) {
4681 printk(KERN_ERR "me4000_dio_ioctl():Wrong magic number\n");
4682 return -ENOTTY;
4683 }
4684 if (_IOC_NR(service) > ME4000_IOCTL_MAXNR) {
4685 printk(KERN_ERR "me4000_dio_ioctl():Service number to high\n");
4686 return -ENOTTY;
4687 }
4688
4689 switch (service) {
4690 case ME4000_DIO_CONFIG:
4691 return me4000_dio_config((struct me4000_dio_config *)arg,
4692 dio_context);
4693 case ME4000_DIO_SET_BYTE:
4694 return me4000_dio_set_byte((struct me4000_dio_byte *)arg,
4695 dio_context);
4696 case ME4000_DIO_GET_BYTE:
4697 return me4000_dio_get_byte((struct me4000_dio_byte *)arg,
4698 dio_context);
4699 case ME4000_DIO_RESET:
4700 return me4000_dio_reset(dio_context);
4701 default:
4702 printk(KERN_ERR
4703 "ME4000:me4000_dio_ioctl():Invalid service number %d\n",
4704 service);
4705 return -ENOTTY;
4706 }
4707 return 0;
4708 }
4709
4710 static int me4000_dio_config(struct me4000_dio_config *arg,
4711 struct me4000_dio_context *dio_context)
4712 {
4713 struct me4000_dio_config cmd;
4714 u32 tmp;
4715 int err;
4716
4717 CALL_PDEBUG("me4000_dio_config() is executed\n");
4718
4719 /* Copy data from user */
4720 err = copy_from_user(&cmd, arg, sizeof(struct me4000_dio_config));
4721 if (err) {
4722 printk(KERN_ERR
4723 "ME4000:me4000_dio_config():Can't copy from user space\n");
4724 return -EFAULT;
4725 }
4726
4727 /* Check port parameter */
4728 if (cmd.port >= dio_context->dio_count) {
4729 printk(KERN_ERR
4730 "ME4000:me4000_dio_config():Port %d is not available\n",
4731 cmd.port);
4732 return -EINVAL;
4733 }
4734
4735 PDEBUG("me4000_dio_config(): port %d, mode %d, function %d\n", cmd.port,
4736 cmd.mode, cmd.function);
4737
4738 if (cmd.port == ME4000_DIO_PORT_A) {
4739 if (cmd.mode == ME4000_DIO_PORT_INPUT) {
4740 /* Check if opto isolated version */
4741 if (!(me4000_inl(dio_context->dir_reg) & 0x1)) {
4742 printk(KERN_ERR
4743 "ME4000:me4000_dio_config():Cannot set to input on opto isolated versions\n");
4744 return -EIO;
4745 }
4746
4747 tmp = me4000_inl(dio_context->ctrl_reg);
4748 tmp &=
4749 ~(ME4000_DIO_CTRL_BIT_MODE_0 |
4750 ME4000_DIO_CTRL_BIT_MODE_1);
4751 me4000_outl(tmp, dio_context->ctrl_reg);
4752 } else if (cmd.mode == ME4000_DIO_PORT_OUTPUT) {
4753 tmp = me4000_inl(dio_context->ctrl_reg);
4754 tmp &=
4755 ~(ME4000_DIO_CTRL_BIT_MODE_0 |
4756 ME4000_DIO_CTRL_BIT_MODE_1);
4757 tmp |= ME4000_DIO_CTRL_BIT_MODE_0;
4758 me4000_outl(tmp, dio_context->ctrl_reg);
4759 } else if (cmd.mode == ME4000_DIO_FIFO_LOW) {
4760 tmp = me4000_inl(dio_context->ctrl_reg);
4761 tmp &=
4762 ~(ME4000_DIO_CTRL_BIT_MODE_0 |
4763 ME4000_DIO_CTRL_BIT_MODE_1 |
4764 ME4000_DIO_CTRL_BIT_FIFO_HIGH_0);
4765 tmp |=
4766 ME4000_DIO_CTRL_BIT_MODE_0 |
4767 ME4000_DIO_CTRL_BIT_MODE_1;
4768 me4000_outl(tmp, dio_context->ctrl_reg);
4769 } else if (cmd.mode == ME4000_DIO_FIFO_HIGH) {
4770 tmp = me4000_inl(dio_context->ctrl_reg);
4771 tmp |=
4772 ME4000_DIO_CTRL_BIT_MODE_0 |
4773 ME4000_DIO_CTRL_BIT_MODE_1 |
4774 ME4000_DIO_CTRL_BIT_FIFO_HIGH_0;
4775 me4000_outl(tmp, dio_context->ctrl_reg);
4776 } else {
4777 printk(KERN_ERR
4778 "ME4000:me4000_dio_config():Mode %d is not available\n",
4779 cmd.mode);
4780 return -EINVAL;
4781 }
4782 } else if (cmd.port == ME4000_DIO_PORT_B) {
4783 if (cmd.mode == ME4000_DIO_PORT_INPUT) {
4784 /* Only do anything when TTL version is installed */
4785 if ((me4000_inl(dio_context->dir_reg) & 0x1)) {
4786 tmp = me4000_inl(dio_context->ctrl_reg);
4787 tmp &=
4788 ~(ME4000_DIO_CTRL_BIT_MODE_2 |
4789 ME4000_DIO_CTRL_BIT_MODE_3);
4790 me4000_outl(tmp, dio_context->ctrl_reg);
4791 }
4792 } else if (cmd.mode == ME4000_DIO_PORT_OUTPUT) {
4793 /* Check if opto isolated version */
4794 if (!(me4000_inl(dio_context->dir_reg) & 0x1)) {
4795 printk(KERN_ERR
4796 "ME4000:me4000_dio_config():Cannot set to output on opto isolated versions\n");
4797 return -EIO;
4798 }
4799
4800 tmp = me4000_inl(dio_context->ctrl_reg);
4801 tmp &=
4802 ~(ME4000_DIO_CTRL_BIT_MODE_2 |
4803 ME4000_DIO_CTRL_BIT_MODE_3);
4804 tmp |= ME4000_DIO_CTRL_BIT_MODE_2;
4805 me4000_outl(tmp, dio_context->ctrl_reg);
4806 } else if (cmd.mode == ME4000_DIO_FIFO_LOW) {
4807 /* Check if opto isolated version */
4808 if (!(me4000_inl(dio_context->dir_reg) & 0x1)) {
4809 printk(KERN_ERR
4810 "ME4000:me4000_dio_config():Cannot set to FIFO low output on opto isolated versions\n");
4811 return -EIO;
4812 }
4813
4814 tmp = me4000_inl(dio_context->ctrl_reg);
4815 tmp &=
4816 ~(ME4000_DIO_CTRL_BIT_MODE_2 |
4817 ME4000_DIO_CTRL_BIT_MODE_3 |
4818 ME4000_DIO_CTRL_BIT_FIFO_HIGH_1);
4819 tmp |=
4820 ME4000_DIO_CTRL_BIT_MODE_2 |
4821 ME4000_DIO_CTRL_BIT_MODE_3;
4822 me4000_outl(tmp, dio_context->ctrl_reg);
4823 } else if (cmd.mode == ME4000_DIO_FIFO_HIGH) {
4824 /* Check if opto isolated version */
4825 if (!(me4000_inl(dio_context->dir_reg) & 0x1)) {
4826 printk(KERN_ERR
4827 "ME4000:me4000_dio_config():Cannot set to FIFO high output on opto isolated versions\n");
4828 return -EIO;
4829 }
4830
4831 tmp = me4000_inl(dio_context->ctrl_reg);
4832 tmp |=
4833 ME4000_DIO_CTRL_BIT_MODE_2 |
4834 ME4000_DIO_CTRL_BIT_MODE_3 |
4835 ME4000_DIO_CTRL_BIT_FIFO_HIGH_1;
4836 me4000_outl(tmp, dio_context->ctrl_reg);
4837 } else {
4838 printk(KERN_ERR
4839 "ME4000:me4000_dio_config():Mode %d is not available\n",
4840 cmd.mode);
4841 return -EINVAL;
4842 }
4843 } else if (cmd.port == ME4000_DIO_PORT_C) {
4844 if (cmd.mode == ME4000_DIO_PORT_INPUT) {
4845 tmp = me4000_inl(dio_context->ctrl_reg);
4846 tmp &=
4847 ~(ME4000_DIO_CTRL_BIT_MODE_4 |
4848 ME4000_DIO_CTRL_BIT_MODE_5);
4849 me4000_outl(tmp, dio_context->ctrl_reg);
4850 } else if (cmd.mode == ME4000_DIO_PORT_OUTPUT) {
4851 tmp = me4000_inl(dio_context->ctrl_reg);
4852 tmp &=
4853 ~(ME4000_DIO_CTRL_BIT_MODE_4 |
4854 ME4000_DIO_CTRL_BIT_MODE_5);
4855 tmp |= ME4000_DIO_CTRL_BIT_MODE_4;
4856 me4000_outl(tmp, dio_context->ctrl_reg);
4857 } else if (cmd.mode == ME4000_DIO_FIFO_LOW) {
4858 tmp = me4000_inl(dio_context->ctrl_reg);
4859 tmp &=
4860 ~(ME4000_DIO_CTRL_BIT_MODE_4 |
4861 ME4000_DIO_CTRL_BIT_MODE_5 |
4862 ME4000_DIO_CTRL_BIT_FIFO_HIGH_2);
4863 tmp |=
4864 ME4000_DIO_CTRL_BIT_MODE_4 |
4865 ME4000_DIO_CTRL_BIT_MODE_5;
4866 me4000_outl(tmp, dio_context->ctrl_reg);
4867 } else if (cmd.mode == ME4000_DIO_FIFO_HIGH) {
4868 tmp = me4000_inl(dio_context->ctrl_reg);
4869 tmp |=
4870 ME4000_DIO_CTRL_BIT_MODE_4 |
4871 ME4000_DIO_CTRL_BIT_MODE_5 |
4872 ME4000_DIO_CTRL_BIT_FIFO_HIGH_2;
4873 me4000_outl(tmp, dio_context->ctrl_reg);
4874 } else {
4875 printk(KERN_ERR
4876 "ME4000:me4000_dio_config():Mode %d is not available\n",
4877 cmd.mode);
4878 return -EINVAL;
4879 }
4880 } else if (cmd.port == ME4000_DIO_PORT_D) {
4881 if (cmd.mode == ME4000_DIO_PORT_INPUT) {
4882 tmp = me4000_inl(dio_context->ctrl_reg);
4883 tmp &=
4884 ~(ME4000_DIO_CTRL_BIT_MODE_6 |
4885 ME4000_DIO_CTRL_BIT_MODE_7);
4886 me4000_outl(tmp, dio_context->ctrl_reg);
4887 } else if (cmd.mode == ME4000_DIO_PORT_OUTPUT) {
4888 tmp = me4000_inl(dio_context->ctrl_reg);
4889 tmp &=
4890 ~(ME4000_DIO_CTRL_BIT_MODE_6 |
4891 ME4000_DIO_CTRL_BIT_MODE_7);
4892 tmp |= ME4000_DIO_CTRL_BIT_MODE_6;
4893 me4000_outl(tmp, dio_context->ctrl_reg);
4894 } else if (cmd.mode == ME4000_DIO_FIFO_LOW) {
4895 tmp = me4000_inl(dio_context->ctrl_reg);
4896 tmp &=
4897 ~(ME4000_DIO_CTRL_BIT_MODE_6 |
4898 ME4000_DIO_CTRL_BIT_MODE_7 |
4899 ME4000_DIO_CTRL_BIT_FIFO_HIGH_3);
4900 tmp |=
4901 ME4000_DIO_CTRL_BIT_MODE_6 |
4902 ME4000_DIO_CTRL_BIT_MODE_7;
4903 me4000_outl(tmp, dio_context->ctrl_reg);
4904 } else if (cmd.mode == ME4000_DIO_FIFO_HIGH) {
4905 tmp = me4000_inl(dio_context->ctrl_reg);
4906 tmp |=
4907 ME4000_DIO_CTRL_BIT_MODE_6 |
4908 ME4000_DIO_CTRL_BIT_MODE_7 |
4909 ME4000_DIO_CTRL_BIT_FIFO_HIGH_3;
4910 me4000_outl(tmp, dio_context->ctrl_reg);
4911 } else {
4912 printk(KERN_ERR
4913 "ME4000:me4000_dio_config():Mode %d is not available\n",
4914 cmd.mode);
4915 return -EINVAL;
4916 }
4917 } else {
4918 printk(KERN_ERR
4919 "ME4000:me4000_dio_config():Port %d is not available\n",
4920 cmd.port);
4921 return -EINVAL;
4922 }
4923
4924 PDEBUG("me4000_dio_config(): port %d, mode %d, function %d\n", cmd.port,
4925 cmd.mode, cmd.function);
4926
4927 if ((cmd.mode == ME4000_DIO_FIFO_HIGH)
4928 || (cmd.mode == ME4000_DIO_FIFO_LOW)) {
4929 tmp = me4000_inl(dio_context->ctrl_reg);
4930 tmp &=
4931 ~(ME4000_DIO_CTRL_BIT_FUNCTION_0 |
4932 ME4000_DIO_CTRL_BIT_FUNCTION_1);
4933 if (cmd.function == ME4000_DIO_FUNCTION_PATTERN) {
4934 me4000_outl(tmp, dio_context->ctrl_reg);
4935 } else if (cmd.function == ME4000_DIO_FUNCTION_DEMUX) {
4936 tmp |= ME4000_DIO_CTRL_BIT_FUNCTION_0;
4937 me4000_outl(tmp, dio_context->ctrl_reg);
4938 } else if (cmd.function == ME4000_DIO_FUNCTION_MUX) {
4939 tmp |= ME4000_DIO_CTRL_BIT_FUNCTION_1;
4940 me4000_outl(tmp, dio_context->ctrl_reg);
4941 } else {
4942 printk(KERN_ERR
4943 "ME4000:me4000_dio_config():Invalid port function specified\n");
4944 return -EINVAL;
4945 }
4946 }
4947
4948 return 0;
4949 }
4950
4951 static int me4000_dio_set_byte(struct me4000_dio_byte *arg,
4952 struct me4000_dio_context *dio_context)
4953 {
4954 struct me4000_dio_byte cmd;
4955 int err;
4956
4957 CALL_PDEBUG("me4000_dio_set_byte() is executed\n");
4958
4959 /* Copy data from user */
4960 err = copy_from_user(&cmd, arg, sizeof(struct me4000_dio_byte));
4961 if (err) {
4962 printk(KERN_ERR
4963 "ME4000:me4000_dio_set_byte():Can't copy from user space\n");
4964 return -EFAULT;
4965 }
4966
4967 /* Check port parameter */
4968 if (cmd.port >= dio_context->dio_count) {
4969 printk(KERN_ERR
4970 "ME4000:me4000_dio_set_byte():Port %d is not available\n",
4971 cmd.port);
4972 return -EINVAL;
4973 }
4974
4975 if (cmd.port == ME4000_DIO_PORT_A) {
4976 if ((me4000_inl(dio_context->ctrl_reg) & 0x3) != 0x1) {
4977 printk(KERN_ERR
4978 "ME4000:me4000_dio_set_byte():Port %d is not in output mode\n",
4979 cmd.port);
4980 return -EIO;
4981 }
4982 me4000_outl(cmd.byte, dio_context->port_0_reg);
4983 } else if (cmd.port == ME4000_DIO_PORT_B) {
4984 if ((me4000_inl(dio_context->ctrl_reg) & 0xC) != 0x4) {
4985 printk(KERN_ERR
4986 "ME4000:me4000_dio_set_byte():Port %d is not in output mode\n",
4987 cmd.port);
4988 return -EIO;
4989 }
4990 me4000_outl(cmd.byte, dio_context->port_1_reg);
4991 } else if (cmd.port == ME4000_DIO_PORT_C) {
4992 if ((me4000_inl(dio_context->ctrl_reg) & 0x30) != 0x10) {
4993 printk(KERN_ERR
4994 "ME4000:me4000_dio_set_byte():Port %d is not in output mode\n",
4995 cmd.port);
4996 return -EIO;
4997 }
4998 me4000_outl(cmd.byte, dio_context->port_2_reg);
4999 } else if (cmd.port == ME4000_DIO_PORT_D) {
5000 if ((me4000_inl(dio_context->ctrl_reg) & 0xC0) != 0x40) {
5001 printk(KERN_ERR
5002 "ME4000:me4000_dio_set_byte():Port %d is not in output mode\n",
5003 cmd.port);
5004 return -EIO;
5005 }
5006 me4000_outl(cmd.byte, dio_context->port_3_reg);
5007 } else {
5008 printk(KERN_ERR
5009 "ME4000:me4000_dio_set_byte():Port %d is not available\n",
5010 cmd.port);
5011 return -EINVAL;
5012 }
5013
5014 return 0;
5015 }
5016
5017 static int me4000_dio_get_byte(struct me4000_dio_byte *arg,
5018 struct me4000_dio_context *dio_context)
5019 {
5020 struct me4000_dio_byte cmd;
5021 int err;
5022
5023 CALL_PDEBUG("me4000_dio_get_byte() is executed\n");
5024
5025 /* Copy data from user */
5026 err = copy_from_user(&cmd, arg, sizeof(struct me4000_dio_byte));
5027 if (err) {
5028 printk(KERN_ERR
5029 "ME4000:me4000_dio_get_byte():Can't copy from user space\n");
5030 return -EFAULT;
5031 }
5032
5033 /* Check port parameter */
5034 if (cmd.port >= dio_context->dio_count) {
5035 printk(KERN_ERR
5036 "ME4000:me4000_dio_get_byte():Port %d is not available\n",
5037 cmd.port);
5038 return -EINVAL;
5039 }
5040
5041 if (cmd.port == ME4000_DIO_PORT_A) {
5042 cmd.byte = me4000_inl(dio_context->port_0_reg) & 0xFF;
5043 } else if (cmd.port == ME4000_DIO_PORT_B) {
5044 cmd.byte = me4000_inl(dio_context->port_1_reg) & 0xFF;
5045 } else if (cmd.port == ME4000_DIO_PORT_C) {
5046 cmd.byte = me4000_inl(dio_context->port_2_reg) & 0xFF;
5047 } else if (cmd.port == ME4000_DIO_PORT_D) {
5048 cmd.byte = me4000_inl(dio_context->port_3_reg) & 0xFF;
5049 } else {
5050 printk(KERN_ERR
5051 "ME4000:me4000_dio_get_byte():Port %d is not available\n",
5052 cmd.port);
5053 return -EINVAL;
5054 }
5055
5056 /* Copy result back to user */
5057 err = copy_to_user(arg, &cmd, sizeof(struct me4000_dio_byte));
5058 if (err) {
5059 printk(KERN_ERR
5060 "ME4000:me4000_dio_get_byte():Can't copy to user space\n");
5061 return -EFAULT;
5062 }
5063
5064 return 0;
5065 }
5066
5067 static int me4000_dio_reset(struct me4000_dio_context *dio_context)
5068 {
5069 CALL_PDEBUG("me4000_dio_reset() is executed\n");
5070
5071 /* Clear the control register */
5072 me4000_outl(0, dio_context->ctrl_reg);
5073
5074 /* Check for opto isolated version */
5075 if (!(me4000_inl(dio_context->dir_reg) & 0x1)) {
5076 me4000_outl(0x1, dio_context->ctrl_reg);
5077 me4000_outl(0x0, dio_context->port_0_reg);
5078 }
5079
5080 return 0;
5081 }
5082
5083 /*------------------------------------ COUNTER STUFF ------------------------------------*/
5084
5085 static int me4000_cnt_ioctl(struct inode *inode_p, struct file *file_p,
5086 unsigned int service, unsigned long arg)
5087 {
5088 struct me4000_cnt_context *cnt_context;
5089
5090 CALL_PDEBUG("me4000_cnt_ioctl() is executed\n");
5091
5092 cnt_context = file_p->private_data;
5093
5094 if (_IOC_TYPE(service) != ME4000_MAGIC) {
5095 printk(KERN_ERR "me4000_dio_ioctl():Wrong magic number\n");
5096 return -ENOTTY;
5097 }
5098 if (_IOC_NR(service) > ME4000_IOCTL_MAXNR) {
5099 printk(KERN_ERR "me4000_dio_ioctl():Service number to high\n");
5100 return -ENOTTY;
5101 }
5102
5103 switch (service) {
5104 case ME4000_CNT_READ:
5105 return me4000_cnt_read((struct me4000_cnt *)arg, cnt_context);
5106 case ME4000_CNT_WRITE:
5107 return me4000_cnt_write((struct me4000_cnt *)arg, cnt_context);
5108 case ME4000_CNT_CONFIG:
5109 return me4000_cnt_config((struct me4000_cnt_config *)arg,
5110 cnt_context);
5111 case ME4000_CNT_RESET:
5112 return me4000_cnt_reset(cnt_context);
5113 default:
5114 printk(KERN_ERR
5115 "ME4000:me4000_dio_ioctl():Invalid service number %d\n",
5116 service);
5117 return -ENOTTY;
5118 }
5119 return 0;
5120 }
5121
5122 static int me4000_cnt_config(struct me4000_cnt_config *arg,
5123 struct me4000_cnt_context *cnt_context)
5124 {
5125 struct me4000_cnt_config cmd;
5126 u8 counter;
5127 u8 mode;
5128 int err;
5129
5130 CALL_PDEBUG("me4000_cnt_config() is executed\n");
5131
5132 /* Copy data from user */
5133 err = copy_from_user(&cmd, arg, sizeof(struct me4000_cnt_config));
5134 if (err) {
5135 printk(KERN_ERR
5136 "ME4000:me4000_cnt_config():Can't copy from user space\n");
5137 return -EFAULT;
5138 }
5139
5140 /* Check counter parameter */
5141 switch (cmd.counter) {
5142 case ME4000_CNT_COUNTER_0:
5143 counter = ME4000_CNT_CTRL_BIT_COUNTER_0;
5144 break;
5145 case ME4000_CNT_COUNTER_1:
5146 counter = ME4000_CNT_CTRL_BIT_COUNTER_1;
5147 break;
5148 case ME4000_CNT_COUNTER_2:
5149 counter = ME4000_CNT_CTRL_BIT_COUNTER_2;
5150 break;
5151 default:
5152 printk(KERN_ERR
5153 "ME4000:me4000_cnt_config():Counter %d is not available\n",
5154 cmd.counter);
5155 return -EINVAL;
5156 }
5157
5158 /* Check mode parameter */
5159 switch (cmd.mode) {
5160 case ME4000_CNT_MODE_0:
5161 mode = ME4000_CNT_CTRL_BIT_MODE_0;
5162 break;
5163 case ME4000_CNT_MODE_1:
5164 mode = ME4000_CNT_CTRL_BIT_MODE_1;
5165 break;
5166 case ME4000_CNT_MODE_2:
5167 mode = ME4000_CNT_CTRL_BIT_MODE_2;
5168 break;
5169 case ME4000_CNT_MODE_3:
5170 mode = ME4000_CNT_CTRL_BIT_MODE_3;
5171 break;
5172 case ME4000_CNT_MODE_4:
5173 mode = ME4000_CNT_CTRL_BIT_MODE_4;
5174 break;
5175 case ME4000_CNT_MODE_5:
5176 mode = ME4000_CNT_CTRL_BIT_MODE_5;
5177 break;
5178 default:
5179 printk(KERN_ERR
5180 "ME4000:me4000_cnt_config():Mode %d is not available\n",
5181 cmd.mode);
5182 return -EINVAL;
5183 }
5184
5185 /* Write the control word */
5186 me4000_outb((counter | mode | 0x30), cnt_context->ctrl_reg);
5187
5188 return 0;
5189 }
5190
5191 static int me4000_cnt_read(struct me4000_cnt *arg,
5192 struct me4000_cnt_context *cnt_context)
5193 {
5194 struct me4000_cnt cmd;
5195 u8 tmp;
5196 int err;
5197
5198 CALL_PDEBUG("me4000_cnt_read() is executed\n");
5199
5200 /* Copy data from user */
5201 err = copy_from_user(&cmd, arg, sizeof(struct me4000_cnt));
5202 if (err) {
5203 printk(KERN_ERR
5204 "ME4000:me4000_cnt_read():Can't copy from user space\n");
5205 return -EFAULT;
5206 }
5207
5208 /* Read counter */
5209 switch (cmd.counter) {
5210 case ME4000_CNT_COUNTER_0:
5211 tmp = me4000_inb(cnt_context->counter_0_reg);
5212 cmd.value = tmp;
5213 tmp = me4000_inb(cnt_context->counter_0_reg);
5214 cmd.value |= ((u16) tmp) << 8;
5215 break;
5216 case ME4000_CNT_COUNTER_1:
5217 tmp = me4000_inb(cnt_context->counter_1_reg);
5218 cmd.value = tmp;
5219 tmp = me4000_inb(cnt_context->counter_1_reg);
5220 cmd.value |= ((u16) tmp) << 8;
5221 break;
5222 case ME4000_CNT_COUNTER_2:
5223 tmp = me4000_inb(cnt_context->counter_2_reg);
5224 cmd.value = tmp;
5225 tmp = me4000_inb(cnt_context->counter_2_reg);
5226 cmd.value |= ((u16) tmp) << 8;
5227 break;
5228 default:
5229 printk(KERN_ERR
5230 "ME4000:me4000_cnt_read():Counter %d is not available\n",
5231 cmd.counter);
5232 return -EINVAL;
5233 }
5234
5235 /* Copy result back to user */
5236 err = copy_to_user(arg, &cmd, sizeof(struct me4000_cnt));
5237 if (err) {
5238 printk(KERN_ERR
5239 "ME4000:me4000_cnt_read():Can't copy to user space\n");
5240 return -EFAULT;
5241 }
5242
5243 return 0;
5244 }
5245
5246 static int me4000_cnt_write(struct me4000_cnt *arg,
5247 struct me4000_cnt_context *cnt_context)
5248 {
5249 struct me4000_cnt cmd;
5250 u8 tmp;
5251 int err;
5252
5253 CALL_PDEBUG("me4000_cnt_write() is executed\n");
5254
5255 /* Copy data from user */
5256 err = copy_from_user(&cmd, arg, sizeof(struct me4000_cnt));
5257 if (err) {
5258 printk(KERN_ERR
5259 "ME4000:me4000_cnt_write():Can't copy from user space\n");
5260 return -EFAULT;
5261 }
5262
5263 /* Write counter */
5264 switch (cmd.counter) {
5265 case ME4000_CNT_COUNTER_0:
5266 tmp = cmd.value & 0xFF;
5267 me4000_outb(tmp, cnt_context->counter_0_reg);
5268 tmp = (cmd.value >> 8) & 0xFF;
5269 me4000_outb(tmp, cnt_context->counter_0_reg);
5270 break;
5271 case ME4000_CNT_COUNTER_1:
5272 tmp = cmd.value & 0xFF;
5273 me4000_outb(tmp, cnt_context->counter_1_reg);
5274 tmp = (cmd.value >> 8) & 0xFF;
5275 me4000_outb(tmp, cnt_context->counter_1_reg);
5276 break;
5277 case ME4000_CNT_COUNTER_2:
5278 tmp = cmd.value & 0xFF;
5279 me4000_outb(tmp, cnt_context->counter_2_reg);
5280 tmp = (cmd.value >> 8) & 0xFF;
5281 me4000_outb(tmp, cnt_context->counter_2_reg);
5282 break;
5283 default:
5284 printk(KERN_ERR
5285 "ME4000:me4000_cnt_write():Counter %d is not available\n",
5286 cmd.counter);
5287 return -EINVAL;
5288 }
5289
5290 return 0;
5291 }
5292
5293 static int me4000_cnt_reset(struct me4000_cnt_context *cnt_context)
5294 {
5295 CALL_PDEBUG("me4000_cnt_reset() is executed\n");
5296
5297 /* Set the mode and value for counter 0 */
5298 me4000_outb(0x30, cnt_context->ctrl_reg);
5299 me4000_outb(0x00, cnt_context->counter_0_reg);
5300 me4000_outb(0x00, cnt_context->counter_0_reg);
5301
5302 /* Set the mode and value for counter 1 */
5303 me4000_outb(0x70, cnt_context->ctrl_reg);
5304 me4000_outb(0x00, cnt_context->counter_1_reg);
5305 me4000_outb(0x00, cnt_context->counter_1_reg);
5306
5307 /* Set the mode and value for counter 2 */
5308 me4000_outb(0xB0, cnt_context->ctrl_reg);
5309 me4000_outb(0x00, cnt_context->counter_2_reg);
5310 me4000_outb(0x00, cnt_context->counter_2_reg);
5311
5312 return 0;
5313 }
5314
5315 /*------------------------------------ External Interrupt stuff ------------------------------------*/
5316
5317 static int me4000_ext_int_ioctl(struct inode *inode_p, struct file *file_p,
5318 unsigned int service, unsigned long arg)
5319 {
5320 struct me4000_ext_int_context *ext_int_context;
5321
5322 CALL_PDEBUG("me4000_ext_int_ioctl() is executed\n");
5323
5324 ext_int_context = file_p->private_data;
5325
5326 if (_IOC_TYPE(service) != ME4000_MAGIC) {
5327 printk(KERN_ERR "me4000_ext_int_ioctl():Wrong magic number\n");
5328 return -ENOTTY;
5329 }
5330 if (_IOC_NR(service) > ME4000_IOCTL_MAXNR) {
5331 printk(KERN_ERR
5332 "me4000_ext_int_ioctl():Service number to high\n");
5333 return -ENOTTY;
5334 }
5335
5336 switch (service) {
5337 case ME4000_EXT_INT_ENABLE:
5338 return me4000_ext_int_enable(ext_int_context);
5339 case ME4000_EXT_INT_DISABLE:
5340 return me4000_ext_int_disable(ext_int_context);
5341 case ME4000_EXT_INT_COUNT:
5342 return me4000_ext_int_count((unsigned long *)arg,
5343 ext_int_context);
5344 default:
5345 printk(KERN_ERR
5346 "ME4000:me4000_ext_int_ioctl():Invalid service number %d\n",
5347 service);
5348 return -ENOTTY;
5349 }
5350 return 0;
5351 }
5352
5353 static int me4000_ext_int_enable(struct me4000_ext_int_context *ext_int_context)
5354 {
5355 unsigned long tmp;
5356
5357 CALL_PDEBUG("me4000_ext_int_enable() is executed\n");
5358
5359 tmp = me4000_inl(ext_int_context->ctrl_reg);
5360 tmp |= ME4000_AI_CTRL_BIT_EX_IRQ;
5361 me4000_outl(tmp, ext_int_context->ctrl_reg);
5362
5363 return 0;
5364 }
5365
5366 static int me4000_ext_int_disable(struct me4000_ext_int_context *ext_int_context)
5367 {
5368 unsigned long tmp;
5369
5370 CALL_PDEBUG("me4000_ext_int_disable() is executed\n");
5371
5372 tmp = me4000_inl(ext_int_context->ctrl_reg);
5373 tmp &= ~ME4000_AI_CTRL_BIT_EX_IRQ;
5374 me4000_outl(tmp, ext_int_context->ctrl_reg);
5375
5376 return 0;
5377 }
5378
5379 static int me4000_ext_int_count(unsigned long *arg,
5380 struct me4000_ext_int_context *ext_int_context)
5381 {
5382
5383 CALL_PDEBUG("me4000_ext_int_count() is executed\n");
5384
5385 put_user(ext_int_context->int_count, arg);
5386 return 0;
5387 }
5388
5389 /*------------------------------------ General stuff ------------------------------------*/
5390
5391 static int me4000_get_user_info(struct me4000_user_info *arg,
5392 struct me4000_info *board_info)
5393 {
5394 struct me4000_user_info user_info;
5395
5396 CALL_PDEBUG("me4000_get_user_info() is executed\n");
5397
5398 user_info.board_count = board_info->board_count;
5399 user_info.plx_regbase = board_info->plx_regbase;
5400 user_info.plx_regbase_size = board_info->plx_regbase_size;
5401 user_info.me4000_regbase = board_info->me4000_regbase;
5402 user_info.me4000_regbase_size = board_info->me4000_regbase_size;
5403 user_info.serial_no = board_info->serial_no;
5404 user_info.hw_revision = board_info->hw_revision;
5405 user_info.vendor_id = board_info->vendor_id;
5406 user_info.device_id = board_info->device_id;
5407 user_info.pci_bus_no = board_info->pci_bus_no;
5408 user_info.pci_dev_no = board_info->pci_dev_no;
5409 user_info.pci_func_no = board_info->pci_func_no;
5410 user_info.irq = board_info->irq;
5411 user_info.irq_count = board_info->irq_count;
5412 user_info.driver_version = ME4000_DRIVER_VERSION;
5413 user_info.ao_count = board_info->board_p->ao.count;
5414 user_info.ao_fifo_count = board_info->board_p->ao.fifo_count;
5415
5416 user_info.ai_count = board_info->board_p->ai.count;
5417 user_info.ai_sh_count = board_info->board_p->ai.sh_count;
5418 user_info.ai_ex_trig_analog = board_info->board_p->ai.ex_trig_analog;
5419
5420 user_info.dio_count = board_info->board_p->dio.count;
5421
5422 user_info.cnt_count = board_info->board_p->cnt.count;
5423
5424 if (copy_to_user(arg, &user_info, sizeof(struct me4000_user_info)))
5425 return -EFAULT;
5426
5427 return 0;
5428 }
5429
5430 /*------------------------------------ ISR STUFF ------------------------------------*/
5431
5432 static int me4000_ext_int_fasync(int fd, struct file *file_ptr, int mode)
5433 {
5434 int result = 0;
5435 struct me4000_ext_int_context *ext_int_context;
5436
5437 CALL_PDEBUG("me4000_ext_int_fasync() is executed\n");
5438
5439 ext_int_context = file_ptr->private_data;
5440
5441 result =
5442 fasync_helper(fd, file_ptr, mode, &ext_int_context->fasync_ptr);
5443
5444 CALL_PDEBUG("me4000_ext_int_fasync() is leaved\n");
5445 return result;
5446 }
5447
5448 static irqreturn_t me4000_ao_isr(int irq, void *dev_id)
5449 {
5450 u32 tmp;
5451 u32 value;
5452 struct me4000_ao_context *ao_context;
5453 int i;
5454 int c = 0;
5455 int c1 = 0;
5456 //unsigned long before;
5457 //unsigned long after;
5458
5459 ISR_PDEBUG("me4000_ao_isr() is executed\n");
5460
5461 ao_context = dev_id;
5462
5463 /* Check if irq number is right */
5464 if (irq != ao_context->irq) {
5465 ISR_PDEBUG("me4000_ao_isr():incorrect interrupt num: %d\n",
5466 irq);
5467 return IRQ_NONE;
5468 }
5469
5470 /* Check if this DAC rised an interrupt */
5471 if (!
5472 ((0x1 << (ao_context->index + 3)) &
5473 me4000_inl(ao_context->irq_status_reg))) {
5474 ISR_PDEBUG("me4000_ao_isr():Not this DAC\n");
5475 return IRQ_NONE;
5476 }
5477
5478 /* Read status register to find out what happened */
5479 tmp = me4000_inl(ao_context->status_reg);
5480
5481 if (!(tmp & ME4000_AO_STATUS_BIT_EF) && (tmp & ME4000_AO_STATUS_BIT_HF)
5482 && (tmp & ME4000_AO_STATUS_BIT_HF)) {
5483 c = ME4000_AO_FIFO_COUNT;
5484 ISR_PDEBUG("me4000_ao_isr():Fifo empty\n");
5485 } else if ((tmp & ME4000_AO_STATUS_BIT_EF)
5486 && (tmp & ME4000_AO_STATUS_BIT_HF)
5487 && (tmp & ME4000_AO_STATUS_BIT_HF)) {
5488 c = ME4000_AO_FIFO_COUNT / 2;
5489 ISR_PDEBUG("me4000_ao_isr():Fifo under half full\n");
5490 } else {
5491 c = 0;
5492 ISR_PDEBUG("me4000_ao_isr():Fifo full\n");
5493 }
5494
5495 ISR_PDEBUG("me4000_ao_isr():Try to write 0x%04X values\n", c);
5496
5497 while (1) {
5498 c1 = me4000_values_to_end(ao_context->circ_buf,
5499 ME4000_AO_BUFFER_COUNT);
5500 ISR_PDEBUG("me4000_ao_isr():Values to end = %d\n", c1);
5501 if (c1 > c)
5502 c1 = c;
5503
5504 if (c1 <= 0) {
5505 ISR_PDEBUG
5506 ("me4000_ao_isr():Work done or buffer empty\n");
5507 break;
5508 }
5509 //rdtscl(before);
5510 if (((ao_context->fifo_reg & 0xFF) == ME4000_AO_01_FIFO_REG) ||
5511 ((ao_context->fifo_reg & 0xFF) == ME4000_AO_03_FIFO_REG)) {
5512 for (i = 0; i < c1; i++) {
5513 value =
5514 ((u32)
5515 (*
5516 (ao_context->circ_buf.buf +
5517 ao_context->circ_buf.tail + i))) << 16;
5518 outl(value, ao_context->fifo_reg);
5519 }
5520 } else
5521 outsw(ao_context->fifo_reg,
5522 ao_context->circ_buf.buf +
5523 ao_context->circ_buf.tail, c1);
5524
5525 //rdtscl(after);
5526 //printk(KERN_ERR"ME4000:me4000_ao_isr():Time lapse = %lu\n", after - before);
5527
5528 ao_context->circ_buf.tail =
5529 (ao_context->circ_buf.tail + c1) & (ME4000_AO_BUFFER_COUNT -
5530 1);
5531 ISR_PDEBUG("me4000_ao_isr():%d values wrote to port 0x%04X\n",
5532 c1, ao_context->fifo_reg);
5533 c -= c1;
5534 }
5535
5536 /* If there are no values left in the buffer, disable interrupts */
5537 spin_lock(&ao_context->int_lock);
5538 if (!me4000_buf_count(ao_context->circ_buf, ME4000_AO_BUFFER_COUNT)) {
5539 ISR_PDEBUG
5540 ("me4000_ao_isr():Disable Interrupt because no values left in buffer\n");
5541 tmp = me4000_inl(ao_context->ctrl_reg);
5542 tmp &= ~ME4000_AO_CTRL_BIT_ENABLE_IRQ;
5543 me4000_outl(tmp, ao_context->ctrl_reg);
5544 }
5545 spin_unlock(&ao_context->int_lock);
5546
5547 /* Reset the interrupt */
5548 spin_lock(&ao_context->int_lock);
5549 tmp = me4000_inl(ao_context->ctrl_reg);
5550 tmp |= ME4000_AO_CTRL_BIT_RESET_IRQ;
5551 me4000_outl(tmp, ao_context->ctrl_reg);
5552 tmp &= ~ME4000_AO_CTRL_BIT_RESET_IRQ;
5553 me4000_outl(tmp, ao_context->ctrl_reg);
5554
5555 /* If state machine is stopped, flow was interrupted */
5556 if (!(me4000_inl(ao_context->status_reg) & ME4000_AO_STATUS_BIT_FSM)) {
5557 printk(KERN_ERR "ME4000:me4000_ao_isr():Broken pipe\n");
5558 ao_context->pipe_flag = 1; // Set flag in order to inform write routine
5559 tmp &= ~ME4000_AO_CTRL_BIT_ENABLE_IRQ; // Disable interrupt
5560 }
5561 me4000_outl(tmp, ao_context->ctrl_reg);
5562 spin_unlock(&ao_context->int_lock);
5563
5564 /* Wake up waiting process */
5565 wake_up_interruptible(&(ao_context->wait_queue));
5566
5567 /* Count the interrupt */
5568 ao_context->board_info->irq_count++;
5569
5570 return IRQ_HANDLED;
5571 }
5572
5573 static irqreturn_t me4000_ai_isr(int irq, void *dev_id)
5574 {
5575 u32 tmp;
5576 struct me4000_ai_context *ai_context;
5577 int i;
5578 int c = 0;
5579 int c1 = 0;
5580 #ifdef ME4000_ISR_DEBUG
5581 unsigned long before;
5582 unsigned long after;
5583 #endif
5584
5585 ISR_PDEBUG("me4000_ai_isr() is executed\n");
5586
5587 #ifdef ME4000_ISR_DEBUG
5588 rdtscl(before);
5589 #endif
5590
5591 ai_context = dev_id;
5592
5593 /* Check if irq number is right */
5594 if (irq != ai_context->irq) {
5595 ISR_PDEBUG("me4000_ai_isr():incorrect interrupt num: %d\n",
5596 irq);
5597 return IRQ_NONE;
5598 }
5599
5600 if (me4000_inl(ai_context->irq_status_reg) &
5601 ME4000_IRQ_STATUS_BIT_AI_HF) {
5602 ISR_PDEBUG
5603 ("me4000_ai_isr():Fifo half full interrupt occured\n");
5604
5605 /* Read status register to find out what happened */
5606 tmp = me4000_inl(ai_context->ctrl_reg);
5607
5608 if (!(tmp & ME4000_AI_STATUS_BIT_FF_DATA) &&
5609 !(tmp & ME4000_AI_STATUS_BIT_HF_DATA)
5610 && (tmp & ME4000_AI_STATUS_BIT_EF_DATA)) {
5611 ISR_PDEBUG("me4000_ai_isr():Fifo full\n");
5612 c = ME4000_AI_FIFO_COUNT;
5613
5614 /* FIFO overflow, so stop conversion and disable all interrupts */
5615 spin_lock(&ai_context->int_lock);
5616 tmp = me4000_inl(ai_context->ctrl_reg);
5617 tmp |= ME4000_AI_CTRL_BIT_IMMEDIATE_STOP;
5618 tmp &=
5619 ~(ME4000_AI_CTRL_BIT_HF_IRQ |
5620 ME4000_AI_CTRL_BIT_SC_IRQ);
5621 outl(tmp, ai_context->ctrl_reg);
5622 spin_unlock(&ai_context->int_lock);
5623 } else if ((tmp & ME4000_AI_STATUS_BIT_FF_DATA) &&
5624 !(tmp & ME4000_AI_STATUS_BIT_HF_DATA)
5625 && (tmp & ME4000_AI_STATUS_BIT_EF_DATA)) {
5626 ISR_PDEBUG("me4000_ai_isr():Fifo half full\n");
5627 c = ME4000_AI_FIFO_COUNT / 2;
5628 } else {
5629 c = 0;
5630 ISR_PDEBUG
5631 ("me4000_ai_isr():Can't determine state of fifo\n");
5632 }
5633
5634 ISR_PDEBUG("me4000_ai_isr():Try to read %d values\n", c);
5635
5636 while (1) {
5637 c1 = me4000_space_to_end(ai_context->circ_buf,
5638 ME4000_AI_BUFFER_COUNT);
5639 ISR_PDEBUG("me4000_ai_isr():Space to end = %d\n", c1);
5640 if (c1 > c)
5641 c1 = c;
5642
5643 if (c1 <= 0) {
5644 ISR_PDEBUG
5645 ("me4000_ai_isr():Work done or buffer full\n");
5646 break;
5647 }
5648
5649 insw(ai_context->data_reg,
5650 ai_context->circ_buf.buf +
5651 ai_context->circ_buf.head, c1);
5652 ai_context->circ_buf.head =
5653 (ai_context->circ_buf.head +
5654 c1) & (ME4000_AI_BUFFER_COUNT - 1);
5655 c -= c1;
5656 }
5657
5658 /* Work is done, so reset the interrupt */
5659 ISR_PDEBUG
5660 ("me4000_ai_isr():reset interrupt fifo half full interrupt\n");
5661 spin_lock(&ai_context->int_lock);
5662 tmp = me4000_inl(ai_context->ctrl_reg);
5663 tmp |= ME4000_AI_CTRL_BIT_HF_IRQ_RESET;
5664 me4000_outl(tmp, ai_context->ctrl_reg);
5665 tmp &= ~ME4000_AI_CTRL_BIT_HF_IRQ_RESET;
5666 me4000_outl(tmp, ai_context->ctrl_reg);
5667 spin_unlock(&ai_context->int_lock);
5668 }
5669
5670 if (me4000_inl(ai_context->irq_status_reg) & ME4000_IRQ_STATUS_BIT_SC) {
5671 ISR_PDEBUG
5672 ("me4000_ai_isr():Sample counter interrupt occured\n");
5673
5674 if (!ai_context->sample_counter_reload) {
5675 ISR_PDEBUG
5676 ("me4000_ai_isr():Single data block available\n");
5677
5678 /* Poll data until fifo empty */
5679 for (i = 0;
5680 (i < ME4000_AI_FIFO_COUNT / 2)
5681 && (inl(ai_context->ctrl_reg) &
5682 ME4000_AI_STATUS_BIT_EF_DATA); i++) {
5683 if (me4000_space_to_end
5684 (ai_context->circ_buf,
5685 ME4000_AI_BUFFER_COUNT)) {
5686 *(ai_context->circ_buf.buf +
5687 ai_context->circ_buf.head) =
5688 inw(ai_context->data_reg);
5689 ai_context->circ_buf.head =
5690 (ai_context->circ_buf.head +
5691 1) & (ME4000_AI_BUFFER_COUNT - 1);
5692 } else
5693 break;
5694 }
5695 ISR_PDEBUG("me4000_ai_isr():%d values read\n", i);
5696 } else {
5697 if (ai_context->sample_counter <=
5698 ME4000_AI_FIFO_COUNT / 2) {
5699 ISR_PDEBUG
5700 ("me4000_ai_isr():Interrupt from adjustable half full threshold\n");
5701
5702 /* Read status register to find out what happened */
5703 tmp = me4000_inl(ai_context->ctrl_reg);
5704
5705 if (!(tmp & ME4000_AI_STATUS_BIT_FF_DATA) &&
5706 !(tmp & ME4000_AI_STATUS_BIT_HF_DATA)
5707 && (tmp & ME4000_AI_STATUS_BIT_EF_DATA)) {
5708 ISR_PDEBUG
5709 ("me4000_ai_isr():Fifo full\n");
5710 c = ME4000_AI_FIFO_COUNT;
5711
5712 /* FIFO overflow, so stop conversion */
5713 spin_lock(&ai_context->int_lock);
5714 tmp = me4000_inl(ai_context->ctrl_reg);
5715 tmp |=
5716 ME4000_AI_CTRL_BIT_IMMEDIATE_STOP;
5717 outl(tmp, ai_context->ctrl_reg);
5718 spin_unlock(&ai_context->int_lock);
5719 } else if ((tmp & ME4000_AI_STATUS_BIT_FF_DATA)
5720 && !(tmp &
5721 ME4000_AI_STATUS_BIT_HF_DATA)
5722 && (tmp &
5723 ME4000_AI_STATUS_BIT_EF_DATA)) {
5724 ISR_PDEBUG
5725 ("me4000_ai_isr():Fifo half full\n");
5726 c = ME4000_AI_FIFO_COUNT / 2;
5727 } else {
5728 c = ai_context->sample_counter;
5729 ISR_PDEBUG
5730 ("me4000_ai_isr():Sample count values\n");
5731 }
5732
5733 ISR_PDEBUG
5734 ("me4000_ai_isr():Try to read %d values\n",
5735 c);
5736
5737 while (1) {
5738 c1 = me4000_space_to_end(ai_context->
5739 circ_buf,
5740 ME4000_AI_BUFFER_COUNT);
5741 ISR_PDEBUG
5742 ("me4000_ai_isr():Space to end = %d\n",
5743 c1);
5744 if (c1 > c)
5745 c1 = c;
5746
5747 if (c1 <= 0) {
5748 ISR_PDEBUG
5749 ("me4000_ai_isr():Work done or buffer full\n");
5750 break;
5751 }
5752
5753 insw(ai_context->data_reg,
5754 ai_context->circ_buf.buf +
5755 ai_context->circ_buf.head, c1);
5756 ai_context->circ_buf.head =
5757 (ai_context->circ_buf.head +
5758 c1) & (ME4000_AI_BUFFER_COUNT - 1);
5759 c -= c1;
5760 }
5761 } else {
5762 ISR_PDEBUG
5763 ("me4000_ai_isr():Multiple data block available\n");
5764
5765 /* Read status register to find out what happened */
5766 tmp = me4000_inl(ai_context->ctrl_reg);
5767
5768 if (!(tmp & ME4000_AI_STATUS_BIT_FF_DATA) &&
5769 !(tmp & ME4000_AI_STATUS_BIT_HF_DATA)
5770 && (tmp & ME4000_AI_STATUS_BIT_EF_DATA)) {
5771 ISR_PDEBUG
5772 ("me4000_ai_isr():Fifo full\n");
5773 c = ME4000_AI_FIFO_COUNT;
5774
5775 /* FIFO overflow, so stop conversion */
5776 spin_lock(&ai_context->int_lock);
5777 tmp = me4000_inl(ai_context->ctrl_reg);
5778 tmp |=
5779 ME4000_AI_CTRL_BIT_IMMEDIATE_STOP;
5780 outl(tmp, ai_context->ctrl_reg);
5781 spin_unlock(&ai_context->int_lock);
5782
5783 while (1) {
5784 c1 = me4000_space_to_end
5785 (ai_context->circ_buf,
5786 ME4000_AI_BUFFER_COUNT);
5787 ISR_PDEBUG
5788 ("me4000_ai_isr():Space to end = %d\n",
5789 c1);
5790 if (c1 > c)
5791 c1 = c;
5792
5793 if (c1 <= 0) {
5794 ISR_PDEBUG
5795 ("me4000_ai_isr():Work done or buffer full\n");
5796 break;
5797 }
5798
5799 insw(ai_context->data_reg,
5800 ai_context->circ_buf.buf +
5801 ai_context->circ_buf.head,
5802 c1);
5803 ai_context->circ_buf.head =
5804 (ai_context->circ_buf.head +
5805 c1) &
5806 (ME4000_AI_BUFFER_COUNT -
5807 1);
5808 c -= c1;
5809 }
5810 } else if ((tmp & ME4000_AI_STATUS_BIT_FF_DATA)
5811 && !(tmp &
5812 ME4000_AI_STATUS_BIT_HF_DATA)
5813 && (tmp &
5814 ME4000_AI_STATUS_BIT_EF_DATA)) {
5815 ISR_PDEBUG
5816 ("me4000_ai_isr():Fifo half full\n");
5817 c = ME4000_AI_FIFO_COUNT / 2;
5818
5819 while (1) {
5820 c1 = me4000_space_to_end
5821 (ai_context->circ_buf,
5822 ME4000_AI_BUFFER_COUNT);
5823 ISR_PDEBUG
5824 ("me4000_ai_isr():Space to end = %d\n",
5825 c1);
5826 if (c1 > c)
5827 c1 = c;
5828
5829 if (c1 <= 0) {
5830 ISR_PDEBUG
5831 ("me4000_ai_isr():Work done or buffer full\n");
5832 break;
5833 }
5834
5835 insw(ai_context->data_reg,
5836 ai_context->circ_buf.buf +
5837 ai_context->circ_buf.head,
5838 c1);
5839 ai_context->circ_buf.head =
5840 (ai_context->circ_buf.head +
5841 c1) &
5842 (ME4000_AI_BUFFER_COUNT -
5843 1);
5844 c -= c1;
5845 }
5846 } else {
5847 /* Poll data until fifo empty */
5848 for (i = 0;
5849 (i < ME4000_AI_FIFO_COUNT / 2)
5850 && (inl(ai_context->ctrl_reg) &
5851 ME4000_AI_STATUS_BIT_EF_DATA);
5852 i++) {
5853 if (me4000_space_to_end
5854 (ai_context->circ_buf,
5855 ME4000_AI_BUFFER_COUNT)) {
5856 *(ai_context->circ_buf.
5857 buf +
5858 ai_context->circ_buf.
5859 head) =
5860 inw(ai_context->data_reg);
5861 ai_context->circ_buf.
5862 head =
5863 (ai_context->
5864 circ_buf.head +
5865 1) &
5866 (ME4000_AI_BUFFER_COUNT
5867 - 1);
5868 } else
5869 break;
5870 }
5871 ISR_PDEBUG
5872 ("me4000_ai_isr():%d values read\n",
5873 i);
5874 }
5875 }
5876 }
5877
5878 /* Work is done, so reset the interrupt */
5879 ISR_PDEBUG
5880 ("me4000_ai_isr():reset interrupt from sample counter\n");
5881 spin_lock(&ai_context->int_lock);
5882 tmp = me4000_inl(ai_context->ctrl_reg);
5883 tmp |= ME4000_AI_CTRL_BIT_SC_IRQ_RESET;
5884 me4000_outl(tmp, ai_context->ctrl_reg);
5885 tmp &= ~ME4000_AI_CTRL_BIT_SC_IRQ_RESET;
5886 me4000_outl(tmp, ai_context->ctrl_reg);
5887 spin_unlock(&ai_context->int_lock);
5888 }
5889
5890 /* Values are now available, so wake up waiting process */
5891 if (me4000_buf_count(ai_context->circ_buf, ME4000_AI_BUFFER_COUNT)) {
5892 ISR_PDEBUG("me4000_ai_isr():Wake up waiting process\n");
5893 wake_up_interruptible(&(ai_context->wait_queue));
5894 }
5895
5896 /* If there is no space left in the buffer, disable interrupts */
5897 spin_lock(&ai_context->int_lock);
5898 if (!me4000_buf_space(ai_context->circ_buf, ME4000_AI_BUFFER_COUNT)) {
5899 ISR_PDEBUG
5900 ("me4000_ai_isr():Disable Interrupt because no space left in buffer\n");
5901 tmp = me4000_inl(ai_context->ctrl_reg);
5902 tmp &=
5903 ~(ME4000_AI_CTRL_BIT_SC_IRQ | ME4000_AI_CTRL_BIT_HF_IRQ |
5904 ME4000_AI_CTRL_BIT_LE_IRQ);
5905 me4000_outl(tmp, ai_context->ctrl_reg);
5906 }
5907 spin_unlock(&ai_context->int_lock);
5908
5909 #ifdef ME4000_ISR_DEBUG
5910 rdtscl(after);
5911 printk(KERN_ERR "ME4000:me4000_ai_isr():Time lapse = %lu\n",
5912 after - before);
5913 #endif
5914
5915 return IRQ_HANDLED;
5916 }
5917
5918 static irqreturn_t me4000_ext_int_isr(int irq, void *dev_id)
5919 {
5920 struct me4000_ext_int_context *ext_int_context;
5921 unsigned long tmp;
5922
5923 ISR_PDEBUG("me4000_ext_int_isr() is executed\n");
5924
5925 ext_int_context = dev_id;
5926
5927 /* Check if irq number is right */
5928 if (irq != ext_int_context->irq) {
5929 ISR_PDEBUG("me4000_ext_int_isr():incorrect interrupt num: %d\n",
5930 irq);
5931 return IRQ_NONE;
5932 }
5933
5934 if (me4000_inl(ext_int_context->irq_status_reg) &
5935 ME4000_IRQ_STATUS_BIT_EX) {
5936 ISR_PDEBUG("me4000_ext_int_isr():External interrupt occured\n");
5937 tmp = me4000_inl(ext_int_context->ctrl_reg);
5938 tmp |= ME4000_AI_CTRL_BIT_EX_IRQ_RESET;
5939 me4000_outl(tmp, ext_int_context->ctrl_reg);
5940 tmp &= ~ME4000_AI_CTRL_BIT_EX_IRQ_RESET;
5941 me4000_outl(tmp, ext_int_context->ctrl_reg);
5942
5943 ext_int_context->int_count++;
5944
5945 if (ext_int_context->fasync_ptr) {
5946 ISR_PDEBUG
5947 ("me2600_ext_int_isr():Send signal to process\n");
5948 kill_fasync(&ext_int_context->fasync_ptr, SIGIO,
5949 POLL_IN);
5950 }
5951 }
5952
5953 return IRQ_HANDLED;
5954 }
5955
5956 static void __exit me4000_module_exit(void)
5957 {
5958 struct list_head *board_p;
5959 struct me4000_info *board_info;
5960
5961 CALL_PDEBUG("cleanup_module() is executed\n");
5962
5963 unregister_chrdev(me4000_ext_int_major_driver_no, ME4000_EXT_INT_NAME);
5964
5965 unregister_chrdev(me4000_cnt_major_driver_no, ME4000_CNT_NAME);
5966
5967 unregister_chrdev(me4000_dio_major_driver_no, ME4000_DIO_NAME);
5968
5969 unregister_chrdev(me4000_ai_major_driver_no, ME4000_AI_NAME);
5970
5971 unregister_chrdev(me4000_ao_major_driver_no, ME4000_AO_NAME);
5972
5973 remove_proc_entry("me4000", NULL);
5974
5975 pci_unregister_driver(&me4000_driver);
5976
5977 /* Reset the boards */
5978 for (board_p = me4000_board_info_list.next;
5979 board_p != &me4000_board_info_list; board_p = board_p->next) {
5980 board_info = list_entry(board_p, struct me4000_info, list);
5981 me4000_reset_board(board_info);
5982 }
5983
5984 clear_board_info_list();
5985 }
5986
5987 module_exit(me4000_module_exit);
5988
5989 static int me4000_read_procmem(char *buf, char **start, off_t offset, int count,
5990 int *eof, void *data)
5991 {
5992 int len = 0;
5993 int limit = count - 1000;
5994 struct me4000_info *board_info;
5995 struct list_head *ptr;
5996
5997 len += sprintf(buf + len, "\nME4000 DRIVER VERSION %X.%X.%X\n\n",
5998 (ME4000_DRIVER_VERSION & 0xFF0000) >> 16,
5999 (ME4000_DRIVER_VERSION & 0xFF00) >> 8,
6000 (ME4000_DRIVER_VERSION & 0xFF));
6001
6002 /* Search for the board context */
6003 for (ptr = me4000_board_info_list.next;
6004 (ptr != &me4000_board_info_list) && (len < limit);
6005 ptr = ptr->next) {
6006 board_info = list_entry(ptr, struct me4000_info, list);
6007
6008 len +=
6009 sprintf(buf + len, "Board number %d:\n",
6010 board_info->board_count);
6011 len += sprintf(buf + len, "---------------\n");
6012 len +=
6013 sprintf(buf + len, "PLX base register = 0x%lX\n",
6014 board_info->plx_regbase);
6015 len +=
6016 sprintf(buf + len, "PLX base register size = 0x%X\n",
6017 (unsigned int)board_info->plx_regbase_size);
6018 len +=
6019 sprintf(buf + len, "ME4000 base register = 0x%X\n",
6020 (unsigned int)board_info->me4000_regbase);
6021 len +=
6022 sprintf(buf + len, "ME4000 base register size = 0x%X\n",
6023 (unsigned int)board_info->me4000_regbase_size);
6024 len +=
6025 sprintf(buf + len, "Serial number = 0x%X\n",
6026 board_info->serial_no);
6027 len +=
6028 sprintf(buf + len, "Hardware revision = 0x%X\n",
6029 board_info->hw_revision);
6030 len +=
6031 sprintf(buf + len, "Vendor id = 0x%X\n",
6032 board_info->vendor_id);
6033 len +=
6034 sprintf(buf + len, "Device id = 0x%X\n",
6035 board_info->device_id);
6036 len +=
6037 sprintf(buf + len, "PCI bus number = %d\n",
6038 board_info->pci_bus_no);
6039 len +=
6040 sprintf(buf + len, "PCI device number = %d\n",
6041 board_info->pci_dev_no);
6042 len +=
6043 sprintf(buf + len, "PCI function number = %d\n",
6044 board_info->pci_func_no);
6045 len += sprintf(buf + len, "IRQ = %u\n", board_info->irq);
6046 len +=
6047 sprintf(buf + len,
6048 "Count of interrupts since module was loaded = %d\n",
6049 board_info->irq_count);
6050
6051 len +=
6052 sprintf(buf + len, "Count of analog outputs = %d\n",
6053 board_info->board_p->ao.count);
6054 len +=
6055 sprintf(buf + len, "Count of analog output fifos = %d\n",
6056 board_info->board_p->ao.fifo_count);
6057
6058 len +=
6059 sprintf(buf + len, "Count of analog inputs = %d\n",
6060 board_info->board_p->ai.count);
6061 len +=
6062 sprintf(buf + len,
6063 "Count of sample and hold devices for analog input = %d\n",
6064 board_info->board_p->ai.sh_count);
6065 len +=
6066 sprintf(buf + len,
6067 "Analog external trigger available for analog input = %d\n",
6068 board_info->board_p->ai.ex_trig_analog);
6069
6070 len +=
6071 sprintf(buf + len, "Count of digital ports = %d\n",
6072 board_info->board_p->dio.count);
6073
6074 len +=
6075 sprintf(buf + len, "Count of counter devices = %d\n",
6076 board_info->board_p->cnt.count);
6077 len +=
6078 sprintf(buf + len, "AI control register = 0x%08X\n",
6079 inl(board_info->me4000_regbase +
6080 ME4000_AI_CTRL_REG));
6081
6082 len += sprintf(buf + len, "AO 0 control register = 0x%08X\n",
6083 inl(board_info->me4000_regbase +
6084 ME4000_AO_00_CTRL_REG));
6085 len +=
6086 sprintf(buf + len, "AO 0 status register = 0x%08X\n",
6087 inl(board_info->me4000_regbase +
6088 ME4000_AO_00_STATUS_REG));
6089 len +=
6090 sprintf(buf + len, "AO 1 control register = 0x%08X\n",
6091 inl(board_info->me4000_regbase +
6092 ME4000_AO_01_CTRL_REG));
6093 len +=
6094 sprintf(buf + len, "AO 1 status register = 0x%08X\n",
6095 inl(board_info->me4000_regbase +
6096 ME4000_AO_01_STATUS_REG));
6097 len +=
6098 sprintf(buf + len, "AO 2 control register = 0x%08X\n",
6099 inl(board_info->me4000_regbase +
6100 ME4000_AO_02_CTRL_REG));
6101 len +=
6102 sprintf(buf + len, "AO 2 status register = 0x%08X\n",
6103 inl(board_info->me4000_regbase +
6104 ME4000_AO_02_STATUS_REG));
6105 len +=
6106 sprintf(buf + len, "AO 3 control register = 0x%08X\n",
6107 inl(board_info->me4000_regbase +
6108 ME4000_AO_03_CTRL_REG));
6109 len +=
6110 sprintf(buf + len, "AO 3 status register = 0x%08X\n",
6111 inl(board_info->me4000_regbase +
6112 ME4000_AO_03_STATUS_REG));
6113 }
6114
6115 *eof = 1;
6116 return len;
6117 }