1e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*
2e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    me4000.h
3e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    Register descriptions and defines for the ME-4000 board family
4e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
5e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    COMEDI - Linux Control and Measurement Device Interface
6e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    Copyright (C) 1998-9 David A. Schleef <ds@schleef.org>
7e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
8e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    This program is free software; you can redistribute it and/or modify
9e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    it under the terms of the GNU General Public License as published by
10e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    the Free Software Foundation; either version 2 of the License, or
11e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    (at your option) any later version.
12e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
13e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    This program is distributed in the hope that it will be useful,
14e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    but WITHOUT ANY WARRANTY; without even the implied warranty of
15e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    GNU General Public License for more details.
17e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
18e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    You should have received a copy of the GNU General Public License
19e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    along with this program; if not, write to the Free Software
20e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
22e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt*/
23e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
24e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#ifndef _ME4000_H_
25e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define _ME4000_H_
26e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
27e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
28e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Debug section
29e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
30e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
31b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#undef ME4000_CALL_DEBUG	/*  Debug function entry and exit */
32b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#undef ME4000_PORT_DEBUG	/*  Debug port access */
33b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#undef ME4000_ISR_DEBUG		/*  Debug the interrupt service routine */
34b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#undef ME4000_DEBUG		/*  General purpose debug masseges */
35e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
36e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#ifdef ME4000_CALL_DEBUG
37e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#undef CALL_PDEBUG
38e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define CALL_PDEBUG(fmt, args...) printk(KERN_DEBUG"comedi%d: me4000: " fmt, dev->minor, ##args)
39e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#else
40b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton# define CALL_PDEBUG(fmt, args...)	/*  no debugging, do nothing */
41e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#endif
42e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
43e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#ifdef ME4000_PORT_DEBUG
44e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#undef PORT_PDEBUG
45e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define PORT_PDEBUG(fmt, args...) printk(KERN_DEBUG"comedi%d: me4000: " fmt, dev->minor,  ##args)
46e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#else
47b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PORT_PDEBUG(fmt, args...)	/*  no debugging, do nothing */
48e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#endif
49e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
50e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#ifdef ME4000_ISR_DEBUG
51e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#undef ISR_PDEBUG
52e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ISR_PDEBUG(fmt, args...) printk(KERN_DEBUG"comedi%d: me4000: " fmt, dev->minor,  ##args)
53e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#else
54b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ISR_PDEBUG(fmt, args...)	/*  no debugging, do nothing */
55e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#endif
56e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
57e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#ifdef ME4000_DEBUG
58e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#undef PDEBUG
59e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define PDEBUG(fmt, args...) printk(KERN_DEBUG"comedi%d: me4000: " fmt, dev->minor,  ##args)
60e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#else
61b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PDEBUG(fmt, args...)	/*  no debugging, do nothing */
62e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#endif
63e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
64e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
65e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  PCI vendor and device IDs
66e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
67e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
68e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define PCI_VENDOR_ID_MEILHAUS 0x1402
69e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
70b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4650	0x4650	/*  Low Cost version */
71e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
72b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4660	0x4660	/*  Standard version */
73b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4660I	0x4661	/*  Isolated version */
74b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4660S	0x4662	/*  Standard version with Sample and Hold */
75b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4660IS	0x4663	/*  Isolated version with Sample and Hold */
76e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
77b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4670	0x4670	/*  Standard version */
78b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4670I	0x4671	/*  Isolated version */
79b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4670S	0x4672	/*  Standard version with Sample and Hold */
80b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4670IS	0x4673	/*  Isolated version with Sample and Hold */
81e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
82b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4680	0x4680	/*  Standard version */
83b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4680I	0x4681	/*  Isolated version */
84b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4680S	0x4682	/*  Standard version with Sample and Hold */
85b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PCI_DEVICE_ID_MEILHAUS_ME4680IS	0x4683	/*  Isolated version with Sample and Hold */
86e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
87e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
88e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ME-4000 base register offsets
89e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
90e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
91b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_00_CTRL_REG			0x00	/*  R/W */
92b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_00_STATUS_REG			0x04	/*  R/_ */
93b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_00_FIFO_REG			0x08	/*  _/W */
94b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_00_SINGLE_REG			0x0C	/*  R/W */
95b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_00_TIMER_REG			0x10	/*  _/W */
96b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton
97b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_01_CTRL_REG			0x18	/*  R/W */
98b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_01_STATUS_REG			0x1C	/*  R/_ */
99b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_01_FIFO_REG			0x20	/*  _/W */
100b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_01_SINGLE_REG			0x24	/*  R/W */
101b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_01_TIMER_REG			0x28	/*  _/W */
102b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton
103b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_02_CTRL_REG			0x30	/*  R/W */
104b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_02_STATUS_REG			0x34	/*  R/_ */
105b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_02_FIFO_REG			0x38	/*  _/W */
106b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_02_SINGLE_REG			0x3C	/*  R/W */
107b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_02_TIMER_REG			0x40	/*  _/W */
108b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton
109b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_03_CTRL_REG			0x48	/*  R/W */
110b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_03_STATUS_REG			0x4C	/*  R/_ */
111b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_03_FIFO_REG			0x50	/*  _/W */
112b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_03_SINGLE_REG			0x54	/*  R/W */
113b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_03_TIMER_REG			0x58	/*  _/W */
114b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton
115b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_CTRL_REG			0x74	/*  _/W */
116b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_STATUS_REG			0x74	/*  R/_ */
117b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_CHANNEL_LIST_REG		0x78	/*  _/W */
118b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_DATA_REG			0x7C	/*  R/_ */
119b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_CHAN_TIMER_REG		0x80	/*  _/W */
120b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_CHAN_PRE_TIMER_REG		0x84	/*  _/W */
121b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_SCAN_TIMER_LOW_REG		0x88	/*  _/W */
122b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_SCAN_TIMER_HIGH_REG		0x8C	/*  _/W */
123b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_SCAN_PRE_TIMER_LOW_REG	0x90	/*  _/W */
124b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_SCAN_PRE_TIMER_HIGH_REG	0x94	/*  _/W */
125b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_START_REG			0x98	/*  R/_ */
126b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton
127b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_IRQ_STATUS_REG			0x9C	/*  R/_ */
128b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton
129b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_DIO_PORT_0_REG			0xA0	/*  R/W */
130b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_DIO_PORT_1_REG			0xA4	/*  R/W */
131b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_DIO_PORT_2_REG			0xA8	/*  R/W */
132b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_DIO_PORT_3_REG			0xAC	/*  R/W */
133b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_DIO_DIR_REG			0xB0	/*  R/W */
134b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton
135b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_LOADSETREG_XX			0xB4	/*  R/W */
136b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton
137b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_DIO_CTRL_REG			0xB8	/*  R/W */
138b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton
139b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AO_DEMUX_ADJUST_REG		0xBC	/*  -/W */
140b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton
141b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_SAMPLE_COUNTER_REG		0xC0	/*  _/W */
142e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
143e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
144e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Value to adjust Demux
145e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
146e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
147e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_DEMUX_ADJUST_VALUE            0x4C
148e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
149e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
150e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Counter base register offsets
151e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
152e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
153e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_CNT_COUNTER_0_REG		0x00
154e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_CNT_COUNTER_1_REG		0x01
155e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_CNT_COUNTER_2_REG		0x02
156e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_CNT_CTRL_REG			0x03
157e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
158e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
159e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  PLX base register offsets
160e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
161e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
162b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PLX_INTCSR	0x4C	/*  Interrupt control and status register */
163b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PLX_ICR		0x50	/*  Initialization control register */
164e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
165e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
166e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Bits for the PLX_ICSR register
167e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
168e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
169b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PLX_INTCSR_LOCAL_INT1_EN             0x01	/*  If set, local interrupt 1 is enabled (r/w) */
170b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PLX_INTCSR_LOCAL_INT1_POL            0x02	/*  If set, local interrupt 1 polarity is active high (r/w) */
171b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PLX_INTCSR_LOCAL_INT1_STATE          0x04	/*  If set, local interrupt 1 is active (r/_) */
172b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PLX_INTCSR_LOCAL_INT2_EN             0x08	/*  If set, local interrupt 2 is enabled (r/w) */
173b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PLX_INTCSR_LOCAL_INT2_POL            0x10	/*  If set, local interrupt 2 polarity is active high (r/w) */
174b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PLX_INTCSR_LOCAL_INT2_STATE          0x20	/*  If set, local interrupt 2 is active  (r/_) */
175b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PLX_INTCSR_PCI_INT_EN                0x40	/*  If set, PCI interrupt is enabled (r/w) */
176b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define PLX_INTCSR_SOFT_INT                  0x80	/*  If set, a software interrupt is generated (r/w) */
177e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
178e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
179e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Bits for the PLX_ICR register
180e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
181e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
182e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define PLX_ICR_BIT_EEPROM_CLOCK_SET		0x01000000
183e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define PLX_ICR_BIT_EEPROM_CHIP_SELECT		0x02000000
184e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define PLX_ICR_BIT_EEPROM_WRITE		0x04000000
185e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define PLX_ICR_BIT_EEPROM_READ			0x08000000
186e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define PLX_ICR_BIT_EEPROM_VALID		0x10000000
187e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
188e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define PLX_ICR_MASK_EEPROM			0x1F000000
189e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
190e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define EEPROM_DELAY				1
191e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
192e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
193e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Bits for the ME4000_AO_CTRL_REG register
194e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
195e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
196e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_CTRL_BIT_MODE_0		0x001
197e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_CTRL_BIT_MODE_1		0x002
198e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_CTRL_MASK_MODE		0x003
199e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_CTRL_BIT_STOP			0x004
200e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_CTRL_BIT_ENABLE_FIFO		0x008
201e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_CTRL_BIT_ENABLE_EX_TRIG	0x010
202e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_CTRL_BIT_EX_TRIG_EDGE		0x020
203e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_CTRL_BIT_IMMEDIATE_STOP	0x080
204e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_CTRL_BIT_ENABLE_DO		0x100
205e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_CTRL_BIT_ENABLE_IRQ		0x200
206e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_CTRL_BIT_RESET_IRQ		0x400
207e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
208e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
209e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Bits for the ME4000_AO_STATUS_REG register
210e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
211e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
212e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_STATUS_BIT_FSM		0x01
213e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_STATUS_BIT_FF			0x02
214e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_STATUS_BIT_HF			0x04
215e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AO_STATUS_BIT_EF			0x08
216e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
217e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
218e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Bits for the ME4000_AI_CTRL_REG register
219e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
220e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
221e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_MODE_0		0x00000001
222e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_MODE_1		0x00000002
223e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_MODE_2		0x00000004
224e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_SAMPLE_HOLD		0x00000008
225e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_IMMEDIATE_STOP	0x00000010
226e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_STOP			0x00000020
227e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_CHANNEL_FIFO		0x00000040
228e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_DATA_FIFO		0x00000080
229e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_FULLSCALE		0x00000100
230e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_OFFSET		0x00000200
231e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_EX_TRIG_ANALOG	0x00000400
232e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_EX_TRIG		0x00000800
233e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_EX_TRIG_FALLING	0x00001000
234e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_EX_IRQ		0x00002000
235e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_EX_IRQ_RESET		0x00004000
236e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_LE_IRQ		0x00008000
237e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_LE_IRQ_RESET		0x00010000
238e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_HF_IRQ		0x00020000
239e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_HF_IRQ_RESET		0x00040000
240e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_SC_IRQ		0x00080000
241e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_SC_IRQ_RESET		0x00100000
242e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_SC_RELOAD		0x00200000
243e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CTRL_BIT_EX_TRIG_BOTH		0x80000000
244e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
245e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
246e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Bits for the ME4000_AI_STATUS_REG register
247e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
248e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
249e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_STATUS_BIT_EF_CHANNEL		0x00400000
250e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_STATUS_BIT_HF_CHANNEL		0x00800000
251e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_STATUS_BIT_FF_CHANNEL		0x01000000
252e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_STATUS_BIT_EF_DATA		0x02000000
253e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_STATUS_BIT_HF_DATA		0x04000000
254e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_STATUS_BIT_FF_DATA		0x08000000
255e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_STATUS_BIT_LE			0x10000000
256e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_STATUS_BIT_FSM		0x20000000
257e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
258e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
259e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Bits for the ME4000_IRQ_STATUS_REG register
260e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
261e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
262e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_IRQ_STATUS_BIT_EX		0x01
263e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_IRQ_STATUS_BIT_LE		0x02
264e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_IRQ_STATUS_BIT_AI_HF		0x04
265e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_IRQ_STATUS_BIT_AO_0_HF		0x08
266e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_IRQ_STATUS_BIT_AO_1_HF		0x10
267e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_IRQ_STATUS_BIT_AO_2_HF		0x20
268e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_IRQ_STATUS_BIT_AO_3_HF		0x40
269e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_IRQ_STATUS_BIT_SC		0x80
270e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
271e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
272e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Bits for the ME4000_DIO_CTRL_REG register
273e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
274e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
275e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_MODE_0		0x0001
276e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_MODE_1		0x0002
277e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_MODE_2		0x0004
278e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_MODE_3		0x0008
279e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_MODE_4		0x0010
280e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_MODE_5		0x0020
281e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_MODE_6		0x0040
282e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_MODE_7		0x0080
283e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
284e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_FUNCTION_0		0x0100
285e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_FUNCTION_1		0x0200
286e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
287e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_FIFO_HIGH_0		0x0400
288e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_FIFO_HIGH_1		0x0800
289e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_FIFO_HIGH_2		0x1000
290e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_DIO_CTRL_BIT_FIFO_HIGH_3		0x2000
291e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
292e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
293e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Information about the hardware capabilities
294e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
295e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
2968d95123295fde18ac22cfeb8eaa0dcc05898b35bBill Pembertonstruct me4000_ao_info {
297e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	int count;
298e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	int fifo_count;
2998d95123295fde18ac22cfeb8eaa0dcc05898b35bBill Pemberton};
300e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
3010c18e8c046b5ec21e9e0b458807db260309a8f5dBill Pembertonstruct me4000_ai_info {
302e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	int count;
303e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	int sh_count;
304e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	int diff_count;
305e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	int ex_trig_analog;
3060c18e8c046b5ec21e9e0b458807db260309a8f5dBill Pemberton};
307e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
308e81d65b30ccc3f663f7bb3158567c247c3084eceBill Pembertonstruct me4000_dio_info {
309e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	int count;
310e81d65b30ccc3f663f7bb3158567c247c3084eceBill Pemberton};
311e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
31279dcd042246ea49879bc9c15ed6592848f2f3828Bill Pembertonstruct me4000_cnt_info {
313e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	int count;
31479dcd042246ea49879bc9c15ed6592848f2f3828Bill Pemberton};
315e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
31627f4caaa3b27badb3e245a50b09ba35f040f3a77Bill Pembertonstruct me4000_board {
317e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	const char *name;
318e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned short device_id;
3198d95123295fde18ac22cfeb8eaa0dcc05898b35bBill Pemberton	struct me4000_ao_info ao;
3200c18e8c046b5ec21e9e0b458807db260309a8f5dBill Pemberton	struct me4000_ai_info ai;
321e81d65b30ccc3f663f7bb3158567c247c3084eceBill Pemberton	struct me4000_dio_info dio;
32279dcd042246ea49879bc9c15ed6592848f2f3828Bill Pemberton	struct me4000_cnt_info cnt;
32327f4caaa3b27badb3e245a50b09ba35f040f3a77Bill Pemberton};
324e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
32527f4caaa3b27badb3e245a50b09ba35f040f3a77Bill Pemberton#define thisboard ((const struct me4000_board *)dev->board_ptr)
326e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
327e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*=============================================================================
328e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Global board and subdevice information structures
329e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  ===========================================================================*/
330e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
33121921108bef40b75495301f5dd3d992ed66a7ba8Bill Pembertonstruct me4000_ao_context {
332e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	int irq;
333e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
334b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned long mirror;	/*  Store the last written value */
335e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
336e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long ctrl_reg;
337e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long status_reg;
338e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long fifo_reg;
339e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long single_reg;
340e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long timer_reg;
341e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long irq_status_reg;
342e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long preload_reg;
34321921108bef40b75495301f5dd3d992ed66a7ba8Bill Pemberton};
344e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
3458b95a0e17f416e1db80c26ecd8f3e894ad271d0bBill Pembertonstruct me4000_ai_context {
346e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	int irq;
347e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
348e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long ctrl_reg;
349e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long status_reg;
350e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long channel_list_reg;
351e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long data_reg;
352e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long chan_timer_reg;
353e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long chan_pre_timer_reg;
354e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long scan_timer_low_reg;
355e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long scan_timer_high_reg;
356e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long scan_pre_timer_low_reg;
357e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long scan_pre_timer_high_reg;
358e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long start_reg;
359e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long irq_status_reg;
360e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long sample_counter_reg;
3618b95a0e17f416e1db80c26ecd8f3e894ad271d0bBill Pemberton};
362e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
363ff585603bdca766398e24037e9375b76507e2e60Bill Pembertonstruct me4000_dio_context {
364e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long dir_reg;
365e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long ctrl_reg;
366e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long port_0_reg;
367e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long port_1_reg;
368e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long port_2_reg;
369e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long port_3_reg;
370ff585603bdca766398e24037e9375b76507e2e60Bill Pemberton};
371e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
372126974dc8c432535f9eef36956056b88a153bfb3Bill Pembertonstruct me4000_cnt_context {
373e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long ctrl_reg;
374e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long counter_0_reg;
375e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long counter_1_reg;
376e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt	unsigned long counter_2_reg;
377126974dc8c432535f9eef36956056b88a153bfb3Bill Pemberton};
378e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
37963aa142aca0e4b63347e91b8c6909fbad7e7c7acBill Pembertonstruct me4000_info {
380b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned long plx_regbase;	/*  PLX configuration space base address */
381b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned long me4000_regbase;	/*  Base address of the ME4000 */
382b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned long timer_regbase;	/*  Base address of the timer circuit */
383b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned long program_regbase;	/*  Base address to set the program pin for the xilinx */
384e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
385b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned long plx_regbase_size;	/*  PLX register set space */
386b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned long me4000_regbase_size;	/*  ME4000 register set space */
387b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned long timer_regbase_size;	/*  Timer circuit register set space */
388b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned long program_regbase_size;	/*  Size of program base address of the ME4000 */
389e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
390b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned int serial_no;	/*  Serial number of the board */
391b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned char hw_revision;	/*  Hardware revision of the board */
392b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned short vendor_id;	/*  Meilhaus vendor id */
393b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned short device_id;	/*  Device id */
394e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
395b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	struct pci_dev *pci_dev_p;	/*  General PCI information */
396e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
397b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	unsigned int irq;	/*  IRQ assigned from the PCI BIOS */
398e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
399b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	struct me4000_ai_context ai_context;	/*  Analog input  specific context */
400b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	struct me4000_ao_context ao_context[4];	/*  Vector with analog output specific context */
401b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	struct me4000_dio_context dio_context;	/*  Digital I/O specific context */
402b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton	struct me4000_cnt_context cnt_context;	/*  Counter specific context */
40363aa142aca0e4b63347e91b8c6909fbad7e7c7acBill Pemberton};
404e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
40563aa142aca0e4b63347e91b8c6909fbad7e7c7acBill Pemberton#define info	((struct me4000_info *)dev->private)
406e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
407e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*-----------------------------------------------------------------------------
408e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Defines for analog input
409e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt ----------------------------------------------------------------------------*/
410e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
411e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/* General stuff */
412e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_FIFO_COUNT			2048
413e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
414e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_MIN_TICKS			66
415b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_AI_MIN_SAMPLE_TIME		2000	/*  Minimum sample time [ns] */
416e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_BASE_FREQUENCY		(unsigned int) 33E6
417e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
418e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/* Channel list defines and masks */
419e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_CHANNEL_LIST_COUNT		1024
420e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
421e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_LIST_INPUT_SINGLE_ENDED	0x000
422e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_LIST_INPUT_DIFFERENTIAL	0x020
423e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
424e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_LIST_RANGE_BIPOLAR_10		0x000
425e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_LIST_RANGE_BIPOLAR_2_5	0x040
426e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_LIST_RANGE_UNIPOLAR_10	0x080
427e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_LIST_RANGE_UNIPOLAR_2_5	0x0C0
428e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
429e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_AI_LIST_LAST_ENTRY		0x100
430e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
431e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt/*-----------------------------------------------------------------------------
432e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt  Defines for counters
433e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt ----------------------------------------------------------------------------*/
434e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
435e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_CNT_COUNTER_0  0x00
436e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_CNT_COUNTER_1  0x40
437e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#define ME4000_CNT_COUNTER_2  0x80
438e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
439b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_CNT_MODE_0     0x00	/*  Change state if zero crossing */
440b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_CNT_MODE_1     0x02	/*  Retriggerable One-Shot */
441b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_CNT_MODE_2     0x04	/*  Asymmetrical divider */
442b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_CNT_MODE_3     0x06	/*  Symmetrical divider */
443b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_CNT_MODE_4     0x08	/*  Counter start by software trigger */
444b6c777571b8d387d3add91170826f32a379e4313Bill Pemberton#define ME4000_CNT_MODE_5     0x0A	/*  Counter start by hardware trigger */
445e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt
446e55c95a3be5e202f0fc30126aff172c706b304f8Guenter Gebhardt#endif
447