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)
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 #if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__)
254 #define ADL_API_CALL __stdcall
259 typedef void* (ADL_API_CALL
*ADL_MAIN_MALLOC_CALLBACK
)( int );
262 * End of declarations from adl_sdk.h and subheaders
265 typedef int HM_ADAPTER_ADL
;
271 ADLOD6StateInfo state
;
272 ADLOD6PerformanceLevel level
;
274 } ADLOD6MemClockState
;
276 typedef int (ADL_API_CALL
*ADL_MAIN_CONTROL_DESTROY
) ();
277 typedef int (ADL_API_CALL
*ADL_MAIN_CONTROL_CREATE
) (ADL_MAIN_MALLOC_CALLBACK
, int);
278 typedef int (ADL_API_CALL
*ADL_ADAPTER_NUMBEROFADAPTERS_GET
) (int *);
279 typedef int (ADL_API_CALL
*ADL_ADAPTER_ADAPTERINFO_GET
) (LPAdapterInfo
, int);
280 typedef int (ADL_API_CALL
*ADL_DISPLAY_DISPLAYINFO_GET
) (int, int *, ADLDisplayInfo
**, int);
281 typedef int (ADL_API_CALL
*ADL_OVERDRIVE5_TEMPERATURE_GET
) (int, int, ADLTemperature
*);
282 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_TEMPERATURE_GET
) (int, int *);
283 typedef int (ADL_API_CALL
*ADL_OVERDRIVE5_CURRENTACTIVITY_GET
) (int, ADLPMActivity
*);
284 typedef int (ADL_API_CALL
*ADL_OVERDRIVE5_THERMALDEVICES_ENUM
) (int, int, ADLThermalControllerInfo
*);
285 typedef int (ADL_API_CALL
*ADL_ADAPTER_ID_GET
) (int, int *);
286 typedef int (ADL_API_CALL
*ADL_ADAPTER_VIDEOBIOSINFO_GET
) (int, ADLBiosInfo
*);
287 typedef int (ADL_API_CALL
*ADL_OVERDRIVE5_FANSPEEDINFO_GET
) (int, int, ADLFanSpeedInfo
*);
288 typedef int (ADL_API_CALL
*ADL_OVERDRIVE5_FANSPEED_GET
) (int, int, ADLFanSpeedValue
*);
289 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_FANSPEED_GET
) (int, ADLOD6FanSpeedInfo
*);
290 typedef int (ADL_API_CALL
*ADL_OVERDRIVE5_FANSPEED_SET
) (int, int, ADLFanSpeedValue
*);
291 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_FANSPEED_SET
) (int, ADLOD6FanSpeedValue
*);
292 typedef int (ADL_API_CALL
*ADL_OVERDRIVE5_FANSPEEDTODEFAULT_SET
) (int, int);
293 typedef int (ADL_API_CALL
*ADL_OVERDRIVE5_ODPARAMETERS_GET
) (int, ADLODParameters
*);
294 typedef int (ADL_API_CALL
*ADL_OVERDRIVE5_ODPERFORMANCELEVELS_GET
) (int, int, ADLODPerformanceLevels
*);
295 typedef int (ADL_API_CALL
*ADL_OVERDRIVE5_ODPERFORMANCELEVELS_SET
) (int, ADLODPerformanceLevels
*);
296 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_POWERCONTROL_SET
) (int, int);
297 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_POWERCONTROL_GET
) (int, int *, int *);
298 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_POWERCONTROLINFO_GET
) (int, ADLOD6PowerControlInfo
*);
299 typedef int (ADL_API_CALL
*ADL_ADAPTER_ACTIVE_GET
) (int, int *);
300 typedef int (ADL_API_CALL
*ADL_DISPLAYENABLE_SET
) (int, int *, int, int);
301 typedef int (ADL_API_CALL
*ADL_OVERDRIVE_CAPS
) (int, int *, int *, int *);
302 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_CURRENTSTATUS_GET
) (int, ADLOD6CurrentStatus
*);
303 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_STATEINFO_GET
) (int, int, ADLOD6MemClockState
*);
304 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_CAPABILITIES_GET
) (int, ADLOD6Capabilities
*);
305 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_STATE_SET
) (int, int, ADLOD6StateInfo
*);
306 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_POWERCONTROL_CAPS
) (int, int *);
307 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_TARGETTEMPERATUREDATA_GET
) (int, int *, int *);
308 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_TARGETTEMPERATURERANGEINFO_GET
) (int, ADLOD6ParameterRange
*);
309 typedef int (ADL_API_CALL
*ADL_OVERDRIVE6_FANSPEED_RESET
) (int);
315 ADL_MAIN_CONTROL_DESTROY ADL_Main_Control_Destroy
;
316 ADL_MAIN_CONTROL_CREATE ADL_Main_Control_Create
;
317 ADL_ADAPTER_NUMBEROFADAPTERS_GET ADL_Adapter_NumberOfAdapters_Get
;
318 ADL_ADAPTER_ADAPTERINFO_GET ADL_Adapter_AdapterInfo_Get
;
319 ADL_DISPLAY_DISPLAYINFO_GET ADL_Display_DisplayInfo_Get
;
320 ADL_ADAPTER_ID_GET ADL_Adapter_ID_Get
;
321 ADL_ADAPTER_VIDEOBIOSINFO_GET ADL_Adapter_VideoBiosInfo_Get
;
322 ADL_OVERDRIVE5_THERMALDEVICES_ENUM ADL_Overdrive5_ThermalDevices_Enum
;
323 ADL_OVERDRIVE5_TEMPERATURE_GET ADL_Overdrive5_Temperature_Get
;
324 ADL_OVERDRIVE6_TEMPERATURE_GET ADL_Overdrive6_Temperature_Get
;
325 ADL_OVERDRIVE5_CURRENTACTIVITY_GET ADL_Overdrive5_CurrentActivity_Get
;
326 ADL_OVERDRIVE5_FANSPEEDINFO_GET ADL_Overdrive5_FanSpeedInfo_Get
;
327 ADL_OVERDRIVE5_FANSPEED_GET ADL_Overdrive5_FanSpeed_Get
;
328 ADL_OVERDRIVE6_FANSPEED_GET ADL_Overdrive6_FanSpeed_Get
;
329 ADL_OVERDRIVE5_FANSPEED_SET ADL_Overdrive5_FanSpeed_Set
;
330 ADL_OVERDRIVE6_FANSPEED_SET ADL_Overdrive6_FanSpeed_Set
;
331 ADL_OVERDRIVE5_FANSPEEDTODEFAULT_SET ADL_Overdrive5_FanSpeedToDefault_Set
;
332 ADL_OVERDRIVE5_ODPARAMETERS_GET ADL_Overdrive5_ODParameters_Get
;
333 ADL_OVERDRIVE5_ODPERFORMANCELEVELS_GET ADL_Overdrive5_ODPerformanceLevels_Get
;
334 ADL_OVERDRIVE5_ODPERFORMANCELEVELS_SET ADL_Overdrive5_ODPerformanceLevels_Set
;
335 ADL_OVERDRIVE6_POWERCONTROLINFO_GET ADL_Overdrive6_PowerControlInfo_Get
;
336 ADL_OVERDRIVE6_POWERCONTROL_GET ADL_Overdrive6_PowerControl_Get
;
337 ADL_OVERDRIVE6_POWERCONTROL_SET ADL_Overdrive6_PowerControl_Set
;
338 ADL_ADAPTER_ACTIVE_GET ADL_Adapter_Active_Get
;
339 ADL_DISPLAYENABLE_SET ADL_DisplayEnable_Set
;
340 ADL_OVERDRIVE_CAPS ADL_Overdrive_Caps
;
341 ADL_OVERDRIVE6_POWERCONTROL_CAPS ADL_Overdrive6_PowerControl_Caps
;
342 ADL_OVERDRIVE6_CAPABILITIES_GET ADL_Overdrive6_Capabilities_Get
;
343 ADL_OVERDRIVE6_STATEINFO_GET ADL_Overdrive6_StateInfo_Get
;
344 ADL_OVERDRIVE6_CURRENTSTATUS_GET ADL_Overdrive6_CurrentStatus_Get
;
345 ADL_OVERDRIVE6_STATE_SET ADL_Overdrive6_State_Set
;
346 ADL_OVERDRIVE6_TARGETTEMPERATUREDATA_GET ADL_Overdrive6_TargetTemperatureData_Get
;
347 ADL_OVERDRIVE6_TARGETTEMPERATURERANGEINFO_GET ADL_Overdrive6_TargetTemperatureRangeInfo_Get
;
348 ADL_OVERDRIVE6_FANSPEED_RESET ADL_Overdrive6_FanSpeed_Reset
;
352 #define ADL_PTR hm_adl_lib_t
354 int adl_init (ADL_PTR
*lib
);
355 void adl_close (ADL_PTR
*lib
);
357 int hm_ADL_Main_Control_Destroy (ADL_PTR
*adl
);
358 int hm_ADL_Main_Control_Create (ADL_PTR
*adl
, ADL_MAIN_MALLOC_CALLBACK callback
, int iEnumConnectedAdapters
);
359 int hm_ADL_Adapter_NumberOfAdapters_Get (ADL_PTR
*adl
, int *lpNumAdapters
);
360 int hm_ADL_Adapter_AdapterInfo_Get (ADL_PTR
*adl
, LPAdapterInfo lpInfo
, int iInputSize
);
361 int hm_ADL_Display_DisplayInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *iNumDisplays
, ADLDisplayInfo
**lppInfo
, int iForceDetect
);
362 int hm_ADL_Overdrive5_Temperature_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLTemperature
*lpTemperature
);
363 int hm_ADL_Overdrive6_Temperature_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *iTemperature
);
364 int hm_ADL_Overdrive_CurrentActivity_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLPMActivity
*lpActivity
);
365 int hm_ADL_Overdrive_ThermalDevices_Enum (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLThermalControllerInfo
*lpThermalControllerInfo
);
366 int hm_ADL_Adapter_ID_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *lpAdapterID
);
367 int hm_ADL_Adapter_VideoBiosInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLBiosInfo
*lpBiosInfo
);
368 int hm_ADL_Overdrive5_FanSpeedInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLFanSpeedInfo
*lpFanSpeedInfo
);
369 int hm_ADL_Overdrive5_FanSpeed_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLFanSpeedValue
*lpFanSpeedValue
);
370 int hm_ADL_Overdrive6_FanSpeed_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6FanSpeedInfo
*lpFanSpeedInfo
);
371 int hm_ADL_Overdrive5_FanSpeed_Set (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLFanSpeedValue
*lpFanSpeedValue
);
372 int hm_ADL_Overdrive6_FanSpeed_Set (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6FanSpeedValue
*lpFanSpeedValue
);
373 int hm_ADL_Overdrive5_FanSpeedToDefault_Set (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
);
374 int hm_ADL_Overdrive_ODParameters_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLODParameters
*lpOdParameters
);
375 int hm_ADL_Overdrive_ODPerformanceLevels_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iDefault
, ADLODPerformanceLevels
*lpOdPerformanceLevels
);
376 int hm_ADL_Overdrive_ODPerformanceLevels_Set (ADL_PTR
*adl
, int iAdapterIndex
, ADLODPerformanceLevels
*lpOdPerformanceLevels
);
377 int hm_ADL_Overdrive_PowerControlInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6PowerControlInfo
*);
378 int hm_ADL_Overdrive_PowerControl_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *level
);
379 int hm_ADL_Overdrive_PowerControl_Set (ADL_PTR
*adl
, int iAdapterIndex
, int level
);
380 int hm_ADL_Adapter_Active_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *lpStatus
);
381 //int hm_ADL_DisplayEnable_Set (ADL_PTR *adl, int iAdapterIndex, int *lpDisplayIndexList, int iDisplayListSize, int bPersistOnly);
382 int hm_ADL_Overdrive_Caps (ADL_PTR
*adl
, int iAdapterIndex
, int *od_supported
, int *od_enabled
, int *od_version
);
383 int hm_ADL_Overdrive_CurrentStatus_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6CurrentStatus
*status
);
384 int hm_ADL_Overdrive_StateInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, int type
, ADLOD6MemClockState
*state
);
385 int hm_ADL_Overdrive_Capabilities_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6Capabilities
*caps
);
386 int hm_ADL_Overdrive_State_Set (ADL_PTR
*adl
, int iAdapterIndex
, int type
, ADLOD6StateInfo
*state
);
387 int hm_ADL_Overdrive6_PowerControl_Caps (ADL_PTR
*adl
, int iAdapterIndex
, int *lpSupported
);
388 int hm_ADL_Overdrive6_TargetTemperatureData_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *cur_temp
, int *default_temp
);
389 int hm_ADL_Overdrive6_TargetTemperatureRangeInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6ParameterRange
*lpTargetTemperatureInfo
);
390 int hm_ADL_Overdrive6_FanSpeed_Reset (ADL_PTR
*adl
, int iAdapterIndex
);