diff options
Diffstat (limited to 'winsup/w32api/include/ddk/smbus.h')
| -rw-r--r-- | winsup/w32api/include/ddk/smbus.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/winsup/w32api/include/ddk/smbus.h b/winsup/w32api/include/ddk/smbus.h new file mode 100644 index 000000000..421d19f61 --- /dev/null +++ b/winsup/w32api/include/ddk/smbus.h @@ -0,0 +1,194 @@ +/* + * smbus.h + * + * System Management Bus driver interface + * + * This file is part of the MinGW package. + * + * Contributors: + * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef __SMBUS_H +#define __SMBUS_H + +#if __GNUC__ >=3 +#pragma GCC system_header +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#pragma pack(push,4) + +#if !defined(SMBCLASS) + #define SMBCLASSAPI DECLSPEC_IMPORT +#else + #define SMBCLASSAPI DECLSPEC_EXPORT +#endif + +#define SMB_BUS_REQUEST \ + CTL_CODE(FILE_DEVICE_UNKNOWN, 0, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define SMB_DEREGISTER_ALARM_NOTIFY \ + CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define SMB_REGISTER_ALARM_NOTIFY \ + CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS) + + +struct _SMB_CLASS; + +#define SMB_MAX_DATA_SIZE 32 + +/* SMB_REQUEST.Status constants */ +#define SMB_STATUS_OK 0x00 +#define SMB_UNKNOWN_FAILURE 0x07 +#define SMB_ADDRESS_NOT_ACKNOWLEDGED 0x10 +#define SMB_DEVICE_ERROR 0x11 +#define SMB_COMMAND_ACCESS_DENIED 0x12 +#define SMB_UNKNOWN_ERROR 0x13 +#define SMB_DEVICE_ACCESS_DENIED 0x17 +#define SMB_TIMEOUT 0x18 +#define SMB_UNSUPPORTED_PROTOCOL 0x19 +#define SMB_BUS_BUSY 0x1A + +/* SMB_REQUEST.Protocol constants */ +#define SMB_WRITE_QUICK 0x00 +#define SMB_READ_QUICK 0x01 +#define SMB_SEND_BYTE 0x02 +#define SMB_RECEIVE_BYTE 0x03 +#define SMB_WRITE_BYTE 0x04 +#define SMB_READ_BYTE 0x05 +#define SMB_WRITE_WORD 0x06 +#define SMB_READ_WORD 0x07 +#define SMB_WRITE_BLOCK 0x08 +#define SMB_READ_BLOCK 0x09 +#define SMB_PROCESS_CALL 0x0A +#define SMB_MAXIMUM_PROTOCOL 0x0A + +typedef struct _SMB_REQUEST { + UCHAR Status; + UCHAR Protocol; + UCHAR Address; + UCHAR Command; + UCHAR BlockLength; + UCHAR Data[SMB_MAX_DATA_SIZE]; +} SMB_REQUEST, *PSMB_REQUEST; + +typedef VOID STDCALL +(*SMB_ALARM_NOTIFY)( + PVOID Context, + UCHAR Address, + USHORT Data); + +typedef struct _SMB_REGISTER_ALARM { + UCHAR MinAddress; + UCHAR MaxAddress; + SMB_ALARM_NOTIFY NotifyFunction; + PVOID NotifyContext; +} SMB_REGISTER_ALARM, *PSMB_REGISTER_ALARM; + +/* SMB_CLASS.XxxVersion constants */ +#define SMB_CLASS_MAJOR_VERSION 0x0001 +#define SMB_CLASS_MINOR_VERSION 0x0000 + +typedef NTSTATUS DDKAPI +(*SMB_RESET_DEVICE)( + IN struct _SMB_CLASS *SmbClass, + IN PVOID SmbMiniport); + +typedef VOID DDKAPI +(*SMB_START_IO)( + IN struct _SMB_CLASS *SmbClass, + IN PVOID SmbMiniport); + +typedef NTSTATUS DDKAPI +(*SMB_STOP_DEVICE)( + IN struct _SMB_CLASS *SmbClass, + IN PVOID SmbMiniport); + +typedef struct _SMB_CLASS { + USHORT MajorVersion; + USHORT MinorVersion; + PVOID Miniport; + PDEVICE_OBJECT DeviceObject; + PDEVICE_OBJECT PDO; + PDEVICE_OBJECT LowerDeviceObject; + PIRP CurrentIrp; + PSMB_REQUEST CurrentSmb; + SMB_RESET_DEVICE ResetDevice; + SMB_START_IO StartIo; + SMB_STOP_DEVICE StopDevice; +} SMB_CLASS, *PSMB_CLASS; + +SMBCLASSAPI +VOID +DDKAPI +SmbClassAlarm( + IN PSMB_CLASS SmbClass, + IN UCHAR Address, + IN USHORT Data); + +SMBCLASSAPI +VOID +DDKAPI +SmbClassCompleteRequest( + IN PSMB_CLASS SmbClass); + +typedef NTSTATUS DDKAPI +(*PSMB_INITIALIZE_MINIPORT)( + IN PSMB_CLASS SmbClass, + IN PVOID MiniportExtension, + IN PVOID MiniportContext); + +SMBCLASSAPI +NTSTATUS +DDKAPI +SmbClassCreateFdo( + IN PDRIVER_OBJECT DriverObject, + IN PDEVICE_OBJECT PDO, + IN ULONG MiniportExtensionSize, + IN PSMB_INITIALIZE_MINIPORT MiniportInitialize, + IN PVOID MiniportContext, + OUT PDEVICE_OBJECT *FDO); + +SMBCLASSAPI +NTSTATUS +DDKAPI +SmbClassInitializeDevice( + IN ULONG MajorVersion, + IN ULONG MinorVersion, + IN PDRIVER_OBJECT DriverObject); + +SMBCLASSAPI +VOID +DDKAPI +SmbClassLockDevice( + IN PSMB_CLASS SmbClass); + +SMBCLASSAPI +VOID +DDKAPI +SmbClassUnlockDevice( + IN PSMB_CLASS SmbClass); + +#pragma pack(pop) + +#ifdef __cplusplus +} +#endif + +#endif /* __SMBUS_H */ |
