addi_apci_3xxx.c revision 5e72c7a50709e60663217704b30501bf34afa448
133782dd5edf8db3cdb7c81a3523bf743dd0209b7H Hartley Sweeten#include <linux/pci.h> 233782dd5edf8db3cdb7c81a3523bf743dd0209b7H Hartley Sweeten 33d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten#include "../comedidev.h" 43d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten#include "comedi_fc.h" 5bf36f012c7ddaff083bb0ef187feddf4d85507a0H Hartley Sweeten#include "amcc_s5933.h" 63d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten 73d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten#include "addi-data/addi_common.h" 83d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten 9bf6a1578c10a4f3ef94a3c744267f18f9c3642bdH Hartley Sweeten#include "addi-data/addi_eeprom.c" 10bf6a1578c10a4f3ef94a3c744267f18f9c3642bdH Hartley Sweeten#include "addi-data/hwdrv_apci3xxx.c" 1198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 1298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten#ifndef COMEDI_SUBD_TTLIO 1398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten#define COMEDI_SUBD_TTLIO 11 /* Digital Input Output But TTL */ 1498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten#endif 15c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten 16dbae4575661da840353f12dd76499ad587c92519H Hartley Sweetenenum apci3xxx_boardid { 17dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3000_16, 18dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3000_8, 19dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3000_4, 20dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3006_16, 21dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3006_8, 22dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3006_4, 23dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3010_16, 24dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3010_8, 25dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3010_4, 26dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3016_16, 27dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3016_8, 28dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3016_4, 29dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3100_16_4, 30dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3100_8_4, 31dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3106_16_4, 32dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3106_8_4, 33dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3110_16_4, 34dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3110_8_4, 35dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3116_16_4, 36dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3116_8_4, 37dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3003, 38dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3002_16, 39dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3002_8, 40dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3002_4, 41dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3500, 42dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten}; 43dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten 4420a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenstatic const struct addi_board apci3xxx_boardtypes[] = { 45dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3000_16] = { 46c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3000-16", 47c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 48c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 49c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 50c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 51c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 52c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 53c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 54c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 55c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 56c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 57c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 58c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 59c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 60c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 61c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 62c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 63c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 64c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 65dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 66dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3000_8] = { 67c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3000-8", 68c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 69c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 70c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 71c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 72c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 73c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 74c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 75c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 76c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 77c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 78c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 79c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 80c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 81c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 82c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 83c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 84c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 85c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 86dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 87dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3000_4] = { 88c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3000-4", 89c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 90c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 91c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 92c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 4, 93c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 2, 94c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 95c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 96c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 97c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 98c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 99c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 100c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 101c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 102c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 103c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 104c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 105c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 106c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 107dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 108dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3006_16] = { 109c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3006-16", 110c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 111c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 112c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 113c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 114c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 115c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 116c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 117c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 118c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 119c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 120c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 121c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 122c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 123c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 124c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 125c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 126c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 127c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 128dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 129dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3006_8] = { 130c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3006-8", 131c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 132c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 133c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 134c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 135c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 136c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 137c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 138c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 139c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 140c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 141c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 142c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 143c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 144c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 145c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 146c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 147c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 148c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 149dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 150dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3006_4] = { 151c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3006-4", 152c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 153c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 154c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 155c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 4, 156c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 2, 157c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 158c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 159c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 160c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 161c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 162c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 163c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 164c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 165c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 166c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 167c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 168c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 169c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 170dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 171dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3010_16] = { 172c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3010-16", 173c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 174c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 175c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 176c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 177c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 178c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 179c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 180c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 181c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 182c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 183c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 184c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 185c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 186c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 187c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 188c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 189c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 19010f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 1912b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 192c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 193c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 194c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 195c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 196dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 197dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3010_8] = { 198c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3010-8", 199c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 200c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 201c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 202c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 203c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 204c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 205c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 206c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 207c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 208c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 209c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 210c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 211c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 212c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 213c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 214c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 215c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 21610f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 2172b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 218c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 219c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 220c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 221c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 222dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 223dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3010_4] = { 224c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3010-4", 225c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 226c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 227c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 228c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 4, 229c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 2, 230c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 231c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 232c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 233c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 234c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 235c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 236c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 237c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 238c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 239c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 240c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 241c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 24210f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 2432b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 244c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 245c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 246c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 247c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 248dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 249dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3016_16] = { 250c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3016-16", 251c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 252c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 253c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 254c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 255c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 256c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 257c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 258c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 259c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 260c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 261c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 262c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 263c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 264c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 265c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 266c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 267c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 26810f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 2692b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 270c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 271c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 272c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 273c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 274dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 275dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3016_8] = { 276c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3016-8", 277c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 278c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 279c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 280c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 281c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 282c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 283c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 284c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 285c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 286c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 287c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 288c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 289c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 290c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 291c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 292c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 293c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 29410f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 2952b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 296c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 297c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 298c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 299c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 300dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 301dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3016_4] = { 302c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3016-4", 303c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 304c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 305c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 306c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 4, 307c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 2, 308c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 309c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 310c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 311c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 312c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 313c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 314c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 315c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 316c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 317c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 318c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 319c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 32010f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 3212b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 322c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 323c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 324c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 325c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 326dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 327dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3100_16_4] = { 328c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3100-16-4", 329c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 330c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 331c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 332c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 333c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 334c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 335c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 336c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 337c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 338c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 339c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AoRangelist = &range_apci3XXX_ao, 340c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 341c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 342c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 343c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 344c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 345c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 346c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 347c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 348c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 349c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 350c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 351dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 352dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3100_8_4] = { 353c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3100-8-4", 354c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 355c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 356c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 357c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 358c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 359c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 360c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 361c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 362c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 363c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 364c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AoRangelist = &range_apci3XXX_ao, 365c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 366c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 367c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 368c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 369c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 370c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 371c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 372c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 373c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 374c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 375c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 376dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 377dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3106_16_4] = { 378c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3106-16-4", 379c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 380c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 381c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 382c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 383c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 384c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 385c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 386c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 387c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 388c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 389c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AoRangelist = &range_apci3XXX_ao, 390c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 391c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 392c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 393c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 394c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 395c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 396c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 397c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 398c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 399c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 400c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 401dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 402dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3106_8_4] = { 403c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3106-8-4", 404c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 405c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 406c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 407c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 408c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 409c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 410c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 411c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 412c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 413c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 414c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AoRangelist = &range_apci3XXX_ao, 415c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 416c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 417c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 418c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 419c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 420c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 421c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 422c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 423c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 424c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 425c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 426dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 427dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3110_16_4] = { 428c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3110-16-4", 429c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 430c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 431c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 432c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 433c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 434c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 435c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 436c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 437c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 438c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 439c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AoRangelist = &range_apci3XXX_ao, 440c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 441c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 442c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 443c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 444c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 445c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 446c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 447c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 448c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 449c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 45010f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 4512b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 452c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 453c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 454c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 455c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 456dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 457dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3110_8_4] = { 458c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3110-8-4", 459c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 460c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 461c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 462c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 463c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 464c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 465c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 466c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 467c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 468c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 469c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AoRangelist = &range_apci3XXX_ao, 470c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 471c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 472c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 473c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 474c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 475c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 476c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 477c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 478c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 479c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 48010f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 4812b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 482c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 483c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 484c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 485c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 486dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 487dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3116_16_4] = { 488c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3116-16-4", 489c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 490c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 491c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 492c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 493c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 494c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 495c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 496c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 497c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 498c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 499c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AoRangelist = &range_apci3XXX_ao, 500c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 501c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 502c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 503c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 504c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 505c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 506c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 507c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 508c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 509c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 51010f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 5112b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 512c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 513c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 514c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 515c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 516dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 517dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3116_8_4] = { 518c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3116-8-4", 519c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 520c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 521c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 522c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 523c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 524c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 525c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 526c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 527c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 528c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 529c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AoRangelist = &range_apci3XXX_ao, 530c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 531c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 532c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 533c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 534c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 535c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 536c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 537c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 538c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 539c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 54010f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 5412b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 542c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 543c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 544c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 545c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 546dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 547dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3003] = { 548c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3003", 549c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 550c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 551c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 552c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 553c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 554c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 555c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 556c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 557c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 558c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 559c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 7, 560c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 2500, 561c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 562c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 563c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 56410f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 5652b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 566dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 567dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3002_16] = { 568c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3002-16", 569c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 570c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 571c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 572c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 16, 573c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 574c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 575c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 576c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 577c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 578c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 579c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 580c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 581c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 582c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 583c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 58410f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 5852b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 586dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 587dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3002_8] = { 588c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3002-8", 589c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 590c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 591c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 592c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 593c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 594c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 595c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 596c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 597c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 598c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 599c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 600c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 601c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 602c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 603c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 60410f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 6052b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 606dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 607dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3002_4] = { 608c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3002-4", 609c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 610c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 611c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 612c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 613c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 614c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 615c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AiRangelist = &range_apci3XXX_ai, 616c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 617c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 618c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_DoMaxdata = 1, 619c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 620c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 621c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 622c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 623c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ai_read = i_APCI3XXX_InsnReadAnalogInput, 62410f71c7845686b7f93113f1fe6dbc3718d8a8673H Hartley Sweeten .di_bits = apci3xxx_di_insn_bits, 6252b70a4f4f97b70e8cd9d8a16983758aa4fc3450bH Hartley Sweeten .do_bits = apci3xxx_do_insn_bits, 626dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 627dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3500] = { 628c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3500", 629c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 630c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_PCIEeprom = ADDIDATA_NO_EEPROM, 631c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_EepromChip = ADDIDATA_9054, 632c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 633c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 634c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pr_AoRangelist = &range_apci3XXX_ao, 635c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 636c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .interrupt = v_APCI3XXX_Interrupt, 637c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 638c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 639c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 640c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_read = i_APCI3XXX_InsnReadTTLIO, 641c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 642c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten }, 643c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten}; 644c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten 64598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweetenstatic int i_ADDIDATA_InsnReadEeprom(struct comedi_device *dev, 64698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten struct comedi_subdevice *s, 64798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten struct comedi_insn *insn, 64898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten unsigned int *data) 64998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten{ 65098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten const struct addi_board *this_board = comedi_board(dev); 65198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten struct addi_private *devpriv = dev->private; 65298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten unsigned short w_Address = CR_CHAN(insn->chanspec); 65398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten unsigned short w_Data; 65498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 65598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten w_Data = addi_eeprom_readw(devpriv->i_IobaseAmcc, 65698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten this_board->pc_EepromChip, 2 * w_Address); 65798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten data[0] = w_Data; 65898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 65998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return insn->n; 66098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten} 66198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 66298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweetenstatic irqreturn_t v_ADDI_Interrupt(int irq, void *d) 66398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten{ 66498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten struct comedi_device *dev = d; 66598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten const struct addi_board *this_board = comedi_board(dev); 66698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 66798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten this_board->interrupt(irq, d); 66898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return IRQ_RETVAL(1); 66998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten} 67098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 6715e72c7a50709e60663217704b30501bf34afa448H Hartley Sweetenstatic int apci3xxx_reset(struct comedi_device *dev) 67298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten{ 6735e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten struct addi_private *devpriv = dev->private; 6745e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten unsigned int val; 6755e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten int i; 6765e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 6775e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Disable the interrupt */ 6785e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten disable_irq(dev->irq); 6795e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 6805e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Reset the interrupt flag */ 6815e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten devpriv->b_EocEosInterrupt = 0; 6825e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 6835e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Clear the start command */ 6845e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten writel(0, devpriv->dw_AiBase + 8); 6855e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 6865e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Reset the interrupt flags */ 6875e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten val = readl(devpriv->dw_AiBase + 16); 6885e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten writel(val, devpriv->dw_AiBase + 16); 6895e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 6905e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* clear the EOS */ 6915e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten readl(devpriv->dw_AiBase + 20); 6925e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 6935e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Clear the FIFO */ 6945e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten for (i = 0; i < 16; i++) 6955e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten val = readl(devpriv->dw_AiBase + 28); 6965e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 6975e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Enable the interrupt */ 6985e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten enable_irq(dev->irq); 69998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 70098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return 0; 70198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten} 70298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 703dbae4575661da840353f12dd76499ad587c92519H Hartley Sweetenstatic int apci3xxx_auto_attach(struct comedi_device *dev, 704dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten unsigned long context) 705dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten{ 70698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten struct pci_dev *pcidev = comedi_to_pci_dev(dev); 707dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten const struct addi_board *board = NULL; 70898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten struct addi_private *devpriv; 70998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten struct comedi_subdevice *s; 71098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten int ret, n_subdevices; 71198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten unsigned int dw_Dummy; 712dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten 713dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten if (context < ARRAY_SIZE(apci3xxx_boardtypes)) 714dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten board = &apci3xxx_boardtypes[context]; 715dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten if (!board) 716dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten return -ENODEV; 717dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten dev->board_ptr = board; 71898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->board_name = board->pc_DriverName; 71998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 72098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); 72198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (!devpriv) 72298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return -ENOMEM; 72398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->private = devpriv; 72498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 72598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten ret = comedi_pci_enable(dev); 72698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (ret) 72798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return ret; 72898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 72998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (!board->pc_EepromChip || 73098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten strcmp(board->pc_EepromChip, ADDIDATA_9054)) { 73198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* board does not have an eeprom or is not ADDIDATA_9054 */ 73298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (board->i_IorangeBase1) 73398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->iobase = pci_resource_start(pcidev, 1); 73498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten else 73598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->iobase = pci_resource_start(pcidev, 0); 73698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 73798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->iobase = dev->iobase; 73898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->i_IobaseAmcc = pci_resource_start(pcidev, 0); 73998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->i_IobaseAddon = pci_resource_start(pcidev, 2); 74098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 74198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* board has an ADDIDATA_9054 eeprom */ 74298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->iobase = pci_resource_start(pcidev, 2); 74398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->iobase = pci_resource_start(pcidev, 2); 74498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->dw_AiBase = pci_ioremap_bar(pcidev, 3); 74598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 74698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->i_IobaseReserved = pci_resource_start(pcidev, 3); 74798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 74898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Initialize parameters that can be overridden in EEPROM */ 74998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->s_EeParameters.i_NbrAiChannel = board->i_NbrAiChannel; 75098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->s_EeParameters.i_NbrAoChannel = board->i_NbrAoChannel; 75198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->s_EeParameters.i_AiMaxdata = board->i_AiMaxdata; 75298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->s_EeParameters.i_AoMaxdata = board->i_AoMaxdata; 75398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->s_EeParameters.i_NbrDiChannel = board->i_NbrDiChannel; 75498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->s_EeParameters.i_NbrDoChannel = board->i_NbrDoChannel; 75598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->s_EeParameters.i_DoMaxdata = board->i_DoMaxdata; 75698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->s_EeParameters.i_Dma = board->i_Dma; 75798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->s_EeParameters.i_Timer = board->i_Timer; 75898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->s_EeParameters.ui_MinAcquisitiontimeNs = 75998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten board->ui_MinAcquisitiontimeNs; 76098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->s_EeParameters.ui_MinDelaytimeNs = board->ui_MinDelaytimeNs; 76198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 76298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* ## */ 76398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 76498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (pcidev->irq > 0) { 76598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten ret = request_irq(pcidev->irq, v_ADDI_Interrupt, IRQF_SHARED, 76698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->board_name, dev); 76798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (ret == 0) 76898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->irq = pcidev->irq; 76998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 77098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 77198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Read eepeom and fill addi_board Structure */ 77298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 77398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (board->i_PCIEeprom) { 77498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (!(strcmp(board->pc_EepromChip, "S5920"))) { 77598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Set 3 wait stait */ 77698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (!(strcmp(dev->board_name, "apci035"))) 77798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten outl(0x80808082, devpriv->i_IobaseAmcc + 0x60); 77898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten else 77998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten outl(0x83838383, devpriv->i_IobaseAmcc + 0x60); 78098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 78198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Enable the interrupt for the controller */ 78298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dw_Dummy = inl(devpriv->i_IobaseAmcc + 0x38); 78398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten outl(dw_Dummy | 0x2000, devpriv->i_IobaseAmcc + 0x38); 78498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 78598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten addi_eeprom_read_info(dev, pci_resource_start(pcidev, 0)); 78698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 78798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 78898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten n_subdevices = 7; 78998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten ret = comedi_alloc_subdevices(dev, n_subdevices); 79098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (ret) 79198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return ret; 79298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 79398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise AI Subdevice Structures */ 79498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[0]; 79598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (devpriv->s_EeParameters.i_NbrAiChannel || 79698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten board->i_NbrAiChannelDiff) { 79798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->read_subdev = s; 79898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_AI; 79998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = SDF_READABLE | SDF_COMMON | SDF_GROUND | 80098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten SDF_DIFF; 80198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (devpriv->s_EeParameters.i_NbrAiChannel) { 80298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->n_chan = devpriv->s_EeParameters.i_NbrAiChannel; 80398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->b_SingelDiff = 0; 80498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 80598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->n_chan = board->i_NbrAiChannelDiff; 80698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->b_SingelDiff = 1; 80798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 80898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->maxdata = devpriv->s_EeParameters.i_AiMaxdata; 80998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->len_chanlist = board->i_AiChannelList; 81098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->range_table = board->pr_AiRangelist; 81198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 81298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Set the initialisation flag */ 81398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->b_AiInitialisation = 1; 81498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 81598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_config = board->ai_config; 81698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_read = board->ai_read; 81798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_write = board->ai_write; 81898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_bits = board->ai_bits; 81998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->do_cmdtest = board->ai_cmdtest; 82098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->do_cmd = board->ai_cmd; 82198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->cancel = board->ai_cancel; 82298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 82398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 82498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 82598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 82698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 82798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise AO Subdevice Structures */ 82898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[1]; 82998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (devpriv->s_EeParameters.i_NbrAoChannel) { 83098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_AO; 83198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON; 83298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->n_chan = devpriv->s_EeParameters.i_NbrAoChannel; 83398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->maxdata = devpriv->s_EeParameters.i_AoMaxdata; 83498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->len_chanlist = devpriv->s_EeParameters.i_NbrAoChannel; 83598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->range_table = board->pr_AoRangelist; 83698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_config = board->ao_config; 83798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_write = board->ao_write; 83898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 83998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 84098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 84198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise DI Subdevice Structures */ 84298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[2]; 84398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (devpriv->s_EeParameters.i_NbrDiChannel) { 84498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_DI; 84598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_COMMON; 84698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->n_chan = devpriv->s_EeParameters.i_NbrDiChannel; 84798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->maxdata = 1; 84898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->len_chanlist = devpriv->s_EeParameters.i_NbrDiChannel; 84998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->range_table = &range_digital; 85098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->io_bits = 0; /* all bits input */ 85198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_config = board->di_config; 85298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_read = board->di_read; 85398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_write = board->di_write; 85498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_bits = board->di_bits; 85598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 85698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 85798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 85898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise DO Subdevice Structures */ 85998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[3]; 86098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (devpriv->s_EeParameters.i_NbrDoChannel) { 86198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_DO; 86298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = 86398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten SDF_READABLE | SDF_WRITEABLE | SDF_GROUND | SDF_COMMON; 86498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->n_chan = devpriv->s_EeParameters.i_NbrDoChannel; 86598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->maxdata = devpriv->s_EeParameters.i_DoMaxdata; 86698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->len_chanlist = devpriv->s_EeParameters.i_NbrDoChannel; 86798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->range_table = &range_digital; 86898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->io_bits = 0xf; /* all bits output */ 86998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 87098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* insn_config - for digital output memory */ 87198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_config = board->do_config; 87298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_write = board->do_write; 87398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_bits = board->do_bits; 87498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_read = board->do_read; 87598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 87698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 87798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 87898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 87998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise Timer Subdevice Structures */ 88098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[4]; 88198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (devpriv->s_EeParameters.i_Timer) { 88298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_TIMER; 88398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON; 88498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->n_chan = 1; 88598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->maxdata = 0; 88698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->len_chanlist = 1; 88798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->range_table = &range_digital; 88898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 88998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_write = board->timer_write; 89098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_read = board->timer_read; 89198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_config = board->timer_config; 89298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_bits = board->timer_bits; 89398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 89498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 89598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 89698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 89798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise TTL */ 89898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[5]; 89998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (board->i_NbrTTLChannel) { 90098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_TTLIO; 90198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = 90298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten SDF_WRITEABLE | SDF_READABLE | SDF_GROUND | SDF_COMMON; 90398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->n_chan = board->i_NbrTTLChannel; 90498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->maxdata = 1; 90598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->io_bits = 0; /* all bits input */ 90698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->len_chanlist = board->i_NbrTTLChannel; 90798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->range_table = &range_digital; 90898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_config = board->ttl_config; 90998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_bits = board->ttl_bits; 91098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_read = board->ttl_read; 91198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_write = board->ttl_write; 91298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 91398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 91498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 91598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 91698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* EEPROM */ 91798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[6]; 91898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (board->i_PCIEeprom) { 91998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_MEMORY; 92098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = SDF_READABLE | SDF_INTERNAL; 92198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->n_chan = 256; 92298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->maxdata = 0xffff; 92398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->insn_read = i_ADDIDATA_InsnReadEeprom; 92498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 92598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 92698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 92798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 9285e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten apci3xxx_reset(dev); 92998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return 0; 93098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten} 93198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 93298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweetenstatic void apci3xxx_detach(struct comedi_device *dev) 93398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten{ 93498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten struct addi_private *devpriv = dev->private; 935dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten 93698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (devpriv) { 93798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (dev->iobase) 9385e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten apci3xxx_reset(dev); 93998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (dev->irq) 94098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten free_irq(dev->irq, dev); 94198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (devpriv->dw_AiBase) 94298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten iounmap(devpriv->dw_AiBase); 94398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 94498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten comedi_pci_disable(dev); 945dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten} 946dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten 94720a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenstatic struct comedi_driver apci3xxx_driver = { 94820a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten .driver_name = "addi_apci_3xxx", 94920a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten .module = THIS_MODULE, 950dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten .auto_attach = apci3xxx_auto_attach, 95198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten .detach = apci3xxx_detach, 95220a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten}; 95320a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten 954a690b7e535f2f97a3a05ee570715abeb60a8910fBill Pembertonstatic int apci3xxx_pci_probe(struct pci_dev *dev, 955b8f4ac237e382accd4b30c75043939f7ed9e79a6H Hartley Sweeten const struct pci_device_id *id) 95620a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten{ 957b8f4ac237e382accd4b30c75043939f7ed9e79a6H Hartley Sweeten return comedi_pci_auto_config(dev, &apci3xxx_driver, id->driver_data); 95820a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten} 95920a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten 96020a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenstatic DEFINE_PCI_DEVICE_TABLE(apci3xxx_pci_table) = { 961dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3010), BOARD_APCI3000_16 }, 962dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x300f), BOARD_APCI3000_8 }, 963dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x300e), BOARD_APCI3000_4 }, 964dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3013), BOARD_APCI3006_16 }, 965dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3014), BOARD_APCI3006_8 }, 966dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3015), BOARD_APCI3006_4 }, 967dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3016), BOARD_APCI3010_16 }, 968dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3017), BOARD_APCI3010_8 }, 969dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3018), BOARD_APCI3010_4 }, 970dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3019), BOARD_APCI3016_16 }, 971dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301a), BOARD_APCI3016_8 }, 972dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301b), BOARD_APCI3016_4 }, 973dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301c), BOARD_APCI3100_16_4 }, 974dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301d), BOARD_APCI3100_8_4 }, 975dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301e), BOARD_APCI3106_16_4 }, 976dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301f), BOARD_APCI3106_8_4 }, 977dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3020), BOARD_APCI3110_16_4 }, 978dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3021), BOARD_APCI3110_8_4 }, 979dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3022), BOARD_APCI3116_16_4 }, 980dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3023), BOARD_APCI3116_8_4 }, 981dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x300B), BOARD_APCI3003 }, 982dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3002), BOARD_APCI3002_16 }, 983dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3003), BOARD_APCI3002_8 }, 984dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3004), BOARD_APCI3002_4 }, 985dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3024), BOARD_APCI3500 }, 986317285d71acccbda2fbab7e53d6b33c52a151a32H Hartley Sweeten { 0 } 987317285d71acccbda2fbab7e53d6b33c52a151a32H Hartley Sweeten}; 98820a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley SweetenMODULE_DEVICE_TABLE(pci, apci3xxx_pci_table); 989317285d71acccbda2fbab7e53d6b33c52a151a32H Hartley Sweeten 99020a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenstatic struct pci_driver apci3xxx_pci_driver = { 99120a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten .name = "addi_apci_3xxx", 99220a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten .id_table = apci3xxx_pci_table, 99320a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten .probe = apci3xxx_pci_probe, 9949901a4d75d007686e8f6473189cafc4b216b7449Peter Huewe .remove = comedi_pci_auto_unconfig, 99520a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten}; 99620a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenmodule_comedi_pci_driver(apci3xxx_driver, apci3xxx_pci_driver); 99790f703d30dd3e0c16ff80f35e34e511385a05ad5Arun Thomas 99890f703d30dd3e0c16ff80f35e34e511385a05ad5Arun ThomasMODULE_AUTHOR("Comedi http://www.comedi.org"); 99990f703d30dd3e0c16ff80f35e34e511385a05ad5Arun ThomasMODULE_DESCRIPTION("Comedi low-level driver"); 100090f703d30dd3e0c16ff80f35e34e511385a05ad5Arun ThomasMODULE_LICENSE("GPL"); 1001