addi_apci_3xxx.c revision bf36f012c7ddaff083bb0ef187feddf4d85507a0
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_read = i_APCI3XXX_InsnReadDigitalInput, 194 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 195 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 196 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 197 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 198 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 199 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 200 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 201 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 202 }, { 203 .pc_DriverName = "apci3010-8", 204 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 205 .i_DeviceId = 0x3017, 206 .i_IorangeBase0 = 256, 207 .i_IorangeBase1 = 256, 208 .i_IorangeBase2 = 256, 209 .i_IorangeBase3 = 256, 210 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 211 .pc_EepromChip = ADDIDATA_9054, 212 .i_NbrAiChannel = 8, 213 .i_NbrAiChannelDiff = 4, 214 .i_AiChannelList = 8, 215 .i_AiMaxdata = 4095, 216 .pr_AiRangelist = &range_apci3XXX_ai, 217 .i_NbrDiChannel = 4, 218 .i_NbrDoChannel = 4, 219 .i_DoMaxdata = 1, 220 .i_NbrTTLChannel = 24, 221 .b_AvailableConvertUnit = 6, 222 .ui_MinAcquisitiontimeNs = 5000, 223 .interrupt = v_APCI3XXX_Interrupt, 224 .reset = i_APCI3XXX_Reset, 225 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 226 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 227 .di_read = i_APCI3XXX_InsnReadDigitalInput, 228 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 229 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 230 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 231 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 232 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 233 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 234 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 235 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 236 }, { 237 .pc_DriverName = "apci3010-4", 238 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 239 .i_DeviceId = 0x3018, 240 .i_IorangeBase0 = 256, 241 .i_IorangeBase1 = 256, 242 .i_IorangeBase2 = 256, 243 .i_IorangeBase3 = 256, 244 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 245 .pc_EepromChip = ADDIDATA_9054, 246 .i_NbrAiChannel = 4, 247 .i_NbrAiChannelDiff = 2, 248 .i_AiChannelList = 4, 249 .i_AiMaxdata = 4095, 250 .pr_AiRangelist = &range_apci3XXX_ai, 251 .i_NbrDiChannel = 4, 252 .i_NbrDoChannel = 4, 253 .i_DoMaxdata = 1, 254 .i_NbrTTLChannel = 24, 255 .b_AvailableConvertUnit = 6, 256 .ui_MinAcquisitiontimeNs = 5000, 257 .interrupt = v_APCI3XXX_Interrupt, 258 .reset = i_APCI3XXX_Reset, 259 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 260 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 261 .di_read = i_APCI3XXX_InsnReadDigitalInput, 262 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 263 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 264 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 265 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 266 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 267 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 268 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 269 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 270 }, { 271 .pc_DriverName = "apci3016-16", 272 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 273 .i_DeviceId = 0x3019, 274 .i_IorangeBase0 = 256, 275 .i_IorangeBase1 = 256, 276 .i_IorangeBase2 = 256, 277 .i_IorangeBase3 = 256, 278 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 279 .pc_EepromChip = ADDIDATA_9054, 280 .i_NbrAiChannel = 16, 281 .i_NbrAiChannelDiff = 8, 282 .i_AiChannelList = 16, 283 .i_AiMaxdata = 65535, 284 .pr_AiRangelist = &range_apci3XXX_ai, 285 .i_NbrDiChannel = 4, 286 .i_NbrDoChannel = 4, 287 .i_DoMaxdata = 1, 288 .i_NbrTTLChannel = 24, 289 .b_AvailableConvertUnit = 6, 290 .ui_MinAcquisitiontimeNs = 5000, 291 .interrupt = v_APCI3XXX_Interrupt, 292 .reset = i_APCI3XXX_Reset, 293 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 294 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 295 .di_read = i_APCI3XXX_InsnReadDigitalInput, 296 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 297 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 298 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 299 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 300 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 301 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 302 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 303 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 304 }, { 305 .pc_DriverName = "apci3016-8", 306 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 307 .i_DeviceId = 0x301A, 308 .i_IorangeBase0 = 256, 309 .i_IorangeBase1 = 256, 310 .i_IorangeBase2 = 256, 311 .i_IorangeBase3 = 256, 312 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 313 .pc_EepromChip = ADDIDATA_9054, 314 .i_NbrAiChannel = 8, 315 .i_NbrAiChannelDiff = 4, 316 .i_AiChannelList = 8, 317 .i_AiMaxdata = 65535, 318 .pr_AiRangelist = &range_apci3XXX_ai, 319 .i_NbrDiChannel = 4, 320 .i_NbrDoChannel = 4, 321 .i_DoMaxdata = 1, 322 .i_NbrTTLChannel = 24, 323 .b_AvailableConvertUnit = 6, 324 .ui_MinAcquisitiontimeNs = 5000, 325 .interrupt = v_APCI3XXX_Interrupt, 326 .reset = i_APCI3XXX_Reset, 327 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 328 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 329 .di_read = i_APCI3XXX_InsnReadDigitalInput, 330 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 331 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 332 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 333 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 334 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 335 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 336 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 337 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 338 }, { 339 .pc_DriverName = "apci3016-4", 340 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 341 .i_DeviceId = 0x301B, 342 .i_IorangeBase0 = 256, 343 .i_IorangeBase1 = 256, 344 .i_IorangeBase2 = 256, 345 .i_IorangeBase3 = 256, 346 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 347 .pc_EepromChip = ADDIDATA_9054, 348 .i_NbrAiChannel = 4, 349 .i_NbrAiChannelDiff = 2, 350 .i_AiChannelList = 4, 351 .i_AiMaxdata = 65535, 352 .pr_AiRangelist = &range_apci3XXX_ai, 353 .i_NbrDiChannel = 4, 354 .i_NbrDoChannel = 4, 355 .i_DoMaxdata = 1, 356 .i_NbrTTLChannel = 24, 357 .b_AvailableConvertUnit = 6, 358 .ui_MinAcquisitiontimeNs = 5000, 359 .interrupt = v_APCI3XXX_Interrupt, 360 .reset = i_APCI3XXX_Reset, 361 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 362 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 363 .di_read = i_APCI3XXX_InsnReadDigitalInput, 364 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 365 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 366 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 367 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 368 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 369 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 370 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 371 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 372 }, { 373 .pc_DriverName = "apci3100-16-4", 374 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 375 .i_DeviceId = 0x301C, 376 .i_IorangeBase0 = 256, 377 .i_IorangeBase1 = 256, 378 .i_IorangeBase2 = 256, 379 .i_IorangeBase3 = 256, 380 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 381 .pc_EepromChip = ADDIDATA_9054, 382 .i_NbrAiChannel = 16, 383 .i_NbrAiChannelDiff = 8, 384 .i_AiChannelList = 16, 385 .i_NbrAoChannel = 4, 386 .i_AiMaxdata = 4095, 387 .i_AoMaxdata = 4095, 388 .pr_AiRangelist = &range_apci3XXX_ai, 389 .pr_AoRangelist = &range_apci3XXX_ao, 390 .i_NbrTTLChannel = 24, 391 .b_AvailableConvertUnit = 6, 392 .ui_MinAcquisitiontimeNs = 10000, 393 .interrupt = v_APCI3XXX_Interrupt, 394 .reset = i_APCI3XXX_Reset, 395 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 396 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 397 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 398 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 399 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 400 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 401 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 402 }, { 403 .pc_DriverName = "apci3100-8-4", 404 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 405 .i_DeviceId = 0x301D, 406 .i_IorangeBase0 = 256, 407 .i_IorangeBase1 = 256, 408 .i_IorangeBase2 = 256, 409 .i_IorangeBase3 = 256, 410 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 411 .pc_EepromChip = ADDIDATA_9054, 412 .i_NbrAiChannel = 8, 413 .i_NbrAiChannelDiff = 4, 414 .i_AiChannelList = 8, 415 .i_NbrAoChannel = 4, 416 .i_AiMaxdata = 4095, 417 .i_AoMaxdata = 4095, 418 .pr_AiRangelist = &range_apci3XXX_ai, 419 .pr_AoRangelist = &range_apci3XXX_ao, 420 .i_NbrTTLChannel = 24, 421 .b_AvailableConvertUnit = 6, 422 .ui_MinAcquisitiontimeNs = 10000, 423 .interrupt = v_APCI3XXX_Interrupt, 424 .reset = i_APCI3XXX_Reset, 425 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 426 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 427 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 428 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 429 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 430 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 431 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 432 }, { 433 .pc_DriverName = "apci3106-16-4", 434 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 435 .i_DeviceId = 0x301E, 436 .i_IorangeBase0 = 256, 437 .i_IorangeBase1 = 256, 438 .i_IorangeBase2 = 256, 439 .i_IorangeBase3 = 256, 440 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 441 .pc_EepromChip = ADDIDATA_9054, 442 .i_NbrAiChannel = 16, 443 .i_NbrAiChannelDiff = 8, 444 .i_AiChannelList = 16, 445 .i_NbrAoChannel = 4, 446 .i_AiMaxdata = 65535, 447 .i_AoMaxdata = 4095, 448 .pr_AiRangelist = &range_apci3XXX_ai, 449 .pr_AoRangelist = &range_apci3XXX_ao, 450 .i_NbrTTLChannel = 24, 451 .b_AvailableConvertUnit = 6, 452 .ui_MinAcquisitiontimeNs = 10000, 453 .interrupt = v_APCI3XXX_Interrupt, 454 .reset = i_APCI3XXX_Reset, 455 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 456 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 457 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 458 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 459 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 460 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 461 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 462 }, { 463 .pc_DriverName = "apci3106-8-4", 464 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 465 .i_DeviceId = 0x301F, 466 .i_IorangeBase0 = 256, 467 .i_IorangeBase1 = 256, 468 .i_IorangeBase2 = 256, 469 .i_IorangeBase3 = 256, 470 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 471 .pc_EepromChip = ADDIDATA_9054, 472 .i_NbrAiChannel = 8, 473 .i_NbrAiChannelDiff = 4, 474 .i_AiChannelList = 8, 475 .i_NbrAoChannel = 4, 476 .i_AiMaxdata = 65535, 477 .i_AoMaxdata = 4095, 478 .pr_AiRangelist = &range_apci3XXX_ai, 479 .pr_AoRangelist = &range_apci3XXX_ao, 480 .i_NbrTTLChannel = 24, 481 .b_AvailableConvertUnit = 6, 482 .ui_MinAcquisitiontimeNs = 10000, 483 .interrupt = v_APCI3XXX_Interrupt, 484 .reset = i_APCI3XXX_Reset, 485 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 486 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 487 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 488 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 489 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 490 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 491 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 492 }, { 493 .pc_DriverName = "apci3110-16-4", 494 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 495 .i_DeviceId = 0x3020, 496 .i_IorangeBase0 = 256, 497 .i_IorangeBase1 = 256, 498 .i_IorangeBase2 = 256, 499 .i_IorangeBase3 = 256, 500 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 501 .pc_EepromChip = ADDIDATA_9054, 502 .i_NbrAiChannel = 16, 503 .i_NbrAiChannelDiff = 8, 504 .i_AiChannelList = 16, 505 .i_NbrAoChannel = 4, 506 .i_AiMaxdata = 4095, 507 .i_AoMaxdata = 4095, 508 .pr_AiRangelist = &range_apci3XXX_ai, 509 .pr_AoRangelist = &range_apci3XXX_ao, 510 .i_NbrDiChannel = 4, 511 .i_NbrDoChannel = 4, 512 .i_DoMaxdata = 1, 513 .i_NbrTTLChannel = 24, 514 .b_AvailableConvertUnit = 6, 515 .ui_MinAcquisitiontimeNs = 5000, 516 .interrupt = v_APCI3XXX_Interrupt, 517 .reset = i_APCI3XXX_Reset, 518 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 519 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 520 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 521 .di_read = i_APCI3XXX_InsnReadDigitalInput, 522 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 523 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 524 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 525 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 526 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 527 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 528 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 529 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 530 }, { 531 .pc_DriverName = "apci3110-8-4", 532 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 533 .i_DeviceId = 0x3021, 534 .i_IorangeBase0 = 256, 535 .i_IorangeBase1 = 256, 536 .i_IorangeBase2 = 256, 537 .i_IorangeBase3 = 256, 538 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 539 .pc_EepromChip = ADDIDATA_9054, 540 .i_NbrAiChannel = 8, 541 .i_NbrAiChannelDiff = 4, 542 .i_AiChannelList = 8, 543 .i_NbrAoChannel = 4, 544 .i_AiMaxdata = 4095, 545 .i_AoMaxdata = 4095, 546 .pr_AiRangelist = &range_apci3XXX_ai, 547 .pr_AoRangelist = &range_apci3XXX_ao, 548 .i_NbrDiChannel = 4, 549 .i_NbrDoChannel = 4, 550 .i_DoMaxdata = 1, 551 .i_NbrTTLChannel = 24, 552 .b_AvailableConvertUnit = 6, 553 .ui_MinAcquisitiontimeNs = 5000, 554 .interrupt = v_APCI3XXX_Interrupt, 555 .reset = i_APCI3XXX_Reset, 556 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 557 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 558 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 559 .di_read = i_APCI3XXX_InsnReadDigitalInput, 560 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 561 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 562 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 563 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 564 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 565 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 566 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 567 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 568 }, { 569 .pc_DriverName = "apci3116-16-4", 570 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 571 .i_DeviceId = 0x3022, 572 .i_IorangeBase0 = 256, 573 .i_IorangeBase1 = 256, 574 .i_IorangeBase2 = 256, 575 .i_IorangeBase3 = 256, 576 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 577 .pc_EepromChip = ADDIDATA_9054, 578 .i_NbrAiChannel = 16, 579 .i_NbrAiChannelDiff = 8, 580 .i_AiChannelList = 16, 581 .i_NbrAoChannel = 4, 582 .i_AiMaxdata = 65535, 583 .i_AoMaxdata = 4095, 584 .pr_AiRangelist = &range_apci3XXX_ai, 585 .pr_AoRangelist = &range_apci3XXX_ao, 586 .i_NbrDiChannel = 4, 587 .i_NbrDoChannel = 4, 588 .i_DoMaxdata = 1, 589 .i_NbrTTLChannel = 24, 590 .b_AvailableConvertUnit = 6, 591 .ui_MinAcquisitiontimeNs = 5000, 592 .interrupt = v_APCI3XXX_Interrupt, 593 .reset = i_APCI3XXX_Reset, 594 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 595 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 596 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 597 .di_read = i_APCI3XXX_InsnReadDigitalInput, 598 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 599 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 600 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 601 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 602 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 603 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 604 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 605 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 606 }, { 607 .pc_DriverName = "apci3116-8-4", 608 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 609 .i_DeviceId = 0x3023, 610 .i_IorangeBase0 = 256, 611 .i_IorangeBase1 = 256, 612 .i_IorangeBase2 = 256, 613 .i_IorangeBase3 = 256, 614 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 615 .pc_EepromChip = ADDIDATA_9054, 616 .i_NbrAiChannel = 8, 617 .i_NbrAiChannelDiff = 4, 618 .i_AiChannelList = 8, 619 .i_NbrAoChannel = 4, 620 .i_AiMaxdata = 65535, 621 .i_AoMaxdata = 4095, 622 .pr_AiRangelist = &range_apci3XXX_ai, 623 .pr_AoRangelist = &range_apci3XXX_ao, 624 .i_NbrDiChannel = 4, 625 .i_NbrDoChannel = 4, 626 .i_DoMaxdata = 1, 627 .i_NbrTTLChannel = 24, 628 .b_AvailableConvertUnit = 6, 629 .ui_MinAcquisitiontimeNs = 5000, 630 .interrupt = v_APCI3XXX_Interrupt, 631 .reset = i_APCI3XXX_Reset, 632 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 633 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 634 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 635 .di_read = i_APCI3XXX_InsnReadDigitalInput, 636 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 637 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 638 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 639 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 640 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 641 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 642 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 643 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 644 }, { 645 .pc_DriverName = "apci3003", 646 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 647 .i_DeviceId = 0x300B, 648 .i_IorangeBase0 = 256, 649 .i_IorangeBase1 = 256, 650 .i_IorangeBase2 = 256, 651 .i_IorangeBase3 = 256, 652 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 653 .pc_EepromChip = ADDIDATA_9054, 654 .i_NbrAiChannelDiff = 4, 655 .i_AiChannelList = 4, 656 .i_AiMaxdata = 65535, 657 .pr_AiRangelist = &range_apci3XXX_ai, 658 .i_NbrDiChannel = 4, 659 .i_NbrDoChannel = 4, 660 .i_DoMaxdata = 1, 661 .b_AvailableConvertUnit = 7, 662 .ui_MinAcquisitiontimeNs = 2500, 663 .interrupt = v_APCI3XXX_Interrupt, 664 .reset = i_APCI3XXX_Reset, 665 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 666 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 667 .di_read = i_APCI3XXX_InsnReadDigitalInput, 668 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 669 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 670 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 671 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 672 }, { 673 .pc_DriverName = "apci3002-16", 674 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 675 .i_DeviceId = 0x3002, 676 .i_IorangeBase0 = 256, 677 .i_IorangeBase1 = 256, 678 .i_IorangeBase2 = 256, 679 .i_IorangeBase3 = 256, 680 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 681 .pc_EepromChip = ADDIDATA_9054, 682 .i_NbrAiChannelDiff = 16, 683 .i_AiChannelList = 16, 684 .i_AiMaxdata = 65535, 685 .pr_AiRangelist = &range_apci3XXX_ai, 686 .i_NbrDiChannel = 4, 687 .i_NbrDoChannel = 4, 688 .i_DoMaxdata = 1, 689 .b_AvailableConvertUnit = 6, 690 .ui_MinAcquisitiontimeNs = 5000, 691 .interrupt = v_APCI3XXX_Interrupt, 692 .reset = i_APCI3XXX_Reset, 693 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 694 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 695 .di_read = i_APCI3XXX_InsnReadDigitalInput, 696 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 697 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 698 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 699 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 700 }, { 701 .pc_DriverName = "apci3002-8", 702 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 703 .i_DeviceId = 0x3003, 704 .i_IorangeBase0 = 256, 705 .i_IorangeBase1 = 256, 706 .i_IorangeBase2 = 256, 707 .i_IorangeBase3 = 256, 708 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 709 .pc_EepromChip = ADDIDATA_9054, 710 .i_NbrAiChannelDiff = 8, 711 .i_AiChannelList = 8, 712 .i_AiMaxdata = 65535, 713 .pr_AiRangelist = &range_apci3XXX_ai, 714 .i_NbrDiChannel = 4, 715 .i_NbrDoChannel = 4, 716 .i_DoMaxdata = 1, 717 .b_AvailableConvertUnit = 6, 718 .ui_MinAcquisitiontimeNs = 5000, 719 .interrupt = v_APCI3XXX_Interrupt, 720 .reset = i_APCI3XXX_Reset, 721 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 722 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 723 .di_read = i_APCI3XXX_InsnReadDigitalInput, 724 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 725 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 726 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 727 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 728 }, { 729 .pc_DriverName = "apci3002-4", 730 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 731 .i_DeviceId = 0x3004, 732 .i_IorangeBase0 = 256, 733 .i_IorangeBase1 = 256, 734 .i_IorangeBase2 = 256, 735 .i_IorangeBase3 = 256, 736 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 737 .pc_EepromChip = ADDIDATA_9054, 738 .i_NbrAiChannelDiff = 4, 739 .i_AiChannelList = 4, 740 .i_AiMaxdata = 65535, 741 .pr_AiRangelist = &range_apci3XXX_ai, 742 .i_NbrDiChannel = 4, 743 .i_NbrDoChannel = 4, 744 .i_DoMaxdata = 1, 745 .b_AvailableConvertUnit = 6, 746 .ui_MinAcquisitiontimeNs = 5000, 747 .interrupt = v_APCI3XXX_Interrupt, 748 .reset = i_APCI3XXX_Reset, 749 .ai_config = i_APCI3XXX_InsnConfigAnalogInput, 750 .ai_read = i_APCI3XXX_InsnReadAnalogInput, 751 .di_read = i_APCI3XXX_InsnReadDigitalInput, 752 .di_bits = i_APCI3XXX_InsnBitsDigitalInput, 753 .do_write = i_APCI3XXX_InsnWriteDigitalOutput, 754 .do_bits = i_APCI3XXX_InsnBitsDigitalOutput, 755 .do_read = i_APCI3XXX_InsnReadDigitalOutput, 756 }, { 757 .pc_DriverName = "apci3500", 758 .i_VendorId = PCI_VENDOR_ID_ADDIDATA, 759 .i_DeviceId = 0x3024, 760 .i_IorangeBase0 = 256, 761 .i_IorangeBase1 = 256, 762 .i_IorangeBase2 = 256, 763 .i_IorangeBase3 = 256, 764 .i_PCIEeprom = ADDIDATA_NO_EEPROM, 765 .pc_EepromChip = ADDIDATA_9054, 766 .i_NbrAoChannel = 4, 767 .i_AoMaxdata = 4095, 768 .pr_AoRangelist = &range_apci3XXX_ao, 769 .i_NbrTTLChannel = 24, 770 .interrupt = v_APCI3XXX_Interrupt, 771 .reset = i_APCI3XXX_Reset, 772 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput, 773 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO, 774 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO, 775 .ttl_read = i_APCI3XXX_InsnReadTTLIO, 776 .ttl_write = i_APCI3XXX_InsnWriteTTLIO, 777 }, 778}; 779 780static struct comedi_driver apci3xxx_driver = { 781 .driver_name = "addi_apci_3xxx", 782 .module = THIS_MODULE, 783 .attach_pci = addi_attach_pci, 784 .detach = i_ADDI_Detach, 785 .num_names = ARRAY_SIZE(apci3xxx_boardtypes), 786 .board_name = &apci3xxx_boardtypes[0].pc_DriverName, 787 .offset = sizeof(struct addi_board), 788}; 789 790static int __devinit apci3xxx_pci_probe(struct pci_dev *dev, 791 const struct pci_device_id *ent) 792{ 793 return comedi_pci_auto_config(dev, &apci3xxx_driver); 794} 795 796static void __devexit apci3xxx_pci_remove(struct pci_dev *dev) 797{ 798 comedi_pci_auto_unconfig(dev); 799} 800 801static DEFINE_PCI_DEVICE_TABLE(apci3xxx_pci_table) = { 802 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3010) }, 803 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300f) }, 804 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300e) }, 805 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3013) }, 806 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3014) }, 807 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3015) }, 808 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3016) }, 809 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3017) }, 810 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3018) }, 811 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3019) }, 812 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301a) }, 813 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301b) }, 814 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301c) }, 815 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301d) }, 816 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301e) }, 817 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301f) }, 818 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3020) }, 819 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3021) }, 820 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3022) }, 821 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3023) }, 822 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300B) }, 823 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3002) }, 824 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3003) }, 825 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3004) }, 826 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3024) }, 827 { 0 } 828}; 829MODULE_DEVICE_TABLE(pci, apci3xxx_pci_table); 830 831static struct pci_driver apci3xxx_pci_driver = { 832 .name = "addi_apci_3xxx", 833 .id_table = apci3xxx_pci_table, 834 .probe = apci3xxx_pci_probe, 835 .remove = __devexit_p(apci3xxx_pci_remove), 836}; 837module_comedi_pci_driver(apci3xxx_driver, apci3xxx_pci_driver); 838 839MODULE_AUTHOR("Comedi http://www.comedi.org"); 840MODULE_DESCRIPTION("Comedi low-level driver"); 841MODULE_LICENSE("GPL"); 842