include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit...
[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
356cdbcb
BP
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
c995fe94
ADG
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
39cfb97b 20You should also find the complete GPL in the COPYING file accompanying this source code.
c995fe94
ADG
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>
c995fe94
ADG
53#include <linux/errno.h>
54#include <linux/ioport.h>
55#include <linux/delay.h>
56#include <linux/interrupt.h>
57#include <linux/timex.h>
58#include <linux/timer.h>
59#include <linux/pci.h>
5a0e3ad6 60#include <linux/gfp.h>
c995fe94
ADG
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
2696fb57
BP
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"); */
c995fe94 74
e320671e 75#define devpriv ((struct addi_private *)dev->private)
6a770eca 76#define this_board ((struct addi_board *)dev->board_ptr)
c995fe94
ADG
77
78#if defined(CONFIG_APCI_1710) || defined(CONFIG_APCI_3200) || defined(CONFIG_APCI_3300)
2696fb57 79/* BYTE b_SaveFPUReg [94]; */
c995fe94
ADG
80
81void fpu_begin(void)
82{
2696fb57 83 /* asm ("fstenv b_SaveFPUReg"); */
c995fe94
ADG
84 kernel_fpu_begin();
85}
86
87void fpu_end(void)
88{
2696fb57 89 /* asm ("frstor b_SaveFPUReg"); */
c995fe94
ADG
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
6a770eca 222static const struct addi_board boardtypes[] = {
c995fe94
ADG
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
68c3dbff 904 /* Begin JK .20.10.2004 = APCI-3300 integration */
c995fe94
ADG
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
6a770eca 2528#define n_boardtypes (sizeof(boardtypes)/sizeof(struct addi_board))
c995fe94 2529
139dfbdf 2530struct comedi_driver driver_addi = {
68c3dbff
BP
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(struct addi_board),
c995fe94
ADG
2538};
2539
2540COMEDI_PCI_INITCLEANUP(driver_addi, addi_apci_tbl);
2541
2542/*
2543+----------------------------------------------------------------------------+
71b5f4f1 2544| Function name :static int i_ADDI_Attach(struct comedi_device *dev, |
0707bb04 2545| struct comedi_devconfig *it) |
c995fe94
ADG
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+----------------------------------------------------------------------------+
71b5f4f1 2553| Input Parameters :struct comedi_device *dev |
0707bb04 2554| struct comedi_devconfig *it |
c995fe94
ADG
2555| |
2556+----------------------------------------------------------------------------+
2557| Return Value : 0 |
2558| |
2559+----------------------------------------------------------------------------+
2560*/
2561
da91b269 2562static int i_ADDI_Attach(struct comedi_device *dev, struct comedi_devconfig *it)
c995fe94 2563{
34c43922 2564 struct comedi_subdevice *s;
c995fe94 2565 int ret, pages, i, n_subdevices;
756e9d7c 2566 unsigned int dw_Dummy;
c995fe94
ADG
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
c3744138
BP
2578 ret = alloc_private(dev, sizeof(struct addi_private));
2579 if (ret < 0)
356cdbcb 2580 return -ENOMEM;
c995fe94
ADG
2581
2582 if (!pci_list_builded) {
2696fb57 2583 v_pci_card_list_init(this_board->i_VendorId, 1); /* 1 for displaying the list.. */
c995fe94
ADG
2584 pci_list_builded = 1;
2585 }
5f74ea14 2586 /* printk("comedi%d: addi_common: board=%s",dev->minor,this_board->pc_DriverName); */
c995fe94
ADG
2587
2588 if ((this_board->i_Dma) && (it->options[2] == 0)) {
2589 i_Dma = 1;
2590 }
2591
c3744138
BP
2592 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);
2596
2597 if (card == NULL)
c995fe94 2598 return -EIO;
c3744138 2599
c995fe94
ADG
2600 devpriv->allocated = 1;
2601
2602 if ((i_pci_card_data(card, &pci_bus, &pci_slot, &pci_func, &io_addr[0],
2603 &irq)) < 0) {
2604 i_pci_card_free(card);
2605 printk(" - Can't get AMCC data!\n");
2606 return -EIO;
2607 }
2608
2609 iobase_a = io_addr[0];
2610 iobase_main = io_addr[1];
2611 iobase_addon = io_addr[2];
2612 iobase_reserved = io_addr[3];
2613 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]);
2614
2615 if ((this_board->pc_EepromChip == NULL)
2616 || (strcmp(this_board->pc_EepromChip, ADDIDATA_9054) != 0)) {
2617 /************************************/
2618 /* Test if more that 1 address used */
2619 /************************************/
2620
2621 if (this_board->i_IorangeBase1 != 0) {
2696fb57 2622 dev->iobase = (unsigned long)iobase_main; /* DAQ base address... */
c995fe94 2623 } else {
2696fb57 2624 dev->iobase = (unsigned long)iobase_a; /* DAQ base address... */
c995fe94
ADG
2625 }
2626
2627 dev->board_name = this_board->pc_DriverName;
2628 devpriv->amcc = card;
74b894e5 2629 devpriv->iobase = (int) dev->iobase;
2696fb57
BP
2630 devpriv->i_IobaseAmcc = (int) iobase_a; /* AMCC base address... */
2631 devpriv->i_IobaseAddon = (int) iobase_addon; /* ADD ON base address.... */
74b894e5 2632 devpriv->i_IobaseReserved = (int) iobase_reserved;
c995fe94
ADG
2633 devpriv->ps_BoardInfo = this_board;
2634 } else {
2635 dev->board_name = this_board->pc_DriverName;
2636 dev->iobase = (unsigned long)io_addr[2];
2637 devpriv->amcc = card;
74b894e5 2638 devpriv->iobase = (int) io_addr[2];
c995fe94 2639 devpriv->ps_BoardInfo = this_board;
74b894e5 2640 devpriv->i_IobaseReserved = (int) io_addr[3];
c995fe94
ADG
2641 printk("\nioremap begin");
2642 devpriv->dw_AiBase =
53106ae6 2643 (unsigned long) ioremap(io_addr[3],
c995fe94
ADG
2644 this_board->i_IorangeBase3);
2645 printk("\nioremap end");
2646 }
2647
2696fb57 2648 /* ## */
c995fe94
ADG
2649
2650 if (irq > 0) {
5f74ea14 2651 if (request_irq(irq, v_ADDI_Interrupt, IRQF_SHARED,
c995fe94
ADG
2652 c_Identifier, dev) < 0) {
2653 printk(", unable to allocate IRQ %u, DISABLING IT",
2654 irq);
2655 irq = 0; /* Can't use IRQ */
2656 } else {
5f74ea14 2657 printk("\nirq=%u", irq);
c995fe94
ADG
2658 }
2659 } else {
5f74ea14 2660 printk(", IRQ disabled");
c995fe94
ADG
2661 }
2662
2663 printk("\nOption %d %d %d\n", it->options[0], it->options[1],
2664 it->options[2]);
2665 dev->irq = irq;
2666
2696fb57 2667 /* Read eepeom and fill addi_board Structure */
c995fe94
ADG
2668
2669 if (this_board->i_PCIEeprom) {
2670 printk("\nPCI Eeprom used");
2671 if (!(strcmp(this_board->pc_EepromChip, "S5920"))) {
2696fb57 2672 /* Set 3 wait stait */
c995fe94
ADG
2673 if (!(strcmp(this_board->pc_DriverName, "apci035"))) {
2674 outl(0x80808082, devpriv->i_IobaseAmcc + 0x60);
2675 } else {
2676 outl(0x83838383, devpriv->i_IobaseAmcc + 0x60);
2677 }
2696fb57 2678 /* Enable the interrupt for the controler */
c995fe94
ADG
2679 dw_Dummy = inl(devpriv->i_IobaseAmcc + 0x38);
2680 outl(dw_Dummy | 0x2000, devpriv->i_IobaseAmcc + 0x38);
2681 printk("\nEnable the interrupt for the controler");
2682 }
2683 printk("\nRead Eeprom");
2684 i_EepromReadMainHeader(io_addr[0], this_board->pc_EepromChip,
2685 dev);
2686 } else {
2687 printk("\nPCI Eeprom unused");
2688 }
2689
2690 if (it->options[2] > 0) {
2691 devpriv->us_UseDma = ADDI_DISABLE;
2692 } else {
2693 devpriv->us_UseDma = ADDI_ENABLE;
2694 }
2695
2696 if (this_board->i_Dma) {
2697 printk("\nDMA used");
2698 if (devpriv->us_UseDma == ADDI_ENABLE) {
2696fb57 2699 /* alloc DMA buffers */
c995fe94
ADG
2700 devpriv->b_DmaDoubleBuffer = 0;
2701 for (i = 0; i < 2; i++) {
2702 for (pages = 4; pages >= 0; pages--) {
c3744138
BP
2703 devpriv->ul_DmaBufferVirtual[i] =
2704 (void *) __get_free_pages(GFP_KERNEL, pages);
2705
2706 if (devpriv->ul_DmaBufferVirtual[i])
c995fe94 2707 break;
c995fe94
ADG
2708 }
2709 if (devpriv->ul_DmaBufferVirtual[i]) {
2710 devpriv->ui_DmaBufferPages[i] = pages;
2711 devpriv->ui_DmaBufferSize[i] =
2712 PAGE_SIZE * pages;
2713 devpriv->ui_DmaBufferSamples[i] =
2714 devpriv->
2715 ui_DmaBufferSize[i] >> 1;
2716 devpriv->ul_DmaBufferHw[i] =
2717 virt_to_bus((void *)devpriv->
2718 ul_DmaBufferVirtual[i]);
2719 }
2720 }
2721 if (!devpriv->ul_DmaBufferVirtual[0]) {
5f74ea14 2722 printk
c995fe94
ADG
2723 (", Can't allocate DMA buffer, DMA disabled!");
2724 devpriv->us_UseDma = ADDI_DISABLE;
2725 }
2726
2727 if (devpriv->ul_DmaBufferVirtual[1]) {
2728 devpriv->b_DmaDoubleBuffer = 1;
2729 }
2730 }
2731
2732 if ((devpriv->us_UseDma == ADDI_ENABLE)) {
5f74ea14 2733 printk("\nDMA ENABLED\n");
c995fe94
ADG
2734 } else {
2735 printk("\nDMA DISABLED\n");
2736 }
2737 }
2738
2739 if (!strcmp(this_board->pc_DriverName, "apci1710")) {
2740#ifdef CONFIG_APCI_1710
2741 i_ADDI_AttachPCI1710(dev);
2742
2696fb57 2743 /* save base address */
c995fe94
ADG
2744 devpriv->s_BoardInfos.ui_Address = io_addr[2];
2745#endif
2746 } else {
2696fb57 2747 /* Update-0.7.57->0.7.68dev->n_subdevices = 7; */
c995fe94 2748 n_subdevices = 7;
c3744138
BP
2749 ret = alloc_subdevices(dev, n_subdevices);
2750 if (ret < 0)
c995fe94
ADG
2751 return ret;
2752
2696fb57 2753 /* Allocate and Initialise AI Subdevice Structures */
c995fe94
ADG
2754 s = dev->subdevices + 0;
2755 if ((this_board->i_NbrAiChannel)
2756 || (this_board->i_NbrAiChannelDiff)) {
2757 dev->read_subdev = s;
2758 s->type = COMEDI_SUBD_AI;
2759 s->subdev_flags =
fcea1154 2760 SDF_READABLE | SDF_COMMON | SDF_GROUND
c995fe94
ADG
2761 | SDF_DIFF;
2762 if (this_board->i_NbrAiChannel) {
2763 s->n_chan = this_board->i_NbrAiChannel;
2764 devpriv->b_SingelDiff = 0;
2765 } else {
2766 s->n_chan = this_board->i_NbrAiChannelDiff;
2767 devpriv->b_SingelDiff = 1;
2768 }
2769 s->maxdata = this_board->i_AiMaxdata;
2770 s->len_chanlist = this_board->i_AiChannelList;
2771 s->range_table = this_board->pr_AiRangelist;
2772
2773 /* Set the initialisation flag */
2774 devpriv->b_AiInitialisation = 1;
2775
2776 s->insn_config =
2777 this_board->i_hwdrv_InsnConfigAnalogInput;
2778 s->insn_read = this_board->i_hwdrv_InsnReadAnalogInput;
2779 s->insn_write =
2780 this_board->i_hwdrv_InsnWriteAnalogInput;
2781 s->insn_bits = this_board->i_hwdrv_InsnBitsAnalogInput;
2782 s->do_cmdtest =
2783 this_board->i_hwdrv_CommandTestAnalogInput;
2784 s->do_cmd = this_board->i_hwdrv_CommandAnalogInput;
2785 s->cancel = this_board->i_hwdrv_CancelAnalogInput;
2786
2787 } else {
2788 s->type = COMEDI_SUBD_UNUSED;
2789 }
2790
2696fb57 2791 /* Allocate and Initialise AO Subdevice Structures */
c995fe94
ADG
2792 s = dev->subdevices + 1;
2793 if (this_board->i_NbrAoChannel) {
2794 s->type = COMEDI_SUBD_AO;
fcea1154 2795 s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
c995fe94
ADG
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 }
2696fb57 2807 /* Allocate and Initialise DI Subdevice Structures */
c995fe94
ADG
2808 s = dev->subdevices + 2;
2809 if (this_board->i_NbrDiChannel) {
2810 s->type = COMEDI_SUBD_DI;
fcea1154 2811 s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_COMMON;
c995fe94
ADG
2812 s->n_chan = this_board->i_NbrDiChannel;
2813 s->maxdata = 1;
2814 s->len_chanlist = this_board->i_NbrDiChannel;
2815 s->range_table = &range_digital;
2816 s->io_bits = 0; /* all bits input */
2817 s->insn_config =
2818 this_board->i_hwdrv_InsnConfigDigitalInput;
2819 s->insn_read = this_board->i_hwdrv_InsnReadDigitalInput;
2820 s->insn_write =
2821 this_board->i_hwdrv_InsnWriteDigitalInput;
2822 s->insn_bits = this_board->i_hwdrv_InsnBitsDigitalInput;
2823 } else {
2824 s->type = COMEDI_SUBD_UNUSED;
2825 }
2696fb57 2826 /* Allocate and Initialise DO Subdevice Structures */
c995fe94
ADG
2827 s = dev->subdevices + 3;
2828 if (this_board->i_NbrDoChannel) {
2829 s->type = COMEDI_SUBD_DO;
2830 s->subdev_flags =
fcea1154 2831 SDF_READABLE | SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
c995fe94
ADG
2832 s->n_chan = this_board->i_NbrDoChannel;
2833 s->maxdata = this_board->i_DoMaxdata;
2834 s->len_chanlist = this_board->i_NbrDoChannel;
2835 s->range_table = &range_digital;
2836 s->io_bits = 0xf; /* all bits output */
2837
2696fb57 2838 s->insn_config = this_board->i_hwdrv_InsnConfigDigitalOutput; /* for digital output memory.. */
c995fe94
ADG
2839 s->insn_write =
2840 this_board->i_hwdrv_InsnWriteDigitalOutput;
2841 s->insn_bits =
2842 this_board->i_hwdrv_InsnBitsDigitalOutput;
2843 s->insn_read =
2844 this_board->i_hwdrv_InsnReadDigitalOutput;
2845 } else {
2846 s->type = COMEDI_SUBD_UNUSED;
2847 }
2848
2696fb57 2849 /* Allocate and Initialise Timer Subdevice Structures */
c995fe94
ADG
2850 s = dev->subdevices + 4;
2851 if (this_board->i_Timer) {
2852 s->type = COMEDI_SUBD_TIMER;
fcea1154 2853 s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
c995fe94
ADG
2854 s->n_chan = 1;
2855 s->maxdata = 0;
2856 s->len_chanlist = 1;
2857 s->range_table = &range_digital;
2858
2859 s->insn_write = this_board->i_hwdrv_InsnWriteTimer;
2860 s->insn_read = this_board->i_hwdrv_InsnReadTimer;
2861 s->insn_config = this_board->i_hwdrv_InsnConfigTimer;
2862 s->insn_bits = this_board->i_hwdrv_InsnBitsTimer;
2863 } else {
2864 s->type = COMEDI_SUBD_UNUSED;
2865 }
2866
2696fb57 2867 /* Allocate and Initialise TTL */
c995fe94
ADG
2868 s = dev->subdevices + 5;
2869 if (this_board->i_NbrTTLChannel) {
2870 s->type = COMEDI_SUBD_TTLIO;
2871 s->subdev_flags =
fcea1154 2872 SDF_WRITEABLE | SDF_READABLE | SDF_GROUND | SDF_COMMON;
c995fe94
ADG
2873 s->n_chan = this_board->i_NbrTTLChannel;
2874 s->maxdata = 1;
2875 s->io_bits = 0; /* all bits input */
2876 s->len_chanlist = this_board->i_NbrTTLChannel;
2877 s->range_table = &range_digital;
2878 s->insn_config = this_board->i_hwdr_ConfigInitTTLIO;
2879 s->insn_bits = this_board->i_hwdr_ReadTTLIOBits;
2880 s->insn_read = this_board->i_hwdr_ReadTTLIOAllPortValue;
2881 s->insn_write = this_board->i_hwdr_WriteTTLIOChlOnOff;
2882 } else {
2883 s->type = COMEDI_SUBD_UNUSED;
2884 }
2885
2886 /* EEPROM */
2887 s = dev->subdevices + 6;
2888 if (this_board->i_PCIEeprom) {
2889 s->type = COMEDI_SUBD_MEMORY;
2890 s->subdev_flags = SDF_READABLE | SDF_INTERNAL;
2891 s->n_chan = 256;
2892 s->maxdata = 0xffff;
2893 s->insn_read = i_ADDIDATA_InsnReadEeprom;
2894 } else {
2895 s->type = COMEDI_SUBD_UNUSED;
2896 }
2897 }
2898
2899 printk("\ni_ADDI_Attach end\n");
2900 i_ADDI_Reset(dev);
2901 devpriv->b_ValidDriver = 1;
2902 return 0;
2903}
2904
2905/*
2906+----------------------------------------------------------------------------+
71b5f4f1 2907| Function name : static int i_ADDI_Detach(struct comedi_device *dev) |
c995fe94
ADG
2908| |
2909| |
2910+----------------------------------------------------------------------------+
2911| Task : Deallocates resources of the addi_common driver |
2912| Free the DMA buffers, unregister irq. |
2913| |
2914+----------------------------------------------------------------------------+
71b5f4f1 2915| Input Parameters : struct comedi_device *dev |
c995fe94
ADG
2916| |
2917| |
2918+----------------------------------------------------------------------------+
2919| Return Value : 0 |
2920| |
2921+----------------------------------------------------------------------------+
2922*/
2923
da91b269 2924static int i_ADDI_Detach(struct comedi_device *dev)
c995fe94
ADG
2925{
2926
2927 if (dev->private) {
2928 if (devpriv->b_ValidDriver) {
2929 i_ADDI_Reset(dev);
2930 }
2931
2932 if (dev->irq) {
5f74ea14 2933 free_irq(dev->irq, dev);
c995fe94
ADG
2934 }
2935
2936 if ((devpriv->ps_BoardInfo->pc_EepromChip == NULL)
2937 || (strcmp(devpriv->ps_BoardInfo->pc_EepromChip,
2938 ADDIDATA_9054) != 0)) {
2939 if (devpriv->allocated) {
2940 i_pci_card_free(devpriv->amcc);
2941 }
2942
2943 if (devpriv->ul_DmaBufferVirtual[0]) {
2944 free_pages((unsigned long)devpriv->
2945 ul_DmaBufferVirtual[0],
2946 devpriv->ui_DmaBufferPages[0]);
2947 }
2948
2949 if (devpriv->ul_DmaBufferVirtual[1]) {
2950 free_pages((unsigned long)devpriv->
2951 ul_DmaBufferVirtual[1],
2952 devpriv->ui_DmaBufferPages[1]);
2953 }
2954 } else {
2955 iounmap((void *)devpriv->dw_AiBase);
2956
2957 if (devpriv->allocated) {
2958 i_pci_card_free(devpriv->amcc);
2959 }
2960 }
2961
2962 if (pci_list_builded) {
2696fb57 2963 /* v_pci_card_list_cleanup(PCI_VENDOR_ID_AMCC); */
c995fe94
ADG
2964 v_pci_card_list_cleanup(this_board->i_VendorId);
2965 pci_list_builded = 0;
2966 }
2967 }
2968
2969 return 0;
2970}
2971
2972/*
2973+----------------------------------------------------------------------------+
71b5f4f1 2974| Function name : static int i_ADDI_Reset(struct comedi_device *dev) |
c995fe94
ADG
2975| |
2976+----------------------------------------------------------------------------+
2977| Task : Disables all interrupts, Resets digital output to low, |
2978| Set all analog output to low |
2979| |
2980+----------------------------------------------------------------------------+
71b5f4f1 2981| Input Parameters : struct comedi_device *dev |
c995fe94
ADG
2982| |
2983| |
2984+----------------------------------------------------------------------------+
2985| Return Value : 0 |
2986| |
2987+----------------------------------------------------------------------------+
2988*/
2989
da91b269 2990static int i_ADDI_Reset(struct comedi_device *dev)
c995fe94
ADG
2991{
2992
2993 this_board->i_hwdrv_Reset(dev);
2994 return 0;
2995}
2996
2696fb57 2997/* Interrupt function */
c995fe94
ADG
2998/*
2999+----------------------------------------------------------------------------+
3000| Function name : |
70265d24 3001|static void v_ADDI_Interrupt(int irq, void *d) |
c995fe94
ADG
3002| |
3003+----------------------------------------------------------------------------+
3004| Task : Registerd interrupt routine |
3005| |
3006+----------------------------------------------------------------------------+
3007| Input Parameters : int irq |
3008| |
3009| |
3010+----------------------------------------------------------------------------+
3011| Return Value : |
3012| |
3013+----------------------------------------------------------------------------+
3014*/
3015
70265d24 3016static irqreturn_t v_ADDI_Interrupt(int irq, void *d)
c995fe94 3017{
71b5f4f1 3018 struct comedi_device *dev = d;
c995fe94
ADG
3019 this_board->v_hwdrv_Interrupt(irq, d);
3020 return IRQ_RETVAL(1);
3021}
3022
2696fb57 3023/* EEPROM Read Function */
c995fe94
ADG
3024/*
3025+----------------------------------------------------------------------------+
3026| Function name : |
34c43922 3027|INT i_ADDIDATA_InsnReadEeprom(struct comedi_device *dev,struct comedi_subdevice *s,
90035c08 3028 struct comedi_insn *insn,unsigned int *data)
c995fe94
ADG
3029| |
3030+----------------------------------------------------------------------------+
3031| Task : Read 256 words from EEPROM |
3032| |
3033+----------------------------------------------------------------------------+
34c43922 3034| Input Parameters :(struct comedi_device *dev,struct comedi_subdevice *s,
90035c08 3035 struct comedi_insn *insn,unsigned int *data) |
c995fe94
ADG
3036| |
3037| |
3038+----------------------------------------------------------------------------+
3039| Return Value : |
3040| |
3041+----------------------------------------------------------------------------+
3042*/
3043
da91b269
BP
3044static int i_ADDIDATA_InsnReadEeprom(struct comedi_device *dev, struct comedi_subdevice *s,
3045 struct comedi_insn *insn, unsigned int *data)
c995fe94 3046{
babf0ede
BP
3047 unsigned short w_Data;
3048 unsigned short w_Address;
2696fb57 3049 w_Address = CR_CHAN(insn->chanspec); /* address to be read as 0,1,2,3...255 */
c995fe94
ADG
3050
3051 w_Data = w_EepromReadWord(devpriv->i_IobaseAmcc,
3052 this_board->pc_EepromChip, 0x100 + (2 * w_Address));
3053 data[0] = w_Data;
2696fb57 3054 /* multiplied by 2 bcozinput will be like 0,1,2...255 */
c995fe94
ADG
3055 return insn->n;
3056
3057}