2 * Authors.....: Jens Steube <jens.steube@gmail.com>
3 * Gabriele Gristina <matrix@hashcat.net>
4 * magnum <john.magnum@hushmail.com>
12 #if defined(HAVE_HWMON) && defined(HAVE_ADL)
17 * Declarations from adl_sdk.h and subheaders
22 #define ADL_ERR_NOT_SUPPORTED -8
24 #define ADL_MAX_PATH 256
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
31 #define ADL_OD6_SETSTATE_PERFORMANCE 0x00000001
32 #define ADL_OD6_GETSTATEINFO_CUSTOM_PERFORMANCE 0x00000004
33 #define ADL_OD6_FANSPEED_TYPE_PERCENT 0x00000001
35 typedef struct AdapterInfo
39 char strUDID
[ADL_MAX_PATH
];
44 char strAdapterName
[ADL_MAX_PATH
];
45 char strDisplayName
[ADL_MAX_PATH
];
48 #if defined (_WIN32) || defined (_WIN64)
50 char strDriverPath
[ADL_MAX_PATH
];
51 char strDriverPathExt
[ADL_MAX_PATH
];
52 char strPNPString
[ADL_MAX_PATH
];
54 #endif /* (_WIN32) || (_WIN64) */
56 #if defined (__linux__)
59 char strXScreenConfigName
[ADL_MAX_PATH
];
60 #endif /* (__linux__) */
61 } AdapterInfo
, *LPAdapterInfo
;
63 typedef struct ADLThermalControllerInfo
69 } ADLThermalControllerInfo
;
71 typedef struct ADLTemperature
77 typedef struct ADLFanSpeedInfo
87 typedef struct ADLFanSpeedValue
95 typedef struct ADLDisplayID
97 int iDisplayLogicalIndex
;
98 int iDisplayPhysicalIndex
;
99 int iDisplayLogicalAdapterIndex
;
100 int iDisplayPhysicalAdapterIndex
;
101 } ADLDisplayID
, *LPADLDisplayID
;
103 typedef struct ADLDisplayInfo
105 ADLDisplayID displayID
;
106 int iDisplayControllerIndex
;
107 char strDisplayName
[ADL_MAX_PATH
];
108 char strDisplayManufacturerName
[ADL_MAX_PATH
];
110 int iDisplayOutputType
;
111 int iDisplayConnector
;
112 int iDisplayInfoMask
;
113 int iDisplayInfoValue
;
114 } ADLDisplayInfo
, *LPADLDisplayInfo
;
116 typedef struct ADLBiosInfo
118 char strPartNumber
[ADL_MAX_PATH
];
119 char strVersion
[ADL_MAX_PATH
];
120 char strDate
[ADL_MAX_PATH
];
121 } ADLBiosInfo
, *LPADLBiosInfo
;
123 typedef struct ADLPMActivity
129 int iActivityPercent
;
130 int iCurrentPerformanceLevel
;
131 int iCurrentBusSpeed
;
132 int iCurrentBusLanes
;
133 int iMaximumBusLanes
;
137 typedef struct ADLODParameterRange
142 } ADLODParameterRange
;
144 typedef struct ADLODParameters
147 int iNumberOfPerformanceLevels
;
148 int iActivityReportingSupported
;
149 int iDiscretePerformanceLevels
;
151 ADLODParameterRange sEngineClock
;
152 ADLODParameterRange sMemoryClock
;
153 ADLODParameterRange sVddc
;
156 typedef struct ADLODPerformanceLevel
161 } ADLODPerformanceLevel
;
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]
169 typedef struct ADLODPerformanceLevels
173 ADLODPerformanceLevel aLevels
[2];
174 } ADLODPerformanceLevels
;
176 typedef struct ADLOD6FanSpeedInfo
179 int iFanSpeedPercent
;
183 } ADLOD6FanSpeedInfo
;
185 typedef struct ADLOD6FanSpeedValue
191 } ADLOD6FanSpeedValue
;
193 typedef struct ADLOD6CurrentStatus
197 int iActivityPercent
;
198 int iCurrentPerformanceLevel
;
199 int iCurrentBusSpeed
;
200 int iCurrentBusLanes
;
201 int iMaximumBusLanes
;
204 } ADLOD6CurrentStatus
;
206 typedef struct ADLOD6ParameterRange
211 } ADLOD6ParameterRange
;
213 typedef struct ADLOD6Capabilities
216 int iSupportedStates
;
217 int iNumberOfPerformanceLevels
;
218 ADLOD6ParameterRange sEngineClockRange
;
219 ADLOD6ParameterRange sMemoryClockRange
;
222 } ADLOD6Capabilities
;
224 typedef struct ADLOD6PerformanceLevel
228 } ADLOD6PerformanceLevel
;
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]
236 typedef struct ADLOD6StateInfo
238 int iNumberOfPerformanceLevels
;
241 ADLOD6PerformanceLevel aLevels
[2];
244 typedef struct ADLOD6PowerControlInfo
251 } ADLOD6PowerControlInfo
;
253 /* __stdcall definition, platform-dependent:
254 * - Already defined on Windows compilers
255 * - GCC has a suitable equivalent on 32-bit platforms
256 * - Leave it blank for other platforms/compilers
258 #if !(defined (_WIN32) || defined (_WIN64))
259 #if (defined(__GNUC__) && defined(__i386__))
260 #define __stdcall __attribute__((stdcall))
263 #endif /* GCC 32-bit */
264 #endif /* Not windows */
266 typedef void* (__stdcall
*ADL_MAIN_MALLOC_CALLBACK
)( int );
269 * End of declarations from adl_sdk.h and subheaders
272 typedef int HM_ADAPTER_AMD
;
278 ADLOD6StateInfo state
;
279 ADLOD6PerformanceLevel level
;
281 } ADLOD6MemClockState
;
283 typedef int (*ADL_MAIN_CONTROL_DESTROY
) ();
284 typedef int (*ADL_MAIN_CONTROL_CREATE
) (ADL_MAIN_MALLOC_CALLBACK
, int);
285 typedef int (*ADL_ADAPTER_NUMBEROFADAPTERS_GET
) (int *);
286 typedef int (*ADL_ADAPTER_ADAPTERINFO_GET
) (LPAdapterInfo
, int);
287 typedef int (*ADL_DISPLAY_DISPLAYINFO_GET
) (int, int *, ADLDisplayInfo
**, int);
288 typedef int (*ADL_OVERDRIVE5_TEMPERATURE_GET
) (int, int, ADLTemperature
*);
289 typedef int (*ADL_OVERDRIVE6_TEMPERATURE_GET
) (int, int *);
290 typedef int (*ADL_OVERDRIVE5_CURRENTACTIVITY_GET
) (int, ADLPMActivity
*);
291 typedef int (*ADL_OVERDRIVE5_THERMALDEVICES_ENUM
) (int, int, ADLThermalControllerInfo
*);
292 typedef int (*ADL_ADAPTER_ID_GET
) (int, int *);
293 typedef int (*ADL_ADAPTER_VIDEOBIOSINFO_GET
) (int, ADLBiosInfo
*);
294 typedef int (*ADL_OVERDRIVE5_FANSPEEDINFO_GET
) (int, int, ADLFanSpeedInfo
*);
295 typedef int (*ADL_OVERDRIVE5_FANSPEED_GET
) (int, int, ADLFanSpeedValue
*);
296 typedef int (*ADL_OVERDRIVE6_FANSPEED_GET
) (int, ADLOD6FanSpeedInfo
*);
297 typedef int (*ADL_OVERDRIVE5_FANSPEED_SET
) (int, int, ADLFanSpeedValue
*);
298 typedef int (*ADL_OVERDRIVE6_FANSPEED_SET
) (int, ADLOD6FanSpeedValue
*);
299 typedef int (*ADL_OVERDRIVE5_FANSPEEDTODEFAULT_SET
) (int, int);
300 typedef int (*ADL_OVERDRIVE5_ODPARAMETERS_GET
) (int, ADLODParameters
*);
301 typedef int (*ADL_OVERDRIVE5_ODPERFORMANCELEVELS_GET
) (int, int, ADLODPerformanceLevels
*);
302 typedef int (*ADL_OVERDRIVE5_ODPERFORMANCELEVELS_SET
) (int, ADLODPerformanceLevels
*);
303 typedef int (*ADL_OVERDRIVE6_POWERCONTROL_SET
) (int, int);
304 typedef int (*ADL_OVERDRIVE6_POWERCONTROL_GET
) (int, int *, int *);
305 typedef int (*ADL_OVERDRIVE6_POWERCONTROLINFO_GET
) (int, ADLOD6PowerControlInfo
*);
306 typedef int (*ADL_ADAPTER_ACTIVE_GET
) (int, int *);
307 typedef int (*ADL_DISPLAYENABLE_SET
) (int, int *, int, int);
308 typedef int (*ADL_OVERDRIVE_CAPS
) (int, int *, int *, int *);
309 typedef int (*ADL_OVERDRIVE6_CURRENTSTATUS_GET
) (int, ADLOD6CurrentStatus
*);
310 typedef int (*ADL_OVERDRIVE6_STATEINFO_GET
) (int, int, ADLOD6MemClockState
*);
311 typedef int (*ADL_OVERDRIVE6_CAPABILITIES_GET
) (int, ADLOD6Capabilities
*);
312 typedef int (*ADL_OVERDRIVE6_STATE_SET
) (int, int, ADLOD6StateInfo
*);
313 typedef int (*ADL_OVERDRIVE6_POWERCONTROL_CAPS
) (int, int *);
314 typedef int (*ADL_OVERDRIVE6_TARGETTEMPERATUREDATA_GET
) (int, int *, int *);
320 ADL_MAIN_CONTROL_DESTROY ADL_Main_Control_Destroy
;
321 ADL_MAIN_CONTROL_CREATE ADL_Main_Control_Create
;
322 ADL_ADAPTER_NUMBEROFADAPTERS_GET ADL_Adapter_NumberOfAdapters_Get
;
323 ADL_ADAPTER_ADAPTERINFO_GET ADL_Adapter_AdapterInfo_Get
;
324 ADL_DISPLAY_DISPLAYINFO_GET ADL_Display_DisplayInfo_Get
;
325 ADL_ADAPTER_ID_GET ADL_Adapter_ID_Get
;
326 ADL_ADAPTER_VIDEOBIOSINFO_GET ADL_Adapter_VideoBiosInfo_Get
;
327 ADL_OVERDRIVE5_THERMALDEVICES_ENUM ADL_Overdrive5_ThermalDevices_Enum
;
328 ADL_OVERDRIVE5_TEMPERATURE_GET ADL_Overdrive5_Temperature_Get
;
329 ADL_OVERDRIVE6_TEMPERATURE_GET ADL_Overdrive6_Temperature_Get
;
330 ADL_OVERDRIVE5_CURRENTACTIVITY_GET ADL_Overdrive5_CurrentActivity_Get
;
331 ADL_OVERDRIVE5_FANSPEEDINFO_GET ADL_Overdrive5_FanSpeedInfo_Get
;
332 ADL_OVERDRIVE5_FANSPEED_GET ADL_Overdrive5_FanSpeed_Get
;
333 ADL_OVERDRIVE6_FANSPEED_GET ADL_Overdrive6_FanSpeed_Get
;
334 ADL_OVERDRIVE5_FANSPEED_SET ADL_Overdrive5_FanSpeed_Set
;
335 ADL_OVERDRIVE6_FANSPEED_SET ADL_Overdrive6_FanSpeed_Set
;
336 ADL_OVERDRIVE5_FANSPEEDTODEFAULT_SET ADL_Overdrive5_FanSpeedToDefault_Set
;
337 ADL_OVERDRIVE5_ODPARAMETERS_GET ADL_Overdrive5_ODParameters_Get
;
338 ADL_OVERDRIVE5_ODPERFORMANCELEVELS_GET ADL_Overdrive5_ODPerformanceLevels_Get
;
339 ADL_OVERDRIVE5_ODPERFORMANCELEVELS_SET ADL_Overdrive5_ODPerformanceLevels_Set
;
340 ADL_OVERDRIVE6_POWERCONTROLINFO_GET ADL_Overdrive6_PowerControlInfo_Get
;
341 ADL_OVERDRIVE6_POWERCONTROL_GET ADL_Overdrive6_PowerControl_Get
;
342 ADL_OVERDRIVE6_POWERCONTROL_SET ADL_Overdrive6_PowerControl_Set
;
343 ADL_ADAPTER_ACTIVE_GET ADL_Adapter_Active_Get
;
344 ADL_DISPLAYENABLE_SET ADL_DisplayEnable_Set
;
345 ADL_OVERDRIVE_CAPS ADL_Overdrive_Caps
;
346 ADL_OVERDRIVE6_POWERCONTROL_CAPS ADL_Overdrive6_PowerControl_Caps
;
347 ADL_OVERDRIVE6_CAPABILITIES_GET ADL_Overdrive6_Capabilities_Get
;
348 ADL_OVERDRIVE6_STATEINFO_GET ADL_Overdrive6_StateInfo_Get
;
349 ADL_OVERDRIVE6_CURRENTSTATUS_GET ADL_Overdrive6_CurrentStatus_Get
;
350 ADL_OVERDRIVE6_STATE_SET ADL_Overdrive6_State_Set
;
351 ADL_OVERDRIVE6_TARGETTEMPERATUREDATA_GET ADL_Overdrive6_TargetTemperatureData_Get
;
355 #define ADL_PTR hm_adl_lib_t
357 int adl_init (ADL_PTR
*lib
);
358 void adl_close (ADL_PTR
*lib
);
360 int hm_ADL_Main_Control_Destroy (ADL_PTR
*adl
);
361 int hm_ADL_Main_Control_Create (ADL_PTR
*adl
, ADL_MAIN_MALLOC_CALLBACK callback
, int iEnumConnectedAdapters
);
362 int hm_ADL_Adapter_NumberOfAdapters_Get (ADL_PTR
*adl
, int *lpNumAdapters
);
363 int hm_ADL_Adapter_AdapterInfo_Get (ADL_PTR
*adl
, LPAdapterInfo lpInfo
, int iInputSize
);
364 int hm_ADL_Display_DisplayInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *iNumDisplays
, ADLDisplayInfo
**lppInfo
, int iForceDetect
);
365 int hm_ADL_Overdrive5_Temperature_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLTemperature
*lpTemperature
);
366 int hm_ADL_Overdrive6_Temperature_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *iTemperature
);
367 int hm_ADL_Overdrive_CurrentActivity_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLPMActivity
*lpActivity
);
368 int hm_ADL_Overdrive_ThermalDevices_Enum (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLThermalControllerInfo
*lpThermalControllerInfo
);
369 int hm_ADL_Adapter_ID_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *lpAdapterID
);
370 int hm_ADL_Adapter_VideoBiosInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLBiosInfo
*lpBiosInfo
);
371 int hm_ADL_Overdrive5_FanSpeedInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLFanSpeedInfo
*lpFanSpeedInfo
);
372 int hm_ADL_Overdrive5_FanSpeed_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLFanSpeedValue
*lpFanSpeedValue
);
373 int hm_ADL_Overdrive6_FanSpeed_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6FanSpeedInfo
*lpFanSpeedInfo
);
374 int hm_ADL_Overdrive5_FanSpeed_Set (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLFanSpeedValue
*lpFanSpeedValue
);
375 int hm_ADL_Overdrive6_FanSpeed_Set (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6FanSpeedValue
*lpFanSpeedValue
);
376 int hm_ADL_Overdrive5_FanSpeedToDefault_Set (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
);
377 int hm_ADL_Overdrive_ODParameters_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLODParameters
*lpOdParameters
);
378 int hm_ADL_Overdrive_ODPerformanceLevels_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iDefault
, ADLODPerformanceLevels
*lpOdPerformanceLevels
);
379 int hm_ADL_Overdrive_ODPerformanceLevels_Set (ADL_PTR
*adl
, int iAdapterIndex
, ADLODPerformanceLevels
*lpOdPerformanceLevels
);
380 int hm_ADL_Overdrive_PowerControlInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6PowerControlInfo
*);
381 int hm_ADL_Overdrive_PowerControl_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *level
);
382 int hm_ADL_Overdrive_PowerControl_Set (ADL_PTR
*adl
, int iAdapterIndex
, int level
);
383 int hm_ADL_Adapter_Active_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *lpStatus
);
384 //int hm_ADL_DisplayEnable_Set (ADL_PTR *adl, int iAdapterIndex, int *lpDisplayIndexList, int iDisplayListSize, int bPersistOnly);
385 int hm_ADL_Overdrive_Caps (ADL_PTR
*adl
, int iAdapterIndex
, int *od_supported
, int *od_enabled
, int *od_version
);
386 int hm_ADL_Overdrive_CurrentStatus_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6CurrentStatus
*status
);
387 int hm_ADL_Overdrive_StateInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, int type
, ADLOD6MemClockState
*state
);
388 int hm_ADL_Overdrive_Capabilities_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6Capabilities
*caps
);
389 int hm_ADL_Overdrive_State_Set (ADL_PTR
*adl
, int iAdapterIndex
, int type
, ADLOD6StateInfo
*state
);
390 int hm_ADL_Overdrive6_PowerControl_Caps (ADL_PTR
*adl
, int iAdapterIndex
, int *lpSupported
);
391 int hm_ADL_Overdrive6_TargetTemperatureData_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *cur_temp
, int *default_temp
);
393 #endif // HAVE_HWMON && HAVE_ADL