Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
[pandora-kernel.git] / drivers / staging / comedi / drivers / addi-data / addi_common.c
1 /**
2 @verbatim
3
4 Copyright (C) 2004,2005  ADDI-DATA GmbH for the source code of this module.
5
6         ADDI-DATA GmbH
7         Dieselstrasse 3
8         D-77833 Ottersweier
9         Tel: +19(0)7223/9493-0
10         Fax: +49(0)7223/9493-92
11         http://www.addi-data-com
12         info@addi-data.com
13
14 This 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
16 This 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
18 You 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
20 You should also find the complete GPL in the COPYING file accompanying this source code.
21
22 @endverbatim
23 */
24 /*
25
26   +-----------------------------------------------------------------------+
27   | (C) ADDI-DATA GmbH          Dieselstrasse 3      D-77833 Ottersweier  |
28   +-----------------------------------------------------------------------+
29   | Tel : +49 (0) 7223/9493-0     | email    : info@addi-data.com         |
30   | Fax : +49 (0) 7223/9493-92    | Internet : http://www.addi-data.com   |
31   +-----------------------------------------------------------------------+
32   | Project   : ADDI DATA         | Compiler : GCC                        |
33   | Modulname : addi_common.c     | Version  : 2.96                       |
34   +-------------------------------+---------------------------------------+
35   | Author    :           | Date     :                                    |
36   +-----------------------------------------------------------------------+
37   | Description : ADDI COMMON Main Module                                 |
38   +-----------------------------------------------------------------------+
39   | CONFIG OPTIONS                                                        |
40   |     option[0] - PCI bus number - if bus number and slot number are 0, |
41   |                              then driver search for first unused card |
42   |     option[1] - PCI slot number                                       |
43   |                                                                       |
44   |     option[2] = 0  - DMA ENABLE                                       |
45   |               = 1  - DMA DISABLE                                      |
46   +----------+-----------+------------------------------------------------+
47 */
48
49 #include <linux/kernel.h>
50 #include <linux/module.h>
51 #include <linux/sched.h>
52 #include <linux/mm.h>
53 #include <linux/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>
60 #include <linux/gfp.h>
61 #include "../../comedidev.h"
62 #include <asm/io.h>
63 #if defined(CONFIG_APCI_1710) || defined(CONFIG_APCI_3200) || defined(CONFIG_APCI_3300)
64 #include <asm/i387.h>
65 #endif
66 #include "../comedi_fc.h"
67
68 #include "addi_common.h"
69 #include "addi_amcc_s5933.h"
70
71 #ifndef ADDIDATA_DRIVER_NAME
72 #define ADDIDATA_DRIVER_NAME    "addi_common"
73 #endif
74
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"); */
78
79 #define devpriv ((struct addi_private *)dev->private)
80 #define this_board ((struct addi_board *)dev->board_ptr)
81
82 #if defined(CONFIG_APCI_1710) || defined(CONFIG_APCI_3200) || defined(CONFIG_APCI_3300)
83 /* BYTE b_SaveFPUReg [94]; */
84
85 void fpu_begin(void)
86 {
87         /* asm ("fstenv b_SaveFPUReg"); */
88         kernel_fpu_begin();
89 }
90
91 void fpu_end(void)
92 {
93         /*  asm ("frstor b_SaveFPUReg"); */
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
146 static 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
224 MODULE_DEVICE_TABLE(pci, addi_apci_tbl);
225
226 static const struct addi_board boardtypes[] = {
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,
300                         NULL,
301                         NULL,
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
908         /* Begin JK     .20.10.2004 = APCI-3300 integration */
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
2532 #define n_boardtypes (sizeof(boardtypes)/sizeof(struct addi_board))
2533
2534 static struct comedi_driver driver_addi = {
2535         .driver_name = ADDIDATA_DRIVER_NAME,
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),
2542 };
2543
2544 COMEDI_PCI_INITCLEANUP(driver_addi, addi_apci_tbl);
2545
2546 /*
2547 +----------------------------------------------------------------------------+
2548 | Function name     :static int i_ADDI_Attach(struct comedi_device *dev,            |
2549 |                                                                               struct comedi_devconfig *it)        |
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 +----------------------------------------------------------------------------+
2557 | Input Parameters  :struct comedi_device *dev                                                                           |
2558 |                    struct comedi_devconfig *it                                                                         |
2559 |                                                                                                |
2560 +----------------------------------------------------------------------------+
2561 | Return Value      :  0                                                                     |
2562 |                                                                                                                            |
2563 +----------------------------------------------------------------------------+
2564 */
2565
2566 static int i_ADDI_Attach(struct comedi_device *dev, struct comedi_devconfig *it)
2567 {
2568         struct comedi_subdevice *s;
2569         int ret, pages, i, n_subdevices;
2570         unsigned int dw_Dummy;
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
2578         ret = alloc_private(dev, sizeof(struct addi_private));
2579         if (ret < 0)
2580                 return -ENOMEM;
2581
2582         if (!pci_list_builded) {
2583                 v_pci_card_list_init(this_board->i_VendorId, 1);        /* 1 for displaying the list.. */
2584                 pci_list_builded = 1;
2585         }
2586         /* printk("comedi%d: "ADDIDATA_DRIVER_NAME": board=%s",dev->minor,this_board->pc_DriverName); */
2587
2588         if ((this_board->i_Dma) && (it->options[2] == 0)) {
2589                 i_Dma = 1;
2590         }
2591
2592         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)
2598                 return -EIO;
2599
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) {
2622                         dev->iobase = (unsigned long)iobase_main;       /*  DAQ base address... */
2623                 } else {
2624                         dev->iobase = (unsigned long)iobase_a;  /*  DAQ base address... */
2625                 }
2626
2627                 dev->board_name = this_board->pc_DriverName;
2628                 devpriv->amcc = card;
2629                 devpriv->iobase = (int) dev->iobase;
2630                 devpriv->i_IobaseAmcc = (int) iobase_a; /* AMCC base address... */
2631                 devpriv->i_IobaseAddon = (int) iobase_addon;    /* ADD ON base address.... */
2632                 devpriv->i_IobaseReserved = (int) iobase_reserved;
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;
2638                 devpriv->iobase = (int) io_addr[2];
2639                 devpriv->ps_BoardInfo = this_board;
2640                 devpriv->i_IobaseReserved = (int) io_addr[3];
2641                 printk("\nioremap begin");
2642                 devpriv->dw_AiBase = ioremap(io_addr[3],
2643                                              this_board->i_IorangeBase3);
2644                 printk("\nioremap end");
2645         }
2646
2647         /* ## */
2648
2649         if (irq > 0) {
2650                 if (request_irq(irq, v_ADDI_Interrupt, IRQF_SHARED,
2651                                 this_board->pc_DriverName, dev) < 0) {
2652                         printk(", unable to allocate IRQ %u, DISABLING IT",
2653                                 irq);
2654                         irq = 0;        /* Can't use IRQ */
2655                 } else {
2656                         printk("\nirq=%u", irq);
2657                 }
2658         } else {
2659                 printk(", IRQ disabled");
2660         }
2661
2662         printk("\nOption %d %d %d\n", it->options[0], it->options[1],
2663                 it->options[2]);
2664         dev->irq = irq;
2665
2666         /*  Read eepeom and fill addi_board Structure */
2667
2668         if (this_board->i_PCIEeprom) {
2669                 printk("\nPCI Eeprom used");
2670                 if (!(strcmp(this_board->pc_EepromChip, "S5920"))) {
2671                         /*  Set 3 wait stait */
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                         }
2677                         /*  Enable the interrupt for the controler */
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) {
2698                         /*  alloc DMA buffers */
2699                         devpriv->b_DmaDoubleBuffer = 0;
2700                         for (i = 0; i < 2; i++) {
2701                                 for (pages = 4; pages >= 0; pages--) {
2702                                         devpriv->ul_DmaBufferVirtual[i] =
2703                                                 (void *) __get_free_pages(GFP_KERNEL, pages);
2704
2705                                         if (devpriv->ul_DmaBufferVirtual[i])
2706                                                 break;
2707                                 }
2708                                 if (devpriv->ul_DmaBufferVirtual[i]) {
2709                                         devpriv->ui_DmaBufferPages[i] = pages;
2710                                         devpriv->ui_DmaBufferSize[i] =
2711                                                 PAGE_SIZE * pages;
2712                                         devpriv->ui_DmaBufferSamples[i] =
2713                                                 devpriv->
2714                                                 ui_DmaBufferSize[i] >> 1;
2715                                         devpriv->ul_DmaBufferHw[i] =
2716                                                 virt_to_bus((void *)devpriv->
2717                                                 ul_DmaBufferVirtual[i]);
2718                                 }
2719                         }
2720                         if (!devpriv->ul_DmaBufferVirtual[0]) {
2721                                 printk
2722                                         (", Can't allocate DMA buffer, DMA disabled!");
2723                                 devpriv->us_UseDma = ADDI_DISABLE;
2724                         }
2725
2726                         if (devpriv->ul_DmaBufferVirtual[1]) {
2727                                 devpriv->b_DmaDoubleBuffer = 1;
2728                         }
2729                 }
2730
2731                 if ((devpriv->us_UseDma == ADDI_ENABLE)) {
2732                         printk("\nDMA ENABLED\n");
2733                 } else {
2734                         printk("\nDMA DISABLED\n");
2735                 }
2736         }
2737
2738         if (!strcmp(this_board->pc_DriverName, "apci1710")) {
2739 #ifdef CONFIG_APCI_1710
2740                 i_ADDI_AttachPCI1710(dev);
2741
2742                 /*  save base address */
2743                 devpriv->s_BoardInfos.ui_Address = io_addr[2];
2744 #endif
2745         } else {
2746                 /* Update-0.7.57->0.7.68dev->n_subdevices = 7; */
2747                 n_subdevices = 7;
2748                 ret = alloc_subdevices(dev, n_subdevices);
2749                 if (ret < 0)
2750                         return ret;
2751
2752                 /*  Allocate and Initialise AI Subdevice Structures */
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 =
2759                                 SDF_READABLE | SDF_COMMON | SDF_GROUND
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
2790                 /*  Allocate and Initialise AO Subdevice Structures */
2791                 s = dev->subdevices + 1;
2792                 if (this_board->i_NbrAoChannel) {
2793                         s->type = COMEDI_SUBD_AO;
2794                         s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
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                 }
2806                 /*  Allocate and Initialise DI Subdevice Structures */
2807                 s = dev->subdevices + 2;
2808                 if (this_board->i_NbrDiChannel) {
2809                         s->type = COMEDI_SUBD_DI;
2810                         s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_COMMON;
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                 }
2825                 /*  Allocate and Initialise DO Subdevice Structures */
2826                 s = dev->subdevices + 3;
2827                 if (this_board->i_NbrDoChannel) {
2828                         s->type = COMEDI_SUBD_DO;
2829                         s->subdev_flags =
2830                                 SDF_READABLE | SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
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
2837                         s->insn_config = this_board->i_hwdrv_InsnConfigDigitalOutput;   /* for digital output memory.. */
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
2848                 /*  Allocate and Initialise Timer Subdevice Structures */
2849                 s = dev->subdevices + 4;
2850                 if (this_board->i_Timer) {
2851                         s->type = COMEDI_SUBD_TIMER;
2852                         s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
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
2866                 /*  Allocate and Initialise TTL */
2867                 s = dev->subdevices + 5;
2868                 if (this_board->i_NbrTTLChannel) {
2869                         s->type = COMEDI_SUBD_TTLIO;
2870                         s->subdev_flags =
2871                                 SDF_WRITEABLE | SDF_READABLE | SDF_GROUND | SDF_COMMON;
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 +----------------------------------------------------------------------------+
2906 | Function name     : static int i_ADDI_Detach(struct comedi_device *dev)           |
2907 |                                                                                                                |
2908 |                                                                                                |
2909 +----------------------------------------------------------------------------+
2910 | Task              : Deallocates resources of the addi_common driver        |
2911 |                         Free the DMA buffers, unregister irq.                              |
2912 |                                                                                                                |
2913 +----------------------------------------------------------------------------+
2914 | Input Parameters  : struct comedi_device *dev                                                                  |
2915 |                                                                                                                                |
2916 |                                                                                                |
2917 +----------------------------------------------------------------------------+
2918 | Return Value      : 0                                                                      |
2919 |                                                                                                                            |
2920 +----------------------------------------------------------------------------+
2921 */
2922
2923 static int i_ADDI_Detach(struct comedi_device *dev)
2924 {
2925
2926         if (dev->private) {
2927                 if (devpriv->b_ValidDriver) {
2928                         i_ADDI_Reset(dev);
2929                 }
2930
2931                 if (dev->irq) {
2932                         free_irq(dev->irq, dev);
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 {
2954                         iounmap(devpriv->dw_AiBase);
2955
2956                         if (devpriv->allocated) {
2957                                 i_pci_card_free(devpriv->amcc);
2958                         }
2959                 }
2960
2961                 if (pci_list_builded) {
2962                         /* v_pci_card_list_cleanup(PCI_VENDOR_ID_AMCC); */
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 +----------------------------------------------------------------------------+
2973 | Function name     : static int i_ADDI_Reset(struct comedi_device *dev)                         |
2974 |                                                                                                                |
2975 +----------------------------------------------------------------------------+
2976 | Task              : Disables all interrupts, Resets digital output to low, |
2977 |                               Set all analog output to low                                             |
2978 |                                                                                                                |
2979 +----------------------------------------------------------------------------+
2980 | Input Parameters  : struct comedi_device *dev                                                                  |
2981 |                                                                                                                                |
2982 |                                                                                                |
2983 +----------------------------------------------------------------------------+
2984 | Return Value      : 0                                                                          |
2985 |                                                                                                                            |
2986 +----------------------------------------------------------------------------+
2987 */
2988
2989 static int i_ADDI_Reset(struct comedi_device *dev)
2990 {
2991
2992         this_board->i_hwdrv_Reset(dev);
2993         return 0;
2994 }
2995
2996 /* Interrupt function */
2997 /*
2998 +----------------------------------------------------------------------------+
2999 | Function name     :                                                        |
3000 |static void v_ADDI_Interrupt(int irq, void *d)                 |
3001 |                                                                                                                |
3002 +----------------------------------------------------------------------------+
3003 | Task              : Registerd interrupt routine                                                    |
3004 |                                                                                                                |
3005 +----------------------------------------------------------------------------+
3006 | Input Parameters  :   int irq                                                                                          |
3007 |                                                                                                                                |
3008 |                                                                                                |
3009 +----------------------------------------------------------------------------+
3010 | Return Value      :                                                                            |
3011 |                                                                                                                            |
3012 +----------------------------------------------------------------------------+
3013 */
3014
3015 static irqreturn_t v_ADDI_Interrupt(int irq, void *d)
3016 {
3017         struct comedi_device *dev = d;
3018         this_board->v_hwdrv_Interrupt(irq, d);
3019         return IRQ_RETVAL(1);
3020 }
3021
3022 /* EEPROM Read Function */
3023 /*
3024 +----------------------------------------------------------------------------+
3025 | Function name     :                                                        |
3026 |INT i_ADDIDATA_InsnReadEeprom(struct comedi_device *dev,struct comedi_subdevice *s,
3027                                                         struct comedi_insn *insn,unsigned int *data)
3028 |                                                                                                                |
3029 +----------------------------------------------------------------------------+
3030 | Task              : Read 256 words from EEPROM                                             |
3031 |                                                                                                                |
3032 +----------------------------------------------------------------------------+
3033 | Input Parameters  :(struct comedi_device *dev,struct comedi_subdevice *s,
3034                         struct comedi_insn *insn,unsigned int *data)                                             |
3035 |                                                                                                                                |
3036 |                                                                                                |
3037 +----------------------------------------------------------------------------+
3038 | Return Value      :                                                                            |
3039 |                                                                                                                            |
3040 +----------------------------------------------------------------------------+
3041 */
3042
3043 static int i_ADDIDATA_InsnReadEeprom(struct comedi_device *dev, struct comedi_subdevice *s,
3044         struct comedi_insn *insn, unsigned int *data)
3045 {
3046         unsigned short w_Data;
3047         unsigned short w_Address;
3048         w_Address = CR_CHAN(insn->chanspec);    /*  address to be read as 0,1,2,3...255 */
3049
3050         w_Data = w_EepromReadWord(devpriv->i_IobaseAmcc,
3051                 this_board->pc_EepromChip, 0x100 + (2 * w_Address));
3052         data[0] = w_Data;
3053         /* multiplied by 2 bcozinput will be like 0,1,2...255 */
3054         return insn->n;
3055
3056 }