HWMon mod
[hashcat.git] / include / ext_ADL.h
1 /**
2 * Authors.....: Jens Steube <jens.steube@gmail.com>
3 * Gabriele Gristina <matrix@hashcat.net>
4 *
5 * License.....: MIT
6 */
7
8 #ifndef EXT_ADL_H
9 #define EXT_ADL_H
10
11 #if defined(HAVE_HWMON) && defined(HAVE_ADL)
12
13 #include <common.h>
14
15 /**
16 * Declarations from adl_sdk.h and subheaders
17 */
18
19 #define ADL_OK 0
20 #define ADL_ERR -1
21 #define ADL_ERR_NOT_SUPPORTED -8
22
23 #define ADL_MAX_PATH 256
24
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
29
30 #define ADL_OD6_SETSTATE_PERFORMANCE 0x00000001
31 #define ADL_OD6_GETSTATEINFO_CUSTOM_PERFORMANCE 0x00000004
32 #define ADL_OD6_FANSPEED_TYPE_PERCENT 0x00000001
33
34 typedef struct AdapterInfo
35 {
36 int iSize;
37 int iAdapterIndex;
38 char strUDID[ADL_MAX_PATH];
39 int iBusNumber;
40 int iDeviceNumber;
41 int iFunctionNumber;
42 int iVendorID;
43 char strAdapterName[ADL_MAX_PATH];
44 char strDisplayName[ADL_MAX_PATH];
45 int iPresent;
46
47 #if defined (_WIN32) || defined (_WIN64)
48 int iExist;
49 char strDriverPath[ADL_MAX_PATH];
50 char strDriverPathExt[ADL_MAX_PATH];
51 char strPNPString[ADL_MAX_PATH];
52 int iOSDisplayIndex;
53 #endif /* (_WIN32) || (_WIN64) */
54
55 #if defined (__linux__)
56 int iXScreenNum;
57 int iDrvIndex;
58 char strXScreenConfigName[ADL_MAX_PATH];
59 #endif /* (__linux__) */
60 } AdapterInfo, *LPAdapterInfo;
61
62 typedef struct ADLThermalControllerInfo
63 {
64 int iSize;
65 int iThermalDomain;
66 int iDomainIndex;
67 int iFlags;
68 } ADLThermalControllerInfo;
69
70 typedef struct ADLTemperature
71 {
72 int iSize;
73 int iTemperature;
74 } ADLTemperature;
75
76 typedef struct ADLFanSpeedInfo
77 {
78 int iSize;
79 int iFlags;
80 int iMinPercent;
81 int iMaxPercent;
82 int iMinRPM;
83 int iMaxRPM;
84 } ADLFanSpeedInfo;
85
86 typedef struct ADLFanSpeedValue
87 {
88 int iSize;
89 int iSpeedType;
90 int iFanSpeed;
91 int iFlags;
92 } ADLFanSpeedValue;
93
94 typedef struct ADLDisplayID
95 {
96 int iDisplayLogicalIndex;
97 int iDisplayPhysicalIndex;
98 int iDisplayLogicalAdapterIndex;
99 int iDisplayPhysicalAdapterIndex;
100 } ADLDisplayID, *LPADLDisplayID;
101
102 typedef struct ADLDisplayInfo
103 {
104 ADLDisplayID displayID;
105 int iDisplayControllerIndex;
106 char strDisplayName[ADL_MAX_PATH];
107 char strDisplayManufacturerName[ADL_MAX_PATH];
108 int iDisplayType;
109 int iDisplayOutputType;
110 int iDisplayConnector;
111 int iDisplayInfoMask;
112 int iDisplayInfoValue;
113 } ADLDisplayInfo, *LPADLDisplayInfo;
114
115 typedef struct ADLBiosInfo
116 {
117 char strPartNumber[ADL_MAX_PATH];
118 char strVersion[ADL_MAX_PATH];
119 char strDate[ADL_MAX_PATH];
120 } ADLBiosInfo, *LPADLBiosInfo;
121
122 typedef struct ADLPMActivity
123 {
124 int iSize;
125 int iEngineClock;
126 int iMemoryClock;
127 int iVddc;
128 int iActivityPercent;
129 int iCurrentPerformanceLevel;
130 int iCurrentBusSpeed;
131 int iCurrentBusLanes;
132 int iMaximumBusLanes;
133 int iReserved;
134 } ADLPMActivity;
135
136 typedef struct ADLODParameterRange
137 {
138 int iMin;
139 int iMax;
140 int iStep;
141 } ADLODParameterRange;
142
143 typedef struct ADLODParameters
144 {
145 int iSize;
146 int iNumberOfPerformanceLevels;
147 int iActivityReportingSupported;
148 int iDiscretePerformanceLevels;
149 int iReserved;
150 ADLODParameterRange sEngineClock;
151 ADLODParameterRange sMemoryClock;
152 ADLODParameterRange sVddc;
153 } ADLODParameters;
154
155 typedef struct ADLODPerformanceLevel
156 {
157 int iEngineClock;
158 int iMemoryClock;
159 int iVddc;
160 } ADLODPerformanceLevel;
161
162 typedef struct ADLODPerformanceLevels
163 {
164 int iSize;
165 int iReserved;
166 ADLODPerformanceLevel aLevels [1];
167 } ADLODPerformanceLevels;
168
169 typedef struct ADLOD6FanSpeedInfo
170 {
171 int iSpeedType;
172 int iFanSpeedPercent;
173 int iFanSpeedRPM;
174 int iExtValue;
175 int iExtMask;
176 } ADLOD6FanSpeedInfo;
177
178 typedef struct ADLOD6FanSpeedValue
179 {
180 int iSpeedType;
181 int iFanSpeed;
182 int iExtValue;
183 int iExtMask;
184 } ADLOD6FanSpeedValue;
185
186 typedef struct ADLOD6CurrentStatus
187 {
188 int iEngineClock;
189 int iMemoryClock;
190 int iActivityPercent;
191 int iCurrentPerformanceLevel;
192 int iCurrentBusSpeed;
193 int iCurrentBusLanes;
194 int iMaximumBusLanes;
195 int iExtValue;
196 int iExtMask;
197 } ADLOD6CurrentStatus;
198
199 typedef struct ADLOD6ParameterRange
200 {
201 int iMin;
202 int iMax;
203 int iStep;
204 } ADLOD6ParameterRange;
205
206 typedef struct ADLOD6Capabilities
207 {
208 int iCapabilities;
209 int iSupportedStates;
210 int iNumberOfPerformanceLevels;
211 ADLOD6ParameterRange sEngineClockRange;
212 ADLOD6ParameterRange sMemoryClockRange;
213 int iExtValue;
214 int iExtMask;
215 } ADLOD6Capabilities;
216
217 typedef struct ADLOD6PerformanceLevel
218 {
219 int iEngineClock;
220 int iMemoryClock;
221 } ADLOD6PerformanceLevel;
222
223 typedef struct ADLOD6StateInfo
224 {
225 int iNumberOfPerformanceLevels;
226 int iExtValue;
227 int iExtMask;
228 ADLOD6PerformanceLevel aLevels [1];
229 } ADLOD6StateInfo;
230
231 typedef struct ADLOD6PowerControlInfo
232 {
233 int iMinValue;
234 int iMaxValue;
235 int iStepValue;
236 int iExtValue;
237 int iExtMask;
238 } ADLOD6PowerControlInfo;
239
240 #if !(defined (_WIN32) || defined (_WIN64))
241 #define __stdcall
242 #endif
243
244 typedef void* (__stdcall *ADL_MAIN_MALLOC_CALLBACK )( int );
245
246 /*
247 * End of declarations from adl_sdk.h and subheaders
248 **/
249
250 typedef int HM_ADAPTER_AMD;
251
252 #include <shared.h>
253
254 typedef struct
255 {
256 ADLOD6StateInfo state;
257 ADLOD6PerformanceLevel level;
258
259 } ADLOD6MemClockState;
260
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 *);
293
294 typedef struct
295 {
296 AMD_LIB lib;
297
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;
330
331 } hm_adl_lib_t;
332
333 #define ADL_PTR hm_adl_lib_t
334
335 int adl_init (ADL_PTR *lib);
336 void adl_close (ADL_PTR *lib);
337
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);
370
371 #endif // HAVE_HWMON && HAVE_ADL
372
373 #endif // EXT_ADL_H