xref: /openbmc/ipmitool/src/plugins/imb/imbapi.h (revision c18ec02f)
1*c18ec02fSPetter Reinholdtsen /*M*
2*c18ec02fSPetter Reinholdtsen //  PVCS:
3*c18ec02fSPetter Reinholdtsen //      $Workfile:   imb_api.h  $
4*c18ec02fSPetter Reinholdtsen //      $Revision: 1.2 $
5*c18ec02fSPetter Reinholdtsen //      $Modtime:   Jul 22 2002 16:40:32  $
6*c18ec02fSPetter Reinholdtsen //      $Author: iceblink $
7*c18ec02fSPetter Reinholdtsen //
8*c18ec02fSPetter Reinholdtsen //  Combined include files needed for imbapi.c
9*c18ec02fSPetter Reinholdtsen //
10*c18ec02fSPetter Reinholdtsen  *M*/
11*c18ec02fSPetter Reinholdtsen /*----------------------------------------------------------------------*
12*c18ec02fSPetter Reinholdtsen The BSD License
13*c18ec02fSPetter Reinholdtsen Copyright (c) 2002, Intel Corporation
14*c18ec02fSPetter Reinholdtsen All rights reserved.
15*c18ec02fSPetter Reinholdtsen Redistribution and use in source and binary forms, with or without
16*c18ec02fSPetter Reinholdtsen modification, are permitted provided that the following conditions are met:
17*c18ec02fSPetter Reinholdtsen   a.. Redistributions of source code must retain the above copyright notice,
18*c18ec02fSPetter Reinholdtsen       this list of conditions and the following disclaimer.
19*c18ec02fSPetter Reinholdtsen   b.. Redistributions in binary form must reproduce the above copyright notice,
20*c18ec02fSPetter Reinholdtsen       this list of conditions and the following disclaimer in the documentation
21*c18ec02fSPetter Reinholdtsen       and/or other materials provided with the distribution.
22*c18ec02fSPetter Reinholdtsen   c.. Neither the name of Intel Corporation nor the names of its contributors
23*c18ec02fSPetter Reinholdtsen       may be used to endorse or promote products derived from this software
24*c18ec02fSPetter Reinholdtsen       without specific prior written permission.
25*c18ec02fSPetter Reinholdtsen THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
26*c18ec02fSPetter Reinholdtsen ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27*c18ec02fSPetter Reinholdtsen WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28*c18ec02fSPetter Reinholdtsen DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
29*c18ec02fSPetter Reinholdtsen ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30*c18ec02fSPetter Reinholdtsen (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31*c18ec02fSPetter Reinholdtsen LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
32*c18ec02fSPetter Reinholdtsen ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33*c18ec02fSPetter Reinholdtsen (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34*c18ec02fSPetter Reinholdtsen SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35*c18ec02fSPetter Reinholdtsen  *----------------------------------------------------------------------*/
36*c18ec02fSPetter Reinholdtsen #ifndef	_WINDEFS_H
37*c18ec02fSPetter Reinholdtsen #define	_WINDEFS_H
38*c18ec02fSPetter Reinholdtsen #ifndef FALSE
39*c18ec02fSPetter Reinholdtsen #define FALSE   0
40*c18ec02fSPetter Reinholdtsen #endif
41*c18ec02fSPetter Reinholdtsen #ifndef TRUE
42*c18ec02fSPetter Reinholdtsen #define TRUE    1
43*c18ec02fSPetter Reinholdtsen #endif
44*c18ec02fSPetter Reinholdtsen #ifndef NULL
45*c18ec02fSPetter Reinholdtsen #define NULL 0
46*c18ec02fSPetter Reinholdtsen #endif
47*c18ec02fSPetter Reinholdtsen #ifndef WIN32
48*c18ec02fSPetter Reinholdtsen /* WIN32 defines this in stdio.h */
49*c18ec02fSPetter Reinholdtsen #ifndef _WCHAR_T
50*c18ec02fSPetter Reinholdtsen #define _WCHAR_T
51*c18ec02fSPetter Reinholdtsen typedef long    wchar_t;
52*c18ec02fSPetter Reinholdtsen #endif
53*c18ec02fSPetter Reinholdtsen #endif
54*c18ec02fSPetter Reinholdtsen #define far
55*c18ec02fSPetter Reinholdtsen #define near
56*c18ec02fSPetter Reinholdtsen #define FAR                 far
57*c18ec02fSPetter Reinholdtsen #define NEAR                near
58*c18ec02fSPetter Reinholdtsen #ifndef CONST
59*c18ec02fSPetter Reinholdtsen #define CONST               const
60*c18ec02fSPetter Reinholdtsen #endif
61*c18ec02fSPetter Reinholdtsen typedef unsigned long       DWORD;
62*c18ec02fSPetter Reinholdtsen typedef int                 BOOL;
63*c18ec02fSPetter Reinholdtsen typedef unsigned char       BYTE;
64*c18ec02fSPetter Reinholdtsen typedef unsigned short      WORD;
65*c18ec02fSPetter Reinholdtsen typedef float               FLOAT;
66*c18ec02fSPetter Reinholdtsen typedef FLOAT               *PFLOAT;
67*c18ec02fSPetter Reinholdtsen typedef BOOL near           *PBOOL;
68*c18ec02fSPetter Reinholdtsen typedef BOOL far            *LPBOOL;
69*c18ec02fSPetter Reinholdtsen typedef BYTE near           *PBYTE;
70*c18ec02fSPetter Reinholdtsen typedef BYTE far            *LPBYTE;
71*c18ec02fSPetter Reinholdtsen typedef int near            *PINT;
72*c18ec02fSPetter Reinholdtsen typedef int far             *LPINT;
73*c18ec02fSPetter Reinholdtsen typedef WORD near           *PWORD;
74*c18ec02fSPetter Reinholdtsen typedef WORD far            *LPWORD;
75*c18ec02fSPetter Reinholdtsen typedef long far            *LPLONG;
76*c18ec02fSPetter Reinholdtsen typedef DWORD near          *PDWORD;
77*c18ec02fSPetter Reinholdtsen typedef DWORD far           *LPDWORD;
78*c18ec02fSPetter Reinholdtsen typedef void far            *LPVOID;
79*c18ec02fSPetter Reinholdtsen typedef CONST void far      *LPCVOID;
80*c18ec02fSPetter Reinholdtsen typedef int                 INT;
81*c18ec02fSPetter Reinholdtsen typedef unsigned int        UINT;
82*c18ec02fSPetter Reinholdtsen typedef unsigned int        *PUINT;
83*c18ec02fSPetter Reinholdtsen typedef DWORD NTSTATUS;
84*c18ec02fSPetter Reinholdtsen /*
85*c18ec02fSPetter Reinholdtsen   File structures
86*c18ec02fSPetter Reinholdtsen */
87*c18ec02fSPetter Reinholdtsen #ifndef WIN32
88*c18ec02fSPetter Reinholdtsen typedef struct _OVERLAPPED {
89*c18ec02fSPetter Reinholdtsen     DWORD   Internal;
90*c18ec02fSPetter Reinholdtsen     DWORD   InternalHigh;
91*c18ec02fSPetter Reinholdtsen     DWORD   Offset;
92*c18ec02fSPetter Reinholdtsen     DWORD   OffsetHigh;
93*c18ec02fSPetter Reinholdtsen /*    HANDLE  hEvent; */
94*c18ec02fSPetter Reinholdtsen } OVERLAPPED, *LPOVERLAPPED;
95*c18ec02fSPetter Reinholdtsen #endif
96*c18ec02fSPetter Reinholdtsen /*
97*c18ec02fSPetter Reinholdtsen  * Data structure redefines
98*c18ec02fSPetter Reinholdtsen  */
99*c18ec02fSPetter Reinholdtsen typedef char CHAR;
100*c18ec02fSPetter Reinholdtsen typedef short SHORT;
101*c18ec02fSPetter Reinholdtsen typedef long LONG;
102*c18ec02fSPetter Reinholdtsen typedef char * PCHAR;
103*c18ec02fSPetter Reinholdtsen typedef short * PSHORT;
104*c18ec02fSPetter Reinholdtsen typedef long * PLONG;
105*c18ec02fSPetter Reinholdtsen typedef unsigned char UCHAR;
106*c18ec02fSPetter Reinholdtsen typedef unsigned short USHORT;
107*c18ec02fSPetter Reinholdtsen typedef unsigned long ULONG;
108*c18ec02fSPetter Reinholdtsen typedef unsigned char * PUCHAR;
109*c18ec02fSPetter Reinholdtsen typedef unsigned short * PUSHORT;
110*c18ec02fSPetter Reinholdtsen typedef unsigned long * PULONG;
111*c18ec02fSPetter Reinholdtsen typedef char CCHAR;
112*c18ec02fSPetter Reinholdtsen typedef short CSHORT;
113*c18ec02fSPetter Reinholdtsen typedef ULONG CLONG;
114*c18ec02fSPetter Reinholdtsen typedef CCHAR * PCCHAR;
115*c18ec02fSPetter Reinholdtsen typedef CSHORT * PCSHORT;
116*c18ec02fSPetter Reinholdtsen typedef CLONG * PCLONG;
117*c18ec02fSPetter Reinholdtsen typedef void * PVOID;
118*c18ec02fSPetter Reinholdtsen #ifndef WIN32
119*c18ec02fSPetter Reinholdtsen typedef void VOID;
120*c18ec02fSPetter Reinholdtsen typedef struct _LARGE_INTEGER {
121*c18ec02fSPetter Reinholdtsen 	ULONG LowPart;
122*c18ec02fSPetter Reinholdtsen 	LONG HighPart;
123*c18ec02fSPetter Reinholdtsen } LARGE_INTEGER;
124*c18ec02fSPetter Reinholdtsen typedef struct _ULARGE_INTEGER {
125*c18ec02fSPetter Reinholdtsen 	ULONG LowPart;
126*c18ec02fSPetter Reinholdtsen 	ULONG HighPart;
127*c18ec02fSPetter Reinholdtsen } ULARGE_INTEGER;
128*c18ec02fSPetter Reinholdtsen #endif
129*c18ec02fSPetter Reinholdtsen typedef LARGE_INTEGER * PLARGE_INTEGER;
130*c18ec02fSPetter Reinholdtsen typedef LARGE_INTEGER PHYSICAL_ADDRESS;
131*c18ec02fSPetter Reinholdtsen typedef LARGE_INTEGER * PPHYSICAL_ADDRESS;
132*c18ec02fSPetter Reinholdtsen typedef ULARGE_INTEGER * PULARGE_INTEGER;
133*c18ec02fSPetter Reinholdtsen typedef UCHAR BOOLEAN;
134*c18ec02fSPetter Reinholdtsen typedef BOOLEAN *PBOOLEAN;
135*c18ec02fSPetter Reinholdtsen typedef wchar_t		    WCHAR;
136*c18ec02fSPetter Reinholdtsen typedef WCHAR		    *PWCHAR, *PWSTR;
137*c18ec02fSPetter Reinholdtsen typedef CONST WCHAR	    *LPCWSTR, *PCWSTR;
138*c18ec02fSPetter Reinholdtsen 
139*c18ec02fSPetter Reinholdtsen #ifndef _SYS_TYPES_H
140*c18ec02fSPetter Reinholdtsen #ifndef _CADDR_T
141*c18ec02fSPetter Reinholdtsen #define _CADDR_T
142*c18ec02fSPetter Reinholdtsen   typedef char *        caddr_t;
143*c18ec02fSPetter Reinholdtsen #endif
144*c18ec02fSPetter Reinholdtsen #endif
145*c18ec02fSPetter Reinholdtsen /*
146*c18ec02fSPetter Reinholdtsen  Unicode strings are counted 16-bit character strings. If they are
147*c18ec02fSPetter Reinholdtsen  NULL terminated, Length does not include trailing NULL.
148*c18ec02fSPetter Reinholdtsen */
149*c18ec02fSPetter Reinholdtsen typedef struct _UNICODE_STRING {
150*c18ec02fSPetter Reinholdtsen     USHORT Length;
151*c18ec02fSPetter Reinholdtsen     USHORT MaximumLength;
152*c18ec02fSPetter Reinholdtsen     PWSTR  Buffer;
153*c18ec02fSPetter Reinholdtsen } UNICODE_STRING;
154*c18ec02fSPetter Reinholdtsen typedef UNICODE_STRING *PUNICODE_STRING;
155*c18ec02fSPetter Reinholdtsen #define UNICODE_NULL ((WCHAR)0)   /* winnt*/
156*c18ec02fSPetter Reinholdtsen #define IN	/* */
157*c18ec02fSPetter Reinholdtsen #define OUT	/* */
158*c18ec02fSPetter Reinholdtsen #define OPTIONAL	/* */
159*c18ec02fSPetter Reinholdtsen 
160*c18ec02fSPetter Reinholdtsen #ifndef WIN32
161*c18ec02fSPetter Reinholdtsen #define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
162*c18ec02fSPetter Reinholdtsen #define UNREFERENCED_PARAMETER(x)
163*c18ec02fSPetter Reinholdtsen typedef	int HANDLE;
164*c18ec02fSPetter Reinholdtsen #define	INVALID_HANDLE_VALUE	((HANDLE)-1)
165*c18ec02fSPetter Reinholdtsen #endif
166*c18ec02fSPetter Reinholdtsen typedef	HANDLE	*PHANDLE;
167*c18ec02fSPetter Reinholdtsen /*
168*c18ec02fSPetter Reinholdtsen  Define the method codes for how buffers are passed for I/O and FS controls
169*c18ec02fSPetter Reinholdtsen */
170*c18ec02fSPetter Reinholdtsen #define METHOD_BUFFERED                 0
171*c18ec02fSPetter Reinholdtsen /*
172*c18ec02fSPetter Reinholdtsen  Define the access check value for any access
173*c18ec02fSPetter Reinholdtsen  The FILE_READ_ACCESS and FILE_WRITE_ACCESS constants are also defined in
174*c18ec02fSPetter Reinholdtsen  ntioapi.h as FILE_READ_DATA and FILE_WRITE_DATA. The values for these
175*c18ec02fSPetter Reinholdtsen  constants *MUST* always be in sync.
176*c18ec02fSPetter Reinholdtsen */
177*c18ec02fSPetter Reinholdtsen #define FILE_ANY_ACCESS                 0
178*c18ec02fSPetter Reinholdtsen /*
179*c18ec02fSPetter Reinholdtsen   These are the generic rights.
180*c18ec02fSPetter Reinholdtsen */
181*c18ec02fSPetter Reinholdtsen #define    MAX_PATH        260
182*c18ec02fSPetter Reinholdtsen #define	GetLastError()	(NTstatus.Status)
183*c18ec02fSPetter Reinholdtsen /*
184*c18ec02fSPetter Reinholdtsen  Macro definition for defining IOCTL and FSCTL function control codes.  Note
185*c18ec02fSPetter Reinholdtsen  that function codes 0-2047 are reserved for Microsoft Corporation, and
186*c18ec02fSPetter Reinholdtsen  2048-4095 are reserved for customers.
187*c18ec02fSPetter Reinholdtsen */
188*c18ec02fSPetter Reinholdtsen /*
189*c18ec02fSPetter Reinholdtsen  * Linux drivers expect ioctls defined using macros defined in ioctl.h.
190*c18ec02fSPetter Reinholdtsen  * So, instead of using the CTL_CODE defined for NT and UW, I define CTL_CODE
191*c18ec02fSPetter Reinholdtsen  * using these macros. That way imb_if.h, where the ioctls are defined get
192*c18ec02fSPetter Reinholdtsen  * to use the correct ioctl command we expect.
193*c18ec02fSPetter Reinholdtsen  * Notes: I am using the generic _IO macro instead of the more specific
194*c18ec02fSPetter Reinholdtsen  * ones. The macros expect 8bit entities, so I am cleaning what is sent to
195*c18ec02fSPetter Reinholdtsen  * us from imb_if.h  - Mahendra
196*c18ec02fSPetter Reinholdtsen  */
197*c18ec02fSPetter Reinholdtsen #ifndef WIN32
198*c18ec02fSPetter Reinholdtsen #define CTL_CODE(DeviceType, Function, Method, Access)\
199*c18ec02fSPetter Reinholdtsen 		_IO(DeviceType & 0x00FF, Function & 0x00FF)
200*c18ec02fSPetter Reinholdtsen #else
201*c18ec02fSPetter Reinholdtsen #define CTL_CODE( DeviceType, Function, Method, Access ) ((ULONG)(	\
202*c18ec02fSPetter Reinholdtsen     ((ULONG)(DeviceType) << 16) | ((ULONG)(Access) << 14) | ((ULONG)(Function) << 2) | ((ULONG)Method) \
203*c18ec02fSPetter Reinholdtsen ))
204*c18ec02fSPetter Reinholdtsen #endif
205*c18ec02fSPetter Reinholdtsen #endif /*_WINDEFS_H */
206*c18ec02fSPetter Reinholdtsen /*----------------------------------------------------------------------*/
207*c18ec02fSPetter Reinholdtsen #ifndef	_SMI_H
208*c18ec02fSPetter Reinholdtsen #define	_SMI_H
209*c18ec02fSPetter Reinholdtsen #define SMI_Version1_00	0x00001000
210*c18ec02fSPetter Reinholdtsen struct smi {
211*c18ec02fSPetter Reinholdtsen     DWORD smi_VersionNo;
212*c18ec02fSPetter Reinholdtsen     DWORD smi_Reserved1;
213*c18ec02fSPetter Reinholdtsen     DWORD smi_Reserved2;
214*c18ec02fSPetter Reinholdtsen     LPVOID ntstatus;	/* address of NT status block*/
215*c18ec02fSPetter Reinholdtsen     LPVOID  lpvInBuffer;        /* address of buffer for input data*/
216*c18ec02fSPetter Reinholdtsen     DWORD  cbInBuffer;  /* size of input buffer*/
217*c18ec02fSPetter Reinholdtsen     LPVOID  lpvOutBuffer;       /* address of output buffer*/
218*c18ec02fSPetter Reinholdtsen     DWORD  cbOutBuffer; /* size of output buffer*/
219*c18ec02fSPetter Reinholdtsen     LPDWORD  lpcbBytesReturned; /* address of actual bytes of output*/
220*c18ec02fSPetter Reinholdtsen     LPOVERLAPPED  lpoOverlapped;         /* address of overlapped structure*/
221*c18ec02fSPetter Reinholdtsen };
222*c18ec02fSPetter Reinholdtsen #ifndef STATUS_SUCCESS
223*c18ec02fSPetter Reinholdtsen typedef struct _IO_STATUS_BLOCK {
224*c18ec02fSPetter Reinholdtsen     ULONG Status;
225*c18ec02fSPetter Reinholdtsen     ULONG Information;
226*c18ec02fSPetter Reinholdtsen } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
227*c18ec02fSPetter Reinholdtsen /*
228*c18ec02fSPetter Reinholdtsen  * I2C ioctl's return NTStatus codes
229*c18ec02fSPetter Reinholdtsen  */
230*c18ec02fSPetter Reinholdtsen #define STATUS_SUCCESS                   (0x00000000U)
231*c18ec02fSPetter Reinholdtsen #define STATUS_UNSUCCESSFUL              (0xC0000001U)
232*c18ec02fSPetter Reinholdtsen #define STATUS_DEVICE_BUSY               (0x80000011U)
233*c18ec02fSPetter Reinholdtsen #ifndef WIN32
234*c18ec02fSPetter Reinholdtsen #define STATUS_PENDING                   (0x00000103U)
235*c18ec02fSPetter Reinholdtsen // see <win2000ddk>\inc\winnt.h(1171)
236*c18ec02fSPetter Reinholdtsen #endif
237*c18ec02fSPetter Reinholdtsen #define STATUS_INVALID_PARAMETER         (0xC000000DU)
238*c18ec02fSPetter Reinholdtsen #define STATUS_INVALID_DEVICE_REQUEST    (0xC0000010U)
239*c18ec02fSPetter Reinholdtsen #define STATUS_BUFFER_TOO_SMALL          (0xC0000023U)
240*c18ec02fSPetter Reinholdtsen #define STATUS_FILE_CLOSED               (0xC0000128U)
241*c18ec02fSPetter Reinholdtsen #define STATUS_INSUFFICIENT_RESOURCES    (0xC000009AU)
242*c18ec02fSPetter Reinholdtsen #define STATUS_NO_DATA_DETECTED          (0x80000022U)
243*c18ec02fSPetter Reinholdtsen #define STATUS_NO_SUCH_DEVICE            (0xC000000EU)
244*c18ec02fSPetter Reinholdtsen #define STATUS_ALLOTTED_EXCEEDED         (0xC000000FU)
245*c18ec02fSPetter Reinholdtsen #define STATUS_IO_DEVICE_ERROR           (0xC0000185U)
246*c18ec02fSPetter Reinholdtsen #define STATUS_TOO_MANY_OPEN_FILES       (0xC000011FU)
247*c18ec02fSPetter Reinholdtsen #define STATUS_ACCESS_DENIED             (0xC0000022U)
248*c18ec02fSPetter Reinholdtsen #define STATUS_BUFFER_OVERFLOW           (0x80000005U)
249*c18ec02fSPetter Reinholdtsen #define STATUS_CANCELLED                 (0xC0000120U)
250*c18ec02fSPetter Reinholdtsen #endif	/* STATUS_SUCCESS*/
251*c18ec02fSPetter Reinholdtsen #endif	/* _SMI_H*/
252*c18ec02fSPetter Reinholdtsen /*----------------------------------------------------------------------*/
253*c18ec02fSPetter Reinholdtsen #ifndef IMB_IF__
254*c18ec02fSPetter Reinholdtsen #define IMB_IF__
255*c18ec02fSPetter Reinholdtsen /*
256*c18ec02fSPetter Reinholdtsen  * This is the structure passed in to the IOCTL_IMB_SHUTDOWN_CODE request
257*c18ec02fSPetter Reinholdtsen  */
258*c18ec02fSPetter Reinholdtsen typedef struct {
259*c18ec02fSPetter Reinholdtsen 	int	code;
260*c18ec02fSPetter Reinholdtsen 	int	delayTime;
261*c18ec02fSPetter Reinholdtsen } ShutdownCmdBuffer;
262*c18ec02fSPetter Reinholdtsen #define		SD_NO_ACTION				0
263*c18ec02fSPetter Reinholdtsen #define		SD_RESET				1
264*c18ec02fSPetter Reinholdtsen #define		SD_POWER_OFF				2
265*c18ec02fSPetter Reinholdtsen #pragma pack(1)
266*c18ec02fSPetter Reinholdtsen /*
267*c18ec02fSPetter Reinholdtsen  * This is the generic IMB packet format, the final checksum cant be
268*c18ec02fSPetter Reinholdtsen  * represented in this structure and will show up as the last data byte
269*c18ec02fSPetter Reinholdtsen  */
270*c18ec02fSPetter Reinholdtsen typedef struct {
271*c18ec02fSPetter Reinholdtsen 	BYTE rsSa;
272*c18ec02fSPetter Reinholdtsen 	BYTE nfLn;
273*c18ec02fSPetter Reinholdtsen 	BYTE cSum1;
274*c18ec02fSPetter Reinholdtsen 	BYTE rqSa;
275*c18ec02fSPetter Reinholdtsen 	BYTE seqLn;
276*c18ec02fSPetter Reinholdtsen 	BYTE cmd;
277*c18ec02fSPetter Reinholdtsen 	BYTE data[1];
278*c18ec02fSPetter Reinholdtsen } ImbPacket;
279*c18ec02fSPetter Reinholdtsen #define MIN_IMB_PACKET_SIZE	7
280*c18ec02fSPetter Reinholdtsen #define MAX_IMB_PACKET_SIZE	33
281*c18ec02fSPetter Reinholdtsen /*
282*c18ec02fSPetter Reinholdtsen  * This is the standard IMB response format where the first byte of
283*c18ec02fSPetter Reinholdtsen  * IMB packet data is interpreted as a command completion code.
284*c18ec02fSPetter Reinholdtsen */
285*c18ec02fSPetter Reinholdtsen typedef struct {
286*c18ec02fSPetter Reinholdtsen 	BYTE rsSa;
287*c18ec02fSPetter Reinholdtsen 	BYTE nfLn;
288*c18ec02fSPetter Reinholdtsen 	BYTE cSum1;
289*c18ec02fSPetter Reinholdtsen 	BYTE rqSa;
290*c18ec02fSPetter Reinholdtsen 	BYTE seqLn;
291*c18ec02fSPetter Reinholdtsen 	BYTE cmd;
292*c18ec02fSPetter Reinholdtsen 	BYTE cCode;
293*c18ec02fSPetter Reinholdtsen 	BYTE data[1];
294*c18ec02fSPetter Reinholdtsen } ImbRespPacket;
295*c18ec02fSPetter Reinholdtsen #define MIN_IMB_RESPONSE_SIZE	7	/* min packet + completion code */
296*c18ec02fSPetter Reinholdtsen #define MAX_IMB_RESPONSE_SIZE	MAX_IMB_PACKET_SIZE
297*c18ec02fSPetter Reinholdtsen /************************
298*c18ec02fSPetter Reinholdtsen  *  ImbRequestBuffer
299*c18ec02fSPetter Reinholdtsen  ************************/
300*c18ec02fSPetter Reinholdtsen /*D*
301*c18ec02fSPetter Reinholdtsen //  Name:       ImbRequestBuffer
302*c18ec02fSPetter Reinholdtsen //  Purpose:    Structure definition for holding IMB message data
303*c18ec02fSPetter Reinholdtsen //  Context:    Used by SendTimedImbpMessage and SendTimedI2cMessge
304*c18ec02fSPetter Reinholdtsen //              functions in the library interface. In use, it is overlayed on a
305*c18ec02fSPetter Reinholdtsen //				char buffer of size MIN_IMB_REQ_BUF_SIZE +
306*c18ec02fSPetter Reinholdtsen //  Fields:
307*c18ec02fSPetter Reinholdtsen //              respBufSize     size of the response buffer
308*c18ec02fSPetter Reinholdtsen //
309*c18ec02fSPetter Reinholdtsen //              timeout         timeout value in milli seconds
310*c18ec02fSPetter Reinholdtsen //
311*c18ec02fSPetter Reinholdtsen //              req		body of request to send
312*c18ec02fSPetter Reinholdtsen //
313*c18ec02fSPetter Reinholdtsen *D*/
314*c18ec02fSPetter Reinholdtsen typedef struct {
315*c18ec02fSPetter Reinholdtsen 	BYTE rsSa;
316*c18ec02fSPetter Reinholdtsen 	BYTE cmd;
317*c18ec02fSPetter Reinholdtsen 	BYTE netFn;
318*c18ec02fSPetter Reinholdtsen 	BYTE rsLun;
319*c18ec02fSPetter Reinholdtsen 	BYTE dataLength;
320*c18ec02fSPetter Reinholdtsen 	BYTE data[1];
321*c18ec02fSPetter Reinholdtsen } ImbRequest;
322*c18ec02fSPetter Reinholdtsen typedef struct {
323*c18ec02fSPetter Reinholdtsen    DWORD	flags;			/* request flags*/
324*c18ec02fSPetter Reinholdtsen #define NO_RESPONSE_EXPECTED	0x01	/*dont wait around for an IMB response*/
325*c18ec02fSPetter Reinholdtsen    DWORD	timeOut;		/* in uSec units*/
326*c18ec02fSPetter Reinholdtsen    ImbRequest	req;			/* message buffer*/
327*c18ec02fSPetter Reinholdtsen } ImbRequestBuffer;
328*c18ec02fSPetter Reinholdtsen #define MIN_IMB_REQ_BUF_SIZE	13	/* a buffer without any request data*/
329*c18ec02fSPetter Reinholdtsen /************************
330*c18ec02fSPetter Reinholdtsen  *  ImbResponseBuffer
331*c18ec02fSPetter Reinholdtsen  ************************/
332*c18ec02fSPetter Reinholdtsen /*D*
333*c18ec02fSPetter Reinholdtsen //  Name:       ImbResponseBuffer
334*c18ec02fSPetter Reinholdtsen //  Purpose:    Structure definition for response of a previous send
335*c18ec02fSPetter Reinholdtsen //  Context:    Used by DeviceIoControl to pass the message to be sent to
336*c18ec02fSPetter Reinholdtsen //              MISSMIC port
337*c18ec02fSPetter Reinholdtsen //  Fields:
338*c18ec02fSPetter Reinholdtsen //  		cCode		completion code returned by firmware
339*c18ec02fSPetter Reinholdtsen //              data		buffer for  response data from firmware
340*c18ec02fSPetter Reinholdtsen *D*/
341*c18ec02fSPetter Reinholdtsen typedef struct {
342*c18ec02fSPetter Reinholdtsen 	BYTE       cCode;
343*c18ec02fSPetter Reinholdtsen 	BYTE       data[1];
344*c18ec02fSPetter Reinholdtsen } ImbResponseBuffer;
345*c18ec02fSPetter Reinholdtsen #define MIN_IMB_RESP_BUF_SIZE	1
346*c18ec02fSPetter Reinholdtsen #define MAX_IMB_RESP_SIZE		(MIN_IMB_RESP_BUF_SIZE + MAX_IMB_RESPONSE_SIZE)
347*c18ec02fSPetter Reinholdtsen #pragma pack()
348*c18ec02fSPetter Reinholdtsen /*
349*c18ec02fSPetter Reinholdtsen  * Async message access structures and types
350*c18ec02fSPetter Reinholdtsen  */
351*c18ec02fSPetter Reinholdtsen typedef DWORD	ImbAsyncSeq;
352*c18ec02fSPetter Reinholdtsen /*
353*c18ec02fSPetter Reinholdtsen  * This is the structure passed in to IOCTL_IMB_GET_ASYNC_MSG
354*c18ec02fSPetter Reinholdtsen */
355*c18ec02fSPetter Reinholdtsen typedef struct {
356*c18ec02fSPetter Reinholdtsen 	DWORD		timeOut;
357*c18ec02fSPetter Reinholdtsen 	ImbAsyncSeq	lastSeq;
358*c18ec02fSPetter Reinholdtsen } ImbAsyncRequest;
359*c18ec02fSPetter Reinholdtsen #define ASYNC_SEQ_START		0
360*c18ec02fSPetter Reinholdtsen typedef struct {
361*c18ec02fSPetter Reinholdtsen 	ImbAsyncSeq	thisSeq;
362*c18ec02fSPetter Reinholdtsen 	BYTE data[1];
363*c18ec02fSPetter Reinholdtsen } ImbAsyncResponse;
364*c18ec02fSPetter Reinholdtsen #define MIN_ASYNC_RESP_SIZE	sizeof( ImbAsyncSeq )
365*c18ec02fSPetter Reinholdtsen #define MAX_ASYNC_RESP_SIZE	(MIN_ASYNC_RESP_SIZE + MAX_IMB_PACKET_SIZE)
366*c18ec02fSPetter Reinholdtsen /*
367*c18ec02fSPetter Reinholdtsen ** Driver Ioctls
368*c18ec02fSPetter Reinholdtsen ** In Linux, these calculate to:
369*c18ec02fSPetter Reinholdtsen ** IOCTL_IMB_SEND_MESSAGE    =1082
370*c18ec02fSPetter Reinholdtsen ** IOCTL_IMB_GET_ASYNC_MSG   =1088
371*c18ec02fSPetter Reinholdtsen ** IOCTL_IMB_MAP_MEMORY      =108e
372*c18ec02fSPetter Reinholdtsen ** IOCTL_IMB_UNMAP_MEMORY    =1090
373*c18ec02fSPetter Reinholdtsen ** IOCTL_IMB_SHUTDOWN_CODE   =1092
374*c18ec02fSPetter Reinholdtsen ** IOCTL_IMB_REGISTER_ASYNC_OBJ  =1098
375*c18ec02fSPetter Reinholdtsen ** IOCTL_IMB_DEREGISTER_ASYNC_OBJ=109a
376*c18ec02fSPetter Reinholdtsen ** IOCTL_IMB_CHECK_EVENT     =109c
377*c18ec02fSPetter Reinholdtsen ** IOCTL_IMB_POLL_ASYNC      =1094
378*c18ec02fSPetter Reinholdtsen */
379*c18ec02fSPetter Reinholdtsen #define FILE_DEVICE_IMB			0x00008010
380*c18ec02fSPetter Reinholdtsen #define IOCTL_IMB_BASE			0x00000880
381*c18ec02fSPetter Reinholdtsen #define IOCTL_IMB_SEND_MESSAGE		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 2),  METHOD_BUFFERED, FILE_ANY_ACCESS)
382*c18ec02fSPetter Reinholdtsen #define IOCTL_IMB_GET_ASYNC_MSG		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 8),  METHOD_BUFFERED, FILE_ANY_ACCESS)
383*c18ec02fSPetter Reinholdtsen #define IOCTL_IMB_MAP_MEMORY		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 14), METHOD_BUFFERED, FILE_ANY_ACCESS)
384*c18ec02fSPetter Reinholdtsen #define IOCTL_IMB_UNMAP_MEMORY		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 16), METHOD_BUFFERED, FILE_ANY_ACCESS)
385*c18ec02fSPetter Reinholdtsen #define IOCTL_IMB_SHUTDOWN_CODE		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 18), METHOD_BUFFERED, FILE_ANY_ACCESS)
386*c18ec02fSPetter Reinholdtsen #define IOCTL_IMB_REGISTER_ASYNC_OBJ	CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 24), METHOD_BUFFERED, FILE_ANY_ACCESS)
387*c18ec02fSPetter Reinholdtsen #define IOCTL_IMB_DEREGISTER_ASYNC_OBJ	CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 26), METHOD_BUFFERED, FILE_ANY_ACCESS)
388*c18ec02fSPetter Reinholdtsen #define IOCTL_IMB_CHECK_EVENT		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 28), METHOD_BUFFERED, FILE_ANY_ACCESS)
389*c18ec02fSPetter Reinholdtsen #define IOCTL_IMB_POLL_ASYNC		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 20), METHOD_BUFFERED, FILE_ANY_ACCESS)
390*c18ec02fSPetter Reinholdtsen #endif /* IMB_IF__ */
391*c18ec02fSPetter Reinholdtsen /*----------------------------------------------------------------------*/
392*c18ec02fSPetter Reinholdtsen /*  No asynchronous messages available */
393*c18ec02fSPetter Reinholdtsen #define IMB_MSG_NOT_AVAILABLE            ((NTSTATUS)0xE0070012L)
394*c18ec02fSPetter Reinholdtsen #ifdef IMBLOG_H__
395*c18ec02fSPetter Reinholdtsen /* Define the facility codes */
396*c18ec02fSPetter Reinholdtsen #define FACILITY_RPC_STUBS               0x3
397*c18ec02fSPetter Reinholdtsen #define FACILITY_RPC_RUNTIME             0x2
398*c18ec02fSPetter Reinholdtsen #define FACILITY_IO_ERROR_CODE           0x4
399*c18ec02fSPetter Reinholdtsen #define IMB_IO_ERROR_CODE                0x7
400*c18ec02fSPetter Reinholdtsen 
401*c18ec02fSPetter Reinholdtsen #define STATUS_SEVERITY_WARNING          0x2
402*c18ec02fSPetter Reinholdtsen #define STATUS_SEVERITY_SUCCESS          0x0
403*c18ec02fSPetter Reinholdtsen #define STATUS_SEVERITY_INFORMATIONAL    0x1
404*c18ec02fSPetter Reinholdtsen #define STATUS_SEVERITY_ERROR            0x3
405*c18ec02fSPetter Reinholdtsen /*  Not enough memory for internal storage  of device %1. */
406*c18ec02fSPetter Reinholdtsen #define INSUFFICIENT_RESOURCES           ((NTSTATUS)0xE0070001L)
407*c18ec02fSPetter Reinholdtsen 
408*c18ec02fSPetter Reinholdtsen #define INVALID_INPUT_BUFFER             ((NTSTATUS)0xE0070002L)
409*c18ec02fSPetter Reinholdtsen 
410*c18ec02fSPetter Reinholdtsen #define INVALID_OUTPUT_BUFFER            ((NTSTATUS)0xE0070003L)
411*c18ec02fSPetter Reinholdtsen 
412*c18ec02fSPetter Reinholdtsen #define IMB_SEND_TIMEOUT                 ((NTSTATUS)0xE0070004L)
413*c18ec02fSPetter Reinholdtsen 
414*c18ec02fSPetter Reinholdtsen #define IMB_RECEIVE_TIMEOUT              ((NTSTATUS)0xE0070005L)
415*c18ec02fSPetter Reinholdtsen 
416*c18ec02fSPetter Reinholdtsen #define IMB_IF_SEND_TIMEOUT              ((NTSTATUS)0xE0070006L)
417*c18ec02fSPetter Reinholdtsen 
418*c18ec02fSPetter Reinholdtsen #define IMB_IF_RECEIVE_TIMEOUT           ((NTSTATUS)0xE0040007L)
419*c18ec02fSPetter Reinholdtsen 
420*c18ec02fSPetter Reinholdtsen #define HARDWARE_FAILURE                 ((NTSTATUS)0xE0040008L)
421*c18ec02fSPetter Reinholdtsen 
422*c18ec02fSPetter Reinholdtsen #define DRIVER_FAILURE                   ((NTSTATUS)0xE0040009L)
423*c18ec02fSPetter Reinholdtsen 
424*c18ec02fSPetter Reinholdtsen #define IMB_INVALID_IF_RESPONSE          ((NTSTATUS)0xE004000AL)
425*c18ec02fSPetter Reinholdtsen 
426*c18ec02fSPetter Reinholdtsen #define IMB_INVALID_PACKET               ((NTSTATUS)0xE004000BL)
427*c18ec02fSPetter Reinholdtsen 
428*c18ec02fSPetter Reinholdtsen #define IMB_RESPONSE_DATA_OVERFLOW       ((NTSTATUS)0xE004000CL)
429*c18ec02fSPetter Reinholdtsen 
430*c18ec02fSPetter Reinholdtsen #define IMB_INVALID_REQUEST              ((NTSTATUS)0xE007000DL)
431*c18ec02fSPetter Reinholdtsen 
432*c18ec02fSPetter Reinholdtsen #define INVALID_DRIVER_IOCTL             ((NTSTATUS)0xE007000EL)
433*c18ec02fSPetter Reinholdtsen 
434*c18ec02fSPetter Reinholdtsen #define INVALID_DRIVER_REQUEST           ((NTSTATUS)0xE007000FL)
435*c18ec02fSPetter Reinholdtsen 
436*c18ec02fSPetter Reinholdtsen #define IMB_CANT_GET_SMS_BUFFER          ((NTSTATUS)0xE0070010L)
437*c18ec02fSPetter Reinholdtsen 
438*c18ec02fSPetter Reinholdtsen #define INPUT_BUFFER_TOO_SMALL           ((NTSTATUS)0xE0070011L)
439*c18ec02fSPetter Reinholdtsen 
440*c18ec02fSPetter Reinholdtsen #define IMB_SEND_ERROR                   ((NTSTATUS)0xE0070013L)
441*c18ec02fSPetter Reinholdtsen #endif /* IMBLOG_H__ */
442*c18ec02fSPetter Reinholdtsen /*----------------------------------------------------------------------*/
443*c18ec02fSPetter Reinholdtsen #ifndef IMBAPI_H__
444*c18ec02fSPetter Reinholdtsen #define IMBAPI_H__
445*c18ec02fSPetter Reinholdtsen #include <sys/types.h>
446*c18ec02fSPetter Reinholdtsen #define	WRITE_READ_I2C		0x52
447*c18ec02fSPetter Reinholdtsen #define	WRITE_EMP_BUFFER	0x7a
448*c18ec02fSPetter Reinholdtsen #define	GET_DEVICE_ID		0x1
449*c18ec02fSPetter Reinholdtsen #define SEND_MESSAGE		0x34
450*c18ec02fSPetter Reinholdtsen #define BMC_SA			0x20
451*c18ec02fSPetter Reinholdtsen #define BMC_LUN			0
452*c18ec02fSPetter Reinholdtsen #define APP_NETFN		0x06
453*c18ec02fSPetter Reinholdtsen #define	IPMI_09_VERSION		0x90
454*c18ec02fSPetter Reinholdtsen #define	IPMI_10_VERSION		0x01
455*c18ec02fSPetter Reinholdtsen 
456*c18ec02fSPetter Reinholdtsen #define	IPMI_15_VERSION		0x51
457*c18ec02fSPetter Reinholdtsen 
458*c18ec02fSPetter Reinholdtsen #ifndef IPMI10_GET_DEVICE_ID_RESP_LENGTH
459*c18ec02fSPetter Reinholdtsen #define IPMI10_GET_DEVICE_ID_RESP_LENGTH	12
460*c18ec02fSPetter Reinholdtsen #endif
461*c18ec02fSPetter Reinholdtsen 
462*c18ec02fSPetter Reinholdtsen #define IPMB_CHANNEL			0x0
463*c18ec02fSPetter Reinholdtsen #define	EMP_CHANNEL			0x1
464*c18ec02fSPetter Reinholdtsen #define LAN_CHANNEL			0x2
465*c18ec02fSPetter Reinholdtsen #define	RESERVED_LUN			0x3
466*c18ec02fSPetter Reinholdtsen #define	IPMB_LUN			0x2
467*c18ec02fSPetter Reinholdtsen #define	EMP_LUN				0x0
468*c18ec02fSPetter Reinholdtsen 
469*c18ec02fSPetter Reinholdtsen #define		PUBLIC_BUS		0
470*c18ec02fSPetter Reinholdtsen 
471*c18ec02fSPetter Reinholdtsen #define BMC_CONTROLLER			0x20
472*c18ec02fSPetter Reinholdtsen #define FPC_CONTROLLER			0x22
473*c18ec02fSPetter Reinholdtsen typedef enum {
474*c18ec02fSPetter Reinholdtsen 	ACCESN_OK,
475*c18ec02fSPetter Reinholdtsen 	ACCESN_ERROR,
476*c18ec02fSPetter Reinholdtsen 	ACCESN_OUT_OF_RANGE,
477*c18ec02fSPetter Reinholdtsen 	ACCESN_END_OF_DATA,
478*c18ec02fSPetter Reinholdtsen 	ACCESN_UNSUPPORTED,
479*c18ec02fSPetter Reinholdtsen 	ACCESN_INVALID_TRANSACTION,
480*c18ec02fSPetter Reinholdtsen 	ACCESN_TIMED_OUT
481*c18ec02fSPetter Reinholdtsen } ACCESN_STATUS;
482*c18ec02fSPetter Reinholdtsen #pragma pack(1)
483*c18ec02fSPetter Reinholdtsen /*
484*c18ec02fSPetter Reinholdtsen  * Request structure provided to SendTimedImbpRequest()
485*c18ec02fSPetter Reinholdtsen */
486*c18ec02fSPetter Reinholdtsen typedef struct {
487*c18ec02fSPetter Reinholdtsen 	unsigned char	cmdType;
488*c18ec02fSPetter Reinholdtsen 	unsigned char	rsSa;
489*c18ec02fSPetter Reinholdtsen 	unsigned char	busType;
490*c18ec02fSPetter Reinholdtsen 	unsigned char	netFn;
491*c18ec02fSPetter Reinholdtsen 	unsigned char	rsLun;
492*c18ec02fSPetter Reinholdtsen 	unsigned char *	data;
493*c18ec02fSPetter Reinholdtsen 	int		dataLength;
494*c18ec02fSPetter Reinholdtsen } IMBPREQUESTDATA;
495*c18ec02fSPetter Reinholdtsen /*
496*c18ec02fSPetter Reinholdtsen  * Request structure provided to SendTimedI2cRequest()
497*c18ec02fSPetter Reinholdtsen */
498*c18ec02fSPetter Reinholdtsen typedef struct {
499*c18ec02fSPetter Reinholdtsen 	unsigned char	rsSa;
500*c18ec02fSPetter Reinholdtsen 	unsigned char	busType;
501*c18ec02fSPetter Reinholdtsen 	unsigned char	numberOfBytesToRead;
502*c18ec02fSPetter Reinholdtsen 	unsigned char *	data;
503*c18ec02fSPetter Reinholdtsen 	int		dataLength;
504*c18ec02fSPetter Reinholdtsen } I2CREQUESTDATA;
505*c18ec02fSPetter Reinholdtsen #pragma pack()
506*c18ec02fSPetter Reinholdtsen /*#ifdef IMB_API
507*c18ec02fSPetter Reinholdtsen  *
508*c18ec02fSPetter Reinholdtsen  * This section is provided to be able to compile using imb_if.h
509*c18ec02fSPetter Reinholdtsen  *
510*c18ec02fSPetter Reinholdtsen  *
511*c18ec02fSPetter Reinholdtsen  * function return type. This is also defined in the local instrumentation
512*c18ec02fSPetter Reinholdtsen  * so we ifdef here to avoid conflict.
513*c18ec02fSPetter Reinholdtsen */
514*c18ec02fSPetter Reinholdtsen #define METHOD_BUFFERED		0
515*c18ec02fSPetter Reinholdtsen #define FILE_ANY_ACCESS		0
516*c18ec02fSPetter Reinholdtsen /*
517*c18ec02fSPetter Reinholdtsen  * This is necessary to compile using memIf.h
518*c18ec02fSPetter Reinholdtsen  */
519*c18ec02fSPetter Reinholdtsen typedef enum _INTERFACE_TYPE
520*c18ec02fSPetter Reinholdtsen {
521*c18ec02fSPetter Reinholdtsen     Internal,
522*c18ec02fSPetter Reinholdtsen     Isa,
523*c18ec02fSPetter Reinholdtsen     Eisa,
524*c18ec02fSPetter Reinholdtsen     MicroChannel,
525*c18ec02fSPetter Reinholdtsen     TurboChannel,
526*c18ec02fSPetter Reinholdtsen     MaximumInterfaceType
527*c18ec02fSPetter Reinholdtsen } INTERFACE_TYPE, * PINTERFACE_TYPE;
528*c18ec02fSPetter Reinholdtsen #ifdef WIN32
529*c18ec02fSPetter Reinholdtsen /* From memIf.h */
530*c18ec02fSPetter Reinholdtsen #pragma pack(1)
531*c18ec02fSPetter Reinholdtsen typedef struct
532*c18ec02fSPetter Reinholdtsen {
533*c18ec02fSPetter Reinholdtsen     INTERFACE_TYPE   InterfaceType; // Isa, Eisa, etc....
534*c18ec02fSPetter Reinholdtsen     ULONG            BusNumber;     // Bus number
535*c18ec02fSPetter Reinholdtsen     PHYSICAL_ADDRESS BusAddress;    // Bus-relative address
536*c18ec02fSPetter Reinholdtsen     ULONG            AddressSpace;  // 0 is memory, 1 is I/O
537*c18ec02fSPetter Reinholdtsen     ULONG            Length;        // Length of section to map
538*c18ec02fSPetter Reinholdtsen } PHYSICAL_MEMORY_INFO, * PPHYSICAL_MEMORY_INFO;
539*c18ec02fSPetter Reinholdtsen #pragma pack()
540*c18ec02fSPetter Reinholdtsen #endif
541*c18ec02fSPetter Reinholdtsen /*#else	// not IMB_API */
542*c18ec02fSPetter Reinholdtsen /*
543*c18ec02fSPetter Reinholdtsen  * These are defined in imb_if.h but are needed by users of the imbapi library
544*c18ec02fSPetter Reinholdtsen */
545*c18ec02fSPetter Reinholdtsen #define ASYNC_SEQ_START		0
546*c18ec02fSPetter Reinholdtsen /*
547*c18ec02fSPetter Reinholdtsen  * This is the generic IMB packet format, the final checksum cant be
548*c18ec02fSPetter Reinholdtsen  * represented in this structure and will show up as the last data byte
549*c18ec02fSPetter Reinholdtsen  */
550*c18ec02fSPetter Reinholdtsen /*
551*c18ec02fSPetter Reinholdtsen  #define MIN_IMB_PACKET_SIZE	7
552*c18ec02fSPetter Reinholdtsen  #define MAX_IMB_PACKET_SIZE	33
553*c18ec02fSPetter Reinholdtsen */
554*c18ec02fSPetter Reinholdtsen #define	MAX_BUFFER_SIZE		64
555*c18ec02fSPetter Reinholdtsen /*#endif // IMB_API */
556*c18ec02fSPetter Reinholdtsen /******************************
557*c18ec02fSPetter Reinholdtsen  *  FUNCTION PROTOTYPES
558*c18ec02fSPetter Reinholdtsen  ******************************/
559*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
560*c18ec02fSPetter Reinholdtsen SendTimedImbpRequest (
561*c18ec02fSPetter Reinholdtsen 	IMBPREQUESTDATA *reqPtr,
562*c18ec02fSPetter Reinholdtsen 	int		timeOut,
563*c18ec02fSPetter Reinholdtsen 	BYTE *		respDataPtr,
564*c18ec02fSPetter Reinholdtsen 	int *		respDataLen,
565*c18ec02fSPetter Reinholdtsen 	BYTE *		completionCode
566*c18ec02fSPetter Reinholdtsen 	);
567*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
568*c18ec02fSPetter Reinholdtsen SendTimedI2cRequest (
569*c18ec02fSPetter Reinholdtsen 	I2CREQUESTDATA *reqPtr,
570*c18ec02fSPetter Reinholdtsen 	int		timeOut,
571*c18ec02fSPetter Reinholdtsen 	BYTE *		respDataPtr,
572*c18ec02fSPetter Reinholdtsen 	int *		respDataLen,
573*c18ec02fSPetter Reinholdtsen 	BYTE *		completionCode
574*c18ec02fSPetter Reinholdtsen 	);
575*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
576*c18ec02fSPetter Reinholdtsen SendAsyncImbpRequest (
577*c18ec02fSPetter Reinholdtsen 	IMBPREQUESTDATA *reqPtr,
578*c18ec02fSPetter Reinholdtsen 	BYTE *		 seqNo
579*c18ec02fSPetter Reinholdtsen 	);
580*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
581*c18ec02fSPetter Reinholdtsen GetAsyncImbpMessage (
582*c18ec02fSPetter Reinholdtsen 	ImbPacket *	msgPtr,
583*c18ec02fSPetter Reinholdtsen 	DWORD *		msgLen,
584*c18ec02fSPetter Reinholdtsen 	DWORD		timeOut,
585*c18ec02fSPetter Reinholdtsen 	ImbAsyncSeq *	seqNo,
586*c18ec02fSPetter Reinholdtsen 	DWORD		channelNumber
587*c18ec02fSPetter Reinholdtsen 	);
588*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
589*c18ec02fSPetter Reinholdtsen GetAsyncImbpMessage_Ex (
590*c18ec02fSPetter Reinholdtsen 	ImbPacket *	msgPtr,
591*c18ec02fSPetter Reinholdtsen 	DWORD *		msgLen,
592*c18ec02fSPetter Reinholdtsen 	DWORD		timeOut,
593*c18ec02fSPetter Reinholdtsen 	ImbAsyncSeq *	seqNo,
594*c18ec02fSPetter Reinholdtsen 	DWORD		channelNumber,
595*c18ec02fSPetter Reinholdtsen 	BYTE *		sessionHandle,
596*c18ec02fSPetter Reinholdtsen 	BYTE *		privilege
597*c18ec02fSPetter Reinholdtsen 	);
598*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
599*c18ec02fSPetter Reinholdtsen UnmapPhysicalMemory( int virtualAddress, int Length );
600*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
601*c18ec02fSPetter Reinholdtsen StartAsyncMesgPoll(void);
602*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
603*c18ec02fSPetter Reinholdtsen MapPhysicalMemory (
604*c18ec02fSPetter Reinholdtsen 	int startAddress,
605*c18ec02fSPetter Reinholdtsen 	int addressLength,
606*c18ec02fSPetter Reinholdtsen 	int *virtualAddress
607*c18ec02fSPetter Reinholdtsen 	);
608*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
609*c18ec02fSPetter Reinholdtsen SetShutDownCode (
610*c18ec02fSPetter Reinholdtsen 	int delayTime,
611*c18ec02fSPetter Reinholdtsen 	int code
612*c18ec02fSPetter Reinholdtsen 	);
613*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
614*c18ec02fSPetter Reinholdtsen SendTimedEmpMessageResponse (
615*c18ec02fSPetter Reinholdtsen 	ImbPacket * ptr,
616*c18ec02fSPetter Reinholdtsen 	char      *responseDataBuf,
617*c18ec02fSPetter Reinholdtsen 	int	  responseDataLen,
618*c18ec02fSPetter Reinholdtsen 	int 	  timeOut
619*c18ec02fSPetter Reinholdtsen 	);
620*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
621*c18ec02fSPetter Reinholdtsen SendTimedEmpMessageResponse_Ex (
622*c18ec02fSPetter Reinholdtsen 	ImbPacket * ptr,
623*c18ec02fSPetter Reinholdtsen 	char      *responseDataBuf,
624*c18ec02fSPetter Reinholdtsen 	int	  responseDataLen,
625*c18ec02fSPetter Reinholdtsen 	int 	  timeOut,
626*c18ec02fSPetter Reinholdtsen 	BYTE	  sessionHandle,
627*c18ec02fSPetter Reinholdtsen 	BYTE	  channelNumber
628*c18ec02fSPetter Reinholdtsen 	);
629*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
630*c18ec02fSPetter Reinholdtsen SendTimedLanMessageResponse (
631*c18ec02fSPetter Reinholdtsen 	ImbPacket * ptr,
632*c18ec02fSPetter Reinholdtsen 	char      *responseDataBuf,
633*c18ec02fSPetter Reinholdtsen 	int	  responseDataLen,
634*c18ec02fSPetter Reinholdtsen 	int 	  timeOut
635*c18ec02fSPetter Reinholdtsen 	);
636*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
637*c18ec02fSPetter Reinholdtsen SendTimedLanMessageResponse_Ex (
638*c18ec02fSPetter Reinholdtsen 	ImbPacket * ptr,
639*c18ec02fSPetter Reinholdtsen 	char      *responseDataBuf,
640*c18ec02fSPetter Reinholdtsen 	int	  responseDataLen,
641*c18ec02fSPetter Reinholdtsen 	int 	  timeOut	,
642*c18ec02fSPetter Reinholdtsen 	BYTE	  sessionHandle,
643*c18ec02fSPetter Reinholdtsen 	BYTE	  channelNumber
644*c18ec02fSPetter Reinholdtsen 	);
645*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
646*c18ec02fSPetter Reinholdtsen IsAsyncMessageAvailable (unsigned int   eventId	);
647*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
648*c18ec02fSPetter Reinholdtsen RegisterForImbAsyncMessageNotification (unsigned int *handleId);
649*c18ec02fSPetter Reinholdtsen ACCESN_STATUS
650*c18ec02fSPetter Reinholdtsen UnRegisterForImbAsyncMessageNotification (unsigned int handleId,int iFlag);
651*c18ec02fSPetter Reinholdtsen BYTE	GetIpmiVersion(void);
652*c18ec02fSPetter Reinholdtsen #endif /* IMBAPI_H__ */
653