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