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