| 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 | #if __GNUC__ >=3 | 
 
 
 
 
 | 27 | #pragma GCC system_header | 
 
 
 
 
 | 28 | #endif | 
 
 
 
 
 | 29 |  | 
 
 
 
 
 | 30 | #ifdef __cplusplus | 
 
 
 
 
 | 31 | extern "C" { | 
 
 
 
 
 | 32 | #endif | 
 
 
 
 
 | 33 |  | 
 
 
 
 
 | 34 | #if !defined(SMBCLASS) | 
 
 
 
 
 | 35 | #define SMBCLASSAPI DECLSPEC_IMPORT | 
 
 
 
 
 | 36 | #else | 
 
 
 
 
 | 37 | #define SMBCLASSAPI DECLSPEC_EXPORT | 
 
 
 
 
 | 38 | #endif | 
 
 
 
 
 | 39 |  | 
 
 
 
 
 | 40 | #define SMB_BUS_REQUEST \ | 
 
 
 
 
 | 41 | CTL_CODE(FILE_DEVICE_UNKNOWN, 0, METHOD_NEITHER, FILE_ANY_ACCESS) | 
 
 
 
 
 | 42 |  | 
 
 
 
 
 | 43 | #define SMB_DEREGISTER_ALARM_NOTIFY \ | 
 
 
 
 
 | 44 | CTL_CODE(FILE_DEVICE_UNKNOWN, 2, METHOD_NEITHER, FILE_ANY_ACCESS) | 
 
 
 
 
 | 45 |  | 
 
 
 
 
 | 46 | #define SMB_REGISTER_ALARM_NOTIFY \ | 
 
 
 
 
 | 47 | CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS) | 
 
 
 
 
 | 48 |  | 
 
 
 
 
 | 49 |  | 
 
 
 
 
 | 50 | struct _SMB_CLASS; | 
 
 
 
 
 | 51 |  | 
 
 
 
 
 | 52 | #define SMB_MAX_DATA_SIZE                 32 | 
 
 
 
 
 | 53 |  | 
 
 
 
 
 | 54 | /* SMB_REQUEST.Status constants */ | 
 
 
 
 
 | 55 | #define SMB_STATUS_OK                     0x00 | 
 
 
 
 
 | 56 | #define SMB_UNKNOWN_FAILURE               0x07 | 
 
 
 
 
 | 57 | #define SMB_ADDRESS_NOT_ACKNOWLEDGED      0x10 | 
 
 
 
 
 | 58 | #define SMB_DEVICE_ERROR                  0x11 | 
 
 
 
 
 | 59 | #define SMB_COMMAND_ACCESS_DENIED         0x12 | 
 
 
 
 
 | 60 | #define SMB_UNKNOWN_ERROR                 0x13 | 
 
 
 
 
 | 61 | #define SMB_DEVICE_ACCESS_DENIED          0x17 | 
 
 
 
 
 | 62 | #define SMB_TIMEOUT                       0x18 | 
 
 
 
 
 | 63 | #define SMB_UNSUPPORTED_PROTOCOL          0x19 | 
 
 
 
 
 | 64 | #define SMB_BUS_BUSY                      0x1A | 
 
 
 
 
 | 65 |  | 
 
 
 
 
 | 66 | /* SMB_REQUEST.Protocol constants */ | 
 
 
 
 
 | 67 | #define SMB_WRITE_QUICK                   0x00 | 
 
 
 
 
 | 68 | #define SMB_READ_QUICK                    0x01 | 
 
 
 
 
 | 69 | #define SMB_SEND_BYTE                     0x02 | 
 
 
 
 
 | 70 | #define SMB_RECEIVE_BYTE                  0x03 | 
 
 
 
 
 | 71 | #define SMB_WRITE_BYTE                    0x04 | 
 
 
 
 
 | 72 | #define SMB_READ_BYTE                     0x05 | 
 
 
 
 
 | 73 | #define SMB_WRITE_WORD                    0x06 | 
 
 
 
 
 | 74 | #define SMB_READ_WORD                     0x07 | 
 
 
 
 
 | 75 | #define SMB_WRITE_BLOCK                   0x08 | 
 
 
 
 
 | 76 | #define SMB_READ_BLOCK                    0x09 | 
 
 
 
 
 | 77 | #define SMB_PROCESS_CALL                  0x0A | 
 
 
 
 
 | 78 | #define SMB_MAXIMUM_PROTOCOL              0x0A | 
 
 
 
 
 | 79 |  | 
 
 
 
 
 | 80 | typedef struct _SMB_REQUEST { | 
 
 
 
 
 | 81 | UCHAR  Status; | 
 
 
 
 
 | 82 | UCHAR  Protocol; | 
 
 
 
 
 | 83 | UCHAR  Address; | 
 
 
 
 
 | 84 | UCHAR  Command; | 
 
 
 
 
 | 85 | UCHAR  BlockLength; | 
 
 
 
 
 | 86 | UCHAR  Data[SMB_MAX_DATA_SIZE]; | 
 
 
 
 
 | 87 | } SMB_REQUEST, *PSMB_REQUEST; | 
 
 
 
 
 | 88 |  | 
 
 
 
 
 | 89 | typedef VOID STDCALL | 
 
 
 
 
 | 90 | (*SMB_ALARM_NOTIFY)( | 
 
 
 
 
 | 91 | PVOID  Context, | 
 
 
 
 
 | 92 | UCHAR  Address, | 
 
 
 
 
 | 93 | USHORT  Data); | 
 
 
 
 
 | 94 |  | 
 
 
 
 
 | 95 | typedef struct _SMB_REGISTER_ALARM { | 
 
 
 
 
 | 96 | UCHAR  MinAddress; | 
 
 
 
 
 | 97 | UCHAR  MaxAddress; | 
 
 
 
 
 | 98 | SMB_ALARM_NOTIFY  NotifyFunction; | 
 
 
 
 
 | 99 | PVOID  NotifyContext; | 
 
 
 
 
 | 100 | } SMB_REGISTER_ALARM, *PSMB_REGISTER_ALARM; | 
 
 
 
 
 | 101 |  | 
 
 
 
 
 | 102 | /* SMB_CLASS.XxxVersion constants */ | 
 
 
 
 
 | 103 | #define SMB_CLASS_MAJOR_VERSION           0x0001 | 
 
 
 
 
 | 104 | #define SMB_CLASS_MINOR_VERSION           0x0000 | 
 
 
 
 
 | 105 |  | 
 
 
 
 
 | 106 | typedef NTSTATUS DDKAPI | 
 
 
 
 
 | 107 | (*SMB_RESET_DEVICE)( | 
 
 
 
 
 | 108 | /*IN*/ struct _SMB_CLASS  *SmbClass, | 
 
 
 
 
 | 109 | /*IN*/ PVOID  SmbMiniport); | 
 
 
 
 
 | 110 |  | 
 
 
 
 
 | 111 | typedef VOID DDKAPI | 
 
 
 
 
 | 112 | (*SMB_START_IO)( | 
 
 
 
 
 | 113 | /*IN*/ struct _SMB_CLASS  *SmbClass, | 
 
 
 
 
 | 114 | /*IN*/ PVOID  SmbMiniport); | 
 
 
 
 
 | 115 |  | 
 
 
 
 
 | 116 | typedef NTSTATUS DDKAPI | 
 
 
 
 
 | 117 | (*SMB_STOP_DEVICE)( | 
 
 
 
 
 | 118 | /*IN*/ struct _SMB_CLASS  *SmbClass, | 
 
 
 
 
 | 119 | /*IN*/ PVOID  SmbMiniport); | 
 
 
 
 
 | 120 |  | 
 
 
 
 
 | 121 | typedef struct _SMB_CLASS { | 
 
 
 
 
 | 122 | USHORT  MajorVersion; | 
 
 
 
 
 | 123 | USHORT  MinorVersion; | 
 
 
 
 
 | 124 | PVOID  Miniport; | 
 
 
 
 
 | 125 | PDEVICE_OBJECT  DeviceObject; | 
 
 
 
 
 | 126 | PDEVICE_OBJECT  PDO; | 
 
 
 
 
 | 127 | PDEVICE_OBJECT  LowerDeviceObject; | 
 
 
 
 
 | 128 | PIRP  CurrentIrp; | 
 
 
 
 
 | 129 | PSMB_REQUEST  CurrentSmb; | 
 
 
 
 
 | 130 | SMB_RESET_DEVICE  ResetDevice; | 
 
 
 
 
 | 131 | SMB_START_IO  StartIo; | 
 
 
 
 
 | 132 | SMB_STOP_DEVICE  StopDevice; | 
 
 
 
 
 | 133 | } SMB_CLASS, *PSMB_CLASS; | 
 
 
 
 
 | 134 |  | 
 
 
 
 
 | 135 | SMBCLASSAPI | 
 
 
 
 
 | 136 | VOID | 
 
 
 
 
 | 137 | DDKAPI | 
 
 
 
 
 | 138 | SmbClassAlarm( | 
 
 
 
 
 | 139 | /*IN*/ PSMB_CLASS  SmbClass, | 
 
 
 
 
 | 140 | /*IN*/ UCHAR  Address, | 
 
 
 
 
 | 141 | /*IN*/ USHORT  Data); | 
 
 
 
 
 | 142 |  | 
 
 
 
 
 | 143 | SMBCLASSAPI | 
 
 
 
 
 | 144 | VOID | 
 
 
 
 
 | 145 | DDKAPI | 
 
 
 
 
 | 146 | SmbClassCompleteRequest( | 
 
 
 
 
 | 147 | /*IN*/ PSMB_CLASS  SmbClass); | 
 
 
 
 
 | 148 |  | 
 
 
 
 
 | 149 | typedef NTSTATUS DDKAPI | 
 
 
 
 
 | 150 | (*PSMB_INITIALIZE_MINIPORT)( | 
 
 
 
 
 | 151 | /*IN*/ PSMB_CLASS  SmbClass, | 
 
 
 
 
 | 152 | /*IN*/ PVOID  MiniportExtension, | 
 
 
 
 
 | 153 | /*IN*/ PVOID  MiniportContext); | 
 
 
 
 
 | 154 |  | 
 
 
 
 
 | 155 | SMBCLASSAPI | 
 
 
 
 
 | 156 | NTSTATUS | 
 
 
 
 
 | 157 | DDKAPI | 
 
 
 
 
 | 158 | SmbClassCreateFdo( | 
 
 
 
 
 | 159 | /*IN*/ PDRIVER_OBJECT  DriverObject, | 
 
 
 
 
 | 160 | /*IN*/ PDEVICE_OBJECT  PDO, | 
 
 
 
 
 | 161 | /*IN*/ ULONG  MiniportExtensionSize, | 
 
 
 
 
 | 162 | /*IN*/ PSMB_INITIALIZE_MINIPORT  MiniportInitialize, | 
 
 
 
 
 | 163 | /*IN*/ PVOID  MiniportContext, | 
 
 
 
 
 | 164 | /*OUT*/ PDEVICE_OBJECT  *FDO); | 
 
 
 
 
 | 165 |  | 
 
 
 
 
 | 166 | SMBCLASSAPI | 
 
 
 
 
 | 167 | NTSTATUS | 
 
 
 
 
 | 168 | DDKAPI | 
 
 
 
 
 | 169 | SmbClassInitializeDevice( | 
 
 
 
 
 | 170 | /*IN*/ ULONG  MajorVersion, | 
 
 
 
 
 | 171 | /*IN*/ ULONG  MinorVersion, | 
 
 
 
 
 | 172 | /*IN*/ PDRIVER_OBJECT  DriverObject); | 
 
 
 
 
 | 173 |  | 
 
 
 
 
 | 174 | SMBCLASSAPI | 
 
 
 
 
 | 175 | VOID | 
 
 
 
 
 | 176 | DDKAPI | 
 
 
 
 
 | 177 | SmbClassLockDevice( | 
 
 
 
 
 | 178 | /*IN*/ PSMB_CLASS  SmbClass); | 
 
 
 
 
 | 179 |  | 
 
 
 
 
 | 180 | SMBCLASSAPI | 
 
 
 
 
 | 181 | VOID | 
 
 
 
 
 | 182 | DDKAPI | 
 
 
 
 
 | 183 | SmbClassUnlockDevice( | 
 
 
 
 
 | 184 | /*IN*/ PSMB_CLASS  SmbClass); | 
 
 
 
 
 | 185 |  | 
 
 
 
 
 | 186 | #ifdef __cplusplus | 
 
 
 
 
 | 187 | } | 
 
 
 
 
 | 188 | #endif | 
 
 
 
 
 | 189 |  | 
 
 
 
 
 | 190 | #endif /* __SMBUS_H */ |