HWMon mod
[hashcat.git] / src / ext_nvapi.c
1 /**
2 * Author......: Jens Steube <jens.steube@gmail.com>
3 * License.....: MIT
4 */
5
6 #include <ext_nvapi.h>
7
8 int nvapi_init (NVAPI_PTR *nvapi)
9 {
10 if (!nvapi) return (-1);
11
12 memset (nvapi, 0, sizeof (NVAPI_PTR));
13
14 #if __x86_64__
15 nvapi->lib = hc_dlopen ("nvapi64.lib");
16 #elif __x86__
17 nvapi->lib = hc_dlopen ("nvapi.lib");
18 #endif
19
20 if (!nvapi->lib)
21 {
22 if (data.quiet == 0)
23 log_info ("WARNING: load NVAPI library failed, proceed without NVAPI HWMon enabled.");
24
25 return (-1);
26 }
27
28 HC_LOAD_FUNC(nvapi, NvAPI_Initialize, NVAPI_INITIALIZE, NVAPI, 0)
29 HC_LOAD_FUNC(nvapi, NvAPI_Unload, NVAPI_UNLOAD, NVAPI, 0)
30 HC_LOAD_FUNC(nvapi, NvAPI_GetErrorMessage, NVAPI_GETERRORMESSAGE, NVAPI, 0)
31 HC_LOAD_FUNC(nvapi, NvAPI_EnumPhysicalGPUs, NVAPI_ENUMPHYSICALGPUS, NVAPI, 0)
32 HC_LOAD_FUNC(nvapi, NvAPI_GPU_GetThermalSettings, NVAPI_GPU_GETTHERMALSETTINGS, NVAPI, 0)
33 HC_LOAD_FUNC(nvapi, NvAPI_GPU_GetTachReading, NVAPI_GPU_GETTACHREADING, NVAPI, 0)
34 HC_LOAD_FUNC(nvapi, NvAPI_GPU_GetDynamicPstatesInfoEx, NVAPI_GPU_GETDYNAMICPSTATESINFOEX, NVAPI, 0)
35
36 return 0;
37 }
38
39 void nvapi_close (NVAPI_PTR *nvapi)
40 {
41 if (nvapi)
42 {
43 if (nvapi->lib)
44 hc_dlclose (nvapi->lib);
45
46 myfree (nvapi);
47 }
48 }
49
50 int hm_NvAPI_Initialize (NVAPI_PTR *nvapi)
51 {
52 if (!nvapi) return (-1);
53
54 NvAPI_Status NvAPI_rc = nvapi->NvAPI_Initialize ();
55
56 if (NvAPI_rc != NVAPI_OK)
57 {
58 NvAPI_ShortString string;
59
60 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
61
62 log_info ("WARN: %s %d %s\n", "NvAPI_Initialize()", NvAPI_rc, string);
63 }
64
65 return NvAPI_rc;
66 }
67
68 int hm_NvAPI_Unload (NVAPI_PTR *nvapi)
69 {
70 if (!nvapi) return (-1);
71
72 NvAPI_Status NvAPI_rc = nvapi->NvAPI_Unload ();
73
74 if (NvAPI_rc != NVAPI_OK)
75 {
76 NvAPI_ShortString string;
77
78 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
79
80 log_info ("WARN: %s %d %s\n", "NvAPI_Unload()", NvAPI_rc, string);
81 }
82
83 return NvAPI_rc;
84 }
85
86 int hm_NvAPI_GetErrorMessage (NVAPI_PTR *nvapi, NvAPI_Status NvAPI_rc, NvAPI_ShortString string)
87 {
88 if (!nvapi) return (-1);
89
90 return nvapi->NvAPI_GetErrorMessage (NvAPI_rc, string);
91 }
92
93 int hm_NvAPI_EnumPhysicalGPUs (NVAPI_PTR *nvapi, NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS], NvU32 *pGpuCount)
94 {
95 if (!nvapi) return (-1);
96
97 NvAPI_Status NvAPI_rc = nvapi->NvAPI_EnumPhysicalGPUs (nvGPUHandle, pGpuCount);
98
99 if (NvAPI_rc != NVAPI_OK)
100 {
101 NvAPI_ShortString string;
102
103 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
104
105 log_info ("WARN: %s %d %s\n", "NvAPI_EnumPhysicalGPUs()", NvAPI_rc, string);
106 }
107
108 return NvAPI_rc;
109 }
110
111 int hm_NvAPI_GPU_GetThermalSettings (NVAPI_PTR *nvapi, NvPhysicalGpuHandle hPhysicalGpu, NvU32 sensorIndex, NV_GPU_THERMAL_SETTINGS *pThermalSettings)
112 {
113 if (!nvapi) return (-1);
114
115 NvAPI_Status NvAPI_rc = nvapi->NvAPI_GPU_GetThermalSettings (hPhysicalGpu, sensorIndex, pThermalSettings);
116
117 if (NvAPI_rc != NVAPI_OK)
118 {
119 NvAPI_ShortString string;
120
121 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
122
123 log_info ("WARN: %s %d %s\n", "NvAPI_GPU_GetThermalSettings()", NvAPI_rc, string);
124 }
125
126 return NvAPI_rc;
127 }
128
129 int hm_NvAPI_GPU_GetTachReading (NVAPI_PTR *nvapi, NvPhysicalGpuHandle hPhysicalGPU, NvU32 *pValue)
130 {
131 if (!nvapi) return (-1);
132
133 NvAPI_Status NvAPI_rc = nvapi->NvAPI_GPU_GetTachReading (hPhysicalGPU, pValue);
134
135 if (NvAPI_rc != NVAPI_OK)
136 {
137 NvAPI_ShortString string;
138
139 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
140
141 log_info ("WARN: %s %d %s\n", "NvAPI_GPU_GetTachReading()", NvAPI_rc, string);
142 }
143
144 return NvAPI_rc;
145 }
146
147 int hm_NvAPI_GPU_GetDynamicPstatesInfoEx (NVAPI_PTR *nvapi, NvPhysicalGpuHandle hPhysicalGpu, NV_GPU_DYNAMIC_PSTATES_INFO_EX *pDynamicPstatesInfoEx)
148 {
149 if (!nvapi) return (-1);
150
151 NvAPI_Status NvAPI_rc = nvapi->NvAPI_GPU_GetDynamicPstatesInfoEx (hPhysicalGpu, pDynamicPstatesInfoEx);
152
153 if (NvAPI_rc != NVAPI_OK)
154 {
155 NvAPI_ShortString string;
156
157 hm_NvAPI_GetErrorMessage (nvapi, NvAPI_rc, string);
158
159 log_info ("WARN: %s %d %s\n", "NvAPI_GPU_GetDynamicPstatesInfoEx()", NvAPI_rc, string);
160 }
161
162 return NvAPI_rc;
163 }
164
165 #ifdef __MINGW64__
166
167 void __security_check_cookie (uintptr_t _StackCookie)
168 {
169 (void) _StackCookie;
170 }
171
172 void __GSHandlerCheck ()
173 {
174 }
175
176 #endif