Blame src/plugins/imb/imbapi.h

Packit d14fb6
/*M*
Packit d14fb6
//  PVCS:
Packit d14fb6
//      $Workfile:   imb_api.h  $
Packit d14fb6
//      $Revision: 1.2 $
Packit d14fb6
//      $Modtime:   Jul 22 2002 16:40:32  $
Packit d14fb6
//      $Author: iceblink $
Packit d14fb6
// 
Packit d14fb6
//  Combined include files needed for imbapi.c
Packit d14fb6
//
Packit d14fb6
 *M*/
Packit d14fb6
/*----------------------------------------------------------------------* 
Packit d14fb6
The BSD License 
Packit d14fb6
Copyright (c) 2002, Intel Corporation
Packit d14fb6
All rights reserved.
Packit d14fb6
Redistribution and use in source and binary forms, with or without 
Packit d14fb6
modification, are permitted provided that the following conditions are met:
Packit d14fb6
  a.. Redistributions of source code must retain the above copyright notice, 
Packit d14fb6
      this list of conditions and the following disclaimer. 
Packit d14fb6
  b.. Redistributions in binary form must reproduce the above copyright notice,
Packit d14fb6
      this list of conditions and the following disclaimer in the documentation 
Packit d14fb6
      and/or other materials provided with the distribution. 
Packit d14fb6
  c.. Neither the name of Intel Corporation nor the names of its contributors 
Packit d14fb6
      may be used to endorse or promote products derived from this software 
Packit d14fb6
      without specific prior written permission. 
Packit d14fb6
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 
Packit d14fb6
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
Packit d14fb6
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
Packit d14fb6
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 
Packit d14fb6
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
Packit d14fb6
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
Packit d14fb6
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 
Packit d14fb6
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
Packit d14fb6
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
Packit d14fb6
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Packit d14fb6
 *----------------------------------------------------------------------*/
Packit d14fb6
#ifndef	_WINDEFS_H
Packit d14fb6
#define	_WINDEFS_H
Packit d14fb6
#ifndef FALSE
Packit d14fb6
#define FALSE   0
Packit d14fb6
#endif
Packit d14fb6
#ifndef TRUE
Packit d14fb6
#define TRUE    1
Packit d14fb6
#endif
Packit d14fb6
#ifndef NULL
Packit d14fb6
#define NULL 0
Packit d14fb6
#endif
Packit d14fb6
#ifndef WIN32   
Packit d14fb6
/* WIN32 defines this in stdio.h */
Packit d14fb6
#include <wchar.h>
Packit d14fb6
#endif
Packit d14fb6
#define far
Packit d14fb6
#define near
Packit d14fb6
#define FAR                 far
Packit d14fb6
#define NEAR                near
Packit d14fb6
#ifndef CONST
Packit d14fb6
#define CONST               const
Packit d14fb6
#endif
Packit d14fb6
typedef unsigned long       DWORD;
Packit d14fb6
typedef int                 BOOL;
Packit d14fb6
typedef unsigned char       BYTE;
Packit d14fb6
typedef unsigned short      WORD;
Packit d14fb6
typedef float               FLOAT;
Packit d14fb6
typedef FLOAT               *PFLOAT;
Packit d14fb6
typedef BOOL near           *PBOOL;
Packit d14fb6
typedef BOOL far            *LPBOOL;
Packit d14fb6
typedef BYTE near           *PBYTE;
Packit d14fb6
typedef BYTE far            *LPBYTE;
Packit d14fb6
typedef int near            *PINT;
Packit d14fb6
typedef int far             *LPINT;
Packit d14fb6
typedef WORD near           *PWORD;
Packit d14fb6
typedef WORD far            *LPWORD;
Packit d14fb6
typedef long far            *LPLONG;
Packit d14fb6
typedef DWORD near          *PDWORD;
Packit d14fb6
typedef DWORD far           *LPDWORD;
Packit d14fb6
typedef void far            *LPVOID;
Packit d14fb6
typedef CONST void far      *LPCVOID;
Packit d14fb6
typedef int                 INT;
Packit d14fb6
typedef unsigned int        UINT;
Packit d14fb6
typedef unsigned int        *PUINT;
Packit d14fb6
typedef DWORD NTSTATUS;
Packit d14fb6
/*
Packit d14fb6
  File structures
Packit d14fb6
*/
Packit d14fb6
#ifndef WIN32
Packit d14fb6
typedef struct _OVERLAPPED {
Packit d14fb6
    DWORD   Internal;
Packit d14fb6
    DWORD   InternalHigh;
Packit d14fb6
    DWORD   Offset;
Packit d14fb6
    DWORD   OffsetHigh;
Packit d14fb6
/*    HANDLE  hEvent; */
Packit d14fb6
} OVERLAPPED, *LPOVERLAPPED;
Packit d14fb6
#endif
Packit d14fb6
/*
Packit d14fb6
 * Data structure redefines
Packit d14fb6
 */
