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