2 * Authors.....: Jens Steube <jens.steube@gmail.com>
3 * Gabriele Gristina <matrix@hashcat.net>
11 #if defined(HAVE_HWMON) && defined(HAVE_ADL)
16 * Declarations from adl_sdk.h and subheaders
21 #define ADL_ERR_NOT_SUPPORTED -8
23 #define ADL_MAX_PATH 256
25 #define ADL_DL_FANCTRL_SUPPORTS_PERCENT_READ 1
26 #define ADL_DL_FANCTRL_SUPPORTS_PERCENT_WRITE 2
27 #define ADL_DL_FANCTRL_SPEED_TYPE_PERCENT 1
28 #define ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED 1
30 #define ADL_OD6_SETSTATE_PERFORMANCE 0x00000001
31 #define ADL_OD6_GETSTATEINFO_CUSTOM_PERFORMANCE 0x00000004
32 #define ADL_OD6_FANSPEED_TYPE_PERCENT 0x00000001
34 typedef struct AdapterInfo
38 char strUDID
[ADL_MAX_PATH
];
43 char strAdapterName
[ADL_MAX_PATH
];
44 char strDisplayName
[ADL_MAX_PATH
];
47 #if defined (_WIN32) || defined (_WIN64)
49 char strDriverPath
[ADL_MAX_PATH
];
50 char strDriverPathExt
[ADL_MAX_PATH
];
51 char strPNPString
[ADL_MAX_PATH
];
53 #endif /* (_WIN32) || (_WIN64) */
55 #if defined (__linux__)
58 char strXScreenConfigName
[ADL_MAX_PATH
];
59 #endif /* (__linux__) */
60 } AdapterInfo
, *LPAdapterInfo
;
62 typedef struct ADLThermalControllerInfo
68 } ADLThermalControllerInfo
;
70 typedef struct ADLTemperature
76 typedef struct ADLFanSpeedInfo
86 typedef struct ADLFanSpeedValue
94 typedef struct ADLDisplayID
96 int iDisplayLogicalIndex
;
97 int iDisplayPhysicalIndex
;
98 int iDisplayLogicalAdapterIndex
;
99 int iDisplayPhysicalAdapterIndex
;
100 } ADLDisplayID
, *LPADLDisplayID
;
102 typedef struct ADLDisplayInfo
104 ADLDisplayID displayID
;
105 int iDisplayControllerIndex
;
106 char strDisplayName
[ADL_MAX_PATH
];
107 char strDisplayManufacturerName
[ADL_MAX_PATH
];
109 int iDisplayOutputType
;
110 int iDisplayConnector
;
111 int iDisplayInfoMask
;
112 int iDisplayInfoValue
;
113 } ADLDisplayInfo
, *LPADLDisplayInfo
;
115 typedef struct ADLBiosInfo
117 char strPartNumber
[ADL_MAX_PATH
];
118 char strVersion
[ADL_MAX_PATH
];
119 char strDate
[ADL_MAX_PATH
];
120 } ADLBiosInfo
, *LPADLBiosInfo
;
122 typedef struct ADLPMActivity
128 int iActivityPercent
;
129 int iCurrentPerformanceLevel
;
130 int iCurrentBusSpeed
;
131 int iCurrentBusLanes
;
132 int iMaximumBusLanes
;
136 typedef struct ADLODParameterRange
141 } ADLODParameterRange
;
143 typedef struct ADLODParameters
146 int iNumberOfPerformanceLevels
;
147 int iActivityReportingSupported
;
148 int iDiscretePerformanceLevels
;
150 ADLODParameterRange sEngineClock
;
151 ADLODParameterRange sMemoryClock
;
152 ADLODParameterRange sVddc
;
155 typedef struct ADLODPerformanceLevel
160 } ADLODPerformanceLevel
;
162 typedef struct ADLODPerformanceLevels
166 ADLODPerformanceLevel aLevels
[1];
167 } ADLODPerformanceLevels
;
169 typedef struct ADLOD6FanSpeedInfo
172 int iFanSpeedPercent
;
176 } ADLOD6FanSpeedInfo
;
178 typedef struct ADLOD6FanSpeedValue
184 } ADLOD6FanSpeedValue
;
186 typedef struct ADLOD6CurrentStatus
190 int iActivityPercent
;
191 int iCurrentPerformanceLevel
;
192 int iCurrentBusSpeed
;
193 int iCurrentBusLanes
;
194 int iMaximumBusLanes
;
197 } ADLOD6CurrentStatus
;
199 typedef struct ADLOD6ParameterRange
204 } ADLOD6ParameterRange
;
206 typedef struct ADLOD6Capabilities
209 int iSupportedStates
;
210 int iNumberOfPerformanceLevels
;
211 ADLOD6ParameterRange sEngineClockRange
;
212 ADLOD6ParameterRange sMemoryClockRange
;
215 } ADLOD6Capabilities
;
217 typedef struct ADLOD6PerformanceLevel
221 } ADLOD6PerformanceLevel
;
223 typedef struct ADLOD6StateInfo
225 int iNumberOfPerformanceLevels
;
228 ADLOD6PerformanceLevel aLevels
[1];
231 typedef struct ADLOD6PowerControlInfo
238 } ADLOD6PowerControlInfo
;
240 #if !(defined (_WIN32) || defined (_WIN64))
244 typedef void* (__stdcall
*ADL_MAIN_MALLOC_CALLBACK
)( int );
247 * End of declarations from adl_sdk.h and subheaders
250 typedef int HM_ADAPTER_AMD
;
256 ADLOD6StateInfo state
;
257 ADLOD6PerformanceLevel level
;
259 } ADLOD6MemClockState
;
261 typedef int (*ADL_MAIN_CONTROL_DESTROY
) ();
262 typedef int (*ADL_MAIN_CONTROL_CREATE
) (ADL_MAIN_MALLOC_CALLBACK
, int);
263 typedef int (*ADL_ADAPTER_NUMBEROFADAPTERS_GET
) (int *);
264 typedef int (*ADL_ADAPTER_ADAPTERINFO_GET
) (LPAdapterInfo
, int);
265 typedef int (*ADL_DISPLAY_DISPLAYINFO_GET
) (int, int *, ADLDisplayInfo
**, int);
266 typedef int (*ADL_OVERDRIVE5_TEMPERATURE_GET
) (int, int, ADLTemperature
*);
267 typedef int (*ADL_OVERDRIVE6_TEMPERATURE_GET
) (int, int *);
268 typedef int (*ADL_OVERDRIVE5_CURRENTACTIVITY_GET
) (int, ADLPMActivity
*);
269 typedef int (*ADL_OVERDRIVE5_THERMALDEVICES_ENUM
) (int, int, ADLThermalControllerInfo
*);
270 typedef int (*ADL_ADAPTER_ID_GET
) (int, int *);
271 typedef int (*ADL_ADAPTER_VIDEOBIOSINFO_GET
) (int, ADLBiosInfo
*);
272 typedef int (*ADL_OVERDRIVE5_FANSPEEDINFO_GET
) (int, int, ADLFanSpeedInfo
*);
273 typedef int (*ADL_OVERDRIVE5_FANSPEED_GET
) (int, int, ADLFanSpeedValue
*);
274 typedef int (*ADL_OVERDRIVE6_FANSPEED_GET
) (int, ADLOD6FanSpeedInfo
*);
275 typedef int (*ADL_OVERDRIVE5_FANSPEED_SET
) (int, int, ADLFanSpeedValue
*);
276 typedef int (*ADL_OVERDRIVE6_FANSPEED_SET
) (int, ADLOD6FanSpeedValue
*);
277 typedef int (*ADL_OVERDRIVE5_FANSPEEDTODEFAULT_SET
) (int, int);
278 typedef int (*ADL_OVERDRIVE5_ODPARAMETERS_GET
) (int, ADLODParameters
*);
279 typedef int (*ADL_OVERDRIVE5_ODPERFORMANCELEVELS_GET
) (int, int, ADLODPerformanceLevels
*);
280 typedef int (*ADL_OVERDRIVE5_ODPERFORMANCELEVELS_SET
) (int, ADLODPerformanceLevels
*);
281 typedef int (*ADL_OVERDRIVE6_POWERCONTROL_SET
) (int, int);
282 typedef int (*ADL_OVERDRIVE6_POWERCONTROL_GET
) (int, int *, int *);
283 typedef int (*ADL_OVERDRIVE6_POWERCONTROLINFO_GET
) (int, ADLOD6PowerControlInfo
*);
284 typedef int (*ADL_ADAPTER_ACTIVE_GET
) (int, int *);
285 typedef int (*ADL_DISPLAYENABLE_SET
) (int, int *, int, int);
286 typedef int (*ADL_OVERDRIVE_CAPS
) (int, int *, int *, int *);
287 typedef int (*ADL_OVERDRIVE6_CURRENTSTATUS_GET
) (int, ADLOD6CurrentStatus
*);
288 typedef int (*ADL_OVERDRIVE6_STATEINFO_GET
) (int, int, ADLOD6MemClockState
*);
289 typedef int (*ADL_OVERDRIVE6_CAPABILITIES_GET
) (int, ADLOD6Capabilities
*);
290 typedef int (*ADL_OVERDRIVE6_STATE_SET
) (int, int, ADLOD6StateInfo
*);
291 typedef int (*ADL_OVERDRIVE6_POWERCONTROL_CAPS
) (int, int *);
292 typedef int (*ADL_OVERDRIVE6_TARGETTEMPERATUREDATA_GET
) (int, int *, int *);
298 ADL_MAIN_CONTROL_DESTROY ADL_Main_Control_Destroy
;
299 ADL_MAIN_CONTROL_CREATE ADL_Main_Control_Create
;
300 ADL_ADAPTER_NUMBEROFADAPTERS_GET ADL_Adapter_NumberOfAdapters_Get
;
301 ADL_ADAPTER_ADAPTERINFO_GET ADL_Adapter_AdapterInfo_Get
;
302 ADL_DISPLAY_DISPLAYINFO_GET ADL_Display_DisplayInfo_Get
;
303 ADL_ADAPTER_ID_GET ADL_Adapter_ID_Get
;
304 ADL_ADAPTER_VIDEOBIOSINFO_GET ADL_Adapter_VideoBiosInfo_Get
;
305 ADL_OVERDRIVE5_THERMALDEVICES_ENUM ADL_Overdrive5_ThermalDevices_Enum
;
306 ADL_OVERDRIVE5_TEMPERATURE_GET ADL_Overdrive5_Temperature_Get
;
307 ADL_OVERDRIVE6_TEMPERATURE_GET ADL_Overdrive6_Temperature_Get
;
308 ADL_OVERDRIVE5_CURRENTACTIVITY_GET ADL_Overdrive5_CurrentActivity_Get
;
309 ADL_OVERDRIVE5_FANSPEEDINFO_GET ADL_Overdrive5_FanSpeedInfo_Get
;
310 ADL_OVERDRIVE5_FANSPEED_GET ADL_Overdrive5_FanSpeed_Get
;
311 ADL_OVERDRIVE6_FANSPEED_GET ADL_Overdrive6_FanSpeed_Get
;
312 ADL_OVERDRIVE5_FANSPEED_SET ADL_Overdrive5_FanSpeed_Set
;
313 ADL_OVERDRIVE6_FANSPEED_SET ADL_Overdrive6_FanSpeed_Set
;
314 ADL_OVERDRIVE5_FANSPEEDTODEFAULT_SET ADL_Overdrive5_FanSpeedToDefault_Set
;
315 ADL_OVERDRIVE5_ODPARAMETERS_GET ADL_Overdrive5_ODParameters_Get
;
316 ADL_OVERDRIVE5_ODPERFORMANCELEVELS_GET ADL_Overdrive5_ODPerformanceLevels_Get
;
317 ADL_OVERDRIVE5_ODPERFORMANCELEVELS_SET ADL_Overdrive5_ODPerformanceLevels_Set
;
318 ADL_OVERDRIVE6_POWERCONTROLINFO_GET ADL_Overdrive6_PowerControlInfo_Get
;
319 ADL_OVERDRIVE6_POWERCONTROL_GET ADL_Overdrive6_PowerControl_Get
;
320 ADL_OVERDRIVE6_POWERCONTROL_SET ADL_Overdrive6_PowerControl_Set
;
321 ADL_ADAPTER_ACTIVE_GET ADL_Adapter_Active_Get
;
322 ADL_DISPLAYENABLE_SET ADL_DisplayEnable_Set
;
323 ADL_OVERDRIVE_CAPS ADL_Overdrive_Caps
;
324 ADL_OVERDRIVE6_POWERCONTROL_CAPS ADL_Overdrive6_PowerControl_Caps
;
325 ADL_OVERDRIVE6_CAPABILITIES_GET ADL_Overdrive6_Capabilities_Get
;
326 ADL_OVERDRIVE6_STATEINFO_GET ADL_Overdrive6_StateInfo_Get
;
327 ADL_OVERDRIVE6_CURRENTSTATUS_GET ADL_Overdrive6_CurrentStatus_Get
;
328 ADL_OVERDRIVE6_STATE_SET ADL_Overdrive6_State_Set
;
329 ADL_OVERDRIVE6_TARGETTEMPERATUREDATA_GET ADL_Overdrive6_TargetTemperatureData_Get
;
333 #define ADL_PTR hm_adl_lib_t
335 int adl_init (ADL_PTR
*lib
);
336 void adl_close (ADL_PTR
*lib
);
338 int hm_ADL_Main_Control_Destroy (ADL_PTR
*adl
);
339 int hm_ADL_Main_Control_Create (ADL_PTR
*adl
, ADL_MAIN_MALLOC_CALLBACK callback
, int iEnumConnectedAdapters
);
340 int hm_ADL_Adapter_NumberOfAdapters_Get (ADL_PTR
*adl
, int *lpNumAdapters
);
341 int hm_ADL_Adapter_AdapterInfo_Get (ADL_PTR
*adl
, LPAdapterInfo lpInfo
, int iInputSize
);
342 int hm_ADL_Display_DisplayInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *iNumDisplays
, ADLDisplayInfo
**lppInfo
, int iForceDetect
);
343 int hm_ADL_Overdrive5_Temperature_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLTemperature
*lpTemperature
);
344 int hm_ADL_Overdrive6_Temperature_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *iTemperature
);
345 int hm_ADL_Overdrive_CurrentActivity_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLPMActivity
*lpActivity
);
346 int hm_ADL_Overdrive_ThermalDevices_Enum (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLThermalControllerInfo
*lpThermalControllerInfo
);
347 int hm_ADL_Adapter_ID_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *lpAdapterID
);
348 int hm_ADL_Adapter_VideoBiosInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLBiosInfo
*lpBiosInfo
);
349 int hm_ADL_Overdrive5_FanSpeedInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLFanSpeedInfo
*lpFanSpeedInfo
);
350 int hm_ADL_Overdrive5_FanSpeed_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLFanSpeedValue
*lpFanSpeedValue
);
351 int hm_ADL_Overdrive6_FanSpeed_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6FanSpeedInfo
*lpFanSpeedInfo
);
352 int hm_ADL_Overdrive5_FanSpeed_Set (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
, ADLFanSpeedValue
*lpFanSpeedValue
);
353 int hm_ADL_Overdrive6_FanSpeed_Set (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6FanSpeedValue
*lpFanSpeedValue
);
354 int hm_ADL_Overdrive5_FanSpeedToDefault_Set (ADL_PTR
*adl
, int iAdapterIndex
, int iThermalControllerIndex
);
355 int hm_ADL_Overdrive_ODParameters_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLODParameters
*lpOdParameters
);
356 int hm_ADL_Overdrive_ODPerformanceLevels_Get (ADL_PTR
*adl
, int iAdapterIndex
, int iDefault
, ADLODPerformanceLevels
*lpOdPerformanceLevels
);
357 int hm_ADL_Overdrive_ODPerformanceLevels_Set (ADL_PTR
*adl
, int iAdapterIndex
, ADLODPerformanceLevels
*lpOdPerformanceLevels
);
358 int hm_ADL_Overdrive_PowerControlInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6PowerControlInfo
*);
359 int hm_ADL_Overdrive_PowerControl_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *level
);
360 int hm_ADL_Overdrive_PowerControl_Set (ADL_PTR
*adl
, int iAdapterIndex
, int level
);
361 int hm_ADL_Adapter_Active_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *lpStatus
);
362 //int hm_ADL_DisplayEnable_Set (ADL_PTR *adl, int iAdapterIndex, int *lpDisplayIndexList, int iDisplayListSize, int bPersistOnly);
363 int hm_ADL_Overdrive_Caps (ADL_PTR
*adl
, int iAdapterIndex
, int *od_supported
, int *od_enabled
, int *od_version
);
364 int hm_ADL_Overdrive_CurrentStatus_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6CurrentStatus
*status
);
365 int hm_ADL_Overdrive_StateInfo_Get (ADL_PTR
*adl
, int iAdapterIndex
, int type
, ADLOD6MemClockState
*state
);
366 int hm_ADL_Overdrive_Capabilities_Get (ADL_PTR
*adl
, int iAdapterIndex
, ADLOD6Capabilities
*caps
);
367 int hm_ADL_Overdrive_State_Set (ADL_PTR
*adl
, int iAdapterIndex
, int type
, ADLOD6StateInfo
*state
);
368 int hm_ADL_Overdrive6_PowerControl_Caps (ADL_PTR
*adl
, int iAdapterIndex
, int *lpSupported
);
369 int hm_ADL_Overdrive6_TargetTemperatureData_Get (ADL_PTR
*adl
, int iAdapterIndex
, int *cur_temp
, int *default_temp
);
371 #endif // HAVE_HWMON && HAVE_ADL