]> bbs.cooldavid.org Git - net-next-2.6.git/blame - drivers/staging/comedi/drivers/addi-data/addi_common.c
Staging: comedi: addi-data: don't overwrite name for request_irq()
[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;
c995fe94 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 }
6d8b0f5b 2586 /* printk("comedi%d: "ADDIDATA_DRIVER_NAME": 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 2641 printk("\nioremap begin");
2f78c642
GKH
2642 devpriv->dw_AiBase = ioremap(io_addr[3],
2643 this_board->i_IorangeBase3);
c995fe94
ADG
2644 printk("\nioremap end");
2645 }
2646
2696fb57 2647 /* ## */
c995fe94
ADG
2648
2649 if (irq > 0) {
5f74ea14 2650 if (request_irq(irq, v_ADDI_Interrupt, IRQF_SHARED,
b2e68b00 2651 this_board->pc_DriverName, dev) < 0) {
c995fe94
ADG
2652 printk(", unable to allocate IRQ %u, DISABLING IT",
2653 irq);
2654 irq = 0; /* Can't use IRQ */
2655 } else {
5f74ea14 2656 printk("\nirq=%u", irq);
c995fe94
ADG
2657 }
2658 } else {
5f74ea14 2659 printk(", IRQ disabled");
c995fe94
ADG
2660 }
2661
2662 printk("\nOption %d %d %d\n", it->options[0], it->options[1],
2663 it->options[2]);
2664 dev->irq = irq;
2665
2696fb57 2666 /* Read eepeom and fill addi_board Structure */
c995fe94
ADG
2667
2668 if (this_board->i_PCIEeprom) {
2669 printk("\nPCI Eeprom used");
2670 if (!(strcmp(this_board->pc_EepromChip, "S5920"))) {
2696fb57 2671 /* Set 3 wait stait */
c995fe94
ADG
2672 if (!(strcmp(this_board->pc_DriverName, "apci035"))) {
2673 outl(0x80808082, devpriv->i_IobaseAmcc + 0x60);
2674 } else {
2675 outl(0x83838383, devpriv->i_IobaseAmcc + 0x60);
2676 }
2696fb57 2677 /* Enable the interrupt for the controler */
c995fe94
ADG
2678 dw_Dummy = inl(devpriv->i_IobaseAmcc + 0x38);
2679 outl(dw_Dummy | 0x2000, devpriv->i_IobaseAmcc + 0x38);
2680 printk("\nEnable the interrupt for the controler");
2681 }
2682 printk("\nRead Eeprom");
2683 i_EepromReadMainHeader(io_addr[0], this_board->pc_EepromChip,
2684 dev);
2685 } else {
2686 printk("\nPCI Eeprom unused");
2687 }
2688
2689 if (it->options[2] > 0) {
2690 devpriv->us_UseDma = ADDI_DISABLE;
2691 } else {
2692 devpriv->us_UseDma = ADDI_ENABLE;
2693 }
2694
2695 if (this_board->i_Dma) {
2696 printk("\nDMA used");
2697 if (devpriv->us_UseDma == ADDI_ENABLE) {
2696fb57 2698 /* alloc DMA buffers */
c995fe94
ADG
2699 devpriv->b_DmaDoubleBuffer = 0;
2700 for (i = 0; i < 2; i++) {
2701 for (pages = 4; pages >= 0; pages--) {
c3744138
BP
2702 devpriv->ul_DmaBufferVirtual[i] =
2703 (void *) __get_free_pages(GFP_KERNEL, pages);
2704
2705 if (devpriv->ul_DmaBufferVirtual[i])
c995fe94 2706 break;
c995fe94
ADG
2707 }
2708 if (devpriv->ul_DmaBufferVirtual[i]) {
2709 devpriv->ui_DmaBufferPages[i] = pages;
2710 devpriv->ui_DmaBufferSize[i] =
2711 PAGE_SIZE * pages;
2712 devpriv->ui_DmaBufferSamples[i] =
2713 devpriv->
2714 ui_DmaBufferSize[i] >> 1;
2715 devpriv->ul_DmaBufferHw[i] =
2716 virt_to_bus((void *)devpriv->
2717 ul_DmaBufferVirtual[i]);
2718 }
2719 }
2720 if (!devpriv->ul_DmaBufferVirtual[0]) {
5f74ea14 2721 printk
c995fe94
ADG
2722 (", Can't allocate DMA buffer, DMA disabled!");
2723 devpriv->us_UseDma = ADDI_DISABLE;
2724 }
2725
2726 if (devpriv->ul_DmaBufferVirtual[1]) {
2727 devpriv->b_DmaDoubleBuffer = 1;
2728 }
2729 }
2730
2731 if ((devpriv->us_UseDma == ADDI_ENABLE)) {
5f74ea14 2732 printk("\nDMA ENABLED\n");
c995fe94
ADG
2733 } else {
2734 printk("\nDMA DISABLED\n");
2735 }
2736 }
2737
2738 if (!strcmp(this_board->pc_DriverName, "apci1710")) {
2739#ifdef CONFIG_APCI_1710
2740 i_ADDI_AttachPCI1710(dev);
2741
2696fb57 2742 /* save base address */
c995fe94
ADG
2743 devpriv->s_BoardInfos.ui_Address = io_addr[2];
2744#endif
2745 } else {
2696fb57 2746 /* Update-0.7.57->0.7.68dev->n_subdevices = 7; */
c995fe94 2747 n_subdevices = 7;
c3744138
BP
2748 ret = alloc_subdevices(dev, n_subdevices);
2749 if (ret < 0)
c995fe94
ADG
2750 return ret;
2751
2696fb57 2752 /* Allocate and Initialise AI Subdevice Structures */
c995fe94
ADG
2753 s = dev->subdevices + 0;
2754 if ((this_board->i_NbrAiChannel)
2755 || (this_board->i_NbrAiChannelDiff)) {
2756 dev->read_subdev = s;
2757 s->type = COMEDI_SUBD_AI;
2758 s->subdev_flags =
fcea1154 2759 SDF_READABLE | SDF_COMMON | SDF_GROUND
c995fe94
ADG
2760 | SDF_DIFF;
2761 if (this_board->i_NbrAiChannel) {
2762 s->n_chan = this_board->i_NbrAiChannel;
2763 devpriv->b_SingelDiff = 0;
2764 } else {
2765 s->n_chan = this_board->i_NbrAiChannelDiff;
2766 devpriv->b_SingelDiff = 1;
2767 }
2768 s->maxdata = this_board->i_AiMaxdata;
2769 s->len_chanlist = this_board->i_AiChannelList;
2770 s->range_table = this_board->pr_AiRangelist;
2771
2772 /* Set the initialisation flag */
2773 devpriv->b_AiInitialisation = 1;
2774
2775 s->insn_config =
2776 this_board->i_hwdrv_InsnConfigAnalogInput;
2777 s->insn_read = this_board->i_hwdrv_InsnReadAnalogInput;
2778 s->insn_write =
2779 this_board->i_hwdrv_InsnWriteAnalogInput;
2780 s->insn_bits = this_board->i_hwdrv_InsnBitsAnalogInput;
2781 s->do_cmdtest =
2782 this_board->i_hwdrv_CommandTestAnalogInput;
2783 s->do_cmd = this_board->i_hwdrv_CommandAnalogInput;
2784 s->cancel = this_board->i_hwdrv_CancelAnalogInput;
2785
2786 } else {
2787 s->type = COMEDI_SUBD_UNUSED;
2788 }
2789
2696fb57 2790 /* Allocate and Initialise AO Subdevice Structures */
c995fe94
ADG
2791 s = dev->subdevices + 1;
2792 if (this_board->i_NbrAoChannel) {
2793 s->type = COMEDI_SUBD_AO;
fcea1154 2794 s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
c995fe94
ADG
2795 s->n_chan = this_board->i_NbrAoChannel;
2796 s->maxdata = this_board->i_AoMaxdata;
2797 s->len_chanlist = this_board->i_NbrAoChannel;
2798 s->range_table = this_board->pr_AoRangelist;
2799 s->insn_config =
2800 this_board->i_hwdrv_InsnConfigAnalogOutput;
2801 s->insn_write =
2802 this_board->i_hwdrv_InsnWriteAnalogOutput;
2803 } else {
2804 s->type = COMEDI_SUBD_UNUSED;
2805 }
2696fb57 2806 /* Allocate and Initialise DI Subdevice Structures */
c995fe94
ADG
2807 s = dev->subdevices + 2;
2808 if (this_board->i_NbrDiChannel) {
2809 s->type = COMEDI_SUBD_DI;
fcea1154 2810 s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_COMMON;
c995fe94
ADG
2811 s->n_chan = this_board->i_NbrDiChannel;
2812 s->maxdata = 1;
2813 s->len_chanlist = this_board->i_NbrDiChannel;
2814 s->range_table = &range_digital;
2815 s->io_bits = 0; /* all bits input */
2816 s->insn_config =
2817 this_board->i_hwdrv_InsnConfigDigitalInput;
2818 s->insn_read = this_board->i_hwdrv_InsnReadDigitalInput;
2819 s->insn_write =
2820 this_board->i_hwdrv_InsnWriteDigitalInput;
2821 s->insn_bits = this_board->i_hwdrv_InsnBitsDigitalInput;
2822 } else {
2823 s->type = COMEDI_SUBD_UNUSED;
2824 }
2696fb57 2825 /* Allocate and Initialise DO Subdevice Structures */
c995fe94
ADG
2826 s = dev->subdevices + 3;
2827 if (this_board->i_NbrDoChannel) {
2828 s->type = COMEDI_SUBD_DO;
2829 s->subdev_flags =
fcea1154 2830 SDF_READABLE | SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
c995fe94
ADG
2831 s->n_chan = this_board->i_NbrDoChannel;
2832 s->maxdata = this_board->i_DoMaxdata;
2833 s->len_chanlist = this_board->i_NbrDoChannel;
2834 s->range_table = &range_digital;
2835 s->io_bits = 0xf; /* all bits output */
2836
2696fb57 2837 s->insn_config = this_board->i_hwdrv_InsnConfigDigitalOutput; /* for digital output memory.. */
c995fe94
ADG
2838 s->insn_write =
2839 this_board->i_hwdrv_InsnWriteDigitalOutput;
2840 s->insn_bits =
2841 this_board->i_hwdrv_InsnBitsDigitalOutput;
2842 s->insn_read =
2843 this_board->i_hwdrv_InsnReadDigitalOutput;
2844 } else {
2845 s->type = COMEDI_SUBD_UNUSED;
2846 }
2847
2696fb57 2848 /* Allocate and Initialise Timer Subdevice Structures */
c995fe94
ADG
2849 s = dev->subdevices + 4;
2850 if (this_board->i_Timer) {
2851 s->type = COMEDI_SUBD_TIMER;
fcea1154 2852 s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
c995fe94
ADG
2853 s->n_chan = 1;
2854 s->maxdata = 0;
2855 s->len_chanlist = 1;
2856 s->range_table = &range_digital;
2857
2858 s->insn_write = this_board->i_hwdrv_InsnWriteTimer;
2859 s->insn_read = this_board->i_hwdrv_InsnReadTimer;
2860 s->insn_config = this_board->i_hwdrv_InsnConfigTimer;
2861 s->insn_bits = this_board->i_hwdrv_InsnBitsTimer;
2862 } else {
2863 s->type = COMEDI_SUBD_UNUSED;
2864 }
2865
2696fb57 2866 /* Allocate and Initialise TTL */
c995fe94
ADG
2867 s = dev->subdevices + 5;
2868 if (this_board->i_NbrTTLChannel) {
2869 s->type = COMEDI_SUBD_TTLIO;
2870 s->subdev_flags =
fcea1154 2871 SDF_WRITEABLE | SDF_READABLE | SDF_GROUND | SDF_COMMON;
c995fe94
ADG
2872 s->n_chan = this_board->i_NbrTTLChannel;
2873 s->maxdata = 1;
2874 s->io_bits = 0; /* all bits input */
2875 s->len_chanlist = this_board->i_NbrTTLChannel;
2876 s->range_table = &range_digital;
2877 s->insn_config = this_board->i_hwdr_ConfigInitTTLIO;
2878 s->insn_bits = this_board->i_hwdr_ReadTTLIOBits;
2879 s->insn_read = this_board->i_hwdr_ReadTTLIOAllPortValue;
2880 s->insn_write = this_board->i_hwdr_WriteTTLIOChlOnOff;
2881 } else {
2882 s->type = COMEDI_SUBD_UNUSED;
2883 }
2884
2885 /* EEPROM */
2886 s = dev->subdevices + 6;
2887 if (this_board->i_PCIEeprom) {
2888 s->type = COMEDI_SUBD_MEMORY;
2889 s->subdev_flags = SDF_READABLE | SDF_INTERNAL;
2890 s->n_chan = 256;
2891 s->maxdata = 0xffff;
2892 s->insn_read = i_ADDIDATA_InsnReadEeprom;
2893 } else {
2894 s->type = COMEDI_SUBD_UNUSED;
2895 }
2896 }
2897
2898 printk("\ni_ADDI_Attach end\n");
2899 i_ADDI_Reset(dev);
2900 devpriv->b_ValidDriver = 1;
2901 return 0;
2902}
2903
2904/*
2905+----------------------------------------------------------------------------+
71b5f4f1 2906| Function name : static int i_ADDI_Detach(struct comedi_device *dev) |
c995fe94
ADG
2907| |
2908| |
2909+----------------------------------------------------------------------------+
2910| Task : Deallocates resources of the addi_common driver |
2911| Free the DMA buffers, unregister irq. |
2912| |
2913+----------------------------------------------------------------------------+
71b5f4f1 2914| Input Parameters : struct comedi_device *dev |
c995fe94
ADG
2915| |
2916| |
2917+----------------------------------------------------------------------------+
2918| Return Value : 0 |
2919| |
2920+----------------------------------------------------------------------------+
2921*/
2922
da91b269 2923static int i_ADDI_Detach(struct comedi_device *dev)
c995fe94
ADG
2924{
2925
2926 if (dev->private) {
2927 if (devpriv->b_ValidDriver) {
2928 i_ADDI_Reset(dev);
2929 }
2930
2931 if (dev->irq) {
5f74ea14 2932 free_irq(dev->irq, dev);
c995fe94
ADG
2933 }
2934
2935 if ((devpriv->ps_BoardInfo->pc_EepromChip == NULL)
2936 || (strcmp(devpriv->ps_BoardInfo->pc_EepromChip,
2937 ADDIDATA_9054) != 0)) {
2938 if (devpriv->allocated) {
2939 i_pci_card_free(devpriv->amcc);
2940 }
2941
2942 if (devpriv->ul_DmaBufferVirtual[0]) {
2943 free_pages((unsigned long)devpriv->
2944 ul_DmaBufferVirtual[0],
2945 devpriv->ui_DmaBufferPages[0]);
2946 }
2947
2948 if (devpriv->ul_DmaBufferVirtual[1]) {
2949 free_pages((unsigned long)devpriv->
2950 ul_DmaBufferVirtual[1],
2951 devpriv->ui_DmaBufferPages[1]);
2952 }
2953 } else {
2f78c642 2954 iounmap(devpriv->dw_AiBase);
c995fe94
ADG
2955
2956 if (devpriv->allocated) {
2957 i_pci_card_free(devpriv->amcc);
2958 }
2959 }
2960
2961 if (pci_list_builded) {
2696fb57 2962 /* v_pci_card_list_cleanup(PCI_VENDOR_ID_AMCC); */
c995fe94
ADG
2963 v_pci_card_list_cleanup(this_board->i_VendorId);
2964 pci_list_builded = 0;
2965 }
2966 }
2967
2968 return 0;
2969}
2970
2971/*
2972+----------------------------------------------------------------------------+
71b5f4f1 2973| Function name : static int i_ADDI_Reset(struct comedi_device *dev) |
c995fe94
ADG
2974| |
2975+----------------------------------------------------------------------------+
2976| Task : Disables all interrupts, Resets digital output to low, |
2977| Set all analog output to low |
2978| |
2979+----------------------------------------------------------------------------+
71b5f4f1 2980| Input Parameters : struct comedi_device *dev |
c995fe94
ADG
2981| |
2982| |
2983+----------------------------------------------------------------------------+
2984| Return Value : 0 |
2985| |
2986+----------------------------------------------------------------------------+
2987*/
2988
da91b269 2989static int i_ADDI_Reset(struct comedi_device *dev)
c995fe94
ADG
2990{
2991
2992 this_board->i_hwdrv_Reset(dev);
2993 return 0;
2994}
2995
2696fb57 2996/* Interrupt function */
c995fe94
ADG
2997/*
2998+----------------------------------------------------------------------------+
2999| Function name : |
70265d24 3000|static void v_ADDI_Interrupt(int irq, void *d) |
c995fe94
ADG
3001| |
3002+----------------------------------------------------------------------------+
3003| Task : Registerd interrupt routine |
3004| |
3005+----------------------------------------------------------------------------+
3006| Input Parameters : int irq |
3007| |
3008| |
3009+----------------------------------------------------------------------------+
3010| Return Value : |
3011| |
3012+----------------------------------------------------------------------------+
3013*/
3014
70265d24 3015static irqreturn_t v_ADDI_Interrupt(int irq, void *d)
c995fe94 3016{
71b5f4f1 3017 struct comedi_device *dev = d;
c995fe94
ADG
3018 this_board->v_hwdrv_Interrupt(irq, d);
3019 return IRQ_RETVAL(1);
3020}
3021
2696fb57 3022/* EEPROM Read Function */
c995fe94
ADG
3023/*
3024+----------------------------------------------------------------------------+
3025| Function name : |
34c43922 3026|INT i_ADDIDATA_InsnReadEeprom(struct comedi_device *dev,struct comedi_subdevice *s,
90035c08 3027 struct comedi_insn *insn,unsigned int *data)
c995fe94
ADG
3028| |
3029+----------------------------------------------------------------------------+
3030| Task : Read 256 words from EEPROM |
3031| |
3032+----------------------------------------------------------------------------+
34c43922 3033| Input Parameters :(struct comedi_device *dev,struct comedi_subdevice *s,
90035c08 3034 struct comedi_insn *insn,unsigned int *data) |
c995fe94
ADG
3035| |
3036| |
3037+----------------------------------------------------------------------------+
3038| Return Value : |
3039| |
3040+----------------------------------------------------------------------------+
3041*/
3042
da91b269
BP
3043static int i_ADDIDATA_InsnReadEeprom(struct comedi_device *dev, struct comedi_subdevice *s,
3044 struct comedi_insn *insn, unsigned int *data)
c995fe94 3045{
babf0ede
BP
3046 unsigned short w_Data;
3047 unsigned short w_Address;
2696fb57 3048 w_Address = CR_CHAN(insn->chanspec); /* address to be read as 0,1,2,3...255 */
c995fe94
ADG
3049
3050 w_Data = w_EepromReadWord(devpriv->i_IobaseAmcc,
3051 this_board->pc_EepromChip, 0x100 + (2 * w_Address));
3052 data[0] = w_Data;
2696fb57 3053 /* multiplied by 2 bcozinput will be like 0,1,2...255 */
c995fe94
ADG
3054 return insn->n;
3055
3056}