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 (at) 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 27 extern "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 46 struct _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 76 typedef 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 85 typedef VOID 86 (NTAPI *SMB_ALARM_NOTIFY)( 87 PVOID Context, 88 UCHAR Address, 89 USHORT Data); 90 91 typedef 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 102 typedef NTSTATUS 103 (NTAPI *SMB_RESET_DEVICE)( 104 IN struct _SMB_CLASS *SmbClass, 105 IN PVOID SmbMiniport); 106 107 typedef VOID 108 (NTAPI *SMB_START_IO)( 109 IN struct _SMB_CLASS *SmbClass, 110 IN PVOID SmbMiniport); 111 112 typedef NTSTATUS 113 (NTAPI *SMB_STOP_DEVICE)( 114 IN struct _SMB_CLASS *SmbClass, 115 IN PVOID SmbMiniport); 116 117 typedef 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 131 SMBCLASSAPI 132 VOID 133 NTAPI 134 SmbClassAlarm( 135 IN PSMB_CLASS SmbClass, 136 IN UCHAR Address, 137 IN USHORT Data); 138 139 SMBCLASSAPI 140 VOID 141 NTAPI 142 SmbClassCompleteRequest( 143 IN PSMB_CLASS SmbClass); 144 145 typedef NTSTATUS 146 (NTAPI *PSMB_INITIALIZE_MINIPORT)( 147 IN PSMB_CLASS SmbClass, 148 IN PVOID MiniportExtension, 149 IN PVOID MiniportContext); 150 151 SMBCLASSAPI 152 NTSTATUS 153 NTAPI 154 SmbClassCreateFdo( 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 162 SMBCLASSAPI 163 NTSTATUS 164 NTAPI 165 SmbClassInitializeDevice( 166 IN ULONG MajorVersion, 167 IN ULONG MinorVersion, 168 IN PDRIVER_OBJECT DriverObject); 169 170 SMBCLASSAPI 171 VOID 172 NTAPI 173 SmbClassLockDevice( 174 IN PSMB_CLASS SmbClass); 175 176 SMBCLASSAPI 177 VOID 178 NTAPI 179 SmbClassUnlockDevice( 180 IN PSMB_CLASS SmbClass); 181 182 #ifdef __cplusplus 183 } 184 #endif 185 186 #endif /* __SMBUS_H */ 187 188