Staging: comedi: Remove lsampl_t and sampl_t typedefs
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / staging / comedi / drivers / addi-data / addi_common.c
CommitLineData
c995fe94
ADG
1/**
2@verbatim
3
4Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
5
6 ADDI-DATA GmbH
7 Dieselstrasse 3
8 D-77833 Ottersweier
9 Tel: +19(0)7223/9493-0
10 Fax: +49(0)7223/9493-92
11 http://www.addi-data-com
12 info@addi-data.com
13
14This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
15
16This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
20You shoud also find the complete GPL in the COPYING file accompanying this source code.
21
22@endverbatim
23*/
24/*
25
26 +-----------------------------------------------------------------------+
27 | (C) ADDI-DATA GmbH Dieselstrasse 3 D-77833 Ottersweier |
28 +-----------------------------------------------------------------------+
29 | Tel : +49 (0) 7223/9493-0 | email : info@addi-data.com |
30 | Fax : +49 (0) 7223/9493-92 | Internet : http://www.addi-data.com |
31 +-----------------------------------------------------------------------+
32 | Project : ADDI DATA | Compiler : GCC |
33 | Modulname : addi_common.c | Version : 2.96 |
34 +-------------------------------+---------------------------------------+
35 | Author : | Date : |
36 +-----------------------------------------------------------------------+
37 | Description : ADDI COMMON Main Module |
38 +-----------------------------------------------------------------------+
39 | CONFIG OPTIONS |
40 | option[0] - PCI bus number - if bus number and slot number are 0, |
41 | then driver search for first unused card |
42 | option[1] - PCI slot number |
43 | |
44 | option[2] = 0 - DMA ENABLE |
45 | = 1 - DMA DISABLE |
46 +----------+-----------+------------------------------------------------+
47*/
48
49#include <linux/kernel.h>
50#include <linux/module.h>
51#include <linux/sched.h>
52#include <linux/mm.h>
53#include <linux/slab.h>
54#include <linux/errno.h>
55#include <linux/ioport.h>
56#include <linux/delay.h>
57#include <linux/interrupt.h>
58#include <linux/timex.h>
59#include <linux/timer.h>
60#include <linux/pci.h>
61#include "../../comedidev.h"
62#include <asm/io.h>
63#if defined(CONFIG_APCI_1710) || defined(CONFIG_APCI_3200) || defined(CONFIG_APCI_3300)
64#include <asm/i387.h>
65#endif
66#include "../comedi_fc.h"
67
68#include "addi_common.h"
69#include "addi_amcc_s5933.h"
70
71//Update-0.7.57->0.7.68MODULE_AUTHOR("ADDI-DATA GmbH <info@addi-data.com>");
72//Update-0.7.57->0.7.68MODULE_DESCRIPTION("Comedi ADDI-DATA module");
73//Update-0.7.57->0.7.68MODULE_LICENSE("GPL");
74
75#define devpriv ((addi_private *)dev->private)
76#define this_board ((boardtype *)dev->board_ptr)
77
78#if defined(CONFIG_APCI_1710) || defined(CONFIG_APCI_3200) || defined(CONFIG_APCI_3300)
79//BYTE b_SaveFPUReg [94];
80
81void fpu_begin(void)
82{
83 //asm ("fstenv b_SaveFPUReg");
84 kernel_fpu_begin();
85}
86
87void fpu_end(void)
88{
89 // asm ("frstor b_SaveFPUReg");
90 kernel_fpu_end();
91}
92#endif
93
94#include "addi_eeprom.c"
95#if (defined (CONFIG_APCI_3120) || defined (CONFIG_APCI_3001))
96#include "hwdrv_apci3120.c"
97#endif
98#ifdef CONFIG_APCI_1032
99#include "hwdrv_apci1032.c"
100#endif
101#ifdef CONFIG_APCI_1516
102#include "hwdrv_apci1516.c"
103#endif
104#ifdef CONFIG_APCI_2016
105#include "hwdrv_apci2016.c"
106#endif
107#ifdef CONFIG_APCI_2032
108#include "hwdrv_apci2032.c"
109#endif
110#ifdef CONFIG_APCI_2200
111#include "hwdrv_apci2200.c"
112#endif
113#ifdef CONFIG_APCI_1564
114#include "hwdrv_apci1564.c"
115#endif
116#ifdef CONFIG_APCI_1500
117#include "hwdrv_apci1500.c"
118#endif
119#ifdef CONFIG_APCI_3501
120#include "hwdrv_apci3501.c"
121#endif
122#ifdef CONFIG_APCI_035
123#include "hwdrv_apci035.c"
124#endif
125#if (defined (CONFIG_APCI_3200) || defined (CONFIG_APCI_3300))
126#include "hwdrv_apci3200.c"
127#endif
128#ifdef CONFIG_APCI_1710
129#include "hwdrv_APCI1710.c"
130#endif
131#ifdef CONFIG_APCI_16XX
132#include "hwdrv_apci16xx.c"
133#endif
134#ifdef CONFIG_APCI_3XXX
135#include "hwdrv_apci3xxx.c"
136#endif
137
138#ifndef COMEDI_SUBD_TTLIO
139#define COMEDI_SUBD_TTLIO 11 /* Digital Input Output But TTL */
140#endif
141
142static DEFINE_PCI_DEVICE_TABLE(addi_apci_tbl) = {
143#ifdef CONFIG_APCI_3120
144 {APCI3120_BOARD_VENDOR_ID, 0x818D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
145#endif
146#ifdef CONFIG_APCI_1032
147 {APCI1032_BOARD_VENDOR_ID, 0x1003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
148#endif
149#ifdef CONFIG_APCI_1516
150 {APCI1516_BOARD_VENDOR_ID, 0x1001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
151#endif
152#ifdef CONFIG_APCI_2016
153 {APCI2016_BOARD_VENDOR_ID, 0x1002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
154#endif
155#ifdef CONFIG_APCI_2032
156 {APCI2032_BOARD_VENDOR_ID, 0x1004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
157#endif
158#ifdef CONFIG_APCI_2200
159 {APCI2200_BOARD_VENDOR_ID, 0x1005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
160#endif
161#ifdef CONFIG_APCI_1564
162 {APCI1564_BOARD_VENDOR_ID, 0x1006, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
163#endif
164#ifdef CONFIG_APCI_1500
165 {APCI1500_BOARD_VENDOR_ID, 0x80fc, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
166#endif
167#ifdef CONFIG_APCI_3001
168 {APCI3120_BOARD_VENDOR_ID, 0x828D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
169#endif
170#ifdef CONFIG_APCI_3501
171 {APCI3501_BOARD_VENDOR_ID, 0x3001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
172#endif
173#ifdef CONFIG_APCI_035
174 {APCI035_BOARD_VENDOR_ID, 0x0300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
175#endif
176#ifdef CONFIG_APCI_3200
177 {APCI3200_BOARD_VENDOR_ID, 0x3000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
178#endif
179#ifdef CONFIG_APCI_3300
180 {APCI3200_BOARD_VENDOR_ID, 0x3007, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
181#endif
182#ifdef CONFIG_APCI_1710
183 {APCI1710_BOARD_VENDOR_ID, APCI1710_BOARD_DEVICE_ID,
184 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
185#endif
186#ifdef CONFIG_APCI_16XX
187 {0x15B8, 0x1009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
188 {0x15B8, 0x100A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
189#endif
190#ifdef CONFIG_APCI_3XXX
191 {0x15B8, 0x3010, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
192 {0x15B8, 0x300F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
193 {0x15B8, 0x300E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
194 {0x15B8, 0x3013, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
195 {0x15B8, 0x3014, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
196 {0x15B8, 0x3015, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
197 {0x15B8, 0x3016, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
198 {0x15B8, 0x3017, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
199 {0x15B8, 0x3018, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
200 {0x15B8, 0x3019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
201 {0x15B8, 0x301A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
202 {0x15B8, 0x301B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
203 {0x15B8, 0x301C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
204 {0x15B8, 0x301D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
205 {0x15B8, 0x301E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
206 {0x15B8, 0x301F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
207 {0x15B8, 0x3020, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
208 {0x15B8, 0x3021, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
209 {0x15B8, 0x3022, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
210 {0x15B8, 0x3023, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
211 {0x15B8, 0x300B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
212 {0x15B8, 0x3002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
213 {0x15B8, 0x3003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
214 {0x15B8, 0x3004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
215 {0x15B8, 0x3024, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
216#endif
217 {0}
218};
219
220MODULE_DEVICE_TABLE(pci, addi_apci_tbl);
221
222static const boardtype boardtypes[] = {
223#ifdef CONFIG_APCI_3120
224 {"apci3120",
225 APCI3120_BOARD_VENDOR_ID,
226 0x818D,
227 AMCC_OP_REG_SIZE,
228 APCI3120_ADDRESS_RANGE,
229 8,
230 0,
231 ADDIDATA_NO_EEPROM,
232 NULL,
233 16,
234 8,
235 16,
236 8,
237 0xffff,
238 0x3fff,
239 &range_apci3120_ai,
240 &range_apci3120_ao,
241 4,
242 4,
243 0x0f,
244 0,
245 NULL,
246 1,
247 1,
248 1,
249 10000,
250 100000,
251 v_APCI3120_Interrupt,
252 i_APCI3120_Reset,
253 i_APCI3120_InsnConfigAnalogInput,
254 i_APCI3120_InsnReadAnalogInput,
255 NULL,
256 NULL,
257 i_APCI3120_CommandTestAnalogInput,
258 i_APCI3120_CommandAnalogInput,
259 i_APCI3120_StopCyclicAcquisition,
260 NULL,
261 i_APCI3120_InsnWriteAnalogOutput,
262 NULL,
263 NULL,
264 i_APCI3120_InsnReadDigitalInput,
265 NULL,
266 i_APCI3120_InsnBitsDigitalInput,
267 i_APCI3120_InsnConfigDigitalOutput,
268 i_APCI3120_InsnWriteDigitalOutput,
269 i_APCI3120_InsnBitsDigitalOutput,
270 NULL,
271 i_APCI3120_InsnConfigTimer,
272 i_APCI3120_InsnWriteTimer,
273 i_APCI3120_InsnReadTimer,
274 NULL,
275 NULL,
276 NULL,
277 NULL,
278 NULL},
279#endif
280#ifdef CONFIG_APCI_1032
281 {"apci1032",
282 APCI1032_BOARD_VENDOR_ID,
283 0x1003,
284 4,
285 APCI1032_ADDRESS_RANGE,
286 0,
287 0,
288 ADDIDATA_EEPROM,
289 ADDIDATA_93C76,
290 0,
291 0,
292 0,
293 0,
294 0,
295 0,
296 0,
297 0,
298 32,
299 0,
300 0,
301 0,
302 NULL,
303 0,
304 0,
305 0,
306 0,
307 0,
308 v_APCI1032_Interrupt,
309 i_APCI1032_Reset,
310 NULL,
311 NULL,
312 NULL,
313 NULL,
314 NULL,
315 NULL,
316 NULL,
317 NULL,
318 NULL,
319 NULL,
320 i_APCI1032_ConfigDigitalInput,
321 i_APCI1032_Read1DigitalInput,
322 NULL,
323 i_APCI1032_ReadMoreDigitalInput,
324 NULL,
325 NULL,
326 NULL,
327 NULL,
328 NULL,
329 NULL,
330 NULL,
331 NULL,
332 NULL,
333 NULL,
334 NULL,
335 NULL},
336#endif
337#ifdef CONFIG_APCI_1516
338 {"apci1516",
339 APCI1516_BOARD_VENDOR_ID,
340 0x1001,
341 128,
342 APCI1516_ADDRESS_RANGE,
343 32,
344 0,
345 ADDIDATA_EEPROM,
346 ADDIDATA_S5920,
347 0,
348 0,
349 0,
350 0,
351 0,
352 0,
353 NULL,
354 NULL,
355 8,
356 8,
357 0,
358 0,
359 NULL,
360 0,
361 1,
362 0,
363 0,
364 0,
365 NULL,
366 i_APCI1516_Reset,
367 NULL, NULL,
368 NULL,
369 NULL,
370 NULL,
371 NULL,
372 NULL,
373 NULL,
374 NULL,
375 NULL,
376 NULL,
377 i_APCI1516_Read1DigitalInput,
378 NULL,
379 i_APCI1516_ReadMoreDigitalInput,
380 i_APCI1516_ConfigDigitalOutput,
381 i_APCI1516_WriteDigitalOutput,
382 i_APCI1516_ReadDigitalOutput,
383 NULL,
384 i_APCI1516_ConfigWatchdog,
385 i_APCI1516_StartStopWriteWatchdog,
386 i_APCI1516_ReadWatchdog,
387 NULL,
388 NULL,
389 NULL,
390 NULL,
391 NULL},
392#endif
393#ifdef CONFIG_APCI_2016
394 {"apci2016",
395 APCI2016_BOARD_VENDOR_ID,
396 0x1002,
397 128,
398 APCI2016_ADDRESS_RANGE,
399 32,
400 0,
401 ADDIDATA_EEPROM,
402 ADDIDATA_S5920,
403 0,
404 0,
405 0,
406 0,
407 0,
408 0,
409 NULL,
410 NULL,
411 0,
412 16,
413 0,
414 0,
415 NULL,
416 0,
417 1,
418 0,
419 0,
420 0,
421 NULL,
422 i_APCI2016_Reset,
423 NULL,
424 NULL,
425 NULL,
426 NULL,
427 NULL,
428 NULL,
429 NULL,
430 NULL,
431 NULL,
432 NULL,
433 NULL,
434 NULL,
435 NULL,
436 NULL,
437 i_APCI2016_ConfigDigitalOutput,
438 i_APCI2016_WriteDigitalOutput,
439 i_APCI2016_BitsDigitalOutput,
440 NULL,
441 i_APCI2016_ConfigWatchdog,
442 i_APCI2016_StartStopWriteWatchdog,
443 i_APCI2016_ReadWatchdog,
444 NULL,
445 NULL,
446 NULL,
447 NULL,
448 NULL},
449#endif
450#ifdef CONFIG_APCI_2032
451 {"apci2032",
452 APCI2032_BOARD_VENDOR_ID,
453 0x1004,
454 4,
455 APCI2032_ADDRESS_RANGE,
456 0,
457 0,
458 ADDIDATA_EEPROM,
459 ADDIDATA_93C76,
460 0,
461 0,
462 0,
463 0,
464 0,
465 0,
466 NULL,
467 NULL,
468 0,
469 32,
470 0xffffffff,
471 0,
472 NULL,
473 0,
474 1,
475 0,
476 0,
477 0,
478 v_APCI2032_Interrupt,
479 i_APCI2032_Reset,
480 NULL, NULL,
481 NULL,
482 NULL,
483 NULL,
484 NULL,
485 NULL,
486 NULL,
487 NULL,
488 NULL,
489 NULL,
490 NULL,
491 NULL,
492 NULL,
493 i_APCI2032_ConfigDigitalOutput,
494 i_APCI2032_WriteDigitalOutput,
495 i_APCI2032_ReadDigitalOutput,
496 i_APCI2032_ReadInterruptStatus,
497 i_APCI2032_ConfigWatchdog,
498 i_APCI2032_StartStopWriteWatchdog,
499 i_APCI2032_ReadWatchdog,
500 NULL,
501 NULL,
502 NULL,
503 NULL,
504 NULL},
505#endif
506#ifdef CONFIG_APCI_2200
507 {"apci2200",
508 APCI2200_BOARD_VENDOR_ID,
509 0x1005,
510 4,
511 APCI2200_ADDRESS_RANGE,
512 0,
513 0,
514 ADDIDATA_EEPROM,
515 ADDIDATA_93C76,
516 0,
517 0,
518 0,
519 0,
520 0,
521 0,
522 NULL,
523 NULL,
524 8,
525 16,
526 0,
527 0,
528 NULL,
529 0,
530 1,
531 0,
532 0,
533 0,
534 NULL,
535 i_APCI2200_Reset,
536 NULL, NULL,
537 NULL,
538 NULL,
539 NULL,
540 NULL,
541 NULL,
542 NULL,
543 NULL,
544 NULL,
545 NULL,
546 i_APCI2200_Read1DigitalInput,
547 NULL,
548 i_APCI2200_ReadMoreDigitalInput,
549 i_APCI2200_ConfigDigitalOutput,
550 i_APCI2200_WriteDigitalOutput,
551 i_APCI2200_ReadDigitalOutput,
552 NULL,
553 i_APCI2200_ConfigWatchdog,
554 i_APCI2200_StartStopWriteWatchdog,
555 i_APCI2200_ReadWatchdog,
556 NULL,
557 NULL,
558 NULL,
559 NULL,
560 NULL},
561#endif
562#ifdef CONFIG_APCI_1564
563 {"apci1564",
564 APCI1564_BOARD_VENDOR_ID,
565 0x1006,
566 128,
567 APCI1564_ADDRESS_RANGE,
568 0,
569 0,
570 ADDIDATA_EEPROM,
571 ADDIDATA_93C76,
572 0,
573 0,
574 0,
575 0,
576 0,
577 0,
578 NULL,
579 NULL,
580 32,
581 32,
582 0xffffffff,
583 0,
584 NULL,
585 0,
586 1,
587 0,
588 0,
589 0,
590 v_APCI1564_Interrupt,
591 i_APCI1564_Reset,
592 NULL,
593 NULL,
594 NULL,
595 NULL,
596 NULL,
597 NULL,
598 NULL,
599 NULL,
600 NULL,
601 NULL,
602 i_APCI1564_ConfigDigitalInput,
603 i_APCI1564_Read1DigitalInput,
604 NULL,
605 i_APCI1564_ReadMoreDigitalInput,
606 i_APCI1564_ConfigDigitalOutput,
607 i_APCI1564_WriteDigitalOutput,
608 i_APCI1564_ReadDigitalOutput,
609 i_APCI1564_ReadInterruptStatus,
610 i_APCI1564_ConfigTimerCounterWatchdog,
611 i_APCI1564_StartStopWriteTimerCounterWatchdog,
612 i_APCI1564_ReadTimerCounterWatchdog,
613 NULL,
614 NULL,
615 NULL,
616 NULL,
617 NULL},
618#endif
619#ifdef CONFIG_APCI_1500
620 {"apci1500",
621 APCI1500_BOARD_VENDOR_ID,
622 0x80fc,
623 128,
624 APCI1500_ADDRESS_RANGE,
625 4,
626 0,
627 ADDIDATA_NO_EEPROM,
628 NULL,
629 0,
630 0,
631 0,
632 0,
633 0,
634 0,
635 NULL,
636 NULL,
637 16,
638 16,
639 0xffff,
640 0,
641 NULL,
642 0,
643 1,
644 0,
645 0,
646 0,
647 v_APCI1500_Interrupt,
648 i_APCI1500_Reset,
649 NULL,
650 NULL,
651 NULL,
652 NULL,
653 NULL,
654 NULL,
655 NULL,
656 NULL,
657 NULL,
658 NULL,
659 i_APCI1500_ConfigDigitalInputEvent,
660 i_APCI1500_Initialisation,
661 i_APCI1500_StartStopInputEvent,
662 i_APCI1500_ReadMoreDigitalInput,
663 i_APCI1500_ConfigDigitalOutputErrorInterrupt,
664 i_APCI1500_WriteDigitalOutput,
665 i_APCI1500_ConfigureInterrupt,
666 NULL,
667 i_APCI1500_ConfigCounterTimerWatchdog,
668 i_APCI1500_StartStopTriggerTimerCounterWatchdog,
669 i_APCI1500_ReadInterruptMask,
670 i_APCI1500_ReadCounterTimerWatchdog,
671 NULL,
672 NULL,
673 NULL,
674 NULL},
675#endif
676#ifdef CONFIG_APCI_3001
677 {"apci3001",
678 APCI3120_BOARD_VENDOR_ID,
679 0x828D,
680 AMCC_OP_REG_SIZE,
681 APCI3120_ADDRESS_RANGE,
682 8,
683 0,
684 ADDIDATA_NO_EEPROM,
685 NULL,
686 16,
687 8,
688 16,
689 0,
690 0xfff,
691 0,
692 &range_apci3120_ai,
693 NULL,
694 4,
695 4,
696 0x0f,
697 0,
698 NULL,
699 1,
700 1,
701 1,
702 10000,
703 100000,
704 v_APCI3120_Interrupt,
705 i_APCI3120_Reset,
706 i_APCI3120_InsnConfigAnalogInput,
707 i_APCI3120_InsnReadAnalogInput,
708 NULL,
709 NULL,
710 i_APCI3120_CommandTestAnalogInput,
711 i_APCI3120_CommandAnalogInput,
712 i_APCI3120_StopCyclicAcquisition,
713 NULL,
714 NULL,
715 NULL,
716 NULL,
717 i_APCI3120_InsnReadDigitalInput,
718 NULL,
719 i_APCI3120_InsnBitsDigitalInput,
720 i_APCI3120_InsnConfigDigitalOutput,
721 i_APCI3120_InsnWriteDigitalOutput,
722 i_APCI3120_InsnBitsDigitalOutput,
723 NULL,
724 i_APCI3120_InsnConfigTimer,
725 i_APCI3120_InsnWriteTimer,
726 i_APCI3120_InsnReadTimer,
727 NULL,
728 NULL,
729 NULL,
730 NULL,
731 NULL},
732#endif
733#ifdef CONFIG_APCI_3501
734 {"apci3501",
735 APCI3501_BOARD_VENDOR_ID,
736 0x3001,
737 64,
738 APCI3501_ADDRESS_RANGE,
739 0,
740 0,
741 ADDIDATA_EEPROM,
742 ADDIDATA_S5933,
743 0,
744 0,
745 0,
746 8,
747 0,
748 16383,
749 NULL,
750 &range_apci3501_ao,
751 2,
752 2,
753 0x3,
754 0,
755 NULL,
756 0,
757 1,
758 0,
759 0,
760 0,
761 v_APCI3501_Interrupt,
762 i_APCI3501_Reset,
763 NULL, NULL,
764 NULL,
765 NULL,
766 NULL,
767 NULL,
768 NULL,
769 i_APCI3501_ConfigAnalogOutput,
770 i_APCI3501_WriteAnalogOutput,
771 NULL,
772 NULL,
773 NULL,
774 NULL,
775 i_APCI3501_ReadDigitalInput,
776 i_APCI3501_ConfigDigitalOutput,
777 i_APCI3501_WriteDigitalOutput,
778 i_APCI3501_ReadDigitalOutput,
779 NULL,
780 i_APCI3501_ConfigTimerCounterWatchdog,
781 i_APCI3501_StartStopWriteTimerCounterWatchdog,
782 i_APCI3501_ReadTimerCounterWatchdog,
783 NULL,
784 NULL,
785 NULL,
786 NULL,
787 NULL},
788#endif
789#ifdef CONFIG_APCI_035
790 {"apci035",
791 APCI035_BOARD_VENDOR_ID,
792 0x0300,
793 127,
794 APCI035_ADDRESS_RANGE,
795 0,
796 0,
797 1,
798 ADDIDATA_S5920,
799 16,
800 8,
801 16,
802 0,
803 0xff,
804 0,
805 &range_apci035_ai,
806 NULL,
807 0,
808 0,
809 0,
810 0,
811 NULL,
812 0,
813 1,
814 0,
815 10000,
816 100000,
817 v_APCI035_Interrupt,
818 i_APCI035_Reset,
819 i_APCI035_ConfigAnalogInput,
820 i_APCI035_ReadAnalogInput,
821 NULL,
822 NULL,
823 NULL,
824 NULL,
825 NULL,
826 NULL,
827 NULL,
828 NULL,
829 NULL,
830 NULL,
831 NULL,
832 NULL,
833 NULL,
834 NULL,
835 NULL,
836 NULL,
837 i_APCI035_ConfigTimerWatchdog,
838 i_APCI035_StartStopWriteTimerWatchdog,
839 i_APCI035_ReadTimerWatchdog,
840 NULL,
841 NULL,
842 NULL,
843 NULL,
844 NULL},
845#endif
846#ifdef CONFIG_APCI_3200
847 {"apci3200",
848 APCI3200_BOARD_VENDOR_ID,
849 0x3000,
850 128,
851 256,
852 4,
853 4,
854 ADDIDATA_EEPROM,
855 ADDIDATA_S5920,
856 16,
857 8,
858 16,
859 0,
860 0x3ffff,
861 0,
862 &range_apci3200_ai,
863 NULL,
864 4,
865 4,
866 0,
867 0,
868 NULL,
869 0,
870 0,
871 0,
872 10000,
873 100000,
874 v_APCI3200_Interrupt,
875 i_APCI3200_Reset,
876 i_APCI3200_ConfigAnalogInput,
877 i_APCI3200_ReadAnalogInput,
878 i_APCI3200_InsnWriteReleaseAnalogInput,
879 i_APCI3200_InsnBits_AnalogInput_Test,
880 i_APCI3200_CommandTestAnalogInput,
881 i_APCI3200_CommandAnalogInput,
882 i_APCI3200_StopCyclicAcquisition,
883 NULL,
884 NULL,
885 NULL,
886 NULL,
887 NULL,
888 NULL,
889 i_APCI3200_ReadDigitalInput,
890 i_APCI3200_ConfigDigitalOutput,
891 i_APCI3200_WriteDigitalOutput,
892 i_APCI3200_ReadDigitalOutput,
893 NULL,
894 NULL,
895 NULL,
896 NULL,
897 NULL,
898 NULL,
899 NULL,
900 NULL,
901 NULL},
902#endif
903#ifdef CONFIG_APCI_3300
904 //Begin JK 20.10.2004: APCI-3300 integration
905 {"apci3300",
906 APCI3200_BOARD_VENDOR_ID,
907 0x3007,
908 128,
909 256,
910 4,
911 4,
912 ADDIDATA_EEPROM,
913 ADDIDATA_S5920,
914 0,
915 8,
916 8,
917 0,
918 0x3ffff,
919 0,
920 &range_apci3300_ai,
921 NULL,
922 4,
923 4,
924 0,
925 0,
926 NULL,
927 0,
928 0,
929 0,
930 10000,
931 100000,
932 v_APCI3200_Interrupt,
933 i_APCI3200_Reset,
934 i_APCI3200_ConfigAnalogInput,
935 i_APCI3200_ReadAnalogInput,
936 i_APCI3200_InsnWriteReleaseAnalogInput,
937 i_APCI3200_InsnBits_AnalogInput_Test,
938 i_APCI3200_CommandTestAnalogInput,
939 i_APCI3200_CommandAnalogInput,
940 i_APCI3200_StopCyclicAcquisition,
941 NULL,
942 NULL,
943 NULL,
944 NULL,
945 NULL,
946 NULL,
947 i_APCI3200_ReadDigitalInput,
948 i_APCI3200_ConfigDigitalOutput,
949 i_APCI3200_WriteDigitalOutput,
950 i_APCI3200_ReadDigitalOutput,
951 NULL,
952 NULL,
953 NULL,
954 NULL,
955 NULL,
956 NULL,
957 NULL,
958 NULL,
959 NULL},
960#endif
961#ifdef CONFIG_APCI_1710
962 {"apci1710", APCI1710_BOARD_VENDOR_ID, APCI1710_BOARD_DEVICE_ID,
963 128,
964 8,
965 256,
966 0,
967 ADDIDATA_NO_EEPROM,
968 NULL,
969 0,
970 0,
971 0,
972 0,
973 0,
974 0,
975 NULL,
976 NULL,
977 0,
978 0,
979 0,
980 0,
981 NULL,
982 0,
983 0,
984 0,
985 0,
986 0,
987 v_APCI1710_Interrupt,
988 i_APCI1710_Reset,
989 NULL,
990 NULL,
991 NULL,
992 NULL,
993 NULL,
994 NULL,
995 NULL,
996 NULL,
997 NULL,
998 NULL,
999 NULL,
1000 NULL,
1001 NULL,
1002 NULL,
1003 NULL,
1004 NULL,
1005 NULL,
1006 NULL,
1007 NULL,
1008 NULL,
1009 NULL,
1010 NULL,
1011 NULL,
1012 NULL,
1013 NULL,
1014 NULL},
1015#endif
1016#ifdef CONFIG_APCI_16XX
1017 {"apci1648",
1018 0x15B8,
1019 0x1009,
1020 128,
1021 0,
1022 0,
1023 0,
1024 ADDIDATA_NO_EEPROM,
1025 NULL,
1026 0,
1027 0,
1028 0,
1029 0,
1030 0,
1031 0,
1032 NULL,
1033 NULL,
1034 0,
1035 0,
1036 0,
1037 48,
1038 &range_apci16xx_ttl,
1039 0,
1040 0,
1041 0,
1042 0,
1043 0,
1044 NULL,
1045 i_APCI16XX_Reset,
1046 NULL,
1047 NULL,
1048 NULL,
1049 NULL,
1050 NULL,
1051 NULL,
1052 NULL,
1053 NULL,
1054 NULL,
1055 NULL,
1056 NULL,
1057 NULL,
1058 NULL,
1059 NULL,
1060 NULL,
1061 NULL,
1062 NULL,
1063 NULL,
1064 NULL,
1065 NULL,
1066 NULL,
1067 NULL,
1068 i_APCI16XX_InsnConfigInitTTLIO,
1069 i_APCI16XX_InsnBitsReadTTLIO,
1070 i_APCI16XX_InsnReadTTLIOAllPortValue,
1071 i_APCI16XX_InsnBitsWriteTTLIO},
1072
1073 {"apci1696",
1074 0x15B8,
1075 0x100A,
1076 128,
1077 0,
1078 0,
1079 0,
1080 ADDIDATA_NO_EEPROM,
1081 NULL,
1082 0,
1083 0,
1084 0,
1085 0,
1086 0,
1087 0,
1088 NULL,
1089 NULL,
1090 0,
1091 0,
1092 0,
1093 96,
1094 &range_apci16xx_ttl,
1095 0,
1096 0,
1097 0,
1098 0,
1099 0,
1100 NULL,
1101 i_APCI16XX_Reset,
1102 NULL,
1103 NULL,
1104 NULL,
1105 NULL,
1106 NULL,
1107 NULL,
1108 NULL,
1109 NULL,
1110 NULL,
1111 NULL,
1112 NULL,
1113 NULL,
1114 NULL,
1115 NULL,
1116 NULL,
1117 NULL,
1118 NULL,
1119 NULL,
1120 NULL,
1121 NULL,
1122 NULL,
1123 NULL,
1124 i_APCI16XX_InsnConfigInitTTLIO,
1125 i_APCI16XX_InsnBitsReadTTLIO,
1126 i_APCI16XX_InsnReadTTLIOAllPortValue,
1127 i_APCI16XX_InsnBitsWriteTTLIO},
1128#endif
1129#ifdef CONFIG_APCI_3XXX
1130 {"apci3000-16",
1131 0x15B8,
1132 0x3010,
1133 256,
1134 256,
1135 256,
1136 256,
1137 ADDIDATA_NO_EEPROM,
1138 ADDIDATA_9054,
1139 16,
1140 8,
1141 16,
1142 0,
1143 4095,
1144 0,
1145 &range_apci3XXX_ai,
1146 NULL,
1147 0,
1148 0,
1149 0,
1150 24,
1151 &range_apci3XXX_ttl,
1152 0,
1153 0,
1154 6,
1155 10000,
1156 0,
1157 v_APCI3XXX_Interrupt,
1158 i_APCI3XXX_Reset,
1159 i_APCI3XXX_InsnConfigAnalogInput,
1160 i_APCI3XXX_InsnReadAnalogInput,
1161 NULL,
1162 NULL,
1163 NULL,
1164 NULL,
1165 NULL,
1166 NULL,
1167 NULL,
1168 NULL,
1169 NULL,
1170 NULL,
1171 NULL,
1172 NULL,
1173 NULL,
1174 NULL,
1175 NULL,
1176 NULL,
1177 NULL,
1178 NULL,
1179 NULL,
1180 NULL,
1181 i_APCI3XXX_InsnConfigInitTTLIO,
1182 i_APCI3XXX_InsnBitsTTLIO,
1183 i_APCI3XXX_InsnReadTTLIO,
1184 i_APCI3XXX_InsnWriteTTLIO},
1185
1186 {"apci3000-8",
1187 0x15B8,
1188 0x300F,
1189 256,
1190 256,
1191 256,
1192 256,
1193 ADDIDATA_NO_EEPROM,
1194 ADDIDATA_9054,
1195 8,
1196 4,
1197 8,
1198 0,
1199 4095,
1200 0,
1201 &range_apci3XXX_ai,
1202 NULL,
1203 0,
1204 0,
1205 0,
1206 24,
1207 &range_apci3XXX_ttl,
1208 0,
1209 0,
1210 6,
1211 10000,
1212 0,
1213 v_APCI3XXX_Interrupt,
1214 i_APCI3XXX_Reset,
1215 i_APCI3XXX_InsnConfigAnalogInput,
1216 i_APCI3XXX_InsnReadAnalogInput,
1217 NULL,
1218 NULL,
1219 NULL,
1220 NULL,
1221 NULL,
1222 NULL,
1223 NULL,
1224 NULL,
1225 NULL,
1226 NULL,
1227 NULL,
1228 NULL,
1229 NULL,
1230 NULL,
1231 NULL,
1232 NULL,
1233 NULL,
1234 NULL,
1235 NULL,
1236 NULL,
1237 i_APCI3XXX_InsnConfigInitTTLIO,
1238 i_APCI3XXX_InsnBitsTTLIO,
1239 i_APCI3XXX_InsnReadTTLIO,
1240 i_APCI3XXX_InsnWriteTTLIO},
1241
1242 {"apci3000-4",
1243 0x15B8,
1244 0x300E,
1245 256,
1246 256,
1247 256,
1248 256,
1249 ADDIDATA_NO_EEPROM,
1250 ADDIDATA_9054,
1251 4,
1252 2,
1253 4,
1254 0,
1255 4095,
1256 0,
1257 &range_apci3XXX_ai,
1258 NULL,
1259 0,
1260 0,
1261 0,
1262 24,
1263 &range_apci3XXX_ttl,
1264 0,
1265 0,
1266 6,
1267 10000,
1268 0,
1269 v_APCI3XXX_Interrupt,
1270 i_APCI3XXX_Reset,
1271 i_APCI3XXX_InsnConfigAnalogInput,
1272 i_APCI3XXX_InsnReadAnalogInput,
1273 NULL,
1274 NULL,
1275 NULL,
1276 NULL,
1277 NULL,
1278 NULL,
1279 NULL,
1280 NULL,
1281 NULL,
1282 NULL,
1283 NULL,
1284 NULL,
1285 NULL,
1286 NULL,
1287 NULL,
1288 NULL,
1289 NULL,
1290 NULL,
1291 NULL,
1292 NULL,
1293 i_APCI3XXX_InsnConfigInitTTLIO,
1294 i_APCI3XXX_InsnBitsTTLIO,
1295 i_APCI3XXX_InsnReadTTLIO,
1296 i_APCI3XXX_InsnWriteTTLIO},
1297
1298 {"apci3006-16",
1299 0x15B8,
1300 0x3013,
1301 256,
1302 256,
1303 256,
1304 256,
1305 ADDIDATA_NO_EEPROM,
1306 ADDIDATA_9054,
1307 16,
1308 8,
1309 16,
1310 0,
1311 65535,
1312 0,
1313 &range_apci3XXX_ai,
1314 NULL,
1315 0,
1316 0,
1317 0,
1318 24,
1319 &range_apci3XXX_ttl,
1320 0,
1321 0,
1322 6,
1323 10000,
1324 0,
1325 v_APCI3XXX_Interrupt,
1326 i_APCI3XXX_Reset,
1327 i_APCI3XXX_InsnConfigAnalogInput,
1328 i_APCI3XXX_InsnReadAnalogInput,
1329 NULL,
1330 NULL,
1331 NULL,
1332 NULL,
1333 NULL,
1334 NULL,
1335 NULL,
1336 NULL,
1337 NULL,
1338 NULL,
1339 NULL,
1340 NULL,
1341 NULL,
1342 NULL,
1343 NULL,
1344 NULL,
1345 NULL,
1346 NULL,
1347 NULL,
1348 NULL,
1349 i_APCI3XXX_InsnConfigInitTTLIO,
1350 i_APCI3XXX_InsnBitsTTLIO,
1351 i_APCI3XXX_InsnReadTTLIO,
1352 i_APCI3XXX_InsnWriteTTLIO},
1353
1354 {"apci3006-8",
1355 0x15B8,
1356 0x3014,
1357 256,
1358 256,
1359 256,
1360 256,
1361 ADDIDATA_NO_EEPROM,
1362 ADDIDATA_9054,
1363 8,
1364 4,
1365 8,
1366 0,
1367 65535,
1368 0,
1369 &range_apci3XXX_ai,
1370 NULL,
1371 0,
1372 0,
1373 0,
1374 24,
1375 &range_apci3XXX_ttl,
1376 0,
1377 0,
1378 6,
1379 10000,
1380 0,
1381 v_APCI3XXX_Interrupt,
1382 i_APCI3XXX_Reset,
1383 i_APCI3XXX_InsnConfigAnalogInput,
1384 i_APCI3XXX_InsnReadAnalogInput,
1385 NULL,
1386 NULL,
1387 NULL,
1388 NULL,
1389 NULL,
1390 NULL,
1391 NULL,
1392 NULL,
1393 NULL,
1394 NULL,
1395 NULL,
1396 NULL,
1397 NULL,
1398 NULL,
1399 NULL,
1400 NULL,
1401 NULL,
1402 NULL,
1403 NULL,
1404 NULL,
1405 i_APCI3XXX_InsnConfigInitTTLIO,
1406 i_APCI3XXX_InsnBitsTTLIO,
1407 i_APCI3XXX_InsnReadTTLIO,
1408 i_APCI3XXX_InsnWriteTTLIO},
1409
1410 {"apci3006-4",
1411 0x15B8,
1412 0x3015,
1413 256,
1414 256,
1415 256,
1416 256,
1417 ADDIDATA_NO_EEPROM,
1418 ADDIDATA_9054,
1419 4,
1420 2,
1421 4,
1422 0,
1423 65535,
1424 0,
1425 &range_apci3XXX_ai,
1426 NULL,
1427 0,
1428 0,
1429 0,
1430 24,
1431 &range_apci3XXX_ttl,
1432 0,
1433 0,
1434 6,
1435 10000,
1436 0,
1437 v_APCI3XXX_Interrupt,
1438 i_APCI3XXX_Reset,
1439 i_APCI3XXX_InsnConfigAnalogInput,
1440 i_APCI3XXX_InsnReadAnalogInput,
1441 NULL,
1442 NULL,
1443 NULL,
1444 NULL,
1445 NULL,
1446 NULL,
1447 NULL,
1448 NULL,
1449 NULL,
1450 NULL,
1451 NULL,
1452 NULL,
1453 NULL,
1454 NULL,
1455 NULL,
1456 NULL,
1457 NULL,
1458 NULL,
1459 NULL,
1460 NULL,
1461 i_APCI3XXX_InsnConfigInitTTLIO,
1462 i_APCI3XXX_InsnBitsTTLIO,
1463 i_APCI3XXX_InsnReadTTLIO,
1464 i_APCI3XXX_InsnWriteTTLIO},
1465
1466 {"apci3010-16",
1467 0x15B8,
1468 0x3016,
1469 256,
1470 256,
1471 256,
1472 256,
1473 ADDIDATA_NO_EEPROM,
1474 ADDIDATA_9054,
1475 16,
1476 8,
1477 16,
1478 0,
1479 4095,
1480 0,
1481 &range_apci3XXX_ai,
1482 NULL,
1483 4,
1484 4,
1485 1,
1486 24,
1487 &range_apci3XXX_ttl,
1488 0,
1489 0,
1490 6,
1491 5000,
1492 0,
1493 v_APCI3XXX_Interrupt,
1494 i_APCI3XXX_Reset,
1495 i_APCI3XXX_InsnConfigAnalogInput,
1496 i_APCI3XXX_InsnReadAnalogInput,
1497 NULL,
1498 NULL,
1499 NULL,
1500 NULL,
1501 NULL,
1502 NULL,
1503 NULL,
1504 NULL,
1505 NULL,
1506 i_APCI3XXX_InsnReadDigitalInput,
1507 NULL,
1508 i_APCI3XXX_InsnBitsDigitalInput,
1509 NULL,
1510 i_APCI3XXX_InsnWriteDigitalOutput,
1511 i_APCI3XXX_InsnBitsDigitalOutput,
1512 i_APCI3XXX_InsnReadDigitalOutput,
1513 NULL,
1514 NULL,
1515 NULL,
1516 NULL,
1517 i_APCI3XXX_InsnConfigInitTTLIO,
1518 i_APCI3XXX_InsnBitsTTLIO,
1519 i_APCI3XXX_InsnReadTTLIO,
1520 i_APCI3XXX_InsnWriteTTLIO},
1521
1522 {"apci3010-8",
1523 0x15B8,
1524 0x3017,
1525 256,
1526 256,
1527 256,
1528 256,
1529 ADDIDATA_NO_EEPROM,
1530 ADDIDATA_9054,
1531 8,
1532 4,
1533 8,
1534 0,
1535 4095,
1536 0,
1537 &range_apci3XXX_ai,
1538 NULL,
1539 4,
1540 4,
1541 1,
1542 24,
1543 &range_apci3XXX_ttl,
1544 0,
1545 0,
1546 6,
1547 5000,
1548 0,
1549 v_APCI3XXX_Interrupt,
1550 i_APCI3XXX_Reset,
1551 i_APCI3XXX_InsnConfigAnalogInput,
1552 i_APCI3XXX_InsnReadAnalogInput,
1553 NULL,
1554 NULL,
1555 NULL,
1556 NULL,
1557 NULL,
1558 NULL,
1559 NULL,
1560 NULL,
1561 NULL,
1562 i_APCI3XXX_InsnReadDigitalInput,
1563 NULL,
1564 i_APCI3XXX_InsnBitsDigitalInput,
1565 NULL,
1566 i_APCI3XXX_InsnWriteDigitalOutput,
1567 i_APCI3XXX_InsnBitsDigitalOutput,
1568 i_APCI3XXX_InsnReadDigitalOutput,
1569 NULL,
1570 NULL,
1571 NULL,
1572 NULL,
1573 i_APCI3XXX_InsnConfigInitTTLIO,
1574 i_APCI3XXX_InsnBitsTTLIO,
1575 i_APCI3XXX_InsnReadTTLIO,
1576 i_APCI3XXX_InsnWriteTTLIO},
1577
1578 {"apci3010-4",
1579 0x15B8,
1580 0x3018,
1581 256,
1582 256,
1583 256,
1584 256,
1585 ADDIDATA_NO_EEPROM,
1586 ADDIDATA_9054,
1587 4,
1588 2,
1589 4,
1590 0,
1591 4095,
1592 0,
1593 &range_apci3XXX_ai,
1594 NULL,
1595 4,
1596 4,
1597 1,
1598 24,
1599 &range_apci3XXX_ttl,
1600 0,
1601 0,
1602 6,
1603 5000,
1604 0,
1605 v_APCI3XXX_Interrupt,
1606 i_APCI3XXX_Reset,
1607 i_APCI3XXX_InsnConfigAnalogInput,
1608 i_APCI3XXX_InsnReadAnalogInput,
1609 NULL,
1610 NULL,
1611 NULL,
1612 NULL,
1613 NULL,
1614 NULL,
1615 NULL,
1616 NULL,
1617 NULL,
1618 i_APCI3XXX_InsnReadDigitalInput,
1619 NULL,
1620 i_APCI3XXX_InsnBitsDigitalInput,
1621 NULL,
1622 i_APCI3XXX_InsnWriteDigitalOutput,
1623 i_APCI3XXX_InsnBitsDigitalOutput,
1624 i_APCI3XXX_InsnReadDigitalOutput,
1625 NULL,
1626 NULL,
1627 NULL,
1628 NULL,
1629 i_APCI3XXX_InsnConfigInitTTLIO,
1630 i_APCI3XXX_InsnBitsTTLIO,
1631 i_APCI3XXX_InsnReadTTLIO,
1632 i_APCI3XXX_InsnWriteTTLIO},
1633
1634 {"apci3016-16",
1635 0x15B8,
1636 0x3019,
1637 256,
1638 256,
1639 256,
1640 256,
1641 ADDIDATA_NO_EEPROM,
1642 ADDIDATA_9054,
1643 16,
1644 8,
1645 16,
1646 0,
1647 65535,
1648 0,
1649 &range_apci3XXX_ai,
1650 NULL,
1651 4,
1652 4,
1653 1,
1654 24,
1655 &range_apci3XXX_ttl,
1656 0,
1657 0,
1658 6,
1659 5000,
1660 0,
1661 v_APCI3XXX_Interrupt,
1662 i_APCI3XXX_Reset,
1663 i_APCI3XXX_InsnConfigAnalogInput,
1664 i_APCI3XXX_InsnReadAnalogInput,
1665 NULL,
1666 NULL,
1667 NULL,
1668 NULL,
1669 NULL,
1670 NULL,
1671 NULL,
1672 NULL,
1673 NULL,
1674 i_APCI3XXX_InsnReadDigitalInput,
1675 NULL,
1676 i_APCI3XXX_InsnBitsDigitalInput,
1677 NULL,
1678 i_APCI3XXX_InsnWriteDigitalOutput,
1679 i_APCI3XXX_InsnBitsDigitalOutput,
1680 i_APCI3XXX_InsnReadDigitalOutput,
1681 NULL,
1682 NULL,
1683 NULL,
1684 NULL,
1685 i_APCI3XXX_InsnConfigInitTTLIO,
1686 i_APCI3XXX_InsnBitsTTLIO,
1687 i_APCI3XXX_InsnReadTTLIO,
1688 i_APCI3XXX_InsnWriteTTLIO},
1689
1690 {"apci3016-8",
1691 0x15B8,
1692 0x301A,
1693 256,
1694 256,
1695 256,
1696 256,
1697 ADDIDATA_NO_EEPROM,
1698 ADDIDATA_9054,
1699 8,
1700 4,
1701 8,
1702 0,
1703 65535,
1704 0,
1705 &range_apci3XXX_ai,
1706 NULL,
1707 4,
1708 4,
1709 1,
1710 24,
1711 &range_apci3XXX_ttl,
1712 0,
1713 0,
1714 6,
1715 5000,
1716 0,
1717 v_APCI3XXX_Interrupt,
1718 i_APCI3XXX_Reset,
1719 i_APCI3XXX_InsnConfigAnalogInput,
1720 i_APCI3XXX_InsnReadAnalogInput,
1721 NULL,
1722 NULL,
1723 NULL,
1724 NULL,
1725 NULL,
1726 NULL,
1727 NULL,
1728 NULL,
1729 NULL,
1730 i_APCI3XXX_InsnReadDigitalInput,
1731 NULL,
1732 i_APCI3XXX_InsnBitsDigitalInput,
1733 NULL,
1734 i_APCI3XXX_InsnWriteDigitalOutput,
1735 i_APCI3XXX_InsnBitsDigitalOutput,
1736 i_APCI3XXX_InsnReadDigitalOutput,
1737 NULL,
1738 NULL,
1739 NULL,
1740 NULL,
1741 i_APCI3XXX_InsnConfigInitTTLIO,
1742 i_APCI3XXX_InsnBitsTTLIO,
1743 i_APCI3XXX_InsnReadTTLIO,
1744 i_APCI3XXX_InsnWriteTTLIO},
1745
1746 {"apci3016-4",
1747 0x15B8,
1748 0x301B,
1749 256,
1750 256,
1751 256,
1752 256,
1753 ADDIDATA_NO_EEPROM,
1754 ADDIDATA_9054,
1755 4,
1756 2,
1757 4,
1758 0,
1759 65535,
1760 0,
1761 &range_apci3XXX_ai,
1762 NULL,
1763 4,
1764 4,
1765 1,
1766 24,
1767 &range_apci3XXX_ttl,
1768 0,
1769 0,
1770 6,
1771 5000,
1772 0,
1773 v_APCI3XXX_Interrupt,
1774 i_APCI3XXX_Reset,
1775 i_APCI3XXX_InsnConfigAnalogInput,
1776 i_APCI3XXX_InsnReadAnalogInput,
1777 NULL,
1778 NULL,
1779 NULL,
1780 NULL,
1781 NULL,
1782 NULL,
1783 NULL,
1784 NULL,
1785 NULL,
1786 i_APCI3XXX_InsnReadDigitalInput,
1787 NULL,
1788 i_APCI3XXX_InsnBitsDigitalInput,
1789 NULL,
1790 i_APCI3XXX_InsnWriteDigitalOutput,
1791 i_APCI3XXX_InsnBitsDigitalOutput,
1792 i_APCI3XXX_InsnReadDigitalOutput,
1793 NULL,
1794 NULL,
1795 NULL,
1796 NULL,
1797 i_APCI3XXX_InsnConfigInitTTLIO,
1798 i_APCI3XXX_InsnBitsTTLIO,
1799 i_APCI3XXX_InsnReadTTLIO,
1800 i_APCI3XXX_InsnWriteTTLIO},
1801
1802 {"apci3100-16-4",
1803 0x15B8,
1804 0x301C,
1805 256,
1806 256,
1807 256,
1808 256,
1809 ADDIDATA_NO_EEPROM,
1810 ADDIDATA_9054,
1811 16,
1812 8,
1813 16,
1814 4,
1815 4095,
1816 4095,
1817 &range_apci3XXX_ai,
1818 &range_apci3XXX_ao,
1819 0,
1820 0,
1821 0,
1822 24,
1823 &range_apci3XXX_ttl,
1824 0,
1825 0,
1826 6,
1827 10000,
1828 0,
1829 v_APCI3XXX_Interrupt,
1830 i_APCI3XXX_Reset,
1831 i_APCI3XXX_InsnConfigAnalogInput,
1832 i_APCI3XXX_InsnReadAnalogInput,
1833 NULL,
1834 NULL,
1835 NULL,
1836 NULL,
1837 NULL,
1838 NULL,
1839 i_APCI3XXX_InsnWriteAnalogOutput,
1840 NULL,
1841 NULL,
1842 NULL,
1843 NULL,
1844 NULL,
1845 NULL,
1846 NULL,
1847 NULL,
1848 NULL,
1849 NULL,
1850 NULL,
1851 NULL,
1852 NULL,
1853 i_APCI3XXX_InsnConfigInitTTLIO,
1854 i_APCI3XXX_InsnBitsTTLIO,
1855 i_APCI3XXX_InsnReadTTLIO,
1856 i_APCI3XXX_InsnWriteTTLIO},
1857
1858 {"apci3100-8-4",
1859 0x15B8,
1860 0x301D,
1861 256,
1862 256,
1863 256,
1864 256,
1865 ADDIDATA_NO_EEPROM,
1866 ADDIDATA_9054,
1867 8,
1868 4,
1869 8,
1870 4,
1871 4095,
1872 4095,
1873 &range_apci3XXX_ai,
1874 &range_apci3XXX_ao,
1875 0,
1876 0,
1877 0,
1878 24,
1879 &range_apci3XXX_ttl,
1880 0,
1881 0,
1882 6,
1883 10000,
1884 0,
1885 v_APCI3XXX_Interrupt,
1886 i_APCI3XXX_Reset,
1887 i_APCI3XXX_InsnConfigAnalogInput,
1888 i_APCI3XXX_InsnReadAnalogInput,
1889 NULL,
1890 NULL,
1891 NULL,
1892 NULL,
1893 NULL,
1894 NULL,
1895 i_APCI3XXX_InsnWriteAnalogOutput,
1896 NULL,
1897 NULL,
1898 NULL,
1899 NULL,
1900 NULL,
1901 NULL,
1902 NULL,
1903 NULL,
1904 NULL,
1905 NULL,
1906 NULL,
1907 NULL,
1908 NULL,
1909 i_APCI3XXX_InsnConfigInitTTLIO,
1910 i_APCI3XXX_InsnBitsTTLIO,
1911 i_APCI3XXX_InsnReadTTLIO,
1912 i_APCI3XXX_InsnWriteTTLIO},
1913
1914 {"apci3106-16-4",
1915 0x15B8,
1916 0x301E,
1917 256,
1918 256,
1919 256,
1920 256,
1921 ADDIDATA_NO_EEPROM,
1922 ADDIDATA_9054,
1923 16,
1924 8,
1925 16,
1926 4,
1927 65535,
1928 4095,
1929 &range_apci3XXX_ai,
1930 &range_apci3XXX_ao,
1931 0,
1932 0,
1933 0,
1934 24,
1935 &range_apci3XXX_ttl,
1936 0,
1937 0,
1938 6,
1939 10000,
1940 0,
1941 v_APCI3XXX_Interrupt,
1942 i_APCI3XXX_Reset,
1943 i_APCI3XXX_InsnConfigAnalogInput,
1944 i_APCI3XXX_InsnReadAnalogInput,
1945 NULL,
1946 NULL,
1947 NULL,
1948 NULL,
1949 NULL,
1950 NULL,
1951 i_APCI3XXX_InsnWriteAnalogOutput,
1952 NULL,
1953 NULL,
1954 NULL,
1955 NULL,
1956 NULL,
1957 NULL,
1958 NULL,
1959 NULL,
1960 NULL,
1961 NULL,
1962 NULL,
1963 NULL,
1964 NULL,
1965 i_APCI3XXX_InsnConfigInitTTLIO,
1966 i_APCI3XXX_InsnBitsTTLIO,
1967 i_APCI3XXX_InsnReadTTLIO,
1968 i_APCI3XXX_InsnWriteTTLIO},
1969
1970 {"apci3106-8-4",
1971 0x15B8,
1972 0x301F,
1973 256,
1974 256,
1975 256,
1976 256,
1977 ADDIDATA_NO_EEPROM,
1978 ADDIDATA_9054,
1979 8,
1980 4,
1981 8,
1982 4,
1983 65535,
1984 4095,
1985 &range_apci3XXX_ai,
1986 &range_apci3XXX_ao,
1987 0,
1988 0,
1989 0,
1990 24,
1991 &range_apci3XXX_ttl,
1992 0,
1993 0,
1994 6,
1995 10000,
1996 0,
1997 v_APCI3XXX_Interrupt,
1998 i_APCI3XXX_Reset,
1999 i_APCI3XXX_InsnConfigAnalogInput,
2000 i_APCI3XXX_InsnReadAnalogInput,
2001 NULL,
2002 NULL,
2003 NULL,
2004 NULL,
2005 NULL,
2006 NULL,
2007 i_APCI3XXX_InsnWriteAnalogOutput,
2008 NULL,
2009 NULL,
2010 NULL,
2011 NULL,
2012 NULL,
2013 NULL,
2014 NULL,
2015 NULL,
2016 NULL,
2017 NULL,
2018 NULL,
2019 NULL,
2020 NULL,
2021 i_APCI3XXX_InsnConfigInitTTLIO,
2022 i_APCI3XXX_InsnBitsTTLIO,
2023 i_APCI3XXX_InsnReadTTLIO,
2024 i_APCI3XXX_InsnWriteTTLIO},
2025
2026 {"apci3110-16-4",
2027 0x15B8,
2028 0x3020,
2029 256,
2030 256,
2031 256,
2032 256,
2033 ADDIDATA_NO_EEPROM,
2034 ADDIDATA_9054,
2035 16,
2036 8,
2037 16,
2038 4,
2039 4095,
2040 4095,
2041 &range_apci3XXX_ai,
2042 &range_apci3XXX_ao,
2043 4,
2044 4,
2045 1,
2046 24,
2047 &range_apci3XXX_ttl,
2048 0,
2049 0,
2050 6,
2051 5000,
2052 0,
2053 v_APCI3XXX_Interrupt,
2054 i_APCI3XXX_Reset,
2055 i_APCI3XXX_InsnConfigAnalogInput,
2056 i_APCI3XXX_InsnReadAnalogInput,
2057 NULL,
2058 NULL,
2059 NULL,
2060 NULL,
2061 NULL,
2062 NULL,
2063 i_APCI3XXX_InsnWriteAnalogOutput,
2064 NULL,
2065 NULL,
2066 i_APCI3XXX_InsnReadDigitalInput,
2067 NULL,
2068 i_APCI3XXX_InsnBitsDigitalInput,
2069 NULL,
2070 i_APCI3XXX_InsnWriteDigitalOutput,
2071 i_APCI3XXX_InsnBitsDigitalOutput,
2072 i_APCI3XXX_InsnReadDigitalOutput,
2073 NULL,
2074 NULL,
2075 NULL,
2076 NULL,
2077 i_APCI3XXX_InsnConfigInitTTLIO,
2078 i_APCI3XXX_InsnBitsTTLIO,
2079 i_APCI3XXX_InsnReadTTLIO,
2080 i_APCI3XXX_InsnWriteTTLIO},
2081
2082 {"apci3110-8-4",
2083 0x15B8,
2084 0x3021,
2085 256,
2086 256,
2087 256,
2088 256,
2089 ADDIDATA_NO_EEPROM,
2090 ADDIDATA_9054,
2091 8,
2092 4,
2093 8,
2094 4,
2095 4095,
2096 4095,
2097 &range_apci3XXX_ai,
2098 &range_apci3XXX_ao,
2099 4,
2100 4,
2101 1,
2102 24,
2103 &range_apci3XXX_ttl,
2104 0,
2105 0,
2106 6,
2107 5000,
2108 0,
2109 v_APCI3XXX_Interrupt,
2110 i_APCI3XXX_Reset,
2111 i_APCI3XXX_InsnConfigAnalogInput,
2112 i_APCI3XXX_InsnReadAnalogInput,
2113 NULL,
2114 NULL,
2115 NULL,
2116 NULL,
2117 NULL,
2118 NULL,
2119 i_APCI3XXX_InsnWriteAnalogOutput,
2120 NULL,
2121 NULL,
2122 i_APCI3XXX_InsnReadDigitalInput,
2123 NULL,
2124 i_APCI3XXX_InsnBitsDigitalInput,
2125 NULL,
2126 i_APCI3XXX_InsnWriteDigitalOutput,
2127 i_APCI3XXX_InsnBitsDigitalOutput,
2128 i_APCI3XXX_InsnReadDigitalOutput,
2129 NULL,
2130 NULL,
2131 NULL,
2132 NULL,
2133 i_APCI3XXX_InsnConfigInitTTLIO,
2134 i_APCI3XXX_InsnBitsTTLIO,
2135 i_APCI3XXX_InsnReadTTLIO,
2136 i_APCI3XXX_InsnWriteTTLIO},
2137
2138 {"apci3116-16-4",
2139 0x15B8,
2140 0x3022,
2141 256,
2142 256,
2143 256,
2144 256,
2145 ADDIDATA_NO_EEPROM,
2146 ADDIDATA_9054,
2147 16,
2148 8,
2149 16,
2150 4,
2151 65535,
2152 4095,
2153 &range_apci3XXX_ai,
2154 &range_apci3XXX_ao,
2155 4,
2156 4,
2157 1,
2158 24,
2159 &range_apci3XXX_ttl,
2160 0,
2161 0,
2162 6,
2163 5000,
2164 0,
2165 v_APCI3XXX_Interrupt,
2166 i_APCI3XXX_Reset,
2167 i_APCI3XXX_InsnConfigAnalogInput,
2168 i_APCI3XXX_InsnReadAnalogInput,
2169 NULL,
2170 NULL,
2171 NULL,
2172 NULL,
2173 NULL,
2174 NULL,
2175 i_APCI3XXX_InsnWriteAnalogOutput,
2176 NULL,
2177 NULL,
2178 i_APCI3XXX_InsnReadDigitalInput,
2179 NULL,
2180 i_APCI3XXX_InsnBitsDigitalInput,
2181 NULL,
2182 i_APCI3XXX_InsnWriteDigitalOutput,
2183 i_APCI3XXX_InsnBitsDigitalOutput,
2184 i_APCI3XXX_InsnReadDigitalOutput,
2185 NULL,
2186 NULL,
2187 NULL,
2188 NULL,
2189 i_APCI3XXX_InsnConfigInitTTLIO,
2190 i_APCI3XXX_InsnBitsTTLIO,
2191 i_APCI3XXX_InsnReadTTLIO,
2192 i_APCI3XXX_InsnWriteTTLIO},
2193
2194 {"apci3116-8-4",
2195 0x15B8,
2196 0x3023,
2197 256,
2198 256,
2199 256,
2200 256,
2201 ADDIDATA_NO_EEPROM,
2202 ADDIDATA_9054,
2203 8,
2204 4,
2205 8,
2206 4,
2207 65535,
2208 4095,
2209 &range_apci3XXX_ai,
2210 &range_apci3XXX_ao,
2211 4,
2212 4,
2213 1,
2214 24,
2215 &range_apci3XXX_ttl,
2216 0,
2217 0,
2218 6,
2219 5000,
2220 0,
2221 v_APCI3XXX_Interrupt,
2222 i_APCI3XXX_Reset,
2223 i_APCI3XXX_InsnConfigAnalogInput,
2224 i_APCI3XXX_InsnReadAnalogInput,
2225 NULL,
2226 NULL,
2227 NULL,
2228 NULL,
2229 NULL,
2230 NULL,
2231 i_APCI3XXX_InsnWriteAnalogOutput,
2232 NULL,
2233 NULL,
2234 i_APCI3XXX_InsnReadDigitalInput,
2235 NULL,
2236 i_APCI3XXX_InsnBitsDigitalInput,
2237 NULL,
2238 i_APCI3XXX_InsnWriteDigitalOutput,
2239 i_APCI3XXX_InsnBitsDigitalOutput,
2240 i_APCI3XXX_InsnReadDigitalOutput,
2241 NULL,
2242 NULL,
2243 NULL,
2244 NULL,
2245 i_APCI3XXX_InsnConfigInitTTLIO,
2246 i_APCI3XXX_InsnBitsTTLIO,
2247 i_APCI3XXX_InsnReadTTLIO,
2248 i_APCI3XXX_InsnWriteTTLIO},
2249
2250 {"apci3003",
2251 0x15B8,
2252 0x300B,
2253 256,
2254 256,
2255 256,
2256 256,
2257 ADDIDATA_NO_EEPROM,
2258 ADDIDATA_9054,
2259 0,
2260 4,
2261 4,
2262 0,
2263 65535,
2264 0,
2265 &range_apci3XXX_ai,
2266 NULL,
2267 4,
2268 4,
2269 1,
2270 0,
2271 NULL,
2272 0,
2273 0,
2274 7,
2275 2500,
2276 0,
2277 v_APCI3XXX_Interrupt,
2278 i_APCI3XXX_Reset,
2279 i_APCI3XXX_InsnConfigAnalogInput,
2280 i_APCI3XXX_InsnReadAnalogInput,
2281 NULL,
2282 NULL,
2283 NULL,
2284 NULL,
2285 NULL,
2286 NULL,
2287 NULL,
2288 NULL,
2289 NULL,
2290 i_APCI3XXX_InsnReadDigitalInput,
2291 NULL,
2292 i_APCI3XXX_InsnBitsDigitalInput,
2293 NULL,
2294 i_APCI3XXX_InsnWriteDigitalOutput,
2295 i_APCI3XXX_InsnBitsDigitalOutput,
2296 i_APCI3XXX_InsnReadDigitalOutput,
2297 NULL,
2298 NULL,
2299 NULL,
2300 NULL,
2301 NULL,
2302 NULL,
2303 NULL},
2304
2305 {"apci3002-16",
2306 0x15B8,
2307 0x3002,
2308 256,
2309 256,
2310 256,
2311 256,
2312 ADDIDATA_NO_EEPROM,
2313 ADDIDATA_9054,
2314 0,
2315 16,
2316 16,
2317 0,
2318 65535,
2319 0,
2320 &range_apci3XXX_ai,
2321 NULL,
2322 4,
2323 4,
2324 1,
2325 0,
2326 NULL,
2327 0,
2328 0,
2329 6,
2330 5000,
2331 0,
2332 v_APCI3XXX_Interrupt,
2333 i_APCI3XXX_Reset,
2334 i_APCI3XXX_InsnConfigAnalogInput,
2335 i_APCI3XXX_InsnReadAnalogInput,
2336 NULL,
2337 NULL,
2338 NULL,
2339 NULL,
2340 NULL,
2341 NULL,
2342 NULL,
2343 NULL,
2344 NULL,
2345 i_APCI3XXX_InsnReadDigitalInput,
2346 NULL,
2347 i_APCI3XXX_InsnBitsDigitalInput,
2348 NULL,
2349 i_APCI3XXX_InsnWriteDigitalOutput,
2350 i_APCI3XXX_InsnBitsDigitalOutput,
2351 i_APCI3XXX_InsnReadDigitalOutput,
2352 NULL,
2353 NULL,
2354 NULL,
2355 NULL,
2356 NULL,
2357 NULL,
2358 NULL},
2359
2360 {"apci3002-8",
2361 0x15B8,
2362 0x3003,
2363 256,
2364 256,
2365 256,
2366 256,
2367 ADDIDATA_NO_EEPROM,
2368 ADDIDATA_9054,
2369 0,
2370 8,
2371 8,
2372 0,
2373 65535,
2374 0,
2375 &range_apci3XXX_ai,
2376 NULL,
2377 4,
2378 4,
2379 1,
2380 0,
2381 NULL,
2382 0,
2383 0,
2384 6,
2385 5000,
2386 0,
2387 v_APCI3XXX_Interrupt,
2388 i_APCI3XXX_Reset,
2389 i_APCI3XXX_InsnConfigAnalogInput,
2390 i_APCI3XXX_InsnReadAnalogInput,
2391 NULL,
2392 NULL,
2393 NULL,
2394 NULL,
2395 NULL,
2396 NULL,
2397 NULL,
2398 NULL,
2399 NULL,
2400 i_APCI3XXX_InsnReadDigitalInput,
2401 NULL,
2402 i_APCI3XXX_InsnBitsDigitalInput,
2403 NULL,
2404 i_APCI3XXX_InsnWriteDigitalOutput,
2405 i_APCI3XXX_InsnBitsDigitalOutput,
2406 i_APCI3XXX_InsnReadDigitalOutput,
2407 NULL,
2408 NULL,
2409 NULL,
2410 NULL,
2411 NULL,
2412 NULL,
2413 NULL},
2414
2415 {"apci3002-4",
2416 0x15B8,
2417 0x3004,
2418 256,
2419 256,
2420 256,
2421 256,
2422 ADDIDATA_NO_EEPROM,
2423 ADDIDATA_9054,
2424 0,
2425 4,
2426 4,
2427 0,
2428 65535,
2429 0,
2430 &range_apci3XXX_ai,
2431 NULL,
2432 4,
2433 4,
2434 1,
2435 0,
2436 NULL,
2437 0,
2438 0,
2439 6,
2440 5000,
2441 0,
2442 v_APCI3XXX_Interrupt,
2443 i_APCI3XXX_Reset,
2444 i_APCI3XXX_InsnConfigAnalogInput,
2445 i_APCI3XXX_InsnReadAnalogInput,
2446 NULL,
2447 NULL,
2448 NULL,
2449 NULL,
2450 NULL,
2451 NULL,
2452 NULL,
2453 NULL,
2454 NULL,
2455 i_APCI3XXX_InsnReadDigitalInput,
2456 NULL,
2457 i_APCI3XXX_InsnBitsDigitalInput,
2458 NULL,
2459 i_APCI3XXX_InsnWriteDigitalOutput,
2460 i_APCI3XXX_InsnBitsDigitalOutput,
2461 i_APCI3XXX_InsnReadDigitalOutput,
2462 NULL,
2463 NULL,
2464 NULL,
2465 NULL,
2466 NULL,
2467 NULL,
2468 NULL},
2469
2470 {"apci3500",
2471 0x15B8,
2472 0x3024,
2473 256,
2474 256,
2475 256,
2476 256,
2477 ADDIDATA_NO_EEPROM,
2478 ADDIDATA_9054,
2479 0,
2480 0,
2481 0,
2482 4,
2483 0,
2484 4095,
2485 NULL,
2486 &range_apci3XXX_ao,
2487 0,
2488 0,
2489 0,
2490 24,
2491 &range_apci3XXX_ttl,
2492 0,
2493 0,
2494 0,
2495 0,
2496 0,
2497 v_APCI3XXX_Interrupt,
2498 i_APCI3XXX_Reset,
2499 NULL,
2500 NULL,
2501 NULL,
2502 NULL,
2503 NULL,
2504 NULL,
2505 NULL,
2506 NULL,
2507 i_APCI3XXX_InsnWriteAnalogOutput,
2508 NULL,
2509 NULL,
2510 NULL,
2511 NULL,
2512 NULL,
2513 NULL,
2514 NULL,
2515 NULL,
2516 NULL,
2517 NULL,
2518 NULL,
2519 NULL,
2520 NULL,
2521 i_APCI3XXX_InsnConfigInitTTLIO,
2522 i_APCI3XXX_InsnBitsTTLIO,
2523 i_APCI3XXX_InsnReadTTLIO,
2524 i_APCI3XXX_InsnWriteTTLIO},
2525#endif
2526};
2527
2528#define n_boardtypes (sizeof(boardtypes)/sizeof(boardtype))
2529
2530comedi_driver driver_addi = {
2531 driver_name:"addi_common",
2532 module:THIS_MODULE,
2533 attach:i_ADDI_Attach,
2534 detach:i_ADDI_Detach,
2535 num_names:n_boardtypes,
2536 board_name:&boardtypes[0].pc_DriverName,
2537 offset:sizeof(boardtype),
2538};
2539
2540COMEDI_PCI_INITCLEANUP(driver_addi, addi_apci_tbl);
2541
2542/*
2543+----------------------------------------------------------------------------+
2544| Function name :static int i_ADDI_Attach(comedi_device *dev, |
2545| comedi_devconfig *it) |
2546| |
2547+----------------------------------------------------------------------------+
2548| Task :Detects the card. |
2549| Configure the driver for a particular board. |
2550| This function does all the initializations and memory |
2551| allocation of data structures for the driver. |
2552+----------------------------------------------------------------------------+
2553| Input Parameters :comedi_device *dev |
2554| comedi_devconfig *it |
2555| |
2556+----------------------------------------------------------------------------+
2557| Return Value : 0 |
2558| |
2559+----------------------------------------------------------------------------+
2560*/
2561
2562static int i_ADDI_Attach(comedi_device * dev, comedi_devconfig * it)
2563{
2564 comedi_subdevice *s;
2565 int ret, pages, i, n_subdevices;
2566 DWORD dw_Dummy;
2567 resource_size_t io_addr[5];
2568 unsigned int irq;
2569 resource_size_t iobase_a, iobase_main, iobase_addon, iobase_reserved;
2570 struct pcilst_struct *card = NULL;
2571 unsigned char pci_bus, pci_slot, pci_func;
2572 int i_Dma = 0;
2573 static char c_Identifier[150];
2574
2575 sprintf(c_Identifier, "Addi-Data GmbH Comedi %s",
2576 this_board->pc_DriverName);
2577
2578 if ((ret = alloc_private(dev, sizeof(addi_private))) < 0) {
2579 return -ENOMEM;
2580 }
2581
2582 if (!pci_list_builded) {
2583 v_pci_card_list_init(this_board->i_VendorId, 1); //1 for displaying the list..
2584 pci_list_builded = 1;
2585 }
2586 //rt_printk("comedi%d: addi_common: board=%s",dev->minor,this_board->pc_DriverName);
2587
2588 if ((this_board->i_Dma) && (it->options[2] == 0)) {
2589 i_Dma = 1;
2590 }
2591
2592 if ((card = ptr_select_and_alloc_pci_card(this_board->i_VendorId,
2593 this_board->i_DeviceId,
2594 it->options[0],
2595 it->options[1], i_Dma)) == NULL) {
2596 return -EIO;
2597 }
2598 devpriv->allocated = 1;
2599
2600 if ((i_pci_card_data(card, &pci_bus, &pci_slot, &pci_func, &io_addr[0],
2601 &irq)) < 0) {
2602 i_pci_card_free(card);
2603 printk(" - Can't get AMCC data!\n");
2604 return -EIO;
2605 }
2606
2607 iobase_a = io_addr[0];
2608 iobase_main = io_addr[1];
2609 iobase_addon = io_addr[2];
2610 iobase_reserved = io_addr[3];
2611 printk("\nBus %d: Slot %d: Funct%d\nBase0: 0x%8llx\nBase1: 0x%8llx\nBase2: 0x%8llx\nBase3: 0x%8llx\n", pci_bus, pci_slot, pci_func, (unsigned long long)io_addr[0], (unsigned long long)io_addr[1], (unsigned long long)io_addr[2], (unsigned long long)io_addr[3]);
2612
2613 if ((this_board->pc_EepromChip == NULL)
2614 || (strcmp(this_board->pc_EepromChip, ADDIDATA_9054) != 0)) {
2615 /************************************/
2616 /* Test if more that 1 address used */
2617 /************************************/
2618
2619 if (this_board->i_IorangeBase1 != 0) {
2620 dev->iobase = (unsigned long)iobase_main; // DAQ base address...
2621 } else {
2622 dev->iobase = (unsigned long)iobase_a; // DAQ base address...
2623 }
2624
2625 dev->board_name = this_board->pc_DriverName;
2626 devpriv->amcc = card;
2627 devpriv->iobase = (INT) dev->iobase;
2628 devpriv->i_IobaseAmcc = (INT) iobase_a; //AMCC base address...
2629 devpriv->i_IobaseAddon = (INT) iobase_addon; //ADD ON base address....
2630 devpriv->i_IobaseReserved = (INT) iobase_reserved;
2631 devpriv->ps_BoardInfo = this_board;
2632 } else {
2633 dev->board_name = this_board->pc_DriverName;
2634 dev->iobase = (unsigned long)io_addr[2];
2635 devpriv->amcc = card;
2636 devpriv->iobase = (INT) io_addr[2];
2637 devpriv->ps_BoardInfo = this_board;
2638 devpriv->i_IobaseReserved = (INT) io_addr[3];
2639 printk("\nioremap begin");
2640 devpriv->dw_AiBase =
2641 (ULONG_PTR) ioremap(io_addr[3],
2642 this_board->i_IorangeBase3);
2643 printk("\nioremap end");
2644 }
2645
2646 //##
2647
2648 if (irq > 0) {
2649 if (comedi_request_irq(irq, v_ADDI_Interrupt, IRQF_SHARED,
2650 c_Identifier, dev) < 0) {
2651 printk(", unable to allocate IRQ %u, DISABLING IT",
2652 irq);
2653 irq = 0; /* Can't use IRQ */
2654 } else {
2655 rt_printk("\nirq=%u", irq);
2656 }
2657 } else {
2658 rt_printk(", IRQ disabled");
2659 }
2660
2661 printk("\nOption %d %d %d\n", it->options[0], it->options[1],
2662 it->options[2]);
2663 dev->irq = irq;
2664
2665 // Read eepeom and fill boardtype Structure
2666
2667 if (this_board->i_PCIEeprom) {
2668 printk("\nPCI Eeprom used");
2669 if (!(strcmp(this_board->pc_EepromChip, "S5920"))) {
2670 // Set 3 wait stait
2671 if (!(strcmp(this_board->pc_DriverName, "apci035"))) {
2672 outl(0x80808082, devpriv->i_IobaseAmcc + 0x60);
2673 } else {
2674 outl(0x83838383, devpriv->i_IobaseAmcc + 0x60);
2675 }
2676 // Enable the interrupt for the controler
2677 dw_Dummy = inl(devpriv->i_IobaseAmcc + 0x38);
2678 outl(dw_Dummy | 0x2000, devpriv->i_IobaseAmcc + 0x38);
2679 printk("\nEnable the interrupt for the controler");
2680 }
2681 printk("\nRead Eeprom");
2682 i_EepromReadMainHeader(io_addr[0], this_board->pc_EepromChip,
2683 dev);
2684 } else {
2685 printk("\nPCI Eeprom unused");
2686 }
2687
2688 if (it->options[2] > 0) {
2689 devpriv->us_UseDma = ADDI_DISABLE;
2690 } else {
2691 devpriv->us_UseDma = ADDI_ENABLE;
2692 }
2693
2694 if (this_board->i_Dma) {
2695 printk("\nDMA used");
2696 if (devpriv->us_UseDma == ADDI_ENABLE) {
2697 // alloc DMA buffers
2698 devpriv->b_DmaDoubleBuffer = 0;
2699 for (i = 0; i < 2; i++) {
2700 for (pages = 4; pages >= 0; pages--) {
2701 if ((devpriv->ul_DmaBufferVirtual[i] =
2702 (void *)
2703 __get_free_pages
2704 (GFP_KERNEL, pages))) {
2705 break;
2706 }
2707 }
2708 if (devpriv->ul_DmaBufferVirtual[i]) {
2709 devpriv->ui_DmaBufferPages[i] = pages;
2710 devpriv->ui_DmaBufferSize[i] =
2711 PAGE_SIZE * pages;
2712 devpriv->ui_DmaBufferSamples[i] =
2713 devpriv->
2714 ui_DmaBufferSize[i] >> 1;
2715 devpriv->ul_DmaBufferHw[i] =
2716 virt_to_bus((void *)devpriv->
2717 ul_DmaBufferVirtual[i]);
2718 }
2719 }
2720 if (!devpriv->ul_DmaBufferVirtual[0]) {
2721 rt_printk
2722 (", Can't allocate DMA buffer, DMA disabled!");
2723 devpriv->us_UseDma = ADDI_DISABLE;
2724 }
2725
2726 if (devpriv->ul_DmaBufferVirtual[1]) {
2727 devpriv->b_DmaDoubleBuffer = 1;
2728 }
2729 }
2730
2731 if ((devpriv->us_UseDma == ADDI_ENABLE)) {
2732 rt_printk("\nDMA ENABLED\n");
2733 } else {
2734 printk("\nDMA DISABLED\n");
2735 }
2736 }
2737
2738 if (!strcmp(this_board->pc_DriverName, "apci1710")) {
2739#ifdef CONFIG_APCI_1710
2740 i_ADDI_AttachPCI1710(dev);
2741
2742 // save base address
2743 devpriv->s_BoardInfos.ui_Address = io_addr[2];
2744#endif
2745 } else {
2746 //Update-0.7.57->0.7.68dev->n_subdevices = 7;
2747 n_subdevices = 7;
2748 if ((ret = alloc_subdevices(dev, n_subdevices)) < 0)
2749 return ret;
2750
2751 // Allocate and Initialise AI Subdevice Structures
2752 s = dev->subdevices + 0;
2753 if ((this_board->i_NbrAiChannel)
2754 || (this_board->i_NbrAiChannelDiff)) {
2755 dev->read_subdev = s;
2756 s->type = COMEDI_SUBD_AI;
2757 s->subdev_flags =
2758 SDF_READABLE | SDF_RT | SDF_COMMON | SDF_GROUND
2759 | SDF_DIFF;
2760 if (this_board->i_NbrAiChannel) {
2761 s->n_chan = this_board->i_NbrAiChannel;
2762 devpriv->b_SingelDiff = 0;
2763 } else {
2764 s->n_chan = this_board->i_NbrAiChannelDiff;
2765 devpriv->b_SingelDiff = 1;
2766 }
2767 s->maxdata = this_board->i_AiMaxdata;
2768 s->len_chanlist = this_board->i_AiChannelList;
2769 s->range_table = this_board->pr_AiRangelist;
2770
2771 /* Set the initialisation flag */
2772 devpriv->b_AiInitialisation = 1;
2773
2774 s->insn_config =
2775 this_board->i_hwdrv_InsnConfigAnalogInput;
2776 s->insn_read = this_board->i_hwdrv_InsnReadAnalogInput;
2777 s->insn_write =
2778 this_board->i_hwdrv_InsnWriteAnalogInput;
2779 s->insn_bits = this_board->i_hwdrv_InsnBitsAnalogInput;
2780 s->do_cmdtest =
2781 this_board->i_hwdrv_CommandTestAnalogInput;
2782 s->do_cmd = this_board->i_hwdrv_CommandAnalogInput;
2783 s->cancel = this_board->i_hwdrv_CancelAnalogInput;
2784
2785 } else {
2786 s->type = COMEDI_SUBD_UNUSED;
2787 }
2788
2789 // Allocate and Initialise AO Subdevice Structures
2790 s = dev->subdevices + 1;
2791 if (this_board->i_NbrAoChannel) {
2792 s->type = COMEDI_SUBD_AO;
2793 s->subdev_flags =
2794 SDF_WRITEABLE | SDF_GROUND | SDF_COMMON |
2795 SDF_RT;
2796 s->n_chan = this_board->i_NbrAoChannel;
2797 s->maxdata = this_board->i_AoMaxdata;
2798 s->len_chanlist = this_board->i_NbrAoChannel;
2799 s->range_table = this_board->pr_AoRangelist;
2800 s->insn_config =
2801 this_board->i_hwdrv_InsnConfigAnalogOutput;
2802 s->insn_write =
2803 this_board->i_hwdrv_InsnWriteAnalogOutput;
2804 } else {
2805 s->type = COMEDI_SUBD_UNUSED;
2806 }
2807 // Allocate and Initialise DI Subdevice Structures
2808 s = dev->subdevices + 2;
2809 if (this_board->i_NbrDiChannel) {
2810 s->type = COMEDI_SUBD_DI;
2811 s->subdev_flags =
2812 SDF_READABLE | SDF_RT | SDF_GROUND | SDF_COMMON;
2813 s->n_chan = this_board->i_NbrDiChannel;
2814 s->maxdata = 1;
2815 s->len_chanlist = this_board->i_NbrDiChannel;
2816 s->range_table = &range_digital;
2817 s->io_bits = 0; /* all bits input */
2818 s->insn_config =
2819 this_board->i_hwdrv_InsnConfigDigitalInput;
2820 s->insn_read = this_board->i_hwdrv_InsnReadDigitalInput;
2821 s->insn_write =
2822 this_board->i_hwdrv_InsnWriteDigitalInput;
2823 s->insn_bits = this_board->i_hwdrv_InsnBitsDigitalInput;
2824 } else {
2825 s->type = COMEDI_SUBD_UNUSED;
2826 }
2827 // Allocate and Initialise DO Subdevice Structures
2828 s = dev->subdevices + 3;
2829 if (this_board->i_NbrDoChannel) {
2830 s->type = COMEDI_SUBD_DO;
2831 s->subdev_flags =
2832 SDF_READABLE | SDF_WRITEABLE | SDF_RT |
2833 SDF_GROUND | SDF_COMMON;
2834 s->n_chan = this_board->i_NbrDoChannel;
2835 s->maxdata = this_board->i_DoMaxdata;
2836 s->len_chanlist = this_board->i_NbrDoChannel;
2837 s->range_table = &range_digital;
2838 s->io_bits = 0xf; /* all bits output */
2839
2840 s->insn_config = this_board->i_hwdrv_InsnConfigDigitalOutput; //for digital output memory..
2841 s->insn_write =
2842 this_board->i_hwdrv_InsnWriteDigitalOutput;
2843 s->insn_bits =
2844 this_board->i_hwdrv_InsnBitsDigitalOutput;
2845 s->insn_read =
2846 this_board->i_hwdrv_InsnReadDigitalOutput;
2847 } else {
2848 s->type = COMEDI_SUBD_UNUSED;
2849 }
2850
2851 // Allocate and Initialise Timer Subdevice Structures
2852 s = dev->subdevices + 4;
2853 if (this_board->i_Timer) {
2854 s->type = COMEDI_SUBD_TIMER;
2855 s->subdev_flags =
2856 SDF_WRITEABLE | SDF_RT | SDF_GROUND |
2857 SDF_COMMON;
2858 s->n_chan = 1;
2859 s->maxdata = 0;
2860 s->len_chanlist = 1;
2861 s->range_table = &range_digital;
2862
2863 s->insn_write = this_board->i_hwdrv_InsnWriteTimer;
2864 s->insn_read = this_board->i_hwdrv_InsnReadTimer;
2865 s->insn_config = this_board->i_hwdrv_InsnConfigTimer;
2866 s->insn_bits = this_board->i_hwdrv_InsnBitsTimer;
2867 } else {
2868 s->type = COMEDI_SUBD_UNUSED;
2869 }
2870
2871 // Allocate and Initialise TTL
2872 s = dev->subdevices + 5;
2873 if (this_board->i_NbrTTLChannel) {
2874 s->type = COMEDI_SUBD_TTLIO;
2875 s->subdev_flags =
2876 SDF_WRITEABLE | SDF_READABLE | SDF_RT |
2877 SDF_GROUND | SDF_COMMON;
2878 s->n_chan = this_board->i_NbrTTLChannel;
2879 s->maxdata = 1;
2880 s->io_bits = 0; /* all bits input */
2881 s->len_chanlist = this_board->i_NbrTTLChannel;
2882 s->range_table = &range_digital;
2883 s->insn_config = this_board->i_hwdr_ConfigInitTTLIO;
2884 s->insn_bits = this_board->i_hwdr_ReadTTLIOBits;
2885 s->insn_read = this_board->i_hwdr_ReadTTLIOAllPortValue;
2886 s->insn_write = this_board->i_hwdr_WriteTTLIOChlOnOff;
2887 } else {
2888 s->type = COMEDI_SUBD_UNUSED;
2889 }
2890
2891 /* EEPROM */
2892 s = dev->subdevices + 6;
2893 if (this_board->i_PCIEeprom) {
2894 s->type = COMEDI_SUBD_MEMORY;
2895 s->subdev_flags = SDF_READABLE | SDF_INTERNAL;
2896 s->n_chan = 256;
2897 s->maxdata = 0xffff;
2898 s->insn_read = i_ADDIDATA_InsnReadEeprom;
2899 } else {
2900 s->type = COMEDI_SUBD_UNUSED;
2901 }
2902 }
2903
2904 printk("\ni_ADDI_Attach end\n");
2905 i_ADDI_Reset(dev);
2906 devpriv->b_ValidDriver = 1;
2907 return 0;
2908}
2909
2910/*
2911+----------------------------------------------------------------------------+
2912| Function name : static int i_ADDI_Detach(comedi_device *dev) |
2913| |
2914| |
2915+----------------------------------------------------------------------------+
2916| Task : Deallocates resources of the addi_common driver |
2917| Free the DMA buffers, unregister irq. |
2918| |
2919+----------------------------------------------------------------------------+
2920| Input Parameters : comedi_device *dev |
2921| |
2922| |
2923+----------------------------------------------------------------------------+
2924| Return Value : 0 |
2925| |
2926+----------------------------------------------------------------------------+
2927*/
2928
2929static int i_ADDI_Detach(comedi_device * dev)
2930{
2931
2932 if (dev->private) {
2933 if (devpriv->b_ValidDriver) {
2934 i_ADDI_Reset(dev);
2935 }
2936
2937 if (dev->irq) {
2938 comedi_free_irq(dev->irq, dev);
2939 }
2940
2941 if ((devpriv->ps_BoardInfo->pc_EepromChip == NULL)
2942 || (strcmp(devpriv->ps_BoardInfo->pc_EepromChip,
2943 ADDIDATA_9054) != 0)) {
2944 if (devpriv->allocated) {
2945 i_pci_card_free(devpriv->amcc);
2946 }
2947
2948 if (devpriv->ul_DmaBufferVirtual[0]) {
2949 free_pages((unsigned long)devpriv->
2950 ul_DmaBufferVirtual[0],
2951 devpriv->ui_DmaBufferPages[0]);
2952 }
2953
2954 if (devpriv->ul_DmaBufferVirtual[1]) {
2955 free_pages((unsigned long)devpriv->
2956 ul_DmaBufferVirtual[1],
2957 devpriv->ui_DmaBufferPages[1]);
2958 }
2959 } else {
2960 iounmap((void *)devpriv->dw_AiBase);
2961
2962 if (devpriv->allocated) {
2963 i_pci_card_free(devpriv->amcc);
2964 }
2965 }
2966
2967 if (pci_list_builded) {
2968 //v_pci_card_list_cleanup(PCI_VENDOR_ID_AMCC);
2969 v_pci_card_list_cleanup(this_board->i_VendorId);
2970 pci_list_builded = 0;
2971 }
2972 }
2973
2974 return 0;
2975}
2976
2977/*
2978+----------------------------------------------------------------------------+
2979| Function name : static int i_ADDI_Reset(comedi_device *dev) |
2980| |
2981+----------------------------------------------------------------------------+
2982| Task : Disables all interrupts, Resets digital output to low, |
2983| Set all analog output to low |
2984| |
2985+----------------------------------------------------------------------------+
2986| Input Parameters : comedi_device *dev |
2987| |
2988| |
2989+----------------------------------------------------------------------------+
2990| Return Value : 0 |
2991| |
2992+----------------------------------------------------------------------------+
2993*/
2994
2995static int i_ADDI_Reset(comedi_device * dev)
2996{
2997
2998 this_board->i_hwdrv_Reset(dev);
2999 return 0;
3000}
3001
3002// Interrupt function
3003/*
3004+----------------------------------------------------------------------------+
3005| Function name : |
3006|static void v_ADDI_Interrupt(int irq, void *d PT_REGS_ARG) |
3007| |
3008+----------------------------------------------------------------------------+
3009| Task : Registerd interrupt routine |
3010| |
3011+----------------------------------------------------------------------------+
3012| Input Parameters : int irq |
3013| |
3014| |
3015+----------------------------------------------------------------------------+
3016| Return Value : |
3017| |
3018+----------------------------------------------------------------------------+
3019*/
3020
3021static irqreturn_t v_ADDI_Interrupt(int irq, void *d PT_REGS_ARG)
3022{
3023 comedi_device *dev = d;
3024 this_board->v_hwdrv_Interrupt(irq, d);
3025 return IRQ_RETVAL(1);
3026}
3027
3028// EEPROM Read Function
3029/*
3030+----------------------------------------------------------------------------+
3031| Function name : |
3032|INT i_ADDIDATA_InsnReadEeprom(comedi_device *dev,comedi_subdevice *s,
790c5541 3033 comedi_insn *insn,unsigned int *data)
c995fe94
ADG
3034| |
3035+----------------------------------------------------------------------------+
3036| Task : Read 256 words from EEPROM |
3037| |
3038+----------------------------------------------------------------------------+
3039| Input Parameters :(comedi_device *dev,comedi_subdevice *s,
790c5541 3040 comedi_insn *insn,unsigned int *data) |
c995fe94
ADG
3041| |
3042| |
3043+----------------------------------------------------------------------------+
3044| Return Value : |
3045| |
3046+----------------------------------------------------------------------------+
3047*/
3048
3049static int i_ADDIDATA_InsnReadEeprom(comedi_device * dev, comedi_subdevice * s,
790c5541 3050 comedi_insn * insn, unsigned int * data)
c995fe94
ADG
3051{
3052 WORD w_Data;
3053 WORD w_Address;
3054 w_Address = CR_CHAN(insn->chanspec); // address to be read as 0,1,2,3...255
3055
3056 w_Data = w_EepromReadWord(devpriv->i_IobaseAmcc,
3057 this_board->pc_EepromChip, 0x100 + (2 * w_Address));
3058 data[0] = w_Data;
3059 //multiplied by 2 bcozinput will be like 0,1,2...255
3060 return insn->n;
3061
3062}