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