![]() |
RTXI 1.3
|
00001 00024 /* 00025 00026 +-----------------------------------------------------------------------+ 00027 | (C) ADDI-DATA GmbH Dieselstrasse 3 D-77833 Ottersweier | 00028 +-----------------------------------------------------------------------+ 00029 | Tel : +49 (0) 7223/9493-0 | email : info@addi-data.com | 00030 | Fax : +49 (0) 7223/9493-92 | Internet : http://www.addi-data.com | 00031 +-----------------------------------------------------------------------+ 00032 | Project : ADDI DATA | Compiler : GCC | 00033 | Modulname : addi_common.c | Version : 2.96 | 00034 +-------------------------------+---------------------------------------+ 00035 | Author : | Date : | 00036 +-----------------------------------------------------------------------+ 00037 | Description : ADDI COMMON Main Module | 00038 +-----------------------------------------------------------------------+ 00039 | CONFIG OPTIONS | 00040 | option[0] - PCI bus number - if bus number and slot number are 0, | 00041 | then driver search for first unused card | 00042 | option[1] - PCI slot number | 00043 | | 00044 | option[2] = 0 - DMA ENABLE | 00045 | = 1 - DMA DISABLE | 00046 +----------+-----------+------------------------------------------------+ 00047 */ 00048 00049 #include<linux/kernel.h> 00050 #include<linux/module.h> 00051 #include<linux/sched.h> 00052 #include<linux/mm.h> 00053 #include<linux/slab.h> 00054 #include<linux/errno.h> 00055 #include<linux/ioport.h> 00056 #include<linux/delay.h> 00057 #include<linux/interrupt.h> 00058 #include<linux/timex.h> 00059 #include<linux/timer.h> 00060 #include<linux/pci.h> 00061 #include<linux/comedidev.h> 00062 #include<asm/io.h> 00063 #if defined(CONFIG_APCI_1710) || defined(CONFIG_APCI_3200) || defined(CONFIG_APCI_3300) 00064 #include<asm/i387.h> 00065 #endif 00066 #include "../comedi_fc.h" 00067 00068 #include "addi_common.h" 00069 #include "addi_amcc_s5933.h" 00070 00071 //Update-0.7.57->0.7.68MODULE_AUTHOR("ADDI-DATA GmbH <info@addi-data.com>"); 00072 //Update-0.7.57->0.7.68MODULE_DESCRIPTION("Comedi ADDI-DATA module"); 00073 //Update-0.7.57->0.7.68MODULE_LICENSE("GPL"); 00074 00075 #define devpriv ((addi_private *)dev->private) 00076 #define this_board ((boardtype *)dev->board_ptr) 00077 00078 #if defined(CONFIG_APCI_1710) || defined(CONFIG_APCI_3200) || defined(CONFIG_APCI_3300) 00079 //BYTE b_SaveFPUReg [94]; 00080 00081 void fpu_begin(void) 00082 { 00083 //asm ("fstenv b_SaveFPUReg"); 00084 kernel_fpu_begin(); 00085 } 00086 00087 void fpu_end(void) 00088 { 00089 // asm ("frstor b_SaveFPUReg"); 00090 kernel_fpu_end(); 00091 } 00092 #endif 00093 00094 #include "addi_eeprom.c" 00095 #if (defined (CONFIG_APCI_3120) || defined (CONFIG_APCI_3001)) 00096 #include "hwdrv_apci3120.c" 00097 #endif 00098 #ifdef CONFIG_APCI_1032 00099 #include "hwdrv_apci1032.c" 00100 #endif 00101 #ifdef CONFIG_APCI_1516 00102 #include "hwdrv_apci1516.c" 00103 #endif 00104 #ifdef CONFIG_APCI_2016 00105 #include "hwdrv_apci2016.c" 00106 #endif 00107 #ifdef CONFIG_APCI_2032 00108 #include "hwdrv_apci2032.c" 00109 #endif 00110 #ifdef CONFIG_APCI_2200 00111 #include "hwdrv_apci2200.c" 00112 #endif 00113 #ifdef CONFIG_APCI_1564 00114 #include "hwdrv_apci1564.c" 00115 #endif 00116 #ifdef CONFIG_APCI_1500 00117 #include "hwdrv_apci1500.c" 00118 #endif 00119 #ifdef CONFIG_APCI_3501 00120 #include "hwdrv_apci3501.c" 00121 #endif 00122 #ifdef CONFIG_APCI_035 00123 #include "hwdrv_apci035.c" 00124 #endif 00125 #if (defined (CONFIG_APCI_3200) || defined (CONFIG_APCI_3300)) 00126 #include "hwdrv_apci3200.c" 00127 #endif 00128 #ifdef CONFIG_APCI_1710 00129 #include "hwdrv_APCI1710.c" 00130 #endif 00131 #ifdef CONFIG_APCI_16XX 00132 #include "hwdrv_apci16xx.c" 00133 #endif 00134 #ifdef CONFIG_APCI_3XXX 00135 #include "hwdrv_apci3xxx.c" 00136 #endif 00137 00138 #ifndef COMEDI_SUBD_TTLIO 00139 #define COMEDI_SUBD_TTLIO 11 /* Digital Input Output But TTL */ 00140 #endif 00141 00142 static DEFINE_PCI_DEVICE_TABLE(addi_apci_tbl) = { 00143 #ifdef CONFIG_APCI_3120 00144 {APCI3120_BOARD_VENDOR_ID, 0x818D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00145 #endif 00146 #ifdef CONFIG_APCI_1032 00147 {APCI1032_BOARD_VENDOR_ID, 0x1003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00148 #endif 00149 #ifdef CONFIG_APCI_1516 00150 {APCI1516_BOARD_VENDOR_ID, 0x1001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00151 #endif 00152 #ifdef CONFIG_APCI_2016 00153 {APCI2016_BOARD_VENDOR_ID, 0x1002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00154 #endif 00155 #ifdef CONFIG_APCI_2032 00156 {APCI2032_BOARD_VENDOR_ID, 0x1004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00157 #endif 00158 #ifdef CONFIG_APCI_2200 00159 {APCI2200_BOARD_VENDOR_ID, 0x1005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00160 #endif 00161 #ifdef CONFIG_APCI_1564 00162 {APCI1564_BOARD_VENDOR_ID, 0x1006, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00163 #endif 00164 #ifdef CONFIG_APCI_1500 00165 {APCI1500_BOARD_VENDOR_ID, 0x80fc, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00166 #endif 00167 #ifdef CONFIG_APCI_3001 00168 {APCI3120_BOARD_VENDOR_ID, 0x828D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00169 #endif 00170 #ifdef CONFIG_APCI_3501 00171 {APCI3501_BOARD_VENDOR_ID, 0x3001, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00172 #endif 00173 #ifdef CONFIG_APCI_035 00174 {APCI035_BOARD_VENDOR_ID, 0x0300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00175 #endif 00176 #ifdef CONFIG_APCI_3200 00177 {APCI3200_BOARD_VENDOR_ID, 0x3000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00178 #endif 00179 #ifdef CONFIG_APCI_3300 00180 {APCI3200_BOARD_VENDOR_ID, 0x3007, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00181 #endif 00182 #ifdef CONFIG_APCI_1710 00183 {APCI1710_BOARD_VENDOR_ID, APCI1710_BOARD_DEVICE_ID, 00184 PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00185 #endif 00186 #ifdef CONFIG_APCI_16XX 00187 {0x15B8, 0x1009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00188 {0x15B8, 0x100A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00189 #endif 00190 #ifdef CONFIG_APCI_3XXX 00191 {0x15B8, 0x3010, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00192 {0x15B8, 0x300F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00193 {0x15B8, 0x300E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00194 {0x15B8, 0x3013, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00195 {0x15B8, 0x3014, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00196 {0x15B8, 0x3015, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00197 {0x15B8, 0x3016, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00198 {0x15B8, 0x3017, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00199 {0x15B8, 0x3018, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00200 {0x15B8, 0x3019, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00201 {0x15B8, 0x301A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00202 {0x15B8, 0x301B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00203 {0x15B8, 0x301C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00204 {0x15B8, 0x301D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00205 {0x15B8, 0x301E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00206 {0x15B8, 0x301F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00207 {0x15B8, 0x3020, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00208 {0x15B8, 0x3021, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00209 {0x15B8, 0x3022, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00210 {0x15B8, 0x3023, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00211 {0x15B8, 0x300B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00212 {0x15B8, 0x3002, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00213 {0x15B8, 0x3003, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00214 {0x15B8, 0x3004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00215 {0x15B8, 0x3024, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, 00216 #endif 00217 {0} 00218 }; 00219 00220 MODULE_DEVICE_TABLE(pci, addi_apci_tbl); 00221 00222 static const boardtype boardtypes[] = { 00223 #ifdef CONFIG_APCI_3120 00224 {"apci3120", 00225 APCI3120_BOARD_VENDOR_ID, 00226 0x818D, 00227 AMCC_OP_REG_SIZE, 00228 APCI3120_ADDRESS_RANGE, 00229 8, 00230 0, 00231 ADDIDATA_NO_EEPROM, 00232 NULL, 00233 16, 00234 8, 00235 16, 00236 8, 00237 0xffff, 00238 0x3fff, 00239 &range_apci3120_ai, 00240 &range_apci3120_ao, 00241 4, 00242 4, 00243 0x0f, 00244 0, 00245 NULL, 00246 1, 00247 1, 00248 1, 00249 10000, 00250 100000, 00251 v_APCI3120_Interrupt, 00252 i_APCI3120_Reset, 00253 i_APCI3120_InsnConfigAnalogInput, 00254 i_APCI3120_InsnReadAnalogInput, 00255 NULL, 00256 NULL, 00257 i_APCI3120_CommandTestAnalogInput, 00258 i_APCI3120_CommandAnalogInput, 00259 i_APCI3120_StopCyclicAcquisition, 00260 NULL, 00261 i_APCI3120_InsnWriteAnalogOutput, 00262 NULL, 00263 NULL, 00264 i_APCI3120_InsnReadDigitalInput, 00265 NULL, 00266 i_APCI3120_InsnBitsDigitalInput, 00267 i_APCI3120_InsnConfigDigitalOutput, 00268 i_APCI3120_InsnWriteDigitalOutput, 00269 i_APCI3120_InsnBitsDigitalOutput, 00270 NULL, 00271 i_APCI3120_InsnConfigTimer, 00272 i_APCI3120_InsnWriteTimer, 00273 i_APCI3120_InsnReadTimer, 00274 NULL, 00275 NULL, 00276 NULL, 00277 NULL, 00278 NULL}, 00279 #endif 00280 #ifdef CONFIG_APCI_1032 00281 {"apci1032", 00282 APCI1032_BOARD_VENDOR_ID, 00283 0x1003, 00284 4, 00285 APCI1032_ADDRESS_RANGE, 00286 0, 00287 0, 00288 ADDIDATA_EEPROM, 00289 ADDIDATA_93C76, 00290 0, 00291 0, 00292 0, 00293 0, 00294 0, 00295 0, 00296 0, 00297 0, 00298 32, 00299 0, 00300 0, 00301 0, 00302 NULL, 00303 0, 00304 0, 00305 0, 00306 0, 00307 0, 00308 v_APCI1032_Interrupt, 00309 i_APCI1032_Reset, 00310 NULL, 00311 NULL, 00312 NULL, 00313 NULL, 00314 NULL, 00315 NULL, 00316 NULL, 00317 NULL, 00318 NULL, 00319 NULL, 00320 i_APCI1032_ConfigDigitalInput, 00321 i_APCI1032_Read1DigitalInput, 00322 NULL, 00323 i_APCI1032_ReadMoreDigitalInput, 00324 NULL, 00325 NULL, 00326 NULL, 00327 NULL, 00328 NULL, 00329 NULL, 00330 NULL, 00331 NULL, 00332 NULL, 00333 NULL, 00334 NULL, 00335 NULL}, 00336 #endif 00337 #ifdef CONFIG_APCI_1516 00338 {"apci1516", 00339 APCI1516_BOARD_VENDOR_ID, 00340 0x1001, 00341 128, 00342 APCI1516_ADDRESS_RANGE, 00343 32, 00344 0, 00345 ADDIDATA_EEPROM, 00346 ADDIDATA_S5920, 00347 0, 00348 0, 00349 0, 00350 0, 00351 0, 00352 0, 00353 NULL, 00354 NULL, 00355 8, 00356 8, 00357 0, 00358 0, 00359 NULL, 00360 0, 00361 1, 00362 0, 00363 0, 00364 0, 00365 NULL, 00366 i_APCI1516_Reset, 00367 NULL, NULL, 00368 NULL, 00369 NULL, 00370 NULL, 00371 NULL, 00372 NULL, 00373 NULL, 00374 NULL, 00375 NULL, 00376 NULL, 00377 i_APCI1516_Read1DigitalInput, 00378 NULL, 00379 i_APCI1516_ReadMoreDigitalInput, 00380 i_APCI1516_ConfigDigitalOutput, 00381 i_APCI1516_WriteDigitalOutput, 00382 i_APCI1516_ReadDigitalOutput, 00383 NULL, 00384 i_APCI1516_ConfigWatchdog, 00385 i_APCI1516_StartStopWriteWatchdog, 00386 i_APCI1516_ReadWatchdog, 00387 NULL, 00388 NULL, 00389 NULL, 00390 NULL, 00391 NULL}, 00392 #endif 00393 #ifdef CONFIG_APCI_2016 00394 {"apci2016", 00395 APCI2016_BOARD_VENDOR_ID, 00396 0x1002, 00397 128, 00398 APCI2016_ADDRESS_RANGE, 00399 32, 00400 0, 00401 ADDIDATA_EEPROM, 00402 ADDIDATA_S5920, 00403 0, 00404 0, 00405 0, 00406 0, 00407 0, 00408 0, 00409 NULL, 00410 NULL, 00411 0, 00412 16, 00413 0, 00414 0, 00415 NULL, 00416 0, 00417 1, 00418 0, 00419 0, 00420 0, 00421 NULL, 00422 i_APCI2016_Reset, 00423 NULL, 00424 NULL, 00425 NULL, 00426 NULL, 00427 NULL, 00428 NULL, 00429 NULL, 00430 NULL, 00431 NULL, 00432 NULL, 00433 NULL, 00434 NULL, 00435 NULL, 00436 NULL, 00437 i_APCI2016_ConfigDigitalOutput, 00438 i_APCI2016_WriteDigitalOutput, 00439 i_APCI2016_BitsDigitalOutput, 00440 NULL, 00441 i_APCI2016_ConfigWatchdog, 00442 i_APCI2016_StartStopWriteWatchdog, 00443 i_APCI2016_ReadWatchdog, 00444 NULL, 00445 NULL, 00446 NULL, 00447 NULL, 00448 NULL}, 00449 #endif 00450 #ifdef CONFIG_APCI_2032 00451 {"apci2032", 00452 APCI2032_BOARD_VENDOR_ID, 00453 0x1004, 00454 4, 00455 APCI2032_ADDRESS_RANGE, 00456 0, 00457 0, 00458 ADDIDATA_EEPROM, 00459 ADDIDATA_93C76, 00460 0, 00461 0, 00462 0, 00463 0, 00464 0, 00465 0, 00466 NULL, 00467 NULL, 00468 0, 00469 32, 00470 0xffffffff, 00471 0, 00472 NULL, 00473 0, 00474 1, 00475 0, 00476 0, 00477 0, 00478 v_APCI2032_Interrupt, 00479 i_APCI2032_Reset, 00480 NULL, NULL, 00481 NULL, 00482 NULL, 00483 NULL, 00484 NULL, 00485 NULL, 00486 NULL, 00487 NULL, 00488 NULL, 00489 NULL, 00490 NULL, 00491 NULL, 00492 NULL, 00493 i_APCI2032_ConfigDigitalOutput, 00494 i_APCI2032_WriteDigitalOutput, 00495 i_APCI2032_ReadDigitalOutput, 00496 i_APCI2032_ReadInterruptStatus, 00497 i_APCI2032_ConfigWatchdog, 00498 i_APCI2032_StartStopWriteWatchdog, 00499 i_APCI2032_ReadWatchdog, 00500 NULL, 00501 NULL, 00502 NULL, 00503 NULL, 00504 NULL}, 00505 #endif 00506 #ifdef CONFIG_APCI_2200 00507 {"apci2200", 00508 APCI2200_BOARD_VENDOR_ID, 00509 0x1005, 00510 4, 00511 APCI2200_ADDRESS_RANGE, 00512 0, 00513 0, 00514 ADDIDATA_EEPROM, 00515 ADDIDATA_93C76, 00516 0, 00517 0, 00518 0, 00519 0, 00520 0, 00521 0, 00522 NULL, 00523 NULL, 00524 8, 00525 16, 00526 0, 00527 0, 00528 NULL, 00529 0, 00530 1, 00531 0, 00532 0, 00533 0, 00534 NULL, 00535 i_APCI2200_Reset, 00536 NULL, NULL, 00537 NULL, 00538 NULL, 00539 NULL, 00540 NULL, 00541 NULL, 00542 NULL, 00543 NULL, 00544 NULL, 00545 NULL, 00546 i_APCI2200_Read1DigitalInput, 00547 NULL, 00548 i_APCI2200_ReadMoreDigitalInput, 00549 i_APCI2200_ConfigDigitalOutput, 00550 i_APCI2200_WriteDigitalOutput, 00551 i_APCI2200_ReadDigitalOutput, 00552 NULL, 00553 i_APCI2200_ConfigWatchdog, 00554 i_APCI2200_StartStopWriteWatchdog, 00555 i_APCI2200_ReadWatchdog, 00556 NULL, 00557 NULL, 00558 NULL, 00559 NULL, 00560 NULL}, 00561 #endif 00562 #ifdef CONFIG_APCI_1564 00563 {"apci1564", 00564 APCI1564_BOARD_VENDOR_ID, 00565 0x1006, 00566 128, 00567 APCI1564_ADDRESS_RANGE, 00568 0, 00569 0, 00570 ADDIDATA_EEPROM, 00571 ADDIDATA_93C76, 00572 0, 00573 0, 00574 0, 00575 0, 00576 0, 00577 0, 00578 NULL, 00579 NULL, 00580 32, 00581 32, 00582 0xffffffff, 00583 0, 00584 NULL, 00585 0, 00586 1, 00587 0, 00588 0, 00589 0, 00590 v_APCI1564_Interrupt, 00591 i_APCI1564_Reset, 00592 NULL, 00593 NULL, 00594 NULL, 00595 NULL, 00596 NULL, 00597 NULL, 00598 NULL, 00599 NULL, 00600 NULL, 00601 NULL, 00602 i_APCI1564_ConfigDigitalInput, 00603 i_APCI1564_Read1DigitalInput, 00604 NULL, 00605 i_APCI1564_ReadMoreDigitalInput, 00606 i_APCI1564_ConfigDigitalOutput, 00607 i_APCI1564_WriteDigitalOutput, 00608 i_APCI1564_ReadDigitalOutput, 00609 i_APCI1564_ReadInterruptStatus, 00610 i_APCI1564_ConfigTimerCounterWatchdog, 00611 i_APCI1564_StartStopWriteTimerCounterWatchdog, 00612 i_APCI1564_ReadTimerCounterWatchdog, 00613 NULL, 00614 NULL, 00615 NULL, 00616 NULL, 00617 NULL}, 00618 #endif 00619 #ifdef CONFIG_APCI_1500 00620 {"apci1500", 00621 APCI1500_BOARD_VENDOR_ID, 00622 0x80fc, 00623 128, 00624 APCI1500_ADDRESS_RANGE, 00625 4, 00626 0, 00627 ADDIDATA_NO_EEPROM, 00628 NULL, 00629 0, 00630 0, 00631 0, 00632 0, 00633 0, 00634 0, 00635 NULL, 00636 NULL, 00637 16, 00638 16, 00639 0xffff, 00640 0, 00641 NULL, 00642 0, 00643 1, 00644 0, 00645 0, 00646 0, 00647 v_APCI1500_Interrupt, 00648 i_APCI1500_Reset, 00649 NULL, 00650 NULL, 00651 NULL, 00652 NULL, 00653 NULL, 00654 NULL, 00655 NULL, 00656 NULL, 00657 NULL, 00658 NULL, 00659 i_APCI1500_ConfigDigitalInputEvent, 00660 i_APCI1500_Initialisation, 00661 i_APCI1500_StartStopInputEvent, 00662 i_APCI1500_ReadMoreDigitalInput, 00663 i_APCI1500_ConfigDigitalOutputErrorInterrupt, 00664 i_APCI1500_WriteDigitalOutput, 00665 i_APCI1500_ConfigureInterrupt, 00666 NULL, 00667 i_APCI1500_ConfigCounterTimerWatchdog, 00668 i_APCI1500_StartStopTriggerTimerCounterWatchdog, 00669 i_APCI1500_ReadInterruptMask, 00670 i_APCI1500_ReadCounterTimerWatchdog, 00671 NULL, 00672 NULL, 00673 NULL, 00674 NULL}, 00675 #endif 00676 #ifdef CONFIG_APCI_3001 00677 {"apci3001", 00678 APCI3120_BOARD_VENDOR_ID, 00679 0x828D, 00680 AMCC_OP_REG_SIZE, 00681 APCI3120_ADDRESS_RANGE, 00682 8, 00683 0, 00684 ADDIDATA_NO_EEPROM, 00685 NULL, 00686 16, 00687 8, 00688 16, 00689 0, 00690 0xfff, 00691 0, 00692 &range_apci3120_ai, 00693 NULL, 00694 4, 00695 4, 00696 0x0f, 00697 0, 00698 NULL, 00699 1, 00700 1, 00701 1, 00702 10000, 00703 100000, 00704 v_APCI3120_Interrupt, 00705 i_APCI3120_Reset, 00706 i_APCI3120_InsnConfigAnalogInput, 00707 i_APCI3120_InsnReadAnalogInput, 00708 NULL, 00709 NULL, 00710 i_APCI3120_CommandTestAnalogInput, 00711 i_APCI3120_CommandAnalogInput, 00712 i_APCI3120_StopCyclicAcquisition, 00713 NULL, 00714 NULL, 00715 NULL, 00716 NULL, 00717 i_APCI3120_InsnReadDigitalInput, 00718 NULL, 00719 i_APCI3120_InsnBitsDigitalInput, 00720 i_APCI3120_InsnConfigDigitalOutput, 00721 i_APCI3120_InsnWriteDigitalOutput, 00722 i_APCI3120_InsnBitsDigitalOutput, 00723 NULL, 00724 i_APCI3120_InsnConfigTimer, 00725 i_APCI3120_InsnWriteTimer, 00726 i_APCI3120_InsnReadTimer, 00727 NULL, 00728 NULL, 00729 NULL, 00730 NULL, 00731 NULL}, 00732 #endif 00733 #ifdef CONFIG_APCI_3501 00734 {"apci3501", 00735 APCI3501_BOARD_VENDOR_ID, 00736 0x3001, 00737 64, 00738 APCI3501_ADDRESS_RANGE, 00739 0, 00740 0, 00741 ADDIDATA_EEPROM, 00742 ADDIDATA_S5933, 00743 0, 00744 0, 00745 0, 00746 8, 00747 0, 00748 16383, 00749 NULL, 00750 &range_apci3501_ao, 00751 2, 00752 2, 00753 0x3, 00754 0, 00755 NULL, 00756 0, 00757 1, 00758 0, 00759 0, 00760 0, 00761 v_APCI3501_Interrupt, 00762 i_APCI3501_Reset, 00763 NULL, NULL, 00764 NULL, 00765 NULL, 00766 NULL, 00767 NULL, 00768 NULL, 00769 i_APCI3501_ConfigAnalogOutput, 00770 i_APCI3501_WriteAnalogOutput, 00771 NULL, 00772 NULL, 00773 NULL, 00774 NULL, 00775 i_APCI3501_ReadDigitalInput, 00776 i_APCI3501_ConfigDigitalOutput, 00777 i_APCI3501_WriteDigitalOutput, 00778 i_APCI3501_ReadDigitalOutput, 00779 NULL, 00780 i_APCI3501_ConfigTimerCounterWatchdog, 00781 i_APCI3501_StartStopWriteTimerCounterWatchdog, 00782 i_APCI3501_ReadTimerCounterWatchdog, 00783 NULL, 00784 NULL, 00785 NULL, 00786 NULL, 00787 NULL}, 00788 #endif 00789 #ifdef CONFIG_APCI_035 00790 {"apci035", 00791 APCI035_BOARD_VENDOR_ID, 00792 0x0300, 00793 127, 00794 APCI035_ADDRESS_RANGE, 00795 0, 00796 0, 00797 1, 00798 ADDIDATA_S5920, 00799 16, 00800 8, 00801 16, 00802 0, 00803 0xff, 00804 0, 00805 &range_apci035_ai, 00806 NULL, 00807 0, 00808 0, 00809 0, 00810 0, 00811 NULL, 00812 0, 00813 1, 00814 0, 00815 10000, 00816 100000, 00817 v_APCI035_Interrupt, 00818 i_APCI035_Reset, 00819 i_APCI035_ConfigAnalogInput, 00820 i_APCI035_ReadAnalogInput, 00821 NULL, 00822 NULL, 00823 NULL, 00824 NULL, 00825 NULL, 00826 NULL, 00827 NULL, 00828 NULL, 00829 NULL, 00830 NULL, 00831 NULL, 00832 NULL, 00833 NULL, 00834 NULL, 00835 NULL, 00836 NULL, 00837 i_APCI035_ConfigTimerWatchdog, 00838 i_APCI035_StartStopWriteTimerWatchdog, 00839 i_APCI035_ReadTimerWatchdog, 00840 NULL, 00841 NULL, 00842 NULL, 00843 NULL, 00844 NULL}, 00845 #endif 00846 #ifdef CONFIG_APCI_3200 00847 {"apci3200", 00848 APCI3200_BOARD_VENDOR_ID, 00849 0x3000, 00850 128, 00851 256, 00852 4, 00853 4, 00854 ADDIDATA_EEPROM, 00855 ADDIDATA_S5920, 00856 16, 00857 8, 00858 16, 00859 0, 00860 0x3ffff, 00861 0, 00862 &range_apci3200_ai, 00863 NULL, 00864 4, 00865 4, 00866 0, 00867 0, 00868 NULL, 00869 0, 00870 0, 00871 0, 00872 10000, 00873 100000, 00874 v_APCI3200_Interrupt, 00875 i_APCI3200_Reset, 00876 i_APCI3200_ConfigAnalogInput, 00877 i_APCI3200_ReadAnalogInput, 00878 i_APCI3200_InsnWriteReleaseAnalogInput, 00879 i_APCI3200_InsnBits_AnalogInput_Test, 00880 i_APCI3200_CommandTestAnalogInput, 00881 i_APCI3200_CommandAnalogInput, 00882 i_APCI3200_StopCyclicAcquisition, 00883 NULL, 00884 NULL, 00885 NULL, 00886 NULL, 00887 NULL, 00888 NULL, 00889 i_APCI3200_ReadDigitalInput, 00890 i_APCI3200_ConfigDigitalOutput, 00891 i_APCI3200_WriteDigitalOutput, 00892 i_APCI3200_ReadDigitalOutput, 00893 NULL, 00894 NULL, 00895 NULL, 00896 NULL, 00897 NULL, 00898 NULL, 00899 NULL, 00900 NULL, 00901 NULL}, 00902 #endif 00903 #ifdef CONFIG_APCI_3300 00904 //Begin JK 20.10.2004: APCI-3300 integration 00905 {"apci3300", 00906 APCI3200_BOARD_VENDOR_ID, 00907 0x3007, 00908 128, 00909 256, 00910 4, 00911 4, 00912 ADDIDATA_EEPROM, 00913 ADDIDATA_S5920, 00914 0, 00915 8, 00916 8, 00917 0, 00918 0x3ffff, 00919 0, 00920 &range_apci3300_ai, 00921 NULL, 00922 4, 00923 4, 00924 0, 00925 0, 00926 NULL, 00927 0, 00928 0, 00929 0, 00930 10000, 00931 100000, 00932 v_APCI3200_Interrupt, 00933 i_APCI3200_Reset, 00934 i_APCI3200_ConfigAnalogInput, 00935 i_APCI3200_ReadAnalogInput, 00936 i_APCI3200_InsnWriteReleaseAnalogInput, 00937 i_APCI3200_InsnBits_AnalogInput_Test, 00938 i_APCI3200_CommandTestAnalogInput, 00939 i_APCI3200_CommandAnalogInput, 00940 i_APCI3200_StopCyclicAcquisition, 00941 NULL, 00942 NULL, 00943 NULL, 00944 NULL, 00945 NULL, 00946 NULL, 00947 i_APCI3200_ReadDigitalInput, 00948 i_APCI3200_ConfigDigitalOutput, 00949 i_APCI3200_WriteDigitalOutput, 00950 i_APCI3200_ReadDigitalOutput, 00951 NULL, 00952 NULL, 00953 NULL, 00954 NULL, 00955 NULL, 00956 NULL, 00957 NULL, 00958 NULL, 00959 NULL}, 00960 #endif 00961 #ifdef CONFIG_APCI_1710 00962 {"apci1710", APCI1710_BOARD_VENDOR_ID, APCI1710_BOARD_DEVICE_ID, 00963 128, 00964 8, 00965 256, 00966 0, 00967 ADDIDATA_NO_EEPROM, 00968 NULL, 00969 0, 00970 0, 00971 0, 00972 0, 00973 0, 00974 0, 00975 NULL, 00976 NULL, 00977 0, 00978 0, 00979 0, 00980 0, 00981 NULL, 00982 0, 00983 0, 00984 0, 00985 0, 00986 0, 00987 v_APCI1710_Interrupt, 00988 i_APCI1710_Reset, 00989 NULL, 00990 NULL, 00991 NULL, 00992 NULL, 00993 NULL, 00994 NULL, 00995 NULL, 00996 NULL, 00997 NULL, 00998 NULL, 00999 NULL, 01000 NULL, 01001 NULL, 01002 NULL, 01003 NULL, 01004 NULL, 01005 NULL, 01006 NULL, 01007 NULL, 01008 NULL, 01009 NULL, 01010 NULL, 01011 NULL, 01012 NULL, 01013 NULL, 01014 NULL}, 01015 #endif 01016 #ifdef CONFIG_APCI_16XX 01017 {"apci1648", 01018 0x15B8, 01019 0x1009, 01020 128, 01021 0, 01022 0, 01023 0, 01024 ADDIDATA_NO_EEPROM, 01025 NULL, 01026 0, 01027 0, 01028 0, 01029 0, 01030 0, 01031 0, 01032 NULL, 01033 NULL, 01034 0, 01035 0, 01036 0, 01037 48, 01038 &range_apci16xx_ttl, 01039 0, 01040 0, 01041 0, 01042 0, 01043 0, 01044 NULL, 01045 i_APCI16XX_Reset, 01046 NULL, 01047 NULL, 01048 NULL, 01049 NULL, 01050 NULL, 01051 NULL, 01052 NULL, 01053 NULL, 01054 NULL, 01055 NULL, 01056 NULL, 01057 NULL, 01058 NULL, 01059 NULL, 01060 NULL, 01061 NULL, 01062 NULL, 01063 NULL, 01064 NULL, 01065 NULL, 01066 NULL, 01067 NULL, 01068 i_APCI16XX_InsnConfigInitTTLIO, 01069 i_APCI16XX_InsnBitsReadTTLIO, 01070 i_APCI16XX_InsnReadTTLIOAllPortValue, 01071 i_APCI16XX_InsnBitsWriteTTLIO}, 01072 01073 {"apci1696", 01074 0x15B8, 01075 0x100A, 01076 128, 01077 0, 01078 0, 01079 0, 01080 ADDIDATA_NO_EEPROM, 01081 NULL, 01082 0, 01083 0, 01084 0, 01085 0, 01086 0, 01087 0, 01088 NULL, 01089 NULL, 01090 0, 01091 0, 01092 0, 01093 96, 01094 &range_apci16xx_ttl, 01095 0, 01096 0, 01097 0, 01098 0, 01099 0, 01100 NULL, 01101 i_APCI16XX_Reset, 01102 NULL, 01103 NULL, 01104 NULL, 01105 NULL, 01106 NULL, 01107 NULL, 01108 NULL, 01109 NULL, 01110 NULL, 01111 NULL, 01112 NULL, 01113 NULL, 01114 NULL, 01115 NULL, 01116 NULL, 01117 NULL, 01118 NULL, 01119 NULL, 01120 NULL, 01121 NULL, 01122 NULL, 01123 NULL, 01124 i_APCI16XX_InsnConfigInitTTLIO, 01125 i_APCI16XX_InsnBitsReadTTLIO, 01126 i_APCI16XX_InsnReadTTLIOAllPortValue, 01127 i_APCI16XX_InsnBitsWriteTTLIO}, 01128 #endif 01129 #ifdef CONFIG_APCI_3XXX 01130 {"apci3000-16", 01131 0x15B8, 01132 0x3010, 01133 256, 01134 256, 01135 256, 01136 256, 01137 ADDIDATA_NO_EEPROM, 01138 ADDIDATA_9054, 01139 16, 01140 8, 01141 16, 01142 0, 01143 4095, 01144 0, 01145 &range_apci3XXX_ai, 01146 NULL, 01147 0, 01148 0, 01149 0, 01150 24, 01151 &range_apci3XXX_ttl, 01152 0, 01153 0, 01154 6, 01155 10000, 01156 0, 01157 v_APCI3XXX_Interrupt, 01158 i_APCI3XXX_Reset, 01159 i_APCI3XXX_InsnConfigAnalogInput, 01160 i_APCI3XXX_InsnReadAnalogInput, 01161 NULL, 01162 NULL, 01163 NULL, 01164 NULL, 01165 NULL, 01166 NULL, 01167 NULL, 01168 NULL, 01169 NULL, 01170 NULL, 01171 NULL, 01172 NULL, 01173 NULL, 01174 NULL, 01175 NULL, 01176 NULL, 01177 NULL, 01178 NULL, 01179 NULL, 01180 NULL, 01181 i_APCI3XXX_InsnConfigInitTTLIO, 01182 i_APCI3XXX_InsnBitsTTLIO, 01183 i_APCI3XXX_InsnReadTTLIO, 01184 i_APCI3XXX_InsnWriteTTLIO}, 01185 01186 {"apci3000-8", 01187 0x15B8, 01188 0x300F, 01189 256, 01190 256, 01191 256, 01192 256, 01193 ADDIDATA_NO_EEPROM, 01194 ADDIDATA_9054, 01195 8, 01196 4, 01197 8, 01198 0, 01199 4095, 01200 0, 01201 &range_apci3XXX_ai, 01202 NULL, 01203 0, 01204 0, 01205 0, 01206 24, 01207 &range_apci3XXX_ttl, 01208 0, 01209 0, 01210 6, 01211 10000, 01212 0, 01213 v_APCI3XXX_Interrupt, 01214 i_APCI3XXX_Reset, 01215 i_APCI3XXX_InsnConfigAnalogInput, 01216 i_APCI3XXX_InsnReadAnalogInput, 01217 NULL, 01218 NULL, 01219 NULL, 01220 NULL, 01221 NULL, 01222 NULL, 01223 NULL, 01224 NULL, 01225 NULL, 01226 NULL, 01227 NULL, 01228 NULL, 01229 NULL, 01230 NULL, 01231 NULL, 01232 NULL, 01233 NULL, 01234 NULL, 01235 NULL, 01236 NULL, 01237 i_APCI3XXX_InsnConfigInitTTLIO, 01238 i_APCI3XXX_InsnBitsTTLIO, 01239 i_APCI3XXX_InsnReadTTLIO, 01240 i_APCI3XXX_InsnWriteTTLIO}, 01241 01242 {"apci3000-4", 01243 0x15B8, 01244 0x300E, 01245 256, 01246 256, 01247 256, 01248 256, 01249 ADDIDATA_NO_EEPROM, 01250 ADDIDATA_9054, 01251 4, 01252 2, 01253 4, 01254 0, 01255 4095, 01256 0, 01257 &range_apci3XXX_ai, 01258 NULL, 01259 0, 01260 0, 01261 0, 01262 24, 01263 &range_apci3XXX_ttl, 01264 0, 01265 0, 01266 6, 01267 10000, 01268 0, 01269 v_APCI3XXX_Interrupt, 01270 i_APCI3XXX_Reset, 01271 i_APCI3XXX_InsnConfigAnalogInput, 01272 i_APCI3XXX_InsnReadAnalogInput, 01273 NULL, 01274 NULL, 01275 NULL, 01276 NULL, 01277 NULL, 01278 NULL, 01279 NULL, 01280 NULL, 01281 NULL, 01282 NULL, 01283 NULL, 01284 NULL, 01285 NULL, 01286 NULL, 01287 NULL, 01288 NULL, 01289 NULL, 01290 NULL, 01291 NULL, 01292 NULL, 01293 i_APCI3XXX_InsnConfigInitTTLIO, 01294 i_APCI3XXX_InsnBitsTTLIO, 01295 i_APCI3XXX_InsnReadTTLIO, 01296 i_APCI3XXX_InsnWriteTTLIO}, 01297 01298 {"apci3006-16", 01299 0x15B8, 01300 0x3013, 01301 256, 01302 256, 01303 256, 01304 256, 01305 ADDIDATA_NO_EEPROM, 01306 ADDIDATA_9054, 01307 16, 01308 8, 01309 16, 01310 0, 01311 65535, 01312 0, 01313 &range_apci3XXX_ai, 01314 NULL, 01315 0, 01316 0, 01317 0, 01318 24, 01319 &range_apci3XXX_ttl, 01320 0, 01321 0, 01322 6, 01323 10000, 01324 0, 01325 v_APCI3XXX_Interrupt, 01326 i_APCI3XXX_Reset, 01327 i_APCI3XXX_InsnConfigAnalogInput, 01328 i_APCI3XXX_InsnReadAnalogInput, 01329 NULL, 01330 NULL, 01331 NULL, 01332 NULL, 01333 NULL, 01334 NULL, 01335 NULL, 01336 NULL, 01337 NULL, 01338 NULL, 01339 NULL, 01340 NULL, 01341 NULL, 01342 NULL, 01343 NULL, 01344 NULL, 01345 NULL, 01346 NULL, 01347 NULL, 01348 NULL, 01349 i_APCI3XXX_InsnConfigInitTTLIO, 01350 i_APCI3XXX_InsnBitsTTLIO, 01351 i_APCI3XXX_InsnReadTTLIO, 01352 i_APCI3XXX_InsnWriteTTLIO}, 01353 01354 {"apci3006-8", 01355 0x15B8, 01356 0x3014, 01357 256, 01358 256, 01359 256, 01360 256, 01361 ADDIDATA_NO_EEPROM, 01362 ADDIDATA_9054, 01363 8, 01364 4, 01365 8, 01366 0, 01367 65535, 01368 0, 01369 &range_apci3XXX_ai, 01370 NULL, 01371 0, 01372 0, 01373 0, 01374 24, 01375 &range_apci3XXX_ttl, 01376 0, 01377 0, 01378 6, 01379 10000, 01380 0, 01381 v_APCI3XXX_Interrupt, 01382 i_APCI3XXX_Reset, 01383 i_APCI3XXX_InsnConfigAnalogInput, 01384 i_APCI3XXX_InsnReadAnalogInput, 01385 NULL, 01386 NULL, 01387 NULL, 01388 NULL, 01389 NULL, 01390 NULL, 01391 NULL, 01392 NULL, 01393 NULL, 01394 NULL, 01395 NULL, 01396 NULL, 01397 NULL, 01398 NULL, 01399 NULL, 01400 NULL, 01401 NULL, 01402 NULL, 01403 NULL, 01404 NULL, 01405 i_APCI3XXX_InsnConfigInitTTLIO, 01406 i_APCI3XXX_InsnBitsTTLIO, 01407 i_APCI3XXX_InsnReadTTLIO, 01408 i_APCI3XXX_InsnWriteTTLIO}, 01409 01410 {"apci3006-4", 01411 0x15B8, 01412 0x3015, 01413 256, 01414 256, 01415 256, 01416 256, 01417 ADDIDATA_NO_EEPROM, 01418 ADDIDATA_9054, 01419 4, 01420 2, 01421 4, 01422 0, 01423 65535, 01424 0, 01425 &range_apci3XXX_ai, 01426 NULL, 01427 0, 01428 0, 01429 0, 01430 24, 01431 &range_apci3XXX_ttl, 01432 0, 01433 0, 01434 6, 01435 10000, 01436 0, 01437 v_APCI3XXX_Interrupt, 01438 i_APCI3XXX_Reset, 01439 i_APCI3XXX_InsnConfigAnalogInput, 01440 i_APCI3XXX_InsnReadAnalogInput, 01441 NULL, 01442 NULL, 01443 NULL, 01444 NULL, 01445 NULL, 01446 NULL, 01447 NULL, 01448 NULL, 01449 NULL, 01450 NULL, 01451 NULL, 01452 NULL, 01453 NULL, 01454 NULL, 01455 NULL, 01456 NULL, 01457 NULL, 01458 NULL, 01459 NULL, 01460 NULL, 01461 i_APCI3XXX_InsnConfigInitTTLIO, 01462 i_APCI3XXX_InsnBitsTTLIO, 01463 i_APCI3XXX_InsnReadTTLIO, 01464 i_APCI3XXX_InsnWriteTTLIO}, 01465 01466 {"apci3010-16", 01467 0x15B8, 01468 0x3016, 01469 256, 01470 256, 01471 256, 01472 256, 01473 ADDIDATA_NO_EEPROM, 01474 ADDIDATA_9054, 01475 16, 01476 8, 01477 16, 01478 0, 01479 4095, 01480 0, 01481 &range_apci3XXX_ai, 01482 NULL, 01483 4, 01484 4, 01485 1, 01486 24, 01487 &range_apci3XXX_ttl, 01488 0, 01489 0, 01490 6, 01491 5000, 01492 0, 01493 v_APCI3XXX_Interrupt, 01494 i_APCI3XXX_Reset, 01495 i_APCI3XXX_InsnConfigAnalogInput, 01496 i_APCI3XXX_InsnReadAnalogInput, 01497 NULL, 01498 NULL, 01499 NULL, 01500 NULL, 01501 NULL, 01502 NULL, 01503 NULL, 01504 NULL, 01505 NULL, 01506 i_APCI3XXX_InsnReadDigitalInput, 01507 NULL, 01508 i_APCI3XXX_InsnBitsDigitalInput, 01509 NULL, 01510 i_APCI3XXX_InsnWriteDigitalOutput, 01511 i_APCI3XXX_InsnBitsDigitalOutput, 01512 i_APCI3XXX_InsnReadDigitalOutput, 01513 NULL, 01514 NULL, 01515 NULL, 01516 NULL, 01517 i_APCI3XXX_InsnConfigInitTTLIO, 01518 i_APCI3XXX_InsnBitsTTLIO, 01519 i_APCI3XXX_InsnReadTTLIO, 01520 i_APCI3XXX_InsnWriteTTLIO}, 01521 01522 {"apci3010-8", 01523 0x15B8, 01524 0x3017, 01525 256, 01526 256, 01527 256, 01528 256, 01529 ADDIDATA_NO_EEPROM, 01530 ADDIDATA_9054, 01531 8, 01532 4, 01533 8, 01534 0, 01535 4095, 01536 0, 01537 &range_apci3XXX_ai, 01538 NULL, 01539 4, 01540 4, 01541 1, 01542 24, 01543 &range_apci3XXX_ttl, 01544 0, 01545 0, 01546 6, 01547 5000, 01548 0, 01549 v_APCI3XXX_Interrupt, 01550 i_APCI3XXX_Reset, 01551 i_APCI3XXX_InsnConfigAnalogInput, 01552 i_APCI3XXX_InsnReadAnalogInput, 01553 NULL, 01554 NULL, 01555 NULL, 01556 NULL, 01557 NULL, 01558 NULL, 01559 NULL, 01560 NULL, 01561 NULL, 01562 i_APCI3XXX_InsnReadDigitalInput, 01563 NULL, 01564 i_APCI3XXX_InsnBitsDigitalInput, 01565 NULL, 01566 i_APCI3XXX_InsnWriteDigitalOutput, 01567 i_APCI3XXX_InsnBitsDigitalOutput, 01568 i_APCI3XXX_InsnReadDigitalOutput, 01569 NULL, 01570 NULL, 01571 NULL, 01572 NULL, 01573 i_APCI3XXX_InsnConfigInitTTLIO, 01574 i_APCI3XXX_InsnBitsTTLIO, 01575 i_APCI3XXX_InsnReadTTLIO, 01576 i_APCI3XXX_InsnWriteTTLIO}, 01577 01578 {"apci3010-4", 01579 0x15B8, 01580 0x3018, 01581 256, 01582 256, 01583 256, 01584 256, 01585 ADDIDATA_NO_EEPROM, 01586 ADDIDATA_9054, 01587 4, 01588 2, 01589 4, 01590 0, 01591 4095, 01592 0, 01593 &range_apci3XXX_ai, 01594 NULL, 01595 4, 01596 4, 01597 1, 01598 24, 01599 &range_apci3XXX_ttl, 01600 0, 01601 0, 01602 6, 01603 5000, 01604 0, 01605 v_APCI3XXX_Interrupt, 01606 i_APCI3XXX_Reset, 01607 i_APCI3XXX_InsnConfigAnalogInput, 01608 i_APCI3XXX_InsnReadAnalogInput, 01609 NULL, 01610 NULL, 01611 NULL, 01612 NULL, 01613 NULL, 01614 NULL, 01615 NULL, 01616 NULL, 01617 NULL, 01618 i_APCI3XXX_InsnReadDigitalInput, 01619 NULL, 01620 i_APCI3XXX_InsnBitsDigitalInput, 01621 NULL, 01622 i_APCI3XXX_InsnWriteDigitalOutput, 01623 i_APCI3XXX_InsnBitsDigitalOutput, 01624 i_APCI3XXX_InsnReadDigitalOutput, 01625 NULL, 01626 NULL, 01627 NULL, 01628 NULL, 01629 i_APCI3XXX_InsnConfigInitTTLIO, 01630 i_APCI3XXX_InsnBitsTTLIO, 01631 i_APCI3XXX_InsnReadTTLIO, 01632 i_APCI3XXX_InsnWriteTTLIO}, 01633 01634 {"apci3016-16", 01635 0x15B8, 01636 0x3019, 01637 256, 01638 256, 01639 256, 01640 256, 01641 ADDIDATA_NO_EEPROM, 01642 ADDIDATA_9054, 01643 16, 01644 8, 01645 16, 01646 0, 01647 65535, 01648 0, 01649 &range_apci3XXX_ai, 01650 NULL, 01651 4, 01652 4, 01653 1, 01654 24, 01655 &range_apci3XXX_ttl, 01656 0, 01657 0, 01658 6, 01659 5000, 01660 0, 01661 v_APCI3XXX_Interrupt, 01662 i_APCI3XXX_Reset, 01663 i_APCI3XXX_InsnConfigAnalogInput, 01664 i_APCI3XXX_InsnReadAnalogInput, 01665 NULL, 01666 NULL, 01667 NULL, 01668 NULL, 01669 NULL, 01670 NULL, 01671 NULL, 01672 NULL, 01673 NULL, 01674 i_APCI3XXX_InsnReadDigitalInput, 01675 NULL, 01676 i_APCI3XXX_InsnBitsDigitalInput, 01677 NULL, 01678 i_APCI3XXX_InsnWriteDigitalOutput, 01679 i_APCI3XXX_InsnBitsDigitalOutput, 01680 i_APCI3XXX_InsnReadDigitalOutput, 01681 NULL, 01682 NULL, 01683 NULL, 01684 NULL, 01685 i_APCI3XXX_InsnConfigInitTTLIO, 01686 i_APCI3XXX_InsnBitsTTLIO, 01687 i_APCI3XXX_InsnReadTTLIO, 01688 i_APCI3XXX_InsnWriteTTLIO}, 01689 01690 {"apci3016-8", 01691 0x15B8, 01692 0x301A, 01693 256, 01694 256, 01695 256, 01696 256, 01697 ADDIDATA_NO_EEPROM, 01698 ADDIDATA_9054, 01699 8, 01700 4, 01701 8, 01702 0, 01703 65535, 01704 0, 01705 &range_apci3XXX_ai, 01706 NULL, 01707 4, 01708 4, 01709 1, 01710 24, 01711 &range_apci3XXX_ttl, 01712 0, 01713 0, 01714 6, 01715 5000, 01716 0, 01717 v_APCI3XXX_Interrupt, 01718 i_APCI3XXX_Reset, 01719 i_APCI3XXX_InsnConfigAnalogInput, 01720 i_APCI3XXX_InsnReadAnalogInput, 01721 NULL, 01722 NULL, 01723 NULL, 01724 NULL, 01725 NULL, 01726 NULL, 01727 NULL, 01728 NULL, 01729 NULL, 01730 i_APCI3XXX_InsnReadDigitalInput, 01731 NULL, 01732 i_APCI3XXX_InsnBitsDigitalInput, 01733 NULL, 01734 i_APCI3XXX_InsnWriteDigitalOutput, 01735 i_APCI3XXX_InsnBitsDigitalOutput, 01736 i_APCI3XXX_InsnReadDigitalOutput, 01737 NULL, 01738 NULL, 01739 NULL, 01740 NULL, 01741 i_APCI3XXX_InsnConfigInitTTLIO, 01742 i_APCI3XXX_InsnBitsTTLIO, 01743 i_APCI3XXX_InsnReadTTLIO, 01744 i_APCI3XXX_InsnWriteTTLIO}, 01745 01746 {"apci3016-4", 01747 0x15B8, 01748 0x301B, 01749 256, 01750 256, 01751 256, 01752 256, 01753 ADDIDATA_NO_EEPROM, 01754 ADDIDATA_9054, 01755 4, 01756 2, 01757 4, 01758 0, 01759 65535, 01760 0, 01761 &range_apci3XXX_ai, 01762 NULL, 01763 4, 01764 4, 01765 1, 01766 24, 01767 &range_apci3XXX_ttl, 01768 0, 01769 0, 01770 6, 01771 5000, 01772 0, 01773 v_APCI3XXX_Interrupt, 01774 i_APCI3XXX_Reset, 01775 i_APCI3XXX_InsnConfigAnalogInput, 01776 i_APCI3XXX_InsnReadAnalogInput, 01777 NULL, 01778 NULL, 01779 NULL, 01780 NULL, 01781 NULL, 01782 NULL, 01783 NULL, 01784 NULL, 01785 NULL, 01786 i_APCI3XXX_InsnReadDigitalInput, 01787 NULL, 01788 i_APCI3XXX_InsnBitsDigitalInput, 01789 NULL, 01790 i_APCI3XXX_InsnWriteDigitalOutput, 01791 i_APCI3XXX_InsnBitsDigitalOutput, 01792 i_APCI3XXX_InsnReadDigitalOutput, 01793 NULL, 01794 NULL, 01795 NULL, 01796 NULL, 01797 i_APCI3XXX_InsnConfigInitTTLIO, 01798 i_APCI3XXX_InsnBitsTTLIO, 01799 i_APCI3XXX_InsnReadTTLIO, 01800 i_APCI3XXX_InsnWriteTTLIO}, 01801 01802 {"apci3100-16-4", 01803 0x15B8, 01804 0x301C, 01805 256, 01806 256, 01807 256, 01808 256, 01809 ADDIDATA_NO_EEPROM, 01810 ADDIDATA_9054, 01811 16, 01812 8, 01813 16, 01814 4, 01815 4095, 01816 4095, 01817 &range_apci3XXX_ai, 01818 &range_apci3XXX_ao, 01819 0, 01820 0, 01821 0, 01822 24, 01823 &range_apci3XXX_ttl, 01824 0, 01825 0, 01826 6, 01827 10000, 01828 0, 01829 v_APCI3XXX_Interrupt, 01830 i_APCI3XXX_Reset, 01831 i_APCI3XXX_InsnConfigAnalogInput, 01832 i_APCI3XXX_InsnReadAnalogInput, 01833 NULL, 01834 NULL, 01835 NULL, 01836 NULL, 01837 NULL, 01838 NULL, 01839 i_APCI3XXX_InsnWriteAnalogOutput, 01840 NULL, 01841 NULL, 01842 NULL, 01843 NULL, 01844 NULL, 01845 NULL, 01846 NULL, 01847 NULL, 01848 NULL, 01849 NULL, 01850 NULL, 01851 NULL, 01852 NULL, 01853 i_APCI3XXX_InsnConfigInitTTLIO, 01854 i_APCI3XXX_InsnBitsTTLIO, 01855 i_APCI3XXX_InsnReadTTLIO, 01856 i_APCI3XXX_InsnWriteTTLIO}, 01857 01858 {"apci3100-8-4", 01859 0x15B8, 01860 0x301D, 01861 256, 01862 256, 01863 256, 01864 256, 01865 ADDIDATA_NO_EEPROM, 01866 ADDIDATA_9054, 01867 8, 01868 4, 01869 8, 01870 4, 01871 4095, 01872 4095, 01873 &range_apci3XXX_ai, 01874 &range_apci3XXX_ao, 01875 0, 01876 0, 01877 0, 01878 24, 01879 &range_apci3XXX_ttl, 01880 0, 01881 0, 01882 6, 01883 10000, 01884 0, 01885 v_APCI3XXX_Interrupt, 01886 i_APCI3XXX_Reset, 01887 i_APCI3XXX_InsnConfigAnalogInput, 01888 i_APCI3XXX_InsnReadAnalogInput, 01889 NULL, 01890 NULL, 01891 NULL, 01892 NULL, 01893 NULL, 01894 NULL, 01895 i_APCI3XXX_InsnWriteAnalogOutput, 01896 NULL, 01897 NULL, 01898 NULL, 01899 NULL, 01900 NULL, 01901 NULL, 01902 NULL, 01903 NULL, 01904 NULL, 01905 NULL, 01906 NULL, 01907 NULL, 01908 NULL, 01909 i_APCI3XXX_InsnConfigInitTTLIO, 01910 i_APCI3XXX_InsnBitsTTLIO, 01911 i_APCI3XXX_InsnReadTTLIO, 01912 i_APCI3XXX_InsnWriteTTLIO}, 01913 01914 {"apci3106-16-4", 01915 0x15B8, 01916 0x301E, 01917 256, 01918 256, 01919 256, 01920 256, 01921 ADDIDATA_NO_EEPROM, 01922 ADDIDATA_9054, 01923 16, 01924 8, 01925 16, 01926 4, 01927 65535, 01928 4095, 01929 &range_apci3XXX_ai, 01930 &range_apci3XXX_ao, 01931 0, 01932 0, 01933 0, 01934 24, 01935 &range_apci3XXX_ttl, 01936 0, 01937 0, 01938 6, 01939 10000, 01940 0, 01941 v_APCI3XXX_Interrupt, 01942 i_APCI3XXX_Reset, 01943 i_APCI3XXX_InsnConfigAnalogInput, 01944 i_APCI3XXX_InsnReadAnalogInput, 01945 NULL, 01946 NULL, 01947 NULL, 01948 NULL, 01949 NULL, 01950 NULL, 01951 i_APCI3XXX_InsnWriteAnalogOutput, 01952 NULL, 01953 NULL, 01954 NULL, 01955 NULL, 01956 NULL, 01957 NULL, 01958 NULL, 01959 NULL, 01960 NULL, 01961 NULL, 01962 NULL, 01963 NULL, 01964 NULL, 01965 i_APCI3XXX_InsnConfigInitTTLIO, 01966 i_APCI3XXX_InsnBitsTTLIO, 01967 i_APCI3XXX_InsnReadTTLIO, 01968 i_APCI3XXX_InsnWriteTTLIO}, 01969 01970 {"apci3106-8-4", 01971 0x15B8, 01972 0x301F, 01973 256, 01974 256, 01975 256, 01976 256, 01977 ADDIDATA_NO_EEPROM, 01978 ADDIDATA_9054, 01979 8, 01980 4, 01981 8, 01982 4, 01983 65535, 01984 4095, 01985 &range_apci3XXX_ai, 01986 &range_apci3XXX_ao, 01987 0, 01988 0, 01989 0, 01990 24, 01991 &range_apci3XXX_ttl, 01992 0, 01993 0, 01994 6, 01995 10000, 01996 0, 01997 v_APCI3XXX_Interrupt, 01998 i_APCI3XXX_Reset, 01999 i_APCI3XXX_InsnConfigAnalogInput, 02000 i_APCI3XXX_InsnReadAnalogInput, 02001 NULL, 02002 NULL, 02003 NULL, 02004 NULL, 02005 NULL, 02006 NULL, 02007 i_APCI3XXX_InsnWriteAnalogOutput, 02008 NULL, 02009 NULL, 02010 NULL, 02011 NULL, 02012 NULL, 02013 NULL, 02014 NULL, 02015 NULL, 02016 NULL, 02017 NULL, 02018 NULL, 02019 NULL, 02020 NULL, 02021 i_APCI3XXX_InsnConfigInitTTLIO, 02022 i_APCI3XXX_InsnBitsTTLIO, 02023 i_APCI3XXX_InsnReadTTLIO, 02024 i_APCI3XXX_InsnWriteTTLIO}, 02025 02026 {"apci3110-16-4", 02027 0x15B8, 02028 0x3020, 02029 256, 02030 256, 02031 256, 02032 256, 02033 ADDIDATA_NO_EEPROM, 02034 ADDIDATA_9054, 02035 16, 02036 8, 02037 16, 02038 4, 02039 4095, 02040 4095, 02041 &range_apci3XXX_ai, 02042 &range_apci3XXX_ao, 02043 4, 02044 4, 02045 1, 02046 24, 02047 &range_apci3XXX_ttl, 02048 0, 02049 0, 02050 6, 02051 5000, 02052 0, 02053 v_APCI3XXX_Interrupt, 02054 i_APCI3XXX_Reset, 02055 i_APCI3XXX_InsnConfigAnalogInput, 02056 i_APCI3XXX_InsnReadAnalogInput, 02057 NULL, 02058 NULL, 02059 NULL, 02060 NULL, 02061 NULL, 02062 NULL, 02063 i_APCI3XXX_InsnWriteAnalogOutput, 02064 NULL, 02065 NULL, 02066 i_APCI3XXX_InsnReadDigitalInput, 02067 NULL, 02068 i_APCI3XXX_InsnBitsDigitalInput, 02069 NULL, 02070 i_APCI3XXX_InsnWriteDigitalOutput, 02071 i_APCI3XXX_InsnBitsDigitalOutput, 02072 i_APCI3XXX_InsnReadDigitalOutput, 02073 NULL, 02074 NULL, 02075 NULL, 02076 NULL, 02077 i_APCI3XXX_InsnConfigInitTTLIO, 02078 i_APCI3XXX_InsnBitsTTLIO, 02079 i_APCI3XXX_InsnReadTTLIO, 02080 i_APCI3XXX_InsnWriteTTLIO}, 02081 02082 {"apci3110-8-4", 02083 0x15B8, 02084 0x3021, 02085 256, 02086 256, 02087 256, 02088 256, 02089 ADDIDATA_NO_EEPROM, 02090 ADDIDATA_9054, 02091 8, 02092 4, 02093 8, 02094 4, 02095 4095, 02096 4095, 02097 &range_apci3XXX_ai, 02098 &range_apci3XXX_ao, 02099 4, 02100 4, 02101 1, 02102 24, 02103 &range_apci3XXX_ttl, 02104 0, 02105 0, 02106 6, 02107 5000, 02108 0, 02109 v_APCI3XXX_Interrupt, 02110 i_APCI3XXX_Reset, 02111 i_APCI3XXX_InsnConfigAnalogInput, 02112 i_APCI3XXX_InsnReadAnalogInput, 02113 NULL, 02114 NULL, 02115 NULL, 02116 NULL, 02117 NULL, 02118 NULL, 02119 i_APCI3XXX_InsnWriteAnalogOutput, 02120 NULL, 02121 NULL, 02122 i_APCI3XXX_InsnReadDigitalInput, 02123 NULL, 02124 i_APCI3XXX_InsnBitsDigitalInput, 02125 NULL, 02126 i_APCI3XXX_InsnWriteDigitalOutput, 02127 i_APCI3XXX_InsnBitsDigitalOutput, 02128 i_APCI3XXX_InsnReadDigitalOutput, 02129 NULL, 02130 NULL, 02131 NULL, 02132 NULL, 02133 i_APCI3XXX_InsnConfigInitTTLIO, 02134 i_APCI3XXX_InsnBitsTTLIO, 02135 i_APCI3XXX_InsnReadTTLIO, 02136 i_APCI3XXX_InsnWriteTTLIO}, 02137 02138 {"apci3116-16-4", 02139 0x15B8, 02140 0x3022, 02141 256, 02142 256, 02143 256, 02144 256, 02145 ADDIDATA_NO_EEPROM, 02146 ADDIDATA_9054, 02147 16, 02148 8, 02149 16, 02150 4, 02151 65535, 02152 4095, 02153 &range_apci3XXX_ai, 02154 &range_apci3XXX_ao, 02155 4, 02156 4, 02157 1, 02158 24, 02159 &range_apci3XXX_ttl, 02160 0, 02161 0, 02162 6, 02163 5000, 02164 0, 02165 v_APCI3XXX_Interrupt, 02166 i_APCI3XXX_Reset, 02167 i_APCI3XXX_InsnConfigAnalogInput, 02168 i_APCI3XXX_InsnReadAnalogInput, 02169 NULL, 02170 NULL, 02171 NULL, 02172 NULL, 02173 NULL, 02174 NULL, 02175 i_APCI3XXX_InsnWriteAnalogOutput, 02176 NULL, 02177 NULL, 02178 i_APCI3XXX_InsnReadDigitalInput, 02179 NULL, 02180 i_APCI3XXX_InsnBitsDigitalInput, 02181 NULL, 02182 i_APCI3XXX_InsnWriteDigitalOutput, 02183 i_APCI3XXX_InsnBitsDigitalOutput, 02184 i_APCI3XXX_InsnReadDigitalOutput, 02185 NULL, 02186 NULL, 02187 NULL, 02188 NULL, 02189 i_APCI3XXX_InsnConfigInitTTLIO, 02190 i_APCI3XXX_InsnBitsTTLIO, 02191 i_APCI3XXX_InsnReadTTLIO, 02192 i_APCI3XXX_InsnWriteTTLIO}, 02193 02194 {"apci3116-8-4", 02195 0x15B8, 02196 0x3023, 02197 256, 02198 256, 02199 256, 02200 256, 02201 ADDIDATA_NO_EEPROM, 02202 ADDIDATA_9054, 02203 8, 02204 4, 02205 8, 02206 4, 02207 65535, 02208 4095, 02209 &range_apci3XXX_ai, 02210 &range_apci3XXX_ao, 02211 4, 02212 4, 02213 1, 02214 24, 02215 &range_apci3XXX_ttl, 02216 0, 02217 0, 02218 6, 02219 5000, 02220 0, 02221 v_APCI3XXX_Interrupt, 02222 i_APCI3XXX_Reset, 02223 i_APCI3XXX_InsnConfigAnalogInput, 02224 i_APCI3XXX_InsnReadAnalogInput, 02225 NULL, 02226 NULL, 02227 NULL, 02228 NULL, 02229 NULL, 02230 NULL, 02231 i_APCI3XXX_InsnWriteAnalogOutput, 02232 NULL, 02233 NULL, 02234 i_APCI3XXX_InsnReadDigitalInput, 02235 NULL, 02236 i_APCI3XXX_InsnBitsDigitalInput, 02237 NULL, 02238 i_APCI3XXX_InsnWriteDigitalOutput, 02239 i_APCI3XXX_InsnBitsDigitalOutput, 02240 i_APCI3XXX_InsnReadDigitalOutput, 02241 NULL, 02242 NULL, 02243 NULL, 02244 NULL, 02245 i_APCI3XXX_InsnConfigInitTTLIO, 02246 i_APCI3XXX_InsnBitsTTLIO, 02247 i_APCI3XXX_InsnReadTTLIO, 02248 i_APCI3XXX_InsnWriteTTLIO}, 02249 02250 {"apci3003", 02251 0x15B8, 02252 0x300B, 02253 256, 02254 256, 02255 256, 02256 256, 02257 ADDIDATA_NO_EEPROM, 02258 ADDIDATA_9054, 02259 0, 02260 4, 02261 4, 02262 0, 02263 65535, 02264 0, 02265 &range_apci3XXX_ai, 02266 NULL, 02267 4, 02268 4, 02269 1, 02270 0, 02271 NULL, 02272 0, 02273 0, 02274 7, 02275 2500, 02276 0, 02277 v_APCI3XXX_Interrupt, 02278 i_APCI3XXX_Reset, 02279 i_APCI3XXX_InsnConfigAnalogInput, 02280 i_APCI3XXX_InsnReadAnalogInput, 02281 NULL, 02282 NULL, 02283 NULL, 02284 NULL, 02285 NULL, 02286 NULL, 02287 NULL, 02288 NULL, 02289 NULL, 02290 i_APCI3XXX_InsnReadDigitalInput, 02291 NULL, 02292 i_APCI3XXX_InsnBitsDigitalInput, 02293 NULL, 02294 i_APCI3XXX_InsnWriteDigitalOutput, 02295 i_APCI3XXX_InsnBitsDigitalOutput, 02296 i_APCI3XXX_InsnReadDigitalOutput, 02297 NULL, 02298 NULL, 02299 NULL, 02300 NULL, 02301 NULL, 02302 NULL, 02303 NULL}, 02304 02305 {"apci3002-16", 02306 0x15B8, 02307 0x3002, 02308 256, 02309 256, 02310 256, 02311 256, 02312 ADDIDATA_NO_EEPROM, 02313 ADDIDATA_9054, 02314 0, 02315 16, 02316 16, 02317 0, 02318 65535, 02319 0, 02320 &range_apci3XXX_ai, 02321 NULL, 02322 4, 02323 4, 02324 1, 02325 0, 02326 NULL, 02327 0, 02328 0, 02329 6, 02330 5000, 02331 0, 02332 v_APCI3XXX_Interrupt, 02333 i_APCI3XXX_Reset, 02334 i_APCI3XXX_InsnConfigAnalogInput, 02335 i_APCI3XXX_InsnReadAnalogInput, 02336 NULL, 02337 NULL, 02338 NULL, 02339 NULL, 02340 NULL, 02341 NULL, 02342 NULL, 02343 NULL, 02344 NULL, 02345 i_APCI3XXX_InsnReadDigitalInput, 02346 NULL, 02347 i_APCI3XXX_InsnBitsDigitalInput, 02348 NULL, 02349 i_APCI3XXX_InsnWriteDigitalOutput, 02350 i_APCI3XXX_InsnBitsDigitalOutput, 02351 i_APCI3XXX_InsnReadDigitalOutput, 02352 NULL, 02353 NULL, 02354 NULL, 02355 NULL, 02356 NULL, 02357 NULL, 02358 NULL}, 02359 02360 {"apci3002-8", 02361 0x15B8, 02362 0x3003, 02363 256, 02364 256, 02365 256, 02366 256, 02367 ADDIDATA_NO_EEPROM, 02368 ADDIDATA_9054, 02369 0, 02370 8, 02371 8, 02372 0, 02373 65535, 02374 0, 02375 &range_apci3XXX_ai, 02376 NULL, 02377 4, 02378 4, 02379 1, 02380 0, 02381 NULL, 02382 0, 02383 0, 02384 6, 02385 5000, 02386 0, 02387 v_APCI3XXX_Interrupt, 02388 i_APCI3XXX_Reset, 02389 i_APCI3XXX_InsnConfigAnalogInput, 02390 i_APCI3XXX_InsnReadAnalogInput, 02391 NULL, 02392 NULL, 02393 NULL, 02394 NULL, 02395 NULL, 02396 NULL, 02397 NULL, 02398 NULL, 02399 NULL, 02400 i_APCI3XXX_InsnReadDigitalInput, 02401 NULL, 02402 i_APCI3XXX_InsnBitsDigitalInput, 02403 NULL, 02404 i_APCI3XXX_InsnWriteDigitalOutput, 02405 i_APCI3XXX_InsnBitsDigitalOutput, 02406 i_APCI3XXX_InsnReadDigitalOutput, 02407 NULL, 02408 NULL, 02409 NULL, 02410 NULL, 02411 NULL, 02412 NULL, 02413 NULL}, 02414 02415 {"apci3002-4", 02416 0x15B8, 02417 0x3004, 02418 256, 02419 256, 02420 256, 02421 256, 02422 ADDIDATA_NO_EEPROM, 02423 ADDIDATA_9054, 02424 0, 02425 4, 02426 4, 02427 0, 02428 65535, 02429 0, 02430 &range_apci3XXX_ai, 02431 NULL, 02432 4, 02433 4, 02434 1, 02435 0, 02436 NULL, 02437 0, 02438 0, 02439 6, 02440 5000, 02441 0, 02442 v_APCI3XXX_Interrupt, 02443 i_APCI3XXX_Reset, 02444 i_APCI3XXX_InsnConfigAnalogInput, 02445 i_APCI3XXX_InsnReadAnalogInput, 02446 NULL, 02447 NULL, 02448 NULL, 02449 NULL, 02450 NULL, 02451 NULL, 02452 NULL, 02453 NULL, 02454 NULL, 02455 i_APCI3XXX_InsnReadDigitalInput, 02456 NULL, 02457 i_APCI3XXX_InsnBitsDigitalInput, 02458 NULL, 02459 i_APCI3XXX_InsnWriteDigitalOutput, 02460 i_APCI3XXX_InsnBitsDigitalOutput, 02461 i_APCI3XXX_InsnReadDigitalOutput, 02462 NULL, 02463 NULL, 02464 NULL, 02465 NULL, 02466 NULL, 02467 NULL, 02468 NULL}, 02469 02470 {"apci3500", 02471 0x15B8, 02472 0x3024, 02473 256, 02474 256, 02475 256, 02476 256, 02477 ADDIDATA_NO_EEPROM, 02478 ADDIDATA_9054, 02479 0, 02480 0, 02481 0, 02482 4, 02483 0, 02484 4095, 02485 NULL, 02486 &range_apci3XXX_ao, 02487 0, 02488 0, 02489 0, 02490 24, 02491 &range_apci3XXX_ttl, 02492 0, 02493 0, 02494 0, 02495 0, 02496 0, 02497 v_APCI3XXX_Interrupt, 02498 i_APCI3XXX_Reset, 02499 NULL, 02500 NULL, 02501 NULL, 02502 NULL, 02503 NULL, 02504 NULL, 02505 NULL, 02506 NULL, 02507 i_APCI3XXX_InsnWriteAnalogOutput, 02508 NULL, 02509 NULL, 02510 NULL, 02511 NULL, 02512 NULL, 02513 NULL, 02514 NULL, 02515 NULL, 02516 NULL, 02517 NULL, 02518 NULL, 02519 NULL, 02520 NULL, 02521 i_APCI3XXX_InsnConfigInitTTLIO, 02522 i_APCI3XXX_InsnBitsTTLIO, 02523 i_APCI3XXX_InsnReadTTLIO, 02524 i_APCI3XXX_InsnWriteTTLIO}, 02525 #endif 02526 }; 02527 02528 #define n_boardtypes (sizeof(boardtypes)/sizeof(boardtype)) 02529 02530 comedi_driver driver_addi = { 02531 driver_name:"addi_common", 02532 module:THIS_MODULE, 02533 attach:i_ADDI_Attach, 02534 detach:i_ADDI_Detach, 02535 num_names:n_boardtypes, 02536 board_name:&boardtypes[0].pc_DriverName, 02537 offset:sizeof(boardtype), 02538 }; 02539 02540 COMEDI_PCI_INITCLEANUP(driver_addi, addi_apci_tbl); 02541 02542 /* 02543 +----------------------------------------------------------------------------+ 02544 | Function name :static int i_ADDI_Attach(comedi_device *dev, | 02545 | comedi_devconfig *it) | 02546 | | 02547 +----------------------------------------------------------------------------+ 02548 | Task :Detects the card. | 02549 | Configure the driver for a particular board. | 02550 | This function does all the initializations and memory | 02551 | allocation of data structures for the driver. | 02552 +----------------------------------------------------------------------------+ 02553 | Input Parameters :comedi_device *dev | 02554 | comedi_devconfig *it | 02555 | | 02556 +----------------------------------------------------------------------------+ 02557 | Return Value : 0 | 02558 | | 02559 +----------------------------------------------------------------------------+ 02560 */ 02561 02562 static int i_ADDI_Attach(comedi_device * dev, comedi_devconfig * it) 02563 { 02564 comedi_subdevice *s; 02565 int ret, pages, i, n_subdevices; 02566 DWORD dw_Dummy; 02567 resource_size_t io_addr[5]; 02568 unsigned int irq; 02569 resource_size_t iobase_a, iobase_main, iobase_addon, iobase_reserved; 02570 struct pcilst_struct *card = NULL; 02571 unsigned char pci_bus, pci_slot, pci_func; 02572 int i_Dma = 0; 02573 static char c_Identifier[150]; 02574 02575 sprintf(c_Identifier, "Addi-Data GmbH Comedi %s", 02576 this_board->pc_DriverName); 02577 02578 if ((ret = alloc_private(dev, sizeof(addi_private))) < 0) { 02579 return -ENOMEM; 02580 } 02581 02582 if (!pci_list_builded) { 02583 v_pci_card_list_init(this_board->i_VendorId, 1); //1 for displaying the list.. 02584 pci_list_builded = 1; 02585 } 02586 //rt_printk("comedi%d: addi_common: board=%s",dev->minor,this_board->pc_DriverName); 02587 02588 if ((this_board->i_Dma) && (it->options[2] == 0)) { 02589 i_Dma = 1; 02590 } 02591 02592 if ((card = ptr_select_and_alloc_pci_card(this_board->i_VendorId, 02593 this_board->i_DeviceId, 02594 it->options[0], 02595 it->options[1], i_Dma)) == NULL) { 02596 return -EIO; 02597 } 02598 devpriv->allocated = 1; 02599 02600 if ((i_pci_card_data(card, &pci_bus, &pci_slot, &pci_func, &io_addr[0], 02601 &irq)) < 0) { 02602 i_pci_card_free(card); 02603 printk(" - Can't get AMCC data!\n"); 02604 return -EIO; 02605 } 02606 02607 iobase_a = io_addr[0]; 02608 iobase_main = io_addr[1]; 02609 iobase_addon = io_addr[2]; 02610 iobase_reserved = io_addr[3]; 02611 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]); 02612 02613 if ((this_board->pc_EepromChip == NULL) 02614 || (strcmp(this_board->pc_EepromChip, ADDIDATA_9054) != 0)) { 02615 /************************************/ 02616 /* Test if more that 1 address used */ 02617 /************************************/ 02618 02619 if (this_board->i_IorangeBase1 != 0) { 02620 dev->iobase = (unsigned long)iobase_main; // DAQ base address... 02621 } else { 02622 dev->iobase = (unsigned long)iobase_a; // DAQ base address... 02623 } 02624 02625 dev->board_name = this_board->pc_DriverName; 02626 devpriv->amcc = card; 02627 devpriv->iobase = (INT) dev->iobase; 02628 devpriv->i_IobaseAmcc = (INT) iobase_a; //AMCC base address... 02629 devpriv->i_IobaseAddon = (INT) iobase_addon; //ADD ON base address.... 02630 devpriv->i_IobaseReserved = (INT) iobase_reserved; 02631 devpriv->ps_BoardInfo = this_board; 02632 } else { 02633 dev->board_name = this_board->pc_DriverName; 02634 dev->iobase = (unsigned long)io_addr[2]; 02635 devpriv->amcc = card; 02636 devpriv->iobase = (INT) io_addr[2]; 02637 devpriv->ps_BoardInfo = this_board; 02638 devpriv->i_IobaseReserved = (INT) io_addr[3]; 02639 printk("\nioremap begin"); 02640 devpriv->dw_AiBase = 02641 (ULONG_PTR) ioremap(io_addr[3], 02642 this_board->i_IorangeBase3); 02643 printk("\nioremap end"); 02644 } 02645 02646 //## 02647 02648 if (irq > 0) { 02649 if (comedi_request_irq(irq, v_ADDI_Interrupt, IRQF_SHARED, 02650 c_Identifier, dev) < 0) { 02651 printk(", unable to allocate IRQ %u, DISABLING IT", 02652 irq); 02653 irq = 0; /* Can't use IRQ */ 02654 } else { 02655 rt_printk("\nirq=%u", irq); 02656 } 02657 } else { 02658 rt_printk(", IRQ disabled"); 02659 } 02660 02661 printk("\nOption %d %d %d\n", it->options[0], it->options[1], 02662 it->options[2]); 02663 dev->irq = irq; 02664 02665 // Read eepeom and fill boardtype Structure 02666 02667 if (this_board->i_PCIEeprom) { 02668 printk("\nPCI Eeprom used"); 02669 if (!(strcmp(this_board->pc_EepromChip, "S5920"))) { 02670 // Set 3 wait stait 02671 if (!(strcmp(this_board->pc_DriverName, "apci035"))) { 02672 outl(0x80808082, devpriv->i_IobaseAmcc + 0x60); 02673 } else { 02674 outl(0x83838383, devpriv->i_IobaseAmcc + 0x60); 02675 } 02676 // Enable the interrupt for the controler 02677 dw_Dummy = inl(devpriv->i_IobaseAmcc + 0x38); 02678 outl(dw_Dummy | 0x2000, devpriv->i_IobaseAmcc + 0x38); 02679 printk("\nEnable the interrupt for the controler"); 02680 } 02681 printk("\nRead Eeprom"); 02682 i_EepromReadMainHeader(io_addr[0], this_board->pc_EepromChip, 02683 dev); 02684 } else { 02685 printk("\nPCI Eeprom unused"); 02686 } 02687 02688 if (it->options[2] > 0) { 02689 devpriv->us_UseDma = ADDI_DISABLE; 02690 } else { 02691 devpriv->us_UseDma = ADDI_ENABLE; 02692 } 02693 02694 if (this_board->i_Dma) { 02695 printk("\nDMA used"); 02696 if (devpriv->us_UseDma == ADDI_ENABLE) { 02697 // alloc DMA buffers 02698 devpriv->b_DmaDoubleBuffer = 0; 02699 for (i = 0; i < 2; i++) { 02700 for (pages = 4; pages >= 0; pages--) { 02701 if ((devpriv->ul_DmaBufferVirtual[i] = 02702 (void *) 02703 __get_free_pages 02704 (GFP_KERNEL, pages))) { 02705 break; 02706 } 02707 } 02708 if (devpriv->ul_DmaBufferVirtual[i]) { 02709 devpriv->ui_DmaBufferPages[i] = pages; 02710 devpriv->ui_DmaBufferSize[i] = 02711 PAGE_SIZE * pages; 02712 devpriv->ui_DmaBufferSamples[i] = 02713 devpriv-> 02714 ui_DmaBufferSize[i] >> 1; 02715 devpriv->ul_DmaBufferHw[i] = 02716 virt_to_bus((void *)devpriv-> 02717 ul_DmaBufferVirtual[i]); 02718 } 02719 } 02720 if (!devpriv->ul_DmaBufferVirtual[0]) { 02721 rt_printk 02722 (", Can't allocate DMA buffer, DMA disabled!"); 02723 devpriv->us_UseDma = ADDI_DISABLE; 02724 } 02725 02726 if (devpriv->ul_DmaBufferVirtual[1]) { 02727 devpriv->b_DmaDoubleBuffer = 1; 02728 } 02729 } 02730 02731 if ((devpriv->us_UseDma == ADDI_ENABLE)) { 02732 rt_printk("\nDMA ENABLED\n"); 02733 } else { 02734 printk("\nDMA DISABLED\n"); 02735 } 02736 } 02737 02738 if (!strcmp(this_board->pc_DriverName, "apci1710")) { 02739 #ifdef CONFIG_APCI_1710 02740 i_ADDI_AttachPCI1710(dev); 02741 02742 // save base address 02743 devpriv->s_BoardInfos.ui_Address = io_addr[2]; 02744 #endif 02745 } else { 02746 //Update-0.7.57->0.7.68dev->n_subdevices = 7; 02747 n_subdevices = 7; 02748 if ((ret = alloc_subdevices(dev, n_subdevices)) < 0) 02749 return ret; 02750 02751 // Allocate and Initialise AI Subdevice Structures 02752 s = dev->subdevices + 0; 02753 if ((this_board->i_NbrAiChannel) 02754 || (this_board->i_NbrAiChannelDiff)) { 02755 dev->read_subdev = s; 02756 s->type = COMEDI_SUBD_AI; 02757 s->subdev_flags = 02758 SDF_READABLE | SDF_RT | SDF_COMMON | SDF_GROUND 02759 | SDF_DIFF; 02760 if (this_board->i_NbrAiChannel) { 02761 s->n_chan = this_board->i_NbrAiChannel; 02762 devpriv->b_SingelDiff = 0; 02763 } else { 02764 s->n_chan = this_board->i_NbrAiChannelDiff; 02765 devpriv->b_SingelDiff = 1; 02766 } 02767 s->maxdata = this_board->i_AiMaxdata; 02768 s->len_chanlist = this_board->i_AiChannelList; 02769 s->range_table = this_board->pr_AiRangelist; 02770 02771 /* Set the initialisation flag */ 02772 devpriv->b_AiInitialisation = 1; 02773 02774 s->insn_config = 02775 this_board->i_hwdrv_InsnConfigAnalogInput; 02776 s->insn_read = this_board->i_hwdrv_InsnReadAnalogInput; 02777 s->insn_write = 02778 this_board->i_hwdrv_InsnWriteAnalogInput; 02779 s->insn_bits = this_board->i_hwdrv_InsnBitsAnalogInput; 02780 s->do_cmdtest = 02781 this_board->i_hwdrv_CommandTestAnalogInput; 02782 s->do_cmd = this_board->i_hwdrv_CommandAnalogInput; 02783 s->cancel = this_board->i_hwdrv_CancelAnalogInput; 02784 02785 } else { 02786 s->type = COMEDI_SUBD_UNUSED; 02787 } 02788 02789 // Allocate and Initialise AO Subdevice Structures 02790 s = dev->subdevices + 1; 02791 if (this_board->i_NbrAoChannel) { 02792 s->type = COMEDI_SUBD_AO; 02793 s->subdev_flags = 02794 SDF_WRITEABLE | SDF_GROUND | SDF_COMMON | 02795 SDF_RT; 02796 s->n_chan = this_board->i_NbrAoChannel; 02797 s->maxdata = this_board->i_AoMaxdata; 02798 s->len_chanlist = this_board->i_NbrAoChannel; 02799 s->range_table = this_board->pr_AoRangelist; 02800 s->insn_config = 02801 this_board->i_hwdrv_InsnConfigAnalogOutput; 02802 s->insn_write = 02803 this_board->i_hwdrv_InsnWriteAnalogOutput; 02804 } else { 02805 s->type = COMEDI_SUBD_UNUSED; 02806 } 02807 // Allocate and Initialise DI Subdevice Structures 02808 s = dev->subdevices + 2; 02809 if (this_board->i_NbrDiChannel) { 02810 s->type = COMEDI_SUBD_DI; 02811 s->subdev_flags = 02812 SDF_READABLE | SDF_RT | SDF_GROUND | SDF_COMMON; 02813 s->n_chan = this_board->i_NbrDiChannel; 02814 s->maxdata = 1; 02815 s->len_chanlist = this_board->i_NbrDiChannel; 02816 s->range_table = &range_digital; 02817 s->io_bits = 0; /* all bits input */ 02818 s->insn_config = 02819 this_board->i_hwdrv_InsnConfigDigitalInput; 02820 s->insn_read = this_board->i_hwdrv_InsnReadDigitalInput; 02821 s->insn_write = 02822 this_board->i_hwdrv_InsnWriteDigitalInput; 02823 s->insn_bits = this_board->i_hwdrv_InsnBitsDigitalInput; 02824 } else { 02825 s->type = COMEDI_SUBD_UNUSED; 02826 } 02827 // Allocate and Initialise DO Subdevice Structures 02828 s = dev->subdevices + 3; 02829 if (this_board->i_NbrDoChannel) { 02830 s->type = COMEDI_SUBD_DO; 02831 s->subdev_flags = 02832 SDF_READABLE | SDF_WRITEABLE | SDF_RT | 02833 SDF_GROUND | SDF_COMMON; 02834 s->n_chan = this_board->i_NbrDoChannel; 02835 s->maxdata = this_board->i_DoMaxdata; 02836 s->len_chanlist = this_board->i_NbrDoChannel; 02837 s->range_table = &range_digital; 02838 s->io_bits = 0xf; /* all bits output */ 02839 02840 s->insn_config = this_board->i_hwdrv_InsnConfigDigitalOutput; //for digital output memory.. 02841 s->insn_write = 02842 this_board->i_hwdrv_InsnWriteDigitalOutput; 02843 s->insn_bits = 02844 this_board->i_hwdrv_InsnBitsDigitalOutput; 02845 s->insn_read = 02846 this_board->i_hwdrv_InsnReadDigitalOutput; 02847 } else { 02848 s->type = COMEDI_SUBD_UNUSED; 02849 } 02850 02851 // Allocate and Initialise Timer Subdevice Structures 02852 s = dev->subdevices + 4; 02853 if (this_board->i_Timer) { 02854 s->type = COMEDI_SUBD_TIMER; 02855 s->subdev_flags = 02856 SDF_WRITEABLE | SDF_RT | SDF_GROUND | 02857 SDF_COMMON; 02858 s->n_chan = 1; 02859 s->maxdata = 0; 02860 s->len_chanlist = 1; 02861 s->range_table = &range_digital; 02862 02863 s->insn_write = this_board->i_hwdrv_InsnWriteTimer; 02864 s->insn_read = this_board->i_hwdrv_InsnReadTimer; 02865 s->insn_config = this_board->i_hwdrv_InsnConfigTimer; 02866 s->insn_bits = this_board->i_hwdrv_InsnBitsTimer; 02867 } else { 02868 s->type = COMEDI_SUBD_UNUSED; 02869 } 02870 02871 // Allocate and Initialise TTL 02872 s = dev->subdevices + 5; 02873 if (this_board->i_NbrTTLChannel) { 02874 s->type = COMEDI_SUBD_TTLIO; 02875 s->subdev_flags = 02876 SDF_WRITEABLE | SDF_READABLE | SDF_RT | 02877 SDF_GROUND | SDF_COMMON; 02878 s->n_chan = this_board->i_NbrTTLChannel; 02879 s->maxdata = 1; 02880 s->io_bits = 0; /* all bits input */ 02881 s->len_chanlist = this_board->i_NbrTTLChannel; 02882 s->range_table = &range_digital; 02883 s->insn_config = this_board->i_hwdr_ConfigInitTTLIO; 02884 s->insn_bits = this_board->i_hwdr_ReadTTLIOBits; 02885 s->insn_read = this_board->i_hwdr_ReadTTLIOAllPortValue; 02886 s->insn_write = this_board->i_hwdr_WriteTTLIOChlOnOff; 02887 } else { 02888 s->type = COMEDI_SUBD_UNUSED; 02889 } 02890 02891 /* EEPROM */ 02892 s = dev->subdevices + 6; 02893 if (this_board->i_PCIEeprom) { 02894 s->type = COMEDI_SUBD_MEMORY; 02895 s->subdev_flags = SDF_READABLE | SDF_INTERNAL; 02896 s->n_chan = 256; 02897 s->maxdata = 0xffff; 02898 s->insn_read = i_ADDIDATA_InsnReadEeprom; 02899 } else { 02900 s->type = COMEDI_SUBD_UNUSED; 02901 } 02902 } 02903 02904 printk("\ni_ADDI_Attach end\n"); 02905 i_ADDI_Reset(dev); 02906 devpriv->b_ValidDriver = 1; 02907 return 0; 02908 } 02909 02910 /* 02911 +----------------------------------------------------------------------------+ 02912 | Function name : static int i_ADDI_Detach(comedi_device *dev) | 02913 | | 02914 | | 02915 +----------------------------------------------------------------------------+ 02916 | Task : Deallocates resources of the addi_common driver | 02917 | Free the DMA buffers, unregister irq. | 02918 | | 02919 +----------------------------------------------------------------------------+ 02920 | Input Parameters : comedi_device *dev | 02921 | | 02922 | | 02923 +----------------------------------------------------------------------------+ 02924 | Return Value : 0 | 02925 | | 02926 +----------------------------------------------------------------------------+ 02927 */ 02928 02929 static int i_ADDI_Detach(comedi_device * dev) 02930 { 02931 02932 if (dev->private) { 02933 if (devpriv->b_ValidDriver) { 02934 i_ADDI_Reset(dev); 02935 } 02936 02937 if (dev->irq) { 02938 comedi_free_irq(dev->irq, dev); 02939 } 02940 02941 if ((devpriv->ps_BoardInfo->pc_EepromChip == NULL) 02942 || (strcmp(devpriv->ps_BoardInfo->pc_EepromChip, 02943 ADDIDATA_9054) != 0)) { 02944 if (devpriv->allocated) { 02945 i_pci_card_free(devpriv->amcc); 02946 } 02947 02948 if (devpriv->ul_DmaBufferVirtual[0]) { 02949 free_pages((unsigned long)devpriv-> 02950 ul_DmaBufferVirtual[0], 02951 devpriv->ui_DmaBufferPages[0]); 02952 } 02953 02954 if (devpriv->ul_DmaBufferVirtual[1]) { 02955 free_pages((unsigned long)devpriv-> 02956 ul_DmaBufferVirtual[1], 02957 devpriv->ui_DmaBufferPages[1]); 02958 } 02959 } else { 02960 iounmap((void *)devpriv->dw_AiBase); 02961 02962 if (devpriv->allocated) { 02963 i_pci_card_free(devpriv->amcc); 02964 } 02965 } 02966 02967 if (pci_list_builded) { 02968 //v_pci_card_list_cleanup(PCI_VENDOR_ID_AMCC); 02969 v_pci_card_list_cleanup(this_board->i_VendorId); 02970 pci_list_builded = 0; 02971 } 02972 } 02973 02974 return 0; 02975 } 02976 02977 /* 02978 +----------------------------------------------------------------------------+ 02979 | Function name : static int i_ADDI_Reset(comedi_device *dev) | 02980 | | 02981 +----------------------------------------------------------------------------+ 02982 | Task : Disables all interrupts, Resets digital output to low, | 02983 | Set all analog output to low | 02984 | | 02985 +----------------------------------------------------------------------------+ 02986 | Input Parameters : comedi_device *dev | 02987 | | 02988 | | 02989 +----------------------------------------------------------------------------+ 02990 | Return Value : 0 | 02991 | | 02992 +----------------------------------------------------------------------------+ 02993 */ 02994 02995 static int i_ADDI_Reset(comedi_device * dev) 02996 { 02997 02998 this_board->i_hwdrv_Reset(dev); 02999 return 0; 03000 } 03001 03002 // Interrupt function 03003 /* 03004 +----------------------------------------------------------------------------+ 03005 | Function name : | 03006 |static void v_ADDI_Interrupt(int irq, void *d PT_REGS_ARG) | 03007 | | 03008 +----------------------------------------------------------------------------+ 03009 | Task : Registerd interrupt routine | 03010 | | 03011 +----------------------------------------------------------------------------+ 03012 | Input Parameters : int irq | 03013 | | 03014 | | 03015 +----------------------------------------------------------------------------+ 03016 | Return Value : | 03017 | | 03018 +----------------------------------------------------------------------------+ 03019 */ 03020 03021 static irqreturn_t v_ADDI_Interrupt(int irq, void *d PT_REGS_ARG) 03022 { 03023 comedi_device *dev = d; 03024 this_board->v_hwdrv_Interrupt(irq, d); 03025 return IRQ_RETVAL(1); 03026 } 03027 03028 // EEPROM Read Function 03029 /* 03030 +----------------------------------------------------------------------------+ 03031 | Function name : | 03032 |INT i_ADDIDATA_InsnReadEeprom(comedi_device *dev,comedi_subdevice *s, 03033 comedi_insn *insn,lsampl_t *data) 03034 | | 03035 +----------------------------------------------------------------------------+ 03036 | Task : Read 256 words from EEPROM | 03037 | | 03038 +----------------------------------------------------------------------------+ 03039 | Input Parameters :(comedi_device *dev,comedi_subdevice *s, 03040 comedi_insn *insn,lsampl_t *data) | 03041 | | 03042 | | 03043 +----------------------------------------------------------------------------+ 03044 | Return Value : | 03045 | | 03046 +----------------------------------------------------------------------------+ 03047 */ 03048 03049 static int i_ADDIDATA_InsnReadEeprom(comedi_device * dev, comedi_subdevice * s, 03050 comedi_insn * insn, lsampl_t * data) 03051 { 03052 WORD w_Data; 03053 WORD w_Address; 03054 w_Address = CR_CHAN(insn->chanspec); // address to be read as 0,1,2,3...255 03055 03056 w_Data = w_EepromReadWord(devpriv->i_IobaseAmcc, 03057 this_board->pc_EepromChip, 0x100 + (2 * w_Address)); 03058 data[0] = w_Data; 03059 //multiplied by 2 bcozinput will be like 0,1,2...255 03060 return insn->n; 03061 03062 }