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