smbus.h 4.3 KB

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