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