Fix m 60 a 0 by making modified variable non-const
[hashcat.git] / include / ext_ADL.h
1 /**
2 * Authors.....: Jens Steube <jens.steube@gmail.com>
3 * Gabriele Gristina <matrix@hashcat.net>
4 * magnum <john.magnum@hushmail.com>
5 *
6 * License.....: MIT
7 */
8
9 #ifndef EXT_ADL_H
10 #define EXT_ADL_H
11
12 #if defined(HAVE_HWMON)
13
14 #include <common.h>
15
16 /**
17 * Declarations from adl_sdk.h and subheaders
18 */
19
20 #define ADL_OK 0
21 #define ADL_ERR -1
22 #define ADL_ERR_NOT_SUPPORTED -8
23
24 #define ADL_MAX_PATH 256
25
26 #define ADL_DL_FANCTRL_SUPPORTS_PERCENT_READ 1
27 #define ADL_DL_FANCTRL_SUPPORTS_PERCENT_WRITE 2
28 #define ADL_DL_FANCTRL_SPEED_TYPE_PERCENT 1
29 #define ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED 1
30
31 #define ADL_OD6_SETSTATE_PERFORMANCE 0x00000001
32 #define ADL_OD6_GETSTATEINFO_CUSTOM_PERFORMANCE 0x00000004
33 #define ADL_OD6_FANSPEED_TYPE_PERCENT 0x00000001
34
35 typedef struct AdapterInfo
36 {
37 int iSize;
38 int iAdapterIndex;
39 char strUDID[ADL_MAX_PATH];
40 int iBusNumber;
41 int iDeviceNumber;
42 int iFunctionNumber;
43 int iVendorID;
44 char strAdapterName[ADL_MAX_PATH];
45 char strDisplayName[ADL_MAX_PATH];
46 int iPresent;
47
48 #if defined (_WIN32) || defined (_WIN64)
49 int iExist;
50 char strDriverPath[ADL_MAX_PATH];
51 char strDriverPathExt[ADL_MAX_PATH];
52 char strPNPString[ADL_MAX_PATH];
53 int iOSDisplayIndex;
54 #endif /* (_WIN32) || (_WIN64) */
55
56 #if defined (__linux__)
57 int iXScreenNum;
58 int iDrvIndex;
59 char strXScreenConfigName[ADL_MAX_PATH];
60 #endif /* (__linux__) */
61 } AdapterInfo, *LPAdapterInfo;
62
63 typedef struct ADLThermalControllerInfo
64 {
65 int iSize;
66 int iThermalDomain;
67 int iDomainIndex;
68 int iFlags;
69 } ADLThermalControllerInfo;
70
71 typedef struct ADLTemperature
72 {
73 int iSize;
74 int iTemperature;
75 } ADLTemperature;
76
77 typedef struct ADLFanSpeedInfo
78 {
79 int iSize;
80 int iFlags;
81 int iMinPercent;
82 int iMaxPercent;
83 int iMinRPM;
84 int iMaxRPM;
85 } ADLFanSpeedInfo;
86
87 typedef struct ADLFanSpeedValue
88 {
89 int iSize;
90 int iSpeedType;
91 int iFanSpeed;
92 int iFlags;
93 } ADLFanSpeedValue;
94
95 typedef struct ADLDisplayID
96 {
97 int iDisplayLogicalIndex;
98 int iDisplayPhysicalIndex;
99 int iDisplayLogicalAdapterIndex;
100 int iDisplayPhysicalAdapterIndex;
101 } ADLDisplayID, *LPADLDisplayID;
102
103 typedef struct ADLDisplayInfo
104 {
105 ADLDisplayID displayID;
106 int iDisplayControllerIndex;
107 char strDisplayName[ADL_MAX_PATH];
108 char strDisplayManufacturerName[ADL_MAX_PATH];
109 int iDisplayType;
110 int iDisplayOutputType;
111 int iDisplayConnector;
112 int iDisplayInfoMask;
113 int iDisplayInfoValue;
114 } ADLDisplayInfo, *LPADLDisplayInfo;
115
116 typedef struct ADLBiosInfo
117 {
118 char strPartNumber[ADL_MAX_PATH];
119 char strVersion[ADL_MAX_PATH];
120 char strDate[ADL_MAX_PATH];
121 } ADLBiosInfo, *LPADLBiosInfo;
122
123 typedef struct ADLPMActivity
124 {
125 int iSize;
126 int iEngineClock;
127 int iMemoryClock;
128 int iVddc;
129 int iActivityPercent;
130 int iCurrentPerformanceLevel;
131 int iCurrentBusSpeed;
132 int iCurrentBusLanes;
133 int iMaximumBusLanes;
134 int iReserved;
135 } ADLPMActivity;
136
137 typedef struct ADLODParameterRange
138 {
139 int iMin;
140 int iMax;
141 int iStep;
142 } ADLODParameterRange;
143
144 typedef struct ADLODParameters
145 {
146 int iSize;
147 int iNumberOfPerformanceLevels;
148 int iActivityReportingSupported;
149 int iDiscretePerformanceLevels;
150 int iReserved;
151 ADLODParameterRange sEngineClock;
152 ADLODParameterRange sMemoryClock;
153 ADLODParameterRange sVddc;
154 } ADLODParameters;
155
156 typedef struct ADLODPerformanceLevel
157 {
158 int iEngineClock;
159 int iMemoryClock;
160 int iVddc;
161 } ADLODPerformanceLevel;
162
163 /*
164 * Attention: we had to change this struct due to an out-of-bound problem mentioned here:
165 * https://github.com/hashcat/hashcat/issues/244
166 * the change: ADLODPerformanceLevel aLevels [1] -> ADLODPerformanceLevel aLevels [2]
167 */
168
169 typedef struct ADLODPerformanceLevels
170 {
171 int iSize;
172 int iReserved;
173 ADLODPerformanceLevel aLevels [2];
174 } ADLODPerformanceLevels;
175
176 typedef struct ADLOD6FanSpeedInfo
177 {
178 int iSpeedType;
179 int iFanSpeedPercent;
180 int iFanSpeedRPM;
181 int iExtValue;
182 int iExtMask;
183 } ADLOD6FanSpeedInfo;
184
185 typedef struct ADLOD6FanSpeedValue
186 {
187 int iSpeedType;
188 int iFanSpeed;
189 int iExtValue;
190 int iExtMask;
191 } ADLOD6FanSpeedValue;
192
193 typedef struct ADLOD6CurrentStatus
194 {
195 int iEngineClock;
196 int iMemoryClock;
197 int iActivityPercent;
198 int iCurrentPerformanceLevel;
199 int iCurrentBusSpeed;
200 int iCurrentBusLanes;
201 int iMaximumBusLanes;
202 int iExtValue;
203 int iExtMask;
204 } ADLOD6CurrentStatus;
205
206 typedef struct ADLOD6ParameterRange
207 {
208 int iMin;
209 int iMax;
210 int iStep;
211 } ADLOD6ParameterRange;
212
213 typedef struct ADLOD6Capabilities
214 {
215 int iCapabilities;
216 int iSupportedStates;
217 int iNumberOfPerformanceLevels;
218 ADLOD6ParameterRange sEngineClockRange;
219 ADLOD6ParameterRange sMemoryClockRange;
220 int iExtValue;
221 int iExtMask;
222 } ADLOD6Capabilities;
223
224 typedef struct ADLOD6PerformanceLevel
225 {
226 int iEngineClock;
227 int iMemoryClock;
228 } ADLOD6PerformanceLevel;
229
230 /*
231 * Attention: we had to change this struct due to an out-of-bound problem mentioned here:
232 * https://github.com/hashcat/hashcat/issues/244
233 * the change: ADLOD6PerformanceLevel aLevels [1] -> ADLOD6PerformanceLevel aLevels [2]
234 */
235
236 typedef struct ADLOD6StateInfo
237 {
238 int iNumberOfPerformanceLevels;
239 int iExtValue;
240 int iExtMask;
241 ADLOD6PerformanceLevel aLevels [2];
242 } ADLOD6StateInfo;
243
244 typedef struct ADLOD6PowerControlInfo
245 {
246 int iMinValue;
247 int iMaxValue;
248 int iStepValue;
249 int iExtValue;
250 int iExtMask;
251 } ADLOD6PowerControlInfo;
252
253 #if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
254 #define ADL_API_CALL __stdcall
255 #else
256 #define ADL_API_CALL
257 #endif
258
259 typedef void* (ADL_API_CALL *ADL_MAIN_MALLOC_CALLBACK )( int );
260
261 /*
262 * End of declarations from adl_sdk.h and subheaders
263 **/
264
265 typedef int HM_ADAPTER_ADL;
266
267 #include <shared.h>
268
269 typedef struct
270 {
271 ADLOD6StateInfo state;
272 ADLOD6PerformanceLevel level;
273
274 } ADLOD6MemClockState;
275
276 typedef int (ADL_API_CALL *ADL_MAIN_CONTROL_DESTROY) ();
277 typedef int (ADL_API_CALL *ADL_MAIN_CONTROL_CREATE) (ADL_MAIN_MALLOC_CALLBACK, int);
278 typedef int (ADL_API_CALL *ADL_ADAPTER_NUMBEROFADAPTERS_GET) (int *);
279 typedef int (ADL_API_CALL *ADL_ADAPTER_ADAPTERINFO_GET) (LPAdapterInfo, int);
280 typedef int (ADL_API_CALL *ADL_DISPLAY_DISPLAYINFO_GET) (int, int *, ADLDisplayInfo **, int);
281 typedef int (ADL_API_CALL *ADL_OVERDRIVE5_TEMPERATURE_GET) (int, int, ADLTemperature *);
282 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_TEMPERATURE_GET) (int, int *);
283 typedef int (ADL_API_CALL *ADL_OVERDRIVE5_CURRENTACTIVITY_GET) (int, ADLPMActivity *);
284 typedef int (ADL_API_CALL *ADL_OVERDRIVE5_THERMALDEVICES_ENUM) (int, int, ADLThermalControllerInfo *);
285 typedef int (ADL_API_CALL *ADL_ADAPTER_ID_GET) (int, int *);
286 typedef int (ADL_API_CALL *ADL_ADAPTER_VIDEOBIOSINFO_GET) (int, ADLBiosInfo *);
287 typedef int (ADL_API_CALL *ADL_OVERDRIVE5_FANSPEEDINFO_GET) (int, int, ADLFanSpeedInfo *);
288 typedef int (ADL_API_CALL *ADL_OVERDRIVE5_FANSPEED_GET) (int, int, ADLFanSpeedValue *);
289 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_FANSPEED_GET) (int, ADLOD6FanSpeedInfo *);
290 typedef int (ADL_API_CALL *ADL_OVERDRIVE5_FANSPEED_SET) (int, int, ADLFanSpeedValue *);
291 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_FANSPEED_SET) (int, ADLOD6FanSpeedValue *);
292 typedef int (ADL_API_CALL *ADL_OVERDRIVE5_FANSPEEDTODEFAULT_SET) (int, int);
293 typedef int (ADL_API_CALL *ADL_OVERDRIVE5_ODPARAMETERS_GET) (int, ADLODParameters *);
294 typedef int (ADL_API_CALL *ADL_OVERDRIVE5_ODPERFORMANCELEVELS_GET) (int, int, ADLODPerformanceLevels *);
295 typedef int (ADL_API_CALL *ADL_OVERDRIVE5_ODPERFORMANCELEVELS_SET) (int, ADLODPerformanceLevels *);
296 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_POWERCONTROL_SET) (int, int);
297 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_POWERCONTROL_GET) (int, int *, int *);
298 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_POWERCONTROLINFO_GET) (int, ADLOD6PowerControlInfo *);
299 typedef int (ADL_API_CALL *ADL_ADAPTER_ACTIVE_GET) (int, int *);
300 typedef int (ADL_API_CALL *ADL_DISPLAYENABLE_SET) (int, int *, int, int);
301 typedef int (ADL_API_CALL *ADL_OVERDRIVE_CAPS) (int, int *, int *, int *);
302 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_CURRENTSTATUS_GET) (int, ADLOD6CurrentStatus *);
303 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_STATEINFO_GET) (int, int, ADLOD6MemClockState *);
304 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_CAPABILITIES_GET) (int, ADLOD6Capabilities *);
305 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_STATE_SET) (int, int, ADLOD6StateInfo *);
306 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_POWERCONTROL_CAPS) (int, int *);
307 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_TARGETTEMPERATUREDATA_GET) (int, int *, int *);
308 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_TARGETTEMPERATURERANGEINFO_GET) (int, ADLOD6ParameterRange *);
309 typedef int (ADL_API_CALL *ADL_OVERDRIVE6_FANSPEED_RESET) (int);
310
311 typedef struct
312 {
313 ADL_LIB lib;
314
315 ADL_MAIN_CONTROL_DESTROY ADL_Main_Control_Destroy;
316 ADL_MAIN_CONTROL_CREATE ADL_Main_Control_Create;
317 ADL_ADAPTER_NUMBEROFADAPTERS_GET ADL_Adapter_NumberOfAdapters_Get;
318 ADL_ADAPTER_ADAPTERINFO_GET ADL_Adapter_AdapterInfo_Get;
319 ADL_DISPLAY_DISPLAYINFO_GET ADL_Display_DisplayInfo_Get;
320 ADL_ADAPTER_ID_GET ADL_Adapter_ID_Get;
321 ADL_ADAPTER_VIDEOBIOSINFO_GET ADL_Adapter_VideoBiosInfo_Get;
322 ADL_OVERDRIVE5_THERMALDEVICES_ENUM ADL_Overdrive5_ThermalDevices_Enum;
323 ADL_OVERDRIVE5_TEMPERATURE_GET ADL_Overdrive5_Temperature_Get;
324 ADL_OVERDRIVE6_TEMPERATURE_GET ADL_Overdrive6_Temperature_Get;
325 ADL_OVERDRIVE5_CURRENTACTIVITY_GET ADL_Overdrive5_CurrentActivity_Get;
326 ADL_OVERDRIVE5_FANSPEEDINFO_GET ADL_Overdrive5_FanSpeedInfo_Get;
327 ADL_OVERDRIVE5_FANSPEED_GET ADL_Overdrive5_FanSpeed_Get;
328 ADL_OVERDRIVE6_FANSPEED_GET ADL_Overdrive6_FanSpeed_Get;
329 ADL_OVERDRIVE5_FANSPEED_SET ADL_Overdrive5_FanSpeed_Set;
330 ADL_OVERDRIVE6_FANSPEED_SET ADL_Overdrive6_FanSpeed_Set;
331 ADL_OVERDRIVE5_FANSPEEDTODEFAULT_SET ADL_Overdrive5_FanSpeedToDefault_Set;
332 ADL_OVERDRIVE5_ODPARAMETERS_GET ADL_Overdrive5_ODParameters_Get;
333 ADL_OVERDRIVE5_ODPERFORMANCELEVELS_GET ADL_Overdrive5_ODPerformanceLevels_Get;
334 ADL_OVERDRIVE5_ODPERFORMANCELEVELS_SET ADL_Overdrive5_ODPerformanceLevels_Set;
335 ADL_OVERDRIVE6_POWERCONTROLINFO_GET ADL_Overdrive6_PowerControlInfo_Get;
336 ADL_OVERDRIVE6_POWERCONTROL_GET ADL_Overdrive6_PowerControl_Get;
337 ADL_OVERDRIVE6_POWERCONTROL_SET ADL_Overdrive6_PowerControl_Set;
338 ADL_ADAPTER_ACTIVE_GET ADL_Adapter_Active_Get;
339 ADL_DISPLAYENABLE_SET ADL_DisplayEnable_Set;
340 ADL_OVERDRIVE_CAPS ADL_Overdrive_Caps;
341 ADL_OVERDRIVE6_POWERCONTROL_CAPS ADL_Overdrive6_PowerControl_Caps;
342 ADL_OVERDRIVE6_CAPABILITIES_GET ADL_Overdrive6_Capabilities_Get;
343 ADL_OVERDRIVE6_STATEINFO_GET ADL_Overdrive6_StateInfo_Get;
344 ADL_OVERDRIVE6_CURRENTSTATUS_GET ADL_Overdrive6_CurrentStatus_Get;
345 ADL_OVERDRIVE6_STATE_SET ADL_Overdrive6_State_Set;
346 ADL_OVERDRIVE6_TARGETTEMPERATUREDATA_GET ADL_Overdrive6_TargetTemperatureData_Get;
347 ADL_OVERDRIVE6_TARGETTEMPERATURERANGEINFO_GET ADL_Overdrive6_TargetTemperatureRangeInfo_Get;
348 ADL_OVERDRIVE6_FANSPEED_RESET ADL_Overdrive6_FanSpeed_Reset;
349
350 } hm_adl_lib_t;
351
352 #define ADL_PTR hm_adl_lib_t
353
354 int adl_init (ADL_PTR *lib);
355 void adl_close (ADL_PTR *lib);
356
357 int hm_ADL_Main_Control_Destroy (ADL_PTR *adl);
358 int hm_ADL_Main_Control_Create (ADL_PTR *adl, ADL_MAIN_MALLOC_CALLBACK callback, int iEnumConnectedAdapters);
359 int hm_ADL_Adapter_NumberOfAdapters_Get (ADL_PTR *adl, int *lpNumAdapters);
360 int hm_ADL_Adapter_AdapterInfo_Get (ADL_PTR *adl, LPAdapterInfo lpInfo, int iInputSize);
361 int hm_ADL_Display_DisplayInfo_Get (ADL_PTR *adl, int iAdapterIndex, int *iNumDisplays, ADLDisplayInfo **lppInfo, int iForceDetect);
362 int hm_ADL_Overdrive5_Temperature_Get (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex, ADLTemperature *lpTemperature);
363 int hm_ADL_Overdrive6_Temperature_Get (ADL_PTR *adl, int iAdapterIndex, int *iTemperature);
364 int hm_ADL_Overdrive_CurrentActivity_Get (ADL_PTR *adl, int iAdapterIndex, ADLPMActivity *lpActivity);
365 int hm_ADL_Overdrive_ThermalDevices_Enum (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex, ADLThermalControllerInfo *lpThermalControllerInfo);
366 int hm_ADL_Adapter_ID_Get (ADL_PTR *adl, int iAdapterIndex, int *lpAdapterID);
367 int hm_ADL_Adapter_VideoBiosInfo_Get (ADL_PTR *adl, int iAdapterIndex, ADLBiosInfo *lpBiosInfo);
368 int hm_ADL_Overdrive5_FanSpeedInfo_Get (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex, ADLFanSpeedInfo *lpFanSpeedInfo);
369 int hm_ADL_Overdrive5_FanSpeed_Get (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex, ADLFanSpeedValue *lpFanSpeedValue);
370 int hm_ADL_Overdrive6_FanSpeed_Get (ADL_PTR *adl, int iAdapterIndex, ADLOD6FanSpeedInfo *lpFanSpeedInfo);
371 int hm_ADL_Overdrive5_FanSpeed_Set (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex, ADLFanSpeedValue *lpFanSpeedValue);
372 int hm_ADL_Overdrive6_FanSpeed_Set (ADL_PTR *adl, int iAdapterIndex, ADLOD6FanSpeedValue *lpFanSpeedValue);
373 int hm_ADL_Overdrive5_FanSpeedToDefault_Set (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex);
374 int hm_ADL_Overdrive_ODParameters_Get (ADL_PTR *adl, int iAdapterIndex, ADLODParameters *lpOdParameters);
375 int hm_ADL_Overdrive_ODPerformanceLevels_Get (ADL_PTR *adl, int iAdapterIndex, int iDefault, ADLODPerformanceLevels *lpOdPerformanceLevels);
376 int hm_ADL_Overdrive_ODPerformanceLevels_Set (ADL_PTR *adl, int iAdapterIndex, ADLODPerformanceLevels *lpOdPerformanceLevels);
377 int hm_ADL_Overdrive_PowerControlInfo_Get (ADL_PTR *adl, int iAdapterIndex, ADLOD6PowerControlInfo *);
378 int hm_ADL_Overdrive_PowerControl_Get (ADL_PTR *adl, int iAdapterIndex, int *level);
379 int hm_ADL_Overdrive_PowerControl_Set (ADL_PTR *adl, int iAdapterIndex, int level);
380 int hm_ADL_Adapter_Active_Get (ADL_PTR *adl, int iAdapterIndex, int *lpStatus);
381 //int hm_ADL_DisplayEnable_Set (ADL_PTR *adl, int iAdapterIndex, int *lpDisplayIndexList, int iDisplayListSize, int bPersistOnly);
382 int hm_ADL_Overdrive_Caps (ADL_PTR *adl, int iAdapterIndex, int *od_supported, int *od_enabled, int *od_version);
383 int hm_ADL_Overdrive_CurrentStatus_Get (ADL_PTR *adl, int iAdapterIndex, ADLOD6CurrentStatus *status);
384 int hm_ADL_Overdrive_StateInfo_Get (ADL_PTR *adl, int iAdapterIndex, int type, ADLOD6MemClockState *state);
385 int hm_ADL_Overdrive_Capabilities_Get (ADL_PTR *adl, int iAdapterIndex, ADLOD6Capabilities *caps);
386 int hm_ADL_Overdrive_State_Set (ADL_PTR *adl, int iAdapterIndex, int type, ADLOD6StateInfo *state);
387 int hm_ADL_Overdrive6_PowerControl_Caps (ADL_PTR *adl, int iAdapterIndex, int *lpSupported);
388 int hm_ADL_Overdrive6_TargetTemperatureData_Get (ADL_PTR *adl, int iAdapterIndex, int *cur_temp, int *default_temp);
389 int hm_ADL_Overdrive6_TargetTemperatureRangeInfo_Get (ADL_PTR *adl, int iAdapterIndex, ADLOD6ParameterRange *lpTargetTemperatureInfo);
390 int hm_ADL_Overdrive6_FanSpeed_Reset (ADL_PTR *adl, int iAdapterIndex);
391
392 #endif // HAVE_HWMON
393
394 #endif // EXT_ADL_H