addi_apci_3xxx.c revision 5c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1
15c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten/* 25c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * addi_apci_3xxx.c 35c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. 45c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * Project manager: S. Weber 55c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * 65c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * ADDI-DATA GmbH 75c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * Dieselstrasse 3 85c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * D-77833 Ottersweier 95c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * Tel: +19(0)7223/9493-0 105c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * Fax: +49(0)7223/9493-92 115c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * http://www.addi-data.com 125c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * info@addi-data.com 135c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * 145c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * This program is free software; you can redistribute it and/or modify it 155c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * under the terms of the GNU General Public License as published by the 165c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * Free Software Foundation; either version 2 of the License, or (at your 175c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * option) any later version. 185c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * 195c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * This program is distributed in the hope that it will be useful, but WITHOUT 205c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 215c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 225c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten * more details. 235c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten */ 245c70cbfb3a8ebfaac5f3588840fcbf71c3cc02a1H Hartley Sweeten 2533782dd5edf8db3cdb7c81a3523bf743dd0209b7H Hartley Sweeten#include <linux/pci.h> 261867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten#include <linux/interrupt.h> 271867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten#include <linux/sched.h> 2833782dd5edf8db3cdb7c81a3523bf743dd0209b7H Hartley Sweeten 293d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten#include "../comedidev.h" 303d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten 3198a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweetenstatic const struct comedi_lrange apci3xxx_ai_range = { 3298a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten 8, { 3398a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten BIP_RANGE(10), 3498a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten BIP_RANGE(5), 3598a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten BIP_RANGE(2), 3698a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten BIP_RANGE(1), 3798a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten UNI_RANGE(10), 3898a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten UNI_RANGE(5), 3998a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten UNI_RANGE(2), 4098a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten UNI_RANGE(1) 4198a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten } 4298a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten}; 4398a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten 4498a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweetenstatic const struct comedi_lrange apci3xxx_ao_range = { 4598a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten 2, { 4698a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten BIP_RANGE(10), 4798a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten UNI_RANGE(10) 4898a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten } 4998a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten}; 5098a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten 51dbae4575661da840353f12dd76499ad587c92519H Hartley Sweetenenum apci3xxx_boardid { 52dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3000_16, 53dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3000_8, 54dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3000_4, 55dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3006_16, 56dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3006_8, 57dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3006_4, 58dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3010_16, 59dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3010_8, 60dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3010_4, 61dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3016_16, 62dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3016_8, 63dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3016_4, 64dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3100_16_4, 65dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3100_8_4, 66dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3106_16_4, 67dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3106_8_4, 68dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3110_16_4, 69dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3110_8_4, 70dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3116_16_4, 71dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3116_8_4, 72dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3003, 73dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3002_16, 74dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3002_8, 75dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3002_4, 76dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten BOARD_APCI3500, 77dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten}; 78dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten 79e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweetenstruct apci3xxx_boardinfo { 80e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten const char *pc_DriverName; 81e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten int i_IorangeBase1; 82e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten int i_NbrAiChannel; 83e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten int i_NbrAiChannelDiff; 84e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten int i_AiChannelList; 85e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten int i_NbrAoChannel; 86e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten int i_AiMaxdata; 87e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten int i_AoMaxdata; 88e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten int i_NbrDiChannel; 89e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten int i_NbrDoChannel; 90e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten int i_NbrTTLChannel; 91e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten unsigned char b_AvailableConvertUnit; 92e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten unsigned int ui_MinAcquisitiontimeNs; 93e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten}; 94e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten 95e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweetenstatic const struct apci3xxx_boardinfo apci3xxx_boardtypes[] = { 96dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3000_16] = { 97c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3000-16", 98c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 99c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 100c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 101c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 102c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 103c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 104c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 105c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 106dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 107dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3000_8] = { 108c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3000-8", 109c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 110c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 111c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 112c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 113c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 114c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 115c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 116c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 117dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 118dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3000_4] = { 119c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3000-4", 120c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 121c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 4, 122c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 2, 123c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 124c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 125c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 126c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 127c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 128dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 129dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3006_16] = { 130c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3006-16", 131c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 132c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 133c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 134c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 135c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 136c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 137c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 138c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 139dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 140dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3006_8] = { 141c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3006-8", 142c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 143c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 144c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 145c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 146c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 147c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 148c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 149c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 150dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 151dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3006_4] = { 152c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3006-4", 153c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 154c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 4, 155c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 2, 156c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 157c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 158c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 159c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 160c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 161dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 162dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3010_16] = { 163c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3010-16", 164c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 165c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 166c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 167c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 168c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 169c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 170c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 171c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 172c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 173c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 174dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 175dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3010_8] = { 176c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3010-8", 177c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 178c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 179c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 180c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 181c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 182c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 183c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 184c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 185c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 186c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 187dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 188dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3010_4] = { 189c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3010-4", 190c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 191c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 4, 192c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 2, 193c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 194c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 195c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 196c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 197c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 198c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 199c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 200dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 201dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3016_16] = { 202c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3016-16", 203c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 204c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 205c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 206c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 207c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 208c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 209c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 210c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 211c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 212c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 213dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 214dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3016_8] = { 215c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3016-8", 216c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 217c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 218c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 219c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 220c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 221c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 222c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 223c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 224c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 225c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 226dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 227dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3016_4] = { 228c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3016-4", 229c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 230c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 4, 231c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 2, 232c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 233c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 234c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 235c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 236c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 237c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 238c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 239dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 240dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3100_16_4] = { 241c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3100-16-4", 242c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 243c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 244c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 245c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 246c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 247c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 248c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 249c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 250c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 251c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 252dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 253dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3100_8_4] = { 254c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3100-8-4", 255c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 256c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 257c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 258c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 259c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 260c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 261c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 262c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 263c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 264c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 265dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 266dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3106_16_4] = { 267c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3106-16-4", 268c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 269c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 270c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 271c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 272c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 273c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 274c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 275c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 276c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 277c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 278dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 279dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3106_8_4] = { 280c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3106-8-4", 281c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 282c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 283c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 284c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 285c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 286c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 287c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 288c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 289c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 290c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 10000, 291dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 292dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3110_16_4] = { 293c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3110-16-4", 294c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 295c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 296c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 297c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 298c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 299c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 300c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 301c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 302c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 303c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 304c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 305c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 306dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 307dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3110_8_4] = { 308c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3110-8-4", 309c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 310c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 311c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 312c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 313c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 314c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 4095, 315c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 316c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 317c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 318c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 319c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 320c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 321dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 322dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3116_16_4] = { 323c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3116-16-4", 324c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 325c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 16, 326c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 327c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 328c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 329c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 330c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 331c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 332c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 333c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 334c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 335c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 336dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 337dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3116_8_4] = { 338c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3116-8-4", 339c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 340c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannel = 8, 341c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 342c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 343c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 344c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 345c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 346c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 347c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 348c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 349c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 350c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 351dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 352dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3003] = { 353c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3003", 354c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 355c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 356c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 357c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 358c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 359c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 360c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 7, 361c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 2500, 362dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 363dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3002_16] = { 364c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3002-16", 365c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 366c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 16, 367c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 16, 368c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 369c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 370c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 371c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 372c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 373dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 374dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3002_8] = { 375c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3002-8", 376c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 377c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 8, 378c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 8, 379c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 380c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 381c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 382c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 383c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 384dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 385dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3002_4] = { 386c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3002-4", 387c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 388c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAiChannelDiff = 4, 389c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiChannelList = 4, 390c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AiMaxdata = 65535, 391c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDiChannel = 4, 392c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrDoChannel = 4, 393c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .b_AvailableConvertUnit = 6, 394c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .ui_MinAcquisitiontimeNs = 5000, 395dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten }, 396dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten [BOARD_APCI3500] = { 397c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .pc_DriverName = "apci3500", 398c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_IorangeBase1 = 256, 399c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrAoChannel = 4, 400c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_AoMaxdata = 4095, 401c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten .i_NbrTTLChannel = 24, 402c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten }, 403c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten}; 404c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten 4051867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweetenstruct apci3xxx_private { 4061867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten int iobase; 4071867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten int i_IobaseReserved; 4081867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten void __iomem *dw_AiBase; 4091867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten unsigned char b_AiInitialisation; 4101867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten unsigned int ui_AiNbrofChannels; /* how many channels is measured */ 4111867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten unsigned int ui_AiReadData[32]; 4121867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten unsigned char b_EocEosInterrupt; 4131867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten unsigned int ui_EocEosConversionTime; 4141867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten unsigned char b_EocEosConversionTimeBase; 4151867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten unsigned char b_SingelDiff; 4161867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten struct task_struct *tsk_Current; 4171867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten unsigned int ul_TTLPortConfiguration[10]; 4181867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten}; 4191867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten 420e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten#include "addi-data/hwdrv_apci3xxx.c" 421e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten 4226c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweetenstatic irqreturn_t apci3xxx_irq_handler(int irq, void *d) 4236c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten{ 4246c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten struct comedi_device *dev = d; 4251867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten struct apci3xxx_private *devpriv = dev->private; 4266c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten unsigned int status; 4276c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten int i; 4286c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten 4296c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten /* Test if interrupt occur */ 4306c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten status = readl(devpriv->dw_AiBase + 16); 4316c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten if ((status & 0x2) == 0x2) { 4326c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten /* Reset the interrupt */ 4336c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten writel(status, devpriv->dw_AiBase + 16); 4346c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten 4356c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten /* Test if interrupt enabled */ 4366c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten if (devpriv->b_EocEosInterrupt == 1) { 4376c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten /* Read all analog inputs value */ 4386c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten for (i = 0; i < devpriv->ui_AiNbrofChannels; i++) { 4396c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten unsigned int val; 4406c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten 4416c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten val = readl(devpriv->dw_AiBase + 28); 4426c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten devpriv->ui_AiReadData[i] = val; 4436c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten } 4446c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten 4456c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten /* Set the interrupt flag */ 4466c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten devpriv->b_EocEosInterrupt = 2; 4476c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten 4486c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten /* Send a signal to from kernel to user space */ 4496c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten send_sig(SIGIO, devpriv->tsk_Current, 0); 4506c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten } 4516c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten } 4526c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten return IRQ_RETVAL(1); 4536c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten} 4546c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten 455ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweetenstatic int apci3xxx_di_insn_bits(struct comedi_device *dev, 456ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten struct comedi_subdevice *s, 457ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten struct comedi_insn *insn, 458ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten unsigned int *data) 459ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten{ 4601867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten struct apci3xxx_private *devpriv = dev->private; 461ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten 462ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten data[1] = inl(devpriv->iobase + 32) & 0xf; 463ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten 464ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten return insn->n; 465ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten} 466ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten 467c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweetenstatic int apci3xxx_do_insn_bits(struct comedi_device *dev, 468c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten struct comedi_subdevice *s, 469c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten struct comedi_insn *insn, 470c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten unsigned int *data) 471c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten{ 4721867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten struct apci3xxx_private *devpriv = dev->private; 473c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten unsigned int mask = data[0]; 474c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten unsigned int bits = data[1]; 475c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten 476c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten s->state = inl(devpriv->iobase + 48) & 0xf; 477c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten if (mask) { 478c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten s->state &= ~mask; 479c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten s->state |= (bits & mask); 480c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten 481c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten outl(s->state, devpriv->iobase + 48); 482c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten } 483c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten 484c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten data[1] = s->state; 485c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten 486c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten return insn->n; 487c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten} 488c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten 4895e72c7a50709e60663217704b30501bf34afa448H Hartley Sweetenstatic int apci3xxx_reset(struct comedi_device *dev) 49098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten{ 4911867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten struct apci3xxx_private *devpriv = dev->private; 4925e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten unsigned int val; 4935e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten int i; 4945e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 4955e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Disable the interrupt */ 4965e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten disable_irq(dev->irq); 4975e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 4985e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Reset the interrupt flag */ 4995e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten devpriv->b_EocEosInterrupt = 0; 5005e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 5015e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Clear the start command */ 5025e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten writel(0, devpriv->dw_AiBase + 8); 5035e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 5045e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Reset the interrupt flags */ 5055e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten val = readl(devpriv->dw_AiBase + 16); 5065e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten writel(val, devpriv->dw_AiBase + 16); 5075e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 5085e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* clear the EOS */ 5095e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten readl(devpriv->dw_AiBase + 20); 5105e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 5115e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Clear the FIFO */ 5125e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten for (i = 0; i < 16; i++) 5135e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten val = readl(devpriv->dw_AiBase + 28); 5145e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten 5155e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten /* Enable the interrupt */ 5165e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten enable_irq(dev->irq); 51798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 51898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return 0; 51998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten} 52098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 521dbae4575661da840353f12dd76499ad587c92519H Hartley Sweetenstatic int apci3xxx_auto_attach(struct comedi_device *dev, 522dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten unsigned long context) 523dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten{ 52498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten struct pci_dev *pcidev = comedi_to_pci_dev(dev); 525e053b2419f5f0cff8ced6a8e39a93d113d9cd86aH Hartley Sweeten const struct apci3xxx_boardinfo *board = NULL; 5261867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten struct apci3xxx_private *devpriv; 52798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten struct comedi_subdevice *s; 52898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten int ret, n_subdevices; 529dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten 530dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten if (context < ARRAY_SIZE(apci3xxx_boardtypes)) 531dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten board = &apci3xxx_boardtypes[context]; 532dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten if (!board) 533dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten return -ENODEV; 534dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten dev->board_ptr = board; 53598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->board_name = board->pc_DriverName; 53698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 53798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL); 53898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (!devpriv) 53998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return -ENOMEM; 54098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->private = devpriv; 54198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 54298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten ret = comedi_pci_enable(dev); 54398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (ret) 54498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return ret; 54598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 5462107347327f7bfd47e6af9fe0510a1750f10f884H Hartley Sweeten /* board has an ADDIDATA_9054 eeprom */ 5472107347327f7bfd47e6af9fe0510a1750f10f884H Hartley Sweeten dev->iobase = pci_resource_start(pcidev, 2); 5482107347327f7bfd47e6af9fe0510a1750f10f884H Hartley Sweeten devpriv->iobase = pci_resource_start(pcidev, 2); 5492107347327f7bfd47e6af9fe0510a1750f10f884H Hartley Sweeten devpriv->dw_AiBase = pci_ioremap_bar(pcidev, 3); 55098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->i_IobaseReserved = pci_resource_start(pcidev, 3); 55198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 55298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (pcidev->irq > 0) { 5536c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten ret = request_irq(pcidev->irq, apci3xxx_irq_handler, 5546c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten IRQF_SHARED, dev->board_name, dev); 55598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (ret == 0) 55698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->irq = pcidev->irq; 55798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 55898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 55998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten n_subdevices = 7; 56098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten ret = comedi_alloc_subdevices(dev, n_subdevices); 56198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (ret) 56298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return ret; 56398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 56498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise AI Subdevice Structures */ 56598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[0]; 566f57b428c006486c951188354732b469b4b4a1af7H Hartley Sweeten if (board->i_NbrAiChannel || board->i_NbrAiChannelDiff) { 56798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten dev->read_subdev = s; 56898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_AI; 56998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = SDF_READABLE | SDF_COMMON | SDF_GROUND | 57098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten SDF_DIFF; 571f57b428c006486c951188354732b469b4b4a1af7H Hartley Sweeten if (board->i_NbrAiChannel) { 572f57b428c006486c951188354732b469b4b4a1af7H Hartley Sweeten s->n_chan = board->i_NbrAiChannel; 57398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->b_SingelDiff = 0; 57498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 57598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->n_chan = board->i_NbrAiChannelDiff; 57698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->b_SingelDiff = 1; 57798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 578f57b428c006486c951188354732b469b4b4a1af7H Hartley Sweeten s->maxdata = board->i_AiMaxdata; 57998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->len_chanlist = board->i_AiChannelList; 58098a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten s->range_table = &apci3xxx_ai_range; 58198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 58298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Set the initialisation flag */ 58398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten devpriv->b_AiInitialisation = 1; 58498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 585b9671585a9974abf448fb349083aea655b9235bfH Hartley Sweeten s->insn_config = i_APCI3XXX_InsnConfigAnalogInput; 586b9671585a9974abf448fb349083aea655b9235bfH Hartley Sweeten s->insn_read = i_APCI3XXX_InsnReadAnalogInput; 58798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 58898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 58998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 59098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 59198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 59298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise AO Subdevice Structures */ 59398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[1]; 594f57b428c006486c951188354732b469b4b4a1af7H Hartley Sweeten if (board->i_NbrAoChannel) { 59598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_AO; 59698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON; 597f57b428c006486c951188354732b469b4b4a1af7H Hartley Sweeten s->n_chan = board->i_NbrAoChannel; 598f57b428c006486c951188354732b469b4b4a1af7H Hartley Sweeten s->maxdata = board->i_AoMaxdata; 59998a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten s->range_table = &apci3xxx_ao_range; 600b9671585a9974abf448fb349083aea655b9235bfH Hartley Sweeten s->insn_write = i_APCI3XXX_InsnWriteAnalogOutput; 60198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 60298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 60398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 60498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise DI Subdevice Structures */ 60598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[2]; 606f57b428c006486c951188354732b469b4b4a1af7H Hartley Sweeten if (board->i_NbrDiChannel) { 60798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_DI; 60898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_COMMON; 609f57b428c006486c951188354732b469b4b4a1af7H Hartley Sweeten s->n_chan = board->i_NbrDiChannel; 61098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->maxdata = 1; 61198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->range_table = &range_digital; 61298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->io_bits = 0; /* all bits input */ 613ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten s->insn_bits = apci3xxx_di_insn_bits; 61498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 61598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 61698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 61798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise DO Subdevice Structures */ 61898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[3]; 619f57b428c006486c951188354732b469b4b4a1af7H Hartley Sweeten if (board->i_NbrDoChannel) { 62098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_DO; 62198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = 62298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten SDF_READABLE | SDF_WRITEABLE | SDF_GROUND | SDF_COMMON; 623f57b428c006486c951188354732b469b4b4a1af7H Hartley Sweeten s->n_chan = board->i_NbrDoChannel; 62456e18770ae2991d315c4e164fab47171fc74c96aH Hartley Sweeten s->maxdata = 1; 62598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->range_table = &range_digital; 62698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->io_bits = 0xf; /* all bits output */ 627c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten s->insn_bits = apci3xxx_do_insn_bits; 62898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 62998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 63098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 63198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 63298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise Timer Subdevice Structures */ 63398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[4]; 634178bd8d3a61432ce24399604b13cc756293d1ac8H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 63598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 63698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* Allocate and Initialise TTL */ 63798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[5]; 63898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (board->i_NbrTTLChannel) { 639641abdac09f30d3c1bf99f5a938b61336ced7988H Hartley Sweeten s->type = COMEDI_SUBD_DIO; 64098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->subdev_flags = 64198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten SDF_WRITEABLE | SDF_READABLE | SDF_GROUND | SDF_COMMON; 64298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->n_chan = board->i_NbrTTLChannel; 64398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->maxdata = 1; 64498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->io_bits = 0; /* all bits input */ 64598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->len_chanlist = board->i_NbrTTLChannel; 64698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->range_table = &range_digital; 647b9671585a9974abf448fb349083aea655b9235bfH Hartley Sweeten s->insn_config = i_APCI3XXX_InsnConfigInitTTLIO; 648b9671585a9974abf448fb349083aea655b9235bfH Hartley Sweeten s->insn_bits = i_APCI3XXX_InsnBitsTTLIO; 649b9671585a9974abf448fb349083aea655b9235bfH Hartley Sweeten s->insn_read = i_APCI3XXX_InsnReadTTLIO; 650b9671585a9974abf448fb349083aea655b9235bfH Hartley Sweeten s->insn_write = i_APCI3XXX_InsnWriteTTLIO; 65198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } else { 65298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 65398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 65498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 65598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten /* EEPROM */ 65698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten s = &dev->subdevices[6]; 65793c0dc284dff2e2fec320662d8ef01b933096e36H Hartley Sweeten s->type = COMEDI_SUBD_UNUSED; 65898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 6595e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten apci3xxx_reset(dev); 66098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten return 0; 66198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten} 66298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten 66398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweetenstatic void apci3xxx_detach(struct comedi_device *dev) 66498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten{ 6651867add98e44d4bec01572b4cfd4becd11297e5dH Hartley Sweeten struct apci3xxx_private *devpriv = dev->private; 666dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten 66798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (devpriv) { 66898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (dev->iobase) 6695e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten apci3xxx_reset(dev); 67098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (dev->irq) 67198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten free_irq(dev->irq, dev); 67298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten if (devpriv->dw_AiBase) 67398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten iounmap(devpriv->dw_AiBase); 67498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten } 67598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten comedi_pci_disable(dev); 676dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten} 677dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten 67820a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenstatic struct comedi_driver apci3xxx_driver = { 67920a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten .driver_name = "addi_apci_3xxx", 68020a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten .module = THIS_MODULE, 681dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten .auto_attach = apci3xxx_auto_attach, 68298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten .detach = apci3xxx_detach, 68320a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten}; 68420a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten 685a690b7e535f2f97a3a05ee570715abeb60a8910fBill Pembertonstatic int apci3xxx_pci_probe(struct pci_dev *dev, 686b8f4ac237e382accd4b30c75043939f7ed9e79a6H Hartley Sweeten const struct pci_device_id *id) 68720a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten{ 688b8f4ac237e382accd4b30c75043939f7ed9e79a6H Hartley Sweeten return comedi_pci_auto_config(dev, &apci3xxx_driver, id->driver_data); 68920a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten} 69020a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten 69120a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenstatic DEFINE_PCI_DEVICE_TABLE(apci3xxx_pci_table) = { 692dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3010), BOARD_APCI3000_16 }, 693dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x300f), BOARD_APCI3000_8 }, 694dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x300e), BOARD_APCI3000_4 }, 695dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3013), BOARD_APCI3006_16 }, 696dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3014), BOARD_APCI3006_8 }, 697dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3015), BOARD_APCI3006_4 }, 698dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3016), BOARD_APCI3010_16 }, 699dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3017), BOARD_APCI3010_8 }, 700dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3018), BOARD_APCI3010_4 }, 701dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3019), BOARD_APCI3016_16 }, 702dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301a), BOARD_APCI3016_8 }, 703dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301b), BOARD_APCI3016_4 }, 704dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301c), BOARD_APCI3100_16_4 }, 705dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301d), BOARD_APCI3100_8_4 }, 706dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301e), BOARD_APCI3106_16_4 }, 707dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x301f), BOARD_APCI3106_8_4 }, 708dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3020), BOARD_APCI3110_16_4 }, 709dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3021), BOARD_APCI3110_8_4 }, 710dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3022), BOARD_APCI3116_16_4 }, 711dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3023), BOARD_APCI3116_8_4 }, 712dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x300B), BOARD_APCI3003 }, 713dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3002), BOARD_APCI3002_16 }, 714dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3003), BOARD_APCI3002_8 }, 715dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3004), BOARD_APCI3002_4 }, 716dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten { PCI_VDEVICE(ADDIDATA, 0x3024), BOARD_APCI3500 }, 717317285d71acccbda2fbab7e53d6b33c52a151a32H Hartley Sweeten { 0 } 718317285d71acccbda2fbab7e53d6b33c52a151a32H Hartley Sweeten}; 71920a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley SweetenMODULE_DEVICE_TABLE(pci, apci3xxx_pci_table); 720317285d71acccbda2fbab7e53d6b33c52a151a32H Hartley Sweeten 72120a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenstatic struct pci_driver apci3xxx_pci_driver = { 72220a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten .name = "addi_apci_3xxx", 72320a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten .id_table = apci3xxx_pci_table, 72420a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten .probe = apci3xxx_pci_probe, 7259901a4d75d007686e8f6473189cafc4b216b7449Peter Huewe .remove = comedi_pci_auto_unconfig, 72620a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten}; 72720a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenmodule_comedi_pci_driver(apci3xxx_driver, apci3xxx_pci_driver); 72890f703d30dd3e0c16ff80f35e34e511385a05ad5Arun Thomas 72990f703d30dd3e0c16ff80f35e34e511385a05ad5Arun ThomasMODULE_AUTHOR("Comedi http://www.comedi.org"); 73090f703d30dd3e0c16ff80f35e34e511385a05ad5Arun ThomasMODULE_DESCRIPTION("Comedi low-level driver"); 73190f703d30dd3e0c16ff80f35e34e511385a05ad5Arun ThomasMODULE_LICENSE("GPL"); 732