Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6
[pandora-kernel.git] / drivers / staging / comedi / drivers / addi-data / APCI1710_INCCPT.h
1 /*
2  * Copyright (C) 2004,2005  ADDI-DATA GmbH for the source code of this module.
3  *
4  *      ADDI-DATA GmbH
5  *      Dieselstrasse 3
6  *      D-77833 Ottersweier
7  *      Tel: +19(0)7223/9493-0
8  *      Fax: +49(0)7223/9493-92
9  *      http://www.addi-data.com
10  *      info@addi-data.com
11  *
12  * This program is free software; you can redistribute it and/or modify it
13  * under the terms of the GNU General Public License as published by the Free
14  * Software Foundation; either version 2 of the License, or (at your option)
15  * any later version.
16  */
17
18 #define APCI1710_16BIT_COUNTER                  0x10
19 #define APCI1710_32BIT_COUNTER                  0x0
20 #define APCI1710_QUADRUPLE_MODE                 0x0
21 #define APCI1710_DOUBLE_MODE                    0x3
22 #define APCI1710_SIMPLE_MODE                    0xF
23 #define APCI1710_DIRECT_MODE                    0x80
24 #define APCI1710_HYSTERESIS_ON                  0x60
25 #define APCI1710_HYSTERESIS_OFF                 0x0
26 #define APCI1710_INCREMENT                      0x60
27 #define APCI1710_DECREMENT                      0x0
28 #define APCI1710_LATCH_COUNTER                  0x1
29 #define APCI1710_CLEAR_COUNTER                  0x0
30 #define APCI1710_LOW                            0x0
31 #define APCI1710_HIGH                           0x1
32
33 /*********************/
34 /* Version 0600-0229 */
35 /*********************/
36 #define APCI1710_HIGH_EDGE_CLEAR_COUNTER                0x0
37 #define APCI1710_HIGH_EDGE_LATCH_COUNTER                0x1
38 #define APCI1710_LOW_EDGE_CLEAR_COUNTER                 0x2
39 #define APCI1710_LOW_EDGE_LATCH_COUNTER                 0x3
40 #define APCI1710_HIGH_EDGE_LATCH_AND_CLEAR_COUNTER      0x4
41 #define APCI1710_LOW_EDGE_LATCH_AND_CLEAR_COUNTER       0x5
42 #define APCI1710_SOURCE_0                               0x0
43 #define APCI1710_SOURCE_1                               0x1
44
45 #define APCI1710_30MHZ                          30
46 #define APCI1710_33MHZ                          33
47 #define APCI1710_40MHZ                          40
48
49 #define APCI1710_ENABLE_LATCH_INT               0x80
50 #define APCI1710_DISABLE_LATCH_INT              (~APCI1710_ENABLE_LATCH_INT)
51
52 #define APCI1710_INDEX_LATCH_COUNTER            0x10
53 #define APCI1710_INDEX_AUTO_MODE                0x8
54 #define APCI1710_ENABLE_INDEX                   0x4
55 #define APCI1710_DISABLE_INDEX                  (~APCI1710_ENABLE_INDEX)
56 #define APCI1710_ENABLE_LATCH_AND_CLEAR         0x8
57 #define APCI1710_DISABLE_LATCH_AND_CLEAR        (~APCI1710_ENABLE_LATCH_AND_CLEAR)
58 #define APCI1710_SET_LOW_INDEX_LEVEL            0x4
59 #define APCI1710_SET_HIGH_INDEX_LEVEL           (~APCI1710_SET_LOW_INDEX_LEVEL)
60 #define APCI1710_INVERT_INDEX_RFERENCE          0x2
61 #define APCI1710_DEFAULT_INDEX_RFERENCE         (~APCI1710_INVERT_INDEX_RFERENCE)
62
63 #define APCI1710_ENABLE_INDEX_INT               0x1
64 #define APCI1710_DISABLE_INDEX_INT              (~APCI1710_ENABLE_INDEX_INT)
65
66 #define APCI1710_ENABLE_FREQUENCY               0x4
67 #define APCI1710_DISABLE_FREQUENCY              (~APCI1710_ENABLE_FREQUENCY)
68
69 #define APCI1710_ENABLE_FREQUENCY_INT           0x8
70 #define APCI1710_DISABLE_FREQUENCY_INT          (~APCI1710_ENABLE_FREQUENCY_INT)
71
72 #define APCI1710_ENABLE_40MHZ_FREQUENCY         0x40
73 #define APCI1710_DISABLE_40MHZ_FREQUENCY        (~APCI1710_ENABLE_40MHZ_FREQUENCY)
74
75 #define APCI1710_ENABLE_40MHZ_FILTER            0x80
76 #define APCI1710_DISABLE_40MHZ_FILTER           (~APCI1710_ENABLE_40MHZ_FILTER)
77
78 #define APCI1710_ENABLE_COMPARE_INT             0x2
79 #define APCI1710_DISABLE_COMPARE_INT            (~APCI1710_ENABLE_COMPARE_INT)
80
81 #define APCI1710_ENABLE_INDEX_ACTION            0x20
82 #define APCI1710_DISABLE_INDEX_ACTION           (~APCI1710_ENABLE_INDEX_ACTION)
83 #define APCI1710_REFERENCE_HIGH                 0x40
84 #define APCI1710_REFERENCE_LOW                  (~APCI1710_REFERENCE_HIGH)
85
86 #define APCI1710_TOR_GATE_LOW                   0x40
87 #define APCI1710_TOR_GATE_HIGH                  (~APCI1710_TOR_GATE_LOW)
88
89 /* INSN CONFIG */
90 #define APCI1710_INCCPT_INITCOUNTER                             100
91 #define APCI1710_INCCPT_COUNTERAUTOTEST                         101
92 #define APCI1710_INCCPT_INITINDEX                               102
93 #define APCI1710_INCCPT_INITREFERENCE                           103
94 #define APCI1710_INCCPT_INITEXTERNALSTROBE                      104
95 #define APCI1710_INCCPT_INITCOMPARELOGIC                        105
96 #define APCI1710_INCCPT_INITFREQUENCYMEASUREMENT                106
97
98 /* INSN READ */
99 #define APCI1710_INCCPT_READLATCHREGISTERSTATUS                 200
100 #define APCI1710_INCCPT_READLATCHREGISTERVALUE                  201
101 #define APCI1710_INCCPT_READ16BITCOUNTERVALUE                   202
102 #define APCI1710_INCCPT_READ32BITCOUNTERVALUE                   203
103 #define APCI1710_INCCPT_GETINDEXSTATUS                          204
104 #define APCI1710_INCCPT_GETREFERENCESTATUS                      205
105 #define APCI1710_INCCPT_GETUASSTATUS                            206
106 #define APCI1710_INCCPT_GETCBSTATUS                             207
107 #define APCI1710_INCCPT_GET16BITCBSTATUS                        208
108 #define APCI1710_INCCPT_GETUDSTATUS                             209
109 #define APCI1710_INCCPT_GETINTERRUPTUDLATCHEDSTATUS             210
110 #define APCI1710_INCCPT_READFREQUENCYMEASUREMENT                211
111 #define APCI1710_INCCPT_READINTERRUPT                           212
112
113 /* INSN BITS */
114 #define APCI1710_INCCPT_CLEARCOUNTERVALUE                       300
115 #define APCI1710_INCCPT_CLEARALLCOUNTERVALUE                    301
116 #define APCI1710_INCCPT_SETINPUTFILTER                          302
117 #define APCI1710_INCCPT_LATCHCOUNTER                            303
118 #define APCI1710_INCCPT_SETINDEXANDREFERENCESOURCE              304
119 #define APCI1710_INCCPT_SETDIGITALCHLON                         305
120 #define APCI1710_INCCPT_SETDIGITALCHLOFF                        306
121
122 /* INSN WRITE */
123 #define APCI1710_INCCPT_ENABLELATCHINTERRUPT                    400
124 #define APCI1710_INCCPT_DISABLELATCHINTERRUPT                   401
125 #define APCI1710_INCCPT_WRITE16BITCOUNTERVALUE                  402
126 #define APCI1710_INCCPT_WRITE32BITCOUNTERVALUE                  403
127 #define APCI1710_INCCPT_ENABLEINDEX                             404
128 #define APCI1710_INCCPT_DISABLEINDEX                            405
129 #define APCI1710_INCCPT_ENABLECOMPARELOGIC                      406
130 #define APCI1710_INCCPT_DISABLECOMPARELOGIC                     407
131 #define APCI1710_INCCPT_ENABLEFREQUENCYMEASUREMENT              408
132 #define APCI1710_INCCPT_DISABLEFREQUENCYMEASUREMENT             409
133
134 /************ Main Functions *************/
135 int i_APCI1710_InsnConfigINCCPT(struct comedi_device *dev, struct comedi_subdevice *s,
136                                 struct comedi_insn *insn, unsigned int * data);
137
138 int i_APCI1710_InsnBitsINCCPT(struct comedi_device *dev, struct comedi_subdevice * s,
139                               struct comedi_insn *insn, unsigned int * data);
140
141 int i_APCI1710_InsnWriteINCCPT(struct comedi_device *dev, struct comedi_subdevice * s,
142                                struct comedi_insn *insn, unsigned int * data);
143
144 int i_APCI1710_InsnReadINCCPT(struct comedi_device *dev, struct comedi_subdevice * s,
145                               struct comedi_insn *insn, unsigned int * data);
146
147 /*********** Supplementary Functions********/
148
149 /* INSN CONFIG */
150 int i_APCI1710_InitCounter(struct comedi_device *dev,
151                            unsigned char b_ModulNbr,
152                            unsigned char b_CounterRange,
153                            unsigned char b_FirstCounterModus,
154                            unsigned char b_FirstCounterOption,
155                            unsigned char b_SecondCounterModus,
156                            unsigned char b_SecondCounterOption);
157
158 int i_APCI1710_CounterAutoTest(struct comedi_device *dev, unsigned char * pb_TestStatus);
159
160 int i_APCI1710_InitIndex(struct comedi_device *dev,
161                          unsigned char b_ModulNbr,
162                          unsigned char b_ReferenceAction,
163                          unsigned char b_IndexOperation, unsigned char b_AutoMode,
164                          unsigned char b_InterruptEnable);
165
166 int i_APCI1710_InitReference(struct comedi_device *dev,
167                              unsigned char b_ModulNbr, unsigned char b_ReferenceLevel);
168
169 int i_APCI1710_InitExternalStrobe(struct comedi_device *dev,
170                                   unsigned char b_ModulNbr, unsigned char b_ExternalStrobe,
171                                   unsigned char b_ExternalStrobeLevel);
172
173 int i_APCI1710_InitCompareLogic(struct comedi_device *dev,
174                                 unsigned char b_ModulNbr, unsigned int ui_CompareValue);
175
176 int i_APCI1710_InitFrequencyMeasurement(struct comedi_device *dev,
177                                         unsigned char b_ModulNbr,
178                                         unsigned char b_PCIInputClock,
179                                         unsigned char b_TimingUnity,
180                                         unsigned int ul_TimingInterval,
181                                         unsigned int *pul_RealTimingInterval);
182
183 /* INSN BITS */
184 int i_APCI1710_ClearCounterValue(struct comedi_device *dev, unsigned char b_ModulNbr);
185
186 int i_APCI1710_ClearAllCounterValue(struct comedi_device *dev);
187
188 int i_APCI1710_SetInputFilter(struct comedi_device *dev,
189                               unsigned char b_ModulNbr, unsigned char b_PCIInputClock,
190                               unsigned char b_Filter);
191
192 int i_APCI1710_LatchCounter(struct comedi_device *dev,
193                             unsigned char b_ModulNbr, unsigned char b_LatchReg);
194
195 int i_APCI1710_SetIndexAndReferenceSource(struct comedi_device *dev,
196                                           unsigned char b_ModulNbr,
197                                           unsigned char b_SourceSelection);
198
199 int i_APCI1710_SetDigitalChlOn(struct comedi_device *dev, unsigned char b_ModulNbr);
200
201 int i_APCI1710_SetDigitalChlOff(struct comedi_device *dev, unsigned char b_ModulNbr);
202
203 /* INSN WRITE */
204 int i_APCI1710_EnableLatchInterrupt(struct comedi_device *dev, unsigned char b_ModulNbr);
205
206 int i_APCI1710_DisableLatchInterrupt(struct comedi_device *dev, unsigned char b_ModulNbr);
207
208 int i_APCI1710_Write16BitCounterValue(struct comedi_device *dev,
209                                       unsigned char b_ModulNbr, unsigned char b_SelectedCounter,
210                                       unsigned int ui_WriteValue);
211
212 int i_APCI1710_Write32BitCounterValue(struct comedi_device *dev,
213                                       unsigned char b_ModulNbr, unsigned int ul_WriteValue);
214
215 int i_APCI1710_EnableIndex(struct comedi_device *dev, unsigned char b_ModulNbr);
216
217 int i_APCI1710_DisableIndex(struct comedi_device *dev, unsigned char b_ModulNbr);
218
219 int i_APCI1710_EnableCompareLogic(struct comedi_device *dev, unsigned char b_ModulNbr);
220
221 int i_APCI1710_DisableCompareLogic(struct comedi_device *dev, unsigned char b_ModulNbr);
222
223 int i_APCI1710_EnableFrequencyMeasurement(struct comedi_device *dev,
224                                           unsigned char b_ModulNbr,
225                                           unsigned char b_InterruptEnable);
226
227 int i_APCI1710_DisableFrequencyMeasurement(struct comedi_device *dev,
228                                            unsigned char b_ModulNbr);
229
230 /* INSN READ */
231 int i_APCI1710_ReadLatchRegisterStatus(struct comedi_device *dev,
232                                        unsigned char b_ModulNbr, unsigned char b_LatchReg,
233                                        unsigned char *pb_LatchStatus);
234
235 int i_APCI1710_ReadLatchRegisterValue(struct comedi_device *dev,
236                                       unsigned char b_ModulNbr, unsigned char b_LatchReg,
237                                       unsigned int *pul_LatchValue);
238
239 int i_APCI1710_Read16BitCounterValue(struct comedi_device *dev,
240                                      unsigned char b_ModulNbr, unsigned char b_SelectedCounter,
241                                      unsigned int *pui_CounterValue);
242
243 int i_APCI1710_Read32BitCounterValue(struct comedi_device *dev,
244                                      unsigned char b_ModulNbr, unsigned int *pul_CounterValue);
245
246 int i_APCI1710_GetIndexStatus(struct comedi_device *dev,
247                               unsigned char b_ModulNbr, unsigned char *pb_IndexStatus);
248
249 int i_APCI1710_GetReferenceStatus(struct comedi_device *dev,
250                                   unsigned char b_ModulNbr, unsigned char *pb_ReferenceStatus);
251
252 int i_APCI1710_GetUASStatus(struct comedi_device *dev,
253                             unsigned char b_ModulNbr, unsigned char *pb_UASStatus);
254
255 int i_APCI1710_GetCBStatus(struct comedi_device *dev,
256                            unsigned char b_ModulNbr, unsigned char *pb_CBStatus);
257
258 int i_APCI1710_Get16BitCBStatus(struct comedi_device *dev,
259                                 unsigned char b_ModulNbr, unsigned char *pb_CBStatusCounter0,
260                                 unsigned char *pb_CBStatusCounter1);
261
262 int i_APCI1710_GetUDStatus(struct comedi_device *dev,
263                            unsigned char b_ModulNbr, unsigned char *pb_UDStatus);
264
265 int i_APCI1710_GetInterruptUDLatchedStatus(struct comedi_device *dev,
266                                            unsigned char b_ModulNbr, unsigned char *pb_UDStatus);
267
268 int i_APCI1710_ReadFrequencyMeasurement(struct comedi_device *dev,
269                                         unsigned char b_ModulNbr,
270                                         unsigned char *pb_Status, unsigned char *pb_UDStatus,
271                                         unsigned int *pul_ReadValue);