Packit d14fb6
typedef char CHAR;
Packit d14fb6
typedef short SHORT;
Packit d14fb6
typedef long LONG;
Packit d14fb6
typedef char * PCHAR;
Packit d14fb6
typedef short * PSHORT;
Packit d14fb6
typedef long * PLONG;
Packit d14fb6
typedef unsigned char UCHAR;
Packit d14fb6
typedef unsigned short USHORT;
Packit d14fb6
typedef unsigned long ULONG;
Packit d14fb6
typedef unsigned char * PUCHAR;
Packit d14fb6
typedef unsigned short * PUSHORT;
Packit d14fb6
typedef unsigned long * PULONG;
Packit d14fb6
typedef char CCHAR;
Packit d14fb6
typedef short CSHORT;
Packit d14fb6
typedef ULONG CLONG;
Packit d14fb6
typedef CCHAR * PCCHAR;
Packit d14fb6
typedef CSHORT * PCSHORT;
Packit d14fb6
typedef CLONG * PCLONG;
Packit d14fb6
typedef void * PVOID;
Packit d14fb6
#ifndef WIN32
Packit d14fb6
typedef void VOID;
Packit d14fb6
typedef struct _LARGE_INTEGER {
Packit d14fb6
	ULONG LowPart;
Packit d14fb6
	LONG HighPart;
Packit d14fb6
} LARGE_INTEGER;
Packit d14fb6
typedef struct _ULARGE_INTEGER {
Packit d14fb6
	ULONG LowPart;
Packit d14fb6
	ULONG HighPart;
Packit d14fb6
} ULARGE_INTEGER;
Packit d14fb6
#endif
Packit d14fb6
typedef LARGE_INTEGER * PLARGE_INTEGER;
Packit d14fb6
typedef LARGE_INTEGER PHYSICAL_ADDRESS;
Packit d14fb6
typedef LARGE_INTEGER * PPHYSICAL_ADDRESS;
Packit d14fb6
typedef ULARGE_INTEGER * PULARGE_INTEGER;
Packit d14fb6
typedef UCHAR BOOLEAN;
Packit d14fb6
typedef BOOLEAN *PBOOLEAN;
Packit d14fb6
typedef wchar_t		    WCHAR;
Packit d14fb6
typedef WCHAR		    *PWCHAR, *PWSTR;
Packit d14fb6
typedef CONST WCHAR	    *LPCWSTR, *PCWSTR;
Packit d14fb6
Packit d14fb6
#ifndef _SYS_TYPES_H
Packit d14fb6
#ifndef _CADDR_T
Packit d14fb6
#define _CADDR_T
Packit d14fb6
  typedef char *        caddr_t;
Packit d14fb6
#endif
Packit d14fb6
#endif
Packit d14fb6
/*
Packit d14fb6
 Unicode strings are counted 16-bit character strings. If they are
Packit d14fb6
 NULL terminated, Length does not include trailing NULL.
Packit d14fb6
*/
Packit d14fb6
typedef struct _UNICODE_STRING {
Packit d14fb6
    USHORT Length;
Packit d14fb6
    USHORT MaximumLength;
Packit d14fb6
    PWSTR  Buffer;
Packit d14fb6
} UNICODE_STRING;
Packit d14fb6
typedef UNICODE_STRING *PUNICODE_STRING;
Packit d14fb6
#define UNICODE_NULL ((WCHAR)0)   /* winnt*/
Packit d14fb6
#define IN	/* */
Packit d14fb6
#define OUT	/* */
Packit d14fb6
#define OPTIONAL	/* */
Packit d14fb6
Packit d14fb6
#ifndef WIN32
Packit d14fb6
#define FIELD_OFFSET(type, field)    ((LONG)&(((type *)0)->field))
Packit d14fb6
#define UNREFERENCED_PARAMETER(x)
Packit d14fb6
typedef	int HANDLE;
Packit d14fb6
#define	INVALID_HANDLE_VALUE	((HANDLE)-1)
Packit d14fb6
#endif
Packit d14fb6
typedef	HANDLE	*PHANDLE;
Packit d14fb6
/*
Packit d14fb6
 Define the method codes for how buffers are passed for I/O and FS controls
Packit d14fb6
*/
Packit d14fb6
#define METHOD_BUFFERED                 0
Packit d14fb6
/*
Packit d14fb6
 Define the access check value for any access
Packit d14fb6
 The FILE_READ_ACCESS and FILE_WRITE_ACCESS constants are also defined in
Packit d14fb6
 ntioapi.h as FILE_READ_DATA and FILE_WRITE_DATA. The values for these
Packit d14fb6
 constants *MUST* always be in sync.
Packit d14fb6
*/
Packit d14fb6
#define FILE_ANY_ACCESS                 0
Packit d14fb6
/*
Packit d14fb6
  These are the generic rights.
Packit d14fb6
*/
Packit d14fb6
#define    MAX_PATH        260
Packit d14fb6
#define	GetLastError()	(NTstatus.Status)
Packit d14fb6
/*
Packit d14fb6
 Macro definition for defining IOCTL and FSCTL function control codes.  Note
Packit d14fb6
 that function codes 0-2047 are reserved for Microsoft Corporation, and
Packit d14fb6
 2048-4095 are reserved for customers.
Packit d14fb6
*/
Packit d14fb6
/*
Packit d14fb6
 * Linux drivers expect ioctls defined using macros defined in ioctl.h.
Packit d14fb6
 * So, instead of using the CTL_CODE defined for NT and UW, I define CTL_CODE
Packit d14fb6
 * using these macros. That way imb_if.h, where the ioctls are defined get
Packit d14fb6
 * to use the correct ioctl command we expect. 
Packit d14fb6
 * Notes: I am using the generic _IO macro instead of the more specific
Packit d14fb6
 * ones. The macros expect 8bit entities, so I am cleaning what is sent to
Packit d14fb6
 * us from imb_if.h  - Mahendra
Packit d14fb6
 */
