SusiLib.cs 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.InteropServices;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace ShakerManger.Susi4
  8. {
  9. internal static class SusiLib
  10. {
  11. public enum SusiStatus : UInt32
  12. {
  13. NOT_INITIALIZED = 0xFFFFFFFF,
  14. INITIALIZED = 0xFFFFFFFE,
  15. ALLOC_ERROR = 0xFFFFFFFD,
  16. DRIVER_TIMEOUT = 0xFFFFFFFC,
  17. INVALID_PARAMETER = 0xFFFFFEFF,
  18. INVALID_BLOCK_ALIGNMENT = 0xFFFFFEFE,
  19. INVALID_BLOCK_LENGTH = 0xFFFFFEFD,
  20. INVALID_DIRECTION = 0xFFFFFEFC,
  21. INVALID_BITMASK = 0xFFFFFEFB,
  22. RUNNING = 0xFFFFFEFA,
  23. UNSUPPORTED = 0xFFFFFCFF,
  24. NOT_FOUND = 0xFFFFFBFF,
  25. TIMEOUT = 0xFFFFFBFE,
  26. BUSY_COLLISION = 0xFFFFFBFD,
  27. READ_ERROR = 0xFFFFFAFF,
  28. WRITE_ERROR = 0xFFFFFAFE,
  29. MORE_DATA = 0xFFFFF9FF,
  30. ERROR = 0xFFFFF0FF,
  31. SUCCESS = 0x00000000,
  32. }
  33. [DllImport("Susi4")]
  34. public static extern SusiStatus SusiLibInitialize();
  35. [DllImport("Susi4")]
  36. public static extern SusiStatus SusiLibUninitialize();
  37. public enum BoardInformationID : UInt32
  38. {
  39. GET_SPEC_VERSION = 0x00000000,
  40. BOOT_COUNTER_VAL = 0x00000001,
  41. RUNNING_TIME_METER_VAL = 0x00000002,
  42. PNPID_VAL = 0x00000003,
  43. PLATFORM_REV_VAL = 0x00000004,
  44. DRIVER_VERSION_VAL = 0x00010000,
  45. LIB_VERSION_VAL = 0x00010001,
  46. FIRMWARE_VERSION_VAL = 0x00010002,
  47. LAST_SHUTDOWN_STATUS_VAL = 0x00010003,
  48. LAST_SHUTDOWN_EVENT_VAL = 0x00010004,
  49. DOCUMENT_VERSION_VAL = 0x00010005,
  50. }
  51. public enum BoardVoltageID : UInt32
  52. {
  53. VOLTAGE_VCORE = 0x00021000,
  54. VOLTAGE_VCORE2 = VOLTAGE_VCORE + 1,
  55. VOLTAGE_2V5 = VOLTAGE_VCORE + 2,
  56. VOLTAGE_3V3 = VOLTAGE_VCORE + 3,
  57. VOLTAGE_5V = VOLTAGE_VCORE + 4,
  58. VOLTAGE_12V = VOLTAGE_VCORE + 5,
  59. VOLTAGE_5VSB = VOLTAGE_VCORE + 6,
  60. VOLTAGE_3VSB = VOLTAGE_VCORE + 7,
  61. VOLTAGE_VBAT = VOLTAGE_VCORE + 8,
  62. VOLTAGE_5NV = VOLTAGE_VCORE + 9,
  63. VOLTAGE_12NV = VOLTAGE_VCORE + 10,
  64. VOLTAGE_VTT = VOLTAGE_VCORE + 11,
  65. VOLTAGE_24V = VOLTAGE_VCORE + 12,
  66. VOLTAGE_DC = VOLTAGE_VCORE + 13,
  67. VOLTAGE_DCSTBY = VOLTAGE_VCORE + 14,
  68. VOLTAGE_VBATLI = VOLTAGE_VCORE + 15,
  69. VOLTAGE_OEM0 = VOLTAGE_VCORE + 16,
  70. VOLTAGE_OEM1 = VOLTAGE_VCORE + 17,
  71. VOLTAGE_OEM2 = VOLTAGE_VCORE + 18,
  72. VOLTAGE_OEM3 = VOLTAGE_VCORE + 19,
  73. VOLTAGE_1V05 = VOLTAGE_VCORE + 20,
  74. VOLTAGE_1V5 = VOLTAGE_VCORE + 21,
  75. VOLTAGE_1V8 = VOLTAGE_VCORE + 22,
  76. }
  77. public enum BoardTemperatureID : UInt32
  78. {
  79. TEMP_CPU = 0x00020000,
  80. TEMP_CHIPSET = TEMP_CPU + 1,
  81. TEMP_SYSTEM = TEMP_CPU + 2,
  82. TEMP_CPU2 = TEMP_CPU + 3,
  83. TEMP_OEM0 = TEMP_CPU + 4,
  84. TEMP_OEM1 = TEMP_CPU + 5,
  85. TEMP_OEM2 = TEMP_CPU + 6,
  86. TEMP_OEM3 = TEMP_CPU + 7,
  87. TEMP_OEM4 = TEMP_CPU + 8,
  88. TEMP_OEM5 = TEMP_CPU + 9,
  89. }
  90. public enum BoardFanID : UInt32
  91. {
  92. FAN_CPU = 0x00022000,
  93. FAN_SYSTEM = FAN_CPU + 1,
  94. FAN_CPU2 = FAN_CPU + 2,
  95. FAN_OEM0 = FAN_CPU + 3,
  96. FAN_OEM1 = FAN_CPU + 4,
  97. FAN_OEM2 = FAN_CPU + 5,
  98. FAN_OEM3 = FAN_CPU + 6,
  99. FAN_OEM4 = FAN_CPU + 7,
  100. FAN_OEM5 = FAN_CPU + 8,
  101. FAN_OEM6 = FAN_CPU + 9,
  102. }
  103. public enum BoardCurrentID : UInt32
  104. {
  105. CURRENT_OEM0 = 0x00023000,
  106. CURRENT_OEM1 = CURRENT_OEM0 + 1,
  107. CURRENT_OEM2 = CURRENT_OEM0 + 2,
  108. }
  109. public enum BoardCaseOpenID : UInt32
  110. {
  111. CASEOPEN_OEM0 = 0x00024000,
  112. CASEOPEN_OEM1 = CASEOPEN_OEM0 + 1,
  113. CASEOPEN_OEM2 = CASEOPEN_OEM0 + 2,
  114. }
  115. public enum BoardSupportedID : UInt32
  116. {
  117. ID_SMBUS_SUPPORTED = 0x00030000,
  118. SMBUS_EXTERNAL_SUPPORTED = (1 << 0),
  119. SMBUS_OEM0_SUPPORTED = (1 << 1),
  120. SMBUS_OEM1_SUPPORTED = (1 << 2),
  121. SMBUS_OEM2_SUPPORTED = (1 << 3),
  122. SMBUS_OEM3_SUPPORTED = (1 << 4),
  123. ID_I2C_SUPPORTED = 0x00030100,
  124. I2C_EXTERNAL_SUPPORTED = (1 << 0),
  125. I2C_OEM0_SUPPORTED = (1 << 1),
  126. I2C_OEM1_SUPPORTED = (1 << 2),
  127. I2C_OEM2_SUPPORTED = (1 << 3),
  128. }
  129. public const UInt32 SUSI_ID_UNKNOWN = 0xFFFFFFFF;
  130. public const UInt32 SUSI_ID_HWM_TEMP_MAX = 10;
  131. public const UInt32 SUSI_ID_HWM_VOLTAGE_MAX = 23;
  132. public const UInt32 SUSI_ID_HWM_FAN_MAX = 10;
  133. public const UInt32 SUSI_ID_HWM_CURRENT_MAX = 3;
  134. public const UInt32 SUSI_ID_HWM_CASEOPEN_MAX = 3;
  135. public const UInt32 CASEOPEN_CLEAR_CMD = 0x55AA55AA;
  136. public const UInt32 SUSI_KELVINS_OFFSET = 2731;
  137. public static UInt32 SusiEncodeCelcius(UInt32 Celsius)
  138. {
  139. return (((Celsius) * 10) + SUSI_KELVINS_OFFSET);
  140. }
  141. public static float SusiDecodeCelcius(UInt32 KelvinsTenth)
  142. {
  143. return (((int)KelvinsTenth - SUSI_KELVINS_OFFSET) / 10f);
  144. }
  145. [DllImport("Susi4")]
  146. public static extern Susi4.SusiLib.SusiStatus SusiBoardGetValue(UInt32 Id, ref UInt32 pValue);
  147. [DllImport("Susi4")]
  148. public static extern Susi4.SusiLib.SusiStatus SusiBoardGetValue(BoardVoltageID Id, ref UInt32 pValue);
  149. [DllImport("Susi4")]
  150. public static extern Susi4.SusiLib.SusiStatus SusiBoardGetValue(BoardTemperatureID Id, ref UInt32 pValue);
  151. [DllImport("Susi4")]
  152. public static extern Susi4.SusiLib.SusiStatus SusiBoardGetValue(BoardSupportedID Id, ref UInt32 pValue);
  153. [DllImport("Susi4")]
  154. public static extern Susi4.SusiLib.SusiStatus SusiBoardGetValue(BoardInformationID Id, ref UInt32 pValue);
  155. [DllImport("Susi4")]
  156. public static extern Susi4.SusiLib.SusiStatus SusiBoardGetValue(BoardFanID Id, ref UInt32 pValue);
  157. [DllImport("Susi4")]
  158. public static extern Susi4.SusiLib.SusiStatus SusiBoardGetValue(BoardCurrentID Id, ref UInt32 pValue);
  159. [DllImport("Susi4")]
  160. public static extern Susi4.SusiLib.SusiStatus SusiBoardGetValue(BoardCaseOpenID Id, ref UInt32 pValue);
  161. public const UInt32 SUSI_ID_GET_NAME_MASK = 0xF0000000;
  162. public static UInt32 SUSI_ID_GET_NAME_BASE(UInt32 Id)
  163. {
  164. return (Id & SUSI_ID_GET_NAME_MASK);
  165. }
  166. public const UInt32 SUSI_ID_BASE_GET_NAME_HWM = 0x00000000;
  167. public const UInt32 SUSI_ID_BASE_GET_NAME_HWM_FANCONTROL = 0x10000000;
  168. public const UInt32 SUSI_ID_BASE_GET_NAME_I2C = 0x20000000;
  169. public const UInt32 SUSI_ID_BASE_GET_NAME_SMB = 0x30000000;
  170. public const UInt32 SUSI_ID_BASE_GET_NAME_GPIO = 0x40000000;
  171. public const UInt32 SUSI_ID_BASE_GET_NAME_WDT = 0x50000000;
  172. public const UInt32 SUSI_ID_BASE_GET_NAME_VGA_BACKLIGHT = 0x60000000;
  173. public const UInt32 SUSI_ID_BASE_GET_NAME_STORAGE = 0x70000000;
  174. public const UInt32 SUSI_ID_BASE_GET_NAME_TML = 0x80000000;
  175. public const UInt32 SUSI_ID_BASE_GET_NAME_INFO = 0x90000000;
  176. public static UInt32 SUSI_ID_MAPPING_GET_NAME_HWM(UInt32 Id)
  177. {
  178. return (Id | SUSI_ID_BASE_GET_NAME_HWM);
  179. }
  180. public static UInt32 SUSI_ID_MAPPING_GET_NAME_HWM_FANCONTROL(UInt32 Id)
  181. {
  182. return (Id | SUSI_ID_BASE_GET_NAME_HWM_FANCONTROL);
  183. }
  184. public static UInt32 SUSI_ID_MAPPING_GET_NAME_I2C(UInt32 Id)
  185. {
  186. return (Id | SUSI_ID_BASE_GET_NAME_I2C);
  187. }
  188. public static UInt32 SUSI_ID_MAPPING_GET_NAME_SMB(UInt32 Id)
  189. {
  190. return (Id | SUSI_ID_BASE_GET_NAME_SMB);
  191. }
  192. public static UInt32 SUSI_ID_MAPPING_GET_NAME_GPIO(UInt32 Id)
  193. {
  194. return (Id | SUSI_ID_BASE_GET_NAME_GPIO);
  195. }
  196. public static UInt32 SUSI_ID_MAPPING_GET_NAME_WDT(UInt32 Id)
  197. {
  198. return (Id | SUSI_ID_BASE_GET_NAME_WDT);
  199. }
  200. public static UInt32 SUSI_ID_MAPPING_GET_NAME_VGA_BACKLIGHT(UInt32 Id)
  201. {
  202. return (Id | SUSI_ID_BASE_GET_NAME_VGA_BACKLIGHT);
  203. }
  204. public static UInt32 SUSI_ID_MAPPING_GET_NAME_STORAGE(UInt32 Id)
  205. {
  206. return (Id | SUSI_ID_BASE_GET_NAME_STORAGE);
  207. }
  208. public static UInt32 SUSI_ID_MAPPING_GET_NAME_TML(UInt32 Id)
  209. {
  210. return (Id | SUSI_ID_BASE_GET_NAME_TML);
  211. }
  212. public static UInt32 SUSI_ID_MAPPING_GET_NAME_INFO(UInt32 Id)
  213. {
  214. return (Id | SUSI_ID_BASE_GET_NAME_INFO);
  215. }
  216. public const uint MAX_BANK_NUM = 4;
  217. public enum BoardInformationStringID : UInt32
  218. {
  219. MANUFACTURER_STR = 0x00000000,
  220. NAME_STR = 0x00000001,
  221. REVISION_STR = 0x00000002,
  222. SERIAL_STR = 0x00000003,
  223. BIOS_REVISION_STR = 0x00000004,
  224. HW_REVISION_STR = 0x00000005,
  225. PLATFORM_TYPE_STR = 0x00000006,
  226. EC_FW_STR = 0x00000007,
  227. BIOS_FW_STR = 0x00000008,
  228. OEM0_STR = 0x00000010,
  229. OEM1_STR = 0x00000011,
  230. OEM2_STR = 0x00000012,
  231. }
  232. public static UInt32 SUSI_ID_GPIO(UInt32 Num)
  233. {
  234. return Num;
  235. }
  236. public static UInt32 SUSI_ID_GPIO_BANK(UInt32 BankNum)
  237. {
  238. return BankNum + 0x00010000;
  239. }
  240. public static UInt32 SUSI_ID_GPIO_PIN_BANK(UInt32 GPIO_NUM)
  241. {
  242. return (0x00010000 | ((GPIO_NUM) >> 5));
  243. }
  244. // Item ID
  245. public enum GPIOCapabilitiesID : UInt32
  246. {
  247. INPUT_SUPPORT = 0,
  248. OUTPUT_SUPPORT = 1,
  249. }
  250. [DllImport("Susi4")]
  251. public static extern SusiLib.SusiStatus SusiGPIOGetCaps(UInt32 Id, GPIOCapabilitiesID ItemId, ref UInt32 pValue);
  252. public const UInt32 SUSI_GPIO_OUTPUT = 0;
  253. public const UInt32 SUSI_GPIO_INPUT = 1;
  254. public enum GPIODirection : UInt32
  255. {
  256. OUTPUT = 0,
  257. INPUT = 1,
  258. }
  259. [DllImport("Susi4")]
  260. public static extern SusiLib.SusiStatus SusiGPIOGetDirection(UInt32 Id, UInt32 Bitmask, ref GPIODirection pDirection);
  261. [DllImport("Susi4")]
  262. public static extern SusiLib.SusiStatus SusiGPIOSetDirection(UInt32 Id, UInt32 Bitmask, GPIODirection Direction);
  263. public enum GPIOLevel : UInt32
  264. {
  265. LOW = 0,
  266. HIGH = 1,
  267. }
  268. [DllImport("Susi4")]
  269. public static extern SusiStatus SusiGPIOGetLevel(UInt32 Id, UInt32 Bitmask, ref GPIOLevel pLevel);
  270. [DllImport("Susi4")]
  271. public static extern SusiStatus SusiGPIOSetLevel(UInt32 Id, UInt32 Bitmask, GPIOLevel Level);
  272. [DllImport("Susi4")]
  273. public static extern Susi4.SusiLib.SusiStatus SusiBoardGetStringA(uint Id, StringBuilder pBuffer, ref UInt32 pBufLen);
  274. [DllImport("Susi4")]
  275. public static extern Susi4.SusiLib.SusiStatus SusiBoardGetStringA(BoardInformationStringID Id, StringBuilder pBuffer, ref UInt32 pBufLen);
  276. [DllImport("Susi4")]
  277. public static extern Susi4.SusiLib.SusiStatus SusiBoardReadIO(UInt16 Port, ref UInt32 pValue, UInt32 Length);
  278. [DllImport("Susi4")]
  279. public static extern Susi4.SusiLib.SusiStatus SusiBoardWriteIO(UInt16 Port, UInt32 Value, UInt32 Length);
  280. [DllImport("Susi4")]
  281. public static extern Susi4.SusiLib.SusiStatus SusiBoardReadPCI(byte Bus, byte Device, byte Function, UInt32 Offset, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 5)] byte[] pData, UInt32 Length);
  282. [DllImport("Susi4")]
  283. public static extern Susi4.SusiLib.SusiStatus SusiBoardWritePCI(byte Bus, byte Device, byte Function, UInt32 Offset, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 5)] byte[] pData, UInt32 Length);
  284. [DllImport("Susi4")]
  285. public static extern Susi4.SusiLib.SusiStatus SusiBoardReadMemory(UInt32 Address, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pData, UInt32 Length);
  286. [DllImport("Susi4")]
  287. public static extern Susi4.SusiLib.SusiStatus SusiBoardWriteMemory(UInt32 Address, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] byte[] pData, UInt32 Length);
  288. [DllImport("Susi4")]
  289. public static extern Susi4.SusiLib.SusiStatus SusiBoardReadMSR(UInt32 index, ref UInt32 EAX, ref UInt32 EDX);
  290. [DllImport("Susi4")]
  291. public static extern Susi4.SusiLib.SusiStatus SusiBoardWriteMSR(UInt32 index, UInt32 EAX, UInt32 EDX);
  292. }
  293. }