addi_apci_3xxx.c revision 92cba8f3b42e1cb8211b64e91618102ecc8f0a6d
1#include "../comedidev.h" 2#include "comedi_fc.h" 3#include "amcc_s5933.h" 4 5#include "addi-data/addi_common.h" 6 7#include "addi-data/addi_eeprom.c" 8#include "addi-data/hwdrv_apci3xxx.c" 9#include "addi-data/addi_common.c" 10 11static const struct addi_board apci3xxx_boardtypes[] = { 12 { 13 .pc_DriverName = "apci3000-16", 14 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 15 .i_DeviceId = 0x3010, 16 .i_IorangeBase0 = 256, 17 .i_IorangeBase1 = 256, 18 .i_IorangeBase2 = 256, 19 .i_IorangeBase3 = 256, 20 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 21 .pc_EepromChip = ADDIDATA_9054, 22 .i_NbrAiChannel = 16, 23 .i_NbrAiChannelDiff = 8, 24 .i_AiChannelList = 16, 25 .i_AiMaxdata = 4095, 26 .pr_AiRangelist = &range_apci3XXX_ai, 27 .i_NbrTTLChannel = 24, 28 .b_AvailableConvertUnit = 6, 29 .ui_MinAcquisitiontimeNs = 10000, 30 .interrupt = v_APCI3XXX_Interrupt, 31 .reset = i_APCI3XXX_Reset, 32 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 33 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 34 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 35 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 36 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 37 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 38 }, { 39 .pc_DriverName = "apci3000-8", 40 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 41 .i_DeviceId = 0x300F, 42 .i_IorangeBase0 = 256, 43 .i_IorangeBase1 = 256, 44 .i_IorangeBase2 = 256, 45 .i_IorangeBase3 = 256, 46 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 47 .pc_EepromChip = ADDIDATA_9054, 48 .i_NbrAiChannel = 8, 49 .i_NbrAiChannelDiff = 4, 50 .i_AiChannelList = 8, 51 .i_AiMaxdata = 4095, 52 .pr_AiRangelist = &range_apci3XXX_ai, 53 .i_NbrTTLChannel = 24, 54 .b_AvailableConvertUnit = 6, 55 .ui_MinAcquisitiontimeNs = 10000, 56 .interrupt = v_APCI3XXX_Interrupt, 57 .reset = i_APCI3XXX_Reset, 58 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 59 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 60 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 61 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 62 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 63 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 64 }, { 65 .pc_DriverName = "apci3000-4", 66 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 67 .i_DeviceId = 0x300E, 68 .i_IorangeBase0 = 256, 69 .i_IorangeBase1 = 256, 70 .i_IorangeBase2 = 256, 71 .i_IorangeBase3 = 256, 72 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 73 .pc_EepromChip = ADDIDATA_9054, 74 .i_NbrAiChannel = 4, 75 .i_NbrAiChannelDiff = 2, 76 .i_AiChannelList = 4, 77 .i_AiMaxdata = 4095, 78 .pr_AiRangelist = &range_apci3XXX_ai, 79 .i_NbrTTLChannel = 24, 80 .b_AvailableConvertUnit = 6, 81 .ui_MinAcquisitiontimeNs = 10000, 82 .interrupt = v_APCI3XXX_Interrupt, 83 .reset = i_APCI3XXX_Reset, 84 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 85 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 86 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 87 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 88 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 89 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 90 }, { 91 .pc_DriverName = "apci3006-16", 92 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 93 .i_DeviceId = 0x3013, 94 .i_IorangeBase0 = 256, 95 .i_IorangeBase1 = 256, 96 .i_IorangeBase2 = 256, 97 .i_IorangeBase3 = 256, 98 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 99 .pc_EepromChip = ADDIDATA_9054, 100 .i_NbrAiChannel = 16, 101 .i_NbrAiChannelDiff = 8, 102 .i_AiChannelList = 16, 103 .i_AiMaxdata = 65535, 104 .pr_AiRangelist = &range_apci3XXX_ai, 105 .i_NbrTTLChannel = 24, 106 .b_AvailableConvertUnit = 6, 107 .ui_MinAcquisitiontimeNs = 10000, 108 .interrupt = v_APCI3XXX_Interrupt, 109 .reset = i_APCI3XXX_Reset, 110 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 111 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 112 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 113 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 114 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 115 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 116 }, { 117 .pc_DriverName = "apci3006-8", 118 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 119 .i_DeviceId = 0x3014, 120 .i_IorangeBase0 = 256, 121 .i_IorangeBase1 = 256, 122 .i_IorangeBase2 = 256, 123 .i_IorangeBase3 = 256, 124 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 125 .pc_EepromChip = ADDIDATA_9054, 126 .i_NbrAiChannel = 8, 127 .i_NbrAiChannelDiff = 4, 128 .i_AiChannelList = 8, 129 .i_AiMaxdata = 65535, 130 .pr_AiRangelist = &range_apci3XXX_ai, 131 .i_NbrTTLChannel = 24, 132 .b_AvailableConvertUnit = 6, 133 .ui_MinAcquisitiontimeNs = 10000, 134 .interrupt = v_APCI3XXX_Interrupt, 135 .reset = i_APCI3XXX_Reset, 136 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 137 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 138 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 139 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 140 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 141 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 142 }, { 143 .pc_DriverName = "apci3006-4", 144 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 145 .i_DeviceId = 0x3015, 146 .i_IorangeBase0 = 256, 147 .i_IorangeBase1 = 256, 148 .i_IorangeBase2 = 256, 149 .i_IorangeBase3 = 256, 150 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 151 .pc_EepromChip = ADDIDATA_9054, 152 .i_NbrAiChannel = 4, 153 .i_NbrAiChannelDiff = 2, 154 .i_AiChannelList = 4, 155 .i_AiMaxdata = 65535, 156 .pr_AiRangelist = &range_apci3XXX_ai, 157 .i_NbrTTLChannel = 24, 158 .b_AvailableConvertUnit = 6, 159 .ui_MinAcquisitiontimeNs = 10000, 160 .interrupt = v_APCI3XXX_Interrupt, 161 .reset = i_APCI3XXX_Reset, 162 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 163 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 164 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 165 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 166 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 167 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 168 }, { 169 .pc_DriverName = "apci3010-16", 170 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 171 .i_DeviceId = 0x3016, 172 .i_IorangeBase0 = 256, 173 .i_IorangeBase1 = 256, 174 .i_IorangeBase2 = 256, 175 .i_IorangeBase3 = 256, 176 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 177 .pc_EepromChip = ADDIDATA_9054, 178 .i_NbrAiChannel = 16, 179 .i_NbrAiChannelDiff = 8, 180 .i_AiChannelList = 16, 181 .i_AiMaxdata = 4095, 182 .pr_AiRangelist = &range_apci3XXX_ai, 183 .i_NbrDiChannel = 4, 184 .i_NbrDoChannel = 4, 185 .i_DoMaxdata = 1, 186 .i_NbrTTLChannel = 24, 187 .b_AvailableConvertUnit = 6, 188 .ui_MinAcquisitiontimeNs = 5000, 189 .interrupt = v_APCI3XXX_Interrupt, 190 .reset = i_APCI3XXX_Reset, 191 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 192 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 193 .di_bits = apci3xxx_di_insn_bits, 194 .do_bits = apci3xxx_do_insn_bits, 195 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 196 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 197 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 198 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 199 }, { 200 .pc_DriverName = "apci3010-8", 201 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 202 .i_DeviceId = 0x3017, 203 .i_IorangeBase0 = 256, 204 .i_IorangeBase1 = 256, 205 .i_IorangeBase2 = 256, 206 .i_IorangeBase3 = 256, 207 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 208 .pc_EepromChip = ADDIDATA_9054, 209 .i_NbrAiChannel = 8, 210 .i_NbrAiChannelDiff = 4, 211 .i_AiChannelList = 8, 212 .i_AiMaxdata = 4095, 213 .pr_AiRangelist = &range_apci3XXX_ai, 214 .i_NbrDiChannel = 4, 215 .i_NbrDoChannel = 4, 216 .i_DoMaxdata = 1, 217 .i_NbrTTLChannel = 24, 218 .b_AvailableConvertUnit = 6, 219 .ui_MinAcquisitiontimeNs = 5000, 220 .interrupt = v_APCI3XXX_Interrupt, 221 .reset = i_APCI3XXX_Reset, 222 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 223 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 224 .di_bits = apci3xxx_di_insn_bits, 225 .do_bits = apci3xxx_do_insn_bits, 226 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 227 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 228 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 229 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 230 }, { 231 .pc_DriverName = "apci3010-4", 232 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 233 .i_DeviceId = 0x3018, 234 .i_IorangeBase0 = 256, 235 .i_IorangeBase1 = 256, 236 .i_IorangeBase2 = 256, 237 .i_IorangeBase3 = 256, 238 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 239 .pc_EepromChip = ADDIDATA_9054, 240 .i_NbrAiChannel = 4, 241 .i_NbrAiChannelDiff = 2, 242 .i_AiChannelList = 4, 243 .i_AiMaxdata = 4095, 244 .pr_AiRangelist = &range_apci3XXX_ai, 245 .i_NbrDiChannel = 4, 246 .i_NbrDoChannel = 4, 247 .i_DoMaxdata = 1, 248 .i_NbrTTLChannel = 24, 249 .b_AvailableConvertUnit = 6, 250 .ui_MinAcquisitiontimeNs = 5000, 251 .interrupt = v_APCI3XXX_Interrupt, 252 .reset = i_APCI3XXX_Reset, 253 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 254 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 255 .di_bits = apci3xxx_di_insn_bits, 256 .do_bits = apci3xxx_do_insn_bits, 257 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 258 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 259 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 260 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 261 }, { 262 .pc_DriverName = "apci3016-16", 263 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 264 .i_DeviceId = 0x3019, 265 .i_IorangeBase0 = 256, 266 .i_IorangeBase1 = 256, 267 .i_IorangeBase2 = 256, 268 .i_IorangeBase3 = 256, 269 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 270 .pc_EepromChip = ADDIDATA_9054, 271 .i_NbrAiChannel = 16, 272 .i_NbrAiChannelDiff = 8, 273 .i_AiChannelList = 16, 274 .i_AiMaxdata = 65535, 275 .pr_AiRangelist = &range_apci3XXX_ai, 276 .i_NbrDiChannel = 4, 277 .i_NbrDoChannel = 4, 278 .i_DoMaxdata = 1, 279 .i_NbrTTLChannel = 24, 280 .b_AvailableConvertUnit = 6, 281 .ui_MinAcquisitiontimeNs = 5000, 282 .interrupt = v_APCI3XXX_Interrupt, 283 .reset = i_APCI3XXX_Reset, 284 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 285 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 286 .di_bits = apci3xxx_di_insn_bits, 287 .do_bits = apci3xxx_do_insn_bits, 288 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 289 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 290 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 291 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 292 }, { 293 .pc_DriverName = "apci3016-8", 294 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 295 .i_DeviceId = 0x301A, 296 .i_IorangeBase0 = 256, 297 .i_IorangeBase1 = 256, 298 .i_IorangeBase2 = 256, 299 .i_IorangeBase3 = 256, 300 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 301 .pc_EepromChip = ADDIDATA_9054, 302 .i_NbrAiChannel = 8, 303 .i_NbrAiChannelDiff = 4, 304 .i_AiChannelList = 8, 305 .i_AiMaxdata = 65535, 306 .pr_AiRangelist = &range_apci3XXX_ai, 307 .i_NbrDiChannel = 4, 308 .i_NbrDoChannel = 4, 309 .i_DoMaxdata = 1, 310 .i_NbrTTLChannel = 24, 311 .b_AvailableConvertUnit = 6, 312 .ui_MinAcquisitiontimeNs = 5000, 313 .interrupt = v_APCI3XXX_Interrupt, 314 .reset = i_APCI3XXX_Reset, 315 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 316 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 317 .di_bits = apci3xxx_di_insn_bits, 318 .do_bits = apci3xxx_do_insn_bits, 319 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 320 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 321 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 322 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 323 }, { 324 .pc_DriverName = "apci3016-4", 325 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 326 .i_DeviceId = 0x301B, 327 .i_IorangeBase0 = 256, 328 .i_IorangeBase1 = 256, 329 .i_IorangeBase2 = 256, 330 .i_IorangeBase3 = 256, 331 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 332 .pc_EepromChip = ADDIDATA_9054, 333 .i_NbrAiChannel = 4, 334 .i_NbrAiChannelDiff = 2, 335 .i_AiChannelList = 4, 336 .i_AiMaxdata = 65535, 337 .pr_AiRangelist = &range_apci3XXX_ai, 338 .i_NbrDiChannel = 4, 339 .i_NbrDoChannel = 4, 340 .i_DoMaxdata = 1, 341 .i_NbrTTLChannel = 24, 342 .b_AvailableConvertUnit = 6, 343 .ui_MinAcquisitiontimeNs = 5000, 344 .interrupt = v_APCI3XXX_Interrupt, 345 .reset = i_APCI3XXX_Reset, 346 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 347 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 348 .di_bits = apci3xxx_di_insn_bits, 349 .do_bits = apci3xxx_do_insn_bits, 350 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 351 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 352 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 353 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 354 }, { 355 .pc_DriverName = "apci3100-16-4", 356 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 357 .i_DeviceId = 0x301C, 358 .i_IorangeBase0 = 256, 359 .i_IorangeBase1 = 256, 360 .i_IorangeBase2 = 256, 361 .i_IorangeBase3 = 256, 362 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 363 .pc_EepromChip = ADDIDATA_9054, 364 .i_NbrAiChannel = 16, 365 .i_NbrAiChannelDiff = 8, 366 .i_AiChannelList = 16, 367 .i_NbrAoChannel = 4, 368 .i_AiMaxdata = 4095, 369 .i_AoMaxdata = 4095, 370 .pr_AiRangelist = &range_apci3XXX_ai, 371 .pr_AoRangelist = &range_apci3XXX_ao, 372 .i_NbrTTLChannel = 24, 373 .b_AvailableConvertUnit = 6, 374 .ui_MinAcquisitiontimeNs = 10000, 375 .interrupt = v_APCI3XXX_Interrupt, 376 .reset = i_APCI3XXX_Reset, 377 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 378 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 379 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 380 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 381 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 382 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 383 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 384 }, { 385 .pc_DriverName = "apci3100-8-4", 386 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 387 .i_DeviceId = 0x301D, 388 .i_IorangeBase0 = 256, 389 .i_IorangeBase1 = 256, 390 .i_IorangeBase2 = 256, 391 .i_IorangeBase3 = 256, 392 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 393 .pc_EepromChip = ADDIDATA_9054, 394 .i_NbrAiChannel = 8, 395 .i_NbrAiChannelDiff = 4, 396 .i_AiChannelList = 8, 397 .i_NbrAoChannel = 4, 398 .i_AiMaxdata = 4095, 399 .i_AoMaxdata = 4095, 400 .pr_AiRangelist = &range_apci3XXX_ai, 401 .pr_AoRangelist = &range_apci3XXX_ao, 402 .i_NbrTTLChannel = 24, 403 .b_AvailableConvertUnit = 6, 404 .ui_MinAcquisitiontimeNs = 10000, 405 .interrupt = v_APCI3XXX_Interrupt, 406 .reset = i_APCI3XXX_Reset, 407 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 408 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 409 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 410 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 411 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 412 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 413 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 414 }, { 415 .pc_DriverName = "apci3106-16-4", 416 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 417 .i_DeviceId = 0x301E, 418 .i_IorangeBase0 = 256, 419 .i_IorangeBase1 = 256, 420 .i_IorangeBase2 = 256, 421 .i_IorangeBase3 = 256, 422 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 423 .pc_EepromChip = ADDIDATA_9054, 424 .i_NbrAiChannel = 16, 425 .i_NbrAiChannelDiff = 8, 426 .i_AiChannelList = 16, 427 .i_NbrAoChannel = 4, 428 .i_AiMaxdata = 65535, 429 .i_AoMaxdata = 4095, 430 .pr_AiRangelist = &range_apci3XXX_ai, 431 .pr_AoRangelist = &range_apci3XXX_ao, 432 .i_NbrTTLChannel = 24, 433 .b_AvailableConvertUnit = 6, 434 .ui_MinAcquisitiontimeNs = 10000, 435 .interrupt = v_APCI3XXX_Interrupt, 436 .reset = i_APCI3XXX_Reset, 437 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 438 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 439 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 440 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 441 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 442 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 443 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 444 }, { 445 .pc_DriverName = "apci3106-8-4", 446 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 447 .i_DeviceId = 0x301F, 448 .i_IorangeBase0 = 256, 449 .i_IorangeBase1 = 256, 450 .i_IorangeBase2 = 256, 451 .i_IorangeBase3 = 256, 452 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 453 .pc_EepromChip = ADDIDATA_9054, 454 .i_NbrAiChannel = 8, 455 .i_NbrAiChannelDiff = 4, 456 .i_AiChannelList = 8, 457 .i_NbrAoChannel = 4, 458 .i_AiMaxdata = 65535, 459 .i_AoMaxdata = 4095, 460 .pr_AiRangelist = &range_apci3XXX_ai, 461 .pr_AoRangelist = &range_apci3XXX_ao, 462 .i_NbrTTLChannel = 24, 463 .b_AvailableConvertUnit = 6, 464 .ui_MinAcquisitiontimeNs = 10000, 465 .interrupt = v_APCI3XXX_Interrupt, 466 .reset = i_APCI3XXX_Reset, 467 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 468 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 469 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 470 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 471 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 472 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 473 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 474 }, { 475 .pc_DriverName = "apci3110-16-4", 476 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 477 .i_DeviceId = 0x3020, 478 .i_IorangeBase0 = 256, 479 .i_IorangeBase1 = 256, 480 .i_IorangeBase2 = 256, 481 .i_IorangeBase3 = 256, 482 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 483 .pc_EepromChip = ADDIDATA_9054, 484 .i_NbrAiChannel = 16, 485 .i_NbrAiChannelDiff = 8, 486 .i_AiChannelList = 16, 487 .i_NbrAoChannel = 4, 488 .i_AiMaxdata = 4095, 489 .i_AoMaxdata = 4095, 490 .pr_AiRangelist = &range_apci3XXX_ai, 491 .pr_AoRangelist = &range_apci3XXX_ao, 492 .i_NbrDiChannel = 4, 493 .i_NbrDoChannel = 4, 494 .i_DoMaxdata = 1, 495 .i_NbrTTLChannel = 24, 496 .b_AvailableConvertUnit = 6, 497 .ui_MinAcquisitiontimeNs = 5000, 498 .interrupt = v_APCI3XXX_Interrupt, 499 .reset = i_APCI3XXX_Reset, 500 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 501 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 502 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 503 .di_bits = apci3xxx_di_insn_bits, 504 .do_bits = apci3xxx_do_insn_bits, 505 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 506 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 507 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 508 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 509 }, { 510 .pc_DriverName = "apci3110-8-4", 511 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 512 .i_DeviceId = 0x3021, 513 .i_IorangeBase0 = 256, 514 .i_IorangeBase1 = 256, 515 .i_IorangeBase2 = 256, 516 .i_IorangeBase3 = 256, 517 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 518 .pc_EepromChip = ADDIDATA_9054, 519 .i_NbrAiChannel = 8, 520 .i_NbrAiChannelDiff = 4, 521 .i_AiChannelList = 8, 522 .i_NbrAoChannel = 4, 523 .i_AiMaxdata = 4095, 524 .i_AoMaxdata = 4095, 525 .pr_AiRangelist = &range_apci3XXX_ai, 526 .pr_AoRangelist = &range_apci3XXX_ao, 527 .i_NbrDiChannel = 4, 528 .i_NbrDoChannel = 4, 529 .i_DoMaxdata = 1, 530 .i_NbrTTLChannel = 24, 531 .b_AvailableConvertUnit = 6, 532 .ui_MinAcquisitiontimeNs = 5000, 533 .interrupt = v_APCI3XXX_Interrupt, 534 .reset = i_APCI3XXX_Reset, 535 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 536 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 537 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 538 .di_bits = apci3xxx_di_insn_bits, 539 .do_bits = apci3xxx_do_insn_bits, 540 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 541 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 542 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 543 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 544 }, { 545 .pc_DriverName = "apci3116-16-4", 546 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 547 .i_DeviceId = 0x3022, 548 .i_IorangeBase0 = 256, 549 .i_IorangeBase1 = 256, 550 .i_IorangeBase2 = 256, 551 .i_IorangeBase3 = 256, 552 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 553 .pc_EepromChip = ADDIDATA_9054, 554 .i_NbrAiChannel = 16, 555 .i_NbrAiChannelDiff = 8, 556 .i_AiChannelList = 16, 557 .i_NbrAoChannel = 4, 558 .i_AiMaxdata = 65535, 559 .i_AoMaxdata = 4095, 560 .pr_AiRangelist = &range_apci3XXX_ai, 561 .pr_AoRangelist = &range_apci3XXX_ao, 562 .i_NbrDiChannel = 4, 563 .i_NbrDoChannel = 4, 564 .i_DoMaxdata = 1, 565 .i_NbrTTLChannel = 24, 566 .b_AvailableConvertUnit = 6, 567 .ui_MinAcquisitiontimeNs = 5000, 568 .interrupt = v_APCI3XXX_Interrupt, 569 .reset = i_APCI3XXX_Reset, 570 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 571 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 572 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 573 .di_bits = apci3xxx_di_insn_bits, 574 .do_bits = apci3xxx_do_insn_bits, 575 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 576 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 577 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 578 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 579 }, { 580 .pc_DriverName = "apci3116-8-4", 581 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 582 .i_DeviceId = 0x3023, 583 .i_IorangeBase0 = 256, 584 .i_IorangeBase1 = 256, 585 .i_IorangeBase2 = 256, 586 .i_IorangeBase3 = 256, 587 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 588 .pc_EepromChip = ADDIDATA_9054, 589 .i_NbrAiChannel = 8, 590 .i_NbrAiChannelDiff = 4, 591 .i_AiChannelList = 8, 592 .i_NbrAoChannel = 4, 593 .i_AiMaxdata = 65535, 594 .i_AoMaxdata = 4095, 595 .pr_AiRangelist = &range_apci3XXX_ai, 596 .pr_AoRangelist = &range_apci3XXX_ao, 597 .i_NbrDiChannel = 4, 598 .i_NbrDoChannel = 4, 599 .i_DoMaxdata = 1, 600 .i_NbrTTLChannel = 24, 601 .b_AvailableConvertUnit = 6, 602 .ui_MinAcquisitiontimeNs = 5000, 603 .interrupt = v_APCI3XXX_Interrupt, 604 .reset = i_APCI3XXX_Reset, 605 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 606 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 607 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 608 .di_bits = apci3xxx_di_insn_bits, 609 .do_bits = apci3xxx_do_insn_bits, 610 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 611 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 612 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 613 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 614 }, { 615 .pc_DriverName = "apci3003", 616 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 617 .i_DeviceId = 0x300B, 618 .i_IorangeBase0 = 256, 619 .i_IorangeBase1 = 256, 620 .i_IorangeBase2 = 256, 621 .i_IorangeBase3 = 256, 622 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 623 .pc_EepromChip = ADDIDATA_9054, 624 .i_NbrAiChannelDiff = 4, 625 .i_AiChannelList = 4, 626 .i_AiMaxdata = 65535, 627 .pr_AiRangelist = &range_apci3XXX_ai, 628 .i_NbrDiChannel = 4, 629 .i_NbrDoChannel = 4, 630 .i_DoMaxdata = 1, 631 .b_AvailableConvertUnit = 7, 632 .ui_MinAcquisitiontimeNs = 2500, 633 .interrupt = v_APCI3XXX_Interrupt, 634 .reset = i_APCI3XXX_Reset, 635 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 636 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 637 .di_bits = apci3xxx_di_insn_bits, 638 .do_bits = apci3xxx_do_insn_bits, 639 }, { 640 .pc_DriverName = "apci3002-16", 641 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 642 .i_DeviceId = 0x3002, 643 .i_IorangeBase0 = 256, 644 .i_IorangeBase1 = 256, 645 .i_IorangeBase2 = 256, 646 .i_IorangeBase3 = 256, 647 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 648 .pc_EepromChip = ADDIDATA_9054, 649 .i_NbrAiChannelDiff = 16, 650 .i_AiChannelList = 16, 651 .i_AiMaxdata = 65535, 652 .pr_AiRangelist = &range_apci3XXX_ai, 653 .i_NbrDiChannel = 4, 654 .i_NbrDoChannel = 4, 655 .i_DoMaxdata = 1, 656 .b_AvailableConvertUnit = 6, 657 .ui_MinAcquisitiontimeNs = 5000, 658 .interrupt = v_APCI3XXX_Interrupt, 659 .reset = i_APCI3XXX_Reset, 660 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 661 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 662 .di_bits = apci3xxx_di_insn_bits, 663 .do_bits = apci3xxx_do_insn_bits, 664 }, { 665 .pc_DriverName = "apci3002-8", 666 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 667 .i_DeviceId = 0x3003, 668 .i_IorangeBase0 = 256, 669 .i_IorangeBase1 = 256, 670 .i_IorangeBase2 = 256, 671 .i_IorangeBase3 = 256, 672 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 673 .pc_EepromChip = ADDIDATA_9054, 674 .i_NbrAiChannelDiff = 8, 675 .i_AiChannelList = 8, 676 .i_AiMaxdata = 65535, 677 .pr_AiRangelist = &range_apci3XXX_ai, 678 .i_NbrDiChannel = 4, 679 .i_NbrDoChannel = 4, 680 .i_DoMaxdata = 1, 681 .b_AvailableConvertUnit = 6, 682 .ui_MinAcquisitiontimeNs = 5000, 683 .interrupt = v_APCI3XXX_Interrupt, 684 .reset = i_APCI3XXX_Reset, 685 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 686 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 687 .di_bits = apci3xxx_di_insn_bits, 688 .do_bits = apci3xxx_do_insn_bits, 689 }, { 690 .pc_DriverName = "apci3002-4", 691 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 692 .i_DeviceId = 0x3004, 693 .i_IorangeBase0 = 256, 694 .i_IorangeBase1 = 256, 695 .i_IorangeBase2 = 256, 696 .i_IorangeBase3 = 256, 697 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 698 .pc_EepromChip = ADDIDATA_9054, 699 .i_NbrAiChannelDiff = 4, 700 .i_AiChannelList = 4, 701 .i_AiMaxdata = 65535, 702 .pr_AiRangelist = &range_apci3XXX_ai, 703 .i_NbrDiChannel = 4, 704 .i_NbrDoChannel = 4, 705 .i_DoMaxdata = 1, 706 .b_AvailableConvertUnit = 6, 707 .ui_MinAcquisitiontimeNs = 5000, 708 .interrupt = v_APCI3XXX_Interrupt, 709 .reset = i_APCI3XXX_Reset, 710 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 711 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 712 .di_bits = apci3xxx_di_insn_bits, 713 .do_bits = apci3xxx_do_insn_bits, 714 }, { 715 .pc_DriverName = "apci3500", 716 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 717 .i_DeviceId = 0x3024, 718 .i_IorangeBase0 = 256, 719 .i_IorangeBase1 = 256, 720 .i_IorangeBase2 = 256, 721 .i_IorangeBase3 = 256, 722 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 723 .pc_EepromChip = ADDIDATA_9054, 724 .i_NbrAoChannel = 4, 725 .i_AoMaxdata = 4095, 726 .pr_AoRangelist = &range_apci3XXX_ao, 727 .i_NbrTTLChannel = 24, 728 .interrupt = v_APCI3XXX_Interrupt, 729 .reset = i_APCI3XXX_Reset, 730 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 731 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 732 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 733 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 734 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 735 }, 736}; 737 738static struct comedi_driver apci3xxx_driver = { 739 .driver_name = "addi_apci_3xxx", 740 .module = THIS_MODULE, 741 .auto_attach = addi_auto_attach, 742 .detach = i_ADDI_Detach, 743 .num_names = ARRAY_SIZE(apci3xxx_boardtypes), 744 .board_name = &apci3xxx_boardtypes[0].pc_DriverName, 745 .offset = sizeof(struct addi_board), 746}; 747 748static int __devinit apci3xxx_pci_probe(struct pci_dev *dev, 749 const struct pci_device_id *ent) 750{ 751 return comedi_pci_auto_config(dev, &apci3xxx_driver); 752} 753 754static void __devexit apci3xxx_pci_remove(struct pci_dev *dev) 755{ 756 comedi_pci_auto_unconfig(dev); 757} 758 759static DEFINE_PCI_DEVICE_TABLE(apci3xxx_pci_table) = { 760 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3010) }, 761 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300f) }, 762 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300e) }, 763 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3013) }, 764 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3014) }, 765 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3015) }, 766 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3016) }, 767 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3017) }, 768 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3018) }, 769 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3019) }, 770 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301a) }, 771 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301b) }, 772 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301c) }, 773 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301d) }, 774 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301e) }, 775 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301f) }, 776 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3020) }, 777 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3021) }, 778 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3022) }, 779 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3023) }, 780 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300B) }, 781 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3002) }, 782 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3003) }, 783 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3004) }, 784 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3024) }, 785 { 0 } 786}; 787MODULE_DEVICE_TABLE(pci, apci3xxx_pci_table); 788 789static struct pci_driver apci3xxx_pci_driver = { 790 .name = "addi_apci_3xxx", 791 .id_table = apci3xxx_pci_table, 792 .probe = apci3xxx_pci_probe, 793 .remove = __devexit_p(apci3xxx_pci_remove), 794}; 795module_comedi_pci_driver(apci3xxx_driver, apci3xxx_pci_driver); 796 797MODULE_AUTHOR("Comedi http://www.comedi.org"); 798MODULE_DESCRIPTION("Comedi low-level driver"); 799MODULE_LICENSE("GPL"); 800