Add --mangle switch for mangling password before hashing
[hashcat.git] / src / ext_ADL.c
1 /**
2 * Author......: Jens Steube <jens.steube@gmail.com>
3 * License.....: MIT
4 */
5
6 #include <ext_ADL.h>
7
8 int adl_init (ADL_PTR *adl)
9 {
10 if (!adl) return -1;
11
12 memset (adl, 0, sizeof (ADL_PTR));
13
14 #ifdef _WIN
15 adl->lib = hc_dlopen ("atiadlxx.dll");
16
17 if (!adl->lib)
18 {
19 adl->lib = hc_dlopen ("atiadlxy.dll");
20 }
21 #elif _POSIX
22 adl->lib = hc_dlopen ("libatiadlxx.so", RTLD_NOW);
23 #endif
24
25 if (!adl->lib)
26 {
27 //if (data.quiet == 0)
28 // log_info ("WARNING: load ADL library failed, proceed without ADL HWMon enabled.");
29
30 return -1;
31 }
32
33 HC_LOAD_FUNC(adl, ADL_Main_Control_Destroy, ADL_MAIN_CONTROL_DESTROY, ADL, 0)
34 HC_LOAD_FUNC(adl, ADL_Main_Control_Create, ADL_MAIN_CONTROL_CREATE, ADL, 0)
35 HC_LOAD_FUNC(adl, ADL_Adapter_NumberOfAdapters_Get, ADL_ADAPTER_NUMBEROFADAPTERS_GET, ADL, 0)
36 HC_LOAD_FUNC(adl, ADL_Adapter_AdapterInfo_Get, ADL_ADAPTER_ADAPTERINFO_GET, ADL, 0)
37 HC_LOAD_FUNC(adl, ADL_Display_DisplayInfo_Get, ADL_DISPLAY_DISPLAYINFO_GET, ADL, 0)
38 HC_LOAD_FUNC(adl, ADL_Adapter_ID_Get, ADL_ADAPTER_ID_GET, ADL, 0)
39 HC_LOAD_FUNC(adl, ADL_Adapter_VideoBiosInfo_Get, ADL_ADAPTER_VIDEOBIOSINFO_GET, ADL, 0)
40 HC_LOAD_FUNC(adl, ADL_Overdrive5_ThermalDevices_Enum, ADL_OVERDRIVE5_THERMALDEVICES_ENUM, ADL, 0)
41 HC_LOAD_FUNC(adl, ADL_Overdrive5_Temperature_Get, ADL_OVERDRIVE5_TEMPERATURE_GET, ADL, 0)
42 HC_LOAD_FUNC(adl, ADL_Overdrive6_Temperature_Get, ADL_OVERDRIVE6_TEMPERATURE_GET, ADL, 0)
43 HC_LOAD_FUNC(adl, ADL_Overdrive5_CurrentActivity_Get, ADL_OVERDRIVE5_CURRENTACTIVITY_GET, ADL, 0)
44 HC_LOAD_FUNC(adl, ADL_Overdrive5_FanSpeedInfo_Get, ADL_OVERDRIVE5_FANSPEEDINFO_GET, ADL, 0)
45 HC_LOAD_FUNC(adl, ADL_Overdrive5_FanSpeed_Get, ADL_OVERDRIVE5_FANSPEED_GET, ADL, 0)
46 HC_LOAD_FUNC(adl, ADL_Overdrive6_FanSpeed_Get, ADL_OVERDRIVE6_FANSPEED_GET, ADL, 0)
47 HC_LOAD_FUNC(adl, ADL_Overdrive5_FanSpeed_Set, ADL_OVERDRIVE5_FANSPEED_SET, ADL, 0)
48 HC_LOAD_FUNC(adl, ADL_Overdrive6_FanSpeed_Set, ADL_OVERDRIVE6_FANSPEED_SET, ADL, 0)
49 HC_LOAD_FUNC(adl, ADL_Overdrive5_FanSpeedToDefault_Set, ADL_OVERDRIVE5_FANSPEEDTODEFAULT_SET, ADL, 0)
50 HC_LOAD_FUNC(adl, ADL_Overdrive5_ODParameters_Get, ADL_OVERDRIVE5_ODPARAMETERS_GET, ADL, 0)
51 HC_LOAD_FUNC(adl, ADL_Overdrive5_ODPerformanceLevels_Get, ADL_OVERDRIVE5_ODPERFORMANCELEVELS_GET, ADL, 0)
52 HC_LOAD_FUNC(adl, ADL_Overdrive5_ODPerformanceLevels_Set, ADL_OVERDRIVE5_ODPERFORMANCELEVELS_SET, ADL, 0)
53 HC_LOAD_FUNC(adl, ADL_Overdrive6_PowerControlInfo_Get, ADL_OVERDRIVE6_POWERCONTROLINFO_GET, ADL, 0)
54 HC_LOAD_FUNC(adl, ADL_Overdrive6_PowerControl_Get, ADL_OVERDRIVE6_POWERCONTROL_GET, ADL, 0)
55 HC_LOAD_FUNC(adl, ADL_Overdrive6_PowerControl_Set, ADL_OVERDRIVE6_POWERCONTROL_SET, ADL, 0)
56 HC_LOAD_FUNC(adl, ADL_Adapter_Active_Get, ADL_ADAPTER_ACTIVE_GET, ADL, 0)
57 //HC_LOAD_FUNC(adl, ADL_DisplayEnable_Set, ADL_DISPLAYENABLE_SET, ADL, 0)
58 HC_LOAD_FUNC(adl, ADL_Overdrive_Caps, ADL_OVERDRIVE_CAPS, ADL, 0)
59 HC_LOAD_FUNC(adl, ADL_Overdrive6_PowerControl_Caps, ADL_OVERDRIVE6_POWERCONTROL_CAPS, ADL, 0)
60 HC_LOAD_FUNC(adl, ADL_Overdrive6_Capabilities_Get, ADL_OVERDRIVE6_CAPABILITIES_GET, ADL, 0)
61 HC_LOAD_FUNC(adl, ADL_Overdrive6_StateInfo_Get, ADL_OVERDRIVE6_STATEINFO_GET, ADL, 0)
62 HC_LOAD_FUNC(adl, ADL_Overdrive6_CurrentStatus_Get, ADL_OVERDRIVE6_CURRENTSTATUS_GET, ADL, 0)
63 HC_LOAD_FUNC(adl, ADL_Overdrive6_State_Set, ADL_OVERDRIVE6_STATE_SET, ADL, 0)
64 HC_LOAD_FUNC(adl, ADL_Overdrive6_TargetTemperatureData_Get, ADL_OVERDRIVE6_TARGETTEMPERATUREDATA_GET, ADL, 0)
65 HC_LOAD_FUNC(adl, ADL_Overdrive6_TargetTemperatureRangeInfo_Get, ADL_OVERDRIVE6_TARGETTEMPERATURERANGEINFO_GET, ADL, 0)
66 HC_LOAD_FUNC(adl, ADL_Overdrive6_FanSpeed_Reset, ADL_OVERDRIVE6_FANSPEED_RESET, ADL, 0)
67
68 return 0;
69 }
70
71 void adl_close (ADL_PTR *adl)
72 {
73 if (adl)
74 {
75 if (adl->lib)
76 hc_dlclose (adl->lib);
77
78 myfree (adl);
79 }
80 }
81
82 int hm_ADL_Main_Control_Destroy (ADL_PTR *adl)
83 {
84 if (!adl) return -1;
85
86 int ADL_rc = adl->ADL_Main_Control_Destroy ();
87
88 if (ADL_rc != ADL_OK)
89 {
90 log_info ("WARN: %s: %d\n", "ADL_Main_Control_Destroy()", ADL_rc);
91 }
92
93 return (ADL_rc);
94 }
95
96 int hm_ADL_Main_Control_Create (ADL_PTR *adl, ADL_MAIN_MALLOC_CALLBACK callback, int iEnumConnectedAdapters)
97 {
98 if (!adl) return -1;
99
100 int ADL_rc = adl->ADL_Main_Control_Create (callback, iEnumConnectedAdapters);
101
102 if (ADL_rc != ADL_OK)
103 {
104 log_info ("WARN: %s: %d\n", "ADL_Main_Control_Create()", ADL_rc);
105 }
106
107 return (ADL_rc);
108 }
109
110 int hm_ADL_Adapter_NumberOfAdapters_Get (ADL_PTR *adl, int *lpNumAdapters)
111 {
112 if (!adl) return -1;
113
114 int ADL_rc = adl->ADL_Adapter_NumberOfAdapters_Get (lpNumAdapters);
115
116 if (ADL_rc != ADL_OK)
117 {
118 log_info ("WARN: %s: %d\n", "ADL_Adapter_NumberOfAdapters_Get()", ADL_rc);
119 }
120
121 return (ADL_rc);
122 }
123
124 int hm_ADL_Adapter_AdapterInfo_Get (ADL_PTR *adl, LPAdapterInfo lpInfo, int iInputSize)
125 {
126 if (!adl) return -1;
127
128 int ADL_rc = adl->ADL_Adapter_AdapterInfo_Get (lpInfo, iInputSize);
129
130 if (ADL_rc != ADL_OK)
131 {
132 log_info ("WARN: %s: %d\n", "ADL_Adapter_AdapterInfo_Get()", ADL_rc);
133 }
134
135 return (ADL_rc);
136 }
137
138 int hm_ADL_Display_DisplayInfo_Get (ADL_PTR *adl, int iAdapterIndex, int *iNumDisplays, ADLDisplayInfo **lppInfo, int iForceDetect)
139 {
140 if (!adl) return -1;
141
142 int ADL_rc = adl->ADL_Display_DisplayInfo_Get (iAdapterIndex, iNumDisplays, lppInfo, iForceDetect);
143
144 if (ADL_rc != ADL_OK)
145 {
146 log_info ("WARN: %s: %d\n", "ADL_Display_DisplayInfo_Get()", ADL_rc);
147 }
148
149 return (ADL_rc);
150 }
151
152 int hm_ADL_Adapter_ID_Get (ADL_PTR *adl, int iAdapterIndex, int *lpAdapterID)
153 {
154 if (!adl) return -1;
155
156 int ADL_rc = adl->ADL_Adapter_ID_Get (iAdapterIndex, lpAdapterID);
157
158 if (ADL_rc != ADL_OK)
159 {
160 log_info ("WARN: %s: %d\n", "ADL_Adapter_ID_Get()", ADL_rc);
161 }
162
163 return ADL_rc;
164 }
165
166 int hm_ADL_Adapter_VideoBiosInfo_Get (ADL_PTR *adl, int iAdapterIndex, ADLBiosInfo *lpBiosInfo)
167 {
168 if (!adl) return -1;
169
170 int ADL_rc = adl->ADL_Adapter_VideoBiosInfo_Get (iAdapterIndex, lpBiosInfo);
171
172 if (ADL_rc != ADL_OK)
173 {
174 log_info ("WARN: %s: %d\n", "ADL_Adapter_VideoBiosInfo_Get()", ADL_rc);
175 }
176
177 return ADL_rc;
178 }
179
180 int hm_ADL_Overdrive_ThermalDevices_Enum (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex, ADLThermalControllerInfo *lpThermalControllerInfo)
181 {
182 if (!adl) return -1;
183
184 int ADL_rc = adl->ADL_Overdrive5_ThermalDevices_Enum (iAdapterIndex, iThermalControllerIndex, lpThermalControllerInfo);
185
186 if (ADL_rc != ADL_OK)
187 {
188 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_ThermalDevices_Enum()", ADL_rc);
189 }
190
191 return (ADL_rc);
192 }
193
194 int hm_ADL_Overdrive5_Temperature_Get (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex, ADLTemperature *lpTemperature)
195 {
196 if (!adl) return -1;
197
198 int ADL_rc = adl->ADL_Overdrive5_Temperature_Get (iAdapterIndex, iThermalControllerIndex, lpTemperature);
199
200 if (ADL_rc != ADL_OK)
201 {
202 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_Temperature_Get()", ADL_rc);
203 }
204
205 return (ADL_rc);
206 }
207
208 int hm_ADL_Overdrive6_Temperature_Get (ADL_PTR *adl, int iAdapterIndex, int *iTemperature)
209 {
210 if (!adl) return -1;
211
212 int ADL_rc = adl->ADL_Overdrive6_Temperature_Get (iAdapterIndex, iTemperature);
213
214 if (ADL_rc != ADL_OK)
215 {
216 log_info ("WARN: %s: %d\n", "ADL_Overdrive6_Temperature_Get()", ADL_rc);
217 }
218
219 return (ADL_rc);
220 }
221
222 int hm_ADL_Overdrive_CurrentActivity_Get (ADL_PTR *adl, int iAdapterIndex, ADLPMActivity *lpActivity)
223 {
224 if (!adl) return -1;
225
226 int ADL_rc = adl->ADL_Overdrive5_CurrentActivity_Get (iAdapterIndex, lpActivity);
227
228 if (ADL_rc != ADL_OK)
229 {
230 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_CurrentActivity_Get()", ADL_rc);
231 }
232
233 return (ADL_rc);
234 }
235
236 int hm_ADL_Overdrive5_FanSpeedInfo_Get (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex, ADLFanSpeedInfo *lpFanSpeedInfo)
237 {
238 if (!adl) return -1;
239
240 int ADL_rc = adl->ADL_Overdrive5_FanSpeedInfo_Get (iAdapterIndex, iThermalControllerIndex, lpFanSpeedInfo);
241
242 if (ADL_rc != ADL_OK)
243 {
244 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_FanSpeedInfo_Get()", ADL_rc);
245 }
246
247 return ADL_rc;
248 }
249
250 int hm_ADL_Overdrive5_FanSpeed_Get (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex, ADLFanSpeedValue *lpFanSpeedValue)
251 {
252 if (!adl) return -1;
253
254 int ADL_rc = adl->ADL_Overdrive5_FanSpeed_Get (iAdapterIndex, iThermalControllerIndex, lpFanSpeedValue);
255
256 if ((ADL_rc != ADL_OK) && (ADL_rc != ADL_ERR_NOT_SUPPORTED)) // exception allowed only here
257 {
258 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_FanSpeed_Get()", ADL_rc);
259 }
260
261 return (ADL_rc);
262 }
263
264 int hm_ADL_Overdrive6_FanSpeed_Get (ADL_PTR *adl, int iAdapterIndex, ADLOD6FanSpeedInfo *lpFanSpeedInfo)
265 {
266 if (!adl) return -1;
267
268 int ADL_rc = adl->ADL_Overdrive6_FanSpeed_Get (iAdapterIndex, lpFanSpeedInfo);
269
270 if ((ADL_rc != ADL_OK) && (ADL_rc != ADL_ERR_NOT_SUPPORTED)) // exception allowed only here
271 {
272 log_info ("WARN: %s: %d\n", "ADL_Overdrive6_FanSpeed_Get()", ADL_rc);
273 }
274
275 return (ADL_rc);
276 }
277
278 int hm_ADL_Overdrive5_FanSpeed_Set (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex, ADLFanSpeedValue *lpFanSpeedValue)
279 {
280 if (!adl) return -1;
281
282 int ADL_rc = adl->ADL_Overdrive5_FanSpeed_Set (iAdapterIndex, iThermalControllerIndex, lpFanSpeedValue);
283
284 if ((ADL_rc != ADL_OK) && (ADL_rc != ADL_ERR_NOT_SUPPORTED)) // exception allowed only here
285 {
286 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_FanSpeed_Set()", ADL_rc);
287 }
288
289 return (ADL_rc);
290 }
291
292 int hm_ADL_Overdrive6_FanSpeed_Set (ADL_PTR *adl, int iAdapterIndex, ADLOD6FanSpeedValue *lpFanSpeedValue)
293 {
294 if (!adl) return -1;
295
296 int ADL_rc = adl->ADL_Overdrive6_FanSpeed_Set (iAdapterIndex, lpFanSpeedValue);
297
298 if ((ADL_rc != ADL_OK) && (ADL_rc != ADL_ERR_NOT_SUPPORTED)) // exception allowed only here
299 {
300 log_info ("WARN: %s: %d\n", "ADL_Overdrive6_FanSpeed_Set()", ADL_rc);
301 }
302
303 return (ADL_rc);
304 }
305
306 int hm_ADL_Overdrive5_FanSpeedToDefault_Set (ADL_PTR *adl, int iAdapterIndex, int iThermalControllerIndex)
307 {
308 if (!adl) return -1;
309
310 int ADL_rc = adl->ADL_Overdrive5_FanSpeedToDefault_Set (iAdapterIndex, iThermalControllerIndex);
311
312 if ((ADL_rc != ADL_OK) && (ADL_rc != ADL_ERR_NOT_SUPPORTED)) // exception allowed only here
313 {
314 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_FanSpeedToDefault_Set()", ADL_rc);
315 }
316
317 return (ADL_rc);
318 }
319
320 int hm_ADL_Overdrive_ODParameters_Get (ADL_PTR *adl, int iAdapterIndex, ADLODParameters *lpOdParameters)
321 {
322 if (!adl) return -1;
323
324 int ADL_rc = adl->ADL_Overdrive5_ODParameters_Get (iAdapterIndex, lpOdParameters);
325
326 if (ADL_rc != ADL_OK)
327 {
328 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_ODParameters_Get()", ADL_rc);
329 }
330
331 return (ADL_rc);
332 }
333
334 int hm_ADL_Overdrive_ODPerformanceLevels_Get (ADL_PTR *adl, int iAdapterIndex, int iDefault, ADLODPerformanceLevels *lpOdPerformanceLevels)
335 {
336 if (!adl) return -1;
337
338 int ADL_rc = adl->ADL_Overdrive5_ODPerformanceLevels_Get (iAdapterIndex, iDefault, lpOdPerformanceLevels);
339
340 if (ADL_rc != ADL_OK)
341 {
342 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_ODPerformanceLevels_Get()", ADL_rc);
343 }
344
345 return (ADL_rc);
346 }
347
348 int hm_ADL_Overdrive_ODPerformanceLevels_Set (ADL_PTR *adl, int iAdapterIndex, ADLODPerformanceLevels *lpOdPerformanceLevels)
349 {
350 if (!adl) return -1;
351
352 int ADL_rc = adl->ADL_Overdrive5_ODPerformanceLevels_Set (iAdapterIndex, lpOdPerformanceLevels);
353
354 if (ADL_rc != ADL_OK)
355 {
356 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_ODPerformanceLevels_Set()", ADL_rc);
357 }
358
359 return (ADL_rc);
360 }
361
362 int hm_ADL_Overdrive_PowerControlInfo_Get (ADL_PTR *adl, int iAdapterIndex, ADLOD6PowerControlInfo *powertune)
363 {
364 if (!adl) return -1;
365
366 int ADL_rc = adl->ADL_Overdrive6_PowerControlInfo_Get (iAdapterIndex, powertune);
367
368 return (ADL_rc);
369 }
370
371 int hm_ADL_Overdrive_PowerControl_Get (ADL_PTR *adl, int iAdapterIndex, int *iCurrentValue)
372 {
373 if (!adl) return -1;
374
375 int default_value = 0;
376
377 int ADL_rc = adl->ADL_Overdrive6_PowerControl_Get (iAdapterIndex, iCurrentValue, &default_value);
378
379 return (ADL_rc);
380 }
381
382 int hm_ADL_Overdrive_PowerControl_Set (ADL_PTR *adl, int iAdapterIndex, int level)
383 {
384 if (!adl) return -1;
385
386 int ADL_rc = ADL_ERR;
387
388 ADLOD6PowerControlInfo powertune = {0, 0, 0, 0, 0};
389
390 if ((ADL_rc = hm_ADL_Overdrive_PowerControlInfo_Get (adl, iAdapterIndex, &powertune)) != ADL_OK)
391 {
392 log_info ("WARN: %s\n", "ADL_Overdrive6_PowerControl_Get", ADL_rc);
393 }
394 else
395 {
396 int min = powertune.iMinValue;
397 int max = powertune.iMaxValue;
398 int step = powertune.iStepValue;
399
400 if (level < min || level > max)
401 {
402 log_info ("WARN: ADL PowerControl level invalid");
403
404 return ADL_ERR;
405 }
406 if (level % step != 0)
407 {
408 log_info ("WARN: ADL PowerControl step invalid");
409
410 return ADL_ERR;
411 }
412
413 ADL_rc = adl->ADL_Overdrive6_PowerControl_Set (iAdapterIndex, level);
414 }
415
416 return (ADL_rc);
417 }
418
419 int hm_ADL_Adapter_Active_Get (ADL_PTR *adl, int iAdapterIndex, int *lpStatus)
420 {
421 if (!adl) return -1;
422
423 int ADL_rc = adl->ADL_Adapter_Active_Get (iAdapterIndex, lpStatus);
424
425 if (ADL_rc != ADL_OK)
426 {
427 log_info ("WARN: %s: %d\n", "ADL_Adapter_Active_Get()", ADL_rc);
428 }
429
430 return (ADL_rc);
431 }
432
433 /*
434 int hm_ADL_DisplayEnable_Set (ADL_PTR *adl, int iAdapterIndex, int *lpDisplayIndexList, int iDisplayListSize, int bPersistOnly)
435 {
436 if (!adl) return -1;
437
438 int ADL_rc = adl->ADL_DisplayEnable_Set (iAdapterIndex, lpDisplayIndexList, iDisplayListSize, bPersistOnly);
439
440 if (ADL_rc != ADL_OK)
441 {
442 log_info ("WARN: %s: %d\n", "ADL_DisplayEnable_Set()", ADL_rc);
443 }
444
445 return (ADL_rc);
446 }
447 */
448
449 int hm_ADL_Overdrive_Caps (ADL_PTR *adl, int iAdapterIndex, int *od_supported, int *od_enabled, int *od_version)
450 {
451 if (!adl) return -1;
452
453 int ADL_rc = adl->ADL_Overdrive_Caps (iAdapterIndex, od_supported, od_enabled, od_version);
454
455 return (ADL_rc);
456 }
457
458 int hm_ADL_Overdrive6_PowerControl_Caps (ADL_PTR *adl, int iAdapterIndex, int *lpSupported)
459 {
460 if (!adl) return -1;
461
462 int ADL_rc = adl->ADL_Overdrive6_PowerControl_Caps (iAdapterIndex, lpSupported);
463
464 return (ADL_rc);
465 }
466
467 int hm_ADL_Overdrive_Capabilities_Get (ADL_PTR *adl, int iAdapterIndex, ADLOD6Capabilities *caps)
468 {
469 if (!adl) return -1;
470
471 int ADL_rc = adl->ADL_Overdrive6_Capabilities_Get (iAdapterIndex, caps);
472
473 return (ADL_rc);
474 }
475
476 int hm_ADL_Overdrive_StateInfo_Get (ADL_PTR *adl, int iAdapterIndex, int type, ADLOD6MemClockState *state)
477 {
478 if (!adl) return -1;
479
480 int ADL_rc = adl->ADL_Overdrive6_StateInfo_Get (iAdapterIndex, type, state);
481
482 if (ADL_rc == ADL_OK)
483 {
484 // check if clocks are okay with step sizes
485 // if not run a little hack: adjust the clocks to nearest clock size (clock down just a little bit)
486
487 ADLOD6Capabilities caps;
488
489 if ((hm_ADL_Overdrive_Capabilities_Get (adl, iAdapterIndex, &caps)) != ADL_OK)
490 {
491 log_info ("ERROR: failed to get ADL device capabilities");
492
493 exit (1);
494 }
495
496 if (state->state.aLevels[0].iEngineClock % caps.sEngineClockRange.iStep != 0)
497 {
498 log_info ("WARN: ADL engine step size invalid for performance level 1");
499 state->state.aLevels[0].iEngineClock -= state->state.aLevels[0].iEngineClock % caps.sEngineClockRange.iStep;
500 }
501
502 if (state->state.aLevels[1].iEngineClock % caps.sEngineClockRange.iStep != 0)
503 {
504 log_info ("WARN: ADL engine step size invalid for performance level 2");
505 state->state.aLevels[1].iEngineClock -= state->state.aLevels[1].iEngineClock % caps.sEngineClockRange.iStep;
506 }
507
508 if (state->state.aLevels[0].iMemoryClock % caps.sMemoryClockRange.iStep != 0)
509 {
510 log_info ("WARN: ADL memory step size invalid for performance level 1");
511 state->state.aLevels[0].iMemoryClock -= state->state.aLevels[0].iMemoryClock % caps.sMemoryClockRange.iStep;
512 }
513
514 if (state->state.aLevels[1].iMemoryClock % caps.sMemoryClockRange.iStep != 0)
515 {
516 log_info ("WARN: ADL memory step size invalid for performance level 2");
517 state->state.aLevels[1].iMemoryClock -= state->state.aLevels[1].iMemoryClock % caps.sMemoryClockRange.iStep;
518 }
519 }
520
521 return (ADL_rc);
522 }
523
524 int hm_ADL_Overdrive_CurrentStatus_Get (ADL_PTR *adl, int iAdapterIndex, ADLOD6CurrentStatus *status)
525 {
526 if (!adl) return -1;
527
528 int ADL_rc = adl->ADL_Overdrive6_CurrentStatus_Get (iAdapterIndex, status);
529
530 return (ADL_rc);
531 }
532
533 int hm_ADL_Overdrive_State_Set (ADL_PTR *adl, int iAdapterIndex, int type, ADLOD6StateInfo *state)
534 {
535 if (!adl) return -1;
536
537 // sanity checks
538
539 ADLOD6Capabilities caps;
540
541 if ((hm_ADL_Overdrive_Capabilities_Get (adl, iAdapterIndex, &caps)) != ADL_OK)
542 {
543 log_info ("ERROR: failed to get ADL device capabilities");
544
545 exit (1);
546 }
547
548 if (state->aLevels[0].iEngineClock < caps.sEngineClockRange.iMin || state->aLevels[1].iEngineClock > caps.sEngineClockRange.iMax)
549 {
550 log_info ("WARN: ADL engine clock outside valid range");
551
552 return ADL_ERR;
553 }
554
555 if (state->aLevels[1].iEngineClock % caps.sEngineClockRange.iStep != 0)
556 {
557 log_info ("WARN: ADL engine step size invalid");
558
559 return ADL_ERR;
560 }
561
562 if (state->aLevels[0].iMemoryClock < caps.sMemoryClockRange.iMin || state->aLevels[1].iMemoryClock > caps.sMemoryClockRange.iMax)
563 {
564 log_info ("WARN: ADL memory clock outside valid range");
565
566 return ADL_ERR;
567 }
568
569 if (state->aLevels[1].iMemoryClock % caps.sMemoryClockRange.iStep != 0)
570 {
571 log_info ("WARN: ADL memory step size invalid");
572
573 return ADL_ERR;
574 }
575
576 int ADL_rc = adl->ADL_Overdrive6_State_Set (iAdapterIndex, type, state);
577
578 return (ADL_rc);
579 }
580
581 int hm_ADL_Overdrive6_TargetTemperatureData_Get (ADL_PTR *adl, int iAdapterIndex, int *cur_temp, int *default_temp)
582 {
583 if (!adl) return -1;
584
585 int ADL_rc = adl->ADL_Overdrive6_TargetTemperatureData_Get (iAdapterIndex, cur_temp, default_temp);
586
587 return (ADL_rc);
588 }
589
590 int hm_ADL_Overdrive6_TargetTemperatureRangeInfo_Get (ADL_PTR *adl, int iAdapterIndex, ADLOD6ParameterRange *lpTargetTemperatureInfo)
591 {
592 if (!adl) return -1;
593
594 int ADL_rc = adl->ADL_Overdrive6_TargetTemperatureRangeInfo_Get (iAdapterIndex, lpTargetTemperatureInfo);
595
596 return (ADL_rc);
597 }
598
599 int hm_ADL_Overdrive6_FanSpeed_Reset (ADL_PTR *adl, int iAdapterIndex)
600 {
601 if (!adl) return -1;
602
603 int ADL_rc = adl->ADL_Overdrive6_FanSpeed_Reset (iAdapterIndex);
604
605 return (ADL_rc);
606 }