Staging: comedi: Remove comedi_cmd typedef
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / staging / epl / EplNmt.h
1 /****************************************************************************
2
3 (c) SYSTEC electronic GmbH, D-07973 Greiz, August-Bebel-Str. 29
4 www.systec-electronic.com
5
6 Project: openPOWERLINK
7
8 Description: global include file for EPL-NMT-Modules
9
10 License:
11
12 Redistribution and use in source and binary forms, with or without
13 modification, are permitted provided that the following conditions
14 are met:
15
16 1. Redistributions of source code must retain the above copyright
17 notice, this list of conditions and the following disclaimer.
18
19 2. Redistributions in binary form must reproduce the above copyright
20 notice, this list of conditions and the following disclaimer in the
21 documentation and/or other materials provided with the distribution.
22
23 3. Neither the name of SYSTEC electronic GmbH nor the names of its
24 contributors may be used to endorse or promote products derived
25 from this software without prior written permission. For written
26 permission, please contact info@systec-electronic.com.
27
28 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
29 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
30 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
31 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
32 COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
33 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
34 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
35 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
36 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
38 ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39 POSSIBILITY OF SUCH DAMAGE.
40
41 Severability Clause:
42
43 If a provision of this License is or becomes illegal, invalid or
44 unenforceable in any jurisdiction, that shall not affect:
45 1. the validity or enforceability in that jurisdiction of any other
46 provision of this License; or
47 2. the validity or enforceability in other jurisdictions of that or
48 any other provision of this License.
49
50 -------------------------------------------------------------------------
51
52 $RCSfile: EplNmt.h,v $
53
54 $Author: D.Krueger $
55
56 $Revision: 1.6 $ $Date: 2008/11/17 16:40:39 $
57
58 $State: Exp $
59
60 Build Environment:
61 GCC V3.4
62
63 -------------------------------------------------------------------------
64
65 Revision History:
66
67 2006/06/09 k.t.: start of the implementation
68
69 ****************************************************************************/
70
71 #ifndef _EPLNMT_H_
72 #define _EPLNMT_H_
73
74 #include "EplInc.h"
75
76 //---------------------------------------------------------------------------
77 // const defines
78 //---------------------------------------------------------------------------
79
80 // define super-states and masks to identify a super-state
81 #define EPL_NMT_GS_POWERED 0x0008 // super state
82 #define EPL_NMT_GS_INITIALISATION 0x0009 // super state
83 #define EPL_NMT_GS_COMMUNICATING 0x000C // super state
84 #define EPL_NMT_CS_EPLMODE 0x000D // super state
85 #define EPL_NMT_MS_EPLMODE 0x000D // super state
86
87 #define EPL_NMT_SUPERSTATE_MASK 0x000F // mask to select state
88
89 #define EPL_NMT_TYPE_UNDEFINED 0x0000 // type of NMT state is still undefined
90 #define EPL_NMT_TYPE_CS 0x0100 // CS type of NMT state
91 #define EPL_NMT_TYPE_MS 0x0200 // MS type of NMT state
92 #define EPL_NMT_TYPE_MASK 0x0300 // mask to select type of NMT state (i.e. CS or MS)
93
94 //---------------------------------------------------------------------------
95 // typedef
96 //---------------------------------------------------------------------------
97
98 // the lower Byte of the NMT-State is encoded
99 // like the values in the EPL-Standard
100 // the higher byte is used to encode MN
101 // (Bit 1 of the higher byte = 1) or CN (Bit 0 of the
102 // higher byte = 1)
103 // the super-states are not mentioned in this
104 // enum because they are no real states
105 // --> there are masks defined to indentify the
106 // super-states
107
108 typedef enum {
109 kEplNmtGsOff = 0x0000,
110 kEplNmtGsInitialising = 0x0019,
111 kEplNmtGsResetApplication = 0x0029,
112 kEplNmtGsResetCommunication = 0x0039,
113 kEplNmtGsResetConfiguration = 0x0079,
114 kEplNmtCsNotActive = 0x011C,
115 kEplNmtCsPreOperational1 = 0x011D,
116 kEplNmtCsStopped = 0x014D,
117 kEplNmtCsPreOperational2 = 0x015D,
118 kEplNmtCsReadyToOperate = 0x016D,
119 kEplNmtCsOperational = 0x01FD,
120 kEplNmtCsBasicEthernet = 0x011E,
121 kEplNmtMsNotActive = 0x021C,
122 kEplNmtMsPreOperational1 = 0x021D,
123 kEplNmtMsPreOperational2 = 0x025D,
124 kEplNmtMsReadyToOperate = 0x026D,
125 kEplNmtMsOperational = 0x02FD,
126 kEplNmtMsBasicEthernet = 0x021E
127 } tEplNmtState;
128
129 // NMT-events
130 typedef enum {
131 // Events from DLL
132 // Events defined by EPL V2 specification
133 kEplNmtEventNoEvent = 0x00,
134 // kEplNmtEventDllMePres = 0x01,
135 kEplNmtEventDllMePresTimeout = 0x02,
136 // kEplNmtEventDllMeAsnd = 0x03,
137 // kEplNmtEventDllMeAsndTimeout = 0x04,
138 kEplNmtEventDllMeSoaSent = 0x04,
139 kEplNmtEventDllMeSocTrig = 0x05,
140 kEplNmtEventDllMeSoaTrig = 0x06,
141 kEplNmtEventDllCeSoc = 0x07,
142 kEplNmtEventDllCePreq = 0x08,
143 kEplNmtEventDllCePres = 0x09,
144 kEplNmtEventDllCeSoa = 0x0A,
145 kEplNmtEventDllCeAsnd = 0x0B,
146 kEplNmtEventDllCeFrameTimeout = 0x0C,
147
148 // Events triggered by NMT-Commands
149 kEplNmtEventSwReset = 0x10, // NMT_GT1, NMT_GT2, NMT_GT8
150 kEplNmtEventResetNode = 0x11,
151 kEplNmtEventResetCom = 0x12,
152 kEplNmtEventResetConfig = 0x13,
153 kEplNmtEventEnterPreOperational2 = 0x14,
154 kEplNmtEventEnableReadyToOperate = 0x15,
155 kEplNmtEventStartNode = 0x16, // NMT_CT7
156 kEplNmtEventStopNode = 0x17,
157
158 // Events triggered by higher layer
159 kEplNmtEventEnterResetApp = 0x20,
160 kEplNmtEventEnterResetCom = 0x21,
161 kEplNmtEventInternComError = 0x22, // NMT_GT6, internal communication error -> enter ResetCommunication
162 kEplNmtEventEnterResetConfig = 0x23,
163 kEplNmtEventEnterCsNotActive = 0x24,
164 kEplNmtEventEnterMsNotActive = 0x25,
165 kEplNmtEventTimerBasicEthernet = 0x26, // NMT_CT3; timer triggered state change (NotActive -> BasicEth)
166 kEplNmtEventTimerMsPreOp1 = 0x27, // enter PreOp1 on MN (NotActive -> MsPreOp1)
167 kEplNmtEventNmtCycleError = 0x28, // NMT_CT11, NMT_MT6; error during cycle -> enter PreOp1
168 kEplNmtEventTimerMsPreOp2 = 0x29, // enter PreOp2 on MN (MsPreOp1 -> MsPreOp2 if kEplNmtEventAllMandatoryCNIdent)
169 kEplNmtEventAllMandatoryCNIdent = 0x2A, // enter PreOp2 on MN if kEplNmtEventTimerMsPreOp2
170 kEplNmtEventEnterReadyToOperate = 0x2B, // application ready for the state ReadyToOp
171 kEplNmtEventEnterMsOperational = 0x2C, // enter Operational on MN
172 kEplNmtEventSwitchOff = 0x2D, // enter state Off
173 kEplNmtEventCriticalError = 0x2E, // enter state Off because of critical error
174
175 } tEplNmtEvent;
176
177 // type for argument of event kEplEventTypeNmtStateChange
178 typedef struct {
179 tEplNmtState m_NewNmtState;
180 tEplNmtEvent m_NmtEvent;
181
182 } tEplEventNmtStateChange;
183
184 // structure for kEplEventTypeHeartbeat
185 typedef struct {
186 unsigned int m_uiNodeId; // NodeId
187 tEplNmtState m_NmtState; // NMT state (remember distinguish between MN / CN)
188 WORD m_wErrorCode; // EPL error code in case of NMT state NotActive
189
190 } tEplHeartbeatEvent;
191
192 typedef enum {
193 kEplNmtNodeEventFound = 0x00,
194 kEplNmtNodeEventUpdateSw = 0x01, // application shall update software on CN
195 kEplNmtNodeEventCheckConf = 0x02, // application / Configuration Manager shall check and update configuration on CN
196 kEplNmtNodeEventUpdateConf = 0x03, // application / Configuration Manager shall update configuration on CN (check was done by NmtMn module)
197 kEplNmtNodeEventVerifyConf = 0x04, // application / Configuration Manager shall verify configuration of CN
198 kEplNmtNodeEventReadyToStart = 0x05, // issued if EPL_NMTST_NO_STARTNODE set
199 // application must call EplNmtMnuSendNmtCommand(kEplNmtCmdStartNode) manually
200 kEplNmtNodeEventNmtState = 0x06,
201 kEplNmtNodeEventError = 0x07, // NMT error of CN
202
203 } tEplNmtNodeEvent;
204
205 typedef enum {
206 kEplNmtNodeCommandBoot = 0x01, // if EPL_NODEASSIGN_START_CN not set it must be issued after kEplNmtNodeEventFound
207 kEplNmtNodeCommandSwOk = 0x02, // application updated software on CN successfully
208 kEplNmtNodeCommandSwUpdated = 0x03, // application updated software on CN successfully
209 kEplNmtNodeCommandConfOk = 0x04, // application / Configuration Manager has updated configuration on CN successfully
210 kEplNmtNodeCommandConfReset = 0x05, // application / Configuration Manager has updated configuration on CN successfully
211 // and CN needs ResetConf so that the configuration gets actived
212 kEplNmtNodeCommandConfErr = 0x06, // application / Configuration Manager failed on updating configuration on CN
213 kEplNmtNodeCommandStart = 0x07, // if EPL_NMTST_NO_STARTNODE set it must be issued after kEplNmtNodeEventReadyToStart
214
215 } tEplNmtNodeCommand;
216
217 typedef enum {
218 kEplNmtBootEventBootStep1Finish = 0x00, // PreOp2 is possible
219 kEplNmtBootEventBootStep2Finish = 0x01, // ReadyToOp is possible
220 kEplNmtBootEventCheckComFinish = 0x02, // Operational is possible
221 kEplNmtBootEventOperational = 0x03, // all mandatory CNs are Operational
222 kEplNmtBootEventError = 0x04, // boot process halted because of an error
223
224 } tEplNmtBootEvent;
225
226 //---------------------------------------------------------------------------
227 // function prototypes
228 //---------------------------------------------------------------------------
229
230 #endif // #ifndef _EPLNMT_H_