1/* 2 * smbus.h 3 * 4 * System Management Bus driver interface 5 * 6 * This file is part of the w32api package. 7 * 8 * Contributors: 9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 10 * 11 * THIS SOFTWARE IS NOT COPYRIGHTED 12 * 13 * This source code is offered for use in the public domain. You may 14 * use, modify or distribute it freely. 15 * 16 * This code is distributed in the hope that it will be useful but 17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 18 * DISCLAIMED. This includes but is not limited to warranties of 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 20 * 21 */ 22 23#ifndef __SMBUS_H 24#define __SMBUS_H 25 26#ifdef __cplusplus 27extern "C" { 28#endif 29 30#if !defined(SMBCLASS) 31#define SMBCLASSAPI DECLSPEC_IMPORT 32#else 33#define SMBCLASSAPI 34#endif 35 36#define SMB_BUS_REQUEST \ 37 CTL_CODE(FILE_DEVICE_UNKNOWN, 0, METHOD_NEITHER, FILE_ANY_ACCESS) 38 39#define SMB_DEREGISTER_ALARM_NOTIFY \ 40 CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_NEITHER, FILE_ANY_ACCESS) 41 42#define SMB_REGISTER_ALARM_NOTIFY \ 43 CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS) 44 45 46struct _SMB_CLASS; 47 48#define SMB_MAX_DATA_SIZE 32 49 50/* SMB_REQUEST.Status constants */ 51#define SMB_STATUS_OK 0x00 52#define SMB_UNKNOWN_FAILURE 0x07 53#define SMB_ADDRESS_NOT_ACKNOWLEDGED 0x10 54#define SMB_DEVICE_ERROR 0x11 55#define SMB_COMMAND_ACCESS_DENIED 0x12 56#define SMB_UNKNOWN_ERROR 0x13 57#define SMB_DEVICE_ACCESS_DENIED 0x17 58#define SMB_TIMEOUT 0x18 59#define SMB_UNSUPPORTED_PROTOCOL 0x19 60#define SMB_BUS_BUSY 0x1A 61 62/* SMB_REQUEST.Protocol constants */ 63#define SMB_WRITE_QUICK 0x00 64#define SMB_READ_QUICK 0x01 65#define SMB_SEND_BYTE 0x02 66#define SMB_RECEIVE_BYTE 0x03 67#define SMB_WRITE_BYTE 0x04 68#define SMB_READ_BYTE 0x05 69#define SMB_WRITE_WORD 0x06 70#define SMB_READ_WORD 0x07 71#define SMB_WRITE_BLOCK 0x08 72#define SMB_READ_BLOCK 0x09 73#define SMB_PROCESS_CALL 0x0A 74#define SMB_MAXIMUM_PROTOCOL 0x0A 75 76typedef struct _SMB_REQUEST { 77 UCHAR Status; 78 UCHAR Protocol; 79 UCHAR Address; 80 UCHAR Command; 81 UCHAR BlockLength; 82 UCHAR Data[SMB_MAX_DATA_SIZE]; 83} SMB_REQUEST, *PSMB_REQUEST; 84 85typedef VOID 86(NTAPI *SMB_ALARM_NOTIFY)( 87 PVOID Context, 88 UCHAR Address, 89 USHORT Data); 90 91typedef struct _SMB_REGISTER_ALARM { 92 UCHAR MinAddress; 93 UCHAR MaxAddress; 94 SMB_ALARM_NOTIFY NotifyFunction; 95 PVOID NotifyContext; 96} SMB_REGISTER_ALARM, *PSMB_REGISTER_ALARM; 97 98/* SMB_CLASS.XxxVersion constants */ 99#define SMB_CLASS_MAJOR_VERSION 0x0001 100#define SMB_CLASS_MINOR_VERSION 0x0000 101 102typedef NTSTATUS 103(NTAPI *SMB_RESET_DEVICE)( 104 IN struct _SMB_CLASS *SmbClass, 105 IN PVOID SmbMiniport); 106 107typedef VOID 108(NTAPI *SMB_START_IO)( 109 IN struct _SMB_CLASS *SmbClass, 110 IN PVOID SmbMiniport); 111 112typedef NTSTATUS 113(NTAPI *SMB_STOP_DEVICE)( 114 IN struct _SMB_CLASS *SmbClass, 115 IN PVOID SmbMiniport); 116 117typedef struct _SMB_CLASS { 118 USHORT MajorVersion; 119 USHORT MinorVersion; 120 PVOID Miniport; 121 PDEVICE_OBJECT DeviceObject; 122 PDEVICE_OBJECT PDO; 123 PDEVICE_OBJECT LowerDeviceObject; 124 PIRP CurrentIrp; 125 PSMB_REQUEST CurrentSmb; 126 SMB_RESET_DEVICE ResetDevice; 127 SMB_START_IO StartIo; 128 SMB_STOP_DEVICE StopDevice; 129} SMB_CLASS, *PSMB_CLASS; 130 131SMBCLASSAPI 132VOID 133NTAPI 134SmbClassAlarm( 135 IN PSMB_CLASS SmbClass, 136 IN UCHAR Address, 137 IN USHORT Data); 138 139SMBCLASSAPI 140VOID 141NTAPI 142SmbClassCompleteRequest( 143 IN PSMB_CLASS SmbClass); 144 145typedef NTSTATUS 146(NTAPI *PSMB_INITIALIZE_MINIPORT)( 147 IN PSMB_CLASS SmbClass, 148 IN PVOID MiniportExtension, 149 IN PVOID MiniportContext); 150 151SMBCLASSAPI 152NTSTATUS 153NTAPI 154SmbClassCreateFdo( 155 IN PDRIVER_OBJECT DriverObject, 156 IN PDEVICE_OBJECT PDO, 157 IN ULONG MiniportExtensionSize, 158 IN PSMB_INITIALIZE_MINIPORT MiniportInitialize, 159 IN PVOID MiniportContext, 160 OUT PDEVICE_OBJECT *FDO); 161 162SMBCLASSAPI 163NTSTATUS 164NTAPI 165SmbClassInitializeDevice( 166 IN ULONG MajorVersion, 167 IN ULONG MinorVersion, 168 IN PDRIVER_OBJECT DriverObject); 169 170SMBCLASSAPI 171VOID 172NTAPI 173SmbClassLockDevice( 174 IN PSMB_CLASS SmbClass); 175 176SMBCLASSAPI 177VOID 178NTAPI 179SmbClassUnlockDevice( 180 IN PSMB_CLASS SmbClass); 181 182#ifdef __cplusplus 183} 184#endif 185 186#endif /* __SMBUS_H */ 187 188