Packit d14fb6
#ifndef WIN32
Packit d14fb6
#define CTL_CODE(DeviceType, Function, Method, Access)\
Packit d14fb6
		_IO(DeviceType & 0x00FF, Function & 0x00FF)
Packit d14fb6
#else
Packit d14fb6
#define CTL_CODE( DeviceType, Function, Method, Access ) ((ULONG)(	\
Packit d14fb6
    ((ULONG)(DeviceType) << 16) | ((ULONG)(Access) << 14) | ((ULONG)(Function) << 2) | ((ULONG)Method) \
Packit d14fb6
))
Packit d14fb6
#endif
Packit d14fb6
#endif /*_WINDEFS_H */
Packit d14fb6
/*----------------------------------------------------------------------*/
Packit d14fb6
#ifndef	_SMI_H
Packit d14fb6
#define	_SMI_H
Packit d14fb6
#define SMI_Version1_00	0x00001000
Packit d14fb6
struct smi {
Packit d14fb6
    DWORD smi_VersionNo;
Packit d14fb6
    DWORD smi_Reserved1;
Packit d14fb6
    DWORD smi_Reserved2;
Packit d14fb6
    LPVOID ntstatus;	/* address of NT status block*/
Packit d14fb6
    LPVOID  lpvInBuffer;        /* address of buffer for input data*/
Packit d14fb6
    DWORD  cbInBuffer;  /* size of input buffer*/
Packit d14fb6
    LPVOID  lpvOutBuffer;       /* address of output buffer*/
Packit d14fb6
    DWORD  cbOutBuffer; /* size of output buffer*/
Packit d14fb6
    LPDWORD  lpcbBytesReturned; /* address of actual bytes of output*/
Packit d14fb6
    LPOVERLAPPED  lpoOverlapped;         /* address of overlapped structure*/
Packit d14fb6
};
Packit d14fb6
#ifndef STATUS_SUCCESS
Packit d14fb6
typedef struct _IO_STATUS_BLOCK {
Packit d14fb6
    ULONG Status;
Packit d14fb6
    ULONG Information;
Packit d14fb6
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
Packit d14fb6
/*
Packit d14fb6
 * I2C ioctl's return NTStatus codes
Packit d14fb6
 */
Packit d14fb6
#define STATUS_SUCCESS                   (0x00000000U)
Packit d14fb6
#define STATUS_UNSUCCESSFUL              (0xC0000001U)
Packit d14fb6
#define STATUS_DEVICE_BUSY               (0x80000011U)
Packit d14fb6
#ifndef WIN32
Packit d14fb6
#define STATUS_PENDING                   (0x00000103U)
Packit d14fb6
// see <win2000ddk>\inc\winnt.h(1171)
Packit d14fb6
#endif
Packit d14fb6
#define STATUS_INVALID_PARAMETER         (0xC000000DU)
Packit d14fb6
#define STATUS_INVALID_DEVICE_REQUEST    (0xC0000010U)
Packit d14fb6
#define STATUS_BUFFER_TOO_SMALL          (0xC0000023U)
Packit d14fb6
#define STATUS_FILE_CLOSED               (0xC0000128U)
Packit d14fb6
#define STATUS_INSUFFICIENT_RESOURCES    (0xC000009AU)
Packit d14fb6
#define STATUS_NO_DATA_DETECTED          (0x80000022U)
Packit d14fb6
#define STATUS_NO_SUCH_DEVICE            (0xC000000EU)
Packit d14fb6
#define STATUS_ALLOTTED_EXCEEDED         (0xC000000FU)
Packit d14fb6
#define STATUS_IO_DEVICE_ERROR           (0xC0000185U)
Packit d14fb6
#define STATUS_TOO_MANY_OPEN_FILES       (0xC000011FU)
Packit d14fb6
#define STATUS_ACCESS_DENIED             (0xC0000022U)
Packit d14fb6
#define STATUS_BUFFER_OVERFLOW           (0x80000005U)
Packit d14fb6
#define STATUS_CANCELLED                 (0xC0000120U)
Packit d14fb6
#endif	/* STATUS_SUCCESS*/
Packit d14fb6
#endif	/* _SMI_H*/
Packit d14fb6
/*----------------------------------------------------------------------*/
Packit d14fb6
#ifndef IMB_IF__
Packit d14fb6
#define IMB_IF__
Packit d14fb6
/*
Packit d14fb6
 * This is the structure passed in to the IOCTL_IMB_SHUTDOWN_CODE request
Packit d14fb6
 */
Packit d14fb6
typedef struct {
Packit d14fb6
	int	code;		
Packit d14fb6
	int	delayTime;  
Packit d14fb6
} ShutdownCmdBuffer;
Packit d14fb6
#define		SD_NO_ACTION				0
Packit d14fb6
#define		SD_RESET				1
Packit d14fb6
#define		SD_POWER_OFF				2
Packit d14fb6
#pragma pack(1)
Packit d14fb6
/*
Packit d14fb6
 * This is the generic IMB packet format, the final checksum cant be
Packit d14fb6
 * represented in this structure and will show up as the last data byte
Packit d14fb6
 */
Packit d14fb6
typedef struct {
Packit d14fb6
	BYTE rsSa;
Packit d14fb6
	BYTE nfLn;
Packit d14fb6
	BYTE cSum1;
Packit d14fb6
	BYTE rqSa;
Packit d14fb6
	BYTE seqLn;
Packit d14fb6
	BYTE cmd;
Packit d14fb6
	BYTE data[1];
Packit d14fb6
} ImbPacket;
Packit d14fb6
#define MIN_IMB_PACKET_SIZE	7 	
Packit d14fb6
#define MAX_IMB_PACKET_SIZE	33
Packit d14fb6
/*
Packit d14fb6
 * This is the standard IMB response format where the first byte of
Packit d14fb6
 * IMB packet data is interpreted as a command completion code.
Packit d14fb6
*/
Packit d14fb6
typedef struct {
Packit d14fb6
	BYTE rsSa;
Packit d14fb6
	BYTE nfLn;
Packit d14fb6
	BYTE cSum1;
Packit d14fb6
	BYTE rqSa;
Packit d14fb6
	BYTE seqLn;
Packit d14fb6
	BYTE cmd;
Packit d14fb6
	BYTE cCode;
Packit d14fb6
	BYTE data[1];
Packit d14fb6
} ImbRespPacket;
Packit d14fb6
#define MIN_IMB_RESPONSE_SIZE	7	/* min packet + completion code */
Packit d14fb6
#define MAX_IMB_RESPONSE_SIZE	MAX_IMB_PACKET_SIZE
Packit d14fb6
/************************
Packit d14fb6
 *  ImbRequestBuffer
Packit d14fb6
 ************************/
Packit d14fb6
/*D*
Packit d14fb6
//  Name:       ImbRequestBuffer
Packit d14fb6
//  Purpose:    Structure definition for holding IMB message data
Packit d14fb6
//  Context:    Used by SendTimedImbpMessage and SendTimedI2cMessge
Packit d14fb6
//              functions in the library interface. In use, it is overlayed on a
Packit d14fb6
//				char buffer of size MIN_IMB_REQ_BUF_SIZE + 
Packit d14fb6
//  Fields:     
Packit d14fb6
//              respBufSize     size of the response buffer
Packit d14fb6
//
Packit d14fb6
//              timeout         timeout value in milli seconds   
Packit d14fb6
//                     
Packit d14fb6
//              req		body of request to send
Packit d14fb6
//              
Packit d14fb6
*D*/			
Packit d14fb6
typedef struct {
Packit d14fb6
	BYTE rsSa;
Packit d14fb6
	BYTE cmd;
Packit d14fb6
	BYTE netFn;
Packit d14fb6
	BYTE rsLun;	
Packit d14fb6
	BYTE dataLength;
Packit d14fb6
	BYTE data[1];	
Packit d14fb6
} ImbRequest;
Packit d14fb6
typedef struct {
Packit d14fb6
   DWORD	flags;			/* request flags*/
Packit d14fb6
#define NO_RESPONSE_EXPECTED	0x01	/*dont wait around for an IMB response*/
Packit d14fb6
   DWORD	timeOut;		/* in uSec units*/
Packit d14fb6
   ImbRequest	req;			/* message buffer*/
Packit d14fb6
} ImbRequestBuffer;
Packit d14fb6
#define MIN_IMB_REQ_BUF_SIZE	13	/* a buffer without any request data*/
Packit d14fb6
/************************
Packit d14fb6
 *  ImbResponseBuffer
Packit d14fb6
 ************************/
Packit d14fb6
/*D*
Packit d14fb6
//  Name:       ImbResponseBuffer
Packit d14fb6
//  Purpose:    Structure definition for response of a previous send 
Packit d14fb6
//  Context:    Used by DeviceIoControl to pass the message to be sent to
Packit d14fb6
//              MISSMIC port
Packit d14fb6
//  Fields:     
Packit d14fb6
//  		cCode		completion code returned by firmware
Packit d14fb6
//              data		buffer for  response data from firmware
Packit d14fb6
*D*/
Packit d14fb6
typedef struct {
Packit d14fb6
	BYTE       cCode;	
Packit d14fb6
	BYTE       data[1];	
Packit d14fb6
} ImbResponseBuffer;
Packit d14fb6
#define MIN_IMB_RESP_BUF_SIZE	1	
Packit d14fb6
#define MAX_IMB_RESP_SIZE		(MIN_IMB_RESP_BUF_SIZE + MAX_IMB_RESPONSE_SIZE)
Packit d14fb6
#pragma pack()
Packit d14fb6
/*
Packit d14fb6
 * Async message access structures and types
Packit d14fb6
 */
Packit d14fb6
typedef DWORD	ImbAsyncSeq;
Packit d14fb6
/*
Packit d14fb6
 * This is the structure passed in to IOCTL_IMB_GET_ASYNC_MSG
Packit d14fb6
*/
Packit d14fb6
typedef struct {
Packit d14fb6
	DWORD		timeOut;   
Packit d14fb6
	ImbAsyncSeq	lastSeq;   
Packit d14fb6
} ImbAsyncRequest;
Packit d14fb6
#define ASYNC_SEQ_START		0
Packit d14fb6
typedef struct {
Packit d14fb6
	ImbAsyncSeq	thisSeq;
Packit d14fb6
	BYTE data[1];
Packit d14fb6
} ImbAsyncResponse;
Packit d14fb6
#define MIN_ASYNC_RESP_SIZE	sizeof( ImbAsyncSeq )
Packit d14fb6
#define MAX_ASYNC_RESP_SIZE	(MIN_ASYNC_RESP_SIZE + MAX_IMB_PACKET_SIZE)
Packit d14fb6
/*
Packit d14fb6
** Driver Ioctls
Packit d14fb6
** In Linux, these calculate to:
Packit d14fb6
** IOCTL_IMB_SEND_MESSAGE    =1082
Packit d14fb6
** IOCTL_IMB_GET_ASYNC_MSG   =1088
Packit d14fb6
** IOCTL_IMB_MAP_MEMORY      =108e
Packit d14fb6
** IOCTL_IMB_UNMAP_MEMORY    =1090
Packit d14fb6
** IOCTL_IMB_SHUTDOWN_CODE   =1092
Packit d14fb6
** IOCTL_IMB_REGISTER_ASYNC_OBJ  =1098
Packit d14fb6
** IOCTL_IMB_DEREGISTER_ASYNC_OBJ=109a
Packit d14fb6
** IOCTL_IMB_CHECK_EVENT     =109c
Packit d14fb6
** IOCTL_IMB_POLL_ASYNC      =1094
Packit d14fb6
*/
Packit d14fb6
#define FILE_DEVICE_IMB			0x00008010
Packit d14fb6
#define IOCTL_IMB_BASE			0x00000880
Packit d14fb6
#define IOCTL_IMB_SEND_MESSAGE		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 2),  METHOD_BUFFERED, FILE_ANY_ACCESS)
Packit d14fb6
#define IOCTL_IMB_GET_ASYNC_MSG		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 8),  METHOD_BUFFERED, FILE_ANY_ACCESS)
Packit d14fb6
#define IOCTL_IMB_MAP_MEMORY		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 14), METHOD_BUFFERED, FILE_ANY_ACCESS)
Packit d14fb6
#define IOCTL_IMB_UNMAP_MEMORY		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 16), METHOD_BUFFERED, FILE_ANY_ACCESS)
Packit d14fb6
#define IOCTL_IMB_SHUTDOWN_CODE		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 18), METHOD_BUFFERED, FILE_ANY_ACCESS)
Packit d14fb6
#define IOCTL_IMB_REGISTER_ASYNC_OBJ	CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 24), METHOD_BUFFERED, FILE_ANY_ACCESS)
Packit d14fb6
#define IOCTL_IMB_DEREGISTER_ASYNC_OBJ	CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 26), METHOD_BUFFERED, FILE_ANY_ACCESS)
Packit d14fb6
#define IOCTL_IMB_CHECK_EVENT		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 28), METHOD_BUFFERED, FILE_ANY_ACCESS)
Packit d14fb6
#define IOCTL_IMB_POLL_ASYNC		CTL_CODE(FILE_DEVICE_IMB, (IOCTL_IMB_BASE + 20), METHOD_BUFFERED, FILE_ANY_ACCESS)
Packit d14fb6
#endif /* IMB_IF__ */
Packit d14fb6
/*----------------------------------------------------------------------*/
Packit d14fb6
/*  No asynchronous messages available */
Packit d14fb6
#define IMB_MSG_NOT_AVAILABLE            ((NTSTATUS)0xE0070012L)
Packit d14fb6
#ifdef IMBLOG_H__
Packit d14fb6
/* Define the facility codes */
Packit d14fb6
#define FACILITY_RPC_STUBS               0x3
Packit d14fb6
#define FACILITY_RPC_RUNTIME             0x2
Packit d14fb6
#define FACILITY_IO_ERROR_CODE           0x4
Packit d14fb6
#define IMB_IO_ERROR_CODE                0x7
Packit d14fb6
Packit d14fb6
#define STATUS_SEVERITY_WARNING          0x2
Packit d14fb6
#define STATUS_SEVERITY_SUCCESS          0x0
Packit d14fb6
#define STATUS_SEVERITY_INFORMATIONAL    0x1
Packit d14fb6
#define STATUS_SEVERITY_ERROR            0x3
Packit d14fb6
/*  Not enough memory for internal storage  of device %1. */
Packit d14fb6
#define INSUFFICIENT_RESOURCES           ((NTSTATUS)0xE0070001L)
Packit d14fb6
Packit d14fb6
#define INVALID_INPUT_BUFFER             ((NTSTATUS)0xE0070002L)
Packit d14fb6
Packit d14fb6
#define INVALID_OUTPUT_BUFFER            ((NTSTATUS)0xE0070003L)
Packit d14fb6
Packit d14fb6
#define IMB_SEND_TIMEOUT                 ((NTSTATUS)0xE0070004L)
Packit d14fb6
Packit d14fb6
#define IMB_RECEIVE_TIMEOUT              ((NTSTATUS)0xE0070005L)
Packit d14fb6
Packit d14fb6
#define IMB_IF_SEND_TIMEOUT              ((NTSTATUS)0xE0070006L)
Packit d14fb6
Packit d14fb6
#define IMB_IF_RECEIVE_TIMEOUT           ((NTSTATUS)0xE0040007L)
Packit d14fb6
Packit d14fb6
#define HARDWARE_FAILURE                 ((NTSTATUS)0xE0040008L)
Packit d14fb6
Packit d14fb6
#define DRIVER_FAILURE                   ((NTSTATUS)0xE0040009L)
Packit d14fb6
Packit d14fb6
#define IMB_INVALID_IF_RESPONSE          ((NTSTATUS)0xE004000AL)
Packit d14fb6
Packit d14fb6
#define IMB_INVALID_PACKET               ((NTSTATUS)0xE004000BL)
Packit d14fb6
Packit d14fb6
#define IMB_RESPONSE_DATA_OVERFLOW       ((NTSTATUS)0xE004000CL)
Packit d14fb6
Packit d14fb6
#define IMB_INVALID_REQUEST              ((NTSTATUS)0xE007000DL)
Packit d14fb6
Packit d14fb6
#define INVALID_DRIVER_IOCTL             ((NTSTATUS)0xE007000EL)
Packit d14fb6
Packit d14fb6
#define INVALID_DRIVER_REQUEST           ((NTSTATUS)0xE007000FL)
Packit d14fb6
Packit d14fb6
#define IMB_CANT_GET_SMS_BUFFER          ((NTSTATUS)0xE0070010L)
Packit d14fb6
Packit d14fb6
#define INPUT_BUFFER_TOO_SMALL           ((NTSTATUS)0xE0070011L)
Packit d14fb6
Packit d14fb6
#define IMB_SEND_ERROR                   ((NTSTATUS)0xE0070013L)
Packit d14fb6
#endif /* IMBLOG_H__ */
Packit d14fb6
/*----------------------------------------------------------------------*/
Packit d14fb6
#ifndef IMBAPI_H__
Packit d14fb6
#define IMBAPI_H__
Packit d14fb6
#include <sys/types.h>
Packit d14fb6
#define	WRITE_READ_I2C		0x52
Packit d14fb6
#define	WRITE_EMP_BUFFER	0x7a
Packit d14fb6
#define	GET_DEVICE_ID		0x1
Packit d14fb6
#define SEND_MESSAGE		0x34
Packit d14fb6
#define BMC_SA			0x20
Packit d14fb6
#define BMC_LUN			0
Packit d14fb6
#define APP_NETFN		0x06
Packit d14fb6
#define	IPMI_09_VERSION		0x90
Packit d14fb6
#define	IPMI_10_VERSION		0x01
Packit d14fb6
Packit d14fb6
#define	IPMI_15_VERSION		0x51
Packit d14fb6
Packit d14fb6
#ifndef IPMI10_GET_DEVICE_ID_RESP_LENGTH
Packit d14fb6
#define IPMI10_GET_DEVICE_ID_RESP_LENGTH	12
Packit d14fb6
#endif
Packit d14fb6
Packit d14fb6
#define IPMB_CHANNEL			0x0
Packit d14fb6
#define	EMP_CHANNEL			0x1
Packit d14fb6
#define LAN_CHANNEL			0x2
Packit d14fb6
#define	RESERVED_LUN			0x3
Packit d14fb6
#define	IPMB_LUN			0x2
Packit d14fb6
#define	EMP_LUN				0x0
Packit d14fb6
Packit d14fb6
#define		PUBLIC_BUS		0
Packit d14fb6
Packit d14fb6
#define BMC_CONTROLLER			0x20
Packit d14fb6
#define FPC_CONTROLLER			0x22
Packit d14fb6
typedef enum {
Packit d14fb6
	ACCESN_OK,
Packit d14fb6
	ACCESN_ERROR,
Packit d14fb6
	ACCESN_OUT_OF_RANGE,
Packit d14fb6
	ACCESN_END_OF_DATA,
Packit d14fb6
	ACCESN_UNSUPPORTED,
Packit d14fb6
	ACCESN_INVALID_TRANSACTION,
Packit d14fb6
	ACCESN_TIMED_OUT
Packit d14fb6
} ACCESN_STATUS;
Packit d14fb6
#pragma pack(1)
Packit d14fb6
/*
Packit d14fb6
 * Request structure provided to SendTimedImbpRequest()
Packit d14fb6
*/
Packit d14fb6
typedef struct {
Packit d14fb6
	unsigned char	cmdType;
Packit d14fb6
	unsigned char	rsSa;
Packit d14fb6
	unsigned char	busType;	
Packit d14fb6
	unsigned char	netFn;	
Packit d14fb6
	unsigned char	rsLun;	
Packit d14fb6
	unsigned char *	data;	
Packit d14fb6
	int		dataLength;
Packit d14fb6
} IMBPREQUESTDATA;
Packit d14fb6
/*
Packit d14fb6
 * Request structure provided to SendTimedI2cRequest()
Packit d14fb6
*/
Packit d14fb6
typedef struct {
Packit d14fb6
	unsigned char	rsSa;				
Packit d14fb6
	unsigned char	busType;		
Packit d14fb6
	unsigned char	numberOfBytesToRead;
Packit d14fb6
	unsigned char *	data;			
Packit d14fb6
	int		dataLength;	
Packit d14fb6
} I2CREQUESTDATA;
Packit d14fb6
#pragma pack()
Packit d14fb6
/*#ifdef IMB_API
Packit d14fb6
 *
Packit d14fb6
 * This section is provided to be able to compile using imb_if.h
Packit d14fb6
 *
Packit d14fb6
 *
Packit d14fb6
 * function return type. This is also defined in the local instrumentation
Packit d14fb6
 * so we ifdef here to avoid conflict.
Packit d14fb6
*/
Packit d14fb6
#define METHOD_BUFFERED		0
Packit d14fb6
#define FILE_ANY_ACCESS		0
Packit d14fb6
/*
Packit d14fb6
 * This is necessary to compile using memIf.h
Packit d14fb6
 */
Packit d14fb6
typedef enum _INTERFACE_TYPE
Packit d14fb6
{
Packit d14fb6
    Internal,
Packit d14fb6
    Isa,
Packit d14fb6
    Eisa,
Packit d14fb6
    MicroChannel,
Packit d14fb6
    TurboChannel,
Packit d14fb6
    MaximumInterfaceType
Packit d14fb6
} INTERFACE_TYPE, * PINTERFACE_TYPE;
Packit d14fb6
#ifdef WIN32
Packit d14fb6
/* From memIf.h */
Packit d14fb6
#pragma pack(1)
Packit d14fb6
typedef struct
Packit d14fb6
{
Packit d14fb6
    INTERFACE_TYPE   InterfaceType; // Isa, Eisa, etc....
Packit d14fb6
    ULONG            BusNumber;     // Bus number
Packit d14fb6
    PHYSICAL_ADDRESS BusAddress;    // Bus-relative address
Packit d14fb6
    ULONG            AddressSpace;  // 0 is memory, 1 is I/O
Packit d14fb6
    ULONG            Length;        // Length of section to map
Packit d14fb6
} PHYSICAL_MEMORY_INFO, * PPHYSICAL_MEMORY_INFO;
Packit d14fb6
#pragma pack()
Packit d14fb6
#endif
Packit d14fb6
/*#else	// not IMB_API */
Packit d14fb6
/*
Packit d14fb6
 * These are defined in imb_if.h but are needed by users of the imbapi library
Packit d14fb6
*/
Packit d14fb6
#define ASYNC_SEQ_START		0
Packit d14fb6
/*
Packit d14fb6
 * This is the generic IMB packet format, the final checksum cant be
Packit d14fb6
 * represented in this structure and will show up as the last data byte
Packit d14fb6
 */
Packit d14fb6
/*
Packit d14fb6
 #define MIN_IMB_PACKET_SIZE	7
Packit d14fb6
 #define MAX_IMB_PACKET_SIZE	33
Packit d14fb6
*/
Packit d14fb6
#define	MAX_BUFFER_SIZE		64
Packit d14fb6
/*#endif // IMB_API */
Packit d14fb6
/****************************** 
Packit d14fb6
 *  FUNCTION PROTOTYPES
Packit d14fb6
 ******************************/
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
SendTimedImbpRequest (
Packit d14fb6
	IMBPREQUESTDATA *reqPtr,
Packit d14fb6
	int		timeOut,
Packit d14fb6
	BYTE *		respDataPtr,
Packit d14fb6
	int *		respDataLen,	
Packit d14fb6
	BYTE *		completionCode
Packit d14fb6
	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
SendTimedI2cRequest (
Packit d14fb6
	I2CREQUESTDATA *reqPtr,	
Packit d14fb6
	int		timeOut,
Packit d14fb6
	BYTE *		respDataPtr,	
Packit d14fb6
	int *		respDataLen,
Packit d14fb6
	BYTE *		completionCode	
Packit d14fb6
	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
SendAsyncImbpRequest (
Packit d14fb6
	IMBPREQUESTDATA *reqPtr,
Packit d14fb6
	BYTE *		 seqNo		
Packit d14fb6
	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
GetAsyncImbpMessage (
Packit d14fb6
	ImbPacket *	msgPtr,	
Packit d14fb6
	DWORD *		msgLen,	
Packit d14fb6
	DWORD		timeOut,
Packit d14fb6
	ImbAsyncSeq *	seqNo,	
Packit d14fb6
	DWORD		channelNumber 
Packit d14fb6
	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
GetAsyncImbpMessage_Ex (
Packit d14fb6
	ImbPacket *	msgPtr,	
Packit d14fb6
	DWORD *		msgLen,
Packit d14fb6
	DWORD		timeOut,
Packit d14fb6
	ImbAsyncSeq *	seqNo,	
Packit d14fb6
	DWORD		channelNumber, 
Packit d14fb6
	BYTE *		sessionHandle, 
Packit d14fb6
	BYTE *		privilege 
Packit d14fb6
	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
UnmapPhysicalMemory( int virtualAddress, int Length );
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
StartAsyncMesgPoll(void);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
MapPhysicalMemory (
Packit d14fb6
	int startAddress,	
Packit d14fb6
	int addressLength,
Packit d14fb6
	int *virtualAddress	
Packit d14fb6
	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
SetShutDownCode (
Packit d14fb6
	int delayTime,
Packit d14fb6
	int code	
Packit d14fb6
	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
SendTimedEmpMessageResponse (
Packit d14fb6
	ImbPacket * ptr,	
Packit d14fb6
	char      *responseDataBuf,
Packit d14fb6
	int	  responseDataLen,
Packit d14fb6
	int 	  timeOut
Packit d14fb6
	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
SendTimedEmpMessageResponse_Ex (
Packit d14fb6
	ImbPacket * ptr,
Packit d14fb6
	char      *responseDataBuf,
Packit d14fb6
	int	  responseDataLen,
Packit d14fb6
	int 	  timeOut,	
Packit d14fb6
	BYTE	  sessionHandle,
Packit d14fb6
	BYTE	  channelNumber
Packit d14fb6
	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
SendTimedLanMessageResponse (
Packit d14fb6
	ImbPacket * ptr,
Packit d14fb6
	char      *responseDataBuf,
Packit d14fb6
	int	  responseDataLen,
Packit d14fb6
	int 	  timeOut	
Packit d14fb6
	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
SendTimedLanMessageResponse_Ex (
Packit d14fb6
	ImbPacket * ptr,
Packit d14fb6
	char      *responseDataBuf,
Packit d14fb6
	int	  responseDataLen,
Packit d14fb6
	int 	  timeOut	,
Packit d14fb6
	BYTE	  sessionHandle,
Packit d14fb6
	BYTE	  channelNumber
Packit d14fb6
	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
IsAsyncMessageAvailable (unsigned int   eventId	);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
RegisterForImbAsyncMessageNotification (unsigned int *handleId);
Packit d14fb6
ACCESN_STATUS
Packit d14fb6
UnRegisterForImbAsyncMessageNotification (unsigned int handleId,int iFlag);
Packit d14fb6
BYTE	GetIpmiVersion(void);
Packit d14fb6
#endif /* IMBAPI_H__ */