Initial commit
[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 #ifdef _POSIX
9 void *GetProcAddress (void *pLibrary, const char *name)
10 {
11 return dlsym (pLibrary, name);
12 }
13 #endif
14
15 int hc_ADL_Main_Control_Destroy (HM_LIB hDLL)
16 {
17 ADL_MAIN_CONTROL_DESTROY ADL_Main_Control_Destroy = (ADL_MAIN_CONTROL_DESTROY) GetProcAddress (hDLL, "ADL_Main_Control_Destroy");
18
19 if (ADL_Main_Control_Destroy == NULL)
20 {
21 log_error ("ERROR: %s\n", "ADL_Main_Control_Destroy() is missing");
22
23 exit (-1);
24 }
25
26 int ADL_rc = ADL_Main_Control_Destroy ();
27
28 if (ADL_rc != ADL_OK)
29 {
30 log_info ("WARN: %s: %d\n", "ADL_Main_Control_Destroy()", ADL_rc);
31 }
32
33 return (ADL_rc);
34 }
35
36 int hc_ADL_Main_Control_Create (HM_LIB hDLL, ADL_MAIN_MALLOC_CALLBACK callback, int iEnumConnectedAdapters)
37 {
38 ADL_MAIN_CONTROL_CREATE ADL_Main_Control_Create = (ADL_MAIN_CONTROL_CREATE) GetProcAddress (hDLL, "ADL_Main_Control_Create");
39
40 if (ADL_Main_Control_Create == NULL)
41 {
42 log_error ("ERROR: %s\n", "ADL_Main_Control_Create() is missing");
43
44 exit (-1);
45 }
46
47 int ADL_rc = ADL_Main_Control_Create (callback, iEnumConnectedAdapters);
48
49 if (ADL_rc != ADL_OK)
50 {
51 log_info ("WARN: %s: %d\n", "ADL_Main_Control_Create()", ADL_rc);
52 }
53
54 return (ADL_rc);
55 }
56
57 int hc_ADL_Adapter_NumberOfAdapters_Get (HM_LIB hDLL, int *lpNumAdapters)
58 {
59 ADL_ADAPTER_NUMBEROFADAPTERS_GET ADL_Adapter_NumberOfAdapters_Get = (ADL_ADAPTER_NUMBEROFADAPTERS_GET) GetProcAddress (hDLL, "ADL_Adapter_NumberOfAdapters_Get");
60
61 if (ADL_Adapter_NumberOfAdapters_Get == NULL)
62 {
63 log_error ("ERROR: %s\n", "ADL_Adapter_NumberOfAdapters_Get() is missing");
64
65 exit (-1);
66 }
67
68 int ADL_rc = ADL_Adapter_NumberOfAdapters_Get (lpNumAdapters);
69
70 if (ADL_rc != ADL_OK)
71 {
72 log_info ("WARN: %s: %d\n", "ADL_Adapter_NumberOfAdapters_Get()", ADL_rc);
73 }
74
75 return (ADL_rc);
76 }
77
78 int hc_ADL_Adapter_AdapterInfo_Get (HM_LIB hDLL, LPAdapterInfo lpInfo, int iInputSize)
79 {
80 ADL_ADAPTER_ADAPTERINFO_GET ADL_Adapter_AdapterInfo_Get = (ADL_ADAPTER_ADAPTERINFO_GET) GetProcAddress (hDLL, "ADL_Adapter_AdapterInfo_Get");
81
82 if (ADL_Adapter_AdapterInfo_Get == NULL)
83 {
84 log_error ("ERROR: %s\n", "ADL_Adapter_AdapterInfo_Get() is missing");
85
86 exit (-1);
87 }
88
89 int ADL_rc = ADL_Adapter_AdapterInfo_Get (lpInfo, iInputSize);
90
91 if (ADL_rc != ADL_OK)
92 {
93 log_info ("WARN: %s: %d\n", "ADL_Adapter_AdapterInfo_Get()", ADL_rc);
94 }
95
96 return (ADL_rc);
97 }
98
99 int hc_ADL_Display_DisplayInfo_Get (HM_LIB hDLL, int iAdapterIndex, int *iNumDisplays, ADLDisplayInfo **lppInfo, int iForceDetect)
100 {
101 ADL_DISPLAY_DISPLAYINFO_GET ADL_Display_DisplayInfo_Get = (ADL_DISPLAY_DISPLAYINFO_GET) GetProcAddress (hDLL, "ADL_Display_DisplayInfo_Get");
102
103 if (ADL_Display_DisplayInfo_Get == NULL)
104 {
105 log_error ("ERROR: %s\n", "ADL_Display_DisplayInfo_Get() is missing");
106
107 exit (-1);
108 }
109
110 int ADL_rc = ADL_Display_DisplayInfo_Get (iAdapterIndex, iNumDisplays, lppInfo, iForceDetect);
111
112 if (ADL_rc != ADL_OK)
113 {
114 log_info ("WARN: %s: %d\n", "ADL_Display_DisplayInfo_Get()", ADL_rc);
115 }
116
117 return (ADL_rc);
118 }
119
120 int hc_ADL_Adapter_ID_Get (HM_LIB hDLL, int iAdapterIndex, int *lpAdapterID)
121 {
122 HC_ADL_ADAPTER_ID_GET ADL_Adapter_ID_Get = (HC_ADL_ADAPTER_ID_GET) GetProcAddress (hDLL, "ADL_Adapter_ID_Get");
123
124 if (ADL_Adapter_ID_Get == NULL)
125 {
126 log_error ("ERROR: %s\n", "ADL_Adapter_ID_Get() is missing");
127
128 exit (-1);
129 }
130
131 int ADL_rc = ADL_Adapter_ID_Get (iAdapterIndex, lpAdapterID);
132
133 if (ADL_rc != ADL_OK)
134 {
135 log_info ("WARN: %s: %d\n", "ADL_Adapter_ID_Get()", ADL_rc);
136 }
137
138 return ADL_rc;
139 }
140
141 int hc_ADL_Adapter_VideoBiosInfo_Get (HM_LIB hDLL, int iAdapterIndex, ADLBiosInfo *lpBiosInfo)
142 {
143 HC_ADL_ADAPTER_VIDEOBIOSINFO_GET ADL_Adapter_VideoBiosInfo_Get = (HC_ADL_ADAPTER_VIDEOBIOSINFO_GET) GetProcAddress (hDLL, "ADL_Adapter_VideoBiosInfo_Get");
144
145 if (ADL_Adapter_VideoBiosInfo_Get == NULL)
146 {
147 log_error ("ERROR: %s\n", "ADL_Adapter_VideoBiosInfo_Get() is missing");
148
149 exit (-1);
150 }
151
152 int ADL_rc = ADL_Adapter_VideoBiosInfo_Get (iAdapterIndex, lpBiosInfo);
153
154 if (ADL_rc != ADL_OK)
155 {
156 log_info ("WARN: %s: %d\n", "ADL_Adapter_VideoBiosInfo_Get()", ADL_rc);
157 }
158
159 return ADL_rc;
160 }
161
162 int hc_ADL_Overdrive_ThermalDevices_Enum (HM_LIB hDLL, int iAdapterIndex, int iThermalControllerIndex, ADLThermalControllerInfo *lpThermalControllerInfo)
163 {
164 HC_ADL_OVERDRIVE5_THERMALDEVICES_ENUM ADL_Overdrive5_ThermalDevices_Enum = (HC_ADL_OVERDRIVE5_THERMALDEVICES_ENUM) GetProcAddress (hDLL, "ADL_Overdrive5_ThermalDevices_Enum");
165
166 if (ADL_Overdrive5_ThermalDevices_Enum == NULL)
167 {
168 log_error ("ERROR: %s\n", "ADL_Overdrive5_ThermalDevices_Enum() is missing");
169
170 exit (-1);
171 }
172
173 int ADL_rc = ADL_Overdrive5_ThermalDevices_Enum (iAdapterIndex, iThermalControllerIndex, lpThermalControllerInfo);
174
175 if (ADL_rc != ADL_OK)
176 {
177 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_ThermalDevices_Enum()", ADL_rc);
178 }
179
180 return (ADL_rc);
181 }
182
183 int hc_ADL_Overdrive5_Temperature_Get (HM_LIB hDLL, int iAdapterIndex, int iThermalControllerIndex, ADLTemperature *lpTemperature)
184 {
185 ADL_OVERDRIVE5_TEMPERATURE_GET ADL_Overdrive5_Temperature_Get = (ADL_OVERDRIVE5_TEMPERATURE_GET) GetProcAddress (hDLL, "ADL_Overdrive5_Temperature_Get");
186
187 if (ADL_Overdrive5_Temperature_Get == NULL)
188 {
189 log_error ("ERROR: %s\n", "ADL_Overdrive5_Temperature_Get() is missing");
190
191 exit (-1);
192 }
193
194 int ADL_rc = ADL_Overdrive5_Temperature_Get (iAdapterIndex, iThermalControllerIndex, lpTemperature);
195
196 if (ADL_rc != ADL_OK)
197 {
198 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_Temperature_Get()", ADL_rc);
199 }
200
201 return (ADL_rc);
202 }
203
204 int hc_ADL_Overdrive6_Temperature_Get (HM_LIB hDLL, int iAdapterIndex, int *iTemperature)
205 {
206 ADL_OVERDRIVE6_TEMPERATURE_GET ADL_Overdrive6_Temperature_Get = (ADL_OVERDRIVE6_TEMPERATURE_GET) GetProcAddress (hDLL, "ADL_Overdrive6_Temperature_Get");
207
208 if (ADL_Overdrive6_Temperature_Get == NULL)
209 {
210 log_error ("ERROR: %s\n", "ADL_Overdrive6_Temperature_Get() is missing");
211
212 exit (-1);
213 }
214
215 int ADL_rc = ADL_Overdrive6_Temperature_Get (iAdapterIndex, iTemperature);
216
217 if (ADL_rc != ADL_OK)
218 {
219 log_info ("WARN: %s: %d\n", "ADL_Overdrive6_Temperature_Get()", ADL_rc);
220 }
221
222 return (ADL_rc);
223 }
224
225 int hc_ADL_Overdrive_CurrentActivity_Get (HM_LIB hDLL, int iAdapterIndex, ADLPMActivity *lpActivity)
226 {
227 HC_ADL_OVERDRIVE5_CURRENTACTIVITY_GET ADL_Overdrive5_CurrentActivity_Get = (HC_ADL_OVERDRIVE5_CURRENTACTIVITY_GET) GetProcAddress (hDLL, "ADL_Overdrive5_CurrentActivity_Get");
228
229 if (ADL_Overdrive5_CurrentActivity_Get == NULL)
230 {
231 log_error ("ERROR: %s\n", "ADL_Overdrive5_CurrentActivity_Get() is missing");
232
233 exit (-1);
234 }
235
236 int ADL_rc = ADL_Overdrive5_CurrentActivity_Get (iAdapterIndex, lpActivity);
237
238 if (ADL_rc != ADL_OK)
239 {
240 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_CurrentActivity_Get()", ADL_rc);
241 }
242
243 return (ADL_rc);
244 }
245
246 int hc_ADL_Overdrive5_FanSpeedInfo_Get (HM_LIB hDLL, int iAdapterIndex, int iThermalControllerIndex, ADLFanSpeedInfo *lpFanSpeedInfo)
247 {
248 HC_ADL_OVERDRIVE5_FANSPEEDINFO_GET ADL_Overdrive5_FanSpeedInfo_Get = (HC_ADL_OVERDRIVE5_FANSPEEDINFO_GET) GetProcAddress (hDLL, "ADL_Overdrive5_FanSpeedInfo_Get");
249
250 if (ADL_Overdrive5_FanSpeedInfo_Get == NULL)
251 {
252 log_error ("ERROR: %s\n", "ADL_Overdrive5_FanSpeedInfo_Get() is missing");
253
254 exit (-1);
255 }
256
257 int ADL_rc = ADL_Overdrive5_FanSpeedInfo_Get (iAdapterIndex, iThermalControllerIndex, lpFanSpeedInfo);
258
259 if (ADL_rc != ADL_OK)
260 {
261 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_FanSpeedInfo_Get()", ADL_rc);
262 }
263
264 return ADL_rc;
265 }
266
267 int hc_ADL_Overdrive5_FanSpeed_Get (HM_LIB hDLL, int iAdapterIndex, int iThermalControllerIndex, ADLFanSpeedValue *lpFanSpeedValue)
268 {
269 ADL_OVERDRIVE5_FANSPEED_GET ADL_Overdrive5_FanSpeed_Get = (ADL_OVERDRIVE5_FANSPEED_GET) GetProcAddress (hDLL, "ADL_Overdrive5_FanSpeed_Get");
270
271 if (ADL_Overdrive5_FanSpeed_Get == NULL)
272 {
273 log_error ("ERROR: %s\n", "ADL_Overdrive5_FanSpeed_Get() is missing");
274
275 exit (-1);
276 }
277
278 int ADL_rc = ADL_Overdrive5_FanSpeed_Get (iAdapterIndex, iThermalControllerIndex, lpFanSpeedValue);
279
280 if ((ADL_rc != ADL_OK) && (ADL_rc != ADL_ERR_NOT_SUPPORTED)) // exception allowed only here
281 {
282 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_FanSpeed_Get()", ADL_rc);
283 }
284
285 return (ADL_rc);
286 }
287
288 int hc_ADL_Overdrive6_FanSpeed_Get (HM_LIB hDLL, int iAdapterIndex, ADLOD6FanSpeedInfo *lpFanSpeedInfo)
289 {
290 ADL_OVERDRIVE6_FANSPEED_GET ADL_Overdrive6_FanSpeed_Get = (ADL_OVERDRIVE6_FANSPEED_GET) GetProcAddress (hDLL, "ADL_Overdrive6_FanSpeed_Get");
291
292 if (ADL_Overdrive6_FanSpeed_Get == NULL)
293 {
294 log_error ("ERROR: %s\n", "ADL_Overdrive6_FanSpeed_Get() is missing");
295
296 exit (-1);
297 }
298
299 int ADL_rc = ADL_Overdrive6_FanSpeed_Get (iAdapterIndex, lpFanSpeedInfo);
300
301 if ((ADL_rc != ADL_OK) && (ADL_rc != ADL_ERR_NOT_SUPPORTED)) // exception allowed only here
302 {
303 log_info ("WARN: %s: %d\n", "ADL_Overdrive6_FanSpeed_Get()", ADL_rc);
304 }
305
306 return (ADL_rc);
307 }
308
309 int hc_ADL_Overdrive5_FanSpeed_Set (HM_LIB hDLL, int iAdapterIndex, int iThermalControllerIndex, ADLFanSpeedValue *lpFanSpeedValue)
310 {
311 ADL_OVERDRIVE5_FANSPEED_SET ADL_Overdrive5_FanSpeed_Set = (ADL_OVERDRIVE5_FANSPEED_SET) GetProcAddress (hDLL, "ADL_Overdrive5_FanSpeed_Set");
312
313 if (ADL_Overdrive5_FanSpeed_Set == NULL)
314 {
315 log_error ("ERROR: %s\n", "ADL_Overdrive5_FanSpeed_Set() is missing");
316
317 exit (-1);
318 }
319
320 int ADL_rc = ADL_Overdrive5_FanSpeed_Set (iAdapterIndex, iThermalControllerIndex, lpFanSpeedValue);
321
322 if ((ADL_rc != ADL_OK) && (ADL_rc != ADL_ERR_NOT_SUPPORTED)) // exception allowed only here
323 {
324 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_FanSpeed_Set()", ADL_rc);
325 }
326
327 return (ADL_rc);
328 }
329
330 int hc_ADL_Overdrive6_FanSpeed_Set (HM_LIB hDLL, int iAdapterIndex, ADLOD6FanSpeedValue *lpFanSpeedValue)
331 {
332 ADL_OVERDRIVE6_FANSPEED_SET ADL_Overdrive6_FanSpeed_Set = (ADL_OVERDRIVE6_FANSPEED_SET) GetProcAddress (hDLL, "ADL_Overdrive6_FanSpeed_Set");
333
334 if (ADL_Overdrive6_FanSpeed_Set == NULL)
335 {
336 log_error ("ERROR: %s\n", "ADL_Overdrive6_FanSpeed_Set() is missing");
337
338 exit (-1);
339 }
340
341 int ADL_rc = ADL_Overdrive6_FanSpeed_Set (iAdapterIndex, lpFanSpeedValue);
342
343 if ((ADL_rc != ADL_OK) && (ADL_rc != ADL_ERR_NOT_SUPPORTED)) // exception allowed only here
344 {
345 log_info ("WARN: %s: %d\n", "ADL_Overdrive6_FanSpeed_Set()", ADL_rc);
346 }
347
348 return (ADL_rc);
349 }
350
351 int hc_ADL_Overdrive5_FanSpeedToDefault_Set (HM_LIB hDLL, int iAdapterIndex, int iThermalControllerIndex)
352 {
353 ADL_OVERDRIVE5_FANSPEEDTODEFAULT_SET ADL_Overdrive5_FanSpeedToDefault_Set = (ADL_OVERDRIVE5_FANSPEEDTODEFAULT_SET) GetProcAddress (hDLL, "ADL_Overdrive5_FanSpeedToDefault_Set");
354
355 if (ADL_Overdrive5_FanSpeedToDefault_Set == NULL)
356 {
357 log_error ("ERROR: %s\n", "ADL_Overdrive5_FanSpeedToDefault_Set() is missing");
358
359 exit (-1);
360 }
361
362 int ADL_rc = ADL_Overdrive5_FanSpeedToDefault_Set (iAdapterIndex, iThermalControllerIndex);
363
364 if ((ADL_rc != ADL_OK) && (ADL_rc != ADL_ERR_NOT_SUPPORTED)) // exception allowed only here
365 {
366 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_FanSpeedToDefault_Set()", ADL_rc);
367 }
368
369 return (ADL_rc);
370 }
371
372 int hc_ADL_Overdrive_ODParameters_Get (HM_LIB hDLL, int iAdapterIndex, ADLODParameters *lpOdParameters)
373 {
374 HC_ADL_OVERDRIVE5_ODPARAMETERS_GET ADL_Overdrive5_ODParameters_Get = (HC_ADL_OVERDRIVE5_ODPARAMETERS_GET) GetProcAddress (hDLL, "ADL_Overdrive5_ODParameters_Get");
375
376 if (ADL_Overdrive5_ODParameters_Get == NULL)
377 {
378 log_error ("ERROR: %s\n", "ADL_Overdrive5_ODParameters_Get() is missing");
379
380 exit (-1);
381 }
382
383 int ADL_rc = ADL_Overdrive5_ODParameters_Get (iAdapterIndex, lpOdParameters);
384
385 if (ADL_rc != ADL_OK)
386 {
387 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_ODParameters_Get()", ADL_rc);
388 }
389
390 return (ADL_rc);
391 }
392
393 int hc_ADL_Overdrive_ODPerformanceLevels_Get (HM_LIB hDLL, int iAdapterIndex, int iDefault, ADLODPerformanceLevels *lpOdPerformanceLevels)
394 {
395 HC_ADL_OVERDRIVE5_ODPERFORMANCELEVELS_GET ADL_Overdrive5_ODPerformanceLevels_Get = (HC_ADL_OVERDRIVE5_ODPERFORMANCELEVELS_GET) GetProcAddress (hDLL, "ADL_Overdrive5_ODPerformanceLevels_Get");
396
397 if (ADL_Overdrive5_ODPerformanceLevels_Get == NULL)
398 {
399 log_error ("ERROR: %s\n", "ADL_Overdrive5_ODPerformanceLevels_Get() is missing");
400
401 exit (-1);
402 }
403
404 int ADL_rc = ADL_Overdrive5_ODPerformanceLevels_Get (iAdapterIndex, iDefault, lpOdPerformanceLevels);
405
406 if (ADL_rc != ADL_OK)
407 {
408 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_ODPerformanceLevels_Get()", ADL_rc);
409 }
410
411 return (ADL_rc);
412 }
413
414 int hc_ADL_Overdrive_ODPerformanceLevels_Set (HM_LIB hDLL, int iAdapterIndex, ADLODPerformanceLevels *lpOdPerformanceLevels)
415 {
416 HC_ADL_OVERDRIVE5_ODPERFORMANCELEVELS_SET ADL_Overdrive5_ODPerformanceLevels_Set = (HC_ADL_OVERDRIVE5_ODPERFORMANCELEVELS_SET) GetProcAddress (hDLL, "ADL_Overdrive5_ODPerformanceLevels_Set");
417
418 if (ADL_Overdrive5_ODPerformanceLevels_Set == NULL)
419 {
420 log_error ("ERROR: %s\n", "ADL_Overdrive5_ODPerformanceLevels_Set() is missing");
421
422 exit (-1);
423 }
424
425 int ADL_rc = ADL_Overdrive5_ODPerformanceLevels_Set (iAdapterIndex, lpOdPerformanceLevels);
426
427 if (ADL_rc != ADL_OK)
428 {
429 log_info ("WARN: %s: %d\n", "ADL_Overdrive5_ODPerformanceLevels_Set()", ADL_rc);
430 }
431
432 return (ADL_rc);
433 }
434
435 int hc_ADL_Overdrive_PowerControlInfo_Get (HM_LIB hDLL, int iAdapterIndex, ADLOD6PowerControlInfo *powertune)
436 {
437 HC_ADL_OVERDRIVE6_POWERCONTROLINFO_GET ADL_Overdrive6_PowerControlInfo_Get = (HC_ADL_OVERDRIVE6_POWERCONTROLINFO_GET) GetProcAddress (hDLL, "ADL_Overdrive6_PowerControlInfo_Get");
438
439 if (ADL_Overdrive6_PowerControlInfo_Get == NULL)
440 {
441 log_error ("ERROR: %s\n", "ADL_Overdrive6_PowerControlInfo_Get is missing");
442
443 exit (-1);
444 }
445
446 int ADL_rc = ADL_Overdrive6_PowerControlInfo_Get (iAdapterIndex, powertune);
447
448 return (ADL_rc);
449 }
450
451 int hc_ADL_Overdrive_PowerControl_Get (HM_LIB hDLL, int iAdapterIndex, int *iCurrentValue)
452 {
453 HC_ADL_OVERDRIVE6_POWERCONTROL_GET ADL_Overdrive6_PowerControl_Get = (HC_ADL_OVERDRIVE6_POWERCONTROL_GET) GetProcAddress (hDLL, "ADL_Overdrive6_PowerControl_Get");
454
455 if (ADL_Overdrive6_PowerControl_Get == NULL)
456 {
457 log_error ("ERROR: %s\n", "ADL_Overdrive6_PowerControl_Get is missing");
458
459 exit (-1);
460 }
461
462 int default_value = 0;
463
464 int ADL_rc = ADL_Overdrive6_PowerControl_Get (iAdapterIndex, iCurrentValue, &default_value);
465
466 return (ADL_rc);
467 }
468
469 int hc_ADL_Overdrive_PowerControl_Set (HM_LIB hDLL, int iAdapterIndex, int level)
470 {
471 HC_ADL_OVERDRIVE6_POWERCONTROL_SET ADL_Overdrive6_PowerControl_Set = (HC_ADL_OVERDRIVE6_POWERCONTROL_SET) GetProcAddress (hDLL, "ADL_Overdrive6_PowerControl_Set");
472
473 int ADL_rc = ADL_ERR;
474
475 ADLOD6PowerControlInfo powertune = {0, 0, 0, 0, 0};
476
477 if ((ADL_rc = hc_ADL_Overdrive_PowerControlInfo_Get (hDLL, iAdapterIndex, &powertune)) != ADL_OK)
478 {
479 log_info ("WARN: %s\n", "ADL_Overdrive6_PowerControl_Get", ADL_rc);
480 }
481 else
482 {
483 int min = powertune.iMinValue;
484 int max = powertune.iMaxValue;
485 int step = powertune.iStepValue;
486
487 if (level < min || level > max)
488 {
489 log_info ("WARN: ADL PowerControl level invalid");
490
491 return ADL_ERR;
492 }
493 if (level % step != 0)
494 {
495 log_info ("WARN: ADL PowerControl step invalid");
496
497 return ADL_ERR;
498 }
499
500 ADL_rc = ADL_Overdrive6_PowerControl_Set (iAdapterIndex, level);
501 }
502
503 return (ADL_rc);
504 }
505
506 int hc_ADL_Adapter_Active_Get (HM_LIB hDLL, int iAdapterIndex, int *lpStatus)
507 {
508 ADL_ADAPTER_ACTIVE_GET ADL_Adapter_Active_Get = (ADL_ADAPTER_ACTIVE_GET) GetProcAddress (hDLL, "ADL_Adapter_Active_Get");
509
510 if (ADL_Adapter_Active_Get == NULL)
511 {
512 log_error ("ERROR: %s\n", "ADL_Adapter_Active_Get() is missing");
513
514 exit (-1);
515 }
516
517 int ADL_rc = ADL_Adapter_Active_Get (iAdapterIndex, lpStatus);
518
519 if (ADL_rc != ADL_OK)
520 {
521 log_info ("WARN: %s: %d\n", "ADL_Adapter_Active_Get()", ADL_rc);
522 }
523
524 return (ADL_rc);
525 }
526
527 int hc_ADL_DisplayEnable_Set (HM_LIB hDLL, int iAdapterIndex, int *lpDisplayIndexList, int iDisplayListSize, int bPersistOnly)
528 {
529 ADL_DISPLAYENABLE_SET ADL_DisplayEnable_Set = (ADL_DISPLAYENABLE_SET) GetProcAddress (hDLL, "ADL_DisplayEnable_Set");
530
531 if (ADL_DisplayEnable_Set == NULL)
532 {
533 log_error ("ERROR: %s\n", "ADL_DisplayEnable_Set() is missing");
534
535 exit (-1);
536 }
537
538 int ADL_rc = ADL_DisplayEnable_Set (iAdapterIndex, lpDisplayIndexList, iDisplayListSize, bPersistOnly);
539
540 if (ADL_rc != ADL_OK)
541 {
542 log_info ("WARN: %s: %d\n", "ADL_DisplayEnable_Set()", ADL_rc);
543 }
544
545 return (ADL_rc);
546 }
547
548 int hc_ADL_Overdrive_Caps (HM_LIB hDLL, int iAdapterIndex, int *od_supported, int *od_enabled, int *od_version)
549 {
550 ADL_OVERDRIVE_CAPS ADL_Overdrive_Caps = (ADL_OVERDRIVE_CAPS) GetProcAddress (hDLL, "ADL_Overdrive_Caps");
551
552 if (ADL_Overdrive_Caps == NULL)
553 {
554 log_error ("ERROR: %s\n", "ADL_Overdrive_Caps() is missing");
555
556 exit (-1);
557 }
558
559 int ADL_rc = ADL_Overdrive_Caps (iAdapterIndex, od_supported, od_enabled, od_version);
560
561 return (ADL_rc) ;
562 }
563
564 int hc_ADL_Overdrive6_PowerControl_Caps (HM_LIB hDLL, int iAdapterIndex, int *lpSupported)
565 {
566 ADL_OVERDRIVE6_POWERCONTROL_CAPS ADL_Overdrive6_PowerControl_Caps = (ADL_OVERDRIVE6_POWERCONTROL_CAPS) GetProcAddress (hDLL, "ADL_Overdrive6_PowerControl_Caps");
567
568 if (ADL_Overdrive6_PowerControl_Caps == NULL)
569 {
570 log_error ("ERROR: %s\n", "ADL_Overdrive6_PowerControl_Caps() is missing");
571
572 exit (-1);
573 }
574
575 int ADL_rc = ADL_Overdrive6_PowerControl_Caps (iAdapterIndex, lpSupported);
576
577 return (ADL_rc) ;
578 }
579
580 int hc_ADL_Overdrive_Capabilities_Get (HM_LIB hDLL, int iAdapterIndex, ADLOD6Capabilities *caps)
581 {
582 ADL_OVERDRIVE6_CAPABILITIES_GET ADL_Overdrive6_Capabilities_Get = (ADL_OVERDRIVE6_CAPABILITIES_GET) GetProcAddress (hDLL, "ADL_Overdrive6_Capabilities_Get");
583
584 if (ADL_Overdrive6_Capabilities_Get == NULL)
585 {
586 log_error ("ERROR: %s\n", "ADL_Overdrive6_Capabilities_Get() is missing");
587
588 exit (-1);
589 }
590
591 int ADL_rc = ADL_Overdrive6_Capabilities_Get (iAdapterIndex, caps);
592
593 return (ADL_rc);
594 }
595
596 int hc_ADL_Overdrive_StateInfo_Get (HM_LIB hDLL, int iAdapterIndex, int type, ADLOD6MemClockState *state)
597 {
598 ADL_OVERDRIVE6_STATEINFO_GET ADL_Overdrive6_StateInfo_Get = (ADL_OVERDRIVE6_STATEINFO_GET) GetProcAddress (hDLL, "ADL_Overdrive6_StateInfo_Get");
599
600 if (ADL_Overdrive6_StateInfo_Get == NULL)
601 {
602 log_error ("ERROR: %s\n", "ADL_Overdrive6_StateInfo_Get() is missing");
603
604 exit (-1);
605 }
606
607 int ADL_rc = ADL_Overdrive6_StateInfo_Get (iAdapterIndex, type, state);
608
609 if (ADL_rc == ADL_OK)
610 {
611 // check if clocks are okay with step sizes
612 // if not run a little hack: adjust the clocks to nearest clock size (clock down just a little bit)
613
614 ADLOD6Capabilities caps;
615
616 if ((hc_ADL_Overdrive_Capabilities_Get (hDLL, iAdapterIndex, &caps)) != ADL_OK)
617 {
618 log_info ("ERROR: failed to get ADL device capabilities");
619
620 exit (1);
621 }
622
623 if (state->state.aLevels[0].iEngineClock % caps.sEngineClockRange.iStep != 0)
624 {
625 log_info ("WARN: ADL engine step size invalid for performance level 1");
626 state->state.aLevels[0].iEngineClock -= state->state.aLevels[0].iEngineClock % caps.sEngineClockRange.iStep;
627 }
628
629 if (state->state.aLevels[1].iEngineClock % caps.sEngineClockRange.iStep != 0)
630 {
631 log_info ("WARN: ADL engine step size invalid for performance level 2");
632 state->state.aLevels[1].iEngineClock -= state->state.aLevels[1].iEngineClock % caps.sEngineClockRange.iStep;
633 }
634
635 if (state->state.aLevels[0].iMemoryClock % caps.sMemoryClockRange.iStep != 0)
636 {
637 log_info ("WARN: ADL memory step size invalid for performance level 1");
638 state->state.aLevels[0].iMemoryClock -= state->state.aLevels[0].iMemoryClock % caps.sMemoryClockRange.iStep;
639 }
640
641 if (state->state.aLevels[1].iMemoryClock % caps.sMemoryClockRange.iStep != 0)
642 {
643 log_info ("WARN: ADL memory step size invalid for performance level 2");
644 state->state.aLevels[1].iMemoryClock -= state->state.aLevels[1].iMemoryClock % caps.sMemoryClockRange.iStep;
645 }
646 }
647
648 return (ADL_rc);
649 }
650
651 int hc_ADL_Overdrive_CurrentStatus_Get (HM_LIB hDLL, int iAdapterIndex, ADLOD6CurrentStatus *status)
652 {
653 ADL_OVERDRIVE6_CURRENTSTATUS_GET ADL_Overdrive6_CurrentStatus_Get = (ADL_OVERDRIVE6_CURRENTSTATUS_GET) GetProcAddress (hDLL, "ADL_Overdrive6_CurrentStatus_Get");
654
655 if (ADL_Overdrive6_CurrentStatus_Get == NULL)
656 {
657 log_error ("ERROR: %s\n", "ADL_Overdrive6_CurrentStatus_Get() is missing");
658
659 exit (-1);
660 }
661
662 int ADL_rc = ADL_Overdrive6_CurrentStatus_Get (iAdapterIndex, status);
663
664 return (ADL_rc);
665 }
666
667 int hc_ADL_Overdrive_State_Set (HM_LIB hDLL, int iAdapterIndex, int type, ADLOD6StateInfo *state)
668 {
669 ADL_OVERDRIVE6_STATE_SET ADL_Overdrive6_State_Set = (ADL_OVERDRIVE6_STATE_SET) GetProcAddress (hDLL, "ADL_Overdrive6_State_Set");
670
671 if (ADL_Overdrive6_State_Set == NULL)
672 {
673 log_error ("ERROR: %s\n", "ADL_Overdrive6_State_Set() is missing");
674
675 exit (- 1);
676 }
677
678 // sanity checks
679
680 ADLOD6Capabilities caps;
681
682 if ((hc_ADL_Overdrive_Capabilities_Get (hDLL, iAdapterIndex, &caps)) != ADL_OK)
683 {
684 log_info ("ERROR: failed to get ADL device capabilities");
685
686 exit (1);
687 }
688
689 if (state->aLevels[0].iEngineClock < caps.sEngineClockRange.iMin || state->aLevels[1].iEngineClock > caps.sEngineClockRange.iMax)
690 {
691 log_info ("WARN: ADL engine clock outside valid range");
692
693 return ADL_ERR;
694 }
695
696 if (state->aLevels[1].iEngineClock % caps.sEngineClockRange.iStep != 0)
697 {
698 log_info ("WARN: ADL engine step size invalid");
699
700 return ADL_ERR;
701 }
702
703 if (state->aLevels[0].iMemoryClock < caps.sMemoryClockRange.iMin || state->aLevels[1].iMemoryClock > caps.sMemoryClockRange.iMax)
704 {
705 log_info ("WARN: ADL memory clock outside valid range");
706
707 return ADL_ERR;
708 }
709
710 if (state->aLevels[1].iMemoryClock % caps.sMemoryClockRange.iStep != 0)
711 {
712 log_info ("WARN: ADL memory step size invalid");
713
714 return ADL_ERR;
715 }
716
717 int ADL_rc = ADL_Overdrive6_State_Set (iAdapterIndex, type, state);
718
719 return (ADL_rc);
720 }
721
722 int hc_ADL_Overdrive6_TargetTemperatureData_Get (HM_LIB hDLL, int iAdapterIndex, int *cur_temp, int *default_temp)
723 {
724 ADL_OVERDRIVE6_TARGETTEMPERATUREDATA_GET ADL_Overdrive6_TargetTemperatureData_Get = (ADL_OVERDRIVE6_TARGETTEMPERATUREDATA_GET) GetProcAddress (hDLL, "ADL_Overdrive6_TargetTemperatureData_Get");
725
726 if (ADL_Overdrive6_TargetTemperatureData_Get == NULL)
727 {
728 log_error ("ERROR: %s\n", "ADL_Overdrive6_TargetTemperatureData_Get() is missing");
729
730 exit (-1);
731 }
732
733 int ADL_rc = ADL_Overdrive6_TargetTemperatureData_Get (iAdapterIndex, cur_temp, default_temp);
734
735 return (ADL_rc);
736 }